学习SPARQL Part 1

尝些甜头:一些数据和查询

SPARQL是SPARQL协议和RDF查询语言(SPARQL Protocol and RDF Query Language)的递归缩写,其标准是由万维网联盟(W3C)制定的。

SPARQL的协议部分(SP)规定了客户端程序和SPARQL处理服务器之间交互的规则。

SPARQL的检索语言部分(RQL)被设计用来查询RDF数据,但是并不仅限于查询以多种格式的RDF中的任何一种格式进行存储的数据。

一些开源或商业软件都可以把关系型数据、XML、电子表格或其他格式的数据当作RDF数据来对待,因此你也可以用SPARQL去查询这些数据。

你不需要了解SP部分,便能学习RQL部分。


1.1将要检索的数据

以后将会着重介绍资源描述框架(Resource Description Framework,RDF),这里仅作简单提要:RDF并不是一个数据格式,而是一个数据模型,我们可以选择不同的语法来存储RDF数据。

在RDF数据模型中,采用三元组(triple)的形式表达事实。每一个三元组都由三部分构成,分别为:主语(subject)、谓词(predicate)和宾语(object),就像一个简单的英语句子一样。

你可以将三者分别看作是:被描述的资源的标识符,属性名和属性值。

主语(资源标识符) 谓词(属性名) 宾语(属性值)
Ryan homepage http://www.ryanzhang.info
Spock species half Vulcan half Human

下面的example11-1.ttl文件包含一些用Turtle语法编写的RDF数据,具体而言是一个以三元组形式存储联系人和联系方式的文件。在RDF中,对是可以于资源的一个属性赋与多个值的,例如文件中spock就有两个email地址。
# filename: example11-1.ttl

@prefix ex: <http://ryanzhang.info/ns/addressbook#>.

ex:ryan ex:homeTel "0511-88888888" .
ex:ryan ex:email "ryanzjlib@gmail.com" .

ex:violetta ex:homeTel "0510-55555555" .
ex:violetta ex:email "violettaChen@gmail.com" .

ex:spock ex:homeTel "09802-38567391" .
ex:spock ex:email "spock@Federation.gov" .
ex:spock ex:email "spock@Enterprise.ship".

像英语中句子一样,Turtle语法中三元组通常以"."结尾,在主语、谓词和宾语之间的空格不是必须的,但是为了可读性,推荐使用空格来分隔。Turtle语法中注释以#开头。

@prefix ex: <http://ryanzhang.info/ns/addressbook# >.也是一个三元组,它告诉我们在文件中前缀“ex”代表http://ryanzhang.info/ns/addressbook#这个URI。

在一个RDF三元组中,主语和谓词都必须属于一个特定的命名空间(namespace),这么做不仅能够防止将数据进行整合时与其他数据中类似的名称之间产生的混淆,还能通过这些URI来提供更多的信息。前缀可以帮助我们避免重复地录入这些URI。

URI是统一资源标识符( Uniform Resource Identifier)的缩写。网址,统一资源定位符(Uniform Resource Locato,URL)便是一种URI。定位符帮助我们定位资源,例如一个网页,或者一个pdf文档;而标识符帮助我们标识资源,例如spock在上面例子中的标识符为:http://ryanzhang.info/ns/addressbook#spock。

虽然URI可能与URL很像,但是URI的主要功能是为资源提供一个特有的名称,而不是帮助你的浏览器定位和打开这个资源。


1.2检索数据

在SPARQL查询语句中,我们依据三元组的模式,描述要查询的信息所需要满足的条件,与实际的RDF数据唯一的不同点是,我们可以使用变量。

example12-1.rq这个文件对刚才example11-1.ttl进行查询,希望找出ryan的邮件地址。

# filename: example12-1.rq

PREFIX ex: <http://ryanzhang.info/ns/addressbook# >

SELECT ?ryanemail

WHERE { ex:ryan ex:email ?ryanemail .  }

这个查询中只含有一个三元组模式,这个三元组模式是以主语ex:ryan,谓词ex:email,和宾语?ryanemail构成的,而?ryanemail是一个变量。任何满足这个模式的三元组的宾语都将存储到变量?ryanemail中并且作为果返回。

注:

  1. SPARQL中PREFIX,SELECT,WHERE这些关键词都不要求大写,小写亦可。
  2. SPARQL查询语句中,只有最后一个三元组模式的结尾可以省略“.”号。

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *