王 炎
(陜西財經(jīng)職業(yè)技術(shù)學(xué)院信息工程系, 陜西 咸陽 712000)
XML是一種近年來流行的標(biāo)準(zhǔn)信息傳輸和數(shù)據(jù)轉(zhuǎn)換格式,因為其獨立于現(xiàn)有的數(shù)據(jù)庫和編程語言,又具有平臺無關(guān)性、自描述性、可擴展性、簡單方便處理等優(yōu)點,因此在數(shù)據(jù)庫領(lǐng)域XML的有效存儲和管理已成為研究熱點.
目前的商務(wù)數(shù)據(jù)主要存在于關(guān)系數(shù)據(jù)庫中, X ML和關(guān)系數(shù)據(jù)庫之間轉(zhuǎn)換卻比較復(fù)雜.由于XML文件是基于文本的,而且可能包含許多重復(fù)的文本,因此有較高的壓縮率.一個相當(dāng)大的XML文件易于壓縮為原來的五分之一甚至是十分之一,從而減少了網(wǎng)絡(luò)通信量.XML的核心作用體現(xiàn)為數(shù)據(jù)交換的共享標(biāo)準(zhǔn)格式,所以對關(guān)系數(shù)據(jù)庫進行XML集成研究具有重大的現(xiàn)實意義.
根據(jù)映射關(guān)系的建立方式不同,數(shù)據(jù)庫與XML之間的映射主要有兩種方法:基于模板驅(qū)動的映射和基于模型驅(qū)動的映射,這兩種映射都可以在XML文檔和數(shù)據(jù)庫之間轉(zhuǎn)換數(shù)據(jù).
圖1 基于模板驅(qū)動的轉(zhuǎn)換方法的構(gòu)架圖
基于模板的映射方法并不是事先定義好XML文檔與其他數(shù)據(jù)之間的映射關(guān)系,而是在XML文檔中嵌入帶參數(shù)的SQL命令,這些語句在數(shù)據(jù)交換過程中被系統(tǒng)所識別和執(zhí)行,執(zhí)行的結(jié)果被替換到指令所指的位置從而生成目標(biāo) XML文檔,并用數(shù)據(jù)傳輸諸如中間件等實體軟件進行處理.圖1給出了基于模板驅(qū)動的轉(zhuǎn)換方法生成模板的構(gòu)架圖.
例如從數(shù)據(jù)庫中獲取商店陳列商品的信息,并以 XML 文檔表示:
Select booksname,bookscategory,price from library
該模板中嵌入了一個 sql 語句,當(dāng)用數(shù)據(jù)傳輸中間件進行處理時,每一個 select 語句都會被它的結(jié)果所代替,該模板產(chǎn)生的XML 文檔如下:
< libraryinfo >
……
Library >
Libraryinfo >
從該 XML 文檔的產(chǎn)生可以看出基于模板的轉(zhuǎn)換方法的好處在于轉(zhuǎn)換步驟比較簡單,只要給出 XML模板就可以快速地生成相應(yīng)的XML文檔,其不足之處在于基于模板驅(qū)動的映射是一層淺層映射,以XML內(nèi)嵌的 SQL執(zhí)行的數(shù)據(jù)結(jié)果集為依據(jù),不涉及數(shù)據(jù)庫賴以存在的關(guān)系模式,只是將關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)轉(zhuǎn)換為 XML文檔模式,并沒有提取任何關(guān)系模式,它舍棄了關(guān)系模式中的種種約束條件,因此是不能做反向轉(zhuǎn)換的,即不能將 XML 文檔轉(zhuǎn)換為關(guān)系模式,基于模板的轉(zhuǎn)換方法關(guān)鍵是要生成大量合理的模板,為此系統(tǒng)需要為用戶提供一套生成模板的工具以及相應(yīng)的指令執(zhí)行程序.值得注意的是,當(dāng)前諸如Microsoft SQL Server 2005等大多的產(chǎn)品都屬于模板映射.
圖2 基于模型驅(qū)動的轉(zhuǎn)換方法的架構(gòu)圖
當(dāng)把數(shù)據(jù)從數(shù)據(jù)庫傳送到XML文檔或把數(shù)據(jù)從XML文檔傳送到數(shù)據(jù)庫時基于模型驅(qū)動的映射不是僅僅依賴內(nèi)嵌SQL命令,而是通過一個具體的模型來實現(xiàn).基于模型驅(qū)動的轉(zhuǎn)換方法的架構(gòu)如圖2所示.基于對象的映射方法是將數(shù)據(jù)庫中的數(shù)據(jù)映射為一棵對象樹,根據(jù)規(guī)則將文檔的層次結(jié)構(gòu)映射為樹狀結(jié)構(gòu)(通常是把文檔中的元素定義為樹的節(jié)點),然后將這些對象轉(zhuǎn)換到XML文檔中或相反,這種模型對于XML文檔與面向?qū)ο髷?shù)據(jù)庫和層次數(shù)據(jù)庫之間的映射是非常便利的.當(dāng)與關(guān)系數(shù)據(jù)庫進行映射時,可以利用傳統(tǒng)的“對象-關(guān)系”映射技術(shù)來實現(xiàn).對象關(guān)系映射包括兩個步驟:首先XML模式映射為對象模式,然后對象模式再映射為數(shù)據(jù)庫模式或相反,這兩個映射過程經(jīng)常結(jié)合起來充當(dāng)一次直接的DTD與數(shù)據(jù)庫模式的映射.元素通常對應(yīng)了一個對象或?qū)傩曰騊CDATA對象(PCDATA表示已解析字符數(shù)據(jù),在這里指不需再解析的最小數(shù)據(jù)單元),它將XML文檔用一棵對象樹來表示.關(guān)系數(shù)據(jù)庫的理論依據(jù)是關(guān)系模型,而XML文檔的依據(jù)是XML Schema或DTD等.把關(guān)系數(shù)據(jù)庫轉(zhuǎn)換成 XML 文檔時要把一個表或一個查詢結(jié)果的數(shù)據(jù)插入到相應(yīng)的位置即可,而把 XML 文檔轉(zhuǎn)換成數(shù)據(jù)庫數(shù)據(jù)時只要把內(nèi)容插入到相應(yīng)的表中即可.目前有兩種常用的模型——表格模型和數(shù)據(jù)專用對象模型.許多轉(zhuǎn)換軟件包用表格模型在 XML 文檔和關(guān)系數(shù)據(jù)庫之間傳遞數(shù)據(jù),它把 XML 文檔表示為一個單一的表格或者是表格的集合,這樣的 XML 文檔的結(jié)構(gòu)可以用如下的形式來表示:
這里關(guān)鍵字 table在把數(shù)據(jù)從數(shù)據(jù)庫傳遞到 XML 文檔時表示一個單一的結(jié)果集,而把數(shù)據(jù)從 XML 文檔傳遞到數(shù)據(jù)庫時表示一個單一的表格或者視圖數(shù)據(jù).專用對象模型把一個 XML 文檔表示為由數(shù)據(jù)對象構(gòu)成的樹,每一個元素類型和對象對應(yīng),主要在面向?qū)ο蠛蛯哟螖?shù)據(jù)庫中使用.通過傳統(tǒng)的關(guān)系-對象模型也可以映射到關(guān)系數(shù)據(jù)庫中,基于模型的轉(zhuǎn)換方法由于有了數(shù)據(jù)模型的支持,完全可以進行關(guān)系數(shù)據(jù)庫和 XML 數(shù)據(jù)之間的雙向轉(zhuǎn)換,但是模型的引入也使得 XML文檔的結(jié)構(gòu)受到了一些限制,一個 XML 文檔必須符合模型所規(guī)定的機構(gòu)才能將 XML 文檔轉(zhuǎn)換成其他類型的數(shù)據(jù),而從其他類型數(shù)據(jù)轉(zhuǎn)換得到的 XML 文檔也具有某種結(jié)構(gòu)特點,所以基于模型的轉(zhuǎn)換方法的關(guān)鍵在于設(shè)計一個靈活的映射模型,同時該模型能夠很好的表達關(guān)系數(shù)據(jù)庫的各種約束.與基于模板的轉(zhuǎn)換方法相比,基于模型驅(qū)動的映射方法更適于異構(gòu)數(shù)據(jù)庫間數(shù)據(jù)的交換,關(guān)系數(shù)據(jù)庫的理論基礎(chǔ)是關(guān)系模型,XML 文檔的依據(jù)是XML模式,因此關(guān)系數(shù)據(jù)庫到XML的映射問題即為關(guān)系模式到XML模式映射的問題.
在將關(guān)系模式映射為XML模式時,首先要得到XML Schema,需要從具體的關(guān)系數(shù)據(jù)庫中反求出關(guān)系模式,再根據(jù)關(guān)系模式重構(gòu)其有向圖,由有向圖再生成映射的結(jié)構(gòu),根據(jù)映射結(jié)構(gòu)和有向圖將關(guān)系模式映射為XML Schema;其次是根據(jù)得到的Schema從關(guān)系數(shù)據(jù)庫中提取數(shù)據(jù)嵌入XML事例文檔.整個流程如圖3所示.
圖3 關(guān)系模式映射為XML模式流程圖
算法的基本流程:
Input:需要提取數(shù)據(jù)的關(guān)系數(shù)據(jù)庫;
Output:用XML格式表示的局部數(shù)據(jù)庫中的數(shù)據(jù)和格式文檔XML Schema;
Step 1:反求提取出關(guān)系模式;
Step 2:重構(gòu)實體完整性約束、參照完整性約束和用戶自定義完整性約束;
Step 3:根據(jù)模式重構(gòu)生成映射結(jié)構(gòu);
Step 4:根據(jù)映射結(jié)構(gòu)和重構(gòu)結(jié)果生成XML Schema模式;
Step 5:根據(jù)得到的XML Schema模式從關(guān)系數(shù)據(jù)庫中提取數(shù)據(jù)嵌入到XML事例文檔;
Step 6:輸出以XML格式表示的局部數(shù)據(jù)庫中的數(shù)據(jù)和XMLSchema格式文檔.
隨著Web的廣泛應(yīng)用,XML正發(fā)揮著越來越重要的作用,如何在數(shù)據(jù)庫中有效地存儲XML文檔已經(jīng)成為人們研究的熱點,但由于其本身的結(jié)構(gòu)和目前廣泛使用的關(guān)系數(shù)據(jù)庫不匹配,XML和關(guān)系數(shù)據(jù)庫的結(jié)合一直沒有很好的解決方案.本文中在模型映射法的基礎(chǔ)上提出了一種簡單的XML文檔映射為關(guān)系數(shù)據(jù)庫的方法.通過這種映射機制可以進一步促進電子信息的數(shù)據(jù)交換,同時也為數(shù)字圖書館與外界的信息交換提供了技術(shù)支持,為網(wǎng)絡(luò)信息的管理提供了新思路.
[1]吳文輝,殷建平,姚丹霖.關(guān)系模式到 XML 模式的轉(zhuǎn)換研究[J].計算機工程與科學(xué),2004,30(18):165-167.
[2] 鄭 榮,馬世龍.網(wǎng)格環(huán)境下基于XML的異構(gòu)數(shù)據(jù)集成系統(tǒng)[J].計算機工程,2008,34(22):52-54.
[3] 賈素玲,王 強.XML技術(shù)應(yīng)用[M].北京:清華大學(xué)出版社,2007.
[4] 黎東華.XML數(shù)據(jù)的存儲模式的研究[J].計算機與現(xiàn)代化,2006,(11):108-112.
[5]白昱凡,胡緒一,陳家訓(xùn).基于eMIM的XML與關(guān)系數(shù)據(jù)庫的雙向映射[J].微汁算機信息,2006,22(1/3):175-177.
[6] 王霓虹,張光磊.基于XML的異構(gòu)數(shù)據(jù)庫集成的研究[J].信息技術(shù),2006,(5):173-176.
[7] 郭瑞華.XML數(shù)據(jù)的存儲策略研究[J].現(xiàn)代圖書情報技術(shù),2005,(6):65-69.