新四季網

用於高性能模式確認的xml模式的注釋自動機編碼的製作方法

2023-12-07 22:43:46

專利名稱:用於高性能模式確認的xml模式的注釋自動機編碼的製作方法
技術領域:
本發明涉及可擴展置標語言(XML)模式,更具體地說,本發明涉及根據XML模式確認XML文檔。
背景技術:
可擴展置標語言(XML)模式在本技術領域內眾所周知。它們允許用戶定義複雜結構化XML數據對象,在將數據存儲到資料庫並在資料庫內進行處理時,該複雜結構化XML數據對象有助於廣泛使用XML格式。當每一XML文檔被提供時,在進行數據存儲和處理過程中使用它們之前,必須根據其XML模式定義確認它們,以確保遵循該定義。
按照慣例,主要利用兩種方法進行XML模式確認。第一種方法是通用模式確認解析器。在這種方法中,解析器接收XML模式定義和XML文檔,作為輸入,將XML文檔解析為樹格式,將XML模式定義解析為模式樹格式,然後,遍歷該XML文檔樹,以對照XML模式樹校驗它。對於許多不同的XML模式,使用同一個通用模式確認解析器。儘管該方法的靈活性在於,它可以對許多不同的XML模式進行確認,但是該方法的性能通常糟糕。
第二種方法是根據特定SML模式定義,產生XML模式確認解析器代碼。該XML模式確認解析器代碼被編譯為可執行代碼,該可執行代碼用於根據特定XML模式定義確認XML文檔。儘管該方法比第一種方法快,但是當存在大量XML模式定義時,存在大量確認解析器,這樣產生了空間開銷。此外,還不靈活,因為每個XML模式確認解析器只能分別根據特定XML模式進行確認。
因此,需要一種用於進行XML模式確認的改進的方法和系統。該改進的方法和系統應該提供高性能,而且不產生高空間開銷。本發明滿足了這種需要。

發明內容
一種用於可擴展置標語言(XML)模式確認的方法和系統包括將XML文檔裝載到運行時確認引擎上,其中運行時確認引擎包括XML模式確認解析器;將XML模式定義的注釋自動機編碼(AAE)裝載到XML模式確認解析器上;以及通過利用注釋自動機編碼的XML模式確認解析器,對照XML模式定義,確認XML文檔。分別將每個XML模式定義一次編譯為AAE格式,而不是在每次確認XML文檔時編譯它們,因此,節省大量時間。運行時確認引擎的代碼被固定,而且它不根據XML模式定義改變,對於每個XML模式定義也不發生變化,因此,空間開銷被降低到最小。
在不犧牲性能的情況下,保證確認過程的靈活性。


圖1示出根據本發明的XML模式確認系統的優選實施例。
圖2更詳細示出根據本發明的XML模式編譯。
圖3是示出根據本發明的XML模式編譯過程的優選實施例的流程圖。
圖4示出示例XML模式定義。
圖5示出根據本發明在注釋樹上表示的示例XML模式定義的元素結構分層結構。
圖6示出根據本發明的上下文無關文法中的示例XML模式定義的結構。
圖7示出根據本發明利用開始標記令牌(token)和結束標記令牌擴增圖6所示上下文無關文法。
圖8示出根據本發明對示例XML模式定義進行注釋自動機編碼的注釋部分。
圖9示出根據本發明示例XML模式定義的自動機編碼表的狀態遷移圖。
圖10更詳細示出根據本發明的運行時確認引擎。
圖11是示出根據本發明利用運行時確認引擎執行的運行時確認過程的優選實施例的流程圖。
圖12是示出根據本發明處理開始標記名稱的流程圖。
圖13是示出根據本發明處理屬性名稱的流程圖。
圖14是示出根據本發明處理結束標記名稱的流程圖。
圖15A-15E示出根據本發明在運行時確認引擎執行的運行時確認過程中堆棧上的內容。
圖16示出要確認的示例XML文檔。
圖17示出XML模式定義的獲得類型的例子。
具體實施例方式
本發明提供了一種用於XML模式確認的改進的方法和系統。下面的描述用於使本技術領域內的普通技術人員實現和使用本發明,而且針對專利申請及其要求提供下面的說明。對於本技術領域內的技術人員,對優選實施例所做的各種修改是顯而易見的,而且,在此說明的一般原理可以應用於其它實施例。因此,本發明無意局限於所說明的實施例,而且本發明遵循符合在此描述的原理和特徵的最廣泛範圍。
引言根據本發明的改進的方法和系統將XML模式定義(definition)編譯為注釋自動機編碼(AAE,annotated Automaton Encoding)格式,將它存儲到盤或者資料庫內。一次將XML模式定義編譯為AAE格式。在確認XML文檔時,將XML文檔和AAE格式的正確XML模式定義裝載到運行時確認引擎上。運行時(runtime)確認引擎包括通用(generic)XML解析器和運行時模式確認解析器。運行時確認引擎的代碼被固定,而且不根據XML模式定義改變。通用XML解析器執行低級確認,而運行時模式確認解析器對照AAE格式的XML模式定義執行XML文檔的高級確認。運行時確認引擎的輸出是確認通過或者失敗。
為了更具體地描述本發明的特徵,請結合下面的討論參考圖1至17。
圖1示出根據本發明的XML模式確認系統的優選實施例。該系統包括兩組邏輯、XML模式編譯(compilation)102和運行時確認引擎104。
XML模式編譯102將XML模式定義106作為輸入,而提供注釋自動機編碼(AAE)格式的每個XML模式108作為輸出。為了之後容易進行檢索,將AAE格式的XML模式定義108存儲到盤或者資料庫110內。AAE格式包括解析表格式,該解析表通常由超前從左到右(Look Ahead Left to Right)(LAIR(1))解析器生成器獲得,但是具有附加注釋。注釋是元素節點的屬性以及元素節點和對特定XML模式定義建立的XML模式樹的屬性的數據類型約束。下面參考圖2至9進一步說明XML模式編譯102和AAE格式。
運行時確認引擎104將XML文檔112及其AAE格式的相應XML模式定義108作為輸入,並提供確認通過或者失敗作為輸出。下面將參考圖10至14進一步說明運行時確認引擎104。
XML模式編譯圖2更詳細示出根據本發明的XML模式編譯102。XML模式編譯102包括XML模式編譯器前端202和XML模式編譯器後端204。圖3是示出根據本發明的XML模式編譯過程的優選實施例的流程圖。
參考圖2和圖3,在步驟302,XML模式編譯器前端202接收XML模式定義106,作為輸入。然後,在步驟304,XML模式編譯器前端202產生元素結構分層結構,並使它表示在注釋樹上。該樹的節點是元素節點,而邊緣是節點之間的結構關係。注釋是元素節點的屬性和該元素節點和屬性的數據類型約束。下面進一步說明該注釋樹。
接著,在步驟306,XML模式編譯器後端204編碼該注釋樹並產生注釋自動機編碼。然後,在步驟308,串行化該注釋自動機編碼,並將它存儲到盤或者資料庫內。因此,該注釋自動機編碼是AAE格式的XML模式定義108。
圖4至9示出根據本發明的XML模式編譯102實現的方法的例子。圖4示出XML模式定義400的示例。XML模式定義400包括預設XML名稱空間402、名稱空間聲明404以及註冊目標名稱空間405。因為安全方面的原因,可以註冊(register)XML模式,而且在註冊XML模式參考編號404表示的替換位置,訪問該XML模式。XML模式定義400還包括用於文檔編制目的的注釋406。在該例子中,注釋406被定義為包括元素408,該元素408被命名為「文檔編制」,而且具有「xml:lang=』en』」的屬性410。
XML模式定義400進一步包括全局元素聲明,例如,人員412和註解(note)426。聲明人員全局元素412是複合類型的,而且具有一系列被稱為僱員的子元素414。聲明僱員子元素414是複合類型的,而且具有語義約束416。聲明僱員子元素414本身具有子元素418,每個子元素418分別具有其自己的語法約束420。在該例子中,這些子元素是姓、名以及註解,它們分別是一個簡單類型(字符串)。還聲明僱員子元素414具有幾個屬性422,分別將每個屬性422定義為簡單類型424。在該例子中,屬性422包括整數型(type integer)serno、USERID_TYPE型userid以及字符串型部門。預先定義整數型和字符串型。不預先定義USERID_TYPE。在428的XML模式定義中說明其定義。
在步驟302,XML模式編譯器前端202接收該XML模式定義400,作為輸入。然後,它產生XML模式定義400的元素結構分層結構,然後,使它表示在圖5所示的注釋樹500上。實線連接樹500的各元素節點。虛線將各元素節點連接到各屬性注釋。
例如,實線將人員節點502連接到僱員節點506,然後,將僱員節點506連接到姓節點508、名節點510以及註解節點512。樹500示出註解和人員是全局元素,因此,它們處於第一級節點。僱員是人員的子元素,因此,利用實線在第二級將其節點連接到人員節點。姓、名和註解是僱員的子元素,因此,利用實線,在第三級將其節點508-512連接到僱員節點506。最接近姓節點508、名節點510和註解節點512的橢圓形虛線包圍的「字符串」514-518是表示其各相應節點的數據類型的數據類型注釋節點。
樹500還示出定義僱員節點,以具有利用serno方框520、userid方框522以及部門方框524表示的屬性。最接近該方框的USERID_TYPE 526、整數528以及字符串530的橢圓形虛線包圍的是其相應類型注釋節點。
在步驟306,一對XML模式定義400產生了注釋樹500,XML模式編譯器後端204就編碼該注釋樹500,並產生注釋自動機編碼。在編碼注釋樹500中,XML模式編譯器後端204首先利用上下文無關文法(CFG)表示注釋樹500的元素約束,即,實線規定的樹結構,如圖6所示。然後,通過附加開始標記令牌作為每個元素的前綴,以及通過附加結束標記令牌作為每個元素的後綴,它擴增CFG,如圖7所示。例如,對於人員元素,附加開始標記令牌PS和結束標記令牌PE。對於僱員元素,附加開始標記令牌ES和結束標記令牌EE。同樣將開始標記令牌和結束標記令牌附加到元素姓、名以及註解上。然後,利用LALR(1)解析器生成器算法產生解析表或者狀態轉換表。然後,利用另一種算法由圖5所示的樹上的注釋構造注釋記錄。圖8示出所獲得的、示例XML模式定義400的狀態遷移圖的注釋部分。通過產生這種注釋自動機編碼,確認XML數據對象包括校驗一系列開始標記和結束標記是否符合圖7所示的文法。
參考圖8,示例XML模式定義400包括自動機編碼表801和全局元素映射表(map),該全局元素映射表包括全局元素註解802和人員803。圖9示出示例XML模式定義400的自動機編碼表801的狀態遷移圖。為了簡潔起見,圖9僅示出定義400的SHIFT邊緣,而省略了REDUCE邊緣。
參考圖8,全局元素映射表包括註解元素名稱802和人員元素名稱803。它們又分別包括指向註解元素802和人員元素803的注釋記錄843和809的指針。人員元素注釋記錄809包括其元素內容和參數的掃描器(scanner)ID 804(anyTypeID,null)、其開始標記令牌805(PS)、其結束標記令牌806(PE)、屬性列表807以及候選子元素映射表808。人員元素注釋記錄809的屬性列表807是空的。其候選子元素映射表808包括指向其局部元素映射表的指針。局部元素映射表810包括僱員元素名,該僱員元素名又包括指向僱員元素注釋記錄816的指針。
僱員元素注釋記錄816包括其元素內容與參數掃描器ID 811(anyTypeID,null)、其開始標記令牌812(ES)、其結束標記令牌813(EE)、屬性列表814以及候選子元素映射表815。根據XML模式定義400,屬性列表814包括三個屬性,serno、userid和部門。因此,屬性列表814包括指向serno屬性名稱817及其值與參數掃描器ID 818(integerTypeID,null)、userid屬性名稱819及其值與參數掃描器ID 820(anySimpleTypeID,[a-zA-Z][1][1-9a-zA-Z])、以及部門屬性名稱821及其值與參數掃描器ID 822(stringTypeID,null)的指針。
僱員元素注釋記錄816的候選子元素映射表815包括指向其局部元素映射表的指針,該映射表包括指向僱員元素的各子元素的注釋記錄的指針。根據XML模式定義400,僱員元素的子元素包括姓元素、名元素以及註解元素。它們又分別包括指向姓元素注釋記錄829、名元素注釋記錄837以及註解元素注釋記錄843的指針。
姓元素注釋記錄829包括其內容與參數掃描器ID 824(stringTypeID,null)、其開始標記令牌825(LS)、其結束標記令牌826(LE)、屬性列表827以及候選子元素映射表828。根據XML模式定義400,姓元素沒有屬性和子元素,因此,其屬性列表827及其候選子元素映射表828是空的。
名元素注釋記錄837包括其內容與參數掃描器ID 832(stringTypeID,null)、其開始標記令牌833(FS)、其結束標記令牌834(FE)、屬性列表835以及候選子元素映射表836。根據XML模式定義400,名元素沒有屬性和子元素,因此,其屬性列表835及其候選子元素映射表836是空的。
註解元素注釋記錄843包括其內容與參數掃描器ID 838(stringTypeID,null)、其開始標記令牌839(NS)、其結束標記令牌840(NE)、屬性列表841以及候選子元素映射表842。根據XML模式定義400,註解元素沒有屬性和子元素,因此,其屬性列表841及其候選子元素映射表842是空的。
注釋自動機編碼800用於對照XML模式定義400確認XML文檔,下面將做進一步說明。
運行時確認引擎圖10更詳細示出根據本發明的運行時確認引擎104。運行時確認引擎104包括XML掃描器池1002、通用XML解析器1004以及運行時模式確認解析器1006。XML掃描器池1002包括通用掃描器1017和用於特定簡單數據類型的其它掃描器1018至1020。然而,通用掃描器1017可以掃描所有詞法令牌,但其性能受到限制。用於特定類型的掃描器1018至1020可以通過更好的性能。例如,整數型的掃描器1019和字符串型的掃描器1020可以是XML掃描器池1002的一部分。在優選實施例中,AnySimpleType掃描器1018用作任何簡單數據類型的通用掃描器。掃描器1017至1020分別具有唯一的掃描器ID(0,1,...n,n+1)。通用XML解析器1004調用該掃描器,以令牌化輸入的XML文檔112。根據AAE格式的XML模式108,利用運行時模式確認解析器1006,確認要調用的掃描器。
通用XML解析器1004從該掃描器接收令牌,然後,校驗基本XML文法。如果該令牌是元素令牌,即,開始標記名稱或者結束標記名稱,或者如果該令牌是屬性令牌,則將它們轉發到運行時模式確認解析器1006,作為詞位(lexeme)。對照AAE格式的XML模式定義,運行時確認引擎解析器1006確認該元素詞位和屬性詞位。因此,根據CFG內的模式結構(參考圖6),通用XML解析器1004執行低級確認,而運行時模式確認解析器1006執行高級確認。
運行時模式確認解析器1006包括XML模式裝載模塊1010,它用於從盤或者資料庫110裝載AAE格式的正確XML模式。運行時模式確認解析器1006還包括XML模式確認模塊1012,它實際執行高級確認過程。該模塊1012包括元素確認模塊1014,用於確認元素詞位;以及屬性確認模塊1016,用於確認屬性詞位。
圖11至14是示出根據本發明利用運行時確認引擎執行的運行時確認過程的優選實施例的流程圖。參考圖11,在步驟1102,首先,XML模式裝載模塊1010裝載AAE格式的XML模式108,然後,將通用掃描器1017設置為當前掃描器。此外,實體管理器1008將獲得XML外部實體,利用XML文檔實例引用該XML外部實體以進行驗證。在步驟1104,裝載XML文檔112。當前掃描器令牌化(tokenize)該XML文檔112。然後,在步驟1106,通用XML解析器1004調用當前掃描器,以獲得令牌。在步驟1108,通用XML解析器1004校驗令牌是否成功返回。如果令牌掃描不成功,則在步驟110,確認返回「無效」,然後,結束該過程。如果在步驟1112,令牌掃描成功,而且通用XML解析器1004確定該令牌是元素令牌或者屬性令牌,則在步驟1114,將該令牌輸入到XML模式確認模塊1012,作為詞位。該詞位可以是3種類型之一開始標記名稱、屬性名稱或者結束標記名稱。在步驟1118、1120或者1122,以不同的方式,分別處理每種類型的詞位。如果令牌不是元素令牌或者屬性令牌,則在步驟1124,確定該令牌是否是文件結束(EOF)令牌,即,XML文檔112的結束。如果不是,則該過程返回步驟1106,對下一個令牌重複該過程。如果是,則在步驟1125,確定通用XML解析器1004和元素確認模塊1014是否均是「接受」方式,即,解析和確認是否已經完成。如果是,則在步驟1126,XML文檔112的確認是成功的,返回「有效」。如果不是,則在步驟1127,該確認失敗,返回「無效」。
圖12是示出根據本發明處理開始標記名稱的流程圖。首先,在步驟1202,根據先前注釋記錄和開始標記名稱,XML模式確認模塊1012發現當前注釋記錄。該當前注釋記錄是對應於先前注釋記錄的候選子元素映射表內的當前標記名稱的映射表條目指出的注釋記錄。在步驟1206,該當前注釋記錄被推進堆棧。然後,在步驟1208,XML模式確認模塊1012從當前注釋記錄獲得對應於開始標記名稱的令牌,然後,將該令牌輸入到元素確認模塊1014。根據AAE的解析表部分,例如,801,元素確認模塊1014進行LR解析。如果在步驟1210,該確認不成功,則在步驟1212,該確認失敗,然後,返回「無效」。如果在步驟1210,確認是成功的,則如果在步驟1214,當前注釋記錄的屬性列表是空的,而且元素內容是簡單類型的,則在步驟1216,將當前掃描器ID設置為簡單類型的掃描器。然後,從圖11所示的步驟1106繼續進行該過程。
圖13是示出根據本發明處理屬性名稱的流程圖。首先,在步驟1301,XML模式確認模塊1012獲得當前注釋記錄,然後,將當前注釋記錄和屬性名稱送到屬性確認模塊1016。在步驟1302,屬性確認模塊1016在當前注釋記錄的屬性列表中搜索屬性名稱。如果在步驟1304,在當前注釋記錄中未發現屬性名稱,則在步驟1310,XML文檔112的結構不符合XML模式定義108,XML文檔112的確認失敗,然後,返回「無效」。如果在步驟1304,發現屬性名稱,則在步驟1312,XML模式確認模塊1012將當前掃描器ID設置為屬性值的簡單類型。在圖11所示的步驟1124繼續進行該過程。
圖14是示出根據本發明處理結束標記名稱的流程圖。首先,在步驟1402,從堆棧上刪除當前注釋記錄。根據AAE格式,在開始標記和任意屬性之後,處理注釋記錄的結束標記。由於根據上述步驟1202至1204,設置當前注釋記錄,所以結束標記名稱的當前注釋記錄應該是開始標記名稱的注釋記錄。由於結束標記名稱是要處理的注釋記錄的最後一個令牌,所以利用該處理過程,從堆棧上刪除其注釋記錄。接著,在步驟1404,XML模式確認模塊1012從當前注釋記錄獲得結束標記名稱的令牌,然後,將它輸入到元素確認模塊1014。如果在步驟1406,該確認是不成功的,則在步驟1410,該確認失敗,並返回「無效」。如果在步驟1406,該確認是成功的,則在步驟1408,XML模式確認模塊1012確定是否已經確認了當前注釋記錄的所有屬性,或者該屬性列表是否是空的。如果不是,則在步驟1410,XML文檔112的結構不符合XML模式定義108,該確認失敗,並返回「無效」。如果是,則該過程返回圖11中的步驟1106,並對下一個令牌重複該過程。
為了在該優選實施例中校驗唯一性約束430,例如,校驗XML模式定義400的僱員元素,可以利用散列表或者散列陣列跟蹤以前是否已經遇到了僱員serno。
為了在該優選實施例中校驗引用完整性,在掃描XML文檔112時,可以收集一定義列表。然後,可以對照該定義列表校驗各引用。如果在該定義之前出現引用,則必須對整個XML文檔112進行掃描,而且在校驗引用完整性之前,記憶該引用。
示例確認例如,假定XML文檔112的XML模式定義是示例XML模式定義400(參考圖4)。圖16示出要確認的示例XML文檔1600。在步驟1102,XML模式裝載模塊1012裝載AAE格式的XML模式,然後,將該通用掃描器1017設置為當前掃描器。在步驟1104,還裝載XML文檔1600。在步驟1106,通用XML解析器1004調用當前掃描器,以獲得第一令牌,該第一令牌是人員開始標記名稱1602。在步驟1108,令牌掃描成功,而且在步驟1112,通用XML解析器1004確定它是元素令牌,因此,在步驟1114,將它輸入到XML模式確認模塊1012,作為詞位。然後,在步驟1116,XML模式確認模塊1012確認詞位類型。由於該詞位是開始標記名稱,所以執行過程步驟1118,如圖12所示。
人員開始標記名稱根據XML模式定義400的圖800,人員開始標記名稱803的先前注釋記錄指向人員元素注釋記錄809。參考圖12,因此,在步驟1202,人員元素注釋記錄809是當前注釋記錄,而在步驟1206,將該人員元素注釋記錄809推進堆棧。堆棧的內容如圖15A所示。然後,在步驟1208,XML模式確認模塊1012從人員元素注釋記錄809獲得人員開始標記令牌(PS)805,並將該令牌805輸入到元素確認模塊1014。元素確認模塊1014是利用解析表進行圖9所示狀態遷移的解析器。在步驟1210,確認是成功的。在步驟1214,人員元素注釋記錄809的屬性列表807是空的(空),但是內容是複合類型的(anyTypeID)。因此,確認過程返回圖11中的步驟1106,然後,對下一個令牌重複該過程。
僱員開始標記名稱在步驟1106,通用XML解析器1004調用當前掃描器,以獲得下一個令牌,即,僱員開始標記名稱1604。在步驟1108,令牌掃描是成功的,而且在步驟1112,通用XML解析器1004確定它是元素令牌,因此,在步驟1114,將它輸入到XML模式確認模塊1012,作為詞位。然後,在步驟1116,XML模式確認模塊1012確定詞位類型。由於該詞位是開始標記名稱,所以執行過程步驟1118,如圖12所示。
參考圖12,在步驟1202,人員元素注釋記錄809,即,先前注釋記錄的候選子元素映射表808指向僱員開始標記名稱810,僱員開始標記名稱810又指向僱員元素注釋記錄816,即,當前注釋記錄,然後,在步驟1206,將該僱員元素注釋記錄816推進堆棧。現在,堆棧的內容變成如圖15B所示。在步驟1208,XML模式確認模塊1012從僱員元素注釋記錄816獲得僱員開始標記令牌(ES)812,然後,將該令牌812輸入到元素確認模塊1014。在步驟1210,確認是成功的。由於在步驟1214,僱員元素注釋記錄816的屬性列表814不是空的,所以該過程返回圖11的步驟1106,然後,對下一個令牌重複該過程。
serno屬性名稱在步驟1106,通用XML解析器調用當前掃描器,以獲得下一個令牌,即,屬性名稱serno 1606的令牌。在步驟1108,令牌掃描是成功的,而且在步驟1112,通用XML解析器1004確定它是屬性令牌,因此,在步驟1114,將它輸入到XML模式確認模塊1012,作為詞位。然後,在步驟1116,XML模式確認模塊1012確定詞位類型。由於詞位是屬性名稱,所以執行過程步驟1120,如圖13所示。
參考圖13,在步驟1301,XML模式確認模塊1012將當前注釋記錄和serno屬性名稱傳送到屬性確認模塊1016。當前注釋記錄是僱員元素注釋記錄816。在步驟1302,屬性確認模塊1016在屬性列表814中搜索serno屬性名稱817。在步驟1304,在該屬性列表中發現serno屬性名稱817。確認是成功的,然後,在步驟1312,XML模式確認模塊1012將當前掃描器ID設置為integerTypeID。然後,該過程返回圖11中的步驟1106,對下一個令牌重複該過程。IntegerType掃描器1019掃描整數「12345」,作為serno屬性名稱的屬性值。使當前掃描器復原到通用掃描器。
userid屬性名稱在步驟1106,通用XML解析器調用當前掃描器,以獲得下一個令牌,即,屬性名稱userid 1608的令牌。在步驟1108,令牌掃描是成功的,而且在步驟1112,通用XML解析器1004確定它是屬性令牌,因此,在步驟1114,將它輸入到XML模式確認模塊1012,作為詞位。然後,在步驟1116,XML模式確認模塊1012確定詞位類型。由於詞位是屬性名稱,所以執行過程步驟1120,如圖13所示。
參考圖13,在步驟1301,XML模式確認模塊1012將當前注釋記錄和userid屬性名稱819傳送到屬性確認模塊1016。當前注釋記錄是僱員元素注釋記錄816。在步驟1302,屬性確認模塊1016在屬性列表814中搜索userid屬性名稱819。在步驟1304,在該屬性列表中發現userid屬性名稱819。確認是成功的,然後,在步驟1312,XML模式確認模塊1012將當前掃描器ID設置為anySimpleTypeID。然後,該過程返回圖11中的步驟1106,對下一個令牌重複該過程。AnySimpleType掃描器1018掃描「Albc78D」,作為userid屬性名稱的屬性值。使當前掃描器復原到通用掃描器。
部門屬性名稱在步驟1106,通用XML解析器調用當前掃描器,以獲得下一個令牌,即,屬性名稱部門1610的令牌。在步驟1108,令牌掃描是成功的,而且在步驟1112,通用XML解析器1004確定它是屬性令牌,因此,在步驟1114,將它輸入到XML模式確認模塊1012,作為詞位。然後,在步驟1116,XML模式確認模塊1012確定詞位類型。由於詞位是屬性名稱,所以執行過程步驟1120,如圖13所示。
參考圖13,在步驟1301,XML模式確認模塊1012將當前注釋記錄和部門屬性名稱821傳送到屬性確認模塊1016。當前注釋記錄是僱員元素注釋記錄816。在步驟1302,屬性確認模塊1016在屬性列表814中搜索部門屬性名稱821。在步驟1304,在該屬性列表中發現部門屬性名稱821。在步驟1308,確認是成功的,然後,在步驟1312,XML模式確認模塊1012將當前掃描器ID設置為stringTypeID。然後,該過程返回圖11中的步驟1106,對下一個令牌重複該過程。StringType掃描器1020掃描「sales」,作為部門屬性名稱的屬性值。使當前掃描器復原到通用掃描器。
姓開始標記名稱在步驟1106,通用XML解析器調用當前掃描器,以獲得下一個令牌,即,姓開始標記名稱1612的令牌。在步驟1108,令牌掃描是成功的,而且在步驟1112,通用XML解析器1004確定它是元素令牌,因此,在步驟1114,將它輸入到XML模式確認模塊1012,作為詞位。然後,在步驟1116,XML模式確認模塊1012確定詞位類型。由於該詞位是開始標記名稱,所以執行過程步驟1118,如圖12所示。
參考圖12,在步驟1202,僱員元素注釋記錄816,即,先前注釋記錄的候選子元素映射表815指向姓開始標記名稱823,姓開始標記名稱823又指向姓元素注釋記錄829,即,當前注釋記錄,然後,在步驟1206,將姓元素注釋記錄829推進堆棧。現在,堆棧的內容變成如圖15C所示。在步驟1208,XML模式確認模塊1012從姓元素注釋記錄829獲得姓開始標記令牌(LS)825,然後,將該令牌825輸入到元素確認模塊1014。在步驟1210,確認是成功的。由於在步驟1214,姓元素注釋記錄829的屬性列表814是空的,而且姓元素的內容是簡單類型(stringTypeID),所以在步驟1216,當前掃描器ID變更為stringType ID。然後,該過程返回圖11的步驟1106,對下一個令牌重複該過程。然後,調用StringType掃描器1020,以掃描「White」,作為姓元素的內容。當前掃描器復原到通用掃描器。
姓結束標記名稱在步驟1106,通用XML解析器調用當前掃描器,以獲得下一個令牌,即,姓結束標記名稱1614的令牌。在步驟1108,令牌掃描是成功的,而且在步驟1112,通用XML解析器1004確定它是元素令牌,因此,在步驟1114,將它輸入到XML模式確認模塊1012,作為詞位。然後,在步驟1116,XML模式確認模塊1012確定詞位類型。由於該詞位是結束標記名稱,所以執行過程步驟1122,如圖14所示。
參考圖14,在步驟1402,從該堆棧上刪除姓元素注釋記錄829,即,當前注釋記錄。現在,堆棧的內容變成如圖15B所示。在步驟1404,XML模式確認模塊1012從姓元素注釋記錄829獲得姓結束標記令牌(LE)826,然後,將該令牌826輸入到元素確認模塊1014。在步驟1406,該確認是成功的。由於在步驟1408,姓元素注釋記錄829的屬性列表827是空的,所以該過程返回圖11的步驟1106,對下一個令牌重複該過程。
名開始標記名稱在步驟1106,通用XML解析器調用當前掃描器,以獲得下一個令牌,即,名開始標記名稱1616的令牌。在步驟1108,令牌掃描是成功的,而且在步驟1112,通用XML解析器1004確定它是元素令牌,因此,在步驟1114,將它輸入到XML模式確認模塊1012,作為詞位。然後,在步驟1116,XML模式確認模塊1012確定詞位類型。由於該詞位是開始標記名稱,所以執行過程步驟1118,如圖12所示。
參考圖12,在步驟1202,僱員元素注釋記錄816,即,先前注釋記錄的候選子元素映射表815指向名開始標記名稱830,名開始標記名稱830又指向名元素注釋記錄837,即,當前注釋記錄,然後,在步驟1206,將該名元素注釋記錄837推進堆棧。現在,堆棧的內容變成如圖15D所示。在步驟1208,XML模式確認模塊1012從名元素注釋記錄837獲得名開始標記令牌(FS)833,然後,將該令牌833輸入到元素確認模塊1014。在步驟1210,確認是成功的。由於在步驟1214,名元素注釋記錄837的屬性列表835是空的,而且名元素的內容是簡單類型(stringTypeID),所以在步驟1216,當前掃描器ID變更為StringType ID。然後,該過程返回圖11的步驟1106,對下一個令牌重複該過程。然後,調用stringType掃描器1020,以掃描「John」,作為名元素的內容。當前掃描器復原通用掃描器。
名結束標記名稱在步驟1106,通用XML解析器調用當前掃描器,以獲得下一個令牌,即,名結束標記名稱1618的令牌。在步驟1108,令牌掃描是成功的,而且在步驟1112,通用XML解析器1004確定它是元素令牌,因此,在步驟1114,將它輸入到XML模式確認模塊1012,作為詞位。然後,在步驟1116,XML模式確認模塊1012確定詞位類型。由於該詞位是結束標記名稱,所以執行過程步驟1122,如圖14所示。
參考圖14,在步驟1402,從該堆棧上刪除名元素注釋記錄837,即,當前注釋記錄。現在,堆棧的內容變成如圖15B所示。在步驟1404,XML模式確認模塊1012從名元素注釋記錄837獲得名結束標記令牌(SE)834,然後,將該令牌834輸入到元素確認模塊1014。在步驟1406,該確認是成功的。由於在步驟1408,名元素注釋記錄837的屬性列表835是空的,所以該過程返回圖11的步驟1106,對下一個令牌重複該過程。
註解開始標記名稱在步驟1106,通用XML解析器調用當前掃描器,以獲得下一個令牌,即,註解開始標記名稱1620的令牌。在步驟1108,令牌掃描是成功的,而且在步驟1112,通用XML解析器1004確定它是元素令牌,因此,在步驟1114,將它輸入到XML模式確認模塊1012,作為詞位。然後,在步驟1116,XML模式確認模塊1012確定詞位類型。由於該詞位是開始標記名稱,所以執行過程步驟1118,如圖12所示。
參考圖12,在步驟1202,僱員元素注釋記錄816,即,先前注釋記錄的候選子元素映射表815指向註解開始標記名稱838,註解開始標記名稱838又指向註解元素注釋記錄843,即,當前注釋記錄,然後,在步驟1206,將該註解元素注釋記錄843推進堆棧。現在,堆棧的內容變成如圖15E所示。在步驟1208,XML模式確認模塊1012從註解元素注釋記錄843獲得註解開始標記令牌(NS)839,然後,將該令牌839輸入到元素確認模塊1014。在步驟1210,確認是成功的。由於在步驟1214,註解元素注釋記錄843的屬性列表835是空的,而且註解元素的內容是簡單類型(stringTypeID),所以在步驟1216,當前掃描器ID變更為StringType ID。然後,該過程返回圖11的步驟1106,對下一個令牌重複該過程。然後,stringType掃描器1020掃描「固定(regular)」,作為註解元素的內容。當前掃描器復原到通用掃描器。
註解結束標記名稱在步驟1106,通用XML解析器調用當前掃描器,以獲得下一個令牌,即,註解結束標記名稱1622的令牌。在步驟1108,令牌掃描是成功的,而且在步驟1112,通用XML解析器1004確定它是元素令牌,因此,在步驟1114,將它輸入到XML模式確認模塊1012,作為詞位。然後,在步驟1116,XML模式確認模塊1012確定詞位類型。由於該詞位是結束標記名稱,所以執行過程步驟1122,如圖14所示。
參考圖14,在步驟1402,從該堆棧上刪除註解元素注釋記錄843,即,當前注釋記錄。現在,堆棧的內容變成如圖15B所示。在步驟1404,XML模式確認模塊1012從註解元素注釋記錄843獲得註解結束標記令牌(NE)840,然後,將該令牌840輸入到元素確認模塊1014。在步驟1406,該確認是成功的。由於在步驟1408,註解元素注釋記錄843的屬性列表841是空的,所以該過程返回圖11的步驟1106,對下一個令牌重複該過程。
僱員結束標記名稱在步驟1106,通用XML解析器調用當前掃描器,以獲得下一個令牌,即,僱員結束標記名稱1624的令牌。在步驟1108,令牌掃描是成功的,而且在步驟1112,通用XML解析器1004確定它是元素令牌,因此,在步驟1114,將它輸入到XML模式確認模塊1012,作為詞位。然後,在步驟1116,XML模式確認模塊1012確定詞位類型。由於該詞位是結束標記名稱,所以執行過程步驟1122,如圖14所示。
參考圖14,在步驟1402,從該堆棧上刪除僱員元素注釋記錄816,即,當前注釋記錄。現在,堆棧的內容變成如圖15A所示。在步驟1404,XML模式確認模塊1012從僱員元素注釋記錄816獲得僱員結束標記令牌(EE)813,然後,將該令牌813輸入到元素確認模塊1014。在步驟1406,該確認是成功的。由於在步驟1408,已經確認了僱員元素注釋記錄816的所有屬性817、819和821,所以該過程返回圖11的步驟1106,對下一個令牌重複該過程。
對示例XML文檔1600上的人員元素中的剩餘僱員元素執行同樣的確認過程。
人員結束標記名稱在步驟1106,通用XML解析器調用當前掃描器,以獲得下一個令牌,即,人員結束標記名稱1626的令牌。在步驟1108,令牌掃描是成功的,而且在步驟1112,通用XML解析器1004確定它是元素令牌,因此,在步驟1114,將它輸入到XML模式確認模塊1012,作為詞位。然後,在步驟1116,XML模式確認模塊1012確定詞位類型。由於該詞位是結束標記名稱,所以執行過程步驟1122,如圖14所示。
參考圖14,在步驟1402,從該堆棧上刪除人員元素注釋記錄809,即,當前注釋記錄。在步驟1404,XML模式確認模塊1012從人員元素注釋記錄809獲得人員結束標記令牌(PE)806,然後,將該令牌806輸入到元素確認模塊1014。在步驟1406,該確認是成功的。由於在步驟1408,人員元素注釋記錄809的屬性列表807是空的,所以該過程返回圖11的步驟1106,對下一個令牌重複該過程。然後,返回EOF令牌。由於在步驟1125,通用XML解析器1004和元素模塊1014均是「接受」方式的,所以以確認XML文檔1600完成該過程。因此,在步驟1126,返回「有效」。
改進特徵儘管利用簡單XML模式定義對優選實施例進行了描述,但是本發明還支持一些改進特徵。例如,可以支持具有獲得的類型或者抽象類型和/或者抽象元素以及代用組的元素的聲明。
類型獲得允許利用基本類型定義新類型。在聲明其類型是獲得的類型(derived type)的元素時,該聲明僅引用基本類型,該基本類型可以是抽象的。如果該元素被聲明為具有獲得的類型的類型,則必須利用xsi類型屬性確定在XML實例中使用抽象類型中哪種獲得的類型。換句話說,僅利用元素名稱不能確定元素的數據類型。然而,在編譯XML模式定義時,知道利用抽象類型聲明的那個元素。因此,利用抽象類型欄位,將該信息編碼到全局元素映射表和局部元素映射表。如果運行時確認引擎104發現在運行時利用抽象類型聲明元素,則它將延遲確認該元素的屬性,直到發現xsi類型。
例如,圖17示出XML模式定義的一部分示例獲得類型定義。在該例子中,不是定義僱員元素的一種類型,而是定義三種類型employeeType、regularEmployee以及tempEmployee。聲明僱員元素指基本類型「employeeType」。
為了在根據本發明的XML模式確認中支持獲得的類型,在CFG中,XML模式編譯102對僱員元素使用OR(「|」)employeeemployeeType|regularEmployee|tempEmployee可以擴展regularEmployee和tempEmployee二者的BNF,以包括它們所含有的所有元素。例如,擴展regularEmployee以包括所有四個元素姓、名、註解以及工資。根據XML模式建議對XML模式的約束,不應該存在對獲得的合法(1egal)XML模式的CFG要求的任何超前。這意味著,獲得的CFG應該在SLR或者LALR(1)解析器生成器的能力範圍內,或者XML模式定義是錯誤的。模式編譯的剩餘部分保持不變。
關於運行時確認引擎104,可以以兩種替換方式實現確認僱員元素。在第一種方式中,使用回溯機制。當運行時確認引擎104遇到任何一種獲得類型的元素時,它掃描xsi類型屬性的開始標記。根據這些屬性的值,它對運行時模式確認解析器1006產生相應詞位。然後,它重新掃描該標記名稱之後的開始標記。例如,如果遇到下面的開始標記employee xsitype=「regularEmployee」
則將regularEmployee送到高級確認解析器。
在第二種方式中,通用XML解析器1004將整個開始標記作為一個整體進行處理,然後,確認解析器1006確認其內容。通用XML解析器1004知道xsi類型屬性的值,因此,對運行時模式確認解析器1006,產生正確令牌。然後,運行時模式確認解析器1006確認整個開始標記。
對於抽象元素和替換元素組,在XML模式編譯102的模式編譯過程中可以應用類似的機制。然而,與利用抽象類型不同,從元素名稱可以得知元素的類型。因此,不需要掃描xsi類型屬性。
儘管根據XML模式對本發明進行了描述,但是本技術領域內的普通技術人員明白,在不脫離本發明實質範圍的情況下,該確認過程還可以與使用模式的其它標記和/或置標語言一起使用。
本發明公開了一種用於XML模式確認的改進的方法和系統。該方法和系統將XML模式定義編譯為注釋自動機編碼(AAE)格式,該注釋自動機編碼(AAE)格式存儲在盤或者資料庫中。一次將每個XML模式定義編譯為AAE格式。在確認XML文檔時,將XML文檔和AAE格式的正確XML模式定義裝載到運行時確認引擎上。運行時確認引擎包括通用XML解析器和運行時模式確認解析器。運行時確認引擎的代碼被固定,而且不根據XML模式定義改變。對照AAE格式的XML模式定義,通用XML解析器執行低級確認,而運行時模式確認解析器執行XML文檔的高級確認。運行時確認引擎的輸出是確認通過或者失敗。
因為一次性編譯並存儲AAE格式的XML模式定義,而不是在每次確認XML文檔時編譯它,所以在進行確認過程時可以顯著節省時間。此外,因為運行時確認引擎代碼被固定,而對於每個XML模式定義不發生變化,所以即使存在大量XML模式定義,仍可以將空間開銷降低到最低。此外,在不犧牲性能的情況下,保證確認過程的靈活性。
儘管根據所示的實施例對本發明進行了說明,但是本技術領域內的普通技術人員容易明白,可以對該實施例進行變更,而且這些變更在本發明的實質範圍內。因此,在不脫離所附權利要求的實質範圍的情況下,本技術領域內的普通技術人員可以進行許多修改。
權利要求
1.一種用於置標語言模式確認的方法,包括步驟(a)將置標語言文檔裝載到運行時確認引擎上,其中運行時確認引擎包括置標語言模式確認解析器;(b)將置標語言模式定義的注釋自動機編碼裝載到置標語言模式確認解析器上;以及(c)通過利用注釋自動機編碼的置標語言模式確認解析器,對照置標語言模式定義,確認置標語言文檔。
2.根據權利要求1所述的方法,其中置標語言包括可擴展置標語言(XML)。
3.根據權利要求1或2所述的方法,其中注釋自動機編碼至少包括一個元素節點,其中一個或者多個屬性可以與該元素節點關聯,而且其中一個或者多個數據類型約束與該元素節點或者該屬性關聯。
4.根據權利要求1、2或3所述的方法,其中注釋自動機編碼包括至少一個元素節點的至少一個元素注釋記錄,其中至少一個元素注釋記錄包括一個或者多個組,該組包括元素內容與參數的掃描器ID;開始標記令牌;結束標記令牌;屬性列表;以及候選子元素映射表,可以包括指向子元素名稱的指針。
5.根據權利要求1至4之任一所述的方法,其中裝載步驟(a)之前包括(a1)接收可擴展置標語言(XML)模式定義;(a2)對XML模式定義,產生元素結構分層結構,並在注釋樹上表示該分層結構;(a3)編碼注釋樹,並產生注釋自動機編碼;(a4)串行化注釋自動機編碼;以及(a5)存儲串行化注釋自動機編碼。
6.根據權利要求1至5之任一所述的方法,其中確認步驟(c)包括(c1)獲得可擴展置標語言(XML)文檔的至少一個令牌;(c2)利用通用XML解析器,對至少一個令牌進行低級確認;以及(c3)如果該令牌是元素令牌或者屬性令牌,則利用XML模式確認解析器,對該至少一個令牌進行高級確認。
7.根據權利要求6所述的方法,其中確認步驟(c)進一步包括(c4)如果通用XML解析器和XML模式確認解析器進行的確認是成功的,則輸出確認通過;以及(c5)如果通用XML解析器或者XML模式確認解析器進行的確認是不成功的,則輸出確認失敗。
8.根據權利要求6或7所述的方法,其中元素令牌包括一個或者多個組,該組包括開始標記名稱;以及結束標記名稱。
9.根據權利要求6、7或8所述的方法,其中屬性令牌包括屬性名稱。
10.根據權利要求6至9之任一所述的方法,其中如果元素令牌是開始標記名稱,則執行步驟(c3),步驟(c3)包括(c3i)根據先前注釋記錄和開始標記名稱,發現當前注釋記錄;(c3ii)將當前注釋記錄推進堆棧;(c3iii)從當前注釋記錄獲得開始標記名稱的開始標記令牌;(c3iv)將開始標記令牌輸入到XML模式確認解析器的元素確認模塊;以及(c3v)確定開始標記令牌的確認是否成功。
11.根據權利要求6至10之任一所述的方法,其中如果屬性令牌是屬性名稱,則執行步驟(c3),步驟(c3)包括(c3i)將當前注釋記錄和屬性名稱送到XML模式確認解析器的屬性確認模塊;(c3ii)在當前注釋記錄的屬性列表中搜索屬性名稱,其中如果在當前注釋記錄中未發現屬性名稱,則XML文檔的確認失敗;(c3iii)如果在當前注釋記錄中發現該屬性名稱,則獲得屬性令牌;以及(c3iv)確定屬性令牌的確認是否成功。
12.根據權利要求6至11之任一所述的方法,其中如果元素令牌是結束標記名稱,則執行步驟(c3),步驟(c3)包括(c3i)從堆棧上刪除當前注釋記錄;(c3ii)從當前注釋記錄獲得結束標記令牌;(c3iii)將結束標記令牌輸入到XML模式確認解析器的元素確認模塊;(c3iv)確認結束標記令牌的確認是否成功;以及(c3v)確定是否確認了當前注釋記錄的所有屬性,或者當前注釋記錄的屬性列表是否是空的,其中如果還未確認當前注釋記錄的所有屬性,而且當前注釋記錄的屬性列表不是空的,則結束標記令牌的確認不成功。
13.一種系統,包括置標語言模式編譯,用於對至少一個置標語言模式定義,產生至少一個注釋自動機編碼;以及運行時確認引擎,包括運行時模式確認解析器,其中運行時確認引擎解析器接收置標語言文檔和至少一個注釋自動機編碼作為輸入,其中對照至少一個採用至少一個注釋自動機編碼的置標語言模式定義,運行時模式確認解析器確認置標語言文檔。
14.根據權利要求13所述的系統,其中置標語言包括可擴展置標語言(XML)。
15.根據權利要求13或14所述的系統,其中注釋自動機編碼至少包括一個元素節點,其中一個或者多個屬性可以與該元素節點關聯,而且其中一個或者多個數據類型約束與該元素節點或者該屬性關聯。
16.根據權利要求13、14或15所述的系統,其中注釋自動機編碼包括至少一個元素節點的至少一個元素注釋記錄,其中至少一個元素注釋記錄包括一個或者多個組,該組包括元素內容與參數的掃描器ID;開始標記令牌;結束標記令牌;屬性列表;以及候選子元素映射表,可以包括指向子元素名稱的指針。
17.根據權利要求13至16之任一所述的系統,其中置標語言模式編譯包括可擴展置標語言(XML)模式編譯器前端;以及XML模式編譯器後端。
18.根據權利要求17所述的系統,其中XML模式編譯器前端接收至少一個XML模式定義;產生XML模式定義的元素結構分層結構;以及使該分層結構表示在注釋樹上。
19.根據權利要求18所述的系統,其中XML模式編譯器後端編碼注釋樹;根據編碼的注釋樹,產生至少一個注釋自動機編碼;以及串行化該至少一個注釋自動機編碼。
20.根據權利要求13至19之任一所述的系統,該系統進一步包括存儲介質,用於存儲至少一個注釋自動機編碼。
21.根據權利要求13至20所述的系統,其中運行時確認引擎進一步包括通用可擴展置標語言(XML)解析器,其中該通用XML解析器對XML文檔進行低級確認,其中運行時模式確認解析器對XML文檔進行高級確認。
22.根據權利要求13至21所述的系統,其中運行時確認解析器進一步包括可擴展置標語言(XML)模式裝載模塊,用於裝載至少一個注釋自動機編碼;以及XML模式確認模塊,包括元素確認模塊,用於確認元素令牌,以及屬性確認模塊,用於確認屬性令牌。
23.根據權利要求22所述的系統,其中元素令牌包括一個或者多個組,該組包括開始標記名稱;以及結束標記名稱。
24.根據權利要求22或23所述的系統,其中屬性令牌包括屬性名稱。
25.根據權利要求13至24之任一所述的系統,其中運行時確認引擎進一步包括可擴展置標語言(XML)掃描器池,其中XML掃描器池包括通用掃描器和至少一種專用掃描器。
26.一種具有置標語言模式確認程序指令的計算機可讀介質,該計算機可讀介質包括用於如下的各指令(a)將置標語言文檔裝載到運行時確認引擎上,其中運行時確認引擎包括置標語言模式確認解析器;(b)將置標語言模式定義的注釋自動機編碼裝載到置標語言模式確認解析器上;以及(c)通過利用注釋自動機編碼的置標語言模式確認解析器,對照置標語言模式定義,確認置標語言文檔。
27.根據權利要求26所述的介質,其中置標語言包括可擴展置標語言(XML)。
28.根據權利要求26或27所述的介質,其中注釋自動機編碼至少包括一個元素節點,其中一個或者多個屬性可以與該元素節點關聯,而且其中一個或者多個數據類型約束與該元素節點或者該屬性關聯。
29.根據權利要求26、27或28所述的介質,其中注釋自動機編碼包括至少一個元素節點的至少一個元素注釋記錄,其中至少一個元素注釋記錄包括一個或者多個組,該組包括元素內容與參數的掃描器ID;開始標記令牌;結束標記令牌;屬性列表;以及候選子元素映射表,可以包括指向子元素名稱的指針。
30.根據權利要求26至29之任一所述的介質,其中在裝載指令(a)之前包括用於如下各指令(a1)接收可擴展置標語言(XML)模式定義;(a2)對XML模式定義,產生元素結構分層結構,並在注釋樹上表示該分層結構;(a3)編碼注釋樹,並產生注釋自動機編碼;(a4)串行化注釋自動機編碼;以及(a5)存儲串行化注釋自動機編碼。
31.根據權利要求26至30之任一所述的介質,其中確認指令(c)包括用於如下的各指令(c1)獲得可擴展置標語言(XML)文檔的至少一個令牌;(c2)利用通用XML解析器,對至少一個令牌進行低級確認;以及(c3)如果該令牌是元素令牌或者屬性令牌,則利用XML模式確認解析器,對該至少一個令牌進行高級確認。
32.根據權利要求31所述的介質,其中確認指令(c)進一步包括用於如下的指令(c4)如果通用XML解析器和XML模式確認解析器進行的確認是成功的,則輸出確認通過;以及(c5)如果通用XML解析器或者XML模式確認解析器進行的確認是不成功的,則輸出確認失敗。
33.根據權利要求31或32所述的介質,其中元素令牌包括一個或者多個組,該組包括開始標記名稱;以及結束標記名稱。
34.根據權利要求31所述的介質,其中屬性令牌包括屬性名稱。
35.根據權利要求31所述的介質,其中如果元素令牌是開始標記名稱,則執行的步驟(c3)包括用於如下的指令(c3i)根據先前注釋記錄和開始標記名稱,發現當前注釋記錄;(c3ii)將當前注釋記錄推進堆棧;(c3iii)從當前注釋記錄獲得開始標記名稱的開始標記令牌;(c3iv)將開始標記令牌輸入到XML模式確認解析器的元素確認模塊;以及(c3v)確定開始標記令牌的確認是否成功。
36.根據權利要求31至35之任一所述的介質,其中如果屬性令牌是屬性名稱,則執行的步驟(c3)包括用於如下的指令(c3i)將當前注釋記錄和屬性名稱送到XML模式確認解析器的屬性確認模塊;(c3ii)在當前注釋記錄的屬性列表中搜索屬性名稱,其中如果在當前注釋記錄中未發現屬性令牌,則XML文檔的確認失敗;(c3iii)如果在當前注釋記錄中發現該屬性名稱,則獲得屬性令牌;以及(c3iv)確定屬性令牌的確認是否成功。
37.根據權利要求31至36之任一所述的方法,其中如果元素令牌是結束標記名稱,則執行的步驟(c3)包括用於如下的指令(c3i)從堆棧上刪除當前注釋記錄;(c3ii)從當前注釋記錄獲得結束標記令牌;(c3iii)將結束標記令牌輸入到XML模式確認解析器的元素確認模塊;(c3iv)確認結束標記令牌的確認是否成功;以及(c3v)確定是否確認了當前注釋記錄的所有屬性,或者當前注釋記錄的屬性列表是否是空的,其中如果還未確認當前注釋記錄的所有屬性,而且當前注釋記錄的屬性列表不是空的,則結束標記令牌的確認不成功。
全文摘要
一種用於可擴展置標語言(XML)模式確認的方法和系統包括將XML文檔裝載到運行時確認引擎上,其中運行時確認引擎包括XML模式確認解析器;將XML模式定義的注釋自動機編碼(AAE)裝載到XML模式確認解析器上;以及通過利用注釋自動機編碼的XML模式確認解析器,對照XML模式定義,確認XML文檔。將每個XML模式定義一次編譯為AAE格式,而不是在每次確認XML文檔時編譯它們,因此,節省大量時間。運行時確認引擎的代碼被固定,而且它不根據XML模式定義改變,對於每個XML模式定義也不發生變化,因此,空間開銷被降低到最小。在不犧牲性能的情況下,保證確認過程的靈活性。
文檔編號G06F9/45GK1860439SQ200380101405
公開日2006年11月8日 申請日期2003年10月11日 優先權日2002年10月15日
發明者傅毓勤, 王寧, 王雲, 張國根 申請人:國際商業機器公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀