ENTITY (XML)
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
<!ELEMENT list >
<!ATTLIST list list_type (ul | ol)>
sample.dtd
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE dtd_sample[
<!ELEMENT file_info>
<!ATTLIST file_info name #REQUIRED>
<!ENTITY xml "eXtensible Markup Language">
<!ENTITY attlist_def SYSTEM "longtext.txt">
<!ENTITY % lists "(ol | ul)">
<!ENTITY % dtd_chunk SYSTEM "chunk.dtd">
<!ENTITY file_pic SYSTEM "file.jpg" NDATA jpg>
<!NOTATION jpg SYSTEM "image/jpeg">
%dtd_chunk;
<!ELEMENT icon EMPTY>
<!ATTLIST icon source ENTITY #REQUIRED>
<!ATTLIST icon list_type &lists;>
]>
分析 DTD 文档时,会得到下列结果。请注意,该替换只是在内存中进行。分析器不真正更改文件。
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE dtd_sample[
<!ELEMENT file_info>
<!ATTLIST file_info name #REQUIRED>
<!ENTITY xml "eXtensible Markup Language">
<!ENTITY attlist_def SYSTEM "longtext.txt">
<!ENTITY % dtd_chunk SYSTEM "chunk.dtd">
<!ENTITY file_pic SYSTEM "file.jpg" NDATA jpg>
<!NOTATION jpg SYSTEM "image/jpeg">
<!ELEMENT list >
<!ATTLIST list list_type (ul | ol)>
<!ELEMENT icon EMPTY>
<!ATTLIST icon source ENTITY #REQUIRED>
<!ATTLIST icon list_type (ol | ul)>
]>
sample.xml
<?xml version="1.0" standalone="no" ?>
<heading>Definition list for &xml; attributes used in DTD files.</heading>
<file_info name="topfile">
<icon source="file_pic"/>
<list list_type="ul"/>
%attlist_def
</file_info>
<footer>Conclusion of definition list for &xml; attributes.</footer>
已分析 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 文档中可以作为 öaut; 和 &xml; 引用。
<!ENTITY oumlaut "&#246;">
或简单的文本替换示例如下
<!ENTITY xml "eXtensible Markup Language">
XML 分析器展开原始实体值 (&#246;),使其成为内部 XML 文档的一部分。在最终的已分析文档输出中,“&”值用于创建字符“&”,值在 XML 文档中显示为“ö”。
参数实体(已分析的内部实体)
以下声明的内部参数实体可以在 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 或使用该 DTD 的 XML 文档的一部分展开)还是保持不分析(即ML 分析器在最终的已分析文档中将省略其内容)?
如果已分析,展开的实体内容应成为使用该 DTD 的 XML 文档的一部分(即常规实体)还是 DTD 本身的一部分(即参数实体)?