这篇文章主要介绍了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)>
许多元素都在这里通过
结束声明 - 最后,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 解析器解析时,实体就会被展开。
(2) PCDATA
PCDATA 的意思是被解析的字符数据(parsed character data)。
可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。
PCDATA 是会被解析器解析的文本。这些文本将被解析器解析成实体以及标记。
文本中的标签会被当作标记来处理,而实体会被展开。
不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 实体来分别替换它们。
(3)CDATA
CDATA 的意思是字符数据(character data)。
CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
以上是XML中的DTD文档类型定义详细介绍的详细内容。更多信息请关注PHP中文网其他相关文章!