从基地禁止一个元素

时间:2014-10-07 18:45:17

标签: xml xsd

我想将Derived类型限制为仅使用一个元素,而不是Base

<xs:complexType name="Base">
    <xs:sequence>
        <xs:element name="MyElement" />
        <xs:group ref="MyGroup" />
    </xs:sequence>
</xs:complexType>

<xs:complexType name="Derived">
    <xs:complexContent>
        <xs:restriction base="Base">
            <xs:sequence>
                <xs:element name="MyElement" maxOccurs="0"/>
                <xs:group ref="MyGroup" />
            </xs:sequence>
        </xs:restriction>
    </xs:complexContent>
</xs:complexType>

所以这应该验证:

<Derived>
    <ElementFromMyGroup />
</Derived>

但这不应该:

<Derived>
    <MyElement />
    <ElementFromMyGroup />
</Derived>

不幸的是我的解决方案在XSD中不合法。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

问题是,您的Derived类型不是Base类型的限制:Derived的实例不是Base的实例。

根据您希望这两种类型相互关联的原因,您可能希望为它们指定一个共同的超类型,并在这些行中声明:

<xs:complexType name="CommonSuperType">
  <xs:sequence>
    <xs:element name="MyElement" minOccurs="0"/>
    <xs:group ref="MyGroup" />
  </xs:sequence>
</xs:complexType>

然后将当前的两种类型定义为此常见超类型的限制。