第3章 文档类型定义(DTD)_第1页
第3章 文档类型定义(DTD)_第2页
第3章 文档类型定义(DTD)_第3页
第3章 文档类型定义(DTD)_第4页
第3章 文档类型定义(DTD)_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章文档类型定义(DTD)本书前面章节曾经谈到XML文档的结构“可以用严格的语法约束”。本章将针对文档类型定义(DTD)和架构(Schema)进行讲述。这两种方法就是用于描述和约束XML文档结构的。描述、约束XML文档的结构,其目的并不在于削足适履,减弱XML的灵活性和可扩展性。3.1什么是DTD文档类型定义(DocumentTypeDefinition,DTD)是关于文档中所用到标记符的语法规则,它指定标记符名称、标记符的出现次序、标记符的嵌套规则及标记符属性等。3.1.1DTD的概述DTD是用于描述、约束XML文档结构的一种方法,它定义了XML文档中的合法元素。在XML中可以创建一个或多个元素(也就是HTML中所谓的标记),这些元素集(也叫标记集)可以通过DTD来定义。DTD是可有可无的,用它来描述、约束XML文档的结构,其目的主要是在XML文档的开头对文档内容和大体结构进行描述,以便提供对文档内容进行严格检验的依据。1.描述文档内容和结构2.验证文档的合法性3.提高XML应用的开发效率和规范程度。3.1.2第一个DTD示例图3.2“Grid”显示模式

3.1.3DTD的基本结构DTD的基本结构包括XML声明、元素(ELEMENT)声明和属性列表(ATTLIST)声明等。3.1.4定义元素及其后代定义元素即对XML文档中所使用元素及其使用方法的定义。定义包括元素名称和构成元素的基本类型两部分,构成元素的基本类型包括简单类型和复合类型两种。包含子元素的元素称为父元素,子元素称为父元素的后代。1.元素定义的方法2.子元素声明约束3.1.5定义元素属性元素属性就是该元素区别于其他元素的特有本质。为详细描述某一元素,在定义元素时可同时定义该元素的属性。元素可以定义属性也可以不定义属性。元素属性定义包括属性名称、变量类型和预定义属性等,属性可以有一个,也可以有多个;多个属性时,各属性排列次序对XML文档不构成限制。3.1.6DTD中的注释DTD中也可以添加注释,注释方式与XML文档相同。像所有注释一样,注释内容是为了方便人们理解源代码结构的,XML解析器在解析源代码时会忽略注释部分。DTD中的注释不能出现在声明语句当中,只能出现在声明语句的前面或后面。读者可以根据不同编码习惯,选择前面或后面进行注释。3.1.7在文档间共享通用的DTD为方便多个文档共享同一个DTD,可以将DTD单独定义在一个文件中。XML文档只要添加对DTD文件的引用就可以起到文档内DTD的作用了。这样,多个XML文档就可共享同一个DTD文件了。3.2DTD中的属性声明在DTD声明元素的同时,还可以指定元素具有的属性。DTD中的属性声明不仅约束了XML文档中元素的属性名,还约束了元素的取值类型。3.2.1在DTD中声明属性在DTD声明属性的标记是<!ATTLIST>,其声明语法如下所示。<!ATTLISTElement_NameAttribute_NameAttribute_TypeDefault_Value>在DTD声明属性目的是为了限制XML文档中元素的属性。应该充分考虑元素所具有的属性,抽取出元素属性的限制条件,再在DTD中进行属性声明,从而方便有效性检测。盲目声明属性反而会造成不必要的麻烦。3.2.2声明多个属性与客观世界相似,元素可以有多个属性,这时就需要使用属性列表。属性列表声明语法如下所示。<!ATTLISTElement_NameAttribute_Name1Attribute_TypeDefault_ValueAttribute_Name2Attribute_TypeDefault_Value……>元素属性的声明顺序不对XML文档构成限制,但为了便于理解和后期维护,这里建议在XML文档中的属性顺序应按照其引用的DTD中的声明顺序来排列。3.2.3指定属性的默认值元素某属性可能是某一个不变常量,这时可指定该属性为这个常量。例如,假设电脑内存的主流配置是512MB,在定义DTD时指定该属性值为“512MB”,则XML文档中在不对该属性赋值的情况下就是该默认值。3.2.4属性类型属性类型是对属性取值内容的限定,属性类型如表3.2所示。3.2.5预定义属性值元素某属性可能是在XML文档定义时必须单独填写的,也可以是可有可无的,还可能要求必须使用某一个指定的值。这些要求决定了DTD必须分别对待不同情况。#REQUIRED、#IMPLIED、#FIXED三个关键词与上诉三种情况分别对应。它们的含义如表3.3所示。类型含义#REQUIRED属性不能忽略,必须在元素的属性列表中出现#IMPLIED可选属性,可以不在元素的属性列表中出现#FIXED"可选属性,如出现此属性,则其取值必须是固定的属性值。如忽略此属性,在验证文档后,元素将隐含此属性,其取值为固定的属性值3.3实体和外部DTD子集实体(ENTITY)是一种替代物,用于内容转义,在XML文档中可以直接用实体名来代替实体值使用。实体可以定义在文档的前序部分,也可以定义在DTD中。内部实体完全在文档有效空间内部定义,内部实体的值在DTD文档内部或DOCTYPE声明中声明;外部实体是在XML文档外部定义的实体,实体的值在外部资源中声明。已解析实体的值经过XML解析器解析,成为XML或DTD的一部分,如字符、数字和文本对象等;未解析实体的值未经XML解析器解析,可以是二进制数据,如图片、声音等。3.3.1内部通用实体内部通用实体一般用于声明文字替代,实体对象将替代其声明的文字内容。3.3.2外部通用实体外部通用实体是在文档实体以外定义的实体对象,要通过一个统一资源定位器(URL)才能引用到该实体。外部通用实体是一个独立的文件,可被多个文档所引用。因为一个完整的XML文档就是一个有效的实体,所以XML通过对外部通用实体的引用,可以在一个XML文档中嵌入另一个XML文档,这样多个文档就可以组合成一个文档。3.3.3内部参数实体参数实体是仅能在DTD中使用的实体,它使得能够在DTD中实现实体引用。参数实体在DTD中声明,只能在DTD文档中以“%实体名称;”的方式引用,在XML文档中不能引用DTD中定义的参数实体。在成熟的DTD文档中常使用参数实体,一般有下面几个目的。(1)使DTD的结构更加清晰,并易于编写和管理。(2)突出结构主线,使主题框架更明晰。(3)用更明确的实体名称代替一般DTD类型名称,细化含义、便于理解。3.3.4外部参数实体外部参数实体即是在外部DTD文档中声明的参数实体,它用于将多个独立的DTD文档组合成一个大的DTD文档。与外部通用实体相同,外部参数实体的引用方式如下所示。<!ENTITY%Entity_Name"URI">3.3.5根据片段创建文档如前所述,一个XML文档可以根据需要分为多个文档片断。为方便说明,这里将3.2.11.2小节的示例分为多个片断,以达到相同的目的。XML文档关联DTD的方法有两种,一种是3.1.2小节示例的方式,代码如下所示。<!DOCTYPE[…<!--DTD内容-->]>这种方式称为内部声明。XML文档也可以与外部独立保存的DTD文件相关联,这种方式称为外部声明。其声明方式如下所示。<!DOCTYPEDTD_NameSYSTEM"DTD文件路径">3.3.6结构完整的文档中的实体和DTD结构完整的文档包括无DTD的结构完整的XML文档,如前两章的示例;包含DTD中的约束条件的有效的XML文档,如本章前面的示例;包含但不符合DTD中约束条件的完整的XML文档。第三种情况的DTD形式与第二种相同,所不同的是解析器只处理DTD中的ENTITY声明。3.4Schema简介在XML技术成为万维网推荐标准之后,DTD体现出的不少局限性,万维网协会又推出了用于描述、约束、检验XML文档的新方法:Schema(XML架构)。Schema也是用来定义XML文档、并利用该定义验证XML文档是否符合要求的一种技术。Schema对XML文档结构的定义和描述主要作用是用来约束XML文档,并验证XML文档有效性。3.4.1Schema概述如上所述,Schema是针对DTD在XML应用过程的局限性而推出的,Schema除了可以与DTD一样,描述、约束XML文档的结构和内容外,还克服了DTD的缺陷。Schema与DTD优劣对比有如下几点。1.语法结构问题2.数据类型问题3.文档结构问题4.名称空间问题3.4.2定义元素及其后代Schema文档中的元素通过使用element关键字来声明。元素声明定义了元素名称、内容和数据类型等属性。按照元素在Schema中的位置来分,在架构中处于“schema”根元素下的元素,称为“顶层元素”(Top-levelelements)。在顶层元素下,包含更多的元素,这些元素和顶层元素一起使用。顶层元素包含以下几项内容。(1)声明元素和属性(element、attribute和attributeGroup)。(2)定义数据类型、元素组(complexType、simpleType和group)。(3)声明表示法(notation)。(4)注释文档(annotation)。3.4.3Schema的应用此处还以3.1.2小节的示例为参照,将其中DTD实现的功能用Schema来代替,从而验证Schema的功能,也便于Schema与DTD的比较。3.5XML命名空间XML作为一种允许用户定义自己标记的标记语言,很可能出现名称重复的情况,命名空间是一种避免名称冲突的方式。W3C颁布的命名空间(NameSpace)标准中对命名空间的定义是:XML命名空间提供了一套简单的方法,将XML文档和URI引用标记的名称相结合,来限定其中的元素和属性名。也即命名空间给XML名称添加前缀,使其能够区分所属的领域,从而为元素和属性提供唯一的名称,其最重要的用途是用于融合不同词汇集的XML文档。3.5.1什么是命名冲突在相同的作用域当中,如果有两个元素或属性的名字完全相同,就会出现冲突。例如,我的电脑包括内存和硬盘两个元素,这两个元素都包括容量这个属性。当这两个元素统称为存储设备时,内存设备要用到两容量属性,这时容量属性就会出现冲突,不知道具体是哪一个容量属性。3.5.2解决命名冲突途径为解决命名冲突的问题,引入命名空间的概念。命名空间的声明方法为:xmlns="namespaceURI"或者xmlns:某前缀="namespaceURI"“xmlns=”和“xmlns:某前缀="为命名空间声明,等号后面以引号括起的值,必须是一个统一格式资源标识符(URL),用来代表名称空间所属的领域。第一种是默认命名空间声明,第二种是显式命名空间声明。3.5.3命名空间的使用声明了命名空间,有了命名空间下的合法名称,就可以使用命名空间来区别具有相同名称的元素和属性了。命名空间的使用方法是在属于该名称空间的元素或属性名称前添加前缀和冒号“:”,表示其所属的名称空间。3.5.4DTD与命名空间在命名空间声明中,命名空间名其目的在于标识特定的命名空间。XML解析器遇到一个命名空间声明后,就把等号左边的命名空间前缀和右边的命名空间名绑定在一起,对于后面使用了该前缀的合法名称,都可以归属于同一个命名空间中。根据DTD进行有效性检测时,也并不是把这个命名空间映射到URI所指的DTD文件,而是去找所有在DOCTYPE中声明的内部和外部的DTD,看其所定义的哪一个元素或属性名与文档中用到的元素或属性名相同。3.6小结本章主要学习了DTD的基本概念和语法,包括在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论