XSD - 仅根据父标记创建所需的属性

时间:2018-02-28 21:52:03

标签: xsd required

在我的xml shema中,我可以将标记<item>放在2个不同的父级中,如下所示:

<page>
   <item name="foo"/>
</page>

or

<page>
    <list>
        <item class="path/to/class"/>
    </list>
</page>

我在xsd中如何说,name属性仅在直接父级为<page>时才是强制性的?

1 个答案:

答案 0 :(得分:0)

我找到了答案:

<xs:complexType name="listItemType">
    <xs:simpleContent>
        <xs:extension base="xs:string">
            <xs:attribute type="xs:string" name="class" use="required"/>
        </xs:extension>
   </xs:simpleContent>
</xs:complexType>
<xs:complexType name="itemType">
    <xs:simpleContent>
        <xs:extension base="xs:string">
            <xs:attribute type="xs:string" name="name" use="required"/>
        </xs:extension>
   </xs:simpleContent>
</xs:complexType>
<xs:complexType name="listType">
  <xs:sequence>
      <xs:element type="listItemType" name="item" minOccurs="1" maxOccurs="1" />
  </xs:sequence>
</xs:complexType>
<xs:complexType name="pageType">
  <xs:sequence>
      <xs:element type="itemType" name="item" minOccurs="1" maxOccurs="1" />
  </xs:sequence>
</xs:complexType>