2008-12-11 15 views
13

J'ai besoin d'un type d'énumération de chaînes insensible à la casse dans mon fichier de schéma XML (.xsd). Je peux être insensible à la casse en faisant ce qui suit.Enumération insensible à la casse du schéma XML de la chaîne de type simple

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

Le seul problème est que je n'ai pas de valeurs d'énumération. Je n'obtiendrai pas le bon intellesense en utilisant Visual Studio pour écrire mon XML. Ce qui suit me donnera des énumérations mais il est sensible à la casse.

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

Cela me donnera mes énumérations mais si je reçois jamais une valeur de « On », « ON », ou « oN », il échouera vérification.

Je veux l'énumération de "on", "off" et permettre l'entrée des versions insensibles à la casse.

Répondre

10

IBM developerWorks a an article sur la façon d'utiliser XSLT pour réaliser la construction de l'ensemble des alternatives d'énumération de façon automatisée. Il est présenté comme une solution au manque d'énumérations insensibles à la casse.

0

Eh bien, vous pouvez simplement énumérer toutes les permutations comme modèles :)

+0

Je pourrais mais ce n'est pas élégant pour de longues valeurs d'énumération comme "notification" et je ne reçois toujours pas mon énumération. L'énumération est très importante pour moi. :) –

15

Si vous voulez à la fois garder la validation insensible à la casse, tout en obtenant IntelliSense dans Visual Studio 2010, vous pouvez utiliser un syndicat:

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

Cela fonctionne parce qu'il exploite le fait que Visual Studio 2010 seulement traite le premier type simple dans une union lorsqu'il construit ses données Intellisense. Toutefois, lorsqu'il valide un document, il traite les deux, ce qui signifie que «On» est toujours considéré comme valide même s'il ne figure pas dans la liste des valeurs d'énumération.