一.DTD分为三类:
1.内部DTD
2.外部DTD
book.dtd
3.公用DTD
如web.xml中用到的
二.定义元素
元素类型分类:
任意类型:
字符串类型:
空元素:
包含子元素类型:
有序子元素:
互斥子元素(只能出现其中之一):
子元素出现的频率:
如果不指定,默认为只能且必须出现1次
组合子元素:
DTD允许将多个子元素括起来形成元素组,并可以在元素组后紧跟频率符号
无序子元素:
DTD不提供现成的无序语法,可通过元素组间接实现:
三.元素属性
对属性的约束:
1.#REQUIRED 必需的属性
2.#IMPLIED 可有可无的属性
3.#FIXED 该属性的值是固定的,定义时可指定该值。 使用元素时,不需要给该属性赋值,XML处理器会自动给元素的属性赋值。
属性类型:
四.定义实体
1.普通实体
在xml文件中用&和;使用实体
现在浏览器对DTD中的实体支持度不够
2.参数实体
仅在DTD中引用的实体成为参数实体
前两种属于内部实体,外部实体不常用到,故不涉及
1.内部DTD
<?xml version="1.0"?>
<!DOCTYPE 书籍列表 [
<!ELEMENT 书籍列表 (计算机书籍)*>
<!ELEMENT 计算机书籍 (书名,作者,价格,简要介绍)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 价格 (#PCDATA)>
<!ELEMENT 简要介绍 (#PCDATA)>
]>
<书籍列表>
<计算机书籍>
<书名>疯狂XML讲义</书名>
<作者>李刚</作者>
<价格>123</价格>
<简要介绍>XML与Java</简要介绍>
</计算机书籍>
</书籍列表>
2.外部DTD
book.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT 书籍列表 (计算机书籍)*>
<!ELEMENT 计算机书籍 (书名,作者,价格,简要介绍)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 价格 (#PCDATA)>
<!ELEMENT 简要介绍 (#PCDATA)>
<?xml version="1.0"?>
<!DOCTYPE 书籍列表 SYSTEM "book.dtd">
<书籍列表>
<计算机书籍>
<书名>疯狂XML讲义</书名>
<作者>李刚</作者>
<价格>123</价格>
<简要介绍>XML与Java</简要介绍>
</计算机书籍>
</书籍列表>
3.公用DTD
如web.xml中用到的
二.定义元素
<!ELEMENT 元素名 元素类型>
元素类型分类:
- 任意类型:可以是字符串,可以是包含其他子元素,可以是空元素
- 字符串类型:可以是字符串,不可以包含其他子元素,不可以是空元素
- 空元素
- 包含子元素类型
- 混合类型
任意类型:
<!ELEMENT 书籍列表 ANY>
字符串类型:
<!ELEMENT 元素名 (#PCDATA)>
空元素:
<!ELEMENT 书籍列表 EMPTY>
包含子元素类型:
有序子元素:
<!ELEMENT 计算机书籍 (书名,作者,价格,简要介绍)>
互斥子元素(只能出现其中之一):
<!ELEMENT 计算机书籍 (书名|作者|价格|简要介绍)>
子元素出现的频率:
+ 表示1次或多次
* 表示0次或多次
? 表示0次或1次
如果不指定,默认为只能且必须出现1次
组合子元素:
DTD允许将多个子元素括起来形成元素组,并可以在元素组后紧跟频率符号
无序子元素:
DTD不提供现成的无序语法,可通过元素组间接实现:
<!ELEMENT 计算机书籍 (书名|作者|价格|简要介绍)+>
三.元素属性
<!ATTLIST 属性所属元素 属性名 属性类型 [元素对属性的约束] [默认值]>
对属性的约束:
1.#REQUIRED 必需的属性
2.#IMPLIED 可有可无的属性
3.#FIXED 该属性的值是固定的,定义时可指定该值。 使用元素时,不需要给该属性赋值,XML处理器会自动给元素的属性赋值。
属性类型:
![](https://i-blog.csdnimg.cn/blog_migrate/9a57b839206e8b07ab5b6a2b59af71a4.png)
四.定义实体
1.普通实体
<!ENTITY 实体名 "实体值">
在xml文件中用&和;使用实体
现在浏览器对DTD中的实体支持度不够
2.参数实体
仅在DTD中引用的实体成为参数实体
<!ENTITY % 实体名 "实体值">
前两种属于内部实体,外部实体不常用到,故不涉及