Skip to content

XML 文档类型

XML 文档验证:格式良好(Well-Formed) vs 有效(Valid)

Section titled “XML 文档验证:格式良好(Well-Formed) vs 有效(Valid)”

理解“格式良好”(Well-Formed)的 XML 文档与“有效”(Valid)的 XML 文档之间的区别至关重要。

一个 格式良好(Well-Formed) 的文档仅遵循基本的 XML 语法规则。

一个 有效(Valid) 的文档不仅格式良好,还符合在单独的模式(Schema)或定义文件(Definition File)中定义的一组特定的结构和内容规则。

如前所述,格式良好的 XML 文档遵循以下基本语法规则:

  • 必须有且只有一个根元素(Root Element)。
  • 所有元素必须有闭合标签(Closing Tag)或为自闭合(Self-Closing)。
  • 标签区分大小写(Case-Sensitive)。
  • 元素必须正确嵌套(Properly Nested)。
  • 属性值(Attribute Values)必须用引号(单引号或双引号)括起来。

格式良好文档的示例:

<?xml version="1.0" encoding="UTF-8"?>
<note date="2023-10-27">
<to>Alice</to>
<from>Bob</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

该文档遵循所有语法规则,因此它是格式良好的。但是,我们尚不清楚它是否根据任何特定规则集是 有效 的。

有效性增加了一层约束。一个有效的 XML 文档首先必须是格式良好的。此外,它还必须遵守由 文档类型定义(DTD - Document Type Definition) 或 XML Schema(XSD - XML Schema Definition) 定义的结构规则。

这些定义指定了以下内容:

  • 文档中允许出现哪些元素。
  • 哪些元素可以出现在其他元素内部(父子关系 Parent-Child Relationships)。
  • 子元素可以出现的顺序和次数。
  • 每个元素允许或必需的属性(Attribute)。
  • 元素内容和属性值允许的数据类型(Data Types)(XSD 处理能力更强)。

定义这些规则的两种主要机制是:

  • DTD(Document Type Definition): 最初的方法,使用非 XML 语法。
  • XML Schema(XSD - XML Schema Definition): 现代的、更强大、更灵活的方法,它本身使用 XML 语法。

建议: 对于新项目,由于其更丰富的功能集,包括数据类型和命名空间支持,请使用 XML Schema(XSD)。

使用模式(如 XSD)来验证 XML 文档在以下情况下会很有益:

  • 数据完整性至关重要(Data Integrity is Critical): 确保数据在处理前符合预期的格式。
  • 需要互操作性(Interoperability is Required): 定义不同系统或组织之间数据交换的清晰约定。
  • 自动化处理(Automated Processing): 保证 XML 数据结构符合下游应用的期望。
  • 复杂结构(Complex Structures): 管理和执行复杂 XML 词汇表(Vocabularies)的规则。
  • 工具优势(Tooling Benefits): 利用支持模式的编辑器、代码生成器或数据绑定框架。

本质上,验证提供了一种正式的方式来保证 XML 数据的结构和质量。

虽然通常很有益,但定义和使用模式并不总是必要的:

  • 简单或内部使用(Simple or Internal Use): 对于非常简单的 XML 结构或仅在单一受控应用内部使用的数据,其开销可能不值得。
  • 实验/原型设计(Experimentation/Prototyping): 在早期开发阶段,可能只需关注格式良好性直到结构稳定下来。
  • 松散结构化数据(Loosely Structured Data): 如果 XML 结构有意地灵活或不可预测,严格验证可能适得其反(尽管 XSD 提供了像 xs:any 这样的特性来实现受控的灵活性)。

即使没有针对模式进行正式验证,确保您的 XML 是格式良好的始终是必不可少的。

提示:现代 IDE(集成开发环境)和 XML 编辑器通常提供内置的 XML 验证工具,可以检查格式良好性以及根据指定的 DTD 或 XSD 进行验证。