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等元素操作。