我有一个问题,我似乎无法找到解决方案,仅使用XML 1.0。我的任务是创建一个模式,该模式将根据其中一个属性的值以不同方式验证xml元素。这是一个简化的例子:
<elements>
<elem type="A">
<foo/>
</elem>
<elem type="B">
<goo/>
</elem>
</elements>
所以我想检查elem
的所有type="A"
只能有子元素foo
,而elem
的所有type="B"
都可以只有子元素goo
。
到目前为止我能够创建的是这种模式。
<xs:element name="elements">
<xs:complexType>
<xs:sequence>
<xs:element ref="elem" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="elem">
<xs:complexType>
<xs:choice>
<xs:element ref="foo"/>
<xs:element ref="goo"/>
</xs:choice>
<xs:attribute name="type" type="elem-type" use="required">
</xs:complexType>
</xs:element>
<xs:simpleType name="elem-type">
<xs:restriction base="xs:token">
<xs:enumeration value="A"/>
<xs:enumeration value="B"/>
</xs:restriction>
</xs:simpleType>