Drools 語法規則樣例(一)

基本規範

基本模式

rule “name”
when 條件部分LHS then RHS結果部分

樣例:
rule "rule1"
when
$customer:Customer(age>20,gender==’male’)
Order(customer==$customer,price>1000)
then
<action>…
End

Fact對象

具有若干個屬性及其對應的getter setter方法的javabean對象

declare Address
city : String
addressName : String
end

與下面的java代碼等價

public class Address {
    private String city;
    private String addressName;
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getAddressName() {
        return addressName;
    }
    public void setAddressName(String addressName) {
        this.addressName = addressName;
    }
}

條件部分LHS

約束連接

&&(and) ||(or) ,(and)
注意:
“,”不能 和“&&” “||” 混合使用

比較運算符

>, >= ,< ,<=, ==, !=, contains, not contains, memberof , not memberof ,matches, not matches等

contians
contians樣例:
package test
rule "rule1"
when
$order:Order();
$customer:Customer(age >20, orders contains $order);
then
System.out.println($customer.getName());
End

注意事項
contains 只能用於對象的某個Collection/Array 類型的字段與另外一個值進行比較,作爲比較的值可以是一個靜態的值,也可以是一個變量(綁定變量或者是一個global 對象)。

not contains

與contains作用相反

memberOf/not memverOf

用法與contains 有些類似,但也有不同,memberOf 的語法如下:
Object(fieldName memberOf value[Collection/Array])
可以看到memberOf 中集合類型的數據是作爲被比較項的,集合類型的數據對象位於memberOf 操作符後面,同時在用memberOf 比較操作符時被比較項一定要是一個變量

matches/not matches

matches 用於對某個Fact字段的java正則表達式進行想死匹配
Object(fieldName matches “正則表達式”)

樣例:
package test
import java.util.List;
rule "rule1"
when
$customer:Customer(name matches "張.*");
then
System.out.println($customer.getName());
end

結果部分RHS

insert():
格式:
insert(new Object());
insertLogical():
將Fact對象插入到當前的WorkingMemory中
update()
retract()
drools()
kcontext()
modify()
因考慮不周調用insert、update 或retract容易發生死循環

package test
import java.util.List;
rule "rule1"
salience 2
when
eval(true);
then
Customer cus=new Customer();
cus.setName("張三");
insert(cus);
end

rule "rule2"
salience 1
when
$customer:Customer(name =="張三");
then
System.out.println("rule2----"+$customer.getName());
end
查詢

以query關鍵字開頭,以end關鍵字結束

query "query name"
conditions
End
有條件查詢
query "query name" (Object obj,...)
conditions
end

外部參數傳入


query "testQuery"(int $age,String $gender)
customer:Customer(age>$age,gender==$gender)
end

元數據聲明


@metadata_key( metadata_value )
在這裏metadata_value 屬性值是可選的。具體實例如下:
@author(gaojie)
這個元數據屬性名爲author,值爲gaojie。

declare User
@author(gaojie)
@createTime(2009-10-25)
username : String @maxLenth(30)
userid : String @key
birthday : java.util.Date
end

代碼是一個元數據在通過declare 關鍵字聲明對象時的具體應用實例,在這個例子當中,一共有四個元數據的聲明,首先對於User 對象有兩個元數據的聲明:author 說明這個對象的創建者是gaojie;createTime 說明創建的時間爲2009-10-25 日。接下來是對User
對象的username 屬性的描述,說明該屬性的maxLenth 的值爲30。最後是對userid 屬性的描述,注意這個描述只有一個無數據的屬性名key,而沒有爲這個屬性key 賦於具體的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章