|
[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message] Xquery to xslt conversionsDavid Carlisle davidc at nag.co.ukWed Jan 11 17:20:15 PST 2006
Also, how are you handling the XQuery "order by" problem: what XSLT code do you generate for pathological cases like for $x in 1 to 10, $y in 100 to 200 order by $y, $x return $x + $y Actually as I document in the xq2xsl notes, that is the non-pathological case where a somewhat simpler and more efficient mapping to xslt can be used. The two ranges are independent so can be pulled out of the loop and you know in advance how many tuples you need to iterate over. I document the simpler mapping at http://monet.nag.co.uk/xq2xml/xq2xslnotes.html#s5 but actually I only implement the more general case where the range of the later variables depends on earlier variables, for example for $x in 1 to 10, $y in $x to 200 order by $y, $x return $x + $y I've just noticed that my documentation of the general case ends with The main disadvantage of all this is that the expressions F($i) above that generate the sequences get evaluated multiple times and might be expensive, This could be optimised by the convertor (for example detecting the case that the sequences do not depend on the range variables, and so using the method in the previous section, but some of the optimisations are probably more easily done by the XSLT compiler. For example I believe Saxon does not evaluate variables that are never used, so there is no real need for the convertor to analyse the expressions and see if all the variables defined are needed. Is my trust in saxon justified here? or should I work harder and explictly omit the expressions <xsl:variable name="xq:p2" select="$xq:index[2]"/> <xsl:variable name="y" select="(( 100 to 200 ))[$xq:p2]"/> in which is setting up the range variable $y which then isn't used in (this) sort expression. <xsl:for-each select="$xq:here"> <xsl:variable name="xq:index" select="for $i in string-to-codepoints(.) return($i - 32)"/> <xsl:variable name="xq:p1" select="$xq:index[1]"/> <xsl:variable name="x" select="(( 1 to 10 ))[$xq:p1]"/> <xsl:variable name="xq:p2" select="$xq:index[2]"/> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <xsl:variable name="y" select="(( 100 to 200 ))[$xq:p2]"/> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <xsl:sequence select="$x"/> </xsl:for-each> David ________________________________________________________________________ This e-mail has been scanned for all viruses by Star. The service is powered by MessageLabs. For more information on a proactive anti-virus service working around the clock, around the globe, visit: http://www.star.net.uk ________________________________________________________________________
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|






