XML中的DTD文档类型定义详细介绍

黄舟
发布: 2017-03-10 19:32:35
原创
2095 人浏览过

这篇文章主要介绍了XML中的DTD文档类型定义,是XML入门学习中的基础知识,需要的朋友可以参考下

XML 文档类型定义,俗称 DTD,它是一种准确描述 XML 语言的方式。DTDs 根据适当 XML 语言的语法规则检查 XML 文档的词汇和结构的有效性。

XML DTD 可以指定在文档内部,也可以保存在独立的文档中然后单独链接。

语法
DTD 的基本语法如下所示:

<!DOCTYPE element DTD identifier   
[   
    declaration1   
    declaration2   
    ........   
]>
登录后复制

上述语法中:

DTD 以 内部 DTD<br/>如果一个元素声明在 XML 文档的内部则 DTD 被称为内部 DTD。为了把它作为内部 DTD,XML 声明中的 standalone 属性必须设置为 yes。这意味着,声明的工作独立于外部源。

语法

内部 DTD 语法如下所示:

<!DOCTYPE root-element [element-declarations]>
登录后复制

这里 root-element 是根元素的名称,element-declarations 表示我们声明的元素。

示例

下面是一个内部 DTD 的简单示例:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>  
<!DOCTYPE address [   
<!ELEMENT address (name,company,phone)>  
    <!ELEMENT name (#PCDATA)>  
    <!ELEMENT company (#PCDATA)>  
    <!ELEMENT phone (#PCDATA)>  
]>  
<address>  
    <name>Tanmay Patil</name>  
    <company>TutorialsPoint</company>  
    <phone>(011) 123-4567</phone>  
</address>
登录后复制

我们来看一下上面的代码:

开始声明 - 使用如下语句开始 XML 声明:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
登录后复制

DTD - 紧跟在 XML 头后面,_文档类型声明_如下,通常被称为 DOCTYPE:

DTD Body - DOCTYPE 声明后面紧跟 DTD 体,这里我们声明元素,属性,实体和符号:

<!ELEMENT address (name,company,phone)>  
<!ELEMENT name (#PCDATA)>  
<!ELEMENT company (#PCDATA)>  
<!ELEMENT phone_no (#PCDATA)>
登录后复制

许多元素都在这里通过 文档词汇声明。 定义元素_名称_为 "#PCDATA" 类型。这里 #PCDATA 意味着可解析的文本数据。

结束声明 - 最后,DTD 的声明部分使用方括号和尖括号(]>)闭合。这是一个有效的结束定义,后面紧跟的就是 XML 文档内容。

规则

文档类型声明必须出现在文档的开头部分(只先与 XML 头),不允许出现在文档的任意其他位置。<br/>类似于 DOCTYPE 声明,元素声明必须以感叹号开始。<br/>文档类型声明中的 Name 必须与根元素的类型匹配。<br/>外部 DTD<br/>在外部 DTD 中元素声明在 XML 文档的外部。通过指定 system 属性来访问,这个属性值可以是合法的 .dtd 文件或者有效的 URL。为了指示它是外部 DTD,XML 声明的 standalone 属性必须设置为 no。这就意味着,声明包含来自外部源的信息。

语法

下面是外部 DTD 的语法:

<!DOCTYPE root-element SYSTEM "file-name">
登录后复制

这里 file-name 就是 .dtd 扩展的文件。<br/>

示例

下面的示例展示了外部 DTD 的用法:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>  
<!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)>
登录后复制

类型

我们可以通过使用系统标示符或者公共标示符引用一个外部DTD。

系统标示符

系统标示符允许我们指定包含 DTD 声明的外部文件的位置。语法如下:

<!DOCTYPE name SYSTEM "address.dtd" [...]>
登录后复制

正如我们可以看到的,它包含 SYSTEM 关键字和一个指向文档位置的 URI 引用。

公共标示符

公共标示符提供了一种定位 DTD 资源的机制,写法如下:

<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
登录后复制

正如我们可以看到的,它以 PUBLIC 关键字开始,后面紧跟的是专门的标识符。公共标识符被用来标识目录中的条目。公共标识符可以遵循任意格式,但是常用的格式是正式公用标识符(或者 FPIs)。

声明元素<br/>在dtd中声明元素(在一个xml如果一个元素想要让它是合法的,则需要在dtd中声明)<br/> 语法:这两种方式<br/>

例如:

<!ELEMENT br EMPTY>
登录后复制

则xml可以写成:

<br/>
登录后复制

注意点
在dtd中
所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:
元素
属性
实体
PCDATA
CDATA
下面是一些注意点:
(1)实体是用来定义普通文本的变量。实体引用是对实体的引用。
大多数同学都了解这个 HTML 实体引用:" "。这个“无折行空格”实体在 HTML 中被用于在某个文档中插入一个额外的空格。
当文档被 XML 解析器解析时,实体就会被展开。
XML中的DTD文档类型定义详细介绍

(2) PCDATA
PCDATA 的意思是被解析的字符数据(parsed character data)。
可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。
PCDATA 是会被解析器解析的文本。这些文本将被解析器解析成实体以及标记。
文本中的标签会被当作标记来处理,而实体会被展开。
不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 实体来分别替换它们。
(3)CDATA
CDATA 的意思是字符数据(character data)。
CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

以上是XML中的DTD文档类型定义详细介绍的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板