本站不再更新,歡迎光臨 java開發(fā)技術(shù)網(wǎng)
          隨筆-230  評(píng)論-230  文章-8  trackbacks-0
          ?? 基礎(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ì)conditionsconsequences是可見的。

          ? 如果沒有在{{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元素必須具有唯一的名字,也可以包含可選的salienceno-loop屬性。如果duration元素被指定,則no-loop就會(huì)被忽略。

          Parameter元素

          ?????? 每個(gè)rule元素必須包含至少一個(gè)parameter元素,在此rule元素的范圍里,parameter元素必須為其identifer屬性使用一個(gè)唯一的名字。單獨(dú)的,parameter元素不能做任何事。它需要一個(gè)級(jí)連的元素來聲明一個(gè)對(duì)象類型,象classclass-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_rain2006-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ì)conditionsconsequences是可見的。

          ?????? 如果沒有在{{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元素必須具有唯一的名字,也可以包含可選的salienceno-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ì)象類型,象classclass-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-setimport導(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

          評(píng)論:
          # re: Drools規(guī)則引擎的基礎(chǔ)語(yǔ)義 2006-09-01 11:55 | 江南白衣
          Drools3.0 不搞這種XML式定義啦:)  回復(fù)  更多評(píng)論
            
          # re: Drools規(guī)則引擎的基礎(chǔ)語(yǔ)義 2006-09-01 14:51 | Schweigen
          Drools3.0 還是有XML 定義模塊的,不過確實(shí)沒有什么人用了:)  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          本站不再更新,歡迎光臨 java開發(fā)技術(shù)網(wǎng)
          主站蜘蛛池模板: 清流县| 茂名市| 宜川县| 贺兰县| 毕节市| 郑州市| 伊通| 偏关县| 九寨沟县| 大竹县| 兰州市| 隆化县| 安溪县| 武强县| 卢龙县| 灵宝市| 冷水江市| 普宁市| 罗田县| 青田县| 西丰县| 乌审旗| 南郑县| 旌德县| 阿勒泰市| 西藏| 林周县| 临城县| 岳阳市| 平遥县| 个旧市| 无锡市| 丹巴县| 永济市| 宁德市| 南部县| 南开区| 屏南县| 洞头县| 翁源县| 岗巴县|