You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by Morten Jorgensen <mo...@sun.com> on 2001/10/25 19:05:24 UTC

xsl:import and "multiple inheritance"

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.

Re: xsl:import and "multiple inheritance"

Posted by Chris McCabe <ch...@choicehotels.com>.
I'm sorry, I meant to say implicit templates.  I am not sure what you 
are referring to as default templates if not the implicit templates.

Chris

Morten Jorgensen wrote:

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



Re: xsl:import and "multiple inheritance"

Posted by Morten Jorgensen <mo...@sun.com>.
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.
> >>>

Re: xsl:import and "multiple inheritance"

Posted by Chris McCabe <ch...@choicehotels.com>.
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.
>>>



Re: xsl:import and "multiple inheritance"

Posted by Morten Jorgensen <mo...@sun.com>.
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.
> >

Re: xsl:import and "multiple inheritance"

Posted by Chris McCabe <ch...@choicehotels.com>.
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.
>