xsd:unique 对两个不同元素的属性的约束
xsd:unique constraint on attribute of two different elements
简单问题:我有两个共享相同属性的不同元素。我怎样才能在两个不同的元素上实现这个属性的唯一性?
示例 XML 片段:
<owners>
<person id="1"/>
<company id="2"/>
</owners>
在上面的代码片段中,我希望 id
值在 person
和 company
中是唯一的。所以那个人和公司没有相同的 id
价值观。
如果您同意 person/@id
和 company/@id
在 所有 元素中是唯一的,只需将这些 @id
属性键入 xs:ID
.
如果您确实需要将唯一性范围限制在 owners
中那两个元素的 @id
,请使用 owners
中的 xs:unique
和 xs:selector/@xpath
共 person|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
。
简单问题:我有两个共享相同属性的不同元素。我怎样才能在两个不同的元素上实现这个属性的唯一性?
示例 XML 片段:
<owners>
<person id="1"/>
<company id="2"/>
</owners>
在上面的代码片段中,我希望 id
值在 person
和 company
中是唯一的。所以那个人和公司没有相同的 id
价值观。
如果您同意 person/@id
和 company/@id
在 所有 元素中是唯一的,只需将这些 @id
属性键入 xs:ID
.
如果您确实需要将唯一性范围限制在 owners
中那两个元素的 @id
,请使用 owners
中的 xs:unique
和 xs:selector/@xpath
共 person|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
。