kos*_*tja 26 xml schema xsd reference jaxb
长话短说:我想知道如何使用XSD中的key/keyref让元素互相引用.它必须有一个示例的形式,使用简单的xsd和XML.
长话:我熟悉ID/IDREF的用法.我用它来连接JAXB的元素.我一再被告知,XSD中的key/keyref构造为元素间引用提供了增强的灵活性.我已经查阅了OReilly XML Schema一书,它似乎教会了关于key/keyref的正确定义以及它与ID/IDREF(但更好)类似的一切,并没有给出一个简单的使用示例.它似乎并不相似,因为您将ID定义为一个元素中的属性,将IDREF定义为另一个元素中的ID.但是key/keyref必须在引用和引用元素(AFAIK)的共同祖先中定义...
我使用XSD文件使用XJC生成JAXB绑定的Java类
我搜索了how-to,教程和示例,但谷歌给了我一些废话.同样适用于搜索SO(也使用谷歌和包含搜索的'+').
为了让每个人的生活更轻松,我准备了一个已经定义的密钥/密钥对的XSD,正如我所理解的那样.
<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>
Run Code Online (Sandbox Code Playgroud)
一个XML如何看起来像一个'owner'元素引用'引用'元素?
编辑:应用Tom W提议的更改,将关键元素的xpath属性更改为"owner".JAXB(XJC)仍然不在乎.
谢谢
实例文档中没有特殊语法.简单地要求keyref节点匹配现存的密钥节点.验证将告诉您是否满足关键约束.
你的代码:
我自己刚刚开始涉足钥匙,但我想我发现了你的错误 - aKey应该是这样的:
<xs:key name="aKey">
<xs:selector xpath="owner" />
<xs:field xpath="@id" />
</xs:key>
Run Code Online (Sandbox Code Playgroud)
此外 - 这是一个问题 - 关键限制无法识别默认命名空间.您必须始终在selectorxpath的每个部分前面添加您正在查找的元素的名称空间前缀.如果你没有命名空间前缀 - 很难,你需要添加一个.这是标准的限制.
JAXB规范没有明确涵盖key/keyref.但是,EclipseLink MOXy(我是技术主管)等JAXB实现对此有扩展.我们即将推出的2.2版本提供了一种通过注释指定这种关系的方法(我将把一个例子放在一起).以下是使用当前版本如何完成的链接.
有关更多信息,请参阅
UPDATE
我希望得到答案的一个例子,但在我休假之前,我的时间已经不多了.以下是我们的设计文档中的示例,它演示了以下概念:
小智 5
我发现此线程正在搜索OP正在搜索的相同内容-该<xs:key>元素的简单用法示例。JAXB的所有内容对我来说都是希腊语,并且使我分心。对于稍后找到该线程的其他人,这是OP在SO上在此处询问问题几年后在MSDN上发布的一个简单示例:
https://msdn.microsoft.com/zh-cn/library/ms256101%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
如果MSDN链接发生更改,则面包屑路径为:
https://msdn.microsoft.com/library,然后单击“切换到库目录视图”,然后向下钻取:
MSDN库> .NET开发> .NET Framework 4.6和4.5>开发指南>数据和建模> XML标准参考> XML模式(XSD)参考> XML模式元素> <xsd:key>元素