不同元素类型之间的唯一属性

时间:2015-10-07 13:49:43

标签: xml xsd schema

我试图在不同元素类型共享的属性上添加唯一性约束。所有这些元素共享一组使用attributeGroup定义的公共属性。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:attributeGroup name="commonAttributes">
    <xs:attribute name="id" type="xs:string" use="required" />
    <xs:attribute name="displayName" type="xs:string" />
  </xs:attributeGroup>

  ...
  <xs:element name="mainType" minOccurs="0">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="firstType" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
            <xs:attributeGroup ref="commonAttributes"></xs:attributeGroup>
          </xs:complexType>
        </xs:element>
        <xs:element name="secondType" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
            <xs:attributeGroup ref="commonAttributes"></xs:attributeGroup>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  ...
</xs:schema>

基本上,firstTypesecondType元素都定义了id属性,该属性需要在每个mainType实例中具有唯一值。根据我的阅读,无法在unique内设置xs:attributeGroup约束。在firstTypesecondType元素上设置此约束显然只适用于该类型的其他元素,这意味着firstType元素的实例可能具有相同的id值作为secondType元素。

有没有办法使id属性在mainType元素中定义的所有类型中都是唯一的?拥有一个并将当前元素名称设置为属性意味着重要的代码更改和规范的隐式更改(我非常希望不触发)。

0 个答案:

没有答案