專利名稱:一種xml元數(shù)據(jù)對象化解析方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本申請涉及數(shù)據(jù)解析領(lǐng)域,特別是涉及一種基于XML的可擴展元數(shù)據(jù)對象化解析 方法及系統(tǒng)。
背景技術(shù):
XML(Extensible Markup Language)即可擴展標記語言,是一種受到廣泛支持的 Internet標準,用于以一種特殊的方式編碼結(jié)構(gòu)化數(shù)據(jù),實際上,以XML編碼的數(shù)據(jù)可以通 過任何編程語言解碼,人們甚至可以使用標準的文本編輯器來閱讀或編寫XML數(shù)據(jù)。許多 應(yīng)用程序,尤其是兼容現(xiàn)代標準的Web瀏覽器,可以直接處理XML數(shù)據(jù)。XML Schema文件用于描述XML文檔的結(jié)構(gòu)。XML Schema語言也被稱為XML Schema Definition(XSD)。XML Schema的作用是定義一份XML文檔的一個或多個合法組件,它定義 了可以出現(xiàn)在文檔里的元素(Element)、可以出現(xiàn)在元素里的屬性、哪些元素是子元素、子 元素的順序、子元素的數(shù)量、元素和屬性的數(shù)據(jù)類型等內(nèi)容。作為一個基于文本的標準,XML形式的數(shù)據(jù)非常適合作為程序配置數(shù)據(jù)或者在客 戶機和服務(wù)器系統(tǒng)之間交換數(shù)據(jù),大部分數(shù)據(jù)(文件路徑、描述、地址、名稱等)已經(jīng)是基于 文本的數(shù)據(jù)。發(fā)明人經(jīng)過對現(xiàn)有XML處理方式的研究發(fā)現(xiàn),現(xiàn)有XML處理方式存在以下問題1)單純的文本結(jié)構(gòu)的數(shù)據(jù)對于開發(fā)人員來說處理起來并不友好,如類型、格式 等轉(zhuǎn)換;2)XML數(shù)據(jù)解析工作于業(yè)務(wù)邏輯處理相耦合,導(dǎo)致軟件復(fù)雜度直線上升,并增加出 現(xiàn)錯誤的幾率;3)繁雜的XML解析工具API無疑提升了學(xué)習(xí)曲線和開發(fā)的成本;4)數(shù)據(jù)結(jié)構(gòu)的改變直接導(dǎo)致程序大量修改。
發(fā)明內(nèi)容
為解決上述技術(shù)問題,本申請實施例提供一種將XML元數(shù)據(jù)解析成數(shù)據(jù)對象的方 法,將XML元數(shù)據(jù)解析成Java類,以更好的對XML數(shù)據(jù)元素進行處理。技術(shù)方案如下一種XML元數(shù)據(jù)對象化解析方法,在執(zhí)行所述解析方法前,對XML數(shù)據(jù)結(jié)構(gòu)的XML Schema進行預(yù)定義,在所述XML Schema預(yù)定義結(jié)束后,執(zhí)行所述解析方法,包括依據(jù)所述XML Schema對所述XML數(shù)據(jù)中的數(shù)據(jù)元素進行定義,包括定義與所述數(shù) 據(jù)元素結(jié)構(gòu)一致的數(shù)據(jù)對象,所述數(shù)據(jù)對象的關(guān)聯(lián)關(guān)系與所述數(shù)據(jù)元素的關(guān)聯(lián)關(guān)系一致;讀取所述XML數(shù)據(jù)并對所述XML數(shù)據(jù)進行解析;實例化所述XML數(shù)據(jù)對應(yīng)的數(shù)據(jù)對象,形成與所述XML數(shù)據(jù)結(jié)構(gòu)相同的數(shù)據(jù)對象。上述的方法,優(yōu)選的,依據(jù)所述XML Schema對所述XML數(shù)據(jù)中的數(shù)據(jù)元素進行定 義的過程,還包括對數(shù)據(jù)對象接口的定義,所述數(shù)據(jù)對象接口用于獲取所述XML數(shù)據(jù)元素的屬性信息。上述的方法,優(yōu)選的,對所述XML數(shù)據(jù)進行解析的過程包括將所述XML數(shù)據(jù)中 XML數(shù)據(jù)元素的XML Schema類型為any的元素解析成與所述數(shù)據(jù)對象接口類型一致的數(shù)據(jù) 類型。一種XML元數(shù)據(jù)對象化解析系統(tǒng),包括預(yù)設(shè)單元、定義單元、解析單元和實例化 單元;其中所述預(yù)設(shè)單元用于對所述XML數(shù)據(jù)結(jié)構(gòu)的XML Schema進行預(yù)定義;所述定義單元用于依據(jù)所述預(yù)設(shè)單元預(yù)設(shè)的XML Schema對所述XML數(shù)據(jù)中的數(shù) 據(jù)元素進行定義,包括定義與所述數(shù)據(jù)元素結(jié)構(gòu)一致的數(shù)據(jù)對象,所述數(shù)據(jù)對象的關(guān)聯(lián)關(guān) 系與所述數(shù)據(jù)元素的關(guān)聯(lián)關(guān)系一致;所述解析單元用于讀取所述定義單元定義的XML數(shù)據(jù),并對所述XML數(shù)據(jù)進行解 析;所述實例化單元用于實例化所述解析單元解析的XML數(shù)據(jù)對應(yīng)的數(shù)據(jù)對象,形成 與所述XML數(shù)據(jù)結(jié)構(gòu)相同的數(shù)據(jù)對象。上述的系統(tǒng),優(yōu)選的,所述定義單元依據(jù)所述預(yù)設(shè)單元預(yù)設(shè)的XMLSchema對所述 XML數(shù)據(jù)中的數(shù)據(jù)元素進行定義的過程還包括對數(shù)據(jù)對象接口的定義,所述數(shù)據(jù)對象接口 用于獲取所述XML數(shù)據(jù)元素的屬性性信息。上述的系統(tǒng),優(yōu)選的,所述解析單元對所述XML數(shù)據(jù)進行解析的過程包括將所述 XML數(shù)據(jù)中的XML數(shù)據(jù)元素的XML Schema類型為any的元素解析成與所述數(shù)據(jù)對象接口類 型一致的數(shù)據(jù)類型。由以上本申請實施例提供的技術(shù)方案可見,本發(fā)明提供的XML元數(shù)據(jù)對象化解析 方法及系統(tǒng),預(yù)先定義XML數(shù)據(jù)結(jié)構(gòu)的XML Schema, XML Schema定義了每個元素的屬性名 稱、類型、默認值、父子元素關(guān)聯(lián)關(guān)系等,本申請實施例直接使用這些數(shù)據(jù)建立對應(yīng)的Java 類型,解決了現(xiàn)有XML處理方式中存在的問題。
為了更清楚地說明本申請實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 申請中記載的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下, 還可以根據(jù)這些附圖獲得其他的附圖。圖1為本申請實施例公開的一種XML元數(shù)據(jù)對象化解析方法的流程圖;圖2為本申請實施例公開的XML元數(shù)據(jù)對象化解析方法的詳細流程圖;圖3為本申請實施例公開的XML數(shù)據(jù)結(jié)構(gòu)的XML Schema定義與對象化數(shù)據(jù)類型 的對應(yīng)關(guān)系圖;圖4為本申請實施例公開的一種XML元數(shù)據(jù)對象化解析系統(tǒng)的系統(tǒng)結(jié)構(gòu)圖。
具體實施例方式本申請實施例提供一種XML元數(shù)據(jù)對象化解析方法及系統(tǒng),將XMLSchema定義的 XML數(shù)據(jù)中的每一個元素轉(zhuǎn)譯成Java類,并在系統(tǒng)中用XMLSchema的命名空間和節(jié)點名稱記錄元素與類型的對應(yīng)關(guān)系。XML Schema定義了每個元素的屬性名稱、類型、默認值、父子 元素關(guān)聯(lián)關(guān)系等,本申請實施例直接使用這些數(shù)據(jù)建立對應(yīng)的Java類型,這些類型與對應(yīng) 元素有相同的屬性名稱、類型、默認值、父子元素關(guān)聯(lián)關(guān)系等并定義屬性的getter、setter 方法,這樣就能夠讓符合XML Schema定義的XML數(shù)據(jù)轉(zhuǎn)變成Java對象。以上是本申請的核心思想,為了使本技術(shù)領(lǐng)域的人員更好地理解本申請方案。下 面將結(jié)合本申請實施例中的附圖,對本申請實施例中的技術(shù)方案進行清楚、完整地描述,顯 然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶?施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應(yīng) 當屬于本申請保護的范圍。本申請實施例公開的一種XML元數(shù)據(jù)對象化解析方法在執(zhí)行該方法前,對XML數(shù) 據(jù)結(jié)構(gòu)的XML Schema進行預(yù)定義,預(yù)定義過程結(jié)束后,執(zhí)行所述XML元數(shù)據(jù)對象化解析方法。本申請實施例公開的一種XML元數(shù)據(jù)對象化解析方法的流程圖如圖1所示,包 括步驟SlOl 依據(jù)XML Schema對XML數(shù)據(jù)中的數(shù)據(jù)元素進行定義,包括定義與上 述數(shù)據(jù)元素結(jié)構(gòu)一致的數(shù)據(jù)對象,上述數(shù)據(jù)對象的關(guān)聯(lián)關(guān)系與所述數(shù)據(jù)元素的關(guān)聯(lián)關(guān)系一 致;步驟S102 讀取上述XML數(shù)據(jù)并對上述XML數(shù)據(jù)進行解析;步驟S103 實例化上述XML數(shù)據(jù)對應(yīng)的數(shù)據(jù)對象,形成與上述XML數(shù)據(jù)結(jié)構(gòu)相同 的數(shù)據(jù)對象。需要對以上步驟進行說明的是根據(jù)XML Schema定義一個統(tǒng)一的數(shù)據(jù)操作接口和與XML Schema中的元素結(jié)構(gòu)一 致的數(shù)據(jù)對象,這些數(shù)據(jù)對象的關(guān)聯(lián)關(guān)系與元素的關(guān)聯(lián)關(guān)系一致。從XML數(shù)據(jù)源讀入XML數(shù)據(jù),XML數(shù)據(jù)源中包括文件系統(tǒng)、網(wǎng)絡(luò)環(huán)境中指定的URL、 使用各種協(xié)議通信的系統(tǒng)等。解析XML數(shù)據(jù),實例化每個XML元素對應(yīng)的數(shù)據(jù)對象,形成與XML數(shù)據(jù)層次結(jié)構(gòu)相 同的數(shù)據(jù)對象。本申請實施例公開的XML元數(shù)據(jù)對象化解析方法中,依據(jù)XML Schema對XML數(shù)據(jù) 中的數(shù)據(jù)元素進行定義的過程,還包括對數(shù)據(jù)對象接口的定義,上述數(shù)據(jù)對象接口用于獲 取XML數(shù)據(jù)元素的屬性信息。定義統(tǒng)一的數(shù)據(jù)對象接口,所有的數(shù)據(jù)對象都擴展相同接口,這個接口只用于通 用的數(shù)據(jù)操作,比如獲取本元素指定名稱的屬性值、獲取所有子元素等。本申請實施例公開的XML元數(shù)據(jù)對象化解析方法中,對XML數(shù)據(jù)進行解析的過程 包括將XML數(shù)據(jù)中XML數(shù)據(jù)元素的XML Schema類型為any的元素解析成與所述數(shù)據(jù)對象 接口類型一致的數(shù)據(jù)類型。對于在XML Schema中,XML Schema類型為any的元素,其對應(yīng)的XML數(shù)據(jù)會解析 成統(tǒng)一的數(shù)據(jù)對象接口的類型,這樣即便沒有具體的數(shù)據(jù)對象與該XML數(shù)據(jù)對應(yīng),系統(tǒng)也 可以操作或者讀取該XML數(shù)據(jù)。本申請實施例公開的XML元數(shù)據(jù)對象化解析方法的詳細流程圖如圖2所示,包括步驟S201 解析方法開始;步驟S202 加載XML數(shù)據(jù)流;步驟S203 解析根元素,實例化根元素對應(yīng)數(shù)據(jù)對象;步驟S204:檢查當前根元素是否有子元素,有,執(zhí)行步驟S205 ;否則,執(zhí)行步驟 S209 ;步驟S205 解析子元素名稱、命名空間;步驟S206 子元素是否有與其對應(yīng)的數(shù)據(jù)對象;有,執(zhí)行步驟S207 ;否則,執(zhí)行步 驟 S208 ;步驟S207 實例化對應(yīng)的對象,建立兩個節(jié)點(父節(jié)點與子節(jié)點)的父子關(guān)系;然 后返回執(zhí)行步驟S204;步驟S208 實例化通用數(shù)據(jù)對象,建立兩個元素的父子關(guān)系;然后返回執(zhí)行步驟 S204 ;步驟S209 填充數(shù)據(jù)對象的屬性;步驟S210 返回樹形結(jié)構(gòu)的數(shù)據(jù)對象;步驟S211 解析方法結(jié)束。本申請實施例公開的XML數(shù)據(jù)結(jié)構(gòu)的XML Schema定義與對象化數(shù)據(jù)類型的對應(yīng) 關(guān)系圖如圖3所示,其對應(yīng)關(guān)系為根節(jié)點元素對應(yīng)根類型,子節(jié)點元素對應(yīng)子類型,未定義 的元素對應(yīng)擴展類型。本申請實施例公開的一種XML元數(shù)據(jù)對象化解析系統(tǒng)的系統(tǒng)結(jié)構(gòu)圖如圖4所示, 包括預(yù)設(shè)單元301、定義單元302、解析單元303和實例化單元304 ;其中預(yù)設(shè)單元301用于對XML數(shù)據(jù)結(jié)構(gòu)的XML Schema進行預(yù)定義;定義單元302用于依據(jù)預(yù)設(shè)單元301預(yù)設(shè)的XML Schema對XML數(shù)據(jù)中的數(shù)據(jù)元 素進行定義,包括定義與所述數(shù)據(jù)元素結(jié)構(gòu)一致的數(shù)據(jù)對象,上述數(shù)據(jù)對象的關(guān)聯(lián)關(guān)系與 所述數(shù)據(jù)元素的關(guān)聯(lián)關(guān)系一致;解析單元303用于讀取定義單元302定義的XML數(shù)據(jù),并對上XML數(shù)據(jù)進行解析;實例化單元304用于實例化解析單元303解析的XML數(shù)據(jù)對應(yīng)的數(shù)據(jù)對象,形成 與上述XML數(shù)據(jù)結(jié)構(gòu)相同的數(shù)據(jù)對象。本申請實施例公開的系統(tǒng)中,定義單元302依據(jù)預(yù)設(shè)單元301預(yù)設(shè)的XMLSchema 對XML數(shù)據(jù)中的數(shù)據(jù)元素進行定義的過程還包括對數(shù)據(jù)對象接口的定義,數(shù)據(jù)對象接口用 于獲取上述XML數(shù)據(jù)元素的屬性性信息。本申請實施例公開的系統(tǒng)中,解析單元303對XML數(shù)據(jù)進行解析的過程包括將 XML數(shù)據(jù)中的XML數(shù)據(jù)元素的XML Schema類型為any的元素解析成與所述數(shù)據(jù)對象接口類 型一致的數(shù)據(jù)類型。本申請實施例公開的XML元數(shù)據(jù)對象化解析方法及系統(tǒng)具有以下優(yōu)點高可用性待解析的XML數(shù)據(jù)都有事先定義好的XML Schema,只要是符合系統(tǒng)指定XML Schema的XML數(shù)據(jù)都可以解析成為程序能夠識別的數(shù)據(jù)對象。將XML解析工作解耦
使用元數(shù)據(jù)編程的開發(fā)人員無需關(guān)心XML數(shù)據(jù)的解析工作,直接使用已經(jīng)填充數(shù) 據(jù)的對象,從而無需了解XML相關(guān)細節(jié),降低程序復(fù)雜度。對修改XML數(shù)據(jù)結(jié)構(gòu)開發(fā)任何XML Schema的修改,只需要修改對應(yīng)節(jié)點的數(shù)據(jù)類型和節(jié)點與類型的映射關(guān) 系即可,程序本身無需做過大改動。本說明書中的各個實施例均采用遞進的方式描述,各個實施例之間相同相似的部 分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。以上所述僅是本 申請的具體實施方式
,應(yīng)當指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本申請原 理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應(yīng)視為本申請的保護范圍。
權(quán)利要求
一種XML元數(shù)據(jù)對象化解析方法,其特征在于,在執(zhí)行所述解析方法前,對XML數(shù)據(jù)結(jié)構(gòu)的XML Schema進行預(yù)定義,在所述XML Schema預(yù)定義結(jié)束后,執(zhí)行所述解析方法,包括依據(jù)所述XML Schema對所述XML數(shù)據(jù)中的數(shù)據(jù)元素進行定義,包括定義與所述數(shù)據(jù)元素結(jié)構(gòu)一致的數(shù)據(jù)對象,所述數(shù)據(jù)對象的關(guān)聯(lián)關(guān)系與所述數(shù)據(jù)元素的關(guān)聯(lián)關(guān)系一致;讀取所述XML數(shù)據(jù)并對所述XML數(shù)據(jù)進行解析;實例化所述XML數(shù)據(jù)對應(yīng)的數(shù)據(jù)對象,形成與所述XML數(shù)據(jù)結(jié)構(gòu)相同的數(shù)據(jù)對象。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,依據(jù)所述XMLSchema對所述XML數(shù)據(jù)中 的數(shù)據(jù)元素進行定義的過程,還包括對數(shù)據(jù)對象接口的定義,所述數(shù)據(jù)對象接口用于獲取 所述XML數(shù)據(jù)元素的屬性信息。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,對所述XML數(shù)據(jù)進行解析的過程包括將 所述XML數(shù)據(jù)中XML數(shù)據(jù)元素的XML Schema類型為any的元素解析成與所述數(shù)據(jù)對象接 口類型一致的數(shù)據(jù)類型。
4.一種XML元數(shù)據(jù)對象化解析系統(tǒng),其特征在于,包括預(yù)設(shè)單元、定義單元、解析單元 和實例化單元;其中所述預(yù)設(shè)單元用于對所述XML數(shù)據(jù)結(jié)構(gòu)的XML Schema進行預(yù)定義;所述定義單元用于依據(jù)所述預(yù)設(shè)單元預(yù)設(shè)的XML Schema對所述XML數(shù)據(jù)中的數(shù)據(jù)元 素進行定義,包括定義與所述數(shù)據(jù)元素結(jié)構(gòu)一致的數(shù)據(jù)對象,所述數(shù)據(jù)對象的關(guān)聯(lián)關(guān)系與 所述數(shù)據(jù)元素的關(guān)聯(lián)關(guān)系一致;所述解析單元用于讀取所述定義單元定義的XML數(shù)據(jù),并對所述XML數(shù)據(jù)進行解析;所述實例化單元用于實例化所述解析單元解析的XML數(shù)據(jù)對應(yīng)的數(shù)據(jù)對象,形成與所 述XML數(shù)據(jù)結(jié)構(gòu)相同的數(shù)據(jù)對象。
5.根據(jù)權(quán)利要求4所述的系統(tǒng),其特征在于,所述定義單元依據(jù)所述預(yù)設(shè)單元預(yù)設(shè)的 XML Schema對所述XML數(shù)據(jù)中的數(shù)據(jù)元素進行定義的過程還包括對數(shù)據(jù)對象接口的定義, 所述數(shù)據(jù)對象接口用于獲取所述XML數(shù)據(jù)元素的屬性性信息。
6.根據(jù)權(quán)利要求4所述的系統(tǒng),其特征在于,所述解析單元對所述XML數(shù)據(jù)進行解析的 過程包括將所述XML數(shù)據(jù)中的XML數(shù)據(jù)元素的XMLSchema類型為any的元素解析成與所 述數(shù)據(jù)對象接口類型一致的數(shù)據(jù)類型。
全文摘要
本申請公開了一種XML元數(shù)據(jù)對象化解析方法,依據(jù)XML Schema對XML數(shù)據(jù)中的數(shù)據(jù)元素進行定義,包括定義與所述數(shù)據(jù)元素結(jié)構(gòu)一致的數(shù)據(jù)對象,數(shù)據(jù)對象的關(guān)聯(lián)關(guān)系與所述數(shù)據(jù)元素的關(guān)聯(lián)關(guān)系一致;讀取所述XML數(shù)據(jù)并對所述XML數(shù)據(jù)進行解析;實例化所述XML數(shù)據(jù)對應(yīng)的數(shù)據(jù)對象,形成與所述XML數(shù)據(jù)結(jié)構(gòu)相同的數(shù)據(jù)對象。本發(fā)明提供的XML元數(shù)據(jù)對象化解析方法及系統(tǒng),預(yù)先定義XML數(shù)據(jù)結(jié)構(gòu)的XML Schema,XML Schema定義了每個元素的屬性名稱、類型、默認值、父子元素關(guān)聯(lián)關(guān)系等,本申請實施例直接使用這些數(shù)據(jù)建立對應(yīng)的Java類型,解決了現(xiàn)有XML處理方式中存在的問題。
文檔編號G06F17/30GK101944133SQ20101029909
公開日2011年1月12日 申請日期2010年9月28日 優(yōu)先權(quán)日2010年9月28日
發(fā)明者劉民, 景新海, 羅佳 申請人:山東中創(chuàng)軟件工程股份有限公司;山東中創(chuàng)軟件商用中間件股份有限公司