如果有在看Hello World項(xiàng)目(Sample.drl)的默認(rèn)規(guī)則,也有很多使用的關(guān)鍵字,我們現(xiàn)在將一個(gè)一個(gè)地來(lái)解釋。
包: 每一個(gè)規(guī)則開(kāi)始包的名稱。包充當(dāng)規(guī)則命名空間。包內(nèi)的規(guī)則名稱必須是唯一的。在規(guī)則中包類似于Java包。
Import語(yǔ)句: 要應(yīng)用規(guī)則的任何fact,這些fact都需要導(dǎo)入。例如,com.sample.DroolsTest.Message; 在上面的例子。
規(guī)則定義: 它由規(guī)則名稱,條件和后果。 Drools的關(guān)鍵字:rule, when, then, 以及 end. 在上述的例子中,規(guī)則名 “Hello World” 和 “GoodBye”. when 部分是兩個(gè)規(guī)則中的條件,then 部分是后果.在規(guī)則的術(shù)語(yǔ), when 部分也被稱為L(zhǎng)HS(左手側(cè))以及 then 部分作為規(guī)則的RHS(右手邊)。
現(xiàn)在讓我們來(lái)看看在用于裝載的Drools并執(zhí)行規(guī)則的Java文件中使用的術(shù)語(yǔ)。
知識(shí)庫(kù)是管理規(guī)則,流程,和內(nèi)部類型的集合的接口. 它包含在包 org.drools.KnowledgeBase 內(nèi). 在Drools中,這些被統(tǒng)稱為knowledge definitions 或 knowledge. 知識(shí)定義被分成 knowledge packages. 知識(shí)的定義可以被添加或刪除. 知識(shí)庫(kù)的主要目的是為存儲(chǔ)和重新使用它們,因?yàn)樗鼈兊膭?chuàng)建是昂貴的。知識(shí)庫(kù)提供了創(chuàng)造知識(shí)的會(huì)話方法。
知識(shí)會(huì)話從知識(shí)庫(kù)檢索。它是用于與Drools的引擎進(jìn)行交互的主要接口。知識(shí)會(huì)話有兩種類型:
無(wú)狀態(tài)會(huì)話知識(shí)是一個(gè)無(wú)狀態(tài)的會(huì)話,形成最簡(jiǎn)單的使用情況,不會(huì)利用推斷。一個(gè)無(wú)狀態(tài)的會(huì)話可以被稱為像一個(gè)函數(shù),它傳遞了一些數(shù)據(jù),然后將接收回來(lái)了一定的成效。無(wú)狀態(tài)會(huì)話的常見(jiàn)例子包括:
狀態(tài)會(huì)話更長(zhǎng)保留,并允許隨著時(shí)間的推移反復(fù)變化。一些常見(jiàn)的用例有狀態(tài)會(huì)話包括:
KnoledgeBuilder接口負(fù)責(zé)構(gòu)建從知識(shí)的定義(規(guī)則,流程,類型)一個(gè)KnowledgePackage。它包含在 org.drools.builder.KnowledgeBuilder 包內(nèi). 知識(shí)的定義可以是各種格式。如果使用構(gòu)建有任何問(wèn)題,KnowledgeBuilder將報(bào)告通過(guò)這兩種方法的錯(cuò)誤: hasErrors 以及 getError.
下圖說(shuō)明了過(guò)程
在上面的例子中,因?yàn)槲覀冋诓扇o(wú)狀態(tài)會(huì)話知識(shí)的一個(gè)簡(jiǎn)單的例子,我們已經(jīng)插入了事實(shí)的會(huì)話,然后fireAllRules()方法被調(diào)用,你會(huì)看到輸出結(jié)果。
如果有狀態(tài)會(huì)話的知識(shí),一旦規(guī)則被激發(fā),有狀態(tài)的知識(shí)會(huì)話對(duì)象必須調(diào)用方法Dispose()釋放會(huì)話以避免內(nèi)存泄漏。