Introducing Berkeley DB XML
Berkeley DB XML入門
For dbxml- 2.2.13
第一章 概觀
本章內容的以dbxml- 2.2.13 為例,請使用dbxml-2.2.13
基礎
BDB xml 以庫的形式直接練到使用者的應用程式,BDB XML也有一個命令提示字元讓使用者在脫離編程環境的情況下訪問xml文檔,你可以把命令提示字元作為你應用程式的管理工具.
在DBD xml中,所有的資料存放區在成為"容器"(containers)的檔案中,BDB xml shell
提供了簡便的方式操縱"容器"和所有的DBD功能.
容器可以把整個XML文檔儲存為一個文檔,或把其中的節點單獨儲存,當整體儲存時,XML文檔就是一個"容器"或一個系統檔案,當儲存節點時,xml被分割成小塊,儲存在"容器"中.
在"節點儲存"模式下,取出的文檔的格式就是你儲存的的格式(除非你指定了格式輸出),區別就在於你是怎麼儲存的."節點儲存"模式比"整個文檔儲存"提供更好的效能.所有預設是"節點儲存"模式
使用SHELL
shell命令在BDB xml的安裝目錄的bin目錄下,進入bin目錄輸入dbxml啟動shell
如下
Bin>dbxml
d'b'xml>
BDB xml的語句有單行的和多行的.
BDB xml 用容器來儲存文檔 ,容器包含文檔的集合,在一個容器中的多個文檔可以結構不同,也可以相同.
開始我們的BDB xml之旅,首先建立一個容器,我們的第一個例子是一個簡單的電話本,容器的名字叫phone.dbxml(副檔名不是必須為dbxml,但推薦這麼寫)
dbxml>createContainer phone.dbxml
因為我們現在所在的目錄是bin>,所以phone.dbxml建立在bin目錄下
建立完成後,shell會自動開啟最後一個建立的容器.
接下來輸入xml到phone.dbxml
(以'(單引號)包含輸入的資料)
dbxml>putDocument phone1 '<phonebook> (斷行符號)
<name>(斷行符號)
<first>Tom</first>(斷行符號)
<last>Jones</last>(斷行符號)
</name>(斷行符號)
<phone type="home">420-203-2033</phone>(斷行符號)
</phonebook>'(空格)s(斷行符號)(s表示輸入結束)
如果成功,則顯示
Document added,name=phone1
再輸入一條記錄
dbxml> putDocument phone2 '<phonebook>(斷行符號)
<name>(斷行符號)
<first>Lisa</first>(斷行符號)
<last>Smith</last>(斷行符號)
</name> <phone type="home">420-992-4801</phone>(斷行符號)
<phone type="cell">390-812-4292</phone>(斷行符號)
</phonebook>'(空格)s(斷行符號)
如果成功,則顯示
Document added, name = phone2
現在phone.dbxml中有了兩條記錄,在下面的例子中應用了幾個基本的基於XPath 語句的XQuery查詢 ,以後會有更複雜的XQuery 語句.
XPath語句是XQuery規範的一個主要部分,就像SELECT語句在sql中一樣//注意collection ("phone.dbxml")這個語句,我們也可以簡單的寫為collection ()表示我們的操作對象是當前開啟的容器.
dbxml>query 'collection ("phone.dbxml") /phonebook/name/last/string();
查詢成功後顯示
2 objects returned for eager expression '
collection("phone.dbxml")/phonebook/name/last/string()'
顯示一下找到的last name
dbxml>print
Jones
Smith
至此,第一個小實驗已經成功
下面我們找一下 lisa的home phone number
dbxml>query 'collection("phone.dbxml")/phonebook[name/first="Lisa"]/phone[@type="home"]/string()'
查詢成功後顯示
1 objects returned for eager expression '
collection("phone.dbxml")/phonebook[name/first = "Lisa"]/phone[@type = "home"]/string()'
dbxml> print
420-992-4801
若要顯示所有屬於420開頭的電話號碼,可以這樣寫
dbxml> query 'collection("phone.dbxml")/phonebook/phone[starts-with(.,"420")]/string()'
2 objects returned for eager expression '
collection("phone.dbxml")/phonebook/phone[starts-with(., "420")]/string()'
dbxml> print
420-203-2032
420-992-4801
上面的查詢語句返回資料的一部分,就像select語句一樣,每一個查詢語句包含兩部分,一:我們所要查詢的容器,我們使用collection("phone.dbxml")來表示查詢的容器,二:是XPath語句,如/phonebook/name/last/string();表示要查詢所有的last name;
理解