XQuery中使用量化表达式的语法错误,使用'some in satisfies'

时间:2012-08-24 02:52:32

标签: xquery zorba

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

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提要。就像我说的那样,只有两个包含测试的查询才能正常工作。

1 个答案:

答案 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解析器都可能会这样做。