DTD的文档结构如下:
第一行是DTD声明部分,该声明与XML文档的声明语法格式相同
0到多个注释部分,DTD注释与XML文档的注释格式完全相同
0到多个<!ELEMENT…>定义的每一个就是一个XML元素
0到多个<!ATTLIST…>顶一个每一个就是一个XML元素的属性
0到多个<!ENTITY…>顶一个每一个就是一个实体
0到多个<!NOTATION…>顶一个每一个就是一个符号
它们彼此之间完全独立,无需相互嵌套。
1. 定义元素
元素类型的定义的全称是:Element Type Definition,简称ETD,它不但会定义每个文件中可能存在的元素,给出的元素名称,而且会定义元素的具体类型。
元素类型描述主要有五种:
a) 任意类型
可以是以下四种中任意的内容
例如:<!ELEMENT book ANY>
b) 字串值
例如:”aaa”
c) 空元素
<br/>
d) 包含子元素
元素嵌套
e) 混合元素
案例:
2. 定义子元素
a) 定义有序的子元素
使用英文逗号,用于分隔有序的子元素
<!ELEMENT book(name,price,state)>
b) 互斥的子元素
互斥的子元素表明一些列的子元素中只能出现其中之一。
使用”|”进行分隔
c) 子元素出现的频率
+(一次次或多次)
?(0次或一次)
*(0次或多次)
注意:混合类型中的频率只能按如下方式添加频率
<!ELEMENT book(#PCDATA|子元素1|子元素2)*>
只能在最后加
d) 组合子元素
<!ELEMENT book(name|price|state)>
这种元素类型呗成为组合子元素
组合元素也可以嵌套写:
<!ELEMENT book((name,price)|state)>
e) 无序的子元素
DTD并没有定义无序子元素的语法,我们只能借助元素组进行定义
例如:
<!ELEMENT book(name|price|state)*>
这时在XML文档中书写标签时,在book标签下三个子元素的顺序是无序的。