[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Is this a Saxon 8.0 bug ?

Subject: Re: Is this a Saxon 8.0 bug ?
From: Dimtre Novatchev <dnovatchev@xxxxxxxxx>
Date: Mon, 28 Jun 2004 07:50:48 +1000
bug idenity
Hi Jeni,

Thanks a lot -- this is a typical mistake with the use of the idenity template.

Now the solution to Mike Trotman's problem works and looks like this:

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:f="http://fxsl.sf.net/"
exclude-result-prefixes="f"
>
   <xsl:import href="identity.xsl"/>
   <xsl:import href="func-maxDepth.xsl"/>
   
   <xsl:output omit-xml-declaration="yes"/>
   <xsl:strip-space elements="*"/>
   
   <!-- This transformation must be applied to:
        testMaximum3.xml 
    -->
    
    <xsl:template match="*[folder]">
      <xsl:copy>
        <xsl:copy-of select="@*"/>
        <xsl:apply-templates select="folder">
          <xsl:sort select="f:maxDepth(.)" data-type="number"
           order="descending"/>
        </xsl:apply-templates>
        
      </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

where the identity rule has been moved in its own file and is imported
first among all other imports.

The reason I wrote this solution was to ask the obvious question about
memoisation. This solution is top-down and will be extremely
inefficient because the maximum depth of subtrees will be
re-calculated many times.

I haven't tried to transform a big and deep-nested tree, but this is
the case where memoisation will be really helpful.


Cheers,
Dimitre.

On Sun, 27 Jun 2004 21:19:23 +0100, Jeni Tennison <jeni@xxxxxxxxxxxxxxxx> wrote:
> 
> Hi Dimitre,
> 
> > So, my question is if I'm doing something wrong in the top-most
> > (first in this message) transformation, or is this a bug in Saxon 8
> > and if this is a bug, what is the recommended workaround.
> 
> You're doing something wrong in the top-most transformation: your
> identity template is overriding the imported template matching
> MyMaxDepth:* in func-maxDepth. Thus the f:apply() function is
> returning a copy of the <MyMaxDepth:MyMaxDepth> element and the
> f:map() function is returning a sequence of those elements. The max()
> function is attempting to get a maximum of their values and giving an
> error because it can't convert an empty string into a number.
> 
> You're not getting an error with your second top-most stylesheet
> because it doesn't have this overriding identity template.
> 
> Cheers,
> 
> Jeni
> 
> ---
> Jeni Tennison
> http://www.jenitennison.com/
> 
>

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.