摘要:討論了關(guān)系模式映射為XML的方法,研究了關(guān)系模式的反求算法,分析了基于鍵的嵌套算法和扁平算法,實(shí)現(xiàn)了以模型驅(qū)動(dòng)的關(guān)系模式映射為XML的算法。實(shí)現(xiàn)了將XML模式轉(zhuǎn)換為關(guān)系模式的算法。最后就關(guān)系模式與XML的轉(zhuǎn)換建立了異構(gòu)關(guān)系數(shù)據(jù)統(tǒng)一轉(zhuǎn)換的工具。
關(guān)鍵詞:XML;XML Schema;關(guān)系模式
中圖分類號(hào):TP391文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)14-3611-03
Research of Heterogeneous Database Convertion Based on XMl
YANG Hai-yan
(Southwest Jiaotong University, Chengdu 610031,China)
Abstract: The method of mapping the relationship model to XML is discussused. Inverse algorithm of relation model is studied. based on the analysis of the key nested algorithm and flat algorithm,the algorithm of model driven model mapping to XML is realized.It is realized that XML modeconvert to the relationship model. Finally the tool is established for the transformation of XML data between heterogeneous relationship database.
Key words: XML; XML schema; relation mode
1 引言
隨著企業(yè)信息化建設(shè)的不斷深入、軟硬件資源的升級(jí)和各種應(yīng)用的擴(kuò)展,造成了多種關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)并存的異構(gòu)問(wèn)題,企業(yè)經(jīng)常需要對(duì)異構(gòu)關(guān)系數(shù)據(jù)庫(kù)進(jìn)行轉(zhuǎn)換和遷移。隨著XML的出現(xiàn),由于其本身所具有的與平臺(tái)無(wú)關(guān)、易于擴(kuò)展、交互性好、語(yǔ)義性強(qiáng)、可格式化等特性和優(yōu)點(diǎn),使得其能夠方便地描述關(guān)系數(shù)據(jù)庫(kù),本文研究以XML模式實(shí)現(xiàn)異構(gòu)關(guān)系數(shù)據(jù)庫(kù)間數(shù)據(jù)的遷移和轉(zhuǎn)換。
2 轉(zhuǎn)換流程
在相互轉(zhuǎn)換時(shí)通過(guò)建立合適的映射規(guī)則以保證轉(zhuǎn)換的可逆性,保留關(guān)系數(shù)據(jù)庫(kù)的各種約束。在關(guān)系模式映射為XML模式時(shí),首先根據(jù)提取出的關(guān)系模式重新構(gòu)造關(guān)系模式,并用關(guān)系數(shù)據(jù)樹(shù)來(lái)表示,再根據(jù)關(guān)系數(shù)據(jù)樹(shù)確定表與表之間的嵌套關(guān)系,生成映射結(jié)構(gòu)樹(shù)。根據(jù)映射結(jié)構(gòu)樹(shù)和關(guān)系數(shù)據(jù)樹(shù)將關(guān)系模式映射為XML模式并生成XML Schema文檔和數(shù)據(jù)事例文檔。在XML模式映射為關(guān)系模式時(shí),首先用JDOM解析Schema,分析Schema的結(jié)構(gòu),用形式化的方式描述XML Schema所定義相關(guān)結(jié)構(gòu)和約束信息。根據(jù)形式化的結(jié)果生成元素樹(shù),元素樹(shù)是真實(shí)的再現(xiàn)了XML Schema所描述的結(jié)構(gòu),它與XML文檔數(shù)據(jù)結(jié)構(gòu)是類似的。由元素樹(shù)和形式化結(jié)果,制定適當(dāng)?shù)挠成湟?guī)則將 XML模式映射為關(guān)系模式,重要的是需要根據(jù)嵌套關(guān)系,補(bǔ)充參照關(guān)系。由于各種關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)SQL方言的存在,這里必須針對(duì)具體的數(shù)據(jù)庫(kù)管理系統(tǒng)動(dòng)態(tài)的合成SQL中的DDL語(yǔ)句。整個(gè)轉(zhuǎn)換過(guò)程如圖1所示。
3 關(guān)系模式映射為XML模式
圖2為關(guān)系模式映射為XML流程。
4.1 關(guān)系模式的提取
系統(tǒng)利用JAVA API相關(guān)函數(shù)通過(guò)讀取數(shù)據(jù)庫(kù)相關(guān)元數(shù)據(jù)來(lái)獲取關(guān)系數(shù)據(jù)庫(kù)的模式。根據(jù)JAVA API提供的接口和關(guān)系模式本身的特點(diǎn),用集合來(lái)形式化的表現(xiàn)關(guān)系模式。
假設(shè)已存在一個(gè)表名的集合T,列名集合C和原子數(shù)據(jù)類型集合A。設(shè)R 代表關(guān)系模式,可以用一個(gè)九元組來(lái)表示R,令R=(T,C,P,PK,F(xiàn)K,UK,G,W, )其中,
1) T代表T中的一個(gè)有限集合。
2) C代表對(duì)應(yīng)一個(gè)特定t∈T到一組c∈C的映射。
3) P代表對(duì)于一個(gè)c∈C到其類型定義的映射:P(c)=α,α為一個(gè)六元組(τ,μ,λ,π,ρ,δ),t∈A;μ代表是否值唯一,取值unique或u_unique;λ代表是否可取空值,取值為1able 或u_1able;π代表缺省值,若沒(méi)有缺省值,則用ε代替;ρ在各種字符串類型中表示字符串長(zhǎng)度,在各種數(shù)字類型中表示數(shù)值精度,它的值等于0表示無(wú)此項(xiàng)約束;δ為列的其他約束描述,主要是SQL中Check描述的約束,它是域值約束,該約束不能從JDBC的MetaDatabase接口中直接獲取,沒(méi)有其他約束其值為ε;
4) PK代表主鍵約束,對(duì)于t∈T,有PK(t)={ci},{ci}為屬于表t的部分屬性列的集合,既ci∈c(t);
5) FK代表外鍵約束,對(duì)于ci∈c(t)有FK(ci)?哿cj,其中ci∈C;
6) UK代表唯一鍵或唯一索引約束,對(duì)于t∈T,有UK(t)={{ci},{cj}…},{ci},{cj}為屬于表t的部分屬性列的集合,既ci,cj∈c(t),{ci}即為表t的一個(gè)唯一性索引;
7) G代表對(duì)應(yīng)特定t∈T是否含有外鍵的映射,即G(t)=b, b=0為不含外鍵,b等于其它值時(shí),為含有外鍵,其值表示外鍵數(shù)。
8) W代表對(duì)應(yīng)特定t∈T,是否有外鍵參照t中的主鍵,即w(t)=x,x=0代表無(wú)外鍵參照,x等于其它值時(shí),代表有外鍵參照 ,其數(shù)值表示被參照的數(shù)量。
9) ?撞代表關(guān)系模式中其它關(guān)系描述的有限集合。
2.2 映射結(jié)構(gòu)
映射結(jié)構(gòu)即將關(guān)系模式映射為XML模式后,表與表,列與列之間的層次關(guān)系,用一棵帶父節(jié)點(diǎn)的二叉樹(shù)來(lái)表示。左孩子表示兄弟關(guān)系,右孩子表示嵌套關(guān)系,同一個(gè)節(jié)點(diǎn)的屬性與子元素按兄弟關(guān)系處理,父節(jié)點(diǎn)表示嵌套該節(jié)點(diǎn)的元素。因此所有的表可建立一棵二叉樹(shù),表示它們之間的嵌套關(guān)系,對(duì)于扁平結(jié)構(gòu)轉(zhuǎn)換,它簡(jiǎn)化變成了一個(gè)鏈表。表內(nèi)的所有列也可建立一個(gè)這樣的二叉樹(shù)以表明嵌套關(guān)系。元素的實(shí)際層次結(jié)構(gòu)和二叉樹(shù)表示的結(jié)構(gòu)關(guān)系如圖3所示。
3.3 模式映射
映射主要分為兩部分,一部分是關(guān)系模式的表、列到XML元素、屬性的映射,這一部分涉及關(guān)系模式R中的T、C,為結(jié)構(gòu)映射;另一部分是列約束的映射及關(guān)系模式的主鍵、外鍵、唯一性約束到XML一致性束的映射,這一部分涉及關(guān)系模式R中的P、PK、FK、UI,為完整性約束映射。在這里把列映射為元素,其映射算法如下:
1) 確定與XML Schema相關(guān)的全局變量,即XML Schema文檔根元素schema有關(guān)屬性值的確定,如目標(biāo)命名空間、命名空間等。目標(biāo)命名空間target Name space為了保持唯一性,采用主機(jī)IP+關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)名+數(shù)據(jù)庫(kù)名。
2) 創(chuàng)建根元素。每個(gè)XML文檔有且僅有一個(gè)根元素,這里用數(shù)據(jù)庫(kù)名作為映射后的根元素,它擁有DBType、IP、Port三個(gè)屬性,DBType為數(shù)據(jù)庫(kù)類型,IP為數(shù)據(jù)源所在主機(jī)的IP地址,Port為數(shù)據(jù)庫(kù)所監(jiān)聽(tīng)的端口號(hào)。
3) 建立表元素。對(duì)映射結(jié)構(gòu)樹(shù)用先根遍歷進(jìn)行遍歷,將根表映射為根元素的子元素,根表就是結(jié)構(gòu)樹(shù)中P節(jié)點(diǎn)為空的表,也就是從結(jié)構(gòu)樹(shù)的根節(jié)點(diǎn)出發(fā),沿著左節(jié)點(diǎn)向前走的節(jié)點(diǎn)都是根表的節(jié)點(diǎn),如圖4中的T_1、T_2、T_3是根表,這樣先根遍歷先訪問(wèn)到的節(jié)點(diǎn)是根表的節(jié)點(diǎn)。
4) 建立復(fù)雜類型。每一個(gè)復(fù)雜類型對(duì)應(yīng)一個(gè)表結(jié)構(gòu),實(shí)現(xiàn)了表結(jié)構(gòu)映射的相對(duì)獨(dú)立性。每個(gè)復(fù)雜類型包含的元素為表的各個(gè)列、及其嵌套的表。
5) 列元素相關(guān)約束的映射,主要指的是關(guān)系模式R中P的內(nèi)容,包括列的數(shù)據(jù)類型、是否為空、字符串長(zhǎng)度、數(shù)據(jù)精度、默認(rèn)值等??蓱?yīng)用XML的基本數(shù)據(jù)類型和簡(jiǎn)單類型組件組合起來(lái)表達(dá)列的數(shù)據(jù)類型,如類型CHAR、長(zhǎng)度20和VAR CHAR。
6) 一致性約束映射,即主鍵、唯一性約束、外鍵到Schema的映射。
3.4 數(shù)據(jù)嵌入
通過(guò)完成表結(jié)構(gòu)映射和約束映射,就實(shí)現(xiàn)了關(guān)系模式到XML-Schema的映射。根據(jù)映射的結(jié)果從數(shù)據(jù)庫(kù)中取出數(shù)據(jù)生成相應(yīng)的XML文檔。嵌入數(shù)據(jù)時(shí),很顯然要先嵌入上層元素的數(shù)據(jù),后嵌入下層元素的數(shù)據(jù),因此,這里可以按照映射結(jié)構(gòu)樹(shù)先序遍歷的順序,將關(guān)系數(shù)據(jù)庫(kù)表中的數(shù)據(jù)嵌入到XML文檔中。
4 XML模式到關(guān)系模式的映射
圖4為XML模式轉(zhuǎn)換為關(guān)系模式流程。
4.1 形式化描述
XML Schema是非常復(fù)雜的文檔,它描述了一個(gè)樹(shù)形結(jié)構(gòu)的XML事例文檔。根據(jù)Schema的特點(diǎn),我們用形式化的方法來(lái)描述它,XS是一個(gè)十元組,令XS =(CE,SE,RE,EE,EA,ED,AD,U,K,fK),其中:
1) CE表示復(fù)雜元素名有限集;
2) SE表示簡(jiǎn)單元素有限集,簡(jiǎn)單元素用簡(jiǎn)單元素名和其父元素名共同標(biāo)識(shí);
3) RE表示根元素名有限集;
4) EE表示從元素e到其子元素的生成式集;
5) EA表示從元素名e到其屬性名a∈T的生成式集;
6) ED表示簡(jiǎn)單元素se到簡(jiǎn)單元素?cái)?shù)據(jù)類型的生成式集合;
7) AD表示從屬性名a 到屬性數(shù)據(jù)類型的生成式集合
8) U表示唯一約束,U(Km)={XPs,XPf },其中Km 表示唯一約束名,XPs、XPf 分別表示唯一約束的Xpath表示的selector 域和field 域;
4.2 建立元素樹(shù)
構(gòu)建元素樹(shù)的算法如下:1)將RE中的根元素加入元素有向樹(shù),將EA中根元素的屬性加入元素樹(shù)中,并在EE中將其子元素也加入元素樹(shù),將其子元素加入到棧中。2)從棧中取出元素,將EA中該元素的屬性加入到元素樹(shù)中,并將其子元素加入元素樹(shù)中,對(duì)第2步循環(huán)調(diào)用直到棧為空。元素樹(shù)清晰的表達(dá)了XML Schema文檔所描述的結(jié)構(gòu)。
4.3 映射轉(zhuǎn)化
映射轉(zhuǎn)化分為3個(gè)步驟進(jìn)行。首先需要確定的是元素有向樹(shù)中哪些節(jié)點(diǎn)映射為表,哪些映射為表的列,根元素是數(shù)據(jù)庫(kù)的名稱,而其屬性是有關(guān)關(guān)系數(shù)據(jù)庫(kù)的一些描述;其次是對(duì)應(yīng)關(guān)系模式R中P的映射,也就是將XML Schema中的簡(jiǎn)單元素定義和屬性定義映射為列約束;第三是主關(guān)鍵字約束、引用關(guān)鍵字約束、唯一鍵約束的映射
4.4 SQL語(yǔ)句的生成
其步驟如下:1)合成創(chuàng)建表語(yǔ)句,涉及關(guān)系模式R中的T、C、P,找出各列的數(shù)據(jù)類型、默認(rèn)值、是否可以為空等條件。2)根據(jù)關(guān)系模式R(PK)合成主鍵語(yǔ)句,保證關(guān)系模式的實(shí)體完整性。3)根據(jù)關(guān)系模式R(FK)合成外鍵語(yǔ)句,保證關(guān)系模式的參照完整完性。4.根據(jù)關(guān)系模式R(UI)合成唯一鍵,根據(jù)P 中的δ分量合成檢查語(yǔ)句,保證關(guān)系模式的用戶定義完整性。
4.5 XML文檔數(shù)據(jù)的錄入
解析XML數(shù)據(jù)文檔,根據(jù)Schema的映射結(jié)果,將數(shù)據(jù)合成SQL中的INSERT語(yǔ)句插入到數(shù)據(jù)庫(kù)中。至此XML模式已經(jīng)完整的轉(zhuǎn)化為關(guān)系模式,包括模式轉(zhuǎn)換和數(shù)據(jù)入庫(kù)兩部分。
5 結(jié)論
建立的轉(zhuǎn)換界面如圖6所示。以XML為模型的異構(gòu)關(guān)系數(shù)據(jù)庫(kù)轉(zhuǎn)換工具能夠較好的實(shí)現(xiàn)各種異構(gòu)關(guān)系數(shù)據(jù)庫(kù)之間的模式轉(zhuǎn)換和數(shù)據(jù)遷移,實(shí)現(xiàn)轉(zhuǎn)換過(guò)程的自動(dòng)化、與兩端數(shù)據(jù)庫(kù)的無(wú)關(guān)性。
參考文獻(xiàn):
[1] Mark Graves,XML數(shù)據(jù)庫(kù)設(shè)計(jì)[M].尹志軍,譯.北京:機(jī)械工業(yè)出版社,2003.
[2] 杜賓,王明文.跨平臺(tái)數(shù)據(jù)遷移的研究和實(shí)現(xiàn)[J].計(jì)算機(jī)與現(xiàn)代化,2001.
[3] 方翔.XML文檔到關(guān)系數(shù)據(jù)庫(kù)的直接轉(zhuǎn)換[J].計(jì)算機(jī)工程,2001,27(11):65-66.
[4] 方翔,李偉生.關(guān)系模式到XML模式的影射[J].計(jì)算機(jī)應(yīng)用研究,2002,130-132.
[5] Dongwon Lee, Murali Mani, Makoto Murata, Reasoning about XML Schema Languages using Formal Language Theory, Technical Report, IBM Almaden Research Center, Nov. 2000.
[6] W3C. XML Schema Part 0: Primer (W3C Proposed Recommendation). http://www.w3.org /TR/2001/PR-xmlschema-0-20010330/.2001.3.