当前位置:文档之家› SPARQL查询实例解析

SPARQL查询实例解析

SPARQL查询实例解析
SPARQL查询实例解析

在SPARQL 之前,已经有不少研究人员致力于开发针对RDF 的查询语言,在这个网页https://www.doczj.com/doc/722356941.html,/2001/11/13-RDF-Query-Rules/ 上有一个比较完整的列表。SPARQL 是基于以前的RDF 查询语言(如rdfDB、RDQL 和SeRQL)发展而来的,拥有一些有价值的新特性,并且受到Jena 开发团队的鼎立支持。Jena 是HP 公司语义网研究小组开发的一套Java 工具包,用来支持人们进行语义网的相关研究和应用开发。SPARQL 的语法细节这里就不一一列举了,直接给出一个例子。总体来说,SPARQL 的语法和传统SQL 的语法还是有几分相似的,大家应该不会陌生。

BASE

PREFIX rdf:

PREFIX foaf:

# 这是一个以BASE 为根的相对IRI PREFIX user:

SELECT ?person ?name ?age

FROM

WHERE {

?person a foaf:Person ;

foaf:name ?name .

OPTIONAL { ?person user:age ?age } .

FILTER (REGEX(?name, “clickstone”))

}

ORDER BY ASC(?name)

LIMIT 10

OFFSET 10

简要的说明一下例子中出现的语法。

1. BASE,根IRI,其他以此为根的IRI 就可以写成相对形式了,见例子里面的注释。一旦定义了BASE,就可以在SPARQL 的任何地方进行使用了,例子中共用到了 2 处。

2. 使用# 进行注释。

3. PREFIX,IRI 前缀的缩写。

4. SELECT,查询关键字,和SQL 中的一个意思。

5. ?person ?name ?age,要查询的变量,使用? 标识变量,也可以使用$。变量间使用空白分隔(现在正在征集意见,正式标准中使用空白还是逗号分隔尚未最终确定)。

6. FROM,从何处查询数据。可以一次查询多个RDF 数据集,只需要使用FROM 逐一列出即可。

7. WHERE,过滤条件集合,和SQL 的WHERE 一个意思。

8. ?person a foaf:Person,具体的过滤条件,使用Turtle 语法。还记得“a”是什么意思吗?具体的介绍可以参看《RDF 实战》。

9. 例子中两个过滤条件的主语都是“?person”,因此,使用了简写的形式。如果主语不同,逐一列出检索条件即可。

10. OPTIONAL,可选过滤条件。比如有些?person 可能没有填写age 属性,如果不使用OPTIONAL,那么查询结果将不包含这些?person;使用了OPTIONAL 关键字,没有填写age 属性的?person,同样可以被查询到。

11. FILTER (REGEX(?name, “clickstone”)),明确化的过滤条件,类似于SQL 中的LIKE、=、> 等的左右。例子中的意思是说,返回的?name 变量中,必须包含“clickstone”。

12. ORDER BY,排序,可以指定多个排序,比如例子可以改为,ORDER BY ASC(?name) DESC(?age)。默认排序是ASC。

13. LIMIT 10,将返回结果限定在10 条,类似于SQL 中的SELECT TOP 10。

14. OFFSET 10,掠过前边的10 条,从第11 条开始返回。这个功能比SQL 强大,SQL 要自己写翻页。

其他的还有UNION、DISTINCT 等的使用,大家就自己看文档吧。但必须强调一点,SPARQL 的使用中和SQL 一个非常大的区别,需要大家注意:SELECT 子句中出现的变量,比如例子中的?person ?name ?age,在WHERE 子句中必须全部出现。为什么会这样呢?因为对于一个SPARQL 查询处理器来讲,它不具备类似于关系数据库中数据字典的东西以供参考,所以每一个SELECT 的变量,在WHERE 中必须指定一个用来匹配的triple。

相关主题
文本预览
相关文档 最新文档