xsl-list
[Top] [All Lists]

Re: Is this a Saxon 8.0 bug ?

2004-06-27 14:50:48
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(_at_)jenitennison(_dot_)com> 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/




<Prev in Thread] Current Thread [Next in Thread>