2

我正在尝试使用xs:unique. 但是,我认为我在使用 XPath 时遇到了一些问题。

我有一个抽象元素 ObjectA,它有一个属性“标识符”,它是一个字符串。我希望这个标识符在具体元素 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" />
4

2 回答 2

2

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

希望这可以帮助。

于 2013-01-22T09:05:16.280 回答
0

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

于 2013-01-22T04:27:54.353 回答