Saxon extensions to the W3C XSD specification

The saxon:flags attribute of the xs:pattern facet was implemented in Saxon 9.9 but not documented or tested; it has now been made official. It allows flags for regular expression matching to be specified, following the rules for XPath functions such as matches().

A new attribute xs:list/@saxon:separator is available for list types. The attribute holds a regular expression that is used to tokenize the supplied value, according to the rules of the XPath tokenize() function. For example with <xs:list saxon:separator=","/>, a list of integers in an attribute can now be comma-separated rather than space-separated.

A new constraining facet saxon:distinct is available for list types; if present (with the value "true"), the list must not contain duplicate values. If a list type has this property, then any types derived by retriction must also have the property.

A new constraining facet saxon:order is available for list types. The value may be ascending or descending. If present, the items in the list must be in ascending or descending order (which implies that they must all be comparable). If a list type has this property, then any types derived by retriction must have the same property.

A new attribute xs:unique/xs:field/@saxon:order="ascending|descending" is available for use with uniqueness constraints. If the attribute is present on any field of a uniqueness constraint, it indicates that the fields participating in the constraint must not only have unique values, they must also be correctly ordered. If the attribute is present on at least one field of a uniqueness constraint, then it defaults to saxon:order="ascending" on any fields where it is not specified. Not only does this provide another kind of integrity constraint that is quite hard to express using assertions, it also provides much more efficient checking of uniqueness constraints in the case where it is known that the data is correctly sorted. This validation check can be usefully applied to a document that is to form the input of the xsl:merge instruction in XSLT 3.0.