《第2章XML数据的底层结构—DTD.ppt》由会员分享,可在线阅读,更多相关《第2章XML数据的底层结构—DTD.ppt(80页珍藏版)》请在三一办公上搜索。
1、第2章 XML数据的底层结构DTD 和XML Schema,2.1 XML类型定义语言DTD 2.2 XML模式Schema,两个基本的概念:1 格式良好的 XML文档符合语法的XML文档称为结构良好的XML文档 2 有效XML文档 有效XML文档:内容结构严格遵守它自身的标记说明,能通过自身的语法检查;通过DTD验证的XML文档称为有效的XML文档。格式良好的XML文档与有效的XML文档的区别?有效地XML文档肯定是格式良好的XML文档。反过来,一个格式良好的XML文档不一定是有效的XML文档。有效的XML文档遵守DTD或Schema定义的规则。,格式良好XML:,George John R
2、eminder Dont forget the meeting!,有效(验证)的XML:,DTD 文件:,XML Schema,为什么要用DTD,有了DTD,每个XML文件可以携带一个自身格式的描述。有了DTD,不同组织的人可以使用一个通用DTD用来交换数据。应用程序可以使用一个标准DTD校验从外部世界接受来的XML数据是否有效可以使用DTD校验自己的XML数据,DTD 文档类型定义,在xml中,1描述了如何创建DTD,2如何将它与根据它的规则所编写的XML文档相关联,3并且XML处理器如何对DTD进行处理,4有了DTD就可以XML文档的结构是否正确。DTD为XML文档的编写者和处理者提供了共
3、同遵循的标准,使得XML文档有了统一的标准。,2.1 XML类型定义语言DTD(Document Type Definition),文档类型定义DTD是一套关于标记符的语法规则,它定义了可用在文档中的元素、属性和实体,以及这些内容之间的相互关系。,建立XML文档的步骤,对相关信息项进行命名,将其映射为相应的元素或属性。确定XML文档的层次结构,即各元素之间的嵌套关系。根据DTD编写相应的XML文档。,元素的定义,李亮 男 1978.2.5,例题:,2.1.1.1 元素定义,1.元素声明 DTD中所用的第一种声明是元素声明。其形式如下:例:其中,name是一个标准的XML标记的名字。conten
4、t由以下三种之一组成:,关键字EMPTY关键字ANY描述包含在本元素中的子元素的顺序和重复次数的内容模型 DTD中声明元素应注意:声明以关键字ELEMENT开头,后面是元素名和包含于元素中的子元素列表。数据类型不是DTD的一个特征。DTD中所定义的每个元素,在对应的XML文档中有且仅有一个。XML区分大小写。,元素的声明,2.元素内容类型(Element content model),元素内容通常有五种情况:EMPTY、ANY、#PCDATA、子元素型和混合型。EMPTY类型 EMPTY用于定义空元素,即该元素只可能有属性而不会有字符数据或子元素 声明空元素的语法是:例:,空模式,元素不能包含
5、任何子元素,也不能包含任何数据内容。语法:例DTD定义如下:对应的XML实例1:花花 对应的XML实例2:,ANY类型 这种类型的元素声明是:这表明该元素可以包含DTD中定义的其它任何元素或已编译的字符数据。PCDATA类型 不包含其他子元素而只包含字符数据的元素(如),用关键字#PCDATA进行定义,它代表“已编译的字符数据”(parsed character data)。PCDATA可以包含除标记以外的一切字符,包括数字、字母和符号等。被定义为包含PCDATA的元素不能包含任何其他的子元素。,AC MilanItalyPipo,子元素类型 元素可以包含一系列的子元素,子元素内容模型用于指定
6、某个元素可以包含哪些子元素.根据子元素间的关系,子元素内容模型可以有两种可能的结构:序列和选择。序列:其所有子元素必须出现且只能出现一次,并且按顺序出现。注意:序列中不能出现#PCDATA 子元素还可以包含其他子元素。,2.选择。选择不能同时包含两个以上的子元素。,混合类型 若某元素既包含子元素又包含已编译的字符数据,则该元素具有混合内容。其声明的语法如下:注意:必须以#PCDATA 开头,*必须放在括号之后,混合类型中不能出现,?,+等符号。,3.元素出现次数指示符(Element occurrence indicator)?字符 它说明元素可以出现0次或1次。*字符 它说明元素可以不出现,
7、或出现1次或多次。+字符 它说明元素必须出现至少一次,或者说可以出现一到多次,例:,正确的示例:错误的示例:,李华 男 XML Java 2006该生学习较刻苦,但成绩一般 2007该生学习改进了学习方法,成绩有较大进步,DTD,属性定义,属性用于将名字-值,对与元素进行关联。属性说明只能在开始标签和空元素标签中出现。属性声明中详细说明了与给定元素相关联的每个属性名,数据类型和缺省值。,2.1.1.2属性定义1属性声明 属性声明的语法如下:其中,ATTLIST关键字用来定义元素所具有的属性,Element_name是元素名,Attribute_name是该元素所具有的属性名,Type是属性的类
8、型,(十种类型)最常用的类型是CDATA,Default_value是属性的默认值。,声明属性时应注意以下几点:属性名称遵循的规则与有效的元素名称相同。在一个给定的元素中不能有两个属性同名。若属性值中含有双引号,则该属性值应用单引号括起来。,设置属性的类型,2属性的类型,CDATA属性类型:字符数据 我可不这么认为!为什么呢?,枚举属性类型:可从列表中选择属性类型属性也可以被描述为一组可接受的取值的列表,XML文件中对属性的赋值将从这个列表中选取一个值。各选择值通过竖线“|”分隔;关键字ENUMERATED是不出现在DTD定义中的。,属性的默认取值为“鸡肉”。,不需要引号,ID属性类型:属性值
9、能唯一标识,一个元素只能有一个ID属性。,张三 李四 libbb.org,不是有效的XML名称,IDREF/IDREFS类型:用来引用同一个文档中另一个元素的ID属性,并且这个属性已经存在。利用这种属性我们可以把两个对象建立一种关联。IDREFS是若干个ID属性的值,之间用空格分开。,张三 李四,IDREF/IDREFS,IDREFS同IDREF,是可以具有由空格分开的多个引用。,空格,NMTOKEN/NMTOKENS属性类型,名称标记是任何命名字符的混合体只能包含名称字符,不能包含空白字符(空格)所有XML名称都是名称标记,但不是所有的名称标记都是XML名称。例:文档:,八阵图 功盖三分国,
10、名成八阵图,江流石不转,遗恨失吞吴.,八阵图 功盖三分国,名成八阵图,江流石不转,遗恨失吞吴.,八阵图 功盖三分国,名成八阵图,江流石不转,遗恨失吞吴.,八阵图 功盖三分国,名成八阵图,江流石不转,遗恨失吞吴.,NOTATION类型:在记号声明中的名称 例如图象、声音、影象等等,NOTATION(续),在下面这个例子中,为电影元素指定了两种可选设备:一种是movPlayer.exe,用来播映.mov文件,另一种则用来绘制GIF图象。,ENTITY和ENTITYES属性类型,引用文档中不可解析的外部实体。把外部二进制数据链接到文档。例:,属性的缺省设置,属性声明可以给属性指定一个默认值,使得当在
11、XML文档中未明确地指定该属性的值时,XML处理器会将此默认值作为该属性的值。属性的默认值可以分别用下面三个关键字进行定义:#REQUIRED、#IMPLIED和#FIXED。,3属性的默认值,REQUIRED:当一个元素的属性被声明为#REQUIRED之后,那么这个元素在使用时必须具有该属性,否则XML文档就是无效的。IMPLIED:若将一个元素的属性声明为IMPLIED,则该属性可以出现在指定的元素中,也可以缺省,即该属性不是必须使用的。可以包含也可能不包含该属性。FIXED:将一个属性声明为FIXED之后,在相应XML文档中可以不用明确地指定该属性的值,处理器会自动地给出其值;但如果要明
12、确地指出属性值,该值必须是属性定义时给出的默认值。,XML 示例:XML示例:或 XML示例:XML示例:,属性综合示例,信息工程 计算机应用 李华 男,对应的DTD,DTD与XML文档实例的关系1.类与对象2.数据库表结构与数据记录,XML文档和DTD的匹配,DTD的声明内部DTD的声明:外部DTD的声明内部DTD与外部DTD结合,2.1.2 XML文档和DTD的匹配,2.1.2.1 内部DTD声明内部DTD的语法是:其中document.type.name与XML文档的根元素名相同在DTD中,所有的关键字都是大写。但DTD中所定义的元素大小写是任意的。,内部DTD的缺点:,在文档中定义DT
13、D会导致文档本身的长度增加,在传输数据时时,即使不需要验证文档的有效性,这些声明也会随着文档一起传输。如果多个XML文档要共用一个DTD,每个文档中都要加入 一个DTD,相当繁琐。,2.1.2.2 外部个人DTD,如果有多个文档要使用同一个DTD,则该DTD可被置于一个单独的文档中(注意DTD文件的文件扩展名为dtd),并在每个使用它的文档中放入一指向它的链接。最简单的方式是提供一个指向该文件的URL。名称的格式是:例:,2.1.2.3 外部公用DTD(External Public DTD)如果某个外部个人(SYSTEM)DTD很通用,可供其他的很多XML共享的话,可以给它一个正式的公用的标
14、识符。首先是给该DTD一个正式的公用的名称。名称的格式是:-/Big Bank/DTDsustomer_support/EN/,例:,外部个人DTD:外部公用DTD,名称以加号(+)或减号()开头。加号表示该DTD已经通过像ISO这样的标准组织的批准。减号表示该DTD未经标准化。“/Big Bank/DTD”表示编写和维护该DTD的个人或组织。“sustomer_support”是对此DTD的描述,/EN/表示该DTD所用的语言,本例中是英语。DTD具有一个名称的优点是查找该DTD的应用程序可通过名字来查找,并且可以引用其最新版本,而不是在某一特定服务器(使用URL的情况)上的某一特定版本(可
15、能已经过期)。,名称的各个部分是:,文档类型定义与文档类型声明的区别:,文档类型声明:文档类型定义:*:文档类型声明包含文档类型定义,但类型定义不可以包含文档类型声明。,2.1.2.3 实体的定义,实体有各种类型,如下面所示的分类。但它们所起的作用是相同的。1、一般实体(General):文档内容中使用的实体。2、参数实体(Parameter):已经在DTD中使用过的分析实体。,实体,一般实体,内部实体:将实体所指代的内容已经包含在DTD文件本身中。外部实体:指实体所指代的内容独立于XML文档。XML能过URL定位来引入外部实体;解释实体:一定会被XML解析器所解释并使用的实体。非解释实体:可
16、能被XML解析器忽略的实体。,实体可以指代其他复杂的结构,包括形式规范的XML、其他形式的文本或二进制数据。其中,非解释实体一定是外部实体,故实体可分为三类:内部解释实体(内部实体)外部解释实体外部非解释实体,实体使用标记限制,在实体中使用标记时,任何标记字符必须双重转义。XML文档的逻辑结构和物理结构必须一致。,物理结构和逻辑结构,逻辑结构:XML文 档、替 换文本中的元素。物理结构:文档实体和内 部实体。,XML文档,内部一般实体格式:引用实体方式:“”,李华,使用外部文件定义内部解释实体,outEntity.dtd:,相应的XML:李华,内部解释实体(内部普通实体),使用外部文档类型定义
17、的优点:方便XML文档的编写、修改、复用;XML文档的归一化:将XML文档中的所有实体扩展成它所指代的具体内容;实体的内容必须是完整的XML组成部分;实体中可以嵌套实体;,参数实体,参数实体只能在DTD中使用。参数实体可解析。格式:引用实体方式:“%实体名;”4、不可解析实体:二进制文件和图像。,参数实体的特征,参数实体是针对外部DTD所使用的实体。除了在实体声明的定义中可引用其他参数实体外,在元素声明时也可引用参数实体。例:,实体声明和引用实体,一般实体声明后,可在XML文档中引用,不可以在元素声明中引用。在实体声明中引用实体时,不能形成死循环。,实体声明和引用实体,参数实体必须在外部DTD
18、中声明,而不能在内部DTD中声明。在XML 文档中只能引用一般实体,引用参数实体并不能达到引用相应内容的效果。,元素的声明DTD包括 属性的声明 实体的声明 预定义实体 内部解释实体 一般实体 外部解释实体 外部非解释实体 参数实体,本章小结,DTD设置了有效的XML文档必须遵循的规则。DTD可以分为内部DTD和外部DTD两类。元素的内容可以为#PCDATA、EMPTY、ANY、子元素和混合型内容。#PCDATA表示元素的内容只能是可解析的文本数据。EMPTY表示元素内容为空。ANY表示任意的元素内容。子元素表示元素的内部只能是子元素。混合型内容表示元素的内部可以是可解析的文本数据,也可以是子
19、元素,甚至是两者的结合。如果DTD中的元素名称后面跟有一个星号*,那么这个元素可以不出现、出现一次或多次。如果DTD中的元素名称后面跟有一个星号+,那么这个元素可以出现一次或多次。与星号*不同的是,该元素至少要出现一次。如果DTD中的元素名称后面跟有一个问号?,那么这个元素可以不出现或只出现一次。,字符代表“或”,意思是一个或者另外一个命名元素可以出现。有了或字符,就可以选择一个或多个元素。实体根据其所处的位置不同可以分为内部实体和外部实体。内部一般实体是指在XML文档内部定义的并且可以在XML文档中使用的实体。外部一般实体是指实体是在XML文档外部定义,然后通过URL在文档内部进行引用。内部
20、参数实体是指在DTD中定义的并且在只能在DTD中引用的实体。外部参数实体是在文档外部定义了,并且只能在DTD中使用的实体。属性只能出现在开始标记和空元素标记中。属性的声明以ATTLIST开头,后面紧跟属性所述的元素名称,然后才是每个属性的定义。CDATA型数据就是指属性的取值必须是可解析的文本数据。Enumerated型数据是指通过“|”分隔可能的属性值列表,用户可以从这些列表中选取其中的一个作为属性值,而且属性的默认值必须为列表中的一个。ENTITY型数据用于表示外部不可解析的实体,例如二进制文件等。,ENTITYES型数据与ENTITY型类似,不同的是这一类型的属性可以存储一个实体序列。I
21、D型数据是指元素的该类型的属性的取值在XML文档中必须是唯一的,不能出现重复,这种类型的数据通常用于作为元素的标识。IDREF型数据同前面提到的ID型数据有着紧密的关系,它是用于表示XML文档中元素之间的一种联系,它的取值必须是XML文档中被定义好的某一元素的ID类型属性值。IDREFS型数据同IDREF型数据类似,不同之处是这种类型的属性的取值可以是文档中已经定义好多个元素的ID型属性值,这些取值之间必须用空格隔开。NMTOKEN型数据是指不含空格的XML名称,它的作用是对属性的取值进行限制,通俗点讲就是规定了合法的命名机制。,NMTOKENS型数据同NMTOKEN型数据类似,它能够给一个元素的属性赋予多个NMTOKEN类型的数据,不同的NMTOKEN数据之间用空格隔开。NOTATION型数据用于在XML声明特定的记号。属性的缺省值分为三类:#REQUIRED、#IMPLIED和#FIXED。#REQUIRED关键字表示该属性在元素中不可缺少。#IMPLIED表示该属性在包含它的元素中可以出现也可以不出现。#FIXED缺省设置表示该属性的取值保持不变,而且必须指定该属性的默认取值,如果在包含它的元素的实例中没有出现该属性的话,元素就自动取该默认值为属性值。,