`
daniel_tu
  • 浏览: 184142 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JBoss Rules 学习(八): Drools规则语言详解(下)

阅读更多

5.5.3 eval


Figure 5.14 . eval

Eval is essentially a catch all which allows any semantic code (that returns a primitive boolean) to be executed. 在表达式中可以引用在 LHS 中出现的变量,和在 rule package 中的 Functions 。一个 Eval 应该是 LHS 中的最后一个 Conditional Element 。在一个 rule 中,你可以有多个 eval

Eval 不能被索引,因此不能像 Field Constraints 那样被优化。尽管如此,当 Functions 的返回值一直在变化时,应该使用 Eval ,因为这在 Field Constraints 中时不允许的。如果规则中的其他条件都匹配,一个 eval 每次都要被检查。(现在还不理解到底 eval 要怎么用?)

Example 5.16. eval

p1 : Parameter() 
p2 : Parameter()
eval( p1.getList().containsKey(p2.getItem()) )
eval( isValid(p1, p2) ) 
// this is how you call a function in the LHS - a function called  // "isValid"


5.5.4 not


Figure 5.15. not

not ”是一阶逻辑的存在量词( first order logic’s Existential Quantifier , 用来检查 WorkingMemory 中某对象的非存在性。现在,只有 Columns 可以放在 not 中,但是将来的版本会支持“ and ”和“ or ”。

Example 5.17. No Buses

not Bus()


Example 5.18. No red Buses

not Bus(color  ==   " red " )
not ( Bus(color 
==   " red " , number  =   =   42 ) )  // brackets are optional


5.5.5 exists


Figure 5.16. exists

exists 是一阶逻辑的存在量词( first order logic’s Existential Quantifier ),用来检查 WorkingMemory 中某对象的存在性。可以将“ exists ”理解为“至少有一个”( at least one… )。它的意义不同于只有 Column 本身,“ Column ”本身可以理解为“对于每一个 ”( for each of … )。如果你对一个 Column 使用了“ exists ”,那么规则将只 activate 一次,而不管 WorkingMeomry 中有多少个数据匹配了那个条件。

现在,只有 Columns 可以放在“ exists ”中,但是将来的版本会支持“ and ”和“ or ”。

Example 5.19. At least one Bus

exists Bus()


Example 5.20. At least one red Bus

exists Bus(color  ==   " red " )


5.5.6 group


Figure 5.17. group

Group 的作用相当于代数学中的“()”,显式的指明操作的顺序。

5.6 再谈自动装箱和原始类型

Java 5 支持在原始类型与其对应包装类之间的装拆箱。尽管如此,因为要让 drools 能够在 J2SE 1.4 下运行,我们不能依靠 J2SE 。因此, drools 自己实现了自动装箱。被引用(即被 Bound Variable 绑定)的 Field 将被自动进行装箱(如果它们本身就是 object ,就不会有任何变化)。尽管如此,必须要注意的是,他们并不会被自动拆箱。

还有一点要注意的,就是对于 ReturnValue Constraints ,返回值的代码必须返回一个对象,而不能是一个原始类型。

6 Query

 


Figure 6.1 . query

一个 query 只包含了一个 rule LHS 结构(你不用指定“ when ”或“ then ”)。这是查询 WorkingMemory 中匹配条件的 Facts 的简单的方法。

要得到结果,要使用 WorkingMemory.getQueryResults(“name”) 方法,其中“ name ”就是 query 的名字。 Query 的名字在 RuleBase 中是全局的,所以, do not add queries of the same name to different packages for the same RuleBase

 

下面的例子创建了一个简单的 query 来查询所有年龄大于 30 的人:

Example 6.1. Query People over the age of 30

query  " people over the age of 30 "  
    person : Person( age 
>   30  )
end

 

我们通过一个标准的循环来迭代一个返回的 QueryResults 对象。每一次的 iterate 将返回一个 QueryResult 对象。我们可以用 QueryResult 对象的 get() 方法来访问每个 Column ,通过传入 Bound Declaration index position

Example 6.2. Query People over the age of 30

QueryResults results  =  workingMemory.getQueryResults(  " people over the age of 30 "  );
System.out.println( 
" we have  "   +  results.size()  +   "  people over the age  of 30 "  );

System.out.println( 
" These people are are over 30: "  );

for  ( Iterator it  =  results.iterator; it.hasNext(); ) {
    QueryResult result 
=  ( QueryResult ) it.next();
    Person person 
=  ( Person ) result.get(  " person "  );
    System.out.println( person.getName() 
+   " \n "  );
}
分享到:
评论

相关推荐

    jboss rules 最新09年英文原版教材

    ### JBoss Drools 规则引擎详解 #### 一、引言 《JBoss Drools Business Rules》是一本由 Paul Browne 编写的书籍,首次出版于2009年,该书旨在介绍如何利用 JBoss Drools 捕获、自动化及重用业务流程。本书版权...

    Drools Jboss Rules 5.0 Developer's Guide

    ### Drools JBoss Rules 5.0 Developer's Guide:规则引擎技术详解 #### 一、概述 《Drools JBoss Rules 5.0 Developer's Guide》是一本深入讲解Drools规则引擎技术的书籍。本书由Michal Bali编写,旨在帮助读者...

    jboss rules 用户指南

    ### jBoss Rules 用户指南知识点详解 #### 一、规则引擎概念及背景 ##### 1.1 什么是规则引擎 规则引擎是一种软件系统,它能够基于一组预定义的规则来处理数据,进而推导出结论或者执行特定的操作。规则引擎的...

    Drools5规则引擎开发文档

    Drools支持多种规则语言,如DRL(Drools Rule Language)等,使得业务规则的编写变得直观而简洁。 #### 二、Drools5开发环境搭建 **1. 开发前的准备** - **JDK环境**: 使用Drools5需要确保开发机器上已经安装了JDK...

    jboss rules用户指南(中文)PDF格式

    ### JBoss Rules 用户指南知识点详解 #### 一、规则引擎概念及背景 1. **规则引擎定义**: - 规则引擎是一种软件系统,它使用预定义的规则来处理数据,以得出结论或采取行动。 - **背景介绍**:规则引擎的发展...

    drools介绍pdf

    Drools (JBoss Rules) 是一个开源的BRMS,它支持业务规则的定义、管理和执行。Drools的特点包括: - **易于使用:** 业务分析师和审查人员可以直接查看和修改规则。 - **标准化:** 符合业内标准,如JSR94。 - **高...

    drools6开发文档

    Drools 是一款使用 Java 编写的开源规则引擎,其核心功能是提供一种声明式的方式来表达业务逻辑,允许开发者以非 XML 的本地语言编写规则,简化了学习曲线并提高了易读性和可维护性。Drools 使用 REte 算法处理规则...

    BRMS手册(Jboss)

    ### BRMS (JBoss Rules Management System) 手册详解 #### 一、BRMS简介与应用价值 BRMS,即Business Rules Management System,是JBoss提供的一个基于Drools规则引擎的企业级业务规则管理系统。BRMS的目标是为...

    The Definitive ANTLR Reference--Building Domain Specific Languages.pdf

    2. **Bob McWhirter**(JBoss Rules/Drools 项目创始人): - 指出本书适合所有需要解析或翻译文本的人。 - 表明ANTLR不再仅限于语言设计者使用。 3. **Neal Gafter**(Java 倡导者及编译器专家,曾在 Sun ...

Global site tag (gtag.js) - Google Analytics