# XSLT 3.0 changes

(Also affects XSLT 2.0): Saxon no longer detects or reports the recoverable error XTRE0270 (conflicting definitions of `xsl:strip-space` and `xsl:preserve-space`). Instead it always takes the optional recovery action, which is to use whichever declaration comes last. Previously this was the behaviour when applying stripping to an existing tree, but not when using a stripping filter during tree construction. The change is made in the interests of simplifying and speeding up the code (matching of whitespace stripping rules no longer shares the same code as template rule matching).

(Also affects XSLT 2.0): The call `system-property("xsl:is-schema-aware")` now returns true or false depending on whether the particular stylesheet is schema-aware (which is true if it uses `xsl:import-schema` or if schema-awareness was selected via an API or command line option). Previously it returned true if the stylesheet was processed using the schema-aware version of the Saxon product, regardless of configuration settings.

XSLT 3.0 features are available only in Saxon-EE or (in some cases) Saxon-PE, and they need to be enabled explicitly. From the command line this can be done using the option `xsltversion:3.0`; the default is to take the version from the `xsl:stylesheet` element, so that XSLT 3.0 features are enabled if and only if the stylesheet itself specifies `version="3.0"`.

XPath 3.0 constructs such as higher-order functions (to the extent they are implemented) are automatically available when XSLT 3.0 is enabled.

The `xsl:evaluate` instruction is implemented.

The `xsl:copy` instruction now has an optional `select` attribute, defaulting to `select="."`.

The `saxon:iterate`, `saxon:break`, `saxon:continue`, and `saxon:finally` instructions are renamed `xsl:iterate`, `xsl:break`, `xsl:next-iteration`, and `xsl:on-completion`, and are available only if XSLT 3.0 support is enabled. The `xsl:break` instruction is now allowed to take a sequence constructor as its content.

The `saxon:try` and `saxon:catch` elements are renamed `xsl:try` and `xsl:catch`, and are available only if XSLT 3.0 support is enabled.

The syntax of match patterns has been extended, to include the forms `$x`, `$x//a/b/c`, `doc(X)`, `doc(X)//a/b/c`, `element-with-id(X)`, `element-with-id(X)//a/b/c`, as well as the two-argument form of `id()` and the three-argument form of `key()`. The keyword `"union"` is allowed as an alternative to the `"|"` operator.

Not yet implemented in patterns: `intersect` and `except` operators, parentheses, "~" syntax, patterns matching atomic values or function items, descendant and descendant-or-self axes, namespace-node()

The `unparsed-text-lines()` function is implemented.

The `copy-of()` and `snapshot()` functions are implemented. (There is a restriction in `snapshot()`, in that it does not yet handle attribute or namespace nodes.

The `xsl:analyze-string` instruction accepts the enhancements to regular expressions and flags defined in XPath 3.0. It also now accepts an empty sequence as the value of the `select` attribute, treating it in the same way as a zero-length string.

Next