目录

  1. 实体概述
  2. 实体的类型
    • 通用实体
    • 参数实体
  3. 实体的声明
  4. 实体的引用
  5. 实体与外部文件
  6. DTD 中实体的实际应用
  7. 参考资料与外部链接

1. 实体概述

在 DTD (Document Type Definition) 中,实体是对文本内容的引用或替代。它们用于简化 XML 文档的写作,尤其是当文档中存在重复的文本或需要插入特殊字符时。实体是用来定义可以在 XML 文档中复用的字符或字符串,并且可以是内联的(如字符实体)或外部的(如文件引用)。

实体有助于提高文档的可读性和可维护性,避免冗余的内容,同时使得文档中可以处理特殊字符或标记。

2. 实体的类型

DTD 中的实体分为两种类型:通用实体参数实体

2.1 通用实体(General Entities)

通用实体是最常见的实体类型,它们表示一段文本、符号或字符数据,可以在整个文档中多次引用。通用实体分为两类:

  • 内部实体:定义在 DTD 中,直接存储内容。
  • 外部实体:定义为外部文件,引用该文件的内容。

内部实体 的声明语法如下:

<!ENTITY entity-name "entity-value">

外部实体 的声明语法如下:

<!ENTITY entity-name SYSTEM "file-path">

2.2 参数实体(Parameter Entities)

参数实体用于 DTD 本身的构建,通常用来定义 DTD 中的片段,便于在多个地方复用。参数实体仅在 DTD 中有效,不会在 XML 文档的内容部分引用。

参数实体的声明语法如下:

<!ENTITY % entity-name "entity-value">

例如,定义一个参数实体用于 DTD 中的通用标记:

<!ENTITY % example "example text">

在 DTD 中引用参数实体的语法是:

%example;

3. 实体的声明

实体声明的语法非常简单,基本上可以分为两类:字符实体和外部实体。

3.1 字符实体

字符实体通常用于插入特殊字符或重复的字符串。常见的字符实体包括 &lt;(表示小于符号 <)、&gt;(表示大于符号 >)等。

示例:

<!ENTITY lt "&lt;">
<!ENTITY gt "&gt;">

在 XML 文档中引用字符实体:

<example>&lt;Hello World&gt;</example>

3.2 外部实体

外部实体用于引用外部文件的内容,这在处理大型 XML 文档或重复的内容时特别有用。外部实体通过指定 SYSTEM 或 PUBLIC 来引用外部资源。

示例:

<!ENTITY example SYSTEM "example.txt">

在 XML 文档中引用外部实体:

<document>&example;</document>

4. 实体的引用

一旦声明了实体,就可以在 XML 文档中引用它们。引用实体时,使用 &entity-name; 语法。

  • 内部实体引用<example>&lt;Hello World&gt;</example> 这里,&lt; 会被替换为 <&gt; 会被替换为 >
  • 外部实体引用<document>&example;</document> 这里,&example; 会被替换为 example.txt 文件的内容。

5. 实体与外部文件

DTD 中的外部实体特别有用,当您需要将大型内容或常见的片段存储在外部文件中时。外部实体可以帮助减少冗余内容并增强文档的可维护性。

示例:外部实体

假设有一个名为 footer.txt 的文件,内容如下:

Footer Content

然后,在 DTD 中引用它:

<!ENTITY footer SYSTEM "footer.txt">

在 XML 文档中引用:

<document>
  <content>This is the main content.</content>
  <footer>&footer;</footer>
</document>

6. DTD 中实体的实际应用

示例 1:使用实体来避免冗余

如果您在多个地方使用相同的字符串,可以使用实体来减少冗余并简化文档维护:

<!ENTITY company-name "TechCorp">
<!ENTITY address "123 Tech Street, Silicon Valley">

在 XML 文档中引用:

<company>
  <name>&company-name;</name>
  <address>&address;</address>
</company>

示例 2:使用实体处理特殊字符

在 XML 中,某些字符具有特殊含义(如 <>&),可以通过字符实体来避免它们的冲突:

<!ENTITY lt "&lt;">
<!ENTITY gt "&gt;">

使用实体引用:

<example>&lt;xml&gt;</example>

示例 3:外部实体的应用

外部实体可以存储重复的文本内容,尤其是当该内容在多个 XML 文档中都需要出现时。

<!ENTITY footer SYSTEM "footer.txt">

然后在文档中引用该外部实体:

<content>
  <main>This is the main content.</main>
  <footer>&footer;</footer>
</content>

7. 参考资料与外部链接


总结

DTD 中的实体是用于引用或替代文本内容的工具,广泛应用于减少冗余、处理特殊字符和引用外部文件。实体分为通用实体和参数实体,分别用于存储文本和 DTD 本身的片段。了解如何正确使用实体可以有效地提高 XML 文档的可维护性和可扩展性。