Harold and the Purple Crayon
%%%
%%%
%%%
%%%
%%%
%%%
Persian
%%%
3618
%%%
{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 CrayonCrockettJohnson
%%%
{$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)}
%%%
fn:node-name($e)
%%%
fn:node-name($e)
%%%
fn:exactly-one(fn:node-name($e))
%%%
Adresseindirizzo
%%%
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.")}
%%%
namespace a {"http://a.example.com" }
%%%
namespace {"a"} {"http://a.example.com" }
%%%
namespace { "" } {"http://a.example.com" }
%%%
{
namespace xs {"http://www.w3.org/2001/XMLSchema"},
attribute xsi:type {"xs:integer"},
23
}
%%%
{
namespace a { "http://a.example.com" }
}
%%%
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 tumbling window $w in (2, 4, 6, 8, 10, 12, 14)
start at $s when fn:true()
only end at $e when $e - $s eq 2
return { $w }
%%%
for tumbling window $w in (2, 4, 6, 8, 10, 12, 14)
start at $s when fn:true()
only end at $e when $e - $s eq 2
return avg($w)
%%%
for tumbling window $w in (2, 4, 6, 8, 10, 12, 14)
start $first at $s when fn:true()
only end $last at $e when $e - $s eq 2
return { $first, $last }
%%%
for tumbling window $w in (2, 4, 6, 8, 10, 12, 14)
start at $s when fn:true()
end at $e when $e - $s eq 2
return { $w }
%%%
for tumbling window $w in (2, 4, 6, 8, 10, 12, 14)
start at $s when $s mod 3 = 1
return { $w }
%%%
for tumbling window $w in (2, 4, 6, 8, 10, 12, 14)
start $first when $first mod 3 = 0
return { $w }
%%%
for sliding window $w in (2, 4, 6, 8, 10, 12, 14)
start at $s when fn:true()
only end at $e when $e - $s eq 2
return { $w }
%%%
for sliding window $w in (2, 4, 6, 8, 10, 12, 14)
start at $s when fn:true()
only end at $e when $e - $s eq 2
return avg($w)
%%%
for sliding window $w in (2, 4, 6, 8, 10, 12, 14)
start at $s when fn:true()
end at $e when $e - $s eq 2
return { $w }
%%%
for tumbling window $w in //closing
start $first next $second when $first/price < $second/price
end $last next $beyond when $last/price > $beyond/price
return
{fn:data($first/date)}{fn:data($first/price)}{fn:data($last/date)}{fn:data($last/price)}
%%%
for $symbol in fn:distinct-values(//symbol)
let $closings := //closing[symbol = $symbol]
for tumbling window $w in $closings
start $first next $second when $first/price < $second/price
end $last next $beyond when $last/price > $beyond/price
return
{fn:data($first/date)}{fn:data($first/price)}{fn:data($last/date)}{fn:data($last/price)}
%%%
for $x at $i in $inputvalues
where $i mod 100 = 0
return $x
%%%
for $x at $i in $inputvalues
where $i mod 100 = 0
return $x
%%%
for $p in $products
order by $p/sales descending
count $rank
where $rank <= 3
return
{$p/name, $p/sales}
%%%
let $x := 64000
for $c in //customer
let $d := $c/department
where $c/salary > $x
group by $d
return
Number of employees earning more than ${$x} is {count($c)}
%%%
let $x := 64000
for $c in //customer
where $c/salary > $x
group by $d := $c/department
return
Number of employees earning more than ${$x} is {count($c)}
%%%
let $x := 64000
for $c in //customer
let $d := $c/department
where $c/salary > $x
group by $d
return
Number of employees earning more than ${distinct-values($x)} is {count($c)}
%%%
for $s in $sales
let $storeno := $s/storeno
group by $storeno
return
%%%
for $s in $sales,
$p in $products[itemno = $s/itemno]
let $storeno := $s/storeno,
$category := $p/category,
$revenue := $s/qty * $p/price
group by $storeno, $category
return
%%%
for $s in $sales,
$p in $products[itemno = $s/itemno]
let $revenue := $s/qty * $p/price
group by $storeno := $s/storeno,
$category := $p/category
return
%%%
for $s1 in $sales
let $storeno := $s1/storeno
group by $storeno
order by $storeno
return
{for $s2 in $s1,
$p in $products[itemno = $s2/itemno]
let $category := $p/category,
$revenue := $s2/qty * $p/price
group by $category
let $group-revenue := sum($revenue)
where $group-revenue > 10000
order by $group-revenue descending
return
}
%%%
let $high-price := 1000
for $p in $products[price > $high-price]
let $category := $p/category
group by $category
return
{fn:count($p)} products have price greater than {$high-price}.
%%%
let $high-price := 1000
return
for $p in $products[price > $high-price]
let $category := $p/category
group by $category
return
{fn:count($p)} products have price greater than {$high-price}.
%%%
+0.0 gt -0.0
%%%
-0.0 gt +0.0
%%%
for $e in $employees
order by $e/salary descending
return $e/name
%%%
$books/book[price < 100]
%%%
for $b in $books/book[price < 100]
order by $b/title
return $b
%%%
for $d in fn:doc("depts.xml")//dept
let $e := fn:doc("emps.xml")//emp[deptno eq $d/deptno]
where fn:count($e) >= 10
order by fn:avg($e/salary) descending
return
{
$d/deptno,
{fn:count($e)},
{fn:avg($e/salary)}
}
%%%
for $d in fn:doc("depts.xml")//dept
order by $d/deptno
for $e in fn:doc("emps.xml")//emp[deptno eq $d/deptno]
return
{$d/deptno, $e/name}
%%%
let $i := 5,
$j := 20 * $i
return $i, $j
%%%
let $i := 5,
$j := 20 * $i
return ($i, $j)
%%%
(//a/b)[5]
%%%
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
%%%
switch ($animal)
case "Cow" return "Moo"
case "Cat" return "Meow"
case "Duck" return "Quack"
default return "What's that odd noise?"
%%%
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
%%%
try {
$x cast as xs:integer
}
catch * {
0
}
%%%
try {
$x cast as xs:integer
}
catch err:FORG0001 {
0
}
%%%
try {
$x cast as xs:integer
}
catch err:FORG0001 | err:XPTY0004 {
0
}
%%%
try {
fn:error(fn:QName('http://www.w3.org/2005/xqt-errors', 'err:FOER0000'))
}
catch * {
$err:code, $err:value, " module: ",
$err:module, "(", $err:line-number, ",", $err:column-number, ")"
}
%%%
declare function local:thrice($x as xs:integer) as xs:integer
{
3*$x
};
local:thrice(try { "oops" } catch * { 3 } )
%%%
5 instance of xs:integer
%%%
{5} instance of xs:integer
%%%
(5, 6) 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"
%%%
typeswitch($customer/billing-address)
case $a as element(*, USAddress)
| element(*, AustraliaAddress)
| element(*, MexicoAddress)
return $a/state
case $a as element(*, CanadaAddress)
return $a/province
case $a as element(*, JapanAddress)
return $a/prefecture
default
return "unknown"
%%%
"2003-02-31" cast as xs:date
%%%
E castable
as T
%%%
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
%%%
(($arg) cast as T?)
%%%
("2000-01-01" cast as
xs:date?)
%%%
xs:date("2000-01-01")
%%%
(($floatvalue * 0.2E-5) cast as xs:decimal?)
%%%
xs:decimal($floatvalue * 0.2E-5)
%%%
("P21D" cast as xs:dayTimeDuration?)
%%%
xs:dayTimeDuration("P21D")
%%%
("12345" cast as
usa:zipcode?)
%%%
usa:zipcode("12345")
%%%
17 cast as apple
%%%
apple(17)
%%%
$myaddress treat as element(*, USAddress)
%%%
child::div1 / child::para / string() ! concat("id-", .)
%%%
$emp ! (@first, @middle, @last)
%%%
$docs ! ( //employee)
%%%
avg( //employee / salary ! translate(., '$', '') ! number(.))
%%%
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)
%%%
//city[not(@country =
preceding::city/@country)]
%%%
declare decimal-format local:de decimal-separator = "," grouping-separator = ".";
declare decimal-format local:en decimal-separator = "." grouping-separator = ",";
let $numbers := (1234.567, 789, 1234567.765)
for $i in $numbers
return (
format-number($i, "#.###,##", "local:de"),
format-number($i, "#,###.##", "local:en")
)
%%%
(: Error - geometry:triangle is not defined :)
import module namespace geo = "http://example.org/geo-functions";
declare variable $t as geometry:triangle := geo:make-triangle();
$t
%%%
import module namespace geo = "http://example.org/geo-functions";
declare variable $t := geo:make-triangle();
$t
%%%
import schema namespace geometry = "http://example.org/geo-schema-declarations";
import module namespace geo = "http://example.org/geo-functions";
declare variable $t as geometry:triangle := geo:make-triangle();
$t
%%%
declare namespace foo = "http://example.org";
Lentils
%%%
declare namespace xx = "http://example.org";
let $i := Lentils
return $i/xx:bing
%%%
Lentils
%%%
let $r := my:random( )
return
if ($r > 0 and $r < 10) then "Yes" else "No"
%%%
if (my:random( ) > 0 and my:random( ) < 10) then "Yes" else "No"
%%%
for $i in 1 to 10
return my:random( )
%%%
let $r := my:random( )
return
for $i in 1 to 10
return $r
%%%
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"))
%%%
/ *
%%%
(/) * 5
%%%
5 * /
%%%
4 treat as item() + -
5
%%%
(4
treat as item()+) - 5
%%%
(4
treat as item()) + -5
%%%
address (: this may be empty
:)
%%%
for (: whom the bell :)
$tolls in 3 return $tolls
%%%
"this is just a string
:)"
%%%
"this is another string
(:"
%%%
for (: set up loop :) $i
in $x return $i
%%%
5 instance (: strange
place for a comment :) of xs:integer
%%%
(: an example:)
%%%
foo -foo
%%%
foo - foo
%%%
foo(: This is a comment :)-
foo
%%%
foo-foo
%%%
{
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/partno]
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
}
}
%%%
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 ()
%%%
(: end of parse tests :)