(Xindice當前的版本是1.1b4,已經做了較大改動,本文是1.0版的說明文檔譯文,僅供參考。部分改動在文中略做說明。
————譯者:ksu99)
什么是Xindice
Xindice核心服務器完全是一個設計來存儲xml數據的數據庫服務器。用術語來說,Xindice服務器正是所謂的Native XML Database(NXD)。也可以說成是無縫XML數據庫,這樣的描述可能會輕易理解一些。
這意味著使用這個服務器,你可以最大可能的使用XML工具和技術。進出服務器的所有數據都是XML。使用的查詢語言是XPath,編程API支持DOM和SAX。所有這些對于一個曾經在他們的應用中使用過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 formed)XML文檔的存儲。這意味著對可以放進文檔集合的文檔沒有任何模式來約束。這使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實現完全兼容。)
XMLObjects:XMLObject提供一個服務器擴展機制,來為服務器增加額外的功能。它們可以用來在數據庫引擎內執行復雜的操作,以減少網絡帶寬,或者增加當前服務器上沒有的功能。(譯者注: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文檔集合的。集合可以按照層次結構來安排,與典型的UNIX或Windows文件系統相似。
在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后面的版本得到調整
新聞熱點
疑難解答