DTD 构建块
XML 构建块 (DTD 视角)
Section titled “XML 构建块 (DTD 视角)”XML 文档由几个基本组件构成。理解这些组件对于定义文档结构至关重要,无论您是使用较旧的 DTD (Document Type Definition) 还是更现代的 XML Schema (XSD)。
注意:虽然此处介绍了 DTD 以提供背景信息,但考虑到其更强大的功能和灵活性,XML Schema (XSD) 是现代应用程序中推荐用于定义 XML 结构的标准。
XML 文档的核心组件
Section titled “XML 文档的核心组件”从结构定义的角度来看(例如 DTD 或 XSD),XML 文档主要由以下部分组成:
- Elements(元素):数据和结构的主要容器。
- Attributes(属性):提供关于元素的额外信息的修饰符。
- Entities(实体):特殊字符或可重用文本的占位符。
- PCDATA (Parsed Character Data,解析字符数据):元素内由解析器处理的文本内容。
- CDATA (Character Data,字符数据):解析器忽略的文本块,将其视为字面字符处理。
Elements(元素)
Section titled “Elements(元素)”Elements 是 XML 的主力,定义结构并包含内容。它们由开始标签、内容和结束标签组成,如果为空,也可以只是一个自闭合标签。
示例:
<note> <to>Recipient</to> <message>This is the content.</message></note>
<image source="logo.png" /> <!-- Empty element -->Elements 可以包含文本 (PCDATA)、其他 Elements(嵌套结构)或为空。
Attributes(属性)
Section titled “Attributes(属性)”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(实体)
Section titled “Entities(实体)”Entities 是表示其他内容的符号名称。它们主要用于两个目的:表示特殊字符(如 < 作为 <)和定义可重用的文本块或外部内容(在 DTD 中更常见)。
当 XML 解析器遇到实体引用(如 <)时,它会将其替换为该实体所代表的内容。
XML 中预定义的实体:
| 实体引用 | 字符 |
|---|---|
| < | < |
| > | > |
| & | & |
| " | " |
| ' | ' |
DTD 允许定义自定义实体,但与使用 XML Schema 或其他处理技术中的机制相比,这种做法现在已不那么常见。
PCDATA (Parsed Character Data,解析字符数据)
Section titled “PCDATA (Parsed Character Data,解析字符数据)”PCDATA 指的是在 Element 的开始和结束标签之间找到的文本内容。
至关重要的是,这段文本由 XML 处理器进行 解析。这意味着解析器将检查文本中是否存在任何标记(如嵌套元素),并展开任何实体引用(如 & 会被转换回 &)。
示例:在 <message>Say "Hello"!</message> 中,内容 Say "Hello"! 是 PCDATA。解析器识别 " 并理解它代表双引号字符。
在 PCDATA 中直接包含 <、& 或有时 > 等字符需要使用它们各自的实体引用(<、&、>)。
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 段内部,< 和 & 字符无需使用 < 和 & 进行转义。