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

xsl:apply-imports behavior wrong in Saxon?

Subject: xsl:apply-imports behavior wrong in Saxon?
From: "Bob Stayton" <bobs@xxxxxxxxxxxx>
Date: Thu, 4 Apr 2013 09:10:18 -0700
 xsl:apply-imports behavior wrong in Saxon?
I have uncovered a significant difference in the way xsltproc and Saxon (both 6 and 9)
handle xsl:apply-imports when using a template mode. It seem that Saxon
is doing the wrong thing here, but I wanted to ask if others interpret it
this way. I cannot find anything in the archive on this subject.


I'm processing this simple document book.xml:
----------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<book>
 <title>My book title</title>
 <para>My first para</para>
</book>
----------------------------------------------------------------------------------------------------------------------------

with this stylesheet (modetest.xsl):
----------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 version="1.0">

<xsl:import href="no-mode.xsl"/>

<xsl:param name="myflag" select="1"/>

<xsl:template match="book">
 <xsl:apply-templates select="." mode="inside_mode"/>
</xsl:template>

<xsl:template match="book" mode="inside_mode">
 <xsl:choose>
   <xsl:when test="$myflag != 0">
     <xsl:message>Reached apply-imports in modetest.xsl</xsl:message>
     <xsl:apply-imports/>
   </xsl:when>
   <xsl:otherwise>
     <xsl:message>Reached otherwise in modetest.xsl</xsl:message>
   </xsl:otherwise>
 </xsl:choose>
</xsl:template>

<xsl:template match="*" mode="inside_mode">
 <xsl:message>reached fallback in modetest.xsl for element
    <xsl:value-of select="local-name()"/></xsl:message>
</xsl:template>

</xsl:stylesheet>
----------------------------------------------------------------------------------------------------------------------------


And the imported no-mode.xsl stylesheet is: ---------------------------------------------------------------------------------------------------------------------------- <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="book">
 <xsl:choose>
   <xsl:when test="$myflag != 0">
     <xsl:message>Reached when in no_mode.xsl</xsl:message>
     <xsl:apply-imports/>
   </xsl:when>
   <xsl:otherwise>
     <xsl:message>Reached otherwise in no_mode.xsl</xsl:message>
   </xsl:otherwise>
 </xsl:choose>
</xsl:template>

</xsl:stylesheet>
----------------------------------------------------------------------------------------------------------------------------

When I apply modetest.xsl to book.xml using xsltproc, the message output is
just:

Reached apply-imports in modetest.xsl

When I apply modetest.xsl to book.xml using Saxon, the output is:

Reached apply-imports in modetest.xsl
reached fallback in modetest.xsl for element title
reached fallback in modetest.xsl for element para

According to Saxon author Michael Kay's website, his description of
xsl:apply-imports is:

"The effect is to search for a template that matches the current node and
that is defined in a stylesheet that was imported (directly or indirectly,
possibly via xsl:include) from the stylesheet containing the current
template, and whose mode matches the current mode. If there is such a
template, it is activated using the current node. If not, the call on
xsl:apply-imports has no effect."

There is no template matching on book in mode="inside_mode" in the imported
stylesheet, so the call on xsl:apply-imports should have no effect.  That is
what I see when I process with xsltproc.  However, Saxon continues
processing the children of book in that mode, even though there is no
xsl:apply-templates to trigger such processing.   Why is Saxon applying
templates in mode="inside_mode" to the children of book?

Bob Stayton
Sagehill Enterprises
bobs@xxxxxxxxxxxx

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.