專利名稱:用于驗證xml文檔的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機文檔的處理技術(shù),尤其涉及用于驗證XML文檔的方 法和系統(tǒng)。
背景技術(shù):
SGML (Standard Generalized Markup Language)標準通用置標語言, 是國際化標準組織ISO釆用的一個信息管理標準,作為提供與平臺和應用 軟件無關(guān)的文件的一種手段。在文件中保留格式、索引和連接等信息。 SGML為用戶提供一種類似語法一樣的機制,以定義這些文檔的結(jié)構(gòu)和標 簽,這些標簽用于表示各個不同文檔的格式結(jié)構(gòu)。
XML (extensible Markup Language)可擴展置標語言,是W3C推出的 一種語言標準,是一種SGML的濃縮形式。XML語言使得萬維網(wǎng)開發(fā)者和 設(shè)計者創(chuàng)立客戶化的標記,在組織和表現(xiàn)信息時,比已有的HTML文檔代 碼系統(tǒng)更具有靈活性。XML用于計算機網(wǎng)絡系統(tǒng)的面向服務架構(gòu) (Service-OrientedArchitecture,簡稱SOA)以及Web服務的文檔和數(shù)據(jù) 的交換。XML作為數(shù)據(jù)交換格式的一個顯著的優(yōu)點,是驗證(validation ) 技術(shù)的標準化。
多數(shù)XML應用程序開發(fā)人員希望能夠有一種方法,保證所有XML 實例都遵循特定的規(guī)則。這就要通過驗證來保證。為此,很多人直接轉(zhuǎn)而 求助于模式語言,如DTD、 W3C XML Schema (WXS)和RELAX NG。 最佳方案可能是對XML實例應用簡單的規(guī)則。
常用的驗證技術(shù),基于語法的驗證方法。作為替代方法,Schematron 是一種結(jié)構(gòu)化的驗證語言。Schematron語言允許直接表達規(guī)則,而不需
5要創(chuàng)建完整的語法基礎(chǔ)設(shè)施。采用樹式樣(tree pattern),以Xpath表示 式進行定義,以便用于斷言,并以用戶為中心提供XML文檔的報告。使用 式樣表示驗證規(guī)則, 一般比使用內(nèi)^^莫型定義相同的規(guī)則容易。樹式樣匯 集起來形成Schematron模式。對于其它模式語奮,Schematron是一種實用 的工具。如果將規(guī)則應用于XML文檔的內(nèi)容或者按照規(guī)則進行檢查, Schematron是一種非常有用的工具。Schematron極其靈活,可以表達各 種不同的規(guī)則,表達能力甚至比其他模式語言(如DTD、 W3CXML Schema (WXS)和RELAX NG )都要好
業(yè)界和學術(shù)界對于實施Schematron進行了很多開發(fā)。圖l示出了被廣 泛使用和參照的Schematron實施方式??梢詤⒁?br>
http:〃www.schematron.com。這是一種比較著名的開i文源代碼實施方式。 經(jīng)常由其它項目重新使用。Schematron使用XSLT(XML Stylesheet Language For Transformation),并且通過定義才莫式i吾言,以^更在通過元方 式表(即用于產(chǎn)生其它方式表的方式表)進行轉(zhuǎn)換時,生成XSLT驗證文 件。圖l展示了該處理過程。
http:〃www.ldodds.com/papers/schematron—xsltuk.html也介紹了 Schematrion語言以及它的基于XSLT的實現(xiàn)。
此夕卜,COSMOS(COmmimity-driven Syst ems Management in Open Source)項目旨在為系統(tǒng)管理提供互操作的工具。COSMOS Resource Modeling子項目旨在為建立表述信息的通用模型提供支持,該信息用于在 系統(tǒng)管理環(huán)境中共享。該項目使用SML和Schematron作為XML才莫式語言 來定義這種公共才莫型。其使用基于XSLT的方法來以及skeletonl-5.xsl (http:〃xmLascc.net/schematron/1.5/)參考實施方案來從模式提取 schematron 。
發(fā)明內(nèi)容
上述已有技術(shù)全部基于XSLT方法。本發(fā)明提供了一種新的用于驗證 XML文檔的方法和系統(tǒng)。該方法包括解析至少一待驗證的XML文檔,并將其中的XML數(shù)據(jù)表示為至少 一數(shù)據(jù)對象模型;解析至少 一規(guī)則文檔, 并創(chuàng)建規(guī)則對象模型;從所述數(shù)據(jù)對象模型和規(guī)則對象模型,提取至少部 分數(shù)據(jù)對象及至少部分規(guī)則對象;針對所提取的至少部分數(shù)據(jù)對象及至少 部分規(guī)則對象,在相應的執(zhí)行上下文中執(zhí)行驗證。
本發(fā)明還提供了一種用于驗證XML文檔的系統(tǒng),包括數(shù)據(jù)解析裝 置,用于解析至少一待驗證的XML文檔,并將其中的XML數(shù)據(jù)表示為 至少一數(shù)據(jù)對象模型;規(guī)則解析裝置,用于解析至少一規(guī)則文檔,并創(chuàng)建 規(guī)則對象模型;提取裝置,用于從所述數(shù)據(jù)對象模型和規(guī)則對象模型,提 取至少部分數(shù)據(jù)對象及至少部分規(guī)則對象;以及驗證裝置,用于針對所提 取的至少部分數(shù)據(jù)對象及至少部分規(guī)則對象,在相應的執(zhí)行上下文中執(zhí)行 驗證。
在本發(fā)明的一個實施例中,所述數(shù)據(jù)對象模型和所述規(guī)則對象模型在 內(nèi)存中創(chuàng)建。
在本發(fā)明的另一個實施例中,所述規(guī)則文檔為Schematron文檔,所述 規(guī)則對象模型中的規(guī)則對象保持與所述Schematron文件里面的元素相應 的層次關(guān)系。所述XML文檔中的每個元素,被映射到數(shù)據(jù)對象模型中的一 個數(shù)據(jù)對象,所述數(shù)據(jù)對象保持與所述待驗證的XML文檔的元素相應的層 次關(guān)系。
其中,根據(jù)預先確定的規(guī)則提取標準,從所述規(guī)則對象模型,提取至 少部分規(guī)則對象。其中,根據(jù)預先確定的數(shù)據(jù)對象提取標準,從所述數(shù)據(jù) 對象模型,提取所述至少數(shù)據(jù)對象。
在本發(fā)明的另一個實施例中,進一步包括以下步驟生成所提取的至 少一規(guī)則對象的執(zhí)行上下文,并將該執(zhí)行上下文注冊到一上下文庫中,將 所述至少一規(guī)則對象在該執(zhí)行上下文中執(zhí)行驗證。還可以從一上下文庫中, 檢索所提取的一規(guī)則對象的執(zhí)行上下文,將所述該規(guī)則對象在該執(zhí)行上下 文中執(zhí)行驗證。
圖l示出了根據(jù)已有技術(shù)的使用Schematron的基于XSLT的XML文檔 的驗i正方法。
圖2示出了根據(jù)本發(fā)明 一 實施例的用于驗證XML文檔的方法的流程圖。
圖3示出了根據(jù)本發(fā)明另 一實施例的用于驗證XML文檔的系統(tǒng)方框圖。
圖4示出了根據(jù)本發(fā)明 一 實施例的內(nèi)存中的規(guī)則對象模型。
圖5示出了根據(jù)本發(fā)明 一 實施例的執(zhí)行上下文示意圖。
圖6示出了根據(jù)本發(fā)明另 一 實施例的用于驗證XML文檔的方法的流程圖。
具體實施例方式
圖l示出了根據(jù)已有技術(shù)的使用Schematron的基于XSLT的XML文檔 的驗證方法。本發(fā)明背景技術(shù)部分中所描述的已有技術(shù),均基于XSLT對 XML文檔進行驗證。這種基于XSLT的驗證方法具有多方面的缺點?;?XSLT實現(xiàn)Schematron驗證決定了必然的兩步走的過程,因為XSLT 1擎處 理的文件一定是XSLT語法文件,它并不能直接執(zhí)行Schematron文件。只 有先把Schematron轉(zhuǎn)換成一個可執(zhí)行的XSLT文件之后,XSLT引擎才可以 繼續(xù)對轉(zhuǎn)換成的新XSLT文件去執(zhí)行。在圖1中,作為XML規(guī)則文檔 Schematron文檔lO,首先被轉(zhuǎn)換為XSLT文檔Schematron.xslt文檔20。這 個新XSLT文件本身描述的內(nèi)容就是Schematron所定義的規(guī)則。
應用Schematron對XML文檔進行驗證的過程可以分為兩個步驟。第一 個步驟是通過在XSLT引擎60上執(zhí)行Schematron.xslt文檔20將Schematron 規(guī)則文件轉(zhuǎn)換為中間文件即Validator.xslt文檔30。第二步則是通過在XSLT 虧1擎60上執(zhí)行生成的Validator.xslt文檔30對XML文檔40進行驗證生成最 后的驗證報告(Validation Report) 50。
這種基于XSLT的驗證方法,兩次XSLT轉(zhuǎn)換f 1起性能問題。 Schematron模式^皮轉(zhuǎn)換為相應的XSLT文檔, 一般以元方式表(meta-stylesheet)的方式來實施,該元方式表稱為綱要(skeleton)。該綱要凈皮應用 于Schematron模式,得到的XSLT依次應用到XML實例文檔。在驗證處理 中,由于要進行兩次基于XSLT的轉(zhuǎn)換,性能變成了關(guān)鍵的問題。尤其是 在一些有實時處理要求的環(huán)境中,例如注冊和終端用戶和應用進行注冊和 存儲產(chǎn)生的大量同時操作。
這種基于XSLT的驗證方法,缺少規(guī)則上下文的共享。每個規(guī)則的上 下文不能共享,因此在-瞼證過程中許多節(jié)點,皮訪問一次以上。這對于性能 來說也是一個關(guān)鍵問題。使用Schematron難以進行fail-fast驗證。fail-fast 是指容錯的輕量級形式。其中, 一個應用或系統(tǒng)服務在遇到錯誤時自行終 止。Schematron驗證基于XSLT轉(zhuǎn)換,由于XSLT的特性很難得到fail-fast 的實施方式。
這種基于XSLT的驗證方法,存在XSLT產(chǎn)生的匹配問題。在基于XSLT 的實施中,通常存在匹配問題。例如,當在相同的式樣(pattern)中,一 些規(guī)則上下文的范圍相互交疊,這將導致多于一條規(guī)則被滿足而產(chǎn)生觸發(fā)。 使用基于XSLT的實施方式,每個規(guī)則被表示為一個模板(template),但 是對于XSLTl.O,如果多個才莫板^f皮同時匹配,只有具有最高優(yōu)先級的模板 被調(diào)用,其它的模板被忽略。XSLT2.0具有執(zhí)行"match-next"的特征, 但是,仍然不能完全解決該問題。這種缺陷在Schematron規(guī)范和XSLT性 能之間造成了隔閡。
這種基于XSLT的驗證方法,對于在Schematron文檔中的細粒度斷言, 難以支持部分驗證。使用XSLT方式,在Schematron文檔中,可選的規(guī)則 容器的最小單元是"段(phase)"。用戶或應用無法選擇更細粒度的單元, 例如規(guī)則或斷言,以便進行驗證。盡管對于靈活的驗證方面具有許多先進 的特性,當需要驗證僅僅具有一個段的子集的XML文檔,仍將產(chǎn)生問題。 對于一個段的子集,例如,用戶選擇的多條規(guī)則或多條斷言,和對于標準 規(guī)范(如WS-IBP等)的特定版本或部分的多條規(guī)則或斷言。
圖2示出了根據(jù)本發(fā)明一實施例的用于驗證XML文檔的方法,該方法 包括以下步驟。在步驟SIO,解析至少一待驗證的XML文檔,并將其中的XML數(shù)據(jù)表示為至少 一數(shù)據(jù)對象模型。該數(shù)據(jù)對象模型可以在內(nèi)存中創(chuàng)建 并保存,也可以利用其它便于存取的硬件和/或虛擬軟件的技術(shù)進行創(chuàng)建并 保存。該數(shù)據(jù)對象模型,可以釆用樹結(jié)構(gòu),如文檔對象^^莫型(Document Object Model,簡稱DOM)。所述XML文檔中的每個元素,可以被映射到 數(shù)據(jù)對象模型中的一個數(shù)據(jù)對象。所述數(shù)據(jù)對象也可以保持與所述待驗證 的XML文檔的元素相應的層次關(guān)系。
在步驟S20,解析至少一規(guī)則文檔,并創(chuàng)建規(guī)則對象模型。該規(guī)則對象 模型可以在內(nèi)存中創(chuàng)建并保存,也可以利用其它便于存取的硬件和/或虛擬 軟件的技術(shù)進行創(chuàng)建并保存。
在步驟S15,從所述數(shù)據(jù)對象模型,提取至少部分數(shù)據(jù)對象。提取的數(shù) 據(jù)對象標準,可以預先確定,然后根據(jù)該標準自動選擇數(shù)據(jù)對象。也可以 將數(shù)據(jù)對象模型通過用戶接口提供給用戶,由用戶從該數(shù)據(jù)對象模型中選 擇數(shù)據(jù)對象。還可以根據(jù)用戶定義的函數(shù)來選擇數(shù)據(jù)對象。
在步驟S25,從所述規(guī)則對象模型,提取至少部分規(guī)則對象。提取的規(guī) 則對象標準,可以預先確定,然后才艮據(jù)該標準自動選擇MJ'j對象。也可以 將規(guī)則對象模型通過用戶接口提供給用戶,由用戶從該規(guī)則對象模型中選 擇規(guī)則對象。還可以根據(jù)用戶定義的函數(shù)來選擇規(guī)則對象。
在步驟S30,針對所提取的至少部分數(shù)據(jù)對象及至少部分規(guī)則對象,在 相應的執(zhí)行上下文中執(zhí)行驗證。所述執(zhí)行上下文,可以預先確定。也可以 根據(jù)規(guī)則對象及其要驗證的數(shù)據(jù)對象來生成。還可以保存一上下文庫,該 庫中存儲有多個用于驗證的執(zhí)行上下文。本領(lǐng)域的技術(shù)人員可以理解,還 可以從該上下文庫中,檢索所提取的一規(guī)則對象的執(zhí)行上下文,將所述該 規(guī)則對象在該執(zhí)^f亍上下文中執(zhí)行驗證。
才艮據(jù)本發(fā)明的一個實施例,既可以對整個XML實例文檔進行關(guān)于全部 規(guī)則、或者部分規(guī)則的驗證,又可以對XML實例的部分數(shù)據(jù)進行關(guān)于全部 規(guī)則、或者部分規(guī)則的驗證。當驗證的數(shù)據(jù)對象和規(guī)則對象確定后,驗證 的執(zhí)行過程,是針對這些驗證的數(shù)據(jù)對象,在一定的執(zhí)行上下文之下,應 用執(zhí)行這些規(guī)則對象。根據(jù)本發(fā)明的另 一 實施例,生成所提取的至少 一規(guī)則對象的執(zhí)行上下 文,并將該執(zhí)行上下文注冊到一上下文庫中,將所述至少部分規(guī)則對象在 該執(zhí)行上下文中執(zhí)行驗證。
根據(jù)本發(fā)明的另一實施例,其中,上述數(shù)據(jù)對象模型和所述規(guī)則對象
模型在內(nèi)存中創(chuàng)建。所述規(guī)則文檔為Schematron文檔,所述規(guī)則對象模 型中的規(guī)則對象保持與所述Schematron文件里面的元素相應的層次關(guān)系。 根據(jù)本發(fā)明的另一實施例,其中進一步包括響應于需要快速退出 (fail-fast)的^L則^皮觸發(fā),停止執(zhí)行'驗證。
圖3示出了根據(jù)本發(fā)明另 一實施例的用于驗證XML文檔的系統(tǒng)方框 圖。圖3中,XML文檔101包括需要使用規(guī)則進行驗證的內(nèi)容。例如,客戶 購買的訂單需要被驗證,該XML實例如下。
< xml version="l .0" encoding="UTF-8" 〉'
<enrployees xmjns="http:〃example.ibm.con/employee">
<employee serialNumber="SOADC913247" sex="FeM:ale" title="Mr"
deptId="SOADC">
<fl rst N am e>Chuan</firstN am e>
<lastName>WEN</lastNarne:>
<assets〉
<asset assetNumber="P2PQH402" capitalizedDate="2008-04-10" status="active"> <compliancdnfo〉
<check date="2008-01-10" standard="Sec300" status="passeci'V:> <check date="2008-02-18" standard="Sec400" status="failed'7> <check date="2008-03-22" standai'd="Sec800" status="failed7> </c o mp I i an c e :1 n fo:> <ite〗ns>
<item partNuni="001 -AA">
<productName>PC</productName> <quamity> 1 </quantity> <pHce>13000.80</price> </item>
<itern partNum="002-BB">
<productName>keyboard</prodiictName> <q uant i ty > 1 </q u a nt i ty 〉 <price>288,88</price>
<item partNum="003-CC">
<prod uctN ame>Monitor </prod uctN a m e><q uantity>2 </q uant i ty> <price>2000</price> </kem〉
<Zasset>
<asset assetNumber="A22J7602" capitalizedDate="2008-03-22" status="unused">
<unusedInfo reason="LowerPerformance">
<ddnil>
The performance of this assset is very lower!
</deta"> </u.nusedinfo> </asset> <Zassets> </employee> </employees>
在上述XML實例的數(shù)據(jù)中,包括一個員工姓"WEN"名"Chuan", 其員工號為"SOADC913247",性別"FeMale",稱呼"Mr"。該員工 的名下還包括了一些資產(chǎn)的信息。
Schematron文檔102,用于存儲用于對上述XML文檔進行驗證的少見則。 Schematron語言允許直接表達規(guī)則,用于保證所有XML實例都遵循特 定的規(guī)則。如果將規(guī)則應用于XML文檔的內(nèi)容或者按照規(guī)則進行檢查, Schematron是一種非常有用的工具。例如,對于一家出版技術(shù)文檔的公 司,由不同的作者供稿。編輯們希望用一組規(guī)則檢查提交的文檔,以{更保 證文檔符合編輯要求,并且出版工具能夠正確地處理它。
Schematron文檔中,聲明用于定義各種XML詞匯,并且可以在不同的 基于XML的應用中共享。約束規(guī)則不僅僅是簡單的基于XML Schema (模 式)的驗證,其對于形式和正確性進行嚴格檢查,而且還包括復雜的應用 邏輯以用于多個XML文檔。例如,可以使用以下Schematron文檔來表述規(guī) 則,以便驗證上文例舉的XML文檔。
< xmJ version="1.0" encoding="UTF-8" > 《sclie腦xmlns="hUp:〃pud.oclc.org/dsdl/schematron"> <Htle>Employee and Asset</titie〉
<ns uri="http:〃example.ibm.com/employee" prefix="em" /> <patiem name-"Basic validation"^<rule context="/em:employees/em:employee"> <3sscrt
test="(@sex='Male' and @title='Mr') or (@sex='Female, and (@title='Mrs' or @title='Miss'))"> The value of title does not match the value of sex.
<Zassert>
<assert test="(@,serialNumbei. and @deptld":>
Both serialNumber and deptid must be present
</assert:>
<repott test="not(starts-with(@serialNumber,@deptld))"> The serialNumber must starts with the deptid.
<:/report> </ruie>
<:pattem name="Assets count vaHdation"〉
<i'ule context="/em:employees/em:employee/eni:assets"> <:assert test="count(em:asset[@status='active']) >= 1">
Each employee should have at least one asset which status is active.
</ass(;.rt>
<report test="count(em:asset) >0">
Each employee should have at most ten assets.
</repoit> </rute> <:/pattem>
<pattern name="Asset price validation")
<ruie context=7em:employees/em:employee/em:assets/em:asset[@statiis=factive']/em:items"> <assert test="em:item">
Each asset which status is active should have at least one item.
</asse.!*t> <report
test="sum(em:item/em:price/text()) > 10000">
For each employee, the sum of price of all the active assets can't be greater than 10000.
</report> </rule> </pattern>
<pattern name="Asset advanced validation")'
<rule contexty/em:employees/em:employee/eni:assets/em:asset[⑥status^act;ive']'5 <:assert test="em:complianceInfo"〉
Each active asset must include the compliance check information,
</assert> </mle> <rule
context=7em:employees/em:employee/em:assets/em:asset〖@status='active']/em:compliancelnfo/em:check"> <rep()i1: test="@standard='Sec300' and not(@status='passed')">
If the check standard is 'Sec300', corresponding status must be 'passed'.
</report〉<repor( test="@standard='Sec400, and not(@status='passed, or @status='uncertain')">
If the check standard is 'Sec400', corresponding status should be 'passed' or 'uncertain,.
</report:>
<report test-"②standard^Sec800' and status^f'ailed"^'
If the check standard is 'Sec800曙,and corresponding status is present, the status should be not
'failed',
</report> </mJe>
<rule context=7em:employees/em:ernployee/em:assets/em:asset[@status='unused']''〉 <:assert test="em:unLisedInfo">
The unused assets must include the unused information. </assert>
<assen test="em:unused.Info/@reason!='' or em:unusedlnfo/detail/text()H"":〉
Asset[serial number: <value-of、select="./@assetNumber7>] is unused, but has not unused reason
or detail.
<:/asser>
</pattem> <^schema>
在上述Schematron文檔中,包括對上述XML文擋進行驗證的規(guī)則,如 其中斷言的"(⑥sex-'Male' and @title='Mr') or (@sex='Female' and (@title='Mrs' or @title='Miss'))'W于驗證上述XML文擋中WEN Chuan 的稱呼是否正確。戈口果不正確,則輸出"The value of title does not match the value of sex"。
驗證引擎103,其使用規(guī)則對象模型,對目標XML對象模型執(zhí)行結(jié)構(gòu) 和內(nèi)容約束的^HiE。本領(lǐng)域的技術(shù)人員可以理解,該驗證引擎103根據(jù)具體 應用的需要,可以包括以下模塊的部分。如可以根據(jù)需要選用或不選用用 戶定義的函數(shù)114或輸出生成器注冊表115。
XML解析器104,用于解析XML文檔,并且可以使用不同工具語言來 實施,例如Java、 C弁等等。解析器可以通過嘗試讀取文檔并解釋其內(nèi)容的 一段代碼來實現(xiàn)。XML解析器讀取XML文檔,按照一定的規(guī)則(語法) 訪問XML數(shù)據(jù),然后確定如何訪問或檢索這些數(shù)據(jù)。典型地,解析器可以 是文檔對象模型(DOM)解析器或流APIXML(SAX)解析器。
XML解析器104,解析至少一待驗證的XML文檔1、 XML文檔2和/或XML文檔3,并將其中的XML數(shù)據(jù)表示為至少一 XML數(shù)據(jù)對象模 型105。其中,所述XML文檔中的每個元素,被映射到數(shù)據(jù)對象模型中的 一個數(shù)據(jù)對象,所述數(shù)據(jù)對象模型保持與所述待驗證的XML文檔的元素 相應的層次關(guān)系。
XML解析器104,可以在內(nèi)存中解析待驗證的XML文檔,并將得到的 XML數(shù)據(jù)對象模型105存儲在內(nèi)存中。這樣,通過使用在內(nèi)存中的數(shù)據(jù)對 象模型而進行精確匹配,解決了匹配時間問題。使得根據(jù)用戶的選擇或者 預定的方案,對XML文檔的部分進行靈活的驗證,即XML數(shù)據(jù)對象模 型105中的部分對象進行驗證,具有實際的可行性。
XML數(shù)據(jù)對象模型105,可以是常用的文檔對象模型(DOM)。其中, XML文檔一般被模型化為節(jié)點標記的樹。文檔中的每個元素都被映射到該 樹中的一個子樹,其根節(jié)點使用元素的標簽進行標記。
規(guī)則解析器106,解析至少 一規(guī)則文檔,如圖3中所示Schematron文檔1 、 Schematron文檔2和/或Schematron文檔3,并創(chuàng)建規(guī)則對象模型107。所述 規(guī)則對象模型可以在內(nèi)存中創(chuàng)建。所創(chuàng)建的規(guī)則對象模型107也可以存儲在 內(nèi)存中。規(guī)則解析器106,用于解析使用擴展Schematron語言的約束規(guī)則。 這些約束規(guī)則可以是組織良好的XML文檔,它們可以被任何XML解析器 解析。根據(jù)本發(fā)明的一個實施例,約束規(guī)則解析器106基于DOMAPI (Document Object Model Application Programming Interface )來將約束 規(guī)則文檔解析到內(nèi)存中的規(guī)則對象模型107。
在本發(fā)明的另 一個實施例中,所述規(guī)則文檔可以是Schematron文檔, 所述規(guī)則對象模型中的規(guī)則對象保持與所述Schematron文件里面的元素 相應的層次關(guān)系。規(guī)則解析器106的處理過程是指將Schematron文件按照 它本身的語法規(guī)范進行解析,然后在內(nèi)存中生成相應的規(guī)則對象模型。具
體來說,Schematron文件本質(zhì)是也是一個XML文件,首先通過通用的XML DOM處理機制解析Schematron文件,并根據(jù)對于元素的名稱創(chuàng)建相應的 內(nèi)存對象。例如,當解析出的XML原始名稱為rule時,相應的將創(chuàng)建失見則 對象^^莫型。因為Schematron文件里面的元素是有層次關(guān)系的,相應的內(nèi)存中的規(guī)則對象模型也保持對應的層次關(guān)系。
舉例說明,下面的這個Schematron文件可以生成如圖4所示的內(nèi)存中 的規(guī)則對象模型。
Schematron文件 < xml version="l .0" encoding="UTF-8" > <scheina xmlns="http:〃puti.oclc.org/dsdl/schematron1,>
<titk>Employee and Asset</title>
<ns uri="http:〃example.ibTn.com/employee'' prefk="em" /> <pattern name="Basic vaJidation">
<rule contexf/em:employees/em:empIoyee":〉
test="(@sex='Male' and @title='M:r') or (@sex='Female' and ([gtitle^Mrs' or @title='Miss'))"> The value of title does not match the value of sex.
</assert>
<assert test="@serialNumber and @deptld">
Both serialNumber and deptld must be present.
</assert>
<report test="not(starts-with(@serialNumber,@deptId))"> The serialNumber must starts with the deptld.
</repoit> </rule> </pattem>
<pattem name="Assets count validation")
〈rule context=7em:employees/em:employee/em:assets"> <assert test="count(em:asset[@status='active,]) >= l',>
Each employee should have at least one asset which status is active.
</assert>
<report test="count(em:asset) > 10":>
Each employee should have at most ten assets.
</report> </rule:> </patleni>
<pattem name="Asset price validation")
<ruie context="/em:employees/em:employee/em:assets/em:asset[@status='active']/em:items"> <assert test="em:item">
Each asset which status is active should have at least one item.
<rq,ort
test="sum(em:item/em:pi.ice/text()) > 10000">
For each employee, the sum of price of all the active assets can't be greater than 10000.
</report> </mle> </pattern>〈pattem name="Asset advanced validation")
<rule context=7em:employees/em:employee/em:assets/em:asset[@status='active']"> <assert lest="em:complianceInfo">
Each active asset must include the compliance check information.
</assert> </rule> <rule
context=7em:employees/em:employee/em:assets/em:asset[@status='active']/em:compliancelnfo/em:check"> <report test="@standard='Sec300' and not(@status='passed')">
If the check standard is 'Sec300', corresponding status must be 'passed'.
<:/report>
<report test="@standard='Sec400' and not(@status='passed' or @status='uncertain')">
If the check standard is 'Sec400', corresponding status should be 'passed' or 'uncertain',
<Zreport>
<report test="@standard='Sec800' and @status='failed'":>
If the check standard is 'Sec800', and corresponding status is present, the status should be not
'failed'.
<:/repori> </ru.le>
<rule context='7em:employees/em:employee/em:assets/em:asset[@status='unused']"> <assert t:est="em:unusedlnfo">
The unused assets must include the unused information. </assert>
<assert test="em:unusedInfo/@reason!='' or em:unusedInfo/detail/text()!=""〉
Asset[serial number: <vaJue-of select="./@assetNumber"/>] is unused, but has not unused reason
or detail.
</assert>
</pattem> </schcrrm>
該規(guī)則對象模型中的對象與上文Schematron文件中的元素保持了相 應的層次關(guān)系。例如,圖4中第l行的對象schema Schema(id=35)對應于 Schematron文件中開始于第2行的元素〈schema
xmlns="http:〃purl.oclc.org/dsdl/schematron">。
圖4中第4行的對象
Pattern (id=79)對應于Schematron文件中開始于第5行的元素〈pattern name="Basic validation">。圖4中第ll行的對象[O
Rule(id=95)對應于 Schematron文件中開始于第6行的元素〈rule
context="/em:employees/em:employee">。圖4中第15行的對象
Assertion(id=109)對應于Schematron文件中開始于第7行的元素 <asscrt
test="(@sex='Male' and @title='Mr') or (@sex='Female, and (@title=,Mrs, or @title='Miss'))">
The value of title does not match the value of sex. </ssscrt>。
規(guī)則對象模型107可以表示規(guī)則在內(nèi)存中的模型,由規(guī)則解析器106生 成。其核心元素包括規(guī)則上下文元素、規(guī)則邏輯表述和驗證輸出,等等。
XML數(shù)據(jù)提取器108用于提取XML文檔對象模型樹的節(jié)點。XPath是 一種被廣泛使用的語言,用于對于XML文檔的各部分進行尋址,以便提取 數(shù)據(jù)對象。XPath不僅僅用于單獨的XML查詢語言,而且經(jīng)常用于主語言, 如XQuery和XSLT。例如,XPath查詢包括一個地址路徑和輸出表達。 該地址路徑是一個地址序列,用于確定從文檔根節(jié)點到需要的元素。輸出 表達確定形成結(jié)果的一個匹配元素的部分或函數(shù)。
用于數(shù)據(jù)提取的用戶交互模塊,即用戶接口109。用戶接口109,用于 幫助用戶從目標XML文檔中選擇需要驗證的元素。這種數(shù)據(jù)的例子可以是 具有相同類型(type)的元素,整個DOM樹的一個子樹,或者使用XPath 模式(pattern)過濾出的一組元素,等等。這種數(shù)據(jù)選擇和/或選定的數(shù)據(jù) 元素的信息,可以傳遞到規(guī)則選擇模塊110,用于確定用于部分驗證的細粒 度單元,如規(guī)則或斷言。
規(guī)則選擇模塊110,用于與終端用戶/應用交互,以便選擇用于聰、汪的 規(guī)則。用于規(guī)則選擇的信息,可以由用戶生成,如用戶直接從用戶接口選 擇要使用的規(guī)則/斷言,或者可以自動生成,例如使用來自用于數(shù)據(jù)提取的 用戶交互模塊109的數(shù)據(jù)選擇信息來生成。最后,用于規(guī)則選擇的信息被傳 遞給規(guī)則解析器,來生成規(guī)則對象模型以用于驗證。
規(guī)則上下文組裝器(populator) 111,用于組裝每個規(guī)則的執(zhí)行上下 文(Context) 112。如果多個規(guī)則具有相關(guān)的執(zhí)行范圍,則這些上下文可 以;故多個規(guī)則共享。規(guī)則執(zhí)行上下文112,是每個規(guī)則應用于XML實例文檔的具體執(zhí)行范 圍。這些規(guī)則執(zhí)行上下文可以標記為分等級的和可共享的。例如,在圖5 中,上下文A、 B、 C和D是分別用于不同規(guī)則的規(guī)則執(zhí)上下文。在圖中, 上下文A是"po:order",其含義是在根節(jié)點下的全部訂購元素。規(guī)則組A 的全部規(guī)則,在該上下文(全部訂購元素)中被評估。然后,組裝后的上 下文A,可以注冊到該-瞼證處理的上下文注冊表。
上下文B是".[(^orderStatus-'Paid'",其含義是那些具有已付款 (paid)狀態(tài)的定購元素。上下文B的范圍被評估,可以基于上下文A的 范圍,而不是DOM樹的根元素。上下文C的范圍被評估,也可以基于上下 文B的范圍,其指示已付款定單,而不是全部訂單。該上下文A和B,均可 以從驗證處理的上下文注冊表中提取。
在上下文A之下的規(guī)則,將在它們的執(zhí)行上下文(全部訂購元素)之 下#^出(fire)。當組裝上下文B時,如果沒有上下文層級,可以從^f艮節(jié) 點確定這些元素,而不是從已經(jīng)組裝的定購元素確定。根據(jù)本發(fā)明的一個 實施例,上下文B的組裝,可以基于已完成的訂單元素(上下文A),而不 是基于全部根節(jié)點,因此可以減少提取過程的工作量。
規(guī)則匹配器113,用于在當前的規(guī)則執(zhí)行上下文之下,評估每個規(guī)則的 斷言。如果評估結(jié)果為假,該規(guī)則被觸發(fā)。例如,上面提及到的規(guī)則如下 描述了員工的性別(sex屬性)和頭銜(title屬性)必須一致、而且必須有 序列號serialNumber和部門Id以及序列號必須以部門Id開頭。
<m!e context="/em:employees/em:employee">
Assert
test="(@sex='Male, and @title='Mr') or (@sex='Female, and (@title='Mrs, or @title='Miss'))"> The value of title does not match the value of sex.
</assert>
<asserttest="@serialNumber and @deptld">
Both serialNumber and deptld must be present.
</3SSC]1>
</mle>那么,在匹配這些斷言時,規(guī)則匹配器113首先基于XPath語句即元素 rule的context屬性一國"/em:employees/em:employee,,從XML實例文檔中 獲取DOM元素。在XML實例文檔中執(zhí)行該XPath語句獲取到如下的元素
<employee seriarNumbe產(chǎn)"SOADC913247" sex="FeMale" title="Mr" deptId="SOADC"〉
</employee>
接著,匹配第一個斷言,在上述獲取到的DOM元素上執(zhí)行test的屬性 值即"(@sex='Male, and @title='Mr,) or (@sex='Female' and (@title='Mrs, or @title='Miss,))',。返回的值為4叚,即該斷言滿足條件, 會被觸發(fā),"The value of title does not match the value of sex"會作為驗證 結(jié)果輸出。而在匹配第二個斷言時,執(zhí)行test的屬性值即"@serialNumber and@deptld"。返回的值為真,即該斷言不滿足條件而不會被觸發(fā)。
根據(jù)本發(fā)明的一個實施例,既可以對整個XML實例文檔進行關(guān)于全部 規(guī)則、或者部分規(guī)則的驗證,又可以對XML實例的部分數(shù)據(jù)進行關(guān)于全部 規(guī)則、或者部分規(guī)則的驗證。當驗證的數(shù)據(jù)對象和規(guī)則對象確定后,驗證 的執(zhí)行過程可以與上述一樣,即針對這些驗證的數(shù)據(jù)對象,在一定的執(zhí)行 上下文之下,應用執(zhí)行這些規(guī)則對象。
用戶定義的函數(shù)(Function )114。除了本身的Xpath函數(shù)之外,用戶 可,能需要擴展自定義的函數(shù)(功能),以便實施特別要求。用戶定義的函 數(shù)不僅僅用于幫助從XML文檔中提取數(shù)據(jù),而且還可以用于組裝規(guī)則執(zhí)行 上下文,并評估規(guī)則的斷言。
輸出生成器注冊表(Registry) 115,包括多個不同的輸出生成器, 其由用戶基于他們的要求進行自定義。
用戶定義的輸出生成器116,用于用戶定義輸出,其被注冊到輸出生成 器注冊表115,以幫助生成驗證報告。
驗證報告117,是約束規(guī)則應用到XML文檔的最終執(zhí)行結(jié)果。該結(jié)果 可以根據(jù)用戶定義的輸出來產(chǎn)生。圖6示出了根據(jù)本發(fā)明另 一 實施例的用于驗證XML文檔的方法的流程 圖。該方法包括以下步驟。在步驟201,確定被驗證的數(shù)據(jù)實例。根據(jù)其真 正的需求和應用邏輯,其包括不同的結(jié)構(gòu)約束或業(yè)務控制約束等等,確定 XML實例文檔。
在步驟202,組裝目標對象模型??梢曰赪3CDOM標準,使用XML 解析器來解析XML文檔,將XML數(shù)據(jù)在內(nèi)存中表示為一對象樹,并提供 一個面向?qū)ο蟮腲~口來訪問對象樹中的XML數(shù)據(jù)對象。
在步驟203,使用用戶定義的數(shù)據(jù)提取規(guī)則提取要被驗證的元素,即 XML數(shù)據(jù)對象。才艮據(jù)用戶定義的數(shù)據(jù)提取規(guī)則,用戶可以從目標XML文 檔中選捧要被驗證的元素。例如,從整個DOM樹提取一些元素,其具有相 同的類型,等等。
在步驟204,確定約束語義,即確定用于驗證的規(guī)則。基于上述得到的 XML數(shù)據(jù)實例文檔,確定真正的約束語義。例如,人的姓和名必須是字母 和數(shù)字的組合,但是不能由數(shù)字起始。
在步驟205,使用XML數(shù)據(jù)提取語言(如XPath等)表述約束,形成 Schematron文檔。這些約束語義,使用XML數(shù)據(jù)提取語言(如XPath 1.0 等)來表述。例如,約束"Can contain only alphanumeric and can only start
with an alphabet"可以4吏用XPath表述為
not(normalize-space(translate("
,》
'* ')))
在步驟206,解析Schematron文檔來組裝規(guī)則對象模型。除了步驟205
之外,該步驟根據(jù)相關(guān)的不同Schematron版本解析器,來解析約束規(guī)則文
檔,然后在內(nèi)存中組裝規(guī)則對象模型,其將被用于評估XML實例文檔。
在步驟207,重復解析Schematron文檔。如果約束被表述為多條分立
的規(guī)則,或者這些規(guī)則基于不同的Schematron版本,則可以重復執(zhí)行步驟
206。
在步驟208,選出必要的規(guī)則。如果用戶僅僅需要規(guī)則對象模型的部分
21規(guī)則,可以從整個解析的規(guī)則對象模型過濾掉不使用的規(guī)則對象。該步驟 可以幫助減少要發(fā)出的規(guī)則,這樣執(zhí)行性能可以提高。例如,如果一個
而XML實例文檔僅僅包括WSDL元素,這種情況下,Schematron文檔的 XSD元素相關(guān)的規(guī)則可以被過濾掉,不必被發(fā)出。過濾規(guī)則可以基于業(yè)務 i吾義或由用戶定義。
在步驟209,組裝強化的規(guī)則對象模型。基于步驟206和步驟208,可以 獲得強化的規(guī)則對象模型,其僅僅包括必要的規(guī)則。
在步驟210,組裝規(guī)則執(zhí)行上下文。每個規(guī)則有其執(zhí)行上下文,該步驟 幫助創(chuàng)建規(guī)則的上下文,并可以維持該上下文的層次。在組裝規(guī)則執(zhí)行的
注冊器中,如果存在則直接從中抓取使用,否則會重新計算出上下文并同 時注冊到上下文注冊器中去。
具體的過程可以釆用如下文所述的方法。上下文CA、 CB、 CC和CD 分別是應用于規(guī)則集A、 B、 C和D的上下文,例如上下文CA的表達式是
"/em:employees/em:empIoyee/em:assets,,,表示了員工元素下所有的資產(chǎn) 信息。那么規(guī)則集A就是在上下文所有的資產(chǎn)信息下執(zhí)行。同時該上下文 也會被注冊到上下文注冊器已被復用。 上下文CB的表達式是
"/em: employ ees/em: employ ee/em: assets/em: asset [@status=' active',, , 表示了員工元素下所有狀態(tài)為激活的資產(chǎn)信息。上下文CD的表達式是
"/em: employees/em: employee/em: assets/em: asset [@status=' unused'],, , 表示了員工元素下所有狀態(tài)為未被使用的資產(chǎn)信息。4艮顯然,上下文CB和 CD的元素都是基于上下文CA的一個子集,那么在計算上下文CB和CD的 時候就可以充分使用已經(jīng)存在于注冊器中的上下文CA。 而上下文CC的表達式是
"/em:employees/em:employee/em:assets/em:asset[@status='active,/em:co mpliancelnfo/em:check",表示了員工元素下所有狀態(tài)為激活的資產(chǎn)信息的安全檢查信息。很顯然,上下文CC的元素都是基于上下文CB的子集, 那么在計算上下文CC的時候就也可以充分使用已經(jīng)存在于注冊器中的上 下文CB。
在步驟211,從上下文注冊表中提取規(guī)則執(zhí)行上下文。如果規(guī)則執(zhí)行上 下文已經(jīng)被組裝過,則從執(zhí)行上下文注冊表提取該規(guī)則執(zhí)行上下文。
在步驟212,注冊組裝的規(guī)則執(zhí)行上下文。如果規(guī)則執(zhí)行上下文第一次 被組裝,則可以將該規(guī)則執(zhí)行上下文注冊到執(zhí)行上下文注冊表,以便共享 和重復使用。
在步驟213,執(zhí)行符合事實的規(guī)則。基于在步驟210組裝的上下文,該 步驟用于執(zhí)行符合事實的具體規(guī)則。當一個策略被觸發(fā),相應的輸出模塊 將^J^出(fired)。
在步驟214,如果需要快速退出機制的規(guī)則被觸發(fā),則退出執(zhí)行過程。
在步驟215,生成驗證輸出。根據(jù)步驟213,該步驟用于根據(jù)用戶定義 的輸出格式生成驗證執(zhí)行輸出。
本發(fā)明還提供了 一種用于驗證XML文檔的系統(tǒng),包括數(shù)據(jù)解析裝 置,用于解析至少一待驗證的XML文檔,并將其中的XML數(shù)據(jù)表示為 至少一數(shù)據(jù)對象模型;規(guī)則解析裝置,用于解析至少一規(guī)則文檔,并創(chuàng)建 規(guī)則對象模型;提取裝置,用于從所述數(shù)據(jù)對象模型和規(guī)則對象模型,提 取至少部分規(guī)則對象及至少部分數(shù)據(jù)對象;以及驗證裝置,用于針對所提 取的至少部分數(shù)據(jù)對象及至少部分規(guī)則對象,在相應的執(zhí)行上下文中執(zhí)行 驗證。
其中,所述數(shù)據(jù)解析裝置在內(nèi)存中創(chuàng)建所述數(shù)據(jù)對象模型,所述規(guī)則 解析裝置在內(nèi)存中創(chuàng)建所述規(guī)則對象模型。
其中,所述規(guī)則文檔為Schematron文檔,所述規(guī)則對象模型中的規(guī) 則對象4呆持與所述Schematron文件里面的元素相應的層次關(guān)系。
其中,所述XML文檔中的每個元素,被映射到數(shù)據(jù)對象模型中的一 個數(shù)據(jù)對象,所述數(shù)據(jù)對象模型保持與所述待驗證的XML文檔的元素相 應的層次關(guān)系。其中,所述提取裝置根據(jù)預先確定的規(guī)則提取標準,從所述規(guī)則對象 模型,提取至少部分規(guī)則對象。
其中,所述提取裝置根據(jù)預先確定的數(shù)據(jù)對象提取標準,從所述數(shù)據(jù) 對象模型,提取相應的數(shù)據(jù)對象。
其中,進一步包括執(zhí)行上下文生成裝置,用于生成所提取的至少一 規(guī)則對象的執(zhí)行上下文,并將該執(zhí)行上下文注冊到一上下文庫中;所述驗 證裝置將所述至少部分規(guī)則對象在該執(zhí)行上下文中執(zhí)行驗證。
其中,進一步包括檢索裝置,用于從一上下文庫中,檢索所提取的 一規(guī)則對象的執(zhí)行上下文,將所述規(guī)則對象在該執(zhí)行上下文中執(zhí)行驗證。
其中,所述提取裝置根據(jù)預定的函數(shù)從所述數(shù)據(jù)對象模型和規(guī)則對象 模型,提取至少部分規(guī)則對象及至少部分數(shù)據(jù)對象。
其中,所述執(zhí)行上下文生成裝置根據(jù)預定的函數(shù)生成所提取的至少一 MJ,J對象的執(zhí)行上下文。
其中,所述驗證裝置進一步配置為響應于需要快速退出的規(guī)則被觸發(fā), 而停止執(zhí)行驗證。
本發(fā)明提供了 一種方法和系統(tǒng),用于高性能和高靈活性的基于 Schematron的XML驗證。本發(fā)明的一實施例,利用了數(shù)據(jù)抽取和上下文共 享。 一步式執(zhí)行,以避免基于XSLT的兩次轉(zhuǎn)換,性能因此顯著提高。規(guī) 則的上下文可共享,因此規(guī)則的表示可以很容易地被讀取,規(guī)則執(zhí)行的范 圍可以減小。因此,規(guī)則執(zhí)行的性能可以提高。在本發(fā)明的一個實施例中, 可共享的規(guī)則執(zhí)行的上下文是每個規(guī)則應用到XML實例文檔的具體的執(zhí) 行范圍。這些規(guī)則執(zhí)行上下文可以標記為分等級的和可共享的。
根據(jù)本發(fā)明的 一個實施例,可以基于內(nèi)存中的規(guī)則對象模型和擴展的 驗證引擎,可以實現(xiàn)高性能的、fail-fast Schematron驗證?;A(chǔ)的XML數(shù) 據(jù)提取和XML解析器,可以實施fail-fast機制。而基于XSLT的方式總是繼 續(xù)執(zhí)行轉(zhuǎn)換處理,而不管實際執(zhí)行的狀態(tài)。
根據(jù)本發(fā)明的 一個實施例,可以利用可共享的上下文和精確的規(guī)則匹 配,優(yōu)化了規(guī)則執(zhí)行引擎,根據(jù)本發(fā)明的一個實施例,用于部分驗證的靈活機制,其利用內(nèi)存中
的規(guī)則對象模型和XML數(shù)據(jù)模型,用于數(shù)據(jù)和規(guī)則提取,以便利用用戶在 Schematron文檔(規(guī)則和斷言)中定義的目標XML元素組和細粒度單元。 再如,繼承的系統(tǒng)包括一個已有的Schematron符合版本1.5,而新生成的 Schematron文檔4吏用ISO Schematron版本,需要與繼承的Schematron版本 1.5進行協(xié)調(diào)。在這種情況下,混合的Schematron需要共同工作。對于基于 XSLT的Schematron實現(xiàn),如果使用不同Schematron版本,很難對這種混 合的Schematron規(guī)則進行協(xié)調(diào)。
使用Schematron文檔的選定的細粒度單元,進行靈活的驗證。如果用 戶僅僅需要部分規(guī)則對象模型,可以從整個解析的規(guī)則對象模型中過濾出 未使用的規(guī)則對象。該步驟可以幫助減少將被發(fā)出的規(guī)則,以便提高執(zhí)行 性能。例如,如果一個Schematron規(guī)則文檔包括WSDL元素相關(guān)的規(guī)則和 XSD元素相關(guān)的規(guī)則,而XML實例文檔僅僅包含WSDL元素,過濾后 Schematron文檔中XSD相關(guān)的規(guī)則就可以被過濾掉而不會被發(fā)出。過濾 器的規(guī)則可以基于業(yè)務語義或由用戶定義。
本發(fā)明還提供了 一種存儲介質(zhì)或信號載體,其中包括用于執(zhí)行根據(jù)本 發(fā)明的方法的指令。
以上結(jié)合優(yōu)選法方案對本發(fā)明進行了詳細的描述,但是可以理解,以 上實施例僅用于說明而非限定本發(fā)明。本領(lǐng)域的技術(shù)人員可以對本發(fā)明的 所示方案進行修改而不脫離本發(fā)明的范圍和精神。
權(quán)利要求
1.一種用于驗證XML文檔的方法,包括解析至少一待驗證的XML文檔,并將其中的XML數(shù)據(jù)表示為至少一數(shù)據(jù)對象模型;解析至少一規(guī)則文檔,并創(chuàng)建規(guī)則對象模型;從所述數(shù)據(jù)對象模型和規(guī)則對象模型,提取至少數(shù)據(jù)部分對象及至少部分規(guī)則對象;以及針對所提取的至少部分數(shù)據(jù)對象及至少部分規(guī)則對象,在相應的執(zhí)行上下文中執(zhí)行驗證。
2. 根據(jù)權(quán)利要求l所述的方法,其中,所述數(shù)據(jù)對象模型和所述規(guī)則 對象模型在內(nèi)存中創(chuàng)建。
3. 根據(jù)權(quán)利要求1或2所述的方法,其中,所述規(guī)則文檔為Schematron 文檔,所述規(guī)則對象模型中的規(guī)則對象保持與所述Schematron文件里面 的元素相應的層次關(guān)系。
4. 根據(jù)權(quán)利要求1或2所述的方法,其中,所述XML文檔中的每個 元素,被映射到數(shù)據(jù)對象模型中的一個數(shù)據(jù)對象,所述數(shù)據(jù)對象保持與所 述待驗證的XML文檔的元素相應的層次關(guān)系。
5. 根據(jù)權(quán)利要求1或2所述的方法,其中,根據(jù)預先確定的規(guī)則提取 標準,從所述規(guī)則對象模型,提取至少部分規(guī)則對象。
6. 根據(jù)權(quán)利要求1或2所述的方法,其中,根據(jù)預先確定的數(shù)據(jù)對象 提取標準,從所述數(shù)據(jù)對象模型,提取至少部分數(shù)據(jù)對象。
7,根據(jù)權(quán)利要求1或2所述的方法,其中進一步包括以下步驟 生成所提取的至少一規(guī)則對象的執(zhí)行上下文,并將該執(zhí)行上下文注冊到一上下文庫中,將所述至少一規(guī)則對象在該執(zhí)行上下文中執(zhí)行驗證。
8.根據(jù)權(quán)利要求1或2所述的方法,其中進一步包括 從一上下文庫中,檢索所提取的一規(guī)則對象的執(zhí)行上下文,將所述規(guī)則對象在該執(zhí)行上下文中執(zhí)行驗證。
9. 根據(jù)權(quán)利要求1或2所述的方法,其中,根據(jù)預定的函數(shù)從所述數(shù) 據(jù)對象模型和規(guī)則對象模型,提取至少部分規(guī)則對象及至少部分數(shù)據(jù)對象。
10. 根據(jù)權(quán)利要求7所述的方法,其中,根據(jù)預定的函數(shù)生成所提取 的至少一規(guī)則對象的執(zhí)行上下文。
11. 根據(jù)權(quán)利要求1或2所述的方法,其中進一步包括響應于需要快 速退出的規(guī)則被觸發(fā),則停止執(zhí)行驗證。
12. —種用于驗證XML文檔的系統(tǒng),包4舌數(shù)據(jù)解析裝置,用于解析至少 一待驗證的XML文檔,并將其中的XML 數(shù)據(jù)表示為至少 一數(shù)據(jù)對象模型;規(guī)則解析裝置,用于解析至少一規(guī)則文檔,并創(chuàng)建規(guī)則對象模型;提取裝置,用于從所述數(shù)據(jù)對象模型和規(guī)則對象模型,提取至少部分 數(shù)據(jù)對象及至少部分規(guī)則對象;以及驗證裝置,用于針對所提取的至少部分數(shù)據(jù)對象及至少部分規(guī)則對象, 在相應的執(zhí)行上下文中執(zhí)行驗證。
13. 根據(jù)權(quán)利要求12所述的系統(tǒng),其中,所述數(shù)據(jù)解析裝置在內(nèi)存中 創(chuàng)建所述數(shù)據(jù)對象模型,所述規(guī)則解析裝置在內(nèi)存中創(chuàng)建所述規(guī)則對象模 型。
14. 根據(jù)權(quán)利要求12或13所述的系統(tǒng),其中,所述規(guī)則文檔為 Schematron文檔,所述規(guī)則對象模型中的規(guī)則對象保持與所述Schematron 文件里面的元素相應的層次關(guān)系。
15. 根據(jù)權(quán)利要求12或13所述的系統(tǒng),其中,所述XML文檔中的每 個元素,被映射到數(shù)據(jù)對象模型中的一個數(shù)據(jù)對象,所述數(shù)據(jù)對象保持與 所述待驗證的XML文檔的元素相應的層次關(guān)系。
16. 根據(jù)權(quán)利要求12或13所述的系統(tǒng),其中,所述提取裝置根據(jù)預 先確定的規(guī)則提取標準,從所述規(guī)則對象模型,提取至少部分規(guī)則對象。
17. 根據(jù)權(quán)利要求12或13所述的系統(tǒng),其中,所述提取裝置根據(jù)預 先確定的數(shù)據(jù)對象提取標準,從所述數(shù)據(jù)對象模型,提取相應的數(shù)據(jù)對象。
18. 根據(jù)權(quán)利要求12或13所述的系統(tǒng),其中進一步包括執(zhí)行上下文生成裝置,用于生成所提取的至少一規(guī)則對象的執(zhí)行上下文,并將該執(zhí)行上下文注冊到一上下文庫中;所述驗證裝置將所述至少一 規(guī)則對象在該執(zhí)行上下文中執(zhí)行驗證。
19. 根據(jù)權(quán)利要求12或13所述的系統(tǒng),其中進一步包括檢索裝置, 用于從一上下文庫中,檢索所提取的一規(guī)則對象的執(zhí)行上下文;驗證裝置 進一 步配置為將所述規(guī)則對象在該執(zhí)行上下文中執(zhí)行驗證。
20. 根據(jù)權(quán)利要求12或13所述的系統(tǒng),其中,所述提取裝置根據(jù)預 定的函數(shù)從所述數(shù)據(jù)對象模型和規(guī)則對象模型,提取至少部分規(guī)則對象及 至少部分數(shù)據(jù)對象。
21. 根據(jù)權(quán)利要求18所述的系統(tǒng),其中,所述執(zhí)行上下文生成裝置根 據(jù)預定的函數(shù)生成所提取的至少一規(guī)則對象的執(zhí)行上下文。
22. 根據(jù)權(quán)利要求12或13所述的系統(tǒng),其中所述驗證裝置進一步配 置為響應于需要快速退出的規(guī)則被觸發(fā),而停止執(zhí)行驗證。
全文摘要
本發(fā)明提供了一種用于驗證XML文檔的方法和系統(tǒng)。該方法包括解析至少一待驗證的XML文檔,并將其中的XML數(shù)據(jù)表示為至少一數(shù)據(jù)對象模型。解析至少一規(guī)則文檔,并創(chuàng)建規(guī)則對象模型。從所述數(shù)據(jù)對象模型和規(guī)則對象模型,提取至少部分規(guī)則對象及至少部分數(shù)據(jù)對象。針對所提取的至少部分數(shù)據(jù)對象及至少部分規(guī)則對象,在相應的執(zhí)行上下文中執(zhí)行驗證。
文檔編號G06F17/22GK101634982SQ20081013407
公開日2010年1月27日 申請日期2008年7月24日 優(yōu)先權(quán)日2008年7月24日
發(fā)明者D·G·克拉克, T·伯德溫, 劉昕鵬, 周宇辰, 王夕寧, 亮 薛 申請人:國際商業(yè)機器公司