(: parse tests :) E1/E2 %%%E1[E2] %%%E2 %%%E1 %%%E2 %%%E2 %%%E1 %%%E2 %%%. %%%E1/E2 %%%E1[E2] %%%E1 %%%E2 %%%fn:position() %%%E1/E2 %%%E1[E2] %%%E2 %%%E1 %%%fn:last() %%%E1/E2 %%%E1[E2] %%%E2 %%%E1 %%%($x div $y) + xs:decimal($z) %%%fn:error(xs:QName("app:err057"), "Unexpected value", fn:string($v)) %%%some $x in $expr1 satisfies $x = 47 %%%//product[id = 47] %%%$N[@x castable as xs:date][xs:date(@x) gt xs:date("2000-01-01")] %%%$N[if (@x castable as xs:date) then xs:date(@x) gt xs:date("2000-01-01") else false()] %%%"12.5" %%%12 %%%12.5 %%%125E2 %%%xs:integer("12") %%%xs:date("2001-08-25") %%%9 cast as hatsize %%%(2 + 4) * 5 %%%(2 + 4) %%%2 + 4 * 5 %%%my:three-argument-function(1, 2, 3) %%%my:two-argument-function((1, 2), 3) %%%my:two-argument-function(1, ()) %%%my:one-argument-function((1, 2, 3)) %%%my:one-argument-function(( )) %%%my:zero-argument-function( ) %%%E1/E2 %%%E1 %%%child::div1/child::para %%%child::para %%%attribute::abc:href %%%child::* %%%attribute::* %%%child::chapter[2] %%%descendant::toy[attribute::color = "red"] %%%child::employee[secretary][assistant] %%%child::para %%%child::* %%%child::text() %%%child::node() %%%attribute::name %%%attribute::* %%%descendant::para %%%ancestor::div %%%ancestor-or-self::div %%%descendant-or-self::para %%%self::para %%%child::chapter/descendant::para %%%child::*/child::para %%%/ %%%/descendant::para %%%/descendant::list/child::member %%%child::para[fn:position() = 1] %%%child::para[fn:position() = fn:last()] %%%child::para[fn:position() = fn:last()-1] %%%child::para[fn:position() > 1] %%%following-sibling::chapter[fn:position() = 1] %%%preceding-sibling::chapter[fn:position() = 1] %%%/descendant::figure[fn:position() = 42] %%%/child::book/child::chapter[fn:position() = 5]/child::section[fn:position() = 2] %%%child::para[attribute::type eq "warning"] %%%child::para[attribute::type eq 'warning'][fn:position() = 5] %%%child::para[fn:position() = 5][attribute::type eq "warning"] %%%child::chapter[child::title = 'Introduction'] %%%child::chapter[child::title] %%%child::*[self::chapter or self::appendix] %%%child::*[self::chapter or self::appendix][fn:position() = fn:last()] %%%para[@type="warning"] %%%child::para[attribute::type="warning"] %%%section/para %%%child::section/child::para %%%div1//para %%%child::div1/descendant-or-self::node()/child::para %%%//para[1] %%%/descendant::para[1] %%%.. %%%parent::node() %%%../title %%%parent::node()/child::title %%%* %%%text() %%%@name %%%@* %%%para[1] %%%para[fn:last()] %%%*/para %%%/book/chapter[5]/section[2] %%%chapter//para %%%//para %%%//list/member %%%.//para %%%.. %%%../@lang %%%para[@type="warning"] %%%para[@type="warning"][5] %%%para[5][@type="warning"] %%%chapter[title="Introduction"] %%%chapter[title] %%%employee[@secretary and @assistant] %%%book/(chapter|appendix)/section %%%(10, 1, 2, 3, 4) %%%(10, (1, 2), (), (3, 4)) %%%(salary, bonus) %%%($price, $price) %%%(10, 1 to 4) %%%10 to 10 %%%15 to 10 %%%fn:reverse(10 to 15) %%%$products[price gt 100] %%%(1 to 100)[. mod 5 eq 0] %%%(21 to 29)[5] %%%$orders[fn:position() = (5 to 9)] %%%$book/(chapter | appendix)[fn:last()] %%%fn:doc("zoo.xml")/fn:id('tiger') %%%$seq1 union $seq2 %%%$seq2 union $seq3 %%%$seq1 intersect $seq2 %%%$seq2 intersect $seq3 %%%$seq1 except $seq2 %%%$seq2 except $seq3 %%%a-b %%%a - b %%%-1.5 %%%-1 %%%-3 div 2 -3 idiv 2 %%%$emp/hiredate - $emp/birthdate %%%$unit-price - $unit-discount %%%$book1/author eq "Kennedy" %%%//product[weight gt 100] %%%5 eq 5 %%%5 eq 5 %%%my:hatsize(5) eq my:shoesize(5) %%%fn:QName("http://example.com/ns1", "this:color") eq fn:QName("http://example.com/ns1", "that:color") %%%$book1/author = "Kennedy" %%%/books/book[isbn="1558604820"] is /books/book[call="QA76.9 C3845"] %%%5 is 5 %%%/transactions/purchase[parcel="28-451"] << /transactions/sale[parcel="33-870"] %%%1 eq 1 and 2 eq 2 %%%1 eq 1 or 2 eq 3 %%%1 eq 2 and 3 idiv 0 = 1 %%%1 eq 1 or 3 idiv 0 = 1 %%%1 eq 1 and 3 idiv 0 = 1 %%% Harold and the Purple Crayon Crockett Johnson %%%

Here is a query.

$b/title

Here is the result of the query.

{ $b/title }
%%%

Here is a query.

$b/title

Here is the result of the query.

Harold and the Purple Crayon
%%% %%% %%% %%% %%% %%% Persian %%% 3 6 18 %%%{1} %%%{1, 2, 3} %%%{1}{2}{3} %%%{1, "2", "3"} %%%I saw 8 cats. %%%I saw {5 + 3} cats. %%%I saw {5 + 3} cats. %%% Harold and the Purple Crayon Crockett Johnson %%% {$b} {$c} %%% {"abc"} %%%abc %%%  abc   %%% z {"abc"} %%% z abc %%% {"abc"} %%% abc %%%{" "} %%% %%% %%%element book { attribute isbn {"isbn-0060229357" }, element title { "Harold and the Purple Crayon"}, element author { element first { "Crockett" }, element last {"Johnson" } } } %%%element {fn:node-name($e)} {$e/@*, 2 * fn:data($e)} %%% Adresse indirizzo %%%
123 Roosevelt Ave. Flushing, NY 11368
%%% element {$dict/entry[@word=name($e)]/variant[@xml:lang="it"]} {$e/@*, $e/node()} %%%123 Roosevelt Ave. Flushing, NY 11368 %%%attribute size {4 + 3} %%%attribute { if ($sex = "M") then "husband" else "wife" } { Hello, 1 to 3, Goodbye } %%%document { {fn:doc("bib.xml")/bib/book/author} } %%%text {"Hello"} %%%let $target := "audio-output", $content := "beep" return processing-instruction {$target} {$content} %%%let $homebase := "Houston" return comment {fn:concat($homebase, ", we have a problem.")} %%%declare namespace p="http://example.com/ns/p"; declare namespace q="http://example.com/ns/q"; declare namespace f="http://example.com/ns/f"; %%%

3

%%%

3

%%%for $d in fn:doc("depts.xml")/depts/deptno let $e := fn:doc("emps.xml")/emps/emp[deptno = $d] where fn:count($e) >= 10 order by fn:avg($e/salary) descending return { $d, {fn:count($e)}, {fn:avg($e/salary)} } %%%for $d in fn:doc("depts.xml")/depts/deptno let $e := fn:doc("emps.xml")/emps/emp[deptno = $d] where fn:count($e) >= 10 order by fn:avg($e/salary) descending return { $d, {fn:count($e)}, {fn:avg($e/salary)} } %%%let $s := (, , ) return {$s} %%%let $s := (, , ) return {$s} %%%(, , ) %%%for $s in (, , ) return {$s} %%%for $s in (, , ) return {$s} %%%for $x in $w, $a in f($x) let $y := g($a) for $z in p($x, $y) return q($x, $y, $z) %%%let $salary as xs:decimal := "cat" return $salary * 2 %%%fn:avg(for $x at $i in $inputvalues where $i mod 100 = 0 return $x) %%%fn:avg(for $x at $i in $inputvalues where $i mod 100 = 0 return $x) %%%for $e in $employees order by $e/salary descending return $e/name %%%for $e in $employees order by $e/salary descending return $e/name %%%for $b in $books/book[price < 100] order by $b/title return $b %%%for $b in $books/book[price < 100] order by $b/title return $b %%%for $b in $books/book stable order by $b/title collation "http://www.example.org/collations/fr-ca", $b/price descending empty least return $b %%%for $b in $books/book stable order by $b/title collation "http://www.example.org/collations/fr-ca", $b/price descending empty least return $b %%%let $i := 5, $j := 20 * $i return $i, $j %%%let $i := 5, $j := 20 * $i return ($i, $j) %%% { for $a in fn:distinct-values($bib/book/author) order by $a return {$a} { for $b in $bib/book[author = $a] order by $b/title return $b/title } } %%% { for $a in fn:distinct-values($bib/book/author) order by $a return {$a} { for $b in $bib/book[author = $a] order by $b/title return $b/title } } %%%unordered { for $p in fn:doc("parts.xml")/parts/part[color = "Red"], $s in fn:doc("suppliers.xml")/suppliers/supplier where $p/suppno = $s/suppno return { $p/partno, $s/suppno } } %%%unordered { for $p in fn:doc("parts.xml")/parts/part[color = "Red"], $s in fn:doc("suppliers.xml")/suppliers/supplier where $p/suppno = $s/suppno return { $p/partno, $s/suppno } } %%%if ($widget1/unit-cost < $widget2/unit-cost) then $widget1 else $widget2 %%%if ($part/@discounted) then $part/wholesale else $part/retail %%%every $part in /parts/part satisfies $part/@discounted %%%some $emp in /emps/employee satisfies ($emp/bonus > 0.25 * $emp/salary) %%%some $x in (1, 2, 3), $y in (2, 3, 4) satisfies $x + $y = 4 %%%some $x in (1, 2, 3), $y in (2, 3, 4) satisfies $x + $y = 4 %%%every $x in (1, 2, 3), $y in (2, 3, 4) satisfies $x + $y = 4 %%%every $x in (1, 2, 3), $y in (2, 3, 4) satisfies $x + $y = 4 %%%some $x in (1, 2, "cat") satisfies $x * 2 = 4 %%%every $x in (1, 2, "cat") satisfies $x * 2 = 4 %%%some $x as xs:integer in (1, 2, "cat") satisfies $x * 2 = 4 %%%5 instance of xs:integer %%%{5} instance of xs:integer %%%. instance of element() %%%typeswitch($customer/billing-address) case $a as element(*, USAddress) return $a/state case $a as element(*, CanadaAddress) return $a/province case $a as element(*, JapanAddress) return $a/prefecture default return "unknown" %%% if ($x castable as hatsize) then $x cast as hatsize else if ($x castable as IQ) then $x cast as IQ else $x cast as xs:string %%%xs:date("2000-01-01") %%%xs:decimal($floatvalue * 0.2E-5) %%%xs:dayTimeDuration("P21D") %%%usa:zipcode("12345") %%%17 cast as apple %%%apple(17) %%%$myaddress treat as element(*, USAddress) %%%declare namespace exq = "http://example.org/XQueryImplementation"; (# exq:use-index #) { $bib/book/author[name='Berners-Lee'] } %%%declare namespace exq = "http://example.org/XQueryImplementation"; for $x in (# exq:distinct //city by @country #) { //city[not(@country = preceding::city/@country)] } return f:show-city($x) %%%declare namespace foo = "http://example.org"; Lentils %%%declare namespace xx = "http://example.org"; let $i := Lentils return $i/xx:bing %%% Lentils %%%declare function local:summary($emps as element(employee)*) as element(dept)* { for $d in fn:distinct-values($emps/deptno) let $e := $emps[deptno = $d] return {$d} {fn:count($e)} {fn:sum($e/salary)} }; local:summary(fn:doc("acme_corp.xml")//employee[location = "Denver"]) %%%declare function local:depth($e as node()) as xs:integer { (: A node with no children has depth 1 :) (: Otherwise, add 1 to max depth of children :) if (fn:empty($e/*)) then 1 else fn:max(for $c in $e/* return local:depth($c)) + 1 }; local:depth(fn:doc("partlist.xml")) %%% { for $i in fn:doc("catalog.xml")/items/item, $p in fn:doc("parts.xml")/parts/part[partno = $i/partno], $s in fn:doc("suppliers.xml")/suppliers /supplier[suppno = $i/suppno] order by $p/description, $s/suppname return { $p/description, $s/suppname, $i/price } } %%%for $s in fn:doc("suppliers.xml")/suppliers/supplier order by $s/suppname return { $s/suppname, for $i in fn:doc("catalog.xml")/items/item [suppno = $s/suppno], $p in fn:doc("parts.xml")/parts/part [partno = $i/pno] order by $p/description return $p/description } %%% { for $s in fn:doc("suppliers.xml")/suppliers/supplier order by $s/suppname return { $s/suppname, for $i in fn:doc("catalog.xml")/items/item [suppno = $s/suppno], $p in fn:doc("parts.xml")/parts/part [partno = $i/partno] order by $p/description return { $p/description, $i/price } } , (: parts that have no supplier :) { for $p in fn:doc("parts.xml")/parts/part where fn:empty(fn:doc("catalog.xml")/items/item [partno = $p/partno] ) order by $p/description return $p/description } } %%%for $pn in fn:distinct-values( fn:doc("catalog.xml")/items/item/partno) let $i := fn:doc("catalog.xml")/items/item[partno = $pn] where fn:count($i) >= 3 order by $pn return {$p} {fn:avg($i/price)} %%%fn:avg($i/price) %%%for $s in fn:distinct-values( fn:doc("census.xml")/census/person/state), $j in fn:distinct-values( fn:doc("census.xml")/census/person/job) let $p := fn:doc("census.xml")/census/person [state = $s and job = $j] order by $s, $j return if (fn:exists($p)) then {$s} {$j} {fn:avg($p/income)} else () %%% Nebraska Deep Sea Fisherman %%%let $proc := /report/procedure[1] for $i in $proc//action where $i >> ($proc//incision)[1] and $i << ($proc//incision)[2] return $i %%%let $proc := /report/procedure[1] for $i in $proc//instrument where local:precedes(($proc//incision)[1], $i) and local:precedes($i, ($proc//incision)[2]) return $i %%%for $proc in /report/procedure where some $i in $proc//incision satisfies fn:empty($proc//anesthesia[. << $i]) return $proc %%%let $intro := //h2[text()="Introduction"], $next-h := //(h1|h2)[. >> $intro][1] return
{ $intro, if (fn:empty($next-h)) then //node()[. >> $intro] else //node()[. >> $intro and . << $next-h] }
%%%local:sections-and-titles(fn:doc("cookbook.xml")) %%%local:swizzle(fn:doc("plans.xml")) %%%for $p in fn:distinct-values(/orders/order/product), $s in fn:distinct-values(/orders/order/size), $c in fn:distinct-values(/orders/order/color) order by $p, $s, $c return if (fn:exists(/orders/order[product eq $p and size eq $s and color eq $c])) then else () %%%