Drools之基礎語法

挑戰者V發表於2020-07-04

一、規則檔案

標準的規則檔案以”.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.多行註釋(以”/*“開始,以”*/“結束)

相關文章