The Pattern constraint failed
A value does not match the regular expression its type requires.
The 'code' element is invalid - The value 'ab-12' is invalid according to its datatype 'Code' - The Pattern constraint failed.
Why it happens
- The wrong letter case, length or separator for a code.
- Leading or trailing spaces, which the pattern has to match too.
How to fix it
Look the type up in the schema and compare the value with its xs:pattern; the pattern has to match the whole value.
.NET throws an XmlSchemaValidationException at the first schema error unless XmlReaderSettings.ValidationEventHandler is set, which then receives every one with its line and position. A well-formedness error is an XmlException and ends reading whatever the settings.
The same problem in xmlvalid
xmlvalid validates with libxml2, which reports it as [facet 'pattern'] The value is not accepted by the pattern. It checks the whole document in your browser and lists every schema error with its line and column, not only the first.
Element 'code': [facet 'pattern'] The value 'ab-12' is not accepted by the pattern '[A-Z]{3}-[0-9]{4}'.
Example
Validated against order.xsd, below.
<order currency="EUR">
<id>A-1</id>
<qty>1</qty>
<code>ab-12</code>
</order>
<order currency="EUR">
<id>A-1</id>
<qty>1</qty>
<code>ABC-0012</code>
</order>
order.xsd
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="order">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:string"/>
<xs:element name="qty" type="xs:int"/>
<xs:element name="status" type="Status" minOccurs="0"/>
<xs:element name="code" type="Code" minOccurs="0"/>
<xs:element name="note" type="Short" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="currency" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="Status">
<xs:restriction base="xs:string">
<xs:enumeration value="open"/>
<xs:enumeration value="paid"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Code">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]{3}-[0-9]{4}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Short">
<xs:restriction base="xs:string">
<xs:maxLength value="10"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>