亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于XML Schema XML文檔驗證算法

        2019-02-20 02:07:48吳家菊紀斌劉振吉陳泉根
        現(xiàn)代電子技術(shù) 2019年4期
        關(guān)鍵詞:語法錯誤

        吳家菊 紀斌 劉振吉 陳泉根

        關(guān)鍵詞: XML Schema; XML; 文檔驗證算法; 語法錯誤; 錯誤信息處理; 錯誤位置追蹤

        中圖分類號: TN911?34; TP311 ? ? ? ? ? ? ? ? 文獻標識碼: A ? ? ? ? ? ? ? ? ? ?文章編號: 1004?373X(2019)04?0071?05

        An XML document validation algorithm based on XML Schema

        WU Jiaju, JI Bin, LIU Zhenji, CHEN Quangen

        (Institute of Computer Application, China Academy of Engineering Physics, Mianyang 621999, China)

        Abstract: The validation mechanism of the XML document is researched, and an XML document validation algorithm based on XML Schema is proposed in this paper. In the algorithm, the data syntax rules, restraint requirement and type requirement are described by using XML Schema, which can not only verify the syntax correctness of the XML document on the basis of XML Schema, but also provide the processing mechanism of syntax error and support error position tracking. The algorithm can output error information in order according to the error occurring sequence if syntax errors exist in the XML document. The algorithm tracks syntax error position by means of mouse clicking after error information processing, so that the data editing personnel can modify the XML document efficiently and improve their own work efficiency. The algorithm was integrated into an XML editor and a series of experiments were carried out, so as to verify the correctness of the algorithm. The results show that the algorithm can achieve the design requirement.

        Keywords: XML Schema; XML; document validation algorithm; syntax error; error information processing; error position tracking

        0 ?引 ?言

        XML(Extensible Markup Language)作為一種通用的數(shù)據(jù)描述和交換語言,在Internet上和企業(yè)內(nèi)部得到了廣泛應用,當前在武器裝備綜合保障領(lǐng)域XML被廣泛用于描述綜合保障數(shù)據(jù)[1]。對于已編輯的XML數(shù)據(jù),在其應用到綜合保障系統(tǒng)或其他應用領(lǐng)域之前,需要對其進行語法驗證。XML Schema是W3C Recommendation推薦的標準,可用于設計、約束和驗證XML文檔。XML Schema文檔中明確定義了XML文檔中元素的應用規(guī)則,比如元素的名稱、具有的屬性、出現(xiàn)次序、出現(xiàn)次數(shù)、數(shù)據(jù)類型、父元素、子元素等[2?3]。因此基于XML Schema設計的XML文檔可以使用XML Schema來驗證文檔的語法正確性。

        自21世紀初XML Schema成為W3C Recommendation推薦標準以來,XML Schema由于其諸多優(yōu)勢正逐步替代DTD(Document Type Definition)成為XML設計、約束和驗證的主流方式[4]。國內(nèi)外有諸多基于XML Schema驗證XML文檔的研究。余雙等學者在中科院軟件所開發(fā)的OnceStAXParser的基礎(chǔ)上設計實現(xiàn)了基于XML Schema的高效XML驗證器[5?6]。王偉良等學者首先基于XML Schema構(gòu)造了其抽象模型(Abstract XML Schema Model, AXSM),然后提出了一種基于XML Schema驗證XML文檔的方法[7]。許桂艷等學者基于SAX(Simple API for XML)解析實現(xiàn)了一種基于XML Schema驗證XML文檔的方法[8?9]。其他學者在研究過程中提出了其他的驗證方法。這些方法都實現(xiàn)了基于XML Schema驗證XML文檔,并且能夠有效地輸出錯誤信息。隨著深入的研究發(fā)現(xiàn),這些方法或基于特定的平臺或解析器,或作為獨立的系統(tǒng)存在,在跨平臺可移植性、輕量化設計、易集成性等方面存有缺陷,并且在實際應用中不支持錯誤位置追蹤。

        為解決當前基于XML Schema驗證XML文檔研究中存在的缺陷和實現(xiàn)依據(jù)錯誤信息追蹤錯誤位置,本文提出一種跨平臺可移植性性好、輕量化設計、易于與其他系統(tǒng)集成的基于XML Schema驗證XML文檔的算法。該方法基于DOM(Document Object Model)[10]解析,支持依據(jù)錯誤信息追蹤錯誤位置。通過配合使用錯誤信息,方便XML數(shù)據(jù)編輯人員找尋文檔中語法錯誤位置,提高了XML數(shù)據(jù)編輯人員的工作效率。當前該方法已集成到某XML編輯器中,在實踐中驗證了其可行性。

        1 ?算法設計

        為了實現(xiàn)該算法跨平臺可移植性、輕量化設計、易集成性,首先對該算法進行設計。算法設計如圖1所示。算法后續(xù)描述使用Java編程語言,對于其他編程語言,則只需用該編程語言實現(xiàn)算法的設計。

        為了完整地描述該算法的設計思想,算法描述從已編輯并保存的XML文檔開始。若將該算法移植或集成到XML編輯器中時,可以省略前兩步,直接依據(jù)保存已編輯XML數(shù)據(jù)的Document類型文檔獲取其克隆文檔,然后執(zhí)行后續(xù)的步驟。

        2 ?算法實現(xiàn)

        為保存驗證過程中語法錯誤信息,在該算法中定義一個String類型的變量(為方便描述,命名為content。后續(xù)對變量命名原因相同)。在發(fā)生語法錯誤時由錯誤處理函數(shù)獲取錯誤信息,并將錯誤信息更新到content中。最后將content中保存的XML文檔所有語法錯誤信息輸出。

        2.1 ?定義錯誤類

        為實現(xiàn)本文后面描述算法的錯誤位置追蹤功能,在該算法中將驗證過程中出現(xiàn)的每一個語法錯誤都實例化為一個錯誤對象,為此在該算法中定義一個錯誤類(命名為Error)。Error類的定義過程包括:

        1) 在Error中定義兩個變量:一個為Node類型的變量(命名為node);一個為int類型的變量(命名為p1)。

        2) 在Error中定義構(gòu)造函數(shù),構(gòu)造函數(shù)有兩個傳入?yún)?shù):一個為Node類型,對應于XML文檔的解析文檔中存在語法錯誤的節(jié)點;另一個為int類型,對應于上述定義的content變量表示的字符串長度。

        3) 在構(gòu)造函數(shù)中定義變量賦值語句:將Node類型的傳入?yún)?shù)賦值給Error類中定義的node變量;將int類型的傳入?yún)?shù)賦值給Error類中定義的p1變量。

        此外在該算法中定義一個ArrayList<Error>類型的變量errors。該變量中保存按照驗證過程實例化的錯誤對象,錯誤對象加入鏈表的順序按照驗證過程中語法錯誤順序。

        2.2 ?DOM解析XML文檔

        DOM可以以一種獨立于平臺和語言的方式訪問和修改一個文檔的內(nèi)容和結(jié)構(gòu),DOM實際上是以面向?qū)ο蠓绞矫枋龅奈臋n模型[11]。使用DOM定義的接口來獲得對文檔中所有元素進行訪問的入口,創(chuàng)建文檔,瀏覽文檔結(jié)構(gòu),添加、修改或刪除文檔元素和內(nèi)容[12]。DOM解析XML文檔后所生成的文檔樹會保存在內(nèi)存中,DOM的這一特性是本算法實現(xiàn)追蹤錯誤發(fā)生位置的基礎(chǔ)。

        為保證驗證過程不對源XML文檔造成影響,獲取了XML解析文檔的克隆文檔,該驗證算法的所有后續(xù)操作均在克隆文檔中進行。

        在本文算法中,DOM解析XML文檔以獲取解析文檔,繼而獲取解析文檔的克隆文檔的流程圖如圖2所示。

        首先,用Java語言實現(xiàn)DOM編程接口以獲取解析器實例;其次,獲取XML文檔的URL路徑,并將該URL路徑作為DOM解析器實例的傳入?yún)?shù);第三,DOM解析器依據(jù)傳入?yún)?shù)解析XML文檔,獲取解析文檔(命名為doc);第四,解析文檔doc調(diào)用cloneNode()方法獲取doc的克隆文檔(命名為clone)。

        2.3 ?對clone執(zhí)行相關(guān)操作

        獲取clone的DOMConfiguration對象,并為該對象設置相關(guān)參數(shù)的步驟如下:

        1) clone通過調(diào)用getDomConfig()方法獲取其DOMConfiguration對象(命名為config);

        2) config對象調(diào)用setParameter(String name, Object value)方法,name值為“schema?type”,value值為“http://www.w3.org/2001/XMLSchema”;

        3) config對象調(diào)用setParameter(String name, Object value)方法,name值為“schema?location”,value值為XML Schema文檔的URL路徑;

        4) config對象調(diào)用setParameter(String name, Object value)方法,name值為“validate”,value值為true;

        5) config對象調(diào)用setParameter(String name, Object value)方法,name值為“error?handler”,value值為錯誤處理類的實例化對象。

        2.4 ?定義錯誤處理類

        為處理驗證過程中出現(xiàn)的語法錯誤,獲取錯誤信息以及保存錯誤信息,在該算法中定義了一個錯誤處理類(命名為handleError),并在該類中定義錯誤處理函數(shù)。handleError實現(xiàn)DOMErrorHandler接口,錯誤處理函數(shù)的定義過程如下:

        1) 錯誤處理函數(shù)有一個DOMError類型的傳入?yún)?shù)(err)。

        2) 定義一個DOMLocator類型的變量(loc),并將err調(diào)用getLocation()方法獲取的值賦值給loc;

        3) 將驗證過程中的語法錯誤實例化為Error對象,并保存在errors變量中,以備進行錯誤信息追蹤;

        4) 判斷語法錯誤類型;

        5) 更新錯誤信息,以備將錯誤信息輸出。

        其中語法錯誤實例化Error對象的過程包括:

        依據(jù)clone文檔的語法錯誤節(jié)點在文檔doc中找到對應節(jié)點node;調(diào)用Error類的構(gòu)造函數(shù)并將node和content.length()作為傳入?yún)?shù),獲取Error對象。XML文檔第一次出現(xiàn)語法錯誤時,在content未更新,因此content.length()=0。

        依據(jù)clone文檔的語法錯誤節(jié)點在doc中找到對應節(jié)點node的流程圖如圖3所示。其本質(zhì)是從當前發(fā)生語法錯誤節(jié)點開始向根節(jié)點追溯,在追溯過程中依次保存在錯誤節(jié)點之前的兄弟節(jié)點個數(shù)、在錯誤節(jié)點的父節(jié)點之前的兄弟節(jié)點個數(shù)、在錯誤節(jié)點的父節(jié)點的父節(jié)點之前的兄弟節(jié)點個數(shù)…,依次類推,直到到達XML文檔的根節(jié)點,最后得到一個ArrayList<Integer>類型的變量。然后根據(jù)變量中保存的int類型的數(shù)據(jù),在doc中從根節(jié)點開始向下追溯,直至在doc中找到與clone中錯誤節(jié)點對應的節(jié)點。

        其中判斷語法錯誤類型的過程包括:

        1) err通過調(diào)用getSerivity()方法獲取當前語法錯誤類型。

        2) 判斷該錯誤類型屬于DOMError. SERIT? Y_

        WARNING,DOMError.SERI? TY_ERROR,DOMError.SERITY_FATAL_ERROR中的哪一類。

        3) 將描述錯誤類型的相關(guān)信息更新到保存錯誤信息的content變量中。

        判斷錯誤類型的流程圖如圖4所示。該步驟的主要目的是判斷錯誤類型并將描述錯誤類型的信息更新到content中,以在輸出的錯誤信息中標明該錯誤屬于何種類型。延續(xù)上一步在content中更新的表示錯誤類型的內(nèi)容,err通過調(diào)用getMessage()方法獲取詳細錯誤信息,并將錯誤信息更新到content中,然后在content中已有內(nèi)容后添加一個換行符,以便將描述不同錯誤信息分行輸出。

        2.5 ?定義錯誤追蹤函數(shù)

        將錯誤信息輸出的方式有多種,既可以以文本形式輸出,也可以定義一個信息輸出面板用于輸出錯誤信息。為了達到該算法能夠依據(jù)錯誤信息追蹤錯誤位置的目的,在該算法中采用信息輸出面板的方式輸出錯誤信息。具體來說是應用GUI編程,首先,定義一個JFrame;然后,在JFrame中嵌入一個JEditorPane;第三,判斷content的內(nèi)容是否為空,若為空,則將content變量的內(nèi)容設為“XML文檔語法正確”;最后,JEditorPane調(diào)用setText()方法,將保存錯誤信息的content作為JEditorPane的內(nèi)容,這樣就可以將保存錯誤信息的content變量的內(nèi)容輸出。

        此外為直觀顯示錯誤信息追蹤效果,XML文檔的解析文檔doc同樣要以信息輸出面板的方式輸出。同錯誤信息輸出一樣,采用GUI編程,將解析文檔doc中的每個元素的名稱、屬性、內(nèi)容、子元素、父元素等信息按照XML文檔中元素的順序輸出。

        錯誤位置追蹤函數(shù)本質(zhì)是一個JEditorPane的鼠標點擊事件函數(shù),當鼠標點擊在JEditorPane上輸出的錯誤信息時,實現(xiàn)依據(jù)錯誤信息追蹤語法錯誤位置。

        鼠標點擊事件函數(shù)定義過程包括:

        1) 函數(shù)有一個MouseEvent類型的傳入?yún)?shù)(命名為e);

        2) 在鼠標點擊事件函數(shù)中定義三個int類型的變量和一個Node類型的變量;

        3) 依據(jù)相關(guān)變量確定鼠標點擊的錯誤信息并將errors變量中對應于錯誤信息的error對象給相關(guān)變量賦值;

        4) 在JEditorPane上依據(jù)相關(guān)變量選中鼠標位于點擊位置的錯誤信息;

        5) 依據(jù)相關(guān)變量值在doc中找到存在語法錯誤的節(jié)點。

        其中:定義的三個int類型變量分別命名為position,p1,p2; Node類型的變量命名為node;position對應于鼠標在JEditorPane的點擊位置,取值由JEditorPane調(diào)用viewToModel(e.getPoint())方法獲取;p1和p2的初始值為0;node的初始值為null。

        其中依據(jù)相關(guān)變量確定鼠標點擊的錯誤信息并將errors變量中對應于錯誤信息的error對象給相關(guān)變量賦值的偽代碼如下:

        for(Error err : errors){

        if(err.p1 > position){

        p2 = err.p1;

        break;

        }

        node = err.node;

        p1 = err.p1;

        }

        在JEditorPane上依據(jù)相關(guān)變量選中該條錯誤信息的步驟為:

        1) 判斷p2==0是否為真,若為真,則將content變量表示的字符串的長度值賦值給p2(當鼠標點擊JEditorPane顯示的最后一條錯誤信息時,p2==0)。

        2) JEditorPane調(diào)用setCartPosition(p1)和moveCartPosition(p2)方法選中JEditorPane上位于鼠標點擊位置處的錯誤信息。

        上述獲取的node為鼠標點擊選中的語法錯誤信息對應的節(jié)點,在doc中找到該節(jié)點并以高亮的方式顯示該節(jié)點。

        3 ?實驗驗證

        為驗證該算法的正確性、有效性以及是否能夠依據(jù)錯誤信息追蹤錯誤位置,將該算法集成到某XML編輯器中。該XML編輯器已編輯的XML數(shù)據(jù)以Document類型的文檔保存。在集成過程中,首先獲取該Document類型文檔的克隆文檔,然后直接執(zhí)行后續(xù)的驗證操作。在驗證過程中驗證結(jié)果如圖5所示。

        從圖5可以看出:首先,對于驗證過程中的語法錯誤該算法能夠按照錯誤發(fā)生順序?qū)㈠e誤信息輸出,并且每條錯誤信息既包含錯誤類型又包含導致錯誤的詳細信息;其次,該算法中設計的錯誤位置追蹤功能能夠有效地依據(jù)鼠標點擊位置首先選擇位于鼠標點擊位置的錯誤信息,進而在XML文檔的DOM解析文檔的信息輸出面板中找到該錯誤信息對應的錯誤節(jié)點并高亮顯示。為驗證該算法驗證結(jié)果的正確性,選取若干已知存在語法錯誤的XML文檔,將這些XML文檔分別在集成了該算法的XML編輯器和諸如XMLSpy等商用成熟軟件中進行驗證,然后對比驗證結(jié)果。分析驗證結(jié)果發(fā)現(xiàn),該算法能夠完整、有效地驗證XML文檔,達到設計要求。

        4 ?結(jié) ?語

        為了實現(xiàn)基于XML Schema驗證XML文檔算法的可移植性性、輕量化設計、易集成以及支持錯誤追蹤,本文提出一種基于XML Schema驗證XML文檔的算法。該算法基于DOM解析XML文檔,為保證驗證過程不影響源XML文檔,驗證操作在XML文檔的DOM解析文檔的克隆文檔上進行。為驗證該算法能否準確、有效地驗證XML文檔以及能否實現(xiàn)錯誤位置追蹤,將該算法集成到某XML編輯器中,經(jīng)過一系列的試驗驗證,該算法達到了設計要求。下一步將在該算法的基礎(chǔ)上實現(xiàn)語法錯誤信息漢化輸出。

        注:本文通訊作者為紀斌。

        參考文獻

        [1] 徐宗昌.裝備IETM技術(shù)標準實施指南[M].北京:國防工業(yè)出版社,2012.

        XU Zongchang. Implementary guide of equipment IETM technical standard [M]. Beijing: National Defense Industry Press, 2012.

        [2] W3C. W3C XML Schema definition language (XSD) 1.1 Part 1: Structures [EB/OL]. [2012?04?05]. https://www.w3.org/TR/xmlschema11?1/.

        [3] W3C. W3C XML Schema definition language (XSD) 1.1 Part 2: Datatypes [EB/OL]. [2012?04?05]. https://www.w3.org/TR/xmlschema11?2/.

        [4] 曹風華.一種XML解析器技術(shù)的研究與實現(xiàn)[J].微型機與應用,2011,30(21):6?10.

        CAO Fenghua. Research and implementation of an XML parser technology [J]. Microcomputer & its applications, 2011, 30(21): 6?10.

        [5] 余雙,曹冬磊,戴蓓潔,等.高效XML驗證技術(shù)的實現(xiàn)[J].計算機工程與設計,2008,29(4):937?941.

        YU Shuang, CAO Donglei, DAI Beijie, et al. Research on high performance implementation of XML validation [J]. Computer engineering and design, 2008, 29(4): 937?941.

        [6] REN X, CAO D, JIN B. An efficient STAX based XML parser [C]// Proceedings of the 11th Joint International Computer Conference. [S.l.: s.n.], 2005: 203?207.

        [7] 王偉良,施佺,曹渠江.基于XML Schema抽象模型的XML模式驗證方法[J].計算機應用與軟件,2007,24(3):41?43.

        WANG Weiliang, SHI Quan, CAO Qujiang. A method for XML document schema validation with abstract XML schema model [J]. Computer applications and software, 2007, 24(3): 41?43.

        [8] 許桂艷,張建,李淼,等.基于XML Schema的知識描述與模式驗證[J].計算機系統(tǒng)應用,2008,17(9):33?37.

        XU Guiyan, ZHANG Jian, LI Miao, et al. Knowledge representation and pattern validation based on XML Schema [J]. Computer systems & applications, 2008, 17(9): 33?37.

        [9] PAN Y, ZHANG Y, CHIU K. Hybrid parallelism for XML SAX parsing [C]// Proceedings of IEEE International Conference on Web Service. Beijing: IEEE, 2008: 505?512.

        [10] MA J, ZHANG S, HU T, et al. Parallel speculative Dom?based XML parser [C]// Proceedings of 14th International Conference on High Performance Computing and Communication & 9th International Conference on Embedded Software and Systems. Liverpool: IEEE, 2012: 33?40.

        [11] Jeremy Keith, Jeffrey Sambells.JavaScript DOM編程藝術(shù)[M].北京:人民郵電出版社,2011.

        KEITH J, SAMBELLS J. DOM scripting: Web design with JavaScript and the document object model [M]. Beijing: Posts & Telecom Press, 2011.

        [12] W3C. XML DOM [EB/OL]. [2018?02?26]. http://www.w3school.com.cn/xmldom/dom_intro.asp.

        猜你喜歡
        語法錯誤
        英語翻譯常見錯誤及對策探析
        概念整合理論下英語中介語發(fā)展研究
        漢語負遷移對英語寫作的影響及啟示
        科技資訊(2016年25期)2016-12-27 10:55:46
        高中英語寫作中的語法錯誤分析
        青春歲月(2016年22期)2016-12-23 10:59:20
        高中英語寫作錯誤分析個案研究
        文理導航(2016年13期)2016-05-25 00:34:28
        99热这里只有精品4| 久久久久高潮综合影院| 日本一本之道高清不卡免费| 女人做爰高潮呻吟17分钟| 99久久亚洲国产高清观看 | 国产视频一区2区三区| 国产av精品一区二区三| 中文字幕av无码一区二区三区 | 富婆猛男一区二区三区| 欧美一性一乱一交一视频 | 国产一区二区欧美丝袜| 一区二区三区一片黄理论片| 亚洲av色香蕉一区二区三区| 成人无码免费一区二区三区| 亚洲精品美女自拍偷拍| 亚洲不卡av二区三区四区| 少妇裸体性生交| 性一交一乱一伦| 成在线人免费无码高潮喷水| 久久一区二区国产精品| 人妻夜夜爽天天爽三区| 在线观看国产高清免费不卡黄| 日本中文字幕一区二区在线观看 | 精品蜜臀国产av一区二区| 国产乱码人妻一区二区三区| 日韩在线一区二区三区免费视频 | 成年在线观看免费视频| 精品久久免费一区二区三区四区| 午夜福利视频一区二区二区| 无码国产69精品久久久久孕妇| 91精品国产丝袜在线拍| 亚洲av自偷自拍亚洲一区| 亚洲人成人无码www| 亚洲欧美日韩国产精品专区| 蜜臀aⅴ永久无码一区二区| 夜夜高潮夜夜爽免费观看| 内射爽无广熟女亚洲| 99久久久精品免费香蕉| 国产精品一区二区三区三| 国产精品区一区二区三在线播放| 又爽又黄无遮挡高潮视频网站|