Setting up the query language environment became more elaborate with new functionality introduced with XSLT 2.0 and later 3.0. The 2016 specification addressed this new functionality by allowing the xsl:function declaration as an additional top-level element and by restricting the use of the new fn:error() function. Following the elimination of the result tree fragment data-type in favor of temporary trees it also made the value attribute of the sch:let expression optional, allowing temporary trees as value.

The 2020 specification did not add anything in support of XSLT 3.0.