xsd:unique 对两个不同元素的属性的约束

xsd:unique constraint on attribute of two different elements

简单问题:我有两个共享相同属性的不同元素。我怎样才能在两个不同的元素上实现这个属性的唯一性?

示例 XML 片段:

<owners>
    <person id="1"/> 
    <company id="2"/>
</owners>

在上面的代码片段中,我希望 id 值在 personcompany 中是唯一的。所以那个人和公司没有相同的 id 价值观。

如果您同意 person/@idcompany/@id 所有 元素中是唯一的,只需将这些 @id 属性键入 xs:ID.

如果您确实需要将唯一性范围限制在 owners 中那两个元素的 @id,请使用 owners 中的 xs:uniquexs:selector/@xpathperson|company

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="owners">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="person" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence/>
            <xs:attribute name="id" type="xs:string"/>
          </xs:complexType>
        </xs:element>
        <xs:element name="company" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence/>
            <xs:attribute name="id" type="xs:string"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
    <xs:unique name="personCompanyIdUniqueness">
      <xs:selector xpath="person|company"/>
      <xs:field xpath="@id"/>
    </xs:unique>
  </xs:element>
</xs:schema>

如果唯一性范围扩展到实际层次结构中较高的元素,请提高 xs:unique 元素并相应地调整 xs:selector/@xpath