Hello, 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 |