1. The one with highest "import precedence" is selected
(Import precedence is determined by your import hierarchy
when you use
xsl:import to bring in stylesheet modules, enabling you
to override
imported templates transparently in an importing
stylesheet. If you
want modularity without this behavior, use xsl:include.)
There is a massive gotcha here (or a bug in the spec, depending on your
point of view).
Consider a stylesheet that imports two stylesheets, which both contain a
template that matches the same element:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="a.xsl"/>
<xsl:import href="b.xsl"/>
<xsl:template match="/">
<xsl:apply-imports/>
</xsl:template>
</xsl:stylesheet>
'a.xsl':
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node" priority="10">A</xsl:template>
</xsl:stylesheet>
'b.xsl':
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node">B</xsl:template>
</xsl:stylesheet>
Note the template in 'a.xsl' specifies priority 10. Even with this, the
output is 'B' from 'b.xsl'. Because the first rule in template conflict
resolution is import precedence, and one of the rules of import
precedence is 'the last import wins', so the processor ignores all the
usual ways to control priority.
One reason many of us like Saxon for development is that
Saxon will signal
a warning before it uses the last best template. MSXML simply
uses that
one. Other processors signal an error. YMMV.
However in this case, the usual "ambiguous rule match" warning isn't
output, making it very hard to track down. I have asked Mike on the
Saxon list a while back if it's possible to give a warning for this
specific case, so hopefully it will make it into 8.5 :) (From memory I
think it wasn't possible for the priority attribute to work across the
'built' stylesheet, so a warning is next-best).
cheers
andrew
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--