请考虑以下事项:
<xs:complexType name="A">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="subAGroup"/>
<xs:group ref="xGroup"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="B">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="subBGroup"/>
<xs:group ref="xGroup"/>
</xs:choice>
</xs:complexType>
我想要发生的是,如果xGroup中的一个元素是A的子元素,孙子元素等,那么它的子元素必须是subAGroup或xGroup的一部分。如果B是它的祖先,那么它的子节点必须在subBGroup或xGroup中。
答案 0 :(得分:0)
一种解决方案是为每种父类型创建不同的组和类型。按照上面的例子,它将成为:
<xs:complexType name="A">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="subAGroup"/>
<xs:group ref="xGroup"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="B">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="subBGroup"/>
<xs:group ref="yGroup"/>
</xs:choice>
</xs:complexType>
<xs:group name="xGroup">
<xs:choice>
<xs:element name="Element1" type="AEleType"/>
</xs:choice>
</xs:group>
<xs:complexType name="AEleType">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="subAGroup"/>
<xs:group ref="xGroup"/>
</xs:choice>
</xs:complexType>
<xs:group name="yGroup">
<xs:choice>
<xs:element name="Element1" type="BEleType"/>
</xs:choice>
</xs:group>
<xs:complexType name="BEleType">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="subBGroup"/>
<xs:group ref="yGroup"/>
</xs:choice>
</xs:complexType>
虽然看起来过于冗长。有更优雅的解决方案吗?