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. > >>>
