Subject:Type restrictions involving element substitution groups - validator inconsistencies Author:Simon Cox Date:29 Sep 2004 10:49 AM Originally Posted: 29 Sep 2004 10:32 AM
Derivation-by-restriction is an area of great inconsistency between XML Schema validation engines.
Attached are a set of example schemas and matching instance documents that attempt to establish substitution-group chains.
Elements down the chain have a content model derived by restriction from a parent type,
in which the specific restriction is to select one member of a substitution group whose head is the content of the parent type.
I find the following inconsistent validator behaviour
1. Stylus Studio's built-in validator doesn't like any of them
2. XSV and .NET find all of them OK
3. Xerces-J thinks rT1.xml is OK, but rejects rT2.xml and rT3.xml on similar grounds
"There is not a complete functional mapping between the particles.
The particle of the type is not a valid restriction of the particle of the base."
In the restrictionTest2.xsd case the issue appears to concern an inconsisent interpretation of xs:anyType and derivations therefrom.
In the restrictionTest3.xsd case the issue concerns the position of maxOccurs attributes (compare with restrictionTest1.xsd which passes).
This all may seem arcane, but these patterns are representative of a specific mapping used to convert UML models to XML in a major project that is on its way to ISO status.
If anyone has any insights, they would be gratefully received.
Speaking of the built-in validator (that is Xerces-C++ 2.5), it seems
to me that it doesn't perform one of the steps of the validation by
restriction, the one that should replace any element with a choice
between the components of the substitution group. I am opening a bug
on the Xerces-C++ bug tracker to let them know of this limitation.