K Changes since the Candidate Recommendation of 19 November 2015 (Non-Normative)

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.

  1. 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. (**)

  2. Bug29256: Clarified that it is an error for the top-level package to contain abstract components, whether or not the components are referenced. (*)

  3. Bug29340: Streamability rules for XPath expressions now include the XPath 3.1 production number as well as the XPath 3.0 production number.

  4. Bug29342: The streamability rules for XPath 3.1 arrow expressions did not cover dynamic function calls.

  5. 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. (*)

  6. Bug29392: Defined how support for the serializeFO30 function relates to the optional serialization feature. (*)

  7. 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.

  8. 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. (*)

  9. 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.

  10. Bug29441: The term extension function has been more carefully defined.

  11. Bug29442: Part of the text on evaluating sequence constructors has been rewritten to improve clarity.

  12. Bug29445: The summary of the rules for selecting a separator in 5.7.2 Constructing Simple Content has been made more complete.

  13. 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.

  14. Bug29453: An xsl:use-package declaration may appear in an included stylesheet module but not in an imported stylesheet module. (**)

  15. 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. (**)

  16. Bug29459: Clarified the rules for streamability of arrow expressions. (*)

  17. 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).

  18. Bug29461: Clarified how the concept of “static base URI” should be interpreted in situations where the source stylesheet is not available at execution time. (*)

  19. Bug29468: Modified the rules for the default visibility of overriding components. (*)

  20. Bug29473: Removed a misleading suggestion that the default visibility of overriding components is always private; this is not the case for xsl:param.

  21. 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.

  22. Bug29478: In response to usability feedback, xsl:expose and xsl:accept now allow the value component="*" to mean “all kinds of component”. (**)

  23. 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 (*)

  24. 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.

  25. Bug29492: Simplified the rules for streamability of attribute sets. Attribute sets can no longer be consuming. (*)

  26. Bug29502: The streamability rules for xsl:fork were incomplete for the case where the instruction has an xsl:for-each-group child. (*)

  27. 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.

  28. Bug29544: Clarified that whitespace stripping does not apply to the trees returned by functions such as parse-xmlFO30 and parse-xml-fragmentFO30. (*)

  29. 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.

  30. 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. (**)

  31. Bug29588: In the xml-to-json function, map keys are now compared after normalizing escape sequences to determine whether duplicates exist. (*)

  32. 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. (**)

  33. 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.

  34. Bug29660: The function map:remove can now remove multiple entries from a map in a single call. (**)

  35. Bug29665: The xml-to-json now escapes a solidus (/ becomes \/), which is useful when the resulting JSON is embedded in HTML. (**)

  36. Bug29666: Added a note to clarify how the concept of stylesheet levels relates to packages.

  37. 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.

  38. Bug29669: Introductory material describing the XSLT processing model has been rewritten for clarity.

  39. 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. (*)

  40. Bug29686: Clarified the rules for compatibility of types when overriding functions. (*)

  41. 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.

  42. Bug29692: Clarified how stripping of type annotations and whitespace text nodes works when the rules vary by package. (*)

  43. Bug29696: The global context item is not streamable. (**)

  44. Bug29697: Clarified where calls on current-merge-group and current-merge-key can be used when xsl:merge instructions are nested. (*)

  45. Bug29698: Corrected several mentions of the streamable attribute of xsl:merge; the attribute actually appears on xsl:merge-source.

  46. Bug29699: Clarified that for the purpose of error XTSE3085, only xsl:template elements with a match attribute are relevant. (*)

  47. Bug29709: Some xsl:merge examples used obsolete syntax from an earlier working draft.

  48. Bug29710: Used more precise terminology in some of the rules defining the streamability of stylesheet functions.

  49. 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). (*)

  50. Bug29716: Defined additional situations where the current template rule is cleared. (*)

  51. Bug29723: The map:merge function takes a second argument to control how duplicate keys are handled. (**)

  52. 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. (**)

  53. Bug29733: An example for an absorbing stylesheet function was correct, but the explanation for why it was correct was misleading.

  54. Bug29738: The vague term “streamable stylesheet” is no longer used.

  55. Bug29743: A new function map:find is provided to allow recursive searching of nested maps. (**)

  56. 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. (**)

  57. Bug29752: Improved an example where accumulators are used to compute a word count, to give a more realistic real-world result.

  58. Bug29763: Added rules concerning the effect of xsl:expose and xsl:accept on xsl:param declarations (which are always public). (*)

  59. 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). (*)

  60. Bug29790: The sample stylesheet for the xml-to-json function has been changed to avoid using a reserved namespace.

  61. 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.

  62. Bug29796: A note has been added pointing out that keys only allow searching within a tree that is rooted at a document node.

  63. Bug29802: Clarified the text describing the function of the global context item.

  64. 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. (**)

  65. 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. (**)

  66. Bug29805: The use-accumulators attribute of xsl:source-document now applies whether or not the instruction is declared streamable. (**)

  67. Bug29811: Clarified what error code should be used for a particular error involving static variables. (*)

  68. Bug29813: A section has been added explaining how to handle dynamic errors that occur during the evaluation of accumulators. (*)

  69. Bug29814: Clarified that XPath comments can appear (only) in attributes of type expression, pattern, item-type, or sequence-type. (*)

  70. Bug29819: Dropped the use of the term “core functions” in favour of more precise wording.

  71. Bug29827: Clarified the rules defining which modes are eligible to be used as the initial mode when a stylesheet is first invoked. (*)

  72. Bug29853: The result of the collation-key function is now always xs:base64Binary, making the comparison semantics unambiguous and context-independent. (**)

  73. 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. (**)

  74. 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.

  75. Bug29866: Changed the definition of type EQName in the schema for XSLT 3.0 stylesheets to be more restrictive.

  76. Bug29880: Implementations may impose limits on the values used in a package version number, and minimum values for those limits have been defined. (*)

  77. 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. (*)

  78. Bug29889: Added an introductory section concerning streaming of non-XML data.

  79. 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. (*)

  80. Bug29919: A use-when attribute on xsl:package works the same way as on xsl:stylesheet and xsl:transform. (*)

  81. Bug29920: The rules for shadow attributes have been rewritten to avoid using the undefined term target attribute.

  82. Bug29927: Clarified that facilities for disabling xsl:evaluate are implementation-defined.

  83. Bug29933: In line with other serialization parameters, the detail of what undeclare-prefixes does is now delegated to the serialization specification.

  84. 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. (*)

  85. Bug29975: Added a non-normative summary of the rules affecting validation of xml:id attributes.

  86. Bug29978: Rules relating the the permitted children of xsl:stylesheet apply also to xsl:package. (*)

  87. Bug29980: Editorial improvements to the definition of error XTSE0760. (*)

  88. Bug29981: Relaxed the rule requiring the tunnel parameters on an overriding template to be identical to those on the overridden template. (**)

  89. Bug29982: Expanded the note explaining the rationale and use cases for tunnel parameters.

  90. 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. (*)

  91. Bug29988: Clarified that in the xs:QName values returned by available-system-properties, the prefix part of the QName is implementation-dependent.

  92. Bug30002: Rectified the omission of xsl:function/@cache in the schema for XSLT 3.0.

  93. Bug30032: Refined the static typing rules for axis steps to take account of the axis as well as the node test. (*)

  94. Bug30033: Refined the rules for streamability of the current function. (*)

  95. Bug30034: Corrected a note concerning the streamability of xsl:choose to match the normative rules.

  96. Bug30036: document-node(E) sequence type tests cause streaming difficulties for treat as expressions just as they do for instance of expressions. (*)

  97. 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-lookupFO30. (*)

  98. 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.