DTD Document Type Definition 文档类型定义。我们在XML中可以自定义标记,那XML解析器怎么认识这些自定义标记并根据自定义标记的处理法则来处理元素呢?这需要DTD,它是我们用来定义我们自己定义的标记的含义,我们自己定义元素的相关属性的文档。
DTD与XML是类与对象,数据库表结构与记录的关系。
符合XML规则(包括必须有XML声明语句;必须有且只有一个根元素;标记大小写敏感;属性值用引号;标记成对,空标记关闭;元素正确嵌套)的XML文档称为结构完成的XML文档;符合XML规则并且符合DTD验证的XML文档称为合法的XML文档。IE只验证结构完整性不验证合法性,XMLSPY验证合法性。
DTD分类:内部DTD;外部DTD;内外结合的DTD。
外部DTD的优点:被多个XML共享,保持统一的数据交换格式,不同组织的人使用同一个通用的DTD来交换数据;应用程序可以使用一个标准DTD效验从外部世界接受来的XML数据是否有效。
下面是一个lsmx.dtd
<?xml version="1.0" encoding="GB2312"?>
<!ELEMENT 家庭 (人+, 家电*)>
<!ELEMENT 人 (#PCDATA)>
<!ELEMENT 家电 EMPTY>
<!ATTLIST 人
名字 CDATA #REQUIRED
性别 (男 | 女) #REQUIRED
年龄 CDATA #REQUIRED
爱好 CDATA #IMPLIED
>
<!ATTLIST 家电
名称 CDATA #REQUIRED
数量 CDATA #REQUIRED
说明 CDATA #IMPLIED
>
元素定义
<!ELEMENT NAME CONTENT>
关键字 元素名称 元素类型
元素类型
1, EMPTY:空元素,但可以有属性。<mytag id=”001”/>。
2, ANY:含任何DTD中定义的元素内容。
3, #PCDATA:纯文本,不能有任何自元素。<!ELEMENT 人 (#PCDATA)>。
4, 组合类型:<!ELEMENT 家庭 (人+, 家电*)>。
符号含义:+最少出现一次;*可以出现任意次,包括0次;?出现0或一次;(a,b,c)a,b,c必须出现,并且按指定位置出现。
属性定义
<!ATTLIST 元素名称
属性名称 属性类型 属性特点
··········
>
属性类型:
1, CDATA:只包含字符数据。
2, ID:类似主键,必须唯一。
3, NMTOKEN 不包含中文的CDATA。
4, 枚举 事先定义好一些值,该属性的值必须匹配列出的这些数值。
性别 (男 | 女) #REQUIRED。
属性特点:
1,#REQUIRED NOTNULL 非空。
2,#IMPLIED 可写可不写。
3,#FIXED value 固定值,不可变。
属性名 CDATA #FIXED“固定值”
5, Default value 默认值
实现:
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE 家庭 SYSTEM "lsmx.dtd">
<家庭>
<人 名字="郭大路" 性别="男" 年龄="25"/>
<人 名字="李寻欢" 性别="男" 年龄="38" 爱好="作个教育家和伟人"/>
<家电 名称="彩电" 数量="3"/>
</家庭>