SPARQL 1.1概述
SPARQL 1.1 Overview
W3C Recommendation 21 March 2013
当前版本:http://www.w3.org/TR/2013/REC-sparql11-overview-20130321/
当前版本中文翻译:http://www.chinaw3c.org/REC-sparql11-overview-20130321-cn.html
最新版本:http://www.w3.org/TR/sparql11-overview/
上一版本:http://www.w3.org/TR/2012/PR-sparql11-overview-20121108/
编辑:W3C SPARQL工作组, 请参阅 Acknowledgements <[email protected]>
翻译:胡春明(W3C/Beihang)
对本文档的内容更正,请参阅勘误表(Errrata)。
本文是W3C推荐标准的志愿者翻译,可能包含错误,W3C网站的英文版本是该文档的官方版本。该文档的其他语种翻译,请参阅本文翻译(translations)。
Copyright © 2013 W3C® (MIT, ERCIM, Keio, Beihang), All Rights Reserved. W3C liability, trademark and document use rules apply.
摘要(Abstract)
本文是SPARQL 1.1的概述,介绍了在Web上或在一个RDF存储(RDF store)中查询和操作RDF图相关的一组W3C推荐标准。
本文状态(Status of this Document)
文档系列
本文是W3C的SPARQL工作组发布的SPARQL 1.1的系列推荐标准(Recommendation)之一,整个SPARQL 1.1文档系列由11份推荐标准构成。
1. SPARQL 1.1概述(本文)
2. SPARQL 1.1查询语言(SPARQL 1.1 Query Language)
3. SPARQL 1.1更新(SPARQL 1.1 Update)
4. SPARQL 1.1服务描述(SPARQL 1.1 Service Description)
5. SPARQL 1.1联邦查询(SPARQL 1.1 Federated Query)
6. SPARQL 1.1查询结果的JSON格式(SPARQL 1.1 Query Results JSON Format)
7. SPARQL 1.1查询结果的CSV和TSV格式(SPARQL 1.1 Query Results CSV and TSV Formats)
8. SPARQL查询结果的XML格式(第二版)(SPARQL Query Results XML Format, Second Edition)
9. SPARQL 1.1蕴含(SPARQL 1.1 Entailment Regimes)
10. SPARQL 1.1协议(Protocol)
11. SPARQL 1.1图存储HTTP协议 (SPARQL 1.1 Graph Store HTTP Protocol)
和上一版本相比没有实质性的变化
本文档和上一版本相比没有实质性变化。具体修改请参阅修改记录(change log),以及文档差别。
意见和建议
请将您的意见和建议发送到 [email protected] (查看邮件归档)。尽管SPARQL工作组对这一文档的编写工作已经完成,意见和建议将被记入勘误表(errata)的形式,并可能在之后的文档修订过程中修订。您可以通过 [email protected] (查看邮件归档)参与讨论。
W3C批准
本文已经过W3C会员、软件开发者、W3C其他小组及相关方审阅,并经W3C Director批准后正式发布为W3C推荐标准(W3C Recommedation)。这份文档是一份稳定的文档,可以作为参考材料在其他文档中引用。W3C在编写本文档过程中的角色主要是鼓励各方积极参与以及推动标准广泛实施。这对增强Web的功能性和互操作性具有积极的推动作用。
专利政策
本文档由遵循2004年5月发布的W3C专利政策(W3C Patent Policy)的W3C工作组编写而成。W3C在其网站维护了一份对公众开放的列表,以说明该小组产出文档中所包含的专利相关事宜,同时该页面也介绍了应该如何按照W3C专利政策披露一份含有必要主张的专利。任何对于该文档中所涉及的含有必要主张的专利有所了解的个人应按照W3C专利政策第六章的相关内容披露相关信息。
目录(Table of Contents)
1 概述
1.1 举例
3 SPARQL 1.1支持的不同查询结果格式(XML, JSON, CSV, TSV)
10 致谢
11 参考文献
1 概述
SPARQL 1.1是一组W3C推荐标准,提供了对Web上或RDF存储(RDF Store)中的RDF图内容进行查询和处理的语言和协议。它由下面的推荐标准组成:
- SPARQL 1.1查询语言:一个面向RDF的查询语言。
- SPARQL 1.1查询结果的JSON格式、SPARQL 1.1查询结果的CSV和TSV格式:在标准的SPARQL查询结果XML格式[SPARQL-XML-Result]之外,SPARQL 1.1还提供了三种常见的格式来表达查询结果,即JSON、CSV(逗号分割值)及TSV(制表符分割的值)。
- SPARQL 1.1联邦查询:该规范定义了一个SPARQL 1.1查询语言扩展,用来在分布的多个SPARQL端点(endpoints)上执行SPARQL查询。
- SPARQL 1.1蕴含(Entailment Regimes):该规范定义了RDF Schema、OWL或RIF等蕴含规则下的SPARQL查询语义。
- SPARQL 1.1更新语言:一个面向RDF图的更新语言。
- SPARQL 1.1的RDF协议:该协议定义了一种方法,执行任意的SPARQL查询,并将结果更新到一个SPARQL服务。
- SPARQL 1.1服务描述:该规范定义了一个标准方法,用来发现SPARQL服务,并提供了描述SPARQL服务所需的词汇表。
- SPARQL 1.1图存储HTTP协议:相对于完整的SPARQL协议,该文档定义了一个最小子集,基于常用的HTTP协议的操作,管理RDF图的内容。
- SPARQL 1.1测试用例:这是一组测试,帮助理解规范,并检测一个系统是否符合SPARQL 1.1规范。
1.1 举例
这里,我们将给出一个SPARQL的语言、协议及相关推荐标准的小例子。
某个RDF图通过URL 'http://example.org/alice' 发布在Web上,它包含了关于 Alice 及她的联系人的信息。使用 Turtle [Turtle] 语法描述如下:
Graph: http://example.org/alice
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
<http://example.org/alice#me> a foaf:Person .
<http://example.org/alice#me> foaf:name "Alice" .
<http://example.org/alice#me> foaf:mbox <mailto:[email protected]> .
<http://example.org/alice#me> foaf:knows <http://example.org/bob#me> .
<http://example.org/bob#me> foaf:knows <http://example.org/alice#me> .
<http://example.org/bob#me> foaf:name "Bob" .
<http://example.org/alice#me> foaf:knows <http://example.org/charlie#me> .
<http://example.org/charlie#me> foaf:knows <http://example.org/alice#me> .
<http://example.org/charlie#me> foaf:name "Charlie" .
<http://example.org/alice#me> foaf:knows <http://example.org/snoopy> .
<http://example.org/snoopy> foaf:name "Snoopy"@en .
通过SPARQL 1.1可以对这个RDF图进行查询,将他们导入到RDF存储,并通过不同方式对其进行处理。
2 SPARQL 1.1查询语言
假定上述图数据已经加载到一个SPARQL服务(如一个可以响应SPARQL查询的HTTP服务端点),可以使用SPARQL 1.1查询语言表达各类查询,如图模式匹配或其他更复杂的查询。例如,可以通过SPARQL的SELECT来查询所有的人名及他们的朋友个数:
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name (COUNT(?friend) AS ?count)
WHERE {
?person foaf:name ?name .
?person foaf:knows ?friend .
} GROUP BY ?person ?name
和2008年发布的SPARQL 1.0规范[SPARQL-Query]类似,复杂查询包括联表查询(union)、可选查询部分(optional query parts)、过滤器(filters),SPARQL 1.1新引入的查询功能包括值的聚合(aggregation)、路径表达(path expressions)、嵌套查询(nested queries)等。除了SELECT查询之外,SPARQL还支持ASK查询(返回值是yes/no的查询)、CONSTRUCT查询(根据查询结果构造RDF图)等。SPARQL 1.1引入的新查询功能在ASK和CONSTRUCT查询中都可用。
和SPARQL 1.0相比,SPARQL 1.1增加了一组新的查询功能,包括子查询(subqueries),赋值(value assignment),路径表达式(path expressions)和聚合查询(aggregates),如上面例子中用到的 COUNT 查询。
SPARQL 1.1查询语言详细描述了SPARQL 1.1的查询语法,及其各种查询的例子。
3 SPARQL 1.1支持的不同查询结果格式(XML,JSON,CSV,TSV)
在SPARQL语言中,SELECT查询的返回结果包含一组从变量到RDF项(RDF terms)的映射,通常以表格的方式表达。例如,第二节中的查询返回结果如下:
?name | ?count |
"Alice" | 3 |
"Bob" | 1 |
"Charlie" | 1 |
为了以机器可读的方式交换这些查询结果,SPARQL支持了四中常见的交换格式,即可扩展标记语言(Extensible Markup Language, XML)、JavaScript对象标记(JavaScript Object Notation, JSON)、逗号分隔值(Comma Separated Values, CSV)及制表符分隔值(Tab Separated Values, TSV) 。这些查询结果的格式在三份不同的W3C推荐标准中定义:
- SPARQL查询结果的XML格式(特别注意:SPARQL 1.1工作组对这份文档做了修订,详见勘误表)
- SPARQL 1.1查询结果的JSON格式
- SPARQL 1.1查询结果的CSV及TSV格式
这些文档描述了RDF项如何编码为特定数据格式的方法和实现细节。
分别采用上述四种不同的查询结果格式,上述查询结果如下:
XML:
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="name"/>
<variable name="count"/>
</head>
<results>
<result>
<binding name="name">
<literal>Alice</literal>
</binding>
<binding name="count">
<literal datatype="http://www.w3.org/2001/XMLSchema#integer">3</literal>
</binding>
</result>
<result>
<binding name="name">
<literal>Bob</literal>
</binding>
<binding name="count">
<literal datatype="http://www.w3.org/2001/XMLSchema#integer">1</literal>
</binding>
</result>
<result>
<binding name="name">
<literal>Charlie</literal>
</binding>
<binding name="count">
<literal datatype="http://www.w3.org/2001/XMLSchema#integer">1</literal>
</binding>
</result>
</results>
</sparql>
JSON:
{
"head": {
"vars": [ "name" , "count" ]
} ,
"results": {
"bindings": [
{
"name": { "type": "literal" , "value": "Alice" } ,
"count": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "3" }
} ,
{
"name": { "type": "literal" , "value": "Bob" } ,
"count": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "1" }
} ,
{
"name": { "type": "literal" , "value": "Charlie" } ,
"count": { "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "type": "typed-literal" , "value": "1" }
}
]
}
}
CSV:
name,count
Alice,3
Bob,1
Charlie,1
TSV:
?name<TAB>?count
"Alice"<TAB>3
"Bob"<TAB>1
"Charlie"<TAB>1
4 SPARQL 1.1联邦查询
SPARQL 1.1联邦查询(Federated Query)描述了一个基本SPARQL 1.1查询语言的扩展,能够显示的将指定的查询代理给另一个SPARQL端点。
如在上面的例子中,如果要知道 Alice 的朋友中有谁和 DBpedia 的资源描述符 IRI <http://depedia.org/resource/Snoopy> 具有相同的名字。完成这一查询,需要将获得朋友名字的查询发送给一个地址为 http://dbpedia.org/sparql 的SPARQL端点,通过 SERVICE 关键字找出具有名字 <http://depedia.org/resource/Snoopy> 的朋友,具体查询如下:
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name
WHERE {
<http://example.org/alice#me> foaf:knows [ foaf:name ?name ] .
SERVICE <http://dbpedia.org/sparql> { <http://dbpedia.org/resource/Snoopy> foaf:name ?name }
}
这个查询得到的结果是:
?name |
"Snoopy"@en |
其中,查询的模式的第一部分位于查询的 WHERE 部分,这部分仍然匹配的是本地的 SPARQL 服务,而后续对模式的处理,则通过 SERVICE 关键字代理给指定的远程 SPARQL 服务。
5 SPARQL 1.1蕴含(Entailment Regimes)
SPARQL可以与RDF大纲(RDF Schema)或OWL axioms等本体信息一起使用。例如,假定在 Alice 的数据之外,还有基于 RDF Schema [RDF-Schema] 和 OWL [OWL2-Overview] 描述的本体信息 FOAF 词汇表。
FOAF 本体(节选部分):
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
...
foaf:name rdfs:subPropertyOf rdfs:label .
...
如果查询所有人的标签(labels),可以用下面的查询语句:
SELECT ?label
WHERE { ?person rdfs:label ?label }
如果运行这个查询的 SPARQL 引擎不支持任何特定的蕴含(entailment regimes),将不会返回任何结果。但一个支持 RDF Schema 的查询引擎将会返回
?label |
"Alice" |
"Bob" |
"Charlie" |
"Snoopy"@en |
因为 foaf:name 是 rdfs:label 的子属性。
SPARQL 1.1蕴含规范定义了在不同的蕴含规则下,如何对这种查询做出响应,定义的蕴含规则包括 RDF、RDF Schema、D-Entailment [RDF-MT]、OWL [OWL2-Overview],及RIF [RIF-Overview]。
6 SPARQL 1.1更新语言
SPARQL 1.1更新(Update)规法定义了 SPARQL 1.1更新请求的语法和语义,并提供了不同用途的例子。更新操作可以由一组顺序执行的序列组成,对图存储(Graph Store)中的一组图进行更新,在图存储中进行RDF图的更新(update)、创建(create)和删除操作。
例如,下面的请求向 SPARQL服务的默认图(default graph)插入一条新数据,描述 Alice 的一个名叫 Dorothy 的新朋友,同时删除所有具有英语语言标签的 Alice 的朋友的名字。
PREFIX foaf: <http://xmlns.com/foaf/0.1/> .
INSERT DATA { <http://www.example.org/alice#me> foaf:knows [ foaf:name "Dorothy" ]. } ;
DELETE { ?person foaf:name ?mbox }
WHERE { <http://www.example.org/alice#me> foaf:knows ?person .
?person foaf:name ?name FILTER ( lang(?name) = "EN" ) .}
其中,第二个操作显示,插入和删除操作依赖于对图存储的查询结果;WHERE 部分的相关语法在 SPARQL 1.1查询语言中定义。
7 SPARQL 1.1协议
面向RDF查询的SPARQL 1.1协议定义了如何通过HTTP协议,将一个SPARQL 1.1查询及更新请求发送给一个SPARQL服务。该文档也定义了如何将这些请求映射为 HTTP GET 和 POST 操作,以及对应这些请求的 HTTP响应。
例如,如果向地址为 http://www.example.org/sparql/ 的SPARQL查询服务发送第三章中的查询请求,根据SPARQL 1.1协议,这个查询可以封装在 HTTP GET 请求中(其中查询串使用了 URI编码):
GET /sparql/?query=PREFIX%20foaf%3A%20%3Chttp%3A%2F%2Fxmlns.com%2Ffoaf%2F0.1%2F%3E%0ASELECT%20%3Fname%20%28COUNT%28%3Ffriend%29%20AS%20%3Fcount%29%0AWHERE%20%7B%20%0A%20%20%20%20%3Fperson%20foaf%3Aname%20%3Fname%20.%20%0A%20%20%20%20%3Fperson%20foaf%3Aknows%20%3Ffriend%20.%20%0A%7D%20GROUP%20BY%20%3Fperson%20%3Fname HTTP/1.1
Host: www.example.org
User-agent: my-sparql-client/0.1
在协议标准中,定义了关于响应的具体编码,以及其他查询和更新操作的具体编码格式。同时,协议标准还定义了支持的其他 HTTP 方法。
8 SPARQL 1.1服务描述
SPARQL 1.1服务描述文档给出了一种发现基于 SPARQL 1.1协议 的 SPARQL 服务的方法,以及一个描述SPARQL服务的词汇表。
在这份文档中,当一个 SPARQL 的服务端点(Service Endpoint) 收到不包含任何查询或更新请求的HTTP GET请求时,应当返回一个关于该服务的 RDF描述。例如,当如下的HTTP请求
GET /sparql/ HTTP/1.1
Host: www.example.org
发送给地址为 http://www.example.org/sparql/ 的SPARQL服务时,应当返回一个基于服务发现词汇表(Service Description Vocabulary)的RDF描述。这些描述可以提供关于该服务端点的默认数据集、所支持的SPARQL查询的功能特性、支持的蕴含种类等信息。
9 SPARQL 1.1图存储的HTTP协议
对许多处理RDF数据的应用程序和服务来说,并不需要完整的 SPARQL 1.1更新(SPARQL 1.1 Update)语言。因此,SPARQL 1.1图存储 HTTP协议提供了一种基于 HTTP 的操作实现管理一组图数据的部分操作的方法。
例如,在第四章中的更新操作例子的前半部分,需要向RDF图中简单插入一个三元组。在支持SPARQL 1.1图存储HTTP协议的SPARQL服务上,这个插入操作可以直接通过执行一个 HTTP POST 将其载荷(payload)作为RDF元组直接插入RDF图,而无需发送一个完整的 SPARQL 1.1 更新请求。
POST /rdf-graphs/service?graph=http%3A%2F%2Fwww.example.org%2Falice HTTP/1.1
Host: example.org
Content-Type: text/turtle
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
<http://www.example.org/alice#me> foaf:knows [ foaf:name "Dorothy" ] .
在 SPARQL 1.1图存储HTTP协议中,还定义了其他用于修改目的的直接HTTP修改RDF图(如用 HTTP PUT 替换整个图,用 HTTP DELETE 删除一个RDF图等)或获取RDF图(如通过HTTP GET)等。可以将这一组协议看作 结合SPARQL 1.1查询 和SPARQL 1.1更新 的完整SPARQL 1.1 协议的一个轻量级替代版。
10 致谢
以下W3C SPARQL工作组成员参与了 SPARQL 1.1 规范的制订工作:
- Carlos Buil Aranda, Universidad Politécnica de Madrid
- Olivier Corby, Institut National de Recherche en Informatique et en Automatique (INRIA)
- Souripriya Das, Oracle Corporation
- Lee Feigenbaum, Cambridge Semantics
- Paul Gearon, Revelytix Inc
- Birte Glimm, Universität Ulm
- Steve Harris, Garlik Ltd
- Sandro Hawke, W3C
- Ivan Herman, W3C
- Nicholas Humfrey, BBC
- Nico Michaelis, Dreamlab Technologies AG
- Chimezie Ogbuji, Invited Expert
- Matthew Perry, Oracle Corporation
- Alexandre Passant, DERI, National University of Ireland, Galway
- Axel Polleres, Siemens AG
- Eric Prud'hommeaux, W3C
- Andy Seaborne, The Apache Software Foundation
- Gregory Todd Williams, Rensselaer Polytechnic Institute
11 参考文献
SPARQL-XML-Result
SPARQL Query Results XML Format (Second Edition), D. Beckett, J. Broekstra, Editors, W3C Recommendation, 21 March 2013, http://www.w3.org/TR/2013/REC-rdf-sparql-XMLres-20130321. Latest version available at http://www.w3.org/TR/rdf-sparql-XMLres. (See http://www.w3.org/TR/rdf-sparql-XMLres/.)
RDF-Schema
RDF Vocabulary Description Language 1.0: RDF Schema , ed. Dan Brickley and R.V. Guha, W3C Recommendation 10 February 2004 (See http://www.w3.org/TR/rdf-schema/.)
RDF-MT
RDF Semantics , ed. Pat Hayes, W3C Recommendation 10 February 2004 (See http://www.w3.org/TR/rdf-mt/.)
OWL2-Overview
OWL 2 Web Ontology Language Document Overview, W3C OWL Working Group, W3C Recommendation 27 October 2009 (See http://www.w3.org/TR/owl2-overview/.)
RIF-Overview
RIF Overview, ed. Michael Kifer and Harold Boley, W3C Working Group Note 22 June 2010 (See http://www.w3.org/TR/rif-overview/.)
Turtle
Turtle - Terse RDF Triple Language, ed Eric Prud'hommeaux and Gavin Carothers, Working Draft 09 August 2011. (See http://www.w3.org/TR/turtle/.)
SPARQL10-Query
SPARQL Query Language for RDF, ed. Eric Prud'hommeaux and Andy Seaborne, W3C Recommendation 15 January 2008 (See http://www.w3.org/TR/rdf-sparql-query/.)
评论已关闭