一、XML Schema 简介
XML Schema(XSD,全称 XML Schema Definition)是用于定义 XML 文档结构、数据类型和数据约束的标准方式。它比 DTD 更加强大,支持数据类型、默认值、命名空间等,是企业级 XML 应用推荐的验证方式。
二、XSD 与 DTD 的对比
特性 | DTD | XSD (XML Schema) |
---|---|---|
语法格式 | SGML 风格 | XML 本身 |
数据类型支持 | 无 | 强类型(string、int 等) |
命名空间支持 | 不支持 | 支持 |
可扩展性 | 较差 | 很好 |
可读性 | 一般 | 较好(XML 结构) |
三、XSD 应用场景
- 校验 XML 配置文件格式
- 定义 Web 服务数据结构(如 SOAP)
- 系统间数据交换(如订单、票据、接口返回值)
- 配合 JAXB/JAXP 等框架生成 Java 实体类
四、编辑和验证工具
工具 | 功能 |
---|---|
VSCode + XML 插件 | 支持 XSD 自动补全和验证 |
Oxygen XML Editor | 商业级 XML/XSD 编辑器 |
XMLSpy | 专业 XML/XSD 建模工具 |
xmllint | 命令行验证工具 |
五、XSD 安装与配置(以 VSCode 为例)
- 安装 VSCode:https://code.visualstudio.com/
- 安装插件:
XML Language Support
XML Tools
- 在
settings.json
中配置 XSD schema path(可选) - 保存 XML 文件时自动触发校验
六、XML Schema 示例
示例 XML (person.xml
)
xml
<?xml version="1.0"?>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="person.xsd">
<name>小奇</name>
<age>25</age>
</person>
示例 XSD (person.xsd
)
xml
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
七、常用数据类型
xs:string
xs:integer
xs:boolean
xs:date
xs:decimal
xs:ID
、xs:IDREF
八、常用约束示例
xml
<xs:element name="phone">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\d{11}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
xml
<xs:element name="gender">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="男"/>
<xs:enumeration value="女"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
九、命名空间支持
xml
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.com/person"
xmlns="http://www.example.com/person"
elementFormDefault="qualified">
十、Java 中使用 XSD 校验
java
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new File("person.xsd"));
Validator validator = schema.newValidator();
validator.validate(new StreamSource(new File("person.xml")));
十一、命令行校验
使用 xmllint
工具:
bash
xmllint --noout --schema person.xsd person.xml
十二、常见问题
Q1: 报错"Element not allowed here"?
- 元素顺序与定义不一致;
- 子元素缺失;
- 命名空间未匹配或未声明。
Q2: VSCode 不识别 XSD?
- 确保安装 XML 插件;
- 检查文件引用路径是否正确;
- 是否缺少
xsi:noNamespaceSchemaLocation
。
十三、学习资源推荐
- W3School XSD 教程
- MDN XML Schema
- Oxygen XML 编辑器
- B站搜索"小奇Java面试"获取 XSD 教程视频
本文由"小奇Java面试"原创发布,转载请注明出处。
可以搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。
