How to ignore the validation of Unknown tags? How to ignore the validation of Unknown tags? xml xml

How to ignore the validation of Unknown tags?


In case your not already done with this, you might try the following:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">  <xs:element name="root" type="root"></xs:element>  <xs:complexType name="root">    <xs:sequence>      <xs:any maxOccurs="2" minOccurs="0" processContents="skip"/>      <xs:element name="node" type="xs:string"/>      <xs:any maxOccurs="2" minOccurs="0" processContents="skip"/>    </xs:sequence>  </xs:complexType></xs:schema>

Under Linux this works fine with xmllint using libxml version 20706.


Conclusion:

This is not possible with XSD. All the approaches I was trying to achieve the requirement were named as "ambiguous" by validation-tools, accompanying bunch of errors.


You could make use of a new feature in XML 1.1 called "Open Content". In short, it allows you to specify that additional "unknown" elements can be added to a complex type in various positions, and what the parser should do if it hit any of those elements.

Using XML 1.1, your complex type would become:

<xs:element name="root" type="root" /><xs:complexType name="root">   <xs:openContent mode="interleave">    <xs:any namespace="##any" processContents="skip"/>  </xs:openContent>  <xs:sequence>     <xs:element name="node" type="xs:string"/>   </xs:sequence> </xs:complexType>

If you have a lot of complex types, you can also set a "default" open content mode at the top of your schema:

<xs:schema ...>  <xs:defaultOpenContent mode="interleave">    <xs:any namespace="##any" processContents="skip"/>  </xs:defaultOpenContent>  ...</xs:schema>

The W3C spec for Open Content can be found at http://www.w3.org/TR/xmlschema11-1/#oc, and there's a good writeup of this at http://www.ibm.com/developerworks/library/x-xml11pt3/#N102BA.

Unfortunately, .NET doesn't support XML 1.1 as of yet I can't find any free XML 1.1 processors - but a couple of paid-for options are: