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