关系模式向DTD转化方法研究

2021-12-12 10:09刘炜
科技信息·学术版 2021年32期
关键词:数据交换

刘炜

摘要:XML已经成为Web上数据交换的标准,然而绝大多数的商业数据仍然存储在关系数据库系统中。因此需要将关系数据发布XML文档的形式。发布过程中一个最关键的就是进行模式转换。提出了一种算法来实现关系模式向DTD的转化。最终通过SQL查询将关系数据发布XML文档的形式。最后通过一组关系表对该算法进行了具体的实现。

关键词:数据交换;关系模式;模式转换;发布

1引言

随着因特网的不断发展,XML[1]作为Web上数据发布和交换的标准迅速地出现并且流行起来。XML具有层次性和自描述性,自然成为数据传输的首选。然而,另一方面,绝大多数的商业数据仍然存储在关系数据库系统(DBMS)中[2]。DBMS的可靠性和可扩展性使得它将来仍然会扮演着数据存储的角色。因此,迫切需要在关系数据和XML文档之间进行相互的转换,如图1所示。

在XML的发布过程中面临着很多问题[3],首先,数据库中的关系表是平面的,而XML文档则是树形的标记结构。其次,在关系表中很多完整性约束在转换过程中也不能被丢失[4]-[6]。整个映射过程可以分成两部分,第一部分称为模式映射,也叫结构映射。是将关系模式转化成XML的模式。XML的模式反映了XML文档中标签的结构。而标签中的内容要由数据映射来解决。

本文提出了一种良好的算法将关系模式转化成DTD。算法将现实世界中的关系分成了三类,运用上面的算法对这三类关系模型分别进行了转化。利用这个算法可以以DTD为中介,并且实现了关系数据向XML数据唯一性的转化。最后通过一组关系表对算法进行了具体实现。

2关系模式分类的相关定义

下面给出相关的定义,并将关系模式分成三类。

定义1:对于一个关系中的所有关系表,如果能够存在一个关系表,它其中所有的属性分别存在于其他的关系表中,那么我们称这个关系表为根关系表。

定义2:如果一个关系中存在一个关系表,它的一部分属性分别存在于其他所有的关系表中,而另一部分属性为自身独有的属性,那么我们称这个关系表为扩展的根关系表。

根关系表中的属性都是连接属性。而扩展的根关系表中除了连接属性以外还有其他的属性。在具有根關系表或扩展的根关系表的关系中,可以看出有一个“中心关系表”能够连接所有其他的关系表。

下面我们将关系模式分成三类:分别是星形关系、直线型关系和树状关系。

定义3:对于一个关系中的若干关系表,如果其中有根关系表或扩展的根关系表,那么我们称这些关系表为星形关系。如图1所示

星形关系的特点是以一个关系表为中心,其他的关系表都与这个关系表连接。

定义4:对于一个关系中的若干关系表,如果表的数目大于或者等于4,而且不存在一个表为根关系表或扩展的根关系表,并且任何一个表只与不超过2个表相连接,那么我们成这样的关系模式为直线型关系。如图2所示

说明,在判断直线型关系的时候必须考虑数目,如果小于或等于3个的话,那么即使符合上面的条件,也不是直线关系,而是星形关系。

定义5:对于若干个关系表,如果找不到一个表是根关系表或扩展的根关系表,并且其中至少有一个表与三个或三个以上的表相连接,那么我们称这个关系为树状关系。如图3所示

现实世界的关系类型中只有这三类关系模型,即使有看似复杂的关系模型,总能够归纳为上面三种类型之一。因此我们对这三类关系模型分别进行转化,就代表对整个关系模型进行了转化。

3关系数据库模式向XML转化方法

下面我们分别就三类关系模式给出相应的转化方法和具体的实现,然后总结出一套普遍适用的关系模式向XML模式转化的算法。

3.1星形关系的转化

这种类型的转化方法很简单,从上面我们定义来看,凡是小于或等于3个表的关系都是星形关系,而4个表以上则必须根据定义进行判断。

3.1.1 转化方法

第一步:把根关系表或扩展的根关系表的名称作为XML文档的根元素。

第二步:把根关系表中的属性作为第1层子节点。写出DTD为<!ELEMENT 根节点(子元素,子元素…….)>

第三步:将第一层子元素名分别作为下一层的根节点。然后进行DTD的书写。一般格式为:

<!ELEMENT 子元素 (下一级子元素,下一级子元素)>。

这里的子元素都是连接元素,因此在书写DTD时要将第三层叶子节点相应的连接属性删除。否则就会产生错误。可以看出星形关系由于其特殊的结构使得转化后的XML树也只有3层。

3.1.2具体转化过程

这里列举一个关系数据转化XML的例子,这里我们不考虑关系的规范化的问题,也不考虑关系表实际含义的问题。

因为关系中表的数目是3个,因此判断一定是星形关系。通过观察可以看出表3是一个扩展的根关系表。可以按照星形关系转化的方法进行转化。首先确定XML文档根元素为SC,也就是表3的名称。因此可以写出第一句<!ELEMENT SC(学号,课程号,成绩)>。然后我们可以看出表3中的属性学号和课程号分别连接着表1和表2。因此可以将学号和课程号做为第二层子节点。同时作为最下面一层叶子节点的父节点。另外,在书写的时候要将表1和表2中的连接属性删去。完整的DTD如下:

3.2 直线型关系的转化

定义6:将关系中每个关系表的一个属性提取出来重新建立一个关系表称为构造根关系表。

直线型关系转化XML时需要构造根系表,否则任何一个关系表都能作为根元素,我们将构造的关系表的名称作为XML的根元素,而构造根关系表中的属性应当是第一层子节点。这些子节点再去连接相应的下一层叶子节点。可以预见。这种类型转化后的XML文档必定为3层树型结构。

3.2.1转化方法

第一步:将关系中每个关系表的主属性提取出来重新建立一个新的根关系表,然后给这个新的关系表命名,以这个关系表的名字作为根元素,其属性作为第一层次子元素。

第二步:因为这个构造的根关系表中的属性都是连接属性,因此可以根据连接属性进行对应寻找下一层的节点。依次写出DTD的内容。

3.2.2具体转化过程

在上面表1,表2,表3的基础上,我们增加了表4。

首先我们要构造出一个根关系表,令表名为学校信息,新的根关系表可以表示为:

学校信息(学号,课程号,成绩,系),这是一个虚的关系表。然后可以写出DTD的第一行定义为:<!ELEMENT 学校信息(学号,课程号,成绩,系)>。限于篇幅,具体的DTD文档我们就不再去书写了。

3.3 树型关系的转化

树型关系的转化比较复杂。主要复杂在根节点的选择上面。如果不加限制,那么任何一个表都可以作为根节点。

3.3.1转化方法

第一步:分别计算出每个关系表能连接其他关系表的数目,将能连接数目最多的那个关系表的表名作为根元素。并且根据这种结构画出相应的树型结构。

第二步:以这个表为中心,写出根元素和第一层的子元素。然后根据连接属性依次向下书写。方法和前面的一样。

可以看出,这种转化方法对XML树状结构的层数没有限制。

3.3.2具体转化过程

可以在上面4个表的基础上增加一个表

五个表的关系如图4所示

通过定义可以判断是树型结构,其中表1为根元素,然后根据连接属性写出整个DTD。第一行为:<!ELEMENT Student(学号,姓名,性别,年龄,系) >

3.4 具体的算法(包含三类关系类型)

这里我们用自然语言描述:(2,3,4步是并列的,不能同时执行,需要第1步进行判断后执行)

第一步:判断关系的类型

If (关系表的数目<4):为星形关系,直接转向第四步

Else:判断这一组关系表的类型(判断方法见上面的讲述)

if(星形关系),直接转向第四步

else if(直线型关系),则直接转向第三步

else(树状关系).则继续执行(即执行第二步)

第二步:分别计算出每个关系表能连接其他关系表的数目,将能连接数目最多的那个关系表的表名作为根元素。并且根据这种结构画出相应的树型结构。

第三步:将关系中每个关系表的主属性提取出来重新建立一个新的根关系表,然后给这个新的关系表命名,以这个关系表的名字作为根元素,其属性作为第一层次子元素。

第四步:把根关系表或扩展的根关系表的名称作为XML文档的根元素。

第五步:在选定根元素之后,写出第一DTD即<!ELEMENT 根元素(子元素,子元素…)>

第六步:根據每个表的连接属性进行书写。要注意连接属性作为下面一层的表名,在写属性的时候要把这个连接属性删去,这样可以写出整个DTD。

第七步:根据DTD写出XML的基本结构,然后依照关系表将标签中的内容依次填上。

4 总结

这种方法的关键是如何确定每种关系类型的根元素。确定根元素之后就可以不同表之间的连接属性进行转化了。将现实世界的关系模型分成了3类。对其分别进行了讨论,最后给出了一个算法。这种方法最大的优点就是能够唯一地将关系模式转化成XML数据模式。并且可以实现一切关系模式的转化。保证了转化的全体性,唯一性。

参考文献:

[1]T. Bray et al.,“Extensible Markup Language (XML) third edition,” http://www.w3.org/TR/REC-xml.

[2]邱洋,岳昆,等. 利用缓存优化关系数据的XML发布[J]. 计算机研究与发展,2004,41(10):1082-1088.

[3]万常选. 以XML文档发布关系数据[J]. 计算机应用与软件,2002,19(8):30-33

[4]Shanmugasundaram J,Shekita E,Barr R. Efficiently publishing relational data as XML documents[C]. Egypt:Proceeding of the26th International Conference on Very Large Databases,2000.

[5]Fernandez M,Tan W. Silk route:A framewok for publishing relational data in XML[J]. ACM Transactions on Database Systems,2002,27(4):438-493.

[6]Eisenberg A,Melton J. SQL/XML is making good progress[J].ACM SIGMOD Record,2002,31(2):101 - 108.

猜你喜欢
数据交换
信息系统数据共享与交换方法设计构想
XBRL在财务报表网络数据交换中的应用
基于XML的输变电设备状态数据交换模型研究
基于XML的数据交换技术研究
跨平台移动应用中间件的设计与实现
国际物流客户服务平台架构与实现