|
Implementations | ||||||||||||||||
Tests | BaseX 7.7 XQ30 |
EMC/xDB xDB_main_r2411365 XQ30 |
Saxon-EE 9.5.1.1 XP20 |
Saxon-EE 9.5.1.1 XQ10 |
Saxon-EE 9.5.1.1 XP30 |
Saxon-EE 9.5.1.1 XQ30 |
Saxon-EE 9.5.1.4 XQX30 (QT3 v1.1) |
XmlPrime 3.0.0.0 XP30 (QT3 vCVS) |
XmlPrime 3.0.0.0 XQ30 (QT3 vCVS) |
XmlPrime 3.0.0.0 XQX30 (QT3 vCVS) |
XmlPrime 3.0.0.0 XP20 (QT3 vCVS) |
XmlPrime 3.0.0.0 XQX10 (QT3 vCVS) |
XmlPrime 3.0.0.0 XQ10 (QT3 vCVS) |
Zorba 2.9 XQ10 (QT3 vCVS) |
Zorba 2.9 XQ30 (QT3 vCVS) |
|
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
app-XMark | 21/21 | 21/21 | 0/0 | 21/21 | 0/0 | 21/21 | 21/21 | 0/0 | 21/21 | 21/21 | 0/0 | 21/21 | 21/21 | 21/21 | 21/21 | 3/15 |
XMark-Q1[+]
X XMark-Q1: <XMark-result-Q1> { let $auction := (/) return for $b in $auction/site/people/person[@id = "person0"] return $b/name/text() } </XMark-result-Q1> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q2[+]
X XMark-Q2: <XMark-result-Q2> { let $auction := (/) return for $b in $auction/site/open_auctions/open_auction return <increase>{$b/bidder[1]/increase/text()}</increase> } </XMark-result-Q2> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q3[+]
X XMark-Q3: (: Purpose: Return the IDs of all open auctions whose current increase is at least twice as high as the initial increase. :) <XMark-result-Q3> { let $auction := (/) return for $b in $auction/site/open_auctions/open_auction where zero-or-one($b/bidder[1]/increase/text()) * 2.0 <= $b/bidder[last()]/increase/text() return <increase first="{$b/bidder[1]/increase/text()}" last="{$b/bidder[last()]/increase/text()}"/> } </XMark-result-Q3> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q4[+]
X XMark-Q4: (: Purpose: List the reserves of those open auctions where a certain person issued a bid before another person. :) <XMark-result-Q4> { let $auction := (/) return for $b in $auction/site/open_auctions/open_auction where some $pr1 in $b/bidder/personref[@person = "person20"], $pr2 in $b/bidder/personref[@person = "person51"] satisfies $pr1 << $pr2 return <history>{$b/reserve/text()}</history> } </XMark-result-Q4> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q5[+]
X XMark-Q5: <XMark-result-Q5> { let $auction := (/) return count( for $i in $auction/site/closed_auctions/closed_auction where $i/price/text() >= 40.0 return $i/price) } </XMark-result-Q5> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q6[+]
X XMark-Q6: <XMark-result-Q6> { let $auction := (/) return for $b in $auction//site/regions return count($b//item) } </XMark-result-Q6> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q7[+]
X XMark-Q7: <XMark-result-Q7> { let $auction := (/) return for $p in $auction/site return count($p//description) + count($p//annotation) + count($p//emailaddress) } </XMark-result-Q7> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q8[+]
X XMark-Q8: (: Purpose: List the names of persons and the number of items they bought. (joins person, closed\_auction). :) <XMark-result-Q8> { let $auction := (/) return for $p in $auction/site/people/person let $a := for $t in $auction/site/closed_auctions/closed_auction where $t/buyer/@person = $p/@id return $t return <item person="{$p/name/text()}">{count($a)}</item> } </XMark-result-Q8> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q9[+]
X XMark-Q9: (: Purpose: List the names of persons and the names of the items they bought in Europe(joins person, closed auction, item). :) <XMark-result-Q9> { let $auction := (/) return let $ca := $auction/site/closed_auctions/closed_auction return let $ei := $auction/site/regions/europe/item for $p in $auction/site/people/person let $a := for $t in $ca where $p/@id = $t/buyer/@person return let $n := for $t2 in $ei where $t/itemref/@item = $t2/@id return $t2 return <item>{$n/name/text()}</item> return <person name="{$p/name/text()}">{$a}</person> } </XMark-result-Q9> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q10[+]
X XMark-Q10: (: Purpose: List all persons according to their interest; use French markup in the result. :) <XMark-result-Q10> { let $auction := (/) return for $i in distinct-values($auction/site/people/person/profile/interest/@category) let $p := for $t in $auction/site/people/person where $t/profile/interest/@category = $i return <personne> <statistiques> <sexe>{$t/profile/gender/text()}</sexe> <age>{$t/profile/age/text()}</age> <education>{$t/profile/education/text()}</education> <revenu>{fn:data($t/profile/@income)}</revenu> </statistiques> <coordonnees> <nom>{$t/name/text()}</nom> <rue>{$t/address/street/text()}</rue> <ville>{$t/address/city/text()}</ville> <pays>{$t/address/country/text()}</pays> <reseau> <courrier>{$t/emailaddress/text()}</courrier> <pagePerso>{$t/homepage/text()}</pagePerso> </reseau> </coordonnees> <cartePaiement>{$t/creditcard/text()}</cartePaiement> </personne> return <categorie>{<id>{$i}</id>, $p}</categorie> } </XMark-result-Q10> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q11[+]
X XMark-Q11: (: Purpoose: For each person, list the number of items currently on sale whose price does not exceed 0.02% of the person's income. :) <XMark-result-Q11> { let $auction := (/) return for $p in $auction/site/people/person let $l := for $i in $auction/site/open_auctions/open_auction/initial where $p/profile/@income > 5000 * exactly-one($i/text()) return $i return <items name="{$p/name/text()}">{count($l)}</items> } </XMark-result-Q11> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q12[+]
X XMark-Q12: (: Purpose: For each richer-than-average person, list the number of items currently on sale whose price does not exceed 0.02% of the person's income. :) <XMark-result-Q12> { let $auction := (/) return for $p in $auction/site/people/person let $l := for $i in $auction/site/open_auctions/open_auction/initial where $p/profile/@income > 5000.0 * exactly-one($i/text()) return $i where $p/profile/@income > 50000.0 return <items person="{$p/profile/@income}">{count($l)}</items> } </XMark-result-Q12> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q13[+]
X XMark-Q13: (: Purpose: List the names of items registered in Australia along with their descriptions. :) <XMark-result-Q13> { let $auction := (/) return for $i in $auction/site/regions/australia/item return <item name="{$i/name/text()}">{$i/description}</item> } </XMark-result-Q13> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q14[+]
X XMark-Q14: (: Purpose: Return the names of all items whose description contains the word `gold'. :) <XMark-result-Q14> { let $auction := (/) return for $i in $auction/site//item where contains(string(exactly-one($i/description)), "gold") return $i/name/text() } </XMark-result-Q14> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q15[+]
X XMark-Q15: <XMark-result-Q15> { let $auction := (/) return for $a in $auction/site/closed_auctions/closed_auction/annotation/description/parlist/ listitem/ parlist/ listitem/ text/ emph/ keyword/ text() return <text>{$a}</text> } </XMark-result-Q15> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q16[+]
X XMark-Q16: (: Purpose: Return the IDs of those auctions that have one or more keywords in emphasis. (cf. Q15) :) <XMark-result-Q16> { let $auction := (/) return for $a in $auction/site/closed_auctions/closed_auction where not( empty( $a/annotation/description/parlist/listitem/parlist/listitem/text/emph/ keyword/ text() ) ) return <person id="{$a/seller/@person}"/> } </XMark-result-Q16> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q17[+]
X XMark-Q17: <XMark-result-Q17> { let $auction := (/) return for $p in $auction/site/people/person where empty($p/homepage/text()) return <person name="{$p/name/text()}"/> } </XMark-result-Q17> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q18[+]
X XMark-Q18: (: Purpose: Convert the currency of the reserve of all open auctions to another currency. :) declare namespace local = "http://www.example.com/"; declare function local:convert($v as xs:decimal?) as xs:decimal? { 2.20371 * $v }; <XMark-result-Q18> { let $auction := (/) return for $i in $auction/site/open_auctions/open_auction return local:convert(zero-or-one($i/reserve)) } </XMark-result-Q18> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q19[+]
X XMark-Q19: (: Purpose: Give an alphabetically ordered list of all items along with their location. :) <XMark-result-Q19> { let $auction := (/) return for $b in $auction/site/regions//item let $k := $b/name/text() stable order by zero-or-one($b/location) ascending empty greatest return <item name="{$k}">{$b/location/text()}</item> } </XMark-result-Q19> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-Q20[+]
X XMark-Q20: <XMark-result-Q20> { let $auction := (/) return <result> <preferred> {count($auction/site/people/person/profile[@income >= 100000.0])} </preferred> <standard> { count( $auction/site/people/person/ profile[@income < 100000.0 and @income >= 30000.0] ) } </standard> <challenge> {count($auction/site/people/person/profile[@income < 30000.0])} </challenge> <na> { count( for $p in $auction/site/people/person where empty($p/profile/@income) return $p ) } </na> </result> } </XMark-result-Q20> |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass | |
XMark-All[+]
X XMark-All: |
pass | pass | pass | n/a
notXP20 |
pass | n/a
notXP30 |
pass | n/a | pass | pass | n/a | pass | pass | pass | pass |