XML Schema 1.1 changes
The xs:override
declaration is implemented. Pending resolution of specification bug 9661, a declaration that appears within
xs:override
and does not override anything in the overridden schema is included in the schema; the other possible interpretation
of the specification is that it should be ignored. Restrictions: circular xs:override
chains are not allowed, and
there has been no testing of the interaction of xs:override
with xs:redefine
.
Saxon recognizes the attribute saxon:extensions
on the xs:schema
element: the value is a space-separated
list of strings giving the names of extensions that are enabled in this schema document. If the extension id-xpath-syntax
is enabled, then the XPath syntax permitted in the xs:selector
and xs:field
elements of uniqueness, key
and keyref constraints is extended to allow any streaming pattern. For example, this allows the use of attribute-based predicates, such as
xpath="employee[@location='us']"
The new primitive type xs:precisionDecimal
is implemented - at least, to the extent required for schema validation.
It is not recommended yet to use this type in documents subject to query and transformation, or to use it for free-standing atomic values,
since (a) there is no specification for how operations such as arithmetic and comparison should behave in XPath, (b) there are gaps
in the implementation in this area, (c) very limited testing has been done, and (d) the type could yet be dropped (it is marked as
a "feature at risk", and there is some political objection to it).
Inheritable attributes are implemented (for use in Conditional Type Assignment only: the only effect of declaring an attribute to be inheritable is that
it can be referenced in the XPath condition of the xs:alternative
element).
An element may now have more than one ID attribute. Several ID attributes or children of an element may have the same value. ID and IDREF values appearing within a list, or as a member type of a union, are now recognized. (Most of these changes have been applied also to XSD 1.0, with the exception that multiple ID attributes are not allowed on an element. Saxon 9.2 and earlier releases correctly allowed an element to have more than one ID-valued child element, but incorrectly reported an error if more than one ID-valued child of the same parent element had the same ID value. The rules for list types and union types with an ID or IDREF member are unclear in XSD 1.0, so for simplicity, the XSD 1.1 rules have been implemented unconditionally.
It is now an error for the outermost element of the document (the validation root) to be of type xs:ID
. (The rules in the
W3C spec have always implied this, though many cases in the W3C test suite consider this to be valid. The Working Group has confirmed
in its decision on bug #9922 that this is intended to be invalid.)
In element wildcards, notQName="##definedSibling"
is implemented.
An xs:all
group may now contain an xs:group
element to refer to a named model group declaration, provided the
named model group definition in turn contains an xs:all
group, and that minOccurs
= maxOccurs
= 1
.
The way that xs:anyURI
values are checked (to see if they are valid URIs) has changed. In accordance with the W3C
specifications, there is now no checking at all when XSD 1.1 is selected at the Configuration
level -
any string may be used. When 1.0
is selected, strings are checked to be valid URIs (as defined by the java.net.URI
class) only when performing schema validation, or
explicit casting from string to xs:anyURI
. There is no longer any check performed by methods such as namespace-uri()
or namespace-uri-from-QName
, regardless whether XSD 1.0 or XSD 1.1 is selected in the Configuration. It is also possible
to configure the checking that is performed to use a user-supplied URIChecker
, for example one that performs stricter or
more liberal checking.