第2章XML数据的底层结构-DTD和XMLSchema课件_第1页
第2章XML数据的底层结构-DTD和XMLSchema课件_第2页
第2章XML数据的底层结构-DTD和XMLSchema课件_第3页
第2章XML数据的底层结构-DTD和XMLSchema课件_第4页
第2章XML数据的底层结构-DTD和XMLSchema课件_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

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

文档简介

第2章XML数据的底层结构—DTD和XMLSchema2.1XML类型定义语言DTD教学内容:2.1.1DTD的作用;2.1.2DTD元素;2.1.3DTD属性;2.1.4DTD中的实体;2.1.5使用DTD.第2章XML数据的底层结构—DTD和XMLSchema12.1.1DTD的作用XML文档是一种元标记语言,即一种定义标记语言的语言。在XML中可以创建新的标记语言,这些新的标记语言(也叫标记集)要通过文档类型定义(DocumentTypeDefinitions,DTD)来定义。DTD文档是这些新的标记语言的法律性文档。如果XML文档的语法符合DTD的定义和规定,那么就称为一个合法的XML文档,否则就是非法的XML文档。.2.1.1DTD的作用XML文档是一种元2DTD定义了文档的逻辑结构,规定了文档中所使用的元素、实体、元素的属性、元素与实体之间的关系。其作用主要表现在以下几个方面:使用DTD可以提供一种统一的格式。XML的可扩展性为文档的作者提供了很高的灵活性,可有时候需要的是统一,要求某一类文档具有相同的结构。使用DTD可以保证数据交流和共享的顺利进行。DTD使用户能够不依赖具体的数据就知道文档的逻辑结构。在没有XML文档的时候,也可以根据DTD为XML文档编写样式单,编写处理程序,有效地提高工作效率。使用DTD可以验证数据的有效性。DTD对文档的逻辑结构进行了约束,这种约束可以比较宽松,也可以十分严格。可以根据DTD检查数据,以验证其是否符合规定和要求,这可以保证数据的正确和有效。(课本p12例2.1).DTD定义了文档的逻辑结构,规定了文档中所使用的元素、实体、32.1.2DTD元素

DTD中描述的基本部件是元素和属性,它们负责确定XML文档的逻辑结构。元素表示一个信息对象,而属性表示这个对象的性质。所有元素中有且只有一个根元素,其他的元素都是它的子元素,除根元素外,每个元素都被其他元素包含,一个元素可以有几个不同类型的子元素。.2.1.2DTD元素DTD中描述的基本部件41、元素的基本类型元素的基本类型大致可分为两种,一种称为简单型,另一种称为复合型。简单型具有文本数据,即可析字符数据,该类型也称为上下文中的“#PCADTA”;复合型可以包含其他元素和文本数据。.1、元素的基本类型元素的基本类型大致可分为5(1)简单型:

“#PCDATA”(ParsedCharacterData)表示标记的内容是可解析文本,所谓的可解析文本就是非标记文本。用“#PCDATA”规范了的元素不能再包含子元素。例如Howdoyoudo是不包含标记的文本,而Howdoyou<list>do</list>就不是可解析的数据类型。另外DTD文档中不同元素定义的次序没有先后关系,但文档的语法对大小写敏感。“#PCDATA”的声明格式:<!ELEMENTElement_Name(#PCDATA)>.(1)简单型:.6(2)复合型:

复合型元素与简单型元素相对,复合型元素可包含其他元素。.(2)复合型:复合型元素与简单型元素相对,72、元素的声明(1)元素声明的基本语法元素的声明格式:<!ELEMENTElement_NameElement_Defination>其中,Element_Name为声明的元素名称,Element_Defination为元素内容格式的定义。合法的元素声明语句例:<!ELEMENTbookinfo(title,author,publish,price)><!ELEMENTpublisher(#PCDATA)>.2、元素的声明(1)元素声明的基本语法.8(2)空元素的声明

在第1章中已介绍了空标记的使用方法,那么在DTD中如何对与其对应的空元素进行声明呢?其声明格式:<!ELEMENTElement_NameEMPTY>例如下面的语句:<!ELEMENTmessageEMPTY>.(2)空元素的声明

在第1章中已介绍了9(3)不限定元素内容的声明ANY是DTD中使用很频繁的一个关键字,特别是对于文档根元素的声明。在定义一个DTD文档时通常很难准确地确定一个元素是否具有子元素的情况,此时一般的做法是指定该元素的子元素为ANY型(表示可以是任意的元素),这样在它之中可以包含任何数据、任何声明的子元素及其数据和子元素的组合。ANY元素的声明格式:<!ELEMENTElement_NameANY>.(3)不限定元素内容的声明.10(4)子元素列表的设定在XML中有一种针对复合元素的最为严格的设定方法,称为子元素列表的设定。这种方式下,元素都拥有哪些子元素、每个子元素出现的次数和位置都有明确的规定,在具体文档实现时,必须严格执行。子元素列表的设定语法如下:<!ELEMENTElement_Name(Child_Element1,Child_Element2,…)>其中“(Child_Element1,Child_Element2,…)”部分为Element_Name所拥有的子元素列表。.(4)子元素列表的设定.11(5)可选择的子元素有些时候,需要在两个或多个互斥的元素中进行选择。即多选一的情况,如一个人的性别可以是男或女,两者中只能有一种情况。DTD有专门的语法来处理这种情况,其语法格式如下:<!ELEMENTElement_Name(Child_Element1|Child_Element2|……)>其中,“(Child_Element1|Child_Element2|…)”部分为选择性元素组合,具体使用时必须要在这个列表中选择其一。

(课本p16例2.3).(5)可选择的子元素.12(6)元素出现次数的控制一个元素可能出现一次,也可能不出现。这时可通过在元素名后面加上一个“?”来实现。“?”:0或1次一个元素可能不出现,也可能出现多次。这时可通过在元素名后面加上一个“*”来实现。“*”:任意次一个元素可能出现一次,也可能出现多次,但至少也要出现一次。这时可通过在元素名后面加上一个“+”来实现。“+”:≥1次(课本p17例2.4).(6)元素出现次数的控制(课本p17例2.4).13(7)混合型元素

还有另一种元素,其内容既可以为字符数据,也可以为子元素,这种元素称为混合型元素。混合型元素的声明格式:

<!ELEMENTElement_Name(#PCDATA|Child_Element1|Child_Element2,…)*>必须采用可选项,以#PCDATA开始,后面是混合内容中可能出现的子元素,“*”必须放在右括号之后.(7)混合型元素还有另一种元素,其内容既可以为142.1.3DTD属性

简单来讲就是元素的附加特性,在DTD中声明元素时,也必须对该元素的属性进行声明。

1、属性的声明在DTD中,属性的声明格式:<!ATTLISTElement_nameAttribute_nameTYPEDefault_value>其中,<!ATTLIST>为属性声明的关键字,Element_name为元素名,Attribute_name为属性名,TYPE是属性类型,Default_value为没有设定属性值时的默认值。.2.1.3DTD属性简单来讲就是元素的附加特15在声明属性时有以下需要注意的事项:(对照课本p18-19例2.5分析)(1)、可以多次为一个元素声明其中所包含的属性。(2)、属性的声明在文档中的次序没有严格的要求,可位于与其相连的元素声明之前或之后。(3)、所有元素的属性,都要在各自所对应的标记中声明。

.在声明属性时有以下需要注意的事项:(对照课本p18-19例162、属性的类型

在属性的声明中TYPE部分为属性的类型设定,DTD中属性的类型有10种,下面将对这些数据类型进行逐一的介绍。(课本p20)(1)CDATA型CDATA型表明属性值为不包含“<”和“"”的任意字符串,如果属性值中需要包含“<”和“"”,则可使用特殊字符来代替。(2)Enumerated型如果属性值并不是任意的字符串,而是在几个可能的值中进行选择。.2、属性的类型.17(3)ID型当元素的某个属性值是不能重复时,如书籍的ISBN属性、个人的“身份证号”属性等,要定义这样的属性则需使用属性的ID类型。在一个XML文档中,所有元素的ID类型属性的属性值必须是唯一的,不可重复,另外,一个元素不能有超过一个ID类型的属性。(4)IDREF与IDREFS型(课本p20例2.6)IDREF为IdentifierReference的缩写,IDREF与ID类型属性的关系为子元素与父元素的关系,即IDREF类型属性的值必须是其他元素的ID类型属性的值,且该ID类型属性的值必须在文档的其他地方被设定过。IDREFS类型属性的属性值可有多个,每一个都必须是在文档其他地方被设定了的ID类型属性的值,而这多个属性值之间用空格隔开。.(3)ID型.18(5)ENTITY与ENTITIES型ENTITY类型的属性提供了把外部二进制形式的文件(如.jpeg、.mp3等)和外部不可解析实体链接到XML文档的功能。因此其属性值也必须为不可解析的链接外部实际数据的通用实体名。ENTITIES类型属性的属性值可由多个不可解析的外部实体名称组成,各实体名称之间使用空格隔开。(6)NMTOKEN与NMTOKENS型(课本p22例2.7)NMTOKEN类型的属性限定属性值是有效的XML名称,这个属性值可以由英文、数字、“.”、“_”、“-”、“:”等组成,这里有几点需要注意。a、不能包括空格。b、以上字符中除“:”以外,其他字符都可以作为开头字符。c、“:”可以出现在中间,但由于它是命名域的关键字符,所以一般不提倡使用。.(5)ENTITY与ENTITIES型.19(7)NOTATION型(课本p23例2.8)XML文档中引入了外部不可解析的实体后,解析器无法解析这些二进制文件,这时,就可以使用NOTATION类型的属性为这些二进制文件指定与其对应的应用软件以对其进行处理。.(7)NOTATION型(课本p23例2.8).203、属性的默认值属性有4种不同类型的默认值,可在属性声明中的Default_value部分指定。(课本p24)①default:表示使用提供的默认值,default不是一个关键字,它代表一个预设的字符串。<!ATTLISTbookinfobookcategory("文艺"|"自然科学")"文艺">此例句表示当在XML文档中省略了对bookinfo元素的bookcategory属性值进行设定时,该属性的默认值就是“文艺”。②#REQUIRED:表示属性值必须指定。③#IMPLIED:表示元素的这个属性可用可不用。④#FIXED:表示元素的这个属性值是一个固定值,且必须是指定的值。

.3、属性的默认值属性有4种不同类型的默认212.1.4DTD中的实体1、实体的概念实体是包含了文档片段的虚拟存储单元,可用来存储XML声明、DTD、其他形式的文本及二进制数据等。简单来讲就是一段代码或数据的代称,这个代称即为实体的名字。当需要在文档中引用某段代码或数据时,可以引用与这段代码或数据相对应的实体名称来代替实体的具体内容。具有正确性检查功能的XML处理器在提交文档给最终应用程序之前或在显示文档以前,将先把所有不同的实体引用替换为与其对应的具体内容,从而构成一个结构完整的文档。.2.1.4DTD中的实体1、实体的概念.222、实体的分类(1)按照实体的具体内容来分类,实体可分为可解析与不可解析两类。可解析实体的具体内容为简单的字符、数字、文本块,而不可解析实体的具体内容则为图片、声音等二进制文件。(2)按照逻辑存储来分类,实体可分为内部实体与外部实体两类。内部实体的内容是在文档内部设定的;而外部实体则是一个外部独立的物理存储对象,如某个外部文件。(3)按照使用的范围来分类,实体可分为一般实体与参数实体两类。一般实体都用来构成文档的具体内容,可出现在XML文档中,也可出现在DTD中;而参数实体只能出现在DTD中,不能出现在XML文档中。.2、实体的分类.23(1)、内部一般实体

内部一般实体就是在文档实体内部定义和使用的实体,其内容通常是一段文本字符。这种实体要在DTD中通过DTD语句的定义,可以在XML文档中使用,也可在DTD中使用。其定义的语法格式如下:

<!ENTITYEentity_name"Replacement">其中,<!ENTITY>为关键字,Eentity_name为实体名称,Replacement为实体所代替的文本内容。引用内部一般实体的方法如下:&Eentity_name;课本p29例2.15.(1)、内部一般实体课本p29例2.15.24当内部一般实体在DTD中引用时,有以下几方面需注意。①

不能在元素及属性的声明中引用内部一般实体,如下面的语句即为非法的:<!ENTITYpcd(#PCDATA)><!ELEMENTtitle&pcd;>②

在语句中不能出现循环,如下面的语句即为非法的:<!ENTITYthepub"北大&pub;"><!ENTITYpub"出版社&thepub;">

课本p31例.当内部一般实体在DTD中引用时,有以下几方面需注意。课本p325(2)、外部一般实体所谓外部一般实体就是在文档实体以外定义的,要通过一个URL才能引用到的实体。外部一般实体为独立的文件,可被多个文档所引用。正因为每一个完整的XML文档都是一个合法的实体,所以XML通过对外部一般实体的引用,可以在一个XML文档中嵌入另一个XML文档,或者将多个文档组合成一个文档。其定义的语法格式如下:<!ENTITYEentity_name"URL">其中,URL为引用的外部实体的URL地址。引用外部一般实体也与引用内部一般实体的方法一样:&Eentity_name;课本p32例2.17.(2)、外部一般实体课本p32例2.17.26在引用外部一般实体时,有以下几方面需注意。(1)因为在一个文档中需引用某些外部文件,所以该文档声明中的standalone属性不再是默认值yes,而应该为no。(2)作为外部一般实体的文档,若使用的是XML的默认字符集即UTF-8或UNICODE,则可以在文档头部不进行XML声明,否则,必须有XML声明,且声明时,一定要说明encoding属性。.在引用外部一般实体时,有以下几方面需注意。.27(3)、内部参数实体

内部参数实体是指在独立的外部DTD文档的内部定义和使用的实体,其内容为仅能为DTD而非XML文档内容的书写文本。这里提到参数实体与前面所讲的一般实体是有区别的:(1)在引用形式上,一般实体的引用为“&Eentity_name;”,而参数实体的引用则为“%Eentity_name;”(2)在引用范围上,一般实体可在XML文档中引用,也可在DTD中引用,而参数实体只可在DTD中引用。定义内部参数实体的语法格式如下:<!ENTITY%Eentity_name"Replacement">.(3)、内部参数实体.28(4)、外部参数实体

外部参数实体是指在独立的外部DTD文档的外部定义和使用的实体,外部参数实体用于将多个独立的DTD文档组合成一个大的DTD文档。定义外部参数实体的语法格式如下:<!ENTITY%Eentity_name"URL">.(4)、外部参数实体.292.1.5使用DTD引用DTD的方法有两种:内部DTD引用与外部DTD引用。

内部DTD引用即在XML文档中直接设定DTD;外部DTD引用则是在XML文档中引用一个扩展名为.dtd的独立文件。.2.1.5使用DTD引用DTD的方法有两种:.301、内部DTD

内部DTD的定义语句和XML文档在同一个文档中,且通常放置在XML文档的头部。在定义内部DTD时,定义内部DTD的语句要全部放置在文档类型声明中,其语法格式:<!DOCTYPERoot_Element_Name[…]>其中,<!DOCTYPE>为关键字,Root_Element_Name为根元素名,[…]部分则为内部DTD定义语句。.1、内部DTD.312、外部DTD

外部DTD就是有关文档定义的语句都被独立出来放在一个外部文件中,对其进行独立的管理。跟据其内容的性质,可分为两种,一种是私有文件,指未公开的、属于某组织或个人私有的DTD文件;另一种是公开文件,是指由国际标准组织如ISO等或可发布技术建议的组织如W3C等,为某一领域所制定的公开的标准DTD。引用私有DTD文件的语法格式:<!DOCTYPERoot_Element_nameSYSTEM"URL">其中,URL为外部DTD文件的相对路径或绝对路径,该语句必须置于XML文档的头部,且在XML文档处理指令中要将standalone属性值设定为no。.2、外部DTD.323、混合DTD

所谓混合DTD,即为内部DTD与外部DTD混合使用。在DTD使用的实际情况中,很少使用完全标准的DTD,往往是公司先为所有的开发小组提供一分公共的DTD作为外部DTD,然后各个成员在实际的使用过程中再进行扩展定义,这时的扩展定义常常是使用内部DTD来实现的。.3、混合DTD.33..342.2XML模式Schema2.2.1Schema与DTD的区别和优势模式(Schema)所起的作用与DTD相同,也是由W3C开发的。与DTD相比,XML模式具有如下的几个优点:DTD是用一种与XML不同的语法编写的,而XML模式使用的是一种类XML的语言。DTD中的所有声明都是全局声明,而XML模式则既有全局声明也有局部声明,可以视情况而定。DTD不能对一给定的元素或属性的数据类型进行定义,而XML模式具有一套完整的数据类型系统,它允许对数据类型如整型,时间型或字符串型等进行详细定义。.2.2XML模式Schema2.2.1Schema与DT352.2.2局部和全局定义在DTD中,每个元素都被声明为全局的,所以每个元素必须有一个唯一的名字并且只能声明一次。元素可被多个其他元素所引用,但在这些情况下,它们的定义必须完全相同。然而在XML模式中,上下文是非常重要的。在模式的顶层声明的元素被认为是全局声明。在定义一个复杂类型时,可以参考和使用这些全局定义的元素作为该类型的一个子部分,也可以同时定义一些新的局部元素,但作用域被限制在该复杂类型之内。.2.2.2局部和全局定义.362.2.3Schema的基本结构和使用<?xmlversion="1.0"?><xsd:schemaxmlns:xsd="/2000/10/XMLSchema"><xsd:annotation><xsd:documentation>Thisismyveryfirstschema.Itdoesnothaveanyelementsyet,butitwill.</xsd:documentation></xsd:annotation></xsd:schema>.2.2.3Schema的基本结构和使用<?xmlve372.2.4简单类型简单类型的定义简单类型的种类(见下图).2.2.4简单类型简单类型的定义.38..39自定义的简单类型有时可以对各种简单类型进行适当的修改以更好地满足需要,形成自定义的简单类型。定义过程分为两个步骤:选择一个合适的简单类型作为基类型对此基类型添加一些限制条件,例如:指定其值的一个有限的范围,指定其值的一个确定的集合,或者指定值的格式等。.自定义的简单类型.40对元素自定义格式数值的嵌入和范围的设定枚举类型的定义列表类型的定义限制简单类型的长度在模式中设定XML元素的值

2.2.5复杂类型复杂类型概述XML中有四种复杂类型的元素:第一种类型是“只含元素”类型,它只能含有子元素或属性,而不能含有文本。第二种类型是“只含文本”类型,它只能含有文本和属性,而不能含有子元素。.对元素自定义格式.41第三种类型是“空元素”类型,它可以有属性,但不能含有子元素或文本。第四种类型是“混合内容”类型,它可以包含元素,属性和文本的组合。“只含元素”的元素定义一个复杂的“只含元素”的元素是由一系列的简单和/或其他复杂的元素构成。“只含文本”的元素定义

该类型有点类似于一个只含文本的简单类型,但不同的是它也可以有属性。.第三种类型是“空元素”类型,它可以有属性,但不能含有子42

空元素的定义空元素不包含任何内容,但可以有属性。混合内容的元素定义XML模式中允许一个字段既包含文本有包含其他子字段的混合内容元素。复杂类型的元素定义组的定义有时一组元素会在模式的多个地方出现。如果能给一元素赋予一个名称,然后在需要时通过调用组名来引用这组元素,这是很方便的。属性定义一个案例.空元素的定义.43

谢谢!.谢谢!.44第2章XML数据的底层结构—DTD和XMLSchema2.1XML类型定义语言DTD教学内容:2.1.1DTD的作用;2.1.2DTD元素;2.1.3DTD属性;2.1.4DTD中的实体;2.1.5使用DTD.第2章XML数据的底层结构—DTD和XMLSchema452.1.1DTD的作用XML文档是一种元标记语言,即一种定义标记语言的语言。在XML中可以创建新的标记语言,这些新的标记语言(也叫标记集)要通过文档类型定义(DocumentTypeDefinitions,DTD)来定义。DTD文档是这些新的标记语言的法律性文档。如果XML文档的语法符合DTD的定义和规定,那么就称为一个合法的XML文档,否则就是非法的XML文档。.2.1.1DTD的作用XML文档是一种元46DTD定义了文档的逻辑结构,规定了文档中所使用的元素、实体、元素的属性、元素与实体之间的关系。其作用主要表现在以下几个方面:使用DTD可以提供一种统一的格式。XML的可扩展性为文档的作者提供了很高的灵活性,可有时候需要的是统一,要求某一类文档具有相同的结构。使用DTD可以保证数据交流和共享的顺利进行。DTD使用户能够不依赖具体的数据就知道文档的逻辑结构。在没有XML文档的时候,也可以根据DTD为XML文档编写样式单,编写处理程序,有效地提高工作效率。使用DTD可以验证数据的有效性。DTD对文档的逻辑结构进行了约束,这种约束可以比较宽松,也可以十分严格。可以根据DTD检查数据,以验证其是否符合规定和要求,这可以保证数据的正确和有效。(课本p12例2.1).DTD定义了文档的逻辑结构,规定了文档中所使用的元素、实体、472.1.2DTD元素

DTD中描述的基本部件是元素和属性,它们负责确定XML文档的逻辑结构。元素表示一个信息对象,而属性表示这个对象的性质。所有元素中有且只有一个根元素,其他的元素都是它的子元素,除根元素外,每个元素都被其他元素包含,一个元素可以有几个不同类型的子元素。.2.1.2DTD元素DTD中描述的基本部件481、元素的基本类型元素的基本类型大致可分为两种,一种称为简单型,另一种称为复合型。简单型具有文本数据,即可析字符数据,该类型也称为上下文中的“#PCADTA”;复合型可以包含其他元素和文本数据。.1、元素的基本类型元素的基本类型大致可分为49(1)简单型:

“#PCDATA”(ParsedCharacterData)表示标记的内容是可解析文本,所谓的可解析文本就是非标记文本。用“#PCDATA”规范了的元素不能再包含子元素。例如Howdoyoudo是不包含标记的文本,而Howdoyou<list>do</list>就不是可解析的数据类型。另外DTD文档中不同元素定义的次序没有先后关系,但文档的语法对大小写敏感。“#PCDATA”的声明格式:<!ELEMENTElement_Name(#PCDATA)>.(1)简单型:.50(2)复合型:

复合型元素与简单型元素相对,复合型元素可包含其他元素。.(2)复合型:复合型元素与简单型元素相对,512、元素的声明(1)元素声明的基本语法元素的声明格式:<!ELEMENTElement_NameElement_Defination>其中,Element_Name为声明的元素名称,Element_Defination为元素内容格式的定义。合法的元素声明语句例:<!ELEMENTbookinfo(title,author,publish,price)><!ELEMENTpublisher(#PCDATA)>.2、元素的声明(1)元素声明的基本语法.52(2)空元素的声明

在第1章中已介绍了空标记的使用方法,那么在DTD中如何对与其对应的空元素进行声明呢?其声明格式:<!ELEMENTElement_NameEMPTY>例如下面的语句:<!ELEMENTmessageEMPTY>.(2)空元素的声明

在第1章中已介绍了53(3)不限定元素内容的声明ANY是DTD中使用很频繁的一个关键字,特别是对于文档根元素的声明。在定义一个DTD文档时通常很难准确地确定一个元素是否具有子元素的情况,此时一般的做法是指定该元素的子元素为ANY型(表示可以是任意的元素),这样在它之中可以包含任何数据、任何声明的子元素及其数据和子元素的组合。ANY元素的声明格式:<!ELEMENTElement_NameANY>.(3)不限定元素内容的声明.54(4)子元素列表的设定在XML中有一种针对复合元素的最为严格的设定方法,称为子元素列表的设定。这种方式下,元素都拥有哪些子元素、每个子元素出现的次数和位置都有明确的规定,在具体文档实现时,必须严格执行。子元素列表的设定语法如下:<!ELEMENTElement_Name(Child_Element1,Child_Element2,…)>其中“(Child_Element1,Child_Element2,…)”部分为Element_Name所拥有的子元素列表。.(4)子元素列表的设定.55(5)可选择的子元素有些时候,需要在两个或多个互斥的元素中进行选择。即多选一的情况,如一个人的性别可以是男或女,两者中只能有一种情况。DTD有专门的语法来处理这种情况,其语法格式如下:<!ELEMENTElement_Name(Child_Element1|Child_Element2|……)>其中,“(Child_Element1|Child_Element2|…)”部分为选择性元素组合,具体使用时必须要在这个列表中选择其一。

(课本p16例2.3).(5)可选择的子元素.56(6)元素出现次数的控制一个元素可能出现一次,也可能不出现。这时可通过在元素名后面加上一个“?”来实现。“?”:0或1次一个元素可能不出现,也可能出现多次。这时可通过在元素名后面加上一个“*”来实现。“*”:任意次一个元素可能出现一次,也可能出现多次,但至少也要出现一次。这时可通过在元素名后面加上一个“+”来实现。“+”:≥1次(课本p17例2.4).(6)元素出现次数的控制(课本p17例2.4).57(7)混合型元素

还有另一种元素,其内容既可以为字符数据,也可以为子元素,这种元素称为混合型元素。混合型元素的声明格式:

<!ELEMENTElement_Name(#PCDATA|Child_Element1|Child_Element2,…)*>必须采用可选项,以#PCDATA开始,后面是混合内容中可能出现的子元素,“*”必须放在右括号之后.(7)混合型元素还有另一种元素,其内容既可以为582.1.3DTD属性

简单来讲就是元素的附加特性,在DTD中声明元素时,也必须对该元素的属性进行声明。

1、属性的声明在DTD中,属性的声明格式:<!ATTLISTElement_nameAttribute_nameTYPEDefault_value>其中,<!ATTLIST>为属性声明的关键字,Element_name为元素名,Attribute_name为属性名,TYPE是属性类型,Default_value为没有设定属性值时的默认值。.2.1.3DTD属性简单来讲就是元素的附加特59在声明属性时有以下需要注意的事项:(对照课本p18-19例2.5分析)(1)、可以多次为一个元素声明其中所包含的属性。(2)、属性的声明在文档中的次序没有严格的要求,可位于与其相连的元素声明之前或之后。(3)、所有元素的属性,都要在各自所对应的标记中声明。

.在声明属性时有以下需要注意的事项:(对照课本p18-19例602、属性的类型

在属性的声明中TYPE部分为属性的类型设定,DTD中属性的类型有10种,下面将对这些数据类型进行逐一的介绍。(课本p20)(1)CDATA型CDATA型表明属性值为不包含“<”和“"”的任意字符串,如果属性值中需要包含“<”和“"”,则可使用特殊字符来代替。(2)Enumerated型如果属性值并不是任意的字符串,而是在几个可能的值中进行选择。.2、属性的类型.61(3)ID型当元素的某个属性值是不能重复时,如书籍的ISBN属性、个人的“身份证号”属性等,要定义这样的属性则需使用属性的ID类型。在一个XML文档中,所有元素的ID类型属性的属性值必须是唯一的,不可重复,另外,一个元素不能有超过一个ID类型的属性。(4)IDREF与IDREFS型(课本p20例2.6)IDREF为IdentifierReference的缩写,IDREF与ID类型属性的关系为子元素与父元素的关系,即IDREF类型属性的值必须是其他元素的ID类型属性的值,且该ID类型属性的值必须在文档的其他地方被设定过。IDREFS类型属性的属性值可有多个,每一个都必须是在文档其他地方被设定了的ID类型属性的值,而这多个属性值之间用空格隔开。.(3)ID型.62(5)ENTITY与ENTITIES型ENTITY类型的属性提供了把外部二进制形式的文件(如.jpeg、.mp3等)和外部不可解析实体链接到XML文档的功能。因此其属性值也必须为不可解析的链接外部实际数据的通用实体名。ENTITIES类型属性的属性值可由多个不可解析的外部实体名称组成,各实体名称之间使用空格隔开。(6)NMTOKEN与NMTOKENS型(课本p22例2.7)NMTOKEN类型的属性限定属性值是有效的XML名称,这个属性值可以由英文、数字、“.”、“_”、“-”、“:”等组成,这里有几点需要注意。a、不能包括空格。b、以上字符中除“:”以外,其他字符都可以作为开头字符。c、“:”可以出现在中间,但由于它是命名域的关键字符,所以一般不提倡使用。.(5)ENTITY与ENTITIES型.63(7)NOTATION型(课本p23例2.8)XML文档中引入了外部不可解析的实体后,解析器无法解析这些二进制文件,这时,就可以使用NOTATION类型的属性为这些二进制文件指定与其对应的应用软件以对其进行处理。.(7)NOTATION型(课本p23例2.8).643、属性的默认值属性有4种不同类型的默认值,可在属性声明中的Default_value部分指定。(课本p24)①default:表示使用提供的默认值,default不是一个关键字,它代表一个预设的字符串。<!ATTLISTbookinfobookcategory("文艺"|"自然科学")"文艺">此例句表示当在XML文档中省略了对bookinfo元素的bookcategory属性值进行设定时,该属性的默认值就是“文艺”。②#REQUIRED:表示属性值必须指定。③#IMPLIED:表示元素的这个属性可用可不用。④#FIXED:表示元素的这个属性值是一个固定值,且必须是指定的值。

.3、属性的默认值属性有4种不同类型的默认652.1.4DTD中的实体1、实体的概念实体是包含了文档片段的虚拟存储单元,可用来存储XML声明、DTD、其他形式的文本及二进制数据等。简单来讲就是一段代码或数据的代称,这个代称即为实体的名字。当需要在文档中引用某段代码或数据时,可以引用与这段代码或数据相对应的实体名称来代替实体的具体内容。具有正确性检查功能的XML处理器在提交文档给最终应用程序之前或在显示文档以前,将先把所有不同的实体引用替换为与其对应的具体内容,从而构成一个结构完整的文档。.2.1.4DTD中的实体1、实体的概念.662、实体的分类(1)按照实体的具体内容来分类,实体可分为可解析与不可解析两类。可解析实体的具体内容为简单的字符、数字、文本块,而不可解析实体的具体内容则为图片、声音等二进制文件。(2)按照逻辑存储来分类,实体可分为内部实体与外部实体两类。内部实体的内容是在文档内部设定的;而外部实体则是一个外部独立的物理存储对象,如某个外部文件。(3)按照使用的范围来分类,实体可分为一般实体与参数实体两类。一般实体都用来构成文档的具体内容,可出现在XML文档中,也可出现在DTD中;而参数实体只能出现在DTD中,不能出现在XML文档中。.2、实体的分类.67(1)、内部一般实体

内部一般实体就是在文档实体内部定义和使用的实体,其内容通常是一段文本字符。这种实体要在DTD中通过DTD语句的定义,可以在XML文档中使用,也可在DTD中使用。其定义的语法格式如下:

<!ENTITYEentity_name"Replacement">其中,<!ENTITY>为关键字,Eentity_name为实体名称,Replacement为实体所代替的文本内容。引用内部一般实体的方法如下:&Eentity_name;课本p29例2.15.(1)、内部一般实体课本p29例2.15.68当内部一般实体在DTD中引用时,有以下几方面需注意。①

不能在元素及属性的声明中引用内部一般实体,如下面的语句即为非法的:<!ENTITYpcd(#PCDATA)><!ELEMENTtitle&pcd;>②

在语句中不能出现循环,如下面的语句即为非法的:<!ENTITYthepub"北大&pub;"><!ENTITYpub"出版社&thepub;">

课本p31例.当内部一般实体在DTD中引用时,有以下几方面需注意。课本p369(2)、外部一般实体所谓外部一般实体就是在文档实体以外定义的,要通过一个URL才能引用到的实体。外部一般实体为独立的文件,可被多个文档所引用。正因为每一个完整的XML文档都是一个合法的实体,所以XML通过对外部一般实体的引用,可以在一个XML文档中嵌入另一个XML文档,或者将多个文档组合成一个文档。其定义的语法格式如下:<!ENTITYEentity_name"URL">其中,URL为引用的外部实体的URL地址。引用外部一般实体也与引用内部一般实体的方法一样:&Eentity_name;课本p32例2.17.(2)、外部一般实体课本p32例2.17.70在引用外部一般实体时,有以下几方面需注意。(1)因为在一个文档中需引用某些外部文件,所以该文档声明中的standalone属性不再是默认值yes,而应该为no。(2)作为外部一般实体的文档,若使用的是XML的默认字符集即UTF-8或UNICODE,则可以在文档头部不进行XML声明,否则,必须有XML声明,且声明时,一定要说明encoding属性。.在引用外部一般实体时,有以下几方面需注意。.71(3)、内部参数实体

内部参数实体是指在独立的外部DTD文档的内部定义和使用的实体,其内容为仅能为DTD而非XML文档内容的书写文本。这里提到参数实体与前面所讲的一般实体是有区别的:(1)在引用形式上,一般实体的引用为“&Eentity_name;”,而参数实体的引用则为“%Eentity_name;”(2)在引用范围上,一般实体可在XML文档中引用,也可在DTD中引用,而参数实体只可在DTD中引用。定义内部参数实体的语法格式如下:<!ENTITY%Eentity_name"Replacement">.(3)、内部参数实体.72(4)、外部参数实体

外部参数实体是指在独立的外部DTD文档的外部定义和使用的实体,外部参数实体用于将多个独立的DTD文档组合成一个大的DTD文档。定义外部参数实体的语法格式如下:<!ENTITY%Eentity_name"URL">.(4)、外部参数实体.732.1.5使用DTD引用DTD的方法有两种:内部DTD引用与外部DTD引用。

内部DTD引用即在XML文档中直接设定DTD;外部DTD引用则是在XML文档中引用一个扩展名为.dtd的独立文件。.2.1.5使用DTD引用DTD的方法有两种:.741、内部DTD

内部DTD的定义语句和XML文档在同一个文档中,且通常放置在XML文档的头部。在定义内部DTD时,定义内部DTD的语句要全部放置在文档类型声明中,其语法格式:<!DOCTYPERoot_Element_Name[…]>其中,<!DOCTYPE>为关键字,Root_Element_Name为根元素名,[…]部分则为内部DTD定义语句。.1、内部DTD.752、外部DTD

外部DTD就是有关文档定义的语句都被独立出来放在一个外部文件中,对其进行独立的管理。跟据其内容的性质,可分为两种,一种是私有文件,指未公开的、属于某组织或个人私有的DTD文件;另一种是公开文件,是指由国际标准组织如ISO等或可发布技术建议的组织如W3C等,为某一领域所制定的公开的标准DTD。引用私有DTD文件的语法格式:<!DOCTYPERoot_Element_nameS

温馨提示

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

评论

0/150

提交评论