專利名稱:用于驗(yàn)證分層組織的消息的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及計(jì)算領(lǐng)域,尤其涉及用于消息驗(yàn)證的系統(tǒng)和方法。
背景技術(shù):
信息一般以足夠豐富而能夠允許表達(dá)有效和無效內(nèi)容的詞匯或語言來表示。例如,能使用羅馬字母來寫出正確的英語句子,但是也可能以難以理解的方式將不遵循任何語言的語義或語法規(guī)則的英語單詞串聯(lián)在一起或者將英語字母串聯(lián)在一起。表達(dá)計(jì)算機(jī)數(shù)據(jù)的語言也不例外,即可能編寫依照某些規(guī)則集來說是無效的計(jì)算機(jī)數(shù)據(jù)。
在計(jì)算機(jī)系統(tǒng)中,許多數(shù)據(jù)以分層形式表達(dá),如以可擴(kuò)展標(biāo)記語言(XML)消息的形式表達(dá)。XML消息符合某種模式,該模式實(shí)質(zhì)上定義了某類消息的正確語法。例如,一種類型的消息可以是“地址”,用于地址的模式可能要求地址包括街道名、城市、州和郵遞區(qū)號(hào)。然而,即使是遵循該模式的消息也可能由于某些實(shí)質(zhì)性原因而無效。例如,表明街道名、城市、州和郵遞區(qū)號(hào)的數(shù)據(jù)的任何組合將滿足該模式,但是如果假設(shè)州元素并不是美國的一個(gè)州的名字,或如果指定的郵遞區(qū)號(hào)不匹配城市/州組合,那么該地址也可能仍然是無效的。
傳統(tǒng)的進(jìn)行驗(yàn)證的方法是通過強(qiáng)制的消息特定的代碼。每個(gè)消息類的驗(yàn)證程序必須單獨(dú)地編寫,其中沒有辦法不修改類代碼本身而修改該程序的行為。該技術(shù)的問題在于,對(duì)用于驗(yàn)證的實(shí)質(zhì)性要求的任何改變都將要求對(duì)源代碼作出改變。不僅這種對(duì)源代碼的改變是麻煩的,而且在某些情況下還要求將源代碼向公眾散布,使得驗(yàn)證程序的用戶能夠?qū)υ摮绦蜃鞒鲎远x修改。這種對(duì)源代碼的散布可能不是所希望的。
鑒于上述,需要一種克服了現(xiàn)有技術(shù)的缺陷的系統(tǒng)。
發(fā)明內(nèi)容
本發(fā)明提供一種用于驗(yàn)證消息的機(jī)制。驗(yàn)證引擎走查消息。例如,在可看作是樹形數(shù)據(jù)結(jié)構(gòu)的XML消息的例子中,驗(yàn)證引擎可以深度優(yōu)先遍歷順序走查該樹的節(jié)點(diǎn)。
當(dāng)遇到每個(gè)節(jié)點(diǎn)時(shí),參考一張表,該表規(guī)定了驗(yàn)證節(jié)點(diǎn)的“代表”。代表是可由驗(yàn)證引擎調(diào)用的指定代碼單元。驗(yàn)證引擎調(diào)用與遇到的節(jié)點(diǎn)類型相對(duì)應(yīng)的代表。驗(yàn)證引擎然后遍歷當(dāng)前節(jié)點(diǎn)的子樹。隨著遍歷這些子樹,可以按上述方式參考表和調(diào)用代表。在遍歷了子樹之后,驗(yàn)證引擎再次參考表,以判斷對(duì)于當(dāng)前節(jié)點(diǎn)是否有后處理程序代表。如果規(guī)定了這樣一個(gè)后處理程序,則調(diào)用后處理程序。代表根據(jù)某種定義的驗(yàn)證標(biāo)準(zhǔn)來評(píng)估節(jié)點(diǎn)(例如,代表通過判斷組合是否實(shí)際上對(duì)應(yīng)于美國的一個(gè)真實(shí)地址,來驗(yàn)證城市、州和郵遞區(qū)號(hào)組合)。
較佳地,存在全局表和局部表。首先參考局部表,來判斷對(duì)于當(dāng)前節(jié)點(diǎn)是否有代表。如果存在這樣一個(gè)代表,則調(diào)用該代表。如果在局部表中沒有命名代表,則參考全局表來判斷其中是否命名了代表。如果在全局表中命名了這樣一個(gè)代表,則從該全局表調(diào)用該代表。全局表可包含應(yīng)用于一寬泛的類別的消息類的代表,而局部表可包含對(duì)某一特定消息類特定的代表。
較佳地,表允許任選地將代表規(guī)定為“排他的”。如果代表是排他的,則它具有對(duì)驗(yàn)證節(jié)點(diǎn)及其子樹的排他性控制,從而驗(yàn)證引擎不遍歷子樹,并且驗(yàn)證引擎不應(yīng)用與子樹中的節(jié)點(diǎn)相關(guān)聯(lián)的代表。否則,如果代表不是排他的,則遍歷子樹,并且驗(yàn)證引擎應(yīng)用與子樹中的節(jié)點(diǎn)對(duì)應(yīng)的代表。
下面描述本發(fā)明的其它特征。
當(dāng)連同附圖一起閱讀時(shí),會(huì)更好地理解上述概述以及后面較佳實(shí)施例的詳細(xì)描述。出于說明本發(fā)明的目的,在附圖中示出了本發(fā)明的示例性的構(gòu)造,但是,本發(fā)明并不限于所揭示的特定方法和手段。附圖中圖1是可實(shí)施本發(fā)明的諸方面的示例性計(jì)算環(huán)境的框圖;圖2是采取可擴(kuò)展標(biāo)記語言(XML)的形式的示例性消息的框圖;圖3是圖2的XML消息的樹形表示的框圖;圖4是樹圖,示出了對(duì)樹的深度優(yōu)先遍歷;
圖5是根據(jù)本發(fā)明的諸方面的示例性驗(yàn)證表的框圖;圖6是根據(jù)本發(fā)明的諸方面的示例性驗(yàn)證過程的流程圖。
具體實(shí)施例方式
綜述計(jì)算機(jī)使用的數(shù)據(jù)一般以分層方式進(jìn)行組織,例如符合某種模式的XML數(shù)據(jù)。即使數(shù)據(jù)在語法上符合某個(gè)模式,但是該數(shù)據(jù)在某個(gè)實(shí)質(zhì)性規(guī)則集下仍然可能無效。傳統(tǒng)上,對(duì)數(shù)據(jù)集(如消息)進(jìn)行實(shí)質(zhì)性驗(yàn)證要求設(shè)計(jì)成驗(yàn)證某一類消息的專用代碼。本發(fā)明提供一種通用工具,它可用于驗(yàn)證任意類的消息,并可擴(kuò)展成將任意的規(guī)則集應(yīng)用于消息。本發(fā)明的機(jī)制可用于驗(yàn)證任何任意的數(shù)據(jù)或消息,對(duì)于這些數(shù)據(jù)或消息來說,驗(yàn)證參數(shù)和數(shù)據(jù)可以用XML形式表示。
示例性計(jì)算環(huán)境圖1示出了可實(shí)施本發(fā)明的諸方面的示例性計(jì)算環(huán)境。計(jì)算系統(tǒng)環(huán)境100僅僅是適用的計(jì)算環(huán)境的一個(gè)例子,且并不試圖限制本發(fā)明的使用或功能的范圍。計(jì)算環(huán)境100也不應(yīng)被解釋成具有與示例性操作環(huán)境100中所例示的任一組件或它們的組合相關(guān)的任何依賴性或要求。
本發(fā)明適用于許多其它的通用或?qū)S糜?jì)算系統(tǒng)環(huán)境或配置??蛇m用于連同本發(fā)明一起使用的已知的計(jì)算系統(tǒng)、環(huán)境和/或配置的例子包括但不限于,個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持或膝上型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、機(jī)頂盒、可編程消費(fèi)電子產(chǎn)品、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、嵌入式系統(tǒng)、包含任意上述系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境,等等。
可用由計(jì)算機(jī)執(zhí)行的諸如程序模塊之類的計(jì)算機(jī)可執(zhí)行指令的一般上下文環(huán)境來描述本發(fā)明。一般地,程序模塊包括例行程序、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等,它們執(zhí)行特定的任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類型。本發(fā)明還可在分布式計(jì)算環(huán)境中實(shí)施,在分布式計(jì)算環(huán)境中,通過經(jīng)通信網(wǎng)絡(luò)或其它數(shù)據(jù)傳輸媒體鏈接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊和其它數(shù)據(jù)可位于包含存儲(chǔ)設(shè)備的本地或遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)媒體中。
參考圖1,用于實(shí)施本發(fā)明的示例性系統(tǒng)包括計(jì)算機(jī)110形式的通用計(jì)算設(shè)備。計(jì)算機(jī)110的組件可包括但不限于,處理單元120、系統(tǒng)存儲(chǔ)器130以及將包含系統(tǒng)存儲(chǔ)器在內(nèi)的各種系統(tǒng)組件連接到處理單元120的系統(tǒng)總線121。處理單元120可代表諸如那些在多線程處理器上支持的多個(gè)邏輯處理單元。系統(tǒng)總線121可以是若干類型的總線結(jié)構(gòu)中的任一種,包括存儲(chǔ)器總線或存儲(chǔ)器控制器、外圍總線、以及使用各種總線體系結(jié)構(gòu)中的任一種的局部總線。作為例子但非限制,這種體系結(jié)構(gòu)包括工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)(ISA)總線、微通道結(jié)構(gòu)(MCA總線、增強(qiáng)型ISA(EISA)總線、視頻電子標(biāo)準(zhǔn)協(xié)會(huì)(VESA)局部總線、以及外設(shè)部件互連(PCI)總線(也稱為夾層(Mezzanine)總線)。系統(tǒng)總線121還可實(shí)現(xiàn)為通信設(shè)備之間的點(diǎn)對(duì)點(diǎn)連接、交換結(jié)構(gòu)等。
計(jì)算機(jī)110一般包括各種計(jì)算機(jī)可讀媒體。計(jì)算機(jī)可讀媒體可以是計(jì)算機(jī)110可存儲(chǔ)訪問的任何媒體,包括易失性和非易失性、可移動(dòng)和不可移動(dòng)的媒體。作為例子,但非限制,計(jì)算機(jī)可讀媒體可包括計(jì)算機(jī)存儲(chǔ)媒體和通信媒體。計(jì)算機(jī)存儲(chǔ)媒體包括以用于存儲(chǔ)諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)之類的信息的任何方法或技術(shù)實(shí)現(xiàn)的易失性和非易失性、可移動(dòng)和不可移動(dòng)的媒體。計(jì)算機(jī)存儲(chǔ)媒體包括,但不限于,RAM、ROM、EEPROM、閃存或其它存儲(chǔ)器技術(shù)、CDROM、數(shù)字通用盤(DVD)或其它光盤存儲(chǔ)、磁帶盒、磁帶、磁盤存儲(chǔ)或其它磁存儲(chǔ)設(shè)備、或能夠用于存儲(chǔ)所需信息和能夠由計(jì)算機(jī)110存取訪問的任何其它媒體。通信媒體一般將計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)嵌入于諸如載波或其它傳輸機(jī)制的已調(diào)數(shù)據(jù)信號(hào)中,通信媒體包括任何信息遞送媒體。術(shù)語“已調(diào)數(shù)據(jù)信號(hào)”是指信號(hào)使其一個(gè)或多個(gè)特征以編碼該信號(hào)中的信息的方式被設(shè)置或改變。作為例子,但非限制,通信媒體包括諸如有線網(wǎng)絡(luò)或直接線纜連接之類的有線媒體、諸如聲音、RF、紅外線或其它無線媒體之類的無線媒體。上述任何的組合也應(yīng)當(dāng)包含在計(jì)算機(jī)可讀媒體的范圍內(nèi)。
系統(tǒng)存儲(chǔ)器130包括諸如只讀存儲(chǔ)器(ROM)131和隨機(jī)存取存儲(chǔ)器(RAM)132之類的易失性和/或非易失性形式的計(jì)算機(jī)存儲(chǔ)媒體。包含在諸如啟動(dòng)期間幫助在計(jì)算機(jī)110內(nèi)的元件之間傳送信息的基本例行程序的基本輸入/輸出系統(tǒng)133(BIOS)一般存儲(chǔ)于ROM 131中。RAM 132一般包含可由處理單元120立即存取訪問和/或當(dāng)前正在執(zhí)行的數(shù)據(jù)和/或程序模塊。作為例子,但非限制,圖1例示了操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136和程序數(shù)據(jù)137。
計(jì)算機(jī)110還可包括其它可移動(dòng)/不可移動(dòng)、易失性/非易失性計(jì)算機(jī)存儲(chǔ)媒體。僅作為例子,圖1例示了讀寫不可移動(dòng)、非易失性磁媒體的硬盤驅(qū)動(dòng)器140、讀寫可移動(dòng)、非易失性磁盤152的磁盤驅(qū)動(dòng)器151、以及讀寫諸如CDROM或其它光學(xué)媒體的可移動(dòng)、非易失性光盤156的光盤驅(qū)動(dòng)器155??捎糜谑纠圆僮鳝h(huán)境的其它可移動(dòng)/不可移動(dòng)、易失性/非易失性計(jì)算機(jī)存儲(chǔ)媒體包括,但不限于,磁帶盒、閃存卡、數(shù)字通用盤、數(shù)字視頻帶、固態(tài)RAM、固態(tài)ROM等。硬盤驅(qū)動(dòng)器141一般通過諸如接口140之類的不可移動(dòng)的存儲(chǔ)器接口而連接到系統(tǒng)總線121,磁盤驅(qū)動(dòng)器151和光盤驅(qū)動(dòng)器155一般通過諸如接口150之類的可移動(dòng)的存儲(chǔ)器接口而連接到系統(tǒng)總線121。
上述的和圖1所例示的驅(qū)動(dòng)器及其相關(guān)的計(jì)算機(jī)存儲(chǔ)媒體為計(jì)算機(jī)110提供了計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的存儲(chǔ)。例如,在圖1中,硬盤驅(qū)動(dòng)器141例示為存儲(chǔ)操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146和程序數(shù)據(jù)147。注意到這些組件可以與操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136以及程序數(shù)據(jù)137相同或不同。這里對(duì)操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146以及程序數(shù)據(jù)147給出了不同的數(shù)字標(biāo)號(hào)以說明至少它們是不同的副本。用戶可通過諸如鍵盤162和通常稱為鼠標(biāo)、軌跡球或觸板的指點(diǎn)設(shè)備161之類的輸入設(shè)備,將命令和信息輸入到計(jì)算機(jī)20中。其它輸入設(shè)備(未示出)可包括話筒、操縱桿、游戲手柄、衛(wèi)星反射器、掃描儀等。這些和其它輸入設(shè)備通常通過連接到系統(tǒng)總線的用戶輸入接口160而連接到處理單元120,但也可通過諸如并行端口、游戲端口或通用串行總線(USB)之類的其它接口和總線結(jié)構(gòu)來連接。監(jiān)視器191和其它類型的顯示設(shè)備通過諸如視頻接口190之類的接口而連接到系統(tǒng)總線121。除了監(jiān)視器之外,計(jì)算機(jī)還可包括其它外圍輸出設(shè)備,如揚(yáng)聲器197和打印機(jī)196,它們可通過輸出外圍接口195進(jìn)行連接。
計(jì)算機(jī)110可操作于使用對(duì)諸如遠(yuǎn)程計(jì)算機(jī)180之類的一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī)的邏輯連接的聯(lián)網(wǎng)環(huán)境中。遠(yuǎn)程計(jì)算機(jī)180可以是個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對(duì)等設(shè)備或其它公共網(wǎng)絡(luò)節(jié)點(diǎn),雖然在圖1中僅例示出存儲(chǔ)設(shè)備181,但是它一般包括上述關(guān)于計(jì)算機(jī)110所描述的元件的部分或全部。圖1中描繪的邏輯連接包括局域網(wǎng)(LAN)171和廣域網(wǎng)(WAN)173,但還可包括其它網(wǎng)絡(luò)。這種聯(lián)網(wǎng)環(huán)境在辦公室、企業(yè)范圍計(jì)算機(jī)網(wǎng)絡(luò)、企業(yè)內(nèi)部互聯(lián)網(wǎng)和因特網(wǎng)中是普遍的。
當(dāng)用于LAN聯(lián)網(wǎng)環(huán)境中時(shí),計(jì)算機(jī)110通過網(wǎng)絡(luò)接口或適配器170而連接到LAN 171。當(dāng)用于WAN聯(lián)網(wǎng)環(huán)境中時(shí),計(jì)算機(jī)110一般包括用于在諸如因特網(wǎng)之類的WAN 173上建立通信的調(diào)制解調(diào)器172或其它手段。內(nèi)置的或外置的調(diào)制解調(diào)器172可通過用戶輸入接口160或其它適當(dāng)機(jī)制來連接到系統(tǒng)總線121。在聯(lián)網(wǎng)環(huán)境中,關(guān)于計(jì)算機(jī)110所描述的程序模塊或其部分可存儲(chǔ)于遠(yuǎn)程存儲(chǔ)設(shè)備中。作為例子,但非限制,圖1例示出駐留于存儲(chǔ)設(shè)備181上的遠(yuǎn)程應(yīng)用程序185。將理解到所示出的網(wǎng)絡(luò)連接是示例性的,可以使用在計(jì)算機(jī)之間建立通信鏈路的其它手段。
示例性XML數(shù)據(jù)本發(fā)明可用于驗(yàn)證諸如可擴(kuò)展標(biāo)記語言(XML)形式的數(shù)據(jù)之類的分層組織的數(shù)據(jù)集或“消息”。XML是一種元語言,它允許根據(jù)規(guī)定的結(jié)構(gòu)或模式來組織數(shù)據(jù)。圖2示出了XML數(shù)據(jù)的例子,其中所描述的組織結(jié)構(gòu)有助于表示郵政地址。
在XML中,數(shù)據(jù)項(xiàng)與元素名或“標(biāo)簽”(tag)名相關(guān)聯(lián)。標(biāo)簽可用作定界符,它使用的語法約定是,定界的數(shù)據(jù)的起始處以包含在尖括號(hào)“<”和“>”中的標(biāo)簽名標(biāo)記,定界的數(shù)據(jù)的結(jié)束處以所述標(biāo)簽名前加斜線并包含在尖括號(hào)內(nèi)來標(biāo)記。下面是遵循此約定的XML數(shù)據(jù)的一個(gè)例子<A>
數(shù)據(jù)由標(biāo)簽“A”定界</A>
在圖2中,消息200是地址。定界符<ADDRESS>(202)和</ADDRESS>(222)包圍了整個(gè)消息,示出所有的數(shù)據(jù)都是“ADDRESS”元素的一部分。ADDRESS元素包括兩個(gè)子元素STREET元素和CITYSTATEZIP元素。STREET元素設(shè)置成“123主街道”(204)。CITYSTATEZIP元素是一復(fù)合元素,它包括其它元素;這些包含的元素都包圍在定界符206和220之中。CITYSTATEZIP元素包括設(shè)置成“雷蒙德市”的CITY元素(208)、設(shè)置成“華盛頓州”的STATE元素(210)、以及ZIP元素,ZIP元素是一個(gè)復(fù)合元素,它所包含的元素由定界符212和218所標(biāo)記。ZIP元素包括設(shè)置成“98052”的FIVEDIGIT元素(214)和設(shè)置成“0123”的PLUSFOUR元素(216)。從而,消息200按分層數(shù)據(jù)集描述了地址。
將理解到XML消息對(duì)應(yīng)于樹形數(shù)據(jù)結(jié)構(gòu)。圖3示出了對(duì)應(yīng)于消息200的樹300。節(jié)點(diǎn)302對(duì)應(yīng)于圖2的“ADDRESS”標(biāo)簽,節(jié)點(diǎn)302的所有子樹對(duì)應(yīng)于包含在<ADDRESS>和</ADDRESS>定界符202和222(示于圖2)之內(nèi)的元素。這些所包含的元素是STREET元素204以及CITYSTATEZIP元素。如上所述,CITYSTATEZIP元素是復(fù)合元素,它包括其它元素。節(jié)點(diǎn)304對(duì)應(yīng)于CITYSTATEZIP標(biāo)簽,節(jié)點(diǎn)304的所有子樹對(duì)應(yīng)于包含在<CITYSTATEZIP>和</CITYSTATEZIP>定界符206和220(示于圖2)之內(nèi)的元素。這些包含的元素是CITY元素208、STATE元素210和ZIP元素。ZIP元素同樣是復(fù)合元素,它包括其它元素。從而,節(jié)點(diǎn)306對(duì)應(yīng)于ZIP標(biāo)簽,而節(jié)點(diǎn)306的所有子樹對(duì)應(yīng)于包含在<ZIP>和</ZIP>定界符212和218之內(nèi)的元素。這些包含的元素是FIVEDIGIT元素214和PLUSFOUR元素216??梢钥吹?,樹300對(duì)應(yīng)于XML消息200中的結(jié)構(gòu),并示出包含在消息200中的郵政地址的分層結(jié)構(gòu)。
消息一般遵循某種類型的預(yù)定義的結(jié)構(gòu)或“模式”。例如,用于“地址”消息的模式可定義可在地址中表示的各種不同類型的結(jié)構(gòu)。例如,這樣一種模式可將地址消息定義成包含ADDRESS標(biāo)簽,并可進(jìn)一步定義ADDRESS標(biāo)簽的可允許的結(jié)構(gòu)的詳細(xì)內(nèi)容。例如,該模式可聲明ADDRESS標(biāo)簽包含STREET元素,以及還包含另一個(gè)元素,該另一個(gè)元素可以是CITYSTATEZIP(用于美國地址)或CITYPROVINCEPOSTCODE(用于加拿大地址),或用于美國或加拿大之外的地址的CITYCOUNTRY。對(duì)于每種類型的元素(如CITYSTATEZIP),該模式可定義該元素的構(gòu)成子元素的可允許的結(jié)構(gòu)。根據(jù)ADDRESS標(biāo)簽的這種定義,將理解到消息200及其對(duì)應(yīng)的樹300(如圖2和3所示)僅僅是ADDRESS標(biāo)簽的可允許的內(nèi)容的一個(gè)例子,即用于美國地址的結(jié)構(gòu),可選地是,合法的ADDRESS可包含上述的其它類型的元素之一。
實(shí)際上,該模式定義了用于XML消息的可許可的語法。然而,可能形成在某個(gè)模式下語法上正確,但違反某個(gè)本體的規(guī)則的XML消息。如下面更特別地描述地那樣,本發(fā)明提供一種機(jī)制,它可用于驗(yàn)證XML消息的本體。
樹遍歷如上連同圖3所述,XML消息可看作是樹。根據(jù)本發(fā)明的一個(gè)特征,較佳地以深度優(yōu)先順序來遍歷由XML消息表示的樹。隨著遇到樹中的每個(gè)節(jié)點(diǎn),根據(jù)一個(gè)或多個(gè)驗(yàn)證表提供的信息來驗(yàn)證節(jié)點(diǎn)。下面更特別地描述了“驗(yàn)證”節(jié)點(diǎn)是什么意思以及驗(yàn)證表本身的結(jié)構(gòu)。然而,參考圖4,描述的例子示出了以深度優(yōu)先順序遍歷樹是什么意思。
樹400包括多個(gè)節(jié)點(diǎn)。樹400的根標(biāo)記為“A”。如該圖所示,根節(jié)點(diǎn)的孩子標(biāo)記為“A1”、“A2”和“A3”。這些孩子中的每一個(gè)又依次具有孩子,標(biāo)記為“A11”、“A12”、“A21”、“A22”、“A31”以及“A32”。
當(dāng)以深度優(yōu)先順序遍歷樹400時(shí),以某一順序遇到樹的每個(gè)節(jié)點(diǎn)。以深度優(yōu)先順序遍歷樹的算法可遞歸式定義。對(duì)于一給定的樹—首先訪問該樹的根節(jié)點(diǎn);—然后,以從左至右、深度優(yōu)先的順序訪問該跟節(jié)點(diǎn)的每個(gè)子樹(如果有的話)由于每個(gè)子樹實(shí)際上是具有其自己的根節(jié)點(diǎn)的一棵樹(例如A1是A的一個(gè)子樹的根節(jié)點(diǎn)),因此,以深度優(yōu)先順序遍歷子樹的算法與以深度優(yōu)先順序遍歷頂層樹的算法相同。從而,如本領(lǐng)域的技術(shù)人員將理解到的那樣,該遍歷算法可按遞歸函數(shù)來實(shí)現(xiàn)。
從而,當(dāng)使用該遞歸算法遍歷樹400時(shí),首先遇到的節(jié)點(diǎn)是根節(jié)點(diǎn)“A”。然后以深度優(yōu)先順序遍歷根節(jié)點(diǎn)“A”的最左邊的子樹。由于每個(gè)子樹其本身也是棵樹,因此這些子樹的每一個(gè)都具有根節(jié)點(diǎn)。A的最左邊的子樹的根節(jié)點(diǎn)標(biāo)記為“A1”。從而,在訪問了節(jié)點(diǎn)A之后,遍歷樹的算法應(yīng)用到以A1為根的子樹,且該子樹首先被訪問的節(jié)點(diǎn)是A1。A1同樣具有子樹,以從左至右的順序訪問這些子樹。從而,在訪問A1之后,以深度優(yōu)先順序遍歷以A11為根的子樹。由于A11沒有孩子,即A11沒有子樹需要被遍歷,因此以深度優(yōu)先順序遍歷A11右邊下一個(gè)子樹(即以A12為根的樹)。由于A12同樣沒有孩子,因此無子樹需要遍歷。從而,完成了對(duì)A1及其子樹的遍歷,算法進(jìn)行到遍歷節(jié)點(diǎn)A的下一個(gè)子樹(即以A2為根的子樹),并且以遍歷以A1為根的子樹相同的方式遍歷該子樹。
當(dāng)使用上述遞歸算法遍歷樹之后,結(jié)果是以圖4所示的順序訪問了樹400中的所有節(jié)點(diǎn),即所述順序是A、A1、A11、A12、A2、A21、A22、A3、A31、A32。
示例性驗(yàn)證表如上所述,XML消息可符合一模式中規(guī)定的結(jié)構(gòu)或語法,并仍然可在其本體中包含無效數(shù)據(jù)。例如,如上連同圖2和3所述的那樣,消息可包含地址,該地址可規(guī)定城市=“雷蒙德市”、州=“華盛頓州”、郵遞區(qū)號(hào)=“98052”。該信息語法上是有效的(即包括城市、州,并且郵遞區(qū)號(hào)對(duì)于美國地址來說是正確的),并且實(shí)質(zhì)上它也是有效的(即事實(shí)上98052是華盛頓州雷蒙德市的正確的郵遞區(qū)號(hào))。然而,應(yīng)注意到,從地址的語法上沒有辦法確定該地址實(shí)質(zhì)上是否有效。例如,“雷蒙德市,華盛頓州19103”是語法上有效的,但是實(shí)質(zhì)上卻是無效的,因?yàn)?9103是賓夕法尼亞州費(fèi)城的郵遞區(qū)號(hào),而不是華盛頓州雷蒙德市的郵遞區(qū)號(hào)。從而,確保XML消息符合某一模式僅可確保語法有效性,而不能確保其它類型的有效性。本發(fā)明提供了一種用于對(duì)XML消息進(jìn)行任意的有效性測(cè)試的框架。
圖5示出了示例性的驗(yàn)證表500,它規(guī)定了要對(duì)某一類型的XML消息進(jìn)行的驗(yàn)證測(cè)試。表500中示出的元素對(duì)應(yīng)于樹400(示于圖4)的元素類型,即樹400具有名為A、A1、A11等的元素,因此表500也是同樣。驗(yàn)證表500包括四列502、504、506和508。對(duì)于驗(yàn)證表500的給定一行,諸條目具有下述含義—列502中的條目是該行所應(yīng)用于的元素名;—列504中的條目指示出對(duì)該元素規(guī)定的代表(delegate)是否是“排他的”。(術(shù)語“代表”和“排他的”將在下面特別解釋);—列506中的條目是當(dāng)遇到元素時(shí)將調(diào)用的代表(或“處理程序”)的名稱;以及—列508中的條目是在元素及其全部子樹都被處理之后將調(diào)用的代表。從而,表500中的第一行指示出,對(duì)于名為“A”的元素,當(dāng)遇到該元素時(shí)將調(diào)用名為“fA”的代表,以及當(dāng)驗(yàn)證了該元素的所有子樹之后,要調(diào)用名為“postfA”的代表。此外,該行指示出該行中規(guī)定的代表不是“排他的”,即它們不排除對(duì)子樹代表的便用。
“代表”是執(zhí)行對(duì)某一類型的元素的驗(yàn)證的指定的代碼片段。例如,用于圖2中所討論的CITYSTATEZIP元素的代表可包含(或至少參考)美國城市、州和郵遞區(qū)號(hào)的表,來判斷CITYSTATEZIP元素中指定的組合是否是正確的組合。要理解到本發(fā)明不限于任何特定類型的驗(yàn)證測(cè)試,結(jié)合了本發(fā)明的系統(tǒng)的用戶可自由地編寫他們自己的代表,并定義其使元素有效的含義。尤其是,應(yīng)觀察到,代表不限于考慮登記的元素的內(nèi)容(或甚至是登記的子樹的內(nèi)容),而是還可考慮該子樹外的信息(例如,用于CITYSTATEZIP元素的代表還可考慮街道地址(圖2和3所示的元素204),以便判斷zip+4值是否正確)。根據(jù)編寫了什么代表可任意地定義有效性這個(gè)事實(shí)對(duì)驗(yàn)證任何類型的消息都提供了靈活性。
雖然將理解到根據(jù)本發(fā)明的系統(tǒng)可配置成使用任何指定的代碼片段作為代表,但是在一個(gè)例子中,以諸如C#之類的編程語言來編寫代表。
代表名在列506和列508中都出現(xiàn)。列506中命名的代表是在樹遍歷中訪問一給定元素時(shí)將調(diào)用的代表。列508中命名的代表將在遍歷了該元素的所有子樹后被調(diào)用。從而,列508中命名的代表是“后處理程序”,因?yàn)樗窃谠撛丶捌渌凶訕涠急辉L問之后被調(diào)用的。
列504中規(guī)定的“排他的”屬性規(guī)定了對(duì)于當(dāng)前元素的子樹是否要調(diào)用代表。從而,在表500中,元素A2具有排他屬性,意味著,當(dāng)遇到類型A2的元素時(shí),就不調(diào)用用于A2的子樹的元素的個(gè)別代表,因?yàn)锳2的代表具有對(duì)A2及其所有子樹的“排他的”控制。從而,即使表500示出了用于元素A21和A22的代表,也不調(diào)用這些代表,因?yàn)锳2具有“排他的”屬性,防止了對(duì)A2的任一子樹的任何元素調(diào)用代表。
根據(jù)本發(fā)明的系統(tǒng)可包含一種驗(yàn)證引擎,它走查XML消息(如以深度優(yōu)先順序遍歷該消息所表示的樹),并根據(jù)驗(yàn)證表中的規(guī)定應(yīng)用代表。將理解到,驗(yàn)證引擎允許修改或替換驗(yàn)證測(cè)試,而無需訪問驗(yàn)證引擎的源代碼;可簡單地通過從驗(yàn)證表中登記或解除登記代表,來改變驗(yàn)證測(cè)試。這種不用訪問底層的驗(yàn)證引擎源代碼就能修改驗(yàn)證測(cè)試的能力是本發(fā)明所提供的靈活性的一個(gè)實(shí)例。
表1示出了使用驗(yàn)證表500,通過驗(yàn)證引擎對(duì)樹400(示于圖1)執(zhí)行的示例性驗(yàn)證測(cè)試。左邊的列以事件出現(xiàn)的順序示出了驗(yàn)證過程中的各種事件(如遇到元素以及完成元素的子樹)。右邊的列示出了根據(jù)發(fā)生的事件而調(diào)用哪個(gè)代表。如表1所示,即使元素A21和A22具有為其登記的代表,驗(yàn)證引擎也不調(diào)用這些代表,因?yàn)锳21和A22是節(jié)點(diǎn)A2的孩子,且所登記的A2的排他標(biāo)記設(shè)置為“是”。(如果在一不同的消息中,A21或A22是未標(biāo)記為排他的某一另一節(jié)點(diǎn)的孩子,則驗(yàn)證引擎將遇到節(jié)點(diǎn)A21或A22,且在遇到這些節(jié)點(diǎn)時(shí)將調(diào)用代表fA21orA22)。
表1
根據(jù)本發(fā)明的一個(gè)特征,可以有全局驗(yàn)證表和局部驗(yàn)證表。本發(fā)明的體系結(jié)構(gòu)允許這種可能性,即字段或字段組可在若干不同類的消息之間共用。這些公共字段的設(shè)置可存儲(chǔ)在全局驗(yàn)證表中。僅應(yīng)用于某一特定類的消息的任何設(shè)置可存儲(chǔ)在局部驗(yàn)證表中。實(shí)際上,局部驗(yàn)證表充當(dāng)全局驗(yàn)證表的一組類特定的置換。并且,在本發(fā)明的一個(gè)實(shí)施例中,可創(chuàng)建多個(gè)全局驗(yàn)證表,可根據(jù)某一上下文環(huán)境來選擇某一特定的全局表來使用。
示例性驗(yàn)證過程如上所述,根據(jù)本發(fā)明的驗(yàn)證引擎走查XML消息,根據(jù)一個(gè)或多個(gè)驗(yàn)證表對(duì)消息中的各種元素調(diào)用代表。下文是對(duì)驗(yàn)證引擎所執(zhí)行的過程的描述。
驗(yàn)證引擎以XML消息的根元素(如圖2至3的例子中的ADDRESS元素,或圖4的例子中的“A”元素)為起始。該起始元素設(shè)置成“當(dāng)前”元素。然后,對(duì)于當(dāng)前元素(在該說明中稱為“X”),驗(yàn)證引擎—在局部驗(yàn)證表中對(duì)X查找“元素處理程序”列中的代表。如果該局部驗(yàn)證表中的該列中規(guī)定了代表,則引擎調(diào)用元素處理程序。
—如果局部表沒有在“元素處理程序”列中對(duì)X規(guī)定代表,則引擎在全局表中查找用于X的代表。如果在全局表中的“元素處理程序”列中規(guī)定了用于X的處理程序,則調(diào)用該規(guī)定的代表。如果任一表中都沒有規(guī)定用于元素X的代表,則沒有用于元素X的代表被調(diào)用。
—對(duì)于元素X的每個(gè)孩子元素,重復(fù)上述步驟(除非X登記為“排他的”)。在一個(gè)實(shí)施例中,這些步驟以遞歸函數(shù)來實(shí)現(xiàn),可在元素X的子樹上調(diào)用。
—如果對(duì)于X存在后處理程序代表(局部表中或全局表中),則在處理了X的所有子樹后,調(diào)用后處理程序。(如果在兩種表中都存在用于X的后處理程序代表,則僅調(diào)用局部表中規(guī)定的代表)圖6以流程圖的形式示出了驗(yàn)證引擎執(zhí)行的過程。一開始,定義“當(dāng)前節(jié)點(diǎn)”為樹的根節(jié)點(diǎn)(602)(如XML消息中的根元素)。然后參考局部驗(yàn)證表。如果在局部驗(yàn)證表中對(duì)于該當(dāng)前節(jié)點(diǎn)存在的條目示出用于該節(jié)點(diǎn)類型的代表(604),則從局部驗(yàn)證表使用該條目(606)。如果局部驗(yàn)證表中沒有條目,則判斷全局驗(yàn)證表中是否有條目(607)。如果全局驗(yàn)證表中有條目,則使用該條目(608)。假設(shè)在局部驗(yàn)證表或全局驗(yàn)證表中找到了某個(gè)代表,則調(diào)用該代表(610);否則過程如下述那樣進(jìn)行到614。
如果對(duì)于當(dāng)前節(jié)點(diǎn)的條目(即來自局部或全局驗(yàn)證表(不論實(shí)際上使用哪一個(gè)表)的條目)指示出該條目不是“排他的”(612),則圖6的過程在當(dāng)前節(jié)點(diǎn)的每個(gè)孩子節(jié)點(diǎn)上被遞歸調(diào)用(614)。較佳地,以從左至右的順序?qū)@些孩子節(jié)點(diǎn)調(diào)用所述過程。如果對(duì)于當(dāng)前節(jié)點(diǎn)的條目指示出該條目是排他的,則圖6的過程不對(duì)孩子節(jié)點(diǎn)調(diào)用,因?yàn)楫?dāng)前節(jié)點(diǎn)的條目對(duì)該當(dāng)前節(jié)點(diǎn)的所有自由有排他控制。
如果對(duì)當(dāng)前節(jié)點(diǎn)有后處理程序代表(616),則調(diào)用該后處理程序(618)。(該后處理程序或者直接在610處調(diào)用的代表之后應(yīng)用(在當(dāng)前節(jié)點(diǎn)條目是排他的情況下),或者在處理了子樹之后應(yīng)用(在當(dāng)前節(jié)點(diǎn)條目不是排他的情況下))。在應(yīng)用了后處理程序代表(或已判斷出沒有后處理程序代表之后),判斷當(dāng)前節(jié)點(diǎn)是否是頂層樹的根(620)。如果當(dāng)前節(jié)點(diǎn)是頂層樹的根(如圖3中的節(jié)點(diǎn)302,或圖4中的節(jié)點(diǎn)“A”),則過程終止。否則,過程返回到其調(diào)用調(diào)用程序(因?yàn)槿绻?dāng)前節(jié)點(diǎn)不是頂層根,則圖6的過程已有該過程的在先實(shí)例所遞歸調(diào)用)。
注意到已給出的上述例子僅僅用于解釋的目的,而不應(yīng)被解釋成對(duì)本發(fā)明的限制。雖然參考了各種實(shí)施例來描述了本發(fā)明,但是理解到這里所使用的詞語僅僅是說明和例示用的詞語,而不是限制性的詞語。此外,雖然這里參考特定的手段、材料和實(shí)施例來描述了本發(fā)明,但是本發(fā)明不打算限制于這里所揭示的任何特定例,相反,本發(fā)明擴(kuò)展到如本發(fā)明的范圍之內(nèi)的所有功能上相當(dāng)?shù)慕Y(jié)構(gòu)、方法和使用。能夠從本說明書中獲益的那些本領(lǐng)域的技術(shù)人員可進(jìn)行各種修改,可作出各種修改而不背離本發(fā)明的范圍和要旨。
權(quán)利要求
1.一種計(jì)算機(jī)可讀媒體,以執(zhí)行驗(yàn)證消息的方法的計(jì)算機(jī)可執(zhí)行指令進(jìn)行編碼,所述方法包括遇到消息中的第一元素;參考第一驗(yàn)證表以識(shí)別與該第一元素相對(duì)應(yīng)的第一代表;將所述第一代表應(yīng)用于所述第一元素;遇到作為所述第一元素的一棵子樹的根的第二元素;以及根據(jù)所述第一驗(yàn)證表對(duì)所述第二元素應(yīng)用第二代表。
2.如權(quán)利要求1所述的計(jì)算機(jī)可讀媒體,其特征在于,還包括在參考所述第一驗(yàn)證表之前,判斷第二驗(yàn)證表不包含與所述第一元素對(duì)應(yīng)的代表。
3.如權(quán)利要求1所述的計(jì)算機(jī)可讀媒體,其特征在于,所述應(yīng)用所述第一代表的動(dòng)作是在所述遇到所述第二元素的動(dòng)作之前進(jìn)行的,并且所述方法還包括在應(yīng)用所述第二代表之后,參考所述第一驗(yàn)證表,以識(shí)別與所述第一元素對(duì)應(yīng)的第三代表;以及對(duì)所述第一元素應(yīng)用所述第三代表。
4.如權(quán)利要求1所述的計(jì)算機(jī)可讀媒體,其特征在于,對(duì)于所述第一驗(yàn)證表中列出的每個(gè)元素,所述第一驗(yàn)證表包括一標(biāo)記,指示出是否要遍歷一給定元素的子樹,其中所述方法還包括判斷與所述第一元素對(duì)應(yīng)的標(biāo)記指示出要遍歷所述第一元素的子樹。
5.如權(quán)利要求1所述的計(jì)算機(jī)可讀媒體,其特征在于,所述方法還包括根據(jù)一準(zhǔn)則,從多個(gè)驗(yàn)證表中選擇所述第一驗(yàn)證表,所選擇的驗(yàn)證表是要被參考來識(shí)別所要應(yīng)用的代表的表。
6.如權(quán)利要求1所述的計(jì)算機(jī)可讀媒體,其特征在于,所述第一代表根據(jù)一元素既不是所述第一元素也不是所述第一元素的子樹,來作出至少一個(gè)判決。
7.如權(quán)利要求1所述的計(jì)算機(jī)可讀媒體,其特征在于,所述消息包括可擴(kuò)展標(biāo)記語言(XML)內(nèi)容。
8.如權(quán)利要求1所述的計(jì)算機(jī)可讀媒體,其特征在于,所述第一代表和所述第二代表每一個(gè)都包含可解釋的代碼。
9.如權(quán)利要求1所述的計(jì)算機(jī)可讀媒體,其特征在于,所述方法還包括基于根據(jù)包含所述第一驗(yàn)證表的一個(gè)或多個(gè)驗(yàn)證表的對(duì)所述消息應(yīng)用代表,來判斷所述消息是否有效。
10.一種驗(yàn)證消息的方法,其特征在于,包括創(chuàng)建一個(gè)或多個(gè)驗(yàn)證代表,每個(gè)驗(yàn)證代表適用于驗(yàn)證消息的一特定類型的元素;創(chuàng)建對(duì)消息的各類元素規(guī)定了至少一個(gè)驗(yàn)證代表的第一驗(yàn)證表;以及對(duì)消息應(yīng)用驗(yàn)證引擎,其中對(duì)于消息的每個(gè)元素,所述驗(yàn)證引擎參考所述第一驗(yàn)證表,以識(shí)別要應(yīng)用到該元素的驗(yàn)證代表,并將所識(shí)別的驗(yàn)證代表應(yīng)用到該元素。
11.如權(quán)利要求10所述的方法,其特征在于,還包括創(chuàng)建對(duì)消息的每類元素規(guī)定了驗(yàn)證代表的第二驗(yàn)證表,其中驗(yàn)證引擎參考第二驗(yàn)證表,如果對(duì)于一給定類型的元素,存在一條目,則應(yīng)用由該第二驗(yàn)證表規(guī)定的驗(yàn)證代表,否則應(yīng)用由第一驗(yàn)證表規(guī)定的驗(yàn)證代表。
12.如權(quán)利要求10所述的方法,其特征在于,所述第一驗(yàn)證表規(guī)定了用于所述消息的每類元素的第一和第二驗(yàn)證代表,當(dāng)遇到該元素時(shí),所述驗(yàn)證引擎對(duì)該元素應(yīng)用第一驗(yàn)證代表,并在應(yīng)用了該第一驗(yàn)證代表且應(yīng)用了適用于該元素的任何子樹的驗(yàn)證代表之后,對(duì)該元素應(yīng)用第二驗(yàn)證代表。
13.如權(quán)利要求10所述的方法,其特征在于,所述消息包括可擴(kuò)展標(biāo)記語言(XML)內(nèi)容。
14.如權(quán)利要求10所述的方法,其特征在于,所述消息以樹形組織,消息的每個(gè)元素對(duì)應(yīng)于樹中的節(jié)點(diǎn)。
15.如權(quán)利要求10所述的方法,其特征在于,所述第一驗(yàn)證表對(duì)所述消息中的每類元素規(guī)定了一標(biāo)記,指示出是否要把用于所述類型的元素的子樹的驗(yàn)證代表應(yīng)用于所述子樹。
16.如權(quán)利要求10所述的方法,其特征在于,所述驗(yàn)證代表中每一個(gè)都包括可解釋的代碼。
17.如權(quán)利要求10所述的方法,其特征在于,至少一個(gè)驗(yàn)證代表包含空代表。
18.一種計(jì)算機(jī)可讀媒體,其上存儲(chǔ)有數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)包括多個(gè)元素名,每個(gè)元素名識(shí)別消息的一部分;以及用于每個(gè)元素名的第一代表的對(duì)應(yīng)名,每個(gè)第一代表包含驗(yàn)證與該元素名對(duì)應(yīng)的消息的元素的代碼。
19.如權(quán)利要求18所述的計(jì)算機(jī)可讀媒體,其特征在于,所述數(shù)據(jù)結(jié)構(gòu)還包括用于每個(gè)元素名的第二代表的對(duì)應(yīng)名,每個(gè)第二代表包含在對(duì)應(yīng)于該元素名的第一代表以及與對(duì)應(yīng)于該元素名的元素的子樹對(duì)應(yīng)的任何代表都已運(yùn)行了之后執(zhí)行的代碼。
20.如權(quán)利要求18所述的計(jì)算機(jī)可讀媒體,其特征在于,所述數(shù)據(jù)結(jié)構(gòu)還包括用于每個(gè)元素名的一標(biāo)記,指示出是否要對(duì)與該元素名及其任何子樹對(duì)應(yīng)的元素排他地應(yīng)用與該元素名對(duì)應(yīng)的第一代表。
21.一種用于驗(yàn)證以樹形組織的消息的系統(tǒng),其特征在于,所述系統(tǒng)包括指示出多個(gè)代表的第一驗(yàn)證表,每個(gè)代表對(duì)應(yīng)于樹中的元素名;遍歷樹的驗(yàn)證引擎,對(duì)于在遍歷樹的過程中所遇到的每個(gè)元素,驗(yàn)證引擎參考所述第一驗(yàn)證表,以識(shí)別要應(yīng)用到所遇到的元素的多個(gè)代表之一,并通過調(diào)用所述代表來應(yīng)用所識(shí)別的代表。
22.如權(quán)利要求21所述的系統(tǒng),其特征在于,還包括指示出多個(gè)代表的第二驗(yàn)證表,每個(gè)代表對(duì)應(yīng)于樹中的元素名;其中,對(duì)于在遍歷樹的過程中所遇到的每個(gè)元素,所述驗(yàn)證引擎參考所述第二驗(yàn)證表,以判斷對(duì)于該遇到的元素是否存在一條目,如果存在這樣一個(gè)條目,則驗(yàn)證引擎使用第二驗(yàn)證表中用于該遇到的元素的條目,如果第二驗(yàn)證表中不包含與所遇到的元素對(duì)應(yīng)的條目,則驗(yàn)證引擎參考第一驗(yàn)證表。
23.如權(quán)利要求21所述的系統(tǒng),其特征在于,所述第一驗(yàn)證表識(shí)別用于樹中的至少一些元素的后處理代表,在調(diào)用了用于所述元素的代表以及用于所述元素的子樹的代表之后,調(diào)用所述后處理代表。
24.如權(quán)利要求21所述的系統(tǒng),其特征在于,所述消息包括可擴(kuò)展標(biāo)記語言(XML)內(nèi)容。
25.如權(quán)利要求21所述的系統(tǒng),其特征在于,每個(gè)代表包括可解釋的代碼。
全文摘要
一種用于驗(yàn)證諸如XML消息或其它分層組織的內(nèi)容之類的消息的機(jī)制。驗(yàn)證引擎較佳地以深度優(yōu)先順序走查由所述消息表示的樹。一遇到樹中的每個(gè)節(jié)點(diǎn),驗(yàn)證引擎就參考一驗(yàn)證表,以識(shí)別要被調(diào)用的代表。驗(yàn)證引擎隨后調(diào)用為該節(jié)點(diǎn)識(shí)別的代表,并對(duì)當(dāng)前節(jié)點(diǎn)的子樹遞歸調(diào)用。在處理了子樹之后,驗(yàn)證引擎再次參考驗(yàn)證表,以識(shí)別用于當(dāng)前節(jié)點(diǎn)的后處理程序,然后調(diào)用后處理程序。驗(yàn)證表中的條目可標(biāo)記為“排他的”,以防止對(duì)對(duì)應(yīng)于該條目的節(jié)點(diǎn)的子樹的遍歷。此外,可存在全局和局部驗(yàn)證表,當(dāng)節(jié)點(diǎn)在局部表中沒有條目時(shí),使用全局表。
文檔編號(hào)G06F9/45GK1584885SQ20041005896
公開日2005年2月23日 申請(qǐng)日期2004年7月23日 優(yōu)先權(quán)日2003年8月18日
發(fā)明者R·R·帕奇, M·賈納基拉曼 申請(qǐng)人:微軟公司