蘇 茁
SU Zhuo
(內蒙古電力勘測設計院,呼和浩特 010020)
隨著數據庫技術發展和應用的逐步深入,不同的數據庫管理系統導致了在各行各業的信息系統中信息資源的異構性,形成了不少信息孤島,阻礙了信息資源的集成與共享。只有有效的集成異構數據庫中的數據,才能進一步實現網絡環境下的信息共享。本文基于異構數據庫集成所面臨的問題,提出了在XML框架下實現的異構數據庫集成模型,具有較重要的理論價值與實踐意義。
不少信息集成系統均以自定義的格式描述和顯示數據,不能用一種標準化的形式顯示集成后的信息,對各個系統之間的信息交換造成了影響。信息資源集成模式最首要的需求,就是在集成傳統的數據庫中的結構化數據的基礎上,能夠對應用廣泛的非結構化和半結構化數據進行集成;在集成傳統數據的基礎上,能夠對多媒體數據進行集成;在集成己有數據源中的數據的基礎上,能夠對不斷涌現的新數據源中的數據進行集成。
2.1 系統的模式結構
解決異構數據庫問題比較理想的方案是引入中間件,XML在這種方式中具具有數據描述和傳送能力,能夠作為數據源交互媒介。其中,數據轉換能力由XSL和XSLT技術支持,開放的編程接口由DOM和SAX提供,從XML文檔集合中提取數據可以用XQuery查詢語言實現。可以看出,XML技術可以完好地支持異構數據庫集成。
以XML技術實現異構數據庫的集成,需要在XML格式和底層異構數據格式之間建立映射,從而將異構數據轉換成XML文檔,在數據結構和數據操作的基礎上,還要實現完整性約束,以避免插入和刪除異常。本文將XML異構數據庫結構分為三層,自上而下分別是應用層、XML中間件層和數據庫層。如下圖所示。
其中,數據庫層由不同結構的數據組成,屬于系統的數據源,包括各種類型信息,如文件、多媒體等。系統為了統一處理,對來自于不同數據庫的各種數據必須用一種公共媒介表示。XML支持表示數據的標準語法,能由XML語法分析程序處理的XML文檔,因此集成層的數據描述工具采用XML,并采用XML Schema作為公共媒介。

圖1 系統的模式結構
XML中間件層的功能是進行數據庫轉換以支持數據的透明訪問。向上為各種應用提供統一接口,向下協調各數據源。中間層通過運行代理程序來對數據庫中的數據進行訪問、將此數據轉換為XML格式并輸出XML文檔。XML在此處的功能是聯系異構數據庫,首先提取出一個數據庫中數據,將其轉換為XML進行發布,在經過了應用層處理后,重新存回數據庫之中。
應用層根據用戶計算環境和具體的應用為用戶提供使用的界面,采用合適的應用軟件和信息訪問技術。基于XML能夠實現多種基于Web瀏覽器的顯示模式。
2.2 XML和數據庫的映射
基于XML技術進行數據集成,一個正確的結構映射關系是十分必要的,一般來說有兩種映射方式,分別是模板驅動與模型驅動方式。
模板驅動映射方式的實現,是在映射過程中將帶參數的SQL命令嵌入一個模板中識別和執行,從而生成目標XML文檔。這種方法步驟比較簡單,但是由于不涉及關系模式或對象模式,以SQL執行的數據結果集為依據,因此不支持雙向映射。模型映射不是僅僅依賴內嵌SQL命令,而是用一個具體的模型實現的,其關鍵之處在于在XML Schemas或DTD和數據庫模式之間建立雙向映射。模型驅動的映射機制有兩種,分別是基于表的映射和基于對象的映射。
基于表的映射以單一的表格或者是表格的集合表示XML文檔,以子元素或屬性的形式存儲映射到XML文檔的數據。優點是直觀簡單,但是由于表是二維關系,難以表示如表之間的邏輯關系等XML嵌套結構;基于對象的映射則將數據映射為對象模型,然后轉換對象模型,使之成為XML文檔。這種模式映射比較豐富,但是由于引入了模型,限制了XML文檔。
基于XML Schema的映射模式則具有良好的描述性和擴展性,屬于模式和模式之間的深層映射。因此,本文描述關系數據將使用XML Schema,探討XML文檔和關系數據庫模式之間的模型映射。
2.3 數據結構的映射
本文是實現從數據庫模式映射到XML文檔時,將各字段映射為子元素。如何實現關系數據庫和XML Schema的雙向映射是本文討論的重點。
由關系模式映射為XML模式,主要解決的問題包括:1)能夠用XML表示出關系數據的精確結構;2)能夠用最好的方式進行表達。在對象關系映射中,由數據庫一個或多個相關的表構成一片森林。考慮到XML文檔的數據結構是樹狀結構,本文提出基于對象樹的映射算法,完成XML Schema與數據庫的映射,能夠對關系數據庫的結構和語義較好的表述。
關系數據庫中的一個數據表用一棵對象樹描述,XML Schema的一個元素對應樹中的每個非葉子結點,進行以下定義:
1)樹對應的數據表信息用樹的根節點描述,說明數據源的類型數據表的名稱,以及數據源所在的物理位置。
2)由于關系數據庫中主鍵和外鍵約束不等價于XML Schema中主鍵和外鍵的定義,因此將數據表中的屬性分為三類,分別是主鍵屬性、外鍵屬性和非鍵屬性,根結點的三個孩子就是這三個結點,相應的數據表的屬性是其子結點。
3)樹的第三層是主鍵屬性、外鍵屬性和非鍵屬性的子結點,對關系表中的各個屬性進行描述。
4)關系表的自定義完整性約束描述是樹的葉子結點,包括數據長度、數據類型、默認值約束和是否為空。
對象樹的生成算法如下:
Create Tree()
{結合數據表,生成一棵對象樹,使用XML Schema描述;
生成結點名為數據表的基本信息的根結點,;
為根結點生成三個孩子結點:分辨代表主鍵屬性、外鍵屬性和非鍵屬性;
While Not End of(Attribute)
{If屬性屬于主鍵
If屬性不屬于外鍵
Then為主鍵屬性結點生成以該屬性名命名的孩子結點;
生成兩個孩子結點,分別代表類型和長度;
If屬性的組合是數據表主鍵,
Then在個定義主鍵時生成孩子結點,表示是否為空;
Else If 屬性屬于外鍵
Then為外鍵屬性生成一個以該屬性名命名的孩子結點;
生成兩個孩子結點,表示是否為空和關聯字段;
Else生成一個以該屬性名命名的孩子結點;
為該屬性結點生成類型、長度、是否為空和默認值的四個孩子結點;
基于對象樹的映射算法可以多次復用,系統的性能大大提高了。
2.4 語義約束的實現
1)主鍵約束
在XML中ID屬性可以為空值,而關系數據庫中主鍵的定義具有強制性,沒每關系必須有主鍵;因此,如果出現關系表的主鍵是屬性的組合等情況的話,文檔會出現語法錯誤。在XML Schema中對主鍵定義的方法進行了明確,需要對兩部分進行說明:(1)主鍵的XML元素或屬性;(2)主鍵起作用的范圍和組成。
在基于XML Schema的語義約束中,分兩種情況,即主鍵是單一屬性和主鍵是屬性組合。主鍵是單一屬性,則用Primary Key約束定義;主鍵是屬性組合,則使用Unique約束。
2)外鍵約束
XML實現層次數據是通過使用嵌套元素或者以近似外鍵的引用機制進行的。在管理具有層次特征的數據庫方面,XML比關系數據庫具有更多的靈活性。XML與關系數據庫的不同之處在于:被外鍵引用的元組在關系數據庫被限制在該元組的關系中;而被引用的元素在XML中并不限制元素類型。
3)用戶自定義完整性約束
在XML Schema中,使用元素或屬性的default屬性設置默認值作為列的默認值,數據的長度設置使用length屬性,XML與關系數據庫相似,允許元素的屬性為空。有三種方法可以實現XML表示是否為空,分別是:use(可選屬性),nillable元素和minOccurs/maxOccurs元素。如果是簡單類型,則使用可選屬性use;如果是復雜類型,則可以使用nillable元素和minOccurs/maxOccurs元素。其中,maxOccur的含義是字段取值的最多個數,minOccurs的含義是字段取值的最少個數。
2.5 數據類型的映射
對數據類型的定義,不同的數據庫以及不同版本的數據庫是有差別的。XML文件中的所有數據都是文本(非解析實體除外),XML和關系數據庫之間存在著許多不同,包括數據類型、格式和表示方法。這是由于數據庫在于描述結構化數據,XML適于描述半結構化數據。所以,解決這兩者之間數據格式轉換問題是實現基于XML的異構數據庫集成的前提條件。XML和數據庫數據類型的轉換通常由數據交換程序負責完成。常見的轉換方法有兩種。一種方法是由用戶明確指定數據類型,另一種方法是程序根據數據庫模型來確定數據類型。數據類型的映射分為以下幾種情況:
1)基本數據類型映射的實現
XML Schema數據類型體系是比較完善的。XML Schema定義了簡單數據類型和復雜數據類型兩種主要的類型,簡單類型的組合就構成復雜類型是,簡單類型還可以進一步細分為三種,即原子類型、列表類型和聯合類型,二者之間通過基本數據類型映射表實現映射。
2)二進制數據映射的實現
XML文檔是文本文件,二進制數據映射的實現有三種處理方法,分別簡述如下:(1)將二進制數據使用CDATA標記嵌入到XML文檔中。(2)使用BASE64將二級制數據進行編碼,賦予其字符特征。(3)使用基于MIME標準的編碼方法,將二進制數據嵌入到XML文檔中。
3)空數據映射的實現
當映射XML文檔的結構到數據庫時,將空值屬性映射到 null columns 允許空值的字段,以避免產生插入錯誤或非法文件錯誤。
4)指令和注釋映射的實現
XML文檔數據并不包括處理指令和注釋,因此,大部分數據轉換軟件都不能處理指令和注釋。這些指令和注釋可能在XML文檔中的任何地方出現,因此進行對象-關系型映射或基于表格映射是不容易的。如果為這些注釋處理和指令專門準備一個表格,將指向這個表格的外鍵附加在其他表格上,則會導致每當處理別的表格時,這些表就要被檢查。因此,本文選擇簡單地忽略處理指令和注釋。
本文結合XML具有自描述性、可移植性和互操作性的優勢,以這種技術構建中間件,實現異構數據庫的資源共享和集成。本文提出了一種基于對象樹的映射方法,實現了關系模式和XML文檔的相互轉換。同時對數據的語義約束進行了保留。這種方法的優勢在于完整地保留了關系模式中的語義約束條件以及主鍵、外鍵、數據類型等,同時也保證了數據結構在模式映射過程中的正確性,具有較好的推廣價值。
[1]B.Srinivasan &J.Zeleznikow Ed.,“Databases in 2007s”,World Scientific,Singapore,2008.
[2]張雪潔.基于XML的數據庫集成平臺框架及關鍵技術研究,南京:河海大學,2006.
[3]陳剛.基于CORBA的異構數據庫系統集成模型的研究 [J],現代計算機,2005,(5):9-13.
[4]Won Kim,Ki-JoonChae.Component-Based Knowledge Engineering Architecture[J],JOOP,2009,12(6):44-45.