- From: Sergio Andreozzi <sergio.andreozzi@cnaf.infn.it>
- Date: Sun, 20 Mar 2005 04:17:44 +0100
- To: www-ql@w3.org
Dear all, I'm wondering what is the best way to prune subtrees that did not match the where clause of a FLOWER expression. See the example below for clarification: SAMPLE DATA <ASet> <A name="one"> <B>red</B> <B>yellow</B> <B>green</B> <C>chair</C> <C>table</C> <C>sofa</C> </A> <A name="two"> <B>red</B> <B>green</B> <C>chair</C> <C>sofa</C> </A> <A name="three"> <B>green</B> <C>chair</C> <C>table</C> <C>sofa</C> </A> </ASet> QUERY: for each A, list all the name of A, their B elements that are either "red" or "yellow" and their C elements that are either "chair" or "table" EXPECTED RESULT: <Results> <A name="one"> <B>red</B> <B>yellow</B> <C>chair</C> <C>table</C> </A> <A name="two"> <B>red</B> <C>chair</C> </A> </Results> in practice what I would like to understand is how to prune all the subtrees that do not contain any match with components of the WHERE clause in the XQuery result. The general pruning rule is "if an element does not participate in the satisfaction of the WHERE clause and all its children elements (if any) don't participate as well, then prune it from the result". A possible starting point is the following query, but the pruning action is missing. <Results> { for $A in doc("data.xml")/ASet/A where ($A/B = "red" or $A/B = "yellow") and ($A/C = "chair" or $A/C = "table") return ... } </Results> Thanks, Sergio
Received on Sunday, 20 March 2005 03:23:34 UTC