# Changes to Saxon Extensions

The EXSLT function `set:distinct()` is withdrawn. (It contained a bug that was non-trivial to fix, and the functionality is superseded by the `distinct-values()` function and by XSLT's `xsl:for-each-group`).

The Saxon extension function `saxon:distinct()` is withdrawn for the same reason.

A new function `saxon:evaluate-node()` is introduced. This is a variant of `saxon:evaluate()`, designed specifically for evaluating an XPath expression contained within a node of an XML document. It differs from `saxon:evaluate()` in that the static context (in particular, the namespace context) is taken from the node in the source document containing the expression, rather than from the stylesheet. The expression has access to standard functions and vendor extension functions, but not to user-defined functions or variables. The context node for evaluating the expression is also the node containing the expression, so the expression can act as a reference or pointer to other nodes in the document.

The extension function `saxon:line-number()` now takes an optional argument identifying the node whose line number is required. If the argument is omitted, then it applies to the context node, as before.

The XSLT extension instruction `saxon:assign` now works only with global variables.

Next