XSD中的xs:union怎么合并简单类型

发布时间 - 2026-01-01 00:00:00    点击率:
xs:union 是 XSD 中定义值级“或”关系的简单类型组合机制,需包裹在 xs:simpleType 内,通过 memberTypes 属性列举内置或已命名的简单类型,或内联定义匿名 simpleType;不可含复杂类型、匿名复杂类型、anyType、anySimpleType 或嵌套 union,且应避免语义重叠以确保验证确定性。

xs:union 是 XSD 中用来定义“或”关系的简单类型组合机制,它不改变结构,只扩展值的合法范围——一个元素或属性只要符合其中任一成员类型,即为有效。

怎么写 union 类型定义

union 必须包裹在 xs:simpleType 内,通过 memberTypes 属性列出所有允许的类型,用空格分隔:

  • 可以是内置类型,如 xs:stringxs:integerxs:date
  • 也可以是已命名的自定义简单类型(比如用 restrictionlist 定义的)
  • memberTypes 中不能包含复杂类型,也不能写匿名类型(即不能直接在 union 里嵌套未命名的 restriction)

示例:


  

支持内联子类型定义

如果某个成员类型没有现成名字,也可以在 union 内部直接定义一个匿名 xs:simpleType

  • 适合一次性使用的约束,比如枚举字符串或带范围的数字
  • 每个内联类型必须是完整、可验证的 simpleType

示例(接受 "small"/"large" 或 1–10 的整数):


  
    
      
        
        
      
    
    
      
        
        
      
    
  

怎么用 union 类型

定义完后,像普通类型一样用于 xs:elementxs:attribute

  • 用于元素时,内容必须严格匹配其中一个成员类型(如 5large
  • 用于属性时,值也需满足 union 中任一类型(如 size="small"size="7"
  • 注意:XML 解析器会根据实际值自动选择最匹配的成员类型,但不会做隐式转换(例如 "123" 不会自动当整数,除非 string 和 integer 同时存在且无歧义)

要注意的几个关键点

union 看似简单,但容易踩坑:

  • 避免语义重叠:比如同时包含 xs:stringxs:integer,会导致 "42" 既可当字符串也可当整数,XSD 验证器可能无法唯一判定,引发不确定行为
  • 不等价于 xs:choice:choice 是结构级“多选一”,需要不同子元素;union 是值级“多选一”,作用于纯文本内容,更轻量
  • 不支持 anyType 或 anySimpleType 作为 memberTypes:union 要求每个成员都明确、可静态验证
  • 不能嵌套 union:memberTypes 只接受类型名或内联 simpleType,不能写另一个 union 元素

基本上就这些。


# go  # 隐式转换  # String  # Integer  # 子类  # date  # xml  # 字符串  # union  # Attribute  # 多选  # 几个  # 要注意  # 自定义  # 不支持  # 不确定  # 其中一个  # 既可  # 但不  # 它不 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 怎么用AI帮你设计一套个性化的手机App图标?  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  Laravel如何使用查询构建器?(Query Builder高级用法)  高端企业智能建站程序:SEO优化与响应式模板定制开发  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  如何利用DOS批处理实现定时关机操作详解  如何在景安服务器上快速搭建个人网站?  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  在centOS 7安装mysql 5.7的详细教程  微信小程序 require机制详解及实例代码  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  如何生成腾讯云建站专用兑换码?  Laravel模型事件有哪些_Laravel Model Event生命周期详解  Swift开发中switch语句值绑定模式  Laravel如何自定义分页视图?(Pagination示例)  如何快速搭建自助建站会员专属系统?  如何注册花生壳免费域名并搭建个人网站?  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  js实现获取鼠标当前的位置  如何在宝塔面板中修改默认建站目录?  网站制作报价单模板图片,小松挖机官方网站报价?  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  如何在万网利用已有域名快速建站?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  郑州企业网站制作公司,郑州招聘网站有哪些?  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  Laravel怎么为数据库表字段添加索引以优化查询  如何快速搭建安全的FTP站点?  php json中文编码为null的解决办法  如何打造高效商业网站?建站目的决定转化率  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  高防服务器如何保障网站安全无虞?  PHP 500报错的快速解决方法  Laravel怎么判断请求类型_Laravel Request isMethod用法  Laravel如何实现文件上传和存储?(本地与S3配置)  如何挑选高效建站主机与优质域名?  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  文字头像制作网站推荐软件,醒图能自动配文字吗?  电商网站制作价格怎么算,网上拍卖流程以及规则?