XML

XML 知识量:7 - 28 - 99

3.4 DTD实体声明><

实体的概念与分类- 3.4.1 -

XML文档可以从许多不同的数据源或文件中提取所需的数据和文本片段,这就需要一个载体将这些数据或文本片段装载到XML文档中,这个载体就称为实体。

XML文档通过实体名称来引用实体,当XML处理器或其他程序处理XML文档时,就可以用实体名称代表的具体内容替换XML文档中的实体名称,从而组成一个完整的XML文档。可以将实体名称理解为一个指向具体资源的标记,最终,该资源会在XML文档中替换掉标记,成为完整的XML文档,标记(实体名称)起到指向和占位的作用。

实体有3种分类方式。

1、根据实体引用的位置可以分为:通用实体和参数实体。

  • 通用实体:只能用于XML文档中。

  • 参数实体:只能用于DTD文档中。

2、根据实体与文档的关系可以分为:内部实体和外部实体。

  • 内部实体:所代表的内容和实体声明在同一个文档中。

  • 外部实体:所代表的内容在实体声明文档之外。

3、根据实体本身的内容可以分为:解析实体和未解析实体。

  • 解析实体:其内容都是可解析的XML文本、字符和数据。

  • 未解析实体:其内容是XML处理器不能直接解析的,例如图像、声音等。

内部通用实体- 3.4.2 -

通用实体可以分为:内部通用实体和外部通用实体。

内部通用实体的作用类似于编程语言中的宏替换,其语法为:

<!ENTITY 实体名称 "实体内容">

其中:

  • <!表示实体定义的开始,ENTITY是实体定义的关键字,且必须大写。<!与ENTITY之间不能有空格。

  • 实体名称是自定义的实体的名称。

  • 实体内容是要引用的具体内容。

引用内部通用实体的语法为:

&实体名称;

其中,“&”、“实体名称”和“;”之间都不能有空格。

下面的示例定义了一个内部通用实体:

<!ENTITY 测试结果 "合格">

在XML文档中引用实体:

<结果>&测试结果;</结果>

XML处理器解析后的结果为:

<结果>合格</结果>

外部通用实体- 3.4.3 -

外部通用实体是存在于XML文档之外的独立的XML文档片段,其语法为:

<!ENTITY 实体名称 SYSTEM "URL">

其中:

  • <!表示实体定义的开始,ENTITY是实体定义的关键字,且必须大写。<!与ENTITY之间不能有空格。

  • 实体名称是自定义的实体的名称。

  • SYSTEM是定义外部通用实体的关键字,且必须大写。

  • URL是要引入的XML文件的路径。

下面的示例定义了一个外部通用实体:

<!ENTITY 测试结果 SYSTEM "合格.txt">

外部通用实体“测试结果”的内容来自合格.txt文件,引用外部通用实体的语法与引用内部通用实体的语法相同。

内部参数实体- 3.4.4 -

参数实体分为:内部参数实体和外部参数实体。

内部参数实体是指声明在DTD内部的参数实体,其语法为:

<!ENTITY % 实体名称 "实体内容">

其中:

  • <!表示实体定义的开始,ENTITY是实体定义的关键字,且必须大写。<!与ENTITY之间不能有空格。

  • %为定义参数实体的标记,不能省略,%与ENTITY之间有空格。

  • 实体名称是自定义的实体的名称,与%之间有空格。

  • 实体内容是要引用的具体内容。

在DTD文档中引用内部参数实体的语法为:

%实体名称;

其中,“%”、“实体名称”和“;”之间都不能有空格。

下面的示例定义了一个内部参数实体:

<!ENTITY % 学生信息 "(姓名,年龄)">

在DTD文档中引用实体:

<!ELEMENT 学生 %学生信息;>

引用后最终的DTD内容为:

<!ELEMENT 学生 (姓名,年龄)>

外部参数实体- 3.4.5 -

外部参数实体是存在于DTD文档之外的独立DTD文档片段,其语法为:

<!ENTITY % 实体名称 SYSTEM "URL">

其中:

  • <!表示实体定义的开始,ENTITY是实体定义的关键字,且必须大写。<!与ENTITY之间不能有空格。

  • %为定义参数实体的标记,不能省略,%与ENTITY之间有空格。

  • 实体名称是自定义的实体的名称,与%之间有空格。

  • SYSTEM是定义外部参数实体的关键字,且必须大写。

  • URL是要引入的其他DTD文件的路径。

下面的示例定义了一个外部参数实体:

<!ENTITY % 学生信息 SYSTEM "学生信息.dtd">

外部参数实体“学生信息”的内容来自学生信息.dtd文件,引用外部参数实体的语法与引用内部参数实体的语法相同。