(系统工程专业论文)XML数据管理技术的研究.pdf_第1页
(系统工程专业论文)XML数据管理技术的研究.pdf_第2页
(系统工程专业论文)XML数据管理技术的研究.pdf_第3页
(系统工程专业论文)XML数据管理技术的研究.pdf_第4页
(系统工程专业论文)XML数据管理技术的研究.pdf_第5页
已阅读5页,还剩57页未读 继续免费阅读

(系统工程专业论文)XML数据管理技术的研究.pdf.pdf 免费下载

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

文档简介

南京硭工。、学颀士学位论文聃l 数据管理挫术韵韧究 摘要 随着i n t e r n e t 的迅速发展和x m l 技术的不断成熟,x m l 逐渐成为互联网上数 据表示和交换的统一标准,共将成为数量庞大的数据来源。因此,女n i o j 有效地管理 x m l 数据信息是一个很有研究价值的课题,而且对基于w e b 的应用领域来说,尤其 具有广阔的应用前景。 本文通过分析x m l 数据的特点,在现有的x m l 数据管理技术的基础上,从应 用的角度出发,探讨了x m l 文档在关系型数据库中的两种存储方式( 原生存储和关 系存储) 。原生存储方式下,根据x m l 文档的特点构造一个内部模型并存储这个模 型,这是本文的重点,因为其内部模型是基于x m l 的,而非关系模型,不能像关系 存储那样借用传统的面向关系数据的管理力法,很多功能( 如更新和查询等) 都要重 新实现;而关系存储方式下,将x m l 文档根据一定的映射规则转换为关系数据,然 后再进行存储和管理,最后咀r e m l 的形式返回工作重点将放在x m l 文档存芡系 数据库中的进出和在文档级别的管理上。最终,本文实现了一个具备存储、驯曼盆、更 新和查词等基本功能的x m l 数据管理系统。 关键词:x m l 数据管理原生x m l 数据库支持x m l 的数据库 蓖i 负 南衷避2 1 - 丈学硬t - 学位论文x ) , t l 数掘管理接术的研究 a b s t r a c t a st h ed e v e l o p m e n to fi n t e r n e ta n dx m l 、x m li sr a p i d l ye m e r g i n ga sas t a n d a r df o r r e p r e s e n t i n ga n de x c h a n g i n gd a t ao i lt h ew o r l dw i d ew e b ,s oh o wt oe m c i e m l ym e m a g e x m ld a t ai s b e c o m i n gav a l u a b l et o p i c ,a n dw i l lp l a ya ni m p o r t a n tm l ee s p e c i a l l yi n a p p l i c a t i o n sb a s e do nt h ew e b t h ep a p e rf i r s ta n a l y s i s e st h ec h a r a c t e r i s t i co fx m l t h e nf r o mt h ep o i n to f a p p l i c a t i o n ,i td i s c u s s e st w oa p p r o a c h e so fs t o r i n gx m l d a t ai nt h er e l a t i o n a ld a t a b a s e m a n a g e m e n ts y s t e r r k s :s t o r i n gx m l d o c u m e n t sa sn a t i v ef o r m a to ra sr e l a t i o n a lf o r m a t , b a s e do nt h ec u l t e r l ta p p r o a c h e so fx m lm a n a g e m e n t t h em a i np a r to fo u rw o r ki st o s t o r ex m ld o c u m e n t sa sn a t i v ef o r m a t b e c a u s ei t sd a t am o d e li sb a s e do nx m l n o tt h e r e l a t i o n a lm o d e l s o 、v v ec a n td i r e c t l ya p p l yt h et r a d i t i o n a lt e c h n o l o g yd e s i g n e df o r r e l a t i o n a ld a t ai na l er d b m s f o rs t o r i n gx m ld o c u m e n t sa sr e l a t i o n a lf o r m a t ,t h ex m l d o c u m e n t sa r ef i r s tm a p p e dt or e l a t i o n a ld a t ac o n f o r m i n gs o m er u l e ,a n dt h e nr d b m si s u s e dt os t o r ea n dm a n a g et h et r a n s f o r m e dd a t a ,a n du s e r sr e c e i v ed a t aw i t hx m i 。f o r m a t w ep u te m p h a s i so nx m ld o c u m e n t sl na n do u to ft h er d b m sa n dh o wt om a n a g em e m o nt h ed o c u m e n tl e v e lf i n a l l y as i m p l ex m lm a n a g e m e n ts y s t e mi sr e a l i z e dw h i c hc a n s t o r e ,d e l e t e ,u p d a t e ,a n dq u e r yx m l d o c u m e n t s k e yw o r d s :x m l ,d a t am a n a g e m e n t ,n a t i v ex m l d a t a b a s e ,x m l e n a b l e dd a t a b a s e 第f i 页 声明 本学位论文是我在导师的指导下取得的研究成果,尽我所知,在 本学位论文中,除了加以标注和致谢的部分外,不包含其他人已经发 表或公布过的研究成果,也不包含我为获得任何教育机构的学位或学 历而使用过的材料。与我一同工作的同事对本学位论文做出的贡献均 已在论文中作了明确的说明。 研究生签名:鱼盔 j 啊年5 月l g 日 学位论文使用授权声明 南京理工大学有权保存本学位论文的电子和纸质文档,可以借阅 或上网公布本学位论文的全部或部分内容,可以向有关部门或机构送 交并授权其保存、借阅或上网公布本学位论文的全部或部分内容。对 于保密论文,按保密的有关规定和程序处理。 研究生签名:鱼鳌 硼绰月站目 南京理工大学硕士学位论文x 札数据管理技术的研究 1 绪论 i i 论文研究的背景和意义8 1 1 1 0 1 1 1 1 l 近年来,互联网得到了迅猛发展,它提供了全球范围的网络互联与通信功能,其 丰富的信息资源给人们的学习和生活带来了极大的便利。作为互联网最主要应用的 w e b 实际上已成为最大的信息资源库。电子商务、电子出版、远程教育等基于w e b 的新兴领域的全面兴起使得传统的w e b 资源更加复杂化和多样化。人们对w e b 服务 功能的需求也达到更高的标准,如用户需要对w e b 进行智能化的语义搜索和对数据 按照不同的需求进行多样化显示等个性化服务;公司和企业要为客户创建和分发大量 有价值的文档信息,以及对不同平台、不同格式的数据源进行有效的数据交换和集成 等等。在这种大环境下,以简单易学、灵活通用著称的h t m l ,随着网络应用的日益 广泛,局限性逐渐明显,越来越不能适应作为i n t e m e t 上信息交换和表示的工具了。 h t m l 作为一种简单的表示性语言,仅注重信息的表现形式,无法表达数据内容, 缺乏对数据结构的描述,数据本身和格式描述是混在一起的,如果要对h t m l 做排 版和显示之外的处理( 如理解文档内容、抽取语义等) 就会由于没有统一的标准无法 实现。为了解决这一问题,i b m 公司的研究人员总结出三条规则:第一,文档处理 程序必须支持同一种公共文档表现形式:第二,对于不同的应用,这些公共格式必须 能提供不同的标记以方便处理;第三,对文档进行一定的合法性检查。于是,可扩 展标记语言x m l ( e x t e n s i b l em a r k u pl a n g u a g e ) 应运而生。1 9 9 8 年2 月,全球互联 网联盟w 3 c ( w b r l dw i d ew e b ) 推出了x m l l 0 的正式版本,并正式推荐x m l 作为 下一代互联网数据的表示规范。 x m l 是s g m l 的一个简化子集,它将s g m l 的丰富功能与h t m l 的易用性结 合到w e b 应用中,以一种开放的自我描述方式定义了数据结构,在描述数据内容的 同时能突出对结构的描述,从而体现出数据之间的关系。它使用了一个简单而灵活的 标准格式,为w e b 的应用提供了个描述数据和交换数据的有效手段,弥补了h t m l 的不足。其显著特性有:可自定标准、偏重数据显示、具自我描述能力、支持u n i c o d e 、 结构化信息以及语法严谨等】。x m l 不仅是一个特定标准的名称,它同时也代表着 “x m l 家族( x m lf a m i l y ) ”:x m l 、x l i n k 、x s l 等。具体地说,x m l 具有如下优 点【1 0 】: 方便强大的可扩展性。h t m l 是符合s g m l 语法的一种固定格式的超文本标记 语言,因其格式固定,标记有限,故难以扩展。x m l 的标记不是固定的,允许定义 数量不限的标记来描述文档中的内容。同时x m l 的标记是用户遵守标记命名规则自 由定义的,它可以定义数量无限的文档类型。 第1 页 绪论 硕士论文 通用无限的结构性。h r m l 不支持深层的结构描述,而x m l 技术真正实现了数 据和使用的分离,允许嵌套的信息结构存在,擅长描述任意层次结构的数据,或赋予 原本杂乱的信息一种清晰而通用的结构。 快速准确的查询功能。h t m l 搜索时间长,而且检索到的内容针对性较差。而 x m l 有利于信息的表达和结构化组织,而且其文件具有专用的与用户关注的信息相 配的一些标记,可更快导向用户所需要的信息数据。当所有用户都一致同意有关标记 集时,搜索时间大大缩短,检索到的内容针对性更强。 丰富完善的显示执行。h t m l 链路易断,且丢失后不能自动纠正。若u r l 发生 变动,与之链接的每一页面都需手工改变其名字。而x m l 强大的超文本链接功能使 信息量更大,并且在样式表的帮助下,允许人们按照自己的意愿选择浏览模式,非常 方便地在本地排序、过滤和进行其它的数据操作,不需要与服务器进行交互。 精练简洁的语言格式。x m l 是一种元语言( m e t a - l a n g u a g e ) ,是s g m l 的一个简 化的子集( 其规则的容量不到s g m l 的1 1 0 ) ,保留了s g m l 的可扩展性和适用性。 x m l 可以定义其他语言,支持国际化,极大方便了x m l 的推广和使用。而h t m i , 缺乏对双字节或多国文字的支持,或者说支持不够。 目前,以x m l 为主导的一系列规范己成为新一代的w e b 标准。世界各大厂商也 纷纷推出围绕x m l 发展的产品和解决方案。总之,对x m l 的深入研究将有力促进 企业的信息化和电子商务,具有巨大应用前景和经济效益。 另一方面,数据库系统的研究与开发在过去三十年中取得了巨大的成功,到目前 为止,数据库技术的应用已遍布各个领域。数据库技术自6 0 年代诞生以来经历了层 次型、网状型、关系型、面向对象型以及对象一关系型的发展过程。而随着互联网的 发展和x m l 的出现,传统的关系数据库和数据库管理技术的研究也在w e b 上找到了 新的支点一w 曲数据库研究。i n t e m e t 上信息的数量级从9 0 年代初的m b 过渡到g b , 甚至更多,如何有效组织、管理和利用这庞大的数据开始成为人们关注的问题。 但是,对x m l 数据的管理与传统的数据库管理有着根本的差别。这是因为:首 先,x m l 数据和数据库数据本质不同,x m l 数据是一种半结构化数据,是自描述、 无模式( 或者说是弱模式) 的,x m l 数据的结构随时都可以发生变化,且是异构的、 深层嵌套和不规则的,x m l 数据模型的表达能力要比传统的关系模型和对象模型更 强;其次,x m l 数据和数据库数据来源不同,x m l 数据往往是由文档的设计者提供 的,而数据库数据一般由领域专家设计;x m l 主要应用于i n t e m e t 上的信息表示和信 息交换,而传统的数据库技术并不擅长于这些应用【16 j 。因此,x m l 数据管理技术是 对传统数据管理技术的一个新的挑战。 早在上世纪9 0 年代就有组织和研究机构开始致力于半结构化数据管理和x m l 数据管理等相关问题的研究了,影响较大的有s t a n f o r d 大学的l o r e 项目等。每年召 第2 页 南京理工丈学颈士学位论文秘) ,数据管理技术的研究 开的国际顶级的数据库界会议都把半结构化数据和x m l 的相关研究方向作为热点来 讨论。x m l 是一种半结构化数据,所以半结构化数据已有的理论和原型系统可以作 为研究x m l 相关问题的基础。同时,x m l 所具有的独特性质又为我们带来了新的 研究课题。目前,对x m l 数据管理技术的研究包括x m l 数据的存储、索引、恢复、 查询优化等。x m l 数据管理系统大致分为三类:n a t i v e ( 原生) 方式、e n a b l e d ( 支 持) 方式和m i x e d ( 混合) 方式。原生方式下,x m l 文档作为数据库的存储单元进 行操作和管理,已经有一些研究机构开发出此类的原生x m l 数据管理系统,如 d b x m l 、t a m i n o 和t i m b e r 等。但是,原生x m l 数据管理系统至今还没有形成一个 固定的模式规范,所以,对原生x m l 数据管理系统而言,当务之急是建立统一的标 准,以便于未来发展的需要。支持x m l 的数据管理系统凭借传统数据库系统的成熟 技术,提供完善的功能,结合x m l 数据的特点设计x m l 存储、查询功能。混合方 式是以上两种方法的结合,有利于操作的灵活性,但是增加了保持一致性的难度。 1 2 论文的主要内容 本文在深入了解x m l 数据管理技术研究现状的基础上,从应用的角度出发,实 现了一个简单的x m l 数据管理系统。该系统建立在关系型数据库之上,实现了原生 和关系两种存储方式,并提供了删除、恢复、更新和查询等功能。 本文的内容组织如下: 第一章是绪论,主要介绍了x m l 和数据库技术的发展和特点,以及x m l 数据 管理技术的研究意义。 第二章简单介绍了x m l 的基本概念及其相关标准,这是实现x m l 数据管理的 基础。 第三章详细论述了数据库管理系统的发展历史和目前x m l 数据管理技术的研究 现状。 第四章是本入的主要工作成果。在这一章中。将详细描述一个简单x m l 数据管 理系统的实现过程。 最后一章是对本文工作的总结和展望。 第3 其 南京理工大学硕士学位论文x m l 数据管理技术的研究 2 0 1 l 及相关标准 2 1 ) 眦概述1 7 1 x m l 是结构化标记语言,即实现“文档结构化”的语言规范。一个x m l 文档 包括了数据和标记,标记的语法在很大程度上与h t m l 类似,但标记是可以扩充的, 可以根据数据的含义自行创建。 创建x m l 文档必须满足一定的规范。x m l 的语法规范,依据x m l l 0 规格, 大致可以归纳如下:x m l 声明必须以小写“x m l ”声明,并设置v e r s i o n 属性,还可以 指定文中使用的字符编码方案,x m l 声明是可选的,但如果有,必须出现在第一行; 每个x m l 文档必须有唯一的根元素;所有标记必须以嵌套式( 树状1 排列;除了内容 为空的标记之外,所有的标记都必须以开始标记、结束标记成对出现;内容为空的标 记结尾必须加上“”;标记名称与属性名称必须合法,且大小写被视为不同;属性值 必须加引号,特殊字符必须依照规定编写。所有符合这个规范的x m l 文档被称为是 格式良好的( w e l l f o r m e d ) 。所有的x m l 文档都必须是格式良好的。 如图2 1 1 所示,一个格式良好的x m l 文档由三个部分组成:可选读的序言 ( p r o l o g ) ,包括注释、处理指令和文档类型定义等:文档的主体( b o d y ) ,由一个或 多个元素组成,其形式为一个可能也包含字符数据的层次;可选的尾声( e p i l o g ) ,其 中内容包括注释、处理指令和或紧跟元素后面的空白。 元素是x m l 标记的基本组成部分。它们可以包含其它的元素、字符数据、字符 引用、实体引用、处理指令、注释和c d a t a 段,这些合在一起被称为元素内容。所 有的x m l 数据( 除注释、处理指令和空白之外) 都必须包含在其它元素中。 字符数据就是任何不是标记的文本,它是元素或属性值的文本内容。小于符号和 & 符号是标记分隔符,因此它们绝不能以字符串的形式出现在字符数据中( c d a t a 段除外) 。如果这些字符串是字符数据所必需的,它们必须使用实体引用1 t ;或& a m p ; 来代替。 属性是将特性或特征系于元素的一种方式。属性包含名称和值。属性值必须是分 隔开的字符串,其中可能包含实体引用、字符引用以及或文本字符。但是,任何一 个受保护的标记字符( 和& ) 都不能单独在属性值中当作字符使用,必须用& 1 t ;或 & a m p ;来代替。 x m l 为非a s c l l 码字符集中的字符提供了诱种方法:字符引用和实体引用。字 符引用是一个字符文字形式的替代,当对该字符的文字形式直接处理会导致违反 x m l 对格式良好的要求时,会起到重要作用。字符引用由十进制或十六进制的数字 前面加上“& # ”或“& # x ”,后面紧跟分号组成。实体引用允许在元素内容或属性值 第5 页 兰坠兰堕里壁型墨一 堡主堡苎 中插入任何字符串,为字符引用提供了一种助记的替代方式。实体引用由个合法的 x m l 名字、前面带有符号“& ”、后面紧跟分号组成。 图2 1 1x m l 文档的组成 x m l 是一种描述性的标记语言,它并不预先假设元素或者其内容的处理方法。 这是一种强大的优势,因为它提供了显示的灵活性,以及针对应用程序和操作系统的 独立性。但是,我们会发现经常需要把某些线索通过文档传递给应用程序。处理指令 正是x m l 为此目的提供的一种机制。处理指令包含目标和值两部分。目标是必需的 部分,而且必须是有效的x m l 名称,它用来指明哪个应用程序( 或其它对象) 需要 处理指令的帮助。 注释是一种在x m l 文档中插入提示的机制。注释可能提供修订记录、历史信息 或者其他类型的可能对创建者或文档编辑者来说有着特殊意义但又不是真正的文档 内容的特殊数据。注释可能出现在文档中除标记以外的任何地方。注释并不是文档的 字符数据的组成部分。在注释中,实体不能展开,任何标记也不会被解析。 c d a t a 段是一种用来包含文本的方法,其对象是那些其中的字符如果不这样处 第6 页 南京理工大学硕士学位论文瑚l 数据管理技术的研究 理就会被标示为标记的文本。这项特性对于希望在自己的文档中包含x m l 标记的使 用范例的作者来说是最有用的。c d a t a 段并不是在x m l 文档中包含二进制数据的 好办法。二进制数据可以用b a s e 6 4 或其他编码技术,只要保证被编码的数据没有包 含大于符号。只要有字符数据出现的地方就可能出现c d a t a 段,但不能够嵌套。 2 2d t i ) 和) 眦s c h e m a 2 d t d ( 文档类型定义) 用不同于x m l 的独立语法来规定x m l 文档中各种元素 集合的内容模式,它主要采用元素类型声明和属性表声明限制x m l 文档中元素的结 构。元素类型声明限制了元素的内容,通常也限定了子元素的类型。属性表声明用于 定义与给定元素类型有关的属性集,它还可以指定这些属性的类型限制并能提供缺省 值。通常属性表声明紧跟在元素类型声明之后,其定义由属性名称、属性类型和缺省 值声明组成。如果一个格式良好的x m l 文档,包含了d t d 说明,那么这个文档就 被称为是一个有效的( v a l i d ) x m l 文档。该d t d 声明可以在文档中,也可以在文档 外( 称为外部d t d ) 。有效的x m l 文档中的元素必须符合d7 i d 中的定义。 d t d 是x m l 由s g m l 处继承而来并加以发展的文档类型定义方法,有着天生 的缺陷:它本身不是用x m l 书写的;不支持名字空间( n a m e s p a c e ) ;提供了非常有 限的数据类型;不能表达元素中字符数据的数据类型;虽然有扩展的机制,但这个机 制太复杂而且很脆弱,一组被定义为参数体的属性之间不能建立任何联系。 相比之下,x m ls c h e m a 更适合于表达x m l 的内容和结构。x m ls c h e m a 是一 种描述信息结构的模型。它用来定义x m l 文档的文本结构、数据类型等x m l 文档 描述规则。它为一类文档建立一个模式,规范了文档中的标记和文本的可能组合形式。 它不仅包括了d t d 所能实现的所有功能,而且它还提供了一系列的新特色,大大弥 补了d t d 的不足: x m l s c h e m a 本身就是x m l 文档,使用标准x m l 语法,因此可直接用一般x m l 解析器对其进行语法分析,并且有强大、易用的扩展功能。 x m ls c h e m a 支持丰富的数据类型包括数字型、布尔型、整型、日期时间、u r i ( 统一资源标识符) 、十进制数等等。它允许对数据进行更严格的合法性检查,而且 还支持由这些简单的类型生成更复杂的类型。 x m ls c h e m a 内容模型是开放的,可以随意扩充、更新。 x m l s c h e m a 支持名字空间,保证了标记的唯一性,利用名字空间将文档中特殊 的结点与s c h e m a 说明相联系,一个x m l 文档可以有多个对应的s c h e m a 。 第7 页 x m l 及相关标准 硕士论文 一_ _ _ _ h 一 2 3x p a t h 和x s l t 2 3 1x p a t h l 3 i i i x p a t h 是第四代声明式语言,用于定位x m l 文档中的结点。x p a t h 指定需要文 档中的哪些结点,而不指定寻找这些结点的算法。x p a t h 把整个x m l 文档看成一棵 结点树,使用的数据模型将每个x m l 文档分成7 种不同的结点:根结点( r o o t n o d e ) 、 元素结点( e l e m e n tn o d e ) 、属性结点( a t t r i b u t en o d e ) 、文本结点( t e x tn o d e ) 、处 理指令结点( p r o c e s s i n gi n s t r u c t i o nn o d e ) 、注释结点( c o m m e n tn o d e ) 和名字空间 结点( n a m e s p a c e n o d e ) 。但不包括实体引用、c d a t a 段和文档类型声明。实体引用 解析为组件文本与元素,c d a t a 段与其他任何文本一样处理,先和相邻文本合并之 后再建立文本结点。除了采用默认属性外,不考虑文档类型声明。 x p a t h 最核心的部分就是如何表示某一资源的位置,这就用到表达式( e x p r e s s i o n ) 的概念。x p a t h 中的表达式可以返回结点集( n o d e s e t ) 、布尔值( b o o l e a n ) 、数字值 ( n u m b e r ) 、字符串( s t r i n g ) 等四种基本类型之一。x p a t h 中最重要的表达式是定位 路径( 1 0 c a t i o n p a t h ) 。定位路径依次由三部分组成:轴( a x i s ) ,用来确定与当前结点 的相对位置而得到一个结点集;结点测试( n o d e t e s t ) ,在从“轴”确定的结点集中按 照结点名称或是结点类型选择对应的结点,从而得到一个子集;谓词( p r e d i c a t e ) , 在结点测试选出的结点集中根据定义的谓词再进一步筛选得到最后的结果。定位路径 的基本规则是:轴和结点测试是必需的,谓词是可选的;轴和结点测试之间用双冒号 分开,而谓词要用中括号括起来;定位路径选择结点集的顺序是从左到右。下面是几 个具体的例子: c h i l d :* 一选出的是当前结点下的所有子结点。c h i l d 是轴;+ 是结点测试,表示所 有的结点都符合要求;谓词为空。 a t t r i b u t e :a t t rn a m e 一选出的是当前结点中属性名称为a t t rn a m e 的属性结点。 a t t r i b u t e 是轴;a t t rn a m e 是结点测试,名字和它相同的通过;谓词为空。 c h i l d :n o d en a m e p o s i t i o n o 3 - - 选出的是当前结点的前三个名称为n o d e n a m e 的子结点。c h i l d 是轴;n o d en a m e 是结点测试; p o s i t i o n 0 3 是谓词,表示在结点测 试结果中选择位置在前三位的结点( 这里的下标从0 开始) 。p o s i t i o n ( ) 是一个x p a t h 提供的函数。 c h i l d :nn a m e p o s i t i o n ( ) = 3 a t t r i b u t e :a t t r 四个名称为1 3 n a m e 并且有一个值为v a l u e 的属性a t t rn a m e 的子结点,如果这两个条 件不能同时满足,则选出来的是空结点集。同样,c h i l d 是轴;n n a m e 是结点测试; 剩余部分是谓词。 第8 页 南京理工丈学顾士学位论文黼l 数据管理技术鲍研究 2 3 2x s l t l 5 1 1 6 x s l t ( e x t e n s i b l es t y l e s h e e tl a l l g u a g et r a n s f o r m a t i o n ) 是一种转换语言。x s l t 样式表描述- t o e 样式的文档如何转换成另一种样式的文档。x s l t 与传统编程语言最 大的差别是输入文档驱动程序流程,而不是由样式表显式控制程序流程。设计x s l t 样式表时,主要考虑什么样的输入结构映射什么样的输出结构,而不是处理器何时以 及如何读取输入和产生输出。 输入与输出文档使用x p a t h 数据模型表示,分别称为源树和结果树。x s l t 样式 表表示源树到结果树的变换。该变换通过建立模式和模板之间的联系来实现。x s l t 样式表包含一个模板规则集合。模板规则由两部构成:一部分是与源树结点匹配的模 式,另一部分是可以初始化以形成结果树组成部分的模板。这使得样式表可用于具有 相似源树结构的广泛类型的文档。结果树通过为树结点查找模板规则并初始化模板来 构造。应用于结点的模板可能不止一个,这时,采用优先规则确定应用哪个模板规则。 一个结点通过查找带有匹配于该结点的模式的所有模板规则,并从中选择最佳规则而 加以处理:然后采用该结点作为当前结点,采用源结点列表作为当前结点列表初始化 选定规则的模板。模板通常包含选择一个附加源结点列表加以处理的指令。通过依次 处理列表中的每个成员创建结果树结构,并通过附加该结构处理源结点列表。 下面简单介绍一下几个常用的x s l t 元素: x s l t 样式表也是一个x m l 文档,x s l :s t y l e s h e e t 元素为这个x m l 文档的根元素, 代表整个样式表,其下包含所有的模板( t e m p l a t e ) 【以元素x s l :t e m p l a t e 来表示) 。 x s l :s t y l e s h e e t 元素是用来定义x m l 树状结构的排版样式,以便产生输出文件。 x s l :o u t p u t 元素允许样式表作者指定输出信息,如文件格式和编码方法。 x s l :t e m p l a t e 元素用于为输出定义模板规则,每个模板规则都是为上下文中一 些特定类型的结点和操作定义的,该上下文是由属性m a t c h 定义的。属性m a t c h 是用 来指定要从x m l 中的哪一个标记开始搜索并获取数据,当设置m a t c h 的属性值为 时,代表从根标记开始搜索并获取数据。 x s l :a p p l y t e m p l a t e s 元素,用来命令x s l t 处理器到样式表中查找适当的模板( 组 合路径加以对应1 来使用。属性s e l e c t 是用来指定哪一小标记的数据要被获取出来( 以 x p a t h 表示) ,并在模板中显示。属性o r d e r - b y 是用来指定显示数据时要由哪一个标记 的数据作为数据排序的依据。它可以有两种排列方式:由小至大( 在属性值之前加上 符号十”或不加任何符号) ,由大至小( 在属性值之前加上符号“”) 。 x s l :v a l u e o f 元素,用来从x m l 文档中获取被s e l e c t 属性指定的标记或属性中的 数据,并将该数据与模板结合。属性s e l e c t 是用来指定哪一个子标记的数据耍被获取 出来( 以x p a t h 表示) ,并在模板中显示。而如果要取出的并非标记数据,而是标记的 第9 贝 x m l 及相关标准 硕士论文 某一个属性时,则需要加上符号“ ”来表示。 x s l :f o r e a c h 利用x p a t h 表达式选择结点集,并对该结点集的每个结点执行相同 的处理。 2 4 x q u e r y i ”4 2 j x q u e d 语言是w 3 c 公布的一种有别于其他任何查询语言的全新的x m l 查询语 言。w 3 c 为x q u e r y 制定了一系列相关的标准,包括数据模型、形式语义、查询代数 等,使得x q u e r y 语言更加规范和精确。另外,作为对x q u e r y 表面语法的补充,w 3 c 又提出了基于x m l 语法的x q u e r y 规范,使得x q u e r y 更适合w e b 应用环境。 x q u e r y 与x m l 的关系相当于s q l 与关系型数据库的关系。x q u e r y 查询语言适 合于各种类型的x m l 数据源的查询,是一种功能极强的查询工具。x q u e r y 是在汲 取其他多种查询语言精华的基础上形成和提出的,所以,它体现出多种查询语言和工 具的优点。例如,它从x p a t h 和x q l 中汲取了路径表示句法以适应层次结构文档的 需要;从x m l q l 中汲取了捆绑变量的概念,并应用该变量产生一个新的结构;从 s q l 中汲取了基于关键字系列子句的思想,为再造数据提供了一个模式( 即s q l 中 的s e l e c t - f r o m w h e r e :模式) ;从o q l 中汲取了由几种不同表达式全嵌套组成 的功能语言的概念。 x q u e r y 是一种将查询表示成表达式的功能语言,它的主要表达式由以下8 种基 本模式构成:路径表达式( p a t he x p r e s s i o n s ) ,元素构造器( e l e m e n tc o n s t r u c t o r s ) , f l w r 表达式( f l w re x p r e s s i o n s ) ,操作符和函数表达式( e x p r e s s i o n si n v o l v i n g o p e r a t o r sa n df u n c t i o n s ) ,条件表达式( c o n d i t i o n a le x p r e s s i o n s ) ,限定表达式( q u a n t i f i e d e x p r e s s i o n s ) ,列表构造器( l i s tc o n s t r u c t o r s ) 和数据类型表达式( e x p r e s s i o n st h a tt e s t o rm o d i f yd a t a t y p e s ) 。各种x q u e r y 表达式可以完全嵌套,所以,子查询的概念对 x q u e r y 是很自然的。查询的输入和输出是x m l 查询数据模型的一组实例,而该数 据模型是x p a t h 中描述的数据模型的改进。在该模型中,文档被模型化为一棵结点树。 不在同一个根下的一个文档片段或一个文档的集合,可以模型化为一个各种类型结点 的森林,其中包括元素结点、属性结点和文本结点。 下面是一个x q u e r y 的例子: f o r $ b o o ki n b o o k l e t $ a u t h o r s := $ b o o k a u t h o r r e t u r n f o r $ a u t h o ri n $ a u t h o r s r e t u r n 第1 0 页 南京理工大学硕士学位论文 l 数据管理技术的研究 $ a u t h o r l a s t t e x t ( ) ( 1 ) f l w r 表达式 该示例包含两个嵌套的f o r 循环和一个1 e t 语句。外部f o r 语句迭代由扩展路径表 达式b o o k 所得到的每一个结点,并将每个 结点隔离到名为$ b o o k 的变量中。 1 e t 语句则取得每一本书的所有 子结点,并放到名为s a u t h o r s 的变量中。 $ a u t h o r s 变量包含一个结点序列,而$ b o o k 和s a u t h o r 变量都包含单个结点。这些变量 不是赋值而是绑定的,一旦绑定了变量,它的值就不可改变。 f o r 和l e t 表达式是f l w r 表达式的子组件,f l w r 表达式的正式语法是: f l w r e x p r := ( f o r c l a u s el e t c l a u s e ) + w h e r e c l a u s e ? ”r e t u r n ”e x p r 概括地说,f o r 从旬对x p a t h 2 0 表达式返回的结点集中的每个结点进行迭代, r e t u r n 从句对每个结点求值。更复杂的查询通常需要多卜变量,可以根据引用f o r 从 旬中所指变量的x p a t h 表达式,在1 e t 从句中设置这些变量。w h e r e 从句可以进一步 限制产生结果的结点集成员。w h e r e 条件可以使用a n d ,o r 与n o t ( ) 之类的布尔运算符。 x q u e r y 表达式可以嵌套,即f l w r 的r e t u m 语句可以包含另一个f l w r 。 f 2 1 元素构造器 这个查询包含三个元素构造器。通过将元素标记直接写入查询本身的正文中,在 查询过程中动态生成元素 、 和 。要在元素标记中包括变量值 ( 或其他表达式) ,只要将其放在大括号中。 ( 3 1 属性构造器 显示了内置属性构造器的用法。c o u n t ( ) 函数返回每本书包含鲜l 元素的数目。大括号在这里用来包围需要判断的表达 式。 ( 4 ) 内置函数和操作符 c o u n t ( ) 是内置函数的一个示例。“f u n c t i o n sa n do p e r a t o r s ”草案列出了1 4 个不同 组中接近2 5 0 种函数和操作符,它们构造和操作各种不同的数据类型,包括数字、字 符串、布尔值、日期和时间、q n a m e 、结点和序列等。 在 $ a u t h o r l a s f f t e x t ( ) ) 表达式中使用t e x t ( ) 操作符,用从封闭的 元素中取得的姓氏的文本来填充每个 元素的内容。如果直接使用 $ a u t h o r l a s t ,就会将封闭的标签也一并加入。 第页 x m l 及相关标准 硕士论文 2 5s a x 和d o m t 3 2 5 1s a x x m l 的简单a p i ( s i m p l e a p i f o r x m l ,s a x ) 的核心基于两个接口:x m l r e a d e r 接口表示解析器,c o n t e n t h a n d l e r 接口从解析器接收数据。解析过程就是读取x m l 文档并向客户应用程序报告其内容,同时检查文档的形式合理性,并在发现形式合理 性错误时抛出异常。s a x 将鹪析器表示为x m l r e a d e r 接口的实例。s a x 用观察者设 计模式告诉客户应用程序文档中的内容,x m l r e a d e r 起主体作用,c o n t e n t h a n d l e r 接口起观察器作用。c o n t e n t h a n d l e r 接口声明u 个方法,嬲析器读取文档时,调用这 个接口中的方法,如解析器读取元素开始标记时调用s t a m t e l e m e n t o 方法,读取文本内 容时调用c h a r a c t e r s ( ) 方法,读取元素结束标记时调用e n d e l e m e n t 0 方法,等等:艉析 器读取的细节( 例如开始标记的名称与属性) 作为变元传递给方法。解析器总是按在 文档中遇到项目的顺序调用这些方法,例如解析器读取完整的开始标记后,立即调用 s t a r t e l e m e n t 0 方法,直到s t a r t e l e m e n t o 方法返回之后,它才读取开始标记后面的内容。 下面重点介绍c o n t e n t h a n d l e r 接口中的几个重要方法。 ( 1 1 接收文档 一般来说,一个x m l r e a d e r 解析多个文档,可以用同一c o n t e n t h a n d l e r 接口进 行处理。因此,一定要告诉一个文档结束和另一个文档开始的位置。为了提供这个信 息,解析器开始解析新文档后,在调用c o n t e n t h a n d l e r 中任何其他方法之前立即调用 s t a r t d o c u m e n t 0 j y 法。在文档解析完毕后调用e n d d o c u m e n t o 方法,并且不再对这个文 档报告任何内容。这两个方法不接收任何变元,只是标明完整x m l 文档的开头和结 尾。 ( 2 ) 接收元素 实际上,s a x 报告标记而不是元素。当解析器遇到开始标记时。即调用 s t a r * e l e m e n t 0 方法。当解析器遇到结束标记时,则调用e n d e l e m e n t o 方法。解析器遇 到空元素标记时,调用s t a r t e t e m e n t 0 与e n d e l e m e n t o 方法。如果开始标记与结束标记 不符,则抛出s a x e x c e p t i o n ,除此之外,解析器还要负责跟踪层次。s t a r t e l e m e n t 0 与e n d e l e m e n t 0 方法的变元相似:名字空间u r i 用s t r i n g 传入,如果元素不在任何一 个名字空间中,则这个变元是一个空字符串,而不是n u l l ;局部名称用s t r i n g 传入, 这是前缀与冒号后面的部分;限定名用s t r i n g 传入,这是整个元素名,包括前缀与冒 号,但不带前缀的元素的限定名与局部名相同。 在s t a n e l e m e n t ( ) 方法中将这个元素的属性集作为s a x 特定的a t t r i b u t e s 对象传 入。如果知道所要属性的限定名或名字空间u r i 和局部名,则a t t r i b u t e s 可以查找其 数值和类型。如果不知道属性名,则可以对元素的所有属性进行迭代。属性没有顺序, 螭1 2 页 堕要堡鉴兰堡主兰篁堡苎 型! 墼塑笪堡垫苎塑堕窒 但为了编程方便,a t t r i b u t e s 接口被设计为列表( l i s t ) ,可以指定列表索引,请求属 性的数值、局部名、限定名、类型和名字空间u r i 。 ( 3 ) 接收字符 解析器读取# p c d a i f a 时,将这个文本以字符数组的形式传递给c h a r a c t e r s ( ) 方法。 尽管c h a r a c t e r s ( ) 直接取字符串变元会更简单,但使用c h a r 数组可以达到一定的性能 优化。特别地,解析器通常在一个数组中存储原文档的一个组块,重复将同一数组传 递给c h a r a c t e r s ( ) 方法,并且只是更新s t a r t 与l e n g t h 的值。 f 4 ) 接收处理指令 解析器读取

温馨提示

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

评论

0/150

提交评论