陳琦++秦進(jìn)
摘要:目前,可供選擇的數(shù)據(jù)交換技術(shù)有很多,例如XML、Json等。文章以XML作為數(shù)據(jù)交換的標(biāo)準(zhǔn)進(jìn)行研究,首先對(duì)XML進(jìn)行了必要的介紹,在此基礎(chǔ)上對(duì)常用的XML解析器和XML與關(guān)系數(shù)據(jù)庫(kù)進(jìn)行交互的過程進(jìn)行了詳細(xì)分析。
關(guān)鍵詞:數(shù)據(jù)交換;XML;XML解析器;關(guān)系數(shù)據(jù)庫(kù)
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)17-0001-03
Research of Data Exchange Technology Based on XML
CHEN Qi, QIN Jin
(College of Computer Science and Technology, Guizhou University, Guiyang 550025, China)
Abstract: At present, there are a lot of choices of data exchange technology, such as XML, Json, etc. This article chose XML as a data exchange standard to research and firstly introduced some necessary information about XML. On this basis, analyzed the commonly used XML parser and the process of the interactions between XML and relational database in detail.
Key words: data exchange;XML;XML parser;relational database
在信息技術(shù)飛速發(fā)展的今天,網(wǎng)絡(luò)已經(jīng)全面普及。不同的信息系統(tǒng)中數(shù)據(jù)的結(jié)構(gòu)、類型等是不同的,即各系統(tǒng)之間的數(shù)據(jù)是獨(dú)立的、無法共享的,形成了“信息孤島”及“信息異構(gòu)”,在后期進(jìn)行統(tǒng)計(jì)及分析的時(shí)候會(huì)因?yàn)椤靶畔⒐聧u”而導(dǎo)致工作量的加大,并且數(shù)據(jù)處理的難度也成倍增大?,F(xiàn)在企業(yè)中往往需要多個(gè)部門進(jìn)行協(xié)作,需要頻繁地共享數(shù)據(jù),因此如何解決各業(yè)務(wù)間的數(shù)據(jù)交換成為了實(shí)現(xiàn)數(shù)據(jù)共享的首要問題。
目前人們使用的數(shù)據(jù)交換技術(shù)有很多種,XML就是其中最常見的一種。XML有著嚴(yán)格的語(yǔ)法規(guī)范,因此使用XML保存的數(shù)據(jù)格式都是一致的,從而能夠很好地解決“信息孤島”和信息異構(gòu)問題。同時(shí),在存入數(shù)據(jù)的時(shí)候,還能夠依據(jù)XML的規(guī)范對(duì)數(shù)據(jù)進(jìn)行判斷,從而有效地避免數(shù)據(jù)的重復(fù)錄入和數(shù)據(jù)不一致性問題。XML以其嚴(yán)格的標(biāo)準(zhǔn)和強(qiáng)大的功能贏得了眾多開發(fā)人員的青睞,并成為數(shù)據(jù)交換領(lǐng)域的重要標(biāo)準(zhǔn)。
1 常用數(shù)據(jù)交換技術(shù)比較
數(shù)據(jù)在不同的信息實(shí)體之間交互的過程稱為數(shù)據(jù)交換[1]。目前,常用的數(shù)據(jù)交換技術(shù)主要有以下四種:
1)電子數(shù)據(jù)交換(EDI)方式[2]:EDI通過統(tǒng)一的格式來交換企業(yè)信息,企業(yè)之間通過專用的數(shù)據(jù)網(wǎng)絡(luò)來交換數(shù)據(jù)。EDI也帶來了許多問題,如格式不靈活、成本高、安全控制困難、連接可靠性不高等。
2)中介層方式:提供一個(gè)應(yīng)用程序負(fù)責(zé)專用的數(shù)據(jù)轉(zhuǎn)換,這個(gè)程序是特定的、專用的、復(fù)雜的。在這種方式下,參與數(shù)據(jù)交換的各方必須嚴(yán)格遵循相同的規(guī)則,才能準(zhǔn)確地對(duì)數(shù)據(jù)進(jìn)行封裝和解析,缺乏良好的復(fù)用性和擴(kuò)展性。
3)中間數(shù)據(jù)庫(kù)方式:在不同環(huán)境下使用如Access等較小的數(shù)據(jù)庫(kù)系統(tǒng)來實(shí)現(xiàn)不同數(shù)據(jù)源間的數(shù)據(jù)減緩。先對(duì)要轉(zhuǎn)出的數(shù)據(jù)庫(kù)生成腳本,得到該數(shù)據(jù)庫(kù)的表結(jié)構(gòu),然后按照不同數(shù)據(jù)庫(kù)系統(tǒng)間的區(qū)別對(duì)腳本進(jìn)行修改,生成符合規(guī)范的SQL語(yǔ)句,最后再在新環(huán)境的數(shù)據(jù)庫(kù)系統(tǒng)中執(zhí)行腳本[3]。這種利用中間數(shù)據(jù)庫(kù)的方式需要將信息從其他地方轉(zhuǎn)存到中間數(shù)據(jù)庫(kù)中,這一過程需要按照一定的格式對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換,因此操作上比較繁瑣、效率低下。
4)中間件方式:各個(gè)數(shù)據(jù)源將自己的數(shù)據(jù)按照一定的通用格式提供出來,實(shí)現(xiàn)透明的數(shù)據(jù)交互。與中間數(shù)據(jù)庫(kù)方式相比,使用中間件較好地保留了各個(gè)分布場(chǎng)地的自治權(quán),同時(shí)保證了一定的實(shí)時(shí)性。
2 基于XML的數(shù)據(jù)交換技術(shù)
2.1 XML介紹
XML[4]是extensible Markup Language(可擴(kuò)展的標(biāo)記語(yǔ)言)的縮寫,是W3C組織于1998年2月發(fā)布的標(biāo)準(zhǔn)。W3C組織制定XML標(biāo)準(zhǔn)是為了定義一種能夠在互聯(lián)網(wǎng)上進(jìn)行數(shù)據(jù)交換的標(biāo)準(zhǔn)。W3C采取了簡(jiǎn)化SMGL的策略,在SMGL基礎(chǔ)上,去掉語(yǔ)法定義部分,適當(dāng)簡(jiǎn)化DTD部分,并增加了部分互聯(lián)網(wǎng)的特殊部分。因?yàn)閄ML是一種樹狀結(jié)構(gòu),可以把形式與內(nèi)容徹底分離,正是基于這個(gè)原因,可以使用XML將不同數(shù)據(jù)格式的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,從而達(dá)到數(shù)據(jù)交換的目的。此外,XML允許用戶按照W3C組織的規(guī)定去定義無數(shù)個(gè)自定義標(biāo)簽,標(biāo)簽形式多種多樣。XML可以用來描述關(guān)系結(jié)構(gòu)的數(shù)據(jù),還可以用作配置文件,當(dāng)作一個(gè)小型的數(shù)據(jù)庫(kù)或數(shù)據(jù)載體來使用。
2.2 基于XML的數(shù)據(jù)交換模型
基于XML的數(shù)據(jù)交換模型采用了上述的中間件模式來實(shí)現(xiàn)數(shù)據(jù)源的交換,作為溝通數(shù)據(jù)源和應(yīng)用/邏輯層的一個(gè)紐帶。XML在進(jìn)行數(shù)據(jù)交換的過程中,一方面,針對(duì)所有數(shù)據(jù)源數(shù)據(jù)模式進(jìn)行抽取,將各數(shù)據(jù)庫(kù)中的不同數(shù)據(jù)表示形式統(tǒng)一成一致的數(shù)據(jù)視圖 XML文件。另一方面,要將 XML的數(shù)據(jù)轉(zhuǎn)換為 RDBMS系統(tǒng)下的數(shù)據(jù)組織形式,以關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)來存儲(chǔ)數(shù)據(jù)[5]?;赬ML的數(shù)據(jù)交換模型分為三層結(jié)構(gòu),如圖1所示:
圖1 基于XML的數(shù)據(jù)交換模型
2.3 幾種常見的XML解析器
2.3.1 DOM
DOM(Document Object Model),稱為文檔對(duì)象模型,是以層次結(jié)構(gòu)組織的節(jié)點(diǎn)或信息的集合,是W3C組織推薦的一種處理XML的標(biāo)準(zhǔn)編程接口,與平臺(tái)和語(yǔ)言無關(guān)。DOM在解析XML文件的過程中,會(huì)一次性將所有內(nèi)容加載到內(nèi)存中,形成一個(gè)樹形結(jié)構(gòu),因此DOM又被認(rèn)為是基于樹或基于對(duì)象的模型。在使用DOM過程中會(huì)使用Document對(duì)象來代表XML在內(nèi)存中的映像,即代表一個(gè)XML文檔的模型樹,所有的節(jié)點(diǎn)都包含在該Document對(duì)象中。之后,開發(fā)人員即可使用該對(duì)象對(duì)XML文檔進(jìn)行相應(yīng)的編輯與操作。DOM雖然使用起來較為簡(jiǎn)單,但是在處理大文件時(shí)就顯得力不從心了。因?yàn)镈OM每次都會(huì)將XML文件全部加載到內(nèi)存中,因此對(duì)于大文件內(nèi)存的占用就很高。另外,DOM解析速度較慢,效率不高,因此只適用解析小的配置文件等。
2.3.2 SAX
SAX(Simple API for XML),是sun公司提供的一個(gè)基于事件的xml解析器,既是一個(gè)接口,又是一個(gè)軟件包。SAX解析XML文檔不同于DOM,它是多次將XML文檔加載到內(nèi)存中,因此它可以一邊掃描以便解析。正是基于這一特點(diǎn),對(duì)于大文件,SAX的解析速度比DOM要快得多,并且占用的內(nèi)存少。SAX采用基于事件的模型,在解析XML文檔的時(shí)候,會(huì)根據(jù)XML此時(shí)的狀態(tài),即開始標(biāo)簽、結(jié)束標(biāo)簽,調(diào)用SAX處理器相應(yīng)的方法。正如我們常說的,任何事物都具有兩面性,SAX也不例外。SAX沒有像DOM那樣的父/子支持,因此不能交流元信息,從而導(dǎo)致了越是復(fù)雜的文檔,其應(yīng)用邏輯就越復(fù)雜,編碼的難度就越大。
2.3.3 DOM4J
DOM4J是一個(gè)非常優(yōu)秀的JAVA XML API,是由dom4j.org出品的一個(gè)XML解析包。DOM4J采用了java集合框架,能夠完全支持DOM和SAX。因?yàn)樗鼉?nèi)部包含了多個(gè)接口,因此在使用上非常靈活,從而形成了它性能優(yōu)異、功能強(qiáng)大和極易使用的特點(diǎn)。DOM4J還有一個(gè)特點(diǎn),它是完全開源的,現(xiàn)在越來越多的java軟件都是用它來進(jìn)行XML解析。DOM4J主要接口圖如圖2所示:
圖中各接口的功能分別為:Node為dom4j中XML的節(jié)點(diǎn)定義了多態(tài)行為;Branch為能夠包含子節(jié)點(diǎn)的節(jié)點(diǎn)定義了一個(gè)公共的行為;Element 定義XML 元素;Document定義了XML文檔;DocumentType 定義了XML DOCTYPE聲明;Entity定義了 XML entity;Attribute定義了XML的屬性;ProcessingInstruction 定義了XML 處理指令;CharacterData是一個(gè)標(biāo)識(shí)接口,標(biāo)識(shí)基于字符的節(jié)點(diǎn),如CDATA;CDATA 定義了XML CDATA 區(qū)域;Text 定義XML的文本節(jié)點(diǎn);Comment 定義了XML注釋的行為。
3 XML數(shù)據(jù)交換的實(shí)現(xiàn)過程
使用中間件XML來實(shí)現(xiàn)數(shù)據(jù)的交換,將XML文檔作為一個(gè)橋梁實(shí)現(xiàn)各平臺(tái)之間的互連,從而實(shí)現(xiàn)數(shù)據(jù)的整合及共享。對(duì)于現(xiàn)有的各種資源,其中絕大部分都是結(jié)構(gòu)化的數(shù)據(jù),可以存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù)中,因此,XML與這些數(shù)據(jù)的交換實(shí)質(zhì)上就是與關(guān)系數(shù)據(jù)庫(kù)中數(shù)據(jù)的交換。
當(dāng)前XML與關(guān)系數(shù)據(jù)庫(kù)之間的相互換轉(zhuǎn)換的方法有很多,例如基于模型驅(qū)動(dòng)的XML與數(shù)據(jù)庫(kù)雙向映射技術(shù),將XML中的數(shù)據(jù)同數(shù)據(jù)庫(kù)對(duì)應(yīng)的表進(jìn)行映射匹配,使得XML文件中保存的數(shù)據(jù)和數(shù)據(jù)間的關(guān)系通過這種映射關(guān)系保存到數(shù)據(jù)庫(kù)中[6],該方法的核心是在數(shù)據(jù)庫(kù)模式(包括關(guān)系型和面向?qū)ο笮停┖蚗ML Schema或DTD之間建立雙向映射。另一種方法是在XML和數(shù)據(jù)庫(kù)之間添加一個(gè)數(shù)據(jù)轉(zhuǎn)換程序組件,將數(shù)據(jù)從XML文件中解析出來存入數(shù)據(jù)庫(kù),或從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)并添加到XML檔中[7]。
3.1關(guān)系數(shù)據(jù)庫(kù)向XML轉(zhuǎn)換
關(guān)系數(shù)據(jù)庫(kù)向XML轉(zhuǎn)換需要經(jīng)過三個(gè)主要步驟:提取、轉(zhuǎn)換和存儲(chǔ)。首先,從數(shù)據(jù)庫(kù)中提取要保存在XML文檔中的數(shù)據(jù),數(shù)據(jù)的提取可以通過JDBC或者ODBC接口訪問技術(shù)實(shí)現(xiàn),該數(shù)據(jù)包括兩部分:數(shù)據(jù)庫(kù)中關(guān)系模式和表中的字段值。其次,將提取出來的數(shù)據(jù)與XML約束(DTD或XML Schema)相結(jié)合即可生成XML文檔。這個(gè)過程涉及到的操作有兩個(gè):將數(shù)據(jù)庫(kù)中的關(guān)系模式轉(zhuǎn)換為XML約束、將數(shù)據(jù)庫(kù)表中的值與XML約束結(jié)合生成XML文檔。整個(gè)轉(zhuǎn)換過程如圖3所示。
3.2 XML向關(guān)系數(shù)據(jù)庫(kù)轉(zhuǎn)換
XML向關(guān)系數(shù)據(jù)庫(kù)轉(zhuǎn)換實(shí)際上就是關(guān)系數(shù)據(jù)庫(kù)向XML轉(zhuǎn)換的逆過程,也分為三個(gè)主要階段:提取、轉(zhuǎn)換和存儲(chǔ)。首先,使用DOM或SAX等解析方法對(duì)XML進(jìn)行解析,這一過程也涉及兩個(gè)操作:提取XML文檔中的約束(XML Schema)并將其轉(zhuǎn)換為相應(yīng)的關(guān)系模式、解析XML文檔中的數(shù)據(jù)。其次,根據(jù)上一步得到的關(guān)系模式建表,并將解析出來的數(shù)據(jù)添加到相應(yīng)的表中。這一過程可以使用JDBC或ODBC接口訪問技術(shù)實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接。轉(zhuǎn)換過程如圖4所示:
圖4 XML向關(guān)系數(shù)據(jù)庫(kù)轉(zhuǎn)換
4 結(jié)束語(yǔ)
XML技術(shù)有著嚴(yán)格的標(biāo)準(zhǔn)和強(qiáng)大的功能,并且提供了統(tǒng)一的方法來描述和交換獨(dú)立于應(yīng)用程序或供應(yīng)商的結(jié)構(gòu)化數(shù)據(jù)。因此使用XML作為中間件就可以方便的實(shí)現(xiàn)各數(shù)據(jù)源間數(shù)據(jù)的交換,將各數(shù)據(jù)源中的數(shù)據(jù)統(tǒng)一成一致的格式進(jìn)行集中處理,進(jìn)而消除“信息孤島”,實(shí)現(xiàn)數(shù)據(jù)共享。
參考文獻(xiàn):
[1] 楊劍. 基于XML的異構(gòu)數(shù)據(jù)交換系統(tǒng)的研究與實(shí)現(xiàn)[D].成都: 西南交通大學(xué), 2005.
[2] 朱勤, 陸建新, 陳繼紅. 基于XML的異構(gòu)數(shù)據(jù)交換技術(shù)及其Java實(shí)現(xiàn)[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2004(11): 52-53,125.
[3] 李聰. 基于XML的數(shù)據(jù)交換平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 武漢: 武漢理工大學(xué), 2009.
[4] Extensible Markup Language (XML) 1.0[EB/OL].http://www.w3.org/TR/REC-xml.
[5] 楊劍. 基于XML的異構(gòu)數(shù)據(jù)交換系統(tǒng)的研究與實(shí)現(xiàn)[D]. 成都: 西南交通大學(xué), 2005.
[6] Tom Myers,Alexander Nakhimovsky.JavaXML編程指南[M]. 北京: 電子工業(yè)出版社, 2003.
[7] 李剛. 基于Web訪問數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方案[J]. 計(jì)算機(jī)工程與應(yīng)用, 2000(8): 32-35.