2011-02-02 25 views
3

我正在使用基於BaseX XML數據庫的xquery。說,我有我的數據庫中存儲以下文件:doc1,doc2,doc3。如何使用xquery查找數據庫中是否存在文檔

我用什麼Xquery來檢查給定文檔的存在。我嘗試了以下內容:

將變量$ doc_name聲明爲xs:string external;

返回布爾($ DOC_NAME)

我希望它的工作方式如下: 如果DOC_NAME = DOC1返回true 如果DOC_NAME = nodoc返回false

但是,我看到一個例外:

java.io.IOException:在第3行第7列停止: [XPST0003]查詢意外結束:'boolean(「doc1」)'。

我也試過回報

  • 回報FN:存在($ DOC_NAME)和

  • 回報FN:DOC可用(doc_uri)

這些沒有任何工作。我看到查詢異常的結尾。檢查文件存在的正確方法是什麼?

感謝, 索尼

+0

好問題,+1。查看我的答案,獲得完整而簡單的解決方案。 – 2011-02-02 17:45:23

回答

5

使用標準的XPath/XQuery函數doc-available()

從規格:

fn:doc-available($uri as xs:string?) as xs:boolean

摘要:該函數返回真當且僅當函數調用fn:doc($uri)將返回文檔節點。

如果$uri是一個空序列,則此函數返回false

如果fn:doc($uri)上的調用將返回文檔節點,則此函數返回true

如果根據執行fn:doc所應用的規則$uri不是有效的URI,則會引發錯誤[err:FODC0005]。

否則,此函數返回false

如果此函數返回true,則在同一個執行範圍內調用fn:doc($uri)必須返回文檔節點。但是,如果fn:doc功能選擇了非穩定處理,則此保證將丟失。

+0

是的,請參閱我的編輯。我也試過這個。返回fn:doc-available(http://top.cs.vt.edu:8080/editionbuilder/feeds/feed_sony_dot_vibh_at_gmail_dot_com_feed4)返回false。但是,您可以看到文檔位於給定的url處。 – sony 2011-02-02 17:52:35

相關問題