1、在XML文档中怎么使用DTD
导入方式 语法格式 说明 内部DTD
将DTD定义放在XML文档内部,紧跟在XML声明和处理指令后面
如:
]>
外部DTD
将DTD单独定义在一个文件内,然后通过关键字SYSTEM导入DTD
如:
公用DTD
公用DTD,这种DTD一般是由某个权威机构指定,供特定行业或公众使用,通过关键字PUBLIC导入
如:
2、 DTD的结构
DTD文档本身不是XML文档,而只是为XML定义语义约束的文档,DTD文档的语法非常简单,大致有如下结构:
(1)第一行是DTD文档的声明,语法和XML的声明相同
(2)0到多个注释部分,DTD注释与XML注释语法相同
(3)0到多个 定义,每个 定义一个XML元素
(4)0到多个 定义,每个 为XML元素定义一个属性
(5)0到多个 定义,每个 定义一个实体
(6)0到多个 定义,每个 定义一个符号
其中 、 、 、 4个定义彼此完全独立,无须互相嵌套,下面就逐一说明这四种定义。
3、定义元素
(1)元素类型定义,Element Type Definition,简称ETD
(2) 元素类型
元素类型 定义格式 说明 任意类型 元素可以是字符串,可以是空元素,也可以包含子元素 字符串值 元素值只能是字符串,不可以是空元素,也不能包含子元素 空元素 包含子元素 比较复杂,需要详细定义子元素之间的顺序以及子元素出现的次数等 混合类型 指定值只能是几个确定的类型,比任意类型有更强的约束,但功能相当,应尽量使用混合类型关于混合类型的定义,说明几点:
A:#PCDATA必须放在最前面
B:#PCDATA和各子元素之间只能用竖线(|)分隔,不要使用逗号分隔
C:不要在子元素之后使用?、*、+等表示频率的修饰符
(3)定义子元素
定义子元素的语法 说明 子元素的出现频率修饰词 说明 (子元素1,子元素2,...) 使用英文逗号定义有序的子元素 默认(没有修饰词) 出现一次,且只能出现一次 (子元素1|子元素2|...) 使用竖线定义互斥的子元素 ? 出现0或1次 ((子元素1,子元素2)|(子元素3,子元素4)) 使用括号将子元素分组 + 出现1或多次 (子元素1|子元素2|...)+ 使用竖线互斥,然后使用频率修饰实现定义无序的子元素 * 出现0或多次4、定义属性
在XML中,属性不能单独存在,因此定义属性时必须指定属于哪个元素。定义属性的语法格式如下:
(1)属性类型
类型 说明 CDATA 该属性值只能是字符串数据 (en1|en2|en3) 该属性值必须是一系列枚举值之一 ID 该属性值必须是有些的标识符,且该属性值可用于标识该元素,因此必须在此XML文档中唯一 IDREF 该属性值必须是引用另一个已有的ID类型的属性值 IDREFS 该属性值必须是引用已有的一个或多个ID类型的属性值,多个ID类型的属性值之间使用空格分隔 NMTOKEN 该属性值必须是合法的XML名称,必须是字符串数据,比CDATA约束更强,只能由字母、数字、下划线、中划线,点号和冒号组成 NMTOKENS 该属性值必须是一个或多个NMTOKEN类型的属性值,多个使用空格分隔 ENTITY 该属性值是一个外部实体,比如图片 ENTITIES 该属性值是一个或多个ENTITY类型的属性值,多个使用空格分隔 NOTATION 该属性值是在DTD中声明过的符号(NOTATION),这是个将要过期的规范,尽量避免使用 xml: 该属性值是一个预定义的XML值(2)元素对属性的约束与默认值的关系
元素对属性的约束 说明 默认值 未指定 必须指定默认值 #REQUIRED 必须的属性,必须为相应元素提供该属性 不能指定默认值 #IMPLIED 该属性可有可无 不能指定默认值 #FIXED 该属性值是固定的,定义时必须指定固定值 必须指定默认值5、定义实体
实体引用就是用一个字符串代替另一个字符串,类似于C语言中的宏,上一篇笔记中已经提到过XML中内置的5个实体引用,在这里接着看看怎么自定义实体引用。
实体类型 使用场所 定义语法 使用语法 说明 普通实体 XML &实体名; 参数实体 DTD %实体名; 必须在使用前先定义 外部实体 XML &实体名; 这里外部文件必须是满足XML文档结构的文本文档 公用外部实体 XML &实体名; 外部参数实体 DTD %实体名; 公用外部参数实体 DTD %实体名; 未解析实体 XML 需要通过ENTITY等类型的属性调用 未解析实体不能由XML文档解析,而需要根据相应的符号名去解析 公用未解析实体 XML6、定义符号
定义符号也有两种语法格式,分别定义普通符号和公用符号:
符号类型 定义语法 普通符号 公用符号符号值通常有两种形式:
(1)MIME:通用MIME类型的文件总是由相应的程序负责处理
(2)外部程序所在路径:直接指定某个外部程序负责处理XML文档中的外部数据
符号通常有两种用途:
(1)如上,符号可以用来定义未解析实体
(2)符号可以作为ENTITY或ENTITIES类型的属性值
(3)符号还可以作为NOTATION类型的属性的值,定义NOTATION类型的属性时,语法如下:
比一般的属性定义多一个值的列表。
查看更多关于XML学习笔记2??DTD_html/css_WEB-ITnose的详细内容...