基于XML的數(shù)據(jù)庫總體分析(下)
本文我們繼續(xù)介紹基于XML的數(shù)據(jù)庫總體分析,首先介紹基于XML的數(shù)據(jù)庫產(chǎn)品分類:
根據(jù)Ronald Bourret在XML Database Products一文中的描述,XML Database中包含有七種類型的產(chǎn)品,分別為:
1.中間件(Middleware )
1.與XML相結(jié)合能驅(qū)動XML的數(shù)據(jù)庫(XML-Enabled Databases),比如Oralce和微軟都宣稱在它們最新的數(shù)據(jù)庫產(chǎn)品都都能夠和XML進(jìn)行無縫的銜接。
2.原始的XML數(shù)據(jù)庫(Native XML Database)。
3.XML服務(wù)器(XML Servers)。
4.XML應(yīng)用服務(wù)器,比如IBM的WebSphere。
5.內(nèi)容管理系統(tǒng)(Content Management Systems)。
2.可持久化的DOM實現(xiàn)(Persistent DOM Implementations)
下面我們對每一種產(chǎn)品做一個具體的說明和介紹。
中間件:所謂中間件就是用來在XML文檔和數(shù)據(jù)庫之間進(jìn)行處理和轉(zhuǎn)化的軟件。主要應(yīng)用于以數(shù)據(jù)為中心的應(yīng)用里面,它可以用各種各樣的語言編寫,一般來說它需要用到ODBC, JDBC,或者是 OLE DB. 盡管它可以通過Internet進(jìn)行是數(shù)據(jù)的傳輸,但是一般它都是通過Web服務(wù)器來實現(xiàn)數(shù)據(jù)的傳輸。
下面我們需要考慮當(dāng)把XML文檔存儲到數(shù)據(jù)庫中,如何選擇適合你應(yīng)用程序的中間件。
實際上,在我們選擇中間件的時候,我們要考慮下面一些因素
1.數(shù)據(jù)類型: XML不支持?jǐn)?shù)據(jù)類型,也就是說,在XML文檔中的所有數(shù)據(jù)都是文本,即使數(shù)據(jù)它本身代表了另外一種數(shù)據(jù)類型,比如日期或者整數(shù)。通常,數(shù)據(jù)傳輸中間件將把數(shù)據(jù)轉(zhuǎn)化為其他類型。
2.二進(jìn)制數(shù)據(jù)處理:有兩種通常的方法存儲XML文檔中的二進(jìn)制數(shù)據(jù):未經(jīng)過解析的實體(unparsed entities)和Base64編碼。
3.Null類型處理:在關(guān)系數(shù)據(jù)庫世界中,NULL表示該數(shù)據(jù)不存在,它和0或者是空字符串當(dāng)然是不一樣的。當(dāng)然,XML也支持NULL的概念。如果一個可選擇的元素類型或者屬性是NULL的話,它就不包括在這個文檔里面。當(dāng)映射一個XML文檔的結(jié)構(gòu)到數(shù)據(jù)庫或者根據(jù)數(shù)據(jù)庫內(nèi)容生成XML文檔的時候,你需要考慮可選元素類型和屬性跟可NULL的列之間的映射。
4.字符集:一個XML文檔可以包含任何Unicode字符,而不幸的是,許多數(shù)據(jù)庫并不支持Unicode。因此如果你的數(shù)據(jù)包括非ASCII字符的時候,需要注意數(shù)據(jù)庫和中間件對這些字符的處理。
5.關(guān)于XML中的處理指令:處理指令并不是XML文檔中的數(shù)據(jù),因此中間件就很難決定如何存儲它們。所以在選擇中間件的時候,要看它們對處理指令的處理情況。
6.標(biāo)記存儲:注意不同的中間件對標(biāo)記的處理是不一樣的。而且在數(shù)據(jù)庫中的存儲模式也不同,見下面的例子:
- <description>
- <b>Confusing example:</b>
- </description>
在數(shù)據(jù)庫中存儲的形式如下:
- <b>Confusing example:</b> <foo/>
這主要是因為數(shù)據(jù)庫不能識別<b>和<foo>是標(biāo)記還是文字。
典型的中間件有:
ADO:它可以實現(xiàn)數(shù)據(jù)庫和XML文檔之間的雙向轉(zhuǎn)換。XML支持把一個記錄集合對象保存為一個XML文檔,它也能夠把一個XML文檔作為一個記錄集合進(jìn)行處理,這樣就在XML文檔和數(shù)據(jù)庫之間提供了一個橋梁。這種映射實際上是模型驅(qū)動的,數(shù)據(jù)可以被看成是一棵對象樹,一個具有嵌套結(jié)構(gòu)的樹可以作為一個嵌套的記錄結(jié)果集被顯示,反之也是如此。另外,如果記錄集合數(shù)據(jù)有變化的話,可以反映到相應(yīng)的XML文檔中,而XML文檔中內(nèi)容的變化也可以導(dǎo)致數(shù)據(jù)庫內(nèi)容的變化。
ASP2XML:主要是通過一個COM對象實現(xiàn)XML文檔和基于ODBC或者是OLE DB的數(shù)據(jù)庫之間數(shù)據(jù)的傳遞。該產(chǎn)品實際上是基于模型驅(qū)動的,把XML文檔看成是一個單一的表,當(dāng)把數(shù)據(jù)從數(shù)據(jù)庫傳遞到XML文檔的時候,用戶指定一個SELECT語句,輸出包含了ASP2XML專用的標(biāo)簽。當(dāng)把XML文檔的數(shù)據(jù)傳遞到數(shù)據(jù)庫的時候,XML文檔必須包含ASP2XML專用的標(biāo)簽。該COM對象是支持自動化的,也就是說它能夠在劇本語言中使用,比如ASP。
3.支持XML的數(shù)據(jù)庫系統(tǒng)(XML-Enabled Databases):數(shù)據(jù)庫提供了擴(kuò)展的功能,能夠在XML文檔和數(shù)據(jù)庫之間進(jìn)行數(shù)據(jù)的傳輸。通常是設(shè)計成為能夠存儲和提取以數(shù)據(jù)為中心的文檔。一般來說是把XML文檔進(jìn)行解析以后,存儲到相應(yīng)的表格中,當(dāng)然,也可以存儲以文檔為中心的文檔,也就是說把整個文檔作為一個單一的表中的一個字段,然后通過文本檢索機(jī)制進(jìn)行查詢。因為許多數(shù)據(jù)庫現(xiàn)在能夠把內(nèi)容發(fā)布到網(wǎng)站上,基于XML的數(shù)據(jù)庫和XML服務(wù)器之間的差別就變得很模糊。
典型的產(chǎn)品有:微軟的SQL Server 2000。SQL Server2000通過三種方式支持XML技術(shù):
1 在SELECT語句中增加了FOR XML條件子句:FOR XML條件子句有三種選擇,用來指定如何把SELECT語句映射到XML上去。RAW模式指定結(jié)果集為一個表格,表格中的每一行對應(yīng)一個元素,每一列對應(yīng)元素的屬性或者是它包含的子元素。AUTO和RAW的區(qū)別在于:行的元素名稱和表格名稱一致,產(chǎn)生的XML文檔是線性嵌套的,和表格在SELECT語句中出現(xiàn)的順序相對應(yīng)。EXPLICIT允許你使用一系列的SELECT語句的UNION來構(gòu)建一個XML文檔。
2 通過XPath進(jìn)行信息定位:通過模式映射的方式,也就是在XML文檔的元素和屬性以及在數(shù)據(jù)庫中的表和字段之間建立映射關(guān)系。這里把XML看成是一棵對象樹,而使用XPath的一個子集來進(jìn)行查詢。
3 在存儲過程中使用OpenXML函數(shù):OpenXML函數(shù)被用來提取XML文檔的任何一個部分,并把它當(dāng)作一個表格,然后就可以用SELECT語句中的FROM指定這個表格,并通過INSERT語句在XML文檔和數(shù)據(jù)庫之間傳遞數(shù)據(jù)。并可以用XPath來指定具體的元素或者屬性。
4.原始的XML數(shù)據(jù)庫(Native XML Database):實際上,在一個數(shù)據(jù)庫中存儲XML文檔可以有四種選擇:
1.以文本形式存儲整個文檔,比如在關(guān)系數(shù)據(jù)庫中用BLOB類型,在文件系統(tǒng)用文件類型。
2.在文件系統(tǒng)中以修改過的形式存儲整個文檔,比如,以壓縮的形式或者事先解析過的形式。
3.把文檔結(jié)構(gòu)映射到數(shù)據(jù)庫中,比如把DOM模式映射成為數(shù)據(jù)庫中表格的形式。如何建立映射,各個數(shù)據(jù)庫可以有不同的實現(xiàn),。
4.把數(shù)據(jù)結(jié)構(gòu)映射到數(shù)據(jù)庫中,比如,把一個包含銷售訂單的XML文檔映射到Order,Itmes,Parts和客戶等表格中去。
原始的XML數(shù)據(jù)庫和支持XML的數(shù)據(jù)庫的區(qū)別在于原始的XML數(shù)據(jù)庫一般使用方法2和方法3。而支持XML的數(shù)據(jù)庫一般選用方法4。
典型的產(chǎn)品有斯坦福大學(xué)開發(fā)的Lore系統(tǒng),它的數(shù)據(jù)庫實際上是一個半結(jié)構(gòu)化的數(shù)據(jù)庫。所謂半結(jié)構(gòu)化的例子就是我們的簡歷,其中既有一些結(jié)構(gòu)化的信息,比如性別,年齡,通訊電話等等,也有非結(jié)構(gòu)化的信息,比如個人特長等的描述。XML本身就是一個非常好的半結(jié)構(gòu)化數(shù)據(jù)模式的例子,它本身是自描述的,包含了很多元數(shù)據(jù)。而且它同時可以擴(kuò)展或增加新的元數(shù)據(jù)(或者說是新的字段)。
Lore是用來存儲半結(jié)構(gòu)化的數(shù)據(jù)庫。它最開始是用來存儲HTML文檔數(shù)據(jù)的,但現(xiàn)在已經(jīng)可以被用來作為XML數(shù)據(jù)庫。它包括了一個查詢語言(Lorel),多索引機(jī)制,查詢優(yōu)化器,多用戶支持,日志記錄和恢復(fù)等功能,并且能夠倒入外部數(shù)據(jù)。因為Lore支持半結(jié)構(gòu)化,所以它也能夠存儲沒有DTD定義的XML文檔。
#p#
5.XML服務(wù)器:一般認(rèn)為,XML服務(wù)器是一個提供數(shù)據(jù)服務(wù)的平臺,而這里的數(shù)據(jù)就是以XML形式出現(xiàn)的,而這些數(shù)據(jù)主要是為分布式應(yīng)用程序服務(wù)的,比如電子商務(wù)和B2B應(yīng)用等。XML服務(wù)器通常包括了一個完整的應(yīng)用開發(fā)環(huán)境,并通過各種數(shù)據(jù)存儲方式來使應(yīng)用程序可以方便的獲取和使用這些數(shù)據(jù)。存儲的數(shù)據(jù)包括傳統(tǒng)的數(shù)據(jù)庫數(shù)據(jù)、電子郵件信息和文件系統(tǒng)等等。我們知道傳統(tǒng)的Web服務(wù)器都是基于HTML文本進(jìn)行信息傳送的,隨著XML技術(shù)的出現(xiàn),對于基于XML的Web服務(wù)器的需求也就產(chǎn)生了。那么到底什么是XML服務(wù)器呢?準(zhǔn)確定義XML Server這個概念是困難的,因為這實在是一個比較新,而且概念很廣泛的東西,雖然已經(jīng)有許多的產(chǎn)品稱自己為XML Server,比如DataChannel公司的DataChannel Server 4.1;Software AG公司的Tamino;Excelon公司的excelon,但在應(yīng)用的范圍上以及功能上,每種產(chǎn)品都各不相同,因此這里也就不為XML Server進(jìn)行定義,而是歸納這幾種產(chǎn)品的共同擁有的一些特點,以說明的方式來向大家解釋XML Server這個概念。 簡單地講,XML Server是一個提供數(shù)據(jù)的平臺,它能夠以XML文檔的形式與分布式的應(yīng)用進(jìn)行數(shù)據(jù)交互。比如電子商務(wù)這一類的應(yīng)用。這聽上去和傳統(tǒng)的數(shù)據(jù)庫非常的相似,它和數(shù)據(jù)庫一樣提供數(shù)據(jù)的存貯與提取功能,但數(shù)據(jù)的格式的是基于XML的,因此在數(shù)據(jù)的處理方面,所用的是和傳統(tǒng)數(shù)據(jù)庫完全不同的技術(shù)了。
所以XML Server被認(rèn)為是XML Database其中的一種,XML-enabled Server則相對來講比較容易理解,因為它本質(zhì)上就是一個Web Server,對于客戶端而言,瀏覽Web,客戶端不會感覺它和傳統(tǒng)Web Server有什么太大的區(qū)別,但實際上Server端在對請求(REQUEST)處理方法上,XML-enabled Web Server和傳統(tǒng)Web Server是完全兩種不同的方式,這是由于XML文檔與HTML文檔本身的特性所決定的。我們大家都知道,XML文檔是一種以數(shù)據(jù)為中心的文檔,XML文檔本身沒有表示格式化的信息,而是通過特定的XSL或者CSS來表現(xiàn),也就是說數(shù)據(jù)和表現(xiàn)是分離的。而在客戶端提交需求后由XML-enabled Web Server將內(nèi)容與形式結(jié)合后把最終結(jié)果發(fā)布給客戶端的Web Server。因此這是一種胖服務(wù)器,瘦客戶的模式。這種模式同微軟將XSL Parser集成到IE中的設(shè)計思想是完全不同的。它的優(yōu)點是能夠?qū)Σ煌脑O(shè)備瀏覽Web的提供各自相應(yīng)的格式的文檔,而不需要人工的干涉。
從另外一個角度講,XML Server可以提供比單純XML文檔更強(qiáng)的管理XMl格式數(shù)據(jù)的能力,而且可以避免用傳統(tǒng)數(shù)據(jù)庫時需要進(jìn)行數(shù)據(jù)轉(zhuǎn)換的過程(因為XML是標(biāo)準(zhǔn)的擴(kuò)展標(biāo)記語言,并不是各個公司專屬的技術(shù),而數(shù)據(jù)庫廠家對自己的數(shù)據(jù)庫都有不同的格式,所以必須通過一些中間件進(jìn)行轉(zhuǎn)換),而獲得高效。
當(dāng)然,任何技術(shù)都不是盡良盡美的,任何一項新的技術(shù)在沒有完全成熟以前都會存在許多的缺點,XML Server同XML-enabled Server也不會例外,它們分別存在下面一些缺點或問題:
對于XML Server而言:XML Server的性能如何還沒有得到驗證,因為它采用的是一種全新的數(shù)據(jù)組織方式,而這種方式在過去還沒有得到過廣泛的應(yīng)用。正如我們有理由看好XML Server發(fā)展前景的同時,我們也有理由對這種沒有經(jīng)過大范圍使用的產(chǎn)品持懷疑態(tài)度。我們可以看一下幾種典型XML Server產(chǎn)品的配置需求。
DataChannel Server 4.1 在Windows環(huán)境下的硬件要求:500MHz or faster Pentium III processor with at least 256MB of RAM.
DataChannel Server 4.1 在Windows環(huán)境下的硬件要求:Sun Ultra 10 or equivalent. At least 256MB of RAM.
Tamino 在Windows環(huán)境下的硬件要求:At least 300MHZ or faster. At least 256MB of RAM.
對于XML-enabled Web Server而言:最大的問題是XML-enabled Web Server太復(fù)雜了,比較起原來用Html和傳統(tǒng)Web Server建設(shè)Web,懂得使用XML這些先進(jìn)技術(shù)的人還是太少了,而且Server的安裝也顯得太復(fù)雜,而開發(fā)工具則又太專業(yè)了。如何使電腦的初級用戶能很快的學(xué)會使用它,是它需要解決的另外一個問題。 基于XML的Web服務(wù)器體系結(jié)構(gòu)如下所示:

最后,我們看一下微軟對基于XML的Web服務(wù)器的支持,它的實際實現(xiàn)方法是通過IIS的ISAPI擴(kuò)展用以提供通過HTTP直接訪問SQL Server并將查詢結(jié)果形成XML返回到客戶端而完成的。最簡單的訪問方法是直接HTTP的URL中使用SQL語句:http://IISServer/VirtualRoot?sql=SELECT+*+FROM+Customers+FOR+XML+AUTO。同時需要注意的,我們可以在URL中執(zhí)行存儲過程和使用xml文檔模板。
6.XML應(yīng)用服務(wù)器:XML應(yīng)用服務(wù)器實際上是支持XML的Web應(yīng)用服務(wù)器,它們通常是模板驅(qū)動的,通過在一個劇本語言中嵌入使用SQL語句來提取數(shù)據(jù)并動態(tài)構(gòu)建XML文檔。
7.內(nèi)容管理系統(tǒng):內(nèi)容管理系統(tǒng)是用來存儲、提取和裝配XML文檔的系統(tǒng)。它們通常包括以下一些特征:編輯器、版本控制和多用戶并發(fā)處理,它們本身的對數(shù)據(jù)庫實現(xiàn)對用戶是透明的。它們的主要目的是用來管理文檔。文檔一般是以XML格式或者其他的如RTF、PDF或者SGML的形式出現(xiàn)的,對于非常簡單的文檔集合,文件系統(tǒng)就能夠滿足你的要求,但是,如果你有一個復(fù)雜的文檔集合的話,你通常需要一個內(nèi)容管理系統(tǒng)。這里的內(nèi)容管理系統(tǒng)的含義就是說允許你把文檔分割成具體的內(nèi)容片段,比如例子、過程、章節(jié)或者是工具條和其他的一些元數(shù)據(jù)比如:作者名字、版本號等等。然后可以根據(jù)需要來重新裝配XML文檔。你也可以根據(jù)這些片段來合成一個新的XML文檔。
內(nèi)容管理系統(tǒng)通常具有下面的一些功能:
1.版本和可獲取性控制。
2.搜索引擎。
3.編輯器。
4.發(fā)布引擎,把內(nèi)容發(fā)布到書本、CD或者Web上。
5.內(nèi)容和形式的分離。
6.通過劇本和接口進(jìn)行擴(kuò)展。
7.和數(shù)據(jù)庫數(shù)據(jù)集成。
采用對象-關(guān)系模型,把DOM映射到數(shù)據(jù)庫中,你需要為DOM中的每一個對象在數(shù)據(jù)庫中建立對應(yīng)的表格。一般來說,系統(tǒng)需要包括五個表:
1.屬性定義:定義屬性,包括他們的類型,合法的值等等。
2.元素/屬性關(guān)聯(lián):定義哪些屬性是和哪些元素相關(guān)聯(lián)的。
3.內(nèi)容模型定義:定義哪些元素能夠包含其他的元素。
4.屬性值:包含屬性值和指向在屬性定義表和元素/屬性關(guān)聯(lián)表中的相關(guān)行的指針。
5.元素值:包括元素值(PCDATA或者指向其他元素值的指針),元素在它的父節(jié)點中出現(xiàn)的次數(shù),指向包含父節(jié)點元素值所在行的指針,指向在元素/屬性表中的相應(yīng)行的指針。
前三個表和一個簡單的DTD是等價的,接下來的兩個表包含了實際的數(shù)據(jù)。通過反復(fù)的查詢后面兩個表,就有可能構(gòu)建XML文檔的任意一個部分。
可持久化的DOM實現(xiàn)(Persistent DOM Implementations):使用數(shù)據(jù)庫來進(jìn)行DOM實現(xiàn)的考慮是為了加快速度和避免機(jī)器內(nèi)存不夠,尤其是在XML文檔非常大的時候。它們存儲了XML文檔的結(jié)構(gòu),可持久化的DOM實現(xiàn)能夠被用來存儲、提取和查詢XML文檔,也可以從現(xiàn)在的文檔中創(chuàng)建新的文檔。也就是說能夠通過編程實現(xiàn)基于DOM的應(yīng)用。
實際上,你可以在自己的應(yīng)用程序中,通過編寫代碼來整合中間件、支持XML的數(shù)據(jù)庫,原始XML數(shù)據(jù)庫、XML服務(wù)器和永久DOM實現(xiàn)等技術(shù)。這里XML應(yīng)用服務(wù)器需要你編寫一些劇本代碼,內(nèi)容管理系統(tǒng)需要你做一些系統(tǒng)的配置。
關(guān)于XML的數(shù)據(jù)庫總體分析就介紹到這里,若文章中有不妥之處,歡迎各位批評指正。
【編輯推薦】





















