《XMLSchema.ppt》由会员分享,可在线阅读,更多相关《XMLSchema.ppt(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 四川托普学院计科系四川托普学院计科系 软件技术教研室软件技术教研室 Luo_XML Schema 目标目标目标目标章节目标:章节目标:通过本章学习,你应该能够:通过本章学习,你应该能够:了解模式的基本概念了解模式的基本概念 掌握元素声明掌握元素声明 掌握属性声明掌握属性声明 掌握类型定义及派生掌握类型定义及派生简单类型简单类型复杂类型复杂类型引言引言引言引言XML是一种元标记语言,通过它可以定义新的标记语言。是一种元标记语言,通过它可以定义新的标记语言。新标记语言的标记(词汇)除了用新标记语言的标记(词汇)除了用DTD定义外,还可使用定义外,还可使用XML模式(模式(XML Schema)来
2、定义。模式可以确定)来定义。模式可以确定XML文档文档的元素和属性的结构、元素的顺序、元素和属性的数据值,的元素和属性的结构、元素的顺序、元素和属性的数据值,根据范围、枚举以及样式匹配等。根据范围、枚举以及样式匹配等。其实,其实,XML Schema本身就是本身就是XML的一个应用,它完全符的一个应用,它完全符合合XML的语法规范,是一个格式良好的的语法规范,是一个格式良好的XML文档。文档。模式简介模式简介模式简介模式简介 在在XML中,模式是指描述中,模式是指描述XML文档的文档。文档的文档。通过模式可以确定通过模式可以确定XML文档的元素和属性的结构、元文档的元素和属性的结构、元素的顺序
3、、元素和属性的数据值,取值范围、枚举以及素的顺序、元素和属性的数据值,取值范围、枚举以及样式匹配等。样式匹配等。现在主要的模式语言除了文档类型定义(现在主要的模式语言除了文档类型定义(DTD)以外,还)以外,还有有W3C 的的XML Schema,OASIS技术委员会开发的技术委员会开发的RELAX NG等。等。模式的用途主要包括:模式的用途主要包括:数据确认数据确认(通过模式预定义好的规则来验证XML文档的有效性)交易双方的合约(交易双方的合约(模式清楚说明了文档结构的规则及要求,可作为交易双方共同遵守的一个约定)系统文档(系统文档(模式可以为XML实例中的数据提供文档)数据扩充(数据扩充(
4、模式为元素和属性插入默认和固定的值,并根据数据类型规范化空白空间)应用程序信息(应用程序信息(模式提供了一种方式来为应用程序提供数据的附加信息,如可以包含一些关于如何把产品元素实例映射到数据库表的信息,并且允许应用程序使用这些信息来自动更新带有该数据的特定的表。)进行模式的设计时应用保证以下目标:进行模式的设计时应用保证以下目标:准确性和精确性(准确性和精确性(模式应用能准确地描述XML实例,并且能够确保该实例的有效性)明晰性明晰性(模式应该非常清晰,允许读者直观地理解被描述实例的结构和特征)广泛适用性广泛适用性(要使创建的模式有更广泛的适用性:可重用性和扩展性)XML SchemaXML S
5、chema介绍介绍W3C于于1998年开始制定年开始制定XML Schema,并于,并于2001年年5月月2日正式确定日正式确定XML Schema的第一个版本。从此的第一个版本。从此XML Schema成为成为W3C官方推荐的标准。官方推荐的标准。XML Schema以以XML语言作为基础,也可以说语言作为基础,也可以说XML Schema自身就是自身就是XML的一种应用;的一种应用;XML Schema语言也被称为语言也被称为XML Schema Definition(XSD),它的作用是定义一份,它的作用是定义一份XML文档的合法组件群文档的合法组件群(XML文档的结构),就像文档的结构
6、),就像DTD的作用一样。的作用一样。一份一份XML Schema,可以实现:,可以实现:定义了可以出现在文档里的元素定义了可以出现在文档里的元素 定义了可以出现在文档里的属性定义了可以出现在文档里的属性 定义了哪些元素是子元素定义了哪些元素是子元素 定义了子元素的顺序定义了子元素的顺序 定义了子元素的数量定义了子元素的数量 定义了一个元素是否能包含文本,或应该是空的定义了一个元素是否能包含文本,或应该是空的 定义了元素和属性的数据类型定义了元素和属性的数据类型 定义了元素和属性的默认值和固定值定义了元素和属性的默认值和固定值 为何使用为何使用 XML Schema?XML Schema?XM
7、L Schema和和DTD的作用一样,都是用来定义一个的作用一样,都是用来定义一个XML文档的文档的结构的模式,结构的模式,那么为什么有了那么为什么有了DTD还要有还要有XML Schema呢?呢?因为,因为,XML Schema比比DTD作用更加强大。作用更加强大。(1)XML Schema支持数据类型支持数据类型支持数据类型所带来的好处:支持数据类型所带来的好处:更易于描述被允许的文档内容更易于描述被允许的文档内容 更易于检验数据的正确性更易于检验数据的正确性 更易于与数据库中的数据一起协同工作更易于与数据库中的数据一起协同工作 更易于定义数据的使用面(关于数据的限制)更易于定义数据的使用
8、面(关于数据的限制)更易于定义数据样式(数据格式)更易于定义数据样式(数据格式)更易于把数据转换成不同的数据类型更易于把数据转换成不同的数据类型(2)XML Schema使用使用XML的语法的语法用用XML编写的好处是:编写的好处是:可以不需要再学一种新语言可以不需要再学一种新语言 可以用可以用XML编辑器来编辑编辑器来编辑Schema文件文件 可以用可以用XML解析器解析解析器解析Schema文件文件 可以用可以用XML DOM 处理处理Schema 可以用可以用XSLT转换转换Schema(3)XML Schema是可扩展的是可扩展的因为因为XML Schema文件是由文件是由XML编写的
9、,所以它们是可编写的,所以它们是可扩展的。扩展的。Schema可扩展意味着你可以:可扩展意味着你可以:在别的在别的Schema文件里再次用到你的文件里再次用到你的Schema 从标准的数据类型中派生出你自己的数据类型从标准的数据类型中派生出你自己的数据类型 在相同的文档中参考多种在相同的文档中参考多种Schema。(4)XML Schema安全数据通讯安全数据通讯如何制定如何制定XML Schema Definition(XSD)XML Schema Definition(XSD)下面我们将讲述如何来制定一份下面我们将讲述如何来制定一份XML Schema文件的过程:文件的过程:现在,假设要描
10、述的现在,假设要描述的User.xml文档的结构如下:文档的结构如下:xx 123456 1 以下为以下为user.dtd的内容:的内容:采用采用采用采用XML SchemaXML Schema来定义来定义来定义来定义User.xmlUser.xml文档中元素的过程。文档中元素的过程。文档中元素的过程。文档中元素的过程。采用采用XML Schema来定义来定义User.xml文档中元素的过程。文档中元素的过程。全局组件与命名类型局部组件与匿名类型全局组件形式来定义全局组件形式来定义全局组件形式来定义全局组件形式来定义 局部形式进行定义局部形式进行定义局部形式进行定义局部形式进行定义 XMLXM
11、L文档如何引用文档如何引用文档如何引用文档如何引用XML SchemaXML Schema文件文件文件文件 当一个模式文件建立好以后,可以用它来验证某一个当一个模式文件建立好以后,可以用它来验证某一个XML文档的有效性,也就是说检验某个文档的有效性,也就是说检验某个XML文档是否文档是否遵循了模式文件的定义。遵循了模式文件的定义。那么,那么,XML文档怎么来引用一个模式文档呢?文档怎么来引用一个模式文档呢?XML SchemaXML Schema元素的声明元素的声明全局元素声明全局元素声明全局元素指的就是以全局组件的形式来声明一个元素,全局元素指的就是以全局组件的形式来声明一个元素,即即元素的
12、父元素必须是元素的父元素必须是。局部元素声明局部元素声明局部元素声明只能出现在复杂类型(局部元素声明只能出现在复杂类型(元素)定义内部。即元素)定义内部。即元素的父元素只能是元素的父元素只能是、或或元素。元素。局部元素声明只在该数据类型定义中使用,而不能被其局部元素声明只在该数据类型定义中使用,而不能被其他复杂类型引用。他复杂类型引用。元素声明的数据类型元素声明的数据类型不管元素是局部的还是全局的,所有元素声明都需要将不管元素是局部的还是全局的,所有元素声明都需要将元素类型名称关联到数据类型上,它们可以是简单类型,元素类型名称关联到数据类型上,它们可以是简单类型,也可以是复杂。也可以是复杂。在
13、在XML Schema中有中有3种方法将数据类型关联到元素类种方法将数据类型关联到元素类型名称上:型名称上:引用命名数据类型引用命名数据类型以匿名形式定义数据类型以匿名形式定义数据类型ANY型元素型元素 不指定不指定type,也不指定,也不指定和和元元素。即素。即,为为ANY类型的元素可以有任何子元素、纯字符、属类型的元素可以有任何子元素、纯字符、属性。性。ANY型的数据类型型的数据类型在在我的内容自由我的内容自由元素声明时不仅没有用元素声明时不仅没有用type属性来为其指定数据类型,而且也没有为其用匿名形式定义数属性来为其指定数据类型,而且也没有为其用匿名形式定义数据类型,所以我的内容自由元
14、素的数据类型就为据类型,所以我的内容自由元素的数据类型就为ANY类型。因类型。因此,此,以下清单以下清单6所示的所示的XML片断相对该片断相对该schema来说都是合法有效来说都是合法有效的:的:元素默认值和固定值元素默认值和固定值默认值和固定值是用于给空元素增加值的方式来扩展默认值和固定值是用于给空元素增加值的方式来扩展XML实例。实例。如果元素内容是空的,则模式处理器会自动插入默认值如果元素内容是空的,则模式处理器会自动插入默认值或固定值;或固定值;而如果元素在实例中没有出现,那么就不会插入相应的而如果元素在实例中没有出现,那么就不会插入相应的元素和值。元素和值。采用采用element元素
15、中的元素中的default属性来定义元素的默认值,属性来定义元素的默认值,用用fixed属性来定义元素的固定值。属性来定义元素的固定值。XML SchemaXML Schema属性的声明属性的声明清单清单清单清单7 7:属性声明:属性声明:属性声明:属性声明属性声明的数据类型属性声明的数据类型属性声明的数据类型属性声明的数据类型 无论属性是局部的还是全局的,其数据类型都只能是简单类型,无论属性是局部的还是全局的,其数据类型都只能是简单类型,而不能是复杂类型。而不能是复杂类型。在在XSD中,指定属性的类型有以下三种方式:中,指定属性的类型有以下三种方式:在属性声明中,通过在属性声明中,通过“ty
16、pe”属性指定一个命名简单类型(它属性指定一个命名简单类型(它可以是内置类型,也可以是用户自定义的简单类型)。可以是内置类型,也可以是用户自定义的简单类型)。以匿名形式定义数据类型(通过在以匿名形式定义数据类型(通过在元素下使用元素下使用元素来定义和指定一个匿名简单类型)。元素来定义和指定一个匿名简单类型)。ANY型元素(不指定型元素(不指定type,也不指定,也不指定元素。从而不元素。从而不指定任何类型。这样属性可以拥有任何合法的指定任何类型。这样属性可以拥有任何合法的XML字符)。字符)。属性默认值和固定值属性默认值和固定值属性默认值和固定值属性默认值和固定值 如果某属性在实例元素中不存在
17、,而且在相应的属性声如果某属性在实例元素中不存在,而且在相应的属性声明中为它定义了默认值或固定值,那么模式处理器会自明中为它定义了默认值或固定值,那么模式处理器会自动插入该属性定义,并赋予它声明中的默认值或固定值。动插入该属性定义,并赋予它声明中的默认值或固定值。在在XML Schema中,属性的默认值和固定值分别由中,属性的默认值和固定值分别由“default”和和“fixed”属性来指定,二者是互斥的,属性来指定,二者是互斥的,只能出现其中一个。只能出现其中一个。如清单如清单9所示所示简单类型简单类型简单类型简单类型 在在XML Schema中,根据元素和属性的数据内容可以中,根据元素和属
18、性的数据内容可以采用简单类型或复杂类型来进行定义。采用简单类型或复杂类型来进行定义。所谓的简单类型所谓的简单类型(SimpleType)和复杂类型和复杂类型(ComplexType),它们本身并不是具体的数据类型,它,它们本身并不是具体的数据类型,它们只是对节点或者自定义类型的类型作一个抽象的说明,们只是对节点或者自定义类型的类型作一个抽象的说明,我们不可以指定某个节点的我们不可以指定某个节点的type属性为属性为SimpleType或或者是者是ComplexType,但是我们可以用,但是我们可以用SimpleType和和ComplexType来定义新的类型,让某个节点的来定义新的类型,让某个
19、节点的type属属性被指定为这个新类型,或者可以用性被指定为这个新类型,或者可以用SimpleType和和ComplexType元素来直接声明某个节点的类型。元素来直接声明某个节点的类型。简单类型的种类及定义简单类型的种类及定义在在XML Schema中,简单类型可以分为三类:中,简单类型可以分为三类:原子类型原子类型具有不可分割的值。如整数具有不可分割的值。如整数“10”、字符串、字符串“abced”等。等。列表类型(列表类型(List)它的值为用空白分隔的原子类型值的列表。它的值为用空白分隔的原子类型值的列表。联合类型(联合类型(union)它的值可以是原子类型值,也可以是列表值。它们的区
20、别它的值可以是原子类型值,也可以是列表值。它们的区别在于有效值集合,或者叫做在于有效值集合,或者叫做“值空间值空间”,因为这种类型是,因为这种类型是两种或两种以上其他简单类型的值空间的集合。如表示服两种或两种以上其他简单类型的值空间的集合。如表示服装的尺码可定义为一个联合类型,它的值可以是从装的尺码可定义为一个联合类型,它的值可以是从2到到18的的整数,也可以是整数,也可以是S、M、L字符中的一个。字符中的一个。简单类型的限制简单类型的限制 (Restriction)(Restriction)简单类型的限制(简单类型的限制(restriction)指的通过对其它类型加)指的通过对其它类型加以限
21、制产生新的类型,所有新的简单类型都是以某种方以限制产生新的类型,所有新的简单类型都是以某种方式限制其基类型的值的空间来生成新的类。式限制其基类型的值的空间来生成新的类。限制定义语法:限制定义语法:(限制条件限制条件)其中,限制条件有:其中,限制条件有:指定字符串的长度指定字符串的长度 指定字符串的最小长指定字符串的最小长度度 指定字符串的最大长指定字符串的最大长度度 指定数值的最小值指定数值的最小值 指定数值的最大值指定数值的最大值 排除比排除比value小的数小的数值值 排除比排除比value大的数大的数值值下面通过清单下面通过清单下面通过清单下面通过清单1010来讲述限制的定义与使用。来讲
22、述限制的定义与使用。来讲述限制的定义与使用。来讲述限制的定义与使用。清单清单10:限制的定义:限制的定义 简单类型的枚举简单类型的枚举简单类型的枚举简单类型的枚举(Enumeration)(Enumeration)枚举类型是通过枚举类型是通过enumeration面来实现的,允许为某个面来实现的,允许为某个类型规定一套取值空间。枚举类型的定义语法为:类型规定一套取值空间。枚举类型的定义语法为:.清单清单清单清单1111:枚举类型的定义与使用:枚举类型的定义与使用:枚举类型的定义与使用:枚举类型的定义与使用清单清单11:枚举类型的定义与使用:枚举类型的定义与使用 简单类型的列表(简单类型的列表(
23、简单类型的列表(简单类型的列表(ListList)列表类型,指的是元素的内容可以同时取多个有效值,值与值之间用空白分隔。列表类型,指的是元素的内容可以同时取多个有效值,值与值之间用空白分隔。在在XML Schema中,列表类型是通过使用中,列表类型是通过使用list元素来实现的。元素来实现的。清单清单12:列表类型的定义:列表类型的定义 根据清单根据清单12的定义,则以下的写法是有效的:的定义,则以下的写法是有效的:3 6 17 10除了采用除了采用itemType属性指定一个命名简单类型来指定列表条目外,也可属性指定一个命名简单类型来指定列表条目外,也可以在列表类型定义内使用以在列表类型定义
24、内使用simpleType子元素以匿名形式来定义列表条目:子元素以匿名形式来定义列表条目:简单类型的联合简单类型的联合简单类型的联合简单类型的联合(Union)(Union)联合类型允许符合几种不同简单类型中的任何一种值。联合类型允许符合几种不同简单类型中的任何一种值。也就是说,联合类型可以把多个简单类型联合在一起。也就是说,联合类型可以把多个简单类型联合在一起。比如对于服装的尺码,有的人喜欢用英文来表示(如比如对于服装的尺码,有的人喜欢用英文来表示(如S、M、L、XL等),有的人喜欢用数字来表示(如等),有的人喜欢用数字来表示(如36、38、40、42等),或者对我们中国人来说,更喜欢用中文
25、来等),或者对我们中国人来说,更喜欢用中文来表示(如小号、中号、大号、加大号等),所以采用联表示(如小号、中号、大号、加大号等),所以采用联合类型就能更好的解决这种问题。合类型就能更好的解决这种问题。具体如清单具体如清单13所示;所示;复杂类型复杂类型复杂类型复杂类型 在在XML Schema中,复杂类型的定义格式为:中,复杂类型的定义格式为:这里的这里的name属性用于指定所定义的复杂类型的名字,这个名字就属性用于指定所定义的复杂类型的名字,这个名字就可以指定给其它组件定义时的可以指定给其它组件定义时的type属性;如果没有指定属性;如果没有指定name属性属性时,则说明复杂类型是以匿名形式
26、定义的。时,则说明复杂类型是以匿名形式定义的。当在复杂类型中定义某个元素的子元素时,应该使用模型组来描当在复杂类型中定义某个元素的子元素时,应该使用模型组来描述这些子元素的顺序和结构。述这些子元素的顺序和结构。在在XML Schema的复杂类型中可以使用的模型组有的复杂类型中可以使用的模型组有sequence组、组、choice组、组、all组,同时在这些模型组中只能定义子元素。组,同时在这些模型组中只能定义子元素。复杂类型的复杂类型的复杂类型的复杂类型的sequencesequence组组组组 sequence组被用来表示组内所定义的元素在组被用来表示组内所定义的元素在XML文档文档里应该按
27、照在组内定义的先后顺序依次出现。里应该按照在组内定义的先后顺序依次出现。sequence组的定义语法为:组的定义语法为:复杂类型的复杂类型的复杂类型的复杂类型的choicechoice组组组组 采用采用choice组来描述的元素,在相对应的组来描述的元素,在相对应的xml文档中只文档中只能任意的选择一个子元素。能任意的选择一个子元素。choice组的定义语法为:组的定义语法为:清单清单15:清单清单清单清单1616:sequencesequence组和组和组和组和choicechoice组的嵌套使用组的嵌套使用组的嵌套使用组的嵌套使用清单清单16:sequence组和组和choice组的嵌套使
28、用。组的嵌套使用。复杂类型的复杂类型的复杂类型的复杂类型的allall组组组组 all组用来表示符合元素声明的所有元素都应该出现,组用来表示符合元素声明的所有元素都应该出现,并且可以以任意顺序出现,但最多只能出现一次。并且可以以任意顺序出现,但最多只能出现一次。all组的定义语法:组的定义语法:在复杂类型定义中使用属性类型在复杂类型定义中使用属性类型在复杂类型定义中使用属性类型在复杂类型定义中使用属性类型 定义元素的属性,也必须通过复杂类型来描述。在复杂定义元素的属性,也必须通过复杂类型来描述。在复杂类型中描述属性也如同描述元素一样,可以通过局部声类型中描述属性也如同描述元素一样,可以通过局部声明、全局声明的引用来实现。并且在复杂类型定义中,明、全局声明的引用来实现。并且在复杂类型定义中,属性必须出现在内容模型之后。属性必须出现在内容模型之后。