Drools使用手册第四--五章.doc

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

第四章.?决策表 4.1.?在电子表格中的决策表 决策表是一种精确而简洁的表达逻辑条件的方法,非常适用于商业级的规则。 Drools支持在电子表格中管理规则。支持的格式有Excel和CSV。这样你可以使用多种不同的表格程序,如Microsoft Excel,OpenOffice等。期望在将来的发布版本中可以支持基于Web的决策表编辑器。 决策表在软件中是很早就出现的概念,但是已经在多年的应用中被证明非常有用。简单的说,在Drools中的决策表通过表格中的数据直接产生规则。电子表格对于数据的捕获与操作是很有优点的。 4.1.1.?何时使用决策表 如果规则能够被表达为模板+数据的格式,那你应该考虑使用决策表。决策表中的每一行就是对应模板的一行数据,将产生一个规则。 许多商业用户已经使用电子表格来管理数据并进行计算。如果你有兴趣持续这条道路,你可以也通过这样的方式来管理规则。这假设你有兴趣使用xls或csv文件来管理规则包。决策表不建议在规则不能遵循模板或者只有很少量的规则的时候使用。使用决策表的好处在于你可以控制规则的哪些参数可以被修改,而不用直接暴露规则。 决策表也为隐含在下面的对象模型提供了一定的隔绝性。 4.1.2.?概述 这里有一些现实中决策表的例子。 在上面的例子中,决策表用到的技术被隐藏起来,仅仅显示一个标准的表格特性。 规则从17行开始(每一行产生一个规则)。条件等式在C,D,E..列(下一幅图中的黄色格子是代表行为)。你可以看到在单元格内的值是非常简单的,它们的含义可以从16行的表头看出。B列只是一个描述。习惯上在表格的不同功能部分使用各自的颜色区分。 注意,虽然决策表看起来像是从上到下的处理,但这不是必须的。如果能够将规则以与顺序无关的方式实现是非常好的,简单的说它使得维护变得简单,你不需要花时间来维护行之间的顺序。因为每一行是一个规则,同样的原理被应用。当规则引擎处理fact,任何匹配的规则都有可能被激发(一些人对这个不太理解,当一个规则被激发,引擎会清空agenda空间并且在第一个匹配的位置模拟一个非常简单的决策表)[译者注:有可能一个激发的规则引起另一个规则不能被激发,但哪一个规则先被激发是无顺序的]。同样注意,你可以在电子表格中建立多个表格,这样当规则共享相同的模板时,它们可以被编组,但是在最后一个电子表格中的规则会被放到同一个规则包中。决策表是用来快速有效的自动产生规则的一个工具。 4.1.3.?决策表如何工作 对于决策表要记住的关键点是,每一行是一个规则,行中的每一列是规则的条件或行为。 电子表格查找“RuleTable”关键字作为一个规则表的开始(行与列的开始)。其它关键字被用于定义包级别的属性(后面说明)。必须要保证关键字在单独的一列中。习惯上使用第二列“B”列作这个,但是它可以是任何列(习惯上在列左边留下空白为注释使用)。在下图中,C列是规则数据实际开始的列,所有在左边的信息都被忽略。 如果我们展开被隐藏的部分,它开始显露出工作的原理。注意在C列上的关键字。 现在你可以看到使得决策表工作的隐藏的魔法。RuleSet关键字显示被用在规则包中的名称,所有的规则会归入关键字右边那个单元格的包中(名称是可选的,它将有一个默认值,但你必须使用RuleSet关键字)。在列C上的另一个关键字是Import,Sequential稍后再说明,可以留意到关键字通过名称/值配对的方式使用。RuleTable关键字非常重要,因为它指明后面跟着的是基于某个规则模板的规则数据块。在RuleTable关键字后面跟着一个名称,这个名称用来指明产生规则名所使用的前缀,行号会加在这个前缀后形成独立规则名。RuleTable列指示规则数据从这一列开始,左边的列都会被忽略。 查阅第14行(紧跟在RuleTable后面的一行):关键字CONDITION和AND说明在这一列下面的数据是用在规则的LHS还是RHS部分。规则中的其它属性也可以选择通过这种方式设置。 15行包含对象类型的声明,该行内容是可选的,如果你不打算使用它,必须留下一个空行,你将来可能会用到它。当你使用这一行,在单元格的下面一行(16行)变成对上面的对象类型的约束。在上面的例子中会产生Person(age== 42),这里的42来自18行。在上面的例子中,“==”是隐含的(如果你只输入一个字段名,它会假设你在寻找精确的匹配)。也要注意的是,通过将列合并可以产生一个跨列的ObjectType声明,这意味着所有在合并范围下的列将被合并到一个ObjectType的约束中。 16行包含着他们自己的规则模板:注意它们可以使用$param占位符代表下面单元格中的数据所在的位置(你可以使用$param或$1、$2来定义参数,参数顺序通过单元格内的逗号分隔确定)。17行被忽略,它是规则模

文档评论(0)

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

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

1亿VIP精品文档

相关文档