XML Schema Caso Insensitive enumeração de simples tipo de Cordas
-
21-08-2019 - |
Pergunta
Eu estou precisando de um caso insensível tipo string enumeração no meu esquema XML file (.xsd). Posso obter maiúsculas e minúsculas, fazendo o seguinte.
<xs:simpleType name="setDigitalPointType">
<xs:restriction base="xs:string">
<xs:pattern value="[Oo][Nn]" />
<xs:pattern value="[Oo][Ff][Ff]" />
</xs:restriction>
</xs:simpleType>
O único problema é que eu não obter valores de enumeração. Eu não vai ter o bom intellesense quando usando o Visual Studio para escrever meu XML. A seguir irá me dar enumerações, mas é sensível a maiúsculas.
<xs:simpleType name="setDigitalPointType">
<xs:restriction base="xs:string">
<xs:enumeration value="on" />
<xs:enumeration value="off" />
</xs:restriction>
</xs:simpleType>
Isso vai me dar meus enumerações mas se eu nunca receber um valor de "On", "ON", ou "sobre" ele irá falhar a verificação.
Eu quero enumeração de "on", "off" e permitir a entrada de versões insensíveis caso.
Solução
IBM developerWorks tem um artigo sobre como usar XSLT para executar a construção do conjunto completo de alternativas de enumeração de forma automatizada. É apresentado como uma solução para a falta de enumerações insensíveis ao caso.
Outras dicas
Se você quer tanto manter a validação de maiúsculas e minúsculas, e ainda obter Intellisense no Visual Studio 2010, você pode usar uma união:
<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>
Isso funciona porque explora o fato de que Visual Studio 2010 processa apenas o primeiro tipo simples em uma união quando se constrói de dados IntelliSense. No entanto, quando ele valida um documento, ele processa tanto, que significa "On" ainda está determinado a ser válido mesmo que ele não está na lista de valores de enumeração.
Bem, você poderia simplesmente listar todas as permutações como padrões:)