XSD 校验工具

一份格式良好的 XML 文档仍可能是错的:缺少必需元素、给属性用了错误的数据类型,或元素顺序不对。XSD(XML 模式定义)精确地描述了文档应有的样子。这个校验工具把你的 XML 与它的 XSD 配对,运行 W3C XML Schema 校验器,并连同行号、元素以及被违反的具体约束,列出每一处违规。

如何依据 XSD 校验 XML

  1. 1

    粘贴两个文件

    一侧是 XML,另一侧是 XSD 模式。可以把多个模式一起粘贴。

  2. 2

    运行校验

    解析器把元素、属性和类型与模式声明逐一比对。

  3. 3

    查看错误

    每处违规都显示元素路径、期望的约束和实际值。

  4. 4

    修复并重新校验

    就地编辑并重新运行,无需重新加载。

XSD 检查什么

  • 元素名称和基数: 必需、可选、最小/最大出现次数。
  • 元素顺序: sequence、choice、all。
  • 属性的存在与类型: 必需 vs 可选、默认值、固定值。
  • 数据类型: xs:string、xs:integer、xs:decimal、xs:dateTime、xs:boolean、xs:anyURI、自定义。
  • 限制: 最小/最大长度、枚举、正则模式、最小/最大值。
  • 引用完整性: xs:key、xs:keyref、xs:unique 用于跨元素约束。

典型错误

错误 XSD 约束
缺少必需元素 <email> minOccurs="1"
<phone> 元素过多 超出 maxOccurs="2"
值「abc」不是有效的整数 type="xs:integer"
值「[email protected]」不符合模式 xs:string 上的 xs:pattern
元素顺序错误 xs:sequence
未知元素 <foo> 模式中未声明
重复键 违反 xs:unique

在 XSD 与替代方案之间选择

  • XSD: W3C 标准,冗长、强大、广泛支持。企业级 XML 的首选。
  • RELAX NG: 语法更简单,表达力相当。在文档格式中很流行(DocBook、TEI)。
  • Schematron: 基于规则,对文档运行 XPath 断言。适合超出结构范畴的业务规则。
  • DTD: 更老,表达力差得多。仍因 HTML 历史兼容性而在使用。

许多项目用 XSD 管结构,用 Schematron 管复杂的跨字段规则。

常见陷阱

  • 命名空间必须匹配。 如果 XSD 声明了 targetNamespace="http://example.com" 但 XML 没有使用该命名空间,校验会以「未找到声明」失败。
  • xs:anyType 不是万能逃生口。 它匹配任何内容,但完全不给你任何校验。
  • 默认值 只在属性缺失时生效。显式的空值(attr="")不会得到默认值。
  • 空白处理 因类型而异。xs:string 保留它,xs:token 折叠它,xs:normalizedString 把制表符/换行替换为空格。

调试工作流

  1. 先不带模式校验(格式良好性检查)。修掉所有解析错误。
  2. 然后依据模式校验。
  3. 聚焦第一个错误。 XSD 校验器有时会连锁报错;第一个通常最值得动手。
  4. 用 XPath 在大型文档中定位出问题的元素。

常见问题

不需要。可以分开粘贴,或在 XML 中通过 xsi:schemaLocation 引用模式。大多数工具两种方式都支持。

能。当出现来自不同命名空间的元素时,每个都需要自己的模式。把它们全部粘贴进来;校验器会全部加载。

XSD 1.0。底层的 libxml 引擎未实现 XSD 1.1,因此断言、条件类型、开放内容等 1.1 专有特性不会被强制校验。

不会。你的 XML 和模式只会发送到服务器以运行这一次请求的校验;之后不会被存储或记录。

相关工具

此工具还提供其他语言版本