Drools使用手册第四

上传人:鲁** 文档编号:464202306 上传时间:2022-09-03 格式:DOCX 页数:25 大小:747.34KB
返回 下载 相关 举报
Drools使用手册第四_第1页
第1页 / 共25页
Drools使用手册第四_第2页
第2页 / 共25页
Drools使用手册第四_第3页
第3页 / 共25页
Drools使用手册第四_第4页
第4页 / 共25页
Drools使用手册第四_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《Drools使用手册第四》由会员分享,可在线阅读,更多相关《Drools使用手册第四(25页珍藏版)》请在金锄头文库上搜索。

1、第四章决策表4.1. 在电子表格中的决策表决策表是一种精确而简洁的表达逻辑条件的方法,非常适用于商业级的规则。Drools支持在电子表格中管理规则。支持的格式有Excel和CSV。这样你可以使 用多种不同的表格程序,如Microsoft Excel, OpenOffice等。期望在将来的发 布版本中可以支持基于 Web 的决策表编辑器。决策表在软件中是很早就出现的概念,但是已经在多年的应用中被证明非常有 用。简单的说,在Drools中的决策表通过表格中的数据直接产生规则。电子表 格对于数据的捕获与操作是很有优点的。. 何时使用决策表如果规则能够被表达为模板+数据的格式,那你应该考虑使用决策表。

2、决策表中 的每一行就是对应模板的一行数据,将产生一个规则。许多商业用户已经使用电子表格来管理数据并进行计算。如果你有兴趣持续这条 道路,你可以也通过这样的方式来管理规则。这假设你有兴趣使用xls或csv 文件来管理规则包。决策表不建议在规则不能遵循模板或者只有很少量的规则的 时候使用。使用决策表的好处在于你可以控制规则的哪些参数可以被修改,而不 用直接暴露规则。决策表也为隐含在下面的对象模型提供了一定的隔绝性。. 概述这里有一些现实中决策表的例子。JkLrnerAllocate Co TeamStop processingLog reasonTcam RedStop processingThe

3、 claim as catastrophic启 TMmAllMaciOTEj;ainpfeDTYPICJlL=EXAMPLE OpenQfftee.org CaJk在上面的例子中,决策表用到的技术被隐藏起来,仅仅显示一个标准的表格特性。 规则从17行开始(每一行产生一个规则)。条件等式在C, D, E.列(下一幅图 中的黄色格子是代表行为)。你可以看到在单元格内的值是非常简单的,它们的 含义可以从16行的表头看出。B列只是一个描述。习惯上在表格的不同功能部 分使用各自的颜色区分。注意,虽然决策表看起来像是从上到下的处理,但这不是必须的。如果能够将规 则以与顺序无关的方式实现是非常好的,简单的说

4、它使得维护变得简单,你不需 要花时间来维护行之间的顺序。因为每一行是一个规则,同样的原理被应用。当 规则引擎处理fact,任何匹配的规则都有可能被激发(一些人对这个不太理解, 当一个规则被激发,引擎会清空agenda空间并且在第一个匹配的位置模拟一个 非常简单的决策表)译者注:有可能一个激发的规则引起另一个规则不能被激 发,但哪一个规则先被激发是无顺序的。同样注意,你可以在电子表格中建立 多个表格,这样当规则共享相同的模板时,它们可以被编组,但是在最后一个电 子表格中的规则会被放到同一个规则包中。决策表是用来快速有效的自动产生规 则的一个工具。23*c1:NoduleFRS 匚 Idl9Ccx

5、itrclCT|3(l8aOD.CaHi de UxaCaso de UmdEntifidMes de hs Rjfiqhsr+anitces de hs Req LisDtKrpoanesH12000y 泅 rjaSuc irwiMoiertaEsta Rjgta ttene por Wfcn 胡*dar que h sucuraal de t se moienire dbifixaTrksja sote 目 胡 que 穽rmra m 防,勺 Suoltk cmetfKmde a esdy la Tran sac ddn de GjwnuMIfii22000/afctaro-tLrsZai

6、 aMen aFe duEsta Reca tene p3 fa Fhfl lie defrr de b BTDdJd RMtitno_Crfrr_Suc沖RAirabteJl兔 勵崭臣创垃刖划讯。祕”訓辺比血屈I JD.Caw de UsoDdiuHncddoi*NomfenjDenpctoib决策表如何工作对于决策表要记住的关键点是,每一行是一个规则,行中的每一列是规则的条件 或行为。电子表格查找“RuleTable”关键字作为一个规则表的开始(行与列的开始)。 其它关键字被用于定义包级别的属性(后面说明)。必须要保证关键字在单独的 一列中。习惯上使用第二列“B”列作这个,但是它可以是任何

7、列(习惯上在列 左边留下空白为注释使用)。在下图中,C列是规则数据实际开始的列,所有在 左边的信息都被忽略。如果我们展开被隐藏的部分,它开始显露出工作的原理。注意在C列上的关键字。现在你可以看到使得决策表工作的隐藏的魔法。RuleSet关键字显示被用在规则 包中的名称,所有的规则会归入关键字右边那个单元格的包中(名称是可选的, 它将有一个默认值,但你必须使用RuleSet关键字)。在列C上的另一个关键字 是Import, Sequential稍后再说明,可以留意到关键字通过名称/值配对的方式 使用。RuleTable关键字非常重要,因为它指明后面跟着的是基于某个规则模板 的规则数据块。在Rul

8、eTable关键字后面跟着一个名称,这个名称用来指明产生 规则名所使用的前缀,行号会加在这个前缀后形成独立规则名。RuleTable列指 示规则数据从这一列开始,左边的列都会被忽略。查阅第14行(紧跟在RuleTable后面的一行):关键字CONDITION和AND说明 在这一列下面的数据是用在规则的LHS还是RHS部分。规则中的其它属性也可以 选择通过这种方式设置。15行包含对象类型的声明,该行内容是可选的,如果你不打算使用它,必须留 下一个空行,你将来可能会用到它。当你使用这一行,在单元格的下面一行(16 行)变成对上面的对象类型的约束。在上面的例子中会产生Person(age二二42),

9、 这里的42来自18行。在上面的例子中,“=”是隐含的(如果你只输入一个字 段名,它会假设你在寻找精确的匹配)。也要注意的是,通过将列合并可以产生 一个跨列的ObjectType声明,这意味着所有在合并范围下的列将被合并到一个 ObjectType的约束中。16行包含着他们自己的规则模板:注意它们可以使用$param占位符代表下面单 元格中的数据所在的位置(你可以使用$param或$1、$2来定义参数,参数顺序 通过单元格内的逗号分隔确定) 。 17行被忽略,它是规则模板的描述。18到19行显示出来的数据,将被15行的模板合并产生规则。如果一个单元格 中没有数据,则该模板被忽略(它意味着条件或

10、动作不对那一行使用)。规则行 将会顺序读下去,直到遇到一个空行。你可以在一个表中放置多个RuleTable。 21行包含了另一个关键字和值,像这样的关键字所在的行位置是不重要的(大 多数人将它放在顶部),但是关键字所在的列位置必须与RuletTable或RuleSet 关键字所在列相同(在这个例子中C列被选中,但是你想的话也可以使用A列)。在上面的例子中,将产生如下的规则:/row 18rule Cheese_fans_18whenPerson(age=42)Cheese(type=stilton)thenlist.add(Old man stilton);end注意age二二42和ty pe

11、=s til ton是作为单个约束加入上面声明的 ObjectType中,如果声明ObjectType的两个单元格被合并,则这两个约束条件 也会合并到一个ObjectType中。关键字和语法1模板的语法在模板中的语法要做什么,依赖于它是条件列还是行为列。在大多数情况下,它 与DRL中的LHS和RHS的含义相同。这意味着在LHS中必须使用约束语言,而在 RHS中是一段要执行的代码。$param 占位符被用在模板里表示单元格中的数据应当如何代入模板。你也可以 用$1达到同样的效果。如果单元格包含了以逗号分隔的值列表,使用$1和$2 这样的格式,指出列表中顺序的数据应当插入哪个位置。例:如果模板是F

12、oo(bar = $param)而单元格是42 ,则结果是Foo(bar = 42)。 如果模板是Foo(bar 42, baz =42)对于条件表达式:如何产生约束依赖于片断行上有什么声明(之上会有ObjectType声明)译者注:结合后面的示例,这里应该是指在ObjectType的 下一行是片断行,比如age,age。如果有,则片断作为ObjectType的一个独 立约束产生。如果没有,它们仅仅使用值进行替代。如果你输入的是一个简单字 段,则假设为相等判断。如果你放了另外的操作符在字段后面,则值会被加在最 后面,或者寻找$param进行替换。对于推论:如何产生也依赖于片断行所作的声明。如果

13、没有任何声明,则简单的 进行单元值代入。如果有声明(通常是上例中示范的绑定变量或全局变量),则 将作为一个对象上的函数调用被附加(查阅前例)。使用下面的例子让你可以更容易理解:13Rul-eTable Cheese fans1+CONDITION1CONDITION15Person16agetype17PersonsCheese type1842stilton21Cheddar上面显示Persion对象声明跨越了两列,则产生的规则约束应当是Person(age =.,type =.)。如前所述,当片断行上仅有字段名时,强制为相等测 试。上面的条件示例显示如何使用替代方式取得在片断中的值。在这个例子中结果是 P

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号