DTD - 实体
Entities are used to define shortcuts to special characters within the XML documents. Entities can be primarily of four types -
-
内置实体
-
字符实体
-
一般实体
-
参数实体
实体声明语法
通常 , 可以声明实体 **内部 ** or **外部 ** 。让我们按如下方式理解其中的每一个及其语法 :
内部实体
如果实体在 DTD 中声明 , 则称为内部实体。
语法
以下是内部实体声明的语法 :
<!ENTITY entity_name "entity_value">
在上面的语法中 -
-
entity _ name 是实体的名称 , 后跟双引号或单引号内的值。
-
entity _ value 保存实体名称的值。
-
通过添加前缀来取消引用内部实体的实体值 ** & ** 到实体名称 _即 & entity _ name 。 _
Example
下面是一个简单的内部实体声明示例 :
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE address [
<!ELEMENT address (#PCDATA)>
<!ENTITY name "Tanmay patil">
<!ENTITY company "yazui.net">
<!ENTITY phone_no "(011) 123-4567">
]>
<address>
&name;
&company;
&phone_no;
</address>
在上面的示例中 , 相应的实体名称 名称 , company and phone _ no 被 XML 文档中的值替换。通过添加前缀来取消引用实体值 ** & ** 设置为实体名称。
将此文件另存为 sample. xml 并在任何浏览器中打开它 , 您会注意到的实体值 名称 , company , phone _ no 分别替换。
外部实体
如果实体在 DTD 外部声明 , 则称为外部实体。您可以使用系统标识符或公共标识符来引用外部实体。
语法
以下是外部实体声明的语法 :
<!ENTITY name SYSTEM "URI/URL">
在上面的语法中 -
-
名称 是实体的名称。
-
SYSTEM 是关键字。
-
URI / URL 是用双引号或单引号括起来的外部源的地址。
Types
您可以使用 - 来引用外部 DTD
- 系统标识符 使用系统标识符可以指定包含 DTD 声明的外部文件的位置。
如您所见 , 它包含关键字 SYSTEM 和指向文档位置的 URI 引用。语法如下 :
<!DOCTYPE name SYSTEM "address.dtd" [...]>
- 公共标识符 - 公共标识符提供了一种定位 DTD 资源的机制 , 编写如下 -
如您所见 , 它以关键字 PUBLIC 开头 , 后跟一个专用标识符。公共标识符用于标识目录中的条目。公共标识符可以遵循任何格式 ; 但是 , 常用的格式称为 正式公共标识符或 FPI 。
<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
Example
让我们用下面的例子来理解外部实体 :
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE address SYSTEM "address.dtd">
<address>
<name>
Tanmay Patil
</name>
<company>
yazui.net
</company>
<phone>
(011) 123-4567
</phone>
</address>
下面是 DTD 文件的内容 地址. dtd -
<!ELEMENT address (name, company, phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
内置实体
所有 XML 解析器都必须支持内置实体。通常, 您可以在任何地方使用这些实体引用。您还可以在 XML 文档中使用普通文本, 例如在元素内容和属性值中。
有五个内置实体在格式良好的 XML 中发挥作用 , 它们是 :
-
和符号: & amp;
-
单引号: & apos;
-
大于: & gt;
-
小于: & lt;
-
双引号: & quot;
Example
下面的示例演示了内置的实体声明 :
<?xml version = "1.0"?>
<note>
<description>I'm a technical writer & programmer</description>
<note>
正如你在这里看到的 & amp; 字符被替换为 & 每当处理器遇到这个。
字符实体
字符实体用于命名一些实体 , 这些实体是信息的符号表示 , 即难以或不可能键入的字符可以由字符实体代替。
Example
下面的示例演示了字符实体声明 :
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE author[
<!ELEMENT author (#PCDATA)>
<!ENTITY writer "Tanmay patil">
<!ENTITY copyright "©">
]>
<author>&writer©right;</author>
你会注意到这里我们已经使用 ** &# 169; ** 作为版权字符的值。将此文件保存为 sample. xml 并在浏览器中打开它 , 您将看到版权被字符 © 取代。
一般实体
一般实体必须在 DTD 中声明 , 然后才能在 XML 文档中使用。一般实体可以表示字符、段落甚至整个文档 , 而不是只表示单个字符。
语法
要声明一般实体 , 请在 DTD 中使用此一般形式的声明 :
<!ENTITY ename "text">
Example
以下示例演示了一般实体声明 :
<?xml version = "1.0"?>
<!DOCTYPE note [
<!ENTITY source-text "yazui.net">
]>
<note>
&source-text
</note>
每当 XML 解析器遇到对的引用时 源文本 实体 , 它将在引用的点向应用程序提供替换文本。
参数实体
参数实体的目的是使您能够创建替换文本的可重用部分。
语法
以下是参数实体声明的语法 :
<!ENTITY % ename "entity_value">
- entity _ value 是任何不是 “& ” 、“% ” 或 “” 的字符。
Example
下面的示例演示了参数实体声明。假设您有如下的元素声明 :
<!ELEMENT residence (name, street, pincode, city, phone)>
<!ELEMENT apartment (name, street, pincode, city, phone)>
<!ELEMENT office (name, street, pincode, city, phone)>
<!ELEMENT shop (name, street, pincode, city, phone)>
现在假设你想添加额外的元素 country , 那么你需要将它添加到所有四个声明中。因此我们可以去一个参数实体引用。现在使用参数实体引用上面的例子将是
<!ENTITY % area "name, street, pincode, city">
<!ENTITY % contact "phone">
参数实体以与常规实体引用相同的方式取消引用 , 仅使用百分号而不是和号 -
<!ELEMENT residence (%area;, %contact;)>
<!ELEMENT apartment (%area;, %contact;)>
<!ELEMENT office (%area;, %contact;)>
<!ELEMENT shop (%area;, %contact;)>
当解析器读取这些声明时 , 它会将实体的替换文本替换为实体引用。