2013-03-14 32 views
1

在進行考試練習時,遇到麻煩的是瞭解XML中的「=>」語法。搜索它的網頁,但無法找到它的意義。以下是使用語法的考試範例:XQuery中=>語法的含義是什麼?

FOR $b IN //Brand 
LET $cars := 
    (FOR $c IN //Car 
    LET $cb := $c/@model => //Model/.. 
    WHERE $cb/@name = $b/@name 
    RETURN $c) 
LET $nr := COUNT($cars) 
RETURN <Brand name={$b/@name}>{$nr}</Brand> 

它的目標是統計每個品牌的所有汽車。

這是我嘗試:

FOR $b IN //Brand 
LET $cars := (
    FOR $c IN //Car 
    WHERE $c/@Model = $b/Model/@name //Might not work to match against all models this way? 
    RETURN ({c}) 
RETURN <Brand name={$b/@name}>COUNT($cars)</Brand> 

這是XML文檔:

<!DOCTYPE CarsNStars [ 
<!ELEMENT CarsNStars (Brand*, Car*)> 
<!ELEMENT Brand (Model*)> 
<!ELEMENT Model (Year+)> 
<!ELEMENT Year (#EMPTY)> 
<!ELEMENT Car (#EMPTY)> 
<!ATTLIST Brand 
    name ID #REQUIRED 
    country CDATA #IMPLIED> 
<!ATTLIST Model 
    name ID #REQUIRED> 
<!ATTLIST Year 
    year CDATA #REQUIRED 
    horsePower CDATA #IMPLIED> 
<!ATTLIST Car 
    regNr ID #REQUIRED 
    model IDREF #REQUIRED 
    miles CDATA #REQUIRED> 
]> 

編輯時的地方,這顯然必須已經從講師一個錯字。

+0

$ cb應該返回特定汽車的品牌,如果我理解查詢正確。 – Rawa 2013-03-14 16:58:32

回答

1

語法=>未在任何XQuery規範(1.0或3.0)中定義。 WHEN也不是。

+0

Scumbag老師...(; 任何想法可以用相同的結果取代什麼行?我的版本的查詢工作=? – Rawa 2013-03-14 17:13:25

+0

根據你的文檔類型,它似乎是這樣的。你基本上加入品牌/ Model/@ name with Car/@ model。我認爲doctype很混亂,並且被設計爲模仿SQL,這通常不是好習慣。另外,XML Schema通常更適合於XQuery(而不是doctype),因爲類型排隊,並且有更多的生態系統支持用於驗證等。 – wst 2013-03-14 17:22:01

+1

此外,XQuery中的「for」和「let」等關鍵字是小寫字母。 – 2013-03-15 08:51:58

相關問題