简单的字符串类型的XML模式不区分大小写的枚举
-
21-08-2019 - |
题
我需要在我的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”或“ON”,将无法通过验证。
我想要的“接通”枚举,“关”,并允许不区分大小写的版本条目。
解决方案
developerWorks中国具有关于如何使用XSLT的文章以自动方式进行的全套枚举替代品的建设。它是作为一种解决方法缺少不区分大小写的枚举。
其他提示
如果您既想保持不区分大小写的验证,同时仍然在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只处理一个工会第一个简单的类型。然而,当它验证的文档时,它处理二者,这意味着“开”时仍然确定为,即使它是不是在枚举值的列表中有效。
好了,你可以只列出所有的排列为图案:)
不隶属于 StackOverflow