Синтаксическая ошибка с квантифицированными выражениями в XQuery с использованием "некоторые в удовлетворяет"
Я пытаюсь выяснить, что не так с помощью следующего запроса:
for $item in doc("rss.xml")//item
let $title := lower-case($item/title)
let $description := lower-case($item/description)
where contains($title, "keyword") or
contains($description, "keyword") or
some $category in $item/category
satisfies contains($category, lower-case("keyword"))
return <tr>
<td>{data($item/title)}</td>
<td>{data($item/pubDate)}</td>
</tr>
Я начал получать синтаксическую ошибку после добавления некоторых удовлетворяет условию:
some $category in $item/category
satisfies contains($category, lower-case("keyword"))
Синтаксическая ошибка, которую я получаю:
статическая ошибка [err:XPST0003]: недопустимое выражение: синтаксическая ошибка, неожиданное "$"
Я использую Zorba для обработки запроса, файл rss.xml содержит RSS-канал. Как я уже сказал, запрос отлично работает только с двумя тестами.
1 ответ
Дополнительная пара скобок необходима вокруг QuantifiedExpr
для встраивания его в OrExpr
:
... or
(some $category in $item/category
satisfies contains($category, lower-case("keyword")))
return ...
QuantifiedExpr
имеет более низкий приоритет, чем OrExpr
, Уважать OrExpr
в грамматике XQuery и найти, что это требует ParenthesizedExpr
для добавления QuantifiedExpr
,
Без скобок, some
синтаксически является QName
а также $
не является действительным продолжением после этого. Так что Zorba имеет право жаловаться, и любой другой парсер XQuery, вероятно, поступит так же.