根据其属性值强制执行元素内容

时间:2018-03-18 18:30:39

标签: xml xsd

我有一个问题,我似乎无法找到解决方案,仅使用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>

0 个答案:

没有答案