2008-12-11 17 views
13

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.XML Schema Case Insensitive Enumeration of Simple Type String

<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 ningún valor 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 "A", "ON", o "sobre" se producirá un error de verificación.

Quiero la enumeración de "on", "off" y permitir el ingreso de versiones insensibles a mayúsculas y minúsculas.

Respuesta

10

IBM developerWorks tiene an article sobre cómo utilizar XSLT para llevar a cabo la construcción de todo el conjunto de alternativas de enumeración de forma automatizada. Se presenta como una solución a la falta de enumeraciones insensibles a mayúsculas y minúsculas.

0

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

+0

Podría, pero esto no es elegante para valores de enumeración largos como "notificación" y todavía no obtengo mi enumeración. La enumeración es muy importante para mí. :) –

15

Si desea mantener tanto la validación de mayúsculas y minúsculas, mientras que sigue recibiendo Intellisense en Visual Studio 2010, puede utilizar 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 solamente procesa el primer tipo simple en una unión cuando construye 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.