English 中文(简体)
XML架构中简单类型字符串的不区分大小写枚举
原标题:
  • 时间:2008-12-11 13:37:32
  •  标签:

我需要在我的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”,“ON”或“oN”,它将无法通过验证。

我想列举“开”、“关”的情况,并允许输入大小写不敏感的版本。

最佳回答

IBM developerWorks有一篇关于如何使用XSLT以自动化的方式执行全套枚举备选项构建的文章。这被作为解决大小写不敏感枚举的方法。

问题回答

如果您想在保持不区分大小写的验证的同时,在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 在构建其智能感知数据时仅处理联合中的第一个简单类型的事实。然而,在验证文档时,它处理了两种类型,这意味着即使“On”不在枚举值列表中,它仍被确定为有效。

嗯,你可以将所有排列列为模式 :)





相关问题
热门标签