Drools语法

一、语法

规则语法:

package: package的名字是随意的,不必必须对应物理路径。

import : 导入外部变量,可以是类或静态方法。

rule: 定义一个规则

    rule分为三部分:

      1:属性部分:定义当前规则执行的一些属性,比如是否可被重复执行、过期时间、生效时间等。

      2:条件部分(LHS):定义当前规则的条件。

      3:结果部分(RHS):当前规则条件满足后执行的操作。(可以写JAVA代码)

 

属性部分:

no-loop : 当前规则是否不允许多次循环执行(默认:false)。

lock-on-active true : 控制当前的规则只会被执行一次。

date-expires:规则的过期时间。

date-effective:规则的生效时间

salience:优先级,数值越大越先执行。

 

条件部分:

when : 规则条件开始,条件可以单个也可以多个:

when
    eval(true)
    $customer:Customer()
    $message:Message(status==0)

上述三个条件,只有三个条件全部匹配时候才能执行RHS部分:

$message:当前条件的引用变量。

$message:Message(status==0):当前Message对象中的status属性等于0。

Message{
    int status;
    List<String> names;
}

$message:Message(status==0 && names contains "网易" && names.size >= 1)

 

比较操作符:

> >= < <= == != contains / not contains / memberOf / not memberOf / matches / not matches

contains : 对比是否包含操作,操作的被包含目标可以是一个复杂对象也可以是一个简单值。

not contains : 与contains相反

memberOf: 判断某个Fact属性值是否在某个集合中,与contains不同的是,它被比较的对象是一个集合。(可以理解为针对集合的contains)

matches: 正则表达式匹配,不用考虑‘/’ 的转义问题

 

规则结果部分:

    当规则条件满足,则进入规则结果执行部分,这部分可以是纯java代码:

then
    System.out.println("OK");
end

也可以调用Fact的方法:如$message:execute();

结果部分的方法:

insert : 往当前workingMemory中插入一个新的Fact对象,会触发规则引擎再次执行,除非使用no-loop限定;

update: 更新

modify: 修改,与update语法不同,结果都是更新操作。

retract: 删除

定义方法:

RHS也可以调用规则文件中定义的方法,

function void console{
    System.out.println();
    SyringUtils.getId();// StringUtils必须import, getId()必须是静态方法
}

定义类:

declare : 可以在规则文件中定义一个class, 使用方法与java对象相似。

可以在RHS部分new一个并且使用get/set方法去操作其属性。

declare Address
  @author(sunf)  //元数据,仅用于描述信息
  @createTime(2017-03-23)
  city : String @maxLengh(100)
  postno : int
end

定义好一个class后,可以在RHS部分使用new 来定义一个对象。

Address address = new Address();

 

更对语法

http://wenku.baidu.com/view/a6516373f242336c1eb95e7c.html

 

 

-----------------

no-loop:在DRL的then子句中,如果出现insert、update、modify、retract等方法对实例(Fact)做出修改时,当前规则执行完成后会触发该规则使其再执行一次;将no-loop设置为true则会强制规则在出现上述方法的情况下也只执行一次
boolean型,默认值为false

ruleflow-group:基于ruleflow将规则分组
string型,无默认值

lock-on-active:规则可能会被其它规则调用而反复执行;将lock-on-active置为true可以强制使规则在任何条件下都只会执行一次,可视为no-loop的加强版
boolean型,默认值为false

salience:设置当前这条规则的执行优先级,数字越小优先级越高
int型,默认值为0

agenda-group:基于Agenda将规则分组;只有当某个Agenda组获取到焦点(focus)时,该组的规则才会被执行
string型,默认值为MAIN

auto-focus:与agenda-group配合使用,设置焦点的是否可以自动获取
boolean型,默认值为false

activation-group:不基于任何条件将规则分组
string型,无默认值

dialect:设置规则所使用的语言
string型,默认值根据package值判断,值域为java或mvel

data-effective:当前规则的生效时间
string型,无默认值;值中需包含日期和时间

data-expires:当前规则的失效时间
string型,无默认值;值中需包含日期和时间

duration:设置DRL文件开始执行之后延迟多长时间开始执行这条规则
long型,无默认值

 

转载于:https://my.oschina.net/dlam/blog/865727

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值