- From: Vasilis Vassalos <vasilis@enosysmarkets.com>
- Date: Mon, 18 Feb 2002 16:52:40 -0500
- To: "Peter Fankhauser" <fankhaus@ipsi.fhg.de>, <www-ql@w3.org>, "Chen Yabing" <iscp0054@nus.edu.sg>
- Message-ID: <072901c1b8c6$96aadce0$9ab87a80@stern.nyu.edu>
MessageThe particular query would be easily handled
if there was a groupby construct.
Look at issue 168 in the XQuery document.
The WG welcomes your feedback on the open
issues, and those who raised issue 168 would
appreciate your feedback on that issue
in particular.
As Peter and others pointed out, the alternative
for grouping is to do it with nested queries.
----- Original Message -----
From: Peter Fankhauser
To: www-ql@w3.org
Sent: Monday, February 18, 2002 12:53 PM
Subject: FW: Combine sub elements in identical elements
Another try with a different send-address...
Peter.
-----Original Message-----
From: Peter Fankhauser [mailto:fankhaus@infonyte.com]
Sent: Montag, 18. Februar 2002 14:56
To: 'Chen Yabing'; 'www-ql@w3.org'
Subject: RE: Combine sub elements in identical elements
It appears that you want to
depict only projects for which there exist suppliers for which there exist
parts with a price > 110, within those projects you only want to return suppliers
for which there exist parts with a price > 110, within those suppliers you
only want to return the parts with a price > 110.
One way to accomplish this in XQuery is by a nested query.
FOR $j IN document("spj.xml")//project[.//price >100]
RETURN
<project jno = {$j/@jno}>
{FOR $s IN $j/supplier[.//price >100]
RETURN
<supplier sno = {$s/@sno}>
{FOR $p IN $s/part[price > 100]
RETURN
<part pno = {$p/@pno}>
{$p/price}
</part>
}
</supplier>
}
</project>
In fact, this corresponds to the (presumed) logic of your query
pretty well. If you're happy with possibly empty suppliers and
projects, you can leave out the predicates with [.//price].
Hope this clarifies,
Peter
-----Original Message-----
From: www-ql-request@w3.org [mailto:www-ql-request@w3.org] On Behalf Of Chen Yabing
Sent: Montag, 18. Februar 2002 13:21
To: 'www-ql@w3.org'
Subject: Combine sub elements in identical elements
Hi,
it seems that XQuery cannot place elements together even if they have same parent elements in the result. I mean that the result will produce two identical elements for each sub elements.
For example, the source document:
<db>
<project jno="j001">
<supplier sno="s001">
<part pno="p001" >
<price>190</price>
</part>
</supplier>
<supplier sno="s002">
<part pno="p001">
<price>110</price>
</part>
</supplier>
</project>
<project jno="j002">
<supplier sno="s002">
<part pno="p002">
<price>120</price>
</part>
</supplier>
</project>
</db>
the query is:
FOR $j IN document("spj.xml")//project,
$s IN $j/supplier,
$p IN $s/part
WHERE $p/price >100
return
<project jno = {$j/@jno}>
<supplier sno = {$s/@sno}>
<part pno = {$p/@pno}>
{$p/price}
</part>
</supplier>
</project>
and the result is:
<project jno="j001">
<supplier sno="s001">
<part pno="p001">
<price>190</price>
</part>
</supplier>
</project>
<project jno="j001">
<supplier sno="s002">
<part pno="p001">
<price>110</price>
</part>
</supplier>
</project>
<project jno="j002">
<supplier sno="s002">
<part pno="p002">
<price>120</price>
</part>
</supplier>
</project>
</xql:result>
In the ideal situation, the query result should be identical to the source document. but there are two project whose jno is "j001".
If I want to produce a result which will combine elements under the identical parent elements together so that there are only one parent elements. How can I do based on the above query?
Thank you!
Received on Monday, 18 February 2002 16:53:40 UTC