我在BaseX XML数据库上使用xquery。说,我的数据库中存储了以下文档:doc1,doc2,doc3。
我使用什么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:exists($ doc_name)和
返回fn:doc-available(doc_uri)
这些也不起作用。我看到了同样的查询异常结束。检查文档存在的正确方法是什么?
谢谢, 索尼
答案 0 :(得分:5)
使用标准的XPath / XQuery函数doc-available()
。
来自规范:
fn:doc-available($uri as xs:string?) as xs:boolean
摘要:当且仅当函数调用fn:doc($uri)
将返回文档节点时,该函数返回true。
如果$uri
是空序列,则此函数返回false
。
如果对fn:doc($uri)
的调用将返回文档节点,则此函数将返回true
。
如果$uri
根据fn:doc
实施所应用的规则不是有效URI,则会引发错误[错误:FODC0005]。
否则,此函数返回false
。
如果此函数返回true
,则在同一执行范围内调用fn:doc($uri)
必须返回文档节点。但是,如果为fn:doc
函数选择了非稳定处理,则此保证将丢失。