- DTD 有用资源
- DTD - 快速指南
- DTD - 有用的资源
DTD - 实体
实体用于定义 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>
在上面的示例中,相应的实体名称name、company和Phone_no 被它们在 XML 文档中的值替换。通过在实体名称中添加前缀&来取消引用实体值。
将此文件保存为example.xml并在任何浏览器中打开它,您会注意到name、company、Phone_no的实体值分别被替换。
外部实体
如果实体在 DTD 之外声明,则称为外部实体。您可以使用系统标识符或公共标识符来引用外部实体。
句法
以下是外部实体声明的语法 -
<!ENTITY name SYSTEM "URI/URL">
在上面的语法中 -
name是实体的名称。
系统是关键字。
URI/URL是用双引号或单引号括起来的外部源的地址。
类型
您可以使用以下任一方式引用外部 DTD:
系统标识符- 系统标识符使您能够指定包含 DTD 声明的外部文件的位置。
正如您所看到的,它包含关键字 SYSTEM 和指向文档位置的 URI 引用。语法如下 -
<!DOCTYPE name SYSTEM "address.dtd" [...]>
公共标识符- 公共标识符提供了一种定位 DTD 资源的机制,其编写如下 -
正如您所看到的,它以关键字 PUBLIC 开头,后跟一个专门的标识符。公共标识符用于标识目录中的条目。公共标识符可以遵循任何格式;然而,一种常用的格式称为正式公共标识符(FPI)。
<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
例子
让我们通过以下示例来理解外部实体 -
<?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 中发挥作用,它们是 -
和符号:&
单引号:’
大于:>
小于:<
双引号:"
例子
以下示例演示了内置实体声明 -
<?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>
您会注意到我们在这里使用了© 作为版权特征的价值。将此文件另存为sample.xml并在浏览器中打开它,您将看到版权被字符© 替换。
一般实体
一般实体必须先在 DTD 中声明,然后才能在 XML 文档中使用。一般实体不只是表示单个字符,而是可以表示字符、段落,甚至整个文档。
句法
要声明一般实体,请在 DTD 中使用此一般形式的声明 -
<!ENTITY ename "text">
例子
以下示例演示了一般实体声明 -
<?xml version = "1.0"?> <!DOCTYPE note [ <!ENTITY source-text "tutorialspoint"> ]> <note> &source-text; </note>
每当 XML 解析器遇到对源文本实体的引用时,它就会在引用点向应用程序提供替换文本。
参数实体
参数实体的目的是使您能够创建替换文本的可重用部分。
句法
以下是参数实体声明的语法 -
<!ENTITY % ename "entity_value">
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)>
现在假设您要添加其他元素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;)>
当解析器读取这些声明时,它会用实体的替换文本替换实体引用。