APP下载

一种基于XML Schema的XML文档到关系数据库的映射方法

2013-12-06

大众科技 2013年2期
关键词:子树关系数据库字段

贾 颖

(山东工商学院 计算机基础教学部,山东 烟台 264005)

XML是W3C组织推出的一种半结构化的、自描述的数据描述语言,目前已成为Web上数据表示的标准,并为各种跨平台、用不同编程语言编写的应用程序提供了数据交流与分享的工具,同时还成为各种异构数据(关系数据库、Excel数据表、文本文件)进行数据交换的中间桥梁。可以说,XML技术已经得到了非常广泛的应用和支持。

随着XML技术的广泛应用,XML文档大量涌现出来。然而,XML文档本身不是一个数据库[1],缺乏成熟数据库技术中关于并发访问、完整性约束、安全控制等关键技术。并且以文档方式存储的XML数据支持的关键字查询,查询方式简单,查询能力低,不能满足复杂条件查询的需要[2]。所以,XML文档在存储和查询机制上都缺乏系统支持。而关系数据库仍是目前为止最成熟的数据管理技术。所以,已经有很多学者对XML文档的关系数据库存储做出了研究,提出了结构映射和模式映射两种主要的方法。由于结构映射保留了 XML文档的结构和语义信息,成为了XML文档在关系数据库存储的主流技术。结构映射要分析XML文档的模式信息(DTD或XML Schema)。目前,基于XML Schema的结构映射方法中最具代表性的是Bohannon[3]的提出的P_Schema(Physical XML schema)。P_Schema是从XML Schema变化而来,将原始的XML Schema中的多值元素(元素属性maxOccurs为unbounded的元素)提取出来,生成同名的新类型,同时,在该元素的父元素中保留对该元素的引用。P_Schema可以直接转换为关系模式。然而,P_Schma仅进行了对多值元素的提取,没有考虑其它形式复杂元素的提取,如递归嵌套结构、被不同父元素重复引用的元素、可选元素的映射问题,本文将进一步探讨对这些类型元素的映射。

1 P-schema的改进

改进的P_Schema模式将XML文档存储到关系数据库的步骤分为三步:第一步,将XML模式转换为改进过的P_Schema++模式;第二步,将P-Schema++模式用DOM树表示;第三步,将DOM树映射为关系数据库。

1.1 生成P_schema++模式

本文的实例文档为The Purchase Order ,po.xml[4],对应的XML Schema为po.xsd。[4]数据来源于www.w3.org。表 1给出了 po.xsd的类型标识模式(即 XML Query Algebra ),这种模式因其准确指定了元素和属性类型,非常有利于XML数据的存储,将之称为原始模式。P_schema++模式是基于此模式,进行改进和扩充得到。

从原始的XML Schema类型定义到P_Schema++类型定义的转换遵循以下几个原则:

(1)提取用<ComplexType>…</ ComplexType >标识定义的复杂类型为新类型(如PurchaseOrder);

(2)提取元素属性maxoccurs=unbounded的多值元素为新类型(如items);

(3)提取被多个父元素重复引用的元素为新类型(如USAdress和 comment);

(4)提取用<choice>…</choice>标识的可选元素为新类型(本实例不涉及)。

表1

1.2 DOM树表示

DOM(Document Object Model)全称文档对象模型,是一种与平台和语言无关的编程接口。[5]一个 XML文档使用XML分析器分析之后,其中的信息就会被转化成一棵对象节点树。在这棵树中,有且只有一个根节点,其它所有节点都是根节点的后代节点。节点树生成之后,就可以通过DOM接口访问、修改、添加、删除和创建树中的节点和内容。将P_Schema++转换为DOM树表示。在DOM树中,用符号○表示简单类型元素的节点,用符号◎表示复杂类型元素的节点,用符号△表示属性节点。Po.xsd的 P_Schema++转换为 DOM树如图1所示:

图1 P_Schema++ DOM树

得到DOM树后,寻找DOM树中子树的根节点,又叫分级节点[3]。一个节点成为分级节点,必须满足以下几个条件之一:①不能由其他节点到达;②复杂类型的节点;③节点的入度>1。根据以上规则,PurchaseOder,items,comment,USAdress为分级节点,要单独映射为关系。其中Comment节点是简单类型元素节点,可以分成两个节点,分别内联到PurchaseOrder子树和items子树中。但考虑到在po.xsd中,PurchaseOrder和Items中对comment的定义都是minoccurs=0,如果将comment作为PurchaseOrder表和items表中的属性列,应允许NULL值。而comment元素中的数据内容一般比较多,需要为comment列设置较大的字符串长度,而如果有大量的空值,就会造成很大的存储浪费。所以,本文将comment元素单独建表,并建立Pid字段作为外键,指向父节点。

1.3 映射为关系数据库

将DOM树中分级节点映射为关系数据库中的表,映射的方法为:

(1)为每一棵子树T创建关系R,把满足以下条件的节点Y作为R的属性:Y是T可达到,从T到Y的路径中不包含任何生成独立关系的分级节点。

(2)为每个关系R创建Id字段作为主键。若T与其他分级节点存在父子关系,则在关系R中添加Pid 字段作为外键,记录其父节点的Id。

根据上面的方法,把DOM树转换为4张表:

表2 PurchaseOrde r

表3 comment

表4 items

表5 USAdress

另外,在PurchaseOrder表中,Bill to_id和ship to_id字段分别指向其孩子节点,与USAdress表中Id字段相对应。

2 实验验证

为了验证P_Schema++的有效性和可行性,采用 Microsoft Visual Studio2003和C#语言在Windows内部组件之一的.NET Framework代码库中进行XML文档到SQL Server 2003关系数据库的转化。对其存储代价和查询代价进行评估,结果发现,该算法生成的关系数据表数目相对较少,表的规模合理,查询时连接运算少,查询效率较高。

[1] Bourrent R. XML Data Binging[EB/OL].http://www.rpborrent.com/xml/XMLDataBingding.htm,2010-12-21.

[2] 曾庆玲.基于模式的复杂 XML文档到关系数据库存储的研究[D].桂林:广西师范大学,2011

[3] Bohannon P, Freire J, Roy P et al.,From XML schema to relations: a cost based approach to XML storage[C].Proc of the18th International Conference on Data Engineering.2002:64 75.

[4] The Purchase Order[EB/OL] .http://www.w3.org/TR/2004/REC-xmlschema-0-20041028/.

[5] 岳欢.XML文档在数据库中存储方案的研究[D].重庆:重庆大学,2003.

猜你喜欢

子树关系数据库字段
关系数据库在高炉数据采集系统中的应用
一种新的快速挖掘频繁子树算法
图书馆中文图书编目外包数据质量控制分析
广义书本图的BC-子树计数及渐近密度特性分析*
书本图的BC-子树计数及渐进密度特性分析∗
基于覆盖模式的频繁子树挖掘方法
基于索引结构的关系数据库关键词检索
CNMARC304字段和314字段责任附注方式解析
无正题名文献著录方法评述
关于CNMARC的3--字段改革的必要性与可行性研究