XSD - 仅根据父标签使属性成为必需
XSD - Make an attribute required only depending of the parent tag
在我的 xml shema 中,我可以像这样将标签 <item>
放入 2 个不同的父级中:
<page>
<item name="foo"/>
</page>
or
<page>
<list>
<item class="path/to/class"/>
</list>
</page>
如何在我的 xsd 中说 name
属性仅在直接父级为 <page>
时才强制?
我找到了答案:
<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>
在我的 xml shema 中,我可以像这样将标签 <item>
放入 2 个不同的父级中:
<page>
<item name="foo"/>
</page>
or
<page>
<list>
<item class="path/to/class"/>
</list>
</page>
如何在我的 xsd 中说 name
属性仅在直接父级为 <page>
时才强制?
我找到了答案:
<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>