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.