0

0

XSD中的key和keyref怎么用 定义XML唯一性和引用约束

月夜之吻

月夜之吻

发布时间:2025-12-27 03:23:15

|

679人浏览过

|

来源于php中文网

原创

xs:key和xs:keyref用于建立XSD中主键–外键式强一致性约束:key定义必存在、非空、全局唯一的标识,keyref校验引用值是否在key/unique的合法值集合中;二者须配合使用且作用域需重叠或嵌套。

xsd中的key和keyref怎么用 定义xml唯一性和引用约束

在XSD中,xs:keyxs:keyref是用来建立强一致性约束的核心机制,本质是模拟数据库的“主键–外键”关系。它们必须配合使用,不能单独存在;key定义谁是“被引用的唯一标识”,keyref定义谁“引用了它”,且二者作用域需重叠或嵌套。

key:定义强制存在的唯一标识

xs:key要求指定字段**必须存在、非空、全局唯一**(在它的作用域内)。它由三部分组成:

  • name:约束名称,用于keyrefrefer属性引用
  • xs:selector:XPath表达式,选中要检查的一组元素(如xpath="book"
  • xs:field:XPath表达式,指出每个被选元素中哪个值参与唯一性校验(如xpath="@isbn"xpath="title"

例如,确保每本bookisbn属性不为空且全文档唯一:


  
  

keyref:定义对key的引用关系

xs:keyref本身不保证唯一性,只校验“所填的值是否在某个keyunique定义的合法值集合中”。它也必须包含namexs:selectorxs:field,外加一个关键属性:

  • refer:必须指向一个已定义的xs:keyxs:uniquename

例如,定义order中的book_isbn必须引用已有bookisbn

绘蛙AI商品图
绘蛙AI商品图

电商场景的AI创作平台,无需高薪聘请商拍和文案团队,使用绘蛙即可低成本、批量创作优质的商拍图、种草文案

下载

  
  

注意:order/book_isbn文本内容必须等于某本book/@isbn的值,否则XML验证失败。

key vs unique:什么时候用哪个?

二者结构相同,但语义不同:

  • xs:key:字段值必须存在且非空,适合做主键(如ID、ISBN)
  • xs:unique:字段值可为空或缺失,缺失时跳过校验,适合宽松唯一场景(如可选的邮箱、备用编号)
  • xs:keyref只能引用xs:keyxs:unique,不能引用另一个keyref

若你允许某字段为空但一旦有值就必须唯一,用unique;若该字段是核心标识、绝不允许缺省,就用key

常见陷阱与建议

实际编写时容易出错的地方:

  • xs:selector的XPath必须匹配到元素,不能写错层级(比如xpath="books/book" vs xpath="book"
  • xs:field路径必须返回单个原子值;写成xpath="author/name"可能返回多个节点,导致验证异常
  • keykeyref必须定义在同一个xs:elementxs:schema范围内,跨复杂类型需注意作用域嵌套
  • 若XML实例中key对应元素根本不存在,整个key约束失效(不会报错),所以确保数据结构覆盖完整

相关专题

更多
pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1843

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2079

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

914

2024.11.28

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

529

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

2

2025.12.22

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

326

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2067

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

346

2023.08.31

虚拟号码教程汇总
虚拟号码教程汇总

本专题整合了虚拟号码接收验证码相关教程,阅读下面的文章了解更多详细操作。

25

2025.12.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号