下面这份 XML Schema (XSD) 终极参考手册 是你这辈子写 XSD 能用到的最全、最实用的一页纸。
建议直接收藏、打印、打印贴墙,写 XML/XSD 接口再也不用查文档了。
1. 根结构(永远这样开头的 8 行)
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://yourcompany.com/ns/order"
xmlns:tns="http://yourcompany.com/ns/order"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
version="1.0">
2. 所有常用内置数据类型速查(直接背)
| 类别 | 类型名 | 推荐指数 | 典型用途 |
|---|---|---|---|
| 字符串 | xs:string | 4 stars | 描述、备注、富文本 |
| xs:token | 5 stars | 名字、标题、关键词(去首尾空格) | |
| xs:language | 4 stars | zh-CN、en-US | |
| 数值 | xs:integer | 5 stars | 所有整数 |
| xs:nonNegativeInteger | 5 stars | 数量、库存、年龄 | |
| xs:positiveInteger | 5 stars | 件数、排名 | |
| xs:long | 4 stars | 雪花ID、分布式ID | |
| xs:decimal | 5 stars | 钱、重量、经纬度(必配 fractionDigits) | |
| 日期时间 | xs:date | 5 stars | 生日、订单日期 |
| xs:dateTime | 5 stars | 创建时间、支付时间(中国用 +08:00) | |
| xs:gYearMonth | 4 stars | 信用卡有效期 2028-11 | |
| 其他 | xs:boolean | 5 stars | true/false |
| xs:base64Binary | 5 stars | 图片、文件上传 | |
| xs:anyURI | 5 stars | 网址、图片链接 | |
| xs:ID / xs:IDREF | 4 stars | XML 内唯一标识和引用 |
3. 最常用“黄金代码片段”(直接复制)
<!-- 富文本(所有项目必抄) -->
<xs:complexType name="RichText" mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="b" type="tns:RichText"/>
<xs:element name="i" type="tns:RichText"/>
<xs:element name="u" type="tns:RichText"/>
<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="16"/>
<xs:fractionDigits value="2"/>
<xs:minInclusive value="0"/>
</xs:restriction>
</xs:simpleType>
<!-- 可无限扩展节点(Spring/MyBatis/Maven 都在用) -->
<xs:complexType name="Extensible">
<xs:sequence>
<xs:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="skip"/>
</xs:complexType>
<!-- 元素替换(支付、地址、XHTML h1~h6) -->
<xs:element name="payment" abstract="true" type="tns:Payment"/>
<xs:element name="alipay" substitutionGroup="tns:payment" type="tns:Alipay"/>
<xs:element name="wechat" substitutionGroup="tns:payment" type="tns:Wechat"/>
<xs:element name="card" substitutionGroup="tns:payment" type="tns:Card"/>
4. 所有指示器 & 通配符一览表
| 关键字 | 写在哪 | 作用 |
|---|---|---|
| xs:sequence | complexType 内 | 必须按顺序 |
| xs:choice | complexType 内 | 只能选一个(配合 unbounded 做富文本) |
| xs:all | complexType 内 | 都出现但顺序随意(每个只能 0..1) |
| minOccurs / maxOccurs | element、sequence、choice 上 | 出现次数 |
| mixed=”true” | complexType 上 | 允许文本+子元素混排 |
| sequence/choice 内 | 任意元素 | |
| complexType 最后 | 任意属性 | |
| substitutionGroup | 全局 element 上 | 元素替换(多态) |
| abstract=”true” | 全局 element 上 | 强制必须被替换 |
| nillable=”true” | element 上 | 允许 |
5. 终极记忆口诀(10 秒背会)
| 需求 | 永远只写这行代码 |
|---|---|
| 富文本 | mixed=”true” + choice + unbounded |
| 列表 | maxOccurs=”unbounded” |
| 插件/扩展点 | <xs:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded"/> |
| 任意属性 | <xs:anyAttribute namespace="##any" processContents="skip"/> |
| 金额 | xs:decimal + fractionDigits=”2″ |
| 名字/标题 | xs:token |
| 中国时间 | xs:dateTime → 2025-11-28T14:30:25+08:00 |
| 支付/否 | xs:boolean |
| 图片上传 | xs:base64Binary |
| 多态(支付、地址) | 全局头元素 + abstract=”true” + substitutionGroup |
把这页保存为 XSD-Reference-CheatSheet.md 或直接打印贴在工位,写 XSD 的速度立刻提升 10 倍,永远不需要再去 W3Schools 或 MDN 查了。
需要我再给你一份可直接下载的 PDF / Markdown / Word 版本吗?一句话就发。