DTD规范XML文档.ppt_第1页
DTD规范XML文档.ppt_第2页
DTD规范XML文档.ppt_第3页
DTD规范XML文档.ppt_第4页
DTD规范XML文档.ppt_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

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

文档简介

第3章DTD规范XML文档,本章知识要点:,理解DTD的基本概念掌握DTD声明XML元素的方法理解实体的概念及其作用掌握使用DTD的基本方式了解XMLSchema模式的基本概念理解XMLSchema模式的作用,DTD是DocumentTypeDefinition(文档类型定义)的缩写。XML文档是一种可扩展标记语言,它可以由DTD来定义文档元素结构(如文档中的元素、属性等)。DTD指定XML文档必须遵守的一系列规则,从而确保XML文档的一致性和有效性。,3.1DTD基本概念,XML文档为应用程序之间交换数据提供了一种标准,DTD的主要目的就是让XML文档成为数据交换的标准。这是因为不同的公司只需定义好DTD,其他公司就能够根据该DTD建立XML文档,这样公司之间就可以很方便地使用XML文档进行数据交换。,3.1.1DTD简介,由于应用需求会发生变化,从而导致先前所编写的XML文档需要加以改变以适应需求的变化。而当文档结构改变时,就需要修改程序代码。在修改过程中,如何确保XML文档的有效性将直接影响程序运行结果。为了解决这一问题,就需要依靠逻辑清晰、语法准确的文档来对XML文档加以限制。DTD的主要用途就是确保XML文档的有效性。,3.1.1DTD简介,DTD使用形式语法来描述XML文档的逻辑结构和语法。实际上DTD可以看作XML文档的模板。这些XML文档中的元素、属性、排列方式或内容等都必须符合DTD的规则。XML文档中的元素是根据实际应用来创建的。因此想要创建一份完整且具有较强适应性的DTD是非常困难的,因为各行业都有他们自己的行业特点,所以具体DTD文档通常在特定应用领域中使用,各行各业都有各自的DTD文档。,3.1.2DTD基本结构,DTD可以在XML文档中直接写入,也可以单独形成文件内部DTD是在XML文档中直接定义DTD,该DTD只能被当前XML文档使用外部DTD就是后缀为.dtd的文件,该文件可以被多个XML文档共享和DTD调用,3.1.2DTD基本结构,文档类型声明,内部DTD定义基本语法格式如下:,示例:company.xml,王刚均男1976.4.23,文档类型声明,外部DTD引用基本语法格式如下:或练习,内部子集只能在它所在的文档中可见,其他外部文档不能对它进行有效性检查,所以许多文档使用的DTD都应该放在外部子集中。,XML元素是XML文档的基本组成部分。在有效的XML文档中的任何元素都必须在DTD中进行声明。元素声明指定了每个元素的名称、属性、内容以及在文档中出现的频率并且指定XML文档中元素的层次结构。,3.2DTD对元素声明,语法格式如下:,如:,EMPTY:用于定义空元素,该元素只可能有属性而不会有元素内容如:或ANY:声明为ANY的元素可以包含DTD中定义的其他任何元素或已编译的字符数据,包括PCDATA、元素或元素与PCDATA的混合内容,也可以是空元素如:#PCDATA:声明为#PCDATA的元素不包含其他子元素而只能有文本数据,文本数据中可以是普通字符、CDATA段中的内容、字符引用和实体引用如:,3.2.2元素内容类型,子元素型元素可以包含一系列的子元素,子元素内容用于指定某个元素可以包含哪些子元素以及它们的出现次序,其语法格式如下:如:子元素内容模型可以有两种结构:序列和选择如:,3.2.2元素内容类型,混合型混合型内容说明元素既可以包含子元素又可以包含已编译的字符数据,即文本数据,其语法格式如下:如:JeffisadeveloperandauthorforBeginningXML4thedition.JefflovesXML!,3.2.2元素内容类型,基数(即元素在内容模型中出现的次数),“+”表示元素出现的次数不小于1次“*”表示元素可以出现任意多次“?”表示元素出现的次数是0次或1次none如果没有基数,表示这个元素必须出现且仅一次,这是内容模型中元素的默认方式。,3.2.3元素声明综合示例,练习:写出以下XML文档的DTD,JeffCraigRafter34.0318-117.20760818-8888888JeffisadeveloperandauthorforBeginningXML4thedition.JefflovesXML!,要求:Contact元素可出现0到任意次First元素可出现1到任意次middle元素可出现0或1次location元素可包含address或latitude、longitude子元素,属性是描述元素的额外信息的,是对元素的修饰与补充。一般地,信息详实的XML文档都具有一个特点,元素通过属性来描述边缘信息。,3.3DTD对属性声明,在DTD中,属性声明使用ATTLIST属性列表来指定元素的属性。元素的属性声明由ATTLIST关键字、元素名称以及属性定义三个部分构成。一个属性声明可以声明一个元素的多个属性。属性声明的语法格式如下:,3.3.1属性声明语法,常用的属性类型,属性类型CDATA的含义不同与第二章介绍的CDATA区段,属性类型CDATA表示可以包含任何字符串,但不允许使用小于号“”、与符号“等)来替换它们。示例:cdataDemo.xml,1.属性类型-CDATA,枚举声明了属性的备选值列表,属性必须从该列表中选择一个值作为属性值。格式如下:,2.属性类型-枚举,该属性在XML文件中是唯一的,常用来表示人的身份号码,如学生编号和身份证号码等。示例:idDemo.xmlID类型和默认值#FIXED不兼容,大多数ID属性使用#REQUIRED,3.属性类型-ID,IDREF属性类型的属性指向带有ID属性的元素。如果在DTD中使用了IDREF属性类型,则检查有效性的分析程序会确定IDREF引用的每个ID属性类型是否都在XML文档中。示例:idrefDemo.xml,4.属性类型-IDREF,IDREFS类型的属性值是一个XML元素ID类型属性的属性值列表,列表中各值之间用空格分隔,当某个元素需要引用多个其他元素时使用该类型。示例:idrefsDemo.xml,5.属性类型-IDREFS,ENTITY类型的属性包含在DTD的其他位置声明的未解实体的名称中,它能够把外部二进制数据(即外部未解析的普通实体)链接到XML文档。ENTITY类型的属性值是在DTD中声明的未解析常规实体的名称,它与外部数据相连。通用外部未解析实体的格式:,6.属性类型-ENTITY,NOTATION指令可以将未解析的二进制实体定义为标记标记描述文字可以是:处理现实二进制数据的应用程序描述格式的网络文件普通的一段描述性语言使用ENTITY类型的典型例子就是引入图像文件,如示例:entity.xml,6.属性类型-ENTITY,ENTITIES类型的属性是其他未解析实体的名称列表,实体名称之间用空格隔开,每个实体名称都引用一个外部的非XML数据源。示例:entities.xml,7.属性类型-ENTITIES,NMTOKEN类型的属性值是一个字符串值,该属性值可以有字母、数字、下划线、点号或连字符组成,属性值中不能含有空格字符,可以使用数字、点号或连字符开头。如下所示:出生日期该元素的出生日期属性值是数字和连字符组合的字符窜,在DTD中需要进行如下声明:,8.属性类型-NMTOKEN,NMTOKENS类型的属性值是多个NMTOKEN类型的属性值的列表。从另一个角度来讲,NMTOKENS类型的属性值与NMTOKEN类型的属性值的不同之处在于NMTOKENS类型的属性值中可以包含空格。如下所示:date该元素的date属性值是多个日期字符窜组合的列表,在DTD中需要进行如下声明:,9.属性类型-NMTOKENS,在DTD的属性声明语法结构中,每个ATTLIST声明除了有一个属性类型外,还必须具有附加声明。DTD提供了四种附加声明:#REQUIRED、#IMPLIED、#FIXED和缺省值。#REQUIRED:指定该属性是元素必须具有的属性#IMPLIED:指定该元素可以具有该属性也可以不具有该属性,3.3.3属性附加声明,#FIXED格式如下:如果用上述语法进行属性声明,则在相应XML文档中可以不显式使用该属性,处理器会自动为元素添加该属性及其属性值;如果显式使用该属性,那么该属性的值必须为默认值。示例:fixed.xml,3.3.3属性附加声明,缺省值如果在元素中显式指定该属性的值,默认值将不提作用;如果在元素中没有显式指定该属性的值,那么该属性的值使用默认值。示例:default.xml,3.3.3属性附加声明,一个规范的XML文档如果和某个DTD文相关联,并遵守该DTD规定的约束条件,那么该XML文档就称为有效的XML文档。我们可以把DTD文件内容直接写在XML文件的内部,也可以形成独立于XML的DTD文件。,3.4DTD引用,如果DTD文件内容直接写在XML文件的内部,那么这样的内容称为XML文件的内部DTD。,3.4.1引用内部DTD,使用外部DTD时,要在DOCTYPE中使用关键字SYSTEM或PUBLIC。使用SYSTEM关键字主要用于引用一个作者或组织所编写的众多XML文件所通用的DTD文件。在使用PUBLIC关键字引用外部DTD文件的基本语法格式中的DTD-URL被称为FPI(FormalPublicIdentifier,正式公用标识符),也称作实体的“publicld”。FPI有严格的形式,以保证它的全球唯一性。,3.4.1引用外部DTD,FPI的格式为:前缀/使用者标识/文本描述/所用语言如:-/BeginningXML/DTDContactExample/EN说明:前缀:“+”注册公共标识,“-”未注册公共标识使用者标识:拥有这个公共标识的个人或组织文本描述:有关文档的描述所用语言:文档使用的语言,3.4.1引用外部DTD,注意:FPI只能有ASCII码字符组成。,如果XML文件同时带有内部DTD和外部DTD文件,那么XML解析器会将二者合一。如果内部的DTD和外部的DTD文件同时声明了某个元素,那么将会导致错误。如果不准备更改一个已经获得广泛支持的DTD文档,但是又需要增加新的内容时,可以同时使用内部DTD和外部DTD。内部DTD可以方便地增加新内容,又不影响其他使用同一外部DTD的XML文档的有效性。示例:dtdFile.dtddtds.xml,3.4.3混合引用DTD,练习,DTD规范汽车展上汽车特性的XML文档汽车基本特性有:颜色、车门数量、车轮数量、座位数汽车附加信息:制造商、经销商,红色242白色444,XML的实体机制允许将不同类型的数据并入XML文档中。在XML文档中,可以将经常使用的XML文本区段定义成实体,这样可以快速地将XML文字插入到任何可以插入的地方。此外,也可以将外部文件定义成实体,然后将外部数据附加到XML文档。,3.5实体声明与引用,2019/12/13,43,可编辑,实体是一个预先定义的数据或数据集合。通过实体可以方便地被引用到任何需要这些数据的地方。另外,通过实体也可以将非XML数据(比如可以将图形和影像等二进制数据)引进到XML文档中。以下形式的存储单元都可以定义为实体:有效的XML文档本身外部的DTD子集定义成DTD中外部实体的外部文档在DTD中定义的、用引号括起来的字符串,3.5.1实体的概念与分类,实体可以通过下面三种方式进行分类:(1)普通实体与参数实体(2)内部实体与外部实体。(3)已解析实体与未解析实体。,3.5.1实体的概念与分类,内部普通实体就是实体的内容已经包含在DTD文件本身中并且可以在XML文档中引用的实体。内部普通实体一般包含常用文本或较难输入的文本内容。DTD文件中的内部普通实体是用声明定义的。格式:示例:comEntity.xml,3.5.2内部普通实体,注意:实体内容不能直接包含5个特殊字符,应使用字符引用。,在实体声明中,实体的内容可以包含标记,也可以包含多行文档内容,当包含多行时,必须使用双引号把内容括起来,另外实体内容必须有效,否则引用该实体的XML文档不能称为有效的XML文档。示例:comEntity1.xml,3.5.2内部普通实体,XML允许其他XML文档或文档片段嵌入到XML文档中,通过实体引用可以使解析器在指定资源上找到所需要的文档或文档片段,并将这些文档组合成为一个新XML文档。外部普通实体通过URI来定位资源数据。外部普通实体的格式分为两种:SYSTEM格式和PUBLIC格式。,3.5.3外部普通实体,SYSTEM格式示例:outEntity.xmloutMain.xmlPUBLIC格式示例:outPublicMain.xml,3.5.3外部普通实体,参数实体是专门用在DTD中的一种实体。参数实体在DTD中定义,并只能由DTD文件自身通过实体引用使用参数实体。使用参数实体不仅可以方便DTD的编写,也有利于DTD文件的维护。参数实体分为内部参数实体和外部参数实体。参数实体引用是以%开头,并以分号结束,且只出现在DTD中。内部参数实体格式:示例:innerParaEntity.xml,3.5.4内部参数实体,注意:参数实体的引用不能用在内部子集的声明语句里。,外部参数实体允许把较小规模的DTD进行组合来建立较大规模的DTD,即在一个DTD中可以引用另一个DTD文档,从而可以使用引进的DTD中元素及属性的声明。外部参数实体格式:示例:importDtd.dtdiStudent.xml,3.5.5外部参数实体,练习1,物美文一路,练习2,物美文一路,%shopattr;,%A_atrr;%B_atrr;,A.dtd,IamA!IamB;,B.dtd,练习3,如果对XML文件的约束只限于文件的标记和属性结构而不涉及文本的具体内容,那么DTD就能够满足需求;如果需要指定标记内容的数据类型(如整数、小数和字符数据等),那么XMLSchema可以很好完成任务。对于XMLSchema语言有两种模型:Microsoft开发的MicrosoftXMLSchema和W3C开发的W3CXMLSchema。MicrosoftXMLSchema已经开发成熟并运用到实际,而最为正式的XMLSchema语言是由W3C制定的XMLSchema规范,简称为xsd(XMLSchemaDefinition)。,3.6XMLSchema简介,XMLSchema是用一套预先规定的XML元素和属性创建的,这些元素和属性定义了文档的结构和内容模式,相应的一套精巧的规则(用DTD来表示)指定了每个Schema元素和属性的合法用途。如果违反这些规则,那么解析器将拒绝解析XMLSchema以及任何同它相联系的文档。,3.6.1XMLSchema基本概念,DTD的缺陷:,DTD是基于正则表达式的,描述能力有限;DTD没有数据类型的支持,在大多数应用环境下能力不足;DTD的约束定义能力不足,无法对XML实例文档作出更细致的语义限制;DTD的结构不够结构化,重用的代价相对较高;DTD并非使用XML作为描述手段,而DTD的构建和访问并没有标准的编程接口,无法使用标准的编程方式进行DTD维护。,XMLSchema的优点,XMLSchema基于XML,没有专门的语法XMLSchema可以象其他XML文件一样解析和处理XMLSchema支持一系列的数据类型(int、float、Boolean、date等)XMLSchema提供可扩充的数据模型XMLSchema支持综合命名空间XMLSchema支持属性组,我们还需要DTD吗,可以看出,XMLSchema比XMLDTD具有更强的表现力,能够更好的满足不同领域应用的需求。但是,XMLSchema模式不是万能的,XMLSchema模式的出现并不意味着抛弃DTD。因为DTD可以实现XMLSchema模式不能实现的功能,而且DTD有更广泛的解析器支持。,W3CXMLSchema数据类型分为简单类型和复杂类型两种。这些数据类型用来描述元素的内容和属性。简单类型:一个元素中仅包含数字、字符串或其他文本数据,又不包括子元素和属性XMLSchema简单数据类型分为:原子类型列表类型联合类型,3.6.2XMLSchema数据类型,内置简单数据类型,示例:,下面的XML片段是合法的:5下面的XML片段是非法的:-4,创建简单类型,我们创建了一个简单类型:quantityType,它是从integer继承过来的,minInclusive和maxInclusive定义了它的最小值2和最大值5。最后我们定义元素quantity的类型为quantityType。正确:3错误:10aaa,列表类型,list可以用来定义列表类型,listOfIntType这个类型被定义为一个Integer的列表,元素listOfMyInt的值可以是几个整数,他们之间用空格隔开。正确:15150379597795945错误:13abc,联合类型,用union来定义了一个联合类型,里面的成员类型包括USState和listOfMyIntType,应用了联合类型的元素的值可以是这些原子类型或列表类型中的一个类型的实例,但是一个元素实例不能同时包含两个类型。正确:CA956309597795945AK错误:CA95630,复杂类型:,复杂类型的元素有子元素和属性,也可以有字符内容。复杂类型子元素的顺序和结构称为它的内容模型,所有复杂类型都会包含一个内容定义类型,其主要功能是定义类型所能包含的内容模型。,复杂类型元素下可以创建的内容类型模型:,simpleContent用于从简单类型中派生复杂类型。适用于包含字符内容和属性但不包括子元素的元素。complexContent可以使用它从一个复杂类型中派生出新的复杂类型。适用于包含属性和子元素但不包含字符数据(字符数据包含在子元素中)的元素。,复杂类型:,用complexType表示这是一个复杂类型(这里我们是用匿名类型定义的)。simpleContent表示这个元素下面不包括子元素,extension表示这个元素值是decimal的,attribute来设置它的一个属性currency,类型为string.正确:423.46,混合内容,定义一个元素salutation。我们注意到在complexType后面多了一个mixed=true,这表明这是一个混合类型:里面既有元素本身的内容,又有其它子元素。name元素就是salutation的子元素。正确:DearMr.RobertSmith.错误:DearMr.,复杂类型元素下可以创建的内容类型模型:,group、all、choice和sequence用于定义一种非派生的特定类型的复杂类型,它们允许将子元素声明和引用组合起来,从而构建更有意义的内容模型。group元素是将若干元素声明归为一组,以便将其当做一个组并入复杂类型。all元素表示符合元素声明的所有元素都应该出现(以任何顺序)且只出现一次。choice元素用来声明只有一个相容元素又必须出现,用于互斥情况。sequence元素定义了一系列元素,而且必须按照模式中指定的顺序显示。,复杂类型元素下可以创建的内容类型模型:,Annotation在复杂类型的各个内容类型的语法结构中都包含annotation,用它来定义批注。批注不仅可以提供文档信息,还可以提供程序信息。,注释,为了方便其他读者和应用来理解模式文档,XMLSchema提供了三个元素用来注释:annotation、documentation、appinfo图中,我们在documentation元素中放置了一个基本的模式描述和版权信息,这是放置适合人阅读的信息的推荐位置。我们推荐你在任何的documentation元素中使用xml:lang属性来表示这些描述信息使用的语言。,XMLSchema模式扩展名为“.xsd”的一个文本文件,使用XML语法来编写,这一点和DTD文件不同。XMLSchema模式的根元素必须是schema,使用的命名空间必须是:/2001/XMLSchema或或,3.6.3XML根元素声明,Element元素声明简单类型元素的格式:声明复杂类型元素的格式:,3.6.4XML元素及其属性声明,空元素:首先我们定义一个元素,它只能包含子元素而不能包含元素内容,然后我们又不定义任何子元素,依靠这样的方式,我们就能够定义出内容模型为空的元素。,3.6.4XML元素及其属性声明,基数(元素出现次数)minOccurs:最小出现次数,默认值是1maxOccurs:最大出现次数,默认值是1默认值和固定值设定默认值和固定值是通过给空元素增加值的方式来扩展实例。如果元素为空,就填入默认值。如下所示,3.6.4XML元素及其属性声明,元素引用如果一个元素在XML文档中的不同位置上出现不止一次,那么在描述其结构的schema文档中对该元素的声明就要重复定义,这不仅影响到编写文档的速度,同时也增加了文档的复杂性。通过element元素的ref属性使用已经定义的元素可以直接将其指向另一个元素定义模块,避免在文档中多次定义同一元素,使文档更具有可读性。,3.6.4XML元素及其属性声明,构造内容模型,在purchaseOrderType定义中引入两个元素组定义,购买订单就可以有两种选择来描述地址:第一种是包含彼此独立的送货地址和收款地址,第二种情况则是仅包含一个简单的地址,这个地址即是送货地址也是收款地址.对于choice组元素而言,在实例中仅仅允许出现这个组中的一个子内容。对于图中的例子而言,第一个子内容是一个内部group元素,引用以shipAndBill命名的元素组,这个元素组由元素序列shipTo、billTo组成。第二个子内容为singleUSAddress。因此,在一个实例文档中,purchaseOrder元素必须,要么包含一个billTo元素和一个shipTo元素,要么包含一个singleUSAddress元素。choice组后面跟着的是comment和items元素声明。元素和组的声明都是sequence组的子内容。这样定义的效果是comment和items元素必须按顺序跟在地址元素后面。在内容模型中被命名或未被命名的元素组(分别由group、choice、sequence、all所表现)可以带有mi

温馨提示

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

评论

0/150

提交评论