8.2. xsl:stylesheet and xsl:transform
An XSLT stylesheet is an XML document. It can and
generally should have an XML declaration. It can have a document type
declaration, though most stylesheets do not. The root element of this
document is either stylesheet or
transform. These are synonyms for each other. You
can use either stylesheet or
transform as you prefer. There is absolutely no
difference between them, aside from the name. They both have the same
possible children and attributes. They both mean the same thing to an
XSLT processor.
The stylesheet and transform
elements, like all other XSLT elements, are in the http://www.w3.org/1999/XSL/Transform
namespace. This namespace is customarily mapped to the
xsl prefix so that you write
xsl:transform or xsl:stylesheet
rather than simply transform or
stylesheet.
As well as the xmlns:xsl attribute declaring this
prefix mapping, the root element must have a
version attribute with the value
1.0. Thus, a minimal XSLT stylesheet, with only
the root element and nothing else, is as shown in Example 8-2.
WARNING:
This namespace
URI must be exactly correct. If
even so much as a single character is wrong, the stylesheet processor
will output the stylesheet itself instead of either the input
document or the transformed input document. There's
a reason for this (see Section 2.3 of the XSLT 1.0 specification,
Literal Result Element as
Stylesheet, if you
really want to know), but the bottom line is that this weird behavior
looks very much like a bug in the XSLT processor if
you're not expecting it. If you ever do see your
stylesheet processor spitting your stylesheet back out at you, the
problem is almost certainly an incorrect namespace URI.
TIP:
Internet Explorer 5.0 and
5.5 partially support a very old and out-of-date working draft of
XSLT, as well as various Microsoft extensions to this old working
draft. They do not support XSLT 1.0, and indeed no XSLT stylesheets
in this book work in IE5. Stylesheets that are meant for Microsoft
XSLT can be identified by their use of the http://www.w3.org/TR/WD-xsl namespace. IE6
supports both http://www.w3.org/1999/XSL/Transform and
http://www.w3.org/TR/WD-xsl. Good
XSLT developers don't use http://www.w3.org/TR/WD-xsl and
don't associate with developers who do.
Example 8-2. A minimal XSLT stylesheet
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
</xsl:stylesheet>
Perhaps a little surprisingly, this is a complete XSLT stylesheet; an
XSLT processor can apply it to an XML document to produce an output
document. Example 8-3 shows the effect of applying
this stylesheet to Example 8-1.
Example 8-3. people.xml transformed by the minimal XSLT stylesheet
<?xml version="1.0" encoding="utf-8"?>
Alan
Turing
computer scientist
mathematician
cryptographer
Richard
P
Feynman
physicist
Playing the bongoes
You can see that the output consists of a text declaration plus the
text of the input document. In this case, the output is a well-formed
external parsed entity, but it is not itself a complete XML document.
Markup from the input document has been stripped. The net effect of
applying an empty stylesheet, like Example 8-2, to
any input XML document is to reproduce the content but not the markup
of the input document. To change that, we'll need to
add template rules to the stylesheet telling the XSLT processor how
to handle the specific elements in the input document. In the absence
of explicit template rules, an XSLT processor falls back on
built-in rules that have the effect
shown
here.
 |  |  | 8. XSL Transformations |  | 8.3. Stylesheet Processors |
Copyright © 2002 O'Reilly & Associates. All rights reserved.
|
|