基於XML的資料庫總體分析

來源:互聯網
上載者:User
xml|資料|資料庫     我們知道當存在大量資料需要處理分析的話,最好是把這些資料放到資料庫中,所以幾乎所有大型的商業應用系統都是和資料庫相關聯的,所以如果XML需要在商業領域大展宏圖的話,也必須要和資料庫相聯絡。所以這裡首先需要討論的一點問題是,XML本身是不是資料庫,從嚴格的意義上來說,XML僅僅意味著XML文檔。因為儘管一個XML文檔包含資料,但是如果不通過其他的軟體的軟體來進行資料處理的話,它本身只不過是一個文字檔。所以XML本身不不能和資料庫掛上鉤,但是加上一些其他的協助工具輔助,我們可以把整個XML看成是一個資料庫系統,XML文本本身可以看成是資料庫中的資料區,DTD或者Schemas可以看成是資料庫模式設計,XQL可以看成是資料庫查詢語言,SAX或DOM可以看成是資料庫處理工具。當然它還是缺少資料庫所必須的一些東西,比如有效儲存群組織、索引結構、安全性、交易處理、資料完整性、觸發器、多使用者處理機制等等。

  但是為什麼要把XML和資料庫相聯絡呢?舉個例子來說明這個問題,比如你有一個電子商務的應用程式需要使用XML來進行資料轉送。你所關心的是資料本身應該具有的結構,你並不關心它在文檔中實際的儲存結構。如果你的應用程式很簡單的話,基本的檔案系統將滿足你的需求,但如果應用本身很複雜的話,你就需要一個完整的開發應用環境來支援XML。從另一個方面來說,假設你有一個Web網站,它的內容是由一系列XML文檔構成的,你不僅要管理這個網站,同時你需要提供給使用者一個搜尋該網站內容的機制。而這些都需要藉助資料庫來實現。選擇一個資料庫的最重要的因素是你是否需要資料庫來儲存資料或者是文檔,如果你想要儲存資料的話,你需要一個關聯式資料庫或者是對象資料庫來儲存實際的資料,同時你需要中介軟體在資料庫和XML文檔之間建立橋樑關係,從另一方面來說,如果你想要儲存文檔,你需要一個內容管理系統,通過它進行文檔的儲存。實際上,XML文檔可以分到兩大類:以資料為中心或者以文檔為中心。

  以資料為中心的文檔:資料為中心的文檔有非常規則的結果,比如關於銷售訂單或者是飯店菜單的XML文檔。以資料為中心的文檔通常是為機器設計的,也就是說主要是方便機器進行處理。通常,任何Web網站可以動態構建HTML文檔,其步驟如下,根據使用者的查詢請求找到相關的面向資料的XML文檔,然後通過XSL對XML文檔進行轉化,讓基於HTML的瀏覽器能夠方便的瀏覽結果。

  以以文件為主的文檔:以以文件為主的文檔具有不規則的結構,而且資料的粒度也比較大。具體的例子如書本、電子郵件、廣告等等。以以文件為主的文檔主要是用人類而設計的。

  為了儲存或提取資料,你可以使用資料庫和中介軟體,或者你可以使用XML伺服器,或者是基於XML的Web伺服器。為了儲存文檔,你需要一個內容管理系統或者是可持久化的DOM實現。可以在資料庫或者是XML文檔中發現大量基於資料為中心的文檔。這樣我們就需要工具把資料從資料庫轉化成XML文檔,或者把一個XML文檔轉換到資料庫中。同時需要注意的是,當把資料存放區到資料庫中的時候,需要拋棄一個文檔的很多資訊,比如它的名稱和DTD,它的物理結構,比如實體定義和使用,一個節點下元素的位置排列,位元據的儲存方式等等。同樣,當從資料庫中提取資料的時候,產生的XML文檔通常不包含CDATA或者是實體使用的說明,而且節點下元素的排列位置只和資料庫中記錄的順序位置一致。實際上一個XML文檔儲存到資料庫中,再由該資料庫產生此XML文檔,這前後兩個文檔格式幾乎不可能完全一樣。

  為了在資料庫和XML文檔之間傳遞資料,必須在文檔結構和資料庫結構之間建立映射,這種映射可以有兩個分類:模板驅動和模型驅動。

  1.基於模板驅動的映射:需要在一個模板中嵌入命令,並用資料轉送中介軟體進行處理。比如,考慮下面的模板:

  <?xml version="1.0"?>
  <FlightInfo>
  <Intro>The following flights have available seats:</Intro>
  <SelectStmt>SELECT Airline, FltNumber, Depart, Arrive FROM Flights</SelectStmt>
  <Conclude>We hope one of these meets your needs</Conclude>
  </FlightInfo>

  注意其中嵌入了一個SELECT語句。當用資料轉送中介軟體進行處理的時候,每一個SELECT語句都會被它的結果所代替,用XML格式化形式表現為:

  <?xml version="1.0"?>
  <FlightInfo>
  <Intro>The following flights have available seats:</Intro>
  <Flights>
  <Row>
  <Airline>ACME</Airline>
  <FltNumber>123</FltNumber>
  <Depart>Dec 12, 1998 13:43</Depart>
  <Arrive>Dec 13, 1998 01:21</Arrive>
  </Row>
  ...
  </Flights>
  <Conclude>We hope one of these meets your needs</Conclude>
  </FlightInfo>

  基於模板驅動的映射可以是相當靈活的,比如,一些產品允許你把結果集放到XML文檔的任何位置,同時可以對SELECT語句設定參數,並且可以使用for迴圈語句和if條件陳述式等。值得注意的是,當前基於模板驅動的映射只能應用於在關聯式資料庫和XML文檔之間傳遞資料。

   基於模型驅動的映射:也就是說把資料從資料庫傳送到XML文檔是用一個具體的模型實現的,這樣,XSL可以被結合到基於模型映射的產品上。在XML文檔中,兩種模型是很常見的:表格模型(table model)和資料專用物件模型(data-specific object model)。

  2 表格模型:許多中介軟體軟體包用表格模型在XML文檔和關聯式資料庫之間傳遞資料。它把XML文檔表示為一個單一的表格或者是表格的集合。這樣,一個XML文檔的結構可以用如下的形式表示:

  <database>
  <table>
  <row>
  <column1>...</column1>
  <column2>...</column2>
  ...
  </row>
  ...
  </table>
  ...
  </database>

  這裡關鍵字"talbe"在把資料從資料庫傳遞到XML文檔的時候,表示一個單一的結果集,把資料從XML文檔傳遞到資料庫的時候,表示表示一個單一的表格或者視圖。但是,當結果集合不只一個的時候,或者當XML文檔包括多個複雜嵌套的時候,這種傳遞方式就不能適應了。

  2 資料專用的物件模型:把一個XML文檔表示為由資料對象構成的樹,每一個元素類型和對象相對應。主要在物件導向和層次資料庫中使用,通過傳統的關係-物件模型也可以映射到關聯式資料庫中。注意這種模型並不是文件物件模型(DOM)。比如,銷售訂單文檔可以被看成一個對象樹,其中包括五個類:Orders, SalesOrder, Customer, Line, 和Part。

  當把一個XML文檔看成是一個以資料為中心的對象樹的時候,元素不一定和對象相對應,比如,一個元素只包含PCDATA,它能夠被當成一個屬性,它包括一個單一的,標量值。

  實際上在XML和資料庫之間進行資料轉化的時候,需要考慮兩個過程:一個是從資料庫模式中產生DTD,另外一個是根據DTD產生資料庫模式

  從一個DTD中產生一個關係模式的步驟如下:

  1. 對每一個元素,產生一個表和一個主鍵列。

  2. 對每一個有混合內容的元素,產生一個獨立的表格,用來儲存PCDATA,並通過父表的主鍵和父表相聯。

  3. 對元素類型中的每一個單一值的屬性,對具有只有PCDATA內容的子項目(該子項目按順序出現),產生一個單獨的列,如果子項目類型或者值是可以選擇的話,該列就應該可以允許為NULL類型。

  4. 對有多個值的屬性和可以出現多次的子項目(該子項目PCDATA)的話,需要建立一個單獨的表來儲存這些值,並通過父表的主鍵和父表相聯。

  5. 對每一個包含元素或者混合內容的子項目來說,通過父表的主鍵把父元素和子項目聯結起來。

  從一個關聯式資料庫模式構建DTD步驟如下:

  1. 對每一個表,建立一個元素。

  2. 對錶中的每一列,建立一個屬性或者是一個只有PCDATA 內容的子項目。

  3. 根據表中的每一主鍵/外鍵關係,建立該表元素的子項目。

  基於XML的資料庫產品分類

  根據Ronald Bourret在XML Database Products一文中的描述,XML Database中包含有七種類型的產品,分別為:

  2 中介軟體(Middleware )

  1、 與XML相結合能驅動XML的資料庫(XML-Enabled Databases),比如Oralce和微軟都宣稱在它們最新的資料庫產品都都能夠和XML進行無縫的銜接。

  2、 原始的XML資料庫(Native XML Database)

  3、 XML伺服器(XML Servers)

  4、 XML應用伺服器,比如IBM的WebSphere

  5、 內容管理系統(Content Management Systems)

  2 可持久化的DOM實現(Persistent DOM Implementations)

  下面我們對每一種產品做一個具體的說明和介紹

  中介軟體:所謂中介軟體就是用來在XML文檔和資料庫之間進行處理和轉化的軟體。主要應用於以資料為中心的應用裡面,它可以用各種各樣的語言編寫,一般來說它需要用到ODBC, JDBC,或者是 OLE DB. 儘管它可以通過Internet進行是資料的傳輸,但是一般它都是通過Web伺服器來實現資料的傳輸。

  下面我們需要考慮當把XML文檔儲存到資料庫中,如何選擇適合你應用程式的中介軟體。

  實際上,在我們選擇中介軟體的時候,我們要考慮下面一些因素

  1. 資料類型: XML不支援資料類型,也就是說,在XML文檔中的所有資料都是文本,即使資料它本身代表了另外一種資料類型,比如日期或者整數。通常,資料轉送中介軟體將把資料轉化為其他類型。

  2. 位元據處理:有兩種通常的方法儲存XML文檔中的位元據:未經過解析的實體(unparsed entities)和Base64編碼。

  3. Null類型處理:在關聯式資料庫世界中,NULL表示該資料不存在,它和0或者是Null 字元串當然是不一樣的。當然,XML也支援NULL的概念。如果一個可選擇的元素類型或者屬性是NULL的話,它就不包括在這個文檔裡面。當映射一個XML文檔的結構到資料庫或者根據資料庫內容產生XML文檔的時候,你需要考慮可選元素類型和屬性跟可NULL的列之間的映射。

  4. 字元集:一個XML文檔可以包含任何Unicode字元,而不幸的是,許多資料庫並不支援Unicode。因此如果你的資料包括非ASCII字元的時候,需要注意資料庫和中介軟體對這些字元的處理。

  5. 關於XML中的處理指示:處理指示並不是XML文檔中的資料,因此中介軟體就很難決定如何儲存它們。所以在選擇中介軟體的時候,要看它們對處理指示的處理情況。

  6. 標記儲存:注意不同的中介軟體對標記的處理是不一樣的。而且在資料庫中的儲存模式也不同,見下面的例子:

  <description>
  <b>Confusing example:</b>
  </description>

  在資料庫中儲存的形式如下:

  <b>Confusing example:</b> <foo/>

  這主要是因為資料庫不能識別<b>和<foo>是標記還是文字。

[1] [2] 下一頁  



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。