xsl-list
[Top] [All Lists]

RE: How to filter element values...

2004-02-11 10:30:31
Thanks Ken, for helping me clear this up. The fact that the spec specifically 
says "This template rule applies to both element nodes and the root node." and 
doesn't mention the leaf nodes with respect to modes was throwing me off. Since 
reaching a leaf node would essentially end any recursion I assumed they were 
intentionally left out of moded matching...

I'm satisfied now, Thanks again,
Josh
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com]On Behalf Of G. 
Ken Holman
Sent: Tuesday, February 10, 2004 6:13 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] How to filter element values...


At 2004-02-10 16:56 -0800, Josh Canfield wrote:
I could be reading it wrong, but I don't think that section covers the 
behavior that I am seeing.

I believe it is covered by the very first sentence of 5.8, even though 
there isn't an example of the processing of leaf nodes in a mode.

There cannot be a situation where there is no template anywhere for any 
mode, so the first sentence implicitly includes processing leaf nodes in a 
mode.

5.8 starts: "There is a built-in template rule to allow recursive 
processing to continue in the absence of a successful pattern match by an 
explicit template rule in the stylesheet." ... therefore if the stylesheet 
is absent a successful pattern match for a text node in a mode, there must 
be a built-in template rule.  And the built-in template rule for text nodes 
adds the node to the result tree.  I think it is just missing detail to 
spell that out in the document.

I would expect this stylesheet:

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; >
  <xsl:template match="/">
        <MISSING_MODE>
        <xsl:apply-templates mode="MISSING_MODE"/>
        </MISSING_MODE>
  </xsl:template>
</xsl:stylesheet>

to output:

<MISSING_MODE>
</MISSING_MODE>

That would require an empty template rule for the text() node .. not an 
absent template rule.  I don't think an absent rule should imply "do 
nothing", therefore, I think the spec successfully covers the need for 
processing text() nodes in any mode by adding their content to the result tree.

Both Xalan and Saxon behave as though there is a built-in text and 
attribute template that is equivalent to:

<xsl:template match="text()|@*" mode="m">
  <xsl:value-of select="."/>
</xsl:template>

I believe this to be implied by the first sentence, and I have documented 
it as such since day one in my XSLT training material, and I chose to 
include in the material an illustration of the template rules for leaf 
nodes in a mode.

................. Ken


--
Public courses: upcoming world tour of hands-on XSL training events
Each week:    Monday-Wednesday: XSLT/XPath; Thursday-Friday: XSL-FO
Washington, DC: 2004-03-15            San Francisco, CA: 2004-03-22
Hong Kong: 2004-05-17    Germany: 2004-05-24    England: 2004-06-07
World-wide on-site corporate, government & user group XML training!

G. Ken Holman                  mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
Crane Softwrights Ltd.           http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0     +1(613)489-0999 (F:-0995)
Male Breast Cancer Awareness   http://www.CraneSoftwrights.com/s/bc


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>