季開(kāi)偉,樂(lè)紅兵
(江南大學(xué)物聯(lián)網(wǎng)工程學(xué)院,江蘇 無(wú)錫 214122)
訪(fǎng)問(wèn)控制[1]是通過(guò)具體途徑來(lái)限制或準(zhǔn)許主體對(duì)客體訪(fǎng)問(wèn)能力及范圍的一種方法,自主訪(fǎng)問(wèn)控制(DAC)和強(qiáng)制訪(fǎng)問(wèn)控制[2](MAC)等傳統(tǒng)訪(fǎng)問(wèn)控制由于使用相對(duì)局限,已無(wú)法滿(mǎn)是應(yīng)用系統(tǒng)對(duì)于安全性的需求;基于角色的訪(fǎng)問(wèn)控制[3](RBAC)的研究使訪(fǎng)問(wèn)控制進(jìn)入了完全不同的授權(quán)模式,RBAC[4]中權(quán)限與角色相關(guān)聯(lián),用戶(hù)權(quán)限的集合就是其擁有的角色集合;使用控制(UCON)[5]被譽(yù)為下一代的訪(fǎng)問(wèn)控制模型,定義了授權(quán)、義務(wù)和條件3 種決定因素,同時(shí)提出連續(xù)性和可變性2 種重要特征,但該模型高度抽象且沒(méi)有統(tǒng)一管理模型,因而難于直接應(yīng)用[6]。訪(fǎng)問(wèn)控制的核心在于控制策略,策略的判定在于訪(fǎng)問(wèn)請(qǐng)求信息是否滿(mǎn)足控制策略的要求,本文將規(guī)則引擎技術(shù)應(yīng)用到訪(fǎng)問(wèn)控制中[7],利用規(guī)則描述訪(fǎng)問(wèn)控制策略,規(guī)則的條件部分是控制策略要求,規(guī)則的動(dòng)作部分則是訪(fǎng)問(wèn)控制的授權(quán)結(jié)果。然后通過(guò)對(duì)Rete 規(guī)則匹配算法研究,發(fā)現(xiàn)其并不適用于訪(fǎng)問(wèn)控制環(huán)境,Rete 算法通過(guò)保留匹配模式和中間結(jié)果來(lái)加快匹配速度,更適合多模式多數(shù)據(jù)的匹配處理。而在訪(fǎng)問(wèn)控制系統(tǒng)中,數(shù)據(jù)模式?jīng)]有那么復(fù)雜,要處理的數(shù)據(jù)量也相對(duì)較小。所以,本文的規(guī)則匹配并沒(méi)有采用Rete 算法,而是在Rete 算法研究的基礎(chǔ)上,提出了基于多規(guī)則節(jié)點(diǎn)共享的規(guī)則匹配算法,規(guī)則的條件部分是由一個(gè)或多個(gè)子條件組合而成,將子條件看作一個(gè)節(jié)點(diǎn),由于規(guī)則間具有相同的子條件,所以多規(guī)則可以共享這個(gè)節(jié)點(diǎn),通過(guò)對(duì)單個(gè)節(jié)點(diǎn)的計(jì)算對(duì)多個(gè)規(guī)則進(jìn)行處理,從而提高規(guī)則的匹配效率。同時(shí)Java 反射機(jī)制[8]可以動(dòng)態(tài)獲取類(lèi)信息和動(dòng)態(tài)調(diào)用對(duì)象方法,滿(mǎn)足了規(guī)則引擎系統(tǒng)動(dòng)態(tài)性的需求,也彌補(bǔ)了傳統(tǒng)規(guī)則引擎實(shí)時(shí)性方面的不足,所以本文基于Java 反射技術(shù)設(shè)計(jì)實(shí)現(xiàn)了規(guī)則引擎系統(tǒng)。
規(guī)則引擎是由基于規(guī)則的專(zhuān)家系統(tǒng)發(fā)展而來(lái),通過(guò)接受數(shù)據(jù)輸入,解析業(yè)務(wù)規(guī)則,并根據(jù)業(yè)務(wù)規(guī)則做出相應(yīng)決策[9]。規(guī)則引擎的引入將業(yè)務(wù)規(guī)則從業(yè)務(wù)邏輯組件中剝離,具體業(yè)務(wù)用規(guī)則來(lái)表示,業(yè)務(wù)要求的變更無(wú)需對(duì)邏輯組件進(jìn)行重新設(shè)計(jì),只需對(duì)規(guī)則進(jìn)行相應(yīng)修改,這樣不僅減少了系統(tǒng)開(kāi)發(fā)成本,而且方便業(yè)務(wù)規(guī)則管理和系統(tǒng)維護(hù)。
圖1 規(guī)則引擎的工作機(jī)制
如圖1 所示,規(guī)則引擎簡(jiǎn)單來(lái)說(shuō)有2 個(gè)輸入(事實(shí)的輸入和規(guī)則的輸入),一個(gè)輸出(匹配結(jié)果的輸出)[10],規(guī)則引擎的簡(jiǎn)要工作流程如下:
1)把事實(shí)數(shù)據(jù)(Fact)輸入到工作內(nèi)存(Working Memory)中;
2)將靜態(tài)規(guī)則庫(kù)中的規(guī)則(Rule)與工作內(nèi)存中的數(shù)據(jù)(Fact)進(jìn)行模式匹配;
3)相匹配的規(guī)則被放入議程(Agenda),如果規(guī)則存在沖突,將沖突的規(guī)則放入沖突集合中;4)解決規(guī)則沖突,然后放入議程(Agenda);5)將規(guī)則執(zhí)行隊(duì)列中的規(guī)則逐條執(zhí)行。
為了滿(mǎn)足規(guī)則引擎對(duì)于實(shí)時(shí)性的需求,本文基于Java 反射實(shí)現(xiàn)規(guī)則執(zhí)行引擎。Java 反射對(duì)任何一個(gè)類(lèi),都可以獲取類(lèi)的所有屬性和方法;對(duì)任何一個(gè)對(duì)象,都可以調(diào)用其方法;這種動(dòng)態(tài)獲取類(lèi)信息和動(dòng)態(tài)調(diào)用對(duì)象方法的功能稱(chēng)為Java 反射機(jī)制。因此,反射機(jī)制可以幫助創(chuàng)建靈活的代碼,構(gòu)建靈活的應(yīng)用,實(shí)現(xiàn)動(dòng)態(tài)的匹配。
規(guī)則引擎模塊設(shè)計(jì)如圖2 所示。
圖2 規(guī)則引擎模塊設(shè)計(jì)
1)規(guī)則庫(kù)(Rule)用XML 語(yǔ)言定義并存儲(chǔ)業(yè)務(wù)規(guī)則,程序設(shè)計(jì)中,創(chuàng)建LeftHandSide 類(lèi)封裝規(guī)則的條件部分(LHS),LHS 由一個(gè)或多個(gè)約束條件組成;創(chuàng)建RightHandSide 類(lèi)用于封裝規(guī)則的結(jié)論部分(RHS),RHS 即滿(mǎn)足所有LHS 約束條件后規(guī)則的執(zhí)行動(dòng)作;Rule 類(lèi)則是用于封裝規(guī)則的LHS 和RHS,Rule 類(lèi)、LeftHandSide 類(lèi)和RightHandSide 類(lèi)之間屬于聚合關(guān)系。
2)規(guī)則解析(RuleParser)模塊用于對(duì)規(guī)則庫(kù)中規(guī)則進(jìn)行解析,該模塊采用Jdom 解析XML 規(guī)則文件[11],將規(guī)則LHS 中所有約束條件和RHS 中所有執(zhí)行動(dòng)作都用HashMap 形式進(jìn)行封裝。
3)信息獲取模塊(GetFacts)通過(guò)Java 反射獲取當(dāng)前業(yè)務(wù)對(duì)象的事實(shí)屬性,同樣用HashMap 形式進(jìn)行封裝。
4)模式匹配器(PatternMatcher)將規(guī)則的約束條件與對(duì)象的事實(shí)屬性進(jìn)行匹配,匹配成功的規(guī)則放入matchedRules 中。
5)議程(Agenda)用于管理與當(dāng)前對(duì)象事實(shí)匹配的規(guī)則集的執(zhí)行次序。
6)規(guī)則執(zhí)行引擎(ExecutionEngine)是規(guī)則引擎重要的組成部分,通過(guò)Java 反射調(diào)用執(zhí)行當(dāng)前對(duì)象的方法,即用Method.invoke()方法執(zhí)行匹配規(guī)則RHS 部分要執(zhí)行的動(dòng)作。
基于屬性的訪(fǎng)問(wèn)控制[12](ABAC)不是對(duì)用戶(hù)主體直接授權(quán),而是將主體屬性、資源屬性和環(huán)境屬性作為授權(quán)策略的控制基礎(chǔ)。本文根據(jù)主體屬性制定訪(fǎng)問(wèn)控制策略,利用規(guī)則引擎實(shí)現(xiàn)了基于屬性的訪(fǎng)問(wèn)控制。為了方便用戶(hù)管理,本文引入角色[13]屬性,角色是權(quán)限的載體,將用戶(hù)屬性和角色相關(guān)聯(lián),當(dāng)用戶(hù)屬性值滿(mǎn)足角色規(guī)定的屬性要求時(shí),對(duì)應(yīng)的角色被激活,用戶(hù)獲得該角色所對(duì)應(yīng)的權(quán)限。訪(fǎng)問(wèn)控制模型如圖3 所示。
圖3 訪(fǎng)問(wèn)控制模型
訪(fǎng)問(wèn)控制的核心是授權(quán)策略,授權(quán)策略是用于確定一個(gè)主體能否訪(fǎng)問(wèn)客體的一套規(guī)則,規(guī)則用XML[14]語(yǔ)言來(lái)表示,可以動(dòng)態(tài)建立授權(quán)規(guī)則,規(guī)則解析模塊用Jdom 解析XML 規(guī)則文件。規(guī)則的基本結(jié)構(gòu)如下所示:
<rule ></rule >節(jié)點(diǎn)是rule 的根節(jié)點(diǎn),<rule></rule >中的name 表示規(guī)則名Rule,class 屬性可以判定用戶(hù)對(duì)象的類(lèi)型,規(guī)則匹配時(shí)可以先過(guò)濾與業(yè)務(wù)對(duì)象相關(guān)的規(guī)則。<lhs ></lhs >節(jié)點(diǎn)表示規(guī)則條件部分(condition),即用戶(hù)屬性約束;<attribute ></attribute >節(jié)點(diǎn)表示具體的屬性約束條件,可以是一個(gè)或多個(gè)約束條件;<rhs ></rhs >節(jié)點(diǎn)表示規(guī)則動(dòng)作部分(action),即授權(quán)結(jié)果;<rhs ></rhs >中name 是所要反射調(diào)用的對(duì)象方法名,<prm ></prm>表示方法的參數(shù),即執(zhí)行User 對(duì)象setRole()方法分配用戶(hù)相應(yīng)的角色。
Rete 算法是由美國(guó)卡內(nèi)基大學(xué)Charles.L.Forgy教授提出的前向鏈接推理算法[15],算法通過(guò)保存規(guī)則匹配的歷史結(jié)果來(lái)加快匹配速度,只對(duì)更新的數(shù)據(jù)進(jìn)行重新匹配,且通過(guò)復(fù)用Rete 網(wǎng)絡(luò)節(jié)點(diǎn)減少規(guī)則條件的重復(fù)判斷,Rete 算法針對(duì)多數(shù)據(jù)多模式,數(shù)據(jù)變化相對(duì)較少的規(guī)則匹配具有很好的性能,但訪(fǎng)問(wèn)控制環(huán)境中的規(guī)則匹配需要處理的數(shù)據(jù)相對(duì)較少,數(shù)據(jù)模式也相對(duì)簡(jiǎn)單,且進(jìn)行一次匹配即可,所以Rete 算法對(duì)于訪(fǎng)問(wèn)控制中的規(guī)則匹配并不適用。
通過(guò)對(duì)Rete 算法設(shè)計(jì)思想和實(shí)現(xiàn)方式的研究,盡管Rete 算法不適用于訪(fǎng)問(wèn)控制系統(tǒng)中的規(guī)則匹配,但也有可借鑒之處,如Rete 算法節(jié)點(diǎn)共享的思想[16],不同的規(guī)則可能擁有相同的Alpha 節(jié)點(diǎn)或Beta 節(jié)點(diǎn),Rete 算法通過(guò)共享這些節(jié)點(diǎn),從而減少重復(fù)的模式匹配,提高匹配效率。
Rete 算法主要通過(guò)事實(shí)數(shù)據(jù)在Rete 網(wǎng)絡(luò)中流動(dòng)過(guò)濾而實(shí)現(xiàn),根節(jié)點(diǎn)(RootNode)是所有的對(duì)象進(jìn)入網(wǎng)絡(luò)的入口,對(duì)于每個(gè)事實(shí),通過(guò)類(lèi)型節(jié)點(diǎn)(ObjectType-Node)的過(guò)濾使事實(shí)到達(dá)正確的AlphaNode,按照此節(jié)點(diǎn)對(duì)應(yīng)的模式對(duì)事實(shí)進(jìn)行匹配,如果匹配成功記錄此事實(shí),將事實(shí)沿著Rete 網(wǎng)絡(luò)到達(dá)對(duì)應(yīng)的BetaNode,BetaNode 從左右兩端收到事實(shí)進(jìn)行匹配,如匹配成功就將它們綁定記錄下來(lái),然后將綁定后的事實(shí)沿著Rete 網(wǎng)絡(luò)到達(dá)下一個(gè)BetaNode,最后到達(dá)合適的TerminalNode。Rete 網(wǎng)絡(luò)如圖4 所示。
圖4 節(jié)點(diǎn)共享
現(xiàn)有規(guī)則1 和規(guī)則2,如圖4 所示,規(guī)則1 有C和D1兩個(gè)條件,規(guī)則結(jié)果為F1;規(guī)則2 有C 和D2兩個(gè)條件,規(guī)則結(jié)果為F2,即C and D1→F1;C and D2→F2;在構(gòu)建Rete 網(wǎng)絡(luò)時(shí),Alpha 節(jié)點(diǎn)C 作為Beta 節(jié)點(diǎn)E1、E2的左輸入,D1、D2分別是Beta 節(jié)點(diǎn)E1、E2的右輸入,2 個(gè)規(guī)則導(dǎo)向不同的Terminal 節(jié)點(diǎn)F1、F2,從圖中可以看出規(guī)則1 和規(guī)則2 共享Alpha 節(jié)點(diǎn)C,Beta節(jié)點(diǎn)不共享,通過(guò)節(jié)點(diǎn)共享可以簡(jiǎn)化匹配網(wǎng)絡(luò)模式,匹配過(guò)程中通過(guò)復(fù)用該節(jié)點(diǎn)減少規(guī)則條件的重復(fù)判斷,從而提高規(guī)則的匹配效率。
規(guī)則1 和規(guī)則2 判斷如下:
其中,userType:用戶(hù)類(lèi)型(管理員01,普通用戶(hù)02);workArea:工作范圍(部門(mén)01,小組02)。
基于多規(guī)則節(jié)點(diǎn)共享規(guī)則匹配算法則首先將規(guī)則的子條件看作一個(gè)節(jié)點(diǎn),如rule1 中有2 個(gè)節(jié)點(diǎn):userType=="01"和manageArea=="01",rule2 中也有2 個(gè)節(jié)點(diǎn):userType=="01"和manageArea=="02",而后將節(jié)點(diǎn)和對(duì)應(yīng)的規(guī)則進(jìn)行索引,如(userType=="01")→rule1;(manageArea=="01")→rule1;(userType=="01")→rule2;(manageArea=="02")→rule2,并放入索引列表中。然后對(duì)規(guī)則中的每個(gè)節(jié)點(diǎn)進(jìn)行計(jì)算,如依據(jù)對(duì)象事實(shí)判斷userType=="01"的真假,如果為真,則匹配規(guī)則中下一個(gè)節(jié)點(diǎn);如果為假,則該節(jié)點(diǎn)對(duì)應(yīng)的所有規(guī)則都不匹配,若userType=="01"判斷為假,則該節(jié)點(diǎn)對(duì)應(yīng)的rule1和rule2 兩條規(guī)則都不匹配,將rule1 和rule2 放入刪除集中,這樣當(dāng)完成rule1 匹配后,就無(wú)需對(duì)rule2 進(jìn)行匹配,在這2 個(gè)規(guī)則匹配的過(guò)程中,將節(jié)點(diǎn)user-Type=="01"作為rule1 和rule2 的共享節(jié)點(diǎn),多規(guī)則節(jié)點(diǎn)共享的應(yīng)用加快了規(guī)則的匹配效率,相比按照規(guī)則隊(duì)列中的規(guī)則逐條匹配的方式性能優(yōu)勢(shì)更加明顯。
圖5 規(guī)則匹配算法流程圖
算法流程描述如下:
1)將規(guī)則的每個(gè)節(jié)點(diǎn)P 和P 所對(duì)應(yīng)的每條規(guī)則R 放到索引列表map 中。
2)逐條取出規(guī)則R,判斷其是否在刪除集not-MatchedRules 中,若是則無(wú)需對(duì)該規(guī)則進(jìn)行匹配。
3)對(duì)于規(guī)則R 的每個(gè)節(jié)點(diǎn)P,如果P 未計(jì)算,則計(jì)算并保存結(jié)果。
4)如果P 已計(jì)算且結(jié)果為真,則匹配下一個(gè)節(jié)點(diǎn)P。
5)如果P 已計(jì)算且結(jié)果為假,則將索引列表map中相關(guān)的所有規(guī)則R 刪除,且更新到刪除集not-MatchedRules 中。
6)如果規(guī)則rule 所有節(jié)點(diǎn)都判斷過(guò)且為真,則規(guī)則R 匹配成功,將其放入matchedRules。
規(guī)則匹配算法流程如圖5 所示。
算法優(yōu)點(diǎn):
1)對(duì)于訪(fǎng)問(wèn)控制系統(tǒng)來(lái)說(shuō),多規(guī)則間有很多相同的子條件,保存子條件的匹配結(jié)果則可以不用重復(fù)計(jì)算,大大減少匹配時(shí)間。
2)只要某一子條件為假,則包含該子條件的所有規(guī)則不用匹配則可判定規(guī)則無(wú)效,大大減少需要匹配的規(guī)則數(shù)。
假設(shè)規(guī)則中一共有50 個(gè)子條件,隨著相同子條件個(gè)數(shù)的增加規(guī)則引擎匹配平均時(shí)間如表1 所示。
表1 基于對(duì)規(guī)則節(jié)點(diǎn)共享匹配算法
圖6 共享子條件個(gè)數(shù)與匹配時(shí)間關(guān)系
如圖6 所示,實(shí)驗(yàn)數(shù)據(jù)表明隨著相同子條件個(gè)數(shù)的增加,規(guī)則引擎規(guī)則匹配的時(shí)間逐漸減少,所以規(guī)則的匹配效率與多規(guī)則中相同子條件的個(gè)數(shù)有關(guān),相同子條件個(gè)數(shù)越多,運(yùn)用多規(guī)則節(jié)點(diǎn)共享的概率就越高,規(guī)則匹配的平均時(shí)間就越少,從而規(guī)則引擎的執(zhí)行效率就越高。
當(dāng)規(guī)則條件部分(LHS)定義的所有約束條件匹配成功時(shí),便將相應(yīng)的規(guī)則放入議程中,對(duì)于議程中的每一條規(guī)則,規(guī)則執(zhí)行引擎將反射調(diào)用規(guī)則動(dòng)作部分(RHS)定義的對(duì)象方法setRole()方法,授予該訪(fǎng)問(wèn)用戶(hù)對(duì)應(yīng)的角色,即授予用戶(hù)該角色對(duì)應(yīng)的訪(fǎng)問(wèn)權(quán)限。
Drools 是一款為Java 語(yǔ)言定制的開(kāi)源規(guī)則引擎[17],可以和Java 系統(tǒng)無(wú)縫集成,基于Rete 規(guī)則匹配算法,支持熱部署規(guī)則和“人類(lèi)語(yǔ)言”的規(guī)則編輯,通過(guò)使用DSL 可以實(shí)現(xiàn)用自然語(yǔ)言來(lái)描述業(yè)務(wù)規(guī)則,使得業(yè)務(wù)分析人員也可以看懂業(yè)務(wù)規(guī)則代碼,擁有比較完善的管理系統(tǒng)和開(kāi)發(fā)環(huán)境。
Drools 與反射驅(qū)動(dòng)的規(guī)則引擎的屬性對(duì)比如表2所示。
表2 屬性對(duì)比
Drools 與反射驅(qū)動(dòng)規(guī)則引擎對(duì)于不同規(guī)則數(shù)(個(gè))的平均執(zhí)行時(shí)間(ms)對(duì)比如表3 所示。
表3 執(zhí)行時(shí)間對(duì)比 單位:ms
經(jīng)過(guò)比較,Drools 作為一款功能很強(qiáng)大的開(kāi)源規(guī)則引擎,也有其不足之處,首先,Rete 算法盡管具有很好的性能,但并不適合所有的應(yīng)用環(huán)境,若事實(shí)庫(kù)不穩(wěn)定,保存的中間結(jié)果也相對(duì)不穩(wěn)定,所以用空間換取時(shí)間反而是得不償失,不僅占用大量?jī)?nèi)存,而且算法設(shè)計(jì)和實(shí)現(xiàn)較為復(fù)雜,在Drools 規(guī)則引擎中,必須要先建立數(shù)據(jù)模型,還要對(duì)規(guī)則庫(kù)中的規(guī)則進(jìn)行編譯工作,而Java 反射驅(qū)動(dòng)的規(guī)則引擎則相對(duì)靈活,無(wú)需預(yù)先建立數(shù)據(jù)模型,可以在規(guī)則定義后執(zhí)行規(guī)則,無(wú)需進(jìn)行規(guī)則編譯工作,提高了應(yīng)用的廣泛性。實(shí)驗(yàn)數(shù)據(jù)表明,反射驅(qū)動(dòng)規(guī)則引擎的規(guī)則匹配執(zhí)行效率更高。
利用規(guī)則引擎實(shí)現(xiàn)基于屬性的授權(quán)訪(fǎng)問(wèn)控制,用規(guī)則描述訪(fǎng)問(wèn)控制策略,通過(guò)增減規(guī)則的約束條件,可以改變控制策略的細(xì)化程度,從而滿(mǎn)足控制因素全面性和控制策略靈活性的要求,規(guī)則引擎實(shí)現(xiàn)策略與機(jī)制分離,則滿(mǎn)足系統(tǒng)通用性的需求,所以規(guī)則引擎的引入將訪(fǎng)問(wèn)控制提升到了一個(gè)全新的局面。基于反射機(jī)制又可以動(dòng)態(tài)加載和執(zhí)行規(guī)則,增強(qiáng)了訪(fǎng)問(wèn)控制的動(dòng)態(tài)性和實(shí)時(shí)性?;诙嘁?guī)則節(jié)點(diǎn)共享的匹配算法又可以在多規(guī)則中存在相同子條件的情況下提高規(guī)則匹配效率,所以,相比Drools 規(guī)則引擎,反射驅(qū)動(dòng)的規(guī)則引擎更適用于訪(fǎng)問(wèn)控制系統(tǒng)。
[1]劉宏月,范九倫,馬建峰.訪(fǎng)問(wèn)控制技術(shù)研究進(jìn)展[J].小型微型計(jì)算機(jī)系統(tǒng),2004,25(1):56-59.
[2]Sandhu R S.Lattice-based access control models[J].IEEE Computer,1993,26(11):9-19.
[3]Sandhu R S,Coyne E J,F(xiàn)einstein H L,et al.Role-based access control models[J].IEEE Computer,1996,29(2):38-47.
[4]洪帆,何緒斌,徐智勇.基于角色的訪(fǎng)問(wèn)控制[J].小型微型計(jì)算機(jī)系統(tǒng),2002,2(2):198-200.
[5]Park J,Sandhu R.Towards usage control models:Beyond traditional access control[C]// Proceedings of the 7th ACM Symposium on Access Control Models and Technologies.2002:57-64.
[6]袁磊.使用控制模型的研究[J].計(jì)算機(jī)工程,2005,31(12):146-148.
[7]王輝.基于規(guī)則引擎的訪(fǎng)問(wèn)控制研究[J].計(jì)算機(jī)安全,2011(6):37-39.
[8]費(fèi)延偉,劉淑芬,屈志勇,等.Java 反射驅(qū)動(dòng)的規(guī)則引擎技術(shù)研究[J].計(jì)算機(jī)應(yīng)用,2010,30(5):1324-1326.
[9]王李軍,陶明亮,張曙,等.面向業(yè)務(wù)規(guī)則的規(guī)則引擎研究[J].計(jì)算機(jī)工程,2007,33(24):52-56.
[10]王曉光,楊丹.規(guī)則引擎在分布式環(huán)境下應(yīng)用的研究[J].計(jì)算機(jī)應(yīng)用究,2009,26(5):1825-1827.
[11]李雯,謝輔雯,鄒道明.XML 數(shù)據(jù)交換技術(shù)的應(yīng)用與研究[J].計(jì)算機(jī)與現(xiàn)代化,2008(1):91-93.
[12]程相然,陳性元,張斌,等.基于屬性的訪(fǎng)問(wèn)控制策略模型[J].計(jì)算機(jī)工程,2010,36(15):131-133.
[13]熊智,徐江艷,王高舉,等.基于角色和規(guī)則引擎的UCON 應(yīng)用模型[J].計(jì)算機(jī)工程與設(shè)計(jì),2013,34(3):831-836.
[14]傅海英,李暉,王育民.XML 及相關(guān)安全研究進(jìn)展[J].計(jì)算機(jī)應(yīng)用研究,2004,21(2):86-88.
[15]Forgy C L,Shepard S J.Rete:A fast match algorithm[J].AI Expert,1987,2(1):34-40.
[16]朱會(huì)兵.基于Drools 的信息管理與決策系統(tǒng)的研究與實(shí)現(xiàn)[D].武漢:武漢理工大學(xué),2012.
[17]劉偉.Java 規(guī)則引擎-Drools 的介紹及應(yīng)用[J].微計(jì)算機(jī)應(yīng)用,2005,26(6):717-721.