基于分散模式驗(yàn)證xml文檔的制作方法
【專利摘要】對(duì)于文檔中的每個(gè)結(jié)構(gòu)化元素收集規(guī)則。應(yīng)用于元素的任何具體實(shí)例的規(guī)則依賴于文檔內(nèi)的實(shí)例的分層位置。以說(shuō)明這些依賴性的方式收集并且高效地組織規(guī)則。一旦所述規(guī)則被收集后,規(guī)則可以被進(jìn)一步處理。例如,在計(jì)算之間可以存在依賴性。以說(shuō)明這些依賴性的方式調(diào)度計(jì)算的執(zhí)行。一旦規(guī)則被收集并且進(jìn)一步處理后,規(guī)則用于驗(yàn)證給定文檔。
【專利說(shuō)明】基于分散模式驗(yàn)證XML文檔
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及驗(yàn)證由諸如XML之類的標(biāo)記語(yǔ)言標(biāo)記的文檔。
【背景技術(shù)】
[0002]本節(jié)中描述的方法是可以追隨的方法,而不是已被先前構(gòu)思或者追隨的必然方法。因此,除非另有陳述,不假定本節(jié)中描述的方法中的任何一個(gè)僅僅由于它們包含在本節(jié)中而獲得現(xiàn)有技術(shù)的承認(rèn)。
[0003]用于構(gòu)成并描述數(shù)據(jù)的層次標(biāo)記語(yǔ)言的使用在計(jì)算機(jī)產(chǎn)業(yè)得到廣泛承認(rèn)。標(biāo)記語(yǔ)H的不例是XML。
[0004]利用層次標(biāo)記語(yǔ)言構(gòu)成的數(shù)據(jù)由節(jié)點(diǎn)組成。節(jié)點(diǎn)通過(guò)一對(duì)對(duì)應(yīng)的開(kāi)始和結(jié)束標(biāo)志劃界,其不僅劃界節(jié)點(diǎn),而且指定節(jié)點(diǎn)的名稱。例如,在下面的結(jié)構(gòu)化數(shù)據(jù)片段中,
[0005]<AXB>5</BXD>10</DX/A>
[0006]開(kāi)始標(biāo)志<A>和結(jié)束標(biāo)志</A>劃界具有名稱A的節(jié)點(diǎn)。
[0007]對(duì)應(yīng)的標(biāo)志之間的數(shù)據(jù)被稱為節(jié)點(diǎn)的內(nèi)容。節(jié)點(diǎn)的內(nèi)容可以或者是標(biāo)量值(例如,整數(shù)、文本串),或是一個(gè)或多個(gè)其它節(jié)點(diǎn)。僅僅包含標(biāo)量值的節(jié)點(diǎn)這里被稱為標(biāo)量節(jié)點(diǎn)。包含另一個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)這里被稱為結(jié)構(gòu)化節(jié)點(diǎn)。被包含的節(jié)點(diǎn)這里被稱為后代節(jié)點(diǎn)。
[0008]除了包含一個(gè)或多個(gè)節(jié)點(diǎn)之外,結(jié)構(gòu)化節(jié)點(diǎn)的內(nèi)容也可以包括標(biāo)量值。在節(jié)點(diǎn)中的此類內(nèi)容這里被稱為混合內(nèi)容。
[0009]結(jié)構(gòu)化節(jié)點(diǎn)因此形成具有多級(jí)節(jié)點(diǎn)的分層結(jié)構(gòu),所述結(jié)構(gòu)化節(jié)點(diǎn)在頂層。在每個(gè)級(jí)別處的節(jié)點(diǎn)鏈接到不同級(jí)別處的一個(gè)或多個(gè)節(jié)點(diǎn)。在頂層以下的級(jí)別處的每個(gè)節(jié)點(diǎn)是在子節(jié)點(diǎn)上面的級(jí)別處的父節(jié)點(diǎn)的子節(jié)點(diǎn)。具有相同的父節(jié)點(diǎn)的節(jié)點(diǎn)是同屬節(jié)點(diǎn)。父節(jié)點(diǎn)可以具有多個(gè)子節(jié)點(diǎn)。沒(méi)有鏈接到它的父節(jié)點(diǎn)的節(jié)點(diǎn)是根節(jié)點(diǎn),并且沒(méi)有鏈接到它的子節(jié)點(diǎn)的節(jié)點(diǎn)是葉節(jié)點(diǎn)。例如,在結(jié)構(gòu)化節(jié)點(diǎn)A中,節(jié)點(diǎn)A是在頂層處的根節(jié)點(diǎn)。節(jié)點(diǎn)B和D是A的后代和子節(jié)點(diǎn),并且相對(duì)于彼此,節(jié)點(diǎn)B和D是同屬節(jié)點(diǎn)。節(jié)點(diǎn)B和D也是葉節(jié)點(diǎn)。
【發(fā)明內(nèi)容】
[0010]文檔是一個(gè)或多個(gè)結(jié)構(gòu)化節(jié)點(diǎn)的任意序列。文檔可以被以各種格式存儲(chǔ)。例如,文檔可以被存儲(chǔ)為文本文件,或文檔可以被存儲(chǔ)在XML數(shù)據(jù)庫(kù)中的行的大對(duì)象(LOB)列中,或存儲(chǔ)為可訪問(wèn)為互聯(lián)網(wǎng)上的資源的網(wǎng)頁(yè)。
[0011]創(chuàng)建符合計(jì)算設(shè)備被配置為處理的結(jié)構(gòu)和約束的文檔非常重要。文檔模式是限制文檔的結(jié)構(gòu)和內(nèi)容的一組規(guī)則。符合文檔模式的文檔這里被稱為有效文檔和文檔模式的實(shí)例。
[0012]一般說(shuō)來(lái),模式是用于數(shù)據(jù)單元的結(jié)構(gòu)和約束的一組規(guī)則。這里使用術(shù)語(yǔ)模式既指代單個(gè)模式,即,用于數(shù)據(jù)單元的單個(gè)類型的規(guī)則,或指代模式的集合,每個(gè)定義不同類型的數(shù)據(jù)單元。例如,術(shù)語(yǔ)模式可以指代多個(gè)文檔模式或指代單個(gè)文檔模式。
[0013]這里的模式和規(guī)則可以利用模式聲明來(lái)表達(dá)。模式聲明是根據(jù)模式標(biāo)準(zhǔn)和/或語(yǔ)言定義模式規(guī)則的表達(dá)式。
[0014]用于XML文檔的模式標(biāo)準(zhǔn)是XML模式??刂芚ML模式的標(biāo)準(zhǔn)包括:XML模式,2001年5月2日,W3C推薦的第O部分、第I部分、第2部分,其內(nèi)容通過(guò)引用合并于此;XML模式第I部分:2004年10月28日,W3C推薦,結(jié)構(gòu),第二版,其內(nèi)容通過(guò)引用合并于此;XML模式1.1第2部分:2006年2月17日,W3C工作草案,數(shù)據(jù)類型,其內(nèi)容通過(guò)引用合并于此;以及XML模式第2部分:2004年10月28日,W3C推薦,數(shù)據(jù)類型,第二版,其內(nèi)容通過(guò)引用合并于此。在此文檔中所述的XML模式不局限于W3C XML模式,而是包括用于描述XML文檔的結(jié)構(gòu)的和/或類型信息的任何其它機(jī)制,例如,Relax NG。
[0015]XML模式提供這里稱為文檔集中模式的模式類型。在文檔集中模式中,文檔模式由明確地聲明為文檔模式的模式聲明來(lái)定義。
[0016]驗(yàn)證是指確定文檔或其部分是否符合模式的過(guò)程。已被確定符合文檔模式的文檔或其部分這里被稱為被驗(yàn)證的。一般地,已經(jīng)發(fā)展的驗(yàn)證機(jī)制擅長(zhǎng)驗(yàn)證文檔集中模式。但是,不是所有形式的模式是文檔集中的,諸如在XAP專利申請(qǐng)中描述的分散形式。這里描述的是可以用來(lái)簡(jiǎn)化驗(yàn)證分散的文檔模式的過(guò)程的技術(shù)。
[0017]基于上述,存在對(duì)用于根據(jù)分散文檔模式高效地驗(yàn)證文檔的技術(shù)和機(jī)制的需要。
【專利附圖】
【附圖說(shuō)明】
[0018]在附圖中:
[0019]圖1A和IB是描述根據(jù)本發(fā)明的實(shí)施例的具有類型和狀態(tài)的元素的圖。
[0020]圖2是描述根據(jù)本發(fā)明實(shí)施例的包含作為元素的實(shí)例的節(jié)點(diǎn)的文檔的圖。
[0021]圖3是描述根據(jù)實(shí)施例的用于收集規(guī)則以驗(yàn)證文檔的文檔規(guī)則收集數(shù)據(jù)結(jié)構(gòu)的圖。
[0022]圖4是描述根據(jù)實(shí)施例的用于對(duì)文檔的文檔規(guī)則收集的技術(shù)的圖。
[0023]圖5是概述用于根據(jù)實(shí)施例的調(diào)度規(guī)則的技術(shù)的圖。
[0024]圖6是描述根據(jù)實(shí)施例的依賴關(guān)系圖的圖。
[0025]圖7是用于描述根據(jù)實(shí)施例的將計(jì)算分成階段的算法的偽代碼。
[0026]圖8是描述可以被用在實(shí)施例中的計(jì)算機(jī)系統(tǒng)的圖。
【具體實(shí)施方式】
[0027]在下面說(shuō)明中,為了說(shuō)明,闡述許多細(xì)節(jié)以便提供對(duì)本發(fā)明的更徹底的理解。但是,本領(lǐng)域技術(shù)人員將清晰,在沒(méi)有這些細(xì)節(jié)的情況下也可以實(shí)踐本發(fā)明。在其它實(shí)例中,公知的結(jié)構(gòu)和設(shè)備以方框圖形式示出以便避免不必要地模糊本發(fā)明。
[0028]概述
[0029]驗(yàn)證文檔需要確定什么規(guī)則是驗(yàn)證文檔所需的。驗(yàn)證文檔所需規(guī)則的集合這里被稱為文檔規(guī)則集合。確定文檔規(guī)則集合的操作這里被稱為文檔規(guī)則收集。這里描述的是用于分散模式的文檔規(guī)則收集技術(shù)。
[0030]在分散模式的特定模型的上下文內(nèi)描述用于文檔規(guī)則收集的技術(shù)。為了描述所述技術(shù),重要的是要首先描述所述模型。但是,應(yīng)當(dāng)理解,這里描述的技術(shù)不局限于這里描述的分散模式的特定方式。[0031]元素和分散模式
[0032]標(biāo)記語(yǔ)言的優(yōu)點(diǎn)是用于結(jié)構(gòu)化文檔的標(biāo)志可以被給出向人描寫(xiě)標(biāo)志的內(nèi)容的名稱。“元素”將標(biāo)志的描述能力擴(kuò)展到計(jì)算設(shè)備。如使用的術(shù)語(yǔ),“元素”將名稱與對(duì)具有該名稱的節(jié)點(diǎn)內(nèi)容聲明的一組規(guī)則關(guān)聯(lián)。具有元素名稱的文檔中的節(jié)點(diǎn)被稱為元素的實(shí)例。
[0033]“元素”的此定義不應(yīng)該與傳統(tǒng)上由XML界認(rèn)為是“元素”的定義混淆,其是元素是文檔中的節(jié)點(diǎn)。
[0034]在文檔域之內(nèi),期望的性質(zhì)是在相同名稱的標(biāo)志之間的語(yǔ)義一致性。為了在文檔域之內(nèi)語(yǔ)義一致,甚至當(dāng)相同的節(jié)點(diǎn)名稱出現(xiàn)在具有不同模式的文檔時(shí),具有相同名稱的節(jié)點(diǎn)也共享一個(gè)或多個(gè)中心性質(zhì)。語(yǔ)義一致性可以經(jīng)由分散模式的能力實(shí)現(xiàn)。
[0035]在分散模式中,元素的語(yǔ)料庫(kù)對(duì)文檔集合中文檔和節(jié)點(diǎn)聲明模式。有效的文檔必須是語(yǔ)料庫(kù)中的元素的有效的元素實(shí)例;元素不需要聲明元素定義文檔模式,如在文檔集中模式情況下。文檔內(nèi)的有效節(jié)點(diǎn)必須至少是具有節(jié)點(diǎn)的名稱的元素的有效實(shí)例。
[0036]雖然重要的是元素實(shí)例跨一組文檔具有一致性質(zhì),但是元素實(shí)例可以需要對(duì)于其中元素實(shí)例出現(xiàn)的各種上下文被進(jìn)一步改進(jìn)。例如,元素SHIPPING可以被定義為標(biāo)量美元值。它對(duì)設(shè)計(jì)表示訂單的訂單元素可以有用處,其中具有可以將SHIPPING的實(shí)例進(jìn)一步約束到零的免費(fèi)送貨。通過(guò)允許結(jié)構(gòu)化元素指定對(duì)結(jié)構(gòu)化元素的任何實(shí)例應(yīng)用于包含在其中的后代元素實(shí)例的規(guī)則,分散模式允許此類進(jìn)一步改進(jìn),如下面將進(jìn)一步描述的。
[0037]元素類型
[0038]存在兩個(gè)主要種類的元素。標(biāo)量元素定義標(biāo)量節(jié)點(diǎn)的內(nèi)容。
[0039]結(jié)構(gòu)化元素列出其它元素,其被稱為由結(jié)構(gòu)化元素包含的或列出的子元素。結(jié)構(gòu)化元素被稱為相對(duì)于子元素的父元素。結(jié)構(gòu)化元素定義默認(rèn)應(yīng)用到子元素的規(guī)則,或更具體地在結(jié)構(gòu)化元素的實(shí)例內(nèi)的子元素的實(shí)例。
[0040]圖1A-1B描述根據(jù)實(shí)施例的說(shuō)明性元素。參考圖1A,它描述元素ORDER,其表示指令。元素 ORDER 列出如子元素 LINE ITEM、TOT、AMT、DISC、BILLING、和 SENDING。
[0041]LINE ITEM是表示指令中的行項(xiàng)目的結(jié)構(gòu)化元素。元素LINE ITEM列出Τ0Τ、ΑΜΤ、和DISC作為子元素。這些是列為ORDER的子代的相同元素。此外,LINE ITEM列出標(biāo)量元素QTY和PRICE作為子元素。
[0042]類型和狀態(tài)
[0043]根據(jù)實(shí)施例,結(jié)構(gòu)化元素是多類型的。即,結(jié)構(gòu)化元素的聲明可以指定多個(gè)類型。根據(jù)實(shí)施例,結(jié)構(gòu)化元素具有默認(rèn)類型,指定操縱結(jié)構(gòu)化元素的聲明的類型的任何一個(gè)的所有元素實(shí)例的基本元素模式。用于結(jié)構(gòu)化元素的類型除了默認(rèn)類型之外這里被稱為非默認(rèn)類型。
[0044]類型可以是可變的??勺兊念愋途哂幸粋€(gè)或多個(gè)“類型狀態(tài)”或“狀態(tài)”。根據(jù)實(shí)施例,每個(gè)狀態(tài)可以定義零個(gè)或更多個(gè)規(guī)則。每個(gè)類型具有默認(rèn)狀態(tài)。用于類型的狀態(tài)除了默認(rèn)狀態(tài)之外這里被稱為非默認(rèn)狀態(tài)。
[0045]參考圖1,元素ORDER具有兩個(gè)類型,默認(rèn)類型和類型US。默認(rèn)類型具有兩個(gè)狀態(tài),默認(rèn)狀態(tài)和ACCEPTED狀態(tài)。默認(rèn)狀態(tài)定義下列計(jì)算:T0T=AMT-DISC, AMT=SUM (“LINEITEM/AMT”),DISC=SUM (“LINE ITEM/DISC”)。
[0046]狀態(tài)簡(jiǎn)化對(duì)在階段之間演進(jìn)或轉(zhuǎn)變的對(duì)象進(jìn)行建模的類型的發(fā)展。狀態(tài)可以用來(lái)表示在具體階段處的對(duì)象。作為狀態(tài)的使用的例子,ORDER的默認(rèn)類型的狀態(tài)ACCEPTED表示已被接受的訂單。
[0047]對(duì)于類型US存在一個(gè)默認(rèn)狀態(tài)。默認(rèn)狀態(tài)聲明如下規(guī)則,即經(jīng)由“范圍縮小”將后代節(jié)點(diǎn)元素POSTAL CODE實(shí)例限制到U.S郵政編碼。將在稍后更詳細(xì)描述范圍縮小。
[0048]LINE ITEM的默認(rèn)類型和默認(rèn)狀態(tài)指定計(jì)算AMT=PRICE*QTY。LINE ITEM也定義類型DIGITAL,表示可以被數(shù)字地傳送的項(xiàng)目。類型DIGITAL的默認(rèn)狀態(tài)列出元素EMAIL,表示用于數(shù)字項(xiàng)目的傳送的電子郵件地址。
[0049]參考圖1B,BILLING和SENDING是結(jié)構(gòu)化元素。BILLING表示訂單被計(jì)費(fèi)到的實(shí)體。SENDING表示將訂單運(yùn)送到的目的地。
[0050]BILLING和SENDING都包含兩個(gè)其它元素,標(biāo)量元素NAME和結(jié)構(gòu)化元素ADDR。BILLING和SENDING也具有帶有規(guī)則(未示出)的默認(rèn)狀態(tài)和狀態(tài)COMPLETE。用于BILLING和SENDING的COMPLETE狀態(tài)要求子元素實(shí)例NAME是非零值并且子元素實(shí)例ADDR處于狀態(tài) COMPLETE。
[0051]元素ADDR是包含三個(gè)子標(biāo)量元素STREET、CITY和POSTAL CODE的結(jié)構(gòu)化元素。元素ADDR具有帶有規(guī)則(未示出)的默認(rèn)狀態(tài)和狀態(tài)COMPLETE。COMPLETE狀態(tài)包括需要子元素實(shí)例STREET、CITY、和POSTAL CODE是非零的規(guī)則。
[0052]這里的元素和規(guī)則可以利用模式聲明來(lái)表達(dá)。例如,計(jì)算可以利用XQuery語(yǔ)言聲明。XAP專利申請(qǐng)?zhí)峁┰芈暶鞯氖纠?yīng)當(dāng)理解實(shí)施例不局限于任何具體語(yǔ)言、格式、或語(yǔ)法以用于指定路徑、約束或計(jì)算。
[0053]說(shuō)明性的文檔
[0054]文檔可以是元素語(yǔ)料庫(kù)中的結(jié)構(gòu)化元素的任何實(shí)例。圖2描述是類型US的元素ORDER的實(shí)例的文檔ORDER。節(jié)點(diǎn)由它們的節(jié)點(diǎn)名稱來(lái)指代。當(dāng)然如果節(jié)點(diǎn)是元素的實(shí)例,則節(jié)點(diǎn)名稱是元素的名稱。如果節(jié)點(diǎn)是元素的除了默認(rèn)類型以外的類型的實(shí)例,則在括號(hào)中指定此類型。
[0055]參考圖2,0RDER[US]是文檔ORDER的根節(jié)點(diǎn)。在0RDER[US]的子節(jié)點(diǎn)之間是標(biāo)量元素實(shí)例TOT、AMT、和DISC。
[0056]此外,ORDER [US]包含元素LINE ITEM的默認(rèn)類型的實(shí)例。這些子節(jié)點(diǎn)的每一個(gè)包括由LINE ITEM的默認(rèn)狀態(tài)列出的標(biāo)量元素的子實(shí)例,其是TOT、AMT、DISC、PRICE和QTY。
[0057]在ORDER [US]中的另一個(gè)節(jié)點(diǎn) LINE ITEM [DIGITAL]是元素 LINE ITEM 的 DIGITAL類型的實(shí)例。節(jié)點(diǎn)LINE ITEM[DIGITAL]包括由默認(rèn)類型包含的子元素的實(shí)例,其是TOT、AMT、DISC、QTY和PRICE。此外,節(jié)點(diǎn)LINE ITEM [DIGITAL]包括元素EMAIL的實(shí)例,其特定于類型DIGITAL。
[0058]ORDER [US]也包含節(jié)點(diǎn)BILLING、元素BILLING的實(shí)例、和節(jié)點(diǎn)SENDING。節(jié)點(diǎn)BILLING和SENDING都是包含節(jié)點(diǎn)ADDR和NAME的結(jié)構(gòu)化節(jié)點(diǎn)。節(jié)點(diǎn)ADDR是包含子元素實(shí)例STREET、CITY和POSTAL CODE的結(jié)構(gòu)化節(jié)點(diǎn)。
[0059]路徑和類型合格的路徑
[0060]對(duì)于給定節(jié)點(diǎn),路徑是包括以下的元素名稱的序列:(I)在給定節(jié)點(diǎn)和上下文節(jié)點(diǎn)之間的零個(gè)或更多祖先結(jié)點(diǎn)名稱的每一個(gè),以及(2)這里稱為終端元素的給定節(jié)點(diǎn)的元素名稱。利用路徑表達(dá)式表達(dá)路徑。根據(jù)實(shí)施例,路徑表達(dá)式是由定界符“/”分隔的有序的路徑元素名稱的序列。例如,在文檔ORDER中,假定節(jié)點(diǎn)BILLING是上下文節(jié)點(diǎn),路徑表達(dá)式ADDR/CITY表示是BILLING的后代節(jié)點(diǎn)的節(jié)點(diǎn)CITY的路徑。
[0061 ] 絕對(duì)路徑是其中上下文節(jié)點(diǎn)是根節(jié)點(diǎn)的路徑。根節(jié)點(diǎn)是在沒(méi)有父代的節(jié)點(diǎn)樹(shù)中的一個(gè)節(jié)點(diǎn)。在文檔ORDER中,ORDER [US]是根節(jié)點(diǎn)。在路徑表達(dá)式中,在具有初始“/”的根節(jié)點(diǎn)的元素名稱之前,通過(guò)將根節(jié)點(diǎn)表示為上下文來(lái)表達(dá)絕對(duì)路徑。例如,/ORDER/BILLING/ADDR/CITY是對(duì)于節(jié)點(diǎn)CITY的絕對(duì)路徑。
[0062]類型合格的路徑是其中路徑中的每個(gè)元素由至少一個(gè)類型合格的路徑。根據(jù)實(shí)施例,在用于類型合格的路徑的類型合格的路徑表達(dá)式中,利用包含在括號(hào)中的類型標(biāo)識(shí)符明確地標(biāo)識(shí)節(jié)點(diǎn)的類型。用于節(jié)點(diǎn)名稱的此類括號(hào)的缺少指定節(jié)點(diǎn)的元素的默認(rèn)類型。
[0063]例如,類型合格的路徑表達(dá)式/ORDER[US] /SENDING/ADDR/CITY標(biāo)識(shí)節(jié)點(diǎn)CITY。在ORDER [US]中的非節(jié)點(diǎn)是由類型合格的路徑表達(dá)式/0RDER/BILLING/ADDR/CITY標(biāo)識(shí)(注意ORDER沒(méi)有被標(biāo)識(shí)的括號(hào)的類型)
[0064]路徑(和其路徑表達(dá)式)可以標(biāo)識(shí)文檔中的節(jié)點(diǎn)。由路徑標(biāo)識(shí)的節(jié)點(diǎn)是具有那個(gè)路徑的節(jié)點(diǎn)。因?yàn)槎鄠€(gè)節(jié)點(diǎn)可以具有相同的路徑,路徑可以標(biāo)識(shí)多于一個(gè)節(jié)點(diǎn)。例如,類型合格的路徑表達(dá)式/ORDER[US]/LINE ITEM標(biāo)識(shí)ORDER中的兩個(gè)節(jié)點(diǎn),而/ORDER[US]/LINEITEM [DIGITAL]標(biāo)識(shí)一個(gè)節(jié)點(diǎn)。
[0065]按類型不合格的路徑這里可以簡(jiǎn)單地被稱為是不合格的。如果節(jié)點(diǎn)的名稱和零個(gè)或更多祖先結(jié)點(diǎn)匹配路徑中的相應(yīng)名稱,則不考慮哪個(gè)節(jié)點(diǎn)或任何祖先是實(shí)例的類型,節(jié)點(diǎn)由不合格的路徑標(biāo)識(shí)。因此,不合格的路徑/ORDER/LINE ITEM標(biāo)識(shí)LINE ITEM命名的節(jié)點(diǎn)和在文檔ORDER中的節(jié)點(diǎn)LINE ITEM [DIGITAL]。
[0066]由路徑標(biāo)識(shí)的節(jié)點(diǎn)的任何子或后代節(jié)點(diǎn)被稱為路徑的子代或后代。因此,節(jié)點(diǎn)EMAIL是合格的路徑/ORDER/LINE ITEM [DIGITAL]和不合格的路徑/ORDER/LINE ITEM的子代。
[0067]根據(jù)實(shí)施例,路徑表達(dá)式中的類型標(biāo)識(shí)符可以利用模式匹配標(biāo)記來(lái)標(biāo)識(shí)多個(gè)類型。例如,/ORDER[US] /LINEITEM[*] /ADDR/CITY 標(biāo)識(shí)作為 LINEITEM[DIGITAL]和兩個(gè)LINEITEM節(jié)點(diǎn)的后代的城市節(jié)點(diǎn)。
[0068]路徑表達(dá)式可以以任何語(yǔ)言、格式、或標(biāo)準(zhǔn)。例如,路徑可以利用XPath表達(dá)。應(yīng)當(dāng)理解實(shí)施例不局限于任何具體語(yǔ)言、格式、或語(yǔ)法以用于表達(dá)或指定路徑。
[0069]規(guī)則的表達(dá)式
[0070]結(jié)構(gòu)化元素的規(guī)則可以指定元素的實(shí)例內(nèi)的一個(gè)或多個(gè)節(jié)點(diǎn),S卩服從為了驗(yàn)證的規(guī)則。所述一個(gè)或多個(gè)節(jié)點(diǎn)這里被稱為規(guī)則的主體并服從規(guī)則,而規(guī)則被稱為可應(yīng)用于或應(yīng)用于所述一個(gè)或多個(gè)節(jié)點(diǎn)。對(duì)于ORDER [US],對(duì)于BILLING的COMPLETE狀態(tài)的約束NAMEIS NON-NULL,主題是節(jié)點(diǎn) NAME。
[0071]計(jì)算定義評(píng)估用于這里稱為目標(biāo)的主體的值的表達(dá)式。目標(biāo)是標(biāo)量元素節(jié)點(diǎn)。表達(dá)式可以包含利用相對(duì)路徑表達(dá)式標(biāo)識(shí)的操作數(shù)。對(duì)于定義計(jì)算的元素的實(shí)例,上下文是元素實(shí)例的路徑。在其中目標(biāo)和操作數(shù)是指子元素的情況中,相對(duì)路徑表達(dá)式簡(jiǎn)單地是子元素的名稱。
[0072]例如,LINE ITEM定義下列計(jì)算:
[0073]AMT=PRICE*QTY[0074]定義用于LINE ITEM的此計(jì)算,使得對(duì)于在ORDER [US]中的每個(gè)LINE ITEM節(jié)點(diǎn),AMT子節(jié)點(diǎn)等于計(jì)算PRICE*QTY的結(jié)果。
[0075]因?yàn)橄鄬?duì)路徑表達(dá)式用于指代操作數(shù),所以計(jì)算在元素實(shí)例之內(nèi)操作時(shí)可以標(biāo)識(shí)多個(gè)節(jié)點(diǎn)。例如,元素ORDER可以定義下列計(jì)算:
[0076]AMT=SUM (“LINE ITEM/AMT”)
[0077]在0RDER[US]中,這使得ORDER [US]的子節(jié)點(diǎn)AMT等于多個(gè)節(jié)點(diǎn)AMT、LINE ITEM節(jié)點(diǎn)的每一個(gè)的子代的總和。因此,相對(duì)路徑LINE ITEM/AMT標(biāo)識(shí)并解決三個(gè)LINE ITEM節(jié)點(diǎn)(其包括節(jié)點(diǎn) LINE ITEM [DIGITAL]/AMT) ο
[0078]節(jié)點(diǎn)可以服從在節(jié)點(diǎn)的父元素實(shí)例之內(nèi)操作的規(guī)則。例如,LINE ITEM定義下列計(jì)算:AMT=PRICE*QTY。規(guī)則在LINE ITEM的實(shí)例之內(nèi)操作。對(duì)于LINE ITEM的每個(gè)實(shí)例,子節(jié)點(diǎn)AMT服從計(jì)算作為計(jì)算的目標(biāo)。
[0079]元素的默認(rèn)類型的默認(rèn)狀態(tài)的規(guī)則在元素的任何實(shí)例之內(nèi)操作。類型的默認(rèn)狀態(tài)的規(guī)則在類型的所有實(shí)例之內(nèi)操作。當(dāng)驗(yàn)證針對(duì)具體不需要非默認(rèn)狀態(tài)時(shí),類型的非默認(rèn)狀態(tài)的規(guī)則在不同類型或相同類型的任何實(shí)例之內(nèi)不操作。
[0080]范圍縮小
[0081]如先前提到的,改進(jìn)規(guī)則的集合以應(yīng)用于由元素定義本身操作所需的那些以外的元素的實(shí)例是有用的。范圍縮小允許結(jié)構(gòu)化元素指定要被在結(jié)構(gòu)化元素的后代結(jié)構(gòu)化元素實(shí)例之內(nèi)操作的規(guī)則。范圍縮小的規(guī)則應(yīng)用于后代結(jié)構(gòu)化元素實(shí)例的子元素實(shí)例。
[0082]例如,用于ORDER的類型US的默認(rèn)狀態(tài)聲明范圍縮小的規(guī)則POSTALCODE=US:DOffNSCOPE= “SENDING/ADDR”,指定根據(jù)范圍縮小路徑表達(dá)式SENDING/ADDR縮小規(guī)則 POSTAL CODE=US 的范圍。在 0RDER[US]中,規(guī)則在子節(jié)點(diǎn) ORDER [US]/SENDING/ADDR,ORDER [US]的非即時(shí)后代之內(nèi)操作,并且應(yīng)用于節(jié)點(diǎn)ORDER [US]/SENDING/ADDR/P0STALCODE。
[0083]范圍縮小的規(guī)則包括規(guī)則和范圍縮小子句,其指定范圍縮小路徑,不合格的或合格的相對(duì)路徑。根據(jù)實(shí)施例,范圍縮小路徑可以僅僅是不合格的。在此示例中,范圍縮小的規(guī)則是POST CODE=US并且范圍縮小子句是D0WNSC0PE= “SENDING/ADDR”,并且范圍縮小路徑是SENDING/ADDR。對(duì)于定義范圍縮小的規(guī)則的元素的元素實(shí)例,范圍縮小的規(guī)則使得規(guī)則在由元素實(shí)例的上下文之內(nèi)的相對(duì)路徑標(biāo)識(shí)的后代元素之內(nèi)操作。在文檔ORDER [US]情況下,范圍縮小的規(guī)則 POSTAL CODE=US:DOffNSCOPE= “SENDING/ADDR” 使得規(guī)則 POSTALCODE=US在元素實(shí)例0RDER[US]的上下文之內(nèi),在后代元素實(shí)例SENDING/ADDR,即由范圍縮小路徑表達(dá)式SENDING/ADDR標(biāo)識(shí)的節(jié)點(diǎn)之內(nèi)操作。
[0084]類似約束,計(jì)算可以被縮小范圍。例如,元素ORDER的默認(rèn)類型聲明范圍縮小的規(guī)則 T0T=AMT_DISC:D0WNSC0PING=“LINE ITEM”。因此,計(jì)算 T0T=AMT_DISC 應(yīng)用于兩個(gè) LINEITEM節(jié)點(diǎn)的每一個(gè)和LINE TIME [DIGITAL]節(jié)點(diǎn)。
[0085]當(dāng)類型或狀態(tài)的規(guī)則是可操作的或適用的時(shí)
[0086]存在規(guī)則在結(jié)構(gòu)化元素實(shí)例之內(nèi)變得可操作的各種方式。規(guī)則可以被默認(rèn)類型的結(jié)構(gòu)化元素的默認(rèn)狀態(tài)定義。元素實(shí)例可以包含指定實(shí)例的類型的屬性(例如XML屬性),使得至少類型的默認(rèn)狀態(tài)的規(guī)則在元素實(shí)例之內(nèi)可操作。
[0087]規(guī)則可以在元素實(shí)例進(jìn)入定義規(guī)則的非默認(rèn)狀態(tài)時(shí)變得可操作。例如,當(dāng)節(jié)點(diǎn)ORDER [US] /BILLING處于COMPLETE狀態(tài)時(shí),規(guī)則NAME IS NON-NULL是可操作的,所述規(guī)則由BILLING的COMPLETE狀態(tài)聲明。
[0088]狀態(tài)可以被以若干方式指定。首先,用于子元素實(shí)例的父節(jié)點(diǎn)的操作約束可以將子元素實(shí)例限制到具體狀態(tài)。例如,在ACCEPTED狀態(tài)中,規(guī)則SENDING IN STATE OFCOMPLETE是在節(jié)點(diǎn)0RDER[US]之內(nèi)操作的。此約束將節(jié)點(diǎn)SENDING限制到元素SENDING的狀態(tài) COMPLETE。
[0089]文檔的根節(jié)點(diǎn)的狀態(tài)可以由用于文檔的驗(yàn)證的輸入狀態(tài)參數(shù)指定。例如,ACCEPTED狀態(tài)可以被指定用于ORDER [US]作為當(dāng)調(diào)用文檔的驗(yàn)證時(shí)的輸入狀態(tài)參數(shù)。用于ORDER的ACCEPTED狀態(tài)的規(guī)則是可操作的,以及用于默認(rèn)類型的默認(rèn)狀態(tài)和類型US的默認(rèn)狀態(tài)的規(guī)則是可操作的。
[0090]在這種情況下,在ACCEPTED狀態(tài)中經(jīng)過(guò)作為輸入?yún)?shù)在什么規(guī)則貫穿0RDER[US]中的節(jié)點(diǎn)的分層變得可操作上具有梯級(jí)效應(yīng)。0RDER[US]的ACCEPTED狀態(tài)將節(jié)點(diǎn)SENDING和BILLING限制到COMPLETE狀態(tài),使得狀態(tài)的規(guī)則可操作,其使得在SENDING和BILLING中的相應(yīng)ADDR子節(jié)點(diǎn)在COMPLETE狀態(tài)中并且使得那個(gè)狀態(tài)的規(guī)則可操作。
[0091]用于分散模式的文檔規(guī)則收集
[0092]在分散模式下,文檔規(guī)則收集基于文檔中元素實(shí)例的“分層上下文”。用于元素實(shí)例的分層上下文是特定絕對(duì)路徑,在該特定絕對(duì)路徑下,元素實(shí)例落入文檔。因此,作為由相同的路徑標(biāo)識(shí)的節(jié)點(diǎn)的元素實(shí)例共享相同的分層上下文。
[0093]元素實(shí)例的分層上下文具有最高的重要性,因?yàn)榉謱拥纳舷挛闹甘灸男┮?guī)則在元素實(shí)例之內(nèi)可操作。具體地,哪些規(guī)則是可操作的取決于向?qū)嵗穆窂街械拿總€(gè)前代節(jié)點(diǎn)的元素、類型、和通狀態(tài)。相同元素的實(shí)例可以具有在不同文檔之間并且甚至在相同文檔內(nèi)變化的分層上下文。對(duì)于作為相同元素的實(shí)例但是在文檔之內(nèi)或文檔之間具有不同分層上下文的兩個(gè)節(jié)點(diǎn),不同的規(guī)則集合可以在其中可操作。
[0094]在分散模式中,文檔集合中的任何文檔可以是結(jié)構(gòu)化元素的實(shí)例,結(jié)構(gòu)化元素本身可以由許多結(jié)構(gòu)化元素的許多實(shí)例組成。任何一個(gè)特定文檔的驗(yàn)證需要包括對(duì)于文檔中結(jié)構(gòu)化元素的每個(gè)實(shí)例可操作的規(guī)則集合的文檔規(guī)則集合。
[0095]因?yàn)閷?duì)于任何特定元素實(shí)例可操作的規(guī)則取決于實(shí)例的分層上下文,所以在分層上下文可以被解析時(shí),即當(dāng)實(shí)例的路徑時(shí)可以在包含實(shí)例的文檔中解析時(shí),對(duì)于元素實(shí)例可操作的規(guī)則集合形成。因此對(duì)任何元素實(shí)例所需的規(guī)則集合的確定不僅需要參考在元素語(yǔ)料庫(kù)中的元素的聲明而且參考在文檔分層結(jié)構(gòu)之內(nèi)的實(shí)例的位置的確定。
[0096]根據(jù)本發(fā)明的實(shí)施例,當(dāng)文檔中任何一個(gè)元素實(shí)例的分層上下文是可解析的時(shí),對(duì)個(gè)別文檔基礎(chǔ)執(zhí)行文檔規(guī)則集合收集。通過(guò)以深度優(yōu)先次序遍歷并訪問(wèn)文檔的節(jié)點(diǎn)收集規(guī)則。在深度優(yōu)先次序的遍歷中,遍歷文檔起始于根節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)被訪問(wèn),并且在遍歷到同屬之前遍歷并訪問(wèn)它的子代。訪問(wèn)節(jié)點(diǎn)意味著相對(duì)于節(jié)點(diǎn)執(zhí)行操作。此類操作包括檢查、收集、和記錄來(lái)自于元素語(yǔ)料庫(kù)中節(jié)點(diǎn)的元素的規(guī)則。
[0097]重要的是注意深度優(yōu)先遍歷意味著到結(jié)構(gòu)化元素的任何實(shí)例被訪問(wèn)時(shí),所有祖先結(jié)點(diǎn)已被訪問(wèn)。因此,按祖先的元素范圍縮小到實(shí)例的任何規(guī)則和實(shí)例服從的任何狀態(tài)約束到實(shí)例在遍歷期間被訪問(wèn)時(shí)已被遇到并且記錄。
[0098]給定元素和具有其實(shí)例的文檔,具有相同分層上下文的元素的實(shí)例可以共享相同的規(guī)則集合,而具有不同分層上下文的實(shí)例可以不共享。在深度優(yōu)先遍歷期間,規(guī)則被收集以實(shí)際上用于每個(gè)遇到的分層上下文或結(jié)構(gòu)化元素的路徑并且存儲(chǔ)在與分層上下文相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)中。一旦文檔被遍歷并且規(guī)則被收集后,文檔規(guī)則收集數(shù)據(jù)結(jié)構(gòu)具有元內(nèi)容和對(duì)文檔定制的組織。在文檔規(guī)則收集數(shù)據(jù)結(jié)構(gòu)中收集的規(guī)則可以被進(jìn)一步處理并且然后用于高效地驗(yàn)證文檔。
[0099]文檔規(guī)則收集結(jié)構(gòu)
[0100]根據(jù)本發(fā)明的實(shí)施例,通過(guò)收集用于與文檔中結(jié)構(gòu)化節(jié)點(diǎn)的類型合格的路徑對(duì)應(yīng)的每個(gè)分層上下文的規(guī)則執(zhí)行文檔規(guī)則收集。通過(guò)以深度優(yōu)先次序遍歷并訪問(wèn)文檔的節(jié)點(diǎn)來(lái)收集規(guī)則,如將在稍后進(jìn)一步描述的。
[0101]圖3描述文檔規(guī)則收集數(shù)據(jù)結(jié)構(gòu)301。參考圖3,類型合格的路徑305是包含這里稱為類型合格的路徑條目的多個(gè)條目的列表。每個(gè)此類類型合格的路徑條目包含用于共享文檔中相同類型合格的路徑的文檔中節(jié)點(diǎn)集合的規(guī)則。因此,條目的類型合格的路徑表達(dá)式標(biāo)識(shí)文檔中的節(jié)點(diǎn),其中條目中的規(guī)則可以是可操作的。
[0102]在類型合格的路徑305中的類型合格的路徑條目被按它關(guān)聯(lián)的類型合格的路徑參考。類型合格的路徑條目/0RDER[US]包含用于節(jié)點(diǎn)ORDER [US]的規(guī)則,類型合格的路徑條目/ORDER[US]/LINE ITEM包含用于兩個(gè)LINE ITEM節(jié)點(diǎn)的規(guī)則,類型合格的路徑條目 /ORDER [US]/LINE ITEM [DIGITAL]包含用于 LINE ITEM [DIGITAL]的規(guī)則,類型合格的路徑/ORDER US]/BILLING包含用于BILLING的如此標(biāo)識(shí)的實(shí)例的規(guī)則,類型合格的路徑/ORDER [US]/SENDING 包含用于如此標(biāo)識(shí)的實(shí)例 SENDING 的規(guī)則,/0RDER[US]/BILLING/ADDR包含用于在0RDER[US]中的ADDR的如此標(biāo)識(shí)的實(shí)例的規(guī)則,以及/ORDER[US]/SENDING/ADDR包含用于如此標(biāo)識(shí)的實(shí)例ADDR的規(guī)則。
[0103]每個(gè)類型合格的路徑條目包含多個(gè)列表,每個(gè)列表包含特定種類的規(guī)則。狀態(tài)/約束325包含約束。列表按狀態(tài)細(xì)分,并且因此包含一個(gè)或多個(gè)狀態(tài)條目。每個(gè)狀態(tài)條目包含零個(gè)或更多約束的子列表。狀態(tài)/約束325包含用于默認(rèn)狀態(tài)以及零個(gè)或更多其它狀態(tài)的條目。
[0104]范圍縮小的約束320包含條目,每個(gè)包含范圍縮小到相應(yīng)類型合格的路徑的所有節(jié)點(diǎn)的約束。
[0105]目標(biāo)310是條目的列表,每個(gè)列表包含作為類型合格的路徑的子代的計(jì)算的目標(biāo)。對(duì)于目標(biāo)310中的每個(gè)目標(biāo),存在計(jì)算列表315,因?yàn)槟繕?biāo)可以是多個(gè)計(jì)算的主體。經(jīng)受多個(gè)計(jì)算的目標(biāo)可以創(chuàng)建關(guān)于哪一個(gè)計(jì)算應(yīng)用于目標(biāo)的沖突。此類沖突可以利用各種沖突解析技術(shù)處理。
[0106]為了表達(dá)的方便起見(jiàn),在目標(biāo)310中的目標(biāo)和計(jì)算315中的計(jì)算被稱為包括或包含在包含目標(biāo)310和計(jì)算315的類型合格的路徑條目中。類似地,在類型合格的路徑條目中的任何目標(biāo)、或規(guī)則,例如計(jì)算或約束,被稱為被包含或?qū)儆陬愋秃细竦穆窂健?br>
[0107]文檔規(guī)則收集
[0108]圖4示出在每個(gè)結(jié)構(gòu)化節(jié)點(diǎn)在文檔的深度優(yōu)先遍歷期間被訪問(wèn)時(shí)執(zhí)行的操作。對(duì)于標(biāo)量節(jié)點(diǎn)繞過(guò)操作。利用文檔ORDER和在圖3中描述的文檔規(guī)則收集數(shù)據(jù)結(jié)構(gòu)示出操作。在例示中,文檔規(guī)則收集數(shù)據(jù)結(jié)構(gòu)還未如描述的被填充。被訪問(wèn)的具體節(jié)點(diǎn)被稱為當(dāng)前節(jié)點(diǎn)。為了例示,輸入驗(yàn)證狀態(tài)是ACCEPTED。[0109]參考圖4,遍歷的第一節(jié)點(diǎn)是結(jié)構(gòu)化節(jié)點(diǎn)0RDER[US]。確定沒(méi)有用于類型合格的路徑/0RDER[US]的類型合格的路徑條目(405)。給定用于默認(rèn)狀態(tài)和默認(rèn)類型的規(guī)則是對(duì)于元素的所有實(shí)例是可操作的,用于元素ORDER的默認(rèn)狀態(tài)和默認(rèn)類型的聲明的規(guī)則被從元素的語(yǔ)料庫(kù)中檢索(410)。因?yàn)楫?dāng)前節(jié)點(diǎn)ORDER [US]的類型是US,因此用于元素ORDER的類型US的默認(rèn)狀態(tài)的規(guī)則也被檢索(410)。因?yàn)楣?jié)點(diǎn)ORDER被需要對(duì)默認(rèn)類型的ACCEPTED狀態(tài)驗(yàn)證,所以用于ACCEPTED狀態(tài)的規(guī)則也被檢索。作為約束的檢索的規(guī)則然后被存儲(chǔ)在狀態(tài)/約束325中(415)。
[0110]對(duì)于作為計(jì)算的檢索的每個(gè)規(guī)則,計(jì)算的目標(biāo)被作為目標(biāo)列表?xiàng)l目增加到目標(biāo)310并且計(jì)算與目標(biāo)列表?xiàng)l目有關(guān)地被增加到計(jì)算315 (420)。例如,ORDER聲明計(jì)算T0T=AMT-DISCo此計(jì)算TOT的目標(biāo)被增加到目標(biāo)310的條目。計(jì)算被作為條目增加到計(jì)算315,條目包括參考用于TOT的目標(biāo)列表?xiàng)l目的指針或其它類型。
[0111]接下來(lái),范圍縮小到當(dāng) 前節(jié)點(diǎn)的計(jì)算被檢索并且增加到目標(biāo)310和計(jì)算315(425 )。對(duì)于ORDER [US],作為在深度優(yōu)先遍歷中訪問(wèn)的第一節(jié)點(diǎn),在所有范圍縮小的計(jì)算330中沒(méi)有條目。同樣,在所有范圍縮小的約束335中沒(méi)有范圍縮小的約束以被增加到范圍縮小的約束320 (430)。
[0112]接下來(lái),在元素ORDER中聲明的范圍縮小的計(jì)算被存儲(chǔ)在所有范圍縮小的計(jì)算330中(435)。例如,范圍縮小的計(jì)算T0T=AMT_DISC =DOffNSCOP I NG^ LI NE ITEM”被作為條目增加到所有范圍縮小的計(jì)算330。由于深度優(yōu)先遍歷被可解析為/ORDER [US]的ORDER [US]的絕對(duì)合格的路徑節(jié)點(diǎn)也被記錄在條目中。此類信息用于確定當(dāng)隨后訪問(wèn)的節(jié)點(diǎn)的絕對(duì)合格的路徑可以被解析時(shí),范圍縮小的計(jì)算是否在隨后訪問(wèn)的節(jié)點(diǎn)之內(nèi)可操作。在此路徑、已經(jīng)記錄的0RDER[US]的絕對(duì)合格的路徑、與范圍縮小的規(guī)則的范圍縮小子句的相對(duì)路徑表達(dá)式之間,可以確定規(guī)則是否已被范圍縮小到隨后訪問(wèn)的節(jié)點(diǎn)。
[0113]最后,由元素ORDER聲明的范圍縮小的約束被存儲(chǔ)在所有范圍縮小的約束335的條目中(440)。絕對(duì)合格的路徑節(jié)點(diǎn)/ORDER[US]也被記錄在條目中。
[0114]被遍歷和訪問(wèn)的下一個(gè)節(jié)點(diǎn)是LINE ITEM節(jié)點(diǎn)。確定沒(méi)有用于類型合格的路徑/ORDER [US]/LINE ITEM的類型合格的路徑條目(405),并且因此創(chuàng)建條目。用于元素LINEITEM的默認(rèn)狀態(tài)和默認(rèn)類型聲明的規(guī)則然后被從元素的語(yǔ)料庫(kù)中檢索(410)。在這些檢索的規(guī)則當(dāng)中,約束被存儲(chǔ)在狀態(tài)/約束325中(415),并且計(jì)算和相應(yīng)的目標(biāo)被分別存儲(chǔ)在計(jì)算315和目標(biāo)310中(420)。
[0115]接下來(lái),可操作的范圍縮小的計(jì)算被檢索并且增加到目標(biāo)310和計(jì)算315(430)。所有范圍縮小的計(jì)算330包含為0RDER[US]增加的條目,其記錄范圍縮小規(guī)則T0T=AMT-DISC:D0ffNSC0PING= iiLINE ITEM”和對(duì)應(yīng)的合格的路徑,/ORDER US]。給定范圍縮小相對(duì)路徑表達(dá)式是LINE ITEM,其相對(duì)于記錄在條目中的合格的路徑/ORDER[US],匹配當(dāng)前節(jié)點(diǎn)的合格的路徑/ORDER[US]/LINE ITEM,范圍縮小的計(jì)算已被范圍縮小到當(dāng)前節(jié)點(diǎn)LINE ITEM。范圍縮小的計(jì)算和相應(yīng)的目標(biāo)被分別增加到計(jì)算315和目標(biāo)310。
[0116]LINEITEM-T0T、AMT、DISC、PRICE、和QTY的所有子節(jié)點(diǎn)是標(biāo)量節(jié)點(diǎn)。因此,不需要為這些節(jié)點(diǎn)收集規(guī)則。
[0117]當(dāng)節(jié)點(diǎn)LINE ITEM [DIGITAL]被訪問(wèn)時(shí),確定沒(méi)有用于類型合格的路徑/ORDER [US]/LINE ITEM[DIGITAL]的類型合格的路徑條目(405),并且因此創(chuàng)建條目。用于元素LINE ITEM的默認(rèn)狀態(tài)和默認(rèn)類型和用于類型DIGITAL的默認(rèn)狀態(tài)的聲明的規(guī)則然后被從元素的語(yǔ)料庫(kù)中檢索(410)。在這些檢索的規(guī)則當(dāng)中,約束被存儲(chǔ)在狀態(tài)/約束325中(415),并且計(jì)算和相應(yīng)的目標(biāo)被分別存儲(chǔ)在計(jì)算315和目標(biāo)310中。
[0118]所有范圍縮小的計(jì)算330包含為0RDER[US]增加的條目,其記錄范圍縮小規(guī)則TOT=AMT-DISC:DOffNSCOPING= “LINE ITEM”和對(duì)應(yīng)的合格的路徑,/0RDER[US]。在實(shí)施例中,當(dāng)確定規(guī)則是否已被范圍縮小到當(dāng)前節(jié)點(diǎn)時(shí),合格路徑中的類型被忽略,即匹配實(shí)際上被基于不合格的路徑確定。給定范圍縮小相對(duì)路徑表達(dá)式是LINE ITEM,其相對(duì)于記錄在條目中的合格的路徑/0RDER[US]并且忽略類型,匹配當(dāng)前節(jié)點(diǎn)的合格路徑/ORDER[US]/LINEITEM[DIGITAL],范圍縮小的計(jì)算已被范圍縮小到當(dāng)前節(jié)點(diǎn)LINE ITEM[DIGITAL]。范圍縮小的計(jì)算和相應(yīng)的目標(biāo)被分別增加到計(jì)算315和目標(biāo)310。
[0119]在實(shí)施例中,當(dāng)確定規(guī)則是否已被范圍縮小到當(dāng)前節(jié)點(diǎn)時(shí)考慮當(dāng)前節(jié)點(diǎn)的合格路徑的類型。在這種情況下,范圍縮小路徑表達(dá)式LINE ITEM不匹配當(dāng)前節(jié)點(diǎn)的合格路徑/ORDER[US]/LINE ITEM[DIGITAL]。
[0120]當(dāng)?shù)诙?LINE ITEM節(jié)點(diǎn)被訪問(wèn)時(shí),確定存在用于類型合格的路徑/ORDER[US] /LINEITEM的類型合格的路徑條目(405)。用于節(jié)點(diǎn)的文檔規(guī)則收集已經(jīng)被完成。
[0121]當(dāng)SENDING節(jié)點(diǎn)被訪問(wèn)時(shí),確定沒(méi)有用于類型合格的路徑/ORDER[US]/SENDING的類型合格的路徑條目(405),并且因此創(chuàng)建條目。為元素SENDING的默認(rèn)狀態(tài)和默認(rèn)類型聲明的規(guī)則然后被從元素的語(yǔ)料庫(kù)中檢索(410)。約束被存儲(chǔ)在狀態(tài)/約束325中(415),并且計(jì)算和相應(yīng)的目標(biāo)被分別存儲(chǔ)在計(jì)算315和目標(biāo)310中(420)。因?yàn)楦腹?jié)點(diǎn)ORDER被針對(duì)ACCEPTED狀態(tài)驗(yàn)證,使得規(guī)則SENDING IN STATE OF COMPLETE、節(jié)點(diǎn)SENDING服從的ORDER的可操作的規(guī)則,用于元素SENDING的狀態(tài)COMPLETE的規(guī)則被檢索并且存儲(chǔ)。因此,規(guī)則 ADDR IN STATE OF COMPLETE 和 NAME IS NON-NULL 被存儲(chǔ)在狀態(tài) / 約束 325 中。
[0122]當(dāng)父節(jié)點(diǎn)SENDING的子節(jié)點(diǎn)ADDR被訪問(wèn)時(shí),確定沒(méi)有用于類型合格的路徑/ORDER [US] //SENDING/ADDR的類型合格的路徑條目(405),并且因此創(chuàng)建條目。用于元素ADDR的默認(rèn)類型的默認(rèn)狀態(tài)的聲明的規(guī)則然后被從元素的語(yǔ)料庫(kù)中檢索(410)。約束被存儲(chǔ)在狀態(tài)/約束325中(415),并且計(jì)算和相應(yīng)的目標(biāo)被分別存儲(chǔ)在計(jì)算315和目標(biāo)310中(420)。因?yàn)楦腹?jié)點(diǎn)SENDING被針對(duì)它的COMPLETE狀態(tài)驗(yàn)證,使得規(guī)則ADDR IN STATE OFCOMPLETE、應(yīng)用于子節(jié)點(diǎn)ADDR的可操作的SENDING規(guī)則,用于元素ADDR的狀態(tài)COMPLETE的規(guī)則被檢索并且存儲(chǔ)。因此,規(guī)則STREET IS NON-NULL、NAME IS NON-NULL、和POSTALCODE IS NON-NULL被存儲(chǔ)在狀態(tài)/約束325中。
[0123]調(diào)度計(jì)算
[0124]文檔的驗(yàn)證包括在文檔規(guī)則收集期間收集的計(jì)算的調(diào)度。調(diào)度用于文檔的計(jì)算包括(I)定義其中適當(dāng)?shù)貓?zhí)行計(jì)算的序列,和(2)檢測(cè)將使得不可能確定適當(dāng)?shù)膱?zhí)行序列的任何情況。圖5概括根據(jù)本發(fā)明的實(shí)施例的用于實(shí)現(xiàn)這些目標(biāo)的技術(shù)。
[0125]參考圖5,用于文檔中的目標(biāo)的計(jì)算被收集(510)。在實(shí)施例中,計(jì)算可以利用如上所述的文檔規(guī)則收集技術(shù)被收集,雖然實(shí)施例不局限于以這種方式收集規(guī)則。計(jì)算表達(dá)式被解析以提取操作數(shù)(515)。
[0126]計(jì)算可以取決于另一個(gè)計(jì)算的結(jié)果。建立依賴關(guān)系圖以反映收集的計(jì)算之間的此類依賴性(520)。利用依賴關(guān)系圖(525)執(zhí)行循環(huán)檢測(cè)。至少一個(gè)循環(huán)的檢測(cè)指示錯(cuò)誤。[0127]最后,計(jì)算被分成調(diào)度階段,按從早到晚調(diào)度階段排序。執(zhí)行劃分以使得沒(méi)有從屬的計(jì)算屬于相同的或比該從屬的計(jì)算所依賴的計(jì)算更早的調(diào)度階段,如將進(jìn)一步詳細(xì)解釋的。
[0128]提取依賴性并建立依賴關(guān)系圖
[0129]為了建立依賴關(guān)系圖,在文檔規(guī)則收集結(jié)構(gòu)中收集的計(jì)算表達(dá)式的每一個(gè)被解析以確定操作數(shù)。操作數(shù)和目標(biāo)是按它們各自的類型合格路徑完全合格的。生成“目標(biāo)節(jié)點(diǎn)”以用于計(jì)算的每個(gè)目標(biāo),并且因此目標(biāo)節(jié)點(diǎn)不僅表示目標(biāo)而且表示計(jì)算。對(duì)于具有向另一個(gè)目標(biāo)解析的計(jì)算表達(dá)式操作數(shù)的每個(gè)特定目標(biāo),從特定目標(biāo)的節(jié)點(diǎn)到該另一個(gè)目標(biāo)的節(jié)點(diǎn)建立有向弧。結(jié)果,對(duì)于列在計(jì)算315上的每個(gè)從屬的計(jì)算,存在從從屬計(jì)算的相應(yīng)目標(biāo)節(jié)點(diǎn)到從屬計(jì)算依賴的計(jì)算的相應(yīng)目標(biāo)節(jié)點(diǎn)的弧。
[0130]為了示出,圖6示出用于在為0RDER[US]執(zhí)行的文檔規(guī)則收集期間收集的計(jì)算的依賴關(guān)系圖。
[0131 ] 參考圖6,依賴關(guān)系圖601是包括目標(biāo)節(jié)點(diǎn)的有向圖。每個(gè)目標(biāo)節(jié)點(diǎn)被注釋有它的目標(biāo)、類型合格的路徑、和計(jì)算。圖6中的目標(biāo)節(jié)點(diǎn)這里被稱為利用目標(biāo)節(jié)點(diǎn)和目標(biāo)名稱的類型合格的路徑。因此,/0RDER[US]的TOT是指在依賴關(guān)系圖601的甚頂部處的節(jié)點(diǎn)。
[0132]通過(guò)在文檔規(guī)則收集期間檢查并分析文檔規(guī)則收集數(shù)據(jù)結(jié)構(gòu)301中收集的規(guī)則來(lái)生成依賴關(guān)系圖601。類型合格的路徑條目/0RDER[US]包含計(jì)算TOT=AMT - DISC、AMT=SUM(“LINE ITEM/AMT”)、DISC=SUM(“LINE ITEM/DISC”)、其目標(biāo)分別是 T0T、AMT、DISC。ORDER [US]的目標(biāo)節(jié)點(diǎn)TOT按類型合格的路徑/0RDER[US]合格并且表示目標(biāo)Τ0Τ。類似地,0RDER[US]的目標(biāo)節(jié)點(diǎn)AMT按/ORDER[US]合格,并且表示計(jì)算AMT=SUM (“LINE ITEM/AMT”)的目標(biāo),并且0RDER[US]的DISC按/ORDER[US]合格并且表示計(jì)算DISC=SUM (“LINEITEM/DISC”)的目標(biāo)。
[0133]注意存在由元素LINE ITEM聲明的相同計(jì)算和目標(biāo)的兩個(gè)實(shí)例。這是讓相同元素LINE ITEM按類型合格的路徑305中的單獨(dú)的類型合格的路徑/0RDER[US]/LINE ITEM和/ORDER [US]/LINE ITEM[DIGITAL]合格的結(jié)果。/ORDER [US]/LINE ITEM 的目標(biāo)節(jié)點(diǎn) AMT 表示計(jì)算 AMT=PRICE*QTY 的目標(biāo)并且 /ORDER [US]/LINE ITEM [DIGITAL]的目標(biāo)節(jié)點(diǎn) AMT 表示計(jì)算AMT=PRICE*QTY的目標(biāo)。類似地,/ORDER[US]/LINE ITEM的目標(biāo)節(jié)點(diǎn)TOT表示計(jì)算T0T=AMT_DISC的目標(biāo)并且/ORDER [US] /LINE ITEM [DIGITAL]的目標(biāo)節(jié)點(diǎn)TOT表示計(jì)算TOT=AMT - DISC 的目標(biāo)。
[0134]從第一目標(biāo)節(jié)點(diǎn)指向第二目標(biāo)節(jié)點(diǎn)的弧表示第一目標(biāo)節(jié)點(diǎn)的計(jì)算依賴于第二目標(biāo)節(jié)點(diǎn)的計(jì)算。例如,存在從/0RDER[US]的AMT到/ORDER[US]/LINE ITEM的AMT的有向弧,表示計(jì)算 AMT=SUM (“LINE ITEM/AMT”)依賴于計(jì)算 AMT=PRICE*QTY。
[0135]確定計(jì)算之間的依賴性勢(shì)必解析類型合格的路徑305中的計(jì)算以提取操作數(shù)并且確定每個(gè)操作數(shù)是否是另一個(gè)計(jì)算的目標(biāo)。在對(duì)類型合格的路徑解析操作數(shù)和目標(biāo)的文檔分層上下文之后做出此確定。
[0136]例如,用于/0RDER[US]的類型合格的路徑條目包括用于計(jì)算SUM (“LINE ITEM/AMT”)的目標(biāo)AMT并且用于/ORDER [US] /LINE ITEM的類型合格的路徑條目包括計(jì)算AMT=PRICE*QTY。在對(duì)相應(yīng)的類型合格的路徑解析目標(biāo)和操作數(shù)之后,確定在計(jì)算SUM(“LINE ITEM/AMT”)中的操作數(shù)/ORDER[US]/LINE ITEM/AMT 也是用于計(jì)算 AMT=PRICE*QTY的目標(biāo) /ORDER[US]/LINE ITEM/AMT。
[0137]劃分成調(diào)度階段
[0138]基于依賴關(guān)系圖601,計(jì)算被以依賴性一致,即從屬的計(jì)算處于比所依賴的計(jì)算更晚的階段的方式劃分成為調(diào)度階段。此劃分通過(guò)基于由圖表示的依賴性劃分依賴關(guān)系圖中的目標(biāo)節(jié)點(diǎn)來(lái)實(shí)現(xiàn)。每個(gè)目標(biāo)節(jié)點(diǎn)被用對(duì)目標(biāo)節(jié)點(diǎn)確定的調(diào)度階段標(biāo)記,從而建立用于目標(biāo)節(jié)點(diǎn)的對(duì)應(yīng)計(jì)算的調(diào)度階段。計(jì)算這里被稱為為計(jì)算建立的調(diào)度階段而被調(diào)度。
[0139]圖6示出目標(biāo)節(jié)點(diǎn)如何被劃分為調(diào)度階段。調(diào)度階段2是最近的階段以及調(diào)度階段O是最早的階段。/0RDER[US]的目標(biāo)節(jié)點(diǎn)TOT用調(diào)度階段2標(biāo)記;計(jì)算T0T=AMT_DISC為調(diào)度階段2而被調(diào)度。/ORDER[US]/LINE ITEM的目標(biāo)節(jié)點(diǎn)AMT用階段I標(biāo)記;計(jì)算AMT=PRICE*QTY (按類型合格的路徑條目/ORDER[US]/LINE ITEM)被較早為調(diào)度階段O調(diào)度。
[0140]當(dāng)在驗(yàn)證期間執(zhí)行計(jì)算時(shí),可以相對(duì)于為相同調(diào)度階段調(diào)度的任何其它計(jì)算以任何次序執(zhí)行計(jì)算。但是,在為較早調(diào)度階段調(diào)度的任何計(jì)算調(diào)度之后且在為較晚調(diào)度階段調(diào)度的任何計(jì)算之前進(jìn)行計(jì)算。
[0141]根據(jù)實(shí)施例,在維護(hù)依賴性一致性的盡可能最早階段中調(diào)度計(jì)算。因此,從屬的計(jì)算可以比從屬的計(jì)算所直接依賴的計(jì)算晚一個(gè)或多個(gè)階段被調(diào)度。例如,從屬的計(jì)算TOT=AMT - DISC (參見(jiàn)/ORDER[US]/的TOT)被調(diào)度為階段2,而它依賴的計(jì)算DISC=SUM(“LINE ITEM/DISC”)調(diào)度為階段 O。
[0142]圖7示出用于確定目標(biāo)節(jié)點(diǎn)的調(diào)度階段并利用調(diào)度階段標(biāo)記目標(biāo)節(jié)點(diǎn)的算法的偽代碼。在偽代碼中,術(shù)語(yǔ)計(jì)算是指諸如依賴關(guān)系圖601之類的依賴關(guān)系圖中的目標(biāo)節(jié)點(diǎn),因?yàn)槊總€(gè)目標(biāo)節(jié)點(diǎn)邏輯上表示計(jì)算。在圖7中的行號(hào)給偽代碼的每個(gè)行編號(hào)。通過(guò)參考?jí)K中第一行的行號(hào)說(shuō)明偽代碼的行的塊的操作。
[0143]函數(shù)scheduleO被調(diào)用(701)。每個(gè)計(jì)算的調(diào)度階段被初始化為_(kāi)1 (701)。從依賴關(guān)系圖中的任何計(jì)算起,為每個(gè)計(jì)算調(diào)用遞歸函數(shù)scheduleRec(calc) (706)。函數(shù)scheduleRec (calc) (710)離開(kāi)用為計(jì)算確定的調(diào)度階段標(biāo)記的相應(yīng)的計(jì)算,并且返回調(diào)度階段。
[0144]當(dāng)scheduleRec (calc)被針對(duì)計(jì)算(“當(dāng)前計(jì)算”)調(diào)用時(shí),如果當(dāng)前目標(biāo)節(jié)點(diǎn)已經(jīng)用非負(fù)的調(diào)度階段標(biāo)記(712),則返回調(diào)度階段。否則,如果當(dāng)前計(jì)算在依賴關(guān)系圖中沒(méi)有子從屬,則當(dāng)前計(jì)算用調(diào)度階段O標(biāo)記(714)。
[0145]否則,對(duì)于當(dāng)前節(jié)點(diǎn)所依賴的每個(gè)計(jì)算(“依賴性”),scheduleRec (calc)被調(diào)用并且返回依賴性的調(diào)度階段(721)。如果當(dāng)前計(jì)算的階段是在依賴性的階段之后的較小調(diào)度階段,則當(dāng)前計(jì)算的階段被設(shè)置為隨后的調(diào)度階段(722)。
[0146]硬件總覽
[0147]在計(jì)算機(jī)系統(tǒng)上實(shí)施這里描述的技術(shù)和機(jī)制的要求保護(hù)的實(shí)施例,并且優(yōu)選地在驗(yàn)證龐大數(shù)目的復(fù)雜文檔的環(huán)境中使用。實(shí)際上,要求保護(hù)的實(shí)施例中計(jì)算機(jī)系統(tǒng)的使用是所需的。技術(shù)不應(yīng)該被以可修正以被智力地或手動(dòng)地執(zhí)行的任何方式解釋??梢杂脕?lái)實(shí)施實(shí)施例的示例計(jì)算機(jī)系統(tǒng)包括在本節(jié)中描述的計(jì)算機(jī)系統(tǒng)和被配置為在XAP專利申請(qǐng)中描述的運(yùn)行XAP應(yīng)用程序的服務(wù)器。
[0148]根據(jù)一個(gè)實(shí)施例,由一個(gè)或多個(gè)專用的計(jì)算設(shè)備實(shí)施這里描述的技術(shù)。專用的計(jì)算設(shè)備可以是執(zhí)行技術(shù)的硬線,或可以包括諸如一個(gè)或多個(gè)專用集成電路(ASIC)或現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)之類的被永久編程以執(zhí)行技術(shù)的數(shù)字電子設(shè)備,或可以包括被編程以按照固件、存儲(chǔ)器、其它存儲(chǔ)器、或組合中的程序指令執(zhí)行技術(shù)的一個(gè)或多個(gè)通用硬件處理器。此類專用的計(jì)算設(shè)備也可以組合具有自定義程序以實(shí)現(xiàn)技術(shù)的自定義硬線邏輯、ASIC、或FPGA。專用的計(jì)算設(shè)備可以是桌上型計(jì)算機(jī)系統(tǒng)、便攜式計(jì)算機(jī)系統(tǒng)、手持設(shè)備、網(wǎng)絡(luò)設(shè)備或合并硬線和/或程序邏輯以執(zhí)行技術(shù)的任何其它設(shè)備。
[0149]例如,圖8是示出了可以實(shí)施本發(fā)明的實(shí)施例的計(jì)算機(jī)系統(tǒng)800的方框圖。計(jì)算機(jī)系統(tǒng)800包括總線802或用于通信信息的其它通信機(jī)制,和耦接到總線802的用于處理信息的硬件處理器804。硬件處理器804可以是例如通用的微處理器。
[0150]計(jì)算機(jī)系統(tǒng)800也包括諸如隨機(jī)存取存儲(chǔ)器(RAM)或其它動(dòng)態(tài)存儲(chǔ)器之類的耦接到總線802的用于存儲(chǔ)要由處理器804運(yùn)行的信息和指令的主存儲(chǔ)器806。主存儲(chǔ)器806也可以用于在執(zhí)行由處理器804運(yùn)行的指令期間存儲(chǔ)臨時(shí)變量或其它中間信息。此類指令當(dāng)存儲(chǔ)在處理器804可訪問(wèn)的非瞬時(shí)存儲(chǔ)介質(zhì)中時(shí),將計(jì)算機(jī)系統(tǒng)800呈現(xiàn)為被定制以執(zhí)行指令中指定的操作的專用機(jī)器。
[0151]計(jì)算機(jī)系統(tǒng)800還包括耦接到總線802的用于存儲(chǔ)用于處理器604的靜態(tài)信息和指令的只讀存儲(chǔ)器(ROM) 808或其它靜態(tài)存儲(chǔ)器設(shè)備。諸如磁盤(pán)、光盤(pán)、或固態(tài)驅(qū)動(dòng)之類的存儲(chǔ)設(shè)備810被提供并且耦接到總線802以存儲(chǔ)消息和指令。
[0152]計(jì)算機(jī)系統(tǒng)800可以經(jīng)由總線802被連接到諸如陰極射線管(CRT)之類的用于向計(jì)算機(jī)用戶顯示信息的顯示器812。包括字母數(shù)字和其它鍵的輸入設(shè)備814被耦接到總線802以向處理器804通信信息和命令選擇。用戶輸入設(shè)備的另一個(gè)類型是光標(biāo)控制816,諸如鼠標(biāo)、跟蹤球、或用于向處理器804通信方向信息和命令選擇并用于控制光標(biāo)在顯示器上移動(dòng)的光標(biāo)方向鍵。此輸入設(shè)備通常具有分成兩軸的兩個(gè)自由度,第一軸(例如,X)和第二軸(例如,y),其允許設(shè)備指定平面中的位置。
[0153]計(jì)算機(jī)系統(tǒng)800可以利用與計(jì)算機(jī)系統(tǒng)結(jié)合使得或編程計(jì)算機(jī)系統(tǒng)800成為專用機(jī)器的定制的硬線邏輯、一個(gè)或多個(gè)ASIC或FPGA、固件和/或程序邏輯執(zhí)行這里描述的技術(shù)。根據(jù)一個(gè)實(shí)施例,由計(jì)算機(jī)系統(tǒng)800響應(yīng)于處理器804運(yùn)行包含在主存儲(chǔ)器806中的一個(gè)或多個(gè)指令的一個(gè)或多個(gè)序列執(zhí)行這里的技術(shù)。此類指令可以從諸如存儲(chǔ)設(shè)備810之類的另一個(gè)存儲(chǔ)介質(zhì)被讀入到主存儲(chǔ)器806。包含在主存儲(chǔ)器806中的指令序列的運(yùn)行使得處理器804執(zhí)行這里描述的處理步驟。在可替換實(shí)施例中,硬線電路可以被代替使用或與軟件指令結(jié)合。
[0154]這里使用的術(shù)語(yǔ)“存儲(chǔ)介質(zhì)”是指存儲(chǔ)使得機(jī)器以具體的方式操作的數(shù)據(jù)和/或指令的任何非瞬時(shí)介質(zhì)。此類存儲(chǔ)介質(zhì)可以包括非易失性介質(zhì)和/或易失性介質(zhì)。非易失性介質(zhì)包括例如諸如存儲(chǔ)設(shè)備810之類的光盤(pán)或磁盤(pán)。易失性介質(zhì)包括動(dòng)態(tài)存儲(chǔ)器,諸如主存儲(chǔ)器806。存儲(chǔ)介質(zhì)的常見(jiàn)形式包括例如,軟盤(pán)、軟磁盤(pán)、硬盤(pán)、固態(tài)驅(qū)動(dòng)器、磁帶、或任何其它磁數(shù)據(jù)存儲(chǔ)介質(zhì)、CD-ROM、任何其它光數(shù)據(jù)存儲(chǔ)器介質(zhì)、具有孔模式的任何物理介質(zhì)、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其它存儲(chǔ)器芯片或盒。
[0155]存儲(chǔ)介質(zhì)與傳輸介質(zhì)不同但是可以被結(jié)合傳輸介質(zhì)使用。傳輸介質(zhì)參與在存儲(chǔ)介質(zhì)之間傳輸信息。例如,傳輸介質(zhì)包括同軸電纜、銅線和光纖,包括包含總線802的線路。傳輸介質(zhì)也可以采取聲波或光波的形式,諸如那些在放射波和紅外數(shù)據(jù)通信期間生成的。[0156]介質(zhì)的各種形式可以被包含在向用于運(yùn)行的處理器804傳送一個(gè)或多個(gè)指令的一個(gè)或多個(gè)序列中。例如,指令可以最初被攜帶在遠(yuǎn)程計(jì)算機(jī)的磁盤(pán)或固態(tài)驅(qū)動(dòng)器上。遠(yuǎn)程計(jì)算機(jī)可以加載指令到它的動(dòng)態(tài)存儲(chǔ)器中并將指令通過(guò)電話線利用調(diào)制解調(diào)器發(fā)送。計(jì)算機(jī)系統(tǒng)800本地的調(diào)制解調(diào)器可以在電話線上接收數(shù)據(jù)并且使用紅外發(fā)送器將數(shù)據(jù)轉(zhuǎn)換到紅外線信號(hào)。紅外檢測(cè)器可以接收在紅外線信號(hào)中攜帶的數(shù)據(jù)并且適當(dāng)?shù)碾娐房梢栽诳偩€802上放置數(shù)據(jù)??偩€802將數(shù)據(jù)攜帶到處理器804從其檢索并運(yùn)行指令的主存儲(chǔ)器806。由主存儲(chǔ)器806接收到的指令可以在由處理器804運(yùn)行之前和之后可選地被存儲(chǔ)在存儲(chǔ)設(shè)備810上。
[0157]計(jì)算機(jī)系統(tǒng)800也包括耦接到總線802的通信接口 818。通信接口 818提供耦接到被連接到本地網(wǎng)絡(luò)822的網(wǎng)絡(luò)鏈路820的雙向數(shù)據(jù)通信。例如,通信接口 818可以是綜合服務(wù)數(shù)字網(wǎng)(ISDN)卡、電纜調(diào)制解調(diào)器、衛(wèi)星調(diào)制解調(diào)器、或提供數(shù)據(jù)通信連接到對(duì)應(yīng)類型的電話線的調(diào)制解調(diào)器。如另一個(gè)示例,通信接口 818可以是向兼容的LAN提供數(shù)據(jù)通信連接的局域網(wǎng)(LAN)卡。也可以執(zhí)行無(wú)線鏈路。在任何此類實(shí)施方式中,通信接口 818發(fā)送并接收傳送表示各種類型信息的數(shù)字?jǐn)?shù)據(jù)流的電、電磁或光信號(hào)。
[0158]網(wǎng)絡(luò)鏈路820通常經(jīng)由一個(gè)或多個(gè)網(wǎng)絡(luò)向其它數(shù)據(jù)設(shè)備提供數(shù)據(jù)通信。例如,網(wǎng)絡(luò)鏈路820可以經(jīng)由本地網(wǎng)絡(luò)822向主機(jī)824或由互聯(lián)網(wǎng)服務(wù)供應(yīng)商(ISP) 826操作的數(shù)據(jù)裝置提供連接。ISP826隨后經(jīng)由現(xiàn)在普通被稱為“互聯(lián)網(wǎng)”828的全球數(shù)據(jù)包數(shù)據(jù)通信網(wǎng)絡(luò)提供數(shù)據(jù)通信業(yè)務(wù)。本地網(wǎng)絡(luò)822和互聯(lián)網(wǎng)828兩者都使用傳送數(shù)字?jǐn)?shù)據(jù)流的電、電磁或光信號(hào)。往返于計(jì)算機(jī)系統(tǒng)800傳送數(shù)字?jǐn)?shù)據(jù)的、經(jīng)由各種網(wǎng)絡(luò)的信號(hào)和網(wǎng)絡(luò)鏈路820上并經(jīng)由通信接口 818的信號(hào)是傳輸介質(zhì)的示例形式。
[0159]計(jì)算機(jī)系統(tǒng)800可以經(jīng)由網(wǎng)絡(luò)、網(wǎng)絡(luò)鏈路820和通信接口 818發(fā)送消息并接收包括程序代碼的數(shù)據(jù)。在互聯(lián)網(wǎng)示例中,服務(wù)器830可以經(jīng)由互聯(lián)網(wǎng)828、ISP826、本地網(wǎng)絡(luò)822和通信接口 818發(fā)送用于應(yīng)用程序的請(qǐng)求的代碼。
[0160]接收到的代碼可以被處理器804按照接收的運(yùn)行,和/或被存儲(chǔ)在存儲(chǔ)設(shè)備810或其它非易失性存儲(chǔ)器中用于稍后運(yùn)行。
[0161]在上述說(shuō)明書(shū)中,已經(jīng)參考可以在各實(shí)施方式之間不同的許多細(xì)節(jié)描述了本發(fā)明的實(shí)施例。因此,說(shuō)明書(shū)和附圖應(yīng)當(dāng)被認(rèn)為是說(shuō)明性的,而不是限制的意義上的。本發(fā)明范圍的唯一并專用的指示、和由 申請(qǐng)人:指定的本發(fā)明范圍的內(nèi)容是由本申請(qǐng)發(fā)出的權(quán)利要求書(shū)的、以此類權(quán)利要求書(shū)發(fā)出的特定形式的、文字和等效范圍,包括任何隨后校正。
【權(quán)利要求】
1.一種方法,包括: 確定文檔內(nèi)的節(jié)點(diǎn)的路徑,其中每個(gè)節(jié)點(diǎn)是元素語(yǔ)料庫(kù)的元素的實(shí)例,每個(gè)元素定義一組規(guī)則,該組規(guī)則包括以下中的至少一個(gè): 約束所述元素的后代元素的一個(gè)或多個(gè)約束, 用于所述元素的目標(biāo)后代元素的一個(gè)或多個(gè)計(jì)算, 其中每個(gè)路徑標(biāo)識(shí)所述文檔內(nèi)的所述節(jié)點(diǎn)中的一個(gè)或多個(gè)節(jié)點(diǎn)的子集; 對(duì)于所述路徑中的每個(gè)路徑,與所述每個(gè)路徑相關(guān)聯(lián)地收集并存儲(chǔ)對(duì)于相應(yīng)的一個(gè)或多個(gè)節(jié)點(diǎn)是其實(shí)例的元素聲明的規(guī)則;以及 基于對(duì)于所述路徑中的每個(gè)路徑收集的規(guī)則驗(yàn)證文檔。
2.如權(quán)利要求1所述的方法,其中: 所述元素語(yǔ)料庫(kù)的每個(gè)元素是所述元素的類型;并且 所述路徑中的每個(gè)路徑按路徑中的每個(gè)元素的相應(yīng)類型合格。
3.如權(quán)利要求1所述的方法,其中: 所述元素語(yǔ)料庫(kù)的每個(gè)元素是所述元素的類型,其中每個(gè)類型具有一個(gè)或多個(gè)狀態(tài),其中對(duì)于每個(gè)元素定義的該組規(guī)則對(duì)于所述一個(gè)或多個(gè)狀態(tài)的一個(gè)狀態(tài)被定義; 其中所述路徑中的每個(gè)路徑按路徑中每個(gè)元素的相應(yīng)類型合格。
4.如權(quán)利要求1所述的`方法, 其中所述節(jié)點(diǎn)包括前代節(jié)點(diǎn)和作為前代節(jié)點(diǎn)的后代的后代節(jié)點(diǎn); 其中前代節(jié)點(diǎn)是第一元素的實(shí)例并且與第一路徑相關(guān)聯(lián),其中后代節(jié)點(diǎn)與第二路徑相關(guān)聯(lián); 其中第一元素定義范圍縮小的規(guī)則;并且 其中與所述每個(gè)路徑相關(guān)聯(lián)地收集并存儲(chǔ)對(duì)于所述路徑的相應(yīng)元素定義的規(guī)則包括與所述后代節(jié)點(diǎn)的所述第二路徑相關(guān)聯(lián)地收集并存儲(chǔ)所述范圍縮小的規(guī)則。
5.如權(quán)利要求1所述的方法, 其中對(duì)于路徑收集并存儲(chǔ)的所述規(guī)則包括計(jì)算; 其中所述步驟還包括: 基于計(jì)算之間的依賴性,將計(jì)算分成從早到晚排序的多個(gè)階段,所述多個(gè)階段的每個(gè)階段包含所述計(jì)算中的一個(gè)或多個(gè)的子集;以及 其中對(duì)于所述多個(gè)階段的每個(gè)階段,所述階段的每個(gè)計(jì)算不依賴于相同階段或較晚階段中的計(jì)算。
6.一種方法,包括: 遍歷并訪問(wèn)文檔內(nèi)的節(jié)點(diǎn),其中每個(gè)節(jié)點(diǎn)是元素語(yǔ)料庫(kù)的元素的實(shí)例,每個(gè)元素定義一組規(guī)則,該組規(guī)則包括以下中的至少一個(gè): 約束所述元素的后代元素的一個(gè)或多個(gè)約束, 用于所述元素的目標(biāo)后代元素的一個(gè)或多個(gè)計(jì)算, 其中訪問(wèn)所述節(jié)點(diǎn)中的每個(gè)節(jié)點(diǎn)包括: 確定是否存在用于路徑列表中的所述每個(gè)節(jié)點(diǎn)的路徑的條目; 響應(yīng)于確定不存在用于所述每個(gè)節(jié)點(diǎn)的路徑的條目, 檢索對(duì)于所述節(jié)點(diǎn)是其實(shí)例的相應(yīng)元素定義的一個(gè)或多個(gè)規(guī)則;與所述路徑相關(guān)聯(lián)地將條目增加到路徑列表中; 將檢索的所述一個(gè)或多個(gè)規(guī)則增加到條目中;以及 基于所述路徑列表中的規(guī)則驗(yàn)證文檔。
7.如權(quán)利要求6所述的方法,其中訪問(wèn)所述每個(gè)節(jié)點(diǎn)包括:響應(yīng)于確定不存在用于所述每個(gè)節(jié)點(diǎn)的路徑的條目,將由所述相應(yīng)元素定義的范圍縮小的規(guī)則增加到用于范圍縮小的規(guī)則的列表。
8.如權(quán)利要求6所述的方法,其中訪問(wèn)所述每個(gè)節(jié)點(diǎn)包括:響應(yīng)于確定不存在用于所述每個(gè)節(jié)點(diǎn)的路徑的條目: 確定用于范圍縮小的規(guī)則的列表包括應(yīng)用于所述路徑的范圍縮小的規(guī)則;以及 將所述范圍縮小的規(guī)則增加到所述條目中。
9.如權(quán)利要求6所述的方法,其中: 所述元素語(yǔ)料庫(kù)的每個(gè)元素是所述元素的類型;并且 所述路徑中的每個(gè)路徑按路徑中每個(gè)元素的相應(yīng)類型合格。
10.如權(quán)利要求6所述的方法,其中: 所述元素語(yǔ)料庫(kù)的每個(gè)元素是所述元素的類型,其中每個(gè)類型具有一個(gè)或多個(gè)狀態(tài),其中對(duì)于每個(gè)元素定義的該組規(guī)則對(duì)于所述一個(gè)或多個(gè)狀態(tài)的一個(gè)狀態(tài)被定義; 其中所述路徑中的每個(gè)路徑按路徑中每個(gè)元素的相應(yīng)類型合格。
11.一種方法,包括: 執(zhí)行一組規(guī)則以確定文檔是否有效; 其中該組規(guī)則包括計(jì)算,所述計(jì)算基于所述計(jì)算之間的依賴性被分成多個(gè)階段,所述依賴性基于所述文檔中的節(jié)點(diǎn)的路徑; 根據(jù)所述階段執(zhí)行計(jì)算; 在執(zhí)行計(jì)算之后,執(zhí)行該組規(guī)則中的其它規(guī)則,其中執(zhí)行該組規(guī)則中的其它規(guī)則包括,對(duì)于所述文檔中的多個(gè)節(jié)點(diǎn)的每個(gè)節(jié)點(diǎn),基于所述每個(gè)節(jié)點(diǎn)的路徑,執(zhí)行與所述每個(gè)節(jié)點(diǎn)相關(guān)聯(lián)的所述其它規(guī)則的子集; 基于執(zhí)行規(guī)則以確定文檔是否有效,來(lái)生成指示所述文檔是否有效的數(shù)據(jù)。
12.如權(quán)利要求11所述的方法,其中該組規(guī)則由元素語(yǔ)料庫(kù)定義,其中所述文檔包含作為元素語(yǔ)料庫(kù)的元素的 實(shí)例的節(jié)點(diǎn)。
【文檔編號(hào)】G06F17/27GK103874995SQ201280050633
【公開(kāi)日】2014年6月18日 申請(qǐng)日期:2012年8月27日 優(yōu)先權(quán)日:2011年8月30日
【發(fā)明者】A·D·比拉斯, 拉維·穆?tīng)柕? M·塞亞迪安 申請(qǐng)人:甲骨文國(guó)際公司