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.多行注釋(以」/*「開始,以」*/「結束)

Tags: