周衛紅
摘 要 針對目前異構數據庫間數據訪問的問題,提出了種基于XML的數據交換技術。研究了XML模式與關系模式相互轉換的方法,討論了XML數據的關系存儲以及XML與關系數據庫的映射策略,分析了基于不同映射的數據轉換的可行性。
關鍵詞 XML 關系數據庫 映射
中圖分類號:TP3 文獻標識碼:A
由于數據庫技術本身的發展和數據庫市場的變化,使得越來越多的應用需要在異構數據源之間進行訪問,XML技術便應運而生。然而,目前大部分應用的數據存儲在關系數據庫中,XML數據又以XML文檔形式存在,因此,研究XML文檔與關系數據庫的轉換對異構數據源之間的數據集成非常重要。
1 XML與關系數據庫的比較
由于傳統的各數據庫管理系統之間的異構性及其所依賴操作系統的異構性,很難實現在異構數據庫之間進行通信,同時對關系數據庫的訪問還依賴于系統對ODBC的支持程度,即便如此,很多防火墻不允許這種信息轉換,而且還容易被攻擊。XML具有無可比擬的優勢,一方面,利用XML文檔,開發人員可以編碼任何關系數據庫中的面向記錄的數據,并很好地保持這些數據的邏輯結構,甚至可以根據實際應用的需要更改這些數據的邏輯結構。另一方面,XML文檔具有透明性和平臺無關性,獨立于傳輸協議,可以使用FTP、HTTP、RPC 等多種方式傳輸,發送端和接受端無須關心數據是來自于什么平臺以及是如何產生的。
但是,XML作為一種形式語言,以文本的形式對數據進行描述,存在管理和檢索上的困難,仍然無法完全取代數據庫。首先,數據庫具有靈活而高效率的數據操作手段,可以處理海量的數據信息。就XML文檔而言,目前主要通過XML解析器提供的API來實現對文檔數據的訪問,但隨著XML文檔的數據量增大,這種方法的效率明顯不如訪問數據庫的效率高,而且XML文檔數據的維護也更加困難。其次,從并發性來說,關系數據庫本來就被設計為允許多個用戶同時處理信息,但目前對XML文檔的訪問不具備并發性。最后,從安全性來說,數據庫擁有一個很好的安全控制體系,允許用戶對數據進行不同級別的處理,而這也是XML文檔所不具備的。
2 XML數據的關系存儲
XML數據源有XML純文本文檔、關系型數據庫以及其他應用數據幾類。由于XML數據源的不同,關于XML存儲的研究目前大致分為四個方向:利用文件系統存儲XML數據的研究;利用面向對象數據庫存儲XML數據的研究;用關系數據庫存儲XML 數據的研究;專門設計的XML(NXD) 存儲策略。針對于XML具體應用,在存儲XML文檔的數據庫技術上,形成了兩大陣營。一種陣營主張在原有的傳統關系數據庫基礎上,通過擴展XML支持模塊或中間件,來完成XML數據和數據庫之間的格式轉換和傳輸;另一種陣營主張利用NXD技術來解決XML文檔的存儲管理。用關系數據庫來存儲XML數據,可以利用現有數據庫的存儲管理、并發控制、恢復、版本機制等技術有效地管理數據,并使用SQL查詢作為數據存取的方法,所以用關系數據庫來保存和處理XML數據是很有效的方法。利用關系數據庫來存儲XML數據的方法是XML半結構數據轉換為結構化數據后存儲于二維表中,來實現對XML數據的存儲和管理。由于XML和關系數據庫數據模式的互異性,不能簡單地將XML文檔存儲于關系數據表中,為了實現在XML文件和數據庫之間交換數據,必須提供一個XML映射層,將XML文檔模式(DTD、XML Schema)映射到關系數據庫模式。
3 XML與關系數據庫的映射方法
一個具體的XML模式到關系模式的數據轉換需要涉及較為復雜的XML格式分析處理及相應的數據庫操作和有效性校驗。兩者之間的映射為雙向映射,根據映射關系的建立方式不同,主要存在兩種方法:基于模板驅動的映射和基于模型驅動的映射。
(1)基于模板驅動的映射
XML文檔包含簡單元素和復雜元素兩類,簡單元素包含的內容是不具層次結構的簡單內容,而復雜元素可包含屬性、子元素,還可以包含多個子元素,其中子元素還可以是復雜元素。基于模板驅動的轉換方法是一種淺層映射,只能用于從其他類型數據到XML文檔之間的數據傳遞,并不支持面向對象之間或者關系與對象之間的信息交互,它無需提前定義好XML文檔和其他數據之間的映射,只需在XML文檔模板中嵌入一些SQL命令,這些命令在轉換時被系統識別和執行,把執行的結果替換到指令的位置,生成最終的XML文檔即可。
(2)基于模型驅動的映射
基于模型驅動的映射是一種深層映射,是模式和模式之間的映射。當把數據從數據庫傳送到XML文檔或把數據從XML文檔傳送到數據庫時,需要用一個具體的模型來實現,而不是僅僅依賴內嵌SQL命令,關系數據庫的理論依據是關系模型,而XML文檔依據的是XML Schema和DTD。基于模型驅動實現數據在關系數據庫和XML文檔間的雙向傳輸關鍵是在關系模式和DTD或XML Schema之間建立雙向映射。具體的思路是把一個XML文檔表示為由數據對象構成的樹,每一個元素類型和對象模式中的對象相對應,再通過傳統的關系—對象模型映射到關系模式中。在XML文檔中的數據有兩個公共的模型,即表模型和對象模型。表模型是基于表的映射,許多中間件包在轉換XML文檔成關系數據庫數據所使用的模型,就是將XML文檔當成一個單獨的表對象或一系列表對象。