【发布时间】:2011-05-28 09:05:21
【问题描述】:
长话短说:我想知道如何使用 XSD 中的 key/keyref 来让元素相互引用。它必须有一个示例的形式,使用一个简单的 xsd 和一个 XML。
长话短说:我熟悉 ID/IDREF 的用法。我使用它们来连接 JAXB 的元素。有人反复告诉我,XSD 中的 key/keyref 构造为元素间引用提供了增强的灵活性。我已经咨询了OReilly XML Schema book,它似乎教了关于 key/keyref 的正确定义以及它与 ID/IDREF 的相似之处(但更好)的所有内容,并且没有给出一个简单的使用示例。它似乎并不相似,因为您将 ID 定义为一个元素中的属性,而将 IDREF 定义为另一个元素中的属性,瞧。但是 key/keyref 必须在引用和被引用元素 (AFAIK) 的共同祖先中定义...
我使用 XSD 文件通过 XJC 生成 JAXB 绑定的 Java 类
我已经搜索了操作方法、教程和示例,但谷歌给了我一些残羹剩饭。对于 SO 上的搜索也是如此(也可以使用 google 和使用 '+' 的包容性搜索)。
为了让每个人的生活更轻松,我准备了一个 XSD,其中包含我理解的已经定义的 key/keyref 对。
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="referenced">
<xs:complexType>
<xs:attribute name="id" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="owner">
<xs:complexType>
<xs:attribute name="id" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:key name="aKey">
<xs:selector xpath="owner" />
<xs:field xpath="@id" />
</xs:key>
<xs:keyref name="aKeyRef" refer="aKey">
<xs:selector xpath="referenced" />
<xs:field xpath="@id" />
</xs:keyref>
</xs:element>
如果“所有者”元素引用“引用”元素,那么一段 XML 会是什么样子?
编辑: 应用了 Tom W 提出的更改,将关键元素的 xpath 属性更改为“所有者”。但 JAXB (XJC) 仍然不在乎。
谢谢
【问题讨论】:
标签: xml xsd reference schema jaxb