0
我试图制定一些XML看起来大致是这样的XSD:XSD - 定义多个必需的元素用不同的ID属性,其中之一有子元素
<root>
<thing id="1"/>
<thing id="2"/>
<thing id="3">
<subelement>
...
</subelement>
</thing>
</root>
如果要求每个ID的事一次,而ID为“3”的东西需要特定的子元素。
我能够通过创建一个抽象复杂类型和关闭该扩展(尽管它仍然是未经测试)创建的每个ID的一两件事要求,
<xs:element name="thing" type="tns:abstractType" minOccurs="3" maxOccurs="3">
<xs:unique name="EachIdRequired">
<xs:selector xpath="thing" />
<xs:field xpath="@id"/>
</xs:unique>
</xs:element>
<xs:complexType name="abstractType" abstract="true/>
<xs:complexType name="idOne">
<xs:complexContent>
<xs:extension base="tns:abstractType">
<xs:attribute name="id" fixed="1" type="xs:integer" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="idTwo">
<xs:complexContent>
<xs:extension base="tns:abstractType">
<xs:attribute name="id" fixed="2" type="xs:integer" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="idThree">
<xs:complexContent>
<xs:extension base="tns:abstractType">
<xs:attribute name="id" fixed="3" type="xs:integer" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
但是,我不知道该如何还具有id 3的complexType
的要求也具有所需的子元素。我看到用属性和子元素定义的元素的唯一方法是使用扩展名,但idThree
已经扩展了抽象类型。
我是否可能以其他方式去做?我很怀疑,但我想确定。 XSD似乎有些限制。