摘 要:隨著信息化時代的到來,數據庫系統已經成為現代人們進行信息管理最重要的依托支柱。目前,XML標準日益成熟,并很快成為各種復雜的異構數據交換的核心技術和未來數據定義的標準格式;XML數據庫則是下一代數據庫發展的大勢所趨。
關鍵詞:XML數據庫;XML Schema;SAX;XQuery
中圖分類號:TP393.08 文獻標志碼:A 文章編號:1673-291X(2011)32-0299-02
目前,計算機已被廣泛應用。伴隨著數據庫系統的日益強大,其應用領域涉及各方各面。2006年是XML數據庫迅速發展的時期,至今XML數據庫在數據庫領域占有的比重越來越大。我們有必要掌握XML數據庫的基本理論,了解XML數據庫的應用實現,以及探討XML數據庫的未來的應用領域及發展方向,使XML數據庫在數據庫以及各應用領域大放異彩。
一、XML構造數據庫的優勢
XML語言在異構數據庫集成方面的優勢體現在它具有良好的自描述性、可擴展性、數據與表現形式分離以及網絡開放性等。
例如,標記<性別>female,可以很明白地表示出其性別為女,數據female代表的是一個由標記描述的信息名字。一份完整的XML文檔必須包括數據、標記、樣式三個部分。XML只提供了一種通用的,靈活的語法機制,用格式文件來記錄數據以及數據之間的層次關系。使用者可以根據具體應用和自己的習慣來設計高效可擴展的數據結構。同時XML通過命名空間的機制保證了各個XML文檔之間不會出現名字沖突使使用者可以隨意設計XML文檔。
XML數據庫的數據和表現形式分離,無論數據還是形式改變,文檔中的數據和形式不僅不需要重新開發,而且有利于數據的重復利用,和數據一致性的維護。當只想改變數據的表現形式時只需修改從XML文檔中分離出的用于數據表現的樣式表就可以了。XML規范是由W3C指定的,完全 公開。
二、XML數據庫
所謂數據庫就是一組相互有關聯的數據集合,其中XML數據可是一個XML文檔的集合,這些文檔是持久的并且是可操作的。目前XML數據庫有三種類型
三、XML數據庫類型
目前XML數據庫有三種類型,純XML數據庫(NXD)。其處理XML數據的方式非常自然,基本的邏輯存儲單位是XML文檔,專門設計的數據模型和處理方法。典型的NXDB如Software AG的Taminio XMl Server可以原生地存儲XML和non-XML數據,可以使用Web和XML的規范和界面查詢和轉換數據,很適合于內容管理和應用集成系統使用。能處理XML的數據庫(XEDB)。XEDB的基本存儲單位與具體的實現緊密相關。為了適應XML數據存儲和查詢的需要在原有的數據庫系統上擴充對XML數據的處理功能。一般的做法是由數據庫供應商或第三方廠商提供在數據庫系統之上增加XML映射層,映射層管理XML數據的存儲和檢索,但原始的XML元數據和結構可能會丟失,而且數據檢索的結果不能保證是原始的XML形式。
四、XML數據庫競爭力不強
一般來說,XML數據庫沒有足夠強大的科技力量與關系數據庫競爭,XML數據庫缺乏多重管理、協同工作能力、規劃能力、易用性,這些好處恰恰是大型關系數據庫所擁有的優點。
第一,缺乏明確的標準是XML數據庫領域的一個問題。XPath查詢與發布支持組、排列和摘要數據等功能,更豐富的XQuery查詢語言仍然僅僅是一個設計表格。更有甚的是XQuery正是化得時候,它仍然不支持和數據更新、插入和刪除等功能。
第二,競爭激烈。為了把XML數據存儲到他們原來的數據庫系統中Oracle、IBM和Sybase等數據庫系統公司都把XML數據類型加到了他們的數據庫之中。甲骨文在Oracle 10g中,不僅提供了對XML Query語言(XQuery)的支持,而且XML數據庫作為一個獨立的方式存儲在XMLDB數據庫中,提供的是Native XML的支持。微軟在發布的Microsoft SQL Server2008中大量XML數據放入數據庫中,并提供Native(原生)XML和XQuery的支持。IBM的DB2.9全面支持XML數據,它的XML數據管理能力完全符合面向服務架構(SOA)的要求。
XML數據庫的存儲策略目前主要有以下三種:利用文件系統的平面文件,利用成熟的RDBMS,利用對象管理器或面向對象數據庫管理系統。
1.文件系統的平面文件方法
XML文檔本質上是序列化數據。序列化數據通常采用平面文件的形式,即將每一個XML文檔分別存儲在一個文本文件里,并且實現一個查詢引擎,當查詢被執行的時候,XML文件被解析并駐留在內存里。解析的時間左右著查詢計算的時間,為了提高這種方法的可用性,必須建立索引;查詢引擎可以利用這些索引檢索與查詢相關的XML文件的片段,極大地減少了解析時間。平面文件數據庫最大優點就是容易實現,而且不需要使用數據庫系統和存儲管理器。但是,可以再XML文檔上建立外部索引利用平面文件存儲到XML文檔的弊端,如每次訪問XML文檔時都需要解析它;在查詢處理期間,整個被解析的文件都必須駐留在內存里。
2.傳統的關系數據庫系統方法
我們還可以將XML文檔存儲在傳統的關系數據庫系統里,因為最近的研究成果說明了如何將XML文檔映射并存儲到關系數據庫系統中。但是這種方法還是有缺點的,當前關系數據庫比XML數據庫的負載小,而且通過諸如SQL的接口訪問XML數據會招致與存儲無關的額外負擔。
利用關系的DTD方法是共享內嵌法,而且需要相應的DTD支持。用一個獨立的表來捕獲具有相同標記的元素與其子元素集之間的包含關系,表中的每個元組都被賦予一個ID,而且該表還包含一個parent ID列以標志該元組的父親節點。一個元素在描述它的元素表中只能出現一次,而且它的父親節點內嵌為表的一列以便表示該元素的父親。如果描述XML文檔模式的DTD圖中包含環,則必須用一個獨立的表來打破這個環。
3.利用關系變的方法
變的方法,將XML文檔的有向圖存儲在單個Edge表中。按照廣度優先順序賦予有向圖中每個節點一個唯一的ID.Edge表中每個元組對應有向圖里的一條邊,并且包含該條邊多鏈接的兩個節點的ID值,目標節點的標記值以及一個順序號,該順序號表示同一節點與其多個子節點對應邊的順序編碼。當元素只有一個文本子節點時,文本內容就內嵌到以該元素節點為目標節點的邊所對應的元組里。建立在Tag數據上的索引可以縮減選擇查詢的執行時間。而建立在(源節點,順序號)和(目標點)上的索引頁非常重要,前者用來查找給定元素的子元素,后者用來從給定的子節點向父節點遍歷。
在Edge表上運用簇集策略對查詢的性能也會有重要影響。一般都會選擇按照Edge表上的字段進行簇集,使得具有相同Tag的元素存儲在一起。當然也可以選擇按照“源節點”。
字段進行簇集,這種策略的好處是一個XML元素的所有子元素都存儲在一起,因此重構原始的XML文檔將非常快。而建立在Tag字段上的簇集則表現出了較好的性能,但它對XML文檔的重建沒有任何好處。
4.利用關系的屬性方法
法按Edge表的Tag字段對邊表進行水平劃分,不同標記的元組存儲在各自不同的表里這種方法以犧牲Edge表非常重要的屬性Tag為代價而節省了存儲空間,對屬性方法來說,查詢處理器需要DTD來決定那些表包含子元素,因為子元素的標記沒有存儲在表中“需要注意的是,對于有很多XML文檔的一個大集,屬性方法可能導致大量的表”。
5.對象管理其方法
在對象管理器里存儲XML文檔的明顯方法就是把每一個XML元素存儲成一個獨立的對象,但是由于XML元素通常都非常小,因此這種方法的空間開銷高得令人不敢問津,取而代之,把XML文檔的所有元素存儲在一個單獨的對象里,而XML元素本身就變成了這個對象里的輕量級對象。同時,用tw_object,即記錄來表示輕量級對象,而用file_object表示代表整個XML文檔的對象,輕量級對象在文件對象中的偏移量被用作該對象的標志。
五、XML數據庫產品
1.dbXML
是由美國的dbXML Group LLC公司研究的一個原生XML數據庫。它不僅以服務器腳本,類和觸發器的形式來提供商業邏輯而且還能夠索引和存儲XML文檔集合。
2.eXist
eXist是一個開源的native XML數據庫,于2001年開始研究。完全用Java實現,不支持XML Schema模式驗證,支持XPath查詢,支持可插拔的存儲后端,即后端既可以純XML數據庫也可以是關系數據庫,支持HTTP、XML-RPC、SOAP和WebDAV接口訪問和Java專用的XML:DB API.
3.Ashpool
Ashpool是一個由Java開發輕量級XML數據庫。可以使用標準的SQL92語法通過一個JDBC驅動來查詢,新增,更新和刪除XML文檔。
4.Berkeley DB XML數據庫
Berkeley DB XML是一個開放源碼的嵌入式原生數據庫。用來存儲和獲取XML格式的文檔,它建立在成功的Berkeley DB之上,提供基于XQuery的接口訪問存儲,支持XML Schema驗證;
5.Apache Xindice
Xindice是起源于DBXML數據庫使用Java編寫開放源代碼的原生XML數據庫,使用解析的壓縮文檔存儲XML,并采用集合的方式來管理XML。Xindice可以以XML本身的格式存儲和檢索XML數據,但其不支持XML校驗和不能處理較大的XML文檔,因此在大型應用中有所限制。
6.Tamino
Tamino是Software AG于1999年發布的Native XML服務器的第一個版本,其中包括Native XML數據庫。Tamino可以處理面向數據的文檔,有正規的結構,元素順序無關緊要,不會出現混合內容和面向文檔的文檔,幾乎沒有正規的結構,元素順序非常重要,會出現混合內容,也可以存儲其他類型的數據。
[責任編輯 王 莉]