【发布时间】:2020-01-07 13:50:51
【问题描述】:
我有以下 XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Sea">
<xs:complexType>
<xs:sequence>
<xs:element ref="FishSubGroup"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="FishSubGroup" abstract="true"/>
<xs:element name="Tuna" type="FishType" substitutionGroup="FishSubGroup"/>
<xs:element name="Carp" type="FishType" substitutionGroup="FishSubGroup"/>
<xs:element name="Salmon" type="FishType" substitutionGroup="FishSubGroup"/>
<xs:complexType name="FishType">
<xs:attribute name="name" type="xs:string"/>
</xs:complexType>
</xs:schema>
这个XML代表一个有效的实例:
<?xml version="1.0" encoding="UTF-8"?>
<Sea name="Atlantic Ocean">
<Tuna name="tuna1"/>
<Carp name="carp1"/>
<Carp name="carp2"/>
<Tuna name="tuna2"/>
<Salmon name="salmon1"/>
</Sea>
注意:我从post 中获取了一个很好的水生示例。
问题:
XSD 中有没有一种方法可以定义一个约束,使其类别中只有一个替换元素?换句话说,我希望最多有 1 条金枪鱼、1 条鲤鱼、1 条鲑鱼等,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Sea name="Atlantic Ocean">
<Tuna name="tuna1"/>
<Carp name="carp1"/>
<Carp name="carp2"/> <!-- <-- Invalid Carp Already Defined -->
<Tuna name="tuna2"/> <!-- <-- Invalid Tuna Already Defined -->
<Salmon name="salmon1"/>
</Sea>
【问题讨论】:
标签: xml xsd xsd-validation