1.
概述:
Drools
3
采用了原生的规则语言,那是一种非
XML
文本格式。在符号方面,这种格式是非常轻量的,并且通过“
expanders
”支持符合你问题域的
Domain Specific
Language
(
DSL
)。这一章把焦点放在了
Drools
原生的规则格式。如果你想从技术上了解规则语言的机制,可以参考“
drl.g
”源文件,这是用
Antlr3
语法来描述规则语言。如果你使用
Rule Workbench
,内容助手将会为你完成大量的规则结构,例如输入“
ru
”,然后按
ctrl
+
space
,会为你建立规则结构。
1.1
规则文件
一个规则文件通常是一个以
.drl
扩展名结尾的文件。在一个
drl
文件中,你可以有多条
rules
,
functions
等等。尽管如此,你也可以将你的规则分布在多个文件中,这有利于管理大量的规则。一个
DRL
文件是一个简单的文本文件。
1.2
规则的结构
一个规则结构大致如下:
rule
"
name
"
ATTRIBUTES
when
LHS
then
RHS
end
可以看到,这是非常简单的。通常的标点符号都是不需要的,甚至连“
name
”的双引号都是不需要的。
ATTRIBUTES
是简单的,也是可选的,来提示规则的行为方式。
LHS
是规则的条件部分,需要按照一定的语法来写。
RHS
基本上是一个允许执行
Java
语法的代码的块(以后将会支持
groovy
和
C
#)。任何在
LHS
中使用的变量都可以在
RHS
中使用。
注意:每行开始的空格是不重要的,除非在
DSL
(
Domain
Specific Language
)语言中有特别的指明。
1.3
Domain Specific Language
Domain Specific Language
是对原生规则语言的加强。它们使用“
expander
”机制。
Expander
机制是一种可扩展的
API
。你可以使用
.dsl
文件,来提供从域或自然语言到规则语言和你的域对象的映射。你可以将
.dsl
文件看成是对你的域模型的映射。
DSL
提供了更高的规则可读性,你可以选择使用你自己创建的
DSL
,或者是原生的规则语言。
1.4
保留字
在规则语言中存在一些保留字。你应该避免使用这些保留字,来命名规则文本中的域对象,属性,方法,功能。保留字如下:
when
,
then
,
rule
,
end
,
contains
,
matches
,
and
,
or
,
modify
,
retract
,
assert
,
salience
,
function
,
query
,
exists
,
eval
,
agenda-group
,
no-loop
,
duration
,
->
,
not
,
auto-focus
。
2.
注释
2.1
单行注释:
Figure 2.1. Single
line comment