xml - XSD - 可以为空的枚举限制值

标签 xml xsd nullable enumeration restriction

我正在创建一个 XSD,其中一个元素需要为空或来自枚举的值:

<xs:element name="MyElement" nillable="true">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:enumeration value="A" />
      <xs:enumeration value="B" />
      <xs:enumeration value="C" />
    </xs:restriction>
  </xs:simpleType>
</xs:element>

我曾希望通过将 nillable 属性设置为 true,它会允许 A、B、C 或空值:

<MyElement></MyElement>

但显然这是无效的:

The Enumeration constraint failed.

我还尝试将空值显式添加到枚举中:

<xs:enumeration value="" />

但也没有运气:

The Enumeration constraint failed.

目前,我正在使用一种模式:

<xs:pattern value="[ABC]{0,1}" />

这行得通,但我发现对于这样一个简单的要求,这是一种糟糕的方法。当然必须有一些我可以做的事情来允许“枚举中的任何内容或空的”?哦,不建议将 minOccurs 设置为 0,标签必须始终存在。

最佳答案

关于使用空值

我不知道您使用的是什么验证器,但如果您添加 <xs:enumeration value="" />然后作为限制标签的子元素 <MyElement></MyElement>是有效的(我确信这一点并且我已经在 oXygen 和几个在线验证器中对其进行了测试以防万一)。

所以做您想做的事情的正确方法是使用空枚举值或使用模式限制。换句话说,您在问题中提供的两个解决方案是正确的,尽管您的验证器认为枚举不是这样(可能是错误,也可能是完整的架构,我不知道)。

关于nillable

Nillable意味着在 XML 实例中,元素可以将 nil 属性 设置为 true,然后它应该为空。示例:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="MyElement" type="xs:string" nillable="true"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

在下面的示例中,MyElement 将 nil 属性设置为 true 并且它是空的,因此它对示例 XML Schema 有效(注意如果 MyElement 有内容并且 nil 设置为 true,则无效)

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:ns="http://www.w3.org/2001/XMLSchema-instance">
    <MyElement ns:nil="true"></MyElement>
</root>

所以在我看来,使用 nillable 并不是一个好的解决方案,因为您必须向 XML 实例添加一个属性。我建议不要使用 nillable,而是像您尝试的那样使用枚举,并检查验证器的奇怪行为。

关于xml - XSD - 可以为空的枚举限制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25060770/

相关文章:

xsd - 创建一个通用的 xsd 生成类以供其他包使用

java - 如何使用 ListView 滚动所有布局

c# - 如何将子元素移动到父元素的属性 (XML)

Java 和解析 XML

XML Schema 内容模型是不确定的

.net - 与 xsd :anytype 的 BizTalk 映射

c# - "Promote"泛型类型在 C# 中为 Nullable?

c# - Nullable<T> 的装箱/拆箱行为如何可能?

java - XML属性解析

types - Kotlin 可以在类文件中发出 JSR-305 注释吗