简单类型字符串的 XML 模式不区分大小写枚举

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

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

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

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

最佳答案

如果您既要保持不区分大小写的验证,又要在 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 数据时只处理联合中的第一个简单类型。但是,当它验证文档时,它会同时处理这两个文档,这意味着即使“On”不在枚举值列表中,它仍然被确定为有效。

关于简单类型字符串的 XML 模式不区分大小写枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/359359/

相关文章:

xml - 将 XMLNodeSet 转换为格式良好的 XML 文档

schema - 如何将多个 biztalk 应用程序引用的通用模式组织在同一个组中?

database-design - 在关系数据库中表达 is-a 关系

sql - 使用多个模式进行查询 - Dbeaver

xsd - XML 架构 : How to specify an attribute with a custom 'simpleType' type?

c# - 如何在 C# 中获取节点文本值的父级?

xml - ActiveMQ 5.11.1 不断抛出EOFException 不发送消息

regex - xsd:simpleType: xsd:pattern 和 xsd:maxLength 可以一起工作吗?

c# - 如果 C# 规范将它们称为简单类型,为什么 Type 类有一个名为 IsPrimitive() 的方法?

python - 更改菜单名称 openerp