本申請涉及計算機應用領域,特別是涉及一種規(guī)則引擎的模式匹配方法和裝置。
背景技術:
復雜企業(yè)級項目的開發(fā)和維護面臨著軟件必須“隨需而變”的問題。由于隨外部條件和需求經常變動的商業(yè)決策和業(yè)務邏輯被固化在代碼中,這使得軟件的開發(fā)和維護變得異常困難,耗費大量的時間和成本,因此迫切需要分離企業(yè)決策者的決策邏輯和應用開發(fā)者的技術決策,將這些企業(yè)決策者的決策邏輯放在中心數據庫或者其他的地方,讓他們能在運行時可以動態(tài)地被管理和被修改,從而提高軟件系統(tǒng)的柔性和適應性。在這樣的動態(tài)環(huán)境中,規(guī)則引擎應運而生,規(guī)則引擎能夠增加軟件的可維護性,為軟件提供可供用戶直接修改業(yè)務邏輯的功能,使得軟件項目不會因為維護成本太高而難以運行。
規(guī)則引擎正是由推理引擎發(fā)展而來,是一種嵌入在應用程序中的組件,實現了將業(yè)務決策從應用程序代碼中分離出來,并使用預定義的語義模塊變形業(yè)務決策。接收數據輸入,解釋業(yè)務規(guī)則,并根據業(yè)務規(guī)則作出業(yè)務決策。
目前大部分規(guī)則引擎產品的都采用RETE算法進行模式匹配。RETE算法是Charles Forgy博士于1979年提出的一種效率較高的模式匹配算法,其核心思想是將分離的匹配項根據內容動態(tài)構造匹配數,以達到顯著降低計算量的效果。
但,基于RETE算法規(guī)則引擎還是存在一些缺點:
(1)由于RETE算法只能對類對象進行匹配處理,因此,需要預先為其準備好基礎數據,而數據準備工作量卻是非常大。例如:在準備數據時需要采用編寫程序的方式來編寫各種數據處理邏輯,如數據過濾邏輯、預處理邏輯、數據轉換邏輯、數據存取邏輯等,然后利用這些程序來處理數據。程序的編寫和數據的處理都需要耗費大量的時間和成本。
(2)RETE算法在處理共享的資源時,資源消耗太大,導致規(guī)則引擎的性能較差。這是因為RETE算法按照優(yōu)先級匹配條件語句,執(zhí)行規(guī)則語句,規(guī)則執(zhí)行后會引發(fā)事實的變化,規(guī)則引擎就會重新進行條件匹配,直到不能再匹配為止,這樣反饋循環(huán)匹配的方式,會降低規(guī)則引擎的性能。
技術實現要素:
為了解決上述技術問題,本申請實施例提供了一種規(guī)則引擎的模式匹配方法和裝置,利用加權有向圖方式的規(guī)則流程進行匹配,避免回溯問題,既能夠提高規(guī)則引擎的性能,又具有較好的可擴展性。
在本申請第一方面,提供了一種規(guī)則引擎的模式匹配方法,所述方法包括:
根據當前事件的事件類型在規(guī)則庫中選擇對應的規(guī)則流程;所述規(guī)則庫包括:至少一個規(guī)則流程,規(guī)則流程是指以加權有向圖方式表達的、能夠處理特定類型事件的流程,規(guī)則流程之間相互獨立;
根據當前事件對應的規(guī)則流程的加權有向圖對當前事件進行條件匹配,以執(zhí)行在加權有向圖中被匹配的一條從開始節(jié)點到結束節(jié)點的路徑上各節(jié)點所承載的操作。
可選的,通過以下方式建立規(guī)則流程:
從業(yè)務規(guī)則中獲取用于描述條件和操作的信息;其中,業(yè)務規(guī)則包含用于處理特定類型事件的、包括條件和對應操作的內容;
根據獲取到的用于描述操作的信息創(chuàng)建對應的節(jié)點,所述節(jié)點用于承載操作;
根據獲取到的用于描述條件的信息創(chuàng)建與節(jié)點關聯(lián)的邊,其中,邊包含:邊起始節(jié)點、邊終止節(jié)點、條件、邊權重,以建立用于表示規(guī)則流程的加權有向圖。
可選的,所述規(guī)則庫中還包括:用于測試的規(guī)則流程,所述用于測試的規(guī)則流程是指以加權有向圖方式表達的、能夠處理測試事件的流程;
則所述方法,還包括:
若當前事件的類型對應的規(guī)則流程是所述用于測試的規(guī)則流程時,根據所述用于測試的規(guī)則流程的加權有向圖對當前事件進行條件匹配,但不執(zhí)行 在加權有向圖中被匹配的一條從開始節(jié)點到結束節(jié)點的路徑上各節(jié)點所承載的操作,僅保存當前事件的匹配路徑信息。
可選的,根據當前事件的事件類型在規(guī)則庫中選擇多個對應的規(guī)則流程;
則根據當前事件多個對應的規(guī)則流程的加權有向圖分別獨立地、并行對當前事件進行條件匹配,以分別獨立地、并行執(zhí)行在加權有向圖中被匹配的一條從開始節(jié)點到結束節(jié)點的路徑上各節(jié)點所承載的操作。
可選的,所述加權有向圖中邊所承載的條件是利用邏輯表達式表征的。
可選的,所述根據當前事件對應的規(guī)則流程的加權有向圖對當前事件進行條件匹配,以執(zhí)行在加權有向圖中被匹配的一條從開始節(jié)點到結束節(jié)點的路徑上各節(jié)點所承載的操作的步驟,具體是:
根據加權有向圖和當前事件,判斷加權有向圖中被匹配的節(jié)點關聯(lián)的邊所承載的邏輯表達式的真?zhèn)危?/p>
如果為真,則該條邊被匹配命中,執(zhí)行該條邊關聯(lián)的節(jié)點所承載的操作,繼續(xù)判斷下一個節(jié)點關聯(lián)的邊所承載的邏輯表達式的真?zhèn)?,直到匹配命中加權有向圖中的結束節(jié)點為止。
可選的,當加權有向圖中的一個節(jié)點關聯(lián)多條邊時,
則所述判斷節(jié)點關聯(lián)的邊所承載的邏輯表達式的真?zhèn)危唧w為:
按照邊的權重由高到低的順序,依次判定節(jié)點關聯(lián)的每條邊所承載的邏輯表達式的真?zhèn)?,如果某條邊判斷為真,則停止判斷節(jié)點關聯(lián)的其他邊。
本申請第二方面提供了一種規(guī)則引擎的模式匹配裝置,所述裝置包括:
規(guī)則流程選擇單元,用于根據當前事件的事件類型在規(guī)則庫中選擇對應的規(guī)則流程;所述規(guī)則庫包括:至少一個規(guī)則流程,規(guī)則流程是指以加權有向圖方式表達的、能夠處理特定類型事件的、包含條件和對應操作的流程,規(guī)則流程之間相互獨立;
規(guī)則流程執(zhí)行單元,用于根據當前事件對應的規(guī)則流程的加權有向圖對當前事件進行條件匹配,以執(zhí)行在加權有向圖中被匹配的一條從開始節(jié)點到結束節(jié)點的路徑上各節(jié)點所承載的操作。
可選的,所述裝置還包括:
規(guī)則流程創(chuàng)建單元,用于創(chuàng)建所述規(guī)則流程;
所述規(guī)則流程創(chuàng)建單元包括:
信息獲取子單元、節(jié)點創(chuàng)建子單元、邊創(chuàng)建子單元;
信息獲取子單元,用于從業(yè)務規(guī)則中獲取用于描述條件和操作的信息;其中,業(yè)務規(guī)則包含用于處理特定類型事件的、包括條件和對應操作的內容;
節(jié)點創(chuàng)建子單元,用于根據獲取到的用于描述操作的信息創(chuàng)建對應的節(jié)點,所述節(jié)點用于承載操作;
邊創(chuàng)建子單元,用于根據獲取到的用于描述條件的信息創(chuàng)建與節(jié)點關聯(lián)的邊,其中,邊包含:邊起始節(jié)點、邊終止節(jié)點、邊承載的條件、邊權重,以建立用于表示規(guī)則流程的加權有向圖。
可選的,所述規(guī)則庫中還包括:用于測試的規(guī)則流程,所述用于測試的規(guī)則流程是指以加權有向圖方式表達的、能夠處理測試事件的流程;
則所述裝置,還包括:
規(guī)則流程執(zhí)行單元,用于若當前事件的類型對應的規(guī)則流程是所述用于測試的規(guī)則流程時,根據所述用于測試的規(guī)則流程的加權有向圖對當前事件進行條件匹配,但不執(zhí)行在加權有向圖中被匹配的一條從開始節(jié)點到結束節(jié)點的路徑上各節(jié)點所承載的操作,僅保存當前事件的匹配路徑信息。
可選的,所述規(guī)則流程選擇單元,具體用于根據當前事件的事件類型在規(guī)則庫中選擇多個對應的規(guī)則流程;
所述規(guī)則流程執(zhí)行單元,具體用于根據當前事件多個對應的規(guī)則流程的加權有向圖分別獨立地、并行對當前事件進行條件匹配,以分別獨立地、并行執(zhí)行在加權有向圖中被匹配的一條從開始節(jié)點到結束節(jié)點的路徑上各節(jié)點所承載的操作。
可選的,所述加權有向圖中邊所承載的條件是利用邏輯表達式表征的。
可選的,所述規(guī)則流程執(zhí)行單元,包括:
邊條件判斷子單元,用于根據加權有向圖和當前事件,判斷加權有向圖中被匹配的節(jié)點關聯(lián)的邊所承載的邏輯表達式的真?zhèn)?;如果為真,則該條邊被匹配命中,觸發(fā)操作執(zhí)行子單元;
操作執(zhí)行子單元,用于執(zhí)行被匹配命中的邊關聯(lián)的節(jié)點所承載的操作, 再觸發(fā)所述邊條件判斷子單元對下一個節(jié)點關聯(lián)的邊進行判斷,直到匹配命中加權有向圖中的結束節(jié)點為止。
可選的,當加權有向圖中的一個節(jié)點關聯(lián)多條邊時,
則邊條件判斷子單元,具體用于:
按照邊的權重由高到低的順序,依次判定節(jié)點關聯(lián)的每條邊所承載的邏輯表達式的真?zhèn)危绻硹l邊判斷為真,則停止判斷節(jié)點關聯(lián)的其他邊,并觸發(fā)操作執(zhí)行子單元。
由上述實施例可以看出,與現有技術相比,本申請的優(yōu)點在于:
本申請先根據當前事件的事件類型在規(guī)則庫中選擇對應的規(guī)則流程;其中,規(guī)則庫包括:至少一個規(guī)則流程,規(guī)則流程是指以加權有向圖方式表達的、能夠處理特定類型事件的、包含條件和對應操作的流程,規(guī)則流程之間相互獨立;這種,基于加權有向圖的方式表達規(guī)則流程,其修改方式比較簡單,如局部規(guī)則修改只需對相關節(jié)點及其關聯(lián)的后續(xù)節(jié)點,因此,其便于規(guī)則流程的維護,可擴展性非常好。再根據當前事件對應的規(guī)則流程的加權有向圖對當前事件進行條件匹配,以執(zhí)行在加權有向圖中被匹配的一條從開始節(jié)點到結束節(jié)點的路徑上各節(jié)點所承載的操作。這種,基于加權有向圖的匹配方式,是沿著單向方式匹配,節(jié)點的操作不會影響上一節(jié)點的操作,不會出現回溯問題,匹配效率較高,能夠提升規(guī)則引擎的性能。
附圖說明
為了更清楚地說明本申請實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。
圖1是本發(fā)明實施例提供的一種規(guī)則引擎的模式匹配方法的流程圖;
圖2是本發(fā)明實施例提供的規(guī)則流程建立方法流程圖;
圖3是本發(fā)明實施例提供的一種加權有向圖示例圖;
圖4是本發(fā)明實施例提供的一種加權有向圖示例圖;
圖5是本發(fā)明實施例提供的一種規(guī)則引擎的模式匹配裝置的結構圖;
圖6是本發(fā)明實施例提供的另一種規(guī)則引擎的模式匹配裝置的結構圖。
具體實施方式
為使本申請的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結合附圖對本申請實施例進行詳細描述。
方法實施例
請參閱圖1,圖1本發(fā)明實施例提供的一種規(guī)則引擎的模式匹配方法的流程圖,該方法可以由用戶機器執(zhí)行,用戶機器可以是個人的PC機,也可以是各種類型的網站服務器,例如Web服務器,或者APP服務器。如圖1所示,該方法可以包括步驟S101和步驟S102:
步驟101:根據當前事件的事件類型在規(guī)則庫中選擇對應的規(guī)則流程;所述規(guī)則庫包括:至少一個規(guī)則流程,規(guī)則流程是指以加權有向圖方式表達的、能夠處理特定類型事件的流程,規(guī)則流程之間相互獨立;
步驟102:根據當前事件對應的規(guī)則流程的加權有向圖對當前事件進行條件匹配,以執(zhí)行在加權有向圖中被匹配的一條從開始節(jié)點到結束節(jié)點的路徑上各節(jié)點所承載的操作。
本發(fā)明實施例的方法,應用于規(guī)則引擎中,而規(guī)則引擎是一種根據規(guī)則流程中包含的指定過濾條件,判斷其是否能夠匹配當前事件,以決定是否執(zhí)行規(guī)則中所規(guī)定的動作的引擎,規(guī)則引擎一般嵌入在應用系統(tǒng)中,對應用系統(tǒng)前端接收到的事件進行處理。
在實現時,應用系統(tǒng)先進行事件采集,由于不同類型的設備上報的事件格式有較大的區(qū)域,所以,對于不同類型的事件分別進行歸一化處理,事件歸一化定義了較通用的事件的屬性,如事件時間、事件名稱、事件類型、事件信息內容、事件生成者信息等。
在實現時,還可以從大量事件中將符合一定條件的重復事件歸并為一條事件,同時記錄發(fā)次數。通過歸并,可以減少事件數量,提供系統(tǒng)的處理能力。歸并主要基于的條件包括:時間窗、源地址、目的地址、源端口、目的端口、事件類型等。
應用系統(tǒng)采集得到事件之后,將事件傳送到規(guī)則引擎中,然后利用上述方法步驟101根據事件類型選擇需要執(zhí)行的規(guī)則流程。
一般情況下,不同的規(guī)則流程分別用于處理不同類型的事件;因此,一 個事件只需要執(zhí)行一個規(guī)則流程;但,特殊情況下,不同的規(guī)則流程可以用于處理相同類型的事件。這樣,在規(guī)則庫中針對一個事件可以選擇到多個對應的規(guī)則流程,這些規(guī)則流程彼此獨立地、并行地執(zhí)行各自的操作。具體的:
根據當前事件的事件類型在規(guī)則庫中選擇多個對應的規(guī)則流程;
則根據當前事件多個對應的規(guī)則流程的加權有向圖分別獨立地、并行對當前事件進行條件匹配,以分別獨立地、并行執(zhí)行在加權有向圖中被匹配的一條從開始節(jié)點到結束節(jié)點的路徑上各節(jié)點所承載的操作。
另外,考慮到規(guī)則流程在建立初期,測試人員需要進行大量測試,以驗證其性能;這就需要測試人員搭建測試平臺來獨立測試。為了簡化測試人員的工作量,提高測試效率,本發(fā)明在圖1所示方法的基礎上還提供了可選的實現方案。具體如下:
所述規(guī)則庫中還包括:用于測試的規(guī)則流程,所述用于測試的規(guī)則流程是指以加權有向圖方式表達的、能夠處理測試事件的流程;
則所述方法,還包括:
若當前事件的類型對應的規(guī)則流程是所述用于測試的規(guī)則流程時,根據所述用于測試的規(guī)則流程的加權有向圖對當前事件進行條件匹配,但不執(zhí)行在加權有向圖中被匹配的一條從開始節(jié)點到結束節(jié)點的路徑上各節(jié)點所承載的操作,僅保存當前事件的匹配路徑信息。
這樣,當有新的規(guī)則流程需要被測試時,則在規(guī)則庫中增加該新的測試流程,而通過特定類型的事件來測試該測試流程的性能,由于測試過程關注的是規(guī)則流程的邏輯性是否正確,因此,在測試過程中,不需要真正執(zhí)行動作,而只是記錄事件的匹配路徑信息即可。由于在規(guī)則庫中規(guī)則流程間彼此獨立,互不影響,因此,整個測試過程是獨立執(zhí)行的,既不會對其他規(guī)則流程的執(zhí)行產生影響,也不會受到其他規(guī)則流程的影響。這就相當于在規(guī)則引擎內為測試人員提供了一個測試平臺,便于測試人員操作。
接下來,對上述規(guī)則庫中的規(guī)則流程的建立過程進行解釋說明。
參見圖2,圖2是本發(fā)明實施例提供了規(guī)則流程建立方法流程圖,如圖2所示,該方法可以包括:
步驟201:從業(yè)務規(guī)則中獲取用于描述條件和操作的信息;其中,業(yè)務規(guī) 則包含用于處理特定類型事件的、包括條件和對應操作的內容;
步驟202:根據獲取到的用于描述操作的信息創(chuàng)建對應的節(jié)點,所述節(jié)點用于承載操作;
步驟203:根據獲取到的用于描述條件的信息創(chuàng)建與節(jié)點關聯(lián)的邊,其中,邊包含:邊起始節(jié)點、邊終止節(jié)點、邊承載的條件、邊權重,以建立用于表示規(guī)則流程的加權有向圖。
這里需要說明的是,在實現時,步驟202創(chuàng)建的節(jié)點承載的操作可以為空,將這種節(jié)點可以看作是虛擬處理節(jié)點,其不需要執(zhí)行任何動作。一個節(jié)點可以承載一個操作,也可以承載多個操作。步驟203創(chuàng)建的邊承載的條件也可以為空,將這種邊可以看作是無條件邊,也稱之為永真邊,這種邊的條件判斷結果永遠為真。一般情況下,當一個節(jié)點關聯(lián)多條邊,其中一條為永真邊時,該條永真邊的權重應該設置為最低。
從上述步驟可以看出,該方法是利用加權有向圖的方式來表達業(yè)務規(guī)則,使得加權有向圖與規(guī)則流程之間具有一一映射關系,加權有向圖中的節(jié)點(Node)對應規(guī)則流程的操作(Action)部分;一個節(jié)點可以對應一個或多個操作;加權有向圖中的邊(Edge)對應規(guī)則流程中的條件部分;邊的要素包括邊起始節(jié)點、邊終止節(jié)點、邊權重、邊承載的條件,這樣一個加權有向圖就能夠很好的詮釋規(guī)則流程的全部內容,而加權有向圖具有布局簡單、便于維護等優(yōu)點,這樣,就方便業(yè)務人員維護該業(yè)務規(guī)則。
為了便于理解,下面再結合示例對加權有向圖的原理進行解釋說明。
加權有向圖可以用公式G=(V,E)表示,其中,集合V是非空的頂點集(節(jié)點集),集合E是帶權重有方向的邊的集合,E中元素稱為帶權重的有向邊。
例如,G=(V,E),V={v1,v2,v3,v4,v5},E={<v1,v2,T1,2>,<v1,v3,T2,1>,<v2,v4,T3,2>,<v3,v4,T4,1>,<v4,v5,T5,0>},其中,E中包含的有序對表示帶權重、條件的有向邊,有序對中的4個元素分別表示與邊關聯(lián)的起始節(jié)點、終止節(jié)點、條件、邊的權重,其中,權重越高表示該條邊的具有越高的遍歷優(yōu)先權。例如,有序對<v1,v2,T1,2>表示,起始節(jié)點V1到終止節(jié)點V2的邊,攜帶條件T1,邊的權重為2。基于這些信息可以唯一確定出一個加權有向圖,如圖3所示。
在實現時,還可以按照如下約束條件來生成用于表示規(guī)則流程的加權有向圖:
(1)有且只有一個開始節(jié)點和一個結束節(jié)點;如圖3中示出的開始節(jié)點為V1,結束節(jié)點為V5。
(2)有向圖中任何一個節(jié)點都有到結束節(jié)點一條路徑。
(3)任何兩個節(jié)點最多只有一條邊,不存在環(huán)路。
另外,在實現時,可以利用邏輯表達式來表征加權有向圖中邊所承載的條件。其中,邏輯表達式的形式多種多樣,在本發(fā)明實施例中對邏輯表達式的具體形式不受限制,在實現時,多個簡單邏輯表達式還可以通過與(&)或(||)非(!)組合成為更為復雜邏輯表達式。
一般的,邏輯表達式可以包括左值、操作符、右值,其中,左值可以是常量或函數;操作符合可以是大于、小于、等于等數學符號;右值也可以是常量或函數。下面通過示例來說明。
例如,邊承載的條件是過濾商品標題含藥品,則其邏輯表達式為:
Substr(title,’藥品’)==TRUE;
如果,所述加權有向圖中邊所承載的條件是利用邏輯表達式表征的。則上述步驟102可以具體為:
根據加權有向圖和當前事件,判斷加權有向圖中被匹配的節(jié)點關聯(lián)的邊所承載的邏輯表達式的真?zhèn)危?/p>
如果為真,則該條邊被匹配命中,執(zhí)行該條邊關聯(lián)的節(jié)點所承載的操作,繼續(xù)判斷下一個節(jié)點關聯(lián)的邊所承載的邏輯表達式的真?zhèn)?,直到匹配命中加權有向圖中的結束節(jié)點為止。
其中,當加權有向圖中的一個節(jié)點關聯(lián)多條邊時,
則所述判斷節(jié)點關聯(lián)的邊所承載的邏輯表達式的真?zhèn)?,具體為:
按照邊的權重由高到低的順序,依次判定節(jié)點關聯(lián)的每條邊所承載的邏輯表達式的真?zhèn)危绻硹l邊判斷為真,則停止判斷節(jié)點關聯(lián)的其他邊。
下面結合圖3對該方式進行舉例說明。假設圖3所示的加權有向圖是規(guī)則庫中一個規(guī)則流程的加權有向圖,應用系統(tǒng)接收一個事件,根據事件的類型選擇對應的規(guī)則流程,正好是圖3所示的加權有向圖表示的規(guī)則流程。
則匹配過程如下:
從圖3所示的加權有向圖中邊分別是<v1,v2,T1,2>,<v1,v3,T2,1>,<v2,v4,T3,2>,<v3,v4,T4,1>,<v4,v5,T5,0>,則從加權有向圖的開始節(jié)點V1開始判斷,與節(jié)點V1關聯(lián)的邊有兩條,由于節(jié)點V1與節(jié)點V2關聯(lián)的邊的權重大于節(jié)點V1和V3關聯(lián)的邊的權重,因此,先判斷節(jié)點V1與節(jié)點V2關聯(lián)的邊所承載的條件T1,結合當前事件判斷T1,如果判斷T1的邏輯表達式為真,則執(zhí)行V2所承載的操作,停止判斷節(jié)點V1和V3關聯(lián)的邊;繼續(xù)判斷V2所關聯(lián)的邊,由于V2僅有一條關聯(lián)的邊,則直接判斷V2與V4關聯(lián)的邊的條件T3的邏輯表達式的真?zhèn)?,如果為真,則執(zhí)行V4所承載的操作,并繼續(xù)判斷V4所關聯(lián)的邊,由于V4向下僅關聯(lián)V5,則直接判斷V4與V5關聯(lián)的邊的條件T5的邏輯表達式的真?zhèn)?,如果為真,則執(zhí)行V5所承載的操作,由于V5是加權有向圖的結束節(jié)點,則匹配過程結束。
可以看出,基于加權有向圖對事件進行匹配,能夠匹配到一條從開始節(jié)點到結束節(jié)點的路徑,在匹配過程中,執(zhí)行被匹配的路徑上節(jié)點所承載的操作。整個匹配過程,沿著有向圖的有向邊的引導,匹配過程不會出現回溯現象,匹配效率較高。
為了更清楚地體現本發(fā)明的優(yōu)點,下面通過一個示例對比現有技術和分本發(fā)明技術的實現效果。
該示例描述的是,一個超市與多家銀行合作,超市為用戶提供的積分活動,積分的計算規(guī)則如下表所示:
但若利用現有技術的方法,則規(guī)則引擎維護序列類似如下規(guī)則,形成規(guī)則集,利用該規(guī)則集進行匹配,規(guī)則集如下表所示:
但利用本發(fā)明實施例提供的方法建立規(guī)則庫中的規(guī)則流程如圖4所示。結合上表和圖4可以看出,本發(fā)明的方案與現有技術的方案相比,在規(guī)則引擎的應用中,具有如下優(yōu)勢:
由于規(guī)則引擎在應用中,維護人員需要對規(guī)則進行維護(初始建立)、對規(guī)則進行修改、或新增規(guī)則等處理,現有技術方案,完全是基于編程人員的編程思維,一般是先用excel表格或其他輔助工具,把規(guī)則維護好再導入規(guī)則引擎中。在修改規(guī)則時,必須完全了解已有的所有規(guī)則,以避免對其中一個規(guī)則的修改而影響其他規(guī)則。其操作較復雜,對維護人員的要求較高,工作量較大。
但本發(fā)明的方案,通過加權有向圖來表示規(guī)則流程,這種方式類似于思維導圖方式,降低了對維護人員的要求,不論多么復雜的規(guī)則都可以通過節(jié)點分解成簡單的規(guī)則,方便維護人員進行規(guī)則維護。在規(guī)則進行修改時,其影響范圍只局限于該節(jié)點及其后續(xù)節(jié)點,對其他分支幾乎沒有影響,可以通過新插入節(jié)點或邊的方式快速修改。
裝置實施例
與上述方法相對應,本申請實施例還提供了一種規(guī)則引擎的模式匹配裝置,下面結合圖5對該裝置進行解釋說明。如圖5所示,該裝置可以包括流程選擇單元501和規(guī)則流程執(zhí)行單元502。下面結合該裝置的工作原理進一步介紹其內部結構以及連接關系。
規(guī)則流程選擇單元501,用于根據當前事件的事件類型在規(guī)則庫中選擇對應的規(guī)則流程;所述規(guī)則庫包括:至少一個規(guī)則流程,規(guī)則流程是指以加權有向圖方式表達的、能夠處理特定類型事件的、包含條件和對應操作的流程,規(guī)則流程之間相互獨立;
規(guī)則流程執(zhí)行單元502,用于根據當前事件對應的規(guī)則流程的加權有向圖對當前事件進行條件匹配,以執(zhí)行在加權有向圖中被匹配的一條從開始節(jié)點 到結束節(jié)點的路徑上各節(jié)點所承載的操作。
可選的,如圖6所示,另一種裝置結構圖,具體是在上述圖5所示裝置的基礎上,還增加有如下單元:規(guī)則流程創(chuàng)建單元503,用于創(chuàng)建所述規(guī)則流程;
所述規(guī)則流程創(chuàng)建單元包括:
信息獲取子單元5031、節(jié)點創(chuàng)建子單元5032、邊創(chuàng)建子單元5033;
信息獲取子單元,用于從業(yè)務規(guī)則中獲取用于描述條件和操作的信息;其中,業(yè)務規(guī)則包含用于處理特定類型事件的、包括條件和對應操作的內容;
節(jié)點創(chuàng)建子單元,用于根據獲取到的用于描述操作的信息創(chuàng)建對應的節(jié)點,所述節(jié)點用于承載操作;
邊創(chuàng)建子單元,用于根據獲取到的用于描述條件的信息創(chuàng)建與節(jié)點關聯(lián)的邊,其中,邊包含:邊起始節(jié)點、邊終止節(jié)點、邊承載的條件、邊權重,以建立用于表示規(guī)則流程的加權有向圖。
可選的,所述規(guī)則庫中還包括:用于測試的規(guī)則流程,所述用于測試的規(guī)則流程是指以加權有向圖方式表達的、能夠處理測試事件的流程;
則所述裝置,還包括:
規(guī)則流程匹配單元,用于若當前事件的類型對應的規(guī)則流程是所述用于測試的規(guī)則流程時,根據所述用于測試的規(guī)則流程的加權有向圖對當前事件進行條件匹配,但不執(zhí)行在加權有向圖中被匹配的一條從開始節(jié)點到結束節(jié)點的路徑上各節(jié)點所承載的操作,僅保存當前事件的匹配路徑信息。
可選的,所述規(guī)則流程選擇單元,具體用于根據當前事件的事件類型在規(guī)則庫中選擇多個對應的規(guī)則流程;
所述規(guī)則流程執(zhí)行單元,具體用于根據當前事件多個對應的規(guī)則流程的加權有向圖分別獨立地、并行對當前事件進行條件匹配,以分別獨立地、并行執(zhí)行在加權有向圖中被匹配的一條從開始節(jié)點到結束節(jié)點的路徑上各節(jié)點所承載的操作。
可選的,所述加權有向圖中邊所承載的條件是利用邏輯表達式表征的。
可選的,所述規(guī)則流程執(zhí)行單元,包括:
邊條件判斷子單元,用于根據加權有向圖和當前事件,判斷加權有向圖 中被匹配的節(jié)點關聯(lián)的邊所承載的邏輯表達式的真?zhèn)危蝗绻麨檎?,則該條邊被匹配命中,觸發(fā)操作執(zhí)行子單元;
操作執(zhí)行子單元,用于執(zhí)行被匹配命中的邊關聯(lián)的節(jié)點所承載的操作,再觸發(fā)所述邊條件判斷子單元對下一個節(jié)點關聯(lián)的邊進行判斷,直到匹配命中加權有向圖中的結束節(jié)點為止。
可選的,當加權有向圖中的一個節(jié)點關聯(lián)多條邊時,
則邊條件判斷子單元,具體用于:
按照邊的權重由高到低的順序,依次判定節(jié)點關聯(lián)的每條邊所承載的邏輯表達式的真?zhèn)?,如果某條邊判斷為真,則停止判斷節(jié)點關聯(lián)的其他邊,并觸發(fā)操作執(zhí)行子單元。
所述領域的技術人員可以清楚地了解到,為了描述的方便和簡潔,上述描述的系統(tǒng)、裝置和單元的具體工作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。
在本申請所提供的幾個實施例中,應該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過其它的方式實現。例如,以上所描述到的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或組件可以結合或可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。
所述作為分離部件說明的單元可以是或者也可以是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。
另外,在本申請各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現,可以采用軟件功能單元的形式實現。
需要說明的是,本領域普通技術人員可以理解實現上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質中,該程序在執(zhí)行時,可包括如上述 各方法的實施例的流程。其中,所述的存儲介質可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)或隨機存儲記憶體(Random Access Memory,RAM)等。
以上對本申請所提供的一種規(guī)則引擎的模式匹配方法和裝置進行了詳細介紹,本文中應用了具體實施例對本申請的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領域的一般技術人員,依據本申請的思想,在具體實施方式及應用范圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本申請的限制。