??
基礎(chǔ)語(yǔ)義模塊提供了一種在XML種構(gòu)建RuleSet(規(guī)則集)的語(yǔ)言,單獨(dú)地,基礎(chǔ)語(yǔ)義模塊不能寫一個(gè)完整而有效地規(guī)則文件,它必須和別的語(yǔ)義模塊結(jié)合,這些模塊包括Java語(yǔ)義模塊、Groovy語(yǔ)義模塊、Pythos語(yǔ)義模塊或者是一個(gè)自定義地,指定域地語(yǔ)義模塊。語(yǔ)法指南。
rule-set 元素
?????? 每個(gè)DRL文件必須有一個(gè)rule-set元素,而且名字在規(guī)則基礎(chǔ)和定義綁定命名空間是唯一的。
??? 如<rule-set name="abc">那么在整個(gè)drools中name屬性的值必須是唯一的。
?
Import元素
??? 對(duì)于任何想引用一個(gè)Class的元素,通過Import來指定,這個(gè)元素的使用和編寫Class類引入類的操作一樣。
application-data 元素
?? application-data元素允許對(duì)象不需要將它們斷言進(jìn)入Working Memory,而對(duì)conditions和consequences是可見的。
? 如果沒有在{{rule-set}}里定義,則Application data就不能被設(shè)置。Application data設(shè)置:
workingMemory.setApplicationData("amount", newInteger(3));
在rule-set里定義一個(gè) application data:
<application-data identifier="amount">java.lang.Integer</application-data>
Rule元素
?????? 每個(gè)rule-set必須包含至少一個(gè)rule元素。在這個(gè)rule-set里,每個(gè)rule元素必須具有唯一的名字,也可以包含可選的salience和no-loop屬性。如果duration元素被指定,則no-loop就會(huì)被忽略。
Parameter元素
?????? 每個(gè)rule元素必須包含至少一個(gè)parameter元素,在此rule元素的范圍里,parameter元素必須為其identifer屬性使用一個(gè)唯一的名字。單獨(dú)的,parameter元素不能做任何事。它需要一個(gè)級(jí)連的元素來聲明一個(gè)對(duì)象類型,象class,class-field,和semaphore object。如:
<parameter identifier="goodbye">
? <class>java.lang.String</class>
</parameter>
class元素
?????? class元素是用在parameter元素內(nèi)部的一種對(duì)象類型的實(shí)現(xiàn)。它沒有屬性,它的內(nèi)容既可以是一個(gè)全路徑類,或者是一個(gè)從預(yù)先導(dǎo)入的包中的類的名字。
class-field元素
?????? class-field元素是用在parameter元素內(nèi)部的一種對(duì)象類型的實(shí)現(xiàn)。它不僅僅限制要給出class參數(shù),而且規(guī)定需要為給定的字段(field)指定一個(gè)值(value),這個(gè)字段別限定是字符串類型,字段的值也是一個(gè)靜態(tài)字符串。
如:
<class-field field="name" value="A">State</class-field>
這和下面代碼段是類似的:
<parameter identifier="state">
??? <class>State</class>
</parameter>
?
<java:condition>state.getName().equals("A")<java:condition>
Java規(guī)則引擎學(xué)習(xí)-drools(一) |
| ?翻譯?? |  | walk_in_the_rain |  | 2006-05-05 15:23:57 |  | 查看評(píng)論 | ? ? |
|
基礎(chǔ)語(yǔ)義模塊 ?????? 基礎(chǔ)語(yǔ)義模塊提供了一種在XML種構(gòu)建RuleSet(規(guī)則集)的語(yǔ)言,單獨(dú)地,基礎(chǔ)語(yǔ)義模塊不能寫一個(gè)完整而有效地規(guī)則文件,它必須和別的語(yǔ)義模塊結(jié)合,這些模塊包括Java語(yǔ)義模塊、Groovy語(yǔ)義模塊、Pythos語(yǔ)義模塊或者是一個(gè)自定義地,指定域地語(yǔ)義模塊。 語(yǔ)法指南 rule-set 元素 ?????? 每個(gè)DRL文件必須有一個(gè)rule-set元素,而且名字在規(guī)則基礎(chǔ)和定義綁定命名空間是唯一的。 attribute | optional? | description | name | no | This string must uniquely identify the rule-set in the rule base |
<rule-set name="HelloWorld" ????????? xmlns="http://drools.org/rules" ????????? xmlns:java="http://drools.org/semantics/java" ????????? xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" ????????? xs:schemaLocation="http://drools.org/rules rules.xsd ???????????????????????????? http://drools.org/semantics/java java.xsd"> ? .... ? .... <rule-set> ? Import元素 ?????? 對(duì)于任何想引用一個(gè)Class的元素,通過Imports來指定。 ?????? 元素的實(shí)體可以是一個(gè)全路徑引用: <import>java.util.HashMap</import> 或者是一個(gè)動(dòng)態(tài)的import: <import>java.util.*</import> ? application-data 元素 ?????? application-data元素允許對(duì)象不需要將它們斷言進(jìn)入Working Memory,而對(duì)conditions和consequences是可見的。 ?????? 如果沒有在{{rule-set}}里定義,則Application data就不能被設(shè)置。Application data設(shè)置: workingMemory.setApplicationData("amount", newInteger(3)); 在rule-set里定義一個(gè) application data: <application-data identifier="amount">java.lang.Integer</application-data> ? Rule元素 ?????? 每個(gè)rule-set必須包含至少一個(gè)rule元素。在這個(gè)rule-set里,每個(gè)rule元素必須具有唯一的名字,也可以包含可選的salience和no-loop屬性。如果duration元素被指定,則no-loop就會(huì)被忽略。 attribute | optional? | description | name | no | This string must uniquely identify the rule in the rule-set. | salience | yes | Default to 0. Must be numeric, integral, signed. Must be numeric, non-float values, can be negative. Example: salience="-42", salience="2". | no-loop | yes | Default to "false". Must be boolean. Example: no-loop="true", no-loop="false". | xor-group | yes | Allow only a single rule within a group to fire, all other rules in that group are then removed from the agenda. A rule can be in only a single xor group. |
<rule name="Hello World" salience="10" no-loop="true" xor-group="group1"> ? ... ? ... </rule> ? Parameter元素 ?????? 每個(gè)rule元素必須包含至少一個(gè)parameter元素,在此rule元素的范圍里,parameter元素必須為其identifer屬性使用一個(gè)唯一的名字。單獨(dú)的,parameter元素不能做任何事。它需要一個(gè)級(jí)連的元素來聲明一個(gè)對(duì)象類型,象class,class-field,和semaphore object。 attribute | optional? | description | identifier | no | This string must uniquely identify the parameter in the rule |
<parameter identifier="goodbye"> ? <class>java.lang.String</class> </parameter> ? class元素 ?????? class元素是用在parameter元素內(nèi)部的一種對(duì)象類型的實(shí)現(xiàn)。它沒有屬性,它的內(nèi)容既可以是一個(gè)全路徑類,或者是一個(gè)從預(yù)先導(dǎo)入的包中的類的名字。 attribute | optional? | description |
<class>java.util.HashMap</class> <class>HashMap</class> class-field元素 ?????? class-field元素是用在parameter元素內(nèi)部的一種對(duì)象類型的實(shí)現(xiàn)。它不僅僅限制要給出class參數(shù),而且規(guī)定需要為給定的字段(field)指定一個(gè)值(value),這個(gè)字段別限定是字符串類型,字段的值也是一個(gè)靜態(tài)字符串。 attribute | optional? | description | field | no | The name of the field of the type String, written to JavaBean specifications with setters and getters | value | no | Static value constraint for the given field |
<class-field field="name" value="A">State</class-field> 這和下面代碼段是類似的: <parameter identifier="state"> ??? <class>State</class> </parameter> ? <java:condition>state.getName().equals("A")<java:condition> ? Semaphore元素 ??? Semaphore元素用在parameter元素內(nèi)部的一種特別對(duì)象類型的實(shí)現(xiàn)。它提供了在規(guī)則里使用的全局的命名變量,在那里,identifier就是這個(gè)全局名字。這對(duì)于控制執(zhí)行是非常有用的。 |
|
duration元素
?????? duration元素能夠使Temporal Rules,如果在一個(gè)給定的時(shí)間內(nèi),temporal Rules仍舊是true。
condition元素
?????? condition元素通常被用于確定一個(gè)指定的條件是否存在。一個(gè)rule需要一個(gè)或者多個(gè)condition,當(dāng)condition條件為true,則結(jié)果將被執(zhí)行或者被設(shè)置。
consequence元素
?????? consequence元素讓我們?cè)?/span>Working Memory里,通過drools變量使用java語(yǔ)言語(yǔ)義去改變信息。當(dāng)寫Java consequence模塊時(shí),有幾點(diǎn)需要注意。
?????? 首先能夠使用使用預(yù)先定義在規(guī)則里parameter元素的任何變量,也可以對(duì)application-data進(jìn)行讀取。如果象創(chuàng)建別的變量,必須導(dǎo)入在consequence內(nèi)部導(dǎo)入他們的類,除非它們已經(jīng)通過rule-set的import導(dǎo)入,或者他們?cè)?/span>java.lang包里。
Functions:
?????? 用戶定義函數(shù)允許將代碼片斷置于規(guī)則集中,這些函數(shù)在規(guī)則里能被引用,注意的是,這些方法不許是public static形式的。例如:
posted on 2006-09-01 11:24
有貓相伴的日子 閱讀(2478)
評(píng)論(2) 編輯 收藏 所屬分類:
drools