我需要在我的XML模式(.xsd)文件中不区分大小写字符串枚举类型。我可以通过执行以下操作获得不区分大小写。

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

唯一的问题是,我没有得到任何枚举值。使用Visual Studio来写我的XML时,我不会得到漂亮的intellesense。下面会给我枚举,但它是区分大小写。

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

这会给我我的枚举,但如果我收到的“开”的值,“ON”或“ON”,将无法通过验证。

我想要的“接通”枚举,“关”,并允许不区分大小写的版本条目。

有帮助吗?

解决方案

developerWorks中国具有关于如何使用XSLT的文章以自动方式进行的全套枚举替代品的建设。它是作为一种解决方法缺少不区分大小写的枚举。

其他提示

如果您既想保持不区分大小写的验证,同时仍然在Visual Studio 2010中得到智能感知,你可以使用一个联盟:

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

这工作,因为它利用了一个事实,即当它建立它的智能感知数据的Visual Studio 2010只处理一个工会第一个简单的类型。然而,当它验证的文档时,它处理二者,这意味着“开”时仍然确定为,即使它是不是在枚举值的列表中有效。

好了,你可以只列出所有的排列为图案:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top