蘇 茁
SU Zhuo
(內(nèi)蒙古電力勘測(cè)設(shè)計(jì)院,呼和浩特 010020)
隨著數(shù)據(jù)庫(kù)技術(shù)發(fā)展和應(yīng)用的逐步深入,不同的數(shù)據(jù)庫(kù)管理系統(tǒng)導(dǎo)致了在各行各業(yè)的信息系統(tǒng)中信息資源的異構(gòu)性,形成了不少信息孤島,阻礙了信息資源的集成與共享。只有有效的集成異構(gòu)數(shù)據(jù)庫(kù)中的數(shù)據(jù),才能進(jìn)一步實(shí)現(xiàn)網(wǎng)絡(luò)環(huán)境下的信息共享。本文基于異構(gòu)數(shù)據(jù)庫(kù)集成所面臨的問(wèn)題,提出了在XML框架下實(shí)現(xiàn)的異構(gòu)數(shù)據(jù)庫(kù)集成模型,具有較重要的理論價(jià)值與實(shí)踐意義。
不少信息集成系統(tǒng)均以自定義的格式描述和顯示數(shù)據(jù),不能用一種標(biāo)準(zhǔn)化的形式顯示集成后的信息,對(duì)各個(gè)系統(tǒng)之間的信息交換造成了影響。信息資源集成模式最首要的需求,就是在集成傳統(tǒng)的數(shù)據(jù)庫(kù)中的結(jié)構(gòu)化數(shù)據(jù)的基礎(chǔ)上,能夠?qū)?yīng)用廣泛的非結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù)進(jìn)行集成;在集成傳統(tǒng)數(shù)據(jù)的基礎(chǔ)上,能夠?qū)Χ嗝襟w數(shù)據(jù)進(jìn)行集成;在集成己有數(shù)據(jù)源中的數(shù)據(jù)的基礎(chǔ)上,能夠?qū)Σ粩嘤楷F(xiàn)的新數(shù)據(jù)源中的數(shù)據(jù)進(jìn)行集成。
2.1 系統(tǒng)的模式結(jié)構(gòu)
解決異構(gòu)數(shù)據(jù)庫(kù)問(wèn)題比較理想的方案是引入中間件,XML在這種方式中具具有數(shù)據(jù)描述和傳送能力,能夠作為數(shù)據(jù)源交互媒介。其中,數(shù)據(jù)轉(zhuǎn)換能力由XSL和XSLT技術(shù)支持,開放的編程接口由DOM和SAX提供,從XML文檔集合中提取數(shù)據(jù)可以用XQuery查詢語(yǔ)言實(shí)現(xiàn)??梢钥闯?,XML技術(shù)可以完好地支持異構(gòu)數(shù)據(jù)庫(kù)集成。
以XML技術(shù)實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫(kù)的集成,需要在XML格式和底層異構(gòu)數(shù)據(jù)格式之間建立映射,從而將異構(gòu)數(shù)據(jù)轉(zhuǎn)換成XML文檔,在數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)操作的基礎(chǔ)上,還要實(shí)現(xiàn)完整性約束,以避免插入和刪除異常。本文將XML異構(gòu)數(shù)據(jù)庫(kù)結(jié)構(gòu)分為三層,自上而下分別是應(yīng)用層、XML中間件層和數(shù)據(jù)庫(kù)層。如下圖所示。
其中,數(shù)據(jù)庫(kù)層由不同結(jié)構(gòu)的數(shù)據(jù)組成,屬于系統(tǒng)的數(shù)據(jù)源,包括各種類型信息,如文件、多媒體等。系統(tǒng)為了統(tǒng)一處理,對(duì)來(lái)自于不同數(shù)據(jù)庫(kù)的各種數(shù)據(jù)必須用一種公共媒介表示。XML支持表示數(shù)據(jù)的標(biāo)準(zhǔn)語(yǔ)法,能由XML語(yǔ)法分析程序處理的XML文檔,因此集成層的數(shù)據(jù)描述工具采用XML,并采用XML Schema作為公共媒介。
圖1 系統(tǒng)的模式結(jié)構(gòu)
XML中間件層的功能是進(jìn)行數(shù)據(jù)庫(kù)轉(zhuǎn)換以支持?jǐn)?shù)據(jù)的透明訪問(wèn)。向上為各種應(yīng)用提供統(tǒng)一接口,向下協(xié)調(diào)各數(shù)據(jù)源。中間層通過(guò)運(yùn)行代理程序來(lái)對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行訪問(wèn)、將此數(shù)據(jù)轉(zhuǎn)換為XML格式并輸出XML文檔。XML在此處的功能是聯(lián)系異構(gòu)數(shù)據(jù)庫(kù),首先提取出一個(gè)數(shù)據(jù)庫(kù)中數(shù)據(jù),將其轉(zhuǎn)換為XML進(jìn)行發(fā)布,在經(jīng)過(guò)了應(yīng)用層處理后,重新存回?cái)?shù)據(jù)庫(kù)之中。
應(yīng)用層根據(jù)用戶計(jì)算環(huán)境和具體的應(yīng)用為用戶提供使用的界面,采用合適的應(yīng)用軟件和信息訪問(wèn)技術(shù)?;赬ML能夠?qū)崿F(xiàn)多種基于Web瀏覽器的顯示模式。
2.2 XML和數(shù)據(jù)庫(kù)的映射
基于XML技術(shù)進(jìn)行數(shù)據(jù)集成,一個(gè)正確的結(jié)構(gòu)映射關(guān)系是十分必要的,一般來(lái)說(shuō)有兩種映射方式,分別是模板驅(qū)動(dòng)與模型驅(qū)動(dòng)方式。
模板驅(qū)動(dòng)映射方式的實(shí)現(xiàn),是在映射過(guò)程中將帶參數(shù)的SQL命令嵌入一個(gè)模板中識(shí)別和執(zhí)行,從而生成目標(biāo)XML文檔。這種方法步驟比較簡(jiǎn)單,但是由于不涉及關(guān)系模式或?qū)ο竽J?,以SQL執(zhí)行的數(shù)據(jù)結(jié)果集為依據(jù),因此不支持雙向映射。模型映射不是僅僅依賴內(nèi)嵌SQL命令,而是用一個(gè)具體的模型實(shí)現(xiàn)的,其關(guān)鍵之處在于在XML Schemas或DTD和數(shù)據(jù)庫(kù)模式之間建立雙向映射。模型驅(qū)動(dòng)的映射機(jī)制有兩種,分別是基于表的映射和基于對(duì)象的映射。
基于表的映射以單一的表格或者是表格的集合表示XML文檔,以子元素或?qū)傩缘男问酱鎯?chǔ)映射到XML文檔的數(shù)據(jù)。優(yōu)點(diǎn)是直觀簡(jiǎn)單,但是由于表是二維關(guān)系,難以表示如表之間的邏輯關(guān)系等XML嵌套結(jié)構(gòu);基于對(duì)象的映射則將數(shù)據(jù)映射為對(duì)象模型,然后轉(zhuǎn)換對(duì)象模型,使之成為XML文檔。這種模式映射比較豐富,但是由于引入了模型,限制了XML文檔。
基于XML Schema的映射模式則具有良好的描述性和擴(kuò)展性,屬于模式和模式之間的深層映射。因此,本文描述關(guān)系數(shù)據(jù)將使用XML Schema,探討XML文檔和關(guān)系數(shù)據(jù)庫(kù)模式之間的模型映射。
2.3 數(shù)據(jù)結(jié)構(gòu)的映射
本文是實(shí)現(xiàn)從數(shù)據(jù)庫(kù)模式映射到XML文檔時(shí),將各字段映射為子元素。如何實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫(kù)和XML Schema的雙向映射是本文討論的重點(diǎn)。
由關(guān)系模式映射為XML模式,主要解決的問(wèn)題包括:1)能夠用XML表示出關(guān)系數(shù)據(jù)的精確結(jié)構(gòu);2)能夠用最好的方式進(jìn)行表達(dá)。在對(duì)象關(guān)系映射中,由數(shù)據(jù)庫(kù)一個(gè)或多個(gè)相關(guān)的表構(gòu)成一片森林??紤]到XML文檔的數(shù)據(jù)結(jié)構(gòu)是樹狀結(jié)構(gòu),本文提出基于對(duì)象樹的映射算法,完成XML Schema與數(shù)據(jù)庫(kù)的映射,能夠?qū)﹃P(guān)系數(shù)據(jù)庫(kù)的結(jié)構(gòu)和語(yǔ)義較好的表述。
關(guān)系數(shù)據(jù)庫(kù)中的一個(gè)數(shù)據(jù)表用一棵對(duì)象樹描述,XML Schema的一個(gè)元素對(duì)應(yīng)樹中的每個(gè)非葉子結(jié)點(diǎn),進(jìn)行以下定義:
1)樹對(duì)應(yīng)的數(shù)據(jù)表信息用樹的根節(jié)點(diǎn)描述,說(shuō)明數(shù)據(jù)源的類型數(shù)據(jù)表的名稱,以及數(shù)據(jù)源所在的物理位置。
2)由于關(guān)系數(shù)據(jù)庫(kù)中主鍵和外鍵約束不等價(jià)于XML Schema中主鍵和外鍵的定義,因此將數(shù)據(jù)表中的屬性分為三類,分別是主鍵屬性、外鍵屬性和非鍵屬性,根結(jié)點(diǎn)的三個(gè)孩子就是這三個(gè)結(jié)點(diǎn),相應(yīng)的數(shù)據(jù)表的屬性是其子結(jié)點(diǎn)。
3)樹的第三層是主鍵屬性、外鍵屬性和非鍵屬性的子結(jié)點(diǎn),對(duì)關(guān)系表中的各個(gè)屬性進(jìn)行描述。
4)關(guān)系表的自定義完整性約束描述是樹的葉子結(jié)點(diǎn),包括數(shù)據(jù)長(zhǎng)度、數(shù)據(jù)類型、默認(rèn)值約束和是否為空。
對(duì)象樹的生成算法如下:
Create Tree()
{結(jié)合數(shù)據(jù)表,生成一棵對(duì)象樹,使用XML Schema描述;
生成結(jié)點(diǎn)名為數(shù)據(jù)表的基本信息的根結(jié)點(diǎn),;
為根結(jié)點(diǎn)生成三個(gè)孩子結(jié)點(diǎn):分辨代表主鍵屬性、外鍵屬性和非鍵屬性;
While Not End of(Attribute)
{If屬性屬于主鍵
If屬性不屬于外鍵
Then為主鍵屬性結(jié)點(diǎn)生成以該屬性名命名的孩子結(jié)點(diǎn);
生成兩個(gè)孩子結(jié)點(diǎn),分別代表類型和長(zhǎng)度;
If屬性的組合是數(shù)據(jù)表主鍵,
Then在個(gè)定義主鍵時(shí)生成孩子結(jié)點(diǎn),表示是否為空;
Else If 屬性屬于外鍵
Then為外鍵屬性生成一個(gè)以該屬性名命名的孩子結(jié)點(diǎn);
生成兩個(gè)孩子結(jié)點(diǎn),表示是否為空和關(guān)聯(lián)字段;
Else生成一個(gè)以該屬性名命名的孩子結(jié)點(diǎn);
為該屬性結(jié)點(diǎn)生成類型、長(zhǎng)度、是否為空和默認(rèn)值的四個(gè)孩子結(jié)點(diǎn);
基于對(duì)象樹的映射算法可以多次復(fù)用,系統(tǒng)的性能大大提高了。
2.4 語(yǔ)義約束的實(shí)現(xiàn)
1)主鍵約束
在XML中ID屬性可以為空值,而關(guān)系數(shù)據(jù)庫(kù)中主鍵的定義具有強(qiáng)制性,沒(méi)每關(guān)系必須有主鍵;因此,如果出現(xiàn)關(guān)系表的主鍵是屬性的組合等情況的話,文檔會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤。在XML Schema中對(duì)主鍵定義的方法進(jìn)行了明確,需要對(duì)兩部分進(jìn)行說(shuō)明:(1)主鍵的XML元素或?qū)傩?;?)主鍵起作用的范圍和組成。
在基于XML Schema的語(yǔ)義約束中,分兩種情況,即主鍵是單一屬性和主鍵是屬性組合。主鍵是單一屬性,則用Primary Key約束定義;主鍵是屬性組合,則使用Unique約束。
2)外鍵約束
XML實(shí)現(xiàn)層次數(shù)據(jù)是通過(guò)使用嵌套元素或者以近似外鍵的引用機(jī)制進(jìn)行的。在管理具有層次特征的數(shù)據(jù)庫(kù)方面,XML比關(guān)系數(shù)據(jù)庫(kù)具有更多的靈活性。XML與關(guān)系數(shù)據(jù)庫(kù)的不同之處在于:被外鍵引用的元組在關(guān)系數(shù)據(jù)庫(kù)被限制在該元組的關(guān)系中;而被引用的元素在XML中并不限制元素類型。
3)用戶自定義完整性約束
在XML Schema中,使用元素或?qū)傩缘膁efault屬性設(shè)置默認(rèn)值作為列的默認(rèn)值,數(shù)據(jù)的長(zhǎng)度設(shè)置使用length屬性,XML與關(guān)系數(shù)據(jù)庫(kù)相似,允許元素的屬性為空。有三種方法可以實(shí)現(xiàn)XML表示是否為空,分別是:use(可選屬性),nillable元素和minOccurs/maxOccurs元素。如果是簡(jiǎn)單類型,則使用可選屬性u(píng)se;如果是復(fù)雜類型,則可以使用nillable元素和minOccurs/maxOccurs元素。其中,maxOccur的含義是字段取值的最多個(gè)數(shù),minOccurs的含義是字段取值的最少個(gè)數(shù)。
2.5 數(shù)據(jù)類型的映射
對(duì)數(shù)據(jù)類型的定義,不同的數(shù)據(jù)庫(kù)以及不同版本的數(shù)據(jù)庫(kù)是有差別的。XML文件中的所有數(shù)據(jù)都是文本(非解析實(shí)體除外),XML和關(guān)系數(shù)據(jù)庫(kù)之間存在著許多不同,包括數(shù)據(jù)類型、格式和表示方法。這是由于數(shù)據(jù)庫(kù)在于描述結(jié)構(gòu)化數(shù)據(jù),XML適于描述半結(jié)構(gòu)化數(shù)據(jù)。所以,解決這兩者之間數(shù)據(jù)格式轉(zhuǎn)換問(wèn)題是實(shí)現(xiàn)基于XML的異構(gòu)數(shù)據(jù)庫(kù)集成的前提條件。XML和數(shù)據(jù)庫(kù)數(shù)據(jù)類型的轉(zhuǎn)換通常由數(shù)據(jù)交換程序負(fù)責(zé)完成。常見的轉(zhuǎn)換方法有兩種。一種方法是由用戶明確指定數(shù)據(jù)類型,另一種方法是程序根據(jù)數(shù)據(jù)庫(kù)模型來(lái)確定數(shù)據(jù)類型。數(shù)據(jù)類型的映射分為以下幾種情況:
1)基本數(shù)據(jù)類型映射的實(shí)現(xiàn)
XML Schema數(shù)據(jù)類型體系是比較完善的。XML Schema定義了簡(jiǎn)單數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型兩種主要的類型,簡(jiǎn)單類型的組合就構(gòu)成復(fù)雜類型是,簡(jiǎn)單類型還可以進(jìn)一步細(xì)分為三種,即原子類型、列表類型和聯(lián)合類型,二者之間通過(guò)基本數(shù)據(jù)類型映射表實(shí)現(xiàn)映射。
2)二進(jìn)制數(shù)據(jù)映射的實(shí)現(xiàn)
XML文檔是文本文件,二進(jìn)制數(shù)據(jù)映射的實(shí)現(xiàn)有三種處理方法,分別簡(jiǎn)述如下:(1)將二進(jìn)制數(shù)據(jù)使用CDATA標(biāo)記嵌入到XML文檔中。(2)使用BASE64將二級(jí)制數(shù)據(jù)進(jìn)行編碼,賦予其字符特征。(3)使用基于MIME標(biāo)準(zhǔn)的編碼方法,將二進(jìn)制數(shù)據(jù)嵌入到XML文檔中。
3)空數(shù)據(jù)映射的實(shí)現(xiàn)
當(dāng)映射XML文檔的結(jié)構(gòu)到數(shù)據(jù)庫(kù)時(shí),將空值屬性映射到 null columns 允許空值的字段,以避免產(chǎn)生插入錯(cuò)誤或非法文件錯(cuò)誤。
4)指令和注釋映射的實(shí)現(xiàn)
XML文檔數(shù)據(jù)并不包括處理指令和注釋,因此,大部分?jǐn)?shù)據(jù)轉(zhuǎn)換軟件都不能處理指令和注釋。這些指令和注釋可能在XML文檔中的任何地方出現(xiàn),因此進(jìn)行對(duì)象-關(guān)系型映射或基于表格映射是不容易的。如果為這些注釋處理和指令專門準(zhǔn)備一個(gè)表格,將指向這個(gè)表格的外鍵附加在其他表格上,則會(huì)導(dǎo)致每當(dāng)處理別的表格時(shí),這些表就要被檢查。因此,本文選擇簡(jiǎn)單地忽略處理指令和注釋。
本文結(jié)合XML具有自描述性、可移植性和互操作性的優(yōu)勢(shì),以這種技術(shù)構(gòu)建中間件,實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫(kù)的資源共享和集成。本文提出了一種基于對(duì)象樹的映射方法,實(shí)現(xiàn)了關(guān)系模式和XML文檔的相互轉(zhuǎn)換。同時(shí)對(duì)數(shù)據(jù)的語(yǔ)義約束進(jìn)行了保留。這種方法的優(yōu)勢(shì)在于完整地保留了關(guān)系模式中的語(yǔ)義約束條件以及主鍵、外鍵、數(shù)據(jù)類型等,同時(shí)也保證了數(shù)據(jù)結(jié)構(gòu)在模式映射過(guò)程中的正確性,具有較好的推廣價(jià)值。
[1]B.Srinivasan &J.Zeleznikow Ed.,“Databases in 2007s”,World Scientific,Singapore,2008.
[2]張雪潔.基于XML的數(shù)據(jù)庫(kù)集成平臺(tái)框架及關(guān)鍵技術(shù)研究,南京:河海大學(xué),2006.
[3]陳剛.基于CORBA的異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)集成模型的研究 [J],現(xiàn)代計(jì)算機(jī),2005,(5):9-13.
[4]Won Kim,Ki-JoonChae.Component-Based Knowledge Engineering Architecture[J],JOOP,2009,12(6):44-45.