Drools的进一步研究.doc

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Drools的进一步研究

Drools的进一步研究 ——徐建军 2006-09-24 1. 概述 1 2. 规则表示 2 2.1. Package 2 2.2. Rule 4 2.2.1. 规则属性 5 2.2.2. LHS 6 2.2.3. RHS 8 2.3. Query 9 2.4. DSL 10 2.5. XML 11 2.6. 决策表 13 3. 规则编译 15 4. Rete算法 18 4.1. Rete网络的构成 18 4.2. 基于Rete网络的前向推理过程 24 5. Leaps算法 24 5.1. Leaps推理机的构造过程 26 5.2. 事实对象的操作过程 31 5.2.1. 事实对象的断言过程 31 5.2.2. 事实对象的收回过程 32 5.2.3. 事实对象的修改过程 33 5.3. 基于Leaps推理机的前向推理过程 33 5.4. Droosl 3的Leaps算法的说明 37 6. RuleBase 38 7. WoringMemory 39 8. Agenda 43 9. Drools的下一步发展 45 10. 结论 46 概述 在介绍规则系统的文章中,经常提到的一句话是:任何事物都会改变,唯一不变的是变化。Drools同样也不例外。目前Drools已经从Codehaus中独立出来,转投JBoss这座靠山,目前最新发布版本是3.0.4。目前名称叫JBoss Rules,但为了描述方便,这里仍称为Drools。Drools 3与前面分析的2.5版本比较在很多方面都发生了改变。图1描述了目前Drools规则引擎的构成。 图1 Drools规则引擎的构成 从图上可以发现最显著的变化是引擎的模式匹配(Pattern Matcher)算法除了实现了Rete算法,还实现了Leaps算法。但是其它模块在具体细节上也有改变或者改进。本文主要针对Drools 2.5版本,介绍Drools 3新的实现方法和机制。并且只对这些变化较大的部分进行介绍,而忽略了相同的或者有细微改变但实现原理相通的地方。理解不清的部分可以参照以前的分析文档。 本文首先介绍了Drools 3中一个主要变化:Drools独立的规则定义语言,其中还包括DSl和决策表。然后介绍Drools 3的规则编译过程。重点分析Drools 3中的两种推理算法——Rete算法和Leaps算法,对于Rete算法只介绍了Drools 3和Drools 2.5实现的不同之处,由于Leaps算法是Drools 3新引进的算法,所以对它进行了详细分析。最后分几小节介绍Drools 3在RuleBase、WorkingMemory和Agenda三个部分所进行的主要改进,最后给出结论。 规则表示 Drools 3与Drools 2.5相比较,很重要的改变就是规则的表示从XML格式转变为文本格式,使用了一套自己的规则描述语言。这种语言的格式非常简单易懂,便于规则的创建和维护,而且可以通过DSL(Domain Specific Languages)的形式进行扩展。规则定义文件仍然以“drl”为后缀,同时Drools 3仍然支持XML格式的规则定义方式。为了方便对业务规则的定义、维护和分析,Drools 3还实现了决策表功能。 Package package表示一系列规则的集合,是定义和管理规则的基本单位,对应到Drools 2.5中的RuleSet。与Java的package不同,这里package的名称只有名字空间的作用,与文件和目录结构无关。package的主要内容由import、expander、global、function、query和rule部分构成。结构见图2。下面主要介绍import、expander、global和function四个部分,query和rule在后续小节中介绍。 图 2 package的语法结构 这里的import语句与Java中的import语句功能相同。把规则需要引用的Java对象类名德全路径写在“import”之后,规则引擎运行时会自动装载相应类。示例如下: import org.drools.examples.FibonacciExample.Fibonacci; expander语句用于表示扩展规则定义所需的DSL文件,这些DSL文件解释了规则体中针对特定问题领域的方便用户理解的组成元素。示例如下: expander ticketing.dsl; global语句表示多个规则用到的全局变量,常用于表示规则使用的数据,对应于Drools 2.5中的application-data属性。如果多个包同时定义同一名称的全局变量,那这些变量必须是同一类型,实际执行时它们都指向同一变量。由于全局变量并不会断言到WorkingMemory中,引擎并不知道变量值是否发生

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档