xml入门序列教程(5) - 简单的了解一下DTD
DTD作为和xml差不多时间发布的一项技术标准,已在逐步的被Schema所取代,当然很多地方还是在沿用这样一个技术,所以简单的了解一下还是有必要的。
一、DTD基本概念、及其内容(Document Type Definition)
DTD是 定义xml数据的格式。包括
1、 元素(ELEMENT) 及 元素的内容 规则。
2、 元素之间的关系规则。
3、 属性(ATTLIST) 及 属性值 的规则。
4、 可使用的实体(ENTITY)。
二、基本语法以及分类
基本语法:<!DOCTYPE 根元素 [ 定义的内容 ]>
按照DTD代码和XML是否同处一个文件来分类,包括3种:
1、 内部DTD文档格式: <!DOCTYPE 根元素 [定义内容]>
2、 外部DTD文档格式: <!DOCTYPE 根元素 SYSTEM "外部DTD文件路径">
3、 内外部DTD文档结合格式: <!DOCTYPE 根元素 SYSTEM "外部DTD文件路径" [定义内容]>
三、元素的定义
基本语法:<!ELEMENT 元素名称 元素的内容的类型>
主要是要使用ELEMENT关键字,然后要设置元素名称。另外一个包含很多种情况的就是 元素的内容的类型。
元素的内容的类型包含如下情况:
1、 EMPTY (空元素)不能包含任何子元素和文本,只能有属性。
2、(#PCDATA) 只能有文本,不能有子元素。
3、 ANY 可为任何在DTD中定义的元素内容 或 任何文本。
4、(子元素1,子元素2 …)
纯元素类型 只含子元素,逗号分割子元素。且顺序不可颠倒,不能包含文本
注意:子元素可以使用修饰符号来限定出现此次数
? 表示 0-1次 ; + 表示 1-多次; * 表示 0-多次
注意:子元素可以使用分组或者来设定
()分组; | 选择
eg: (age|birthday) 任选一个
四、属性的定义
基本语法:<!ATTLIST 所属元素名称
属性名称 属性值类型 属性的特点
……
>
常用的 属性值类型 :
1、CDATA:任何字符(包括数字和中文)
2、NMTOKEN/NMTOKENS:不包括中文的 任何字符
NMTOKEN不能包含空格
NMTOKENS可以以空格分割为多段。
3、ID:各元素的属性值不能重复 , 属性值必须合乎元素名命名规范。
4、IDREF/IDREFS:指向文档中其它地方声明的ID类型的值。
IDREFS : 指向以空格分割的多个ID值。
5、(值1|值2 …):Enumerated枚举类型的值。(设定取值范围)
6、ENTITY/ENTITIES:包含一个或多个实体,属性中调用实体不用&
常用的 属性的特点 :
1、#REQUIRED 必须有
2、#IMPLIED 可选
3、#FIXED “值” 固定值
4、“值” 默认值
五、实体 :是可重复使用的存储单元 ,相当于常量。
作用 :避免重复输入,方便内容修改。
分类 :
1、内部实体
语法 :<!ENTITY 实体名 "实体值">
调用 &实体名;
2、外部实体 :通过URI指向外部的存储单元。
语法 :<!ENTITY 实体名SYSTEM "URI/URL">
调用 &实体名;
3、参数实体 :在DTD代码中使用的实体。
语法 :<!ENTITY % 实体名 "实体值">
调用 %实体名;
4、系统定义实体 存储特殊字符
< <
> >
& &
" "
' '
六、综合示例
xml文件代码
test.dtd