如何在XSD中创建枚举类型,限制元素只能取预定义列表中的值?

php中文网
发布: 2025-12-07 12:17:35
原创
957人浏览过
XSD中枚举类型通过xs:restriction嵌套xs:enumeration定义,需基于简单类型限制值域;支持内联定义或命名复用,可应用于字符串、整数等类型,但值必须唯一且为字面量。

如何在xsd中创建枚举类型,限制元素只能取预定义列表中的值?

在XSD中创建枚举类型,就是用 <restriction></restriction> 套住 <enumeration></enumeration>,把允许的值一个个列出来。核心是定义一个简单类型(simpleType),再在里面限制取值范围。

基础写法:内联定义枚举

直接在元素声明里定义枚举类型,适合只用一次的场景:

<xs:element name="status">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:enumeration value="draft"/>
      <xs:enumeration value="pending"/>
      <xs:enumeration value="approved"/>
      <xs:enumeration value="rejected"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>
登录后复制

这样,<status></status> 元素的内容只能是这四个字符串之一,大小写敏感,空白也不允许(除非显式加上 xs:whiteSpace value="collapse")。

复用写法:命名简单类型 + 枚举

如果多个地方要用同一组取值,建议单独定义命名类型,便于维护和复用:

<xs:simpleType name="OrderStatus">
  <xs:restriction base="xs:string">
    <xs:enumeration value="new"/>
    <xs:enumeration value="shipped"/>
    <xs:enumeration value="delivered"/>
    <xs:enumeration value="cancelled"/>
  </xs:restriction>
</xs:simpleType>

<xs:element name="orderStatus" type="OrderStatus"/>
登录后复制

注意:类型名首字母大写是常见约定,有助于区分内置类型。

LALAL.AI
LALAL.AI

AI人声去除器和声乐提取工具

LALAL.AI 196
查看详情 LALAL.AI

支持数字或布尔枚举

枚举不限于字符串。比如限制为整数:

<xs:simpleType name="PriorityLevel">
  <xs:restriction base="xs:integer">
    <xs:enumeration value="1"/>
    <xs:enumeration value="2"/>
    <xs:enumeration value="3"/>
  </xs:restriction>
</xs:simpleType>
登录后复制

布尔值也可以枚举,但通常不必要(因为 xs:boolean 本身只接受 true/false);若需语义化,可用字符串枚举如 "yes"/"no""on"/"off"

小贴士:避免常见坑

  • 每个 <enumeration></enumeration>value 属性必须是字面量,不能是表达式或变量
  • 重复的 value 会导致验证失败(XSD处理器会报错)
  • 如果想让空字符串也合法,需额外加一条 <enumeration value=""></enumeration>
  • 中文、特殊符号、带空格的值都可以,但要确保 XML 实例中完全一致(包括空格和大小写)

基本上就这些。枚举本质是值域约束,写清楚、保持唯一、注意类型匹配,就能稳稳生效。

以上就是如何在XSD中创建枚举类型,限制元素只能取预定义列表中的值?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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