- From: Chen Yabing <iscp0054@nus.edu.sg>
- Date: Fri, 14 Mar 2003 16:36:20 +0800
- To: <www-ql@w3.org>
assume the xml file is:
<db>
<a ano="a1">
<b bno="b1"/>
<b bno="b2"/>
<c cno="c1">
<d dno="d1"/>
</c>
</a>
<a ano="a2">
<b bno="b2"/>
<c cno="c1">
<d dno="d1"/>
</c>
<c cno="c2">
<d dno=d2"/>
</c>
</a>
</db>
I want to have such a result by executing an XQuery:
<db>
<d dno="d1">
<b bno="b1"/>
<b bno="b2"/>
</d>
<d dno="d2">
<b bno="b2"/>
</d>
</db>
the result means that for each distinct d, we need all b with distinct bno
that appear under their (d & b) common ancestor a.
for example, for d1, a's ano can be "a1" & "a2", then all b with distinct
bno under "a1" and "a2" are "b1" and "b2"
for d2, only "b2".
I think one XQuery may be like this:
for $dno in distinct(document("a.xml")//d/@dno)
return <d dno="$dno">
{ let $a := document("a.xml")//a[descendant::d/@dno=$dno]
for $bno in distinct(document("a.xml")//b[ ancestor::a/@ano in
($a/@ano) ]/@bno)
return <b bno="$bno"/>
}
</c>
can XQuery currently support the set comparison operator, such as
"ancestor::a/@ano in ($a/@ano)"?
or can I use some other way to implement such a comparison? otherwise, can
XQuery support such a result?
Received on Friday, 14 March 2003 03:34:53 UTC