I am in need of a case insensitive string enumeration type in my XML schema (.xsd) file. I can get case insensitive by doing the following.
<xs:simpleType name="setDigitalPointType">
<xs:restriction base="xs:string">
<xs:pattern value="[Oo][Nn]" />
<xs:pattern value="[Oo][Ff][Ff]" />
</xs:restriction>
</xs:simpleType>
The only problem is that I get no enumeration values. I will not get the nice intellesense when using Visual Studio to write my XML. The following will give me enumerations but it is case sensitive.
<xs:simpleType name="setDigitalPointType">
<xs:restriction base="xs:string">
<xs:enumeration value="on" />
<xs:enumeration value="off" />
</xs:restriction>
</xs:simpleType>
This will give me my enumerations but if I ever receive a value of "On", "ON", or "oN" it will fail verification.
I want enumeration of "on", "off" and allow entry of case insensitive versions.
Or XML is widely accepted as case-sensitive? Yes, it is.
XML tags are case sensitive. All XML elements must be properly nested. All XML documents must have a root element.
Enumerations are a base simple type in the XSD specification containing a list of possible values. Single-valued enumerations are shown as restrictions of the base simple type xs:token , as illustrated below: ? < xs:simpleType name=”GraduationPlanTypeMapType”>
Values defined explicitly by the DTD are case-insensitive.
If you want to both keep the case-insensitive validation, while still getting Intellisense in Visual Studio 2010, you can use a union:
<xs:simpleType name="setDigitalPointType">
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="on" />
<xs:enumeration value="off" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[Oo][Nn]" />
<xs:pattern value="[Oo][Ff][Ff]" />
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
This works because it exploits the fact that Visual Studio 2010 only processes the first simple type in a union when it builds it's Intellisense data. However when it validates a document, it processes both, which means "On" is still determined to be valid even though it isn't in the list of enumeration values.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With