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