




已阅读5页,还剩59页未读, 继续免费阅读
(计算机软件与理论专业论文)xml在通用数据交换中的作用.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
捅矍 x m l 一出现,就在w 曲服务以及数据库中得到了充分的应用,并且成为各种 应用程序中交换和处理数据的重要格式。本文就x m l 和数据库尤其是o r a c l e 数据 库之间进行数据格式互换,以及在c + + 应用程序中如何进行x m l 数据绑定做了全 面的论述,体现了x m l 作为通用的数据交换格式的重要地位。在应用程序中访问 x m l 文档有d o m 的树结构,s a x 流模型,以及x m l 数据绑定的方法。前两种方 式在x m l 文档和应用之间批量处理数据时非常麻烦,而数据绑定是处理大量x m l 数据传输的新方法,目前这种方法也只是在j a v a 中得到了很好的实现。那么,在 c + + 中,只要从x m l 模式描述结构的基础出发,产生结构的x m l 模式表示,同时 吸取了d o m 和s a x 表示x m l 数据的优点,运用类结构空间的新方法,我们实现 了把有效的x m l 文档绑定到结构。在c + + 程序中,只要通过调用通用的打包和解 包接门函数,解决了结构实例和x m l 文档数据之间的直接转换。该方法的实现, 刁i 但节省c + + 程序的开发成本,提高了效率,而且便于软件的维护。在数据库方 面,实现了将x m l 文档和表中记录格式互换,用于从主表和其所有的子表中,如 何以x m l 文档存取特定记录:以及如何将x m l 文档数据按照指定的方式存入不同 的表中。 关键词:x m l 文档x m l 模式x m l 数据绑定打包解包 a b s t r a c t x m lh a sb e e nw i d e l yu s e di nw e bs e r v i c ea n di nv a i l o i l sd a t a b a s e ss i n c ei t s a p p e a r a n c e i tc anb ea l li m p o r t a n td a t af o r m a tp r o c e s s e di np r o g r a m t h i sp a p e r d e s c r i b e st h ed a t af o m l a ti n t e r - c o n v e r s i o nb e t w e e nv a r i o u sd a t a b a s e sa n dh o wt od o x m ld a t ab i n d i n gi nc + + p r o g r a m t h u se m b o d i e st h ef u n c t i o no f t h ex m la sa u n i v e r s a id a t ai n t e 卜c o n v e r s i o nf o r m a t t h e r ea r et h r e em e t h o d st oa c c e s sx m l d o c u m e n t s ,t r e e s t r u c t u r ei nd o m ,s t r e a m m o d e li ns a x ,a n dx m ld a t ab i n d i n g i t m u s tp r o b ed e e p l yi n t ox m lt e x tn o d e sw h e nt h ef i r s tt w om e t h o d sa r eu s e da n dt h u s i sab i gt r o u b l ee x c h a n g i n gh u g ed a t aa m o n gx m ld o c u m e n t sa n d a p p l i c a t i o n s n o w t h ed a t ab i n d i n gm e t h o ds p e c i a l l yu s e dt oe x c h a n g e h u g ed a t ah a sb e e ni m p l e m e n t e di n j a v a t h ev a l i dx m ld o c u m e n th a sb e e nb o u n dt oc + + s t r u c t u r ew i t han e wm e t h o do f t h es t r u c t u r e l i k es p a c et h a ti sc r e a t e df r o mt h eb a s eo f t h ex m ls c h e m ad e s c r i b i n g s t r u c t u r e t h ed i r e c tc o n v e r s i o nb e t w e e ns t r u c t u r eo b j e c ta n dt h ex m ld o c u m e n t t h r o u g hc a l l i n gt h eg e n e r a li n t e r f a c ef u n c t i o n so f m a r s h a l l i n ga n du n m a r s h a l l i n gi n c + + p r o g r a m t h eb i n d i n gm e t h o dn o to n l yl o w e r st h ec o s to f c + + d e v e l o p m e n ta n d i m p r o v e st h ee f f i c i e n c y , b u ta l s oi sc o n v e n i e n tf o rs o f t w a r em a i n t e n a n c e r e a d i n gt h e n a m e dr e c o m sf r o md a t a b a s et a b l e su n d e rt h ec o n d i t i o no f n o tk n o w i n gt h er e f e r e n c e a n ds t o r i n gt h e mi na nx m ld o c u m e n ta n ds t o r i n gt h ex m ld o c u m e n ti nd i f f e r e n t t a b l e si l ls p e c i a lw a yh a sb e e ni m p l e m e n t e d k e y w o r d s :x m ld o c u m e n tx m ls c h e m ax m ld a t ab i n d i n gm a r s h a l u n m a r s h a l 独创性( 或创新性) 声明 本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究 成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不 包含其他人已经发表或撰写过的研究成果;也不包含为获得西安电子科技大学或 其它教育枫构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做 的任何贡献均己在论文中做了明确的晚明并表示了谢意。 申请学位论文与资料若有不实之处,本人承担切相关责任。, 本人签名: 艮强日期趣垒、乙) 关于论文使用授权的说明 本人完全了解西安电子科技大学有关保留和使用学位论文的规定即:研究生 在校攻读学位期间论文工作的知识产权单位属西安电子科技大学。本人保证毕业 离校后,发表论文或使用论文( 与学位论文相关) 工作成果时署名单位仍然为西 安电子科技大学。学校有权保留送交论文的复印件,允许查阅和借阅论文;学校 可以公布论文的全部或部分内容,可以允许采用影印、缩印或其它复制手段保存 论文。( 保密的论文在解密后遵守此规定) 本学位论文属于保密,在一年解密后适用本授权书。 本人签名:壁叠邑日期2 越丝f ! 导师签名: :盈生日期出f : 绪论 x m l 作为人类和计算机都易于理解和处理的数据存储格式,在各种数据库之 矧起到了数据移动的枢纽作用。其自身多节点层次性的数据结构,适宜于面向对 象语言( c + + ,j a v a 等) 调用x m l 编程接口访问数据。而存于诸如关系数据库 或面向对象数据库的数据,可经过转换并以x m l 数据形式在网上( 局域网或因 特网) 发布。并交换数据,经应用层处理后继而可重新存入库。 那么,x m l 能够负载的数据一般来说可以有三种来源:x m l 纯文本、关系 型数掘库以及各种应用程序,如邮件、目录清单、商务报告等。最为简单的形式 是x m l 文本,可以直接读取或者加上样式语言程序在浏览器中显示,另外在应 用程序中通过象d o m 这样的编程接口处理数据。关系数据库是x m l 数据来源 的扩展,由于充分利用了数据库管理系统( d b m s ) 管理数据的功能,方便于应 用程序对动态的数据进行处理。然后再利用服务器端应用( 如a s p 、j s p 、s e r v l e t ) 等动态地存取。第三种数据源范围广,应该有针对性地分别对待。 x m l 的结构描述不仅仅是针对应用程序的,而且是针对人的,所以它并非为 机器曰丁以读懂的二进制数据,而是简单的可编辑文本。程序员得益于此,能够直 接制订底层的交换规范,使得在程序各模块间传输符合这些交换规范的数据。通 常应用程序中的x m l 数据交换分为:数据发布、集成与交易自动化。不象以前 基于纸介质和c d r o m 的数据发布,x m l 在跨媒体多介质的数据发布形式上发 展了一大步。一个成功的案例为2 0 0 0 年5 月发布的“个性化印刷标记语言” ( p e r s o n a l i z e dp r i n tm a r k u pl a n g u a g e ,p p m l ) ,是个x m l 的扩展性规范,用 于带有可再利用内容文档的快速印刷。如果说数据发布涉及到的是服务器浏览器 形式的数据交换,那么数据集成则是一种服务器,服务器之间的数据交换,它是企 业对企业电子商务的基础【2 0 】。将x m l 作为数据交换的标准,有利于开发商开发 出有自动处理能力的代理程序,这种自动化程度的提高,有助于工作效率的提高。 随着x m l 在电子商务、远程过程调用、数据存储与访问等中的应用,它在 通用的数据交换中的地位逐渐加强,人们对) 蹦l 的应用也越来越细化。本文旨 在讨论一种从服务器端关系型数据库中读取信息,并以x m l 文档存储,经应用 程序处理后,再转存入库的方法。由于读取信息时涉及到的关系表数量大,利用 o r a c l e 数据库中的数据字典关于用户表的信息,可以避免s e l e c t 查询时的笛卡 尔积运算,另外还可以适应随时变化了的表结构,甚至包括增加或删除子表的情 况:而且只要提供主表的信息,如表名、记录号等,即可完成查询。这样既提高 了效率,又将查询的结果直接存入x m l 文档中,层次分明地描述了各个表中的 x m l 在通用数据交换中的作用 内容。然后x m l 文档经由c + + 的计算等操作后,再把x m l 文档按信息的类型重 新入库。由于涉及的表结构可能有变化,反映在记录中就有列项数据的增加或减 少,进而反映在x m l 文档中就是某些节点的有无。在应用程序中,利用d o m 或 s a x 处理这些x m l 数据,就很难做到通用性。现在随着j a v a 的发展而产生的 x m l 数据绑定方法,是处理这类情况的好方法。运用c + + 语言的特点,将x m l 模式映射到结构上,能够实现通用的处理x m l 文档的数据绑定的方法。 第一章x m l 简介 第一章x m l 简介 1 1 关于x m l 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 可扩展标记语言) 由万维网联盟( w o r l d w i d ew e b ,w 3 c ) 组织制定并得到世界上几乎所有大公司的支持。x m l 类似于 h t m l ,延续了其简单、易懂的语法,但是却有了更大的灵活性和扩展能力。它 允许用户自己定义任何有明确含义的标记,并且标记不相互重叠正确地嵌套起来, 以定的层次结构化地表示数据。这种灵活的文本数据存储形式可方便地用于任 何平台,并为不同语言及组件之间的数据存取、处理、交换与转换等操作提供了 方便。 所有的x m l 文件都必须是结构良好的或是有效的两种之一。一般来说,格 式良好比较简单,只要起始标记和结束标记配对并且正确地嵌套就可以了;而有 效的除了符合格式良好外还必须满足d y d ( d o c u m e n tr y p ed e f i n i t i o n 文档类型定 义) 或x m ls c h e m a 的约束,关于这点在下一节中再讲。 通过例1 1 所示的一段描述有关参考文献的x m l 文档,我们简要地了解一下 x m l 文档的组成以及数据的组织形式: 例1 1 x m l 程序设计 栗松涛 清华大学出版社 i n s t a n tx m l ,) ( s l j a v a 网络编程 李江 x m l 在通用数据交换中的作用 张威 宇航出版社 北京希望电子出版社 刈r e f e r e n c e s , 这段x m l 结构很清晰,它描述了两本参考文献的信息,包括书名、作者、 出版社等。其中 组成了文件完整的“根标记”。 是r e f e r e n c e s 的子标记,b o o k 又可以有自己的子标记 、 、 ,这些子标记还 可以有子标记,一直嵌套下去直到满意地表示事物为止。 x m l 文档最多由4 部分组成( 其中有三部分是可选的) 它们在文档中以如下 的顺序出现: 序言( p r o l o g 可选) :包含出现在文档或根元素的开始标记之前的信息,应用 于整个文档如字符编码、文档结构和模式引用等,另外还包括x m l 声明、注 释等。如例1 1 中的 它包括版本声明 和字符编码。如果要解析中文,g b 2 3 1 2 的编码方式是必要的。 d t d ( 可选) :描述x m l 文档的内容。由于d t d 语法自成一体,不支持数 据类型,正在被x m l 模式代替。x m l 模式文档本身也是x m l 文档,它引 入了数据类型,支持命名空间,方便了用户和开发者。 文档根( d o c u m e n tr o o t ) :文档根是x m l 文档中的第一个元素,包含特性、 子元素、注释、字符数据。如前面例1 1 中的x m l 文档根元素是 , 它必须有 结束标记。在开始和结束根标记之间就是x m l 文档内 容。 结尾( e p i l o g 可选) :结尾和序言类似,是处理指令所在的位置,用于清除工 作,它可以包含注释。属于可选部分,很少使用。 x m l 作为数据在存储和传输中的媒介,具有很多优异的地方,这也是它之所 以能得到飞速发展的缘由。它具有【1 1 1 2 1 : 开放性:x m l 技术根据标准规范,允许数据在任何平台上读取和处理。在组 合了n e t 和x m l 的新的编程形式中,将允许在任何平台上运行的任何语言 与运行在其他平台的任何其他语言一起工作,通过开放数据标准进行通信。 x m l 作为与平台无关语言的成功范例,究其原因在于简单的文本形式。任何 人都只要了解了x m l 语言的基本规则和语法就可以用编辑器仓建x m l 文 第一章x m l 简介 档,规则一旦确定,人们就很容易创建、阅读和理解x m l 文档。也可以使用 h t t p 在因特网上传输简单文本流。h t t p 是应用因特网通讯的标准,为所有 平台支持,这样无论用何种硬件或操作系统都可以应用x m l 。另外x m l 可 以跨多层起作用可以应用于客户层、中间层和服务器端的任何地方,也可 以成为三者互操作的方法。 简单性:x m l 只是纯文本。如果在两个不同系统问交换数据,人类所使用的 最简单格式始终是文本。 自描述性:x m l 可用于明确地表示一个数据模型的各个部分的意义,这就是 自描述性。即就是,可以通过察看x m l 文档中特定数据旁的标记,知道该数 据的意义。如文本 李江 说明李江是一本书的作者。 标准的数据交换格式:交换数据可能是开发者如此青睐x m l 最重要的原因。 企业要做出重要的决策,也许要来自各方面的信息一些来自内部,一些 来自外部。数据提供者设定数据的格式,要求企业按照这个格式创建接收接 口,出于并非所有的企业使用相同的结构和接口,这就增加了信息阅读的困 难。如果结构改变,所有基于这个结构的接口都需要改变。因为x m l 是一种 公共结构,因而不需要创建和维护特别的接口。无论什么企业都可以使用 x m l 表示其数据,并且很容易与他人共享。 可扩展性:使用x m l ,可以按我们自己的需要定制语言。已有的定制语言如 m a t h m l ( 数学标记语言) ,c m l ( 化学标记语言) 等i s j 。x m l 创建一个框架 用于自己的数据表示,因此而创建的所有语言都是对x m l 的扩展。 x m l 的出现将互联网的发展带入一个系统整合的新纪元,它使得不同的平台 或系统能够相互通信。而x m l 的使用范围从文字处理、电子商务到数据备份, 几乎无处不在。x m l 的影响力可说是令人生畏,各大厂商无不争相推出与x m l 技术相关的产品,以求在未来的系统整合市场中占有一席之地。在不久的将来, x m l 将会扮演一个十分重要的脚色。 、 1 2 关于x m ls c h e m a x m l 模式是利用x m l 基本语法规则来定义x m l 文档的结构,是一个普通 的“x m l 文档”,它有着强大的功能,而且使用灵活,是用来验证x m l 文档有 效性的必要部分。x m l 模式对d t d 进行了扩充,引入了各种数据类型、命名空 间等概念,从而使其具备了较强的可扩展性,可以更容易地处理不同的x m l 文 档。x m l 文档和模式文档结合使用才能执行验证,当验证发生时涉及到检验元素 的子元素是否是模式中允许的且是定义过的,或者检验元素上所使用的任何一个 特性是否是许可的,以及这些节点中的实际内容是否像在模式中定义的一样正确。 6 x m l 在通用数据交换中的作用 下面的例1 2 是例l _ l 中的x m l 文档的模式文件,它是对文档的一种约束,通过 有效性的验证就可咀判定一个x m l 文档是否是我们想要的文档。其中,s c h e m a 是 任何一个x m l 模式文档的唯一的根元素。 例1 2 ! 元素b o o k 又可以包含其它的子元素 x s :e l e m e n tn a l t l e = ”a u t h o r 。t y p e = ”x s :s t r i n g m a x o c c u r s = l u l l b o u n d e d 惨 f p u b i s h e r s 同a u t h o r s 类似 第章x m l 简介 从这个x m l 模式中我们看出一个符合该模式的有效文档,当 作为 根元素时, 必须是它的子元素,可以出现o 到一个很大的数,表明参考文献 的个数:而 、 、 是 的予元素,其中 是 个字符串型的简单数据: 、 3 l 分别是 和 的子元素,它们可以是l 到多个,而且也都是字符型。凡是符合这样的模式描述的 所有x m l 文档都是该模式的有效文档,因此符合一个模式的有效文档可以有无穷 多个。 通过模式对x m l 文档的验证,可以确保数据的一致性。要将正确有效的数 掘,写入数据库或者保存在文件系统中,或者将数据在应用程序间传送,这些数 据必须是符合模式规定的。 1 3x m l 自描述性的应用 x m l 模式就是x m l 自描述性应用的一个成功的例子。比如它通过 、 、 等元素对某一类型的x m l 文档进行了描 述,包括说明文档内应该含有什么元素,这个元素可不可以再含有子元素,以及 子元素在文档中出现的顺序等。像x m l 模式这样的文档,不但详尽地描述了一 种类型的x m l 文档的结构组成情况,而且还定义了基本的数据类型如字符串、 整型等。不过x m l 的自描述性还有更大的用途,甚至将其进一步扩展,用来描 述任何有层次性的事物如c + + 语言中的结构体。 现有如下的模式文件片断, 例1 - 3 e l e m e n tn a m e = ”n o ”t y p e = ”x s :i n t ”6 x m t ,在通用数据交换中的作用 e l e m e n tn a m e 2 “s e x “t y p e 2 ”x s :s t r i n g “) 它告诉人们,只要知道了学生的学号、姓名和性别就能了解某个学生的基本情况, 它规定了人类能读懂的文字描述见例1 4 。 例1 4 17 3 张三 男 是例l _ 3 的有效的x m l 文档,打着尖扩号的标记只是对数据的界定为了满足人的 理解形式。 再来看如下的一个c + + 结构体的定义, s t r u c ts t u d e n t i n tn o ; c h a r 。n a m e ; c h a r + s e x ; ; 它是用柬告诉计算机,如果给出一段连续的空间包含一个整型数和两个字符型指 针( 指向可读的内存区域) ,那么计算机就能够理解,见图1 1 。 “张三” “男” 圈i i 结构实例的内存表示 现在如果去掉例1 4 中的标记和图1 1 中的方框,这两者表示的是同样的东西。 也就是说,如果把 标记( 它不标记基本的数据) 理解成“分配一块内存”, 、 年f l ( 它们分别标记基本的数据) 是具体的内存分配方案,即 分配一个整型和两个字符指针的空间,则例1 3 中的模式文件就间接地描述了数 据在内存中的分配方案。我们把这种情况称作为模式文件对结构的外围描述。 第二章x m l 数据传输与交换 第二章x m l 数据传输与交换 在一个大的集成在一起的系统中,人们倾向于把x m l 当作企业中应用程序 间数据传输的“交通工具”,或者直接作为存储数据的数据源。一个通用的x m l 数据格式,可以被用在u n i x 上运行的应用程序和在w i n d o w s 上运行的w e b 应 用程序间通信。 2 1x m l 和数据库 可以说x m l 是一种未来的数据库技术,由于其简单性可作为各种数据处理 方法的基础,包括有w e 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 文档,然后利用x m l 工具进行进一步的处理。 许多数据库支持用它们专用的数据库格式对x m l 进行转换,现在绝大多数常见 的数据库( 如o r a c l e 和s q ls e r v e r ) 都支持x m l 技术。 x m l 与传统的d b m s 的不同之处在于x m l 文档设计成可移动的。在因特 网或其他的网络上,它们被假设为超简( s u p e r - s i m p l e ) 文件,以便于为所有或至 少部分多用户团体存取和使用删。传统的d b m s 将大部分数据准备工作放在服务 器端,用户向d b m s 发出一个查询,d b m s 解释它,并返回相关信息,其格式通 常是一个表或h t m l 页面。这时的运行数据库的软件完成大部分工作;如果将数 据库的检索信息以x m l 的形式发回给用户,那么处理工作可以在客户端完成, 因此而大大减轻了服务器的任务。尽管关系型数据库用专用的格式存储数据,但 利用一些技术如x m l 模式,关系型数据就可以用x m l 格式表耐“。几乎可以 一直用x m l 格式描述关系型数据。 9 x m l 在通用数据交换中的作用 2 1 1 常见的从数据库生成x m l 工具 通过以上的描述可知,为应用处理的数据库数据,必须通过各种的方式转换 成x m l 文档。如果象从o r a c l e 这样的数据库来生成x m l 文档时,可以利用它 的专门的生成工具,下面看一个o m c l ex m ls q l 工具生成x m l 见例2 1 ,使用 x m l * p l u s 从d e m o c u s t o m e r 中检索记录的子集【2 】: 例2 1 s e l e c tx m l g e ng e t x m l ( s e l e c tc u s t o m e r _ i d ,n a m e ,c i t yf r o md e m o c u s t o m e rw h e r e c u s t o m e r i d j o c k s p o r t s b e l m o n t 10 8 n o r t hw o o d sh e a l t ha n df i t n e s ss u p p l yc e n t e r h i b b i n g 叫c i t y 首先,可以看出函数x r n l g e n g e t x r n l 的第一个参数是一个查询语句,它的结 果就是一个中间型的数据表。如果查询要生成的x m l 文档来自于一个主表及其 子表而且子表还可能有子表( 可能涉及上百张表) 时,得对各个表引用情况有 所了解,并且这个查询语句将非常庞大,由此产生效率低下而且不好维护。 其次,如果使用象v b n e t 中的a d o n e t 来生成x m l 文档,当涉及到表 的数量很大时也有不便的地方。a d o n e t 是一个类、接口、枚举和其他为数据 存取操作提供结构化和有效工具包的工具库,非常容易地与传统的数据格式和数 据库集成起来,它可以利用x m l 跨不同的系统共享断开的数据来改进应用程序 的互操作性【1 5 】。其中,d a t a s e t 类是a d o n e t 断开数据处理模型的核心对象, d a t a s e t 可以用x m l 文档填充;相反d a t a s e t 也可以写成x m l 流。在许多情况 下,都需要用到d a t a s e t 的x m l 表示形式,如可以把d a t a s e t 的内容通过h t t p 第二章x m l 数据传输与交换 发送给一个远程客户机,以便于被其他应用程序使用,或者要把它传送给一个 w e b 服务。 图2 1d a t a s e t 对象的模型】 从图2 1 看出:d a t a s e t 是由t a b l e s 、c o l u m n s 、c o n s t r a i n t s 和r e l a t i o n s 这4 个集合构成的,它们可以描述数据的关系结构。该类还包括一个r o w s 集合,代 表实际的数据。每个d a t a s e t 对象都表示内存中关系数据的一个表。具体的 d a t a t a b l e 的c o l u m n s 集合包括了所有表的歹t j ( d a t a c o l u m n 对象) 集合,它的r o w s 集合中包括其行( d a m r o w 对象) 集合,c o n s t r a i n t s 是所有表的约束的集合。 r e l a t i o n s 集合中包括一个d a t a r e l a t i o n 对象的集合,该对象可以根据一个常见的 键在父表和子表之间建立一种关联。 当用d a t a s e t 来把数据库表记录和x m l 文档相互转换时,需要用各个表数据 来填充d a t a s e t ,并且要生成各个表之问的关系,而且该对象要占用大量内存,同 样得预先明确指出主表及其子表,这在有些情况下不太好实现,如在应用执行时 子表有被删除的情况下。 2 1 2 通过数据字典生成记录的x m l 因此,采用以上类似的方法,难以满足我们的查询要求。当从数据库的某个 主表中查询某条记录和子表中相关的记录,以及子表的子表相关记录时,我们依 靠数据字典的功能来实现,既避免了使用s e l e c t 时的笛卡尔积运算,又不会占 用大量的内存。数据字典是o r a c l e 数据库最重要的部分之一,是由一组只读的表 x 札在通用数据交换中的作用 及其视图所组成。数据字典中的全部基本表和用户可存取的视图均为o r a c l e 用户 s y s 所持有,当数据库打开后,数据字典总是可用的。数据字典中所包含的视图 集合在许多情况下,有三种视图包含类似信息,彼此以u s e r 、a l l 和d b a 相 区别。其中前缀为u s e r 的视图,为用户视图,是在用户模式内。 以o r a c l e 数据库为例,使用数据字典实现记录查询时,每次只涉及到三、四 张表,将取出的记录以x m l 文档形式用于浏览、程序处理或提供w e b 服务。当 从数据库内提取存储于表中记录的内容时,这种方法很适合于表的结构是变化的 以及表有增删的情况,不好用一个常用的方法来读取数据库时非常有用。我们要 提取的完整内容被分别存入主表和子表( 以及子表的子表) 的记录中,只要通过 主表的一一条记录按照关联以及约束条件,来从子表中提取相关的记录,组成有意 义的内容。如只需在开始输入待提取的主表记录号就可完成。 2 12 1 用户表引用情况的x m l 模式 出于子表的个数随时可能在变化,无法预先知道要取出的数据来自哪些子表, 因此,要取出库中数据,需要先了解某工程各个表之间的引用关系。为此,打开 库中数据字典的用户表描述关系表u s e r j a b l e s ,u s e r _ c o n s t r a i n t s 和 u s e rc o n sc o l u m n s ( o r a c l e 数据库) ,它们动态地描述了用户所有表的状态。 通过这几个表中的描述,找出某项工程的主、子表之间关系。我们从这些表中能 够读取到有用的表关系描述,将这些描述可以用一个x m l 文档来存储,图2 2 就是这种x m l 文档的模式图: 甄甄瓣 i 盘悬幽 涎溉尉三时凰 i “坷丽i i 丽 匝晒匦西匡鼐囊磊戛划心瓣 1 。1 硒 燧津9 孥 h 匾菇面i 诵 图2 2 主、子表引用情况的x m l 文档模式图 以下对图2 - 2 中的各个节点( 用矩形框表示) 的具体解释: t a b l er e l a t i o n :文档的根,它从总体上表明主表和它的予表之间的关系。该节 点是对涉及到的所有表引用情况的描述,它说明主表的主键、子表及其引用关 系等。 第二章x m l 数据传输与交换 p r i m t a b l ed e s c r i p t i o n :对主表概要情况的描述,包括主表名称、主键、外码和 自身的子表名称。任何子表的子表在这里,对于其他的一些表来说又是一个新 的主表,它在该节点中也加以描述。描述的最终结果形成了x m l 文档,其中 对所有的工程表形成一个详细的主、子表引用链。 p r i m t a b l en a m e :节点内容为主表名称,唯一。 p r i m k e y :主键。主键由- - y u 或组列组成。各列分别有名称、代码和各列在主 键中的序号。 夺k e yn a m e :列名,即表中列名。 夺k e yc o d e :代码,即数据字典中的表u s e rc o n sc o l u m n s 中 c o n s t r a i n t _ n a m ep i | 容。 夺c o d ep o s i t i o n :该列在主关键字中的序号。这里保留序号,为其子表引用 和比较列内容提供方便。主关键字可有可无,可能引用链条的最后一张表 无需关键字。o 1 0 说明了主关键字组列的个数,o 表明无主关键字。 r e f e r f i e l d :引用主表的外码,o 一】0 表明引用的列个数,o 表明外码,如初始的 第一张表就是。 夺f i e l dn a m e :内容是形成外码的列名称。 夺f i e l dp o s i t i o n :该列在引用时的序号,它和主表关键字中列的序号相对应。 夺f i e l dc o d e :被该表引用的主表关键字代码。它表明本表引用的主表关键 字。 p r i m t a b l eo w n e r :如果工程中所有表名都不相同,本项可以不用。现暂缺不用。 a s s i s t a b l en a m e :引用本表的子表名。由于每张子表都会被作为主表描述,因 此其最大个数应与主表情况描述一致,这里最大设为1 0 0 个。 2 1 2 2 用户表引用的x m l 表示 、 现在,举例描述用户表之间引用关系的x m l 文档如下例2 2 ,它是在o r a c l e 数 据库中建 的p r o j _ t a b l ,p r o j _ t a b 2 ,p r o j _ t a b 3 和p r o j _ t a b 4 四张表,通过 读取数据字典后,而生成的各个表之间的关系。该文档清晰地描述了各主表和其 子表的引用关系。其中,p r o j _ t a b l 是第一张表,只记述了表名p r o j t a b i ,关 键字- f i e l d l ,f i e l d l 3 以及子表p r o j _ t a b 2 ,而没有外码( p r o j 为i 程名,以便 将本工程表与其他工程表相区别) 。 例2 2 p r o jt a b l 一1 4 捌l 在通用数据交换中的作用 f i e l d l s y s _ c 0 0 1 5 6 0 l f i e l d l 3 s y sc o ol5 6 0 2 p r o jt a b 2 p r o jt a b 2 f i e l d 21 s y s - c 0 0 1 5 6 1 l f i e l d 21 l s y sc o o15 6 0 刮f i e l dc o d e f i e l d 2 2 勺,f i e l dn a m e 2 s y sc o ol5 6 0 f i e l dc o d e p r o jt a b 3 p r o jt a b 3 f i e l d 3 第二章x m l 数据传输与交换旦 s y s _ c 0 0 1 5 6 3 l f i e l d 3 q f i e l dn a m e 1 s y sc 0 015 6l 一一 一 p r o jt a b 4 p r o jt a b 4 f i e l d 4 s y s _ c 0 0 1 5 6 6 l f i e l d 4 l s y sc o ol5 6 3 图2 3 是例2 2 x m l 2 档所描述的表之间关联的图形表示。其中,带三角符号 的是主关键字,箭头表明子表中的引用列引用到主表的情况( 每个表都用方框图 表示,第一行为表名,第二行为表中的各列) : 1 6 x m l 在通用数据交换中的作用 图2 3 数据库表的引用示例 2 12 3 实现表引用状况的x m l 表示 如下讨论的三个函数协调工作,将从数据字典中读取用户表的信息,生成引 用情况的x m l 结构描述,见例2 2 的x m l 文档。这三个函数分别在服务器端执行。 函数p r i m a r y k e y ( t a b l e n a m e ) 用来返回主表的关键字名,主表的名称通过参数 表传入。算法为,连接数据库表u s e rc o n s t r a i n t s ,从中查看列 t a b l en a m e 内容为t a b l e n a m e 的记录,该条记录列c o n s t r a i n tt y p e 内容为p 时,列c o n s n u 】n tn a m e 内容就是主关键字名。它为系统给定 的唯一标识,但不是用户定义的关键字名,此时应打开表 u s e rc o n sc o l u m n s 从中找出列c o n s t r a i n tn a m e 相应内容的所 有c o l u m nn a m e 列的值( 即用户主键) ,同时记下它在关键字中的序号 即p o s i t i o n 列的内容。由于外码和主关键字情形基本一致 ( c o n s t r a i n tt y p e 内容为r ) ,故同时将外码也找出来。不过外码,是 主表关键字代码,表明该表和主表的关系。该函数同时返回主键和外码节点。 函数a s s i s t a b l e ( t a b l e n a m e ) 用以显示主表之子表名,其中参数t a b l e n a r n e 是 主表名。算法为打开表u s e rc o n sc o l u m n s ,找出主表是否至少有一个 主关键字,如果有它就有可能有子表。记下约束代码,并打开表 u s e rc o n s t r a i n t s 通过rc o n s t r a i n tn a m e 就可以找出是否有别 的表引用过该表,如果有则汜下该表名,直至找出所有的子表名为止。函数 返回所有子表名节点。 函数r e e o r d s e t t o x m l ( o r e c ) 将记录转换成有效的x m l 文档。它调用上述两 第二章x m l 数据传输与交换 个函数,把所有满足条件的节点转换成x m l 文档。 如图2 4 所示,表明了函数p d m a r y k e y 和a s s i s t a b l e 查询数据字典的过程。 其中实线寻找主键;虚线是寻找外码;点划线为查找子表。 表u s e rc o n s t r a i n t s t a b l e - n a m ec o n s t r a i n t a m el c o n s t r a i n t a n m ec o n s t r a i n t t y p e p r o j t a b is y s c o o i5 6 0 p i x u j 一1 ”一一1 1 r 一p r o jt a b 2 s y sc 0 0 15 6 1 一- s y sc 0 0 1 5 6 0 一? 一r 1 p r o jt a b 2 一s y sc o o i5 6 2 - 一s y sc o o l 5 6 0 一j 一r - p r o jt a b 3s y sc 0 0 1 5 6 3p p r o jt a b 3 s y sc o o i5 6 3 - s y sc 0 0 1 5 6 1 1r p r o jt a b 4s y sc o o l 5 6 6 p p r o jt a b 4s y sc 0 0 1 5 6 6s y sc 0 0 1 5 6 3r p r i m a 】- y k e y ( ”p r o j - t a b 2 “) 表u s e rc o n s _ c o l u m n s c o n s t r a i n ta 卜m ec o l u h j 口呵n a m ep o s i t i o n s y sc 0 0 1 5 6 0f i e l d ll s y sc 0 0 1 5 6 0f i e 乙d 1 32 、s s is t a b le ( ”p m jt a b 2 ”) s y sc 0 0 1 5 6 2 一 s y sc 0 0 1 5 6 3 s y sc 0 0 1 5 6 6 一f l e l d 2 2 f i e l d 3 f i e l d 4 图2 4 函数查询数据字典的过程 2 1 2 4 生成汜录的x m l 表示 生成的x m l 文档记录了各主、子表的引用关系后,就能通过读取该文档在 输入主表的情况下提取记录了。同s e l e c t 查询有所不同,即就是不必明确知道 所有关联的予表,也不用形成查询条件,并且结果也不必生成表来输出,而是形 成x m l 文档,提供w e b 服务或为应用程序进一步处理。 以下的两个脚本子程序d i s p r e c 0 和d i s p f i r s t 0 用于摘录所要求的信息的记录。 子程序d i s p f i r s t ( t a b l e n a m e ,r e c n u m b e r ) 显示第一个表t a b l e n a m e 、中的第 r e c n u m b e r 条记录,其中表名和记录号通过输入得到,记录号还可以通过查 询信息的主题而得到。然后调用d i s p r e c 0 ,显示子表中相关的记录。任何一 张表的相关记录的显示,都是根据其引用的主表关键字的内容来确定。 子程序d i s p r e c ( t a b l e n a m c ,a r r a y p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐饮连锁加盟与区域代理合作协议范本
- 餐饮门面租赁合同租赁终止条件与违约责任解析
- 员工培训案例
- 茶园承包与茶叶品牌保护与维权合作协议
- 生态工业园区厂房土地抵押借款合同
- 餐饮连锁品牌加盟加盟商权益保障合同
- 智能家居系统承包安装服务合同范本
- 拆除工程安全责任书:建筑拆除安全合同
- 名医诊疗经验传承师承合同
- 师生夏季安全教育
- 幼儿园消防安全组织机构图
- 英语社团活动课件
- 第三方检测市场部管理制度提成方案
- 学前儿童发展心理学-情感
- GB∕T 16762-2020 一般用途钢丝绳吊索特性和技术条件
- 电网施工作业票模板
- 安徽省小学学生学籍表
- 精选天津市初中地理会考试卷及答案
- 非车险销售人员基础培训系列第一讲走进非车险世界
- 比选申请文件模板
- pt1000热电阻分度表
评论
0/150
提交评论