I am using xquery over BaseX XML Database. Say, I have the following documents stored in my database: doc1, doc2, doc3.
What Xquery do I use to check the existence of a given document. I tried the following:
declare variable $doc_name as xs:string external;
return boolean($doc_name)
I expected it to work as follows: if doc_name = doc1 return true if doc_name = nodoc return false
But, I see an exception:
java.io.IOException: Stopped at line 3, column 7: [XPST0003] Unexpected end of query: 'boolean("doc1")'.
I also tried return
return fn:exists($doc_name) and
return fn:doc-available(doc_uri)
These do not work either. I see the same end of query exception. What is the correct way of checking a document's existence?
Thanks, Sony
Use the standard XPath/XQuery function doc-available()
.
From the Spec:
fn:doc-available($uri as xs:string?) as xs:boolean
Summary: The function returns true if and only if the function call fn:doc($uri)
would return a document node.
If $uri
is an empty sequence, this function returns false
.
If a call on fn:doc($uri)
would return a document node, this function returns true
.
If $uri
is not a valid URI according to the rules applied by the implementation of fn:doc
, an error is raised [err:FODC0005].
Otherwise, this function returns false
.
If this function returns true
, then calling fn:doc($uri)
within the same ·execution scope· must return a document node. However, if non-stable processing has been selected for the fn:doc
function, this guarantee is lost.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With