admin 管理员组文章数量: 887021
2024年1月24日发(作者:下拉框是哪个控件)
[19]中华人民共和国国家知识产权局[12]发明专利申请公布说明书[21]申请号2.5[51].G06F 17/30 (2006.01)[43]公开日2009年12月2日[22]申请日2008.05.30[21]申请号2.5[71]申请人国际商业机器公司地址美国纽约[72]发明人曹锋 马力 孙行智 王晨 王晓元 潘越
查尔斯·丹尼尔·沃尔夫森 保罗·安东·鲁道夫·万·兰
[11]公开号CN 101593180A[74]专利代理机构北京集佳知识产权代理有限公司代理人高少蔚 李德山 权利要求书 5 页 说明书 16 页 附图 11 页[54]发明名称将SPARQL查询转化成SQL查询的方法和装置[57]摘要 本发明涉及主数据管理,更具体地说本发明涉及一种将SPARQL查询转化成SQL查询的方法和装置,以便支持关系数据库上的语义查询和分析推理功能。根据本发明的将SPARQL查询转化成SQL查询的方法包括:加载链接关系数据与本体的映射信息;加载映射信息中所引用的元数据信息;对含有N-Ary节点的SPARQL查询进行展开以生成SPARQL查询模式树;以及根据映射信息和元数据信息将SPARQL查询模式树中的模式节点转换成相应的SQL语句。
2.5权 利 要 求 书第1/5页 1.一种将SPARQL查询转化成SQL查询的方法,包括: 加载链接关系数据与本体的映射信息; 加载映射信息中所引用的元数据信息; 对含有N-Ary节点的SPARQL查询进行展开以生成SPARQL查询模式树;以及 根据映射信息和元数据信息将SPARQL查询模式树中的模式节点转换成相应的SQL语句。 2.如权利要求1所述的将SPARQL查询转化成SQL查询的方法,还包括: 对包含递归规则的N-Ary节点进行推定,并将推定结果作为临时表格存储在关系数据库中;以及 将SPARQL查询模式树中的该N-Ary节点用与临时表格相关联的临时模式替代。 3.如权利要求2所述的将SPARQL查询转化成SQL查询的方法,其中: 所生成的SPARQL查询模式树包括“TRIPLE”节点、“AND”节点、“OR”节点、“FILTER”节点、临时模式节点、或者除递归规则之外的其他规则;以及 所述根据映射信息和元数据信息将SPARQL查询模式树中的模式节点转换成相应的SQL语句包括,将所生成的SPARQL查询模式树中包括的“TRIPLE”节点、“AND”节点、“OR”节点、或者“FILTER”节点转换成相应的SQL语句。 4.如权利要求3所述的将SPARQL查询转化成SQL查询的方法,其中将“TRIPLE”节点转换成相应的SQL语句包括: 从映射信息中搜索与“TRIPLE”节点的谓词相匹配的TripleRelation; 通过“TRIPLE”节点中的主语和宾语对搜索到的匹配TripleRelation进行剪枝; 生成包括剪枝处理后余下的TripleRelation的主语、谓词和宾语的字2
2.5权 利 要 求 书 第2/5页段的SELECT子句; 生成连接条件以构造“FROM”子句; 根据映射信息添加各种条件以构造“WHERE”子句;以及 从SELECT子句、WHERE子句、Alias、以及连接条件的字段中提取表名称,以生成与该“TRIPLE”节点相对应的SQL语句。 5.如权利要求4所述的将SPARQL查询转化成SQL查询的方法,其中: TripleRelation根据映射信息来生成,并且组织为三元结构的形式<主语的IRI模式,谓词,宾语的IRI或文本模式>; 在剪枝处理中仅保留与“TRIPLE”节点的主语/宾语的数据类型和主语/宾语的IRI或文本模式相兼容的TripleRelation;以及 在剪枝处理中过滤字段中的空记录。 6.如权利要求3所述的将SPARQL查询转化成SQL查询的方法,其中将“AND”节点转换成相应的SQL语句包括: 将“AND”节点所包含的子SQL展平; 生成子查询之间的连接条件; 检测并缩减不必要的自连接;以及 替换WHERE条件中的相关字段,以生成SQL语句。 7.如权利要求6所述的将SPARQL查询转化成SQL查询的方法,其中检测并缩减不必要的自连接包括检测并缩减主关键词上的自连接。 8.如权利要求3所述的将SPARQL查询转化成SQL查询的方法,其中将“OR”节点转换成相应的SQL语句包括: 生成子查询的UNION的SQL;以及 缩减不必要的UNION,以生成SQL语句。 9.如权利要求3所述的将SPARQL查询转化成SQL查询的方法,其中将“FILTER”节点转换成相应的SQL语句包括: 为“FILTER”节点中的每一个变量确定字段; 通过映射信息或者元数据信息获取数据类型信息;以及3
2.5权 利 要 求 书 第3/5页 根据所获取的数据类型信息和所确定的字段,通过IRI或文本模式生成该“FILTER”节点的布尔面,以生成SQL语句。 10.如权利要求1~9任一所述的将SPARQL查询转化成SQL查询的方法,其中: 所述映射信息包括关系数据库的字段和RDF类或属性之间的映射关系;以及 所述元数据信息包括数据库字段的数据类型、允许为空标志以及主关键词标志。 11.一种将SPARQL查询转化成SQL查询的装置,包括: SPARQL查询解析器,用于对扩展后的SPARQL查询进行解析以生成包括“N-Ary”节点的SPARQL模式树; DataLog引擎,用于对包括“N-Ary”节点的SPARQL模式树进行展开和推定处理,以生成SPARQL查询模式树;以及 SQL生成器,用于根据映射信息和元数据信息将SPARQL查询模式树中的模式节点转换成相应的SQL语句。 12.如权利要求11所述的将SPARQL查询转化成SQL查询的装置,其中所述DataLog引擎包括: DataLog推定器,用于对存在递归规则的“N-Ary”节点进行推定,将推定结果作为临时表格存储在关系数据库中,并将SPARQL查询模式树中的该N-Ary节点用与临时表格相关联的临时模式替代;以及 树展开器,用于对不包含递归规则的“N-Ary”节点进行展开,将其展开为SQL生成器能够直接处理的“TRIPLE”节点、“AND”节点、“OR”节点、或者“FILTER”节点。 13.如权利要求12所述的将SPARQL查询转化成SQL查询的装置,其中所述SQL生成器包括: “TRIPLE”节点到SQL语句的转换器,用于将SPARQL模式树中的“TRIPLE”节点翻译成SQL语句; “AND”节点到SQL语句的转换器,用于将SPARQL模式树中的“AND”节点翻译成SQL语句; “OR”节点到SQL语句的转换器,用于将SPARQL模式树中的“OR”4
2.5权 利 要 求 书 第4/5页节点翻译成SQL语句;以及 “FILTER”节点到SQL语句的转换器,用于将SPARQL模式树中的“FILTER”节点翻译成SQL语句。 14.如权利要求13所述的将SPARQL查询转化成SQL查询的装置,其中“TRIPLE”节点到SQL语句的转换器按照下述将SPARQL模式树中的“TRIPLE”节点翻译成SQL语句: 从映射信息中搜索与“TRIPLE”节点的谓词相匹配的TripleRelation; 通过“TRIPLE”节点中的主语和宾语对搜索到的匹配TripleRelation进行剪枝; 生成包括剪枝处理后余下的TripleRelation的主语、谓词和宾语的字段的SELECT子句; 生成连接条件以构造“FROM”子句; 根据映射信息添加各种条件以构造“WHERE”子句;以及 从SELECT子句、WHERE子句、Alias、以及连接条件的字段中提取表名称,以生成与该“TRIPLE”节点相对应的SQL语句。 15.如权利要求14所述的将SPARQL查询转化成SQL查询的装置,其中: TripleRelation根据映射信息来生成,并且组织为三元结构的形式<主语的IRI模式,谓词,宾语的IRI或文本模式>; 在剪枝处理中仅保留与“TRIPLE”节点的主语/宾语的数据类型和主语/宾语的IRI或文本模式相兼容的TripleRelation;以及 在剪枝处理中过滤字段中的空记录。 16.如权利要求13所述的将SPARQL查询转化成SQL查询的装置,其中“AND”节点到SQL语句的转换器按照下述将SPARQL模式树中的“AND”节点翻译成SQL语句: 将“AND”节点所包含的子SQL展平; 生成子查询之间的连接条件; 检测并缩减不必要的自连接;以及 替换WHERE条件中的相关字段,以生成SQL语句。5
2.5权 利 要 求 书 第5/5页 17.如权利要求16所述的将SPARQL查询转化成SQL查询的装置,其中检测并缩减不必要的自连接包括检测并缩减主关键词上的自连接。 18.如权利要求13所述的将SPARQL查询转化成SQL查询的装置,其中“OR”节点到SQL语句的转换器按照下述将SPARQL模式树中的“OR”节点翻译成SQL语句: 生成子查询的UNION的SQL;以及 缩减不必要的UNION,以生成SQL语句。 19.如权利要求13所述的将SPARQL查询转化成SQL查询的装置,其中“FILTER”节点到SQL语句的转换器按照下述将SPARQL模式树中的“FILTER”节点翻译成SQL语句: 为“FILTER”节点中的每一个变量确定字段; 通过映射信息或者元数据信息获取数据类型信息;以及 根据所获取的数据类型信息和所确定的字段,通过IRI或文本模式生成该“FILTER”节点的布尔面,以生成SQL语句。 20.如权利要求11~19任一所述的将SPARQL查询转化成SQL查询的装置,其中: 所述映射信息包括关系数据库的字段和RDF类或属性之间的映射关系;以及 所述元数据信息包括数据库字段的数据类型、允许为空标志以及主关键词标志。6
2.5说 明 书将SPARQL查询转化成SQL查询的方法和装置第1/16页
技术领域 本发明涉及主数据管理,更具体地说本发明涉及将SPARQL查询转化成SQL查询的方法和装置,以便支持关系数据库上的语义查询和分析推理功能。背景技术 随着市场竞争的加剧,现在公司越来越严重地依赖于各种信息,比如客户数据和产品信息等等。能够由公司跨交易处理和系统重复使用的核心商业实体(entity)通常称作主数据,比如客户、供应商、账户、产品或组织单元的列表或等级。近来,知名的数据管理解决方案提供商,比如IBM、Oracle、SAP等公司已经发布了他们各自的主数据管理(MDM,masterdata management)方案,特别是关于客户数据管理(CDM(customer datamanagement),也称作客户数据集成(CDI,customer data integration))和产品信息管理(PIM,product information management)的解决方案。但是,称为语义失配的问题已经成为有效使用这些系统的障碍。 语义失配常常是由于查询和底层数据使用不同层级的概念粒度和术语变体而导致的。图1示出了使用不同层级的概念粒度所导致的语义失配的两个示例。 图1所示的第一个查询请求返回EDOX公司的所有位于欧洲且从事IT行业的股东,然而公司却是按照所在的城市对所处的地区进行登记并且按照具体的IT产品对所涉及的业务进行登记。也就是说,各个公司并不是按照所处的各大洲进行位置登记,而且也没有按照所从事的行业进行登记。这样自然就出现了语义失配的情况,很难直接按照所设定的条件直接查询得出结果。另外,该查询还要求返回EDOX的所有直接和间接股东,这将导致递归查找,而其迭代次数在执行前无法预知。对于该查询,最终通过传递闭包和包含推理的方法得到检索结果为FOO公司。 图1所示的第二个查询请求返回生产无线电通信产品并且由加拿大公司持有股份的软件公司,然而潜在的可能匹配的公司却将其业务登记为无7
2.5说 明 书 第2/16页线电通信软件。同样,对于该查询,也无法按照所设定的条件直接查询得出结果。对于该查询,最终通过分类和包含推理的方法得到检索结果为BAR公司。 从以上两个示例可以看出,查询是以不同层级的概念粒度进行的,并且都需要进行递归查找。递归查找指的是内在的逻辑关系。 另外一种语义失配在这里称作术语变体,由于非常容易理解,因此在这里不再给出具体的示例。 一般而言,可以将语义失配归结为知识隔阂,这是因为该问题不仅仅由于术语选择不同而导致,而且往往也由于缺乏相当的本体知识所导致。 通常该知识隔阂可以通过引入本体(ontology)来弥补,如图1的右上部分所示。本体描述了概念层级、概念属性以及概念之间的关系。但是,本体的归并是一项非常复杂琐碎的任务。例如,对于上面提到的第一个查询,必须对“Hold”关系的传递闭包进行复杂的推理和计算。 针对该问题,提出了将关系数据库中的数据发布为虚拟RDF数据存储库(virtual Resource Description Frame store)的解决方案。例如,在/2007/03/RdfRDB/papers/d2rq-positionpaper/中介绍了基于D2R(database to RDF)映射的系统平台,可为用户提供对发布的RDF虚拟数据的SPARQL查询,但该平台仅包括简单的查询功能。另外,在/Xplore/?url=/iel5/10810/34089/?tp=&isnumber=&arnumber=1623850中提出一种利用关系OWL(Web Ontology Language,网络本体语言)来把关系数据库发布成虚拟RDF存储库的方法,并利用SPARQL语言对虚拟RDF存储库提供简单的查询。 但是,这些系统平台和方法均没有提供在发布的关系数据库上的分析功能,并且还经常产生大量的低效SQL,给系统和网络造成过重的负担。因此,对于已有的虚拟RDF存储库来说,仍然面临着如何高效地将语义SPARQL查询翻译成SQL查询以及如何在语义查询处理中支持数据分析推理功能的问题和挑战。发明内容 鉴于上述情况,本发明提出一种新的SPAQRL模式树结构来对标准SPARQL查询进行扩展,并在此基础上提供一种高效的将SPARQL查询8
2.5说 明 书 第3/16页转化成SQL查询的方法和装置,以便在对用户的语义查询进行处理时支持数据分析推理功能。 根据本发明的一个方面,提供一种将SPARQL查询转化成SQL查询的方法,包括:加载链接关系数据与本体的映射信息;加载映射信息中所引用的元数据信息;对含有N-Ary节点的SPARQL查询进行展开以生成SPARQL查询模式树;以及根据映射信息和元数据信息将SPARQL查询模式树中的模式节点转换成相应的SQL语句。 根据本发明的另一个方面,提供一种将SPARQL查询转化成SQL查询的装置,包括:SPARQL查询解析器,用于对扩展后的SPARQL查询进行解析以生成包括“N-Ary”节点的SPARQL模式树;DataLog引擎,用于对包括“N-Ary”节点的SPARQL模式树进行展开和推定处理,以生成SPARQL查询模式树;以及SQL生成器,用于根据映射信息和元数据信息将SPARQL查询模式树中的模式节点转换成相应的SQL语句。 优选地,对包含递归规则的N-Ary节点进行推定,并将推定结果作为临时表格存储在关系数据库中;以及将SPARQL查询模式树中的该N-Ary节点用与临时表格相关联的临时模式替代。 根据本发明的一个优选实施例,所生成的SPARQL查询模式树包括“TRIPLE”节点、“AND”节点、“OR”节点、“FILTER”节点、临时模式节点、或者除递归规则之外的其他规则,并且将所生成的SPARQL查询模式树中包括的“TRIPLE”节点、“AND”节点、“OR”节点、或者“FILTER”节点转换成相应的SQL语句。 根据本发明的一个具体实施例,所述映射信息包括关系数据库的字段和RDF类或属性之间的映射关系;以及所述元数据信息包括数据库字段的数据类型、允许为空标志以及主关键词标志等。 本发明也提供应用上述将SPARQL查询转化成SQL查询的方法及其装置的主数据管理系统。 另外,本发明还提供用于实现上述将SPARQL查询转化成SQL查询的方法的计算机程序。 此外,本发明也提供至少计算机可读介质形式的计算机程序产品,其上记录有用于实现上述将SPARQL查询转化成SQL查询的方法的计算机程序代码。9
2.5说 明 书 第4/16页附图说明 参照下面结合附图对本发明实施例的说明,会更加容易地理解本发明的以上和其它目的、特点和优点。在附图中,相同的或对应的技术特征或部件将采用相同或对应的附图标记来表示。 图1示出了使用不同层级的概念粒度所导致的语义失配的两个具体示例。 图2示出了可实现本发明的分布式数据处理系统的方框图。 图3示出了根据本发明一个实施例的扩展后的SPARQL查询的示例。 图4示出了根据本发明一个实施例的SPARQL查询的展开处理的示例。 图5示出了根据本发明一个实施例的规则和SPARQL查询的示例。 图6示出了根据本发明一个实施例的SPARQL查询的推定处理的示例。 图7示出了根据本发明一个实施例的从SPARQL查询生成SQL语句的方法的流程图。 图8示出了图7所示的针对“三元组(Triple)”节点生成SQL语句的步骤的详细流程图。 图9示出了图7所示的针对“与(AND)”节点生成SQL语句的步骤的详细流程图。 图10示出了图7所示的针对“或(OR)”节点生成SQL语句的步骤的详细流程图。 图11示出了图7所示的针对“过滤(Filter)”节点生成SQL语句的步骤的详细流程图。 图12示出了根据本发明一个实施例的缩减不必要的连接(JOIN)的具体示例。 图13示出了根据本发明一个实施例的将SPARQL查询转化成SQL查询的装置的方框图。 图14示出了根据本发明一个实施例的图13所示的DataLog引擎和SQL生成器的详细方框图。10
2.5说 明 书 第5/16页 具体实施方式 下面参照附图来说明本发明的实施例。应当注意,为了清楚的目的,附图和说明中省略了与本发明无关的、本领域普通技术人员已知的部件和处理的表示和描述。 现在首先参考附图,特别是图2,描述可实现本发明的分布式数据处理系统的原理框图。分布式数据处理系统200是可实现本发明的计算机网络。分布式数据处理系统200包含网络202,网络202是用于在不同的设备和分布式数据处理系统200内连接到一起的计算机之间提供通信链接的媒介。 在所描述的例子中,服务器204与存储器206一起连接到网络202。此外,例如工作站、个人计算机、手机、PDA等的客户端208、210和212也被连接到网络202。在所描述的例子中,服务器204向客户端208、210和212提供诸如引导文件、操作系统以及应用程序之类的数据。分布式数据处理系统200可包括另外的服务器、客户端以及其它未显示的设备。在所描述的例子中,分布式数据处理系统200是因特网,网络202表示对使用TCP/IP协议套件来彼此通信的网络以及网关的集合。处于因特网心脏的是位于主节点或者主机计算机之间的高速数据通信线路中枢,其包含数以千计的用于路由数据和消息的商业、政府、教育以及其它计算机系统。当然,分布式数据处理系统200还可被实现为不同类型的网络,例如企业内部网、局域网(LAN)或者广域网(WAN)等。 企图将图2作为例子,而不是作为本发明所述过程的结构限制。在不偏离本发明精神和范围的条件下,可对图2所示系统作出许多更改。 本发明可实现为如图2所示的服务器204的数据处理系统。该数据处理系统可以是包括连接到系统总线的多个处理器的对称对处理器(SMP)系统,亦可使用单处理器系统。本发明亦可实现为图2中客户端计算机208、210和212的数据处理系统。 在图2所示的分布式数据处理系统上实现的根据本发明实施例的主数据管理(MDM)系统,用于通过关系数据库到本体的映射在MDM系统上实现语义查询。 首先,根据本发明该实施例的主数据管理系统创建链接关系数据与从MDM逻辑数据模型生成并丰富的OWL本体的映射。也就是说,构建用于存储在关系数据库中的主数据的形式本体表示。然后,用户可以定义用11
2.5说 明 书 第6/16页于进行分析的各种业务规则、以及用于进行分类的领域本体或OWL约束。这些规则和本体将存储在MDM存储库中。在进行查询时,用户可以向基于本体的语义引擎发出SPARQL查询,该SPARQL查询可以包括以本体定义的类或特性以及以规则标题定义的术语。在基于本体的语义引擎中将查询解析成SPARQL查询模式树,并且对树中的每一个节点进行分析以便检查其是否意味着一种本体或规则推理。如果需要进行规则推理,则进行DataLog规则推定处理。如果需要进行用于用例(instance)分类的本体推理(即,获取用例的类型或者OWL类的所有用例),将调用本体推理器。将推理结果临时具体化为关系数据库中的表格。对于不需要进行规则推理的节点,将根据所定义的本体与MDM系统的关系规划之间的映射生成SQL语句。接着,SQL生成器将合并所生成的各个SQL语句以及存储在临时表格中的结果,以便生成单个的SQL语句。最后,将查询结果返回用户并删除临时表格。 根据本发明的该主数据管理系统,用户能够直接使用语义查询,以便通过领域本体和定义的OWL约束来检索主数据,并对MDM所涉及的本体之间的关系进行分析。 另外,根据本发明的该主数据管理系统,应用程序开发者能够在MDM系统上开发一般用途的分析服务。现有的大多数MDM系统仅提供内置的服务并且不允许直接进行SQL查询。例如,IBM WCC针对客户数据上所有种类的操作提供多于500种的服务,并且可以对不同的服务使用不同的优化技术,例如特定的索引和具体化的视图。根据本发明的主数据管理系统,可以方便地实现用户所需要分析服务,尽管这些服务可能并没有内置于MDM系统中,而且开发者仅仅需要输入SPARQL查询即可,而无需考虑复杂的SQL和推理问题。 下面将结合附图详细说明根据本发明的扩展后的SPARQL查询、对SPARQL查询的展开和推定、以及如何从SPARQL查询生成SQL语句。 图3示出了根据本发明一个实施例的扩展后的SPARQL查询的示例。该示例查询的目的是“查找在2000年之后成为与IBM公司或HP公司具有密切关系的VIP组织的法人且具有任意地址的人”。相应地,其SPARQL查询可以表示为: SELECT?person?address WHERE { ?org1wcc:PartyRelationship?org2.12
2.5说 明 书 第7/16页 ?org2 rdf:type wcc:Organization. VIP_Organization(?org1). Legal_Relationship(?person,?org1,?year). OPTIONAL{?person wcc:address?address}. { {?org2 wcc:Org_Name″IBM″}UNION {?org2 wcc:Org_Name″Hp″} }. FILTER(?year>″2000-1-1″)} 一般而言,SPARQL查询均可以表示为SPARQL模式树,该模式树实际上表示了SPARQL查询框架并且对于后续的SPARQL查询到SQL语句的翻译非常有用。这里,SPARQL模式树是根据SPARQL查询所生成的内存结构。根据本发明的一个实施例,在SPARQL模式树中总共引入了以下5种类型的节点。 第一种节点是“与(AND)”节点,其对应于SPARQL查询中图模式的关联(conjunction)。在根据本发明的实施例中,“AND”节点可以具有多个子节点。也就是说,连续嵌套的“AND”模式作为子节点包括在一个“AND”节点中。每一个子节点都具有指示该子节点是否是可选择的标记。以这种方式,SPARQL查询中的可选模式也涵盖在“AND”节点中。 第二种节点是“或(OR)”节点,其对应于SPARQL查询中的“联合(UNION)”模式。与“AND”模式类似,嵌套的UNION模式由一个“OR”节点表示。 第三种节点是“三元组(TRIPLE)”节点,其表示具有单个三元组的图模式。三元组中的主谓宾可以是常量或者变量。 第四种节点是“过滤(FILTER)”节点,其表示SPARQL查询中的过滤器表达。“FILTER”节点作为一类特殊的子节点总是连接到“AND”节点。在SPARQL的自下而上(bottom-up)的语义中,只有出现在相应的“AND”模式中的变量才可以用在过滤器中。 第五种节点是“N元组(N-Ary)”节点,其表示N-Ary模式并往往直接与规则标题相对应。N-Ary节点中的每一个元素可以是常量或者变量。 更具体地说,作为规则标题,N-Ary节点可能触发推理。为了提供更多的信息给数据库以便进行查询优化,根据本发明的实施例,尽可能地将13
2.5说 明 书 第8/16页N-Ary节点进一步展开为TRIPLE、OR、以及AND模式。只有在出现递归规则时,才触发DataLog推定并且将推定结果作为表格临时存储在数据库中。 再回到图3所示的扩展后的SPARQL查询,其左半部分为扩展后的SPARQL查询示例,其右半部分为针对该SPARQL查询示例所生成的SPARQL模式树。对于该具体示例来说,该SPARQL查询“SELECT?person?address”可以总的看作是一个“AND”节点,并可以进一步解析为3个“Triple”节点“?org1 wcc:PartyRelationship?org2”、“?org2 rdf:type wcc:Organization”、和“OPTIONAL{?personwcc:address?address}”,2个“N-Ary”节点“VIP_Organization(?org1)”和“Legal_Relationship(?person,?org1,?year)”,1个“OR”节点“{?org2wcc:Org_Name″IBM″}UNION{?org2 wcc:Org_Name″Hp″}”,以及1个“Filter”节点“FILTER(?year>″2000-1-1″)”。其中的“OR”节点可以进一步解析为2个“Triple”节点“?org2 wcc:Org_Name″IBM″”和“?org2 wcc:Org Name″Hp″”。另外,“Triple”节点“OPTIONAL{?person wcc:address?address}”为可选模式节点,而所有其余的节点均为必选模式节点。 在对SPARQL进行了扩展之后,需要对所扩展的“N-Ary”节点进行展开和推定,以使得SPARQL模式树上的每一个节点都能够由SPARQL查询引擎直接解释和处理。换句话说,在对SPARQL查询进行了展开和推定处理之后,就可以由SQL生成器翻译成一条SQL语句。 图4具体示出了根据本发明一个实施例的SPARQL查询的展开处理的示例。可以看出,在图4所示的SPARQL模式树中存在两个“N-Ary”节点。对于“N-Ary”节点(相应于规则标题),将根据所设定的所有规则对其进行处理。根据相关规则的特征,每一个“N-Ary”节点将被展开成子模式树或者被临时模式替代。具体地税,如果该节点对应于一个或多个非递归规则,则可以将其展开为子模式树。例如,在图4中,右边的“N-Ary”节点就被展开为一个“AND”节点,并进一步展开为2个“TRIPLE”节点。但是,对于左边的“N-Ary”节点,在展开处理过程中,由于某些从属节点与递归规则相对应,因此触发了DataLog引擎以针对相关的规则计算固定点,并且附加临时模式来替代与递归规则相对应的节点。 在此应该指出的是,SPARQL模式树重写的原则是尽可能地保持树的结构(展开节点),仅当必需时才生成临时模式(触发DataLog推定),其目14
2.5说 明 书 第9/16页的是为SQL生成器提供尽可能多的信息(即,大的SQL SPARQL查询树),以便进行SQL优化。更直观地说,SQL生成器能够获得的信息越多,最后生成的SQL语句被优化的可能性越大。 下面以图5和图6所示的示例为例详细说明在展开“N-Ary”节点时,如果遇到递归规则如何对其进行推定处理。图5示出了根据本发明一个实施例的规则和SPARQL查询的示例,图6示出了如何对图5所示的SPARQL查询进行推定处理以生成临时存储的推定结果。 如图5所示,该查询的目的是“查找拥有高价合同的当事方”。相应地,其SPARQL查询可以描述为: Select?pty Where{ Contract_NumOfLClms(?contract?numofClaims). Contract_Owner(?pty?contract). FILTER(?numofClaims>2)} 针对该查询,定义了6条规则。每一条规则包括规则标题和规则主体,规则标题相应于规则的结果,而规则主体表示触发该规则的条件。在图5中所定义的每一条规则的具体含义为: 规则1:基于本体中的谓词定义关系“sub_contract”; 规则2:定义关系“sub_contract”是可传递的; 规则3:定义关系“Large_Claim_Agreement”,即具有金额大于$5000条款的合同视为大条款协议; 规则4:以递归方式定义关系“Large_Claim_Agreement”,即,如果其子合同具有大金额的条款,则该合同也涉及“Large_Claim_Agreement”关系; 规则5:定义关系“Contract_NumOfLClms”,用于表示合同及该合同的大金额条款的总数量; 规则6:定义关系“Contract_Owner”,指明合同拥有者是在合同要素中起到“owner primary”作用的当事方。 另外,在图5所示的示例中将“高价合同”用“FILTER”表示为具有2条大金额条款的合同。 在定义了规则之后,就可以创建相应的依赖图(dependency graph)。依15
2.5说 明 书 第10/16页赖图表示规则的标题之间的依赖关系。简单地说,如果在依赖图中规则标题处于循环之中,则该规则存在递归关系。 对于图5所示的SPARQL查询,首先在内存中将其解析成SPARQL查询树。可以看出,在该SPARQL查询树中存在两个“N-Ary”节点,分别相应于规则标题“Contract_NumOfLClms”和“Contract_Owner”。 对于“Contract_Owner”节点,由于针对“Contract_Owner”的规则不涉及任何递归,因此该节点可以进一步展开,并且用其条件节点T1、T2、T3、T4和T5(分别相应于规则主体中的谓词)的关联来替代。 对于另一个“N-Ary”节点“Contract_NumOfLClms”,从依赖图中可以看出,针对“Contract_NumOfLClms”的规则依赖于其它规则标题并且在推理中涉及到了递归。在这种情况下,触发DataLog引擎从底层规则开始进行推定处理,底层规则指的是不依赖于其它规则的规则。在该示例中,首先推定针对“sub_contract”的规则,并将推定结果存储在临时表格中。接着,推定针对“Large_Claim_Agreement”的递归规则并得出推定结果。最后,推定“Contract_NumOfLClms”规则,并且生成临时模式(相应于数据库中的临时表格)并且用来替代SPARQL查询模式树中的“N-Ary”节点“Contract_NumOfLClms”。 通过以上处理,对SPARQL查询模式树进行了修订,使得每一个节点都能够直接被映射到数据库中的数据。在进行了如上处理之后,则可以由SQL生成器对SPARQL查询模式树进行翻译并生成SQL语句。图7示出了根据本发明一个实施例的从SPARQL查询生成SQL语句的方法的流程图。 如图7所示,该生成SQL语句的流程从步骤S700开始。首先,在步骤S702加载链接关系数据与本体的映射信息,即,加载关系数据库的字段(包括基于字段展开的IRI模式(Internationalized Resource Identifierpattern,国际资源标识符模式)或者文本模式(literal pattern))和RDF类或属性之间的映射关系。接着,在步骤S704加载映射信息中所引用的元数据信息,包括数据库字段的数据类型、允许为空(nullable)标志以及主关键词标志等等。 然后,在步骤S706获取SPARQL查询,并按照上面结合图3~图6所述的方法进行展开和推定,以便生成SPARQL查询模式树。在所生成的SPARQL查询模式树中,已经对“N-Ary”节点进行了展开和推定,16
2.5说 明 书 第11/16页因此不再包括“N-Ary”节点,而是仅包括“TRIPLE”节点、“AND”节点、“OR”节点、以及“FILTER”节点。如果存在递归规则的话,则在所生成的SPARQL查询模式树中还包括与存储在关系数据库中的临时表格相对应的临时模式节点。也就是说,无须对该临时模式节点进行进一步的处理,而能够直接访问关系数据库。 接下来,在步骤S708确定SPARQL查询模式树中各个模式节点的类型,并根据映射信息和元数据信息将各个模式节点转换成相应的SQL语句。如果是“TRIPLE”节点,则在步骤S710针对“TRIPLE”节点生成相应SQL语句;如果是“AND”节点,则在步骤S712针对“AND”节点生成相应的SQL语句;如果是“OR”节点,则在步骤S714针对“OR”节点生成相应的SQL语句;而如果是“FILTER”节点,则在步骤S7146针对“FILTER”节点生成相应的SQL语句。步骤S710、S712、S714和S716中的详细处理将在下文中结合图8~图11进行详细描述。 然后,在步骤S718中判断是否已经将SPARQL查询模式树中所有模式节点转换成了SQL语句。如果还有没有转换成SQL语句的模式节点,则流程返回步骤S708,继续上面所述的SQL语句转换处理。如果在步骤S718中确定已经将SPARQL查询模式树中所有模式节点转换成了SQL语句,则流程前进到步骤S720,执行所生成的SQL语句,并且在步骤S722结束处理。 图8示出了图7所示的步骤S710中针对“TRIPLE”节点生成SQL语句的详细流程图。 如图8所示,该针对“TRIPLE”节点生成SQL语句的流程从步骤S800开始。首先,在步骤S802中,从映射信息中搜索与“TRIPLE”节点的谓词相匹配的“TripleRelation(三元关系)”。这里,“TripleRelation”是根据映射信息生成的结构并且组织为三元结构的形式<主语的IRI模式,谓词,宾语的IRI或文本模式>。 然后,在步骤S804中,通过“TRIPLE”节点中的主语和宾语对在步骤S802中搜索到的匹配TripleRelation进行剪枝。在剪枝处理过程中将使用元数据的数据类型信息,即,仅保留与“TRIPLE”节点的主语/宾语的数据类型和主语/宾语的IRI或文本模式相兼容的TripleRelation,而将其余的匹配TripleRelation剪去。 另外,在步骤S804中还使用允许为空标志来产生“非空”条件,从而17
2.5说 明 书 第12/16页过滤字段中的空记录。该条件是必须的,这是因为TripleRelation不允许主语、谓词和宾语中出现空值。 此外,通过剪枝处理,在步骤S804中还生成与“TRIPLE”节点的主谓宾以及TripleRelation的主谓宾相对应的对等条件。 接着,在步骤S806,生成包括在步骤S804进行剪枝处理后余下的TripleRelation的主语、谓词和宾语的字段的SELECT(选择)子句。然后,在步骤S808中生成连接条件(join condition),即“FROM”子句。在步骤S810中根据映射信息添加各种条件和前面在步骤S804中生成的对等条件,即构造“WHERE”子句。 接下来,在步骤S812中从SELECT子句、WHERE子句、Alias、以及连接条件的字段中提取表名称,生成与该“TRIPLE”节点相对应的SQL语句。然后,该针对“TRIPLE”节点生成SQL语句的流程在步骤S814结束处理。 图9示出了图7所示的步骤S712中针对“AND”节点生成SQL语句的详细流程图。 如图9所示,该针对“AND”节点生成SQL语句的流程从步骤S900开始。首先,在步骤S902中,将“AND”节点所包含的子SQL展平(flatten)。然后,在步骤S904中生成子查询之间的连接条件。 接下来,在步骤S906中检测并缩减不必要的自连接,在此使用主关键词标志来检测不必要的自连接,即,检测并缩减主关键词上的自连接。图12具体示出了根据本发明一个实施例的缩减不必要的连接(JOIN)的具体示例。 在图12所示的示例中,其要完成的查询是查找表格中所有人的IRI、姓名以及生日。相应地,其SPARQL查询可以表示为: Select?x?name?birth Where{ ?x wcc:type wcc:Person. ?x wcc:Name?name ?x wcc:BirthDT?birth. 如果不缩减不必要的JOIN条件,则生成的SQL语句为:18
2.5说 明 书 第13/16页 SELECT ,,_dt FROM Person T1 JOIN( SELECT ,,_dt FROM PersonT2 JOIN( SELECT ID,birth_dt FROM Person T3)T4 ON )T5ON 可以看出,该SQL语句相当复杂并且查询效率不高。 根据本发明的实施例,经过缩减之后的SQL语句则为: SELECT ID,name,birth_dt FROM Person T1 可以看出,不仅能够检索出与上面的SQL语句相同的结果,而且相当简洁并且高效。 在步骤S906中完成检测并缩减不必要的自连接之后,在步骤S908中替换WHERE条件中的相关字段,并在步骤S910中生成结果列表。然后,在步骤S912结束该针对“AND”节点生成SQL语句的流程处理。 图10示出了图7所示的步骤S714中针对“OR”节点生成SQL语句的详细流程图。 如图10所示,该针对“OR”节点生成SQL语句的流程从步骤S1000开始。首先,在步骤S1002中生成子查询的UNION(联合)的SQL。然后,在步骤S1004中缩减不必要的UNION后完成SQL语句的生成。 这里,不必要的UNION指的是其所有的子SQL共享相同的SELECT子句和FROM子句,但是其WHERE子句不同的UNION SQL语句。在这种情况下,可以将UNION SQL语句缩减为没有UNION的等价SQL语句,该缩减后的新SQL语句中的WHERE子句为通过SQL“OR”连接的原UNION的所有子SQL的WHERE条件。 最后,该针对“OR”节点生成SQL语句的流程在步骤S1006结束。 图11示出了图7所示的步骤S716中针对“FILTER”节点生成SQL语句的详细流程图。 如图11所示,该针对“FILTER”节点生成SQL语句的流程从步骤S1100开始。首先,在步骤S1102中为“FILTER”节点中的每一个变量确定字段。然后,在步骤S1104中通过映射信息或者元数据信息获取数据类型信息。 接着,在步骤S1106根据在步骤S1104中所获取的数据类型信息和在19
2.5说 明 书 第14/16页步骤S1102中所确定的字段,通过IRI或文本模式生成该“FILTER”节点的布尔面。在步骤S1108结束该针对“FILTER”节点生成SQL语句的流程处理。 以上具体描述了根据本发明的实施例,将SPARQL查询转化成SQL查询的方法。下面将结合附图详细描述能够实现将SPARQL查询转化成SQL查询的装置的具体结构。 图13示出了根据本发明一个实施例的将SPARQL查询转化成SQL查询的装置的方框图。 如图13所示,根据本发明一个实施例的该将SPARQL查询转化成SQL查询的装置包括SPARQL查询解析器1302、DataLog引擎1304、SQL语句生成器1306和数据库1308。 SPARQL查询解析器1302用于对根据上面所述的扩展后的SPARQL查询进行解析以便生成SPARQL模式树。如果所生成的SPARQL模式树中不存在上文中定义的“N-Ary”节点,则将该不包含“N-Ary”节点的SPARQL模式树直接发送给SQL生成器1306,以便生成SQL语句。 另一方面,如果在SPARQL查询解析器1302生成的SPARQL模式树中包括“N-Ary”节点,则将该包含“N-Ary”节点的SPARQL模式树发送给DataLog引擎1304。在DataLog引擎1304中,按照上面参照图3~图6所述的原理和方式对“N-Ary”节点进行展开和推定处理,以生成扩展和推定后的SPARQL模式树。在存在递归规则的情况下,生成相应的临时模式表格存储在数据库1308中,并且将SPARQL模式树中相应的节点用临时模式节点替代。而在不存在递归规则的情况下,只需对“N-Ary”节点进行展开处理,将其展开为“TRIPLE”节点、“AND”节点、“OR”节点、“FILTER”节点、或者除递归规则之外的其他规则即可。DataLog引擎1304也将所生成的展开和推定处理后的SPARQL模式树发送给SQL生成器1306。 SQL生成器1306根据所加载的关系数据到RDF的映射信息和元数据信息,将SPARQL查询解析器1302生成的不包含“N-Ary”节点的SPARQL模式树转换成SQL语句,或者结合临时存储在数据库中的临时模式表格,将DataLog引擎1304所生成的展开和推定处理后的SPARQL模式树转换成SQL语句。 图14具体示出了根据本发明一个实施例的图13所示的DataLog引擎20
2.5说 明 书 第15/16页1304和SQL生成器1306的详细方框图。 如图14所示,根据该实施例的DataLog引擎1304包括DataLog推定器1402和树展开器1406。DataLog推定器1402用于按照图5和图6所示的原理,根据依赖图对存在递归规则的“N-Ary”节点进行推定,并生成临时模式表格存储在数据库1308中,以供SQL生成器1306在生成SQL语句时引用。树展开器1406则负责对不包含递归规则的“N-Ary”节点进行展开,将其尽可能彻底地展开为SQL生成器1306能够直接处理的“TRIPLE”节点、“AND”节点、“OR”节点、或者“FILTER”节点,以便直接生成SQL语句。 另外,如图14所示,根据该实施例的SQL生成器1306包括“TRIPLE”节点到SQL语句的转换器1410、“AND”节点到SQL语句的转换器1418、“OR”节点到SQL语句的转换器1416、以及“FILTER”节点到SQL语句的转换器1412,分别按照图8~图11所示处理过程将SPARQL模式树中的“TRIPLE”节点、“AND”节点、“OR”节点、以及“FILTER”节点翻译成SQL语句。 图14所示的SQL生成器1306还包括UNION缩减器1426和JOIN缩减器1428,用于分别在“OR”节点到SQL语句的转换器1416和“AND”节点到SQL语句的转换器1418中对UNION语句和JOIN语句进行缩减,以便简化所生成的SQL并提高其效率。 根据本发明的将SPARQL查询转化成SQL查询的方法及其装置,不仅能够生成一条展平的SQL语句,而且缩减不必要的UNION语句和JOIN语句,从而能够实现高效的查询。 此外,根据本发明的将SPARQL查询转化成SQL查询的方法及其装置,不仅能够实现基于领域本体的分类以及动态分类,而且还通过规则推理实现了关系再发现和查询的功能,有助于为用户提供更多更方便的主数据管理和查询。 以上结合具体实施例描述了本发明的基本原理,但是,需要指出的是,对本领域的普通技术人员而言,能够理解本发明的方法和装置的全部或者任何步骤或者部件,可以在任何计算设备(包括处理器、存储介质等)或者计算设备的网络中,以硬件、固件、软件或者它们的组合加以实现,这是本领域普通技术人员在阅读了本发明的说明的情况下运用他们的基本编程技能就能实现的,因此在这里省略了详细说明。21
2.5说 明 书 第16/16页 因此,基于上述理解,本发明的目的还可以通过在任何信息处理设备上运行一个程序或者一组程序来实现。所述信息处理设备可以是公知的通用设备。因此,本发明的目的也可以仅仅通过提供包含实现所述方法或者设备的程序代码的程序产品来实现。也就是说,这样的程序产品也构成本发明,并且存储有这样的程序产品的存储介质也构成本发明。显然,所述存储介质可以是任何公知的存储介质或者将来所开发出来的任何存储介质,因此也没有必要在此对各种存储介质一一列举。 在本发明的设备和方法中,显然,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本发明的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行。某些步骤可以并行或彼此独立地执行。 以上描述了本发明的优选实施方式。本领域的普通技术人员知道,本发明的保护范围不限于这里所公开的具体细节,而可以具有在本发明的精神实质范围内的各种变化和等效方案。22
2.5说 明 书 附 图第1/11页图1图223
2.5说 明 书 附 图 第2/11页图3图424
2.5说 明 书 附 图 第3/11页图525
2.5图626说 明 书 附 图 第4/11页
2.5说 明 书 附 图 第5/11页图727
2.5说 明 书 附 图 第6/11页图828
2.5说 明 书 附 图 第7/11页图929
2.5说 明 书 附 图 第8/11页图1030
2.5说 明 书 附 图 第9/11页图1131
2.5说 明 书 附 图 第10/11页图1232
2.5说 明 书 附 图 第11/11页图13图1433
版权声明:本文标题:将SPARQL查询转化成SQL查询的方法和装置[发明专利] 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1706068719h500534.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论