我們知道當存在大量數(shù)據(jù)需要處理分析的話,最好是把這些數(shù)據(jù)放到數(shù)據(jù)庫中,所以幾乎所有大型的商業(yè)應用系統(tǒng)都是和數(shù)據(jù)庫相關聯(lián)的,所以如果XML需要在商業(yè)領域大展宏圖的話,也必須要和數(shù)據(jù)庫相聯(lián)系。所以這里首先需要討論的一點問題是,XML本身是不是數(shù)據(jù)庫,從嚴格的意義上來說,XML僅僅意味著XML文檔。因為盡管一個XML文檔包含數(shù)據(jù),但是如果不通過其他的軟件的軟件來進行數(shù)據(jù)處理的話,它本身只不過是一個文本文件。所以XML本身不不能和數(shù)據(jù)庫掛上鉤,但是加上一些其他的輔助工具,我們可以把整個XML看成是一個數(shù)據(jù)庫系統(tǒng),XML文本本身可以看成是數(shù)據(jù)庫中的數(shù)據(jù)區(qū),DTD或者Schemas可以看成是數(shù)據(jù)庫模式設計,XQL可以看成是數(shù)據(jù)庫查詢語言,SAX或DOM可以看成是數(shù)據(jù)庫處理工具。當然它還是缺少數(shù)據(jù)庫所必須的一些東西,比如有效的存儲組織、索引結構、安全性、事務處理、數(shù)據(jù)完整性、觸發(fā)器、多用戶處理機制等等。
但是為什么要把XML和數(shù)據(jù)庫相聯(lián)系呢?舉個例子來說明這個問題,比如你有一個電子商務的應用程序需要使用XML來進行數(shù)據(jù)傳輸。你所關心的是數(shù)據(jù)本身應該具有的結構,你并不關心它在文檔中實際的存儲結構。如果你的應用程序很簡單的話,基本的文件系統(tǒng)將滿足你的需求,但如果應用本身很復雜的話,你就需要一個完整的開發(fā)應用環(huán)境來支持XML。從另一個方面來說,假設你有一個Web站點,它的內容是由一系列XML文檔構成的,你不僅要管理這個站點,同時你需要提供給用戶一個搜索該站點內容的機制。而這些都需要借助數(shù)據(jù)庫來實現(xiàn)。選擇一個數(shù)據(jù)庫的最重要的因素是你是否需要數(shù)據(jù)庫來存儲數(shù)據(jù)或者是文檔,如果你想要存儲數(shù)據(jù)的話,你需要一個關系數(shù)據(jù)庫或者是對象數(shù)據(jù)庫來存儲實際的數(shù)據(jù),同時你需要中間件在數(shù)據(jù)庫和XML文檔之間建立橋梁關系,從另一方面來說,如果你想要存儲文檔,你需要一個內容管理系統(tǒng),通過它進行文檔的存儲。實際上,XML文檔可以分到兩大類:以數(shù)據(jù)為中心或者以文檔為中心。
以數(shù)據(jù)為中心的文檔:數(shù)據(jù)為中心的文檔有非常規(guī)則的結果,比如關于銷售訂單或者是飯店菜單的XML文檔。以數(shù)據(jù)為中心的文檔通常是為機器設計的,也就是說主要是方便機器進行處理。通常,任何Web站點可以動態(tài)的構建HTML文檔,其步驟如下,根據(jù)用戶的查詢請求找到相關的面向數(shù)據(jù)的XML文檔,然后通過XSL對XML文檔進行轉化,讓基于HTML的瀏覽器能夠方便的瀏覽結果。
以文檔為中心的文檔:以文檔為中心的文檔具有不規(guī)則的結構,而且數(shù)據(jù)的粒度也比較大。具體的例子如書本、電子郵件、廣告等等。以文檔為中心的文檔主要是用人類而設計的。
為了存儲或提取數(shù)據(jù),你可以使用數(shù)據(jù)庫和中間件,或者你可以使用XML服務器,或者是基于XML的Web服務器。為了存儲文檔,你需要一個內容管理系統(tǒng)或者是可持久化的DOM實現(xiàn)??梢栽跀?shù)據(jù)庫或者是XML文檔中發(fā)現(xiàn)大量基于數(shù)據(jù)為中心的文檔。這樣我們就需要工具把數(shù)據(jù)從數(shù)據(jù)庫轉化成XML文檔,或者把一個XML文檔轉換到數(shù)據(jù)庫中。同時需要注意的是,當把數(shù)據(jù)存儲到數(shù)據(jù)庫中的時候,需要拋棄一個文檔的很多信息,比如它的名稱和DTD,它的物理結構,比如實體定義和使用,一個節(jié)點下元素的位置排列,二進制數(shù)據(jù)的存儲方式等等。同樣,當從數(shù)據(jù)庫中提取數(shù)據(jù)的時候,產(chǎn)生的XML文檔通常不包含CDATA或者是實體使用的說明,而且節(jié)點下元素的排列位置只和數(shù)據(jù)庫中記錄的順序位置一致。實際上一個XML文檔存儲到數(shù)據(jù)庫中,再由該數(shù)據(jù)庫生成此XML文檔,這前后兩個文檔格式幾乎不可能完全一樣。
為了在數(shù)據(jù)庫和XML文檔之間傳遞數(shù)據(jù),必須在文檔結構和數(shù)據(jù)庫結構之間建立映射,這種映射可以有兩個分類:模板驅動和模型驅動。
?。保谀0弪寗拥挠成洌盒枰谝粋€模板中嵌入命令,并用數(shù)據(jù)傳輸中間件進行處理。比如,考慮下面的模板:
?。?xml version="1.0"?>
?。糉lightInfo>
?。糏ntro>The following flights have available seats:</Intro>
?。糞electStmt>SELECT Airline, FltNumber, Depart, Arrive FROM Flights</SelectStmt>
?。糃onclude>W(wǎng)e hope one of these meets your needs</Conclude>
?。?FlightInfo>
注意其中嵌入了一個SELECT語句。當用數(shù)據(jù)傳輸中間件進行處理的時候,每一個SELECT語句都會被它的結果所代替,用XML格式化形式表現(xiàn)為:
?。?xml version="1.0"?>
?。糉lightInfo>
?。糏ntro>The following flights have available seats:</Intro>
<Flights>
?。糝ow>
?。糀irline>ACME</Airline>
<FltNumber>123</FltNumber>
?。糄epart>Dec 12, 1998 13:43</Depart>
<Arrive>Dec 13, 1998 01:21</Arrive>
?。?Row>
...
</Flights>
?。糃onclude>W(wǎng)e hope one of these meets your needs</Conclude>
?。?FlightInfo>
基于模板驅動的映射可以是相當靈活的,比如,一些產(chǎn)品允許你把結果集放到XML文檔的任何位置,同時可以對SELECT語句設置參數(shù),并且可以使用for循環(huán)語句和if條件語句等。值得注意的是,當前基于模板驅動的映射只能應用于在關系數(shù)據(jù)庫和XML文檔之間傳遞數(shù)據(jù)。
2 基于模型驅動的映射:也就是說把數(shù)據(jù)從數(shù)據(jù)庫傳送到XML文檔是用一個具體的模型實現(xiàn)的,這樣,XSL可以被結合到基于模型映射的產(chǎn)品上。在XML文檔中,兩種模型是很常見的:表格模型(table model)和數(shù)據(jù)專用對象模型(data-specific object model)。
1) 表格模型:許多中間件軟件包用表格模型在XML文檔和關系數(shù)據(jù)庫之間傳遞數(shù)據(jù)。它把XML文檔表示為一個單一的表格或者是表格的集合。這樣,一個XML文檔的結構可以用如下的形式表示:
?。糳atabase>
?。紅able>
?。紃ow>
?。糲olumn1>...</column1>
<column2>...</column2>
...
?。?row>
...
</table>
...
?。?database>
這里關鍵字"talbe"在把數(shù)據(jù)從數(shù)據(jù)庫傳遞到XML文檔的時候,表示一個單一的結果集,把數(shù)據(jù)從XML文檔傳遞到數(shù)據(jù)庫的時候,表示表示一個單一的表格或者視圖。但是,當結果集合不只一個的時候,或者當XML文檔包括多個復雜嵌套的時候,這種傳遞方式就不能適應了。
2) 數(shù)據(jù)專用的對象模型:把一個XML文檔表示為由數(shù)據(jù)對象構成的樹,每一個元素類型和對象相對應。主要在面向對象和層次數(shù)據(jù)庫中使用,通過傳統(tǒng)的關系-對象模型也可以映射到關系數(shù)據(jù)庫中。注意這種模型并不是文檔對象模型(DOM)。比如,銷售訂單文檔可以被看成一個對象樹,其中包括五個類:Orders, SalesOrder, Customer, Line, 和Part。如下所示:
當把一個XML文檔看成是一個以數(shù)據(jù)為中心的對象樹的時候,元素不一定和對象相對應,比如,一個元素只包含PCDATA,它能夠被當成一個屬性,它包括一個單一的,標量值。
實際上在XML和數(shù)據(jù)庫之間進行數(shù)據(jù)轉化的時候,需要考慮兩個過程:一個是從數(shù)據(jù)庫模式中產(chǎn)生DTD,另外一個是根據(jù)DTD生成數(shù)據(jù)庫模式
從一個DTD中生成一個關系模式的步驟如下:
1. 對每一個元素,產(chǎn)生一個表和一個主鍵列。
2. 對每一個有混合內容的元素,產(chǎn)生一個獨立的表格,用來存儲PCDATA,并通過父表的主鍵和父表相聯(lián)。
3. 對元素類型中的每一個單一值的屬性,對具有只有PCDATA內容的子元素(該子元素按順序出現(xiàn)),產(chǎn)生一個單獨的列,如果子元素類型或者值是可以選擇的話,該列就應該可以允許為NULL類型。
4. 對有多個值的屬性和可以出現(xiàn)多次的子元素(該子元素PCDATA)的話,需要創(chuàng)建一個單獨的表來存儲這些值,并通過父表的主鍵和父表相聯(lián)。
5. 對每一個包含元素或者混合內容的子元素來說,通過父表的主鍵把父元素和子元素聯(lián)接起來。
從一個關系數(shù)據(jù)庫模式構建DTD步驟如下:
1. 對每一個表,創(chuàng)建一個元素。
2. 對表中的每一列,創(chuàng)建一個屬性或者是一個只有PCDATA 內容的子元素。
3. 根據(jù)表中的每一主鍵/外鍵關系,創(chuàng)建該表元素的子元素。
基于XML的數(shù)據(jù)庫產(chǎn)品分類
根據(jù)Ronald Bourret在XML Database Products一文中的描述,XML Database中包含有七種類型的產(chǎn)品,分別為:
1、 中間件(Middleware )
2、 與XML相結合能驅動XML的數(shù)據(jù)庫(XML-Enabled Databases),比如Oralce和微軟都宣稱在它們最新的數(shù)據(jù)庫產(chǎn)品都都能夠和XML進行無縫的銜接。
3、 原始的XML數(shù)據(jù)庫(Native XML Database)
4、 XML服務器(XML Servers)
5、 XML應用服務器,比如IBM的WebSphere
6、 內容管理系統(tǒng)(Content Management Systems)
7、 可持久化的DOM實現(xiàn)(Persistent DOM Implementations)
下面我們對每一種產(chǎn)品做一個具體的說明和介紹
1、中間件:所謂中間件就是用來在XML文檔和數(shù)據(jù)庫之間進行處理和轉化的軟件。主要應用于以數(shù)據(jù)為中心的應用里面,它可以用各種各樣的語言編寫,一般來說它需要用到ODBC, JDBC,或者是 OLE DB. 盡管它可以通過Internet進行是數(shù)據(jù)的傳輸,但是一般它都是通過Web服務器來實現(xiàn)數(shù)據(jù)的傳輸。
下面我們需要考慮當把XML文檔存儲到數(shù)據(jù)庫中,如何選擇適合你應用程序的中間件。
實際上,在我們選擇中間件的時候,我們要考慮下面一些因素
1). 數(shù)據(jù)類型: XML不支持數(shù)據(jù)類型,也就是說,在XML文檔中的所有數(shù)據(jù)都是文本,即使數(shù)據(jù)它本身代表了另外一種數(shù)據(jù)類型,比如日期或者整數(shù)。通常,數(shù)據(jù)傳輸中間件將把數(shù)據(jù)轉化為其他類型。
2). 二進制數(shù)據(jù)處理:有兩種通常的方法存儲XML文檔中的二進制數(shù)據(jù):未經(jīng)過解析的實體(unparsed entities)和Base64編碼。
3). Null類型處理:在關系數(shù)據(jù)庫世界中,NULL表示該數(shù)據(jù)不存在,它和0或者是空字符串當然是不一樣的。當然,XML也支持NULL的概念。如果一個可選擇的元素類型或者屬性是NULL的話,它就不包括在這個文檔里面。當映射一個XML文檔的結構到數(shù)據(jù)庫或者根據(jù)數(shù)據(jù)庫內容生成XML文檔的時候,你需要考慮可選元素類型和屬性跟可NULL的列之間的映射。
4). 字符集:一個XML文檔可以包含任何Unicode字符,而不幸的是,許多數(shù)據(jù)庫并不支持Unicode。因此如果你的數(shù)據(jù)包括非ASCII字符的時候,需要注意數(shù)據(jù)庫和中間件對這些字符的處理。
5). 關于XML中的處理指令:處理指令并不是XML文檔中的數(shù)據(jù),因此中間件就很難決定如何存儲它們。所以在選擇中間件的時候,要看它們對處理指令的處理情況。
6). 標記存儲:注意不同的中間件對標記的處理是不一樣的。而且在數(shù)據(jù)庫中的存儲模式也不同,見下面的例子:
?。糳escription>
<b>Confusing example:</b>
?。?description>
在數(shù)據(jù)庫中存儲的形式如下:
<b>Confusing example:</b> <foo/>
這主要是因為數(shù)據(jù)庫不能識別<b>和<foo>是標記還是文字。
典型的中間件有:
ADO:它可以實現(xiàn)數(shù)據(jù)庫和XML文檔之間的雙向轉換。XML支持把一個記錄集合對象保存為一個XML文檔,它也能夠把一個XML文檔作為一個記錄集合進行處理,這樣就在XML文檔和數(shù)據(jù)庫之間提供了一個橋梁。這種映射實際上是模型驅動的,數(shù)據(jù)可以被看成是一棵對象樹,一個具有嵌套結構的樹可以作為一個嵌套的記錄結果集被顯示,反之也是如此。另外,如果記錄集合數(shù)據(jù)有變化的話,可以反映到相應的XML文檔中,而XML文檔中內容的變化也可以導致數(shù)據(jù)庫內容的變化。
ASP2XML:主要是通過一個COM對象實現(xiàn)XML文檔和基于ODBC或者是OLE DB的數(shù)據(jù)庫之間數(shù)據(jù)的傳遞。該產(chǎn)品實際上是基于模型驅動的,把XML文檔看成是一個單一的表,當把數(shù)據(jù)從數(shù)據(jù)庫傳遞到XML文檔的時候,用戶指定一個SELECT語句,輸出包含了ASP2XML專用的標簽。當把XML文檔的數(shù)據(jù)傳遞到數(shù)據(jù)庫的時候,XML文檔必須包含ASP2XML專用的標簽。該COM對象是支持自動化的,也就是說它能夠在劇本語言中使用,比如ASP。
2、支持XML的數(shù)據(jù)庫系統(tǒng)(XML-Enabled Databases):數(shù)據(jù)庫提供了擴展的功能,能夠在XML文檔和數(shù)據(jù)庫之間進行數(shù)據(jù)的傳輸。通常是設計成為能夠存儲和提取以數(shù)據(jù)為中心的文檔。一般來說是把XML文檔進行解析以后,存儲到相應的表格中,當然,也可以存儲以文檔為中心的文檔,也就是說把整個文檔作為一個單一的表中的一個字段,然后通過文本檢索機制進行查詢。因為許多數(shù)據(jù)庫現(xiàn)在能夠把內容發(fā)布到網(wǎng)站上,基于XML的數(shù)據(jù)庫和XML服務器之間的差別就變得很模糊。
典型的產(chǎn)品有:微軟的SQL Server 2000。SQL Server2000通過三種方式支持XML技術:
1) 在SELECT語句中增加了FOR XML條件子句:FOR XML條件子句有三種選擇,用來指定如何把SELECT語句映射到XML上去。RAW模式指定結果集為一個表格,表格中的每一行對應一個元素,每一列對應元素的屬性或者是它包含的子元素。AUTO和RAW的區(qū)別在于:行的元素名稱和表格名稱一致,產(chǎn)生的XML文檔是線性嵌套的,和表格在SELECT語句中出現(xiàn)的順序相對應。EXPLICIT允許你使用一系列的SELECT語句的UNION來構建一個XML文檔。
2 )通過XPath進行信息定位:通過模式映射的方式,也就是在XML文檔的元素和屬性以及在數(shù)據(jù)庫中的表和字段之間建立映射關系。這里把XML看成是一棵對象樹,而使用XPath的一個子集來進行查詢。
3 )在存儲過程中使用OpenXML函數(shù):OpenXML函數(shù)被用來提取XML文檔的任何一個部分,并把它當作一個表格,然后就可以用SELECT語句中的FROM指定這個表格,并通過INSERT語句在XML文檔和數(shù)據(jù)庫之間傳遞數(shù)據(jù)。并可以用XPath來指定具體的元素或者屬性。
3、原始的XML數(shù)據(jù)庫(Native XML Database):實際上,在一個數(shù)據(jù)庫中存儲XML文檔可以有四種選擇:
1). 以文本形式存儲整個文檔,比如在關系數(shù)據(jù)庫中用BLOB類型,在文件系統(tǒng)用文件類型。
2). 在文件系統(tǒng)中以修改過的形式存儲整個文檔,比如,以壓縮的形式或者事先解析過的形式。
3). 把文檔結構映射到數(shù)據(jù)庫中,比如把DOM模式映射成為數(shù)據(jù)庫中表格的形式。如何建立映射,各個數(shù)據(jù)庫可以有不同的實現(xiàn),。
4). 把數(shù)據(jù)結構映射到數(shù)據(jù)庫中,比如,把一個包含銷售訂單的XML文檔映射到Order,Itmes,Parts和客戶等表格中去。
原始的XML數(shù)據(jù)庫和支持XML的數(shù)據(jù)庫的區(qū)別在于原始的XML數(shù)據(jù)庫一般使用方法2)和方法3)。而支持XML的數(shù)據(jù)庫一般選用方法4)。
典型的產(chǎn)品有斯坦福大學開發(fā)的Lore系統(tǒng),它的數(shù)據(jù)庫實際上是一個半結構化的數(shù)據(jù)庫。所謂半結構化的例子就是我們的簡歷,其中既有一些結構化的信息,比如性別,年齡,通訊電話等等,也有非結構化的信息,比如個人特長等的描述。XML本身就是一個非常好的半結構化數(shù)據(jù)模式的例子,它本身是自描述的,包含了很多元數(shù)據(jù)。而且它同時可以擴展或增加新的元數(shù)據(jù)(或者說是新的字段)。
Lore是用來存儲半結構化的數(shù)據(jù)庫。它最開始是用來存儲HTML文檔數(shù)據(jù)的,但現(xiàn)在已經(jīng)可以被用來作為XML數(shù)據(jù)庫。它包括了一個查詢語言(Lorel),多索引機制,查詢優(yōu)化器,多用戶支持,日志記錄和恢復等功能,并且能夠倒入外部數(shù)據(jù)。因為Lore支持半結構化,所以它也能夠存儲沒有DTD定義的XML文檔。
4、XML服務器:一般認為,XML服務器是一個提供數(shù)據(jù)服務的平臺,而這里的數(shù)據(jù)就是以XML形式出現(xiàn)的,而這些數(shù)據(jù)主要是為分布式應用程序服務的,比如電子商務和B2B應用等。XML服務器通常包括了一個完整的應用開發(fā)環(huán)境,并通過各種數(shù)據(jù)存儲方式來使應用程序可以方便的獲取和使用這些數(shù)據(jù)。存儲的數(shù)據(jù)包括傳統(tǒng)的數(shù)據(jù)庫數(shù)據(jù)、電子郵件信息和文件系統(tǒng)等等。我們知道傳統(tǒng)的Web服務器都是基于HTML文本進行信息傳送的,隨著XML技術的出現(xiàn),對于基于XML的Web服務器的需求也就產(chǎn)生了。那么到底什么是XML服務器呢?準確定義XML Server這個概念是困難的,因為這實在是一個比較新,而且概念很廣泛的東西,雖然已經(jīng)有許多的產(chǎn)品稱自己為XML Server,比如DataChannel公司的DataChannel Server 4.1;Software AG公司的Tamino;Excelon公司的excelon,但在應用的范圍上以及功能上,每種產(chǎn)品都各不相同,因此這里也就不為XML Server進行定義,而是歸納這幾種產(chǎn)品的共同擁有的一些特點,以說明的方式來向大家解釋XML Server這個概念。 簡單地講,XML Server是一個提供數(shù)據(jù)的平臺,它能夠以XML文檔的形式與分布式的應用進行數(shù)據(jù)交互。比如電子商務這一類的應用。這聽上去和傳統(tǒng)的數(shù)據(jù)庫非常的相似,它和數(shù)據(jù)庫一樣提供數(shù)據(jù)的存貯與提取功能,但數(shù)據(jù)的格式的是基于XML的,因此在數(shù)據(jù)的處理方面,所用的是和傳統(tǒng)數(shù)據(jù)庫完全不同的技術了。
所以XML Server被認為是XML Database其中的一種,XML-enabled Server則相對來講比較容易理解,因為它本質上就是一個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將內容與形式結合后把最終結果發(fā)布給客戶端的Web Server。因此這是一種胖服務器,瘦客戶的模式。這種模式同微軟將XSL Parser集成到IE中的設計思想是完全不同的。它的優(yōu)點是能夠對不同的設備瀏覽Web的提供各自相應的格式的文檔,而不需要人工的干涉。
從另外一個角度講,XML Server可以提供比單純XML文檔更強的管理XMl格式數(shù)據(jù)的能力,而且可以避免用傳統(tǒng)數(shù)據(jù)庫時需要進行數(shù)據(jù)轉換的過程(因為XML是標準的擴展標記語言,并不是各個公司專屬的技術,而數(shù)據(jù)庫廠家對自己的數(shù)據(jù)庫都有不同的格式,所以必須通過一些中間件進行轉換),而獲得高效。
當然,任何技術都不是盡良盡美的,任何一項新的技術在沒有完全成熟以前都會存在許多的缺點,XML Server同XML-enabled Server也不會例外,它們分別存在下面一些缺點或問題:
對于XML Server而言:XML Server的性能如何還沒有得到驗證,因為它采用的是一種全新的數(shù)據(jù)組織方式,而這種方式在過去還沒有得到過廣泛的應用。正如我們有理由看好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太復雜了,比較起原來用Html和傳統(tǒng)Web Server建設Web,懂得使用XML這些先進技術的人還是太少了,而且Server的安裝也顯得太復雜,而開發(fā)工具則又太專業(yè)了。如何使電腦的初級用戶能很快的學會使用它,是它需要解決的另外一個問題。 基于XML的Web服務器體系結構如下所示:
最后,我們看一下微軟對基于XML的Web服務器的支持,它的實際實現(xiàn)方法是通過IIS的ISAPI擴展用以提供通過HTTP直接訪問SQL Server并將查詢結果形成XML返回到客戶端而完成的。最簡單的訪問方法是直接HTTP的URL中使用SQL語句:
http://IISServer/VirtualRoot?sql=SELECT+*+FROM+Customers+FOR+XML+AUTO
同時需要注意的,我們可以在URL中執(zhí)行存儲過程和使用xml文檔模板。
5、XML應用服務器:XML應用服務器實際上是支持XML的Web應用服務器,它們通常是模板驅動的,通過在一個劇本語言中嵌入使用SQL語句來提取數(shù)據(jù)并動態(tài)構建XML文檔。
5、內容管理系統(tǒng):內容管理系統(tǒng)是用來存儲、提取和裝配XML文檔的系統(tǒng)。它們通常包括以下一些特征:編輯器、版本控制和多用戶并發(fā)處理,它們本身的對數(shù)據(jù)庫實現(xiàn)對用戶是透明的。它們的主要目的是用來管理文檔。文檔一般是以XML格式或者其他的如RTF、PDF或者SGML的形式出現(xiàn)的,對于非常簡單的文檔集合,文件系統(tǒng)就能夠滿足你的要求,但是,如果你有一個復雜的文檔集合的話,你通常需要一個內容管理系統(tǒng)。這里的內容管理系統(tǒng)的含義就是說允許你把文檔分割成具體的內容片段,比如例子、過程、章節(jié)或者是工具條和其他的一些元數(shù)據(jù)比如:作者名字、版本號等等。然后可以根據(jù)需要來重新裝配XML文檔。你也可以根據(jù)這些片段來合成一個新的XML文檔。
內容管理系統(tǒng)通常具有下面的一些功能:
1).版本和可獲取性控制
2).搜索引擎
3).編輯器
4).發(fā)布引擎,把內容發(fā)布到書本、CD或者Web上
5).內容和形式的分離
6).通過劇本和接口進行擴展
7).和數(shù)據(jù)庫數(shù)據(jù)集成
采用對象-關系模型,把DOM映射到數(shù)據(jù)庫中,你需要為DOM中的每一個對象在數(shù)據(jù)庫中建立對應的表格。一般來說,系統(tǒng)需要包括五個表:
1) 屬性定義:定義屬性,包括他們的類型,合法的值等等。
2 )元素/屬性關聯(lián):定義哪些屬性是和哪些元素相關聯(lián)的。
3 )內容模型定義:定義哪些元素能夠包含其他的元素。
4 )屬性值:包含屬性值和指向在屬性定義表和元素/屬性關聯(lián)表中的相關行的指針。
5 )元素值:包括元素值(PCDATA或者指向其他元素值的指針),元素在它的父節(jié)點中出現(xiàn)的次數(shù),指向包含父節(jié)點元素值所在行的指針,指向在元素/屬性表中的相應行的指針。
前三個表和一個簡單的DTD是等價的,接下來的兩個表包含了實際的數(shù)據(jù)。通過反復的查詢后面兩個表,就有可能構建XML文檔的任意一個部分。
7、可持久化的DOM實現(xiàn)(Persistent DOM Implementations):使用數(shù)據(jù)庫來進行DOM實現(xiàn)的考慮是為了加快速度和避免機器內存不夠,尤其是在XML文檔非常大的時候。它們存儲了XML文檔的結構,可持久化的DOM實現(xiàn)能夠被用來存儲、提取和查詢XML文檔,也可以從現(xiàn)在的文檔中創(chuàng)建新的文檔。也就是說能夠通過編程實現(xiàn)基于DOM的應用。
實際上,你可以在自己的應用程序中,通過編寫代碼來整合中間件、支持XML的數(shù)據(jù)庫,原始XML數(shù)據(jù)庫、XML服務器和永久DOM實現(xiàn)等技術。這里XML應用服務器需要你編寫一些劇本代碼,內容管理系統(tǒng)需要你做一些系統(tǒng)的配置。