(:--------------------------------------------------------------- Various XQueries tests. There results are in test-results.txt ----------------------------------------------------------------:) declare function q ($n,$q) { (concat("Query ",$n,":\n"), $q, "\n") } ; q(1,(1 to 100)[10]) ; q(2,(1 to 100)[last()]) ; q(3,(1 to 100)[position()<4]) ; q(4,(1 to 100)[.<4]) ; q(5,(1 to 100)[.>3 and .<10]) ; q(6,{1}2{3+1,4}5{6*3}) ; q(7,) ; q(8,count(1 to 100)) ; q(9,sum(1 to 100)) ; q(10,avg(1 to 100)) ; q(11,contains("abcde","cd")) ; q(12,contains("abcde","ce")) ; q(13,if 1<2 then if 3>4 then 5 else 6 else 7) ; q(14,{for $a in (1,2,3) return {$a}}) ; q(15,for $v in (1,2,3,4) where not($v < 3) return $v) ; q(20,for $x in (1,2,3), $y in (4,5) return $x+$y) ; q(21,for $x in (1,2,3), $y in (4,5) return {$x,$y}) ; q(24,(12)/a/b) ; q(24.1,(1)//b[.=1]) ; q(25,(12)//*[b="2"]) ; q(27,{ for $a in (1,2) return $a+10, for $b in (3,4) return $b+20 }) ; declare function f ($x,$y) { {$x,$y} }; q(28,f(1,2)) ; declare function g ($x,$y) { $x*$y }; declare function f ($x,$y) { $x+$y }; q(29,g(f(5,g(6,f(3,1))),2)) ; declare function f ($x,$y) { $x+$y*2 }; declare function g ($x,$y) { f($x,$y)*3-f($y,$x) }; q(30,g(4,5)) ; declare function fact ($n) { if $n <= 1 then 1 else $n*fact($n - 1) }; q(31,fact(1)) ; q(32,fact(10)) ; declare function f ($x) { for $v in $x return {$v} }; q(33,f((1,2,3))) ; q(34,doc("data/c.xml")/a/@x) ; q(35,doc("data/c.xml")/a/@*/string()) ; q(36,doc("data/c.xml")//@*/name()) ; q(37,doc("data/a.xml")/a/b[d = "K6"]) ; q(38,doc("data/c.xml")/a/b[e]/d) ; q(39,doc("data/c.xml")/a[b/e]/n) ; q(40,doc("data/c.xml")/a/b[e and d]/c) ; q(40.1,doc("data/c.xml")/a/b[f | d]/c) ; q(41,(doc("data/a.xml")/a/*/d)[3]) ; q(42,doc("data/a.xml")/a/b[c="test3"]) ; q(43,doc("data/a.xml")/a/b[d="K3"]) ; q(44,doc("data/a.xml")/a/*[d="K1"]/c/text()) ; q(45,doc("data/a.xml")/a/b[c="test3"][d="K3"]/c) ; q(46,doc("data/a.xml")/a/b[c="test3" and d="K3"]/c) ; q(47,doc("data/a.xml")/a/b[not(c="test5") and d="K3"]/c) ; q(48,doc("data/a.xml")/a/b[d="K3"][c="test3"]/*) ; q(49,doc("data/a.xml")//*[d="K3"]/d) ; q(50,doc("data/a.xml")//*[d="K3"]/c) ; q(51,doc("data/a.xml")/a/b[d="K3"]//*) ; q(52,doc("data/c.xml")//b[d="4"]//*) ; q(53,for $x in doc("data/a.xml")/a/b/c return $x) ; q(54,for $x in doc("data/a.xml")/a/b return ($x/c,$x/d)) ; q(55,doc("data/c.xml")/a/b/e/../c) ; q(56,doc("data/a.xml")/a/b[d="K3"]/c/..) ; q(57,doc("data/a.xml")/a/b/d[. = "K6"]/..) ; q(58,for $v in doc("data/a.xml")/a/b where $v/d="K3" return ($v/d,$v/d)) ; q(59,for $x in doc("data/a.xml")/a/b where $x/c = "test3" return ($x/d,"@")) ; q(60,for $x in doc("data/a.xml")/a/b[c = "test3"] return ($x/d,"@")) ; q(61,for $x in doc("data/c.xml")/a/b where $x/c = "test3" return $x/d+1) ; q(62,for $x in doc("data/c.xml")/a/b[c = "test3"] return $x/d+1) ; q(63,{ for $x in doc("data/a.xml")/a/b return $x/c, for $a in (1,2,3) return $a }) ; q(64,{ for $x in doc("data/a.xml")/a/b where $x/c = "test3" return $x/d }) ; q(65,for $v in doc("data/a.xml")/a/b, $w in $v/c, $z in $v/d return {$v/d,$w,$z}) ; q(66,for $v in doc("data/a.xml")/a/b, $w in $v/c, $z in $v/d return {$w,$z}) ; q(67,{ for $v in doc("data/a.xml")/a/b return {$v/c,$v/d} }) ; q(68,for $v in doc("data/a.xml")/a/b where $v/d="K5" and $v/c="test5" return $v/c) ; q(69,for $v in doc("data/a.xml")/a/b where $v/d="K3" return { $v/c, for $w in $v/c return $w/text() } ) ; q(70,for $v in doc("data/a.xml")/a/b where $v/d="K3" return { for $w in $v/c return $w/text(), for $w in $v/d return $w/text() } ) ; q(71,some $v in doc("data/a.xml")/a/b satisfies $v/d="K3" and $v/c="test5") ; q(72,every $v in doc("data/a.xml")/a/b satisfies $v/d="K3" or $v/c="test5") ; q(73,for $v in (3,2,6,4,7,8,2,4,6,4) order by $v return $v) ; q(74,for $v in doc("data/a.xml")/a/b order by $v/d return $v/c/text()) ; q(75,for $v in doc("data/a.xml")/a/b order by $v/d descending, $v/c return $v/c/text()) ; q(76,for $v in doc("data/a.xml")/a/b return count($v/c)) ; q(77,for $v in doc("data/a.xml")/a/b order by count($v/c) return ($v/d,count($v/c))) ; q(78,for $v in doc("data/c.xml")/a/b/d for $w in doc("data/c.xml")/a/b/d return ($v/text(),$w/text()," ")) ; q(80,for $s in doc("data/cs.xml")//gradstudent where $s//firstname="Leonidas" return $s/gpa) ; q(81,for $s in doc("data/cs.xml")//gradstudent order by $s/gpa descending return ($s//firstname/text()," ",$s//lastname/text()," ",$s/gpa/text(),"\n")) ; declare function f ($x,$y) { {$x,$y} }; q(82,f(1,2)) ; q(83,for $v in doc("data/a.xml")/a/b where some $w in $v/c satisfies $w="test2" return $v/d) ; q(84,let $x := doc("data/a.xml")/a/b, $y := "K3" return $x[d = $y]/c) ; q(85,(for $v in doc("data/a.xml")/a/b for $w in doc("data/a.xml")/a/b where $v/d=$w/d return {$v,$w})[2]) ; declare variable $xxx := doc('data/cs.xml') ; declare function f ($d) { $xxx//gradstudent[.//lastname=$d]/gpa } ; declare function g ($x) { ($x,for $z in $x/* return g($z)) } ; q(86,(f("Galanis"),count(g($xxx)))) ; declare function local:copy($element) { element {name($element)} {$element/@*, for $child in $element/node() return if ($child/name()) then local:copy($child) else $child } } ; q(87,local:copy(doc("data/a.xml"))//d/string())