实体用于定义XML文档中特殊字符的快捷方式.实体可以主要有四种类型和减号;
内置实体
字符实体
一般实体
参数实体
通常,可以在内部声明实体 或 外部 .让我们理解这些及其语法如下 :
如果在DTD中声明实体,则将其称为内部实体实体.
语法
以下是内部实体声明的语法 :
<!ENTITY entity_name"entity_value">
在上面的语法 :
entity_name 是实体的名称,后跟双引号或单引号中的值.
entity_value 保存实体名称的值.
通过添加前缀&来取消引用内部实体的实体值. 到实体名称即. & entity_name.
示例
以下是内部实体声明的简单示例 :
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?> <!DOCTYPE address [ <!ELEMENT address (#PCDATA)> <!ENTITY name "Tanmay patil"> <!ENTITY company "TutorialsPoint"> <!ENTITY phone_no "(011) 123-4567"> ]> <address> &name; &company; &phone_no; </address>
在上面的示例中,相应的实体名称名称,公司和 phone_no 被XML文档中的值替换.通过添加前缀&来取消引用实体值. 到实体名称.
将此文件另存为 sample.xml 并在任何浏览器中打开它,您会注意到 name , company , phone_no 的实体值分别被替换.
如果在DTD之外声明实体,则将其称为外部实体.您可以使用系统标识符或公共标识符来引用外部实体.
语法
以下是语法for external Entity declaration :
<!ENTITY name SYSTEM"URI/URL">
在上面的语法 :
名称是实体的名称.
SYSTEM 是关键字.
URI/URL 是双引号或单引号中包含的外部源的地址.
类型
您可以使用 :
System Identifiers:系统标识符使您可以指定包含DTD声明的外部文件的位置。
如您所见,它包含关键字SYSTEM和指向文档位置的URI引用。 语法如下
<!DOCTYPE name SYSTEM "address.dtd" [...]>
Public Identifiers :公共标识符提供了一种定位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> TutorialsPoint </company> <phone> (011) 123-4567 </phone> </address>
以下是DTD文件address.dtd的内容:
<!ELEMENT address (name, company, phone)> <!ELEMENT name (#PCDATA)> <!ELEMENT company (#PCDATA)> <!ELEMENT phone (#PCDATA)>
所有XML解析器都必须支持内置实体。 通常,您可以在任何地方使用这些实体引用。 您还可以在XML文档中使用普通文本,例如元素内容和属性值。
有五个内置实体在格式良好的XML中发挥作用,它们是:
ampersand: &
Single quote: '
Greater than: >
Less than: <
Double quote: "
以下示例演示了内置实体声明:
<?xml version = "1.0"?> <note> <description>I'm a technical writer & programmer</description> <note>
如您所见,只要处理器遇到此字符,便用&替换该字符。
字符实体用于命名某些实体,这些实体是信息的符号表示,即,很难或不可能键入的字符可以用字符实体代替。
以下示例演示字符实体声明:
<?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">
以下示例演示了通用实体声明:
<?xml version = "1.0"?> <!DOCTYPE note [ <!ENTITY source-text "it1352"> ]> <note> &source-text; </note>
每当XML解析器遇到对源文本实体的引用时,它将在引用点将替换文本提供给应用程序。
参数实体的目的是使您能够创建替换文本的可重用部分。
以下是参数实体声明的语法:
<!ENTITY % ename "entity_value">
实体值是不是'&','%'或'"'的任何字符。
以下示例演示了参数实体声明。 假设您有如下元素声明:
<!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)>
现在假设您要添加其他元素国家/地区,然后需要将其添加到所有四个声明中。 因此,我们可以参考参数实体。 现在使用参数实体引用,上面的示例将是:
<!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;)>
解析器读取这些声明时,会将实体的替换文本替换为实体引用。