-------- Original Message
--------
Subject: [ebxml-dev] Possible error in ebXML MSG 2.0 xsd schema?
From: "Johannes Gustafsson" <johannes@inexchange.se>
Date: Wed, October 01, 2008 10:52 am
To: <ebxml-dev@lists.ebxml.org>
I am trying to validate incoming
soap-envelopes using .NET to see if they conform to this schema:
http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-2_0.xsd
However, I get errors when trying to load
the schema. I use this code to load and compile the schema (in C#):
XmlSchemaSet
schemaSet = new XmlSchemaSet();
XmlReaderSettings settings = new XmlReaderSettings();
settings.ProhibitDtd = false;
schemaSet.Add(@"http://www.w3.org/2000/09/xmldsig#",
XmlReader.Create(@"http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd",
settings));
schemaSet.Add(@"http://www.w3.org/XML/1998/namespace",
XmlReader.Create(@"http://www.w3.org/2001/03/xml.xsd",
settings));
schemaSet.Add(@"http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-2_0.xsd",
@"http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-2_0.xsd");
schemaSet.Compile();
I get this error:
"Wildcard '##other' allows element 'http://www.w3.org/2000/09/xmldsig#:Reference',
and causes the content model to become ambiguous. A content model must be
formed such that during validation of an element information item sequence, the
particle contained directly, indirectly or implicitly therein with which to
attempt to validate each item in the sequence in turn can be uniquely
determined without examining the content or attributes of that item, and
without any information about the items in the remainder of the sequence."
To rule out a bug I .NET I also tried using
Altova:s xml parser (http://www.altova.com/altovaxml.html)
with the same result.
The problem lies in line 129 in
msg-header-2_0.xsd:
<!-- ACKNOWLEDGMENT, for use in soap:Header element -->
<element name="Acknowledgment">
<complexType>
<sequence>
<element ref="tns:Timestamp"/>
<element ref="tns:RefToMessageId"/>
<element ref="tns:From" minOccurs="0"/>
<element ref="ds:Reference" minOccurs="0"
maxOccurs="unbounded"/>
>>>>>>>
<any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attributeGroup ref="tns:headerExtension.grp"/>
<attribute ref="soap:actor"/>
</complexType>
</element>
The <any
namespace="##other"> tag allows any other element with a namespace
other than the target namespace (See http://www.w3.org/TR/xmlschema-0/#ref34).
This should mean that the <element ref="ds:Reference"> is not
needed since the <any> element includes it.
If I remove the <element
ref="ds:Reference"> on line 128 the schema works.
Has anyone else come across this?
Regards,
Johannes