Drools的使用与基础语法

来源:互联网 发布:mysql 集群 phxsql 编辑:程序博客网 时间:2024/06/08 07:25

最近在做一个文本分析的项目,在技术选型上使用Drools规则引擎。

尝试总结如下:


drools规则文件------语法
Drools 分为两个主要部分:构建(Authoring)和运行时(Runtime)
其他部分可以使用规则文本支持语言的脚步:目前支持mvel和Java。默认使用Java


//KnowledgeBase 是 Drools 提供的用来收集应用当中知识(knowledge)定义的知识库对象,
//Right Hand Side ( RHS )就是规则的结果( consequence )或者动作( action )部分。
//Fact 是指在Drools 规则应用当中,将一个普通的JavaBean 插入到规则的WorkingMemory当中后的对象。


语法规则:


package com.*;//一个 Package 代表了一个命名空间( namespace ),用来使给定的规则组之间保持唯一性。 Package 的名字本身就是命名空间,并且与文件或文件夹并无关联。
//可以将来自不同规则源的规则装配在一起,前提是这些规则必须处在同一个命名空间中。尽管如此,一个通常的结构是将处于同一个命名空间中的所有规则都放在同一个相同的文件中
import com.*;//Import 语句的使用很像 Java 中的 import 语句。你需要为你要在规则中使用的对象,指定完整的路径和类名。 Drools 自动从相同命名的 java 包中引入所需的类


dialect "mvel";//方言


//全局变量的定义:eg: global  java.util.List ruleList;//规则校验结果         
                      global  java.util.List errorMsgList;//错误信息列表
     //Global 就是全局变量


rule "规则名称";//一个规则在一个 package 中必须要有唯一的名字。如果一个名字中含有空格,那就需要将名字放在双引号中(最好总是使用双引号)。


agenda-group "group1"
//默认值: MAIN


//类型: String


//Agenda-group 允许用户对Agenda进行分组,已提供更多的执行控制。只是具有焦点的组中的Activation才会被激发(file)


auto-focus    true   
//默认值: false


//类型: boolean


//当一个规则被Active(即Activation被创建了)如果这个 rule 的 auto-focus 值为 true 并且这个 rule 的 agenda-group 没有焦点,此时这个 Activation 会被给予焦点,允许这个 Activation 有 fire 的潜在可能。


no-loop true; //默认值为:false ,类型:boolean 作用: 当在RHS中修改了一个fact,这可能引起这个rule再次被activate,引起递归。将no-loop设为true,就可以防止这个rule的Activation再次被创建。


salience


//默认值: 0


//类型: int 
//Salience 是优先级的一种形式。当处于 Activation 队列中时,拥有高 salience 值的 rule 将具有更高的优先级。


lock-on-active true //重复执行锁定(组内规则)


when 


条件(true)


then 


结果(只有当条件满足的时候才执行)


end






Numeric
所有标准的 Java 数字基本类型都可以用。


有效操作符:


·       ==
·       !=
·       >
·       <
·       >=
·       <=




Date
当前只对“ dd-mm-yyyy ”的日期格式提供默认支持。你可以通过指定 drools.dateformat 系统属性,来改变默认的日期格式。如果需要更多的控制,要用谓词约束( Predicate Constraint )。


有效操作符:


·       ==
·       !=
·       >
·       <
·       >=
·       <=




String
可以使用任何有效的 Java String 。


有效操作符:


·       ==
·       !=


Boolean
只能用 “ true ”或“ false ”。 0 和 1 不能被识别,而且 Cheese(smelly) 也是不被允许的。


有效操作符:


·       ==
·       !=




“eval”  : Eval is essentially a catch all which allows any semantic code (that returns a primitive boolean) to be executed. 在表达式中可以引用在 LHS 中出现的变量,和在 rule package 中的 Functions 。一个 Eval 应该是 LHS 中的最后一个 Conditional Element 。在一个 rule 中,你可以有多个 eval 。


Eval 不能被索引,因此不能像 Field Constraints 那样被优化。尽管如此,当 Functions 的返回值一直在变化时,应该使用 Eval ,因为这在 Field Constraints 中时不允许的。如果规则中的其他条件都匹配,一个 eval 每次都要被检查。(现在还不理解到底 eval 要怎么用?)
















0 0
原创粉丝点击