Subject:keyref handling by different parsers Author:David Banbury Date:24 Jan 2008 10:27 PM
We are using XSD to define a data file format. We have a schema with a hierarchy that groups data elements together under "subsets" so we have a 3-level hierarchy: superset -> subsets -> elements
We are using key & keyref to define relationships between elements within subsets but also between elements in different subsets. The keys for each element are defined within the subset (for tidy encapsulation). Keyref relationships between elements in the same subset are also encapsulated within that subset.
Relationships between elements in different subsets are defined by keyrefs at the superset level.
(A simplified XSD and corresponding minimal XML file are attached.)
As far as I can gather this does not break the identity constraint rule that "only element information items within the sub-tree rooted at the element information item being validated can be referenced" (XML Schema Specs 3.11.4).
In Stylus Studio the default parser returns an error for this structure saying, "The key for identity constraint of element 'superset' is not found." The available Microsoft parsers (MSXML DOM Parser and SAX Parser (v4.0 & v6.0) and .NET XML Parser) also return errors such as, "cannot find the referred key or unique in scope" or, "The keyref... does not resolve to a key for the Identity Constraint...".
However, other parsers (Java built-in parser, Saxonica 8.9.0.3, XSV 2.10-1) all validate the XML file successfully and correctly. Not only do they not return errors but they also do correctly spot errors if the keyref relationship is not satisfied in the XML data file.
Is the XSD valid and the Microsoft parsers at fault? Or, is the XSD at fault and the other parsers are simply tolerant?