<!--[if !supportLists]--> 1.? <!--[endif]--> 概述:
Drools 3
采用了原生的規則語言,那是一種非
XML
文本格式。在符號方面,這種格式是非常輕量的,并且通過“
expanders
”支持符合你問題域的
Domain Specific Language
(
DSL
)。這一章把焦點放在了
Drools
原生的規則格式。如果你想從技術上了解規則語言的機制,可以參考“
drl.g
”源文件,這是用
Antlr3
語法來描述規則語言。如果你使用
Rule Workbench
,內容助手將會為你完成大量的規則結構,例如輸入“
ru
”,然后按
ctrl
+
space
,會為你建立規則結構。
<!--[if !supportLists]--> 1.1??? <!--[endif]--> 規則文件
一個規則文件通常是一個以
.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
)語言中有特別的指明。
<!--[if !supportLists]--> 1.3?? <!--[endif]--> 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
。
<!--[if !supportLists]--> 2. ? <!--[endif]--> 注釋
2.1
單行注釋:
Figure?2.1.?Single line comment