ENTITY

ENTITY 语句用于在 DTD 中定义实体,供与 DTD 关联的 XML 文档以及 DTD 本身使用。 ENTITY 提供缩写的条目,以便放入 XML 文档。 缩写的名称是您为 name 参数提供的内容。 在重复可以存储在独立文件中的信息或大块文本时,ENTITY 非常有用。 在 XML 文档中,缩写的名称后接 ; (&abbName;)。

DTD 和 XML 文件中使用的 ENTITY 示例如下所示。

longtext.txt

以下是 longtext.txt 的内容:

<definition>ATTLIST(attribute list) Declares a list of XML attributes. These attributes are qualified by name, data type, implied default values, and the name of any elements that permit their use.

</definition>

dtd_chunk.dtd

sample.dtd

分析 DTD 文档时,会得到下列结果。 请注意,该替换只是在内存中进行。 分析器不真正更改文件。

sample.xml

已分析 XML 文档的结果。

分析 XML 文档时,会得到下列结果:

Definition list for eXtensible Markup Language attributes used in DTD files.

top file

ATTLIST(attribute list) Declares a list of XML attributes. These attributes are qualified by name, data type, implied default values, and the name of any elements that permit their use.

Conclusion of definition list for eXtensible Markup Language attributes.

语法

<!ENTITY [%] name [SYSTEM|PUBLIC publicID] resource [NDATA notation] >

参数

  • name
    实体的名称。 所有实体定义的必选项。
  • publicID
    实体的公共标识符。 只有声明使用 PUBLIC 关键字时才是必选项。
  • resource
    实体的值。 所有实体定义的必选项。 如果是内部实体,则是已分析并展开的文本字符串。 如果是外部实体,则是标识外部实体(例如文件名或文件类型)的统一资源标识符 (URI)。
  • notation
    DTD 中的其他位置使用 NOTATION 语句声明的表示法名称。 只有使用非 XML 数据 (NDATA) 关键字声明未分析实体时,才是必选项。

示例

常规实体(未分析的内部实体)

以下声明的内部常规实体在使用 DTD 的 XML 文档中可以作为 &oumlaut;&xml; 引用。

<!ENTITY oumlaut "&#38;#246;">

或简单的文本替换示例如下

<!ENTITY xml "eXtensible Markup Language">

XML 分析器展开原始实体值 (&#38;#246;),使其成为内部 XML 文档的一部分。 在最终的已分析文档输出中,“&#38;”值用于创建字符“&”,值在 XML 文档中显示为“&#246;”。

参数实体(已分析的内部实体)

以下声明的内部参数实体可以在 DTD 中的其他位置作为 %lists; 引用。 这样可以重复地引用 XHTML 列表元素 <ul><ol>

<!ENTITY % lists "ul | ol">

未分析的外部实体

以下声明的未分析外部实体可以对非 XML 数据的链接进行编码(在此示例中为 GIF 格式的图像文件),以便加入 XML 文档。

<!ENTITY file_pic SYSTEM "file.jpg" NDATA jpg>

在这种情况下,要使用 NDATA 关键字,要求名为“jpg”的表示法的 NOTATION 声明必须也与此声明组合使用。 有关更多信息,请参见 NOTATION

备注

ENTITY 可以通过多种方式使用。 如果无法确定如何定义要使用的实体,下列问题也许可以帮助您更好地了解使用 DTD 中声明的实体的不同情况:

  • 实体的值是否只是用于缩写在文档有效期内可能会更改的较大的文本字符串? 如果是,则使用常规实体。

  • 它是否将用作指向 DTD 或 XML 文档外部内容(即外部实体,如文件名 或 MIME 类型)的指针? 如果是,则使用未分析的外部实体。

  • 是应该对实体的 URI 值进行分析(即,将其扩展为 DTD 或使用它的 XML 文档的一部分)还是应使其保持未分析 (即 XML 分析器在最终分析的文档中将省略其内容)?

  • 如果进行了分析,扩展实体的内容将成为使用 DTD 的 XML 文档 的一部分(即常规实体)还是 DTD 本身的一部分 (即参数实体)?

另请参见

概念

ATTLIST (Attribute List)
ELEMENT
NOTATION