drools的规则文件

来源:互联网 发布:小镇姑娘 知乎 编辑:程序博客网 时间:2024/05/16 09:43
1.规则文件语法和支持的语言
规则文件有自己的语法用于绑定参数,条件判断跟 function ,queries等构成规则文件部分
其它部分可以使用规则文本支持语言的脚步:目前支持:mvelJava。默认使用java.
不管使用那种语言,要遵守那种语言的语法

示例:
package com.demo

rule "It of valid age"
when
$a : Applicant( age < 18 )
then 
$a.setValid(false);
end

note:
黑体字是规则文件关键字
该颜色字体是规则文件语法
该颜色字体是java语法
$a是规则内的变量,在规则内对该规则变量操作

2.规则文件构成
package(规则文件所在包*)
import(导入java 包)
globals
function(函数)
queries(查找)
rules(规则*)

3.规则引擎处理规则文件流程 
输入参数 ---> 引擎读规则文件并绑定输入参数 ---> 处理规则满足条件则按结果部分逻辑处理

4.编写规则文件思路
import 必须的包和类,和Java静态方法,语句要以;号结束等
java属性处理语句只能出现rule的结果部分,而在条件部分则只能是创建语句
在条件部分要使用规则引擎的语法


5.语法介绍
  • 绑定参数语法:
 $[绑定变量名] : Object([field 约束]) 

示例:
$add : Address() add 绑定外面传入的Address对象
$add : new Address() add 绑定新建的Address对象
$name:String(); 传入一个字符串与name绑定

  • 条件判断
$绑定变量名 :绑定类型(属性1 比较符合 比较值)

note:
括号内可以包含多个属性比较有 “&&”、 “||” , “,”  
“&&”表示and、 “||”表示or , “,”表示连接

示例:
$app:Applicant(name == "依晨",age<30)   
#必须是满足name=依晨,age<30的Applicant

   结果部分处理
      1.通过insert,update和 retract对当前 Working Memory 中的 Fact 对象进行新增、删除或者是修改。

        note:
一旦调用insert,update和 retract宏函数,那么 Drools会重新与所有的规则再重新匹配一次,对于没有设
置 no-loop 属性为 true的规则,如果条件满足,不管其之前是否执行过都会再执行一次

  • insert
作用:
在Java类当中调用StatefulKnowledgeSession对象的insert方法的作用相同

语法:
insert(new Object()); 

示例:
rule "rule1"
salience 1
when
eval(true);
then 
System.out.println("rule1");
Applicant app = new Applicant("kaka",24);
#insert(app);
drools.insert(app);
end

  • update 
作用:
update函数意义与其名称一样,用来实现对当前Working Memory当中的Fact进行更

语法:
update(new Object());

示例:
rule "rule2"
    salience 1
    #no-loop true 不会循环
 when
       $app:Applicant(name == "依晨",age<30)
 then
       #update方法2
       Applicant app = new Applicant("依晨",$app.getAge() + 1);
       update(drools.getWorkingMemory().getFactHandleByIdentity($app),app); 
    
       #update方法1
       #$app.setAge($app.getAge() + 1);
       #update($app);
       System.out.println("------" + $app.getName()+"("+ $app.getAge() + ")");
end

  • retract
作用:
和 StatefulSession 的 retract方法一样,宏函数 retract也是用来将 Working Memory当中
某个 Fact对象从Working Memory当中删除

语法:
update(new Object());

示例: 
rule "rule2"
salience 1
when
$app:Applicant(name == "依晨");
then 
#retract($app);
drools.retract($app);
end

note:
除了insert,update和 retract函数外还有drools 宏对象来处理规则.
还可以通过$绑定变量名.绑定Java对象的方法
$app.setAge($app.getAge() + 1);
0 0
原创粉丝点击