# Changes to Schema-Aware XSLT and XQuery Processing

By default the schema-aware processor now uses validation=preserve rather than validation=strip for input documents. This is more efficient, and it gives results that are more consistent with the basic processor.

When validation is requested at the document level, there is now a check that the document contains a single top-level element, and no top-level text nodes. This check had previously been omitted.

In XSLT, document-level validation is now supported using the `type` attribute of the `xsl:document`, `xsl:result-document`, `xsl:copy-of`, and `xsl:copy` instructions.

The distinction between `xdt:untyped` and `xs:anyType` is now implemented.

Elements of type `xs:ID` (as well as attributes of type xs:ID) are now accessible using the `id()` function.

Subtypes derived from `xs:ID` are now recognized when deciding which elements and attributes have the `is-ID` property (and therefore qualify for retrieval using the `id()` function).

In line with changes agreed by the Working Groups, it is now an error to apply validation directly to an attribute node if the attribute type is namespace-sensitive (for example, xs:QName or xs:NOTATION). It's not possible to do such validation before the attribute is attached to a parent element as the namespace context is unknown. This only affects XSLT, since XQuery doesn't allow validation at the level of individual attributes anyway.

Next