加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML Schema key/keyref – 如何使用它们?

发布时间:2020-12-16 08:05:24 所属栏目:百科 来源:网络整理
导读:长篇小说:我想知道如何使用XSD的key / keyref来让元素相互引用。它必须有一个例子,使用一个简单的xsd和一个XML的形式。 长篇故事:我熟悉ID / IDREF的使用。我使用那些连接JAXB的元素。我已经被告知,XSD中的key / keyref构造提高了元素间引用的灵活性。我
长篇小说:我想知道如何使用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类

我已经搜索了how-tos,教程和例子,但是google给我留下了遗憾。对于SO搜索(也与谷歌和包容性搜索与”)相同。

为了让每个人的生活变得更轻松,我已经准备好了一个已经定义好的key / keyref对的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>

一个XML的样子如何,引用“引用”元素的“所有者”元素?

编辑:应用由Tom W提出的更改,将关键元素的xpath属性更改为“owner”。 JAXB(XJC)仍然不在乎。

谢谢

实例文档中没有特殊的语法。只需要keyref节点匹配一个现存密钥节点。验证将告诉您密钥约束是否满足。

你的代码:

我只是刚刚开始用钥匙,但我认为我发现了你的错误 – aKey应该是:

<xs:key name="aKey">
    <xs:selector xpath="owner" />
    <xs:field xpath="@id" />
</xs:key>

此外 – 这是一个有限的密钥约束,不能识别默认的命名空间。您必须始终将选择器xpath的每个部分与要查找的元素的命名空间前缀进行匹配。如果您没有命名空间前缀 – 很难,您需要添加一个。这是标准的限制。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读