本源XML數據庫Xindice 介紹 (1.0版)

    (Xindice當前的版本是1.1b4,已經做了較大改動,本文是1.0版的說明文檔譯文,僅供參考。部分改動在文中略做說明。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

————譯者:ksu99

什麼是Xindice

Xindice核心服務器完全是一個設計來存儲XML數據的數據庫服務器。用術語來說,Xindice服務器正是所謂的Native XML DatabaseNXD)。也可以說成是無縫XML數據庫,這樣的描述可能會容易理解一些。

這意味着使用這個服務器,你可以最大可能的使用XML工具和技術。進出服務器的所有數據都是XML。使用的查詢語言是XPath,編程API支持DOMSAX。所有這些對於一個曾經在他們的應用中使用過XML的開發者來說,應該非常熟悉。當與XML數據和Xindice打交道時,沒有不同數據模式之間的映射。你只需要簡單的以XML設計數據,以XML存儲。

所有賦予你的可以總結爲一個詞:靈活性。XML提供一種極端的靈活機制,來對應用數據建模,並在很多情況下允許你建造那些在多數傳統系統中難以建造甚至不可能建造的模型構造。這就是半結構化模型,在某些應用程序中是基本構件。通過使用一個像Xindice這樣的本源XML數據庫(NXD)存儲半結構化數據,你可以專注於構建應用而不需要擔心複雜的XML結構如何映射到底層數據存儲,或者試圖用一套嚴格的模式強制約束靈活的數據模型。

終究,Xindice是一個工具。它對某些工作來說,是合適的而對其它的就完全錯誤。它最擅長的只是存儲XML數據。實際上,這就是全部。如果你有大量的XML數據,那麼Xindice也許剛好是你需要的工具。然而,如果你的數據不是XML或者你需要精確控制數據的結構,那你最好還是去使用其他的數據庫解決方案。

(譯者注:1.1版中,服務器端的安裝現在是在Java servlet引擎(Tomcat)內部署一個WAR檔案。而數據庫部署在一個servlet引擎內,並允許網絡訪問。這和1.0版不同,因爲1.0版有自己的服務器框架。這樣做是因爲原來的服務器框架重複了servlet引擎的很多功能,而分開後使部署選項更加靈活。)

當前狀態

Native XML數據庫技術是一個非常新的領域,而Xindice更多的是一個仍在開發中的項目。服務器當前支持對格式良好的(well formedXML文檔的存儲。這意味着對可以放進文檔集合的文檔沒有任何模式來約束。這使Xindice成爲一個半結構化數據庫,並在如何存儲數據方面提供極大的靈活性,但是也意味着放棄一些通用數據庫功能,比如數據類型。[1] 在當前狀態下,Xindice已經是一個管理XML數據的強大工具。但是需要做的還很多。

本文試圖描述這些當前起作用並可以被使用的特性。請檢查README文檔,它包含許多關於工程當前狀態的信息。

注意:Xindice服務器和這個文檔都在改進中。歡迎和鼓勵任何意見。

特性摘要

文檔集合(Document Collections):文檔被存儲在可以被作爲整體來查詢的集合中。你可以創建只包含相同類型文檔的集合,也可以創建一個集合來存儲所有的文檔。數據庫不介意。

XPath查詢引擎:要查詢文檔集合,你可以使用W3C定義的XPath。這提供了相當的靈活性機制,通過定位和限制返回結果樹來查詢文檔。

XML索引:爲了提高大量文檔上查詢的性能,可以定義關於元素和屬性值的索引。這可以極大的加速查詢響應時間。

XML:DB XUpdate實現:當存儲XML到數據庫時,或許需要能夠在不檢索整個文檔的情況下改變數據。XUpdate是當你需要做服務器端的數據更新時使用的機制。這是一種基於XML的語言,確定XML修改並允許這些修改像應用到單個文檔一樣應用於整個文檔集合。

Java XML:DB API實現:對於Java程序員Xindice提供了一個XML:DB API實現。這個API將給XML數據庫應用帶來可移植性,就像JDBC相對於關係數據庫一樣。大部分爲Xindice開發的應用將使用XML:DB API。(譯者注:在1.1版中,有一個嵌入式版本的XML:DB API,可以在不使用網絡的情況下訪問數據庫構件Xindice應用程序。這個與啓用網絡的XML:DB API實現完全兼容。)

XMLObjectsXMLObject提供一個服務器擴展機制,來爲服務器增加額外的功能。它們可以用來在數據庫引擎內執行復雜的操作,以減少網絡帶寬,或者增加當前服務器上沒有的功能。(譯者注:1.1版中XMLObjects已經被刪除。)

命令行管理工具:爲了幫助系統管理員,Xindice提供了一全套命令行驅動的管理工具。所有可以通過XML:DB API做的事情,也可以從命令行搞定。(譯者注:xindiceadmin工具已經被刪除。以前只可以通過xindiceadmin訪問的命令現在都通過xindice命令完成。這使服務器操作更簡單一些。命令行工具加入一個選項,允許XPath查詢使用命名空間(namespaces)規範。)

CORBA Network API:對於那些樂於使用Java語言的開發者,Xindice提供了一個CORBA API,可以用來構建應用程序。所有通過XML:DB API可用的功能,都可以通過CORBA API實現。事實上,XML:DB API是建造在CORBA API之上的。儘管多數Java開發者將永遠不需要知道CORBA API的存在。(譯者注:1.1版中,網絡訪問API是基於XML-RPC而不是CORBA。所有與CORBA相關的代碼已經從系統中刪除。系統現在完全支持UTF-8編碼。)

模塊體系結構:Xindice服務器以非常模塊化的方式構成。這使其易於增減構件以裁剪服務器,使其成爲一個特殊工作平臺,或者將它嵌入到另一個應用程序中去。

數據庫結構

Xindice服務器是設計來存儲XML文檔集合的。集合可以按照層次結構來安排,與典型的UNIXWindows文件系統相似。

Xindice中,數據存儲基於一個亦可當文檔集合使用的數據庫實例。此數據庫實例可以包含任意數目的子集合。在Xindice的缺省安裝情況下,此數據庫實例稱爲“db”,而所有的集合路徑以 /db 開始。如果想要重命名這個數據庫實例也是可以的,雖然沒有必要這樣做。

引用集合(Collections)的方式與層次式文件系統的引用相同。

1.1. 集合路徑實例

如果你在“db”下創建了一個名爲my-collection的集合,其下還有一個名爲my-child-collection的集合,則訪問my-child-collection集合的路徑將會是:

/db/my-collection/my-child-collection

在集合之內可以存儲若干類型的對象。你可以存儲XML文檔、XMLObject和其他集合。這些對象也分別可以通過路徑引用。

1.2. 集合路徑指定一個文檔

擴展前面的例子,在my-child-collection中增加一個名爲my-document的文檔,這個文檔可以通過下面路徑引用:

/db/my-collection/my-child-collection/my-document

然而這個路徑只可以得到一個。因爲你有可能在一個集合中有多於一個的同名對象[2] ,當計算一個路徑時就有個優先級次序問題。優先性依次是集合、XMLObject、文檔。這就是說,如果有一個文檔和一個集合同名,你將沒法檢索到文檔。[3]

你還可以通過指定主機和服務器端口號,來在遠程計算機上訪問集合。

1.3. 集合路徑指定一個遠程文檔

如果前面的例子在一個遠程計算機上,則路徑會是這樣子:

myhost.domain.com:4080/db/my-collection/my-child-collection/my-document

這也可以用以下的Xindice URI形式:

xindice://myhost.domain.com:4080/db/my-collection/my-child-collection/my-document

 

[1] XML模式支持將在Xindice稍後的版本中加入。模式總是可選的,但是它可以用來強制一個集合存儲特定的文檔類型,並允許數據類型支持

[2] 舉例來說,一個子集合和一個文檔

[3] 這個約束將在Xindice後面的版本得到調整

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章