根据其他元素值更改XSD中的限制

时间:2013-10-08 09:04:22

标签: xml xsd

我有一个元素“Method”和“Name”,如下所示: 我想根据“方法”中的值将“名称”中的引用从“group1”更改为“group2”,因为我想更改限制。

有可能吗?

<xs:element name="Method" type="xs:string" />

<xs:element name="Name">
    <xs:complexType>
        <xs:sequence>
            <xs:choice maxOccurs="unbounded">
                <xs:element ref="group1" />
            </xs:choice>
        </xs:sequence>
    </xs:complexType>
</xs:element>


<xs:element name="group1">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:enumeration value="ABC" />
            <xs:enumeration value="PQR" />
        </xs:restriction>
    </xs:simpleType>
</xs:element>

<xs:element name="group2">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:enumeration value="XYZ" />
            <xs:enumeration value="ABC" />
        </xs:restriction>
    </xs:simpleType>
</xs:element>

1 个答案:

答案 0 :(得分:1)

对于XSD 1.0 ,您必须在XML Schema之外验证此类约束。考虑使用XSLT进行额外验证或Schematron。

对于XSD 1.1 ,您可以使用条件类型分配。见xs:alternative。但请注意,您必须进行一些重组。 xs:alternative测试可以引用元素本身和常量的属性,而不是文档中的任意元素;它甚至不允许相对引用其他元素或属性。