專利名稱::用于xml策略匹配的方法和裝置的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及面向應(yīng)用的網(wǎng)絡(luò),具體地,涉及用于XML策略匹配的方法和裝置。
背景技術(shù):
:終端用戶逐漸用不同于傳統(tǒng)的桌上型電腦內(nèi)容瀏覽器的設(shè)備訪問網(wǎng)頁(yè)內(nèi)容。這樣的設(shè)備包括個(gè)人數(shù)碼助理、蜂窩電話和有線電視機(jī)頂盒。由于這些設(shè)備缺乏與傳統(tǒng)的桌上型電腦內(nèi)容瀏覽器相同的瀏覽網(wǎng)頁(yè)的能力,因此需要將網(wǎng)頁(yè)內(nèi)容從用于一種類型的設(shè)備的格式改寫成適合于在另一種設(shè)備中呈現(xiàn)的另一種格式,稱為"格式轉(zhuǎn)換"。通過使用有關(guān)網(wǎng)頁(yè)內(nèi)容的信息可有助于格式轉(zhuǎn)換過程,這些信息以下稱為"元信息(meta-information)"。元信息通常隨原始網(wǎng)頁(yè)內(nèi)容一起提供,并可用于在識(shí)別網(wǎng)頁(yè)內(nèi)容的特定部分方面協(xié)助格式轉(zhuǎn)換過程。應(yīng)當(dāng)注意,如果元信息與網(wǎng)頁(yè)內(nèi)容分開描述,則元信息可以無需修改原始網(wǎng)頁(yè)內(nèi)容地創(chuàng)建。XML(可擴(kuò)展標(biāo)記語言)是由萬維網(wǎng)聯(lián)盟(W3C)規(guī)定的通用元語言,W3C是為開發(fā)通用協(xié)議而創(chuàng)建的國(guó)際產(chǎn)業(yè)聯(lián)盟,解決對(duì)可擴(kuò)展互操作網(wǎng)絡(luò)和開發(fā)基于XML的其它跨行業(yè)規(guī)范的需求。XML允許定義用于文件或者數(shù)據(jù)交換的新詞匯,并且優(yōu)化無縫并迅速整合多種數(shù)據(jù)源的新信息內(nèi)容的能力,數(shù)據(jù)源包括結(jié)構(gòu)化和半結(jié)構(gòu)化文件、關(guān)系數(shù)據(jù)庫(kù)和對(duì)象庫(kù)。XML允許用戶使用任意字定義元素并將其組織在嵌套結(jié)構(gòu)中。由于XML支持?jǐn)?shù)據(jù)表達(dá)的靈活性,許多電子文件管理系統(tǒng)(E匿S)已將XML用作代表性的文件格式。XML數(shù)據(jù)模型和網(wǎng)絡(luò)服務(wù)技術(shù)的迅速采用已引發(fā)了大量XML可識(shí)別網(wǎng)絡(luò)設(shè)備的商用化,諸如XML防火墻、XML路由器和XML轉(zhuǎn)換加速器。預(yù)計(jì)XML將構(gòu)成超過一半的網(wǎng)絡(luò)業(yè)務(wù),高速內(nèi)容可識(shí)別系統(tǒng)已由于其將網(wǎng)絡(luò)駐留應(yīng)用獨(dú)立的應(yīng)用級(jí)別附加值引入諸如QoS(服務(wù)質(zhì)量)、安全、負(fù)載平衡等的網(wǎng)絡(luò)服務(wù)特性中的潛力而獲得關(guān)注。XML規(guī)定如何基于通過文件的邏輯結(jié)構(gòu)或?qū)蛹?jí)的路徑、通過使用尋址語法來定位和處理項(xiàng)目。它能夠存儲(chǔ)其結(jié)構(gòu)可被表示為樹形結(jié)構(gòu)的任何數(shù)量的文本或者任何數(shù)據(jù);唯一不可缺少的語法要求是文本必須封裝在根開啟標(biāo)簽(openingtag)和對(duì)應(yīng)的關(guān)閉標(biāo)簽(closingtag)之間(例如,〈message〉.text.〈/message)。被根標(biāo)簽封裝的文本可包含任意數(shù)量的XML元素。一個(gè)元素的基本語法是〈messageattribute=〃value"〉content〈/root〉,其中"content"是可再次包含XML元素的某一文本。XPath是表達(dá)式語言,其提供用于識(shí)別XML文件的什么內(nèi)容(元素和屬性)是有興趣使用或檢索的機(jī)制。XPath將XML文件建模為節(jié)點(diǎn)樹,并提供通過XML文件的分層結(jié)構(gòu)巡視該樹的能力,通過各種標(biāo)準(zhǔn)選擇節(jié)點(diǎn)。XPath中的主要語法結(jié)構(gòu)是表達(dá)式;XPath表達(dá)式通常簡(jiǎn)稱為XPath。表達(dá)式被賦值以產(chǎn)生具有以下基本類型之一的對(duì)象節(jié)點(diǎn)集合(沒有副本的無序節(jié)點(diǎn)集合),布爾(真或假);數(shù)字(浮點(diǎn)數(shù));以及字符串(UCS字符序列)。換句話說,XPath是用于識(shí)別諸如XML格式化文件的文件的特定部分的語法。XQuery是用于向XML文件查詢?nèi)魏慰煽醋鱔ML數(shù)據(jù)的數(shù)據(jù)源的查詢語言,諸如關(guān)系數(shù)據(jù)庫(kù)或辦公文件,用于提取并管理信息。XQuery使用XPath表達(dá)語法以尋址XML文件3的特定部分,并使用XML的結(jié)構(gòu)以在所有這些類型的數(shù)據(jù)中智能地表達(dá)查詢,不管數(shù)據(jù)是物理地存儲(chǔ)在XML中還是通過中間件被看作XML。內(nèi)容識(shí)別系統(tǒng),諸如用于面向應(yīng)用的網(wǎng)絡(luò)的系統(tǒng),依靠XPath/XQuery語言以對(duì)應(yīng)用數(shù)據(jù)引入應(yīng)用層規(guī)則和執(zhí)行策略。
發(fā)明內(nèi)容本發(fā)明針對(duì)對(duì)于高速網(wǎng)絡(luò)業(yè)務(wù)執(zhí)行(匹配)應(yīng)用層策略的問題,或者換句話說,其涉及用于對(duì)高速XML文檔匹配策略規(guī)則的方法和相關(guān)實(shí)體。因此,本發(fā)明提供一種對(duì)應(yīng)用層格式化文件執(zhí)行應(yīng)用層策略的方法,每個(gè)策略定義一個(gè)規(guī)則和動(dòng)作,包括a)分別在簡(jiǎn)單策略數(shù)據(jù)結(jié)構(gòu)和復(fù)雜策略數(shù)據(jù)結(jié)構(gòu)中有區(qū)別地存儲(chǔ)適用于所述應(yīng)用層格式化文件的簡(jiǎn)單策略和復(fù)雜策略;b)解析作為分層結(jié)構(gòu)中流應(yīng)用層數(shù)據(jù)接收的文件,用于能夠?qū)λ鑫募械膶?duì)象賦值;c)同時(shí)查詢簡(jiǎn)單和復(fù)雜策略數(shù)據(jù)結(jié)構(gòu)以識(shí)別與所述對(duì)象對(duì)應(yīng)的策略;d)—旦與所述對(duì)象匹配的所有簡(jiǎn)單和復(fù)雜策略被識(shí)別,則停止在簡(jiǎn)單和復(fù)雜策略數(shù)據(jù)結(jié)構(gòu)中對(duì)該對(duì)象的查詢;以及e)執(zhí)行由與所述對(duì)象對(duì)應(yīng)的簡(jiǎn)單和復(fù)雜策略限定的動(dòng)作。本發(fā)明還針對(duì)用于對(duì)XML文件執(zhí)行應(yīng)用層策略的系統(tǒng),每個(gè)策略定義一個(gè)規(guī)則和動(dòng)作,包括XML解析器,用于解析作為分層結(jié)構(gòu)中流XML數(shù)據(jù)接收的XML文件,以能夠?qū)λ鯴ML文件中的對(duì)象賦值;簡(jiǎn)單策略數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)不使用通配符"*"和后代"〃"表達(dá)式的XPath查詢;復(fù)雜策略數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)使用通配符"*"和后代"〃"表達(dá)式的XPath查詢;用于同時(shí)查詢簡(jiǎn)單和復(fù)雜策略數(shù)據(jù)結(jié)構(gòu)以識(shí)別與所述對(duì)象對(duì)應(yīng)的所有策略的裝置;以及用于執(zhí)行由與在數(shù)據(jù)結(jié)構(gòu)中識(shí)別的對(duì)象對(duì)應(yīng)的策略限定的動(dòng)作的裝置。根據(jù)以下對(duì)如附圖所示的優(yōu)選實(shí)施例的更詳細(xì)的描述,本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)將更加明顯,其中圖1圖示了代表一些示例性查詢的AxisView(軸視圖)的例子;圖2a、2b和2c示出了使用代表使用圖1的圖查詢的XML文件的當(dāng)前活動(dòng)標(biāo)簽的StackBranch(堆棧分支)的運(yùn)行時(shí)堆棧結(jié)構(gòu);即,圖2a示出了在接收到任何標(biāo)簽之前的StackBranch堆棧,圖2b示出了在接收到代表XML文件路徑的一組標(biāo)簽〈aXdXaXb〉后的圖2a的堆棧,圖2c示出了在接收到一組標(biāo)簽〈aXdXaXbXc〉后的堆棧;圖3是根據(jù)本發(fā)明的一個(gè)實(shí)施例的XML策略匹配系統(tǒng)的方框圖;圖4是根據(jù)本發(fā)明的確定性有限自動(dòng)機(jī)(DFA)結(jié)構(gòu)的例子;圖5a、5b和5c示出了根據(jù)本發(fā)明的代表在圖2a至2c中查詢的相同XML文件中的當(dāng)前活動(dòng)標(biāo)簽的運(yùn)行時(shí)堆棧結(jié)構(gòu)的例子;即,圖5a示出了在接收到任何標(biāo)簽之前的堆棧,圖5b圖示了在接收到一組標(biāo)簽〈aXdXa〉之后的堆棧,圖5c示出了在接收到一組標(biāo)簽〈aXdXaXb〉之后的堆棧。具體實(shí)施例方式本發(fā)明旨在識(shí)別(匹配)能夠應(yīng)用于高速網(wǎng)絡(luò)業(yè)務(wù)的應(yīng)用層策略。策略包括規(guī)則4和動(dòng)作;動(dòng)作將對(duì)落入策略規(guī)則的邊界內(nèi)的文件執(zhí)行。XML匹配引擎是用于存儲(chǔ)應(yīng)用層策略(規(guī)則_動(dòng)作)并將流XML文件和與各自的策略相關(guān)聯(lián)的規(guī)則匹配的數(shù)據(jù)處理模塊和相關(guān)數(shù)據(jù)結(jié)構(gòu)。XML匹配引擎對(duì)高速應(yīng)用數(shù)據(jù)執(zhí)行與QoS、安全、負(fù)載平衡、流量整形等相關(guān)的應(yīng)用層規(guī)則。例如,本發(fā)明涉及在對(duì)線速XML有效載荷執(zhí)行語義策略的匹配時(shí)將使用XPath/XQuery表達(dá)的策略規(guī)則與流XML文件匹配。下面將給出截至目前為止已就向內(nèi)容識(shí)別系統(tǒng)提供XML匹配而提出的現(xiàn)有方法和數(shù)據(jù)結(jié)構(gòu)的簡(jiǎn)要概述,以更好地理解本發(fā)明。這些以前的方案通常維持單個(gè)數(shù)據(jù)路徑結(jié)構(gòu)(單個(gè)策略信息數(shù)據(jù)庫(kù))以存儲(chǔ)用于對(duì)流數(shù)據(jù)匹配策略數(shù)據(jù)的XPath查詢。所有這些方法維持在過濾引擎從XML文件解析器接收元素標(biāo)簽時(shí)被遍歷的XPath查詢的狀態(tài)機(jī)。因此,XFilter在Altinel、M.等的"EfficientFilteringofXMLDocumentsforSelectiveDisseminationofInformation"(第26屆VLDB會(huì)議的會(huì)刊,開羅,±矣及,2000年)中進(jìn)行了描述。XFilter是使用狀態(tài)機(jī)表達(dá)XPath查詢的早期嘗試。然而,由于其對(duì)每一個(gè)查詢都創(chuàng)建狀態(tài)機(jī),因此,該方案對(duì)于極大數(shù)量的查詢不能擴(kuò)展。YFilter在Diao等的"PathSharingandPredicateEvaluationforHigh-PerformanceXMLFiltering,ACMTransactionsonDatabaseSystems,,(第28巻,第4號(hào),2003年12月,467-516頁(yè))進(jìn)行了描述。YFilter通過將所有查詢的狀態(tài)機(jī)合并為單個(gè)大型非確定性有限自動(dòng)機(jī)(NFA)結(jié)構(gòu)來擴(kuò)展XFilter。這樣,由于重疊的查詢的前綴僅僅被存儲(chǔ)一次,因此減少了結(jié)構(gòu)的內(nèi)存,并且由于多個(gè)查詢通過其狀態(tài)機(jī)被同時(shí)推進(jìn),因此還改善了處理時(shí)間。然而,由于使用通配符("*")和后代("〃")表達(dá)式的NFA所引入的非確定性,YFilter不保證任何性能目標(biāo)。通過加入所有可能性來使用下面描述的確定性有限自動(dòng)機(jī)(DFA)以消除該非確定性是不實(shí)際的,因?yàn)槭褂猛ㄅ浞?"*")和后代("〃")表達(dá)式可能會(huì)導(dǎo)致指數(shù)數(shù)量的狀態(tài)。Green等在"ProcessingXMLStreamsWithDeterministicAutomataandStreamIndexes"(數(shù)據(jù)庫(kù)系統(tǒng)的ACM事務(wù),第29巻,第4號(hào),2004年12月,第752-788頁(yè))中描述了DFA(確定性有限自動(dòng)機(jī))過濾。該論文的作者提出"懶散地"建立DFA。S卩,建立如同在YFilter中的NFA,并僅在需要時(shí)對(duì)DFA添加狀態(tài)。然而,如果不考慮內(nèi)存,Green等提出的DFA結(jié)構(gòu)會(huì)執(zhí)行得最快,因?yàn)閷ML文件結(jié)構(gòu)與XPath查詢匹配是由到達(dá)XML標(biāo)簽驅(qū)動(dòng)的簡(jiǎn)單路徑遍歷。然而,即使該"懶散的DFA"也證明是存儲(chǔ)器非常密集的。因此,在所進(jìn)行的一些測(cè)試中,作者僅僅用完2GB的內(nèi)存,而YFilter可用低于100MB的內(nèi)存處理相同數(shù)量的數(shù)據(jù)。Candan等在"AdaptableXMLfilteringwithPrefix-CachingandSuffix-Clustering"(第32屆VLDB會(huì)議的會(huì)刊,2006年)中提出了AFilter。AFiliter稍微與NFA/DFA機(jī)制不同,因?yàn)樗褂帽环Q為AxisView和StackBranch的兩個(gè)主要結(jié)構(gòu)。AxisView是用于代表查詢的圖,而StackBranch用于代表XML文件的當(dāng)前活動(dòng)標(biāo)簽。AxisView只是對(duì)從一組XPath查詢中觀測(cè)到的每一組XML標(biāo)簽僅創(chuàng)建單個(gè)對(duì)象(節(jié)點(diǎn))的壓縮DFA(確定性有限自動(dòng)機(jī))結(jié)構(gòu)。此外,AxisView只在查詢內(nèi)從子/后代到父/祖先的節(jié)點(diǎn)之間設(shè)置邊緣。為每一個(gè)邊緣保存具有關(guān)于查詢識(shí)別、深度、父/祖先關(guān)系和觸發(fā)狀態(tài)的信息的多個(gè)標(biāo)簽。當(dāng)觸發(fā)事件發(fā)生時(shí)(當(dāng)匹配XPath查詢的最終定位步驟的標(biāo)簽被接收時(shí)),StackBranch用于遍歷AxisView結(jié)構(gòu)。圖l和圖2a-2c示出了AFilter如何執(zhí)行對(duì)復(fù)雜策略的匹配的例子。圖l圖示了用于提供AFilter操作的例子的AxisView圖。圖2a_2c示出了當(dāng)觸發(fā)事件發(fā)生時(shí)StackBranch如何用于遍歷AxisView結(jié)構(gòu)。在該說明中,觸發(fā)事件僅僅是匹配查詢的最終定位步驟的標(biāo)簽。圖1所示的AxisView結(jié)構(gòu)在導(dǎo)致觸發(fā)事件的標(biāo)簽到達(dá)時(shí)以從底部到頂部的方式(從查詢的角度看)被遍歷;如果沒有觸發(fā)事件發(fā)生,則AxisView結(jié)構(gòu)不會(huì)被遍歷。如以上所提到的,AxisView是用于代表查詢的圖,該圖使用對(duì)從一組XPath查詢觀測(cè)到的每一組XML標(biāo)簽創(chuàng)建單個(gè)對(duì)象(節(jié)點(diǎn)集合、布爾、數(shù)字、字符串)的壓縮DFA(確定性有限自動(dòng)機(jī))結(jié)構(gòu)構(gòu)成。當(dāng)觸發(fā)事件發(fā)生時(shí),AFilter使用運(yùn)行時(shí)堆棧(StackBranch)遍歷AxisView結(jié)構(gòu)。如以上所提到的,當(dāng)匹配查詢的最終定位步驟的標(biāo)簽被接收時(shí),觸發(fā)事件發(fā)生。該例子的AxisView圖示了路徑表達(dá)式{ql=〃d〃a〃b,q2=〃a〃b〃a〃b,q3=〃a〃b/c,q4=/a/*/c},其中字符〃或/在圖中用符號(hào)tt或t表示,用于XPath查詢的最終狀態(tài),II或I用于中間查詢狀態(tài)。StackBranch示出了該例中的所有活動(dòng)標(biāo)簽,即當(dāng)前XML文件路徑的還沒有被關(guān)閉的所有標(biāo)簽。XML根標(biāo)簽用q_root標(biāo)記,并且從文件接收到4個(gè)標(biāo)簽a-d和1個(gè)通配符"*";術(shù)語"節(jié)點(diǎn)"和"標(biāo)簽"在該說明中可交換地使用。節(jié)點(diǎn)之間的邊緣用el到e8表示。第一個(gè)查詢ql=〃d〃a〃b由從節(jié)點(diǎn)d到根的邊緣el、從節(jié)點(diǎn)a到節(jié)點(diǎn)d的e3以及從節(jié)點(diǎn)b到a的e4按該順序顯示。第二個(gè)查詢q2=〃a〃b〃a〃b由從節(jié)點(diǎn)a到根的邊緣e2、從節(jié)點(diǎn)b到節(jié)點(diǎn)a的邊緣e4以及從節(jié)點(diǎn)a到b的邊緣e5按該順序顯示。第三個(gè)查詢q3=〃a〃b/c由從節(jié)點(diǎn)a到根節(jié)點(diǎn)的邊緣e2、從節(jié)點(diǎn)b到節(jié)點(diǎn)a的e4從節(jié)點(diǎn)c到節(jié)點(diǎn)b的e6顯示。最后,q4=/a/*/c由從節(jié)點(diǎn)a到根的邊緣e2、從節(jié)點(diǎn)*到節(jié)點(diǎn)a的e8和從節(jié)點(diǎn)c到節(jié)點(diǎn)*的e7顯示。StackBranch對(duì)在XPath查詢中觀察到的每個(gè)可能的XML標(biāo)簽維持一個(gè)堆棧。每當(dāng)從XML解析器接收到標(biāo)簽時(shí),為該元素創(chuàng)建一個(gè)堆棧對(duì)象,并且該對(duì)象被推向其對(duì)應(yīng)的堆棧。同樣,對(duì)于AxisView中的每個(gè)邊緣,如果堆棧不是空的,則堆棧對(duì)象指向?qū)?yīng)元素堆棧的頂端對(duì)象。由于軸'7"和"〃"在AxisView結(jié)構(gòu)的節(jié)點(diǎn)之間的標(biāo)簽內(nèi)指示,因此,僅僅需要處理通配符"*"。StackBranch具有專用于"*"元素的特殊堆棧,當(dāng)元素被推向其自己的堆棧時(shí),也創(chuàng)建堆棧對(duì)象并將其推向"*"堆棧,其中指針指向其它堆棧的頂端。從圖l可見,節(jié)點(diǎn)"*"具有從節(jié)點(diǎn)a到c的邊緣。"*"堆棧中的節(jié)點(diǎn)指向圖2b和2c的StackBranch中的"a"和"c"堆棧的頂端。在所圖示的例子中,初始的StackBranch結(jié)構(gòu)如圖2a所示,其中每個(gè)XML標(biāo)簽的空堆棧用Sq_root、Sd、Sa、Sb、S*和Sc表示。圖2b示出了在遷移〈aXd〉〈aXb〉之后的StackBranch(a、b、c和d是來自正被解析的XML文件的標(biāo)簽/元素)。在該例中,標(biāo)簽b的接收是觸發(fā)事件,因?yàn)樗聿樵僸l和q2的最終定位步驟。如圖所示,堆棧Sq_r0ot包含一個(gè)對(duì)象,來自堆棧Sd和Sa的底部對(duì)象用各自的邊緣el和e2指向根對(duì)象。堆棧Sd和Sb只包含一個(gè)對(duì)象,分別是dl和bl,因?yàn)檫@些標(biāo)簽只從解析器接收一次。堆棧Sa包含兩個(gè)對(duì)象al和a2,因?yàn)闃?biāo)簽a被接收兩次。圖2b還示出了標(biāo)簽如何按其接收順序堆在S^中,即al、dl、a2、bl。6圖2c示出了遷移〈aXdXaXbXc〉之后的StackBranch。在該例下,標(biāo)簽c的接收是觸發(fā)事件,因?yàn)樗聿樵僸3和q4的最終定位步驟。堆棧Sc只包含一個(gè)對(duì)象cl,因?yàn)闃?biāo)簽c只被接收一次。圖2c示出了對(duì)象cl\其被放置在堆棧Sw中在圖3b所示的遷移之后已放置在該堆棧中的對(duì)象的頂端。如上所示,當(dāng)前可用的XML匹配算法在有限的環(huán)境下執(zhí)行良好。AFilter對(duì)于復(fù)雜查詢執(zhí)行良好,YFilter/DFA對(duì)于簡(jiǎn)單查詢執(zhí)行良好。本發(fā)明通過對(duì)簡(jiǎn)單和復(fù)雜查詢維持單獨(dú)的數(shù)據(jù)庫(kù)并同時(shí)在這些數(shù)據(jù)庫(kù)上執(zhí)行查詢來達(dá)到高性能。圖3是根據(jù)本發(fā)明的XML策略匹配系統(tǒng)10的方框圖。該圖一般性地示出了XML解析器15,其接收各個(gè)源的流XML數(shù)據(jù),并使用Xpath將文件建模為節(jié)點(diǎn)樹,以使匹配引擎20能夠通過各個(gè)XML文件的分層結(jié)構(gòu)經(jīng)過該樹。標(biāo)記為24的動(dòng)作模塊執(zhí)行與匹配引擎20所找到的策略對(duì)應(yīng)的動(dòng)作。根據(jù)本發(fā)明的XML策略匹配系統(tǒng)10同時(shí)使用兩種數(shù)據(jù)結(jié)構(gòu),即-簡(jiǎn)單策略查找數(shù)據(jù)結(jié)構(gòu)30,用于存儲(chǔ)不使用通配符"*"和后代"〃"表達(dá)式的簡(jiǎn)單XPath;-復(fù)雜策略查找數(shù)據(jù)結(jié)構(gòu)40,用于存儲(chǔ)復(fù)雜查詢(含有"*"或"〃")。每個(gè)數(shù)據(jù)庫(kù)使用不同類型的過濾器查詢。即,簡(jiǎn)單策略數(shù)據(jù)庫(kù)30使用在此標(biāo)記為22的簡(jiǎn)單過濾器進(jìn)行過濾。例如,簡(jiǎn)單過濾器22可例如基于修正DFA(確定性有限自動(dòng)機(jī))結(jié)構(gòu)。復(fù)雜策略數(shù)據(jù)庫(kù)40使用復(fù)雜過濾器23進(jìn)行過濾,該過濾器可以通過改進(jìn)YFilter/DFA結(jié)構(gòu)并修改AFilter通配符和后代結(jié)構(gòu)來設(shè)計(jì)。當(dāng)系統(tǒng)10從XML解析器接收XML標(biāo)簽時(shí),匹配引擎20使用查詢模塊21同時(shí)查詢兩個(gè)策略數(shù)據(jù)結(jié)構(gòu)30和40,用于將從XML處理器接收到的數(shù)據(jù)與策略匹配。查詢模塊21可以例如使用XQuery語言。簡(jiǎn)單策略數(shù)據(jù)結(jié)構(gòu)(或模塊)30存儲(chǔ)簡(jiǎn)單策略,其使用更簡(jiǎn)單(和更快)的過濾機(jī)制查詢,而復(fù)雜策略數(shù)據(jù)結(jié)構(gòu)(或模塊)40存儲(chǔ)復(fù)雜策略,其語法包括諸如"*"的通配符和"〃"表達(dá)式。根據(jù)情況,策略被人工或自動(dòng)地放入這些數(shù)據(jù)結(jié)構(gòu)中。通過同時(shí)對(duì)兩種數(shù)據(jù)結(jié)構(gòu)執(zhí)行查詢,查詢與策略的匹配比使用以上描述的現(xiàn)有方法執(zhí)行得更快。如果與XML數(shù)據(jù)對(duì)應(yīng)的策略在簡(jiǎn)單策略模塊30中被識(shí)別并且對(duì)應(yīng)的動(dòng)作在該模塊中被識(shí)別,則XML數(shù)據(jù)相應(yīng)地被動(dòng)作模塊24處理。這時(shí),由復(fù)雜過濾器23執(zhí)行的并行搜索被終止。類似地,如果與XML數(shù)據(jù)對(duì)應(yīng)的策略在復(fù)雜策略數(shù)據(jù)結(jié)構(gòu)40中被識(shí)別,對(duì)應(yīng)的動(dòng)作在模塊40中被識(shí)別,則XML數(shù)據(jù)相應(yīng)地被動(dòng)作模塊24處理。這時(shí),由簡(jiǎn)單過濾器22執(zhí)行的并行搜索被終止。下面描述在本發(fā)明的一個(gè)優(yōu)選實(shí)施例中的過濾器22和23的結(jié)構(gòu)。應(yīng)當(dāng)注意,其它類型的過濾器可用作簡(jiǎn)單和復(fù)雜查詢,并且修正DFA以及YFilter和AFilter結(jié)構(gòu)的改變?cè)诖藘H作為例子進(jìn)行描述簡(jiǎn)單DFA結(jié)構(gòu)如以上所指出的,更簡(jiǎn)單的XPath查詢,即沒有通配符或后代的查詢,被存儲(chǔ)在簡(jiǎn)單策略數(shù)據(jù)庫(kù)30中。與以上給出的YFilter和DFA論文類似地,這些過濾器可找出XPath表達(dá)式中的共性。然而,根據(jù)本發(fā)明的用于匹配引擎20的過濾器22合并XPath查詢路徑的公共前綴,因此,這些查詢只被處理一次。由于這是DFA結(jié)構(gòu),因此,對(duì)于在XML文件中處理的標(biāo)簽,最多一個(gè)邊緣/遷移在DFA中遍歷。此外,在遷移不能對(duì)與所接收的標(biāo)簽相關(guān)聯(lián)的狀態(tài)(不存在的狀態(tài))進(jìn)行的時(shí)刻,沿著當(dāng)前文件路徑的進(jìn)一步匹配是不可能的,在DFA中處理的進(jìn)入標(biāo)簽事件可被忽略,直到接收到當(dāng)前狀態(tài)結(jié)束標(biāo)簽。簡(jiǎn)單XPath查詢的一個(gè)例子在表1中示出。上述查詢被存儲(chǔ)在圖4的例子所示的結(jié)構(gòu)中。當(dāng)標(biāo)簽a出現(xiàn)在所有查詢中時(shí),它被放置在該結(jié)構(gòu)的頂端。在第二層,標(biāo)簽b、c和d被合并,因?yàn)樗鼈儗?duì)于采用各種組合的所有查詢是共用的,因此只被處理一次。在下一層,標(biāo)簽d和e被合并,以致組合de只被處理一次。因此,標(biāo)簽a、b與Ql中的標(biāo)簽d—起出現(xiàn)(見最左側(cè)分支),并與Q5中的標(biāo)簽e—起出現(xiàn);標(biāo)簽a、c與Q2中的標(biāo)簽d—起出現(xiàn),并與Q3中的標(biāo)簽e—起出現(xiàn)。由于標(biāo)簽a、d與只在查詢Q4、Q7中的標(biāo)簽c一起出現(xiàn),因此,沿著最右側(cè)分支不可能有組合。下一層包括查詢Q8、Q5、Q10和Q7的剩余標(biāo)簽,它們不會(huì)被再次合并。合并XPath查詢的公共前綴導(dǎo)致結(jié)構(gòu)內(nèi)存的減少,因?yàn)橹丿B查詢的前綴只被存儲(chǔ)一次。該安排也提供了改善的處理時(shí)間,因?yàn)槎鄠€(gè)查詢同時(shí)通過其狀態(tài)機(jī)推進(jìn)。復(fù)雜查詢包括通配符"*"或后代"〃"的查詢對(duì)復(fù)雜策略數(shù)據(jù)結(jié)構(gòu)40執(zhí)行。在現(xiàn)有的YFilter/DFA結(jié)構(gòu)中,定位步驟元素可出現(xiàn)在整個(gè)結(jié)構(gòu)中的多個(gè)位置上,如圖1的例子所示。為了進(jìn)一步加速查詢過程并更好地使用內(nèi)存空間,修正AFilter結(jié)構(gòu)可根據(jù)本發(fā)明用作存儲(chǔ)復(fù)雜查詢;但是,其它類型的結(jié)構(gòu)也是可以的。修正在于根據(jù)本發(fā)明的復(fù)雜查詢結(jié)構(gòu)合并定位步驟元素以節(jié)省存儲(chǔ)空間的事實(shí)。與使用DFA機(jī)制相比,優(yōu)選使用修正AFilter結(jié)構(gòu),因?yàn)楝F(xiàn)有的AFilter結(jié)構(gòu)允許在試圖遍歷一組查詢狀態(tài)尋找XML文件結(jié)構(gòu)匹配之前,簡(jiǎn)單地檢查當(dāng)前來自XML文件的將被處理的標(biāo)簽是否是最后一個(gè),觸發(fā)XPath查詢的狀態(tài)(定位步驟)。如果XML文件不包含觸發(fā)狀態(tài),則AxisView"反向狀態(tài)機(jī)"將不會(huì)被遍歷。當(dāng)前,用于AFilter的StackBranch結(jié)構(gòu)對(duì)每個(gè)AxisView節(jié)點(diǎn)定義一個(gè)堆棧,包括通配符元素"*"的特殊堆棧,如圖2a-2c所示。這似乎很浪費(fèi),因?yàn)锳xisView結(jié)構(gòu)中的節(jié)點(diǎn)數(shù)量可能非常多,而在所有StackBranch堆棧中的元素?cái)?shù)量將最多只是XML文件的深度。本發(fā)明提出采用用于AxisView的所有節(jié)點(diǎn)的單個(gè)堆棧加上用S^示記的"*"堆棧實(shí)現(xiàn)StackBranch。這可以用很少的額外結(jié)構(gòu)來實(shí)現(xiàn)。圖5a至5c表示圖2a_2c所示的例子中的當(dāng)前活動(dòng)標(biāo)簽。在此,圖5a示出了在接收任何標(biāo)簽之前的堆棧,圖5b示出了在接收一組標(biāo)簽〈aXdXa〉之后的堆棧,圖5c示出了在接收一組標(biāo)簽〈aXdXaXb〉之后的堆棧。如圖5a所示并如以上所提到的,只維持兩個(gè)堆棧,S^用于堆疊通配符"大",另一個(gè)用于所有的文件路徑標(biāo)簽。再次重申,可以理解,其它類型的過濾器可用于存儲(chǔ)簡(jiǎn)單和復(fù)雜查詢;根據(jù)本發(fā)明,簡(jiǎn)單和復(fù)雜查詢被分開存儲(chǔ)的事實(shí)使得能夠同時(shí)對(duì)兩個(gè)數(shù)據(jù)結(jié)構(gòu)執(zhí)行搜索,這顯著加快了查詢運(yùn)行時(shí)間,并導(dǎo)致內(nèi)存空間的節(jié)省。如上所述,本發(fā)明提供與以上描述的現(xiàn)有方案更重要的優(yōu)點(diǎn)。即,本發(fā)明保持了用單次通過XML文件匹配所有查詢的能力。而且,由于不匹配文件的屏蔽在前面執(zhí)行,因此,遍歷查詢狀態(tài)被延遲。由于XML解析事件觸發(fā)/驅(qū)動(dòng)匹配過程,因此,匹配過程的速度加快了。使得匹配過程加快的再一個(gè)特性通過使用修正AFilter過程而可行,其中,運(yùn)行時(shí)存儲(chǔ)量使用與文件的深度成比例。在本發(fā)明中,運(yùn)行時(shí)堆棧的尺寸減小了,因此避免了YFilter的非確定性。本發(fā)明也是內(nèi)存高效的,因?yàn)樗苊饬酥笖?shù)級(jí)的內(nèi)存消耗以處理復(fù)雜查詢。此外,根據(jù)本發(fā)明的策略匹配使用具有相同名字的狀態(tài)組合存儲(chǔ),以進(jìn)一步節(jié)省內(nèi)存空間。與現(xiàn)有的匹配引擎相比,內(nèi)存的更有效使用在于它對(duì)于謂詞值匹配使用了基于組合范圍的結(jié)構(gòu)。權(quán)利要求一種對(duì)應(yīng)用層格式化文件執(zhí)行應(yīng)用層策略的方法,每一個(gè)策略定義一個(gè)規(guī)則和動(dòng)作,包括a)分別在簡(jiǎn)單策略數(shù)據(jù)結(jié)構(gòu)和復(fù)雜策略數(shù)據(jù)結(jié)構(gòu)中有區(qū)別地存儲(chǔ)適用于所述應(yīng)用層格式化文件的簡(jiǎn)單策略和復(fù)雜策略;b)解析作為分層結(jié)構(gòu)中流應(yīng)用層數(shù)據(jù)接收的文件,以能夠?qū)λ鑫募械膶?duì)象賦值;c)同時(shí)查詢所述簡(jiǎn)單策略數(shù)據(jù)結(jié)構(gòu)和復(fù)雜策略數(shù)據(jù)結(jié)構(gòu)以識(shí)別與所述對(duì)象對(duì)應(yīng)的所有策略;d)一旦匹配所述對(duì)象的所有簡(jiǎn)單策略和復(fù)雜策略都被識(shí)別,則停止在所述簡(jiǎn)單策略數(shù)據(jù)結(jié)構(gòu)和復(fù)雜策略數(shù)據(jù)結(jié)構(gòu)中對(duì)所述對(duì)象的查詢;以及e)執(zhí)行由與所述對(duì)象對(duì)應(yīng)的簡(jiǎn)單和復(fù)雜策略限定的動(dòng)作。2.如權(quán)利要求1所述的方法,其中,所述文件是XML文件,所述對(duì)象是XPath表達(dá)式的賦值結(jié)果。3.如權(quán)利要求2所述的方法,其中,所述簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)不使用通配符"*"和后代"〃"表達(dá)式的XPath查詢。4.如權(quán)利要求3所述的方法,其中,所述簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu)是確定性有限自動(dòng)機(jī)(DFA)結(jié)構(gòu)。5.如權(quán)利要求3所述的方法,其中,查詢所述簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu)是使用確定性有限自動(dòng)機(jī)(DFA)結(jié)構(gòu)執(zhí)行的,其中,具有公共前綴的兩個(gè)或兩個(gè)以上的XPath查詢被合并。6.如權(quán)利要求2所述的方法,其中,所述復(fù)雜策略數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)使用通配符"*"和后代"〃"表達(dá)式的XPath查詢。7.如權(quán)利要求6所述的方法,其中,所述復(fù)雜策略數(shù)據(jù)結(jié)構(gòu)包括用于表示查詢的壓縮確定性有限自動(dòng)機(jī)(DFA)結(jié)構(gòu)以及用于表示所述XML文件的當(dāng)前活動(dòng)標(biāo)簽的堆棧結(jié)構(gòu),其中所述堆棧結(jié)構(gòu)用于在接收到所述文件中匹配查詢的最終定位步驟的標(biāo)簽時(shí)遍歷所述DFA結(jié)構(gòu)。8.如權(quán)利要求7所述的方法,其中,所述堆棧結(jié)構(gòu)使用用于從所述文件接收的所有標(biāo)簽的單個(gè)堆棧和用于所述通配符"*"的堆棧。9.一種對(duì)XML文件執(zhí)行應(yīng)用層策略的系統(tǒng),每一個(gè)策略定義了一個(gè)規(guī)則和動(dòng)作,包括XML解析器,用于解析作為分層結(jié)構(gòu)中的流XML數(shù)據(jù)接收的XML文件,以能夠?qū)λ鯴ML文件中的對(duì)象賦值;簡(jiǎn)單策略數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)不使用通配符"*"和后代"〃"表達(dá)式的XPath查詢;復(fù)雜策略數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)使用通配符"*"和后代"〃"表達(dá)式的XPath查詢;用于同時(shí)查詢所述簡(jiǎn)單策略數(shù)據(jù)結(jié)構(gòu)和復(fù)雜策略數(shù)據(jù)結(jié)構(gòu)以識(shí)別與所述對(duì)象對(duì)應(yīng)的所有策略的裝置;以及用于執(zhí)行由與在數(shù)據(jù)結(jié)構(gòu)中識(shí)別的對(duì)象對(duì)應(yīng)的策略限定的動(dòng)作的裝置。全文摘要提供了一種XML匹配引擎和方法,其中使用XPath/XQuery策略表達(dá)的策略規(guī)則與流XML文件匹配。使用兩種不同的數(shù)據(jù)結(jié)構(gòu)用于存儲(chǔ)簡(jiǎn)單XPath查詢(無通配符或后代)的組合修正DFA數(shù)據(jù)結(jié)構(gòu)和用于存儲(chǔ)復(fù)雜查詢(有通配符或/和后代)的修正AFilter結(jié)構(gòu)。當(dāng)匹配引擎從XML解析器接收到XML標(biāo)簽時(shí),在這兩種結(jié)構(gòu)中并行地執(zhí)行匹配。文檔編號(hào)G06F17/30GK101765842SQ200880100791公開日2010年6月30日申請(qǐng)日期2008年7月17日優(yōu)先權(quán)日2007年7月30日發(fā)明者B·S·布-迪亞布,P·布恩申請(qǐng)人:阿爾卡特朗訊公司