文档类型定义 (document type definition )DTD
是规范的一部分。
1 为何需要DTD
xml文件不仅遵循xml的语法规则,而且受到dtd的约束
DTD的优越性:正式而精确的定义词汇表。
DTD的作用:将你掌握的知识提供给程序,同时获得文件资料。
只需要使用DTD和验证有效性的解析器,文档语法、词汇表以及指定值中的任何错误都逃不过解析器的眼镜。
2 编写DTD :通用原则
xml文档由元素和相应的属性组成。元素的内容是通过其他元素或xml标准中规定的基本类型进行定义的。
DTD比较能够定义文档中的所有元素,元素可以设置的属性,以及元素之间的关系。
DTD与xml关联的方式
1 DOCTYPE标记
DOCTYPE声明必须位于xml声明之后,且在任何文档元素之前。但是XML声明和DOCTYPE声明之间可以插入诠释和处理指令。
DOCTYPE声明包括关键字DOCTYPE。文档根元素名称,以及内容声明结构。
e.g


第一行表明该文档符合XML1.0,第二行说明该文档使用Catelog词汇表,Catelog是根元素。
关键字SYSTEM 解析器将根据给出的URL寻找DTD
关键字PUBLIC 根据URI寻找DTD
DTD的四种标记声明
ELEMENT xml元素类型声明
ATTLIST 特定元素类型可设置的属性&属性的允许值声明
ENTITY 可重用的内容声明
NOTATION 不要解析的外部内容的格式声明。
实体 ENTITY
预定义实体
< ⁢
> >
& &
'(单引号) '
"(双引号) "
通用实体
定义一个可重用的 copyright <!ENTITY copyright " MegaTrouble Toys,inc.,1999">
调用 需要前面加 & 后面+分号,比如©right;
当实体引用在解析过程中被替换为置换文本时,其结果必须 是格式正规的xml
通用实体的外部形式
e.g

属性值中不能引用可解析的外部实体
实体不能包含直接或间接的对自身的引用
参数实体
仅仅在DTD中使用的解析实体成为参数实体。这样能够简便的引用或修改DTD中常用的结构。但是扩展结构时,仍然需要编辑DTD。
参数实体声明:ENTITY关键字、百分号、名称和替换字。
e.g

CDATA代表字符数据。
在DTD中,所有参数实体必须在引用之前进行声明。所以DTD内部子集不能引用在外部子集中声明的参数实体,因为解析器首先读取内部子集。
引用参数实体时,需要在实体名称前面增加百分号,其后加分号。
e.g



以上代码等价于






这种类型的替换形式—在声明中进行替换—只能用于DTD外部子集。在内部子集中,参数实体引用只能位于其他声明之间;因此这类实体引用的置换文本必须是一个完整的声明,否则将影响DTD格式的正规性。
参数实体遵循文档规则,用置换文本取代实体引用后,要复合文档规则。
参数实体的置换文本也可以位于外部文中中
e.g
