This section contains a list of changes that were made between the first Candidate Recommendation in November 2015 and the second Candidate Recommendation in February 2017. Design changes affecting the syntax or semantics of the XSLT language are marked (**). Minor changes to edge cases, and cases where rules have been supplied that were previously missing, are marked (*). Other changes may be considered editorial: these include corrections to examples, addition of non-normative notes, removal of ambiguities and inconsistencies, and textual clarifications. Changes that are purely typographical are not listed.
Bug29234: If explicit packages are used, then the initial mode used when a stylesheet is invoked (like an initial template or initial function) must now be declared as public. (**)
Bug29256: Clarified that it is an error for the top-level package to contain abstract components, whether or not the components are referenced. (*)
Bug29340: Streamability rules for XPath expressions now include the XPath 3.1 production number as well as the XPath 3.0 production number.
Bug29342: The streamability rules for XPath 3.1 arrow expressions did not cover dynamic function calls.
Bug29351: An error code has been allocated for the type error that occurs when
xsl:evaluate/@with-params
is not a map, or is a map of the wrong type. (*)
Bug29392: Defined how support for the serialize
FO30 function
relates to the optional serialization feature. (*)
Bug29425: The syntax summary now marks the xsl:result-document
attributes
method
and json-node-output-method
as attribute value templates, bringing it into
line with the prose.
Bug29431: The rules for returning the principal and secondary results of a transformation,
and in particular the interaction of build-tree
and item-separator
, have
been clarified. (*)
Bug29436: The list of instructions in 5.7 that return the results of a contained sequence constructor without alteration has been corrected and made non-normative.
Bug29441: The term extension function has been more carefully defined.
Bug29442: Part of the text on evaluating sequence constructors has been rewritten to improve clarity.
Bug29445: The summary of the rules for selecting a separator in 5.7.2 Constructing Simple Content has been made more complete.
Bug29449: The section on streamability of dynamic function calls now provides non-normative advice on the use of this construct in conjunction with maps and arrays.
Bug29453: An xsl:use-package
declaration may appear in an
included stylesheet module but not in an imported stylesheet module. (**)
Bug29455: Added to the list of items that are considered empty (now vacuous)
by the xsl:on-empty
and xsl:on-non-empty
instructions, for example to include
zero-length strings, and arrays consisting entirely of vacuous items. (**)
Bug29459: Clarified the rules for streamability of arrow expressions. (*)
Bug29460: The introduction to the concept of packages now mentions that an implementation might allow packages to be written in other languages (for example, XQuery).
Bug29461: Clarified how the concept of “static base URI” should be interpreted in situations where the source stylesheet is not available at execution time. (*)
Bug29468: Modified the rules for the default visibility of overriding components. (*)
Bug29473: Removed a misleading suggestion that the default visibility
of overriding components is always private
; this is not the case for
xsl:param
.
Bug29474: There was an incorrect suggestion that xsl:original
could be
used to refer to a declaration overridden using the traditional mechanism of import
precedence.
This has been removed.
Bug29478: In response to usability feedback, xsl:expose
and xsl:accept
now allow the value component="*"
to mean “all kinds of component”. (**)
Bug29480: Defined that the focus for evaluating attribute sets referenced by xsl:copy
is the same as the focus for evaluating the contained sequence constructor (*)
Bug29482: The Working Group decided not to change the streamability rules to make a particular
use case involving xsl:copy
guaranteed-streamable, but instead to add
a note explaining how to rewrite this use case in a streamable way.
Bug29492: Simplified the rules for streamability of attribute sets. Attribute sets can no longer be consuming. (*)
Bug29502: The streamability rules for xsl:fork
were incomplete for the
case where the instruction has an xsl:for-each-group
child. (*)
Bug29507: Clarified that a striding expression such as (/a/b, $doc/a/b)
can deliver
a mix of streamed and unstreamed nodes and that the result is not necessarily in document
order.
Bug29544: Clarified that whitespace stripping does not
apply to the trees returned by functions such as parse-xml
FO30 and
parse-xml-fragment
FO30. (*)
Bug29558: When the namespace used for the XML representation of JSON was
changed to http://www.w3.org/2005/xpath-functions
, one reference to the
old namespace was not updated.
Bug29574: By default a public component in a used package now becomes private
in the using package. This also affects the treatment of abstract components; as part
of this
change, the keyword visibility="absent"
is dropped. (**)
Bug29588: In the xml-to-json
function, map keys are now
compared after normalizing escape sequences to determine whether duplicates exist.
(*)
Bug29602: Changes made to the xml-to-json
in the XPath 3.1 project
have been retrofitted to this document. The changes include the detailed rules for
escaping special
characters, and the adoption of uniform conventions for type-checking and conversion
of parameter options. (**)
Bug29604: Corrected a throwaway remark in the text of an example concerning how to compute multiple aggregate values in a single pass of the input.
Bug29660: The function map:remove
can now remove multiple entries
from a map in a single call. (**)
Bug29665: The xml-to-json
now escapes a solidus (/
becomes \/
),
which is useful when the resulting JSON is embedded in HTML. (**)
Bug29666: Added a note to clarify how the concept of stylesheet levels relates to packages.
Bug29667: Added a note to confirm that it is not intrinsically an error to have two xsl:use-package
declarations that reference the same package.
Bug29669: Introductory material describing the XSLT processing model has been rewritten for clarity.
Bug29675: The rules for determining the context item static type in a global variable
declaration take account of the declared type in the xsl:global-context-item
declaration if available. (*)
Bug29686: Clarified the rules for compatibility of types when overriding functions. (*)
Bug29690: The requirement that a streaming processor should always use streaming if requested is relaxed if for example (a) the input is supplied as a tree in memory, or (b) the processor is able to determine that the input document is too small for streaming to give any benefit.
Bug29692: Clarified how stripping of type annotations and whitespace text nodes works when the rules vary by package. (*)
Bug29696: The global context item is not streamable. (**)
Bug29697: Clarified where calls on current-merge-group
and current-merge-key
can be used when xsl:merge
instructions are nested. (*)
Bug29698: Corrected several mentions of the streamable
attribute of
xsl:merge
; the attribute actually appears on xsl:merge-source
.
Bug29699: Clarified that for the purpose of error XTSE3085
,
only xsl:template
elements with a match
attribute are relevant. (*)
Bug29709: Some xsl:merge
examples used obsolete syntax from an earlier
working draft.
Bug29710: Used more precise terminology in some of the rules defining the streamability of stylesheet functions.
Bug29712: Streamable stylesheet functions declared with streamability absorbing, shallow-descent, or deep-descent now allow the function body to be motionless (previously it had to be consuming). (*)
Bug29716: Defined additional situations where the current template rule is cleared. (*)
Bug29723: The map:merge
function takes a second argument to control
how duplicate keys are handled. (**)
Bug29732: The rules for streamable stylesheet functions have been refined. In most cases the argument must now be a single node rather than a sequence of nodes, and constraints on the variable reference have been rewritten as constraints on the function signature. (**)
Bug29733: An example for an absorbing stylesheet function was correct, but the explanation for why it was correct was misleading.
Bug29738: The vague term “streamable stylesheet” is no longer used.
Bug29743: A new function map:find
is provided to allow recursive searching of nested maps. (**)
Bug29747: The xsl:stream
instruction has been generalized to handle both
streamed and unstreamed processing, and it has accordingly been renamed xsl:source-document
,
and has a streamable
attribute. (**)
Bug29752: Improved an example where accumulators are used to compute a word count, to give a more realistic real-world result.
Bug29763: Added rules concerning the effect of xsl:expose
and xsl:accept
on xsl:param
declarations (which are always public). (*)
Bug29768: The operand usages for the map:for-each
and map:merge
functions have been corrected (affecting the streamability of these functions in the
unusual case where the functions are
called with references to streamed nodes). (*)
Bug29790: The sample stylesheet for the xml-to-json
function has been changed to
avoid using a reserved namespace.
Bug29793: Added a note confirming that the input-type-annotations
attribute has
no effect on an xsl:source-document
instruction when the type
or validation
attributes are present.
Bug29796: A note has been added pointing out that keys only allow searching within a tree that is rooted at a document node.
Bug29802: Clarified the text describing the function of the global context item.
Bug29803: Having been dropped from xsl:global-context-item
, the ability to
control which accumulators are used on the initial match selection has been moved
to xsl:mode
. (**)
Bug29804: The for-each-stream
attribute of xsl:merge-source
has
been generalized to handle both streamed and unstreamed processing, and it has accordingly
been renamed for-each-source
;
streaming of the merge input is controlled using the streamable
attribute. (**)
Bug29805: The use-accumulators
attribute of xsl:source-document
now applies
whether or not the instruction is declared streamable. (**)
Bug29811: Clarified what error code should be used for a particular error involving static variables. (*)
Bug29813: A section has been added explaining how to handle dynamic errors that occur during the evaluation of accumulators. (*)
Bug29814: Clarified that XPath comments can appear (only) in attributes of type expression, pattern, item-type, or sequence-type. (*)
Bug29819: Dropped the use of the term “core functions” in favour of more precise wording.
Bug29827: Clarified the rules defining which modes are eligible to be used as the initial mode when a stylesheet is first invoked. (*)
Bug29853: The result of the collation-key
function is now always xs:base64Binary
,
making the comparison semantics unambiguous and context-independent. (**)
Bug29865: A new parameter maxVariable
is added to UCA collation URIs, to define which
groups of characters (such as whitespace and punctuation) are ignored, or treated
as less significant, when
comparing strings. In addition, interoperable defaults are defined for most of the
collation parameters. (**)
Bug29860, Bug29861, Bug29862, Bug29865: Fixed errors in the
schema for XSLT 3.0 stylesheets resulting from changes logged elsewhere, notable the
renaming of xsl:stream
to xsl:source-document
.
Bug29866: Changed the definition of type EQName
in the
schema for XSLT 3.0 stylesheets to be more restrictive.
Bug29880: Implementations may impose limits on the values used in a package version number, and minimum values for those limits have been defined. (*)
Bug29887: Changed an assertion against xsl:for-each-group
in the
schema for XSLT 3.0 stylesheets to be allow for the possibility of shadow attributes.
(*)
Bug29889: Added an introductory section concerning streaming of non-XML data.
Bug29917: The xml-to-json
function now allows the top-level element of the input to have
a key
attribute (which is ignored), so that it can successfully process any subtree of
the output of
json-to-xml
. (*)
Bug29919: A use-when
attribute on xsl:package
works the same way as
on xsl:stylesheet
and xsl:transform
. (*)
Bug29920: The rules for shadow attributes have been rewritten to avoid using the undefined term target attribute.
Bug29927: Clarified that facilities for disabling xsl:evaluate
are
implementation-defined.
Bug29933: In line with other serialization parameters, the detail of what undeclare-prefixes
does is now delegated to the serialization specification.
Bug29960: Processors are now allowed to provide a mode of operation in which there is no requirement to report static errors in code that is never executed. (*)
Bug29975: Added a non-normative summary of the rules affecting validation of xml:id
attributes.
Bug29978: Rules relating the the permitted children of xsl:stylesheet
apply
also to xsl:package
. (*)
Bug29980: Editorial improvements to the definition of error XTSE0760. (*)
Bug29981: Relaxed the rule requiring the tunnel parameters on an overriding template to be identical to those on the overridden template. (**)
Bug29982: Expanded the note explaining the rationale and use cases for tunnel parameters.
Bug29983: The justification and explanation for the streamability of scanning expression
such as //section/head
has been rewritten for clarity; and the term itself is now defined in terms
of the rules for motionless patterns since the two concepts are very closely aligned. (*)
Bug29988: Clarified that in the xs:QName
values returned by
available-system-properties
, the prefix part of the QName is implementation-dependent.
Bug30002: Rectified the omission of xsl:function/@cache
in the schema for XSLT 3.0.
Bug30032: Refined the static typing rules for axis steps to take account of the axis as well as the node test. (*)
Bug30033: Refined the rules for streamability of the current
function. (*)
Bug30034: Corrected a note concerning the streamability of xsl:choose
to match
the normative rules.
Bug30036: document-node(E)
sequence type tests cause streaming difficulties for
treat as
expressions just as they do for instance of
expressions. (*)
Bug30049: Supplied missing rules regarding the dynamic context for evaluation of XPath expressions
(both static expressions and expressions evaluated using xsl:evaluate
), especially as regards
the named functions available in the dynamic context for function-lookup
FO30. (*)
Bug30056: Corrected the expected output of an example of streamed grouping.
A non-normative Relax NG schema for XSLT 3.0 has been added to H Schemas for XSLT 3.0 Stylesheets.