吳潔明,萬 勵,莫智懿,陸科達
WU Jie-ming,WAN Li,MU Zhi-yi,LU Ke-da
(梧州學院 計算機科學系,梧州 543002)
在信息技術與網絡技術高速發展的今天,網絡已經成為新一代操作平臺。信息正全面地以互聯網方式展開,互聯網的信息傳播,極大地加速了人類發展的進程。隨著WEB技術的日益發展,WEB已經成為信息制造、發布、加工和處理的主要平臺。XML技術已日益受到更為廣泛的關注,已經在電子商務、電子數據交換、科學數據表示、數據建模與分析和搜索引擎等領域有著廣泛的應用。隨著XML應用技術的深入,將會有大量的XML文檔出現,并且現在在網絡上已經積累了大量的XML文檔[1,2]。將XML數據轉化為關系數據,存儲在關系數據庫系統中,利用己經成熟的關系數據庫理論和技術,來實現對XML數據的存取和訪問,并盡量減少XML數據查詢時的中間操作,以減少響應時間,提高查詢效率,是XML文檔當前最有效的存儲和查詢方式[3,4]。本文主要就基于關系數據庫的XML存儲技術相關問題進行探討。
XML文檔是半結構化的數據,是一個樹模型,如果考慮到XML元素次序,則是一棵有序樹模型,其數據結構是非結構化的,而關系數據庫管理系統是采用二維表格作為存儲數據的模型,表格由行和列組成,列被稱作“字段”用于表示組成數據有效信息的屬性,行則用于儲存一條完整的數據記錄。XML數據與關系表之間數據結構有很大的差異,具體來說,XML數據是有序的,而關系數據是則無序的,另外XML數據的模式往往經常變化,可是關系數據庫的數據結構是固定不變的,XML數據可以無限層次嵌套,而關系數據則不能。雖然XML放松的類型限制和自描述性有利于數據之間的交換,但是卻不利于數據存儲。因此,XML的數據模型的半結構化、有序性與平坦、無序的關系模型之間存在固有的不匹配。另外遵循文檔類型定義(DTD)或文檔模式定義(XML SCHEMA)的XML文檔也與遵循關系存儲模式的關系數據在語法、.結構以及約束等很多方面存在著固有的異構性,因此很難直接由XML數據產生關系模式。甚至即使多個XML文檔實例都遵循同一個文檔模式定義,它們也可能有不同的結構。可以看出,XML映射到關系數據庫中存在固有的困難。映射時主要存在以下需要解決的問題:1)如何利用可能有的XML文檔模式(或類型)信息來采取各種不同的存儲策略;2)如何將XML文檔無損地存入關系數據庫;3)如何從關系數據庫中查詢并重構XML信息。
當前,在將XML數據存儲在關系數據庫的策略主要有兩大類映射策略:即結構映射策略和模型映射策略。簡單地來說,結構映射需要將XML模式(或DTD)映射為特定的關系模式,隨著XML文檔模式(或者為DTD)的不同,映射成的關系模式也不同。而模型映射則是將XML文檔映射為固定的關系模式,與XML文檔模式(或者為DTD)無關。
2.1 基于結構映射的策略
具體來說,基于結構的映射方法可以分為兩個步驟來實現。
第一步:簡化DTD并生成DTD圖。因為XML DTD的元素是相當復雜的,需要對復雜的DTD進行簡化。DTD的簡化變換主要有以下三種方式。1)平面化變換:將DTD內的層次嵌套關系打平,把嵌套的定義轉換為非嵌套的定義;2)簡化變換:將連續的多個一元操作轉換為一個一元操作;3)聚集變換:將多個具有相同名稱的子元素聚在一起,形成一個子元素。一個DTD圖表示的是一個DTD的結構,圖的結點表示DTD中的元素、屬性或操作符,DTD中的元素在DTD圖中只出現一次,屬性和操作符在DTD圖中出現的次數則與它們在DTD中出現的次數相同。
第二步:DTD圖到關系模式的映射。從DTD圖到關系模式的映射方法主要有:基本內聯法、共享內聯法和綜合內聯法。
1)基本內聯法。基本內聯法的原則是在存儲一個結點的時候,盡可能多地將這個元素的后代結點存儲在一個表中。例如,形如直線而無分支的數據路徑上的結點。這些后代結點作為祖先結點表中的屬性域而存儲。而結點之間的嵌套關系則用采用關系表之間的外鍵來解決。基本內聯法將產生大量的關系,并且會產生大量的數據冗余,因此該方法基本上是不實用的。
2)共享內聯法。共享內聯法為以下三種DTD結點生成獨立的關系:(1)DTD圖中入度大于1或者等于0(根結點)的元素結點生成獨立的關系;(2)DTD圖中結點“幸”的孩子結點(將值集元素作為單獨的關系保存);(3)互為遞歸的入度均為1的元素結點,其中之一生成獨立的關系。而其余的結點都生成關系屬性。共享內聯法相對減少了XML查詢轉換為SQL語句的數目,但增加了每個SQL查詢中的連接運算。
3)綜合內聯法
綜合內聯方法在處理入度大于l的結點上與共享內聯方法不同,綜合內聯法將所有入度大于1的元素結點也內聯進入父結點所生成的關系表中,但是帶回路的結點以及結點“}”或“+”的直接后繼結點除外,該方法減少了子結點與父結點的連接運算。綜合內聯法的出發點是充分吸取基本內聯法和共享內聯法的優點,克服其缺點。與共享內聯方法相比,綜合內聯方法相對減少了每個SQL查詢中的連接運算,但是增加了SQL語句的數目。
2.2 基于模型映射的策略
模型映射的方法是用一個固有的模式來存儲XML文檔。它用固定的關系模式來存放任何格式的XML數據,而不考慮XML文檔的模式(DTD或SCHEMA),其實質是存儲XML文檔本身的結構信息。目前,基于模型的映射方法主要有Edge方法、XRel方法和XParent方法。
1)Edge方法
Edge方法圓的存儲策略是把要存入的XML文檔看做圖形結構,每個圖的邊界都表示為圖中的元組,把XML文檔圖中的所有邊都存入到關系表Edge中,用表Edge(source,ordinal,target,label,flag,value)存儲XML文檔圖中的邊,其中的source字段和target字段分別用來存儲邊的源結點和目標結點的標識符;label域為目標結點的類型;flag用來區分目標結點;target是一個元素結點還是一個文本結點,如果該目標結點是文本結點,則文本值存儲于value域中;ordinal字段指出target結點在source結點的所有孩子中的位置。由于Edge方法將所有XML數據都用Edge表存放,操作方法簡單。但缺點是在Edge方法中每條邊都是單獨管理的,所以在用戶進行查詢操作時就需在大量的表上進行連接操作以形成路徑。如果要判斷祖先/后代關系就需要從祖先到后代(或與之相反)遍歷所有的邊,造成代價非常昂貴。
2)XRel方法
XRel方法為了存儲XML文檔的所有信息,將XML文檔樹分解為一個個路徑表達式,對于樹中每一個結點,都將從根結點到其自身的路徑存儲。而在樹中有可能有多個結點的路徑是一樣的,所以單個的簡單路徑表達式并不能夠存儲整棵XML文檔樹的信息。XRel模式是通過區間編碼[start,end]來反映XML文檔的模型結構,并根據結點類型來劃分,分為元素結點表、屬性結點表和文本結點表,同時將所有路徑進行存儲。因此,XRel模式由四個關系表組成如圖1所示。

圖1 XRel存儲模式
在Path表中,存儲所有的不重復的路徑,其中,PathID為標記路徑的標識,pathexp域存儲標記路徑。為了實現路徑表達式的字符串匹配操作,防止意外的結果出現,將標記路徑中的“/”替換為“#/”進行存儲。對于Element表、Attribute表和Text表,Attribute表和Text表中的value字段存儲的分別是屬性結點的值和文本結點的值。對于每一個路徑表達式,查詢過程都可以分為兩部:第一步,利用字符串的匹配操作,能夠快速的查找出與路徑表達式相匹配的所有標記路徑的標識;第二步,利用這些路徑標識,能夠快速的查找出隸屬于這些路徑終端的值。
XRel存儲模式的特點可以總結如下:1)用簡單路徑表達式和結點的區間編碼(start,end)存儲XML文檔的所有信息。2)分別為每一種結點類型創建一個對應的關系表。3)用一個Path表把文檔中所有不重復的路徑都提取出來,有效地降低了數據庫的存儲容量。
3)XParent方法
XParent模式和XRel模式一樣,將文本數據路徑獨立出來,共包含四個關系表,如圖2所示。

圖2 XParent存儲模式
其中,表LabelPath中的pathexp字段用來存儲所有不重復的標簽路徑,即模式路徑。每一個標簽路徑被賦予一個標識符pathID,length為標記路徑的長度。Parent表存儲的是雙親/孩子關系,pid和cid分別表示一個邊的起始結點與結尾結點。did為XML文檔中元素結點的標識,它也可以作為以該結點為終端點的數據路徑的標識。
Parem表存儲的是雙親/孩子關系,因此,為了檢查數據路徑需要進行連接操作。為了提高這種處理的效率,可以改用Ancestor表來存儲祖先/后裔關系。Ancestor(did,ancestor,level),利用Ancestor表能夠快速的檢測結點之間的祖先/后裔關系,但是它比Parent表需要更多的空間,而且由于存在冗余信息,修改代價也更高。XParent模式分別通過LabelPath表和Parent表來支持標記路徑和數據路徑。因此,XParent模式既具有基于結點的模型映射的特點,又具有基于邊的模型映射的特點。
主要討論了基于關系數據庫的XML存儲方式的兩大類映射方法:模型映射和結構映射。并且分別對三種具體的映射方法:基于邊的映射方法、基于結點的映射方法和基于結構的映射方法進行了探討,并說明了各自的原理與優缺點,對于今后XML數據庫設計具有一定幫助。
[1]周勇,韓潔,史忠植.XML數據庫與關系數據庫協作研究[J].計算機工程與應用,2002,38(13).
[2]曹亮,王茜,盧菁.XML數據在關系數據庫中存儲和檢索的研究和實現[J].東南大學學報(自然科學版),2002,32(1).
[3]路燕,郝忠孝,張亮.基于編碼的XML關系數據庫存儲[J].計算機研究與發展,2005,42(11).
[4]許卓明,劉琴,董逸生.基于關系數據庫的XML存儲技術評述[J].計算機工程與應用,2003,39(21).