4.2.1 SPARQL查询语言
网上的RDF资源越来越多,对于RDF资源的有效检索便变得日益重要。SPARQL(Simple Protocol and RDF Query Language)是W3C的一个工作草案,它是一个RDF数据的查询语言。近两年,SPARQL已经发展为一门比较成熟的RDF查询语言,并且已经产生了好几个SPARQL查询引擎。
通过讲解一些SPARQL语句查询例子由浅入深地介绍SPARQL语句的查询规则,读者通过学习应该能够书写基本的SPARQL查询语句。
1.一个简单的SPARQL查询
数据集如下:
<http://sim.whu.edu.cn/rdf/zhangxiaotian><http://sim.whu.edu.cn/rdf/name>″zhangxiaotian″.
查询语句为:
SELECT?name
WHERE
{<http://sim.whu.edu.cn/rdf/zhangxiaotian><http://sim.whu.edu.cn/rdf/name>?name.}
该语句的查询结果为
RDF以三元组的方式存储数据,通常用主语、谓语、宾语来表示。在上面例子中http://sim.whu.edu.cn/rdf/zhangxiaotian为主语,http://sim.whu.edu.cn/rdf/name为谓语,″zhangxiaotian″为宾语。IRI、匿名结点(blank node)和RDF文字(RDF Literals)组成了RDF中的RDF表达式(RDF Term),有关RDF表达式的详细介绍见本书3.3.1节。主谓宾通常由这些RDF表达式组成,其中主语和宾语可以是RDF表达式中的任意一种,谓语只能是IRI。上例中主语和谓语均为IRI,宾语为RDF文字。
如果读者对SQL语句比较熟悉,便会发现SPARQL语法与SQL语法有一定的相似之处。例子中的查询语句由两部分组成,select部分限定查询结果返回的内容与格式,where部分为查询的限定条件。在SPARQL术语中,前面一部分被称为结果集(Result Form),简称R,后面一部分被称为图模式(Graph Pattern),简称GP。GP包括下列模式:基本图模式(Basic Graph Pattern),组图模式(Group Graph Pattern),可选图模式(Optional Graph Pattern),并图模式(Union Graph Pattern),RDF数据集图模式(RDF Dataset Graph Pattern),值约束(Value Constaraints)。R由“select”关键词和查询变量组成,其中查询变量可以是多个。查询变量在查询语句中具有全局性,查询语句中出现的某一查询变量代表相同的谓词语句成分。查询变量以“?”或“$”开头。例子中的变量为“?name”,该变量与GP中的“? name”相匹配。GP中的IRI,即例子中的<http://sim.whu.edu.cn/ rdf/zhangxiaotian>可以有三种写法:<zhangxiaotian>,zhangxiaotian和<http://sim.whu.edu.cn/rdf/zhangxiaotian>。
因为RDF库中存在与查询条件相匹配的语句,结果集返回了处在“?name”位置的RDF文字“zhangxiaotian”作为结果。
2.SPARQL中的RDF文字(RDF Literals)查询
数据集如下:
@prefix dt:<http://sim.whu.edu.cn/rdf/datatype#>.
@prefix ns:<http://sim.whu.edu.cn/rdf#>.
@prefix:<http://sim.whu.edu.cn/rdf#>
@prefix xsd:<http://www.w3.org/2001/XMLSchema#>.
:x ns:p″25″^^xsd:integer.
:y ns:p″data″^^dt:specialDatatype.
:z ns:p″information″@en.
查询语句1:
SELECT?v WHERE{?v?p 25}
查询结果1:
查询语句2:
SELECT?v WHERE{?v?p″abc″^^<http://sim.whu.edu. cn/rdf#specialDatatype>}
查询结果2:
查询语句3:
SELECT?x WHERE{?x?p″cat″}
查询结果3:
查询语句4:
SELECT?x WHERE{?x?p″cat″@en}
查询结果4:
(www.xing528.com)
查询的对象数据中有3个RDF三元组,4个查询语句均以RDF文字(RDF Literals)为宾语查询三元组。RDF中的IRI由namespace和localname组成。在RDF中,可以通过IRI在文档的其他位置引用此资源。与IRI不同,RDF文字一般不能被复用。RDF文字一般由数据类型和数据值组成。例子列举了几种RDF中常用到的数据类型。″25″^^xsd:integer表示一个值为25的整型数据。
查询1查找以整型数据25为宾语的语句,并返回该语句的主语。GP中存在整型数据时可以直接书写。查询2查找以用户自定义specialDatatype类型值为“abc”的数据有宾语的语句,并返回该语句的主语。如果在查询条件中存在着用户自定义数据类型时,应该在数据后注明用户声明类型。查询3返回结果为空,因为在RDF里面“cat”和“cat”@en不是等价的。查询4为查询3的正确写法,查询匹配到相应的语句,并返回语句的主语“http://sim.whu.edu.cn/ rdf#z>”。
3.SPARQL中的可选图模式(Optional Graph Pattern)
数据集如下:
@prefix foaf:<http://xmlns.com/foaf/0.1/>.
@prefix rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
_:a foaf:name″zhangxiaotian″.
_:a foaf:mbox<mailto:zhangxiaotian@example.com>.
_:b foaf:name″Andy liu″.
查询语句:
PREFIX foaf:<http://xmlns.com/foaf/0.1/>
SELECT?name?mbox
WHERE{?x foaf:name?name.
OPTIONAL{?x foaf:mbox?mbox}
}
查询结果:
可选图模式的语法格式为:GP1 OPTIONAL GP2(OPTIONAL GP3)?。例子中,“?x foaf:name?name”组成了GP1,“?x foaf: mbox?mbox”组成了GP2。要进行检索查询时,GP2并不会导致整个可选图模式的匹配失败,它只会修改GP1所产生的解。如例子所示:数据集中有两条记录符合GP1中的条件限定,结果集中有两条记录,GP2对GP1所产生的结果进行修改,将第一条记录进行修改,将<mailto:zhangxiaotian@example.com>添加到“mbox”项。可以有多个可选图模式(optional graph pattern),其书写方式为依次叠加,如:GP1OPTIONALGP2OPTIONALGP3OPTIONALGP4。OPTIONAL可以相互嵌套,如:GP1 OPTIONAL{GP2 OPTIONAL{GP3}}。
4.展示了SPARQL中的并图模式(Union Graph Pattern)
数据集如下:
@prefix dc10:<http://purl.org/dc/elements/1.0/>.
@prefix dc11:<http://purl.org/dc/elements/1.1/>.
_:a dc10:title″SPARQL Query Language Tutorial″.
_:a dc10:creator″Alice″.
_:b dc11:title″SPARQL Protocol Tutorial″.
_:b dc11:creator″Bob″.
_:c dc10:title″SPARQL″.
_:c dc11:title″SPARQL(updated)″.
查询语句:
PREFIX dc10:<http://purl.org/dc/elements/1.1/>
PREFIX dc11:<http://purl.org/dc/elements/1.0/>
查询结果:
并图模式的语法格式为:{GP1UNIONGP2UNION…}。并图模式是由两个或者更多的GP组成的集合。如果结果集R是与并图模式中的某一GP相匹配的结果,则R是并图模式的解。如果R与并图模式中的多个GP相匹配,则形成多个相同的解。如例子中所示,两个GP组成了一个并图模式的查询条件,第一条记录与第一个GP相匹配,第二条记录与第二个GP相匹配,故两条结果均被返回。
查询模式产生一个无序的解集,SPARQL提供解集序列修饰(Solution Sequence Modifier)用于进一步提炼查询结果,从而创建新的有序解集。SPARQL包括5种解集序列修饰:排序(Order)、投影(Projection)、非重复(Distinct)、结果上限(Limit)和结果偏移(Offset)。其中,顾名思义,排序是按排序表达式对结果集进行排序。Distinct关键字用来确保结果集中的结果具有唯一性。Limit关键字用于指定返回结果的数目,即输出的查询结果数不能超过指定的上限。若上限设为0则没有输出结果,上限值不能为负数。Offset关键字指定一个数值,它使结果从指定的数值之后开始产生,即控制查询结果的起始位置。
SPARQL提供了4种类型的查询结果形式:SELECT,CONSTRUCT,DESCRIBE和ASK。它们被称为查询结果形式(Query Result Form)。SELECT形式直接返回与查询变量绑定的值。CONSTRUCT形式可以根据查询结果创建并返回结果RDF图,这个结果图是以图模板(Graph Template)为式样创建的。图模板与图模式一样是三元组模式的集合,但是它们的作用完全不同。图模式用于描述查询意图,而图模板则描述CONSTRUCT要创建的RDF图的式样。DESCRIBE返回一个RDF图,其中包含了关于资源(Resources)的RDF数据。ASK用于测试一个图模式是否有解,其返回值是一个布尔值,如果有解则返回“true”,否则返回“false”。除此之外它不会返回任何可能的查询结果。
可以将SPARQL查询定义为一个四元组(GP,DS,SM,R),其中GP是一个图模式,DS是一个RDF数据集,SM是一组解修饰符,R是一个结果格式。一个查询的图模式被称为查询模式。其中数据集DS指示RDF数据资源;图模式GP表达查询意图;解修饰符SM指定结果集的约束条件;结果格式R指定查询结果的输出形式。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。