Синтаксическая ошибка с квантифицированными выражениями в 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, вероятно, поступит так же.

Другие вопросы по тегам