DTD 简介
DTD 简介
DTD(Document Type Definition)是一种用于定义XML文档结构和元素规则的文档类型定义语言。它是XML的一个重要组成部分,用于确保XML文档的正确性和有效性。
DTD的特点是简单、易学、易用,在XML的发展过程中扮演了重要的角色。它只定义了文档的结构和元素的规则,而没有定义文档的内容。DTD中使用元素、属性和实体等结构来定义XML文档的结构。
DTD的语法
DTD采用基于元素和属性的语法,主要有以下几个方面:
元素的定义
元素是XML文档的标记标签,用于表示XML文档的数据内容,DTD中使用元素定义来规定XML文档中可使用的元素类型。
元素的定义格式如下:
<!ELEMENT 元素名称 元素内容>
其中,元素名称是元素的标识符,元素内容规定了元素所包含的子元素类型和数量。举例来说,如果我们要定义一个名为“book”的元素,可以使用以下语句:
<!ELEMENT book (title,author,price)>
这个语句表示,book元素必须包含一个title元素、一个author元素和一个price元素。
属性的定义
属性是用来描述元素或文本节点的特征和属性,可以增强XML文档的表现力,DTD中使用属性定义来规定元素中可使用的属性名和属性值。
属性的定义格式如下:
<!ATTLIST 元素名称 属性名 属性类型 属性值>
其中,元素名称是元素的标识符,属性名是属性的名称,属性类型指定属性的数据类型,属性值是属性的默认值。
举例来说,如果我们要为上面定义的book元素添加一个属性ISBN,可以使用以下语句:
<!ATTLIST book ISBN CDATA #IMPLIED>
CDATE表示属性的数据类型是字符串,#IMPLIED表示该属性是可选的。
实体的定义
实体是XML文档中具有特殊含义的字符序列,可以用来代替一些特殊字符,避免与XML标签语法冲突。DTD中使用实体定义来规定XML文档中可使用的实体名称和实体替换字符。
实体的定义格式如下:
<!ENTITY 实体名称 "实体内容">
其中,实体名称是实体的标识符,实体内容是实体替换字符序列。举例来说,如果我们要定义一个名为“circle”的实体,可以使用以下语句:
<!ENTITY circle "●">
这个语句表示“circle”实体等价于Unicode字符集中的黑色实心圆。
DTD验证
通过DTD定义,可以检查XML文档的格式、结构和内容是否符合预期。验证XML文档的方法主要有两种:
内部DTD验证
将DTD定义放置在XML文档的顶部,成为文档的一部分。XML解析器可以通过解析DTD来完成XML文档的验证。
<?xml version="1.0"?>
<!DOCTYPE catalog SYSTEM "catalog.dtd">
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
</catalog>
外部DTD验证
将DTD定义存放在外部文件,XML文档通过DOCTYPE声明引用外部DTD验证文件,在XML解析时读取实现验证。
<?xml version="1.0"?>
<!DOCTYPE catalog SYSTEM "catalog.dtd">
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
</catalog>
总结
DTD的定义和使用,是XML技术中最基础的部分。通过DTD的定义,可以明确XML文档的书写规则,保证XML文档正确且有效。同时,DTD的验证也使得XML文档具有了更强的规范性和可维护性。