该算法通过对关系模式和XML Schema的数学建模,结合有向图理论,实现了关系模式中表、列、列属性、约束到XML Schema的基本映射,结果以XML Schema方式存在。
(3)结果存储。转化后的XML模式可以采用三种方式进行保存:文件方式,数据库存储XML标记方式和XML模式到关系数据库的映射方式存储。根据研究的现况,本文采用XML模式文件直接存储方式来保存转化结果。
4.1.1映射模型定义
本文不但要取得关系模式的结构,还要取得其相关的语义信息,因此映射主要分为两部分结构映射和语义映射。结构映射主要是关系模式中的表及属性列在XML文档中的映射,而语义映射主要包括关系模式中实体完整性、参照完整性的映射,以及用户自定义的完整性的映射,将它们细化为主键、外键的映射,唯一性约束的映射,数据类型的映射,缺省值和数据长度的映射等。在此处采用基于模型驱动的映射方法,将关系模式中的列映射为元素。要完成相应的结构和语义的映射,定义如下规则:
(1)将数据库名映射为XML文档的根元素,在Schema中就是“schema”元素的子元素。
(2)建立与表相关的元素。对于与某一个表相关的元素,若该表本身在关系数据库中没有引用其它的表,即原表中没有外键,映射为Schema中的复杂类型的元素。而对于存在外键的表,也是直接映射为复杂类型的元素,但是在定义其类型时要指明其嵌套关系,它们的类型均为复杂类型。
(3)建立复杂类型元素。每一个表结构对应一个复杂类型,实现了表结构映射的相对独立性。复杂类型中定义的元素可以由表中的各个列和被其嵌套的表组成。
(4)用户自定义约束的表示。主要是指关系模式中,列的数据类型、列是否可以为空、字符串的最大长度、默认值,对于数据类型可以采用元素的type属性来表示,若是内置的简单类型,并且可以直接设置,若还有某些限制如数据长度等可以用simpleType甚至complexType来定义,而对于元素是否可为空则通过定义属性nullable来判断,其定义为,若是定义属性则必须用复杂类型,可以定义length、maxLength、minLength等属性来表示这些相关约束,从而达到在simpleType声明使用length、maxLength、minLength的效果,并且表示出属性列是否可为空,这是simpleType做不到的。
(5)定义两个属性“primarykey”和“foreignkey”分别表示某元素是主键还是外键,而“primarykey”和“foreignkey”的值便代表着此元素的类型。
若某关系模式的属性列名为number,下面的属性primarykey表明该列在数据库中为主键,type表明primarykey的属性值为布尔类型,default='true'表明该元素在属性列中是主键。另外,定义“uniqueable”属性来标识元素的唯一性约束。
(6)对于主键、外键和唯一性约束到XML Schema的映射,在(5)中已经定义了与其相关的属性,只要将属性嵌入到complexType即可,示例中的“number”元素的两个属性表示它在数据库中是一个关系模式的主键,且具有唯一性约束。
4.2 XML Schema到关系模式的映射
XML Schema到关系模式的映射实际上是关系模式到XML Schema的逆向过程,通过XML文档,构建出一棵能反映XML Schema文档中能反映各个元素之间关系的结点树,从而达到重构关系模式的目的。XML Schema到关系模式的映射的流程图如下:

4.2.1 XML Schema结点树的定义
XML Schema本身就是一个XML文档,它符合XML文档所要求的一切规范,但是一般的XML文档树并不能反映Schema文档中定义的各种关系,因此根据需要重新构造一棵能够反映XML Schema文档中的各个元素之间关系的树。为方便Schema与关系模式的转换,做如下定义:
定义(顶层元素)顶层元素是一个复杂类型的元素,它不能作为其他复杂类型元素的子元素,也不可以作为其他复杂类型元素的参考,即该元素的元素名不能是type和ref属性的值。
定义(结点树)一个XML Schema 文档定义的各个元素之间的关系构成一棵结点树,记为TNode= 2/2 首页 上一页 1 2 |