1.DTD简介:
Document Type Definition ,文档类型定义
2.DTD的两种形式
(1)作为单独文件编写
(2)嵌入在XML文件中编写
3.DEMO
有如下的XML文档:book.xml
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book>
<name>Thinking in Java</name>
<author>Eckel</author>
<price>99.0</price>
</book>
<book>
<name>C++ Premiere</name>
<author>somebody</author>
<price>89.0</price>
</book>
</bookstore>
(1)将DTD作为单独文件编写:book.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT bookstore (book+)>
<!ELEMENT book (name,author,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
在book.xml中需加入:
<?DOCTYPE bookstore SYSTEM "book.dtd"?>
(2)将DTD嵌入在XML文件中
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bookstore [
<!ELEMENT bookstore (book+)>
<!ELEMENT book (name,author,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>
<bookstore>
<book>
<name>Thinking in Java</name>
<author>Eckel</author>
<price>99.0</price>
</book>
<book>
<name>C++ Premiere</name>
<author>somebody</author>
<price>89.0</price>
</book>
</bookstore>
使用 <!ELEMENT ...> 语句定义一个元素
(#PCDATA) 用于表示元素中嵌套的内容是普通文本字符串
<!ELEMENT book(name,author,price)> 表示嵌套name,author,price三个子元素
(book+) 表示子元素book可以出现多次
4.DTD的引入规则
(1)引入外部DTD文件
<!DOCTYPE 文档类型名称 SYSTEM "DTD文件的URL">
<!DOCTYPE 文档类型名称 PUBLIC "DTD名称" "DTD文件的URL">
一般用XML文档的根元素作为文档类型名称
SYSTEM 表明XML文件遵循的是本地或组织内容所编写和使用的DTD文件(由本公司内部编写和使用)
PUBLIC 表明是权威规范的DTD文件(由国际组织编写,供全球使用)
(2)在XML中嵌入DTD定义语句
<!DOCTYPE 根元素名 [
DTD定义语句
……
]>
5.DTD的基本编写语法
(1)元素定义
<!ELEMENT 元素名称 使用规则>
DTD通过定义元素的使用规则来描述整个XML文件的文档结构,并对文档结构中的每一个细节进行说明。可以包括如下一些规则:
(#PCDATA) 普通文本字符串(Parsed Character Data,被解析的字符数据)
(子元素1,子元素2,...) 子元素
EMPTY 空元素
ANY 任何类型的子元素和普通文本字符串或混合(不建议使用)
(子元素1,子元素2,子元素3,。。。) XML文档中必须严格按顺序组织子元素
(子元素1 子元素2 子元素3 。。。) XML文档可以按任意顺序组织子元素
(子元素1|子元素2|子元素3|。。。) 任选其一
(元素+) 元素可以出现1次或多次
(元素*) 元素可以出现0,1或多次
(元素?) 元素可以出现0或1次
(2)属性定义
<!ATTLIST 元素名
属性1 属性类型 设置说明
属性2 属性类型 设置说明
……
>
属性类型:
CDATA 普通文本字符串
ENUMERATED 枚举类型
<!ATTLIST 肉 品种 (鸡肉 | 牛肉 | 猪肉) "鸡肉">
默认值为鸡肉,设置时只能从三种中选择一个
ID
……
设置说明:
#REQUIRED 必须设置该属性
#IMPLIED 可设置,也可不设置
#FIXED 固定为默认值
直接使用默认值
(3)实体定义
实体的根本作用是为一段文本内容创建一个别名,供以后方便引用。便于XML文档对相同内容的维护和修改。
(1)引用实体
<!ENTITY 实体名称 "实体内容">
<!ENTITY 实体名称 SYSTEM "外部XML文档的URL">
引用方式
&实体名称;
(2)参数实体
参数实体被DTD问及自身使用,格式为:
<!ENTITY % 实体名称 "实体内容">
引用方式:
%实体名称;