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 ; 5 + 1.2 ; ($x div $y) + xs:decimal($z) ; fn:error(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()] ; declare namespace exq = "http://example.org/XQueryImplementation"; (:: pragma exq:timeout 1000 ::) fn:count($bib/book/author) ; "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, , 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( ) ; fn:root(self::node()) treat as document-node() ; 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="warning"] ; child::para[attribute::type='warning'][fn:position() = 5] ; child::para[fn:position() = 5][attribute::type="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] ; $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 ; $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) ; $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 ; &#x20;{"abc"} ;  abc ; {" "} ;    ; ; ; (: This is an XQuery comment :) ; ; 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)} } ; let $s := (, , ) 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) ; 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 stable order by $b/title collation "http://www.example.org/collations/fr-ca", $b/price descending empty least return $b ; { 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 } } ; 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 ; 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) ; xdt:dayTimeDuration("P21D") ; usa:zipcode("12345") ; 17 cast as apple ; $myaddress treat as element(*, USAddress) ; 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 ()