一种关系数据的服务封装系统和方法.pdf

上传人:a2 文档编号:4262401 上传时间:2018-09-12 格式:PDF 页数:35 大小:1.17MB
返回 下载 相关 举报
摘要
申请专利号:

CN201110167622.X

申请日:

2011.06.21

公开号:

CN102841892A

公开日:

2012.12.26

当前法律状态:

撤回

有效性:

无权

法律详情:

发明专利申请公布后的视为撤回IPC(主分类):G06F 17/30申请公布日:20121226|||实质审查的生效IPC(主分类):G06F 17/30申请日:20110621|||公开

IPC分类号:

G06F17/30

主分类号:

G06F17/30

申请人:

中国科学院计算技术研究所

发明人:

温彦; 房俊; 韩燕波

地址:

100190 北京市海淀区中关村科学院南路6号

优先权:

专利代理机构:

北京泛华伟业知识产权代理有限公司 11280

代理人:

王勇

PDF下载: PDF下载
内容摘要

本发明提供一种关系数据的服务封装系统,包括:数据对象生成装置,用于根据关系表生成数据对象;可视化数据对象配置装置,用于将所述数据对象以对象树的形式呈现给用户,并接受用户的配置操作以形成带有配置操作信息的对象树;以及数据服务生成装置,用于根据所述带有配置操作信息的对象树为每一个数据对象生成一个服务实现接口。本发明还提供了相应的关系数据的服务封装方法。本发明能够直观地呈现关系数据模式和关联关系,并且能使用户以直观的方式表达数据获取逻辑,并能够将用户所表达的数据获取逻辑映射至对关系数据的查询上。

权利要求书

1.一种关系数据的服务封装系统,包括:
数据对象生成装置,用于根据关系表生成数据对象;
可视化数据对象配置装置,用于将所述数据对象以对象树的形式呈现
给用户,并接受用户的配置操作以形成带有配置操作信息的对象树;以及
数据服务生成装置,用于为每一个数据对象生成一个服务实现接口;
从所述的带有配置操作信息的对象树中抽取出参数,并将其设为服务实现
接口的输入参数;根据所述的带有配置操作信息的对象树生成返回数据类
型,并将服务实现接口的返回类型设为该数据类型;根据所述的带有配置
操作信息的对象树生成该服务实现接口的内部逻辑。
2.根据权利要求1所述的关系数据的服务封装系统,其特征在于,
所述带有配置操作信息的对象树包括约束树和结果树;所述数据服务生成
装置还用于从所述约束树的节点中抽取出参数,并将其设为服务实现接口
的输入参数;根据所述结果树生成返回数据类型,并将服务实现接口的返
回类型设为该数据类型;根据所述约束树生成该服务实现接口的内部逻
辑。
3.根据权利要求1所述的关系数据的服务封装系统,其特征在于,
所述数据对象生成装置还用于对于一个需要生成相应数据对象的关系表,
其中的非外键字段构成所述数据对象的简单属性,其中的外键字段所关联的
关系表的结构构成所述数据对象的复合属性,对于通过外键关联到所述需要
生成相应数据对象的关系表的关系表,当关联关系声明为唯一时,所述通过
外键关联到所述需要生成相应数据对象的关系表的关系表的结构构成所述
数据对象的复合属性,当关联关系没有声明为唯一时,所述通过外键关联到
所述需要生成相应数据对象的关系表的关系表的列表构成所述数据对象的
列表属性。
4.根据权利要求1所述的关系数据的服务封装系统,其特征在于,
所述可视化数据对象配置装置用于接受用户的下列配置操作中的一种或
多种:选择操作、增加约束操作、聚集操作、排序操作。
5.根据权利要求4所述的关系数据的服务封装系统,其特征在于,
所述可视化数据对象配置装置还用于接受用户的隐藏数据节点操作和/或
重命名操作。
6.根据权利要求5所述的关系数据的服务封装系统,其特征在于,
所述可视化数据对象配置装置还用于接受用户的展开操作和/或切换数据
对象视图。
7.根据权利要求1所述的关系数据的服务封装系统,其特征在于,所
述可视化数据对象配置装置还用于对用户的配置操作进行有效性验证。
8.一种关系数据的服务封装方法,包括下列步骤:
1)将关系表转化为数据对象;
2)将数据对象呈现为数据对象树;
3)用户根据实际需要在数据对象树视图上进行配置操作;
4)根据所述配置操作更新对象树得到带有配置操作信息的对象树;
5)从所述的带有配置操作信息的对象树抽取出服务实现接口的参数、
根据所述的带有配置操作信息的对象树生成服务实现接口的返回数据类
型、生成该服务实现接口的内部逻辑,从而生成服务实现接口。
9.根据权利要求8所述的关系数据的服务封装方法,其特征在于,所
述带有配置操作信息的对象树包括约束树和结果树;
所述步骤5)中,从约束树的节点中抽取出参数,并将其设为服务实
现接口的输入参数;根据结果树生成返回数据类型,并将服务实现接口的
返回类型设为该数据类型;根据约束树生成该服务实现接口的内部逻辑。
10.根据权利要求8所述的关系数据的服务封装方法,其特征在于,
所述步骤3)中,还包括对用户的配置操作进行有效性验证,只有通过有效
性验证,才能继续执行步骤4)。
11.根据权利要求8所述的关系数据的服务封装方法,其特征在于,
所述步骤3)中,用户的配置操作包括:展开操作、选择操作、增加约束
操作、删除约束操作、聚集操作、隐藏数据节点操作、重命名操作、排序
操作中的一种或多种。

说明书

一种关系数据的服务封装系统和方法

技术领域

本发明涉及数据库技术领域、分布式计算和互联网计算技术领域,具
体地说,本发明涉及一种关系数据的服务封装系统和方法。

背景技术

面向服务的架构(SOA)的典型特征包括松耦合、高重用性、服务封装、
位置透明,以及由此带来的较高的互操作能力等,它以服务为最基本的可
重用单元,服务已成为企业应用集成、信息集成的主流方式之一。

将企业内的各种数据资源封装为服务是利用服务进行信息集成的关
键步骤,一般地,将这类从数据源获取数据的服务称为数据服务,也称为
数据提供服务,数据服务所提供的数据是符合特定逻辑的,它们有可能是
对数据源的查询结果,也可能是对数据源进行过滤、变换等处理后的数据
等。将数据封装为服务一方面是数据服务提供者提供特定逻辑的数据获取
服务时必须进行的工作,另一方面在公共数据平台上,平台运行维护者提
供大量数据,数据使用者也可将所需数据进行封装以获得满足自身需求的
数据服务。

当前主要的服务实现技术包括SOAP Web服务和Restful Web服务等,
前者利用WSDL标准来描述服务、利用SOAP作为消息传输协议,同时包
括UDDI、WS-Addressing等协议栈,是企业级面向服务架构的基本实现方
案,后者是轻量级服务的代表,它将网络上的所有事物抽象为资源,通过
URL地址来描述资源,通过标准的HTTP方法来操作资源。服务封装的目
标是将各种资源或业务逻辑发布为基于这些具体技术的Web服务。

现有的关系数据服务封装的方法大多将复杂的SQL查询语句封装为
服务,将SQL语句的参数和投影结果抽取出来作为服务的输入输出参数。
其缺陷是:用户需要浏览多个表以了解表之间的关联关系,且需要编写复
杂的SQL语句,运行调试以保证语法正确,再在此基础上进行服务封装,
用户的体验较差。另一种方法是将各个表的数据单独封装为服务,用户在
这些数据服务的基础上进行组合操作以实现复杂逻辑。其缺陷是未考虑关
系表之间的关系,无法反映特定的数据获取逻辑(此处的数据获取逻辑指类
似于SQL的数据查询逻辑),用户需要在获得所有表的数据后才能通过组
合操作表达复杂逻辑,因此这种方法与直接在服务中封装数据获取逻辑相
比,其效率明显降低。并且,利用上述两种方法封装的服务所获得的数据
均为扁平结构,即缺乏数据之间的内在逻辑层次。

因此,当前迫切需要一种关系数据的服务封装系统和方法,该服务封
装系统和方法能够直观地呈现关系数据模式和关联关系,能使用户以直观
的方式表达数据获取逻辑,并能够将用户所表达的数据获取逻辑映射至对
关系数据的查询上。

发明内容

本发明的目的是提供一种能够直观地呈现关系数据模式和关联关系,
能使用户以直观的方式表达数据获取逻辑,并能够将用户所表达的数据获
取逻辑自动映射至对关系数据的查询,同时将查询过程自动封装为程序接
口并发布为可访问服务的关系数据的服务封装系统和方法。

为实现上述发明目的,本发明提供了一种关系数据的服务封装系统,
包括:

数据对象生成装置,用于根据关系表生成数据对象;

可视化数据对象配置装置,用于将所述数据对象以对象树的形式呈现
给用户,并接受用户的配置操作以形成带有配置操作信息的对象树;以及

数据服务生成和发布装置,用于为每一个数据对象生成一个服务实现
接口;从所述的带有配置操作信息的对象树中抽取出参数,并将其设为服
务实现接口的输入参数;根据所述的带有配置操作信息的对象树生成返回
数据类型,并将服务实现接口的返回类型设为该数据类型;根据所述的带
有配置操作信息的对象树生成该服务实现接口的内部逻辑;将生成的服务
实现接口发布到某一地址上。

其中,所述带有配置操作信息的对象树包括约束树和结果树;所述数
据服务生成和发布装置,还用于从所述约束树的节点中抽取出参数,并将
其设为服务实现接口的输入参数;根据所述结果树生成返回数据类型,并
将服务实现接口的返回类型设为该数据类型;根据所述约束树生成该服务
实现接口的内部逻辑。

其中,所述数据对象生成装置,还用于对于一个需要生成相应数据对
象的关系表,其中的非外键字段构成所述数据对象的简单属性,其中的外
键字段所关联的关系表的结构构成所述数据对象的复合属性,对于通过外
键关联到所述需要生成相应数据对象的关系表的关系表,当关联关系声明
为唯一时,所述通过外键关联到所述需要生成相应数据对象的关系表的关
系表的结构构成所述数据对象的复合属性,当关联关系没有声明为唯一
时,所述通过外键关联到所述需要生成相应数据对象的关系表的关系表的
列表构成所述数据对象的列表属性。

其中,所述可视化数据对象配置装置用于接受用户的下列配置操作中
的一种或多种:选择操作、增加约束操作、聚集操作、排序操作。

其中,所述可视化数据对象配置装置还用于接受用户的隐藏数据节点
操作和/或重命名操作。

其中,所述可视化数据对象配置装置还用于接受用户的展开操作和/
或切换数据对象视图。

其中,所述可视化数据对象配置装置还用于对用户的配置操作进行有
效性验证。

本发明还提供了相应的关系数据的服务封装方法,包括下列步骤:

1)将关系表转化为数据对象;

2)将数据对象呈现为数据对象树;

3)用户根据实际需要在数据对象树视图上进行配置操作;

4)根据所述配置操作更新对象树得到带有配置操作信息的对象树;

5)从所述的带有配置操作信息的对象树抽取出服务实现接口的参数、
根据所述的带有配置操作信息的对象树生成服务实现接口的返回数据类
型、生成该服务实现接口的内部逻辑,从而生成服务实现接口;

6)将所生成的服务实现接口发布至某一地址。

其中,所述带有配置操作信息的对象树包括约束树和结果树;

所述步骤5)中,从约束树的节点中抽取出参数,并将其设为服务实
现接口的输入参数;根据结果树生成返回数据类型,并将服务实现接口的
返回类型设为该数据类型;根据约束树生成该服务实现接口的内部逻辑。

其中,所述步骤3)中,还包括对用户的配置操作进行有效性验证,
只有通过有效性验证,才能继续执行步骤4)。

其中,所述步骤3)中,用户的配置操作包括:展开操作、选择操作、
增加约束操作、删除约束操作、聚集操作、隐藏数据节点操作、重命名操
作、排序操作中的一种或多种。

相对于现有技术,本发明具有下列技术效果:

1、能够直观地呈现关系数据模式和关联关系,并且能使用户以直观
的方式表达数据获取逻辑,并能够将用户所表达的数据获取逻辑映射至对
关系数据的查询上。

2、通过对象树呈现关系数据模式,覆盖了关系数据中最常见的基于
外键引用的数据库表连接,同时表达了引用和被引用关系,且这种关系是
可在视图上逐层扩展和深入的,并且可基于此关联关系即时转换视图焦
点,即当前主要描述的数据对象。

3、用户对数据对象的操作覆盖了基本的数据库查询操作,同数据对
象本身包涵的引用和被引用关系一起能够覆盖绝大多数的数据库查询需
求。

4、能够自动化地将用户以可视化操作的方式表达的数据获取逻辑转
化为用程序设计语言和数据库操作语言实现的程序过程,并且发布为可通
过网络访问的Web服务。服务的接口保留了符合用户需求的数据层次结
构。

附图说明

图1示出了本发明一个实施例的关系数据可视化服务封装系统的结构
示意图;

图2示出了本发明一个实施例的关系数据可视化服务封装方法的流程
图;

图3示出了本发明一个实施例的将关系数据对象化的方法流程图;

图4示出了本发明一个实施例的中利用数据服务生成和发布装置生成
服务接口并发布的流程图;

图5示出了本发明一个实施例中将约束树划分为子树片段的示例;

图6示出了本发明一个实施例中基于子树片段构造SQL语句及返回该
SQL语句的结果列表的递归过程;

图7-01示出了一个关系数据模式的示例;

图7-02示出了一个将图7-01中的示例对象化过程后生成的初始对象
视图的示例;

图7-03示出了一个append操作的示例;

图7-04示出了图7-03的append操作后的对象视图示例;

图7-05示出了一个select操作的示例;

图7-06示出了图7-05的select操作形成的结果树示例;

图7-07示出了在一个节点上进行addConstraint操作的示例;

图7-08示出了在另一个节点上进行addConstraint操作的示例;

图7-09示出了图7-07、7-08的addConstraint操作后所得的约束树示
例;

图7-10示出了一个aggregate操作的示例;

图7-11示出了图7-10的aggregate操作后的约束树的示例;

图7-12示出了图7-10的aggregate操作后的结果树的示例;

图7-13示出了一个sort操作的示例;

图7-14示出了图7-13的sort操作后的约束树的示例;

图7-15示出了将操作后的对象树发布为服务的过程中用户输入服务
名称及服务操作名称的示例。

具体实施方式

下面结合附图和实施例对本发明做进一步地描述。

根据本发明的一个实施例,提供了一种关系数据的服务封装系统,该
服务封装系统是一个基于对象的关系数据可视化服务封装系统。如图1所
示,所述基于对象的关系数据可视化服务封装系统100包括一个数据对象
生成装置101,一个可视化数据对象配置装置102和一个数据服务生成和发
布装置105。数据对象生成装置101将数据库中的相互关联的各个关系表转
化为数据对象;可视化数据对象配置装置102包含对象树展示模块103和配
置操作验证和处理模块104,前者负责数据对象的呈现,后者负责处理在数
据对象上的配置操作,保证操作的有效性;数据服务生成和发布装置105包
含服务实现接口和参数类型生成模块106和服务发布模块107,前者将用户
对数据对象的配置操作转化为对关系数据的查询及相关处理逻辑,生成参数
类型以及服务实施代码和接口,后者利用Axis等服务发布工具将接口发布
为可访问的服务。下面分别介绍数据对象生成装置101、可视化数据对象配
置装置102、数据服务生成和发布装置105。

一、数据对象生成装置

数据对象由根据关系表及其关联关系而得出的属性构成,这些属性包括
简单属性、复合属性、列表属性。在一个优选实施例中,数据对象生成装置
为每个关系表生成一个数据对象,关系表中的非外键字段构成数据对象的简
单属性;关系表中的外键字段所关联的表的结构构成了该数据对象的复合属
性,对于通过外键关联到该关系表的关系表,其结构或其列表构成了该数据
对象的复合或列表属性,这取决于该关联关系(即引用关系)定义时是否声
明为唯一(unique),若是,表明该关联为一对一关联,该属性为复合属性,
否则该属性为列表属性。为了更易于理解,下面举例说明复合属性和列表属
性。

复合属性构成的根源为引用关系,例如表A的结构为A(c1,c2,c3),
表B的结构为B(c4,c5,c6),下划线表示主键,其中表A中的c3字段引用
了表B的c4字段,则表A对应的数据对象结构为:


即表B的结构在数据对象结构A中构成了复合属性;

列表属性构成的根源为被引用关系,在上面的例子中,表B对应的数据
结构对象为:



即表A的结构在数据对象结构B中构成了列表属性。

二、可视化数据对象配置装置

在一个优选实施例中,可视化数据对象配置装置以选择树的形式呈现数
据对象的结构,允许用户以界面操作的形式对数据对象进行配置操作,配置
的结果是形成带有配置操作信息的对象树。在一个实施例中,带有配置操作
信息的对象树包括两棵树,一棵是在数据对象树上附加了约束操作节点而形
成的约束树;一棵是由约束树所表达的数据获取逻辑所生成的结果数据的结
构树,称为结果树。

数据对象以选择树的形式呈现,默认情况下,数据对象树只显示其简单
属性和它所关联(即引用)到以及关联到它(即被引用)的关系表的关联字
段属性,目的在于防止引用层次过多而造成的数据对象树视图爆炸。基于引
用和被引用关系的复合和列表属性可根据需要逐层展开。数据对象中的简单
属性对应于数据对象树中的简单属性节点,数据对象中的复合属性对应于数
据对象树中的复合属性节点,数据对象中的列表属性对应于数据对象树中的
列表属性节点。

数据对象配置装置中定义了若干配置操作,操作的对象为对象树的节点,
配置操作的结果为在操作的节点上更新结果树或/和约束树。将数据对象树中
的各个属性节点称为数据节点,将配置操作过程中增加的节点称为约束节
点,需要注意的是,复合和列表属性在未展开前不具有子节点,表示的是关
联字段,此时对复合和列表节点的操作是对关联字段的操作;在展开操作后
拥有了子节点,此时对复合和列表节点的操作则变为了对复合结构的操作。

在一个优选实施例中,配置操作包括:

1.展开(append):append操作的作用对象是数据对象中未展开的复合
属性或列表属性,其作用是根据该复合属性或列表引用或被引关系表的结构
将其展开为复合结构,且将关联字段移至该复合属性或列表属性内部。
append操作能够通过关系表间的引用关系将数据对象逐层展开至更深层次
的数据,允许用户获得更全面和完整的数据对象视图。

2.选择(select):select操作对象是对象树的某一节点,其作用是选择
该节点及其所有子节点作为数据获取结果的结构。该操作的结果将选择的节
点构成结果树,并且保留原对象的层次结构。

3.增加约束(addConstraint):addConstraint操作作用在数据节点上。
对于不同的类型的数据节点允许的约束操作内容不同:在简单属性节点(后
称为简单节点)上可进行基本取值约束操作,不同数据类型的属性上可添加
的约束不同,包括=、>、<、>=、<=、!=、(NOT)BETWEEN AND、(NOT)IN、
(NOT)LIKE、IS NULL、IS NOT NULL等,它们的语义与其在SQL中的语
义相同;在复合属性节点(后称为复合节点)上可进行IS NULL、IS NOT 
NULL约束;在列表属性节点(后称为列表节点)上可进行IS NULL、IS NOT 
NULL以及SIZE的=、>、<、>=、<=、!=、(NOT)BETWEEN AND、(NOT)
IN约束操作。约束操作中可将约束内容参数化,即作为最终生成的数据服
务的参数。可在某个数据节点上进行零次至多次的约束操作,每个节点上的
多个约束不可冲突。每一个约束操作在其所操作的节点上形成一个子节点。

4.聚集(aggregate):aggregate操作作用在简单节点上,其作用是在简
单节点上实施聚集函数,并且按照select操作所选择的属性进行分组,聚集
函数包括count、sum、avg、min、max等。聚集操作将更新结果树,在结果
树上呈现应用了聚集函数后的数据属性名称;在所操作的数据节点上形成了
一个聚集函数标识的约束子节点,且在该约束子节点上可附加对该函数取值
进行约束的子节点。由于数据对象拥有复合和列表类型的属性因此数据对象
上的聚集操作根据其作用属性类型的不同产生的效果也不同:

a)当聚集操作作用在数据对象的某个非列表子节点上时,聚集函数的
结果是该数据对象上的聚集。

b)当聚集操作作用在数据对象的某个列表子节点内时,则聚集的结果
是对该数据对象的各个实例内该列表属性的分组和聚集,而非对数
据对象的聚集。

数据对象本身代表了一个关系表,亦是列表类型,上述两种效果适用于
对象树展开后的任意列表节点。

5.隐藏数据节点(hideDataNode):数据对象的属性可以是多层嵌套的结
构,hideDataNode可将嵌套路径上不需要的数据节点隐藏,使嵌套层次减少。
该操作不能在列表节点上进行。该操作在数据节点上形成约束子节点,并且
会更新结果树,从结果树中删除被隐藏的中间节点。

6.重命名(rename):rename操作对已选择的数据节点进行重命名,在
操作的节点上形成约束子节点,并且对结果树的相应节点名称进行更新。

7.排序(sort):sort操作的作用对象是简单节点,若该简单节点不是某个
列表节点的子节点,则是对整个数据对象的排序,若是,则是对该数据对象
的各个实例内该列表属性的排序,此效果适用于对象树展开后的任意列表节
点。允许多个排序和指定升降序,按顺序优先进行排序。该操作在数据节点
上形成约束子节点。

8.切换数据对象视图(navigateTo):数据对象的复合和列表属性表达
了它与其他关系表的关联关系,navigateTo操作能够将当前的数据对象视图
切换到它所关联的表所对应的数据对象视图,从而允许用户能够以不同的数
据对象作为根节点,以获得更符合其查询需求的数据对象视角。

表1中列出了一个实施例中各配置操作与SQL语言的命令之间的对应关
系和相关说明。

表1



三、数据服务生成和发布装置

在一个优选实施例中,数据服务生成和发布装置用于将数据对象树上的
各个操作最终转化为基于java、c、c++、c#等程序设计语言实现的服务接口,
并通过Axis、CXF、XFire等服务发布工具(该类工具可将用java、c、c++、
c#等语言编写的函数或类发布至一个可访问的网络地址)将该接口发布为
Web服务。具体地,在用户基于可视化数据对象配置装置对对象树进行配置
后,数据服务生成和发布装置为每一个数据对象生成一个服务实现接口;从
约束树上标记有参数的约束节点中抽取出参数,并将其设为服务实现接口的
输入参数;根据结果树生成返回数据类型,并将服务实现接口的返回类型设
为该数据类型;根据约束树生成该服务实现接口的内部逻辑;根据结果树的结
构,将查询结果构造为符合结果树对应数据类型的实例列表;将生成的服务
实现接口发布到相应的地址上(例如利用Axis、CXF、XFire等工具将生成
的服务实现接口发布到特定的地址上)。

对象树上对简单属性和复合属性的操作可通过单个SQL语句实现(复
合节点可处理为多表连接(join),配置操作与SQL语句的对应关系见表1)。

列表节点具有一定的特殊性,假设一个数据对象包含列表子节点,则应
当对该数据对象中的每一个实例获取该列表节点的数据并添加到该实例中;
该列表节点与数据对象相对独立,即列表节点的子节点的约束操作不影响数
据对象的取值;然而当列表节点上有size或(not)null约束时,列表取值对
数据对象的取值有影响,尤其在数据对象上有聚集操作时,应当在列表属性
完成对数据对象的结果的筛选后再进行数据对象的聚集。这些特征在整个对
象树的列表节点上适用。因此对对象树的每一个列表属性单独获得其数据,
且将对象树上的所有列表节点按照路径关系处理为上下级关系:若列表节点
A到列表节点B有一条自顶向下的路径,且该路径中不包含任何其他列表节
点,则称A为B的上级节点,B为A的下级节点。

根据本发明的另一个实施例,还提供了一种关系数据的服务封装方
法,其总体流程如图2所示,包括下列步骤:

步骤201:将关系表转化为数据对象。关系表与数据对象的映射关系
已经在前文中叙述,此处不再赘述。

步骤202:将数据对象呈现为数据对象树。

步骤203:用户根据实际需要在数据对象树视图上进行配置操作。配
置操作包括:展开、选择、增加约束、删除约束、聚集、隐藏数据节点、
重命名、排序、切换数据对象视图等。这些配置操作的内涵已在前文中描
述,因此此处不再赘述。

步骤204:判断配置操作是否有效;如判断为否,回到步骤203;如
判断为是,根据配置操作的类型进入步骤205或206。具体地,当用户进
行展开操作、选择操作、增加约束操作、删除约束操作、聚集操作、隐藏
数据节点操作、重命名操作、排序操作、切换对象视图操作时,即用户的
操作对最终输出数据的结构、内容有影响的时,需更新约束树,进入步骤
205;当用户进行选择操作、隐藏数据节点操作、重命名操作、切换数据
对象视图操作时,即最终输出数据结构发生变化时,需更新结果树,进入
步骤206。

步骤205:更新约束树,进入步骤207。

步骤206:更新结果树,进入步骤207。

步骤207:根据约束树和结果树生成服务实现接口。

步骤208:利用Axis、CXF、XFire等工具将服务接口发布至某一地
址。当然,发布工具并不限于上述几种,这是本领域技术人员易于理解的。

进一步地,在一个优选实施例中,所述步骤201中,对于每个关系表(下
文中以关系表A指代),其转换为数据对象的过程包括下列子步骤(参考图
3):

步骤301:为关系表A构建一个数据对象;并行地执行步骤302和306。

步骤302:遍历关系表A中的每一个属性,对于当前属性,执行步骤303。

步骤303:判断当前属性是否为外键属性。如果判断为否,进入步骤304,
如果判断为是,进入步骤305。

步骤304:将当前属性作为简单属性添加到数据对象内。如果已遍历完关
系表A的所有属性,并且每个引用关系表A的关系表也已经遍历完毕,则
将关系表A转换为数据对象的过程结束。

步骤305:将当前属性所关联的表的结构作为复合属性添加到数据对象
内。如果已遍历完关系表A的所有属性,并且每个引用关系表A的关系表
也已经遍历完毕,则将关系表A转换为数据对象的过程结束。

步骤306:查找所有引用关系表A的关系表,遍历每个引用关系表A的
关系表,对于当前的引用关系表A的关系表(为方便描述,下文称其为关系
表S),执行步骤307。

步骤307:判断关系表S的表定义中是否将对表A的引用字段声明为唯
一(Unique)。如果判断为否,进入步骤309,如果判断为是,进入步骤308。

步骤308:将关系表S的结构作为复合属性添加到所述数据对象内。如
果每个引用关系表A的关系表已经遍历完毕,并且已遍历完关系表A的所
有属性,则将关系表A转换为数据对象的过程结束。

步骤309:将关系表S的结构的列表作为列表属性添加到数据对象内。
如果每个引用关系表A的关系表已经遍历完毕,并且已遍历完关系表A的
所有属性,则将关系表A转换为数据对象的过程结束。

在一个优选实施例中,所述步骤204中,用户在数据对象树视图上进行
配置操作时,需要对用户的配置操作进行有效性验证。表2展示了用户在数
据对象树视图上进行配置操作时的有效性验证方法。

表2


主要包括四个方面:1)对约束操作:对同一数据节点的多个约束操作的
语义不能冲突,如不允许在同一数据节点上进行大于5和小于5的约束操作;
复合属性上的约束和与该复合属性实现关联的关联字段上的约束不能冲突,
如产品表通过分类号引用分类表,则产品对象中不能同时存在分类号为空
(categoryID is null)和分类复合属性不为空(category not null)的约束;
2)对聚合操作:若在一列表属性的简单子属性和复合子属性上进行了聚集操
作,则不能在该列表属性的列表子属性上进行选择操作,这是因为列表属性
无法参与其上级列表节点的聚集,若选择了列表属性则其无法归入某一聚集
后的列表项内;3)对隐藏数据节点操作:不能隐藏列表节点,否则对象无
法区分列表中的多个值;4)对重命名操作:结果树上的兄弟节点不能重名;
5)对排序操作:只能作用在对象树最底层的数据节点上,非最底层的数据节
点是具有嵌套层次的结构体而非单值,在其上排序没有意义。

进一步地,在一个优选实施例中,所述步骤207包括下列子步骤:

步骤401:为每一个数据对象生成一个服务实现接口(即服务接口)。
对于每个数据对象,执行步骤402至406。

步骤402:对于当前数据对象A,从其约束树上抽取出参数,将所抽取出
的参数设为服务接口的输入参数,该参数是在增加约束操作中由用户将约束
内容参数化形成的,这是本领域普通技术人员易于理解的,因此不再详述。

步骤403:根据所述数据对象A的结果树生成返回数据类型,并将服务
实现接口的返回数据类型设为该数据类型。结果树表示了数据对象返回数据
的数据结构,在服务接口中表现为返回数据的数据类型,如面向对象语言中
的类(class)、c语言中的结构体(struct)。这是本领域普通技术人员易于
理解的,因此不再详述。

步骤404:根据所述数据对象A的约束树生成该服务实现接口的处理逻
辑(即内部逻辑)。下文中将进一步介绍本步骤的一种具体实现的实例。

步骤405:根据所述数据对象A的结果树结构将通过步骤404所获得的
查询结果构造为结果树对应数据类型的实例列表并作为服务接口的返回值。
这是本领域普通技术人员易于理解的,因此不再详述。

步骤406:将服务接口提供给Axis等工具以将其发布至某一地址。

进一步地,在一个优选实施例中,所述步骤404中,通过对约束树进行
先序遍历生成服务实现接口的处理逻辑。首先,遍历约束树,将约束树划分
为以其中的列表节点为根节点的若干子树片段,即将原树中所有列表节点与
其父节点之间的边断开所形成的子树片段集合。每个子树中只有根节点为列
表节点,其余均为简单节点、复合节点或约束节点。图5示出了一个将约束
树划分为以其中的列表节点为根节点的若干子树片段的示例。如图5所示,
约束树T1中有四个列表节点,分别是编号1、2、3、6的节点(用菱形表示),
其他节点为非列表节点(用圆形表示),则将此约束树划分为以其中的列表
节点为根节点的若干子树片段后所得的子树片段集合为{T2,T3,T4,T5}。

在划分完子树片段后,从原数据对象(原约束树)根节点所在的子树片
段开始执行构造SQL语句及返回该SQL语句执行的结果数据列表的过程。
该过程是个递归过程,接受名为param的参数,该参数用以表示下级子树与
上级子树的关联,初次执行时(即对原约束树的根节点对应的子树片段执行
该过程时)param为空。该过程返回每个子树的执行结果数据。

在一个优选实施例中,基于子树片段构造SQL语句及返回该SQL语句
的结果列表的过程如图6所示,包括下列步骤:

步骤601:选取一个子树片段seg0,根据该子树片段seg0,构造一个空
的SQL语句。

步骤602:判断参数param是否为空,如果是,直接执行步骤604,如
果否,则执行步骤603。

步骤603:在该SQL语句的where子句中添加XXX=pvalue的子句,其
中XXX为seg0与其直接上级子树片段关联的字段名,pvalue表示的是参数
param的值。

步骤604:根据所述子树片段中各节点的类型,按表3所示方法填充所
述SQL语句,然后执行该SQL语句并获得返回值列表resultList0

步骤605:从SQL语句执行结果resultList0中取下一条记录value0(第
一次时直接取第一条记录)。

步骤606:判断value0是否为空,如果是,直接执行步骤614,如果否,
则执行步骤607。

步骤607:取子树片段seg0的直接下级子树片段seg1(如果有多个直接
下级子树片段,则依次选取,这是本领域技术人员易于理解的)。

步骤608:判断直接下级子树片段seg1是否为空,如果是,则回到步骤
606,如果否,则执行步骤609。

步骤609:对片段seg1递归执行步骤601~614,将value0中表示seg0
与seg1关联的字段值作为参数传入此过程,从而获得对于seg1的返回结果
resultList1。

步骤610:判断片段seg1的根节点上是否有size或(not)null约束,如果
是,则执行步骤611,如果否,则直接执行步骤614。

步骤611:判断resultList1或resultList1的size是否符合片段seg1的根
节点上的约束,如果是,则执行步骤612,如果否,则执行步骤613。

步骤612:将resultList1的值作为value0的中对应列表属性的值加入
value0中,返回步骤607。

步骤613:将value0从resultList0中去掉,返回步骤607。

步骤614:返回resultList0,对子树片段seg0构造SQL语句及返回该
SQL语句的结果列表的过程结束。

表3



需要指出的是,上述优选实施例仅仅是根据约束树生成服务实现接口的
内部逻辑的方法之一。在其它实施例中,生成服务实现接口的内部逻辑的方
法还可以是:将整棵约束树直接构造为一个SQL语句,然后将该SQL语句
的执行结果处理为有层次结构的数据对象实例列表。然而这种方法所需连接
的数据表的数目众多,且在处理多个列表对象嵌套的情况时,会产生大量冗
余的数据需要进行后续处理,会大大影响该过程执行的效率、程序的复杂性
和直观可读性。此外,在另一个实施例中,生成服务实现接口的内部逻辑的
方法为:利用循环而非递归的方式实现上述过程,然而对于处理树形结构的
一般方法为递归,使用循环会提高程序复杂性、降低程序的可读性。

本发明中,对象模型能够反映不同实体间的复杂嵌套关系,且可通过
直观的树形结构表示。利用对象模型来表示关系数据,可将关联多表以一
棵对象树的形式呈现,该对象树可自然覆盖多表间最常见的外键关联关
系,且在表上的查询操作可通过在对象树的节点上的操作实现,免除了手
动编写SQL语句的工作。此外,对象与xml模式有自然的映射关系,对
象模型可直接映射至服务接口模式,因此对象模型是解决上述问题的有效
手段。

下面,给出一个服务封装过程的实例,该实例中,需要借助于Axis、
CXF等服务封装工具,它们能够将已有基于Java等语言编写的应用程序
部署为SOAP或Restful形式的Web服务,本发明的最终服务部署工作通
过此类工具完成。本实例基于如图7-01所示的关系数据模式(产品订单关
系模式)。图7-02~图7-15示出了在一个产品订单关系模式下的配置操作、
服务生成和发布的实例。

Step1:对象化并生成对象视图,该模式中存在7张表,因此对象化的
过程产生了7个对象,每个表对应一个对象。以Products表对应的对象为
例,对象化过程后生成的初始对象视图如图7-02所示。

Step2:为了查看Product对象的分类(Category)、供应商(Supplier)、
订单(OrderDetail)的详细信息,可对Product对象中的CategoryID、
SupplierID、OrderDetails属性进行append操作,此操作可通过在CategoryID
等节点上的右键菜单中的“Append”按钮完成,如图7-03所示,通过此
操作可使用户看到更完整的Product对象视图,图7-04为对Product对象
中的CategoryID、OrderDetails中的OrderID进行Append操作后的对象视
图。

Step3:在对象树上进行的select(选择)操作。select操作通过直接在
对象树各个节点前的选择框内点击勾选,如图705所示,选择操作形成的
结果树如图706所示。

Step4:在对象树上进行若干addConstraint操作,通过点击对象树节
点上的右键菜单中的addConstraint按钮,并在弹出框内填写约束内容实现,
在CategoryName和OrderDetails节点上进行addConstraint操作的过程如图
7-07、图7-08所示,操作后所得的约束树如图7-09所示,其中在
CategoryName上的操作引入了一个参数categoryNameIn,该参数将成为对
象树构成的数据服务的参数。该约束表达的是获取订单数大于100且产品
分类名包含参数categoryNameIn的产品列表,输出结果中包含产品的所有
订单的单价、数量、折扣信息。

Step5:在Product对象的列表属性OrderDetails内的UnitPrice、
Quantity、Discount上进行aggregate(聚集)操作,如图7-10所示,该聚
集是在各个Product对象实例内的OrderDetails列表中进行的,聚集后该列
表属性变为了复合属性(不再是Product的订单列表,而变成了Product
的订单情况汇总),对Product对象本身没有影响。操作后的对象树(即约
束树)如图7-11所示,所得的结果树如图7-12所示。

Step6:在Product对象的复合属性OrderSummary内的TotoalQuantity
上进行sort(排序)操作,如图7-13所示,该排序形成的是根据TotalQuantity
的大小对Product对象的排序。操作后的对象树(即约束树)如图7-14所
示,所得的结果树仍为图7-12所示。

Step7:将操作后的对象树发布为服务,需要用户输入服务及其操作的
名称,如图7-15所示。

Step8:服务生成和发布装置将上述在对象上进行的操作所形成的约束树
和结果树封装并发布为服务,包含如下过程:

1.生成形如结果树的Product对象结构,由如下三个类构成。


2.为该数据对象生成一个数据接口,该接口以数据服务的操作名为方法名,
以对象树中的参数为输入参数,以结果树对应的数据结构为返回类型:

Product[]getProductsInformation(String categoryNameIn);

3.生成该接口内部过程(java代码),以获得符合对象树约束的数据。本例
的实现过程如下:

a)获取所有满足CategoryName约束条件的Product对象,获得方法为如
下的SQL语句,CategoryName的约束值为接口getProductsInformation
的输入参数CategoryNameIn,在运行时获得参数值并设至该SQL语
句中的?处:

Select ProductID,ProductName,QuantityPerUnit,UnitPrice,CategoryID,CategoryName,Discription 
from Product,Category where Product.CategoryID=Category.CategoryID and CategoryName like?;

为该语句执行结果中的每一条记录构造一个Product实例,将该实例中的
属性值设为记录中的相应的字段,所有这些Product实例构成Product实例列
表productInstanceList。

b)对于a步骤中每一个生成的Product实例productInstance,获得该实例
的订单汇总信息,方法为如下SQL语句:

Select avg(UnitPrice)as AveragePrice,sum(Quantity)as TotalQuantity,avg(Discount)as Average 

Discountfrom OrderDetails where count(*)>100and 

OrderDetails.ProductID=producInstancet.productID order by TotalQuantity;

为该语句执行结果中的每一条记录构造一个OrderSummary实例
orderSummaryInstance,将该实例中的属性值设为记录中的相应字段。

将实例productInstance中的orderSummary属性设为
orderSummaryInstance。

c)将productInstanceList作为接口getProductsInformation的返回值。

4.最终通过axis工具将上述接口暴露为Web服务,所生成服务的wsdl服
务描述文件的内容如下(其中下划线部分为与服务化过程相关的接口和
类型信息):





最后应说明的是,以上实施例仅用以说明本发明的技术方案而非对其限
制,并且在应用上可以延伸到其他的修改、变化、应用和实施例,同时认为
所有这样的修改、变化、应用、实施例都在本发明的精神和范围内。

一种关系数据的服务封装系统和方法.pdf_第1页
第1页 / 共35页
一种关系数据的服务封装系统和方法.pdf_第2页
第2页 / 共35页
一种关系数据的服务封装系统和方法.pdf_第3页
第3页 / 共35页
点击查看更多>>
资源描述

《一种关系数据的服务封装系统和方法.pdf》由会员分享,可在线阅读,更多相关《一种关系数据的服务封装系统和方法.pdf(35页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 102841892 A (43)申请公布日 2012.12.26 C N 1 0 2 8 4 1 8 9 2 A *CN102841892A* (21)申请号 201110167622.X (22)申请日 2011.06.21 G06F 17/30(2006.01) (71)申请人中国科学院计算技术研究所 地址 100190 北京市海淀区中关村科学院南 路6号 (72)发明人温彦 房俊 韩燕波 (74)专利代理机构北京泛华伟业知识产权代理 有限公司 11280 代理人王勇 (54) 发明名称 一种关系数据的服务封装系统和方法 (57) 摘要 本发明提供一种关系数据的服。

2、务封装系统, 包括:数据对象生成装置,用于根据关系表生成 数据对象;可视化数据对象配置装置,用于将所 述数据对象以对象树的形式呈现给用户,并接受 用户的配置操作以形成带有配置操作信息的对象 树;以及数据服务生成装置,用于根据所述带有 配置操作信息的对象树为每一个数据对象生成一 个服务实现接口。本发明还提供了相应的关系数 据的服务封装方法。本发明能够直观地呈现关系 数据模式和关联关系,并且能使用户以直观的方 式表达数据获取逻辑,并能够将用户所表达的数 据获取逻辑映射至对关系数据的查询上。 (51)Int.Cl. 权利要求书2页 说明书20页 附图12页 (19)中华人民共和国国家知识产权局 (1。

3、2)发明专利申请 权利要求书 2 页 说明书 20 页 附图 12 页 1/2页 2 1.一种关系数据的服务封装系统,包括: 数据对象生成装置,用于根据关系表生成数据对象; 可视化数据对象配置装置,用于将所述数据对象以对象树的形式呈现给用户,并接受 用户的配置操作以形成带有配置操作信息的对象树;以及 数据服务生成装置,用于为每一个数据对象生成一个服务实现接口;从所述的带有配 置操作信息的对象树中抽取出参数,并将其设为服务实现接口的输入参数;根据所述的带 有配置操作信息的对象树生成返回数据类型,并将服务实现接口的返回类型设为该数据类 型;根据所述的带有配置操作信息的对象树生成该服务实现接口的内部。

4、逻辑。 2.根据权利要求1所述的关系数据的服务封装系统,其特征在于,所述带有配置操作 信息的对象树包括约束树和结果树;所述数据服务生成装置还用于从所述约束树的节点中 抽取出参数,并将其设为服务实现接口的输入参数;根据所述结果树生成返回数据类型,并 将服务实现接口的返回类型设为该数据类型;根据所述约束树生成该服务实现接口的内部 逻辑。 3.根据权利要求1所述的关系数据的服务封装系统,其特征在于,所述数据对象生成 装置还用于对于一个需要生成相应数据对象的关系表,其中的非外键字段构成所述数据对 象的简单属性,其中的外键字段所关联的关系表的结构构成所述数据对象的复合属性,对 于通过外键关联到所述需要生。

5、成相应数据对象的关系表的关系表,当关联关系声明为唯一 时,所述通过外键关联到所述需要生成相应数据对象的关系表的关系表的结构构成所述数 据对象的复合属性,当关联关系没有声明为唯一时,所述通过外键关联到所述需要生成相 应数据对象的关系表的关系表的列表构成所述数据对象的列表属性。 4.根据权利要求1所述的关系数据的服务封装系统,其特征在于,所述可视化数据对 象配置装置用于接受用户的下列配置操作中的一种或多种:选择操作、增加约束操作、聚集 操作、排序操作。 5.根据权利要求4所述的关系数据的服务封装系统,其特征在于,所述可视化数据对 象配置装置还用于接受用户的隐藏数据节点操作和/或重命名操作。 6.根。

6、据权利要求5所述的关系数据的服务封装系统,其特征在于,所述可视化数据对 象配置装置还用于接受用户的展开操作和/或切换数据对象视图。 7.根据权利要求1所述的关系数据的服务封装系统,其特征在于,所述可视化数据对 象配置装置还用于对用户的配置操作进行有效性验证。 8.一种关系数据的服务封装方法,包括下列步骤: 1)将关系表转化为数据对象; 2)将数据对象呈现为数据对象树; 3)用户根据实际需要在数据对象树视图上进行配置操作; 4)根据所述配置操作更新对象树得到带有配置操作信息的对象树; 5)从所述的带有配置操作信息的对象树抽取出服务实现接口的参数、根据所述的带有 配置操作信息的对象树生成服务实现接。

7、口的返回数据类型、生成该服务实现接口的内部逻 辑,从而生成服务实现接口。 9.根据权利要求8所述的关系数据的服务封装方法,其特征在于,所述带有配置操作 信息的对象树包括约束树和结果树; 权 利 要 求 书CN 102841892 A 2/2页 3 所述步骤5)中,从约束树的节点中抽取出参数,并将其设为服务实现接口的输入参 数;根据结果树生成返回数据类型,并将服务实现接口的返回类型设为该数据类型;根据 约束树生成该服务实现接口的内部逻辑。 10.根据权利要求8所述的关系数据的服务封装方法,其特征在于,所述步骤3)中,还 包括对用户的配置操作进行有效性验证,只有通过有效性验证,才能继续执行步骤4)。

8、。 11.根据权利要求8所述的关系数据的服务封装方法,其特征在于,所述步骤3)中,用 户的配置操作包括:展开操作、选择操作、增加约束操作、删除约束操作、聚集操作、隐藏数 据节点操作、重命名操作、排序操作中的一种或多种。 权 利 要 求 书CN 102841892 A 1/20页 4 一种关系数据的服务封装系统和方法 技术领域 0001 本发明涉及数据库技术领域、分布式计算和互联网计算技术领域,具体地说,本发 明涉及一种关系数据的服务封装系统和方法。 背景技术 0002 面向服务的架构(SOA)的典型特征包括松耦合、高重用性、服务封装、位置透明, 以及由此带来的较高的互操作能力等,它以服务为最基。

9、本的可重用单元,服务已成为企业 应用集成、信息集成的主流方式之一。 0003 将企业内的各种数据资源封装为服务是利用服务进行信息集成的关键步骤,一般 地,将这类从数据源获取数据的服务称为数据服务,也称为数据提供服务,数据服务所提供 的数据是符合特定逻辑的,它们有可能是对数据源的查询结果,也可能是对数据源进行过 滤、变换等处理后的数据等。将数据封装为服务一方面是数据服务提供者提供特定逻辑的 数据获取服务时必须进行的工作,另一方面在公共数据平台上,平台运行维护者提供大量 数据,数据使用者也可将所需数据进行封装以获得满足自身需求的数据服务。 0004 当前主要的服务实现技术包括SOAP Web服务和。

10、Restful Web服务等,前者利用 WSDL标准来描述服务、利用SOAP作为消息传输协议,同时包括UDDI、WS-Addressing等协 议栈,是企业级面向服务架构的基本实现方案,后者是轻量级服务的代表,它将网络上的所 有事物抽象为资源,通过URL地址来描述资源,通过标准的HTTP方法来操作资源。服务封 装的目标是将各种资源或业务逻辑发布为基于这些具体技术的Web服务。 0005 现有的关系数据服务封装的方法大多将复杂的SQL查询语句封装为服务,将SQL 语句的参数和投影结果抽取出来作为服务的输入输出参数。其缺陷是:用户需要浏览多个 表以了解表之间的关联关系,且需要编写复杂的SQL语句,。

11、运行调试以保证语法正确,再在 此基础上进行服务封装,用户的体验较差。另一种方法是将各个表的数据单独封装为服务, 用户在这些数据服务的基础上进行组合操作以实现复杂逻辑。其缺陷是未考虑关系表之间 的关系,无法反映特定的数据获取逻辑(此处的数据获取逻辑指类似于SQL的数据查询逻 辑),用户需要在获得所有表的数据后才能通过组合操作表达复杂逻辑,因此这种方法与直 接在服务中封装数据获取逻辑相比,其效率明显降低。并且,利用上述两种方法封装的服务 所获得的数据均为扁平结构,即缺乏数据之间的内在逻辑层次。 0006 因此,当前迫切需要一种关系数据的服务封装系统和方法,该服务封装系统和方 法能够直观地呈现关系数。

12、据模式和关联关系,能使用户以直观的方式表达数据获取逻辑, 并能够将用户所表达的数据获取逻辑映射至对关系数据的查询上。 发明内容 0007 本发明的目的是提供一种能够直观地呈现关系数据模式和关联关系,能使用户以 直观的方式表达数据获取逻辑,并能够将用户所表达的数据获取逻辑自动映射至对关系数 据的查询,同时将查询过程自动封装为程序接口并发布为可访问服务的关系数据的服务封 说 明 书CN 102841892 A 2/20页 5 装系统和方法。 0008 为实现上述发明目的,本发明提供了一种关系数据的服务封装系统,包括: 0009 数据对象生成装置,用于根据关系表生成数据对象; 0010 可视化数据对。

13、象配置装置,用于将所述数据对象以对象树的形式呈现给用户,并 接受用户的配置操作以形成带有配置操作信息的对象树;以及 0011 数据服务生成和发布装置,用于为每一个数据对象生成一个服务实现接口;从所 述的带有配置操作信息的对象树中抽取出参数,并将其设为服务实现接口的输入参数;根 据所述的带有配置操作信息的对象树生成返回数据类型,并将服务实现接口的返回类型设 为该数据类型;根据所述的带有配置操作信息的对象树生成该服务实现接口的内部逻辑; 将生成的服务实现接口发布到某一地址上。 0012 其中,所述带有配置操作信息的对象树包括约束树和结果树;所述数据服务生成 和发布装置,还用于从所述约束树的节点中抽。

14、取出参数,并将其设为服务实现接口的输入 参数;根据所述结果树生成返回数据类型,并将服务实现接口的返回类型设为该数据类型; 根据所述约束树生成该服务实现接口的内部逻辑。 0013 其中,所述数据对象生成装置,还用于对于一个需要生成相应数据对象的关系表, 其中的非外键字段构成所述数据对象的简单属性,其中的外键字段所关联的关系表的结构 构成所述数据对象的复合属性,对于通过外键关联到所述需要生成相应数据对象的关系表 的关系表,当关联关系声明为唯一时,所述通过外键关联到所述需要生成相应数据对象的 关系表的关系表的结构构成所述数据对象的复合属性,当关联关系没有声明为唯一时,所 述通过外键关联到所述需要生成。

15、相应数据对象的关系表的关系表的列表构成所述数据对 象的列表属性。 0014 其中,所述可视化数据对象配置装置用于接受用户的下列配置操作中的一种或多 种:选择操作、增加约束操作、聚集操作、排序操作。 0015 其中,所述可视化数据对象配置装置还用于接受用户的隐藏数据节点操作和/或 重命名操作。 0016 其中,所述可视化数据对象配置装置还用于接受用户的展开操作和/或切换数据 对象视图。 0017 其中,所述可视化数据对象配置装置还用于对用户的配置操作进行有效性验证。 0018 本发明还提供了相应的关系数据的服务封装方法,包括下列步骤: 0019 1)将关系表转化为数据对象; 0020 2)将数据。

16、对象呈现为数据对象树; 0021 3)用户根据实际需要在数据对象树视图上进行配置操作; 0022 4)根据所述配置操作更新对象树得到带有配置操作信息的对象树; 0023 5)从所述的带有配置操作信息的对象树抽取出服务实现接口的参数、根据所述的 带有配置操作信息的对象树生成服务实现接口的返回数据类型、生成该服务实现接口的内 部逻辑,从而生成服务实现接口; 0024 6)将所生成的服务实现接口发布至某一地址。 0025 其中,所述带有配置操作信息的对象树包括约束树和结果树; 0026 所述步骤5)中,从约束树的节点中抽取出参数,并将其设为服务实现接口的输入 说 明 书CN 102841892 A 。

17、3/20页 6 参数;根据结果树生成返回数据类型,并将服务实现接口的返回类型设为该数据类型;根 据约束树生成该服务实现接口的内部逻辑。 0027 其中,所述步骤3)中,还包括对用户的配置操作进行有效性验证,只有通过有效 性验证,才能继续执行步骤4)。 0028 其中,所述步骤3)中,用户的配置操作包括:展开操作、选择操作、增加约束操作、 删除约束操作、聚集操作、隐藏数据节点操作、重命名操作、排序操作中的一种或多种。 0029 相对于现有技术,本发明具有下列技术效果: 0030 1、能够直观地呈现关系数据模式和关联关系,并且能使用户以直观的方式表达数 据获取逻辑,并能够将用户所表达的数据获取逻辑。

18、映射至对关系数据的查询上。 0031 2、通过对象树呈现关系数据模式,覆盖了关系数据中最常见的基于外键引用的数 据库表连接,同时表达了引用和被引用关系,且这种关系是可在视图上逐层扩展和深入的, 并且可基于此关联关系即时转换视图焦点,即当前主要描述的数据对象。 0032 3、用户对数据对象的操作覆盖了基本的数据库查询操作,同数据对象本身包涵的 引用和被引用关系一起能够覆盖绝大多数的数据库查询需求。 0033 4、能够自动化地将用户以可视化操作的方式表达的数据获取逻辑转化为用程序 设计语言和数据库操作语言实现的程序过程,并且发布为可通过网络访问的Web服务。服 务的接口保留了符合用户需求的数据层次。

19、结构。 附图说明 0034 图1示出了本发明一个实施例的关系数据可视化服务封装系统的结构示意图; 0035 图2示出了本发明一个实施例的关系数据可视化服务封装方法的流程图; 0036 图3示出了本发明一个实施例的将关系数据对象化的方法流程图; 0037 图4示出了本发明一个实施例的中利用数据服务生成和发布装置生成服务接口 并发布的流程图; 0038 图5示出了本发明一个实施例中将约束树划分为子树片段的示例; 0039 图6示出了本发明一个实施例中基于子树片段构造SQL语句及返回该SQL语句的 结果列表的递归过程; 0040 图7-01示出了一个关系数据模式的示例; 0041 图7-02示出了一。

20、个将图7-01中的示例对象化过程后生成的初始对象视图的示 例; 0042 图7-03示出了一个append操作的示例; 0043 图7-04示出了图7-03的append操作后的对象视图示例; 0044 图7-05示出了一个select操作的示例; 0045 图7-06示出了图7-05的select操作形成的结果树示例; 0046 图7-07示出了在一个节点上进行addConstraint操作的示例; 0047 图7-08示出了在另一个节点上进行addConstraint操作的示例; 0048 图7-09示出了图7-07、7-08的addConstraint操作后所得的约束树示例; 0049 。

21、图7-10示出了一个aggregate操作的示例; 0050 图7-11示出了图7-10的aggregate操作后的约束树的示例; 说 明 书CN 102841892 A 4/20页 7 0051 图7-12示出了图7-10的aggregate操作后的结果树的示例; 0052 图7-13示出了一个sort操作的示例; 0053 图7-14示出了图7-13的sort操作后的约束树的示例; 0054 图7-15示出了将操作后的对象树发布为服务的过程中用户输入服务名称及服务 操作名称的示例。 具体实施方式 0055 下面结合附图和实施例对本发明做进一步地描述。 0056 根据本发明的一个实施例,提供。

22、了一种关系数据的服务封装系统,该服务封装系 统是一个基于对象的关系数据可视化服务封装系统。如图1所示,所述基于对象的关系数 据可视化服务封装系统100包括一个数据对象生成装置101,一个可视化数据对象配置装 置102和一个数据服务生成和发布装置105。数据对象生成装置101将数据库中的相互关 联的各个关系表转化为数据对象;可视化数据对象配置装置102包含对象树展示模块103 和配置操作验证和处理模块104,前者负责数据对象的呈现,后者负责处理在数据对象上的 配置操作,保证操作的有效性;数据服务生成和发布装置105包含服务实现接口和参数类 型生成模块106和服务发布模块107,前者将用户对数据对。

23、象的配置操作转化为对关系数 据的查询及相关处理逻辑,生成参数类型以及服务实施代码和接口,后者利用Axis等服务 发布工具将接口发布为可访问的服务。下面分别介绍数据对象生成装置101、可视化数据对 象配置装置102、数据服务生成和发布装置105。 0057 一、数据对象生成装置 0058 数据对象由根据关系表及其关联关系而得出的属性构成,这些属性包括简单属 性、复合属性、列表属性。在一个优选实施例中,数据对象生成装置为每个关系表生成一个 数据对象,关系表中的非外键字段构成数据对象的简单属性;关系表中的外键字段所关联 的表的结构构成了该数据对象的复合属性,对于通过外键关联到该关系表的关系表,其结 。

24、构或其列表构成了该数据对象的复合或列表属性,这取决于该关联关系(即引用关系)定 义时是否声明为唯一(unique),若是,表明该关联为一对一关联,该属性为复合属性,否则 该属性为列表属性。为了更易于理解,下面举例说明复合属性和列表属性。 0059 复合属性构成的根源为引用关系,例如表A的结构为A(c1,c2,c3),表B的结构为 B(c4,c5,c6),下划线表示主键,其中表A中的c3字段引用了表B的c4字段,则表A对应的 数据对象结构为: 0060 说 明 书CN 102841892 A 5/20页 8 0061 即表B的结构在数据对象结构A中构成了复合属性; 0062 列表属性构成的根源为。

25、被引用关系,在上面的例子中,表B对应的数据结构对象 为: 0063 0064 0065 即表A的结构在数据对象结构B中构成了列表属性。 0066 二、可视化数据对象配置装置 0067 在一个优选实施例中,可视化数据对象配置装置以选择树的形式呈现数据对象的 结构,允许用户以界面操作的形式对数据对象进行配置操作,配置的结果是形成带有配置 操作信息的对象树。在一个实施例中,带有配置操作信息的对象树包括两棵树,一棵是在数 据对象树上附加了约束操作节点而形成的约束树;一棵是由约束树所表达的数据获取逻辑 所生成的结果数据的结构树,称为结果树。 0068 数据对象以选择树的形式呈现,默认情况下,数据对象树只。

26、显示其简单属性和它 所关联(即引用)到以及关联到它(即被引用)的关系表的关联字段属性,目的在于防止 引用层次过多而造成的数据对象树视图爆炸。基于引用和被引用关系的复合和列表属性可 根据需要逐层展开。数据对象中的简单属性对应于数据对象树中的简单属性节点,数据对 象中的复合属性对应于数据对象树中的复合属性节点,数据对象中的列表属性对应于数据 对象树中的列表属性节点。 说 明 书CN 102841892 A 6/20页 9 0069 数据对象配置装置中定义了若干配置操作,操作的对象为对象树的节点,配置操 作的结果为在操作的节点上更新结果树或/和约束树。将数据对象树中的各个属性节点称 为数据节点,将配。

27、置操作过程中增加的节点称为约束节点,需要注意的是,复合和列表属性 在未展开前不具有子节点,表示的是关联字段,此时对复合和列表节点的操作是对关联字 段的操作;在展开操作后拥有了子节点,此时对复合和列表节点的操作则变为了对复合结 构的操作。 0070 在一个优选实施例中,配置操作包括: 0071 1.展开(append):append操作的作用对象是数据对象中未展开的复合属性或列 表属性,其作用是根据该复合属性或列表引用或被引关系表的结构将其展开为复合结构, 且将关联字段移至该复合属性或列表属性内部。append操作能够通过关系表间的引用关系 将数据对象逐层展开至更深层次的数据,允许用户获得更全面。

28、和完整的数据对象视图。 0072 2.选择(select):select操作对象是对象树的某一节点,其作用是选择该节点及 其所有子节点作为数据获取结果的结构。该操作的结果将选择的节点构成结果树,并且保 留原对象的层次结构。 0073 3.增加约束(addConstraint):addConstraint操作作用在数据节点上。对于不 同的类型的数据节点允许的约束操作内容不同:在简单属性节点(后称为简单节点)上可 进行基本取值约束操作,不同数据类型的属性上可添加的约束不同,包括、 、!、(NOT)BETWEEN AND、(NOT)IN、(NOT)LIKE、IS NULL、IS NOT NULL等,。

29、它们的语 义与其在SQL中的语义相同;在复合属性节点(后称为复合节点)上可进行IS NULL、IS NOT NULL约束;在列表属性节点(后称为列表节点)上可进行IS NULL、IS NOT NULL以及 SIZE的、!、(NOT)BETWEEN AND、(NOT)IN约束操作。约束操作中可 将约束内容参数化,即作为最终生成的数据服务的参数。可在某个数据节点上进行零次至 多次的约束操作,每个节点上的多个约束不可冲突。每一个约束操作在其所操作的节点上 形成一个子节点。 0074 4.聚集(aggregate):aggregate操作作用在简单节点上,其作用是在简单节点上 实施聚集函数,并且按照s。

30、elect操作所选择的属性进行分组,聚集函数包括count、sum、 avg、min、max等。聚集操作将更新结果树,在结果树上呈现应用了聚集函数后的数据属性 名称;在所操作的数据节点上形成了一个聚集函数标识的约束子节点,且在该约束子节点 上可附加对该函数取值进行约束的子节点。由于数据对象拥有复合和列表类型的属性因此 数据对象上的聚集操作根据其作用属性类型的不同产生的效果也不同: 0075 a)当聚集操作作用在数据对象的某个非列表子节点上时,聚集函数的结果是该数 据对象上的聚集。 0076 b)当聚集操作作用在数据对象的某个列表子节点内时,则聚集的结果是对该数据 对象的各个实例内该列表属性的分。

31、组和聚集,而非对数据对象的聚集。 0077 数据对象本身代表了一个关系表,亦是列表类型,上述两种效果适用于对象树展 开后的任意列表节点。 0078 5.隐藏数据节点(hideDataNode):数据对象的属性可以是多层嵌套的结构, hideDataNode可将嵌套路径上不需要的数据节点隐藏,使嵌套层次减少。该操作不能在列 表节点上进行。该操作在数据节点上形成约束子节点,并且会更新结果树,从结果树中删除 说 明 书CN 102841892 A 7/20页 10 被隐藏的中间节点。 0079 6.重命名(rename):rename操作对已选择的数据节点进行重命名,在操作的节点 上形成约束子节点,。

32、并且对结果树的相应节点名称进行更新。 0080 7.排序(sort):sort操作的作用对象是简单节点,若该简单节点不是某个列表节 点的子节点,则是对整个数据对象的排序,若是,则是对该数据对象的各个实例内该列表属 性的排序,此效果适用于对象树展开后的任意列表节点。允许多个排序和指定升降序,按顺 序优先进行排序。该操作在数据节点上形成约束子节点。 0081 8.切换数据对象视图(navigateTo):数据对象的复合和列表属性表达了它与其 他关系表的关联关系,navigateTo操作能够将当前的数据对象视图切换到它所关联的表所 对应的数据对象视图,从而允许用户能够以不同的数据对象作为根节点,以获。

33、得更符合其 查询需求的数据对象视角。 0082 表1中列出了一个实施例中各配置操作与SQL语言的命令之间的对应关系和相关 说明。 0083 表1 0084 说 明 书CN 102841892 A 10 8/20页 11 0085 0086 三、数据服务生成和发布装置 0087 在一个优选实施例中,数据服务生成和发布装置用于将数据对象树上的各个操 作最终转化为基于java、c、c+、c#等程序设计语言实现的服务接口,并通过Axis、CXF、 XFire等服务发布工具(该类工具可将用java、c、c+、c#等语言编写的函数或类发布至 一个可访问的网络地址)将该接口发布为Web服务。具体地,在用户基。

34、于可视化数据对象 配置装置对对象树进行配置后,数据服务生成和发布装置为每一个数据对象生成一个服务 实现接口;从约束树上标记有参数的约束节点中抽取出参数,并将其设为服务实现接口的 输入参数;根据结果树生成返回数据类型,并将服务实现接口的返回类型设为该数据类型; 说 明 书CN 102841892 A 11 9/20页 12 根据约束树生成该服务实现接口的内部逻辑;根据结果树的结构,将查询结果构造为符合 结果树对应数据类型的实例列表;将生成的服务实现接口发布到相应的地址上(例如利用 Axis、CXF、XFire等工具将生成的服务实现接口发布到特定的地址上)。 0088 对象树上对简单属性和复合属性。

35、的操作可通过单个SQL语句实现(复合节点可处 理为多表连接(join),配置操作与SQL语句的对应关系见表1)。 0089 列表节点具有一定的特殊性,假设一个数据对象包含列表子节点,则应当对该数 据对象中的每一个实例获取该列表节点的数据并添加到该实例中;该列表节点与数据对象 相对独立,即列表节点的子节点的约束操作不影响数据对象的取值;然而当列表节点上有 size或(not)null约束时,列表取值对数据对象的取值有影响,尤其在数据对象上有聚集 操作时,应当在列表属性完成对数据对象的结果的筛选后再进行数据对象的聚集。这些特 征在整个对象树的列表节点上适用。因此对对象树的每一个列表属性单独获得其数。

36、据,且 将对象树上的所有列表节点按照路径关系处理为上下级关系:若列表节点A到列表节点B 有一条自顶向下的路径,且该路径中不包含任何其他列表节点,则称A为B的上级节点,B为 A的下级节点。 0090 根据本发明的另一个实施例,还提供了一种关系数据的服务封装方法,其总体流 程如图2所示,包括下列步骤: 0091 步骤201:将关系表转化为数据对象。关系表与数据对象的映射关系已经在前文 中叙述,此处不再赘述。 0092 步骤202:将数据对象呈现为数据对象树。 0093 步骤203:用户根据实际需要在数据对象树视图上进行配置操作。配置操作包括: 展开、选择、增加约束、删除约束、聚集、隐藏数据节点、重。

37、命名、排序、切换数据对象视图等。 这些配置操作的内涵已在前文中描述,因此此处不再赘述。 0094 步骤204:判断配置操作是否有效;如判断为否,回到步骤203;如判断为是,根据 配置操作的类型进入步骤205或206。具体地,当用户进行展开操作、选择操作、增加约束 操作、删除约束操作、聚集操作、隐藏数据节点操作、重命名操作、排序操作、切换对象视图 操作时,即用户的操作对最终输出数据的结构、内容有影响的时,需更新约束树,进入步骤 205;当用户进行选择操作、隐藏数据节点操作、重命名操作、切换数据对象视图操作时,即 最终输出数据结构发生变化时,需更新结果树,进入步骤206。 0095 步骤205:更。

38、新约束树,进入步骤207。 0096 步骤206:更新结果树,进入步骤207。 0097 步骤207:根据约束树和结果树生成服务实现接口。 0098 步骤208:利用Axis、CXF、XFire等工具将服务接口发布至某一地址。当然,发布 工具并不限于上述几种,这是本领域技术人员易于理解的。 0099 进一步地,在一个优选实施例中,所述步骤201中,对于每个关系表(下文中以关 系表A指代),其转换为数据对象的过程包括下列子步骤(参考图3): 0100 步骤301:为关系表A构建一个数据对象;并行地执行步骤302和306。 0101 步骤302:遍历关系表A中的每一个属性,对于当前属性,执行步骤3。

39、03。 0102 步骤303:判断当前属性是否为外键属性。如果判断为否,进入步骤304,如果判断 为是,进入步骤305。 说 明 书CN 102841892 A 12 10/20页 13 0103 步骤304:将当前属性作为简单属性添加到数据对象内。如果已遍历完关系表A的 所有属性,并且每个引用关系表A的关系表也已经遍历完毕,则将关系表A转换为数据对象 的过程结束。 0104 步骤305:将当前属性所关联的表的结构作为复合属性添加到数据对象内。如果 已遍历完关系表A的所有属性,并且每个引用关系表A的关系表也已经遍历完毕,则将关系 表A转换为数据对象的过程结束。 0105 步骤306:查找所有引。

40、用关系表A的关系表,遍历每个引用关系表A的关系表,对 于当前的引用关系表A的关系表(为方便描述,下文称其为关系表S),执行步骤307。 0106 步骤307:判断关系表S的表定义中是否将对表A的引用字段声明为唯一 (Unique)。如果判断为否,进入步骤309,如果判断为是,进入步骤308。 0107 步骤308:将关系表S的结构作为复合属性添加到所述数据对象内。如果每个引 用关系表A的关系表已经遍历完毕,并且已遍历完关系表A的所有属性,则将关系表A转换 为数据对象的过程结束。 0108 步骤309:将关系表S的结构的列表作为列表属性添加到数据对象内。如果每个 引用关系表A的关系表已经遍历完毕。

41、,并且已遍历完关系表A的所有属性,则将关系表A转 换为数据对象的过程结束。 0109 在一个优选实施例中,所述步骤204中,用户在数据对象树视图上进行配置操作 时,需要对用户的配置操作进行有效性验证。表2展示了用户在数据对象树视图上进行配 置操作时的有效性验证方法。 0110 表2 0111 0112 主要包括四个方面:1)对约束操作:对同一数据节点的多个约束操作的语义不能 冲突,如不允许在同一数据节点上进行大于5和小于5的约束操作;复合属性上的约束和 与该复合属性实现关联的关联字段上的约束不能冲突,如产品表通过分类号引用分类表, 则产品对象中不能同时存在分类号为空(categoryID is。

42、 null)和分类复合属性不为空 (category not null)的约束;2)对聚合操作:若在一列表属性的简单子属性和复合子属 性上进行了聚集操作,则不能在该列表属性的列表子属性上进行选择操作,这是因为列表 属性无法参与其上级列表节点的聚集,若选择了列表属性则其无法归入某一聚集后的列表 说 明 书CN 102841892 A 13 11/20页 14 项内;3)对隐藏数据节点操作:不能隐藏列表节点,否则对象无法区分列表中的多个值;4) 对重命名操作:结果树上的兄弟节点不能重名;5)对排序操作:只能作用在对象树最底层 的数据节点上,非最底层的数据节点是具有嵌套层次的结构体而非单值,在其上排。

43、序没有 意义。 0113 进一步地,在一个优选实施例中,所述步骤207包括下列子步骤: 0114 步骤401:为每一个数据对象生成一个服务实现接口(即服务接口)。对于每个数 据对象,执行步骤402至406。 0115 步骤402:对于当前数据对象A,从其约束树上抽取出参数,将所抽取出的参数设 为服务接口的输入参数,该参数是在增加约束操作中由用户将约束内容参数化形成的,这 是本领域普通技术人员易于理解的,因此不再详述。 0116 步骤403:根据所述数据对象A的结果树生成返回数据类型,并将服务实现接口 的返回数据类型设为该数据类型。结果树表示了数据对象返回数据的数据结构,在服务 接口中表现为返回。

44、数据的数据类型,如面向对象语言中的类(class)、c语言中的结构体 (struct)。这是本领域普通技术人员易于理解的,因此不再详述。 0117 步骤404:根据所述数据对象A的约束树生成该服务实现接口的处理逻辑(即内 部逻辑)。下文中将进一步介绍本步骤的一种具体实现的实例。 0118 步骤405:根据所述数据对象A的结果树结构将通过步骤404所获得的查询结果 构造为结果树对应数据类型的实例列表并作为服务接口的返回值。这是本领域普通技术人 员易于理解的,因此不再详述。 0119 步骤406:将服务接口提供给Axis等工具以将其发布至某一地址。 0120 进一步地,在一个优选实施例中,所述步骤。

45、404中,通过对约束树进行先序遍历生 成服务实现接口的处理逻辑。首先,遍历约束树,将约束树划分为以其中的列表节点为根节 点的若干子树片段,即将原树中所有列表节点与其父节点之间的边断开所形成的子树片段 集合。每个子树中只有根节点为列表节点,其余均为简单节点、复合节点或约束节点。图5 示出了一个将约束树划分为以其中的列表节点为根节点的若干子树片段的示例。如图5所 示,约束树T1中有四个列表节点,分别是编号1、2、3、6的节点(用菱形表示),其他节点为 非列表节点(用圆形表示),则将此约束树划分为以其中的列表节点为根节点的若干子树 片段后所得的子树片段集合为T2,T3,T4,T5。 0121 在划分。

46、完子树片段后,从原数据对象(原约束树)根节点所在的子树片段开始执 行构造SQL语句及返回该SQL语句执行的结果数据列表的过程。该过程是个递归过程,接 受名为param的参数,该参数用以表示下级子树与上级子树的关联,初次执行时(即对原约 束树的根节点对应的子树片段执行该过程时)param为空。该过程返回每个子树的执行结 果数据。 0122 在一个优选实施例中,基于子树片段构造SQL语句及返回该SQL语句的结果列表 的过程如图6所示,包括下列步骤: 0123 步骤601:选取一个子树片段seg0,根据该子树片段seg0,构造一个空的SQL语 句。 0124 步骤602:判断参数param是否为空,。

47、如果是,直接执行步骤604,如果否,则执行步 骤603。 说 明 书CN 102841892 A 14 12/20页 15 0125 步骤603:在该SQL语句的where子句中添加XXXpvalue的子句,其中XXX为 seg0与其直接上级子树片段关联的字段名,pvalue表示的是参数param的值。 0126 步骤604:根据所述子树片段中各节点的类型,按表3所示方法填充所述SQL语 句,然后执行该SQL语句并获得返回值列表resultList0 0127 步骤605:从SQL语句执行结果resultList0中取下一条记录value0(第一次时 直接取第一条记录)。 0128 步骤606。

48、:判断value0是否为空,如果是,直接执行步骤614,如果否,则执行步骤 607。 0129 步骤607:取子树片段seg0的直接下级子树片段seg1(如果有多个直接下级子树 片段,则依次选取,这是本领域技术人员易于理解的)。 0130 步骤608:判断直接下级子树片段seg1是否为空,如果是,则回到步骤606,如果 否,则执行步骤609。 0131 步骤609:对片段seg1递归执行步骤601614,将value0中表示seg0与seg1 关联的字段值作为参数传入此过程,从而获得对于seg1的返回结果resultList1。 0132 步骤610:判断片段seg1的根节点上是否有size或(not)null约束,如果是,则 执行步骤611,如果否,则直接执行步骤614。 0133 步骤611:判断resultList1或resultList1的size是否符合片段seg1的根节 点上的约束,如果是,则执行步骤612,如果否,则执行步骤613。 0134 步骤612:将resultList1的值作为value0的中对应列表属性的值加入value0 中,返回步骤607。 0135 步骤613:将value0从resultList0中去掉,返回步骤607。 0136 步骤614:返回resultList0,对子树片段seg0构造SQL语句及返回该SQL语句的 结果列表的过程结束。 。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1