XSD中的unique, key, keyref有什么区别
技术百科
畫卷琴夢
发布时间:2026-01-27
浏览: 次 xs:unique要求值唯一但允许字段缺失或为空,xs:key要求值唯一且必须存在,xs:keyref要求字段值必须引用xs:key或xs:unique定义的合法值。
三者都用于定义XML文档中值的唯一性或引用关系,但语义和校验规则不同:
xs:unique 要求值唯一,但允许为空或缺失
它指定某元素或属性在所选范围内必须互不相同,但如果该字段没出现、值为空字符串或全由空白字符组成,就跳过校验——不报错。适合用在“可选但一旦出现就必须唯一”的场景。
- 例如:一个product元素可带sku属性,有则不能重复,没有也不强制
- 必须配合xs:selector和xs:field使用,先选一组元素,再指定其中哪个字段要唯一
xs:key 要求值唯一且必须存在
结构和xs:unique几乎一样,但更严格:对应字段不仅得唯一,还必须在每个匹配元素中显式出现、非空、非空白。相当于“主键”语义。
- 例如:每个user元素必须有id属性,且所有id值全局不重复
- 常作为xs:keyref的目标,提供被引用的“键集合”
xs:keyref 用于建立跨元素的引用一致性
它本身不定义唯一性,而是声明某个字段的值

- 例如:order里的customer_id必须等于某个customer元素的id
- 必须通过ref属性指向一个已定义的xs:key或xs:unique
- 引用字段可以是任意类型(字符串、数字等),不限于ID类型
简单说:unique管“不重复但可缺”,key管“不重复且必填”,keyref管“引用必须落在前两者定义的合法值里”。
# 可选
# 也不
# 出现在
# 为空
# 跳过
# 用在
# 还必须
# 区别
# xml
# 字符串
# 报错
# 落在
# 都用
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win11怎样安装网易云音乐_Win11安装网易云
- c++中的CRTP是什么 c++奇异递归模板模式【
- php下载安装后memory_limit怎么设置_
- php打包exe后无法写入文件_权限问题解决方法【
- 网站内页做seo排名怎么做?
- Win11怎么设置按流量计费_Win11限制后台流
- Win11怎么设置默认邮件应用_Windows11
- Python函数参数高级用法_默认值与可变参数解析
- 如何理解Go指针和内存分配关系_Go Pointe
- 如何在Golang中编写端到端测试_Golang
- Win11无法安装软件怎么办_Win11解除应用安
- Win11如何设置系统语言_Win11系统语言切换
- 如何使用Golang处理静态文件缓存_提高页面加载
- 如何更改Windows资源管理器的默认启动位置?(
- 用lighttpd能运行php吗_lighttpd
- MAC怎么在照片中添加水印_MAC自带编辑工具文字
- php条件判断怎么写_ifelse和switchc
- Win10怎样清理C盘Steam游戏缓存_Win1
- Win10 BitLocker加密教程 Win10
- Windows如何使用BitLocker To G
- Win10任务栏天气和资讯怎么关闭 Win10禁用
- 如何在Golang中使用replace替换模块_指
- c# Task.ConfigureAwait(tr
- c++的位运算怎么用 与、或、异或、移位操作详解【
- 如何在包含多值的列中精准搜索指定演员?
- Linux怎么修改用户密码_Linux系统pass
- Windows10系统怎么查看系统版本_Win10
- Win11任务栏怎么调到左边_Win11开始菜单居
- Win11怎么连接投影仪_Win11多显示器投屏设
- php删除数据怎么加限制_带where条件删除避免
- VSC怎样用终端运行PHP_命令行执行脚本的步骤【
- Python字符串处理进阶_切片方法解析【指导】
- 如何在Golang中写入JSON文件_保存结构体数
- php订单日志权限怎么设_php订单日志文件权限设
- Bpmn 2.0的XML文件怎么画流程图
- Win11怎么制作U盘启动盘_Win11原版系统安
- Mac如何与安卓手机传文件_Mac和Android
- Win11怎么开启游戏模式_Windows11优化
- XAMPP 启动失败(Apache 突然停止)的终
- Linux怎么禁止Root用户远程登录_Linux
- Windows蓝屏BAD_POOL_HEADER故
- php中self::能调用子类重写的方法吗_静态绑
- Python对象比较与排序_魔术方法解析【教程】
- c# 服务器GC和工作站GC的区别和设置
- php8.4匿名类怎么用_php8.4匿名类创建与
- Win10电脑怎么设置IP地址_Windows10
- Win11麦克风没声音怎么设置_Win11麦克风权
- Win11资源管理器卡顿怎么办 Win11文件资源
- Win10闹钟铃声怎么自定义 Win10闹钟自定义
- windows如何备份注册表_windows导出和

QQ客服