Professional Documents
Culture Documents
Xquery2
Xquery2
FLWOR
XQuery
( flower - ).
FLWOR
:
y
y
y
y
FLWOR 5 :
y For
y Let
y Where
y Order By
y Return
FLWOR
for let
return.
t
where,, order byy
.
FLWOR
.
.
ACC
for
for
,
prod, XML Xpath
, doc("catalog.xml")/catalog/product.
, for FLWOR .
let
let .
name $product/name
where
where (predicates).
$product/@dept = "ACC" product
dept
d t
ACC.
ACC
order by
order by .
return
t
return .
for
FLWOR ( for)
for.
for
.
XQuery
for
.
for .
:
for $i in 1 to 3
return <oneEval>{$i}</oneEval>
<oneEval>1</oneEval>
<oneEval>2</oneEval>
<oneE al>3</oneE al>
<oneEval>3</oneEval>
:
for $
$i in reverse(1
( to 3))
return <oneEval>{$i}</oneEval>
<oneEval>3</oneEval>
<oneEval>2</oneEval>
<oneEval>1</oneEval>
.
:
for $
$i in ((1 to 6)[.
)[ mod 2 = 0]]
return <oneEval>{$i}</oneEval>
<oneEval>2</oneEval>
<oneEval>4</oneEval>
<oneEval>6</oneEval>
.
10
for $i in (1, 2)
for $j in ("a"
("a", "b")
return <oneEval>i is {$i} and j is {$j}</oneEval>
11
<oneEval>i
oneEval i is 1 and j is a</oneEval>
a /oneEval
<oneEval>i is 1 and j is b</oneEval>
<oneEval>i is 2 and j is a</oneEval>
<oneEval>i is 2 and j is b</oneEval>
.
12
let
.
let for let
/
.
13
:
let $
$i := ((1 to 3))
return <oneEval>{$i}</oneEval>
:
<oneEval>1 2 3<oneEval>
14
let
for ,
where, order by
y return.
:
let $doc := doc("catalog.xml")
for $prod in $doc//product
l t$
let
$prodDept
dD t := $prod/@dept
$ d/@d t
let $prodName := $prod/name
where $prodDept = "ACC"
ACC or $prodDept = "WMN"
WMN
return $prodName
15
let
,
:
l t$
let
$prodDept
dD t := $prod/@dept,
$ d/@d t $
$prodName
dN
:= $prod/name
$ d/
16
where
/ FLWOR.
where
h
for let.
:
where $prodDept = "ACC" or $prodDept = "WMN"
17
FLWOR where
.
boolean
b l
and
d or.
18
where
.
..
y $prod/number > 100
y number > 100
false
true.
..
y where $prod/name
y where $prod/name
y where $numProds
y where exists($prod/name)
y where $numProds != 0
19
FLWOR
for,
XML .
order by
.
20
order by .
,
,
(ascending) (default)
descending.
21
return /
.
.
return select SQL.
SQL
:
for $i in (1 to 3)
return <oneEval>{$i}</oneEval>
for $i in (1 to 3)
return (<one>{$i}</one>, <two>{$i}</two>)
22
:
let $count := $count + 1
23
.
some
,
every
.
:
y
((some every)
y)
y in
y satisfies .
24
some $dept in doc("catalog.xml")//product/@dept
satisfies ($dept = "ACC")
dept product ACC
every $dept in doc("catalog.xml")//product/@dept
doc("catalog xml")//product/@dept
satisfies ($dept = "ACC")
dept product ACC
not(some $dept in doc("catalog.xml")//product/@dept
satisfies ($dept = "ACC"))
dept product ACC
25
distinct-values
di i
l
distinct-values(doc("catalog.xml")//product/@dept)
(("WMN"
WMN , "ACC"
ACC , "MEN")
MEN )
26
<result
lt d
dept="WMN"
t "WMN" number="557"/>
b "557"/
<result dept="ACC" number="563"/>
<result dept="ACC"
dept ACC number
number="443"/>
443 />
<result dept="MEN" number="784"/>
27
XQuery
XQ
FLWOR
f $item
for
$it
in
i doc("order.xml")//item,
d (" d
l")//it
$product in doc("catalog.xml")//product[number = $item/@num]
return <item num="{$item/@num}"
num {$item/@num}
name="{$product/name}"
quan="{$item/@quantity}"/>
28
29
30
31
<item
i
num="557"
"557" name="Fleece
"Fl
Pullover"
P ll
" price="29.99"/>
i
"29 99"/
<item num="563" name="Floppy Sun Hat" price="69.99"/>
<item num="443"
num= 443 name=
name="Deluxe
Deluxe Travel Bag"
Bag price=
price="39
39.99
99"/>
/>
<item num="557" name="Fleece Pullover" price="29.99"/>
32
XML Schema ,,
XML Schema XML
.
(casting)
33
.
XQuery for
for $
$d in distinct-values(doc("order.xml")//item/@dept)
(
(
)
@ p)
let $items := doc("order.xml")//item[@dept = $d]
order by $d
return
t
<department
<d
t
t code="{$d}">{
d "{$d}">{
for $i in $items
order by
y $i/@num
@
return $i
}</department>
34
<department code="ACC">
<item dept="ACC" num="443" quantity="2"/>
<item dept="ACC" num="563" quantity="1"/>
</department>
<department code="MEN">
<item dept="MEN" num="784" quantity="1" color="white"/>
<item dept="MEN"
p
num="784" q
quantity="1"
y
color="gray"/>
g y
</department>
<department code="WMN">
<item dept="WMN" num="557" quantity="1" color="navy"/>
<item dept="WMN" num="557" quantity="1" color="black"/>
</department>
.
35
XQuery.
:
y Count
C
t
y Sum
y Avg
y Max
M
y Min
36
for $d in distinct-values(doc("order.xml")//item/@dept)
let $items := doc("order.xml")//item[@dept = $d]
order by $d
return <department code="{$d}"
numItems="{count($items)}"
distinctItemNums="{count(distinct-values($items/@num))}"
totQuant="{sum($items/@quantity)}"/>
Q
{
($
@q
y)}
37