2.5 Forwards-Compatible Processing
Forwards-Compatible Processing
An element enables forwards-compatible mode for itself, its
attributes, its descendants and their attributes if either it is an
xsl:stylesheet element whose version
attribute is not equal to 1.0, or it is a literal result
element that has an xsl:version attribute whose value is
not equal to 1.0, or it is a literal result element that
does not have an xsl:version attribute and that is the
document element of a stylesheet using the simplified syntax (see
[Literal Result Element as Stylesheet]). A literal result element
that has an xsl:version attribute whose value is equal to
1.0 disables forwards-compatible mode for itself, its
attributes, its descendants and their attributes.
If an element is processed in forwards-compatible mode, then:
-
if it is a Top-level
element and XSLT 1.0 does not allow such elements as top-level
elements, then the element must be ignored along with its
content;
-
if it is an element in a template and XSLT 1.0 does not allow
such elements to occur in templates, then if the element is not
instantiated, an error must not be signaled, and if the element is
instantiated, the XSLT must perform fallback for the element as
specified in [Fallback];
-
if the element has an attribute that XSLT 1.0 does not allow
the element to have or if the element has an optional attribute with a
value that the XSLT 1.0 does not allow the attribute to have, then the
attribute must be ignored.
Thus, any XSLT 1.0 processor must be able to process the following
stylesheet without error, although the stylesheet includes elements
from the XSLT namespace that are not defined in this
specification:
<xsl:stylesheet version="1.1"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:choose>
<xsl:when test="system-property('xsl:version') >= 1.1">
<xsl:exciting-new-1.1-feature/>
</xsl:when>
<xsl:otherwise>
<html>
<head>
<title>XSLT 1.1 required</title>
</head>
<body>
<p>Sorry, this stylesheet requires XSLT 1.1.</p>
</body>
</html>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
NOTE:
If a stylesheet depends crucially on a top-level element
introduced by a version of XSL after 1.0, then the stylesheet can use
an xsl:message element with terminate="yes"
(see [Messages]) to ensure that XSLT processors
implementing earlier versions of XSL will not silently ignore the
top-level element. For example,
<xsl:stylesheet version="1.5"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:important-new-1.1-declaration/>
<xsl:template match="/">
<xsl:choose>
<xsl:when test="system-property('xsl:version') < 1.1">
<xsl:message terminate="yes">
<xsl:text>Sorry, this stylesheet requires XSLT 1.1.</xsl:text>
</xsl:message>
</xsl:when>
<xsl:otherwise>
...
</xsl:otherwise>
</xsl:choose>
</xsl:template>
...
</xsl:stylesheet>
If an Expression occurs in
an attribute that is processed in forwards-compatible mode, then an
XSLT processor must recover from errors in the expression as
follows:
-
if the expression does not match the syntax allowed by the
XPath grammar, then an error must not be signaled unless the
expression is actually evaluated;
-
if the expression calls a function with an unprefixed name
that is not part of the XSLT library, then an error must not be
signaled unless the function is actually called;
-
if the expression calls a function with a number of arguments
that XSLT does not allow or with arguments of types that XSLT does not
allow, then an error must not be signaled unless the function is
actually called.
|