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

18

我需要在我的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时,我将得不到漂亮的智能提示。以下内容会为我提供枚举,但它是区分大小写的。

问题在于我获取不到枚举值。在使用 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"的值,它将无法通过验证。

我希望能够枚举"on"、"off"并允许大小写不敏感的版本输入。

3个回答

19

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


12

IBM developerWorks有一篇文章介绍如何使用XSLT自动构建完整的枚举选项集,以解决缺少不区分大小写枚举的问题。


1

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


1
我可以这样做,但对于像“notification”这样的长枚举值来说并不优雅,而且我仍然无法得到我的枚举。枚举对我来说非常重要。 :) - Bobby Cannon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接