3

我试图找出以下查询有什么问题:

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 提要。就像我说的,该查询仅适用于两个包含测试。

4

1 回答 1

3

需要额外的一对括号QuantifiedExpr将其嵌入到OrExpr

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

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

没有括号,some句法上是 aQName并且$不是在那之后的有效延续。所以 Zorba 的抱怨是对的,任何其他 XQuery 解析器都可能会这样做。

于 2012-08-24T08:11:31.003 回答