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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top