




免费预览已结束,剩余21页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章.决策表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行被忽略,它是规则模板的描述。18到19行显示出来的数据,将被15行的模板合并产生规则。如果一个单元格中没有数据,则该模板被忽略(它意味着条件或动作不对那一行使用)。规则行将会顺序读下去,直到遇到一个空行。你可以在一个表中放置多个RuleTable。21行包含了另一个关键字和值,像这样的关键字所在的行位置是不重要的(大多数人将它放在顶部),但是关键字所在的列位置必须与RuletTable或RuleSet关键字所在列相同(在这个例子中C列被选中,但是你想的话也可以使用A列)。在上面的例子中,将产生如下的规则:/row 18rule Cheese_fans_18 when Person(age=42) Cheese(type=stilton) then list.add(Old man stilton);end注意age=42 和 type=stilton是作为单个约束加入上面声明的ObjectType中,如果声明ObjectType的两个单元格被合并,则这两个约束条件也会合并到一个ObjectType中。4.1.4.关键字和语法4.1.4.1.模板的语法在模板中的语法要做什么,依赖于它是条件列还是行为列。在大多数情况下,它与DRL中的LHS和RHS的含义相同。这意味着在LHS中必须使用约束语言,而在RHS中是一段要执行的代码。$param占位符被用在模板里表示单元格中的数据应当如何代入模板。你也可以用$1达到同样的效果。如果单元格包含了以逗号分隔的值列表,使用$1和$2这样的格式,指出列表中顺序的数据应当插入哪个位置。例:如果模板是Foo(bar = $param)而单元格是 42 ,则结果是Foo(bar = 42)。如果模板是Foo(bar 42, baz =42)对于条件表达式:如何产生约束依赖于片断行上有什么声明(之上会有ObjectType声明)译者注:结合后面的示例,这里应该是指在ObjectType的下一行是片断行,比如age,age”,编译器就不会进行转换。要注意DSL是可选的。当规则语言被编译时,dsl文件也需要有效。5.1.7. Rete 视图Rete树型视图为你的drl文件展示了当前Rete网络的结构。只要点击DRL编辑器左下角的Rete Tree选项卡就可以。然后你可以产生当前Rete网络的可视模型。你可以在视图上推或拉节点,以安排你的Rete网络到最佳模式。如果视图上有上百个节点,使用一个方框选中它们,然后可以对它们分组。你可以放大或缩小视图,如果当前视图没有显示所有的节点。使用+ 和-两个按钮。在当前版本中没有将Rete视图导出为gif或jpg图像的功能。请使用屏幕打印功能获得当前Eclipse的截图,然后剪切出需要的部分。该图是使用Java Universal Network/Graph Framework (JUNG)建立的。Rete视图是一个高级特性,它仍然在实验状态。它使用Eclipse内部的Swing绘制,将来可能使用SWT或GEF进行增强。Rete视图仅工作在Drools规则项目中,在那里Drools Builder被设为项目的属性。如果你在其它类型的项目中使用Drools,没有一个使用Drools Builder的规则项目,你可以建立一个小的工作区:设置一个小的Drools规则项目与上面项目相邻,将需要的库和你想查看Rete视图的DRL文件导入。在DRL编辑器右下边的选项卡上,通过点击“Generate Rete View”来查看。5.1.8.大容量DRL文件依赖于你使用的JDK,它可能需要增加permanent generation的最大值(permanent generation是JVM用来保存class object和meta data的地方)。SUN和IBM的jdk有一个permanent generation,而BEA JRockit没有。为了增加permanent generation,启动eclipse时使用:-XX:MaxPermSize=#m示例: c:eclipseeclipse.exe -XX:MaxPermSize=128m拥有4000条规则的RuleSet要将permanent generation至少设为123MB。(注意这个permanent generation大小在进行海量规则编译时也适用,通常每个规则需要一个或多个类)作为另一种选择,你可以将规则放置在扩展名为rule的文件中,后台的构建器将不会在每次变更时进行编译,如果你的IDE因为大量的规则变得响应迟钝时,这个可以提供更好的性能。5.1.9.调试规则你可以在Drools应用执行的过程中调试规则。你可以在规则的推论部分增加断点,当在规则执行时遇到这样的断点,执行被暂停。你可以检查在断点时变量的情况,并且使用调试功能决定下一步如何执行(停止或继续)。你也可以使用调试视图观察working memory和agenda的内容。你可以使用两种方法在drl文件中增加/删除断点,类似向Java文件中增加断点: 在DRL编辑器中双击你希望增加断点的那一行。注意断点只能在规则的推论中建立。在不允许增加断点的地方双击没有任何效果。断点可以通过再次双击来删除。 右键点击规则,会弹出一个菜单,包含Toggle breakpoint操作。注意断点只能在规则的推论中建立。在不允许增加断点的地方会自动使该操作无效。再次选择该操作会使得断点无效。 调试状态时包含一个断点视图,可以看到所有定义的断点,获得它们的属性,可以启用/禁用或删除它们。Drools断点只有在应用是作为Drools应用调试时才能起作用。你可以如下设置: 选择应用的启动类。右击并选择Debug As 子菜单。然后选择Debug .菜单打开一个用于创建,管理和运行Debug配置的对话框 在左边的树中选择JBoss Rules Application条目,并点击New launch configuration按钮(在树上面工具条中最左边的图标)。这将建立一个新的配置,并且已经填充了一些属性在里面(如项目和启动类),基于你一开始选择的类。在这里显示的所有属性与标准Java程序一样。 将调试配置的名称改的有意义一些。对于其它属性,尽管保留默认值就可以了。对于这些属性的更多信息请查阅Eclipse JDT文档。 点击Debug按钮开始调试你的应用 你只需要定义调试配置一次,下一次运行Jboss规则应用时,你不需要再建立一个新的配置,只有选择之前你已经定义好的那个,接着点击Debug按钮就可以了。Eclipse工具条也包含快捷按钮,用来
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 5019.4-2025以云母为基的绝缘材料第4部分:云母纸
- GB/T 45972-2025装配式建筑用混凝土板材生产成套装备技术要求
- 2025年项目管理实战高级面试模拟题及应对策略
- 2025年安全生产知识题库及答案解析
- 2025年职业安全卫生培训选择题及答案
- 2025年旅游管理人员岗位能力测评试题及答案解析
- 2025年竞争情报分析师职业能力水平考核试题及答案解析
- 2025年计算机程序开发工程师专业技术考核试卷及答案解析
- 2025年消防安全考核重点实战题及答案
- 课件中单词处理
- 孤立性血管性眩晕
- 绿色金融培训课件
- 问题性皮肤培训课件
- 2025年工业区污水处理厂可行性研究报告
- 特色农产品电商直播基地建设项目可行性研究报告
- 2024-2025学年人教版数学八年级下册期末复习卷(含解析)
- 致密油藏中CO2驱油机理研究
- 2025年高校教师岗前培训高等教育心理学知识竞赛考试题库50题及答案
- 电动港机装卸机械司机(高级技师)职业技能鉴定理论考试题(附答案)
- 无人机打药合同协议书
- 《肥胖症诊疗指南(2024年版)》解读课件
评论
0/150
提交评论