XSD – schema 元素

XSD 中 <xs:schema> 元素 —— 所有 XSD 的根元素(最完整、最实用的解释)

<xs:schema> 是每一个 XSD 文件唯一且必须的根元素,相当于“整张设计图的图框”。它本身不定义任何数据,而是负责声明“命名空间、版本、语言、导入其他 XSD、默认行为”等全局规则。

1. 基本骨架(99% 项目都长这样)

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

           <!-- 强烈推荐:给你的 XSD 起一个命名空间 -->
           targetNamespace="http://www.example.com/order"

           <!-- 必须声明你自己的命名空间前缀(常用 tn、ns、ord、bk 等) -->
           xmlns:ord="http://www.example.com/order"

           <!-- 下面这两个属性几乎所有企业规范都要求写 qualified -->
           elementFormDefault="qualified"
           attributeFormDefault="unqualified"

           <!-- 可选:XSD 版本,目前常用 1.0 或 1.1 -->
           version="1.0">

    <!-- 这里开始写你的 element、complexType、simpleType ... -->

</xs:schema>

2. <xs:schema> 所有常用属性完整表(带推荐值)

属性名是否必填推荐值含义与最佳实践
xmlns:xs必填http://www.w3.org/2001/XMLSchema声明 XSD 本身的命名空间(固定写法)
targetNamespace强烈推荐你的域名倒写给这个 XSD 定义的元素起一个“归属空间”,避免全球冲突
xmlns:xxx(自定义前缀)必填xmlns:ord / xmlns:tn声明 targetNamespace 的前缀,后面引用自己的类型必须用这个前缀
elementFormDefault推荐qualified所有局部元素必须带命名空间前缀(企业规范强制)
attributeFormDefault推荐unqualified属性不需要命名空间前缀(几乎所有人这样写)
version推荐1.0 或 1.1版本号,便于后期升级(写在命名空间里也可以)
id可选给 schema 本身起个 ID,几乎不用
xml:lang可选zh-CN / en声明文档语言,对注释有用
finalDefault很少用禁止某些类型的派生
blockDefault很少用禁止某些元素的替代

3. 两种最常见写法对比(看你有没有命名空间)

情况 A:没有命名空间(简单原型、配置文件常用)

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified">
    <!-- 内容 -->
</xs:schema>

对应的 XML 实例这样关联:

<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="books.xsd">

情况 B:有命名空间(企业、WebService 强制)

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.example.com/order"
           xmlns:ord="http://www.example.com/order"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">
    <!-- 内容 -->
</xs:schema>

对应的 XML 实例这样关联:

<ord:order xmlns:ord="http://www.example.com/order"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.example.com/order order.xsd">

4. 企业级标准模板(直接复制粘贴用)

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.yourcompany.com/ns/[module]"
           xmlns:tns="http://www.yourcompany.com/ns/[module]"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified"
           version="1.0">

    <!-- 可选:文档注释 -->
    <xs:annotation>
        <xs:documentation>
            订单模块 XSD
            版本:v1.0
            作者:张三
            日期:2025-11-28
        </xs:documentation>
    </xs:annotation>

    <!-- 这里开始写你的类型和元素 -->

</xs:schema>

5. 常见错误(你绝对会踩的坑)

错误写法正确做法后果
忘记写 targetNamespace加上 targetNamespace别人无法在有命名空间的 XML 中引用
elementFormDefault=”unqualified”改为 “qualified”验证时提示元素必须带前缀
没声明 xmlns:tns加上 xmlns:tns=”…”引用自己的类型时会报“未定义前缀”
把 xmlns:xs 写错成 xmlns:xsd必须是 xmlns:xs所有工具都认 xs,不认 xsd

记住一句话:
一个正规的 XSD,<xs:schema> 这几行写对了,后面 80% 的验证问题就没了!

需要我直接给你生成某个业务(如用户、订单、支付)的完整 <schema> 开头,直接告诉我业务域名和模块名就行~

文章已创建 2783

发表回复

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

相关文章

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

返回顶部