Xml XSD-定义具有不同ID属性的多个必需元素,其中一个具有子元素

Xml XSD-定义具有不同ID属性的多个必需元素,其中一个具有子元素,xml,xsd,Xml,Xsd,我正在尝试为一些XML开发一个XSD,大致如下所示: <root> <thing id="1"/> <thing id="2"/> <thing id="3"> <subelement> ... </subelement> </thing> </root> ... 其中每个id的一个对象需要一次,id为“3”的对象需要特定的子元素 通过创建一个抽象的复

我正在尝试为一些XML开发一个XSD,大致如下所示:

<root>
  <thing id="1"/>
  <thing id="2"/>
  <thing id="3">
    <subelement>
      ...
    </subelement>
  </thing>
</root>

...
其中每个id的一个对象需要一次,id为“3”的对象需要特定的子元素

通过创建一个抽象的复杂类型并扩展它,我能够创建每个ID的一个对象的需求(尽管它还没有经过测试)



在XML架构中不可能。这种结构的最佳模式语言是RELAXNG。看

<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>