Skip to content

DTD 构建块

XML 文档由几个基本组件构成。理解这些组件对于定义文档结构至关重要,无论您是使用较旧的 DTD (Document Type Definition) 还是更现代的 XML Schema (XSD)。

注意:虽然此处介绍了 DTD 以提供背景信息,但考虑到其更强大的功能和灵活性,XML Schema (XSD) 是现代应用程序中推荐用于定义 XML 结构的标准。

从结构定义的角度来看(例如 DTD 或 XSD),XML 文档主要由以下部分组成:

  • Elements(元素):数据和结构的主要容器。
  • Attributes(属性):提供关于元素的额外信息的修饰符。
  • Entities(实体):特殊字符或可重用文本的占位符。
  • PCDATA (Parsed Character Data,解析字符数据):元素内由解析器处理的文本内容。
  • CDATA (Character Data,字符数据):解析器忽略的文本块,将其视为字面字符处理。

Elements 是 XML 的主力,定义结构并包含内容。它们由开始标签、内容和结束标签组成,如果为空,也可以只是一个自闭合标签。

示例:

<note>
<to>Recipient</to>
<message>This is the content.</message>
</note>
<image source="logo.png" /> <!-- Empty element -->

Elements 可以包含文本 (PCDATA)、其他 Elements(嵌套结构)或为空。

Attributes 提供关于 Elements 的元数据或补充信息。它们作为名称-值对出现在 Element 的开始标签内部,值总是用引号括起来。

示例:

<book isbn="978-3-16-148410-0" language="en">
<title>XML Explained</title>
</book>

在此示例中,isbn 和 language 是 Attribute 名称,而 "978-3-16-148410-0" 和 "en" 是它们各自的值。Attributes 通常描述 Element 本身的属性,而不是其核心内容。

Entities 是表示其他内容的符号名称。它们主要用于两个目的:表示特殊字符(如 < 作为 &lt;)和定义可重用的文本块或外部内容(在 DTD 中更常见)。

当 XML 解析器遇到实体引用(如 &lt;)时,它会将其替换为该实体所代表的内容。

XML 中预定义的实体:

实体引用字符
<<
>>
&&
""
''

DTD 允许定义自定义实体,但与使用 XML Schema 或其他处理技术中的机制相比,这种做法现在已不那么常见。

PCDATA (Parsed Character Data,解析字符数据)

Section titled “PCDATA (Parsed Character Data,解析字符数据)”

PCDATA 指的是在 Element 的开始和结束标签之间找到的文本内容。

至关重要的是,这段文本由 XML 处理器进行 解析。这意味着解析器将检查文本中是否存在任何标记(如嵌套元素),并展开任何实体引用(如 &amp; 会被转换回 &)。

示例:在 <message>Say &quot;Hello&quot;!</message> 中,内容 Say &quot;Hello&quot;! 是 PCDATA。解析器识别 &quot; 并理解它代表双引号字符。

在 PCDATA 中直接包含 <、& 或有时 > 等字符需要使用它们各自的实体引用(&lt;、&amp;、&gt;)。

CDATA (Character Data Sections,字符数据段)

Section titled “CDATA (Character Data Sections,字符数据段)”

CDATA 段提供了一种方法来包含含有通常会被解释为 XML 标记的字符的文本块,而无需对它们进行转义。

CDATA 段内的文本 不 由 XML 处理器解析。它被视为字面字符数据处理。

CDATA 段以 <![CDATA[ 开始,以 ]]> 结束。它们对于嵌入代码片段或包含许多特殊字符的文本非常有用。

示例:

<script>
<![CDATA[
function checkValue(val) {
if (val < 10 && val > 0) {
// do something
}
}
]]>
</script>

在 CDATA 段内部,< 和 & 字符无需使用 &lt; 和 &amp; 进行转义。