加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

DTD实体分析

发布时间:2023-09-22 12:41:07 所属栏目:教程 来源:
导读:实体是用于定义XML文档中特殊字符的快捷方式。 实体主要有四种类型 -
内置实体
字符实体
常规实体
参数实体

1. 实体声明语法
通常,实体可以在内部或外部声明。 让我们了解以下各项及其语法如下 -

1.1. 内
实体是用于定义XML文档中特殊字符的快捷方式。 实体主要有四种类型 -
内置实体
字符实体
常规实体
参数实体

1. 实体声明语法
通常,实体可以在内部或外部声明。 让我们了解以下各项及其语法如下 -

1.1. 内部实体
如果在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 Max su>
   <!ENTITY company Yiibai>
   <!ENTITY phone_no (086) 123-4567890>
]>
<address>
   &name;
   &company;
   &phone_no;
</address>

在上面的示例中,各个实体名称 - name,company和phone_no由它们在XML文档中的值替换。 通过向实体名称添加前缀&来取消引用实体值。

将此文件另存为sample.xml,并在浏览器中打开它,注意可以看到:name,company,phone_no的实体值都被替换。

1.2. 外部实体

如果在DTD之外声明实体,则称为外部实体。 可以使用系统标识符或公共标识符来引用外部实体。

以下是外部实体声明的语法 -
<!ENTITY name SYstem URI/URL>

在上面的语法中 -
name - 是实体的名称。
SYstem - 是关键字。
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>
      Max Su
   </name>
   <company>
      Yiibai Yiibai
   </company>
   <phone>
      (086) 123-4567890
   </phone>
</address>

以下是DTD文件address.dtd 的内容 -
<!ELEMENT address (name, company, phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>

2. 内置实体
所有XML解析器都必须支持内置实体。 通常,可以在任何地方使用这些实体引用。 还可以在XML文档中使用普通文本,例如 - 元素内容和属性值。

有五个内置实体在格式良好的XML中发挥作用,它们分别是 -
&符号:&amp;
单引号:&apos;
大于号:&gt;
小于号:&lt;
双引号:&quot;

以下示例演示了内置实体声明 -
<?xml version = 1.0?>
<note>
   <description>I'm a technical writer & programmer</description>
<note>
在这里看到&amp; 只要处理器遇到此问题,就会用&替换字符。

3. 字符实体
字符实体用于命名一些作为信息的符号表示的实体,即难以或不可能键入的字符可以由字符实体代替。

以下示例演示了字符实体声明 -
<?xml version = 1.0 encoding = UTF-8 standalone = yes?>
<!DOCTYPE author[
   <!ELEMENT author (#PCDATA)>
   <!ENTITY writer Max Su>
   <!ENTITY copyright &#169;>
]>
<author>&writer;&copyright;</author>

注意到使用©作为版权特征的值。 将此文件另存为sample.xml并在浏览器中打开它,将看到版权被字符©替换。

4. 常规实体
需要先在DTD中声明常规实体,然后才能在XML文档中使用它们。 常规实体可以表示字符,段落甚至整个文档,而不是仅表示单个字符。

要声明常规实体,请在DTD中使用此一般形式的声明 -
<!ENTITY ename text>
示例

以下示例演示了常规实体声明 -
<?xml version = 1.0?>
<!DOCTYPE note [
   <!ENTITY source-text jb51-tutorials>
]>
<note>
   &source-text;
</note>
每当XML解析器遇到对源文本实体的引用时,它在引用时将替换文本提供给应用程序。

5. 参数实体
参数实体的目的是能够创建替换文本的可重用部分。

以下是参数实体声明的语法 -
<!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;)>
当解析器读取这些声明时,它会将实体的替换文本替换为实体引用。

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章