您的当前位置:首页正文

北京工业大学的毕设论文(1)

来源:帮我找美食网
北京工业大学毕业设计(论文)

摘 要

随着Internet的发展和人们对数据标准性、平台无关性的要求越来越高,XML(Extensible Markup Language)得到了广泛的应用,同时人们对于XML的存储方式提出了更高的要求。

本课题意在设计一种将XML数据存入关系数据库中的方法,并按照该方法开发一个XML数据装入关系数据库的软件。

本文首先对XML的基本知识进行介绍,随后讨论用关系数据库存储XML数据的原因,并对目前已经提出的一些XML文档在关系数据库中的存储方式进行研究讨论,在此基础上提出一个无模式的XML文档对于关系数据库的存储方法。这个方法将XML数据分为文档、元素、属性、文本四种节点,并将这四种节点映射为数据库中四个关系表。另外将DOM树中的元素节点关系映射为一个数据库关系表,这五个表是本课题中数据库设计的核心。五个表中包含的属性信息要求方便于DOM接口和SAX接口两种方式访问。

提出存储方法后,我们将利用这种存储方法开发一个关系数据库中XML数据装入系统。文章后半部分将详细说明该软件的需求分析、设计、具体开发细节以及测试。该软件的测试结果验证了这种存储方法能够有效的将无模式的XML文档存入关系数据库。

关键词:关系数据库、XML

1

北京工业大学毕业设计(论文)

Abstract

With the development of Internet and the people’s higher and higher requirement for data’s standardization and its independent of platform,XML(extensible markup language) is widely used,in the mean time the higher requirement for the storage of XML data is asked.

This research group designed a method to store XML data into RDB(Relational Data Base) of which the technology have been very mature and widely used.Then we developed an application that can store the XML data into RDB using this method.

At first this article will introduce basical knowledge of XML,and then discuss why store XML data using RDB.After that we’ll research and discuss the some methods for storing XML data into RDB that have been put forward.Based on them we’ll design a storage method from non-schema XML data to RDB.We classified XML data as four kind of nodes such as Document,Element,Atribute and Text.These four nodes are mapped to four tables in the RDB and we mapped the DOM Tree into a table too.The five tables is the core of the RDB design.The attribute information involved in the tables is required that both DOM and SAX interface can be easy to get information from the tables.

After giving the method we designed we’ll develop an application that can storing the XML data into RDB using that method.It’s requirement analyse,design details and test result well be described in the second half part of the article.The test result will show that using the storage method we can storing the non-schema XML data into the RDB effectively.

Key words:RDB(Relational Data Base),XML

2

北京工业大学毕业设计(论文)

目 录

摘 要 ............................................................................................................................................... 1 Abstract .......................................................................................................................................... 2 目 录 ......................................................................................................................................... 3 1 绪 论 ......................................................................................................................................... 5

1.1 课题背景及研究意义 ......................................................................................................................... 5 1.2 XML知识简介 ................................................................................................................................... 5

1.2.1 XML ............................................................................................................................................. 5 1.2.2 DTD和Schema ....................................................................................................................... 7 1.2.3 DOM........................................................................................................................................... 7 1.2.4 SAX ............................................................................................................................................ 8 1.3 基于关系数据库的XML存储技术 ............................................................................................... 9

1.3.1 现存的基于关系数据库的XML存储技术 .......................................................................... 10 1.3.2 一个模式驱动映射实例 ........................................................................................................ 10 1.4 作者的工作 ..........................................................................................................................................11 1.5 本章小结 ..............................................................................................................................................11

2 无模式映射的设计 ................................................................................................................... 12

2.1方案设计要求 ...................................................................................................................................... 12 2.2设计思想 .............................................................................................................................................. 12 2.3方案详细设计 ...................................................................................................................................... 12

2.3.1 E-R图(实体集中只画主码).................................................................................................. 13 2.3.2 实体集和联系 ......................................................................................................................... 13 2.3.3 设计方法与策略 ..................................................................................................................... 14 2.3.4 数据库基本表设计 ................................................................................................................. 16 2.3.5数据库优化 .............................................................................................................................. 16 2.3.6数据字典 .................................................................................................................................. 16 2.4 本章总结 ........................................................................................................................................ 18

3 关系数据库中XML装入系统 ................................................................................................... 19

3.1 任务概述 ............................................................................................................................................. 19 3.2 设计思想概述 ..................................................................................................................................... 19 3.3 需求规定 ............................................................................................................................................. 20

3.3.1 系统用例图 ............................................................................................................................. 20 3.3.2 用例事件流 ............................................................................................................................. 20 3.3.3 开发环境需求 ......................................................................................................................... 21 3.4 系统设计 ............................................................................................................................................. 21

3.4.1 系统体系结构 ......................................................................................................................... 21 3.4.2 序列图设计 ............................................................................................................................. 21 3.4.3 类设计 ..................................................................................................................................... 23 3.4.4 类关系图 ................................................................................................................................. 29 3.4.5 算法的实现策略 ..................................................................................................................... 30 3.4.6 异常处理 ................................................................................................................................. 31

3

北京工业大学毕业设计(论文)

3.5 系统测试 ............................................................................................................................................. 32

3.5.1 系统功能测试 ......................................................................................................................... 32 3.5.2 测试总结 ................................................................................................................................. 37 3.5.3 与模式映射XML-RDB装入系统的分析对比 ..................................................................... 38 3.6 本章小节 ............................................................................................................................................. 38

结 论 ............................................................................................................................................. 39 致 谢 ............................................................................................................................................. 40 参考文献 ....................................................................................................................................... 41

4

北京工业大学毕业设计(论文)

1 绪 论

1.1 课题背景及研究意义

XML(eXtensible Markup Language)是W3C于1998年提出的数据文件格式标准,它是SGML(Standard Generalize MarkupLanguage)的受限子集,但更简练易用。自被提出以来就由于其标准性、可扩展性和半结构化等特征得到了各方面的关注和使用。随着Internet的高速发展和人们对数据标准性、平台无关性的要求的提高,其应用也更加广泛。

目前XML文档的存储方式主要有三种: 1.作为普通文件存储于文件系统中 2.存储于专门为XML设计的XMLDB中 3.存储于关系数据库中

第一种方法由于文件系统在组织、管理、检索等各种数据服务功能上的固有不足而基本不被使用。后两种方法各有优缺点,但由于目前关系数据库管理系统在各种应用中仍占主体地位,因此如何更加合理地将XML文档进行转换并存储到关系数据库中具有很大的研究价值。

本课题主要研究如何有效的将XML数据存储到关系数据库中,并设计一种可以尽量避免或简化上述问题的存储方法,用此方法开发一个关系数据库中XML数据装入系统以验证该方法的正确性和可行性。

1.2 XML知识简介

这一节主要介绍XML的基本知识,包括XML概念、文档类型定义(DTD)、XML模式(Schema)、文档对象模型(DOM)、SAX(Simple API for XML)接口等等。

1.2.1 XML

XML即为可扩展的标记语言(eXtensible Markup Language)。XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。

XML是标记语言。理解XML,首先要理解标记。先说说HTML的标记(Markup),通俗地讲,它就是一种用来给文本添加标记的语言。在HTML里每个标志都是有确切含义的。例如,在HTML 中,标签〈B〉的含义是要求HTML浏览器将一段文本加粗表示,而标签〈CENTER〉

5

北京工业大学毕业设计(论文)

的含义是告诉浏览器将这段文本在一行的中间显示。而XML并非象HTML那样,提供了一组事先已经定义好了的标签,而是提供了一个标准,利用这个标准,你可以根据实际需要定义自己的新的置标语言,并为你的这个置标语言规定它特有的一套标签。准确的说,XML是一种源置标语言,它允许你根据它所提供的规则,制定各种各样的置标语言。

XML有两个先驱——SGML和HTML,这两个语言都是非常成功的标记语言,SGML的全称是标准通用化标记语言,它从80年代初开始使用。正如XML一样,SGML也可用于创建成千上万的标记语言,它为语法置标提供了异常强大的工具,同时具有极好的扩展性,因此在分类和索引数据中非常有用。目前,SGML多用于科技文献和政府办公文件中。SGML 非常之复杂,其复杂程度对于网络上的日常应用简直不可思议。不仅如此,SGML非常昂贵。HTML免费、简单,而且它获得了广泛的支持。它是一个非常简单的SGML语言,可以方便普通人的使用。1996年人们开始致力于描述一个置标语言,它既具有SGML的强大功能和可扩展性,同时又具有HTML的简单性。W3C于1998年2月批准了XML的1.0版本,一个崭新而大有前途的语言诞生了。

XML具有以下优点:

1.XML具有自说明性。XML能够应用于各种领域的原因,就是XML具有到目前为止其他方法所不具备的数据描述特点,控制信息不是采用应用软件的独有形式,而是采用谁都可以看得懂的标记形式来表现,所以XML最适合作为数据交换的标准,这也是 XML受人关注的原因。允许各种不同的专业(如音乐、化学、数学等)开发与自己的特定领域有关的标记语言。这就使得该领域中的人们可以交换笔记、数据和信息,而不用担心接收端的人是否有特定的软件来创建数据。

2.XML具有通用性。由于XML是非专有的并易于阅读和编写,就使得它成为在不同的应用间交换数据的理想格式.XML使用的是非专有的格式,不受版权、专利、商业秘密或是其他种类的知识产权的限制。XML的功能是非常强大的,同时对于人类或是计算机程序来说,都容易阅读和编写。因而成为交换语言的首选。

此外,相对于HTML,XML具有先天的优越性。为了自己的浏览器增加一些特殊的显示效果,HTML加入了一些特殊的标记。日益增多的标签不但使HTML越来越庞大,浏览器的开发越来越复杂,还降低了不同浏览器之间的兼容性。尽管HTML的标签越来越多,其显示力却还远远不够。如果你希望非常精确地表现一些你自己的数据,可能你需要一些现在在HTML中尚不存在的标签。现在HTML内部结构的条理性越来越差。你写的HTML文件,甚至是那些专门的所见即所得工具自动生成的HTML文件,可能在语法上会错误百出,不过没关系,浏览器照样能读它。 现在有了XML,你终于可以自由地制定你自己的置标语言,而不必再念念不忘微软、 Netscape、W3C的首肯了。实际上,现在许多行业、机构都利用XML定义了自己的置标语言。

6

北京工业大学毕业设计(论文)

1.2.2 DTD和Schema

DTD是一种保证XML文档格式正确的有效方法,可以比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。一个DTD文档包含:元素的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或符号规则。DTD文件也是一个ASCII的文本文件,后缀名为.dtd。例如:myfile.dtd。

由于DTD存在不少缺陷,比方说:DTD是基于正则表达式的,描述能力有限;DTD没有数据类型的支持,在大多数应用环境下能力不足;DTD的约束定义能力不足,无法对XML实例文档作出更细致的语义限制;DTD的结构不够结构化,重用的代价相对较高;DTD并非使用XML作为描述手段,而DTD的构建和访问并没有标准的编程接口,无法使用标准的编程方式进行DTD维护。因此针对这些缺点,设计了XML Schma。

XML Schema如同DTD一样是负责定义和描述XML文档的结构和内容模式。它可以定义XML文档中存在哪些元素和元素之间的关系,并且可以定义元素和属性的数据类型。XML Schema基于XML,没有专门的语法;XML可以象其他XML文件一样解析和处理;XML Schema支持一系列的数据类型(int、float、Boolean、date等);XML Schema提供可扩充的数据模型;XML Schema支持综合命名空间;XML Schema支持属性组。

1.2.3 DOM

DOM Document 是以层次结构组织起来的节点,或信息片段,的集合。这种层次结构允许开发者浏览树来查找特定信息。通常,分析结构需要在完成任何工作之前装入整个文档并且装入层次结构。

由于 DOM 是基于信息的层次结构,因此它被称为是基于树的。

另一方面,DOM 还提供了一个 API,该 API 允许开发者为创建应用程序而在树的任何地方添加、编辑、移动或除去节点。

DOM 基本的节点类型

XML 中最常见的节点类型:

1. Node: DOM 基本的数据类型。 2. Element: 元素

3. Attr: 一个元素的属性。 4. Text: 文本 5. Document: 代表整个 XML 文档。一个 Document 对象通常也被称为一棵 DOM 树(根)。

较不常见的节点类型:CData、注释、处理指令和文档片段:

1. CData:“字符数据”的缩写

2. 注释:注释包含有关数据的信息,通常应用程序会忽略它们。

7

北京工业大学毕业设计(论文)

3. 处理指令:PI 是专门针对应用程序的信息。

4. 文档片段:为了形成良好的格式,文档只能有一个根元素。有时,必须临时创建几组元素,这些元素不是满足需求所必要的。 下面文档片段:

Silver Show Saddle, 16 inch 825.00 1

Premium Cinch 49.00 1

对应DOM树(元素节点)如图: GOODS #DOCUME

NAME ITEM ITEM

PRICE QTY 文档片段的DOM树示例图

NAME PRICE QTY 1.2.4 SAX

读取和操纵 XML 文件的标准方法是 DOM(“文档对象模型”)。遗憾的是,这种方法需要读取整个文件并将它存储到树结构中,因而效率不高、缓慢,并且会过度使用资源。对于极其大的文档,装入整个文档并对该文档进行解析会很慢且占用大量资源,所以要用

8

北京工业大学毕业设计(论文)

其它方式来处理数据。一些基于事件的模型,如 Simple API for XML(SAX),是工作在数据流之上,在数据流经过时对其进行处理。。

SAX 允许正在读取文档时处理该文档,这避免了在采取操作之前需要等待存储文档的所有内容,但它不允许开发者实际更改原始文档中的数据

SAX 是由 XML-DEV 邮件列表的成员开发的,Java 版本由 David Megginson 维护。他们的目的是提供一种更自然的方法来使用 XML,这种方法不会涉及到使用 DOM 的那种开销。

结果是基于事件的 API。解析器将事件(譬如,元素的开始或结束)发送给处理信息的事件处理程序。然后,应用程序自己可以处理数据。虽然原始文档保持不变,但 SAX 提供了操纵数据的方法,然后会将该方法导向另一个过程或文档。

对于 SAX,没有官方的标准;万维网(W3C)或其它官方组织不维护 SAX,但在 XML 社区中,它是一个事实上的标准。

SAX 分析经过其的 XML 流。考虑以下 XML 代码片断: UNIX color

一般情况下,SAX 处理器分析这段代码将生成以下事件: Start document

Start element (samples) Characters (white space) Start element (server) Characters (UNIX) End element (server) Characters (white space) Start element (monitor) Characters (color) End element (monitor) Characters (white space) End element (samples)

1.3 基于关系数据库的XML存储技术

本节将研究并讨论现有的基于关系数据库的XML存储方法。

9

北京工业大学毕业设计(论文)

1.3.1 现存的基于关系数据库的XML存储技术

基于关系数据库的XML存储技术的核心是XML与关系数据库之间的数据映射技术,目前存在多种映射方法,根据是否使用XML模式可分为两类::

1. 模式驱动映射 2. 无模式映射

XML模式定义了XML文档的词汇表、逻辑结构和允许值,利用模式可以对XML实例文件的有效性进行验证。模式驱动映射是以XML模式为基础的映射,包括DTD(文档类型定义)和XML Schema两种方式,其广泛适用于电子商务、数据交换和系统集成等领域的面向数据处理的XML文档,如产品订单、发票、时刻表等。他的优点是模式驱动映射的过程中不易丢失结构信息,能较好的保证数据的正确性和完整性。现有的模式驱动映射方法很多,下一节将通过一个实例来介绍模式驱动映射是如何实现的。

由于模式驱动映射要对模式进行解析,其转换过程要比无模式映射复杂的多。而且在实际应用中,尤其是广阔的互联网中,大多数的XML文档都没有DTD或Schema,或者DTD和Schema不易随文档保存,这是模式驱动映射面临的一个无法解决的困难,因此模式驱动映射适用于那些已经发展的比较规范的领域,而无模式映射技术的应用更为广泛。因此作者最终选择设计一种无模式映射来完成本课题的任务,这将在文章的第二章中详细说明。

1.3.2 一个模式驱动映射实例

这个实例的映射方法叫做对象-关系映射。首先将XML模式转化为对象模型,然后再将对象模型映射为关系模型。在讨论之前我们先介绍两个概念:

简单元素:只包含文本,不包含属性和嵌套元素的元素 复杂元素:有属性或包含嵌套元素的元素

下面讨论基于对象-关系模型的XML-RDB的基本映射原理,为了描述简单,XML模式采用DTD进行定义。

1)设有如下DTD:

模式—〉对象的转化: 复杂元素A—〉类A

简单元素B、C—〉A的成员变量 对象—〉关系的映射 类A—〉表A

B、C—〉表A中的列B、C

10

北京工业大学毕业设计(论文)

综上创建关系:RA(PK_A,B,C),PK_A是RA的主键(它是自动生成的),列B和C的值是他们的PCDATA。

2)设有如下DTD:

这里采用外键捕获元素A和C及A和B之间的父子关系,因此可创建关系RA(PK_A,D),RB(PK_B,FK_AB,B)及RC(PK_C,FK_AC,E),其中FK_AB和FK_AC分别是RB和RC关于RA的外键。RB的主键是(PK_B,FK_AB), RC的主键是(PK_C,FK_AC)。根据关系理论:在这个DTD中,A只允许出现一次,所以A和C是1:1的关系,FK_AC可建立在RA和RC任一关系中(此处建立在RC中);B可出现多次,即A和B是1:N的关系,FK_AB应建立在RB中。假如A也可以出现多次,即A和B为M:N的关系,则可创建关系RAB(FK_A,FK_B),其中FK_A和FK_B分别对应RA和RB的PK_A和PK_B。

3)对于复杂元素的属性和文本,处理方法与简单元素相同,作为复杂元素的属性列处理。

1.4 作者的工作

本文工作就是设计一个XML数据到关系数据库的无模式映射方案,这将在文章的第二部分详细讲解。然后利用这个方案开发一个关系数据库中XML数据装入系统,并利用这个软件测试该方案的有效性和性能,这是第三部分要叙述的内容。

1.5 本章小结

本章阐述了课题背景及其研究意义,讲解了XML的基本概念和知识,研究讨论了

现今基于关系数据库XML存储的主要方法并制定了下面需要完成的任务及相应的研究思

路。

11

北京工业大学毕业设计(论文)

2 无模式映射的设计

2.1方案设计要求

设计必须满足以下要求:

1. 能够将无模式的XML数据按一定的结构存入关系表中 2. 数据库设计要支持DOM和SAX两种接口访问 3. 易于实现关系数据库到XML的反向转换 4. 具有跨平台性

2.2设计思想

将XML文档中的数据信息全部存入关系表是最基本的要求,要满足这个要求,就要分析文档中的基本数据类型(元素,属性,文本等),将这些类型的节点映射为数据库实体集。为了支持DOM和SAX两种接口访问,就需要分析这两种接口在访问XML文档时需要什么样的信息,这些信息一定要设计到数据库中。比方说,DOM接口需要节点的父子关系,需要兄弟元素节点的顺序,需要节点的层数。SAX接口需要元素的起始位置和结束位置,这些信息都需要存到数据库中,才可以方便两个接口对数据库的访问。综上所述,数据库设计思路就是将文档中不同类型的节点作为数据库实体集,节点之间的关系作为联系进行初步设计,然后再进行数据库优化。详细设计方案将在下一节介绍。

2.3方案详细设计

根据XML数据节点类型,分别将文档节点、元素节点、属性节点和文本节点映射为四个表:DOCUMENT,ELEMENT,ATTRIBUTE,TEXT。另外将元素节点之间的关系(父子,兄弟)映射为一张全局关系表—FULLRELATION。对于CDATA数据,将其看作TEXT数据处理,存入TEXT表中。而注释语句将被忽略。

12

北京工业大学毕业设计(论文)

2.3.1 E-R图(实体集中只画主码)

DOCID ELEID DOCUMENT DOCID DOCID belong DOCID ATTRIBUTE belong ELEMENT belong TEXT ATTID beparent TEXTID

数据库E-R图

2.3.2 实体集和联系

1. DOCUMENT实体集:文档主体 属性:

DOCID:DOCUMENT唯一标识 URI:文档路径

VERSION:文档版本

ENCODING:文档的字符码格式 2. ELEMENT实体集:元素主体 属性:

ELEID:元素的文档序(深度遍历DOM树的元素序号) DOCID:元素所在文档的ID NAME:元素名称

BEGIN:元素在文档中的起始位置 END:元素在文档中的结束位置

13

北京工业大学毕业设计(论文)

SEQUENCE:同层同父亲元素的顺序 LAYER:元素所在层

3. ATTRIBUTE实体集:属性主体 ATTID:属性唯一标识 ELEID:属性所属元素ID DOCID:属性所属文档ID NAME:属性名称 VALUE属性值

4. TEXT实体集:文本主体 TEXTID:文本唯一标识 ELEID:文本所属元素ID DOCID:文本所属文档ID

CONTENT:文本内容

5. 父子联系:元素之间的父子关系—多个元素对应一个父亲 属性:

ELEID:元素ID

DOCID:元素所在文档ID PARENTID:元素父亲ID

2.3.3 设计方法与策略

四个实体集中最重要且最复杂的就是元素(ELEMENT)实体集,由于存储要便于DOM和SAX两种接口访问,因此需要为元素添加除名称之外的属性,下面分别说明这些属性的设计思路。

BEGIN和END:元素在文档中的起始和结束位置,这是为了实现SAX接口能过顺序访问文档而提供的属性,例如下面的文档,我们将在元素的开始标志的左边括号中标出Begin数,在元素的结束标志的右边括号中标出END数。

(1)

(2)

(3)TCP/IP Illustrated(4) (5)Bill(6)

(7)Addison-Wesley(8) (9)65.95(10) (11)

(12)

(13)Advanced Programming in the Unix environment(14) (15)Tom(16)

14

北京工业大学毕业设计(论文)

(17)Addison-Wesley(18) (19)65.95(20) (21)

(22)

(23) Data on the Web(24) (25)Tony(26)

(27)< publisher> Addison-Wesley (28) (29)50(30) (31) (32)

ELEID、SEQUENCE、LAYER:这三个属性是为了描述DOM树结构而设计的,ELEID表示元素的文档序,SEQUENCE表示同层同父亲节点的元素的顺序,LAYER表示元素所在层,它们与父子联系中的PARENTID共同为DOM接口的访问服务。

文档序指在DOM树中从左至右深度遍历元素节点时元素的序号,对于下面的DOM数,将元素的文档序标记在节点旁边:

#DOCUMEGOODS 1 ITEM 2 ITEM 6 NAME PRICE QTY NAME PRICE QTY

3 4 5 7 8 9

文档序示例图

为了更加清晰的区分DOM接口和SAX接口的访问,作者在设计数据库基本表时将BEGIN和END属性设置在ELEMENT表中,而将SEQUENCE、LAYER和PARENTID属性设置在FULLRELATION关系表中,这样SAX接口访问ELEMENT表,而DOM接口访

15

北京工业大学毕业设计(论文)

问FULLRELATION表。

2.3.4 数据库基本表设计

1. 文档表:DOCUMENT(DOCID,URI,VERSION,ENCODING) 数据约束: 唯一:URI

2. 元素表:ELEMENT(ELEID,DOCID,NAME,BEGIN,END) 数据约束: 外键:DOCID 3. 属性表:ATTRIBUTE(ATTID,DOCID,ELEID,NAME,VALUE) 数据约束:

唯一:(DOCID,ELEID)

外键:ELEMENT 的主键(DOCID,ELEID)

4. 文本表:TEXT(TEXTID,DOCID,ELEID,CONTENT) 数据约束:

唯一:(DOCID,ELEID)

外键:ELEMENT 的主键(DOCID,ELEID)

5. 全局关系表:FULLRELATION(ELEID,DOCID,LAYER,SEQUENCE,PARENTID) 数据约束:外键:ELEMENT 的主键(DOCID,ELEID)

2.3.5数据库优化

根据查询使用频率为数据库添加索引: Document:(URI)

Element:(DocID EleID)

Element (Begin DocID EleID) Element (End DocID EleID) Attribute:(DocID EleID) Text:(DocID EleID)

FullRelation:(DocID EleID)

2.3.6数据字典

DOCUMENT表: 属性 数据类型 16

数据长度 约束 北京工业大学毕业设计(论文)

DOCID URI VERSION ENCODING

ELEMENT表: 属性 ELEID DOCID NAME BEGIN END

ATTRIBUTE表: 属性 ATTID DOCID ELEID NAME VALUE

TEXT表: 属性 TEXTID DOCID ELEID CONTENT 数据类型 NUMBER NUMBER NUMBER VARCHAR 17

NUMBER VARCHAR VARCHAR VARCHAR 10 50 50 50 主键 唯一 数据类型 NUMBER NUMBER VARCHAR NUMBER NUMBER 数据长度 10 10 50 10 10 主键 约束 外键 数据类型 NUMBER NUMBER NUMBER VARCHAR VARCHAR 数据长度 10 10 10 50 50 约束 主键 唯一 外键 数据长度 10 10 10 500 约束 主键 唯一 外键 北京工业大学毕业设计(论文)

FULLRELATION表: 属性 ELEID DOCID LAYER SEQUENCE PARENTID

数据类型 NUMBER NUMBER NUMBER NUMBER NUMBER 数据长度 10 10 10 10 10 主键 约束 外键 2.4 本章总结

本章详细描述了作者为XML-RDB的无模式映射设计的方案以及如此设计的原因。下一章将介绍作者利用此方案开发的关系数据库中XML数据装入系统。

18

北京工业大学毕业设计(论文)

3 关系数据库中XML装入系统

3.1 任务概述

本次开发任务是编写一个面向用户的关系数据库中XML数据装入系统,用户在软件的界面中使用XML数据装入功能从而将本地硬盘中的XML文档装入ORACLE数据库服务器中。其中的XML-RDB数据映射部分要用上一章设计的方法设计数据库,并通过对软件的测试验证该方法的性能。

3.2 设计思想概述

从用户的角度出发分析,用户需要一个易于操作的界面,因此界面是联系用户与应用程序的桥梁,它是从用户的角度出发系统结构的第一层。界面得到用户请求后要通知后台程序处理,这种程序处理模块形成了系统结构的第二层,程序处理模块处理了用户的输入后要将结果存入数据库中,并将数据库装入情况发送给界面,由界面通知用户数据库的装入结果。因此他是内存中的数据与数据库之间的桥梁。综上所述,作者认为采用面向对象的程序设计方法比较适合此系统的设计。可以将系统的界面模块设计为界面类,程序处理模块设计为控制类,内存中的一些中间结果设计为存储类。这样就形成了界面类对象接收输入信息,由存储类对象暂存,这些信息被控制类对象取出、运算,最终得到的结果再存入存储类对象,再由控制类对象将这些结果存入数据库中。详细设计情况将在下面几节描述。

19

北京工业大学毕业设计(论文)

3.3 需求规定

3.3.1 系统用例图设计

装入文件用户查看帮助数据库退出系统

系统用例图

3.3.2 用例事件流

用户装入文件事件流:

1.用户按装入文件按钮,用例开始。 2.系统提示用户选择文件。 3.用户选择文件并提交。

A. 若文件读取失败系统提示用户并返回1

4.系统读取并解析文件,将解析结果存入数据库。

A. 若存入失败系统提示用户并返回1 5.系统提示用户存储成功,用例结束。

用户查看帮助时间流:

1.用户按帮助按钮,用例开始。 2.系统显示帮助提示

20

北京工业大学毕业设计(论文)

3.3.3 开发环境需求

编程语言:JAVA 编译环境:Eclipse 数据库环境:Oracle

设计作图工具:Ralation Rose2003

3.4 系统设计 3.4.1 系统体系结构

XML装入系统 解析 装入 XML文件 数据库 系统体系结构图

3.4.2 序列图设计

用户装入文件事件流的序列图设计:

1.角色:用户,数据库

2.对象:界面,文件对象,文档对象,元素对象,属性对象,文本对象,控制对象,元素链表,属性链表,文本链表 3.交互消息:

(1) 用户进入界面选择装入文件功能 (2) 界面提示用户选择文件 (3) 用户选择一个文件并提交 (4) 界面创建一个文件对象

21

北京工业大学毕业设计(论文)

(5) 控制对象解析文件(利用DOM)

(6) 控制对象创建文档对象,元素对象表,属性对象表,文本对象表 (7) 控制对象将解析出来的元素对象存入元素链表 (8) 控制对象将解析出来的属性对象存入属性链表 (9) 控制对象将解析出来的文本对象存入文本链表 (10) 控制对象将存储在内存中的对象存入数据库 (11) 控制对象向界面发消息通知存储是否成功 (12) 界面向用户显示存储是否成功

: 用户pressButton界面文件控制对象文档对象元素对象属性对象文本对象元素链表属性链表文本链表 : 数据库tellUserToChooseFilechooseAndSubmitcreateFileparseMassegeparseFilecreateDocumentcreateElementputElemIntoElemListcreateAttributeputAttrIntoAttrListcreateTextputTextIntoTextListstoretellResult

数据装入的序列图

22

北京工业大学毕业设计(论文)

3.4.3 类设计

1.界面类:界面利用Javax.swing包中的类设计

2.存储单元类:存储单元的各类只实现基本的存储功能,不含除set和get以外的放法。 (1)文件类:调用java.io.file类存储文件 (2)文档类(MyDocument):对应数据库中DOCUMENT表

属性说明: String uri:文档路径

String version:文档版本 String encoding:字符码格式

方法说明:每个属性有get和set方法

void ToString(): 打印对象信息,供测试使用

MyDocument类

(3)元素类(MyElement):对应数据库中ELEMENT表和FULLRELATION表

属性说明:String name:元素名

int begin:元素在文档中的起始位置 int end:元素在文档中的结束位置

int layer:元素所在层 int sequence:同层元素位置 MyElement parent:元素父节点 MyDocument doc:元素所在文档 int order:文档序 int hash:对应的DOM树中Element类对象的hash值 方法说明:每个属性有get和set方法 void ToString():

23

北京工业大学毕业设计(论文)

打印对象信息,供测试使用

MyElement类 (4)属性类(MyAttr):对应数据库中的ATTRIBUTE类

属性说明: String name:属性名称 String value:属性值 MyElement elem:所属元素 MyDocument doc:所在文档 方法说明:每个属性有get和set方法 void ToString(): 打印对象信息,供测试使用

24

北京工业大学毕业设计(论文)

MyAttr类

(5)文本类(MyText):对应数据库中的TEXT表

属性说明:String content:文档内容

MyElement elem:所属元素 MyDocument doc:所属文档 方法说明:每个属性有get和set方法 void ToString(): 打印对象信息,供测试使用

MyText类

(6)链表类:调用java.util.LinkedList类来存储元素表,属性表,文本表

3.控制单元:

(1)DomControl:此类为程序中最重要控制类,所有核心算法都在这个类中。它的功能是将解析XML文件,生成DOM树,通过对树操作得到需要的节点信息并

25

北京工业大学毕业设计(论文)

将它们存入链表中,以作为后面数据存储的输入。

属性: org.w3c.dom.Node doc:树根节点

DbControl dbc:数据库控制类对象 MyDocument:mydoc:文档对象 LinkedList myElemList:元素链表 LinkedList myAttrList:属性链表 LinkedList myTextList:文本链表

方法:

boolean createDom(String uri)

此方法以文档路径(URI)为参数解析XML文件,创建dom树,

将树的根节点赋给属性doc。解析成功返回true,失败返回false。

void deepVisit()

此方法通过对DOM树深度遍历得到元素的文档序、begin、end信息,并将这些信息存到相应的存储单元中。

void visit()

此方法层遍历dom树,将得到的相应的节点信息存入创建的存储单元对象中,在调用deepVisit()方法深度遍历树,再将相应的信息存入这些存储单元对象中,最后把这些对象分别存入属性mydoc,myElementList,myAttrList,myTextList。

boolean hasWord(String s)

此方法判断参数s是否含有非空格和换行符的其他字符,又返回true,没有返回false。

MyDocument getMyDocument(org.w3c.dom.Node doc) 此方法将Dom树中的文档节点转换为Mydocument对象

MyElement getMyElement(org.w3c.dom.Node element) 此方法将Dom树中的元素节点转换为MyElement对象

MyAttr getMyAttr(org.w3c.dom.Node attr)

此方法将Dom树中的属性节点转换为MyAttr对象

MyText getMyText(org.w3c.dom.Node text)

此方法将Dom树中的文本节点转换为MyAttr对象

26

北京工业大学毕业设计(论文)

DomControl类

(2)DBControl(数据库控制类)

属性: Connect con:数据库连接对象

Statement stmt:执行语句 ResultSet rs:结果集 方法:

boolean openDB()

打开数据库 boolean close() 关闭数据库

boolean proofDocumentUri(String uri)

验证文档是否存在,存在返回true,不存在返回false int queryMaxID(String column,String table) 查找表table中的列column的最大ID int queryDocumentID(String uri) 查找文档的DOCID值

boolean insertDoc(MyDocument doc) 在文档表中插入文档

boolean insertElem(MyElement elem) 在元素表中插入元素

boolean insertAttr(MyAttr attr) 在属性表中插入属性

boolean insertText(MyText text) 在文本表中插入文本

boolean insertFullRelation(MyElement met)

27

北京工业大学毕业设计(论文)

在全局关系表中插入行信息

DBControl类

28

北京工业大学毕业设计(论文)

3.4.4 类关系图

类关系图

29

北京工业大学毕业设计(论文)

3.4.5 算法的实现策略

程序中的算法主要集中在DomControl类中,下面就其中一些算法的实现进行说明。 1. 求文档序

只需对DOM树进行深度遍历即可得到,如下面DOM树,文档序标在节点旁边: #DOCUME

GOODS 1 ITEM 2 ITEM 6

NAME NAME PRICE QTY

3 4 5 7

文档序示例图 2. 根据DOM树求元素的begin和end值

PRICE 8 QTY 9 begin和end是为SAX服务的属性,利用SAX处理XML文档很容易得到,但由于程序使用DOM接口解析XML文档,所以必须利用DOM树得到begin和end值。方法就是设int型变量begin和end跟踪DOM树的深度遍历。如下图: #DOCUMENT

begin=1 GOODS end=18 begin=10

NAME

E begin=3 end=4 ITEM Begin=2 End=9 QTY begin=7 end=8 NAME begin=11 end=12 ITEM end=17 PRICE begin=5 end=6 PRICE begin=13 end=14 QTY begin=15 end=16 Begin、End示例图

30

北京工业大学毕业设计(论文)

该树对应文档即为: (1) (2) (3)……(4) (5)……(6) (7)……(8) (9) (10) (11)……(12) (13)……(14)

(15)……(16) (17) (18)

3. 求元素的sequence属性

squence表示DOM中同层同父亲的元素节点的顺序,维护一个队列对树进行层遍历即可,如下图:

#DOCUME

GOODS sequence=1

ITEM ITEM sequence=1 sequence=2

NAME PRICE QTY NAME PRICE QTY

sequence=1 sequence=2 sequence=3 sequence=1 sequence=2 sequence=3

Sequence示例图

3.4.6 异常处理

程序在三个地方需要进行异常的捕捉和处理,第一个是DomControl类中解析XML文档时有可能因为文档格式错误等原因导致解析失败,这时需要处理异常,系统要通知用户文档解析失败。第二个是DbControl中打开数据库时有可能数据库打开失败,这时需要处

31

北京工业大学毕业设计(论文)

理异常,系统要通知用户数据库打开失败。第三个是当数据库中已经存在要装入的信息而产生数据冲突时,需要处理异常,系统要通知用户数据已存在。

3.5 系统测试 3.5.1 系统功能测试

1.系统主界面

系统主界面示例图

2.帮助界面

32

北京工业大学毕业设计(论文)

帮助界面示例图

3.文档选择界面

文档选择界面示例图 4.因文档错误而导致装入失败

33

北京工业大学毕业设计(论文)

文档错误装入失败示例图

5.因数据已存在而导致装入失败

数据存在装入错误示例图

34

北京工业大学毕业设计(论文)

6.导入成功案例: 案例一:

导入一个小型文档:

Andrew S. Tanenbaum 48.00 元 Bruce Eckel 99.00 元

谭浩强 22.00 元

界面显示:

35

北京工业大学毕业设计(论文)

利用课题组同学设计的DOM和SAX访问程序访问存入的数据库信息:

36

北京工业大学毕业设计(论文)

案例二:

导入来自课题组的一个大型XML文档,该文档描述图书信息,顶层元素为,他的孩子元素是的孩子是的孩子是有孩子、<author>、<publisher>、<price>。<author>元素有孩子<first>和<last>。该文档的结构树有六层元素。第二层<book>有2000个同名兄弟节点。利用本系统将该文档信息装入数据库中,并利用课题组同学设计的DOM和SAX接口读取,读取结果证明系统成功的将该文档的全部信息装入了数据库。<p>3.5.2 测试总结<p>通过测试证明作者设计的XML-RDB无模式映射符合课题要求,尤其是为负责开发DOM和SAX接口的同学提供了完整的数据模型,作者利用这种映射方法开发的关系数据库中XML数据装入系统的性能也符合课题组的要求。<p>37<p>北京工业大学毕业设计(论文)<p>3.5.3 与模式映射XML-RDB装入系统的分析对比<p>本小节将对作者设计的XML-RDB映射方案与第一章介绍的基于模式映射的设计方案进行分析比较,两种方式主要有以下区别:<p>1.基于模式映射的存储方案无法存储兄弟元素节点的顺序信息,因此从数据库反向映射到XML文档时无法得到同层元素的顺序信息。无模式映射不存在这个问题。 2.由于模式映射方案以DTD或Schema为基础,对于不同模式的XML文档要建立不同的数据库来存储数据,无模式映射对于所有XML文档是通用的。<p>3.由于在互联网上大多数XML文档是无模式的,或者无法一直保存着它的DTD或<p>Schema,所以无模式映射的应用范围广,模式映射多运用于某些专门的领域。<p>3.6 本章小节<p>本章详细介绍了作者利用第二章设计的数据映射方案开发的关系数据库中XML数据装入系统的功能、设计以及测试结果。结果证明利用作者设计的XML-RDB数据映射方案能够有效的将XML数据存入关系数据库中,并且该方案支持DOM和SAX两种接口访问,易于实现关系数据库到XML的反向转换,具有跨平台性。<p>38<p>北京工业大学毕业设计(论文)<p>结 论<p>随着Internet的发展和人们对数据标准性、平台无关性的要求越来越高,XML(Extensible Markup Language)得到了广泛的应用,同时人们对于XML的存储方式提出了更高的要求。利用关系数据库存储XML数据适当两种普遍的方式之一,它的好处在于关系数据库技术已经十分成熟。XML与关系数据库的映射方式可分成两类:模式驱动映射和无模式映射。<p>本课题主要研究目前已经提出的将XML数据存储到关系数据库中方法,并设计一种存储方法,将无模式的XML数据按一定的结构存入关系表中。数据库设计要支持DOM和SAX两种接口访问,易于实现关系数据库到XML的反向转换,具有跨平台性,并按照此方法开发一个关系数据库中XML数据装入系统以验证该方法的正确性和可行性。<p>经过研究分析,作者设计了5个映射表,其中两个表对应元素节点的属性映射,其他三个表分别对应文档节点、属性节点和文本节点的属性映射。对应元素节点的两个表分别是针对DOM和SAX两个接口的访问而设计的。<p>作者按照该存储方法开发了关系数据库中XML数据装入系统,经测试证明,该系统的性能达到了课题提出的要求。<p>39<p>北京工业大学毕业设计(论文)<p>致 谢<p>在本次毕业设计中,我遇到了很多困难,得到了老师和许多同学的帮助。在我最终完成毕业论文时,我将向在整个毕业设计过程中帮助我的人表示由衷的感谢。<p>首先要感谢的是我的指导老师廖湖声老师,廖老师在整个毕业设计的过程中全程为我护航,当我遇到困惑时耐心的为我解答,从他那里学到的东西使我受益非浅。假如没有廖老师的指导恐怕我的毕业设计也不会这么顺利的完成。<p>第二要感谢做与我课题相关的开发的彭蕾同学,我们的密切合作使得工作事半功倍。 第三要感谢课题组的汤林、田春爽同学以及郑玉明老师,对于Oracle数据库并不熟悉的我在数据库开发过程中遇到许多困难,幸亏得到了他们的帮助才使我的开发能够进行下去。<p>感谢苏杭同学在我陷于算法困境时给与我的帮助,感谢金雪云老师为我们提供测试数据。<p>最后还要感谢高红雨老师在设备上为我提供的支持。<p>40<p>北京工业大学毕业设计(论文)<p>参考文献<p>[1] 肖冰.面向空间数据集成的XML数据源Wrapper 技术研究. 北京工业大学工学硕士论文,2005年5月<p>[2] 谈子敬,陈宇达,施伯乐. 基于模式的XML文档数据库存储. 小型微型计算机,2003年7月<p>[3] 周敖英,张龙,梁宇奇,邱越峰. 基于关系的XML数据存储. 计算机应用,2000年9月 [4] Igor Tatarinov,Stratis D. Viglas. Storing and Querying Ordered XML Using aRelational Database System. ACM SIGMOD 2002, June 4-6<p>[5] D. Florescu, D. Kossman. “Storing and Querying XML Data using a RDBMS,” IEEE Data Engineering Bulletin, Vol. 22, No. 3, 1999 [6] 刘源,姚淑珍. XML的关系化存储及与关系数据库的数据转换. 计算机工程与设计,2004年11月<p>[7] W3C. Extensible Markup Language 1.0, 2004. http://www.w3.org/TR/2004/REC-xml-20040204/<p>[8] W3C. Document Object Model (DOM) Level 2 Core Specification Version 1.0,2000,<p>http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113<p>[9] W3C. Xquery 1.0: An XML query language, 2003. http://www.w3.org/TR/xquery/<p>[10]方翔,李伟生.关系模式到XML模式的转换,计算机应用,2002<p>[11] 陈睿,林广艳. 利用关系数据库实现无模式XML数据管理平台.计算机工程与设计,2005年1月<p>[12] 于蕾. JAVA数据对象与XML的绑定研究与实现.大连理工大学硕士学位论文,2005年5月<p>[13] Birbeck, Mark等.XML高级编程. 北京: 机械工业出版社 ,2002 [14] 丘广华等. XML编程实例教程. 北京: 科学出版社, 2004<p>41<p> <div class="preview-ft"> <div class="preview-title"> <p style="color: red;"><strong>因篇幅问题不能全部显示,请点此查看更多更全内容</strong></p> <div class="model-fold-cover-bd"><a href="https://www.tang5.com/mluaok/nreieeuvaeo/" target="_blank"><span>查看全文</span><i class="iconfont icon-chakangengduo"></i></a></div> </div> </div> <script type="text/javascript" src="https://jss.banwoyixia.com/pc/wenzhang/detail_left.js"></script> </div> <div class="content_fy"> </div> </div> <script type="text/javascript" src="https://jss.banwoyixia.com/pc/wenzhang/detail_foot.js"></script> <script type="text/javascript" src="https://jss.banwoyixia.com/pc/share_right_gg1.js"></script> <script type="text/javascript" src="https://jss.huatuo6.com/pc/share_right_xgzx.js"></script> <script type="text/javascript" src="https://jss.banwoyixia.com/pc/share_right_gg2.js"></script> <script type="text/javascript" src="https://jss.huatuo6.com/pc/share_right_rmyd.js"></script> </div> <div class="n_right"> <script type="text/javascript" src="https://jss.banwoyixia.com/pc/share_cebian_gg1.js"></script> <script type="text/javascript" src="https://jss.huatuo6.com/pc/share_cebian_rmht.js"></script> <script type="text/javascript" src="https://jss.banwoyixia.com/pc/share_cebian_gg2.js"></script> <script type="text/javascript" src="https://jss.huatuo6.com/pc/share_cebian_rmtw.js"></script> <script type="text/javascript" src="https://jss.banwoyixia.com/pc/share_cebian_gg3.js"></script> <script type="text/javascript" src="https://jss.huatuo6.com/pc/share_cebian_wntj.js"></script> </div> </div> <div class="footer"> <p>Copyright © 2019-<span class="currentYear"></span> banwoyixia.com 版权所有 <br> <a style="color:#fff" href="https://beian.miit.gov.cn/" target="_blank">湘ICP备2023022004号-1</a></p> </div> <a href="#0" class="cd-top">Top</a> <script type="text/javascript" src="https://jss.banwoyixia.com/pc/foot_foot.js"></script> <script type="text/javascript"> jQuery(".focusBox").hover(function () { jQuery(this).find(".prev,.next").stop(true, true).fadeTo("show", 0.2) }, function () { jQuery(this).find(".prev,.next").fadeOut() }); jQuery(".focusBox").slide({mainCell: ".pic", effect: "fold", autoPlay: true, delayTime: 600, trigger: "click"}); </script> <script type="text/javascript"> $(function () { var _line = parseInt($(window).height() / 3); $(window).scroll(function () { if ($(window).scrollTop() > 75) { $('.i_menu').css({'position': 'fixed', 'top': '0'}) } else { $('.i_menu').css({'position': '', 'top': ''}) } ; }); }); </script> <script type="text/javascript"> const currentYear = new Date().getFullYear(); $('.currentYear').html(currentYear) </script> <script type="text/javascript" src="https://jss.huatuo6.com/pc/tj_foot.js"></script> </body> </html>