- Drools 教程
- Drools - 首頁
- Drools - 簡介
- Drools - Eclipse 外掛
- Drools - 執行時
- Drools - 建立 Drools 程式
- Drools - 常用術語
- Drools - 規則編寫
- Drools - 規則語法
- Drools - Drools 程式示例
- Drools - 除錯
- Drools 有用資源
- Drools - 快速指南
- Drools - 有用資源
- Drools - 討論
Drools - 規則編寫
如果您檢視 HelloWorld 專案 (Sample.drl) 中編寫的預設規則,會發現使用了許多關鍵字,我們現在將對其進行解釋。
Sample.drl
包 (Package) − 每條規則都以包名開頭。包充當規則的名稱空間。同一個包內的規則名稱必須唯一。規則中的包類似於 Java 中的包。
匯入語句 (Import statement) − 您想要應用規則的任何事實都需要匯入。例如,以上示例中的 com.sample.DroolsTest.Message。
規則定義 (Rule Definition) − 它由規則名稱、條件和結論組成。Drools 關鍵字為 rule、when、then 和 end。在上面的示例中,規則名稱為“Hello World”和“GoodBye”。when 部分是兩條規則中的條件,then 部分是結論。在規則術語中,when 部分也稱為 LHS(左側), then 部分也稱為 RHS(右側)。
現在讓我們來看一下用於載入 Drools 並執行規則的 Java 檔案中使用的術語。
知識庫 (Knowledge Base)
知識庫是一個介面,用於管理規則、流程和內部型別的集合。它包含在包org.drools.KnowledgeBase中。在 Drools 中,這些通常被稱為知識定義或知識。知識定義分組到知識包中。可以新增或刪除知識定義。知識庫的主要目的是儲存和重用它們,因為它們的建立成本很高。知識庫提供建立知識會話的方法。
知識會話 (Knowledge Session)
知識會話是從知識庫中檢索的。它是與 Drools 引擎互動的主要介面。知識會話可以分為兩種型別:
無狀態知識會話 (Stateless Knowledge Session)
有狀態知識會話 (Stateful Knowledge Session)
無狀態知識會話 (Stateless Knowledge Session)
無狀態知識會話是一個無狀態會話,構成了最簡單的用例,不使用推理。無狀態會話可以像函式一樣呼叫,傳遞一些資料,然後接收一些結果。無狀態會話的常見示例包括:
驗證
這個人是否有資格獲得抵押貸款?
計算
計算抵押貸款保險費。
路由和過濾
將傳入的訊息(例如電子郵件)過濾到資料夾中。
將傳入的訊息傳送到目標。
有狀態知識會話 (Stateful Knowledge Session)
有狀態會話生命週期更長,並允許隨著時間的推移進行迭代更改。有狀態會話的一些常見用例包括:
監控
股票市場監控和分析,用於半自動購買。
診斷
故障查詢,醫學診斷
物流
包裹跟蹤和交付配置
知識構建器 (Knowledge Builder)
KnowledgeBuilder 介面負責從知識定義(規則、流程、型別)構建 KnowledgePackage。它包含在包org.drools.builder.KnowledgeBuilder中。知識定義可以採用多種格式。如果構建過程中有任何問題,KnowledgeBuilder 將透過這兩種方法報告錯誤:hasErrors 和 getError。
下圖解釋了這個過程
在上面的示例中,由於我們採用的是無狀態知識會話的簡單示例,因此我們將事實插入會話中,然後呼叫 fireAllRules() 方法,您將看到輸出。
對於有狀態知識會話,一旦規則被觸發,有狀態知識會話物件必須呼叫dispose()方法來釋放會話並避免記憶體洩漏。