两种属性上唯一的XML模式

时间:2012-03-01 22:40:54

标签: xml xsd

我有一个简单的XML结构:

<foo>
    <bar row="42" column="2"></bar>
    <bar row="42" column="3"></bar>
</foo>

我希望row的{​​{1}}和column在一起是唯一的。所以上面的例子验证了,而以下没有:

bar

我一直在尝试为以下架构添加密钥,但我还没有找到解决方案。

<foo>
    <bar row="42" column="2"></bar>
    <bar row="42" column="3"></bar>
    <bar row="42" column="3"></bar>
</foo>

1 个答案:

答案 0 :(得分:10)

我希望以下内容能够做到。

<xsd:element name="foo">
  ...
  <xsd:unique name="rowcol">
    <xsd:selector xpath="bar"/>
    <xsd:field xpath="@row"/>
    <xsd:field xpath="@column"/>
  </xsd:unique>
</xsd:element>

唯一性约束在唯一性范围的元素声明中,我推测是foo。如果你的结构实际上更像是:

<root>
  <foo> ... </foo>
  <foo> ... </foo>
</root>

并且您希望唯一性是全局的,那么约束应该继续root