如何设计XML Schema?请介绍XML Schema数据类型?
- 内容介绍
- 相关推荐
本文共计1172个文字,预计阅读时间需要5分钟。
XML Schema 的设计本质是定义一套可验证的 XML 文档结构约束。它不是随意编写标签,而是围绕哪些元素可以出现、以什么顺序出现、出现几次、值的类型是什么、是否允许为空等关键问题展开。
设计时建议从实际XML实例出发,先梳理业务数据结构,再反向定义Schema。例如一个订单XML含<orderID>、<date>、<items>等节点,就对应在Schema中声明<xs:element name="orderID" type="xs:string"/>、<xs:element name="date" type="xs:date"/>等。
- 根元素必须是
<xs:schema>,命名空间固定为http://www.w3.org/2001/XMLSchema - 用
xs:element声明元素,通过type属性指定数据类型,minOccurs/maxOccurs控制出现次数 - 用
xs:complexType封装含子元素或属性的结构(如<address><city>...</city><zip>...</zip></address>) - 用
xs:simpleType自定义取值受限的简单类型(如只允许0–100的整数、固定几个枚举值)
内置简单数据类型常用清单
XML Schema提供40多种内置简单类型,覆盖日常绝大多数场景。它们都属于xs:命名空间,使用时需带前缀(如xs:string)。
-
文本类:
xs:string(任意字符串)、xs:normalizedString(自动压缩连续空白)、xs:token(进一步去除首尾空格和换行) -
数值类:
xs:integer(整数)、xs:decimal(高精度小数)、xs:float/xs:double(浮点数)、xs:byte/xs:short/xs:long(不同范围整型) -
时间类:
xs:date(格式YYYY-MM-DD)、xs:time(HH:MM:SS)、xs:dateTime(含日期与时间,如2025-12-19T18:59:00) -
逻辑与标识类:
xs:boolean(true/false或1/0)、xs:ID(唯一标识符,用于内部引用)、xs:IDREF(引用同文档中某个xs:ID值)
自定义简单类型的关键方法
当内置类型不够用时,用<xs:simpleType>配合<xs:restriction>创建约束型新类型。这是最常用也最实用的扩展方式。
- 限定数值范围:
<xs:minInclusive value="0"/>+<xs:maxInclusive value="100"/>组合,可定义0–100的整数类型 - 控制小数精度:
<xs:fractionDigits value="2"/>限制最多2位小数;<xs:totalDigits value="5"/>限制总位数(含小数点前) - 枚举取值:
<xs:enumeration value="active"/>、<xs:enumeration value="inactive"/>可限定字段只能是这两个值之一 - 正则匹配:
<xs:pattern value="[A-Z]{2}\d{6}"/>要求值为2个大写字母加6位数字(如AB123456) - 空白处理:
<xs:whiteSpace value="collapse"/>自动将多个空格/制表符/换行转为单空格并去首尾
复杂类型与元素组合逻辑
复杂类型(xs:complexType)用于描述“有内容结构”的元素,比如包含多个子元素、带属性、或二者兼有。它决定了元素的“骨架”。
- 序列结构(
<xs:sequence>):子元素必须严格按声明顺序出现,如<name>后必须是<age> - 选择结构(
<xs:choice>):子元素中仅可出现其一,如支付方式选<cash>或<card> - 分组复用(
<xs:group>):把常用元素组合打包,便于多处引用,避免重复定义 - 属性声明(
<xs:attribute>):只能出现在complexType内,且必须是简单类型(如xs:string或自定义simpleType) - 混合内容(
mixed="true"):允许元素内同时存在文本和子元素,适合富文本场景
本文共计1172个文字,预计阅读时间需要5分钟。
XML Schema 的设计本质是定义一套可验证的 XML 文档结构约束。它不是随意编写标签,而是围绕哪些元素可以出现、以什么顺序出现、出现几次、值的类型是什么、是否允许为空等关键问题展开。
设计时建议从实际XML实例出发,先梳理业务数据结构,再反向定义Schema。例如一个订单XML含<orderID>、<date>、<items>等节点,就对应在Schema中声明<xs:element name="orderID" type="xs:string"/>、<xs:element name="date" type="xs:date"/>等。
- 根元素必须是
<xs:schema>,命名空间固定为http://www.w3.org/2001/XMLSchema - 用
xs:element声明元素,通过type属性指定数据类型,minOccurs/maxOccurs控制出现次数 - 用
xs:complexType封装含子元素或属性的结构(如<address><city>...</city><zip>...</zip></address>) - 用
xs:simpleType自定义取值受限的简单类型(如只允许0–100的整数、固定几个枚举值)
内置简单数据类型常用清单
XML Schema提供40多种内置简单类型,覆盖日常绝大多数场景。它们都属于xs:命名空间,使用时需带前缀(如xs:string)。
-
文本类:
xs:string(任意字符串)、xs:normalizedString(自动压缩连续空白)、xs:token(进一步去除首尾空格和换行) -
数值类:
xs:integer(整数)、xs:decimal(高精度小数)、xs:float/xs:double(浮点数)、xs:byte/xs:short/xs:long(不同范围整型) -
时间类:
xs:date(格式YYYY-MM-DD)、xs:time(HH:MM:SS)、xs:dateTime(含日期与时间,如2025-12-19T18:59:00) -
逻辑与标识类:
xs:boolean(true/false或1/0)、xs:ID(唯一标识符,用于内部引用)、xs:IDREF(引用同文档中某个xs:ID值)
自定义简单类型的关键方法
当内置类型不够用时,用<xs:simpleType>配合<xs:restriction>创建约束型新类型。这是最常用也最实用的扩展方式。
- 限定数值范围:
<xs:minInclusive value="0"/>+<xs:maxInclusive value="100"/>组合,可定义0–100的整数类型 - 控制小数精度:
<xs:fractionDigits value="2"/>限制最多2位小数;<xs:totalDigits value="5"/>限制总位数(含小数点前) - 枚举取值:
<xs:enumeration value="active"/>、<xs:enumeration value="inactive"/>可限定字段只能是这两个值之一 - 正则匹配:
<xs:pattern value="[A-Z]{2}\d{6}"/>要求值为2个大写字母加6位数字(如AB123456) - 空白处理:
<xs:whiteSpace value="collapse"/>自动将多个空格/制表符/换行转为单空格并去首尾
复杂类型与元素组合逻辑
复杂类型(xs:complexType)用于描述“有内容结构”的元素,比如包含多个子元素、带属性、或二者兼有。它决定了元素的“骨架”。
- 序列结构(
<xs:sequence>):子元素必须严格按声明顺序出现,如<name>后必须是<age> - 选择结构(
<xs:choice>):子元素中仅可出现其一,如支付方式选<cash>或<card> - 分组复用(
<xs:group>):把常用元素组合打包,便于多处引用,避免重复定义 - 属性声明(
<xs:attribute>):只能出现在complexType内,且必须是简单类型(如xs:string或自定义simpleType) - 混合内容(
mixed="true"):允许元素内同时存在文本和子元素,适合富文本场景

