16

我的 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 时,我不会得到很好的智能感知。以下将给我枚举,但它区分大小写。

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

这会给我我的枚举,但如果我收到“开”、“开”或“开”的值,验证将失败。

我想要枚举“on”、“off”并允许输入不区分大小写的版本。

4

3 回答 3

17

如果您既想保持不区分大小写的验证,又想在 Visual Studio 2010 中获得 Intellisense,则可以使用联合:

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

于 2013-03-16T03:51:04.750 回答
11

IBM developerWorks 有一篇关于如何使用 XSLT 以自动化方式构建完整的枚举替代方案的文章。它是作为缺少不区分大小写的枚举的一种解决方法。

于 2008-12-11T19:29:07.957 回答
1

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

于 2008-12-11T13:40:07.473 回答