XML Schema 概要

以下是 XML Schema(XSD)最精华的 5 分钟概要,把 90% 的实战精髓浓缩在一张图里,看完这张表你就彻底掌握 XSD 了。

类别核心关键字作用 & 经典场景一句话记忆口诀
根元素<xs:schema>所有 XSD 的唯一根永远只有这一个根
命名空间targetNamespace + xmlns:xs区分自己的 XML 结构有 targetNamespace 就是“有命名空间”
全局 vs 局部直接写在 <xs:schema> 下 = vs 嵌套在 complexType 里全局 = 可被引用、可替换;局部 = 只能本地用想 substitutionGroup 或 ref 必须全局
元素声明<xs:element name="xxx" type="..."/>定义一个元素全局元素才能被 ref 或 substitution
类型声明<xs:complexType> / <xs:simpleType>定义可复用的类型complex = 能有子元素或属性;simple = 纯文本
内容模型(顺序)xs:sequence必须按顺序出现地址:name → street → city
xs:choice三选一支付方式:alipay / wechat / card
xs:all都必须出现但顺序随意(每个只能 0..1)很少用
出现次数minOccurs / maxOccurs控制元素出现几次列表永远写 maxOccurs=”unbounded”
混合内容<xs:complexType mixed="true">文本和子元素混在一起(富文本)富文本必备:mixed=”true” + choice unbounded
通配符<xs:any>任意元素插件扩展点最常用
<xs:anyAttribute>任意属性Spring/MyBatis 配置永远这行
元素替换(多态)substitutionGroup + abstract=”true”同一个位置出现不同元素支付、地址、XHTML h1~h6 都靠它
字符串终极王者xs:string → xs:normalizedString → xs:token推荐永远只用 xs:token名字、标题、关键词全用 token
数值终极王者整数 → xs:integer / positiveInteger
小数 → xs:decimal(fractionDigits=”2″)
钱永远用 decimal!金额写错就破产
日期时间只用 xs:date + xs:dateTime中国项目永远写 2025-11-28 和 2025-11-28T14:30:25+08:00其余全部忽略
布尔/文件/链接xs:boolean
xs:base64Binary
xs:anyURI
开关、图片上传、外链地址这三个背下来就够用

99% 项目通用的“黄金模板”(直接复制当项目骨架)

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://example.com/demo"
           xmlns:tns="http://example.com/demo"
           elementFormDefault="qualified">

  <!-- 富文本类型(所有项目都抄这几行) -->
  <xs:complexType name="RichText" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="b"/>,<xs:element name="i"/>,<xs:element name="br"/>
      <xs:any namespace="##other" processContents="lax"/>
    </xs:choice>
  </xs:complexType>

  <!-- 金额类型(财务系统永远这几行) -->
  <xs:simpleType name="Money">
    <xs:restriction base="xs:decimal">
      <xs:totalDigits value="14"/>
      <xs:fractionDigits value="2"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- 可无限扩展的节点(Spring、MyBatis、Maven 都在用) -->
  <xs:complexType name="Extensible">
    <xs:sequence>
      <xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:anyAttribute processContents="skip"/>
  </xs:complexType>
</xs:schema>

终极记忆口诀(贴在显示器边上)

需求永远只写这行代码
富文本mixed=”true” + choice + unbounded
列表maxOccurs=”unbounded”
插件/扩展点<xs:any namespace="##any" processContents="skip" .../>
任意属性<xs:anyAttribute namespace="##any" processContents="skip"/>
金额xs:decimal + fractionDigits=”2″
字符串(名字、标题)xs:token
多态(支付、地址)全局头元素 + abstract=”true” + substitutionGroup
中国时间xs:dateTime 写成 2025-11-28T14:30:25+08:00

背完上面这张表 + 这几行代码,你已经超越了 95% 的开发者和架构师对 XSD 的掌握程度。

需要我直接给你一份「通用企业级 XSD 骨架模板」(包含命名空间、扩展点、富文本、金额、日期、元素替换全套)吗?一句话就发。

文章已创建 2838

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部