2010-07-29 35 views
3

如果我將兩個文檔添加到BaseX DB,比如說normal.xmlnormal2.xml,有沒有辦法單獨引用每個文檔?使用XQuery參考BaseX數據庫中的特定文檔

我瞭解doc()功能,但它看起來在文件系統爲他們的位置,而不是在數據庫本身。

例如,如果我用這個查詢:doc("normal.xml")/name,那麼我會得到一個關於normal.xml未被發現的錯誤。

我也試過:basex:db("my-db-name")/doc("normal.xml")/name並收到了同樣的錯誤。

任何想法?

回答

7

最後我問的BaseX mailing list,我得到的回答是:

for $doc in collection('test-db') 
    where matches(document-uri($doc), 'example.xml') 
return $doc 

我還詢問爲何沒有直接引用文件的人希望能夠在恆定時間內提取數據,並且響應是:

這是由於XQuery data model。 XQuery中有一個數據庫/集內的文件沒有正式的概念(如果我錯了基督教會指正), 所以集合()命令返回的(文檔 - )對於給定的數據庫節點的任何序列。 用戶可以選擇他想要處理的節點。

目前,我們正在尋找更直觀地瀏覽收藏的想法;類似於 「collection('db/path-to/document.xml')」,它仍應符合當前的W3C建議。 由於後續的文檔uri()通常運行良好,所以我們的優先級列表不會太高。

感謝,雖然幫助。

4

下面的查詢可以幫助你:

for $doc in collection('your-db-name') 
let $path := base-uri($doc) 
where ends-with($path, 'normal.xml') 
return $doc/name 
3

doc()功能是你所需要的假設你知道的。假設您已經創建並打開了一個名爲數據庫「MYDB,」如果你用下面的命令添加一個文件:

XQUERY doc('mydb/your_name') 

加入將忽略:

ADD TO your_name /some/path/on/filesystem.xml 

可以使用始終打開以下文件您給它的文件名,並使用您在URI中指定的名稱。但請注意:運行該命令時,不能保證'your_name'的唯一性。如果它不是唯一的,(doc)函數會拋出一個BaseX錯誤(不是XQuery標準的一部分),表示它匹配多個文檔。