《第4章在XML文档中使用Scherma.ppt》由会员分享,可在线阅读,更多相关《第4章在XML文档中使用Scherma.ppt(43页珍藏版)》请在三一办公上搜索。
1、第4章 XML Scherma,4.1 XML Schema概述4.2 XML Schema的文档结构 4.3 XML Schema标记及属性定义4.4 全局声明和局部声明4.5 XML Schema的组定义4.6 XML Schema中的注释4.7 XML Schema命名空间,4.1 什么是XML Schema(1),XML Schema是W3C开发的一种新的约束XML文件的模式,是一种特殊的XML文件,遵循XML的语法规则。DTD则具有自己的语法,所以,只需懂得XML的语法规则即可编写Schema,无需学习其他语法规则。,XML Schema可以弥补DTD的不足之处,例如:DTD的数据类
2、型有限,当声明一个标记的标记内容为文本数据时,声明为“#PCDATA”,却不能限制文本的具体类型(如:整型,浮点型等)。而XML Schema则可以具体定义数据的具体类型,XML Schema不但提供了丰富的数据类型,还允许用户自定义类型。,XML Schema常用的数据类型见下表:,4.1 什么是XML Schema(2),更多详细信息可参考:http:/www.w3.org/TR/xmlschema-2/#built-in-datatypes,XML Schema中常用的基本数据类型,XML Schema中常用的基本数据类型,4.1 什么是XML Schema(3),XML Schema中
3、常用的基本数据类型,与DTD相比,XML Schema具有如下优点:,(1)可以更容易地描述文档结构。(2)可以方便地定义数据模型。(3)可重用性。,虽然Schema比DTD对数据的限制好,但实现相同的功能Schema比DTD的代码长很多。而且,Schema也不是万能的,DTD可以实现Schema不能实现的功能。XML Schema不能完全替代DTD,它们各有优势。,返回,上面代码中第一行以XML声明开始,说明这是一个XML文件。所有内容都添加在根标记。“xsd”是名称空间的前缀,可以任意定义,一般都设置为“xsd”或“xs”。,XML Schema文档是特殊的XML文档,要遵循XML的语法规
4、则。W3C规定,一个XML Schema文档的根标记必须是“schema”,名称空间必须是“http:/www.w3.org/2001/XMLSchema”,下面是它的基本形式如下:,4.2 XML Schema的文档结构(1),Schema内容,4.2 XML Schema的文档结构(2),一个简单的实例:这段程序只定义了一个标记。,返回,XML Schema 示例(1),7-302-12066-8JAVA实用教程Herbert Schildt马海军64.00,必要声明,使用的文档,7-5037-1978投资学张中华谢进城19.00,声明是一份xml,使用默认的命名空间,关于booklist
5、的说明,自定义,最多出现的次数,属性说明,子元素说明,子元素按顺序出现,属性值只出现一次,用户自定义,枚举类型,authorlistType 作者列表,4.3 XML Schema标记及属性定义,4.3.1 简单类型标记的定义,4.3.2 自定义数据类型,4.3.3 复杂类型标记子标记的定义,4.3.4 复杂类型标记的属性的定义,4.3.5 空标记及混合内容标记的定义,返回,简单类型标记的定义(1),简单标记是指不带有任何属性及子标记的标记,定义简单标记可以通过标记来完成。格式为:,例如:,简单类型标记的定义(2),标记的属性名称和作用见下表:,返回,自定义数据类型(1),XML Schema
6、已经提供了40多种的数据类型,把数据已经分的很具体了,但有时为了更好的满足需要,Schema还可自定义的数据类型。自定义数据类型是指以一个XML Schema类型为基础,添加一些限制条件,使之成为一个新的类型。自定义数据类型使用标记,通过这个标记可以给XML Schema提供的数据类型添加一些限制,从而构造出新的类型。常用的有以下6中类型:,1限定数值范围 2限定数值位数 3限定字符串范围 4枚举类型 5列表类型 6联合类型,自定义数据类型(2),1限定数值范围,XML Schema中提供了4种标记用来限制数值的范围,、和它们都有一个“value”属性,意义分别为:,(1)表示小于等于“val
7、ue”属性的值。(2)表示大于等于“value”属性的值。(3)表示小于“value”属性的值。(4)表示大于“value”属性的值。,自定义数据类型(3),1限定数值范围,例如:,上面这段代码定义了一个“score”标记,标记值的类型为“simpleType1”。接下来的6行定义了一个新的类型,名称为“simpleType1”。标记的“base”定义了该类型的基本类型是“float”,接下来的两行限定了数值范围是0100之间,包括0和100。,自定义数据类型(4),2限定数值位数,在XML Schema中有一个“decimal”数据类型,用来准确地表示数值。通过标记和来准确限制数值。其中:,
8、用来限制数值的总位数。,用来限制小数点后面的位数。,例如:,自定义数据类型(5),3限定字符串范围,限定字符串范围分为两种:限定字符串长度和限定字符串内容。XML Schema通过、和来限定字符串的长度,用来限定字符串的内容。,限定字符串长度的例子:,自定义数据类型(6),3限定字符串范围,XML Schema中的标记可以限定字符串的内容,例如:,上面这段代码定义了一个“tel”标记,该标记的值要满足正则表达式“(0d2,3-)?d7,8”所限定的值。这个表达式的意义是,“d”表示任意数字,“0d2,3”表示区号,以“0”开头后面是23位数字。“-”是固定字符,“?”表示有0个或1个,“d7,
9、8”表示7到8位数字。所以,该表达式所表示的值是一个可以带区号,也可以不带区号的电话号码。,自定义数据类型(7),4枚举类型,XML Schema中使用标记来定义枚举类型。例如:,上面的这段代码定义了一个标记“jilin”,该标记的值只能为“changchun”、“jilin”和“songyuan”中的一个。枚举类型可用于除布尔型以外的所有简单类型。枚举的值可以包含空格,但每一个枚举项的值必须是唯一的。,自定义数据类型(8),5列表类型,在XML Schema中,用标记来定义列表类型。例如:,在定义列表类型的同时,还可以指定列表的长度或长度范围,分别用标记或、来指定。例如:,自定义数据类型(9
10、),6联合类型,联合类型是一个标记的内容可以是多种类型中的一种,例如:,上面的代码段说明,“code”标记的内容可以是字符串型的数据,也可以是整型的数据。如果标记内容的数据类型不包含在“memberTypes”中所列举的数据类型中,则相应XML文件也不是有效的XML文件。,返回,复杂类型标记子标记的定义(1),复杂类型的标记是指含有子标记或属性的标记。在XML Schema中,用标记来定义复杂类型的标记。通过可以指定标记与标记或标记与属性的从属关系。,定义子标记的语法格式为:,子标记描述,复杂类型标记子标记的定义(2),一个实例:,这段程序定义了4个标记,标记“eng”、“math”、“phy
11、sics”是“score”的子标记。在标记块中,通过标记封装了一组标记,表示这些标记的出现有固定的顺序。,复杂类型标记子标记的定义(3),除了标记外,其他可选的标记还有和。表示其中包含的标记可以无顺序地出现一个或多个。表示其中包含的标记可以任意出现一个。,在XML Schema中,用“minOccurs”和“maxOccurs”属性来定义子标记出现的次数,分别表示最少出现次数和最多出现次数。有以下几种情况:,(1)maxOccurs=”*”,表示该标记可以出现一次或多次。(2)maxOccurs=”1”,表示该标记只能出现一次。(3)minOccurs=”0”,表示该标记可选,即出现0次或1次
12、。,除了上述情况,还可以指定其他具体的值。,复杂类型标记子标记的定义(4),一个例子:,这段程序说明,“name”标记是一个必须出现的标记,“sex”标记没有这两个属性,也表示是必须出现的标记。“age”是一个可选的标记。,返回,复杂类型标记的属性的定义(1),XML Schema中,标记的属性通过标记来声明,其基本语法格式为:,标记的属性除了“name”和“type”属性外,还有其他一个常用的属性“use”,表示该属性出现的情况,属性值可以是optional、prohibited和required中的一个。分别表示该属性是可有可无、禁止赋值的和必须赋值。“use”属性的值还可以是fixed或
13、default,意义分别为:该属性的值是固定的或指定属性的默认值,默认值可以改变。,复杂类型标记的属性的定义(2),例子:,返回,空标记及混合内容标记的定义(1),空标记是指不含有任何标记内容的标记,但可以含有属性。例如,空标记可以用如下的方法定义:,这段代码定义了一个新的类型“emptyType”,“content”属性为“empty”说明该类型的标记不含有任何标记内容,标记的“base”属性的值为“anyType”,说明该类型不建立在任何类型的基础上。该类型含有一个属性“att1”,属性值为字符串类型。,空标记及混合内容标记的定义(2),混合内容的标记是指既包含文本内容又包含子标记的标记。
14、下面的例子定义了一个含有混合内容的标记。,上面代码中 标记的“content”属性的值设置成“mixed”,说明该类型标记所标记的内容可以有文本,也可以有子标记。上面这段代码说明,该类型的标记可以含有文本数据,也可以含有一个子标记“element1”。,空标记及混合内容标记的定义(3),定义只含有文本数据和属性的标记的格式为:,上面代码中标记说明该标记的内容只包含某一类型的文本,文本类型通过“base”属性来指定。,返回,4.4 全局声明和局部声明,在XML Schema中,标记可以分为全局和局部的。直接在元素下声明的标记和属性是全局的,这些元素和属性可以通过和元素的“ref”属性来引用。,注
15、意:(1)声明的全局标记和属性的名称必须是唯一的。(2)在全局声明中不能使用“ref”属性。(3)全局声明的标记在XML文档中可以作为根标记出现。,在复杂类型定义内部声明的标记和属性是局部的,由于简单类型不包含子标记和属性,所以局部标记和属性不能在简单类型定义内部声明。,返回,全局标记示例,第一种方式声明的3个标记都是全局的,全局标记的名字必须是唯一的,而且只能声明一次。全局标记都可以作为根标记出现。,第二种方式中,element1是全局的,element2和element3是局部的,根标记只能是element1。元素的全局声明和局部声明最明显的区别是在其他声明中可以引用全局声明,而局部声明只
16、能存在于它们自己的局部范围内,4.5 XML Schema的组定义(1),对于Schema中多次重复出现的一组标记或属性,我们可以把它们定义成一个标记组或属性组,然后通过引用来使用。这样可以大大提高代码的重用性,从而也使代码的结构性变得更强。在XML Schema中标记组用标记定义,属性组用标记来定义。例如,定义一个组:,4.5 XML Schema的组定义(2),使用组:,标记和标记类似于标记,但不同的是,标记结构可以被标记使用,而标记结构或标记结构只能被标记调用。,返回,4.6 XML Schema中的注释,Schema文件的注释可以和XML文件的注释方法相同,即:,此外,Schema还提
17、供了另一种添加注释的功能,通过标记来添加注释,它含有两个子标记和。它们的区别在于,前者是面向用户的,后者是面向解析器的。例如:,book typy book,返回,3.7 XML命名空间,XML作为一种允许用户定义自己标记的标记语言,很可能出现名称重复的情况,命名空间是一种避免名称冲突的方式。W3C颁布的命名空间(NameSpace)标准中对命名空间的定义是:XML命名空间提供了一套简单的方法,将XML文档和URI引用标记的名称相结合,来限定其中的元素和属性名。也即命名空间给XML名称添加前缀,使其能够区分所属的领域,从而为元素和属性提供唯一的名称,其最重要的用途是用于融合不同词汇集的XML文
18、档。,什么是命名冲突,在相同的作用域当中,如果有两个元素或属性的名字完全相同,就会出现冲突。例如,我的电脑包括内存和硬盘两个元素,这两个元素都包括容量这个属性。当这两个元素统称为存储设备时,内存设备要用到两容量属性,这时容量属性就会出现冲突,不知道具体是哪一个容量属性,解决命名冲突途径,为解决命名冲突的问题,引入命名空间的概念。命名空间的声明方法为:xmlns=namespaceURI或 者 xmlns:某前缀=namespaceURI“xmlns=”和“xmlns:某前缀=为命名空间声明,等号后面以引号括起的值,必须是一个统一格式资源标识符(URL),用来代表名称空间所属的领域。第一种是默认命名空间声明,第二种是显式命名空间声明。,命名空间的使用,声明了命名空间,有了命名空间下的合法名称,就可以使用命名空间来区别具有相同名称的元素和属性了。命名空间的使用方法是在属于该名称空间的元素或属性名称前添加前缀和冒号“:”,表示其所属的名称空间。,课后习题答案,1、TTFTF2、ABC;BC;D;ABD;BD;ABD,