W3C home > Mailing lists > Public > www-ql@w3.org > January to March 2005

RE: how to prune subtrees in an XQuery result

From: Mukul Gandhi <mukul_gandhi@yahoo.com>
Date: Mon, 21 Mar 2005 00:56:40 -0800 (PST)
Message-ID: <20050321085640.17459.qmail@web41301.mail.yahoo.com>
To: Michael Kay <mhk@mhk.me.uk>, www-ql@w3.org

Thank you Mike..

Regards,
Mukul

--- Michael Kay <mhk@mhk.me.uk> wrote:

> I'm hoping to do some XSLT vs XQuery performance
> comparisons over a wider
> range of queries over the next few weeks. I don't
> think you can draw too
> many conclusions from one example. However, I think
> that queries of the kind
> "copy the whole tree except for X" are more natural
> to express in XSLT than
> in XQuery and it wouldn't be surprising if such
> queries also performed
> better in XSLT. There are other queries (the more
> SQL-like queries) that are
> more natural to express in XQuery.
> 
> Obviously you can't extrapolate any performance
> results from Saxon and
> assume that they are characteristic of the two
> languages. That requires a
> wider set of comparisons.
> 
> I suspect most people will choose between the two
> languages based on
> perceived usability rather than performance.
> Perceived usability depends
> largely (in my view) on what other languages you
> have used before.
> 
> Michael Kay 
> 
> > -----Original Message-----
> > From: www-ql-request@w3.org
> [mailto:www-ql-request@w3.org] On 
> > Behalf Of Mukul Gandhi
> > Sent: 21 March 2005 08:06
> > To: Michael Kay; www-ql@w3.org
> > Subject: RE: how to prune subtrees in an XQuery
> result
> > 
> > 
> > Hi Mike,
> >   I did a performance comparison between XQuery
> > solution and the XSLT (1.0) solution (using Saxon
> 8.3;
> > with -t option).
> > 
> > The equivalent XSLT solution is(I guess it can be
> > written more efficiently):
> > 
> > <?xml version="1.0"?> 
> > <xsl:stylesheet
> > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> > version="1.0">
> >  
> >  <xsl:output method="xml" indent="yes" /> 
> >  
> >  <xsl:template match="/ASet">
> >    <Results>
> >      <xsl:for-each select="A">
> >        <xsl:if test="B[(. = 'red') or (. =
> 'yellow')]
> > or C[(. = 'chair') or (. = 'table')]">
> >          <A>
> >            <xsl:copy-of select="@*" />
> >            <xsl:copy-of select="B[(. = 'red') or
> (. =
> > 'yellow')] | C[(. = 'chair') or (. = 'table')]" />
> >          </A>
> >        </xsl:if>
> >      </xsl:for-each>
> >    </Results>
> >  </xsl:template>
> >  
> > </xsl:stylesheet>
> > 
> > XQuery solution's (average) execution time is -
> 313
> > milliseconds
> > XSLT solution's (average) execution time is - 63
> > milliseconds
> > 
> > XSLT seems quite faster than XQuery. Can we
> conclude
> > that XSLT will always be faster than XQuery? 
> > 
> > I believe XQuery is geared more towards database
> > rather than flat XML files.. Should we still
> prefer
> > XQuery sometimes than XSLT (when doing a normal
> flat
> > file XML transformation). 
> > 
> > Regards,
> > Mukul
> > 
> > --- Michael Kay <mhk@mhk.me.uk> wrote:
> > > Here's a solution that doesn't involve doing the
> > > comparisons twice.
> > > 
> > > <Results> {
> > >    for $A in doc("data.xml")/ASet/A
> > >    let $matches := $A/(B[.=("red","yellow")]
> > >                      |C[.=("chair","table")])
> > >    where ($matches)
> > >    return <A>{$matches}</A>
> > > }</Results>
> > > 
> > > Michael Kay
> > > http://www.saxonica.com/
> > > 
> > > > 
> > > > Hi Sergio,
> > > >   Probably this XQuery is required..
> > > > 
> > > > <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 
> > > >       <A>        
> > > >         {$A/@*}
> > > >         {$A/B[(. = 'red') or (. = 'yellow')]}
> > > >         {$A/C[(. = 'chair') or (. = 'table')]}
> > > >       </A>
> > > > }
> > > > </Results>
> > > > 
> > > > Regards,
> > > > Mukul
> > > > 
> > > > --- Sergio Andreozzi
> > > <sergio.andreozzi@cnaf.infn.it>
> > > > wrote:
> > > > > 
> > > > > 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
> > > > 
> > > > 
> > > > 
> > > > 		
> > > > __________________________________ 
> > > > Do you Yahoo!? 
> > > > Yahoo! Small Business - Try our new resources
> > > site!
> > > > http://smallbusiness.yahoo.com/resources/ 
> > > > 
> > > > 
> > > 
> > > 
> > > 
> > 
> > 
> > 		
> > __________________________________ 
> > Do you Yahoo!? 
> > Make Yahoo! your home page 
> > http://www.yahoo.com/r/hs
> > 
> > 
> 
> 
> 



		
__________________________________ 
Do you Yahoo!? 
Yahoo! Small Business - Try our new resources site!
http://smallbusiness.yahoo.com/resources/ 
Received on Monday, 21 March 2005 09:07:08 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 20:17:16 UTC