我想将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中不合法。任何帮助表示赞赏!
答案 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>
然后将当前的两种类型定义为此常见超类型的限制。