0

这是一个定义文档的 XML 模式,其中包含包含和元素的params根元素。两种类型的元素都有一个属性。atomicParamcomplexParamname

<schema xmlns="http://www.w3.org/2001/XMLSchema"
                targetNamespace="http://companyname.org/"
                xmlns:tns="http://companyname.org/"
>

        <element name="params" type="tns:ParamsType"/>

        <complexType name="ParamsType">
                <sequence>
                        <element name="atomicParam" type="tns:AtomicParamType" minOccurs="0" maxOccurs="unbounded"/>
                        <element name="complexParam" type="tns:ComplexParamType" minOccurs="0" maxOccurs="unbounded"/>
                </sequence>
        </complexType>

        <complexType name="ComplexParamType">
                <simpleContent>
                        <extension base="string">
                                <attribute name="name" type="string" use="required"/>
                        </extension>
                </simpleContent>
        </complexType>

        <complexType name="AtomicParamType">
                <simpleContent>
                        <extension base="string">
                                <attribute name="name" type="string" use="required"/>
                        </extension>
                </simpleContent>
        </complexType>

</schema>

我的目标是将以下约束应用于name属性:

  1. 如果任何元素具有该属性的atomicParam某个值(例如foo),则任何complexParam元素都不应具有该属性的相同值。同时,另一个atomicParam可能具有fooname属性。
  2. 如果任何元素具有该属性的complexParam某个值(例如bar),则任何atomicParam元素都不应具有该属性的相同值。同时,另一个 complexParam可能具有barname属性。

这可能吗?

4

1 回答 1

0

使用 XSD 1.0 是不可能的:有一种方法可以强制值的唯一性,但不能像这里所要求的那样跨越不同的元素。

在 XSD 1.1 中应该可以使用断言:

<xsd:assert test="not(atomicParam/@name=complexParam/@name)"/>
于 2013-05-28T14:02:34.043 回答