1、2024/8/30 周五1第第3章章 文档类型定义文档类型定义(DTD)o了解了解DTD的作用的作用o掌握掌握DTD的语法规则的语法规则o掌握掌握DTD的使用方法的使用方法o掌握用掌握用XMLSpy2005进行进行DTD的编辑的编辑o利用利用XMLSpy2005自动生成自动生成DTD 2024/8/30 周五23 文档类型定义文档类型定义(DTD)oXML文档最主要的用途是被程序处理,然而开发文档最主要的用途是被程序处理,然而开发XML文档的时候是自由,这可能会给程序处理带文档的时候是自由,这可能会给程序处理带来一定的麻烦!比如说,对于来一定的麻烦!比如说,对于“作者作者”这一属性,这一属性,
2、你可以定义成你可以定义成“author”,也可以定义成,也可以定义成“作者作者”,此时程序变得不好处理,因此需要一定的规范。,此时程序变得不好处理,因此需要一定的规范。XML提供了一种机制提供了一种机制文档类型定义文档类型定义(Document Type Definition,DTD),并),并将其作为规范来对将其作为规范来对XML文挡的编写加以限制,并文挡的编写加以限制,并且大家都来遵守,这样程序处理起来就容易多了。且大家都来遵守,这样程序处理起来就容易多了。2024/8/30 周五33.1DTD的作用的作用oDTD是一套关于标记的语法规则,它说明了在是一套关于标记的语法规则,它说明了在XM
3、L文档中可以使用哪些标记,哪些标记具有属文档中可以使用哪些标记,哪些标记具有属性,以及所使用的标记出现的顺序是什么。性,以及所使用的标记出现的顺序是什么。o通过创建通过创建DTD,能够正式而精确地定义词汇表。,能够正式而精确地定义词汇表。所有词汇表规则都包含在所有词汇表规则都包含在DTD中。凡是没有在中。凡是没有在DTD中出现的规则都不属于词汇表的一部分,因中出现的规则都不属于词汇表的一部分,因此解析器可以利用此解析器可以利用DTD验证文档标记的有效性。验证文档标记的有效性。使用使用DTD时只需在文档实例中写入一条简单的声时只需在文档实例中写入一条简单的声明语句,解析器就能够获取明语句,解析器
4、就能够获取DTD,并将其中的内,并将其中的内容与文档实例进行比较。容与文档实例进行比较。2024/8/30 周五43.1DTD的作用的作用oXML创作工具也可以通过类似的方式使用创作工具也可以通过类似的方式使用DTD。一旦选择了一旦选择了DTD,创作工具就能够实施,创作工具就能够实施DTD中的中的规则,它根据规则,它根据DTD中说明的结构,仅允许用户在中说明的结构,仅允许用户在文档中添加文档中添加DTD允许的元素或属性。允许的元素或属性。2024/8/30 周五53.2 DTD元素元素 o3.2.1 DTD元素的定义元素的定义n元素类型声明指出元素类型的名称以及该元素所元素类型声明指出元素类型
5、的名称以及该元素所允许拥有的内容。允许拥有的内容。元素类型的声明以元素类型的声明以”结束,其格式如下:结束,其格式如下:2024/8/30 周五63.2 DTD元素元素o对元素声明应注意几点:对元素声明应注意几点:(1)ELEMENT是关键字,必须大写是关键字,必须大写 (2)根据元素所包含的内容,可以将元素内容类型归纳为以下六种:根据元素所包含的内容,可以将元素内容类型归纳为以下六种:简单类型:元素内容只能是文本字符内容,且没有属性;简单类型:元素内容只能是文本字符内容,且没有属性;包含简单内容的复杂类型:元素内容只能是文本字符内容,但可以有属性;包含简单内容的复杂类型:元素内容只能是文本字
6、符内容,但可以有属性;包含复杂内容的复杂类型:元素内容可以包含子元素,也可以有属性;包含复杂内容的复杂类型:元素内容可以包含子元素,也可以有属性;混合内容类型:元素内容既可以有文本字符内容,也可以包含子元素,同混合内容类型:元素内容既可以有文本字符内容,也可以包含子元素,同时还可以有属性;时还可以有属性;空内容类型:元素内容为空,但可以有属性,此类元素一般都带有属性;空内容类型:元素内容为空,但可以有属性,此类元素一般都带有属性;任何内容类型:元素内容不受限制,也可以有属性。任何内容类型:元素内容不受限制,也可以有属性。2024/8/30 周五7简单类型声明简单类型声明简单类型声明简单类型声明
7、简单类型表示元素只能含有文本字符,声明语法如下:简单类型表示元素只能含有文本字符,声明语法如下:例如对例例如对例3-1中的中的“说明说明”元素的声明:元素的声明:对于这个声明,以下的对于这个声明,以下的“说明说明”元素的使用都是合法的:元素的使用都是合法的:&content;某公司部分联系人信息某公司部分联系人信息2024/8/30 周五8包含简单内容的复杂类型声明包含简单内容的复杂类型声明包含简单内容的复杂类型声明包含简单内容的复杂类型声明带有简单内容的复杂类型的元素类型声明带有简单内容的复杂类型的元素类型声明,采用的结构与简单采用的结构与简单类型声明的结构一样。但是在该元素上还有属性定义,
8、即还类型声明的结构一样。但是在该元素上还有属性定义,即还要在要在DTD 中给该元素声明属性。中给该元素声明属性。如例如例3-1中的中的“电话电话”元素的声明:元素的声明:对于这个声明,对于这个声明,“电话电话”元素的以下使用是合法的:元素的以下使用是合法的:(010)62345678 138804430132024/8/30 周五9包含复杂内容的复杂类型声明包含复杂内容的复杂类型声明包含复杂内容的复杂类型声明包含复杂内容的复杂类型声明复杂内容表示元素内容可以包含其他元素作为该元素的子复杂内容表示元素内容可以包含其他元素作为该元素的子元素。复杂类型表示该元素上可以有属性。对复杂内容的元素。复杂类
9、型表示该元素上可以有属性。对复杂内容的声明,只需将含有简单内容的复杂类型的声明中内容模型声明,只需将含有简单内容的复杂类型的声明中内容模型部分改为相应的子元素即可,语法如下:部分改为相应的子元素即可,语法如下:对于所包含子元素,可以控制其出现的先后顺序,出现对于所包含子元素,可以控制其出现的先后顺序,出现的次数,从子元素中进行选择,还可以对子元素进行分组。的次数,从子元素中进行选择,还可以对子元素进行分组。2024/8/30 周五10(1)控制子元素出现的先后顺序)控制子元素出现的先后顺序 在这种格式下,元素拥有哪些子元素、每个子元素出现的次数和位置都有明确的规定,在在这种格式下,元素拥有哪些
10、子元素、每个子元素出现的次数和位置都有明确的规定,在具体的文档实例中,必须严格执行。这就是子元素列表的设置方式。语法如下:具体的文档实例中,必须严格执行。这就是子元素列表的设置方式。语法如下:如:如:这个声明中,这个声明中,“个人信息个人信息”就可以包含两个就可以包含两个“喜好喜好”子元素,以下实例是合法的:子元素,以下实例是合法的:张三张三 男男 书法书法 音乐音乐 2024/8/30 周五11(2)控制元素出现的次数)控制元素出现的次数 可以利用简单的符号来控制元素出现的次数。可以利用简单的符号来控制元素出现的次数。DTD支持的可以控制元素出支持的可以控制元素出现次数的符号有:现次数的符号
11、有:?0次或次或1次次 1次或多次次或多次 0次或多次,即任意次次或多次,即任意次(3)从元素中进行选择)从元素中进行选择 有时需要在两个或多个互斥的元素中选择其中一个。从多个元素中进行有时需要在两个或多个互斥的元素中选择其中一个。从多个元素中进行选择使用选择使用“或或”符号即符号即“|”,语法如下:语法如下:如:如:2024/8/30 周五124)对子元素进行分组)对子元素进行分组 对子元素进行分组的语法如下:对子元素进行分组的语法如下:!ELEMENT element(child_element,(child_element,),)如:如:2024/8/30 周五13指示符指示符*的使用的
12、使用oo!DOCTYPE year!DOCTYPE year ooooooooooo4,5,64,5,6o7,8,97,8,9o7,8,97,8,9ooflower:hibiscusflower:hibiscusoflower:camelliaflower:camelliaoflower:plum blossomflower:plum blossomoooflower:hibiscusflower:hibiscusoflower:camelliaflower:camelliaoflower:camelliaflower:camelliaoflower:camelliaflower:camell
13、iaoflower:plum blossomflower:plum blossomoo2024/8/30 周五14指示符指示符?的使用的使用oo!DOCTYPE year ooooooooooo4,5,6o7,8,9ooflower:hibiscusoflower:plum blossomoo2024/8/30 周五15oo!DOCTYPE year ooooooooooo1,2,3o4,5,6o7,8,9ooflower:hibiscusoflower:camelliaoflower:camelliaoflower:camelliaoflower:plum blossomoo指示符指示符+的
14、使用的使用2024/8/30 周五16指示符指示符|的使用的使用oo!DOCTYPE year oooooooooooooooooooooflower:winter jasmineoooflower:guava blossomoooflower:chrysanthemumoooflower:plum blossomoo2024/8/30 周五17指示符的综合应用指示符的综合应用oo!DOCTYPE year oooooooooooooooooooooflower:winter jasmineoooflower:guava blossomoflower:guava blossomogfgooof
15、lower:chrysanthemumo8o7o9oooflower:plum blossomoflower:plum blossomoo2024/8/30 周五18混合内容类型声明混合内容类型声明混合内容类型声明混合内容类型声明混合内容类型的元素允许其内容可以既包含字符数据又含有子混合内容类型的元素允许其内容可以既包含字符数据又含有子元素。声明此类元素的基本语法如下:元素。声明此类元素的基本语法如下:例如:例如:元素既有字符数据又可包含子元素,从表面上看元素内容的元素既有字符数据又可包含子元素,从表面上看元素内容的限制少了,但这样会扰乱文档的层次结构,一般在完成的限制少了,但这样会扰乱文档的
16、层次结构,一般在完成的文档中是不应该出现这种混合元素的。从技术上说,可以文档中是不应该出现这种混合元素的。从技术上说,可以轻易地建立一个元素来包含这些字符数据。包含混合内容轻易地建立一个元素来包含这些字符数据。包含混合内容的元素在实际应用中,用的较少。的元素在实际应用中,用的较少。2024/8/30 周五19混合内容实例混合内容实例混合内容实例混合内容实例oo!DOCTYPE year oooooooospringosummeroautumnooflower:hibiscusoflower:camelliaoflower:plum blossomooo10o11o12ooxxxo2024/8/
17、30 周五20空内容类型声明空内容类型声明空内容类型声明空内容类型声明在在XML实例文档中,还可能有这样的元素,元素本身不包含任实例文档中,还可能有这样的元素,元素本身不包含任何的内容,但可以有属性。这种元素是声明语法如下:何的内容,但可以有属性。这种元素是声明语法如下:例如:例如:在在XML实例文档中,使用如下:实例文档中,使用如下:一般情况下,空元素都包含属性,否则该元素的出现没有一般情况下,空元素都包含属性,否则该元素的出现没有多大的意义。多大的意义。2024/8/30 周五21任何内容类型声明任何内容类型声明任何内容类型声明任何内容类型声明这是对于元素内容的最为宽松的限定,实际对元素内
18、容几乎没有任何的要求,这是对于元素内容的最为宽松的限定,实际对元素内容几乎没有任何的要求,语法如下:语法如下:例如:例如:!ELEMENT 说明说明 ANY 实际应用中,除非文档明确要求使用这样的元素,否则最好避免使用这实际应用中,除非文档明确要求使用这样的元素,否则最好避免使用这种设定。过分的滥用将导致文档结构的不明确,这与使用种设定。过分的滥用将导致文档结构的不明确,这与使用DTD的初衷背的初衷背道而弛。应该尽可能准确地描述每个元素的内容。道而弛。应该尽可能准确地描述每个元素的内容。2024/8/30 周五22任何内容类型实例任何内容类型实例任何内容类型实例任何内容类型实例oo!DOCTY
19、PE year oooooooospringosummeroautumnooflower:hibiscusoflower:camelliaoflower:plum blossomooo10o11o12oo2024/8/30 周五233.3 DTD中的属性声明中的属性声明 同元素一样,所有有效的同元素一样,所有有效的XML文档中使用到的属性也必须先在文档中使用到的属性也必须先在DTD中进中进行声明。声明的内容包括属性在哪个元素上使用,属性的名称,属性值行声明。声明的内容包括属性在哪个元素上使用,属性的名称,属性值的类型,属性默认值,以及元素是否必须要有该属性等信息。的类型,属性默认值,以及元素是
20、否必须要有该属性等信息。属性声明语法属性声明语法 单个属性的声明:单个属性的声明:同一元素上多个属性的声明,即属性列表声明:同一元素上多个属性的声明,即属性列表声明:2024/8/30 周五24属性默认值的定义属性默认值的定义属性默认值的定义属性默认值的定义在在DTD中声明属性的默认值时,可以通过设定中声明属性的默认值时,可以通过设定Keyword的值,的值,对属性的取值作出一些规定,根据这些规定的具体的情况,对属性的取值作出一些规定,根据这些规定的具体的情况,属性的默认值又可以分为以下属性的默认值又可以分为以下4类。类。1、将、将Keyword设置为设置为“#IMPLIED”:表示该属性是可
21、选:表示该属性是可选的,即在的,即在XML 实例文档中,该可以有该属性,也可以没有。实例文档中,该可以有该属性,也可以没有。声明语法如下:声明语法如下:2024/8/30 周五25#IMPLIED#IMPLIED的使用的使用的使用的使用oo!DOCTYPE customerInfo ooooooooooooo2024/8/30 周五26#REQUIRED#REQUIRED的使用的使用的使用的使用2、将、将Keyword设置为设置为“#REQUIRED”:表示属性是必须的,即在:表示属性是必须的,即在XML 实例文档中,必须使用该属性。声明实例文档中,必须使用该属性。声明语法如下:语法如下:oo
22、!DOCTYPE customerInfo oooooooooooo2024/8/30 周五27#FIXED#FIXED的使用的使用的使用的使用3、将将Keyword设置为设置为“#FIXED”:表示该属性的值是固定不可变的,在这种情况下,必须给出属性的默:表示该属性的值是固定不可变的,在这种情况下,必须给出属性的默认取值。声明语法如下:认取值。声明语法如下:oo!DOCTYPE customerInfo ooooooooooo2024/8/30 周五28使用默认值使用默认值使用默认值使用默认值4、没有设置、没有设置Keyword,直接给出默认值,声明语法如下:,直接给出默认值,声明语法如下:
23、nn!DOCTYPE customerInfo nnnnnnnnnnnnnn2024/8/30 周五293.3 DTD属性类型属性类型o3.3.2属性类型属性类型 属性类型是属性类型是DTD属性声明的一个组成部分,它指属性声明的一个组成部分,它指定了可以给文档中的属性赋予的数值类型。定了可以给文档中的属性赋予的数值类型。2024/8/30 周五303.3 DTD属性属性10种数据类型种数据类型类类 型型 含含 义义 CDATA 表明该属性只能包含字符数据表明该属性只能包含字符数据 Enumerated 可能取值的列表,可以从中选出正确的值可能取值的列表,可以从中选出正确的值 ID 不能被文档中
24、其他任何不能被文档中其他任何ID类型属性共享的数类型属性共享的数字,具有唯一性字,具有唯一性 IDREF 文档中元素的文档中元素的ID类型属性的值类型属性的值 IDREFS 由空格分开的若干个由空格分开的若干个ID NMTOKEN XML名称名称 NMTOKENS 由空格分开的多个由空格分开的多个XML名称名称 ENTITY 在在DTD中声明的实体名中声明的实体名 ENTITIES 在在DTD中声明的实体的名称,用空格分开中声明的实体的名称,用空格分开 NOTATION 在在DTD中声明的注释名中声明的注释名 2024/8/30 周五31CDATA类型类型 表示字符串数据,表示字符串数据,“”
25、和和“”“”不能出现在字符串中不能出现在字符串中,需要使用它们时需要使用它们时,可通过实体引用可通过实体引用.例例:oo!DOCTYPE customerInfo oooooooo oo2024/8/30 周五32Enumerated类型类型oEnumerated类型是一种枚举类型类型是一种枚举类型,它提供给属性一个可选的属性值集合它提供给属性一个可选的属性值集合,属性的值必须在属性的值必须在o这个集合中这个集合中,并且只能选一个值并且只能选一个值.例例:oo!DOCTYPE customerInfo oooooooo o oo例中有两个枚举类型的属性例中有两个枚举类型的属性,对于属性对于属性
26、sex有两个可选的值有两个可选的值male和和female,不能选择这两个值之外的不能选择这两个值之外的值值.对于属性对于属性check,由于指定了默认的属性值为由于指定了默认的属性值为no,所以当元素没有选定所以当元素没有选定check的值的值-如第二个如第二个customer属性则显示时会自动添加属性则显示时会自动添加”check=no”的属性的属性.2024/8/30 周五33ID类型类型ID用于标识一个用于标识一个XML文档中的属性文档中的属性,使得每个属性都具有唯一的使得每个属性都具有唯一的ID号号.例例:oo!DOCTYPE year ooooooooooooflower:wint
27、er jasmineoflower:apricot blossomoflower:peach blossomoo2024/8/30 周五34o这里出现错误这里出现错误,出现两个的出现两个的no属性值都为属性值都为m1的情况的情况,必须将它改成下面必须将它改成下面的代码才是正确的形式的代码才是正确的形式:ooflower:winter jasmineoflower:apricot blossomoflower:peach blossomo2024/8/30 周五35IDREF&IDREFS类型类型oIDREF类型的属性必须是对文档中另外一个属性的引用类型的属性必须是对文档中另外一个属性的引用,由
28、于由于IDREF是对属性的引用是对属性的引用,所以所以XML文档中文档中可以出现多个相同的可以出现多个相同的IDREF引用值引用值.oIDREFS类型描述一个属性是其他多个属性类型描述一个属性是其他多个属性ID的引用的情况的引用的情况.这两种引用都必须是对已有的属性的这两种引用都必须是对已有的属性的ID数数据类型的引用据类型的引用.不能出现对不存在的不能出现对不存在的ID值的引用值的引用.例例:oo!DOCTYPE year ooooooooooooflower:winter jasmineoflower:apricot blossomoflower:peach blossomoo2024/8
29、/30 周五36o这里将这里将Feb的的no属性声明为属性声明为IDREF类型类型,而不是而不是ID类型类型,所以是正确的所以是正确的.oflower:apricot blossomo多个多个ID类型的引用类型的引用,则将属性声明为则将属性声明为:oo数据部分改为数据部分改为:oflower:apricot blossom2024/8/30 周五37NMTOKEN和和NMTOKENS类型类型oNMTOKEN属性类型限定属性值为有效的属性类型限定属性值为有效的XML名称名称,例例:ooo则下面的则下面的XML事例片段是合法的事例片段是合法的:o李海李海o如果把如果把”Hai_li”中的下划线改成
30、空格就是非法的了中的下划线改成空格就是非法的了.实际应用中实际应用中,我们更希望将下划线改成空格我们更希望将下划线改成空格,这时这时候就要用到候就要用到NMTOKENS类型类型.NMTOKENS是由多个是由多个NMTOKEN构成的构成的,是以空格分隔开的是以空格分隔开的NMTOKEN类型值的列表类型值的列表.例例:ooo则下面的则下面的XML实例片段是合法的实例片段是合法的:o李海李海2024/8/30 周五38ENTITY类型和类型和ENTITYS类型类型oENTITY(实体实体)类型提供把外部二进制数据和外部实体链接到文档中的能力类型提供把外部二进制数据和外部实体链接到文档中的能力.ENT
31、ITY属性值为属性值为DTD中声中声明的通用实体名明的通用实体名,该实体名链接到外部实际数据。典型的例子就是链接外部文件和图像。该实体名链接到外部实际数据。典型的例子就是链接外部文件和图像。o例如需要在每件商品添加一个说明文档,文档存储为例如需要在每件商品添加一个说明文档,文档存储为*.TXT格式,则可以这样定义和引用。格式,则可以这样定义和引用。ooo声明后就可以在声明后就可以在XML文档应用该实体了,如下所示:文档应用该实体了,如下所示:oo对于实体引用,需要在实体名前加符号对于实体引用,需要在实体名前加符号&即可,假如把一个属性定义为即可,假如把一个属性定义为ENTITIES形式的话,就
32、可以引形式的话,就可以引用多个实体了,如:用多个实体了,如:ooooo引用如下:引用如下:o2024/8/30 周五39NOTATION类型类型oNOTATION类型声明一个名字与类型标识相关联,该标识是一个系统标识或公共标识符。非解析实体类型声明一个名字与类型标识相关联,该标识是一个系统标识或公共标识符。非解析实体与该标识关联,进而可以使得类型与引用的二进制资源相关联。例:与该标识关联,进而可以使得类型与引用的二进制资源相关联。例:o!ELEMENT 图片图片 EMPTYoooo这里,当将这里,当将“jpg”作为作为NOTATION类型属性的属性值时,将把与之相关的数据发送给类型属性的属性值
33、时,将把与之相关的数据发送给jpgviewer.exe进行处理。当将进行处理。当将“gif”作为作为NOTATION类型属性的属性值时,将把与之相关的数据发送给类型属性的属性值时,将把与之相关的数据发送给gifviewer.exe进进行处理。则下面的行处理。则下面的XML实例片段是合法的:实例片段是合法的:2024/8/30 周五403.4 DTD实体实体 o在在XML文档中文档中,可以把各种不同类型的数据定义为可以把各种不同类型的数据定义为实体实体,并把它们合并到并把它们合并到XML中,使得只需要定义一中,使得只需要定义一次,就可以达到重复的使用的效果。次,就可以达到重复的使用的效果。202
34、4/8/30 周五41实体分类实体分类1、按照实体内容的位置分类、按照实体内容的位置分类 按照实体内容的位置可将实体分为两类:按照实体内容的位置可将实体分为两类:n内部实体:实体所代表的内容和实体声明在同一个文档中,即实体的内容内部实体:实体所代表的内容和实体声明在同一个文档中,即实体的内容在声明中给出,内部实体是可析实体。在声明中给出,内部实体是可析实体。n外部实体:实体所代表的内容在实体声明文档之外的文档中。外部实体:实体所代表的内容在实体声明文档之外的文档中。2、按照实体内容本身分类、按照实体内容本身分类 按照实体内容本身可以将实体分为两类:按照实体内容本身可以将实体分为两类:n可析实体
35、:实体的内容是可解析的可析实体:实体的内容是可解析的XML文本、字符、数据等。文本、字符、数据等。n不可析实体:实体的内容是不可析实体:实体的内容是XML处理器不能直接解析的,如图像、声音等处理器不能直接解析的,如图像、声音等二进制数据。不可析实体的内容是一种资源,每个不可析实体都应有一个二进制数据。不可析实体的内容是一种资源,每个不可析实体都应有一个相关联的用符号名称标识的符号(相关联的用符号名称标识的符号(Notation)。)。3、按照实体被使用的位置分类、按照实体被使用的位置分类 按照实体被使用的位置可将实体分为两类:按照实体被使用的位置可将实体分为两类:n一般实体:实体只能在一般实体
36、:实体只能在XML实例文档中被引用。实例文档中被引用。n参数实体:实体只能在参数实体:实体只能在DTD中被引用,而且它肯定是一个可析实体。中被引用,而且它肯定是一个可析实体。2024/8/30 周五42实体声明实体声明o实体声明主要包括五种类型的实体声明实体声明主要包括五种类型的实体声明,分别是分别是:内部实体、外部解析实体、非内部实体、外部解析实体、非解析实体、内部参数实体和外部参数实体。解析实体、内部参数实体和外部参数实体。o 1、内部实体、内部实体o 内部实体是在内部实体是在XML文档的文档类型定义中进行定义的,所有的内部实体都是文档的文档类型定义中进行定义的,所有的内部实体都是解析实体
37、,在解析实体,在DTD中,内部实体的定义可以通过中,内部实体的定义可以通过来实现,具体来实现,具体格式如下:格式如下:o o 其中,其中,name表示实体名称,它必须以字母或下划线开头,后面是表示实体名称,它必须以字母或下划线开头,后面是0或多个或多个字母、数字、句点字母、数字、句点(.)、连字符、连字符(-)或下划线。或下划线。Value表示实体值,对于内部实表示实体值,对于内部实体来说,实体值是一系列的字符串,要单引号或双引号来界定,但是不能包含体来说,实体值是一系列的字符串,要单引号或双引号来界定,但是不能包含与用来界定它的引号相同的引号符号。在引用实体的时用与用来界定它的引号相同的引号
38、符号。在引用实体的时用“&实体名称实体名称;”o见例见例3-3 2024/8/30 周五43实体声明实体声明o2、外部实体、外部实体o 外部实体指的是包含基本元素外部实体指的是包含基本元素/文档实体的主文件以外的数据。引用外部实文档实体的主文件以外的数据。引用外部实体,可以在从几个相互独立或不相关的文件中获取数据,从而足见体,可以在从几个相互独立或不相关的文件中获取数据,从而足见XML文档。文档。定义外部实体的格式如下所示:定义外部实体的格式如下所示:其中,其中,name表示实体名,表示实体名,fileposition表示文件名及其位置,它用单引号或表示文件名及其位置,它用单引号或双引号来做定
39、界符,并可以包含除和定界相同的引号的所有字符。文件位置也双引号来做定界符,并可以包含除和定界相同的引号的所有字符。文件位置也可以是可以是URL。见例见例:3-4 2024/8/30 周五44实体声明实体声明o3、内部参数实体、内部参数实体o 只能用于只能用于DTD中的实体称为参数实体,它是中的实体称为参数实体,它是DTD定义的一部分,不能用于定义的一部分,不能用于XML文档的其它部分,对于参数型实体可使用下列方法进行声明:文档的其它部分,对于参数型实体可使用下列方法进行声明:其中其中name表示实体名,表示实体名,Value表示实体值,实体值是一系列的字符串,要单引表示实体值,实体值是一系列的
40、字符串,要单引 号或双引号来界定,但是不能包含与用来界定它的引号相同的引号符号。在引用号或双引号来界定,但是不能包含与用来界定它的引号相同的引号符号。在引用 实体的时用实体的时用“%实体名称实体名称;”见例:见例:3-5.dtd 3-5.xml2024/8/30 周五45实体声明实体声明o4、外部参数实体、外部参数实体o 外部参数实体的功能主要在于将一个很长的外部参数实体的功能主要在于将一个很长的DTD文件划分成若干部分,每文件划分成若干部分,每个部分作为一个小的个部分作为一个小的DTD文档存储,在通过一定的方法将这些部分组装起来,文档存储,在通过一定的方法将这些部分组装起来,使得使得DTD文
41、档条理清晰。文档条理清晰。o见例:见例:3-6.xmlo这里有四个外部这里有四个外部DTD文件文件,对应了四个参数实体对应了四个参数实体:sp、su、au和和wi2024/8/30 周五463.5 使用使用DTD o3.5.1 内部内部DTD的使用的使用 将所需的全部声明都包含在文档内,就是一个使用内部将所需的全部声明都包含在文档内,就是一个使用内部DTD的简单实例。的简单实例。内部内部DTD的声明一定要位于文挡的的声明一定要位于文挡的XML声明之后和第一个元素之前声明之后和第一个元素之前.并且并且 DOCTYPE和和ELEMENT等关键字都需要大写等关键字都需要大写.DOCTYPE用于指定文
42、档元素用于指定文档元素,所有的关于所有的关于DTD的声明都必须位于的声明都必须位于”之间之间,ELEMENT用于声明元素用于声明元素,指出元素的结构指出元素的结构.见例见例:3-3o3.5.2 外部外部DTD的使用的使用 对于结构相同的对于结构相同的XML文档可以公用一个文档可以公用一个DTD,不需要为每个不需要为每个XML编写一个相同编写一个相同 的的DTD.引用外部引用外部DTD的格式如下的格式如下:其中其中,SYSTEM是关键字是关键字,URL是指所要引用的是指所要引用的DTD的的URL.见例见例:3-52024/8/30 周五47o3.5.3 内外内外DTD结合的使用结合的使用 相同的
43、部分使用用外部相同的部分使用用外部DTD描述,而对于不同的,特别的部分则可以使用内部描述,而对于不同的,特别的部分则可以使用内部 DTD。内外内外DTD结合的引用形式如下结合的引用形式如下:见例见例 3-6 2024/8/30 周五483.6作业作业 o建立一个联系人建立一个联系人(姓名姓名,(电话电话|EMAIL)的的XML文档文档o生成生成DTD文档文档 o命名命名DTD文档文档o将将DTD文档添加进文档添加进XML文档文档o查看最终效果,并检查文档的有效性查看最终效果,并检查文档的有效性 2024/8/30 周五49小结小结o文档类型定义(文档类型定义(Document Type Definition,DTD)作为规范来对)作为规范来对XML文挡的编写加以限制,文挡的编写加以限制,并且大家都来遵守。并且大家都来遵守。oDTD中元素类型声明的格式为中元素类型声明的格式为。oDTD中属性声明格式为中属性声明格式为。o实体是把各种不同类型的数据的定义,并把它们合实体是把各种不同类型的数据的定义,并把它们合并到并到XML中,实体可以达到重复的使用的效果。中,实体可以达到重复的使用的效果。2024/8/30 周五50 谢谢谢谢