数据的组织方式1:XML.ppt_第1页
数据的组织方式1:XML.ppt_第2页
数据的组织方式1:XML.ppt_第3页
数据的组织方式1:XML.ppt_第4页
数据的组织方式1:XML.ppt_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

第十章 数据的组织方式:XML,主要内容: 概述、语法 命名空间、XML Schema XML DOM 强大的检索工具:XPath 格式化XML工具:XSL 在客户端格式化XML 跨浏览器的XML开发框架:zXML 应用实例:Ajax文章列表程序(XML) 重点、难点: 全部,10.1 XML概述 XML是Extensible Markup Language的简称,即可扩展标记语言。 XML是从SGML和HTML发展而来的。 XML有很多的优点,由于HTML语言的标签是固定不变的,注意就限制了他的发展,同时也带来了很多不便,由此就产生了可扩展标记语言XML,它能够实现扩展,解决了HTML的不足。 XML有以下特点: XML是一种元标记语言,开发者可随意定义自己需要的标记。 XML是一种语义/结构化语言,它描述了文档的结构和语义。 XML是一种通用的数据格式,其表示的数据是独立于任何平台,任何语言的。它提供了一种规范,利用这种规范,任意平台上的任意应用程序之间都可以进行通信。 下面是xml的示例代码:,第十章 数据的组织方式:XML,10.1 XML概述 Ajax tony 2010-10-10 hello boy Ajax tony 2010-10-10 hello boy ,第十章 数据的组织方式:XML,10.2 XML语法规范 XML是一种元标记语言,它允许开发者使用自定义标签,给开发者提供了极大的自由发挥空间,但是XML本身却有着非常严格的语法规范。开发者必须熟悉这些规范,才能正确使用XML。下面我们来了解下它的语法规范: XML声明: 声明了该xml的版本,以及它的编码格式。 根节点: xml文档中有且只有一个根节点。 然后根节点下面可以有任意个子孙节点。,第十章 数据的组织方式:XML,10.2 XML语法规范 开始标签和结束标签: Ajax tony 用开始和结束来包含其下面的子节点,当该节点没有子节点的时候 我们也可以省去结束标签。 这样写也是可以的,但是该元素没有子节点了。,第十章 数据的组织方式:XML,10.2 XML语法规范 属性: 节点是可以包含它的属性的,例如上面的level就是note节点的属性。 合理的嵌套包含 不允许元素之间交叉包含,例如下面的代码是错误的: Ajaxtony 这样写才是正确的: Ajax tony ,第十章 数据的组织方式:XML,10.2 XML语法规范 大小写敏感: 上面的两个标签不等同,由于XML大小写敏感,XML将认为这些是 两个标签。 空白被保留: Xml:“Hello world” 结果: “Hello world” HTML: “Hello world” 结果: Hello world” 如果html里面写了多个空格,那么空格只会保留一个,而xml中会保 存所有的空格。,第十章 数据的组织方式:XML,10.2 XML语法规范 XML的注释: Xml的注释语言使用两个标记来扩住。 元素的命名: Xml元素的命名也是要遵循一定的规范的,就象变量的命名一样,都有一个命名规范: 元素名称可以包含字母,数字和其他字符,但是不能以数字或者标点符号开头。 不能以xml(包括大小和大小写组合都不行)开头 元素的名称不能包含空格,第十章 数据的组织方式:XML,10.2 XML语法规范 元素的命名: 下面的命名是错误的: 下面的命名是正确的: ,第十章 数据的组织方式:XML,10.2 XML语法规范 转移字符: 在xml中 “” 两个字符 ,解析是无法识别的,所以如果在字符窜中出现这两个字符,我们就需要使用转移字符来代替。 下面是转移字符对应表: 一般情况下, “” 的转移字符最为常用。,第十章 数据的组织方式:XML,10.2 XML语法规范 CDATA部件: 当某个节点内包含大量的需要转义的字符时,我们可以使用CDATA部件来包含这些需要转义的字符。 例如: b) alert(b); else alert(a); ,第十章 数据的组织方式:XML,10.3 XML命名空间 在XML中有可能出现同样的标签,来代表不同的意义。例如: 上面的两段xml代码,第一个用来表示包里面放的有什么东西; 第二个用来表示包的相关属性。有时候我们确实需要这样去定义。 但是在xml中这样处理是错误的,为了解决这样的问题,我们就需要用到命名空间。,第十章 数据的组织方式:XML,10.3 XML命名空间 定义如下: 示例代码: C和p表示的就是命名空间,xmlns就是用来定义这个命名空间的。,第十章 数据的组织方式:XML,10.3 XML命名空间 当然,你在定义这些命名空间的时候,不要起同样的名字。 c和p不一样,而且命名空间指向的url地址也不能一样: /something /attribute 两个地址显然不同。 注意,有人会问,这个地址是不是必须是百度呢? 不是这样的,地址你可以随意的起,即使该地址不存在,只要两个 地址不一样即可。,第十章 数据的组织方式:XML,10.3 XML命名空间 我们也可以为一个标签起两个命名空间: 这样做也是可以的,但是不常用,作为了解。 还有一种是默认的命名空间。 我们留意下新建的一个html页面的代码,你就明白了。,第十章 数据的组织方式:XML,10.4 XML Schema XML Schema到底是什么? 假设我们现在正在做一个网页,页面上要求用户输入产品的编号和价格。 试想下,如果用户输入价格时,输入的是汉字,那么我们怎么能把一个汉字转化成数字呢? 所以,我们就需要用验证的方式,去提示用户,不能输入数字以外的字符。 同样的道理,如果我们用xml保存一个产品的价格,例如: 80.88 那么,如果这里存放的80.88被写成一串汉字,就非常危险了,在我们处理xml 数据的时候,会给我们带来很多麻烦。 所以,在xml中我们也需要一种约束来规范数据的格式,那么这种约束就是: XML Schema。,第十章 数据的组织方式:XML,10.4 XML Schema 基本示例: (注意,Schema本身也是一个xml文档),第十章 数据的组织方式:XML,10.4 XML Schema 系统需要对输出的XML文档进行以下约束: 根元素Notes 下包含0个或者多个 note子元素 Note元素有一个可选熟悉 postDate ,其为日期类型,如果没有提供,则默认日期为:2007-11-17 Note元素的第一个子元素必须为title,title元素不包含任何属性和子元素,其值必须是字符串类型(表示标题) Note元素的第二个子元素必须为summary元素, summary元素不包含任何属性和子元素,其值必须是字符串类型(表示简介) Note元素的第二个子元素必须为comment元素, comment元素不包含任何属性和子元素,其值必须是字符串类型(xx) Note元素的下一个元素为comment元素,为可选项,但是出现次数不能超过一次。 comment元素不包含任何属性和子元素,其值必须是字符串类型(表示评论) 在comment元素后,必须有一个或多个author元素(表示作者),第十章 数据的组织方式:XML,10.4 XML Schema 系统需要对输出的XML文档进行以下约束: Author元素必须有一个表示作者姓名的name子元素,其值为字符串。另外还可以有两个可选的子元素:表示作者性别sex和年龄age。如果出现sex元素,则只能从male和female中选择一个取值。如果出现age元素,取值范围:20-80(包含两边),name,sex,age三个元素顺序不限。注意,作者可以有多个,也就是author元素可以写无数个。 可以有一个tags属性,表示标签名称。 Author之后(如果有tags元素,就是tags元素之后),有一个表示文章点击量的hit元素,该元素为可选,最多出现一次。取值范围=0,默认为0。 hit元素之后,必须有一个表示文章地址的url元素,其值为字符串,但必须以/news/开头,而且最后的文件后缀必须是html或者htm,第十章 数据的组织方式:XML,10.4 XML Schema 我们就需要建立一个Schema,以下为示例:,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 下面,我们来尝试着去完成上面题目的要求: 1.根元素Notes 下包含0个或者多个 note子元素 要想完成这个要求,我们必须得先了解,在Schema中,定义元素是如定义的,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 定义元素: xs:命名空间 element定义标签为元素 name元素名称 type元素类型,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 定义元素: 我们必须要给元素名称,这个没问题: 我们需要的元素名称是:nodes 我们必须要给元素类型,现在又遇到了难题,怎么定义元素的类型呢? 思考下,我们曾经所学过的一些数据类型: Int,string,date等等。 那么,在Schema中是否也存在这些类型呢? 下面,我们来了解下Schema中的元素类型如何定义:,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 内置类型: 和我们想象的一样,Schema为我们提供了丰富的数据类型,由于这些类型 比较多,这里我们就不一一列举出来了。 常用的内容类型,如课本276页: String:字符串,int:数字 这里就不一一列出,详见课本。,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 好了,既然知道了内置数据类型,那我们现在可以定义了notes元素了吧? 现在问一个问题? Notes元素是什么类型的? 我们查看xml代码发现,notes不是某一个我们已知的类型,它下面有子元素, 子元素下面可能还有子元素,并不是一个单一的节点,里面包含字符或者是数 字。那么,notes元素到底应该是什么类型呢? Schema为我们提供了符合数据类型,来定义这些有子元素的节点的复杂元素 下面,我们来了解下什么是复合类型:,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 复合类型: 使用以上代码,我们可以定义一个符合类型,类型名称是notes。 好了,既然复合类型已经定义完成,下面我们就来试试代码吧: ,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 写好了代码,我们需要测试下是否书写规范,那么怎么测试呢? 下面,我们要了解下,如何让xml和Schema一一对应: 例如,我们建立了一个Schema: ,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 上面的代码,就是我们已经建立好的Schema,注意xs:schema元素里面有很 多属性,我们只需要注意一个属性:targetNamespace,它的值是: /XMLSchema_Artical.xsd,把这段代码复制下,然后在xml 文档中的note添加如下属性: 最重要的是xsi:schemaLocation属性,要和targetNamespace属性保持一致, 注意xsi:schemaLocation属性的后半部分是一个文件名XMLSchema_Artical.xsd,而该文件就是我们创建的Schema文件的文件名, 特别注意,在这个文件名的前面一定要有空格和前面的代码分隔开。,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 好了,现在我们已经把xml和Schema关联起来,可以开始测试了。 当我们打开xml文件的时候,我们留意到这里,如下图: 出现一个波浪的情况,原因是我们的xml并不符合规范,鼠标移动到波浪 显示字样:,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 现在出现的问题是:我们的notes元素中必须有内容,或者是子元素,下面 我们要完成的任务是,给notes元素下,添加几个子元素,而我们题目上也要求 根元素Notes 下包含0个或者多个 note子元素 下面我们来了解下,如何实现在复合类型中要求该类型的子元素的实现: ,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 我们已经发现,使用,可以定义在复合类型中,可以有子元素 Sequence从该单词的中文解释,我们可以猜测到,该标签是可以限制我们子 元素出现的顺序的,例如: 这段代码,就要求,我们的xml文档中note和note1两个元素的顺序不能颠倒。 当然,我们也可以不要求顺序: All标签表示,包含制定的元素,但是不要求顺序。,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 好了,现在再去看看xml文档会不会提示错误了:错误已经消失。 但是我们也留意到在Schema中却出现了错误: 前面我们已经学习了如何定义元素,但是我们并不知道如何限制元素的数量 这里,我们看到minOccurs和maxOccurs两个属性,一个用来限制最小值,一 个用来限制最大值,0表示最小可以没有,unbounded表示最大没有边界。 这两个并没有错误,出错的是note元素的类型,我们仔细看下xml文档,发现 Note元素也是一个符合类型的数据,所以,下面我们需要定义note这个复合类 型。,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 根据题目要求,我们知道,note元素中要有制定的一些元素,而且元素顺序最 好按照样本xml来定义,所以我们这样定义note元素的类型: ,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 好,剩下的继续: 有问题, AuthorType是一个新的类型,为什么需要这个新的类型呢? 再来看看题目: Author元素必须有一个表示作者姓名的name子元素,其值为字符串。另外还可以有两个可选的子元素:表示作者性别sex和年龄age。如果出现sex元素,则只能从male和female中选择一个取值。如果出现age元素,取值范围:20-80(包含两边),name,sex,age三个元素顺序不限。注意,作者可以有多个,也就是author元素可以写无数个。 可见,作者这个元素的要求还是蛮高的,下面,我们就来看看AuthorType,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 从题目上我们得知,Author元素也必须有一个或多个子元素,可见它也是一个复合类型的元素,所以我们用复合来定义AuthorType,而这里面的元素并不要求顺序,所以我们用all标签。 这里面的元素,sex和age都是有问题的,应该他们都是使用了新的类型: SexType和AgeType。 看来我们需要再来了解下这两个新类型:,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 先来分析下题目要求: 如果出现sex元素,则只能从male和female中选择一个取值。 要求上并没有提出sex元素必须有子元素,那么我们这个时候就不能再使用 复合类型来定义sex元素的类型了,我们需要用简单类型来定义sex元素了: 使用 xs:simpleType 标签来定义一个简单类型,该类型可以用来定义某一个元素内容的类型,已经其他约束,例如: 上面的代码,使用xs:restriction标签,定义SexType类型的基类型是字符串, 而且取值范围只能是male或者female。 xs:enumeration标签标示枚举。,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 先来分析下题目要求: 如果出现age元素,取值范围:20-80(包含两边)。 其他的代码都和上面的一样,只有xs:maxInclusive 和xs:minInclusive 不一样 他们分别表示:最大取值和最小取值,当然,AgeType的基类是integer数字 我们才能这样定义。,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 到此,作者元素已经分析完毕,下面是tags元素了 Tags元素可以看出,是表示文章搜索标签的含义,当然这些标签是一组字符 它们用空格隔开,表示不同的搜索关键字。 那么,这个元素的类型又是一个新的类型:TagsType,该类型定义如下: 其他不难理解, xs:list 表示一个列表标签,制定该类型中有多个内容,就好似一个列表。Token也是一个内置的类型,在课本上有解释,它的数据格式如下 Ajax xml JavaScript,简单的说就是用空格隔开的字符串。正好和我们要求的符合。,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 写完了需要的代码后,我们再来测试下,我们发现程序提示tags元素的类型不对,其实我们上面定义的类型是TagType,而不是tags要求的类型TagsType 为什么我们要这样做呢?因为,tags元素的要求不只如此,我们把代码写完整 上面的代码很像程序中的方法重载, TagType被重载为TagsType类型,并且 要求了该类型的列表元素的个数最小0,最大10.,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 为了测试tags元素类型的功能,我们修改最大长度为1,如何修改xml文档中的 Tags元素的内容元素个数为两个,出现如下错误: 可见,我们对tags元素的限制起到了效果。 Tags元素的设定到此结束。 接着下面的元素: ,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: Hit元素,用来表示文章的点击率,题目要求: 267 可以看出,hit要有一个date属性,而且其值应是一个非负数的整数。 所以,我们为该元素定义了一个新的类型HitType: 这里可能不是很容易理解,首先我们认为hit是一个复合类型,它要求有自己的 属性和内容,前面我们只是认为有子元素的就是复合类型,这里我们了解到有 属性的也应该是复合类型。,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: 那么怎么定义属性: 在HitType这个复合类型中,定义一个子元素xs:attribute ,表示该类型下包含 属性的要求,属性名称为date,类型是date内置类型,use表示什么意思呢? Required,optional,prohibited三个值是它的取值范围 分别表示,必须出现,可以出现,不能出现。 这里,我们设置的是必须出现。 xs:simpleContent标签又是什么意思呢? 有些元素既像复合类型,又像简单类型,例如hit元素,既有属性,又有内容。 所以我们就需要一个基于简单类型的复合类型,使用xs:complexType 的子元素xs:simpleContent,就可以实现上面的要求: ,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: xs:simpleContent有一个子元素:extension,通过设置该元素的base属性,就可以设置xs:simpleContent元素的值类型。例如上面,我们设置为xs:nonNegativeInteger类型,该类型为内置类型,表示非负数的整数。 到此,我们hit元素的约束就完成了,还剩下最后一个元素:url 要求是: hit元素之后,必须有一个表示文章地址的url元素,其值为字符串,但必须以/news/开头,而且最后的文件后缀必须是html或者htm url元素是一个简单类型,我们可以看这样定义: ,第十章 数据的组织方式:XML,10.4 XML Schema Schema语法分析: xs:restriction的子元素xs:restriction 的子元素xs:pattern,可以来设定某一个字符串的格式,我们使用了正则表达式。 /news/.*.(ht

温馨提示

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

评论

0/150

提交评论