admin 管理员组

文章数量: 1086019


2024年4月19日发(作者:php编程软件手机端)

第32卷第6期 

2010年12月 

武汉理工大学学报・信息与管理工程版 

JOURNAL OF WUT(INFORMATION&MANAGEMENT ENGINEERING) 

Vo1.32 No.6 

Dec.2010 

文章编号:1007—144X(2010)06—0930—04 

文献标志码:A 

XML文档到关系数据库映射的实现 

彭其泽 ,叶 锋 ,肖金生 

(1.武汉理工大学汽车工程学院,湖北武汉430070;2.江汉大学数学与计算机学院,湖北武汉430056) 

摘要:采用以结构为中心的映射方法,抽取XML文档中每个节点的名称、类型、路径和取值等信息,并利用二 

叉树存储,在其后的遍历过程中,将每个节点的信息以记录的形式存储在表Document之中,从而实现了XML文 

档到关系数据库的映射。该映射过程不依赖XML DTD或Schema,具有通用性,且算法简单,易于实现。 

关键词:XML;关系数据库;数据库映射 

中图分类号:TP391 DOI:10.3963/j.issn.1007—144X.2010.06.019 

可扩展的标记语言(extensible markup lan. 

部分可看作树上的一个节点。XML文档树的节 

guage,XML)具有可扩展性、自描述性等特点,使 点类型可分为7种_1 ,包括根、元素、属性、文本、 

其成为应用问交换数据的主要标准之一,但受其 

注释、处理指令和命名空间。在实现XML文档映 

自身的结构特征的限制,使得其查询、更新数据的 

射为关系数据库的过程中,笔者只关注其中的根、 

能力较低。目前常用的解决方法是将XML文档 

元素、属性和文本等4类节点。需要指出的是,尽 

映射为关系数据库,将XML数据存储在关系数据 管属性节点不是其所描述的元素节点的子节点, 

库之中,利用成熟的关系数据库技术对其进行管 但考虑到属性节点在XML文档设计过程中可变 

理,以提高存储和查询效率 』。 

换为子元素节点来代替,故笔者在构造XML文档 

目前,将XML映射为关系数据库有两种方 

树时,把属性节点作为其所描述的元素节点的子 

法 J。其一是以模式为中心的映射方法,利用 

节点进行处理,但采用标志位对这两类节点进行 

模式如XML DTD或Schema实现XML文档到关 区分。在笔者的表示方法中,把属性作为其所描 

系数据库的转换。首先,将DTD或Schema映射 述的元素的子节点,将属性的取值作为文本节点 

为关系模式;然后遍历XML文档,将提取的数据 处理,称之为属性文本。如<book shippedBy: 

插入到相应的关系之中。但这些映射方法需考虑 

sl”>中shippedBy属性的取值“s1'’称作为属性 

XML DTD或Schema自身的语义约束,否则映射 文本。笔者把介于起始标记和结束标记之间且其 

所得到的关系模式会丢失原有的约束关系。而 

问不再包含其他起始标记和结束标记的文本称为 

XML DTD或Schema蕴含的语义约束十分丰富, 

元素文本。如<duration>1 days</duration>, 

建立通用的映射方法也较困难。此外,大量XML 

在起始标记<duration>与结束标记</duration> 

文档没有对应的XML DTD或Schema。其二是以 

之间的“1 days”称作为元素文本。 

结构为中心的映射方法,其实现依赖于XML文档 

以图1所示的XML文档为例,其所对应的树 

的结构,并不依赖于XML DTD或Schema。 

形结构如图2所示。 

笔者采用了以结构为中心的映射方法,并采 

在图2中,椭圆为元素节点;矩形为元素文本 

用单一表Document(No,name,type,path,value)存 

节点;三角形为属性节点;五角形为属性文本节 

储了根、元素、属性和文本等4类节点,从而实现 点。对于图2中每个节点编程实现时采用的数据 

了XML文档到关系数据库的映射。 

结构如下: 

Struct node 

1创建XML文档树 

 {

XML文档可看作一棵文档树,文档中的每一 

Int No; 

收稿日期:2010—05—14. 

作者简介:彭其泽(1964一),男,湖北潜江人,武汉理工大学汽车工程学院讲师 

第32卷第6期 彭其泽,等:XML文档到关系数据库映射的实现 931 

图1 XML文档示例 

图2 XML文档树 

String name; 

String type; 

String value; 

String path; 

Struct:l:lChild; 

Struct rBrother; 

在Struct node结构中,name为节点的名称; 

type为节点类型,其取值可为Root(根)、Element 

(元素)、Attirbute(属性)、Text(文本);No为节点 

编号,是对XML文档树进行前序遍历时所访问节 

点的顺序号,在遍历时填写其值。当节点类型取 

值为根、元素和属性时,nⅡ胱分别存储根、元素和 

属性的名字,value取值为NULL;当节点类型取值 

为文本时,value取值为该节点的文本值,如果其 

父节点是元素节点,nam ̄取值为#elemText,如果 

其父节点是属性节点,name取值为@attrText。 

path用于存储节点的路径信息,以图2为例,当节 

点为根节点时,path的值为“\bookstore”;当节点 

为非根节点时,path存储从根到该节点的路径,如 

图2中的元素文本节点Java,path为“\bookstore\ 

book\#”,表示Java是根节点bookstore的子节点 

book的元素文本节点。由于元素文本节点没有 

名称,笔者用#表示其名称。同样,属性文本节点 

也没有名称,用@表示其名称。如属性文本节点 

sl,path为“\bookstore\shipping\shipID\@”,表示 

s1是属性shipID的取值,且shiplD是根节点 

bookstore的子节点shipping的属性。 

为了便于实现,笔者采用二叉树存储结构存 

储XML文档树,称之为XML文档二叉树,即将 

XML文档树采用孩子兄弟法存储为一棵二叉树, 

图2所示的XML文档树对应的二叉树如图3所 

示。值得注意的是,建立一棵XML文档二叉树并 

不采用XML文档树作为中间过程,而是直接以 

XML文档作为输入建立而成。创建XML文档二 

叉树算法如下: 

图3 XML文档二叉树表示 

(1)扫描XML文档,获取其根,创建XML文 

档二叉树的根节点。 

(2)若XML文档的根存在属性,则获取第一 

个属性,创建该属性节点,作为XML文档二叉树根 

节点的左孩子节点;获取其属性值文本,创建该属 

性文本节点,作为第一个属性节点的左孩子节点。 

(3)如果XML文档的根还存在其他属性,从 

二叉树根节点的左孩子节点(如果根节点存在属 

性节点的话,那么二叉树根节点的左孩子节点是 

第一个属性节点)出发,一直沿右孩子节点路径 

行进,直到某节点的右孩子节点为空,则指定该节 

点为操作节点。获取XML文档的第二个属性,创 

建该属性节点,把该属性节点作为操作节点的右 

孩子节点,并指定该节点为操作节点;获取其属性 

值文本,创建该属性文本节点,作为操作节点的左 

孩子节点。 

(4)按照步骤(3),在XML文档二叉树中建 

立根节点的所有属性及属性值节点。 

(5)如果XML文档的根是一个空元素节点, 

则算法结束,否则转步骤(6)。 

(6)如果XML文档的根不包含子元素,即 

XML文档的根只包含文本,则创建元素文本节 

点。如果XML文档二叉树的根节点左孩子为空, 

则将该元素文本节点作为二叉树根节点的左孩子 

节点,否则从二叉树根节点的左孩子节点出发,一 

直沿右孩子节点路径行进,直到某节点的右孩子 

932 武汉理工大学学报・信息与管理工程版 2010年l2月 

节点为空,并指定该节点为操作节点,将所创建元 

表1中第2行所示元组(2,shipping,Ele— 

ment,\bookstore\shipping,NULL)表示shipping是 

素文本节点作为操作节点的右孩子节点,算法结 

束。否则,转步骤(7)。 

(7)访问XML文档根的第一个子元素,创建 

该节点。 

(8)XML文档根的第一个子元素是XML文 

档树的一棵子树根节点,故按照步骤(2)~步骤 

(6)构建XML文档根的第一个子元素所对应的 

个元素,是根元素bookstore的一个子元素。第 

3行所示的元组(3,shipplD,Attribute,\bookstore\ 

shipping\shiplD,NULL)表示shipID是一个属性, 

是根元素bookstore的子元素shipping的属性。第 

4行所示的元组(4,@attrText,Text,\bookstore\ 

shipping\shiplD\@,s1)表示根元素bookstore的 

子二叉树。 

(9)如果二叉树根节点的左孩子节点为空, 

则将子二叉树的根节点作为二叉树根节点的左孩 

子节点,否则从二叉树根节点的左孩子节点出发, 

直沿右孩子节点路径行进,直到某节点的右孩 

子节点为空,并指定该节点为操作节点,将子二叉 

树的根节点作为操作节点的右孩子节点。 

(10)按照步骤(7)~步骤(9),依次访问 

XML文档根的所有子元素,建立相应的子二叉 

树,并插入XML文档二叉树之中。 

2 XML文档树映射到关系数据库 

笔者设计了一种存储模型,使用该模型可把 

格式良好的XML文档存储到关系数据库之中。 

该存储模型采用了一张名为Document的关系表, 

该表提供了XML文档存储在关系数据库系统中 

的全局视图,主要存储了每个节点的路径和处于 

叶子节点位置的文本节点的值。Document表的 

结构如下:Document(No,lzalrte,type,path,value)。 

其中,No、nalne和tpye的意义与Struct node中的 

成员变量No、rtal7 ̄和tpye的意义相同;path为节 

点在XML文档所对应的存储二叉树中的路径; 

value为文本节点的值,包括属性文本和元素文 

本。以图1所表示的XML文档为例,Document 

表如表1所示。 

表1 Document表 

子元素shipping的shipplD属性值为“s1”。 

笔者采用了固定的关系模式Document存储 

XML文档,因而映射的过程就是遍历XML文档 

二叉树并向Document中追加记录的过程。遍历 

xML文档二叉树采用前序遍历。其算法如下: 

(1)建立Struct node类型的栈S,并初始化。 

(2)建立指向Struct node类型的变量P,并指 

向XML文档二叉树的根节点。 . 

(3)如果P不为空或栈不为空,则转步骤 

(4),否则算法结束。 

(4)如果P不为空,则根据P所指向节点的 

信息构建一条Document表的记录,插入Docu— 

ment表。如果P为空,则转步骤(6)。 

(5)P指向的节点人栈,P指向其左孩子节 

点。转步骤(4)。 

(6)如果栈不为空,栈顶节点出栈,并使P指 

向该节点。 

(7)P指向其右孩子节点,转步骤(3)。 

3重构XML文档 

Document表中的每行代表一个节点,描述了 

节点的序号、名称、类型、路径和取值。 

由表1第1行可知,bookstore是重构的XML 

文档根元素。通过序号可以区分两个不同的节 

点,如表1第2行的记录(2,shipping,Element,\ 

bookstore\shipping,NULL)和第7行记录(7,ship— 

ping,Element,\b00kstore\shipping,NULL),通过节 

点的序号进行区分,代表两个不同的shipping节 

点,这两个节点都是根元素bookstore的子节点, 

故可重构出。通过路径和节点序号可判断节点的 

层次关系,如由表1的第3行和第4行可知,ship— 

ID是根bookstore的第1个名为shipping的子节 

点的属性,且属性值为s1。同样由表1的第5行 

和第6行可知,duration是根books(ore的子节点 

shipping的子节点,其包含的文本节点值为2 

days。由上述信息可重构出XML文档片段,如图 

4所示。 

因此,根据Document表中记录,顺序读取每 

第32卷第6期 彭其泽,等:XML文档到关系数据库映射的实现 933 

documents using relational datbasaes[J].ACM Trans— 

actions on Intemet Technology,2001,1(1):21—32. 

[3]YE F,XIAO J S.Mapping XML DTD to relational schema 

『C]//21309 Intemational Workshop on Database Technol— 

oy gand Application.Wuhan:[s.n.],2009:557—560. 

图4重构的XML文档片段 

[4]YE F.Converting XML DTD to database[C]//The First 

International Workshop on Intelligent Systems and Appli- 

个节点的序号、名称、类型、路径和取值信息,可重 

构XML文档。 

cations.Wuhan:[s.n.],20O9:2267—2270. 

[5] FUJIMOTO K,SHIMIZU T,YOSHIKAWA M,et a1.A 

mapping scheme of XML documents into relational da- 

4结论 

tabases using schema—based path identiifers[C]// 

Proceedings of the 2005 International Workshop on 

笔者通过解析XML文档,抽取XML文档中 

Challenges in Web Information and Integration(WIRI 

每个节点的名称、类型、路径和取值等信息,并采 

05).Tokyo:[s.n.],2005:82—90. 

用二叉树存储。在其后的遍历过程中,将每个节 

[6]XING G,ZHONG X H,DOUGLAS A.X2R:a system 

点的信息以记录的形式存储在表Document之中, 

for managing XML documents and key constraints u— 

从而实现XML文档到关系数据库的映射,并讨论 

sing RDBMS『C]//Proc.of ACMSE 2007.Winston— 

了由Document表重构XML文档的过程。 

Salem:[s.n.],2007:215—220. 

所设计的方法具有如下特点:①映射算法和 

[7] SOLTAN S,RAHGOZA M.A clustering—based scheme 

存储XML文档的关系Document结构简单;② 

f0r labeling XML trees[J1.International Journal of oCm- 

Document表保留了XML文档的数据顺序;③对 

puter Science and Network Security,2OO6(6):866—873. 

于XML文档中的根、元素、属性和文本等4类节 

[8]TATARINOV T,VIGLAS S,BEYER K,et a1.Storing 

and querying ordered XML using a relational datbaase 

点在映射中均被有效地存储在Document表中,没 

system[C]//Proceedings of the ACM SIGMOD Inter- 

有信息丢失;④Document表保持XML文档的结 

national Conference on Management of Data.Madison: 

构;⑤由Document表可迅速重构XML文档,重构 

[8.n.],2002:204—215. 

算法简单。 

[9]DWEIB I,AWADI A,ELRHMAN S F,et a1.Schema- 

less approach of mapping XML document into relation- 

参考文献: 

al database[C]//2008 IEEE 8th International Confer— 

ence on Computer and Information Technology.Syd— 

SHANMUGASUNDARAM J,SHEKITA E,KIERNAN J. 

hey:[s.n.],2008:167—172. 

A general techniques for querying XML documents u— 

[10]ZHAO Q J,SHU M,YANG S Q,et a1.Efifcient sto— 

sing a relational database system[J].SIGMOD Record. 

ring well—formed XML documents using RDBMS 

2001,30(3):20—26. 

[C]//2005 International Conference on Services Sys— 

[2] 

YOSHIKAWA M,AMAGASA T,SHIMURA T.XRel:a 

tems and Services Management.Chongqing:[s.n.], 

path—based approach to storage and retrieval of XML 

2005:1075—1080. 

Implement of Mapping XML Documen ̄to Relational Database 

PENG Qize,YE Feng,XIAO Jinsheng 

Abstract:How to effectively store and query XML data is an important subject of current research.A common solution is to map 

XML documents to relational database and manage the XML documents using the mature relational database technology to improve 

the storage and query efficiency.Structured~centric technique was adapted to extract node ifnormation of XML documents

such 

as name,type,path and value,and stored these pieces of node ifnormation using a binary tree.Then,in the following traversal 

process,each piece of node ifnormation was stored in the table document as a record,thereby achieving the work of mapping XML 

documents to relational database.The mapping process does not rely on XML DTD or Schema

and the algorithm is generic,simple 

nad easy to implement. 

Key words:XML;relational database;database mapping 

PENG Qize:Lect.;School of Automotive Engineering,WUT,Wuhan 430070,China. 

[编辑:王志全] 


本文标签: 节点 文档 属性 文本 映射