XML Schema 1.1属性分组约束

时间:2011-06-30 16:58:31

标签: xml xsd schema

在使用XML Schema 1.1时,我想定义一个完全一起出现的属性组,即attributeGroup中的所有属性都存在或不存在。在以下示例中,我希望<anelement>同时显示两个属性(attr_oneattr_two),或者两个属性都不存在,从不存在单个属性。

<attributeGroup name="attrgroup">
  <attribute name="attr_one" />
  <attribute name="attr_one" />
</attributeGroup>

<element name="anelement">
  <complexType>
    <attributeGroup ref="attrgroup" />
  </complexType>
</element>

据我了解,XML Schema 1.0无法指定这些属性关系(正确吗?)。在XSD 1.1中指定它们的最佳方法是什么?我想我可以使用assert来指定关系,如下所示:

<element name="anelement">
  <complexType>
    <attributeGroup ref="attrgroup" />
    <assert test="(@attr_one and @attr_two) or not(@attr_one or @attr_two)" />
  </complexType>
</element>

但是我希望1.1中添加了一些内容,允许我使用现有语言指定关系,例如: use上的attributeGroup属性。在XML Schema 1.1中指定此关系的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

断言是这样做的方法。更简单的配方是

test="exists(@attr_one) = exists(@attr_two)"

或者你可以做到

test="count(@attr_one|@attr_two) != 1"