XML Schema 安装使用教程

一、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 为例)

  1. 安装 VSCode:https://code.visualstudio.com/
  2. 安装插件:
    • XML Language Support
    • XML Tools
  3. 在 settings.json 中配置 XSD schema path(可选)
  4. 保存 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。

十三、学习资源推荐


本文由"小奇Java面试"原创发布,转载请注明出处。

可以搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。

相关推荐
郭小李17 小时前
mybatis的 Mapper.xml语法
xml·java·mybatis
步行cgn18 小时前
为什么既要 web.xml 又要 springmvc.xml?能不能只配一个?
xml·前端·hive
SEO_juper3 天前
Go 站点地图生成器:从首页爬全站,一键生成 sitemap.xml
xml·开发语言·人工智能·golang·node.js·seo·外贸独立站
可爱系程序猿5 天前
XML 导入失败并指向 msxml6.dll:用最小样本区分解析错误与组件加载
xml·程序人生·电脑
SEO_juper5 天前
Node.js 重定向链检测工具:301 跳了几跳、有没有成环,一次看清
xml·开发语言·python·node.js·json·bash
步行cgn5 天前
Spring MVC 核心配置文件详解:springmvc.xml 每一行配置的意义
xml·spring·mvc
泡海椒7 天前
JQuick-SQL JQuickTable 模型:XML 动态 SQL 的表封装边界
xml·数据库·sql
supabc1237 天前
欧盟电子发票(XRechnung/Peppol/ZUGFeRD)踩坑记:用 Python 不装 Java 跑官方校验规则
xml·python·开源·电子发票·1024程序员节
zzu123zsw8 天前
当 GPU 加速渲染遇上无头组件:拆解 Yororen UI 在 GPUI 生态下的状态解耦与 XML 模板实践
xml·ui·rust·gui·gpui
麦序子9 天前
用 pdfplumber + 正则 解析工程量清单 PDF:提取项目编码、综合单价并导出 Excel
xml·pdf·python3.11