XSD - 两个不同属性的唯一值

时间:2014-07-31 08:46:54

标签: xml xsd xsd-1.0

在架构级别可以强制使用不同名称的两个属性的唯一值吗?

<xs:complexType name="exampleType">
  <xs:attribute name="first" type="xs:integer" use="required"/>
  <xs:attribute name="second" type="xs:integer"/>
</xs:complexType>

如果first为1,则second需要为其他值。

编辑:我使用的是xsd 1.0。

1 个答案:

答案 0 :(得分:4)

正如我在评论中所说,只有firstsecond是元素(非属性)才有效。 | xpath运算符就像一个节点联合。

<xs:element name="exampleElement" type="exampleType">
    <xs:unique name="firstAndSecondDifferent">
        <xs:selector xpath="first | second" />
        <xs:field xpath="." />
    </xs:unique>
</xs:element>

<xs:complexType name="exampleType">
    <xs:sequence>
        <xs:element name="first" type="xs:integer" />
        <xs:element name="second" type="xs:integer" minOccurs="0" />
    </xs:sequence>
</xs:complexType>

以下元素有效(firstsecond具有不同的值):

<exampleElement>
    <first>1</first>
    <second>5</second>
</exampleElement>

以下元素有效(不存在second元素):

<exampleElement>
    <first>1</first>
</exampleElement>

以下元素无效(firstsecond具有相同的值):

<exampleElement>
    <first>1</first>
    <second>1</second>
</exampleElement>

这不能用属性来完成,因为selector xpath不允许使用属性,因此"@first | @second"它不是选择器的xpath属性的有效值。