2012-08-24 1 views
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] : 잘못된 표현 : synta x 오류, 예기치 않은 "$"

저는 쿼리를 처리하는 데 Zorba를 사용하고 있으며 rss.xml 파일에는 RSS 피드가 들어 있습니다. 내가 말했듯이, 쿼리는 두 개의 테스트가 포함 된 상태에서 제대로 작동합니다.

답변

3

괄호의 추가 쌍은 OrExpr에 그것을 삽입하기위한 QuantifiedExpr 주위 필요 :

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

QuantifiedExprOrExpr는보다 낮은 우선 순위를 갖는다. XQuery 문법에서 OrExpr을 찾아보고 QuantifiedExpr을 추가하려면 ParenthesizedExpr이 필요합니다.

괄호 없이는 some은 구문 적으로 QName이고 $은 유효하지 않습니다. 그래서 Zorba는 불평 할 권리가 있으며 다른 XQuery 파서도 똑같이 할 것입니다.

+0

감사합니다. 나는 또한 내가 어디서부터 .. 그리고 OR 표현식으로 시작할 수 있다는 것을 깨달았다. – DanielS

+0

먼저 QuantifiedExpr을 배치 할 때 괄호를 사용하는 것이 더 좋습니다. 그렇지 않으면 OrExpr이 QuantifiedEpr에 포함되어 있기 때문에 약간 다른 결과를 초래할 수 있습니다. 귀하의 경우에는 '카테고리'가없는 '항목'이있을 때 차이가납니다. '일부 $ x in()은 true() 또는 true()'를 만족하고'(false) '는'true '를 반환합니다. – Gunther

+0

당신이 옳습니다. 고마워요! – DanielS