经典介绍DTD和Schema及区别_第1页
经典介绍DTD和Schema及区别_第2页
经典介绍DTD和Schema及区别_第3页
经典介绍DTD和Schema及区别_第4页
经典介绍DTD和Schema及区别_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、11 DTDDTD和和XML Schema XML Schema 22/50回顾回顾 u掌握掌握XML语法规则语法规则u了解了解XML技术体系技术体系u了解了解XML应用方向应用方向u问题问题 什么是什么是XML,为什么要用为什么要用XML XML的内容有哪些的内容有哪些 顺序:从文档上面到下面顺序:从文档上面到下面 什么叫有效的什么叫有效的XML33/50目标目标u理解文档类型定义(理解文档类型定义(DTD)u理解命名空间理解命名空间u理解理解Schemau使用使用Schema和和DTD定义定义XML文档文档44/50概述概述u 为什么要验证为什么要验证XMLu 什么叫有效的什么叫有效的XM

2、L 如果一个如果一个XML文档规定其文档类型和数据结构的文档规定其文档类型和数据结构的DTD或者或者Schema,并且与之关联,并且校验正确,则此文档是有效的并且与之关联,并且校验正确,则此文档是有效的u 良好与有效关系良好与有效关系 格式良好的格式良好的XML文档,不一定是有效的文档,不一定是有效的XML文档。文档。 有效的有效的XML文档,则一定是格式良好的文档,则一定是格式良好的XML文档。文档。 说明:在格式良好的基础上说明:在格式良好的基础上,再看是否满足企业的特殊要求再看是否满足企业的特殊要求u XML验证技术验证技术 DTD Schema55/50文档类型定义文档类型定义DTDD

3、TD uDTD(Document Type Definition,文档类型定义),文档类型定义)是一套标记的语法规则,它定义了元素、子元素、属性是一套标记的语法规则,它定义了元素、子元素、属性及其取值,规定了用户在及其取值,规定了用户在DTD关联的关联的XML文档中可以使文档中可以使用什么标记、各个标记出现的顺序以及标记的层次关系,用什么标记、各个标记出现的顺序以及标记的层次关系,并定义了实体。并定义了实体。u对于一个对于一个DTD的定义,最关键的在于它内部的元素和属的定义,最关键的在于它内部的元素和属性的定义。一个性的定义。一个DTD文档实际上就是元素定义的集合,文档实际上就是元素定义的集合

4、,而元素可能包含属性,也可能不包含属性。而元素可能包含属性,也可能不包含属性。66/50使用使用DTDDTD定义定义XMLXML元素元素 要点:包含符号和数据类型两部分。要点:包含符号和数据类型两部分。符号符号符号类型符号类型描述描述示例示例?问号问号表示该对象可以出现,但表示该对象可以出现,但只能出现一次只能出现一次(菜鸟(菜鸟?) *星号星号表示该对象允许出现任意表示该对象允许出现任意多次,也可以是零次多次,也可以是零次(爱好(爱好*)+加号加号表示该对象最少出现一次,表示该对象最少出现一次,可以出现多次可以出现多次(成员(成员+)()括号括号用来给元素分组用来给元素分组(古龙(古龙|金庸

5、金庸|梁羽生)梁羽生),(王朔(王朔|余杰)余杰),毛毛毛毛|竖条竖条表明在列出的对象中选择表明在列出的对象中选择一个一个(男人(男人|女人)女人),逗号逗号表示对象必须按指定的顺表示对象必须按指定的顺序出现序出现 (西瓜(西瓜,苹果苹果,香蕉)香蕉)77/50元素内容的类型元素内容的类型内容内容解释解释#PCDATA表明该元素可以包含任何字符数据,但是不能在其中包含任何子元表明该元素可以包含任何字符数据,但是不能在其中包含任何子元素。素。假设我们定义元素学员:假设我们定义元素学员: 则下面的实例是正确的:则下面的实例是正确的: 努力学习是好学员努力学习是好学员而下面的实例就是错误的:而下面的

6、实例就是错误的: 努力努力学习学习是好学员是好学员因为在其中包含了子元素因为在其中包含了子元素。一般如果定义元素的一般如果定义元素的CONTENT为为#PCDATA,最好在其中只加入纯,最好在其中只加入纯文本字符数据文本字符数据EMPTY如果一个元素的如果一个元素的CONTENT被声明为被声明为EMPTY的话,表示该元素不能的话,表示该元素不能包含任何子元素和文本,仅可以使用属性。包含任何子元素和文本,仅可以使用属性。ANY表示该元素中可以包含任何在表示该元素中可以包含任何在DTD中定义的元素内容中定义的元素内容其他类型其他类型最通常的情况是一个元素本身是由其他元素的集合构成的最通常的情况是一

7、个元素本身是由其他元素的集合构成的88/50示例示例99/50使用使用DTDDTD定义定义XMLXML元素的属性元素的属性 u说明:说明: 回顾定义表时字段的定义。回顾定义表时字段的定义。 对比学习对比学习XML很重要。很重要。1010/50 属性类型及其含义属性类型及其含义 类型类型具体的含义说明具体的含义说明CDATA这个类型表明该属性只能包含字符数据这个类型表明该属性只能包含字符数据ID该属性的取值必须是唯一的,在一个文档内两个该属性的取值必须是唯一的,在一个文档内两个ID属性的值不能一样属性的值不能一样IDREF、IDREFS 这个属性的值实际上就像这个属性的值实际上就像C+中的指针一

8、样,它是一个指向文档中其他地方声明的中的指针一样,它是一个指向文档中其他地方声明的ID值,所以,如果在具体的文档中该属性的取值和它所指向的值,所以,如果在具体的文档中该属性的取值和它所指向的ID值不匹配的话,值不匹配的话,就会返回错误。就会返回错误。IDREFS和和IDREF类似,但是可以具有由空格分隔的多个引用类似,但是可以具有由空格分隔的多个引用ENTITY、ENTITIESENTITY属性的值必须对应一个在属性的值必须对应一个在DTD文档内声明的但还没有分析过的实体。文档内声明的但还没有分析过的实体。ENTITIES属性和属性和ENTITY类似,不同的是它可以包含多个实体,每一个实体类似

9、,不同的是它可以包含多个实体,每一个实体之间可以用空格进行分隔。需要注意的是实体包括普通实体、外部实体、参数之间可以用空格进行分隔。需要注意的是实体包括普通实体、外部实体、参数实体和外部参数实体。可以把实体理解为程序设计语言中的变量实体和外部参数实体。可以把实体理解为程序设计语言中的变量NMTOKE、NMTOKENSNMTOKEN是是CDATA的一个子集,它所使用的字符必须是字母、数字、句点、破的一个子集,它所使用的字符必须是字母、数字、句点、破折号、下划线或冒号。折号、下划线或冒号。NMTOKENS和和NMTOKEN类似,不同之处在于它可以类似,不同之处在于它可以包含多个值,每个值之间用空格

10、进行分隔包含多个值,每个值之间用空格进行分隔NOTATION NOTATION的值必须引用已在的值必须引用已在DTD文档其他地方声明过的某注解的名称文档其他地方声明过的某注解的名称 NOTATION(enumerated)该属性的值必须匹配该属性的值必须匹配NOTATION名称列表中的某个名称。比如,我们已经存在两个名称列表中的某个名称。比如,我们已经存在两个NOTATION,一个为,一个为beauty,一个为,一个为beast;我们可以定义一个属性类型为;我们可以定义一个属性类型为NOTATION(beauty|beast)Enumerated该属性几乎和该属性几乎和C+中的枚举变量一样,我

11、们事先定义好一些值,该属性的值必须匹中的枚举变量一样,我们事先定义好一些值,该属性的值必须匹配所列出的这些值。比如现在有值为美丽、温柔、纯洁、智慧,该属性的类型配所列出的这些值。比如现在有值为美丽、温柔、纯洁、智慧,该属性的类型就可以表现为(美丽就可以表现为(美丽|温柔温柔|纯洁纯洁|智慧),实际内容文档必须从这些值中取一个,智慧),实际内容文档必须从这些值中取一个,值之间用值之间用“|”进行分隔进行分隔 1111/50约束的四种形式约束的四种形式 值值含义含义#REQUIRED用来告诉用来告诉XML解析程序,该元素的所有实例都必须有该属解析程序,该元素的所有实例都必须有该属性的值,就像数据表

12、中某一个字段为性的值,就像数据表中某一个字段为NOT NULL一样一样#IMPLIED表示如果该元素的实例中没有指定该元素的值的话,就忽表示如果该元素的实例中没有指定该元素的值的话,就忽略该属性,就像在数据表中某一个字段的值可以为略该属性,就像在数据表中某一个字段的值可以为NULL一样一样#FIXED value表示包含该属性的元素实例必须在指定列出的值中表示包含该属性的元素实例必须在指定列出的值中比如一个属性名称为学员:学员比如一个属性名称为学员:学员 CDATA #FIXED 张三张三“ 表示属性值只能取表示属性值只能取“张三张三”Defaultvalue为属性提供一个默认的值。为属性提供

13、一个默认的值。比如一个属性名称为学员:学员比如一个属性名称为学员:学员CDATA 张三张三如果在该属性的实例中没有包含这个属性的话,解析器就如果在该属性的实例中没有包含这个属性的话,解析器就认为该属性的值就是认为该属性的值就是“张三张三”,如果在该属性的实例中,如果在该属性的实例中包含了这个属性并赋值了的话,就采用这个赋值包含了这个属性并赋值了的话,就采用这个赋值1212/50示例示例1313/50 DTD DTD与与XMLXML文档关联形式文档关联形式 u 一个一个DTD文件可以与多个文件可以与多个XML文档联系起来。这样,这些文档联系起来。这样,这些XML文文档就具有相同的档就具有相同的D

14、TD模板,其元素、元素属性、元素排列顺序、模板,其元素、元素属性、元素排列顺序、元素内容都必须符合元素内容都必须符合DTD定义的格式。该定义的格式。该DTD文档可以根据用户文档可以根据用户的实际需求创建,以适应特定的应用业务领域。的实际需求创建,以适应特定的应用业务领域。u 将将DTD与与XML文档关联的方式有三种:文档关联的方式有三种: 使用内部使用内部DTD 使用外部使用外部DTD 使用公共使用公共DTDu XML解析器将使用解析器将使用DTD来解析来解析XML文档。文档。XML文档应该通过指令文档应该通过指令告诉解析器到哪里去寻找告诉解析器到哪里去寻找DTD。u XML文档类型声明出现在

15、文档类型声明出现在XML文档的序言部分,以字符串文档的序言部分,以字符串“!DOCTYPE”开始,然后是根元素的名字,最后会依据不同的开始,然后是根元素的名字,最后会依据不同的DTD使用方式而有所不同。使用方式而有所不同。u 下面的语法是下面的语法是DTD在在XML文档中的声明方法:文档中的声明方法:1414/50使用内部使用内部DTDDTD !DOCTYPE 家庭家庭 1515/50使用外部使用外部DTDDTD u如果某个如果某个DTD是共享的,即开放给多个是共享的,即开放给多个XML文档作为公文档作为公共文档,那么这些共文档,那么这些XML文档应该使用外部文档应该使用外部DTD。如果采。如

16、果采用外部用外部DTD的话,就需要有两个文档,第一个文档就是的话,就需要有两个文档,第一个文档就是关于关于DTD的文档,第二个文档就是遵守的文档,第二个文档就是遵守DTD格式的内容格式的内容文档。实际上,我们可以建立无穷多个遵守该文档。实际上,我们可以建立无穷多个遵守该DTD格式格式的文档。的文档。u在在XML文档中关联外部文档中关联外部DTD的语法格式为:的语法格式为:1616/50外部外部DTDDTD示例示例1717/50使用公共使用公共DTDDTD u有些组织(例如有些组织(例如W3C)和企业将其所定义的)和企业将其所定义的DTD公布公布出来,供需要的开发人员使用和参考。使用这些出来,供

17、需要的开发人员使用和参考。使用这些DTD的的XML文档即使用了公共的文档即使用了公共的DTD模板。其语法格式为:模板。其语法格式为: u DTD名称与名称与XML名称有所不同,可以包含字母、数字、空格等。名称有所不同,可以包含字母、数字、空格等。如果一个如果一个DTD是一个是一个ISO标准,那么标准,那么DTD名称应该以字符串名称应该以字符串“ISO”开始。如果一个非开始。如果一个非ISO组织同意该组织同意该DTD,那么其名称以,那么其名称以“+”开始。开始。如果没有标准化组织同意该如果没有标准化组织同意该DTD,那么其名称以,那么其名称以“-”开始。初始化开始。初始化字符串后面是一个双斜杠字

18、符串后面是一个双斜杠“/”,接着是,接着是DTD所有者的名称,然后所有者的名称,然后又是双斜杠又是双斜杠“/”,接着是描述该,接着是描述该DTD的文字,最后还是一个双斜的文字,最后还是一个双斜杠杠“/”,跟着,跟着ISO639语言标识符。比如,我们在前面学习过的定语言标识符。比如,我们在前面学习过的定义过渡型义过渡型XHTML1.0的的DOCTYPE为:为:1818/50使用使用DTDDTD定义定义XMLXML实体实体 u内部实体:内部实体:u外部实体外部实体 &write;1919/50命名空间命名空间 u当我们建立当我们建立XML应用的时候,会为具体的行业应用创建应用的时候,会为具

19、体的行业应用创建特定的特定的DTD,规定可用的元素。有时会出现下面的情况,规定可用的元素。有时会出现下面的情况-两个同名的元素在不同的地方可能会有不同的含义。两个同名的元素在不同的地方可能会有不同的含义。u命名空间(命名空间(Namespace)-对于每一套特定应用的对于每一套特定应用的DTD,给它一个独一无二的标志来代表,如果在,给它一个独一无二的标志来代表,如果在XML文文件中使用件中使用DTD中定义的元素,需将中定义的元素,需将DTD的标志和元素名、的标志和元素名、属性连在一起使用,相当于指明了元素来自什么地方,属性连在一起使用,相当于指明了元素来自什么地方,这样就不会和其他同名元素混淆

20、了这样就不会和其他同名元素混淆了u。在。在XML中,采用现成的、在全球范围唯一的中,采用现成的、在全球范围唯一的“域名域名”作为命名空间,即用作为命名空间,即用URL作为作为XML的命名空间。的命名空间。xmlns:前缀前缀= 命名空间命名空间URI 2020/50命名空间示例命名空间示例2121/50命名空间示例命名空间示例 客户端网页编程客户端网页编程 成都朗沃信息技术有限公司成都朗沃信息技术有限公司肖继潮肖继潮机械工业出版社机械工业出版社2005年年50050 JavaScript权威指南权威指南 老外老外 Apress 20042222/50XML Schema XML Schema

21、uXML Schema是用一套预先规定的是用一套预先规定的XML元素和属性创元素和属性创建的,这些元素和属性定义了建的,这些元素和属性定义了XML文档的结构和内容模文档的结构和内容模式。式。 XML Schema规定规定XML文档实例的结构和每个元文档实例的结构和每个元素素/属性的数据类型。属性的数据类型。 uSchema相对于相对于DTD的明显好处是,的明显好处是,XML Schema文档文档本身也是本身也是XML文档,而不是像文档,而不是像DTD一样使用自成一体的一样使用自成一体的语法。这就方便了用户和开发者,因为可以使用相同的语法。这就方便了用户和开发者,因为可以使用相同的工具来处理工具

22、来处理XML Schema和其他和其他XML信息,而不必专信息,而不必专门为门为Schema使用特殊工具。使用特殊工具。Schema简单易懂,懂得简单易懂,懂得XML语法规则的人都可以立刻理解它。语法规则的人都可以立刻理解它。Schema的概念的概念提出已久,但提出已久,但W3C的标准最近才出来,相应的应用支的标准最近才出来,相应的应用支持尚未完善,但采用持尚未完善,但采用Schema已成为已成为XML发展的一个趋发展的一个趋势。势。2323/50SchemaSchema和和DTDDTD的区别的区别 u XML从从SGML中继承了中继承了DTD,并用它来定义内容的模型,验证和组织元素。,并用它

23、来定义内容的模型,验证和组织元素。同时,它也有很多局限:同时,它也有很多局限:DTD不遵守不遵守XML语法;语法;DTD不可扩展;不可扩展;DTD不支持命名空间的应用;不支持命名空间的应用;DTD没有提供强大的数据类型支持,只能表示很简单的数据类型。没有提供强大的数据类型支持,只能表示很简单的数据类型。u Schema完全克服了这些弱点,使得基于完全克服了这些弱点,使得基于Web的应用系统交换的应用系统交换XML数据更数据更为容易。下面是它所展现的一些新特性:为容易。下面是它所展现的一些新特性:Schema完全基于完全基于XML语法,不需要再学习特殊的语法;语法,不需要再学习特殊的语法;Sch

24、ema能用处理能用处理XML文档的工具处理,而不需要特殊的工具;文档的工具处理,而不需要特殊的工具;Schema大大扩充了数据类型,支持大大扩充了数据类型,支持booleans、numbers、dates and times、URIs、integers、decimal numbers和和real numbers等;等;Schema支持原型,也就是元素的继承。如:我们定义了一个支持原型,也就是元素的继承。如:我们定义了一个“联系人联系人”数据数据类型,然后可以根据它产生类型,然后可以根据它产生“朋友联系人朋友联系人”和和“客户联系客户联系”两种数据类型;两种数据类型;Schema支持属性组。我们

25、一般声明一些公共属性,然后可以应用于所有的元支持属性组。我们一般声明一些公共属性,然后可以应用于所有的元素,属性组允许把元素、属性关系放于外部定义、组合;素,属性组允许把元素、属性关系放于外部定义、组合;开放性。原来的开放性。原来的DTD只能有一个只能有一个DTD应用于一个应用于一个XML文档,现在可以有多个文档,现在可以有多个Schema运用于一个运用于一个XML文档。文档。2424/50思考思考uSchema更好更好,为什么还要学习为什么还要学习DTD? 目前还有很多开源框架使用的是目前还有很多开源框架使用的是DTD 简单简单,清晰。清晰。 熟悉熟悉DTD,能够读懂能够读懂Schema报错

26、信息报错信息 如:如:验证验证ss01.xml.file:/e:/LOVODB/PPT2008/43/xml02/ss01.xml:8,13: Element lastname is not valid for content model: (firstname|lastname)XML文档文档ss01.xml无效无效(1 errors)uSchema 目前越来越多的框架由目前越来越多的框架由DTD验证改为了验证改为了Schema验证验证 Schemal已经成为一种发展趋势已经成为一种发展趋势2525/50XML SchemaXML Schema基础概念基础概念 1 1u 预定义类型预定义类型

27、u 派生类型派生类型XML Schema中常用的预定义类型中常用的预定义类型数据类型数据类型描述描述string表示字符串表示字符串Boolean布尔型布尔型decimal代表特定精度的数字代表特定精度的数字float表示单精度表示单精度32位浮点数位浮点数double表示双精度表示双精度64位浮点数位浮点数duration表示持续时间表示持续时间 dateTime代表特定的时间代表特定的时间 time代表特定的时间,但是是每天重复的代表特定的时间,但是是每天重复的date代表日期代表日期 hexBinary代表十六进制数代表十六进制数anyURI代表一个代表一个URI,用来定位文件,用来定位

28、文件NOTATION代表代表NOTATION类型类型2626/50XML SchemaXML Schema基础概念基础概念2 2uSchema元素:简单类型和复杂类型元素:简单类型和复杂类型uXML Schema规范中将元素分为两种类型:规范中将元素分为两种类型: 简单类型元素简单类型元素:简单类型元素只能包含字符内容。这些字符可以简单类型元素只能包含字符内容。这些字符可以被约束为特殊的预定义类型或派生类型。例如,可以指定一个被约束为特殊的预定义类型或派生类型。例如,可以指定一个简单元素的内容必须是日期、整数、字符串或者仅仅是一个字简单元素的内容必须是日期、整数、字符串或者仅仅是一个字符或者一

29、系列字符。符或者一系列字符。 复杂类型元素复杂类型元素:复杂类型元素是包含子元素内容或者属性的元素复杂类型元素是包含子元素内容或者属性的元素 2727/50XML SchemaXML Schema文档基本结构文档基本结构 u一个简单的一个简单的XML文档文档note.xml 尹老师尹老师 肖老师肖老师 提醒提醒 本周末不要忘记提醒我参加回忆本周末不要忘记提醒我参加回忆2828/50XMLSchemaXMLSchema文档基本结构文档基本结构u在在W3C XML schema规范中规定:所有的规范中规定:所有的Schema文文档都使用档都使用作为其根元素。因此,所有的作为其根元素。因此,所有的X

30、ML schema文档都应该是如下的结构:文档都应该是如下的结构:u元素可以包含一些属性。一个元素可以包含一些属性。一个XML schema声明看起来经常以如下的形式出现:声明看起来经常以如下的形式出现: .2929/50XMLSchemaXMLSchema文档基本结构文档基本结构u在在W3C XML schema规范中规定:所有的规范中规定:所有的Schema文文档都使用档都使用作为其根元素。因此,所有的作为其根元素。因此,所有的XML schema文档都应该是如下的结构:文档都应该是如下的结构: .3030/50XMLSchemaXMLSchema文档基本结构文档基本结构u元素可以包含一些

31、属性。一个元素可以包含一些属性。一个XML schema声明看起来经常以如下的形式出现:声明看起来经常以如下的形式出现:.schema中用到的元素和数据类型(中用到的元素和数据类型(schema、element、complexType、sequence、string、boolean等)来自于等)来自于“/2001/XMLSchema”命名空间,同时,它指定来自与该命名空间的元素和数据类型必须用命名空间别名命名空间,同时,它指定来自与该命名空间的元素和数据类型必须用命名空间别名“xsd:”做前缀。做前缀。 指示该指示该schema定义的元素(定义的元素(note、

32、to、from、heading、body)来自于来自于“http:/”命名空间。命名空间。 指示默认的命名空间是指示默认的命名空间是“http:/” 要求element使用的命名空间必须是targetNamespace,它的作用是对元素起“限定与非限定”使用,意思是在文档范例中要求采用命名空间前缀。 3131/50SchemaSchema示例示例u u u u u u u u u u u u u 3232/50uuu 尹老师尹老师u 肖老师肖老师u 提醒提醒u 本周末请提醒我参加新闻发布会本周末请提醒我参加新闻发布会u3333/50 Schema Schema文档中出现的元素标记文档中出现的元

33、素标记 元素类型元素类型描述描述schema包含一个已经定义的包含一个已经定义的schemaelement声明一个元素声明一个元素attribute声明一个属性声明一个属性simpleType定义一个简单类型,它决定了元素和属性值的约束和相关信息定义一个简单类型,它决定了元素和属性值的约束和相关信息complexType定义一个复合类型,它决定了一组元素和属性值的约束和相关信息定义一个复合类型,它决定了一组元素和属性值的约束和相关信息group把一组元素声明组合在一起,以便它们能够一起被复合类型应用把一组元素声明组合在一起,以便它们能够一起被复合类型应用attributeGroup把一组属性声

34、明组合在一起,以便它们能够一起被复合类型应用把一组属性声明组合在一起,以便它们能够一起被复合类型应用simpleContent应用于应用于complexType,对它的内容进行约束和扩展等,对它的内容进行约束和扩展等choice允许唯一的一个元素从一个组中被选择允许唯一的一个元素从一个组中被选择list从一个特定数据类型的集合中选择定义一个简单类型元素从一个特定数据类型的集合中选择定义一个简单类型元素union从一个特定简单数据类型的集合中选择定义一个简单类型元素从一个特定简单数据类型的集合中选择定义一个简单类型元素unique定义一个属性或元素值,它必须在一个特定范围内定义一个属性或元素值,

35、它必须在一个特定范围内sequence给一组元素一个特定的序列给一组元素一个特定的序列restriction定义一个约束条件定义一个约束条件3434/50使用使用XML SchemaXML Schema定义定义XMLXML文档结构文档结构u最简单的最简单的Schema文档文档u含子元素的含子元素的Schema文档文档 u含子元素和孙元素的含子元素和孙元素的Schema文档文档 u定义相同子元素的数量定义相同子元素的数量 u定义可选项的子元素定义可选项的子元素 u自定义简单类型自定义简单类型 u定义属性定义属性 3535/50最简单的最简单的SchemaSchema文档文档 u 首先,我们写出一

36、个最简单的首先,我们写出一个最简单的XML文档文档hello.xml: Hello World!u 下面我们看分析定义这个下面我们看分析定义这个XML文档。这个文档。这个XML文档只有一个根元文档只有一个根元素素greeting,而且该元素不含属性,无子元素,内容是字符串,它,而且该元素不含属性,无子元素,内容是字符串,它是一个典型的简单元素,其类型为预定义类型是一个典型的简单元素,其类型为预定义类型xsd:string。定义元。定义元素的语法为:素的语法为: u 那么,定义那么,定义XML文档文档hello.xml的的XML Schema文档(文档(hello.xsd)就是:就是: 3636

37、/50含子元素的含子元素的SchemaSchema文档文档 u 假设实例文档是如下的假设实例文档是如下的customer.xml:朗沃教育朗沃教育成都市人民东路成都市人民东路88号物资大厦五楼号物资大厦五楼u 分析实例文档,我们可以发现,分析实例文档,我们可以发现,元素含有两个子元素,它是元素含有两个子元素,它是一个复杂类型的元素,所以我们在一个复杂类型的元素,所以我们在Schema文档中采用文档中采用complexType来定来定义该元素。义该元素。元素的两个子元素元素的两个子元素和和是两个是两个简单元素,二者一次出现,我们用简单元素,二者一次出现,我们用sequence表示子元素依次出现的

38、顺序。表示子元素依次出现的顺序。因此,定义该实例文档的因此,定义该实例文档的XML Schema文档文档customer.xsd为:为:3737/50含子元素和孙元素的含子元素和孙元素的SchemaSchema文档文档 u现在我们给出一个更复杂的文档(现在我们给出一个更复杂的文档(customer.xml):):朗沃教育朗沃教育四川四川成都成都人民东路人民东路88号物资大厦无路号物资大厦无路u在这个实例文档中,我们将地址分解成几个子元素。为此,我们需要一个更加复杂一点的在这个实例文档中,我们将地址分解成几个子元素。为此,我们需要一个更加复杂一点的Schema文档文档(address.xsd):

39、):3838/50含子元素和孙元素的含子元素和孙元素的SchemaSchema文档文档 u 我们还可以采用我们还可以采用ref元素来重新编写这个元素来重新编写这个Schema文档文档address2.xsd 朗沃教育朗沃教育 四川四川 成都成都 人民东路人民东路88号物资大厦无路号物资大厦无路 3939/50定义相同子元素的数量定义相同子元素的数量 u 先看这个简单的订购数据实例文档先看这个简单的订购数据实例文档order.xmlAccounting BookTaxation Booku 假设假设元素,即每次的订购书目不能超过元素,即每次的订购书目不能超过10种,那该怎么写这个种,那该怎么写这

40、个Schema文档呢?这里要用到文档呢?这里要用到的的maxOccurs属性。定义这个实例文档的属性。定义这个实例文档的XML Schema文档(文档(order.xsd)为:)为:u 第第6行中的行中的maxOccurs属性为属性为10,代表,代表orderItem元素可以最大有元素可以最大有10个。如果不设个。如果不设定元素个数,则可以用定元素个数,则可以用maxOccurs=unbounded来定义。来定义。u 类似,如果要定义最小值,可以使用类似,如果要定义最小值,可以使用minOccurs,例如:,例如:u maxOccurs和和minOccurs这两个属性的缺省值都是这两个属性的缺

41、省值都是1。4040/50定义可选项的子元素定义可选项的子元素 u假如上面的订书数据中,可以用书名或者书号任意一种订购,则实例文档可能如下(假如上面的订书数据中,可以用书名或者书号任意一种订购,则实例文档可能如下(order2.xml):):Accounting Book7-5058-3496-7u这时,用这时,用XML Schema文档描述的话,我们就需要使用文档描述的话,我们就需要使用choice元素。下面的代码(元素。下面的代码(order2.xsd)就是)就是描述该描述该XML文档的文档的XML Schema文档:文档:4141/50定义可选项的子元素定义可选项的子元素 u稍微修改一下

42、订书数据的实例文档(稍微修改一下订书数据的实例文档(order3.xml):):Accounting Book27-5058-3496-7u这里假定这里假定值为值为1时,缺省。如何修改时,缺省。如何修改Schema文档呢?文档呢?order3.xsd4242/50自定义简单类型自定义简单类型 u 如果预定义类型还不能满足要求,怎么办呢?下面学习自定义简如果预定义类型还不能满足要求,怎么办呢?下面学习自定义简单类型。单类型。XML的扩展性充分体现在这里。的扩展性充分体现在这里。u 例如有如下的实例文档例如有如下的实例文档order4.xml:7-5058-3496-75u 这里,这里,ID是一个

43、标准的是一个标准的ISBN编码,我们如何定义这个编码,我们如何定义这个ISBN编码呢?编码呢?4343/50自定义简单类型自定义简单类型u 重新写重新写Schema文档文档order4.xsd4444/50自定义简单类型自定义简单类型u假如我们事先确定好假如我们事先确定好ID只有只有3个,即只有个,即只有3个个ISBN是可选的,那怎么办?我们可以用是可选的,那怎么办?我们可以用enumeration元素来进行列举。元素来进行列举。4545/50自定义简单类型自定义简单类型u再来看订购量再来看订购量quantity的值,如果我们设定其的值,如果我们设定其值必须在值必须在110之间,该怎么办呢?可

44、以这些自之间,该怎么办呢?可以这些自定义一个简单类型。定义一个简单类型。u其中,其中,minInclusive、maxInclusive分别代表分别代表该类型的取值范围。该类型的取值范围。4646/50自定义简单类型自定义简单类型u最终修改后的最终修改后的Schema文档如下(文档如下(order4-1.xsd):):4747/50定义属性定义属性 u 上面的上面的order.xml实例文档中实例文档中id变为变为的一个属性:的一个属性: u 对此,我们在对此,我们在Schema文档中采用一个文档中采用一个attribute来定义(来定义(order.xsd):):空元素空元素u 那么,实例文

45、档中该属性值是必须的还是可有可无的呢?我们可以这样限制:那么,实例文档中该属性值是必须的还是可有可无的呢?我们可以这样限制:u u 这里我们将这里我们将id属性类型作为一种自定义数据类型属性类型作为一种自定义数据类型idType。而且,用。而且,用attribute元素的元素的use属性来定义是否是必须的属性。属性来定义是否是必须的属性。required是必须值,是必须值,optional是可选值,是可选值,prohibited是无属性值。那么对于属性的缺省值,我们怎么定义呢?例如:是无属性值。那么对于属性的缺省值,我们怎么定义呢?例如: u 我们还可以用我们还可以用attribute元素的另一个属性元素的另一个

温馨提示

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

评论

0/150

提交评论