drools应用手册内容摘要:
第 9 页 共 9 页 机密 – 未经允许不得扩散 红帽软件中国 then end null and or not exists collect accumulate from forall true false eval 下面的列表是你在编写规则时应当尽量避免使用的,但是如果你不得不在某些地方使用它们,语法分析器也可以正常工作。 package function global import template attributes enabled salience duration init action reverse result contains excludes 第 10 页 共 10 页 机密 – 未经允许不得扩散 红帽软件中国 memberOf matches in dateeffective dateexpires noloop autofocus activationgroup agendagroup dialect ruleflowgroup 当然,你可以将它们用作方法名称 的一部分,如 notSomething()—— 这完全没有问题。 注释 你可以使用 39。 39。 或者 39。 //39。 建立单行注释。 语法分析器会自动忽略注释的内容。 例如: // this is a single line ment. this is a single line ment. 多行注释使用 /* */符号。 /* this is a multiline ment in the left hand side of a rule */ Package 包是规则以及其它相关结构的一个 集合,如 import 和 global。 包的成员应该彼此有一定联系,如人力资源的规则包。 一个包通过名称空间描绘,这样很好的保持了一组规则的独立性。 包名也就是名称空间名,与文件或目录名称无关。 运行时的规则包可以从多个规则源码处组装,当组装完成时,所有的规则被放入一个顶级的Package 配置中。 但是不可能将不同名称的 Package 的内容放入同样的 Package 资源下。 在一个RuleBase 上可以建立多个 Package。 通常情况是将所有同名 Package 下的规则放在一个文件中(这样它就是完全自包含的)。 下面的蓝图 显示一个包中可能包含的所有组件。 注意,包必须有一个名称空间,并且使用标准的 java 约定进行命名;例如包名不允许空格,不像规则名称可以有空格。 除了 package 和 expander 第 11 页 共 11 页 机密 – 未经允许不得扩散 红帽软件中国 标记必须放在文件的顶部,在其它规则之前,其它关键字元素的使用没有任何顺序要求,可以使用在文件的任何地方。 分号是可选用的。 Import Import标记就像 java中的含义一样。 对于任何要用在规则中的对象,你需要指定完整的路径和类型名。 Drools 从同名的 java 包中自动导入类。 Expander Expander 标记是可选的,用来指定 DSL 配置(通常保存在独立文件中)。 这为解析器提供了如何理解你自定义的规则语言。 要注意的是在 中(这里与 中不同), expander声明强制工具提供你的上下文环境并且避免错误报告,但是 API 允 许用编程方式附加 DSL 模板,如果 expander 没有声明在源文件中。 Global 全局变量 Global是全局变量。 如果多个包定义了同样名称的全局变量,它们必须使用同样的类型,并且全部指向同一个全局值。 全部变量通常用来返回数据,如一个动作的记录,获 得提供数据或服务给规则使用。 Global 不会插入到 Working Memory 中,因此当全局变量发生改变时,引擎不会得知;因为这个原因,全局变量不能用在条件约束上,除非这个值不会发生改变。 在条件约束中错误使用 第 12 页 共 12 页 机密 – 未经允许不得扩散 红帽软件中国 全局变量会导致意想不到的结果。 Globals 是全局的变量。 他们常用来将应用程序的对象提供给规则使用,通常是将数据或服务提供给规则使用(指定使用在规则推论中的应用服务),从规则处返回数据(如日志或在规则推论中增加的值)或者从规则中对应用进行回调。 全局变量不会被插入Working Memory,因此它们从来 不会参与推论,如果全局变量是一个不变的常量,则只在 LHS中使用它们。 引擎不会通知和跟踪全局变量的值变更。 不正确的在约束中使用全局变量会带来让人惊讶的结果 —— 糟糕的惊讶,就像医生对你的 X光片说“那里有些有趣的东西”一样。 如果多个 Package 声明了同样的全局变量,那么它们必须有相同的类型,并指向同一个全局变量。 为了使用全局变量,你必须: 在规则文件中声明全局变量并使用它,如: global myGlobalList。 rule Using a global when eval( true ) then ( Hello World )。 end 在 working memory 上设置全局变量的值。 最好是在将 fact 插入 working memory 之前设置完所有全局变量,如: List list = new ArrayList()。 WorkingMemory wm = ()。 ( myGlobalList, list )。 注意,这些全局变量只 是从你的应用传到 Working Memory 的对象的实例。 这意味着你可以传入任何你想要的对象:你可以传递一个服务的位置代理,或者可能是一个服务本身。 随着新的‘ from’元素现在可以传递一个 Hibernate Session 对象作为全局变量,允许‘ from’通过一个命名的Hibernate 查询中将数据拉进来。 可能的一个例子是 Email 服务。 在你的规则引擎的集成代码中,你获得你的 服务对象,并且将它引入到 working memory。 在 DRL文件中,声明你已经有了一个 EmailService 类型的全局 变量 ,并 给它 一个名 称为。 然后 在规则 的推 论中 ,你就 可以 使用 类似(number,message)这样的调用。 第 13 页 共 13 页 机密 – 未经允许不得扩散 红帽软件中国 全局变量不是被设计用来在规则之间共享数据的,并且它们永远都不应该用于这个目的。 规则经常对 working memory 进行推论和删除 fact,因此如果你想在规则间共享数据,将数据插入working memory 就可以。 从规则中设置全局变量的值是非常不合适的,我们建议你在应用程序中通过 working memory的接口设置这个值。 Function 相对于正常的 java 类,函数是在你的规则代码中放置语言代码的方法。 它们不可能做任何超过你可以在帮助类(在 java中定义,被设置入规则的 Working Memory 中的类)中做到的事情(实际上,编译器为后面的场景产生帮助类,那样帮助不大)。 主要使用函数的优点是可以将逻辑保存在一个地方,并且你可以在需要的时候改变函数(这样做各有优缺点)。 函数最大的用处是被规则的推论( then)部分中的行为所调用,特别是当一个行为操作需要反复被调用时 —— 如发送邮件。 典型的函数声明如下所示: function String hello(String name) { return Hello +name+!。 } 注意 function 关键字的使用,虽然它并不真的是 java 的一部分。 传入 function 的参数就像普通的方法一样(如果不需要参数可以为空)。 返回值的概念也和普通方法相同。 作为使用函数的另一种方法,你可以在辅助类中使用一个静态方法: ()。 支持静态方法导入,因此你只需要做下面的事情: import static 对于上面的情况,要使用函数只需要在推论或 代码块中通过函数名称来调用它,例如: rule using a static function when eval( true ) then ( hello( Bob ) )。 end 规则 第 14 页 共 14 页 机密 – 未经允许不得扩散 红帽软件中国 规则指定“ when”作为一系列条件的集合(称为 LHS),然后在“ then”中指定一系列操作(称为 RHS)。 一个用户经常问的问题是“为什么使用 when代替 if”。 “ when”之所以取代“ if”是因为“ if”通常是程序执行过程中的一部分,在某一个特定的时间点它对条件进行检查。 而“ when”代表着它不约束在特定的评估顺序或时间点,在引擎生命周期的任何时候“ when”都可以执行。 规则必须有一个名称,并且在一个包中是唯一的。 如果你在同一个 DRL中定义同名规则两次,在装载时将产生一个错误。 如果你新增的 DRL 包含一个 存在于 Packaage 中的规则,那新的规则将替换旧规则。 如果规则名称中有空格,需要使用双引号包含(好习惯是定义名称时都使用双引号)。 特性是可选的,最好保持每行一条,如下描述: 规则的 LHS 部分跟随 when关键字( when 最好在单独的一行上), RHS 部分跟随 then 关键字(最好也单独一行)。 规则使用 end 关键字结尾。 规则不能进行嵌套。 Example 规则语法 rule name attribute* when conditional element* then action* end Example 规则示例 第 15 页 共 15 页 机密 – 未经允许不得扩散 红帽软件中国 rule Approve if not rejected salience 100 agendagroup approval when not Rejection() p : Policy(approved == false, policyState:status) exists Driver(age 25) Process(status == policyState) then log(APPROVED: due to no objections.)。 (true)。 end 规则 属性 规则属性提供了影响规则行为的一种声明式的方法,有些十分简单,而另一些是复杂子系统的一部分,如规则流。 要从 Drools 中获得最大的收获,你必须十分的了解每一个属性。 noloop 第 16 页 共 16 页 机密 – 未经允许不得扩散 红帽软件中国 默认值 : false 类型 : Boolean 当规则在推论中对 fact进行修改后,可能会导致该规则的重新激活,引起递归。 设置 noloop为 true 可以阻止该规则被再次激活。 salience 默认值 : 0 类型 : integer 每一个规则有一个整数类型的优先级属性,默认为 0,这个整数可以使正负数。 优先级数字高的规则会比优先级低的规则先执行。 agendagroup 默认值 : MAIN 类型 : String Agenda group 允许用户对分隔 Agenda 执行区提供更多的控制。 只有在具有焦点的 agenda group 中的规则才能够激发。 autofocus 自动获取焦点 默认值 false 类型 : Boolean 当规则的 autofocus 属性为 true时,如果该规则符合激活条件,则该规则所在 agendagroup自动获得焦点,允许规则激发。 activationgroup 默认值 : N/。drools应用手册
相关推荐
由零售业专家设计开发的零售系统 ( 本 资 料 所 有 权 归 属 欧 宝 软 件 , 未 经 许 可 不 得 复 制 、 传 播 ) P a g e 3 o f 20 盘点介绍和目的 简介 : 定期或临时对库存商品的实际数量进行清查、清点的作业,即为了掌握货物的流动情况(入库、在库、出库的流动状况),对仓库现有物品的实际数量与 后台系统 上记录的数量相核对,以便准确地掌握库存数量。 目的:
维护和维修工作; 采用无框架屏幕构造,实现只有 的物理拼缝 ? ? 采用双层无反光增后型复合树脂 幕,热膨胀系统降低 80%. 内置画面处理器,可在无外部控制器的情况下实现图像拼接; ? ? 内置色彩平衡调节电路,并采用内置三基色、内置白平衡、外置白平衡三段式调节方式,最大限度保证拼接单元间的亮度和色彩一致 ? 平均无故障时间( MTBF)大于 80000 小时; ? 六轴调整
成功为止。 第二阶段是机械部分设计阶段,本阶段主要应用大学里面所学到的饿专业知识来进行运丝机构设计和坐标工作台的横向和纵向进给机构设计。 另外还要进行储丝筒的三维零件设计。 本阶段主要是从三月份到五月份。 五月份到六月份则是第三阶段:控制系统设计阶段。 主要进行电器电路设计,包括步进电机驱动设计和脉冲功率放大电路设计。 本阶段也是一个学习的阶段,对自己不太熟悉的领域的一次 学习。
,只是在改变频率瞬间其斜率发生了突变,因而保持了输出信号相位的连续性。 这一点对利用相位信息的那些系统很重要。 相位连续可避免信息的丢失,相位不连续回导致频谱的扩散,不利于频 谱资源的有效利用。 5. 可输出正交信号 有些应用场合要用到正交信号输出,即同时输出 s1(t)= sin (2π f0t)和 s2(t) = cos (2π f0t) 在 DDS 中,只要分别在两个 ROM 中存储