数据库查询语言转换方法、转换装置、数据库查询系统的制作方法

文档序号:6559656阅读:223来源:国知局
专利名称:数据库查询语言转换方法、转换装置、数据库查询系统的制作方法
技术领域
本发明总体上涉及语言转换,特别地,涉及将基于概念模型的查询转换为结构化查询的方法、转换装置、相应数据库查询系统和程序产品。
背景技术
计算机技术特别是网络技术的飞速发展使得计算机的信息存储、传输和处理能力增长迅速。概念模型,例如本体描述语言(RDF/OWL)、实体关系(ER)模型以及面向对象(OO)的模型,在语义和知识层次上描述了信息系统,为不同的应用程序和企业间进行数据共享和重用提供了一种通用的框架。这是一种对于当前网络的扩展,能够为信息的含义给出良好定义,并且使得计算机及其用户能够有效地进行协同工作。其中,RDF和OWL是Web语义描述的标准,为资产管理、企业集成、和网络数据的共享和重用提供了框架;ER模型是概念数据模型,它将客观世界描述为实体和关系;而OO模型在上世纪九十年代已经成为软件开发过程早期阶段的业界标准,而当前业界的主导标准是由工业发起并推动形成的统一建模语言(UML),它是一种用于描述、构造软件系统以及商业建模的语言,综合了在大型、复杂系统的建模领域得到认可的优秀的软件工程方法。
随着各种概念模型技术的普及和成熟,有越来越多的领域知识通过使用概念模型技术进行构建,以便能够跨网络、跨应用地对信息进行共享和重用。一方面,作为规则的领域扩展知识,例如在一定领域中存在的对象、概念以及其它实体是通过诸如RDF/OWL(本体)、ER模型、OO模型等的概念模型来表示的。而另一方面,由于关系数据库相较于概念模型对象例如RDF三元组来说,存储数据更加稳定并且存储技术更加成熟,因此作为事实的人为知识通常在关系数据库(RDB)中作为RDB记录进行存储,也就是说,相应的领域事实(人为知识)库通常是利用关系数据库(RDB)来实现的。
结构化查询语言SQL作为对于关系数据库的标准查询语言,是介乎于关系代数和元组演算之间的一种语言。SQL成为国际标准后,由于各种类型的计算机和数据库系统大都采用SQL作为其存取语言和标准接口,从而使数据库世界有可能链接为一个统一整体。这个前景意义十分重大。但是,面对数据库系统中庞大、复杂的存储信息,人们特别是例如企业中的产品销售员、金融顾问、风险评估师、企业决策者等非IT专业人员不愿使用SQL来查询关系数据库中的数据。这不仅因为SQL语言本身十分复杂、查询易出差错,而且因为SQL语言缺乏描述能力,使得非IT专业人员很难通过SQL语言表达自己所需的查询目标。
在现有技术中,还可以通过可扩展标记语言(XML)对关系数据库进行存取。这种方案是在关系数据库基础之上扩展有XML支持模块,它将XML数据存储在关系数据库中,在查询时将XML数据查询语言转换成关系数据库查询语言SQL。其优势在于充分利用了传统数据库的成熟技术。但是,这种方案需要通过编写XML命令行来实现查询,对于非IT专业人员来说实现有效查询仍然非常困难。
在另一种现有技术中,基于关系数据库系统增加规则处理层可以构造高效的演绎数据库系统,即该系统主要包括关系数据库管理系统和规则推理管理系统。这种演绎数据库的优势在于,能够基于用户查询进行有效地演绎和推理从而得到查询结果。但是,对于用户来说,需要编辑逻辑程序作为查询输入。同样,对于非IT专业人员来说实现有效查询仍然非常困难。
根据上文所述,在现有技术中,领域知识能够表述为概念模型和商业规则,而概念模型和商业规则合并成一种基于概念模型的查询语言(CQL)。虽然这种CQL继承了来自概念模型和商业规则的特征,例如概念归类、概念关系、递归、分层否定以及带有规则的程序等,但实际上在现有技术提供的查询系统中,还无法利用CQL这样的查询语言来查询作为关系数据库的相应的领域事实库。这使得那些非IT专业人员很难真正有效地利用领域事实库中的知识。

发明内容
因此,为使那些非IT专业人员能够利用基于概念模型的查询语言对关系数据库进行有效查询,本发明提供一种将基于概念模型的查询转换为结构化查询语言的查询语句的方案。
根据本发明的第一方面,提供一种将基于概念模型的查询转换为结构化查询语言的查询语句的方法,包括以下步骤将输入的基于概念模型的查询转换成逻辑规则;以及将逻辑规则翻译为结构化查询语言SQL的查询语句;对逻辑规则进行合法性检查;以及对合法的逻辑规则进行优化。
上述方法中,所述将输入的基于概念模型的查询转换成逻辑规则的步骤进一步包括以下步骤对该输入的基于概念模型的查询进行约束规范化;根据概念模型,对规范化了的查询语句执行概念模型关系推理;基于预先确定的映射表,执行概念模型中的概念到逻辑规则的谓词以及概念模型中的属性到逻辑规则的变量的转换;以及对转换所得的查询语句执行范式标准化以得到逻辑规则。
上述方法中,所述对规范化的查询语句执行概念模型关系推理的步骤包括对规范化的查询语句执行包含关系推理;并且所述对转换过的查询语句执行范式标准化以得到逻辑规则的步骤包括对转换过查询语句执行析取范式标准化。
上述方法中,所述对逻辑规则进行合法性检查的步骤进一步包括以下步骤语法检查,用于检查范式标准化的逻辑规则是否符合所定义的逻辑规则描述语言的语法;以及语义检查,用于检查逻辑规则是否在逻辑上是有效的。
上述方法中,所述语法检查步骤进一步包括逻辑规则的安全性规则检查,其中包括谓词和变量的存在性检查、谓词和变量的连贯性检查;并且所述语义检查步骤进一步包括检查是否存在非线性递归的谓词、检查是否存在间接递归的谓词、检查是否存在非分层否定的情况。
上述方法中,所述对合法的逻辑规则进行优化的步骤进一步包括以下步骤根据逻辑规则中谓词之间的依存关系,建立依存关系图,其中每个节点对应于逻辑规则中的一个谓词,并且用节点间的有向边表示各个谓词之间的依存关系;以及根据所述依存关系图对逻辑规则进行优化。
上述方法中,所述根据所述依存关系图对逻辑规则进行优化的步骤包括以下步骤根据所述依存关系图,生成谓词的优化执行顺序;以及将处于依存关系图较高层的谓词中的约束下放到处于依存关系图较低层的谓词处。
上述方法中,所述将逻辑规则翻译为结构化查询语言的查询语句的步骤包括以下步骤将析取范式化的逻辑规则中的每个析取式翻译为一条结构化查询语言的SELECT查询语句;以及用关键字UNION ALL来连接各个独立的结构化查询语言的SELECT查询语句,其中,基于预先确定的映射表,将逻辑规则中的谓词转换为关系数据库的表名称并且将逻辑规则中的变量转换为关系数据库的列名称。
上述方法中,所述将析取范式化的逻辑规则中的每个析取式翻译为一条结构化查询语言的SELECT查询语句的步骤包括以下步骤通过使用对应于逻辑规则头部的参量所对应的列名称作为跟随关键字SELECT的属性,构造结构化查询语言的查询语句的SELECT部分;通过使用逻辑规则体部分中涉及的那些谓词所对应的表的名称作为跟随关键字FROM的表名称,构造结构化查询语言的查询语句的FROM部分;以及通过解析逻辑规则中各个谓词的变量之间的联系和表达关系操作的谓词,构造结构化查询语言的查询语句的WHERE部分。
上述方法中,将递归的逻辑规则翻译为使用公共表表达式的结构化查询语言的查询语句,其中使用该递归逻辑规则中递归的谓词所对应的表名称作为所述公共表表达式中的表名称。
上述方法中,在翻译过程中,通过在所述公共表表达式中增加用于记录在递归查询过程中用于递归变化的变量所经历路径的参量以及用于标记当前该变量的值是否曾经出现在所记录的路径中的参量,来避免在执行所翻译的结构化查询语言的递归查询语句时发生死循环。
上述方法中,利用结构化查询语言中的临时表翻译相互依存的多条逻辑规则。
根据本发明的第二方面,提供一种用于将基于概念模型的查询转换为结构化查询语言的查询语句的转换装置,包括转换器,用于将输入的基于概念模型的查询转换成逻辑规则;翻译器,用于将逻辑规则翻译为结构化查询语言的查询语句;检查器,用于对所述转换器输出的逻辑规则进行合法性检查;以及优化器,用于对经所述检查器检查为合法的逻辑规则进行优化。
上述转换装置中,还包括映射表存储器,用于向所述转换器提供概念到谓词以及属性到变量的映射信息,并且所述转换器进一步包括用于对该输入的基于概念模型的查询进行约束规范化的装置;用于根据概念模型对规范化的查询语句执行概念模型关系推理的装置;用于基于所述映射表存储器中存储的映射表、执行概念模型中的概念到逻辑规则的谓词以及概念模型中的属性到逻辑规则的变量的转换的装置;以及用于对转换而成的查询语句执行范式标准化以得到逻辑规则的装置。
上述转换装置中,所述用于对规范化的查询语句执行概念模型关系推理的装置包括用于对规范化的查询语句执行包含关系推理的装置,并且所述用于对转换而成的查询语句执行范式标准化以得到逻辑规则的装置包括用于对转换而成的查询语句执行析取范式标准化的装置。
上述转换装置中,所述检查器包括语法检查器,用于检查范式标准化的逻辑规则是否符合所定义的逻辑规则描述语言的语法;以及语义检查器,用于检查逻辑规则是否在逻辑上是有效的。
上述转换装置中,所述语法检查器还进行逻辑规则的安全性规则检查,其中包括谓词和变量的存在性检查、谓词和变量的连贯性检查,并且所述语义检查器还检查是否存在非线性递归的谓词、检查是否存在间接递归的谓词、检查是否存在非分层否定的情况。
上述转换装置中,所述优化器进一步包括用于根据逻辑规则中谓词之间的依存关系建立依存关系图的装置,其中每个节点对应于逻辑规则中的一个谓词,并且用节点间的有向边表示各个谓词之间的依存关系;以及用于根据所述依存关系图对逻辑规则进行优化的装置。
上述转换装置中,所述用于根据所述依存关系图对逻辑规则进行优化的装置包括用于根据所述依存关系图生成谓词的优化执行顺序的装置;以及用于将处于依存关系图较高层的谓词中的约束下放到处于依存关系图较低层的谓词处的装置。
上述转换装置中,所述映射表存储器还用于向所述翻译器提供谓词到关系以及变量到实体的映射信息,并且所述翻译器包括用于将析取范式化的逻辑规则中的每个析取式翻译为一条结构化查询语言的SELECT查询语句的装置;用于用关键字UNION ALL来连接各个独立的结构化查询语言的SELECT查询语句的装置,其中,基于预先确定的映射表,将逻辑规则中的谓词转换为关系数据库的表名称并且将逻辑规则中的变量转换为关系数据库的列名称。
上述转换装置中,所述用于将析取范式化的逻辑规则中的每个析取式翻译为一条结构化查询语言的SELECT查询语句的装置执行以下操作通过使用对应于逻辑规则头部的参量所对应的列名称作为跟随关键字SELECT的属性,构造结构化查询语言的查询语句的SELECT部分;通过使用逻辑规则体部分中涉及的那些谓词所对应的表的名称作为跟随关键字FROM的表名称,构造结构化查询语言的查询语句的FROM部分;通过解析逻辑规则中各个谓词的变量之间的联系和表达关系操作的谓词,构造结构化查询语言的查询语句的WHERE部分。
上述转换装置中,所述翻译器将递归的逻辑规则翻译为使用公共表表达式的结构化查询语言的查询语句,其中使用该递归逻辑规则中递归的谓词所对应的表名称作为所述公共表表达式中的表名称。
上述转换装置中,所述翻译器在翻译过程中,通过在所述公共表表达式中增加用于记录在递归查询过程中用于递归变化的参量所经历路径的变量以及用于标记当前该变量的值是否曾经出现在所记录的路径中的参量,来避免在执行所翻译的结构化查询语言的递归查询语句时发生死循环。
上述转换装置中,所述翻译器利用结构化查询语言中的临时表翻译相互依存的多条逻辑规则。
根据本发明的第三方面,提供一种数据库查询系统,包括基于概念模型的查询语句编辑器;上述用于将基于概念模型的查询转换为结构化查询语言的查询语句的转换装置;以及以关系数据库形式实现的领域知识库。
根据本发明的第四方面,提供一种计算机程序产品,包含用于执行上述将基于概念模型的查询转换为结构化查询语言的查询语句的方法的计算机程序代码。
由于在领域概念模型的基础上,商业逻辑能够更加容易地通过基于概念模型的查询语言来进行描述,因此本发明为利用更加具有描述性的查询语言来查询存储在关系数据库中的数据提供了支持。本发明能够自动生成正确且有效的SQL查询语句,大大节省了人们在处理复杂数据查询时所需要付出的劳动,从而显著提高了用户,特别是非IT专业人员的查询效率。
结合附图阅读本发明实施方式的详细描述后,本发明的其它特点和优点将变得更加清楚。


图1示出了根据本发明一个实施例的将基于概念模型的查询转换为结构化查询语言的查询语句的处理流程图;图2示出了作为基于概念模型的示例的领域本体;图3示出了根据本发明一个实施例的将基于概念模型的查询转换为逻辑规则的处理流程图;图4示出了根据本发明一个实施例所产生的依存关系图的示例;图5示出了根据本发明一个实施例的将逻辑规则翻译为结构化查询语言的查询语句的处理流程图;图6示出了根据本发明一个实施例的构造结构化查询语言的查询语句中的WHERE语句的处理流程图;图7示出了图6中A部分的处理流程图;图8示出了相互依存的多条逻辑规则的依存关系图的示例。
图9示出了根据本发明一个实施例的用于将基于概念模型的查询转换为结构化查询语言的查询语句的系统框图;图10A和图10B示意性地表示了基于概念模型的查询语句编辑器中为了输入基于概念模型的查询所使用的用户界面示例;以及图11示意性地表示了其中可以实现本发明的实施例的计算机系统。
具体实施例方式
以下参照附图,对本发明的实施例进行详细描述。如果可能的话,在附图和描述中使用相同或者类似的参考标号以指代相同或者类似的部分。
图1示出了根据本发明实施例的将基于概念模型的查询转换为结构化查询语言的查询语句的处理流程图。概念模型是对概念、属性以及概念之间关系等进行描述的一种模型,例如如背景技术中所述,概念模型包括本体概念模型(ontology)、面向对象的模型(OO)以及实体关系模型(ER模型)。
如图1所示,在步骤S100中,开始该处理流程。
在步骤S102中,为了查询在关系数据库中存储的领域知识,用户根据预先定制的基于概念的模型(即领域本体),输入基于概念模型的查询。在该步骤中,用户可以使用某种基于概念的查询编辑器来编写查询,之后由该编辑器自动生成相应的查询语句脚本;或者用户可以直接通过编辑器输入查询语句脚本。
在步骤S104中,将上述输入的基于概念模型的查询转换为逻辑规则。这种转换例如可以通过约束标准化、概念模型关系推理、概念到谓词以及属性到变量的转换,以及范式标准化等步骤来实现。
在步骤S106中,对逻辑规则进行合法性检查。例如,检查该逻辑规则的语法、语义等是否符合预先确定的要求,是否属于系统能够分析处理的范围等。
在步骤S108中,判断该逻辑规则是否合法。如果判断结果为“是”,则继续执行步骤S110。如果判断结果为“否”,则该处理流程返回步骤S102,由用户对其输入的基于概念模型的查询进行修改,以便使得经过转换后的相应逻辑规则能够具有合法性。
在步骤S110中,例如通过对逻辑规则中谓词之间的关系进行建模,来优化具有合法性的逻辑规则,以便能够有效地进行逻辑规则到SQL语句的翻译。
在步骤S112中,通过应用一组翻译规则实现逻辑规则到SQL查询语句的翻译。根据本发明的实施例,这组翻译规则是预先为各种的逻辑规则种类所设定,其中可以包括用于翻译非递归逻辑规则的翻译规则、用于翻译递归逻辑规则的翻译规则、用于翻译依存的多个逻辑规则的翻译规则等。
在步骤S114中,结束该处理流程。
在上述对图1的描述中,概括地说明了根据本发明的将基于概念模型的查询翻译为SQL查询语句的过程。以下将结合具体示例,对图1的处理流程的每一个步骤做出进一步说明,这将使得根据本发明实施例的处理流程更加清楚。
在该示例中,假设需要从实现为关系数据库的知识库中查询“由公司A持股并且进行担保的所有公司”。表1-5示出了知识库中存储的数据表。图2示出了作为基于概念模型的示例的当前领域本体。
表1 数据表“公司”公司

表2 数据表“上市公司”上市公司

表3 数据表“非上市公司”非上市公司

表4 数据表“持股”持股


表5 数据表“担保”担保

用户在查询时无需了解知识库中诸如表1-5所示的数据安排,仅需要例如通过图形化用户界面或者用户手册等了解到如图2所示的当前领域有关领域本体,即基于概念的模型。如图2所示,概念“公司”包括两个子概念“上市公司”和“非上市公司”,列表210列出了概念“公司”所具有的相应属性,包括“编号”、“公司名称”等;概念“持股”表示持股人和被持股人之间的关系,列表220列出了概念“持股”所具有的相应属性,包括“编号”、“持股人”、“被持股人”、表示报告该“持股”关系日期的“报告日期”等;概念“担保”表示保证人和债务人之间的关系,列表230列出了概念“担保”所具有的相应属性,包括“编号”、“担保人”、“债务人”、表示报告该“担保”关系日期的“报告日期”等。
用户根据图2所示的领域本体,即基于概念的模型,借助于基于概念的查询编辑器将“列出所有由公司A持股并且进行担保的所有公司”编写为基于概念的查询语句(相当于图1中的步骤S102)。该查询语句例如可以表示为?(y)-持股(持股人x(公司(公司名称z=″公司A″)),被持股人y),担保(担保人x,债务人y).(1)
其中,参量y代表要查询的公司,符号“-”表示当且仅当该符号右侧表达式成立则符号左侧表达式成立,符号“,”分隔两表达式,表示二者之间是“逻辑与”关系。
需要注意的是,这里为了便于以后的说明,采用了上述式(1)的形式来表示基于概念的查询语句。本领域的技术人员可以理解,基于概念的查询还可以表达为其它的描述形式。虽然在此采用了基于概念的查询的一种具体描述方式,但是可以理解,本发明适用于其它各种基于概念的查询的描述方式。而且,不同类型的查询编辑器可以为式(1)或者式(1)的其它描述形式生成不同的输入查询脚本。因此,基于概念模型的查询的具体描述方式以及生成脚本的具体形式,不对本发明构成任何限制。
接着,例如可以按照图3所示的处理流程将该输入的基于概念模型的查询,即将式(1)转换为逻辑规则(相当于图1中的步骤S104)。
图3示出了根据本发明一个实施例的将基于概念模型的查询转换为逻辑规则的处理流程图。
如图3所示,首先在步骤S300中开始处理。
在步骤S302中,对该输入的基于概念模型的查询进行约束规范化。需要把所有的类对象约束作为分离的谓词,并且将所有数据类型约束转换为计算谓词。具体来说,式(1)约束规范化后的输出为?(y)-公司(编号x,公司名称z),z=″公司A″,持股(持股人x,被持股人y),担保(担保人x,债务人y).(2)由此,在式(2)中将式(1)对于变量“持股人x”的约束“(公司(公司名称z=′公司A′))”标准化为单独的谓词“公司”、“=”,并且将数据类型“公司名称z=′公司A′”约束转换为计算谓词“=”。
在步骤S304中,对概念模型关系进行推理,主要指在概念层面上的推理,如判断一个概念是否是另一个概念的子类,即包含关系的推理。在下面的例子中执行包含关系的推理需要所有的概念扩展为其子概念。具体来说,式(2)进行概念模型关系推理后的输出为?(y)-(上市公司(编号x,公司名称z);非上市公司(编号x,公司名称z)),z=″公司A″,持股(持股人x,被持股人y),担保(担保人x,债务人y).(3)其中,符号“;”表示“逻辑或”。
在步骤S306中,基于预先确定的映射表,执行概念到谓词以及属性到变量之间的转换。本领域技术人员可以理解,这里所说的这种转换基本上是指概念名称到谓词名称、以及属性名称到变量类型名称的转换(例如,将概念名称A转换为谓词名称B;将属性名称C转换为变量名称D)。特别地,可以预先统一命名规则,使得概念和谓词之间的命名以及属性和变量类型之间的命名彼此相符合,这样就可以无需执行该转换步骤。当然,在实际的实现中命名统一是十分困难的。为了简便起见,假设在上述示例中,概念模型中概念和属性的命名和逻辑规则中谓词和变量类型之间的命名彼此相符合,则式(3)经过转换后的输出未发生改变,仍为?(y)-(上市公司(编号x,公司名称z);非上市公司(编号x,公司名称z)),
z=″公司A″,持股(持股人x,被持股人y),担保(担保人x,债务人y).(4)此时,经过转换的式(4)在逻辑内容和命名上已经转换为一个逻辑规则。
在步骤S308中,对转换过的查询语句进行范式标准化以获得逻辑规则。通常来说,对逻辑规则的后续操作都是建立在范式操作的基础上。根据本发明一个实施例,对查询语句进行析取范式标准化。本领域技术人员可以理解,析取范式是指有限个合取式通过“或”操作符连接起来的表达式,其中每个合取式或者是原子表达式或者是有限个原子表达式通过“与”操作符连接起来的表达式。析取范式标准化就是将一般表达式转化为析取范式的过程。具体来说,式(4)进行析取范式标准化的输出为?(y)-上市公司(编号x,公司名称z),z=″公司A″,持股(持股人x,被持股人y),担保(担保人x,债务人y);非上市公司(编号x,公司名称z),z=″公司A″,持股(持股人x,被持股人y),担保(担保人x,债务人y).(5)此时,式(5)即为转换为析取范式的逻辑规则。本领域技术人员可以理解,逻辑规则基本上是指具有例如以下形式的表达式,P-Q1,Q2,...,Qn,其中Q1,Q2,...,Qn为条件,P为结论,其含义为如果所有的条件都成立的话,则结论也成立,具有这样形式的表达式统称为逻辑规则。
在步骤S310中,结束该将基于概念模型的查询转换为逻辑规则的处理流程。
需要注意,这里采用了上述式(5)的形式来表示所获得的逻辑规则。本领域的技术人员可以理解,逻辑规则还可以表达为其它的描述形式。特别地,可以根据所采用的基于概念模型的查询的描述形式来定义逻辑规则的描述形式。虽然在此采用了逻辑规则的一种具体描述方式,但是可以理解,本发明适用于其它各种逻辑规则的描述方式。因此,这里逻辑规则的具体描述方式不对本发明构成任何限制。
接着,对范式标准化的逻辑规则进行合法性检查(相当于图1中的步骤S106)。如上所述该合法性检查涉及语法检查和语义检查,以便保证逻辑规则的正确性。
在语法检查中,可以检查诸如式(5)的范式标准化的逻辑规则是否符合所定义的逻辑规则描述语言的语法。根据本发明的实施例,还可以执行安全性规则检查,其中包括谓词和变量的存在性检查、谓词和变量的连贯性检查等。具体举例来说,可以检查在规则体中是否存在未定义的谓词和变量;检查出现在规则头部(例如,式(5)中符号“-”左侧部分)中的变量是否也出现在规则体(即式(5)中符号“-”右侧部分)中;检查在规则体中是否存在“自由变量”即仅在规则体中出现且仅出现一次的变量,等等。如果检查到出现上述或者其它语法问题,则报告语法错误,并且向用户例如返回通知消息以便进一步修改。本领域技术人员可以理解,由于定义的逻辑规则描述语言可能不同,可以根据不同的描述语言的语法特点来设计在语法检查中涉及的内容。
在语义检查中,可以检查诸如式(5)的范式标准化的逻辑规则的语义,以便使得逻辑规则在逻辑上是有效的。根据本发明的实施例,可以检查是否存在非线性递归的谓词,例如p(x)-p(y),q(x),p(z),
以及是否存在间接递归的谓词,例如p(x)-q(x).
q(x)-p(x).
由于SQL不支持非线性递归和间接递归的查询,因此在逻辑规则中出现的非线性递归和间接递归在转换到SQL时会发生错误,因此可以认为在逻辑上无效。还可以检查是否存在非分层否定的情况,例如p(x)-q(x),not p(x).
如果出现非分层否定的情况,则该逻辑规则显然存在逻辑错误,可以认为在逻辑上无效。如果确定检查到上述或者其它逻辑无效的情况,则报告语义错误,并且向用户例如返回通知消息以便进一步修改。
接着,如果逻辑规则通过了逻辑规则合法性检查,则继续执行对逻辑规则的优化(相当于图1中的步骤S110),以便简化后续处理过程,并且消除在后续处理中可能出现无关中间结果的因素。根据本发明一个实施例,可以通过对逻辑规则中谓词之间的依存关系进行建模,例如建立谓词之间的依存关系图来对逻辑规则进行优化。依据所建立的谓词之间的依存关系图,能够生成在之后的处理中对于谓词的优化执行顺序,并且可以将约束下放到所能约束的最低层谓词以提高后续流程的计算性能。
根据本发明的一个实施例,上述谓词的依存关系图可以按照如下方法来建立。例如,对于规则p(x)-q(x),r(x).
则认为谓词p依存于谓词q和r。在依存关系图中,谓词p对应节点通过两条入边分别连接到谓词q和r对应的节点。作为一个示例,通过合法性检查的式(5)可以建立如图4所示的依存关系图。
依据谓词的依存关系图,按照预先确定的策略,可以生成一个包含该图中每个节点(对应于逻辑规则中的每个谓词)的序列,以便在后续的处理中按照该序列的顺序来处理每个谓词。例如,根据本发明的一个实施例,当某节点所依存的所有节点(不包括其自身)已经在该序列中时,则将该节点置入该序列,从而生成反映谓词优化执行顺序的序列。本领域的技术人员可以理解,可以通过各种公知的计算机算法、程序来实现该序列的生成,因此在这里不再对具体计算机算法、程序进行描述。
为了提高后续处理过程的性能,还可以将处于依存关系图较高层的谓词中的约束(类/数据类型约束)下放到处于依存关系图较低层的谓词处。给出一个简单的示例,例如逻辑规则定义为?(x)-p(x),x<100.
p(x)-q(x).
则经过约束下放处理的逻辑规则为?(x)-p(x).
p(x)-q(x),x<100.
显然,这种优化处理可以直接依据所生成的反映谓词优化执行顺序的序列来执行,因为该序列中的谓词顺序直接体现了谓词在依存关系图中的依存层次。
需要注意的是,本领域技术人员可以对上述描述的优化策略进行改进甚至采用其它的优化策略,来实现其具体优化目标。因此,具体采用何种优化策略对本发明不构成限制。
接着,将上述经过优化的逻辑规则 译为相应的SQL查询语句(相当于图1中的步S112)。
对于每个非递归的逻辑规则都可以在关系代数中进行表达,并且由此能够 译为SQL SELECT查询语句。其中,优化后逻辑规则的析取范式中的每个析取式可以译为一条SQL SELECT查询语句,然后再将所产生的SQL SELECT查询语句进行合取,也就是在SQL中采用“UNION ALL”来连接各个独立的SQL SELECT查询语句。
图5示出了根据本发明的一个实施例的将逻辑规则译为SQL查询语句的处理过程。
在步骤S500中,该处理过程开始。
在步骤S502中,将逻辑规则中的谓词和变量分别映射为关系数据库中的关系和实体。具体来说,每个谓词名称对应于RDB的关系名称,也即RDB数据库的表名(既可以是记录事实的表,也可以是谓词计算期间产生的中间结果表);变量类型的名称对应于列的名称,也即谓词参量的位置对应于列的位置。
该映射过程可以借助于预先确定的映射表来执行。特别地,可以预先统一命名规则,使得谓词和关系之间的命名以及变量和实体之间的命名彼此相符合,这样就可以无需执行该转换步骤。当然,在实际的实现中命名统一是十分困难的。具体来说,式(5)(经过优化后)应该借助于该映射表变换为?(y)-上市公司(uIDx,公司名称z),z=″公司A″,持股(持股人x,被持股人y),担保(担保人x,债务人y);非上市公司(uIDx,公司名称z),z=″公司A″,持股(持股人x,被持股人y),担保(担保人x,债务人y).(6)其中,式(5)中的变量类型“编号”被相应地映射为表的列名称(实体)“uID”。
在步骤S504中,构造当前析取式的SQL查询语句的SELECT部分。在逻辑规则头部的参量(变量)受到位于逻辑规则体部分中(当前析取式中)的、包含该参量的谓词的限制。因此,在该步骤中,使用对应于逻辑规则头部的参量的表名称和列名称来作为跟随关键字SELECT的属性。具体来说,基于式(6)的第一析取式所导出的SQL语句的SELECT部分为SELECT持股.被持股人其中,“持股”为处于逻辑规则头部的参量y所出现的逻辑规则体部分的谓词(此时已映射为关系),“被持股人”为参量y的变量类型(此时已映射为实体)。
在步骤S506中,构造当前析取式的SQL查询语句的FROM部分。在FROM部分中必须包括的表的名称是在逻辑规则体部分中涉及的那些谓词所对应的表的名称。具体来说,基于式(6)的第一析取式所导出的SQL语句的SELECT部分为FROM上市公司,持股,担保在步骤S508中,构造当前析取式的SQL查询语句的WHERE部分。WHERE部分的构造是比较复杂的,在图6和图7中示出根据本发明一种实施例的构造WHERE部分的处理流程。后文将参照图6和图7对构造WHERE部分的处理进行详细说明。
在步骤S510中,判断是否已经处理了逻辑规则中的所有析取式。如果判断结果为“是”,则执行步骤S518。如果判断结果为“否”,则执行步骤S514。
在步骤S514中,在当前构造的SQL查询语句后加入运算符关键字“UNION ALL”(加合)。
在步骤S516中,选取该逻辑规则中的下一析取式。
然后,处理返回步骤S504继续执行。
具体来说,此时基于(6)的第二析取式所构造的SQL语句的SELECT部分为“SELECT持股.被持股人”(在该示例中,因为参量y所涉及的谓词均为“持股”所以两个析取式对应的SQL语言的SELECT部分相同);FROM部分为“FROM非上市公司,持股,担保”;以及构造相应的WHERE部分。
在步骤S518中,输出为逻辑规则所构造的SQL语句。
这里需要注意的是,虽然图5中将谓词到关系和变量到实体的映射单独作为一个步骤(S502)来描述,但是本领域的技术人员可以理解还可以将该步骤分布在后续的各个步骤中执行。也就是说,在生成SQL SELECT查询语句的SELECT部分、FROM部分以及WHERE部分的处理过程中实现该谓词到关系和变量到实体的映射转换。
以下参考图6和图7,说明在根据本发明一个实施例中用于构造SQL语句的WHERE部分的处理流程。
首先要说明的是,图6和图7所示的处理流程是基于在逻辑规则优化步骤中生成的反映谓词优化执行顺序的序列来执行的。如果结合图5中所描述的内容,则在以下的描述中所述的逻辑规则体可以理解为仅包括逻辑规则的一个析取式。
图6示出了根据本发明一个实施例的构造结构化查询语言的查询语句中的WHERE语句的处理流程图。
如图6所示,在步骤S600中,开始该处理流程。
在步骤S602中,取逻辑规则体中一个未处理的谓词,也即从优化步骤中得到的反映谓词优化执行顺序的序列中取一个未处理的谓词。设该谓词为m。
在步骤S604中,判断当前谓词是否为内置谓词。如果判断结果为“是”,则处理转到A部分(将在后文参照图7予以说明)。如果判断结果为“否”,则处理继续执行步骤S606。
在步骤S606中,取谓词m的一个未处理参量。设该参量为a。
在步骤S608中,判断当前参量a是否为常量。如果判断结果为“是”则执行步骤S616。如果判断结果为“否”,则执行步骤S610。
在步骤S616中,向WHERE语句部分添加“m.列名称=a”。之后,该处理继续执行步骤S618。其中,该“列名称”是指当前参量a对应的列名称。
在步骤S610中,判断当前参量是否出现在之前处理过的任意谓词n中。如果判断结果为“是”,则执行步骤S612。如果判断结果为“否”,则执行步骤S614。
在步骤S612中,向WHERE语句部分添加“n.列名称=m.列名称”。该“列名称”是指当前参量a在谓词n和m中分别对应的列名称。
在步骤S614中,记忆当前参量a,和其所处当前谓词m。
在步骤S618中,判断当前谓词m是否还有其它参量。如果判断结果为“是”,则该处理返回步骤S606继续执行。如果判断结果为“否”,则执行步骤S620。
在步骤S620中,判断该规则体中是否还有未处理的谓词。如果判断结果为“是”,则该处理返回步骤S602继续执行。如果判断结果为“否”,则执行步骤S622。
在步骤S622中,该处理流程结束。
图7示出了图6中A部分的处理流程图。
如图7所示,在步骤S702中,判断该内置谓词m是否为关系操作谓词,例如==、<>、>、>=、<、<=等。本领域的技术人员可以理解,在WHERE语句部分中,只有内置谓词中的关系操作谓词才需要考虑。这样的关系操作谓词通常只有两个变元。因此,如果在该步骤中判断结果为“否”,则处理返回图6中的步骤S602,继续取下一个未处理的谓词;如果判断结果为“是”,则执行步骤S704。
在步骤S704中,取谓词m的两个参量a1、a2。
在步骤S706中,判断参量a1和a2是否均为变量。如果判断结果为“否”,则执行步骤S708。如果判断结果为“是”,则执行步骤S710。
在步骤S708中,设参量a1或者a2出现在谓词n中,则向WHERE语句部分加入“n.列名称1sq1操作符m.a1”或者“n.列名称2sq1操作符m.a2”。其中,列名称1为参量a1对应的谓词n所对应的表中的列名称,列名称2为参量a2对应的谓词n所对应的表中的列名称;sql操作符为该关系操作谓词对应的sq1操作符。
在步骤S710中,设参量a1出现在谓词n中,并且a2出现在谓词1中,则向WHERE语句部分加入“n.列名称1sq1操作符1.列名称2”。其中,列名称1为参量a1对应的谓词n所对应的表中的列名称,列名称2为参量a2对应的谓词1所对应的表中的列名称;sq1操作符为该关系操作谓词对应的sq1操作符。
在执行步骤S708或者S710之后,该流程返回图6,继续执行步骤S620。
需要注意的是,图7的流程也是基于在逻辑规则优化步骤中生成的反映谓词优化执行顺序的序列来执行的,而在该序列中,内置谓词,特别地关系操作谓词总是靠近于序列尾部,也就是说这些谓词总是处于依存关系图的较低层。因此,步骤S708中假设的谓词n以及步骤S710中假设的谓词n和谓词1在当前实施例的处理流程中总会先于当前关系操作谓词m被处理。这实际上表明,前述的根据该实施例的优化步骤能够提高整个翻译处理的效率和性能。
至此,描述了根据本发明的一个实施例将逻辑规则翻译为SQL查询语句的整个过程。
在上文的具体示例中,式(5)的逻辑规则被翻译为SELECT持股.被持股人FROM上市公司,持股,担保WHERE上市公司.公司名称=‘公司A’and持股.持股人=上市公司.uID and担保.担保人=持股.持股人and担保.债务人=持股.被持股人UNION ALLSELECT持股.被持股人FROM非上市公司,持股,担保WHERE非上市公司.公司名称=‘公司A’and持股.持股人=非上市公司.uID and担保.担保人=持股.持股人and担保.债务人=持股.被持股人SQL标准在SQL99标准中,已经能够支持递归的查询。因此,根据SQL99标准递归的逻辑规则可以表达为公共表表达式(CommonTable Expression,CTE)。根据本发明的实施例,可以将递归的逻辑规则翻译为这种公共表表达式,其中使用“WITH表名称(a1,a2,...)AS”来定义整个递归查询语句。在该递归查询语句中,可以按照与对非递归逻辑规则进行翻译相同的处理流程来生成SELECT、FROM以及WHERE语句部分,并且可以在这些语句中引用该WITH语句部分中定义的“表名称”。最后,产生最后SELECT语句部分以便产生在递归查询结果中所需的列。
根据本发明的一个实施例,为了避免在执行所翻译的递归查询语句时产生死循环的情况,可以在该WITH语句部分中增加两个参量(也即增加列),一个用于记录在递归查询过程中递归变化的变量所经历的路径(例如定义为参量“路径”),另一个用于标记当前该变量的值是否曾经出现在所记录的参量“路径”中(例如,定义为布尔值的参量“死循环”)。可以理解,如果当前变量的值曾经出现在所记录的“路径”中,则表明该递归查询已经陷入死循环;反之,则表明当前该递归查询是安全的。
在一个具体示例中,含有递归的逻辑规则定义为间接持股(持股人x,被持股人y)-持股(持股人x,被持股人y).
间接持股(持股人x,被持股人y)-间接持股(持股人x,被持股人z),持股(持股人z,被持股人y). (7)根据本发明实施例的翻译递归逻辑规则的策略,式(7)可以翻译为如下SQL查询语句
WITH间接持股(持股人,被持股人,路径,死循环)AS{SELECT持股.持股人,持股.被持股人,varchar(hex(持股.被持股人),空间大小),falseFROM持股UNION ALLSELECT间接持股.持股人,间接持股.被持股人,间接持股.路径||hex(间接持股.被持股人),locate_block(hex(间接持股.被持股人),间接持股.路径)FROM间接持股,持股WHERE持股.持股人=间接持股.被持股人and间接持股.死循环=false}SELECT持股人,被持股人FROM间接持股其中,varchar()表示将十六进制数变为ASCII类型字符串的函数,hex()转换为十六进制数的函数,||表示将两个字符串进行合并的操作符,locate_block()为预先定义的功能函数,用于实现在一个字符串中定位另一个字符串并返回布尔值的功能。还可以在翻译后的SQL语句中使用其它SQL本身支持或再开发的功能函数,以提供所生成的SQL查询语句的性能。这可以通过对递归逻辑规则进行翻译的具体计算机算法或程序来实现。
本领域的技术人员基于以上所描述的对递归逻辑规则进行的SQL翻译的策略,可以设计各种计算机算法或程序来具体实现其处理流程。为了简洁的目的,这里不再对具体处理流程进行详细描述,但应理解,各种具体处理流程均包括在本发明的范围之内。
在将多条逻辑规则翻译为SQL查询语句的情况下,根据本发明的一个实施例,可以根据谓词之间的依存关系利用SQL所支持的临时表来翻译该多条逻辑规则,从而优化所翻译的SQL查询语句在执行查询时的性能。在依存关系图中,如果一个谓词依赖于多个(两个或两个以上)其它谓词,则将该节点和其各个父节点翻译为一条使用临时表的SQL语句。
结合具体示例,根据本发明对于多条逻辑规则的SQL翻译的处理过程将更加明显。例如,在一个示例中,多条逻辑规则如下所示控制(控制人x,所有人y)-直接控制(控制人x,所有人y).
控制(控制人x,所有人y)-间接控制(控制人x,所有人y).
直接控制(控制人x,所有人y)-持股(持股人x,被持股人y).
直接控制(控制人x,所有人y)-担保(担保人x,债务人y).
间接控制(控制人x,所有人y)-直接控制(控制人x,所有人z),直接控制(控制人z,所有人y).
间接控制(控制人x,所有人y)-间接控制(控制人x,所有人z),直接控制(控制人z,所有人y). (8)根据本发明的一个实施例,首先利用拓扑分析方法对已经建立的依存关系图进行分析,确定各个谓词之间的依存关系。
图8示出了多条逻辑规则式(8)的谓词依存关系图。如图8所示,其中,谓词“直接控制”的节点具有两个父节点“持股”、“担保”;谓词节点“控制”具有两个父节点“直接控制”、“间接控制”;谓词节点“间接控制”具有一个父节点“直接控制”,而且谓词节点“间接控制”是递归谓词,其定义中引用了自身(如箭头示)。可见,谓词节点“控制”是最小公共祖先,因此根据一种优选的方式可以为“控制”创建临时表,从而实现对式(8)的翻译。
根据本发明一种实施例,翻译结果如下所示CREATE VIEW控制(控制人,所有人)AS{WITH直接控制(控制人,所有人)AS{SELECT持股.持股人,持股.被持股人FROM持股UNION ALLSELECT担保.担保人,担保.债务人FROM担保},间接控制(控制人,所有人,路径,死循环)AS{SELECT d1.控制人,d2.所有人,varchar(hex(d2.所有人),空间大小),falseFROM直接控制d1,直接控制d2WHERE d2.控制人=d1.所有人UNION ALLSELECT间接控制.控制人,直接控制.所有人,间接控制.路径||hex(间接控制.所有人),locate_block(hex(间接控制.所有人),间接控制.路径)FROM间接控制,直接控制WHERE直接控制.控制人=间接控制.所有人and
死循环=false}}SELECT直接控制控制人,直接控制.所有人FROM直接控制UNION ALLSELECT间接控制.控制人,间接控制.所有人FROM间接控制可以看到,其中除了通过CREATE VIEW...AS WITH语句来翻译最小公共祖先谓词节点“控制”,以创建可以被其它谓词使用的临时表以外,逻辑规则可以按照非递归逻辑规则以及递归逻辑规则的翻译处理流程进行翻译,以生成CREATE VIEW语句中包括的SQL SELECT查询语句。
本领域的技术人员基于以上所描述的对相互依存的多条逻辑规则进行的SQL翻译的策略,还可以设计各种计算机算法或程序来具体实现其处理流程。为了简洁的目的,这里仅给出一段实现多规则翻译的伪代码,但应理解,各种具体处理流程均包括在本发明的范围之内。
parentnodelist=null;translation=“”;FOR rule r=first..last rule IN programhead h=r.head;IF r.parents.size()>=2 or parentnodelist<>null THENparentnodelist.addAll(r.parents);IF r.parents.size()>=2 THENtranslation+=“CREATE VIEW”+h.name+h.arguments+“AS WITH”;
ELSEtranslation+=“,”ENDIFtranslation+=non_recursive_rule_translation(r,nodesUsed);parentnodelist=DeleteNode(parentnodelist,nodesUsed);ELSE//单规则翻译translation+=“CREATE VIEW”;translation+=non_recursive_rule_translation(r);END IFENDFOR图9示意性地示出了根据本发明一个实施例的将基于概念模型的查询转换为结构化查询语言的系统框图。其中,参考标号90表示基于概念模型的查询语句编辑器,参考标号900表示用于将基于概念模型的查询语句转换为SQL查询语句的转换装置,参考标号91表示作为关系数据的知识库。
如图9所示,用户利用基于概念模型的查询语句编辑器90编辑基于概念模型的查询。用户利用基于概念模型的查询语句编辑器90可以提供例如图10A所示的向用户提供领域本体的图形化用户界面。用户通过该界面可以获取有关查询所需的概念模型的信息。在图10A中,可以看到该图形化用户界面的OWL类标签部分1001以树形方式给出了在当前查询中可用的本体概念(类)以及其相应的子概念(子类)。通过对该图形化用户界面进行操作,用户还可以获取该领域本体涉及的其它信息,例如可以选中属性标签部分1002以查看当前类或者子类的属性等。用户通过例如图10A所示的用户界面获得了诸如概念模型和商业规则的领域本体,然后用户例如可以通过利用基于概念模型的查询语句编辑器90提供的图10B表示的图形化用户界面来输入或者编辑基于概念模型的查询。例如,在图10B中,通过窗体1003选择要查询或者要限定的关系中的概念(类)、子概念(子类),以及通过属性标签部分1004限定概念中的属性值等。之后,该基于概念的查询编辑器90能够根据用户的输入自动生成处理所需的查询表达式。
支持用户输入的查询语句编辑器90可以有多种形式。例如,提供诸如图10A和图10B示出的用户界面的适用于基于Web本体语言(OWL)的编辑器、使用基于统一建模语言(UML)的编辑器、基于Java模型定义的面向对象的编辑器,甚至仅为查询语句脚本提供简单编辑环境的编辑器。本领域的技术人员可以理解,本发明不受该编辑器实现方式的限制。
接着,将输入的基于概念模型的查询语句输入到用于将基于概念模型的查询语句转换为SQL查询语句的转换装置900。
如图9所示,转换装置900可以包括转换器901、检查器902、优化器903、翻译器904以及映射表存储器905。
在转换装置900中,基于概念模型的查询语句首先由转换器901转换为逻辑规则。根据本发明的一个实施例,该转换器901可以包括用于对该输入的基于概念模型的查询进行约束规范化的装置;用于根据概念模型对规范化的查询语句执行概念模型关系推理的装置;用于基于映射表存储器905中存储的映射表、执行概念到谓词以及属性到变量的转换的装置;以及用于对转换而成的查询语句执行范式标准化以得到逻辑规则的装置。
其中,用于进行概念到谓词以及属性到变量的转换的装置需要基于映射表存储器905提供的、预先确定的概念到谓词以及属性到变量映射表的信息来执行相应的转换。
其中,用于对规范化的查询语句执行概念模型关系推理的装置包括用于对规范化的查询语句执行包含关系推理的装置。
其中,用于对转换而成的查询语句执行范式标准化以得到逻辑规则的装置包括用于对转换而成的查询语句执行析取范式标准化的装置。
检查器902对转换器901输出的逻辑规则进行合法性检查。如果该逻辑规则不合法,则例如向基于概念模型的查询语句编辑器90发送消息,以通知用户对其输入的基于概念模型的查询进行修改;如果该逻辑规则合法,则将其输出到优化器903。
检查器包括语法检查器,用于检查范式标准化的逻辑规则是否符合所定义的逻辑规则描述语言的语法;以及语义检查器,用于检查逻辑规则是否在逻辑上是有效的。
其中,语法检查器还进行逻辑规则的安全性规则检查,其中包括谓词和变量的存在性检查、谓词和变量的连贯性检查。
其中,语义检查器还检查是否存在非线性递归的谓词、检查是否存在间接递归的谓词、检查是否存在非分层否定的情况。
在优化器903中,通过对逻辑规则中谓词之间的关系进行建模,来优化被检查器902检查为合法的逻辑规则,以便能够有效地进行逻辑规则到SQL语句的翻译。之后,优化器903将优化结果输出到翻译器904。
优化器进一步包括用于根据逻辑规则中谓词之间的依存关系建立依存关系图的装置,其中每个节点对应于逻辑规则中的一个谓词,并且用节点间的有向边表示各个谓词之间的依存关系;以及用于根据依存关系图对逻辑规则进行优化的装置。
其中,用于根据依存关系图对逻辑规则进行优化的装置包括用于根据依存关系图生成谓词的优化执行顺序的装置;以及用于将处于依存关系图较高层的谓词中的约束下放到处于依存关系图较低层的谓词处的装置。
在翻译器904中,通过应用一组翻译规则实现逻辑规则到SQL语句的翻译。根据本发明的一个实施例,对于逻辑规则中的谓词和变量到关系数据库中的关系和实体的翻译是根据映射表存储器905中预先确定的谓词到关系以及变量到实体的映射表来执行的。并且,这组翻译规则是预先为各种特定的逻辑规则种类所设定,其中可以包括用于翻译非递归逻辑规则的翻译规则、用于翻译递归逻辑规则的翻译规则、用于翻译依存的多个逻辑规则的翻译规则等。这些规则可以包括优化所翻译的SQL语句的性能的策略。
其中,翻译器包括用于将析取范式化的逻辑规则中的每个析取式翻译为一条结构化查询语言的SELECT查询语句的装置;用于用关键字UNION ALL来连接各个独立的结构化查询语言的SELECT查询语句的装置,其中,基于预先确定的映射表,将谓词转换为关系并且将变量转换为实体。
其中,用于将析取范式化的逻辑规则中的每个析取式翻译为一条结构化查询语言的SELECT查询语句的装置执行以下操作通过使用对应于逻辑规则头部的参量的表名称和列名称来作为跟随关键字SELECT的属性,构造结构化查询语言的查询语句的SELECT部分;通过使用逻辑规则体部分中涉及的那些谓词所对应的表的名称来作为跟随关键字FROM的表名称,构造结构化查询语言的查询语句的FROM部分;通过解析逻辑规则中各个谓词的变量之间的关系,构造结构化查询语言的查询语句的WHERE部分。
该实施例中的翻译器将递归的逻辑规则翻译为使用公共表表达式的结构化查询语言的查询语句,其中使用该递归逻辑规则中递归的谓词所对应的表名称作为所述公共表表达式中的表名称。
该实施例中的翻译器在翻译过程中,通过在公共表表达式中增加用于记录在递归查询过程中用于递归变化的参量所经历路径的变量以及用于标记当前该变量的值是否曾经出现在所记录的路径中的参量,来避免在执行所翻译的结构化查询语言的递归查询语句时发生死循环。
该实施例中的翻译器利用结构化查询语言中的临时表翻译相互依存的多条逻辑规则。
最后,利用转换而成的SQL查询语句对知识库91进行查询。
需要说明的是,在图9示出的实施例中,将转换所需的映射信息(映射表)集中在映射表存储器905中进行存储/提供。可以理解,也可以独立地存储/提供概念到谓词以及属性到变量的映射信息,和谓词到关系以及变量到实体的映射信息。因此,映射信息存储、提供的方式并不对本发明构成限制。
另外,对于图9中各部件的操作的更具体的描述,可参照前文结合图1至图8的描述,以节省篇幅。
图11示意性地表示了其中可以实现本发明的实施例的计算机系统。图11中所示的计算机系统包括CPU(中央处理单元)1101、RAM(随机存取存储器)1102、ROM(只读存储器)1103、系统总线1104,HD(硬盘)控制器1105、键盘控制器1106、串行接口控制器1107、并行接口控制器1108、显示器控制器1109、硬盘1110、键盘1111、串行外部设备1112、并行外部设备1113和显示器1114。在这些部件中,与系统总线1104相连的有CPU1101、RAM 1102、ROM1103、HD控制器1105、键盘控制器1106,串行接口控制器1107,并行接口控制器1108和显示器控制器1109。硬盘1110与HD控制器1105相连,键盘1111与键盘控制器1106相连,串行外部设备1112与串行接口控制器1107相连,并行外部设备1113与并行接口控制器1108相连,以及显示器1114与显示器控制器1109相连。
图11中每个部件的功能在本技术领域内都是众所周知的,并且图11所示的结构也是常规的。这种结构不仅用于个人计算机,而且用于手持设备,如Palm PC、PDA(个人数据助理)、移动电话等等。在不同的应用中,图11中所示的某些部件可以被省略。图11中所示的整个系统由通常作为软件存储在硬盘1110中、或者存储在EPROM或者其它非易失性存储器中的计算机可读指令控制。软件也可从网络(图中未示出)下载。或者存储在硬盘1110中,或者从网络下载的软件可被加载到RAM 1102中,并由CPU 1101执行,以便完成由软件确定的功能。
尽管图11中描述的计算机系统能够支持根据本发明的将基于概念模型的查询转换为结构化查询语言的方法,但是该计算机系统只是计算机系统的一个例子。本领域的熟练技术人员可以理解,许多其它计算机系统设计也能实现本发明的实施例。
本发明还可以实现为一种例如由图11所示计算机系统所使用的计算机程序产品,其包含有用于执行根据本发明的将基于概念模型的查询转换为结构化查询语言的方法的代码。在使用之前,可以把代码存储在其它计算机系统的存储器中,例如,存储在硬盘或诸如光盘或软盘的可移动的存储器中,或者经由因特网或其它计算机网络进行下载。
虽然结合附图描述了本发明的实施方式,但是本领域技术人员可以在所附权利要求的范围内做出各种变形或修改。
权利要求
1.一种将基于概念模型的查询转换为结构化查询语言的查询语句的方法,包括以下步骤将输入的基于概念模型的查询转换成逻辑规则;将所述逻辑规则翻译为结构化查询语言的查询语句;对所述逻辑规则进行合法性检查;以及对合法的所述逻辑规则进行优化。
2.根据权利要求1所述的方法,其中所述将输入的基于概念模型的查询转换成逻辑规则的步骤进一步包括以下步骤对该输入的基于概念模型的查询进行约束规范化;根据概念模型,对规范化了的查询语句执行概念模型关系推理;基于预先确定的映射表,执行概念模型中的概念到逻辑规则的谓词以及概念模型中的属性到逻辑规则的变量的转换;以及对转换过的查询语句执行范式标准化,以得到逻辑规则。
3.根据权利要求2所述的方法,其中所述对规范化的查询语句执行概念模型关系推理的步骤包括对规范化的查询语句执行包含关系推理;并且所述对转换过的查询语句执行范式标准化以得到逻辑规则的步骤包括对转换过查询语句执行析取范式标准化。
4.根据权利要求1所述的方法,其中所述对逻辑规则进行合法性检查的步骤进一步包括以下步骤语法检查,用于检查范式标准化的逻辑规则是否符合所定义的逻辑规则描述语言的语法;以及语义检查,用于检查逻辑规则是否在逻辑上是有效的。
5.根据权利要求4所述的方法,其中所述语法检查步骤进一步包括逻辑规则的安全性规则检查,其中包括谓词和变量的存在性检查、谓词和变量的连贯性检查;并且所述语义检查步骤进一步包括检查是否存在非线性递归的谓词、检查是否存在间接递归的谓词、检查是否存在非分层否定的情况。
6.根据权利要求1所述的方法,其中所述对合法的逻辑规则进行优化的步骤进一步包括以下步骤根据逻辑规则中谓词之间的依存关系,建立依存关系图,其中每个节点对应于逻辑规则中的一个谓词,并且用节点间的有向边表示各个谓词之间的依存关系;以及根据所述依存关系图对逻辑规则进行优化。
7.根据权利要求6所述的方法,其中所述根据所述依存关系图对逻辑规则进行优化的步骤包括以下步骤根据所述依存关系图,生成谓词的优化执行顺序;以及将处于依存关系图较高层的谓词中的约束下放到处于依存关系图较低层的谓词处。
8.根据权利要求3所述的方法,其中所述将逻辑规则翻译为结构化查询语言的查询语句的步骤包括以下步骤将析取范式化的逻辑规则中的每个析取式翻译为一条结构化查询语言的SELECT查询语句;以及用关键字UNION ALL来连接各个独立的结构化查询语言的SELECT查询语句,其中,基于预先确定的映射表,将逻辑规则中的谓词转换为关系数据库的表名称并且将逻辑规则中的变量转换为关系数据库的列名称。
9.根据权利要求8所述的方法,其中所述将析取范式化的逻辑规则中的每个析取式翻译为一条结构化查询语言的SELECT查询语句的步骤包括以下步骤通过使用对应于逻辑规则头部的参量所对应的列名称作为跟随关键字SELECT的属性,构造结构化查询语言的查询语句的SELECT部分;通过使用逻辑规则体部分中涉及的那些谓词所对应的表的名称作为跟随关键字FROM的表名称,构造结构化查询语言的查询语句的FROM部分;以及通过解析逻辑规则中各个谓词的变量之间的联系和表达关系操作的谓词,构造结构化查询语言的查询语句的WHERE部分。
10.根据权利要求8或9所述的方法,其中将递归的逻辑规则翻译为使用公共表表达式的结构化查询语言的查询语句,其中使用该递归逻辑规则中递归的谓词所对应的表名称作为所述公共表表达式中的表名称。
11.根据权利要求10所述的方法,其中在翻译过程中,通过在所述公共表表达式中增加用于记录在递归查询过程中用于递归变化的变量所经历路径的参量以及用于标记当前该变量的值是否曾经出现在所记录的路径中的参量,来避免在执行所翻译的结构化查询语言的递归查询语句时发生死循环。
12.根据权利要求8或9所述的方法,其中利用结构化查询语言中的临时表翻译相互依存的多条逻辑规则。
13.一种用于将基于概念模型的查询转换为结构化查询语言的查询语句的转换装置,包括转换器,用于将输入的基于概念模型的查询转换成逻辑规则;翻译器,用于将所述逻辑规则翻译为结构化查询语言的查询语句;检查器,用于对所述转换器输出的逻辑规则进行合法性检查;优化器,用于对经所述检查器检查为合法的逻辑规则进行优化。
14.根据权利要求13所述的转换装置,还包括映射表存储器,用于向所述转换器提供概念到谓词以及属性到变量的映射信息,并且所述转换器进一步包括用于对该输入的基于概念模型的查询进行约束规范化的装置;用于根据概念模型对规范化的查询语句执行概念模型关系推理的装置;用于基于所述映射表存储器中存储的映射表、执行概念模型中的概念到逻辑规则的谓词以及概念模型中的属性到逻辑规则的变量的转换的装置;以及用于对转换而成的查询语句执行范式标准化以得到逻辑规则的装置。
15.根据权利要求14所述的转换装置,其中所述用于对规范化的查询语句执行概念模型关系推理的装置包括用于对规范化的查询语句执行包含关系推理的装置,并且所述用于对转换而成的查询语句执行范式标准化以得到逻辑规则的装置包括用于对转换而成的查询语句执行析取范式标准化的装置。
16.根据权利要求13所述的转换装置,其中所述检查器包括语法检查器,用于检查范式标准化的逻辑规则是否符合所定义的逻辑规则描述语言的语法;以及语义检查器,用于检查逻辑规则是否在逻辑上是有效的。
17.根据权利要求16所述的转换装置,其中所述语法检查器还进行逻辑规则的安全性规则检查,其中包括谓词和变量的存在性检查、谓词和变量的连贯性检查,并且所述语义检查器还检查是否存在非线性递归的谓词、检查是否存在间接递归的谓词、检查是否存在非分层否定的情况。
18.根据权利要求13所述的转换装置,其中所述优化器进一步包括用于根据逻辑规则中谓词之间的依存关系建立依存关系图的装置,其中每个节点对应于逻辑规则中的一个谓词,并且用节点间的有向边表示各个谓词之间的依存关系;以及用于根据所述依存关系图对逻辑规则进行优化的装置。
19.根据权利要求18所述的转换装置,其中所述用于根据所述依存关系图对逻辑规则进行优化的装置包括用于根据所述依存关系图生成谓词的优化执行顺序的装置;以及用于将处于依存关系图较高层的谓词中的约束下放到处于依存关系图较低层的谓词处的装置。
20.根据权利要求15所述的转换装置,其中所述映射表存储器还用于向所述翻译器提供谓词到关系以及变量到实体的映射信息,并且所述翻译器包括用于将析取范式化的逻辑规则中的每个析取式翻译为一条结构化查询语言的SELECT查询语句的装置;用于用关键字UNION ALL来连接各个独立的结构化查询语言的SELECT查询语句的装置,其中,基于预先确定的映射表,将逻辑规则中的谓词转换为关系数据库的表名称并且将逻辑规则中的变量转换为关系数据库的列名称。
21.根据权利要求20所述的转换装置,其中所述用于将析取范式化的逻辑规则中的每个析取式翻译为一条结构化查询语言的SELECT查询语句的装置执行以下操作通过使用对应于逻辑规则头部的参量所对应的列名称来作为跟随关键字SELECT的属性,构造结构化查询语言的查询语句的SELECT部分;通过使用逻辑规则体部分中涉及的那些谓词所对应的表的名称作为跟随关键字FROM的表名称,构造结构化查询语言的查询语句的FROM部分;通过解析逻辑规则中各个谓词的变量之间的联系和表达关系操作的谓词,构造结构化查询语言的查询语句的WHERE部分。
22.根据权利要求20或21所述的转换装置,其中所述翻译器将递归的逻辑规则翻译为使用公共表表达式的结构化查询语言的查询语句,其中使用该递归逻辑规则中递归的谓词所对应的表名称作为所述公共表表达式中的表名称。
23.根据权利要求22所述的转换装置,其中所述翻译器在翻译过程中,通过在所述公共表表达式中增加用于记录在递归查询过程中用于递归变化的参量所经历路径的变量以及用于标记当前该变量的值是否曾经出现在所记录的路径中的参量,来避免在执行所翻译的结构化查询语言的递归查询语句时发生死循环。
24.根据权利要求20或21所述的转换装置,其中所述翻译器利用结构化查询语言中的临时表翻译相互依存的多条逻辑规则。
25.一种数据库查询系统,包括基于概念模型的查询语句编辑器;根据权利要求13-24中任何一个权利要求所述的用于将基于概念模型的查询转换为结构化查询语言的查询语句的转换装置;以及以关系数据库形式实现的领域知识库。
26.一种计算机程序产品,包含用于执行根据权利要求1至12中任何一个权利要求所述方法的计算机程序代码。
全文摘要
本发明提供一种将基于概念模型的查询转换为结构化查询语言的查询语句的方法,包括将输入的基于概念模型的查询转换成逻辑规则;对逻辑规则进行合法性检查;对检查合法的逻辑规则进行优化;根据优化结果,将逻辑规则翻译为结构化查询语言的查询语句。本发明还提供相应的转换引擎、数据库查询系统以及计算机程序产品。本发明支持利用更加具有描述性的查询语言查询存储在关系数据库中的数据,并且能够自动生成正确且有效的SQL查询语句,从而大大节省了人们在处理复杂数据查询时所需要付出的劳动。
文档编号G06F17/30GK101093493SQ200610093168
公开日2007年12月26日 申请日期2006年6月23日 优先权日2006年6月23日
发明者胡岗, 侯雪桥, 钱乾, 刘涛 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1