我正在尝试使用xs:unique
强制属性的唯一性。但是,我认为我在使用XPath时遇到了一些麻烦。
我有一个抽象元素ObjectA,它有一个属性“identifier”,它是一个字符串。我希望这个标识符在具体元素ObjectB和ObjectC的所有实例中都是唯一的。我不认为xpath="."
是正确的。
<xs:element name="ObjectA" type="ns:ObjectAType">
<xs:unique name="Identifier">
<xs:selector xpath="."/>
<xs:field xpath="@identifier"/>
</xs:unique>
</xs:element>
<xs:complexType name="ObjectAType" abstract="true">
<xs:attribute ref="ns:identifier" use="required" />
</xs:complexType>
<xs:attribute name="identifier" type="xs:string" />
<xs:element name="ObjectB" type="ns:ObjectBType" substitutionGroup=ns:ObjectA" />
<xs:element name="ObjectC" type="ns:ObjectCType" substitutionGroup=ns:ObjectA" />
答案 0 :(得分:2)
如果希望包含D元素的每个A元素都具有F的唯一值,那么您应该在D元素的级别定义唯一约束;选择器应从D开始选择A元素,并且字段应从A元素开始选择F的值。你的错误是你试图在A元素上定义约束,这是错误的,因为没有单独的A元素是无效的;无效性处于D级。
希望这有帮助。
答案 1 :(得分:0)
唯一约束在集合上比单个元素更有用。您拥有的模式定义或多或少是有效的,除了在Objectx的“within”元素内而不是在对象上检查unique。如果您发布完整的模式,它将有助于提供更准确的定义。