一、DTD(document type define)文档类型定义
一个基本的dtd文档范例:
<!ELEMENT bookshelf (book+)>
<!ELEMENT book (name,sale,author)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT sale (#PCDATA)>
<!ELEMENT author (#PCDATA)>
如果存在中文则必须保存为UTF-8或者Unicode编码
在编写xml文档时为了遵守上面的dtd文件规则,应该按下面编写,
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE bookshelf SYSTEM "book.dtd>
<bookshelf >
<book>
<name>One Day</name>
<sale>23.9元</sale>
<author>somebody</author>
</book>
<book>
<name>World</name>
<sale>10元</sale>
<author>someone</author>
</book>
</bookshelf>
目前浏览器一般进行dtd校验,即使xml文件不按照dtd规则编写也能够访问,想对xml文件进行dtd校验可在eclipse中完成,将dtd文件和xml文件cpoy到任何一个包下即可,例如将上面的两个文件拷贝到eclipse中则可以通过校验,如果将xml文件改动一下,例如改成
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE bookshelf SYSTEM "book.dtd>
<bookshelf >
<book>
<name>One Day</name>
<sale>23.9元</sale>
<author>somebody</author>
</book>
<book>
<name>World</name>
<sale>10元</sale>
<author>someone</author>
</book>
<a>内容</a>
</bookshelf>
则会提示不匹配的错误信息,因为在dtd文件中规定了booshelf的子标签只有书,因此标签a与dtd文件中规定不符合,校验不通过
DTD文档即可写在xml文件内部,又可以作为单独文件编写
当xml文件引用的DTD文件在本地时可采用下面的引用方式
<!DOCTYOE 根节点 SYSTEM “文档名”>
当引用的文件时一个公共的文件时,则采用下面的方式
<!DOCTYPE web-app PUBLIC "-//sun Microsystems,Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
二、DTD的语法细节
<!ELEMENT 元素名称 元素内容或类型>
1、元素内容或类型
|--元素内容
|--<!ELEMENT book (name,sale,author)>用“,”进行分隔,那么表示xml文档中的元素出现顺序应该与其一致
|--<!ELEMENT book (name|sale|author)>用“|”进行分隔,表示name,sale,author三个元素只能出现一个
|--<!ELEMENT bookshelf (book+)>中book+的加号代表book标签出现的次数包括三类符号
|-- + 代表标签可以出现一次或多次
|-- ? 代表标签出现0次或1次
|-- × 代表标签出现0次或多次
|--元素类型
|--EMPTY 即内容为空,注意如果开始标签之间存在空格或换行仍不能通过校验,因为空格和换行也会被当做内容处理
|--ANY即内容可以为任意类型
2、xml文档中的元素属性也需要在dtd文件中进行声明
语法格式
<!ATTLIST 元素名
属性名1 属性值类型 设置说明
属性名2 属性值类型 设置说明
.......
>
举例:
属性值
|--<!ATTLIST apple
color CDATA #REQUIRED
shape CDATA "圆形"
sale CDATA #FIXED "10"
address CDATA #IMPLIED
>
color属性是必须写的
shape是默认值
sale是固定值
address 是可缺省的值
在xml文档中<apple color="green">虽然只声了一个属性,但是apple这个元素存在三个属性,相当于<apple color="green" shape ="圆形" sale ="10>
属性值类型
|--CDATA 普通文本字符串
|--ENUMERATED 枚举类型的值 例如<!ATTLIST 水果 名称 (苹果|香蕉|西瓜) 苹果>
|--ID 表面该属性的值为一个唯一值 ,并且id的值一般以字母开头 <!ATTLIST 联系人列表 编号 id #REQUIRED>
|--ENTITY实体
|--引用实体:<!ENTITY 实体名称 “内容”> 例如<!ENTITY represent "DTD文件实体">在xml文件中&represent就可以代表 "DTD文件实体"这段内容
|--参数实体:DTD文件自己用<ENTITY % 实体名称 “实体内容”>,并通过%实体名称引用