CN102841892A - 一种关系数据的服务封装系统和方法 - Google Patents
一种关系数据的服务封装系统和方法 Download PDFInfo
- Publication number
- CN102841892A CN102841892A CN201110167622XA CN201110167622A CN102841892A CN 102841892 A CN102841892 A CN 102841892A CN 201110167622X A CN201110167622X A CN 201110167622XA CN 201110167622 A CN201110167622 A CN 201110167622A CN 102841892 A CN102841892 A CN 102841892A
- Authority
- CN
- China
- Prior art keywords
- data
- tree
- service
- data object
- relation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种关系数据的服务封装系统,包括:数据对象生成装置,用于根据关系表生成数据对象;可视化数据对象配置装置,用于将所述数据对象以对象树的形式呈现给用户,并接受用户的配置操作以形成带有配置操作信息的对象树;以及数据服务生成装置,用于根据所述带有配置操作信息的对象树为每一个数据对象生成一个服务实现接口。本发明还提供了相应的关系数据的服务封装方法。本发明能够直观地呈现关系数据模式和关联关系,并且能使用户以直观的方式表达数据获取逻辑,并能够将用户所表达的数据获取逻辑映射至对关系数据的查询上。
Description
技术领域
本发明涉及数据库技术领域、分布式计算和互联网计算技术领域,具体地说,本发明涉及一种关系数据的服务封装系统和方法。
背景技术
面向服务的架构(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 NOTNULL约束;在列表属性节点(后称为列表节点)上可进行IS NULL、IS NOTNULL以及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,Discriptionfrom 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服务描述文件的内容如下(其中下划线部分为与服务化过程相关的接口和类型信息):
最后应说明的是,以上实施例仅用以说明本发明的技术方案而非对其限制,并且在应用上可以延伸到其他的修改、变化、应用和实施例,同时认为所有这样的修改、变化、应用、实施例都在本发明的精神和范围内。
Claims (11)
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)中,用户的配置操作包括:展开操作、选择操作、增加约束操作、删除约束操作、聚集操作、隐藏数据节点操作、重命名操作、排序操作中的一种或多种。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110167622XA CN102841892A (zh) | 2011-06-21 | 2011-06-21 | 一种关系数据的服务封装系统和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110167622XA CN102841892A (zh) | 2011-06-21 | 2011-06-21 | 一种关系数据的服务封装系统和方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102841892A true CN102841892A (zh) | 2012-12-26 |
Family
ID=47369265
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110167622XA Pending CN102841892A (zh) | 2011-06-21 | 2011-06-21 | 一种关系数据的服务封装系统和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102841892A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104794130A (zh) * | 2014-01-20 | 2015-07-22 | 华为技术有限公司 | 一种表间关联查询方法和装置 |
CN111061917A (zh) * | 2019-12-04 | 2020-04-24 | 西安鼎蓝通信技术有限公司 | 一种数据驱动映射转换方法 |
WO2021128955A1 (zh) * | 2019-12-27 | 2021-07-01 | 上海莉莉丝科技股份有限公司 | 可视化的数据操作方法、系统、设备和介质 |
CN113656438A (zh) * | 2021-08-06 | 2021-11-16 | 北京数码大方科技股份有限公司 | 数据树的数据查询方法及装置 |
CN113722126A (zh) * | 2021-09-09 | 2021-11-30 | 北京沃东天骏信息技术有限公司 | 一种请求处理方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101887464A (zh) * | 2010-07-23 | 2010-11-17 | 北京数码大方科技有限公司 | 显示数据库中的数据的方法、装置 |
CN101980213A (zh) * | 2010-11-23 | 2011-02-23 | 中国科学院软件研究所 | 一种基于j2ee的数据持久化方法及系统 |
-
2011
- 2011-06-21 CN CN201110167622XA patent/CN102841892A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101887464A (zh) * | 2010-07-23 | 2010-11-17 | 北京数码大方科技有限公司 | 显示数据库中的数据的方法、装置 |
CN101980213A (zh) * | 2010-11-23 | 2011-02-23 | 中国科学院软件研究所 | 一种基于j2ee的数据持久化方法及系统 |
Non-Patent Citations (1)
Title |
---|
匿名: "框架经理-FrameworkManager简介", 《WWW.51TESTING.COM/HTML/91/N-102091.HTML》, 8 January 2009 (2009-01-08), pages 1 - 7 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104794130A (zh) * | 2014-01-20 | 2015-07-22 | 华为技术有限公司 | 一种表间关联查询方法和装置 |
CN104794130B (zh) * | 2014-01-20 | 2018-05-18 | 华为技术有限公司 | 一种表间关联查询方法和装置 |
CN111061917A (zh) * | 2019-12-04 | 2020-04-24 | 西安鼎蓝通信技术有限公司 | 一种数据驱动映射转换方法 |
WO2021128955A1 (zh) * | 2019-12-27 | 2021-07-01 | 上海莉莉丝科技股份有限公司 | 可视化的数据操作方法、系统、设备和介质 |
US11954116B2 (en) | 2019-12-27 | 2024-04-09 | Shanghai Lilith Technology Corporation | Visual data operation method, system, and device, and medium |
CN113656438A (zh) * | 2021-08-06 | 2021-11-16 | 北京数码大方科技股份有限公司 | 数据树的数据查询方法及装置 |
CN113656438B (zh) * | 2021-08-06 | 2023-12-12 | 北京数码大方科技股份有限公司 | 数据树的数据查询方法及装置 |
CN113722126A (zh) * | 2021-09-09 | 2021-11-30 | 北京沃东天骏信息技术有限公司 | 一种请求处理方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8095472B2 (en) | Business object acting as a logically central source for collaboration on objectives | |
Huang et al. | Cloud manufacturing service platform for small-and medium-sized enterprises | |
CN102622675B (zh) | 一种实现集群式供应链环境下企业互操作的方法及系统 | |
US7991800B2 (en) | Object oriented system and method for optimizing the execution of marketing segmentations | |
CN101350023B (zh) | 一种基于服务组合的可定制查询方法与平台 | |
US8412549B2 (en) | Analyzing business data for planning applications | |
Rudolf et al. | The graph story of the SAP HANA database | |
US8195698B2 (en) | Hierarchy manager for master data management | |
Wu et al. | Semantic hyper-graph-based knowledge representation architecture for complex product development | |
US8412813B2 (en) | Customizable asset governance for a distributed reusable software library | |
US20080162266A1 (en) | Business object acting as a logically central source for agreements on objectives | |
US8949291B2 (en) | Automatic conversion of multidimentional schema entities | |
US20130060825A1 (en) | Managing classification hierarchies in master data management environments | |
CN103593752B (zh) | 一种基于情境约束的业务流程适应性配置方法及系统 | |
US20140006216A1 (en) | Distributed order orchestration system that transforms sales products to fulfillment products | |
CN102841892A (zh) | 一种关系数据的服务封装系统和方法 | |
CN103164573B (zh) | Pdm管理设计系统 | |
CN107291925A (zh) | 一种基于业务模型的审批数据沉淀方法 | |
US9032362B2 (en) | System and method for generating high performance calculators for calculation graphs | |
CN110249356A (zh) | 一种用户定义的erp功能的共享方法及系统 | |
CN108536718A (zh) | 一种基于输入输出语义化实现的管理信息化的方法和系统 | |
CN107729396A (zh) | 数据动态查询方法及装置 | |
López et al. | A component-based approach for engineering enterprise mashups | |
CN103970900B (zh) | 基于工业现场的多维交叉数据柔性管理方法及系统 | |
CN113568923A (zh) | 数据库中数据的查询方法和装置、存储介质及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20121226 |