CN101950294A - 一种用于语义数据模型的描述性查询语言 - Google Patents
一种用于语义数据模型的描述性查询语言 Download PDFInfo
- Publication number
- CN101950294A CN101950294A CN2010102543678A CN201010254367A CN101950294A CN 101950294 A CN101950294 A CN 101950294A CN 2010102543678 A CN2010102543678 A CN 2010102543678A CN 201010254367 A CN201010254367 A CN 201010254367A CN 101950294 A CN101950294 A CN 101950294A
- Authority
- CN
- China
- Prior art keywords
- query
- item
- variable
- expression
- data model
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种用于语义数据模型的描述性查询语言,其针对INM类语义数据模型中对象能够自然地表达现实世界中实体之间的复杂关系和上下文语境信息,用包含关系层次结构和组合层次结构的对象结构集中地、与现实世界一一对应的方式来表示现实世界中的实体,且对象与对象之间互连形成图结构的这些特点,提供了一种描述性查询语言,该查询语言包括查询部分和结果构造部分,查询部分和结果构造部分完全分离设置,查询部分包括至少一个查询表达式,结果构造部分包括一个构造项,此外,本发明直接按模型的要素来表示查询,涵盖了数据库和逻辑程序设计中逻辑变量、内置的存在和不存在量词、显式的全称量词等有用特性。本发明达到了简单、实用、表达能力强的要求。
Description
技术领域
本发明涉及一种查询语言,尤其涉及一种用于语义数据模型的描述性查询语言,具体适用于能够将对象与现实世界的实体一一对应并且能非常直接、自然地表示组织与个体之间复杂关系和上下文语境信息的语义数据模型的查询语言。
背景技术
现实世界中实体与实体、实体与关系以及关系与关系之间存在各种复杂、动态的联系,尤其是组织机构与个体之间通过各种依赖关系互联,形成图状的结构。本发明所针对的语义数据模型可以非常直接、自然的表现这些特性。
本发明所针对的语义数据模型是指:能够自然地表达现实世界中实体之间的复杂关系和上下文语境信息,其最小逻辑结构包括两种层次结构:关系层次结构和组合层次结构,同时,能够用包含以上两种层次结构的对象结构集中地、与现实世界一一对应的方式来表示现实世界中的实体,且对象与对象之间互连并最终形成图结构的语义数据模型。本说明书中对该种语义数据模型暂称为INM类语义数据模型。
现有基于不同模型和针对不同逻辑结构数据的查询语言,如:OQL,GOQL,XPath,XQuery,GraphQL等虽然各有优势,却有各自不同的适用模型和条件。
OQL是专门为ODMG对象模型定制的查询语言,基本上采用SQL的风格。它除了涵盖SQL的所有功能还增加了与ODMG对象模型有关的特征,如:复杂对象,对象标识,路径表达式,多态和迟绑定。GOQL是针对扩展的对象模型的查询语言,它在OQL的基础上,增加了表达节点、边、路径和图对象之间的关系,并对它们进行操纵、查询和构造的功能。
XPath是一种表达式语言,它使用紧凑的非XML的语法,在XML的抽象、逻辑结构上进行操作,选取XML中的节点或节点集。XQuery起源于Quilt,建立在XPath的基础之上。它用FLWOR表达式来表示查询的框架,用XPath在文档中进行定位,用构造器将查询结果重构为用户所需的XML文档结构。
GraphQL是基于GraphDB的查询语言,在GraphQL中,最基本的操作单位是图模式,图模式由点和边连接的图结构及对图中的属性进行过滤的谓词两部分组成,每一个查询操纵一个或多个图聚集。GraphQL的语法基本采用XQuery的风格,保留了FLWR表达式。不同的是,在这些表达式中主要包含的是针对图的操作符。
由上可见,现有的查询语言基本上都采用SQL或XQuery的思路,只不过是根据各自模型的特点,改进或扩展了对应的操作符使之能够适应各自模型的特色,它们都不足以简洁、自然的方式体现INM类语义数据模型的特色,所以需要有专门针对INM类语义数据模型的查询语言。
发明内容
本发明的目的是克服现有技术中存在的不适用于INM类语义数据模型的查询、查询不简洁不自然的缺陷与问题,提供一种查询简洁自然且适用于INM类语义数据模型的描述性查询语言。
为实现以上目的,本发明的技术解决方案是:一种用于语义数据模型的描述性查询语言,该查询语言包括查询部分和结果构造部分;所述查询部分和结果构造部分分离设置,查询部分包括至少一个查询表达式,结果构造部分包括一个构造项;
所述查询表达式表示查询部分所得到的想要查找的值,所述构造项表示结果构造部分根据查询部分得到的值对结果的格式进行的定义。
所述查询表达式包括肯定查询表达式、否定查询表达式、全称量词查询表达式和比较查询表达式四种类型;
所述肯定查询表达式包含对象特征项和对象分类项;所述否定查询表达式语法上是肯定查询的否定形式,语义上根据变量的类型不同分为“否定判断”和“不存在”两种语义;所述全称量词查询表达式与逻辑程序设计中的全称量词的语义完全对等。
所述查询项包含关系特征项、元素项、子孙项、查询元组项、对象特征项和对象分类项六种类型,且该六种类型分别与INM类语义数据模型的基本要素在语法上保持一致;所述对象特征项和对象分类项可作为肯定查询表达式,所述关系特征项、元素项、子孙项和查询元组项递归组成对象特征项。
所述构造项包括聚合函数项、值项、特征项、构造元组项和上下文项五种类型,该五种类型之间存在递归组成的关系;
所述聚合函数项对变量的值按照常规的方式进行聚合计算;所述值项直接输出变量的值,且包括各种排序的功能;所述特征项中的值对于其说明信息默认进行分组操作;所述构造元组项表示多个聚合函数项、特征项或上下文项的并列关系;所述上下文项中的前后变量之间的语义上有依赖关系,其特殊形式表示的是一种上下文特征访问的查询。
所述查询表达式直接使用INM类语义数据模型的对象结构来表示查询,且允许逻辑变量出现在表达式的任意位置以匹配对象的任意部分;所述查询表达式的语法风格、语义与模型高度一致。
所述逻辑变量可位于查询语句中的任何位置,且不同位置的相同逻辑变量的值相同;
所述查询部分中的逻辑变量的作用为:得到想要查找的值,且根据其所在位置按照最大匹配原则绑定到INM类语义数据模型所支持的任何数据类型或成分上;
所述结果构造部分中的逻辑变量的作用为:生成查询的结果,且根据查询部分变量绑定到的值按照结果构造项定义的格式显示查询结果。
所述逻辑变量包括自由变量和受限变量两种类型,自由变量和受限变量的用途在于限制查询语句语义的合法性;
所述查询语句语义的合法性是指:一个合法的查询语句的查询表达式中的变量只能为自由变量或受限变量,且构造项中只有自由变量。
所述查询语言使用“/”、“//”和“[]”这三个符号来表示遍历图,用树状的语法结构表达图状的语义结构,同时,利用INM类语义数据模型中每一个对象的所有信息都集中地表示在一个对象中这个特点,将每一个用“//”表示的跳多层限定在一个对象内部跳以避免环的问题。
所述查询语言只需根据其名字进行查找,无需指明其在INM类语义数据模型中的类型或成分。
所述查询语言在语义方面将逻辑中的存在量词,即existential的语义作为一种内置语义;将逻辑中的否定,即negation的语义作为一种内置的不存在量词,即non-existential的语义处理。
与现有技术相比,本发明的有益效果为:
1、由于本发明一种用于语义数据模型的描述性查询语言中使用的查询部分和结果构造部分是完全分离的,而前述现有的查询语言虽然也都分为查询部分和结果构造部分,但其所用的这两个部分用不同的子句来表示,只是子句的表现形式存在差别,同时,这些查询语言的查询部分和结果构造部分是混合在一起的,查询部分和结果构造部分的混合导致查询的结构松散不清晰,不容易理解。本发明的基本框架虽然也由这两部分组成,但查询部分和结果构造部分是完全分离的,且不使用固定的子句分散地表示查询,而是用一个或多个查询表达式来表示查询部分得到想要查找的值,用一个构造项来表示结果构造部分根据查询部分得到的值对结果的格式进行定义,这种结构更清晰紧凑,表示更简单、更容易理解。因此本发明结构更清晰紧凑、更简单、容易理解。
2、由于本发明一种用于语义数据模型的描述性查询语言中的查询表达式直接使用INM类语义数据模型对象结构来表示查询并且允许变量出现在表达式的任意位置以匹配类或对象的任意部分,这在语法上保持了其所针对的INM类语义数据模型的建模语言直接自然、简洁紧凑的优点而且风格高度一致,语义上能最大限度的与建模语言相容,而大多数查询语言都不使用自身模型的要素来表示查询,即它们与其模型有不同的风格。因此本发明能够与其所针对的INM类语义数据模型更加匹配,表达的更贴切。
3、由于本发明一种用于语义数据模型的描述性查询语言所针对的INM类语义数据模型的逻辑结构都是有向图,而本发明不仅能够自然地表示和遍历这种图结构并提取其有意义的结果,又可以利用INM类语义数据模型中对象独特的语义特征解决“环”的问题,即利用INM类语义数据模型中每一个对象的所有信息都集中地表示在一个对象中这个特点,将每一个用“//”表示的跳多层限定在一个对象内部跳,避免了环的问题。因此本发明能够有效避免有向图搜索中环的问题。
4、由于本发明一种用于语义数据模型的描述性查询语言中的逻辑变量非常灵活,可以出现在查询语句的任何位置,而且同一个查询语句中相同的变量出现在不同的位置具有相同的值,其中,出现在查询部分的变量的作用是得到任何想要查找的值,该变量根据其所在位置按照最大匹配原则绑定到INM类语义数据模型所支持的任何数据类型或成分,而出现在结果构造部分的变量的作用是生成结果,该变量根据查询部分变量绑定到的值按照结果构造项定义的格式显示查询结果。因此本发明更实用灵活。
5、由于本发明一种用于语义数据模型的描述性查询语言所针对的INM类语义数据模型根据对象的特性,严格地区分了属性、关系、角色标识、上下文语境信息等,而本发明在查询时不需区分这些不同的要素,而只需要根据其名字就能查找,能够有效降低用户对模式熟悉程度的要求,使得本发明更加实用;此外,本发明在语义方面,将逻辑中存在(existential)量词的语义作为一种内置语义;将逻辑中否定(negation)的语义作为一种内置的不存在(non-existential)语义处理,这种设计可以确保那种在逻辑上需要用exit或not exist嵌套才能表示的查询,在本发明中能被用最精炼的形式表示,从而最大限度地简化了本发明的查询语法,这使得本发明在不削弱其表达能力的前提下能以更简明扼要的形式来表达查询。因此本发明不仅实用性较强,而且形式更加简明扼要。
具体实施方式
本说明书中所涉及的INM类语义数据模型是指:能够自然地表达现实世界中实体之间的复杂关系和上下文语境信息,其最小逻辑结构包括两种层次结构:关系层次结构和组合层次结构,同时,能够用包含以上两种层次结构的对象结构集中地、与现实世界一一对应的方式来表示现实世界中的实体,且对象与对象之间互连并最终形成图结构的语义数据模型。
INM类语义数据模型特别适合描述有复杂关系和上下文语境信息的数据之间的语义,它将现实世界中一个实体的所有信息包括其各种属性、关系、角色标识及由关系所产生的上下文语境信息都集中地表示在一个对象中,各个对象可以隶属于不同的类来表现其多刻面、动态演化特性。INM类语义数据模型对于对象的复杂信息用两种层次结构来组织。一种是用“->”表示的关系层次,一种是用“[]”表示的组合层次。
以下结合具体实施方式对本发明作进一步详细的说明
一种用于语义数据模型的描述性查询语言,该查询语言包括查询部分和结果构造部分;所述查询部分和结果构造部分分离设置,查询部分包括至少一个查询表达式,结果构造部分包括一个构造项;查询表达式表示查询部分所得到的想要查找的值,构造项表示结果构造部分根据查询部分得到的值对结果的格式进行的定义。
上述查询表达式包括肯定查询表达式、否定查询表达式、全称量词查询表达式和比较查询表达式四种类型;
其中,所述肯定查询表达式包含对象特征项和对象分类项;否定查询表达式语法上是肯定查询的否定形式,语义上根据变量的类型不同分为“否定判断”和“不存在”两种语义;全称量词查询表达式与逻辑程序设计中的全称量词的语义完全对等。
上述查询项包含关系特征项、元素项、子孙项、查询元组项、对象特征项和对象分类项六种类型,且该六种类型分别与INM类语义数据模型的基本要素在语法上保持一致;其中,对象特征项和对象分类项可作为肯定查询表达式,而关系特征项、元素项、子孙项和查询元组项递归组成对象特征项。
上述构造项包括聚合函数项、值项、特征项、构造元组项和上下文项五种类型,该五种类型之间存在递归组成的关系;其中,聚合函数项对变量的值按照常规的方式进行聚合计算;值项直接输出变量的值,且包括各种排序的功能;特征项中的值对于其说明信息默认进行分组操作;构造元组项表示多个聚合函数项、特征项或上下文项的并列关系;上下文项中的前后变量之间的语义上有依赖关系,其特殊形式表示的是一种上下文特征访问的查询。
上述查询表达式直接使用模型的对象结构来表示查询,且允许逻辑变量出现在表达式的任意位置以匹配对象的任意部分,且查询表达式的语法风格、语义与INM类语义数据模型高度一致。
上述逻辑变量可位于查询语句中的任何位置,且不同位置的相同逻辑变量的值相同;
上述查询部分中的逻辑变量的作用为:得到想要查找的值,且根据其所在位置按照最大匹配原则绑定到模型所支持的任何数据类型或成分上;
上述结果构造部分中的逻辑变量的作用为:生成查询的结果,且根据查询部分变量绑定到的值按照结果构造项定义的格式显示查询结果。
逻辑变量包括自由变量和受限变量两种类型,自由变量和受限变量的用途在于限制查询语句语义的合法性;查询语句语义的合法性是指:一个合法的查询语句的查询表达式中的变量只能为自由变量或受限变量,且构造项中只有自由变量。
上述查询语言使用了“/”、“//”和“[]”这三个符号来表示所针对的INM类语义数据模型的遍历图,用一种树状的语法结构表达了INM类语义数据模型图状的语义结构。同时,利用INM类语义数据模型中每一个对象的所有信息都集中地表示在一个对象中这个特点,将每一个跳多层(用“//”表示)限定在一个对象内部跳,避免了环的问题。
上述查询语言只需根据其名字进行查找,无需指明其在INM类语义数据模型中的类型或成分。
上述查询语言在语义方面将逻辑中的存在量词,即existential的语义作为一种内置语义,且将逻辑中的否定,即negation的语义作为一种内置的不存在量词,即non-existential的语义处理。
一、本发明的原理说明如下:
本发明的基本设计思路是将一个查询分为查询部分和结果构造部分,这两部分完全分离,无需组合嵌套,不使用固定的子句分散地表示查询,而是用一个或多个查询表达式来表示查询部分得到想要查找的值,用一个构造项来表示结果构造部分根据查询部分得到的值对结果的格式进行定义。这种架结构更清晰紧凑,表示更简单、容易理解。查询部分由一个或多个查询表达式组成,一个查询表达式由查询项及其组合形式构成,其中也包括否定和全称量词。查询表达式的任意位置都可以出现变量并根据变量所在的位置将其绑定到类、对象及其它们的任意部分来得到想要的信息。结果构造部分则根据查询部分的变量绑定对结果的格式进行定义。
本发明中,查询表达式直接使用对象结构来表示查询并且允许变量出现在表达式的任意位置以匹配类或对象的任意部分。这样语法上保持了INM类语义数据模型建模语言直接自然、简洁紧凑的优点而且风格高度一致,语义上能最大限度的与建模语言相容。
本发明中的逻辑变量非常灵活,它可以出现在查询语句的任何位置,而且同一个查询语句中相同的变量出现在不同的位置,它们有相同的值。出现在查询部分的变量的作用是得到任何想要查找的值;它根据其所在位置按照最大匹配原则绑定到INM类语义数据模型所支持的任何数据类型或成分;出现在结果构造部分的变量的作用是生成结果;它根据查询部分变量绑定到的值按照结果构造项定义的格式显示查询结果。这一特性使得本发明更实用灵活。
由于本发明所针对的INM类语义数据模型的逻辑结构是有向图,为了既能够自然地表示和遍历这种图结构并提取其有意义的结果,又可以利用INM类语义数据模型中对象独特的语义特征解决“环”的问题,本发明利用INM类语义数据模型中每一个对象的所有信息都集中地表示在一个对象中这个特点,将每一个跳多层(用“//”表示)限定在一个对象内部跳,避免了环的问题。
本发明所针对的INM类语义数据模型根据对象的特性,严格地区分了属性、关系、角色标识、上下文语境信息等,但本发明不区分这些不同的要素,只需根据其名字就能查找。这样,有效地降低了用户对模式熟悉程度的要求,这一特性使得本发明更实用。
在语义方面,本发明将逻辑中存在(existential)量词的语义作为一种内置语义;将逻辑中否定(negation)的语义作为一种内置的不存在(non-existential)语义处理。这样,逻辑上需要用exit或not exist嵌套才能表示的查询,在本发明中能用最精炼的形式表示,从而最大限度地简化了本发明的语法。这一特性使得本发明在不削弱其表达能力的前提下能以更简明扼要的形式来表达查询。
二、本发明涉及的名词说明如下:
(一)变量
本发明的特色之一是在查询部分根据变量所在的位置将其绑定到对象或者它们的任意部分得到想要的信息。从灵活方便的角度考虑,本发明中的变量是逻辑变量而非类型变量。一个变量可以出现在查询语句的任何位置,但是同一个查询语句中出现在不同位置的相同变量,它们具有相同的值。
变量以$开始,后面再跟一个字母字符串。变量可以绑定到对象、对象的各种属性、关系、角色标识、属性值、关系的目标对象、上下文语境信息或者其任意部分,而且变量一次匹配一个值。
(二)查询项
查询项是本发明涉及的查询语言的基本构成要素,它用于匹配对象及其它们的任意组成部分并且根据它进行变量的绑定,从而得到想要查找的信息。查询项主要有六种类型,在该六种查询项的任何位置都可以出现变量。但是对于查询项中的集合{T1,…,Tn}(n≥1),若n>1,则T1,…,Tn都不能是变量;否则,当T1是变量时,用T1表示;当T1不是变量时,用T1或{T1}表示。
1、关系特征项
关系特征项由一个关系名和一个可选的查询元组项构成,形如:RT
在此示例中,R是关系名,T是查询元组项。关系特征项用来表示找关系及其关系上的属性或关系。
例如:
教授[开始年份:$y,讲授课程:高级数据库,指导研究生:{杨堃,郑一}]
其中,“教授”是关系名R,“[开始年份:$y,讲授课程:高级数据库,指导研究生:{杨堃,郑一}]”是查询元组项T。
2、元素项
元素项由一个名字和其值构成,形如:N:*{V1,…,Vm}
在此示例中,N是属性名、角色标识或关系特征项,V1,…,Vm(m>0)是对应的值、关系特征项或对象特征项。“*”表示当N是关系特征项的时候,V1,…,Vm中不仅包含N中关系的目标对象还包括N中关系的子关系的目标对象。元素项用来表示找属性,关系或上下文语境信息,包括其任意组成部分。
例如:
开始年份:$y
其中,“开始年份”是属性名N,$y是绑定到值的变量V1。
指导研究生:{杨堃,郑一}
其中,“指导研究生”是关系特征项N,在这个关系特征项中只有关系名,可选的查询元组项省略;“杨堃”和“郑一”是对象特征项V1和V2,在V1和V2中只有对象名,可选的查询元组项也省略。
院领导:*$y
其中,“院领导”是关系特征项N,在这个关系特征项中只有关系名,可选的查询元组项省略;$y是绑定到关系“院领导”及其子关系的目标对象的变量V1。
职称:教授[开始年份:$y,讲授课程:高级数据库,指导研究生:{杨堃,郑一}
其中,“职称”是角色标识N;“教授[开始年份:$y,讲授课程:高级数据库,指导研究生:{杨堃,郑一}]”是关系特征项V1。
3、子孙项
子孙项由跳多层符号和元素项构成,形如://P
在此示例中,“//“是跳多层符号,P是元素项。子孙项表示P与其前面的项有父子或子孙关系。
例如:
//职称:教授[开始年份:$y,讲授课程:高级数据库,指导研究生:{杨堃,郑一}]
其中,“职称:教授[开始年份:$y,讲授课程:高级数据库,指导研究生:{杨堃,郑一}]”是元素项P。
4、查询元组项
查询元组项由元组符号[]和子孙项或元素项组成,形如:[P1,…,Pm]
在此示例中,P1,…,Pm(m≥0)是子孙项或元素项。当m=1且P1不是子孙项时,查询元组项可以简化地表示为/P1;当m=1且P1是子孙项时,查询元组项可以简化地表示为P1。查询元组项表示P1,…,Pm都与其前面的项有父子或子孙关系。
例如:
/上任年份:2000
其中,“上任年份:2000”是元素项P1,这种形式是m=1且P1不是子孙项的简化形式。
[//职称:教授[开始年份:$y,讲授课程:高级数据库,指导研究生:{杨堃,郑一}],//职务:$z/上任年份:2000]
其中,“//职称:教授[开始年份:$y,讲授课程:高级数据库,指导研究生:{杨堃,郑一}]”是子孙项P1,“//职务:$z/上任年份:2000”是子孙项P2。
5、对象特征项
对象特征项由一个对象名和一个可选的查询元组项构成,形如:OT
在此示例中,O是对象名,T是查询元组项。对象特征项用来表示找对象及对象的属性,关系或上下文语境信息。
例如:
$x[//职称:教授[开始年份:$y,讲授课程:高级数据库,指导研究生:{杨堃,郑一}],//职务:$z/上任年份:2000]
其中,$x是绑定到对象名的变量O,“[//职称:教授[开始年份:$y,讲授课程:
高级数据库,指导研究生:{杨堃,郑一}],//职务:$z/上任年份:2000]”是查询元组项T。
武汉大学//学院:$x//教授:$y[年龄:$z,工资:$w]
其中,“武汉大学”是对象名O,“//学院:$x//教授:$y[年龄:$z,工资:$w]”是查询元组项T。
6、对象分类项
对象分类项由类名和对象特征项组成,形如:{C1,…,Cn}O
在此示例中,C1,…,Cn(n>0)是类名,O是对象特征项。它表示C1,…,Cn是对象特征项O中的对象所属的分类。
例如:
{院长,教授}$x[//职称:教授[开始年份:$y,讲授课程:高级数据库,指导研究生:{杨堃,郑一}],//职务:$z/上任年份:2000],
其中,“院长”和“教授”分别是类名C1和C2;$x[//职称:教授[开始年份:$y,讲授课程:高级数据库,指导研究生:{杨堃,郑一}],//职务:$z/上任年份:2000]是对象特征项O。
在本发明中,上述六种查询项中不区分INM类语义数据模型中的属性、关系、角色标识、上下文语境信息等。只需要根据其名字就能查找,能够有效降低用户对模式熟悉程度的要求,使得本发明更加实用。
在本发明中,用“/”和“//”来表示在对象的层次结构中跳层。“/”出现在查询元组项中,它是查询元组项的一种特殊形式,它表示在组合层次中跳一层。“//”出现在子孙项中,它表示在组合层次或关系层次中跳一层或多层。换句话说,对于实例查询中的一个对象而言,以对象名为入口,“/”进入元组内的第一层,而“//”进入元组内组合层次或关系层次的第任意层;然后继续用“/”或“//”在元组内的组合层次中跳一层或多层或者跳出该对象进入另外一个对象的元组。这样,虽然INM类语义数据模型的逻辑结构是有向图,但是在一个查询中,每一段“/”或“//”都不能从一个对象直接跳向另外一个对象也不能直接跳向它自己,而需要经过一层或多层关系才能跳出该对象。即:本发明的语义限制了在图结构中跳层不会出现死循环。能够这样进行语义限制的原因是INM类语义数据模型中一个对象的所有信息包括其上下文语境信息都集中表示在该对象内部,从一个对象经过一定的关系到另外一个对象才有意义,否则就没有意义。例如:找武汉大学的校长的籍贯(query武汉大学//校长:$x/籍贯:$y construct$x/$y)是有意义的,但是找武汉大学的籍贯(query武汉大学//籍贯:$y construct$y)则没有意义。这样,既能够遍历有向图结构并提取其有意义的结果,又可以利用INM类语义数据模型中对象独特的语义特征解决“环”的问题。
(三)查询表达式
查询表达式由查询项及其组合形式构成,其中也包括否定和全称量词。它构成了查询语句的查询部分。查询表达式主要有四种类型:
1、肯定查询表达式
对象分类项和对象特征项是肯定查询表达式。
例如:
{院长,教授}$x[//职称:教授[开始年份:$y,讲授课程:高级数据库,指导研究生:{杨堃,郑一}],//职务:$z/上任年份:2000]
本例是对象分类项
武汉大学//学院:$x//教授:$y[年龄:$z,工资:$w]
本例是对象特征项2、否定查询表达式
若E是一个肯定查询表达式,则not E是否定查询表达式。
例如:
not研究生课程$x
其中,“研究生课程$x”是只包含对象分类项的肯定查询表达式E。
not软件工程国家重点实验室//开设课程:$x//授课者:$y
其中,“软件工程国家重点实验室//开设课程:$x//授课者:$y”是包含对象特征项的肯定查询表达式E。
3、全称量词查询表达式
若x1,…,xm(m≥1)是各不相同的变量,E1,…,En(n≥1)是肯定查询表达式,E是查询表达式,则(foreach x1,…,xmin E1,…,En)(E)是全称量词查询表达式,其中x1,…,xm是量词化变量,E1,…,En,中除了x1,…,xm以外的变量是非量词化变量。
例如:
(foreach$z in$x//讲授课程:$z)($y//选修课程:$z)
其中,变量$z是量词化变量x1,“$x//讲授课程:$z”是包含对象特征项的肯定查询表达式E1,“$y//选修课程:$z”是包含对象特征项的肯定查询表达式E。
4、比较查询表达式
比较查询表达式以常规的形式出现。
例如:$y<1998
值得注意的是,从语言的简洁性和实用性角度考虑,本发明中不显示地表示存在量词,但是从语义上讲,它是某些查询的一种默认形式,将在后面对其进行详细的解释。
(四)构造项
INM类语义数据模型中对象的结构丰富,我们用查询项及其组合形式所构成的查询表达式来表示查询部分并且将变量绑定到想要查找的信息上;查询结果部分也可以构造复杂的结构。本发明根据查询部分的变量绑定结果用构造项对结果的格式进行定义。构造项主要有五种类型:
1、聚合函数项
若op是聚合函数名sum、avg、min、max或count,X是变量,则op(X)是聚合函数项。
它表示按照聚合函数提供的功能求变量X对应的值。
例如:
count($y),avg($z),max($z),min($z),sum($w)
其中count,avg,max,min,sum分别是聚集函数名,$y,$z,$w分别是变量。它们表示的含义分别是输出$y所绑定值的个数,$z所绑定值的平均值,最大值,最小值,$w所绑定值的总和。
2、值项
若T是常量或变量,T1,…,Tn是变量或聚合函数项,可选的t1,…,tn是排序修饰符包括“desc”或“asc”(n≥0),则T order by T1 t1,…,Tn tn是值项。当T是常量的时候,不能出现order by T1 t1,…,Tn tn;当ti省略,Ti默认的排序修饰符是“asc”。
它表示按照order by所指定的顺序(如果存在的话)显示T的值。
例如:
$x order by avg($w),count($t)desc
其中,$x是变量,avg($w)和count($t)分别是聚合函数项T1和T2,t1省略表示T1默认的排序修饰符是“asc”,t2是“desc”。表示的含义是:$x所绑定的值按照$w所绑定值的平均值升序输出,当$w的平均值相等的时候,$x的值按照$t所绑定值的个数的降序输出。
3、特征项
若T是常量或变量,T’是聚合函数项,值项或者上下文项。则T:T’是特征项。
它用来表示T是T’的说明信息,T’是T的值,并对T’的值分组输出。
例如:
教授的人数:count($y)
其中,“教授的人数”是常量T,count($y)是聚合函数项T’。它表示的含义是原样输出常量“教授的人数”,并且输出$y所绑定值的个数。
武汉大学的学院:$x[教授的人数:count($y),平均年龄:avg($z),最大年龄:max($z),最小年龄:min($z),工资总和:sum($w)]
其中,“武汉大学的学院”是常量T,“$x[教授的人数:count($y),平均年龄:avg($z),最大年龄:max($z),最小年龄:min($z),工资总和:sum($w)]”是上下文项T’。
4、构造元组项
若T1,…,Tn(n≥0)是聚合函数项,特征项或上下文项,则[T1,…,Tn]是构造元组项。
它表示T1,…,Tn是并列关系。
例如:
[教授的人数:count($y),平均年龄:avg($z),最大年龄:max($z),最小年龄:min($z),工资总和:sum($w)]
其中,“教授的人数:count($y)”,“平均年龄:avg($z)”,“最大年龄:max($z)”,“最小年龄:min($z)”,“工资总和:sum($w)]”分别是特征项T1-T5,这四者之间是并列关系。
5、上下文项
若c1,…,cm(m≥0)是类名,T是值项,T’是构造元组项并且当m>0时,T’=[T1,…,Tn]中的n=0,则(c1,…,cm)T T’是上下文项。在T’中,当n=1时,也可以简化地表示为T/T1;当n=0时,表示为(c1,…,cm)T[]。
上下文项中的(c1,…,cm)T[]表示输出T属于类c1,…,cm的信息。
T[T1,…,Tn]表示T分别与T1,…,Tn中第一层变量有关系,并且T1,…,Tn中第一层变量根据T分组。
例如:
(教授)$x[]
其中,“教授”是类名c1,$x是只含有变量的值项T,“[]”是n=0时的构造元组项T’。表示的含义是输出$x的教授信息。
$x[教授的人数:count($y),平均年龄:avg($z),最大年龄:max($z),最小年龄:min($z),工资总和:sum($w)]
其中,$x是只含有变量的值项T,[教授的人数:count($y),平均年龄:avg($z),最大年龄:max($z),最小年龄:min($z),工资总和:sum($w)]是构造元组项T’。
三、本发明所使用的查询语句的具体实施例:
(一)查询语句由查询表达式和构造项两部分组成,形如:
query E1,…,Enconstruct C
其中E1,…,En(n≥1)是查询表达式,C是可选的构造项。当C不存在时,关键字construct也必须省略。
它表明一个查询分为两个部分:查询部分使用了变量并根据变量所在的位置将其绑定到INM类语义数据模型的对象及其任意部分来得到想要找的信息;构造部分根据变量绑定的值对结果的格式进行定义。省略C表明该查询不定义结果的格式,只是判断查询部分是真(true)还是假(false),并输出该值。
本发明通过变量的类型来限制查询语句语义上的合法性,具体而言:
设query E1,…,En construct C是一个查询,E1,…,En中的自由变量和受限变量分别是:
出现在肯定查询表达式中的变量或者作为非量词化变量出现在全称量词查询表达式中的变量是自由变量。
如果E是自由变量或E是INM类语义数据模型所允许的常量,x=E或E=x是E1,…,En中的比较查询表达式,则x是自由变量。
只出现在否定查询表达式中或作为量词化变量出现在全称量词查询表达式中的变量是受限变量。
如果E1,…,En中的每一个变量要么是自由变量要么是受限变量并且C中只出现自由变量,则该查询是合法的。反之,如果E1,…,En中存在既不是自由变量又不是受限变量的变量或者C中出现E1,…,En中不存在的变量或者C中出现E1,…,En中的受限变量,则该查询是不合法的。
以下查询是不合法的查询示例:
query$x=$y
因为变量$x和$y既不是自由变量也不是受限变量
query$x=2001,$x>$y
因为变量$y既不是自由变量也不是受限变量
query not武汉大学.软件工程国家重点实验室//开设课程:$x//授课者:$y
construct$x
因为构造项中的变量$x是受限变量
query教授$x//指导研究生:$y,(foreach$z in$x//讲授课程:$z)($y//选修课程:$z)construct$x[指导研究生:$y,选修课程:$z]
因为构造项中的变量$z是受限变量
query计算机学院/开设课程:$x construct$y
因为构造项中的变量$y没有出现在查询表达式中
(二)下面按照查询表达式的类型,分类举例说明合法的查询语句的查找过程。
它们以下面的基于INM类语义数据模型的数据库示例为基础:
大学 武汉大学[
教学部门->{学院:{计算机学院,法学院},系:包装设计系},
科研部门->{实验室->国家重点实验室:{软件工程国家重点实验室,
遥感国家重点实验室}}]
学院 计算机学院[
院领导->{院长:何祥,副院长:张丰},
教师->教授:{何祥,章义},
学生->{研究生->{硕士生:{杨堃,郑一},
博士生:{钟力,屈峰}}},
开设课程:{高级数据库,操作系统}]
研究生课程 高级数据库[
开课单位:计算机学院,
授课者:何祥,
选课者:{郑一[分数:90],杨堃[分数:80]}]
本科生课程 操作系统[
开课单位:计算机学院,
授课者:何祥]
国家重点实验室 软件工程国家重点实验室[
领导->常务副主任:张丰,
教师->教授:{何祥,张丰},
学生->研究生->博士生:郑一]
教授 章义[
年龄:45,
工资:6000,
工作单位:计算机学院[职称:教授[开始年份:1998]]]
{院长,教授}何祥[
年龄:55,
工资:8000,
工作单位:{计算机学院[
职务:院长[上任年份:2000],
职称:教授[开始年份:1995,
讲授课程:高级数据库,
指导研究生:{杨堃,郑一,钟力,屈峰}]],
软件工程国家重点实验室[职称:教授[开始年份:1995]}]
{副院长,教授,常务副主任}张丰[
年龄:40
工作单位:{计算机学院[职务:副院长[上任年份:2010]],
软件工程国家重点实验室[职称:教授[开始年份:2000,
指导研究生:郑一],
职务:常务副主任]}]
硕士生 杨堃[
就读于:计算机学院[身份:硕士生[学号:0701,导师:何祥,
选修课程:高级数据库[分数:80]]]]
{硕士生,博士生}郑一[
就读于:{计算机学院[身份:硕士生[学号:0702,导师:何祥,
选修课程:高级数据库[分数:90]]],
软件工程国家重点实验室[身份:博士生[学号:0901,
导师:张丰]]}]
博士生 钟力[
就读于:计算机学院[身份:博士生[学号:0601,导师:何祥]]]
博士生 屈峰[
就读于:计算机学院[身份:博士生[学号:0901,导师:何祥]]]
上述数据库中的对象“武汉大学”有两个关系层次(用->表示),它们分别用来描述武汉大学与各个机构(如“教学部门”和“科研部门”)之间的关系。语义上表示“武汉大学”的教学部门细分为学院和系,它有两个学院:“计算机学院”和“法学院”,一个系:“包装设计系”。“武汉大学”的实验室细分为国家重点实验室,它有两个国家重点实验室:“软件工程国家重点实验室”和“遥感国家重点实验室”。
对象“何祥”主要由组合层次(用[]表示)构成,语义上表示他既是院长又是教授。他的年龄是55岁,工资是8000。作为院长,他工作在“武汉大学计算机学院”职务是“院长”,上任年份是2000年;作为教授,他工作在两个单位分别是“武汉大学计算机学院”和“软件工程国家重点实验室”并且职称是“教授”;作为“武汉大学计算机学院”的教授,开始年份是1995年,讲授课程“高级数据库”;指导4名研究生分别是:杨堃、郑一、钟力和屈峰。作为“软件工程国家重点实验室”的教授,开始年份是1995年。
以下是针对上述数据库示例的合法查询示例:
(三)第一种类型:肯定查询
1、找既是院长又是教授的一类人,他们的职称是教授,他们在1998年之前开始做教授,作为教授他们讲授了高级数据库课程并且指导了研究生杨堃和郑一,同时还要找这些人上任年份是2005年的职务。显示这些人作为教授的所有信息。
query{院长,教授}$x[//职称:教授[开始年份:$y,讲授课程:高级数据库,指导研究生:{杨堃,郑一}],//职务:$z/上任年份:2000],$y<1998construct(教授)$x[]
这个例子的查询部分由两个查询表达式组成,第一个是肯定查询表达式,第二个是比较查询表达式;结果构造部分是一个上下文项。第一个肯定查询表达式是对象分类项(参见查询项中对该例子的递归解释),第二个比较查询表达式的含义是第一个查询表达式中变量$y的值小于1998。结果构造部分的上下文项含义参见结果构造项中对该例子的解释。
参照(二)所述数据库示例:
首先,根据对象分类项中的“{院长,教授}$x”找到所有同时隶属于“院长”和“教授”这两个类的所有对象,满足条件的是名为“何祥”的对象。因此,$x绑定到对象名“何祥”。然后,根据对象特征项“$x[//职称:教授[开始年份:$y,讲授课程:高级数据库,指导研究生:{杨堃,郑一}],//职务:$z/上任年份:2000]”在对象“何祥”中跳组合层次。具体而言,第一个子孙项中“//职称:教授”中的“//”跳过“工作单位:计算机学院”和“工作单位:软件工程国家重点实验室”这两个关系分别匹配这两个关系下的“职称:教授”。同时,第二个子孙项中“//职务:$z”中的“//”跳过关系“工作单位:计算机学院”匹配其下的“职务:院长”,因此,变量$z绑定到角色名“院长”。对于第一个子孙项中“//职称:教授”后面的元组项“[开始年份:$y,讲授课程:高级数据库,指导研究生:{杨堃,郑一}]”中的3个元素项,他们分别匹配“工作单位:计算机学院”关系下“职称:教授”下的“开始年份:1995”,“讲授课程:高级数据库”,“指导研究生:{杨堃,郑一,钟力,屈峰}”。因此,变量$y绑定到属性值1995。同时,过滤掉“工作单位:软件工程国家重点实验室”关系下的“职称:教授”,因为其下的数据与上述3个元素项不匹配。对于第二个子孙项中“//职务:$z”后面的元组项“/上任年份:2000”,它匹配“工作单位:计算机学院”关系下“职务:院长”下的“上任年份:2000”。因此,第一个查询表达式变量绑定的结果为:
Θ1={$x/何祥,$y/1995,$z/院长}
对于第二个查询表达式“$y<1998”,因为$y值是“1995”,所以使得它为true。因此,最终满足查询部分的变量绑定为Θ1。
结果构造部分的含义是输出$x作为教授的信息。因此,查询的结果为:
何祥[工作单位:{计算机学院[职称:教授[开始年份:1995,讲授课程:高级数据库,指导研究生:{杨堃,郑一,钟力,屈}]],软件工程国家重点实验室[职称:教授[开始年份:1995]]}]
2、找武大各个学院的教授的年龄及其工资。显示各个学院及其教授的人数,教授的平均年龄,最大年龄,最小年龄,工资总和。
query武汉大学//学院:$x//教授:$y[年龄:$z,工资:$w]construct武汉大学的学院:$x[教授的人数:count($y),平均年龄:avg($z),最大年龄:max($z),最小年龄:min($z),工资总和:sum($w)]
这个例子的查询部分是一个对象特征项(参见查询项中对该例子的解释),结果构造部分是一个特征项(参见结果构造项中对该例子的解释)。
参照(二)所述数据库示例:
首先,根据对象特征项中的对象名“武汉大学”找到名为“武汉大学”的对象。然后,根据元组项“//学院:$x//教授:$y[年龄:$z,工资:$w]”,在对象“武汉大学”中跳关系层次。具体而言,“//学院:$x”中的“//”跳过关系“教学部门”匹配其下的“学院:{计算机学院,法学院}”,因此变量$x分别绑定到“计算机学院”和“法学院”。然后分别在对象“计算机学院”和“法学院”下匹配后面的元组项“//教授:$y[年龄:$z,工资:$w]”。对于“计算机学院”这个对象,“//教授:$y”中的“//”跳过关系“教师”匹配其下的“教授:{何祥,章义}”,因此变量$y分别绑定到“何祥”和“章义”。对于“法学院”这个对象,因为数据库中该对象不存在因此后面的“//教授:$y”没有满足的数据存在,所以过滤掉变量$x绑定到的值“法学院”。对于元组项“[年龄:$z,工资:$w]”中的2个元素项,它们分别匹配对象“何祥”中的“年龄:55”和“工资:8000”。因此,变量$z和$w分别绑定到数据值“55”和“8000”;它们也分别匹配对象“章义”中的“年龄:45”和“工资:6000”。因此,变量$z和$w分别绑定到数据值“45”和“6000”。因此,查询部分变量绑定的结果为:
Θ1={$x/计算机学院,$y/何祥,$z/55,$w/8000}
Θ2={$x/计算机学院,$y/章义,$z/45,$w/6000}
结果构造部分的含义是原样输出常量“武汉大学的学院”,对变量$x绑定的值进行分组,对于每一组$x,原样输出常量“教授的人数”在其后输出变量$y所绑定值的个数;原样输出常量“平均年龄”在其后输出变量$z所绑定值的平均值;原样输出常量“最大年龄”在其后输出变量$z所绑定值的最大值;原样输出常量“最小年龄”在其后输出变量$z所绑定值的平均值最小值;原样输出常量“工资总和”在其后输出变量$w所绑定值的总和。因此,查询的结果为:
武汉大学的学院:计算机学院[教授的人数:2,平均年龄:50,最大年龄:55,最小年龄:45,工资总和:14000]
3、找武大各个学院的院领导兼教授和博士生,并且找各个教授的年龄。显示武大的各个学院及其院领导,学院的输出按教授的平均年龄升序输出,如果平均年龄相同按博士生的个数降序输出。
query学院$x[院领导:*$y,//教授:$y/年龄:$w,//博士生:$t]
construct$x order by avg($w),count($t)desc/院领导:$y
这个例子的查询部分是一个对象分类项,其中“学院”是对象名,“$x[院领导:*$y,//教授:$y/年龄:$w,//博士生:$t]”是对象特征项。结果构造部分是一个上下文项,其中“$x order by avg($w),count($t)desc”是值项,“/院领导:$y”是构造元组项。
参照(二)所述数据库示例:
首先,根据对象分类项中的“学院$x”找到隶属于“学院”的所有对象,满足条件的是名为“计算机学院”的对象。因此,变量$x绑定到对象名“计算机学院”。然后,根据对象特项“$x[院领导:*$y,//教授:$y/年龄:$w,//博士生:$t]”,在对象“计算机学院”中跳组合层次和关系层次。具体而言,第一个元素项“院领导:*$y”匹配“计算机学院”下的“院领导->{院长:何祥,副院长:张丰}”。因为“:”后面的“*”表示取得院领导的子关系“院长”和“副院长”的目标对象,所以变量$y绑定到“何祥”和“张丰”。第二个子孙项“//教授:$y/年龄:$w”中的“//”跳过“计算机学院”中的关系“教师”匹配“教授:{何祥,章义}”,因此所以变量$y绑定到“何祥”和“章义”。第三个子孙项“//博士生:$t””中的“//”跳过“计算机学院”中的关系“学生->研究生”匹配“博士生:{钟力,屈峰}”,因此变量$t绑定到“钟力”和“屈峰”。对于第二个子孙项“//教授:$y/年龄:$w”中的元组项“/年龄:$w”,它分别匹配“何祥”和“张丰”这2个对象的“年龄:55”和“年龄:40”,因此变量$w绑定到属性值“55”和“40”。因此,查询部分变量绑定的结果为:
Θ1={$x/计算机学院,$y/何祥,$w/55,$t/钟力}
Θ2={$x/计算机学院,$y/何祥,$w/55,$t/屈峰}
Θ3={$x/计算机学院,$y/张丰,$w/40,$t/钟力}
Θ4={$x/计算机学院,$y/张丰,$w/40,$t/屈峰}
结果构造部分的含义是:输出变量$x所绑定的值,它的输出顺序按照其下变量$w所绑定值的平均值升序输出,当$w的平均值相等的时候,$x的值按照$t所绑定值的个数的降序输出。对于变量$x所绑定每一个不同的值,在其下原样输出“院领导”,在其后输出变量$y所绑定的值。因此,查询的结果为:
计算机学院[院领导:{何祥,张丰}]
(四)第二种类型:否定查询
1、找武汉大学计算机学院所开设的所有非研究生课程,并且显示这些课程。
query计算机学院/开设课程:$x,not研究生课程$x construct$x
这个例子的查询部分由两个查询表达式组成,第一个是肯定查询表达式,它是对象特征项;第二个是否定查询表达式,其中肯定部分是对象分类项;结果构造部分是值项。
参照(二)所述数据库示例:
对于第一个肯定查询表达式,首先,根据对象特征项中的对象名“计算机学院”找到名为“计算机学院”的对象。然后,根据元组项“/开设课程:$x”在对象“计算机学院”中匹配“开设课程:{高级数据库,操作系统}”,因此变量$x绑定到“高级数据库”和“操作系统”。即:第一个查询表达式变量绑定的结果为:
Θ1={$x/高级数据库}
Θ2={$x/操作系统}
对于第二个否定查询表达式中的变量$x,因为它已经出现在第一个肯定查询表达式中,所以直接取其已经绑定得到的值,判断“not研究生课程高级数据库”和“not研究生课程操作系统”是否为真。可知第二个为真,所以Θ2是最终满足查询的绑定。
结果构造部分的含义是:输出变量$x所绑定的值。因此,查询的结果为:
操作系统
值得注意的是在本查询示例中,因为第二个否定查询表达式中的变量$x已经出现在第一个肯定查询表达式中,所以它是自由变,因此该查询语句语义上是“否定判断”而非“不存在”含义。
2、找软件工程国家重点实验室是否不开设任何课程;否则,所开设的课程是否没有任何授课者。
query not软件工程国家重点实验室//开设课程:$x//授课者:$y
这个例子的查询部分是一个否定查询表达式,其中肯定部分是一个对象特征项;结果构造部分省略表示只需要判断查询部分是真(true)还是假(false)。
对于查询表达式中的肯定部分“软件工程国家重点实验室//开设课程:$x//授课者:$y”,首先根据对象特征项中的对象名“软件工程国家重点实验室”找到名为“软件工程国家重点实验室”的对象。然后,根据子孙项“//开设课程:$x//授课者:$y”在对象“计算机学院”中进行匹配。由于该对象中不存在关系“开设课程”所以找不到符合肯定部分的变量的绑定。变量$x和$y都是受限变量,所以否定查询表达式语义上表示“不存在”。因此,查询的结果是:
true
值得注意的是本查询示例中,因为变量$x和$y只出现在否定查询表达式中,所以它们是受限变量,因此语义上是“不存在”,而非“否定判断”含义。
本发明的新颖特性之一是将逻辑中的否定,即negation的语义作为一种内置的不存在量词,即non-existential的语义处理。这种设计可以确保那种在逻辑上需要not exist嵌套才能表示的查询,在本发明中能被用最精炼的形式表示,从而最大限度地简化了本发明的查询语法,这使得本发明在不削弱其表达能力的前提下能以更简明扼要的形式来表达查询。
例如,上述示例如果不作为一种内置不存在语义处理,形式上需要表示为:
query not(exist$x in软件工程国家重点实验室/开设课程:$x)((exist$y in$x/授课者:$y)(true))
这种表示对于用户来说是不实用的,较难掌握。
(五)第三种类型:全称量词查询
1、找满足如下的条件的教授及其所指导的研究生:教授所指导的研究生中至少有一个人选修了该教授所讲授的所有课程。显示这些满足条件的教授及其所指导的研究生。
query教授$x//指导研究生:$y,(foreach$z in$x//讲授课程:$z)($y//选修课程:$z)construct$x/指导研究生:$y
这个例子的查询部分由一个肯定查询表达式和一个全称量词查询表达式组成,结构构造部分是一个值项。
对于第一个肯定查询表达式,根据对象分类项中的“教授$x”找到隶属于“教授”的所有对象,满足条件的是名为“章义”,“何祥”,“张丰”的对象。因此,变量
$x分别绑定到对象名“章义”,“何祥”,“张丰”。然后,根据子孙项“//指导研究生:$y”,
分别在以上三个对象中跳组合层次,可知“章义”下无法找到与“指导研究生:$y”
匹配的数据;“何祥”下匹配到“指导研究生:{杨堃,郑一,钟力,屈峰}”;“张丰”下
匹配到“指导研究生:郑一”。所以,变量$x所绑定到的值要过滤掉“章义”。因此,
第一个查询表达式变量绑定的结果为:
Θ1={$x/何祥,$y/杨堃}
Θ2={$x/何祥,$y/郑一}
Θ3={$x/何祥,$y/钟力}
Θ4={$x/何祥,$y/屈峰}
Θ5={$x/张丰,$y/郑一}
将第一个查询表达式的每一个自由变量绑定的结果应用到第二个全称量词查询
表达式中,可以得到五个只含有受限变量$z的全称量词查询表达式:
(foreach $z in何祥//讲授课程:$z)(杨堃//选修课程:$z) (1)
(foreach $z in何祥//讲授课程:$z)(郑一//选修课程:$z) (2)
(foreach $z in何祥//讲授课程:$z)(钟力//选修课程:$z) (3)
(foreach $z in何祥//讲授课程:$z)(屈峰//选修课程:$z) (4)
(foreach $z in张丰//讲授课程:$z)(郑一//选修课程:$z) (5)
对于(1)中in后的对象特征项“何祥//讲授课程:$z”,首先根据对象名“何祥”找到名为“何祥”的对象。然后,根据子孙项“//讲授课程:$z”在对象“何祥”中跳组合层次匹配到“讲授课程:高级数据库”,所以变量$z绑定到“高级数据库”。对于(1)中第二个括号内的对象特征项“杨堃//选修课程:$z”,变量$z已经出现在in后的对象特征项中,所以直接取其已经绑定得到的值“高级数据库”,即得到“杨堃//选修课程:高级数据库”。对于对象特征项“杨堃//选修课程:高级数据库”,首先根据对象名“杨堃”找到名为“杨堃”的对象。然后,根据子孙项“//选修课程:高级数据库”在对象“杨堃”中跳组合层次匹配到“选修课程:高级数据库[分数:80]”。所以Θ1是满足整个查询的绑定。对于(2)——(5),过程类似。最终只有Θ1和Θ2满足整个查询语句的要求。
结果构造部分的含义是:输出变量$x所绑定的值,在其下原样输出常量“指导研究生”,然后输出$x下$y所绑定到的值,并且$y的值按$x的值分组。因此,查询的结果是:
何祥[指导研究生:{杨堃,郑一}]
值得注意的是本发明所提出的查询语言显示地表示了全称量词,但是不显示地表示存在量词。因为查询语言将逻辑中的存在,即existential的语义作为一种内置语义。这种设计可以确保那种在逻辑上需要用exist嵌套才能表示的查询,在本发明中能被用最精炼的形式表示,这样也可以在不削弱语义的前提下简化查询语言的语法表示。
例如:
query计算机学院/开设课程:$x/授课者:$y
因为自由变量$x和$y没有出现在构造项中,所以语义上它们是存在量词化的,其含义是:是否存在$x和$y,计算机学院开设课程是$x,且$x的授课者是$y。即:计算机学院是否至少开设了一门课程,如果是,所开设的课程是否至少有一名授课者?
如果不作为一种内置存在量词化语义处理,逻辑上需要表示为:
query(exist$x in计算机学院/开设课程:$x)((exist$y in$x/授课者:$y)(true))
这种表示对于用户来说也是不实用的,较难掌握。
以上所述仅为本发明的较佳实施方式,本发明的保护范围并不以上述实施方式为限,但凡本领域普通技术人员根据本发明所揭示内容所作的等效修饰或变化,皆应纳入权利要求书中记载的保护范围内。
Claims (10)
1.一种用于语义数据模型的描述性查询语言,该查询语言包括查询部分和结果构造部分,其特征在于:所述查询部分和结果构造部分分离设置,查询部分包括至少一个查询表达式,结果构造部分包括一个构造项;
所述查询表达式表示查询部分所得到的想要查找的值,所述构造项表示结果构造部分根据查询部分得到的值对结果的格式进行的定义。
2.根据权利要求1所述的一种用于语义数据模型的描述性查询语言,其特征在于:所述查询表达式包括肯定查询表达式、否定查询表达式、全称量词查询表达式和比较查询表达式四种类型;
所述肯定查询表达式包含对象特征项和对象分类项;所述否定查询表达式语法上是肯定查询的否定形式,语义上根据变量的类型不同分为“否定判断”和“不存在”两种语义;所述全称量词查询表达式与逻辑程序设计中的全称量词的语义完全对等。
3.根据权利要求2所述的一种用于语义数据模型的描述性查询语言,其特征在于:所述查询项包含关系特征项、元素项、子孙项、查询元组项、对象特征项和对象分类项六种类型,且该六种类型分别与模型的基本要素在语法上保持一致;
所述对象特征项和对象分类项可作为肯定查询表达式,所述关系特征项、元素项、子孙项和查询元组项递归组成对象特征项。
4.根据权利要求1、2或3所述的一种用于语义数据模型的描述性查询语言,其特征在于:所述构造项包括聚合函数项、值项、特征项、构造元组项和上下文项五种类型,该五种类型之间存在递归组成的关系;
所述聚合函数项对变量的值按照常规的方式进行聚合计算;所述值项直接输出变量的值,且包括各种排序的功能;所述特征项中的值对于其说明信息默认进行分组操作;所述构造元组项表示多个聚合函数项、特征项或上下文项的并列关系;所述上下文项中的前后变量之间的语义上有依赖关系,其特殊形式表示的是一种上下文特征访问的查询。
5.根据权利要求4所述的一种用于语义数据模型的描述性查询语言,其特征在于:所述查询表达式直接使用语义数据模型的对象结构来表示查询,且允许逻辑变量出现在表达式的任意位置以匹配对象的任意部分;所述查询表达式的语法风格、语义与模型高度一致。
6.根据权利要求5所述的一种用于语义数据模型的描述性查询语言,其特征在于:所述逻辑变量可位于查询语句中的任何位置,且不同位置的相同逻辑变量的值相同;
所述查询部分中的逻辑变量的作用为:得到想要查找的值,且根据其所在位置按照最大匹配原则绑定到模型所支持的任何数据类型或成分上;
所述结果构造部分中的逻辑变量的作用为:生成查询的结果,且根据查询部分变量绑定到的值按照结果构造项定义的格式显示查询结果。
7.根据权利要求6所述的一种用于语义数据模型的描述性查询语言,其特征在于:所述逻辑变量包括自由变量和受限变量两种类型,自由变量和受限变量的用途在于限制查询语句语义的合法性;
所述查询语句语义的合法性是指:一个合法的查询语句的查询表达式中的变量只能为自由变量或受限变量,且构造项中只有自由变量。
8.根据权利要求7所述的一种用于语义数据模型的描述性查询语言,其特征在于:所述查询语言使用“/”、“//”和“[]”这三个符号来表示遍历图,用树状的语法结构表达图状的语义结构,同时,利用语义数据模型中每一个对象的所有信息都集中地表示在一个对象中这个特点,将每一个用“//”表示的跳多层限定在一个对象内部跳以避免环的问题。
9.根据权利要求8所述的一种用于语义数据模型的描述性查询语言,其特征在于:所述查询语言只需根据其名字进行查找,无需指明其在语义数据模型中的类型或成分。
10.根据权利要求9所述的一种用于语义数据模型的描述性查询语言,其特征在于:所述查询语言在语义方面将逻辑中的存在量词,即existential的语义作为一种内置语义;将逻辑中的否定,即negation的语义作为一种内置的不存在量词,即non-existential的语义处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010102543678A CN101950294A (zh) | 2010-08-16 | 2010-08-16 | 一种用于语义数据模型的描述性查询语言 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010102543678A CN101950294A (zh) | 2010-08-16 | 2010-08-16 | 一种用于语义数据模型的描述性查询语言 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101950294A true CN101950294A (zh) | 2011-01-19 |
Family
ID=43453796
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010102543678A Pending CN101950294A (zh) | 2010-08-16 | 2010-08-16 | 一种用于语义数据模型的描述性查询语言 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101950294A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103177038A (zh) * | 2011-12-26 | 2013-06-26 | 昆山麦克斯泰科技有限公司 | 一种垂直搜索引擎中的查询表达式 |
CN104809146A (zh) * | 2014-01-28 | 2015-07-29 | 远升科技股份有限公司 | 用于确定对象在对象序列中的索引的系统和方法 |
CN107817996A (zh) * | 2017-10-13 | 2018-03-20 | 贵州白山云科技有限公司 | 一种GraphQL请求的优化方法及系统 |
CN107943481A (zh) * | 2017-05-23 | 2018-04-20 | 清华大学 | 基于多模型的c语言程序代码规范构造方法 |
WO2019071511A1 (en) * | 2017-10-12 | 2019-04-18 | Hewlett-Packard Development Company, L.P. | SYNTAX OF DIAGRAM |
CN109801037A (zh) * | 2019-01-25 | 2019-05-24 | 苏州达家迎信息技术有限公司 | 一种成员的归类方法、装置、设备和存储介质 |
CN112597133A (zh) * | 2020-12-29 | 2021-04-02 | 深圳复临科技有限公司 | 一种百人研发团队项目管理场景的数据应用管理系统 |
-
2010
- 2010-08-16 CN CN2010102543678A patent/CN101950294A/zh active Pending
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103177038A (zh) * | 2011-12-26 | 2013-06-26 | 昆山麦克斯泰科技有限公司 | 一种垂直搜索引擎中的查询表达式 |
CN104809146A (zh) * | 2014-01-28 | 2015-07-29 | 远升科技股份有限公司 | 用于确定对象在对象序列中的索引的系统和方法 |
CN104809146B (zh) * | 2014-01-28 | 2018-07-17 | 远升科技股份有限公司 | 用于确定对象在对象序列中的索引的系统和方法 |
CN107943481A (zh) * | 2017-05-23 | 2018-04-20 | 清华大学 | 基于多模型的c语言程序代码规范构造方法 |
WO2019071511A1 (en) * | 2017-10-12 | 2019-04-18 | Hewlett-Packard Development Company, L.P. | SYNTAX OF DIAGRAM |
CN107817996A (zh) * | 2017-10-13 | 2018-03-20 | 贵州白山云科技有限公司 | 一种GraphQL请求的优化方法及系统 |
CN109801037A (zh) * | 2019-01-25 | 2019-05-24 | 苏州达家迎信息技术有限公司 | 一种成员的归类方法、装置、设备和存储介质 |
CN112597133A (zh) * | 2020-12-29 | 2021-04-02 | 深圳复临科技有限公司 | 一种百人研发团队项目管理场景的数据应用管理系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101950294A (zh) | 一种用于语义数据模型的描述性查询语言 | |
Doerr | Semantic problems of thesaurus mapping | |
CN103646032B (zh) | 一种基于本体和受限自然语言处理的数据库查询方法 | |
De Virgilio et al. | Semantic web information management: a model-based perspective | |
Alalwan et al. | Generating OWL ontology for database integration | |
Hodkinson et al. | Finite conformal hypergraph covers and Gaifman cliques in finite structures | |
Balaban et al. | A Comparison of Textual Modeling Languages: OCL, Alloy, FOML. | |
Yang et al. | Mapping relational databases into ontologies through a graph-based formal model | |
Barzdins et al. | Graphical query language as SPARQL frontend | |
Marchetti et al. | Formalizing knowledge by ontologies: Owl and kif | |
Lim et al. | Unifying data and domain knowledge using virtual views | |
Cohen-Boulakia et al. | Selecting biological data sources and tools with xpr, a path language for rdf | |
Mihajlovic | Score Region Algebra: A flexible framework for structured information retrieval | |
Porto et al. | The ROSA project: leveraging e-learning to a semantic layer | |
Abel et al. | Ontologies and their use for geological knowledge formalization | |
Chevalier et al. | Wikibridge: A semantic wiki for archaeological applications | |
El-Mahgary et al. | OVI-3: A NoSQL visual query system supporting efficient anti-joins | |
Georgieva | Ontology-based information representation | |
Lukichev | Defining a subset of OCL for expressing SWRL rules | |
Brunner et al. | Organizing thematic, geographic, and temporal knowledge in a well-founded navigation space: Logical and algorithmic foundations for efgt nets | |
Alec et al. | A combined approach for ontology enrichment from textual and open data | |
Ledvinka | Leveraging Semantic Web Technologies in Domain-specific Information Systems | |
Mishra et al. | Design and Evaluation of an IR-Benchmark for SPARQL Fulltext Queries | |
Salehpour | High-performance Query Processing over Knowledge Graphs | |
Faulstich et al. | Implementing a linguistic query language for historic texts |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20110119 |