• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      一種將XML模式轉化為編程語言的算法

      2019-06-19 02:33:41吳家菊紀斌劉振吉陳泉根
      現(xiàn)代電子技術 2019年11期
      關鍵詞:轉換元素

      吳家菊 紀斌 劉振吉 陳泉根

      摘 ?要: 為設計與實現(xiàn)XML通用數(shù)據(jù)編輯框架中編輯數(shù)據(jù)的驗證,提出一種將XML Schema文檔轉化為Java代碼的算法。研究XML Schema的元素和元素間嵌套關系的定義規(guī)則,在此基礎上定義元素到Java代碼的轉換規(guī)則和轉換算法。該算法以Schema元素為根元素,采用深度優(yōu)先搜索算法遍歷XML Schema文檔的每個元素,保證對XML Schema文檔轉換的完整性。算法實現(xiàn)了XML Schema定義的28種元素和12種限定元素到Java代碼的轉換,并且元素間的嵌套關系也得到完整的保存。最后通過轉換實例驗證了該算法的正確性和有效性。

      關鍵詞: 可擴展標記語言模式; Java; 轉換; 元素; 類; 解析單元; 創(chuàng)建單元

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

      Abstract: In order to design and implement the universal data?editing framework of XML (extensible makeup language) schema, an algorithm to transform XML Schema document into Java code is proposed. The definition rules of elements and their nested relation of XML Schema are studied. On this basis, the transformation rules and transformation algorithm from elements to Java code are defined. Taking schema element as the root element, the deep first search algorithm is used to traverse each element of XML Schema document, which can ensure the completeness of XML Schema document transformation. The transformation from twenty?eight kinds of elements defined by XML Schema and twelve kinds of facet elements to Java code is realized by means of the algorithm, and the nested relation between elements can be reserved completely. The correctness and validity of the algorithm are verified with an transformation instance.

      Keywords: extensible makeup language schema; Java; transformation; element; class; analysis unit; creation unit

      0 ?引 ?言

      武器裝備綜合保障數(shù)據(jù)應用于武器裝備綜合保障系統(tǒng)中,在將綜合保障數(shù)據(jù)應用于綜合保障系統(tǒng)之前,數(shù)據(jù)需要編輯成XML(eXtensible Markup Language)格式[1]。XML Schema用來設計、約束、驗證XML,并且在武器裝備綜合保障系統(tǒng)中得到廣泛的應用[2]。因此,一種有效的將XML Schema轉換為編程語言的算法是數(shù)據(jù)編輯軟件開發(fā)的基礎。

      由于XML Schema的文本特性和XML語法的復雜性,XML Schema文檔定義非常復雜[3]。在深入研究了W3C Recommendation發(fā)布的XML Schema最新標準的基礎上,本文提出一種將XML Schema文檔轉換為Java代碼的轉換算法。算法深度優(yōu)先遍歷(Deep First Search,DFS)XML Schema文檔,對于每個元素,為其創(chuàng)建一個Java對象,并依據(jù)元素之間的嵌套關系在創(chuàng)建的Java對象間建立引用關系。XML Schema文檔經過算法轉換最終得到一個根元素schema的Java對象,該對象中保存了為所有其他XML Schema文檔包含的元素創(chuàng)建的對象。XML Schema標準定義了30種元素和12種限定元素[4?5],算法可以實現(xiàn)其中的28種元素和12種限定元素到Java代碼的轉換。該算法具有通用性,可以應用到其他XML領域。

      1 ?XML Schema元素的定義規(guī)則

      W3C Recommendation發(fā)布的XML Schema最新標準中定義了30種元素和12種限定元素。從武器裝備綜合保障領域出發(fā),根據(jù)實際應用需求,在設計算法時將一些元素和元素的屬性排除在外。算法設計未包含的元素有anyAttribute和notation。算法設計未包含的元素屬性如下:所有元素的ID和anyAttributes屬性;element的nillable,block,final屬性;schema的blockDefault,finalDefault,version屬性。

      除元素外,XML Schema定義了12種用于對元素和屬性取值進行約束的限定元素。所有限定元素的父元素均為restriction,都有一個必選的value屬性和一個可選的fixed屬性。

      2 ?算法設計

      XML Schema文檔遵循XML語法,因此,DOM(Document Object Model)[6?8]和SAX(Simple API for XML)[9]都可以用來解析XML Schema文檔。該算法采用DOM解析XML Schema文檔。

      2.1 ?設計思想

      從結構上將算法分為解析單元和Java對象創(chuàng)建單元兩部分。

      解析單元首先用Java語言實現(xiàn)DOM應用編程接口,并獲取DOM解析器實例。其次,解析器解析XML Schema文檔。解析結果是一個Document的實例。獲取解析結果的第一個元素,將其命名為[n](對于一個格式良好且非空的XML Schema文檔,元素[n]實際為schema元素。最后,將元素[n]作為參數(shù)傳遞給Java對象創(chuàng)建單元。

      Java對象創(chuàng)建單元接收解析單元傳遞的元素[n]并獲取[n]的localName,然后調用與localName對應的Java類的構造函數(shù),為元素[n]創(chuàng)建一個Java對象。

      2.2 ?算法描述

      本節(jié)詳細描述了Java對象創(chuàng)建單元的執(zhí)行過程,將執(zhí)行過程分為8個步驟:

      1) 獲取元素[n]的localName,調用與localName對應的元素類的構造函數(shù)。若[n]是schema時,則向構造函數(shù)傳入的參數(shù)為([n],null,null);若[n]是除schema外的其他元素,則將([n],this,schema)作為參數(shù)傳入構造函數(shù);若[n]是限定元素時,則將([n],this)作為參數(shù)傳入構造函數(shù)。其中,schema是元素[n]所屬的XML Schema文檔的根元素,即schema元素的對象。

      2) 若該類是元素類,則將構造函數(shù)的第一個參數(shù)賦值給類中element變量,第二個參數(shù)賦值給類中parent變量,第三個參數(shù)賦值給類中schema變量;若該類是Facet類,則將構造函數(shù)的第一個參數(shù)賦值給類中element變量,第二個參數(shù)賦值給類中parent變量。

      3) 依次執(zhí)行元素的每個屬性定義的屬性判別語句,完成元素屬性的處理。

      4) 獲取元素[n]的第一個子元素[n′]。

      5) 若([n′] != null)為真,則執(zhí)行第7)步;若為假,元素[n′]的父元素[n]的對象創(chuàng)建完成,執(zhí)行第6)步。

      6) 若([n.] getLocalName==“schema”)為真,則XML Schema文檔中包含的所有元素的對象創(chuàng)建完成,程序正常結束;若為假,則首先將創(chuàng)建的元素[n]的對象賦值給元素[n]的父元素類中為[n]創(chuàng)建的變量,然后獲取直接在元素[n]之后的元素[n′],執(zhí)行第5)步(注意:用獲取的元素[n′]替換第5)步中的元素[n′])。

      7) 若([n′] instance of Element==true)為真,則執(zhí)行第1)步(注意:用獲取的元素[n′]替換第1)步中的元素[n]);若為假,則執(zhí)行下一步。

      8) 獲取直接在元素[n′]之后的元素[n″],執(zhí)行第5)步(注意:用獲取的元素[n″]替換第5)步中的元素[n′])。

      圖1 ?Java對象創(chuàng)建單元執(zhí)行過程

      3 ?算法實現(xiàn)

      依據(jù)算法的設計,算法的實現(xiàn)分為兩部分:解析單元的實現(xiàn)和Java對象創(chuàng)建單元的實現(xiàn)。解析單元是一個名為Create_XSD_Objects的Java類,該類是算法的主類和入口。Java對象創(chuàng)建單元包含28種元素和12種限定元素創(chuàng)建的Java類。另外,為提高代碼的重用性和方便地定義變量數(shù)據(jù)類型,定義一組類和接口。

      3.1 ?為元素定義Java類

      1) 為每種元素定義一個Java類,以首字母大寫的元素名作為類名。并依據(jù)元素與其子元素的嵌套關系,在Java類中建立引用關系。

      2) Annotated抽象類:annotation可以出現(xiàn)是任何元素(annotation, documentation,appinfo除外)的子元素。為提高代碼的重用性,定義一個名為”Annotated”的抽象類。除了Annotation,Documentation,Appinfo三個Java類外,其他所有元素和限定元素的Java類都繼承該抽象類。圖2描述了Annotated和相關Java類的UML類圖。

      圖2 ?Annotated抽象類

      3) Keybase抽象類:Key,Keyref,Unique三種元素的父元素都是element,并且三種元素的子元素相同。不同的是,Keyref可以有ref屬性。為提高代碼重用性,定義一個名為“Keybase”的抽象類。Key,Keyref,Unique繼承該抽象類,調用該抽象類中定義的方法為對應的元素創(chuàng)建Java對象。

      4) ExplicitGroup抽象類:sequence和choice兩種元素可以相互嵌套,并且兩種元素的父元素、子元素、屬性均相同,使用規(guī)則也相同。為提高代碼重用性,定義一個名為“ExplicitGroup”的抽象類。Sequence和Choice繼承該抽象類,調用該抽象類中定義的方法為對應的元素創(chuàng)建Java對象。

      5) Thing接口:為方便定義Java類中變量的數(shù)據(jù)類型,定義了一個名為”Thing”的空接口。所有其他Java類實現(xiàn)該接口。該接口在算法中有如下五種用途。

      ① 在Group,ComplexType,Extension,Restriction中定義一個名為“attributes”的變量,變量的數(shù)據(jù)類型為List。該變量用于存儲Attribute和AttributeGroup的對象。

      ② 在Element中定義一個名為“identifyConstraints”的變量,變量數(shù)據(jù)類型為List。該變量用于存儲Key,Keyref 和Unique的對象。

      ③ 在Redefine中定義一個名為“redefinables”的變量,變量的數(shù)據(jù)類型為List。該變量用于存儲Sim?pleType,ComplexType,Group和AttributeGroup類的對象。

      ④ 在Sequence和Choice中定義一個名為modelGroup的變量,變量數(shù)據(jù)類型為List。該變量用于存儲Element,Sequence,Group,Choice和Any類的對象。

      ⑤ Thing作為元素的Java類和限定元素的Java類構造函數(shù)的第二個參數(shù)變量的數(shù)據(jù)類型。

      3.1.1 ?在Java類中為元素的屬性定義變量

      對于元素包含的每個屬性,一般來說在元素的Java類中為其定義一個變量。變量與屬性同名。變量數(shù)據(jù)類型及一些特殊變量定義如下:

      1) 在Union中為union的memberTypes屬性定義一個名為“memberTypes”的變量,變量的數(shù)據(jù)類型為String[],變量的初始值為null。

      2) 在Schema中為默認名稱空間定義一個名為“xmlns”的變量,變量的數(shù)據(jù)類型為String。為帶有名稱空間前綴的名稱空間定義一個名為“namespace”的變量,變量的數(shù)據(jù)類型為HashMap,其中對應于<名稱空間,名稱空間前綴>。兩個變量的初始值為null。

      3) 表1給出了其他一些為元素特殊屬性定義的變量。除去表1列舉的屬性以及上述兩種屬性外,為元素屬性定義的變量數(shù)據(jù)類型為String,變量初始值為null。3.1.2 ?在元素的Java類中為元素的子元素定義變量

      除3.1中描述的為元素的子元素定義的特殊變量外,對于元素其他的子元素,為每個子元素在元素的Java類中定義一個變量,變量的定義規(guī)則如下所示:

      1) 如果子元素在元素中可以出現(xiàn)0次或1次,在元素的Java類中為子元素定義一個變量,以子元素名作為變量名,以子元素的Java類作為變量的數(shù)據(jù)類型。

      2) 如果子元素在元素中可以出現(xiàn)至少1次或0次到多次,則在元素的Java類中為其定義的變量如表2所示。

      3) 在元素的Java類中為每個子元素創(chuàng)建的變量初始值均為null。

      3.1.3 ?在元素的Java類中定義特殊變量

      除去上述為元素的屬性和子元素創(chuàng)建的變量外,在元素的Java類中定義了三個變量:一個名為element的變量,數(shù)據(jù)類型為Element;一個名為parent的變量,數(shù)據(jù)類型為Thing;一個名為schema的變量,數(shù)據(jù)類型為Schema。三個變量的初始值均為null。

      3.1.4 ?在元素的Java類中定義構造函數(shù)

      每個元素的Java類都有一個構造函數(shù)。構造函數(shù)有三個參數(shù):第一個是數(shù)據(jù)類型為Element的element參數(shù);第二個是數(shù)據(jù)類型為Thing的parent參數(shù);第三個是數(shù)據(jù)類型為Schema的schema參數(shù)。在構造函數(shù)中,定義變量賦值語句,將構造函數(shù)的三個參數(shù)賦值給Java類中定義的相關變量。另外,在構造函數(shù)中定義判斷語句和賦值語句,用于判斷元素包含的屬性和子元素,并將屬性值或子元素的Java對象賦值給Java類中定義的相關變量。

      3.2 ?為限定元素定義Java類

      1) restriction是所有限定元素的唯一父元素,并且所有的限定元素可能包含的屬性相同。為提高代碼的重用性,為所有限定元素定義一個共用的Java類,以“Facet“作為類名。

      2) 在Facet中定義變量:定義一個名為“facet”的變量,用于存儲限定元素名;一個名為“value”的變量,對應于限定元素的value屬性;一個名為“fixed”的變量,對應于限定元素的fixed屬性;一個名為element的變量,數(shù)據(jù)類型為Element;一個名為parent的變量,數(shù)據(jù)類型為Thing。facet和value的數(shù)據(jù)類型為String,fixed的數(shù)據(jù)類型為boolean。五個變量的初始值均為null。

      3) 在Facet中定義構造函數(shù):Facet的構造函數(shù)有兩個參數(shù),第一個是數(shù)據(jù)類型為Element的element參數(shù);第二個是數(shù)據(jù)類型為Thing的parent參數(shù)。在構造函數(shù)中定義變量賦值語句,將構造函數(shù)參數(shù)賦值給Facet中定義的相關變量。另外,在構造函數(shù)中定義判斷語句和賦值語句,用于判斷限定元素包含的屬性,并將屬性值賦值給Facet中定義的相關變量。

      4 ?轉換例子

      在本節(jié)中以ATA/ASD/AIA S1000D Issue 4.2定義的descriptSchema.xsd作為轉換文檔[10],驗證轉換算法的正確性和有效性。圖3給出了轉換文檔經過轉換后得到的Java對象信息的部分輸出結果。對比分析輸出信息和源XML Schema文檔可以得出:算法能夠正確和有效地將源文檔中包含的每個元素轉換為Java對象;算法能夠正確地判斷元素包含的屬性,獲取屬性的值并將其賦值給元素的Java類中定義的相關變量;算法能夠正確地判斷元素包含的子元素,為子元素創(chuàng)建Java對象,并將對象賦值給元素的Java類中定義的相關變量;算法能夠依據(jù)源文檔中元素之間的嵌套關系正確地建立Java對象之間的引用關系。

      圖3 ?Java對象信息

      5 ?結 ?語

      本文提出一種將XML Schema文檔轉換為Java代碼的算法,并實現(xiàn)了該算法。W3C Recommendation發(fā)布的XML Schema最新標準包含30種元素和12種限定元素,算法可以實現(xiàn)其中28種元素和全部12種元素到Java代碼的轉換,并且可以依據(jù)XML Schema文檔中元素之間的嵌套關系建立Java對象間的引用關系。算法從結構上分為解析單元和Java對象創(chuàng)建單元,實現(xiàn)包括34個Java類或接口。選取ATA/AIA/ASD S1000D Issue 4.2標準制定的19個XML Schema文檔作為實驗文檔對算法的正確性和有效性進行驗證。基于該算法設計開發(fā)了一個XML數(shù)據(jù)編輯框架原型,并在IETM制作平臺中得到初步驗證。該算法具有通用性,可以應用到其他XML應用領域。

      參考文獻

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

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

      [2] 徐宗昌,雷育生.裝備IETM研制工程總論[M].北京:國防工業(yè)出版社,2012.

      XU Zongchang, LEI Yusheng. Generalization of equipment IETM developing engineering [M]. Beijing: National Defense Industry Press, 2012.

      [3] 王行哲.XML模式到概念模型的轉換方法與工具研究[D].武漢:武漢理工大學,2008.

      WANG Xingzhe. Method and tool for transforming XML schema to conceptual model [D]. Wuhan: Wuhan University of Technology, 2008.

      [4] W3C Recommendation. W3C XML schema definition language (XSD) 1.1 Part 1: structures [S]. US: W3C Recommendation, 2012.

      [5] W3C Recommendation. W3C XML schema definition language (XSD) 1.1 Part 2: datatypes [S]. US: W3C Recommendation, 2012.

      [6] MA J L, ZHANG S B, HU T S, et al. Parallel speculative Dom?based XML parser [C]// 2012 IEEE International Conference on High Performance Computing. Liverpool: IEEE, 2012: 33?40.

      [7] DESHMUKH V M, BAMNOTE G R. An empirical study of XML parsers across applications [C]// 2015 International Conference on Computing Communication Control & Automation. Pune: IEEE, 2015: 1?7.

      [8] W3C. Document object model (DOM) level 1 specification: Version 1.0 [EB/OL]. [1998?10?01]. https://www.w3.org/TR/REC?DOM?Level?1.

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

      [10] S1000D. International specification for technical publications using a common source database [S/OL]. [2016?01?15]. http://public.s1000d.org/Pages/Home.aspx.

      猜你喜歡
      轉換元素
      大數(shù)據(jù)時代檔案管理模式的轉換與創(chuàng)新
      資治文摘(2016年7期)2016-11-23 02:29:01
      徽州元素在手機界面設計中的應用
      藝術科技(2016年9期)2016-11-18 15:45:53
      論英漢語翻譯中語內翻譯向語際翻譯的轉換
      淺談平面圖與立體圖的思維培養(yǎng)
      人間(2016年28期)2016-11-10 00:10:48
      中國傳統(tǒng)文化元素的構成與設計應用
      從歌曲《梅蘭芳》探析中國民族聲樂的戲曲元素
      戲劇之家(2016年19期)2016-10-31 18:14:58
      高中化學教學中研究性學習的應用探究
      成才之路(2016年25期)2016-10-08 10:51:36
      王家衛(wèi)電影中的后現(xiàn)代美學元素
      電影文學(2016年9期)2016-05-17 12:25:45
      兴宁市| 依安县| 武功县| 玉田县| 石台县| 阳泉市| 丘北县| 牡丹江市| 台湾省| 个旧市| 新化县| 怀安县| 鲁山县| 柞水县| 化德县| 长垣县| 甘谷县| 靖安县| 正安县| 磴口县| 江西省| 新兴县| 元谋县| 铜川市| 唐山市| 汾西县| 根河市| 那坡县| 洛隆县| 大渡口区| 米易县| 井研县| 阳东县| 县级市| 丰都县| 马山县| 于田县| 思茅市| 昆明市| 韶关市| 利辛县|