xml schema simpletype case-sensitive

Enumeración insensible a mayúsculas y minúsculas de tipo simple de XML Schema



simpletype case-sensitive (3)

Bueno, podrías enumerar todas las permutaciones como patrones :)

Necesito un tipo de enumeración de cadenas insensible a mayúsculas y minúsculas en mi archivo de esquema XML (.xsd). Puedo hacer caso insensible haciendo lo siguiente.

<xs:simpleType name="setDigitalPointType"> <xs:restriction base="xs:string"> <xs:pattern value="[Oo][Nn]" /> <xs:pattern value="[Oo][Ff][Ff]" /> </xs:restriction> </xs:simpleType>

El único problema es que no obtengo valores de enumeración. No obtendré la buena intellesense cuando uso Visual Studio para escribir mi XML. Lo siguiente me dará enumeraciones pero es sensible a mayúsculas y minúsculas.

<xs:simpleType name="setDigitalPointType"> <xs:restriction base="xs:string"> <xs:enumeration value="on" /> <xs:enumeration value="off" /> </xs:restriction> </xs:simpleType>

Esto me dará mis enumeraciones, pero si alguna vez recibo un valor de "Encendido", "Encendido" o "En" fallará la verificación.

Quiero enumerar "on", "off" y permitir el ingreso de versiones insensibles a mayúsculas y minúsculas.


IBM developerWorks tiene un artículo sobre cómo usar XSLT para realizar la construcción del conjunto completo de alternativas de enumeración de manera automatizada. Se presenta como una solución a la falta de enumeraciones insensibles a mayúsculas y minúsculas.


Si desea mantener la validación insensible a las mayúsculas y minúsculas mientras obtiene Intellisense en Visual Studio 2010, puede usar una unión:

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

Esto funciona porque explota el hecho de que Visual Studio 2010 solo procesa el primer tipo simple en una unión cuando crea sus datos Intellisense. Sin embargo, cuando valida un documento, procesa ambos, lo que significa que todavía se determina que "Activado" es válido aunque no esté en la lista de valores de enumeración.