Как найти, если документ существует в базе данных, используя xquery - PullRequest
3 голосов
/ 02 февраля 2011

Я использую xquery поверх BaseX XML Database. Скажем, в моей базе данных хранятся следующие документы: doc1, doc2, doc3.

Какой Xquery я использую, чтобы проверить существование данного документа. Я попробовал следующее:

объявить переменную $ doc_name как xs: string external;

вернуть логическое значение ($ doc_name)

Я ожидал, что это будет работать следующим образом: если doc_name = doc1 вернет истину если doc_name = nodoc вернуть false

Но я вижу исключение:

java.io.IOException: остановлено в строке 3, столбец 7: [XPST0003] Неожиданный конец запроса: «логический (« doc1 »)».

Я также пытался вернуть

  • return fn: существующие ($ doc_name) и

  • return fn: doc-available (doc_uri)

Они тоже не работают. Я вижу тот же конец запроса исключения. Как правильно проверить существование документа?

Спасибо, Sony

1 Ответ

5 голосов
/ 02 февраля 2011

Используйте стандартную функцию XPath / XQuery doc-available().

Из спецификации:

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

Сводка : функция возвращает true тогда и только тогда, когда вызов функции fn:doc($uri) вернет узел документа.

Если $uri - пустая последовательность, эта функция возвращает false.

Если вызов fn:doc($uri) вернет узел документа, эта функция вернет true.

Если $uri не является допустимым URI в соответствии с правилами, применяемыми реализациейиз fn:doc, возникает ошибка [err: FODC0005].

В противном случае эта функция возвращает false.

Если эта функция возвращает true, то вызов fn:doc($uri) в течениета же область выполнения должна возвращать узел документа.Однако если для функции fn:doc была выбрана нестабильная обработка, эта гарантия теряется.

...