从Drools 6.3中的xml读取规则

时间:2016-01-04 14:59:25

标签: java xml drools

我尝试使用drools 6.3从XML读取规则。我试图找到一些例子,但我没有发现任何有价值的东西,只是将xml转换为drl的一个例子,因为我使用了较新版本的drools而无法工作......

我将eclipse生成的drl示例转换为xml并将其替换为此xml。它看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<package name="com.sample" xmlns="http://drools.org/drools-5.2" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:schemaLocation="http://drools.org/drools-5.2 drools.org/drools-5.2.xsd">
    <import name="com.sample.DroolsTest.Message"/>
    <rule name="Hello World">
        <lhs>
            <pattern identifier="m" object-type="Message">
                <expr>
                    status == Message.HELLO
                </expr>
                <expr>
                    myMessage : message
                </expr>
            </pattern>
        </lhs>
        <rhs>
            System.out.println( myMessage );
            m.setMessage( &quot;Goodbye cruel world&quot; );
            m.setStatus( Message.GOODBYE );
            update( m );
        </rhs>
    </rule>
    <rule name="GoodBye">
        <lhs>
            <pattern object-type="Message">
                <expr>
                    status == Message.GOODBYE
                </expr>
                <expr>
                    myMessage : message
                </expr>
            </pattern>
        </lhs>
        <rhs>
            System.out.println( myMessage );
        </rhs>
    </rule>
</package>

现在drl像这样加载:

KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-rules");

但是这并没有加载xml文件。

有没有任何示例如何加载xml?我是否必须将其转换为drl?

1 个答案:

答案 0 :(得分:0)

DRL的XML版本的开发已在几个版本之前正式终止,大约在5.2,IIRC。 DRL已经发展成为一种非常复杂的语言,并且保持其XML对应的最新版本已经证明是一项相当大但没有经过深思熟虑的工作。

此外,由于显而易见的原因,转换为独立于供应商的Rule-ML(针对子集)DRL并不是供应商急切追求的。

从您的问题中可以看出为什么您对XML中的规则创作感兴趣。如果你添加一些问题背景,可能会有更多的帮助。