我想弄清楚以下查询有什么问题:
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"))
我得到的语法错误是:
静态错误[错误:XPST0003]:表达式无效:语法错误,意外“$”
我使用Zorba处理查询,rss.xml文件包含RSS提要。就像我说的那样,只有两个包含测试的查询才能正常工作。
答案 0 :(得分:3)
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解析器都可能会这样做。