- From: Michael Fuller <msf@mds.rmit.edu.au>
- Date: Sat, 11 Sep 1999 12:36:42 +1000
- To: Wim de Vries <w.vries@elsevier.nl>
- Cc: www-style@w3.org
First, an aside. Questions like this are best directed to the
XSL-List mailing list at http://www.mulberrytech.com/xsl/xsl-list/
Subscription is open; the list is archived.
On Fri, Sep 10, 1999 Wim de Vries asks:
> I can not find an answer in the XSLT draft document about the processing
> sequence of source tree and a XSL style sheet. Is it data/message driven?
> Or are the template rules executed successively? Or mixed?
It's mixed. The data determines which templates apply; templates then
recursively direct direct what data to process.
> So, now where does the processors starts:
> - at the XML doc, identifying <book> and selecting template 1 and
> successively the same for the childs. [...]
> - at the stylesheet, executing the first template it encounters. [...]
>
> Can some help me out here?
What you're missing is section 5.8 of the XSLT draft: Built-in templates.
An XSLT engine must supply certain default templates to apply in the
absence of an explicit template rule, including**:
<xsl:template match="*|/"><xsl:apply-templates/><xsl:/template>
Processing involves matching nodes from the source tree against template
patterns; the template with the (best) matching pattern is then
instantiated to form part of the result tree.
In your example:
> XML:
> <book>
> <title>Johns Book</title>
> <author>
> <first-name>John</first-name>
> <surname>the Writer</surname>
> </author>
> </book>
>
> XSL:
> <xsl:template match="book"> //template 1
> <fo:inline-sequence font-weight="bold">
> <xsl:apply-templates/>
> </fo:inline-sequence>
> </xsl:template>
> <xsl:template match="surname"> //template 2
> <fo:inline-sequence font-weight="italic">
> <xsl:apply-templates/>
> </fo:inline-sequence>
> </xsl:template>
> <xsl:template match="first-name"> //template 3
> <fo:inline-sequence font-weight="italic">
> <xsl:apply-templates/>
> </fo:inline-sequence>
> </xsl:template>
...processing would start by matching the above built-in template
to the root node of the source tree; instantiating that template
selects the child nodes of the root for recursive processing.
The first child node of root of the source tree is the <book>...</book>
element; this is matched by your template 1. Instantiating template 1
causes the literal "<fo:inline-sequence font-weight="bold">" to be added
to the result tree; the child nodes of "<book>...<book>" are then selected
for processing. Etc, etc. Eventually, the recursive processing of those
children is completed, and the literal "</fo:inline-sequence>" is emitted,
completing the result tree.
For a nice, up-to-date introduction to XSLT, see chapter 14 of
Elliote Rusty Harold's _The XML Bible_, available on line at:
http://www.metalab.unc.edu/xml/books/bible/updates/14.html
The best way of getting to understand all this is to install XT,
James Clark's stand-alone Java implementation of XSLT:
http://www.jclark.com/xml/xt.html
Hope this all helps.
Michael Fuller
** the others are:
<xsl:template match="text()|@*"><xsl:value-of select="."/><xsl:/template>
<xsl:template match="processing-instruction()|comment()"><xsl:/template>
____________________________________________________________________________
Multimedia Databases Systems, Phone: +61 3 9925 4148
RMIT University Fax: +61 3 9925 4098
Level 3, 110 Victoria St, msf@mds.rmit.edu.au
Carlton 3053, Australia. http://www.mds.rmit.edu.au/~msf/
Received on Friday, 10 September 1999 22:37:00 UTC