xs:unique - 在抽象元素上的Schema中强制使用唯一属性值

时间:2013-01-21 20:40:19

标签: xml xpath xsd unique

我正在尝试使用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" />

2 个答案:

答案 0 :(得分:2)

如果希望包含D元素的每个A元素都具有F的唯一值,那么您应该在D元素的级别定义唯一约束;选择器应从D开始选择A元素,并且字段应从A元素开始选择F的值。你的错误是你试图在A元素上定义约束,这是错误的,因为没有单独的A元素是无效的;无效性处于D级。

希望这有帮助。

答案 1 :(得分:0)

唯一约束在集合上比单个元素更有用。您拥有的模式定义或多或少是有效的,除了在Objectx的“within”元素内而不是在对象上检查unique。如果您发布完整的模式,它将有助于提供更准确的定义。