XML模式案例简单类型字符串的不敏感枚举

时间:2008-12-11 13:37:32

标签: xml schema simpletype case-sensitive

我需要在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”,“off”并允许输入不区分大小写的版本。

3 个答案:

答案 0 :(得分:16)

如果您希望保持不区分大小写的验证,同时仍在Visual Studio 2010中获取Intellisense,则可以使用union:

<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在构建Intellisense数据时仅处理union中第一个简单类型的事实。但是,当它验证文档时,它会同时处理两个文件,这意味着“On”仍然被确定为有效,即使它不在枚举值列表中。

答案 1 :(得分:10)

IBM developerWorks有an article关于如何使用XSLT以自动方式执行全套枚举备选方案的构建。它是针对缺少不区分大小写的枚举的一种解决方法。

答案 2 :(得分:1)

好吧,您可以将所有排列列为模式:)