XML Schema:扩展是标识符唯一性空间的一部分

时间:2014-08-26 13:49:02

标签: xml xsd

假设我声明了一个类型A,然后声明另一个通过扩展继承自A的类型B.同样,我还创建了一个继承自A的类型C. 假设A具有属性“att”,并且我创建了一个键,使得“att”的值是唯一的,并且可以用于引用类型A的对象。

B和C类型的对象如何受此影响?我可以使用这种方法,使B和C共享标识符空间而不是同一类型吗?

你可能告诉我,我可以使用密钥的选择器来指定B和C.但是如果不是B和C,我有数百种需要共享ID空间的不同类型呢?在这种情况下,我需要这样的属性继承方法...

谢谢:)

1 个答案:

答案 0 :(得分:0)

身份约束是在元素上声明的,而不是类型;他们使用相当小的XPath子集来识别他们约束的密钥和/或唯一值。

因此,使唯一性约束影响具有复杂类型A,B和C(或A,B001,B002,... B999,C001,C002,... C999)的元素是多么简单或复杂,取决于这些元素的名称,它们是否出现在树中的一致深度,所讨论的属性是否始终具有相同的名称,以及谁知道其他所有内容。

在简单的情况下,约束可能看起来很简单:

<unique name="A-uniqueness">
  <selector xpath=".//A"/>
  <field xpath="@A-unique-ID"/>
</unique>

或者这个:

<unique name="A-uniqueness-2">
  <selector xpath=".//*"/>
  <field xpath="@A-unique-ID"/>
</unique>

当然有很多并发症的机会。