Chris,

<xsl:apply-templates/> will still apply the implicit templates, but
<xsl:apply-imports/> does not apply the default templates. Apparently
there is one exception to this rule; if <xsl:apply-imports/> is used
in a stylesheet that has no imported stylesheets, then the default
templates are applied.

Morten Jorgensen,
XML Technology Centre,
Sun Microsystems Ireland ltd.


Chris McCabe wrote:
> 
> Are you sure about that?  If I create a stylesheet with no templates
> defined in it, and process something like:
> <foo>This is some text.</foo>
> 
> I get the text printed out.  If I then import another stylesheet which
> also has no templates, shouldn't I still get the same result?  Are you
> saying that I should get nothing in this case?
> 
> Chris
> 
> Morten Jorgensen wrote:
> 
> >Chris,
> >
> >This makes sense. But <xsl:apply-imports/> should not invoke default
> >templates unless the current stylesheet does not import anything.
> >
> >Morten Jorgensen,
> >XML Technology Centre,
> >Sun Microsystems Ireland ltd.
> >
> >Chris McCabe wrote:
> >
> >>It should do whatever a "foo" element would do in E.xsl by itself, which
> >>may or may not be nothing.  It could be the default template rule.  That
> >>is how I would interpret the spec anyway.  I am pretty sure it should
> >>not invoke the template from B.xsl.
> >>
> >>Chris
> >>
> >>Morten Jorgensen wrote:
> >>
> >>>I have spent some time on cleaning up XSLTC's implementation of
> >>>the xsl:apply-imports element and I have come across a scenario
> >>>that seems to be handled differently by the various XSLT processors.
> >>>I'd like some help with determing what the correct behaviour for
> >>>XSLTC is. Consider that you have these stylesheets:
> >>>
> >>> A.xsl imports B.xsl, which imports C.xsl
> >>> A.xsl imports D.xsl, which imports E.xsl
> >>>
> >>>Stylesheets A, B, C and D all have a template that matches on
> >>>an element "foo" - stylesheet E does _not_. This matching
> >>>template looks like this (in all of the first 4 stylesheets):
> >>>
> >>> <xsl:template match="foo">
> >>>   <A><xsl:apply-imports/></A>
> >>> </xsl:template>
> >>>
> >>>The xsl:apply-imports elements is similar to a call to "super()"
> >>>in Java, so the template in A.xsl triggers the template in D.xsl
> >>>(because this is the imported template with the highest import
> >>>precedence). There are no matching templates in E.xsl, so what
> >>>should the template in D.xsl do?
> >>>
> >>> A) Nothing?
> >>> B) Trigger the matching template in B.xsl?
> >>>
> >>>Saxon goes with option A), while Xalan (and currently XSLTC) goes
> >>>with option B). I am tempted to say that Saxon is correct, as
> >>>template D.xsl does not "inherit" any behaviour from template B.xsl.
> >>>
> >>>Any input welcome!
> >>>
> >>>Morten J�rgensen,
> >>>XML Technology Centre,
> >>>Sun Microsystems Ireland ltd.
> >>>

Reply via email to