DTD是一套关于标记的语法规则,它定义了文档的逻辑结构,规定了文档中所使用的元素、实体、元素的属性、元素与实体之间的关系。
DTD是XML文件的验证机制,定义好DTD,就可以使用XML解析器对编写好的XML文档进行DTD检查,判断XML文档内容是否为有效的XML文档内容
为什么使用 DTD:1、验证接收到的数据是否有效 2、 用于验证自己的数据 3、定义 XML 文档的合法构建块 4、使用一系列合法元素来定义文档结构
使用DTD的好处:1、用DTD提供统一格式2、用DTD验证数据有效性3、根据DTD编写文档样式单
DTD文档有如下结构:
第1行是DTD声明部分,该声明与XML声明的语法相同0到多个注释部分,DTD注释与XML注释的语法完全相同
0到多个<!ELEMENT….>定义,每个<!ELEMENT….>定义一个XML元素
0到多个<!ATTLIST….>定义,每个<!ATTLIST….>定义一个XML元素定义了一个属性
0到多个<!ENTITY….>定义,每个<!ENTITY….>定义一个实体
0到多个<!NOTATION….>定义,每个<!NOTATION….>定义一个符号
元素声明以“<!”开始,以“>”结束
元素声明指令“ELEMENT”为关键字,必须大写
元素名:为当前元素指定的元素名称
元素内容: 元素名后面的内容用来指定元素的内容类型,它可以分为EMPTY(空)、子元素类型,混合型、ANY(任意)和#PCDATA 5种类型。
ANY是DTD中使用很频繁的一个关键字,特别是对于文档根元素的声明。
注意:
#PCDATA必须放在最前面
#PCDATA和各子元素之间只能用竖线(|)分割
子元素1,子元素2和子元素3之间的竖线(|)并不是表示互斥,而只是表 示这些元素能无序的重复出现,而且次数不受限制
不要试图在各个子元素之后添加?,*。+等表示频率的修饰符
互斥的子元素表明一系列子元素之间只能出现其中一次。互斥子元素使用竖线(|)分隔,以竖线(|)分隔的多个元素只能出现其中之一。
+: 表明子元素可以出现1次或多次
*: 表明子元素可以出现0次或多次
?: 表明子元素可以出现0次或1次
CDATA 只为字符串数据
(en|en2|…)此值是枚举列表中的一个值
ID该属性值必须是有效地标识符,在XML文档时唯一的
IDREF值为另外一个元素的 id属性值
IDREFS值必须引用自多个已经有的ID属性值,多个ID属性值用空格隔开
NMTOKEN值为合法的 XML 名称
NMTOKENS值为多个合法的 XML 名称的列表ENTITY值是一个外部实体,如图片支持
ENTITIES值是一个实体列表,多个实体之间以空格隔开
NOTATION该属性值是在DTD中声明过的符号,这个是过期的,不要使用