XSLT 3.0 implementation
The type-available() function now allows the argument to be an EQName in the format "Q{uri}local".
A call on system-property('xsl:version') now returns "2.0" or "3.0" depending on whether XSLT 3.0 has been enabled.
The xsl:analyze-string instruction allows the regular expression to be one that matches a zero-length string.
The XSLT 3.0 pattern syntax
      is fully implemented. Support for the syntax ~typename, which was present in
      earlier versions of the specification, has been discontinued.
Accumulators have been changed to use the syntax in the latest working draft (functions accumulator-before() and accumulator-after() with a first argument giving the accumulator name, rather than functions with user-defined names.)
The attribute applies-to on xsl:accumulator is implemented.
The version number 2.1 is no longer recognized as a synonym for 3.0.
The xsl:function attributes
        cache and identity-sensitive are accepted. Setting
        cache="full" or cache="partial" and
        identity-sensitive="no" has the same effect as setting
        saxon:memo-function=yes; it causes the function to be implemented as a memo
      function, remembering the results of all previous calls.
The select attribute of xsl:break and xsl:on-completion is implemented.
With a non-schema-aware processor at version="3.0", the attributes
        validation="preserve" and validation="lax" are now treated as
        validation="strip", rather than being rejected as in 2.0.
Full support for the use of the Unicode Collation Algorithm is provided in Saxon-PE/EE, with fallback behaviour in Saxon-HE.
Conversion between JSON and XML using the json-to-xml() function is supported as per the specification in Saxon-PE/EE.
Support for the bind-group and bind-grouping-key attributes in xsl:for-each-group is dropped,
      and the semantics of current-group() and current-grouping-key() change reflecting the latest XSLT 3.0 specification.
The xsl:merge syntax has been updated
      to the latest spec (bug 24150, post-last-call change). The
        xsl:merge-source/@for-each attribute is renamed for-each-item, and
      calls to current-group() and current-grouping-key() are replaced by
        current-merge-group()
      and current-merge-key()
      respectively. The for-each-stream attribute is implemented, with the capability
      to validate input documents, and the single-argument form of
        current-merge-group() is available, allowing selection of merged items
      according to which input source they came from. Streamed merging is not yet implemented.
The typed attribute on xsl:mode is partially implemented. Currently with typed="strict" or
        typed="lax", only simple name patterns are converted to the
        schema-element(N) form.
Maps no longer have a collation property (the feature was dropped from the
      spec); instead there is now a collation-key() function, which has been implemented.
The function library for maps is updated to
      reflect the current specification. The functions map:merge(),
        map:put(), and map:for-each-entry() are implemented. The function
        map:new(), which has been removed from the specification, is retained in Saxon
      for the time being.
Shadow attributes (also known as static AVTs) are implemented. This facility allows any
      attribute of an XSLT element to be computed during preprocessing by means of a static
      expression: for example, to include a module whose URI is computed from static parameters, you
      can write <xsl:include _href="lib{$V}.xsl"/>. Note the leading underscore on
      the attribute name to indicate that this is a shadow attribute. The feature applies to all
      no-namespace attributes of elements in the XSLT namespace.