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

时间:2018-08-02 10:05:54

标签: xml xsd xsd-validation unique-constraint xml-validation

简单的问题:我有两个不同的元素,它们共享相同的属性。如何在两个不同的元素上实现此属性的唯一性?

示例XML代码段:

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

在上面的代码片段中,我希望id的值在personcompany中是唯一的。因此该人和公司没有相同的id值。

1 个答案:

答案 0 :(得分:2)

如果您确定person/@idcompany/@id在所有所有元素中都是唯一的,只需将这些@id属性键入为xs:ID。 / p>

如果您确实要求将唯一性的范围限制为@id中这两个元素的owners,请在xs:unique中将owners与{{1 }}(共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