Drools之基礎語法


一、規則文件

標准的規則文件以”.drl”結尾。

一套完整的規則文件內容如下:

  • package:包名,只限於邏輯上的管理,若自定義的查詢或函數位於同一包名,不管物理位置如何,都可以直接調用。
  • import:規則引用問題,導入類或靜態方法。
  • global:全局變量,使用時需要單獨定義變量類型
  • function:自定義函數,可以理解為Java靜態方法的一種變形,與JavaScript函數定義相似。
  • queried:查詢。
  • rule end:規則內容中的規則體,是進行業務規則判斷、處理業務結果的部分。

二、規則體語法結構

一個規則體包含三個部分,唯有attributes部分是可選,其他關鍵字都是必填信息。屬性可選並不表示沒有,屬性是有默認值的,如規則默認是被激活的。
規則體語法結構如下:

  • rule:規則開始,參數是規則的唯一名稱
  • attributes:規則屬性,是rule與when之間的參數,為可選項
  • when:規則條件部分,默認為true
  • then:規則結果部分
  • end:當前規則結束

三、匹配模式

LHS部分由一個或多個條件組成,條件又稱pattern。多個pattern之間既可以使用and或or連接,又可以使用小括號確定pattern的優先級,默認條件是true。

pattern的”綁定變量名”是可選的,當前規則的RHS部分需要操作pattern匹配的參數,若要用到某些對象,則可以通過為該對象設定一個綁定變量名來實現對它的操作。對於綁定變量的命名,通常是為其添加一個”$”符號作為前綴,與對象的命名方法相同;綁定變量不僅可以用在對象上,也可以用在對象的屬性上,作用是方便RHS部分的操作,同時也避免與Fact對象屬性的使用相混淆。

“Field約束”是指當前對象中屬性或方法的使用,如添加條件限制”name==’YC’,age==24”.

規則體中LHS部分綁定變量基本上有兩種形式:一種是整個Fact變量的綁定,另一種是約束條件屬性變量的綁定。

四、運算符

運算符是在程序中最常用的計算方法,一般的運算符包括”+、-、*、/、%”等,優先級與Java相同。

五、約束連接

匹配模式中有多種約束符的連接,常用的有”&&”(and)、”||”(or)、”,”(and)。這3個連接符號如果沒有用括號來顯示定義的優先級,那么”&&”優先級大於”||”優先級。

Drools自帶的約束,共有6種比較操作符。

1.contains比較操作符

contains是用來檢查一個Fact對象的某個屬性值是否包含一個指定的對象值。其語法格式為:

Object[field[Collection/Array] contains | not contains value]

2.not contains 比較運算符

not contains的作用與contains相反,它是用來判斷一個Fact對象的某個字段不包含一個指定的對象。

3.memberOf比較運算符

memberOf用來判斷某個Fact對象的某個字段是否在一個或多個集合中。其語法格式為:

Object(fieldName memberOf | not memberOf value[Collection/Array])

4.not memberOf比較運算符

not memberOf與memberOf的作用相反,是用來判斷Fact對象中某個字段不在某個集合中。

5.matches比較運算符

matches用來對某個Fact對象的字段與標准的Java正則表達式進行相似匹配,被比較的字符串可以是一個標准的Java正則表達式。但需要注意的是,正則表達式字符串中不用考慮”\”的轉義問題,其語法為:

Object(fieldName matches | not matches "正則表達式")

6.not matches 比較運算符

not matches的作用與matches相反,是用來將某個Fact對象的字段與一個Java標准正則表達式進行匹配,若與正則表達式不匹配,則規則成立。

7.soundlike比較運算符

soundlike用來檢查單詞是否具有與給定值幾乎相同的聲音(使用英語發音)。基於Soundex算法的語法為:

Object(fieldName soundlike 'value')

8.str比較運算符

str不僅檢查String字段是否以某一值開頭/結尾,還可以判斷字符串長度,其語法為:

Object(fieldName str[startWith|endWith|length] "String"|1)

六、語法擴展

主要指List、Set、Map等元素操作。

七、規則文件drl

1.單行注釋(使用”//“進行標記)

2.多行注釋(以”/*“開始,以”*/“結束)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM