1.?
概述:
Drools
3
采用了原生的規(guī)則語言,那是一種非
XML
文本格式。在符號方面,這種格式是非常輕量的,并且通過“
expanders
”支持符合你問題域的
Domain Specific
Language
(
DSL
)。這一章把焦點(diǎn)放在了
Drools
原生的規(guī)則格式。如果你想從技術(shù)上了解規(guī)則語言的機(jī)制,可以參考“
drl.g
”源文件,這是用
Antlr3
語法來描述規(guī)則語言。如果你使用
Rule Workbench
,內(nèi)容助手將會為你完成大量的規(guī)則結(jié)構(gòu),例如輸入“
ru
”,然后按
ctrl
+
space
,會為你建立規(guī)則結(jié)構(gòu)。
1.1???
規(guī)則文件
一個(gè)規(guī)則文件通常是一個(gè)以
.drl
擴(kuò)展名結(jié)尾的文件。在一個(gè)
drl
文件中,你可以有多條
rules
,
functions
等等。盡管如此,你也可以將你的規(guī)則分布在多個(gè)文件中,這有利于管理大量的規(guī)則。一個(gè)
DRL
文件是一個(gè)簡單的文本文件。
1.2
規(guī)則的結(jié)構(gòu)
一個(gè)規(guī)則結(jié)構(gòu)大致如下:
rule?
"
name
"
????ATTRIBUTES
????when
????????LHS
????then
????????RHS
end
可以看到,這是非常簡單的。通常的標(biāo)點(diǎn)符號都是不需要的,甚至連“
name
”的雙引號都是不需要的。
ATTRIBUTES
是簡單的,也是可選的,來提示規(guī)則的行為方式。
LHS
是規(guī)則的條件部分,需要按照一定的語法來寫。
RHS
基本上是一個(gè)允許執(zhí)行
Java
語法的代碼的塊(以后將會支持
groovy
和
C
#)。任何在
LHS
中使用的變量都可以在
RHS
中使用。
注意:每行開始的空格是不重要的,除非在
DSL
(
Domain
Specific Language
)語言中有特別的指明。
1.3??
Domain Specific Language
Domain Specific Language
是對原生規(guī)則語言的加強(qiáng)。它們使用“
expander
”機(jī)制。
Expander
機(jī)制是一種可擴(kuò)展的
API
。你可以使用
.dsl
文件,來提供從域或自然語言到規(guī)則語言和你的域?qū)ο蟮挠成洹D憧梢詫?/span>
.dsl
文件看成是對你的域模型的映射。
DSL
提供了更高的規(guī)則可讀性,你可以選擇使用你自己創(chuàng)建的
DSL
,或者是原生的規(guī)則語言。
1.4
保留字
在規(guī)則語言中存在一些保留字。你應(yīng)該避免使用這些保留字,來命名規(guī)則文本中的域?qū)ο螅瑢傩裕椒ǎδ堋1A糇秩缦拢?/span>
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