我想弄清楚以下查询有什么问题:

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"))

我得到的语法错误是:



我使用 Zorba 来处理查询,rss.xml 文件包含一个 RSS 提要。就像我说的那样,该查询仅在两个包含测试中运行良好。

最佳答案

QuantifiedExpr 周围需要一对额外的括号,以便将其嵌入到 OrExpr 中:

                                ... or
  (some $category in $item/category
    satisfies contains($category, lower-case("keyword")))
return ...

QuantifiedExpr 的优先级低于 OrExpr 。在 XQuery 语法中查找 OrExpr 并发现它需要一个 ParenthesizedExpr 来添加一个 QuantifiedExpr

如果没有括号, some 在语法上是一个 QName 并且 $ 在此之后不是有效的延续。所以 Zorba 的提示是正确的,任何其他 XQuery 解析器都可能会这样做。

关于xquery - XQuery 中量化表达式的语法错误,使用 'some in satisfies',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12102603/

10-12 14:03