<div id="divTop">
<a href="http://www.guwendong.cn/post/2006/sparql.html">Semantic Web: SPARQL——RDF查询语言</a>
</div>
<div id="divMain">
<div class="post cate3 auth1">
<h4 class="post-date">2006年12月1日 11:19:19 发布:guwendong </h4>
<div class="post-body">
<a href="http://www.w3.org/TR/rdf-sparql-query/" rel="noopener noreferrer" target="_blank" title="SPARQL">SPARQL</a>,和“sparkle”的发音一样,它是一种 RDF 查询语言,可以从 RDF 图中查询信息。在
<a href="http://www.w3.org/TR/" rel="noopener noreferrer" target="_blank" title="W3C Technical Reports and Publications">W3C Technical Reports and Publications</a> 页面上,我们可以看到,现在和 SPARQL 相关的共有三项内容:其中两个是 Candidate Recommendations(候选推荐),
<a href="http://www.w3.org/TR/2006/CR-rdf-sparql-protocol-20060406/" rel="noopener noreferrer" target="_blank" title="SPARQL Protocol for RDF">SPARQL Protocol for RDF</a> 和
<a href="http://www.w3.org/TR/2006/CR-rdf-sparql-XMLres-20060406/" rel="noopener noreferrer" target="_blank" title="SPARQL Query Results XML Format">SPARQL Query Results XML Format</a>;另外一个是 Word Drafts(工作草案),
<a href="http://www.w3.org/TR/2006/WD-rdf-sparql-query-20061004/" rel="noopener noreferrer" target="_blank" title="SPARQL Query Language for RDF">SPARQL Query Language for RDF</a>。上了这个页面,基本上就已经说明这个要成为 W3C 的推荐标准了,就像 RDF 和 OWL 一样。而且,在
<a href="http://www2006.org/" rel="noopener noreferrer" target="_blank" title="WWW2006">WWW2006</a> 发言时,
<a href="http://uk.builder.com/webdevelopment/design/0,39026630,39313738,00.htm" rel="noopener noreferrer" target="_blank" title="TimBL 也已经表示">TimBL 也已经表示</a>,随着 SPARQL 查询语言即将完成标准化,语义网已经具备了成功所需要的所有标准和技术,Web开发人员和内容创作人员可以开始使用这些语义语言了。
<br>
<br>在 SPARQL 之前,已经有不少研究人员致力于开发针对 RDF 的查询语言,在这个网页
<a href="http://www.w3.org/2001/11/13-RDF-Query-Rules/" rel="noopener noreferrer" target="_blank" title="http://www.w3.org/2001/11/13-RDF-Query-Rules/">http://www.w3.org/2001/11/13-RDF-Query-Rules/</a> 上有一个比较完整的列表。SPARQL 是基于以前的 RDF 查询语言(如rdfDB、RDQL 和 SeRQL)发展而来的,拥有一些有价值的新特性,并且受到 Jena 开发团队的鼎立支持。Jena 是 HP 公司语义网研究小组开发的一套 Java 工具包,用来支持人们进行语义网的相关研究和应用开发。SPARQL 的语法细节这里就不一一列举了,直接给出一个例子。总体来说,SPARQL 的语法和传统 SQL 的语法还是有几分相似的,大家应该不会陌生。
<br>
<table bgcolor="#cccccc" border="0" cellpadding="5" cellspacing="1" width="90%"><tbody><tr><td bgcolor="#e5e5e5">BASE <http://my.donews.com/><br>PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#><br>PREFIX foaf: <http://xmlns.com/foaf/0.1/><br># 这是一个以 BASE 为根的相对 IRI
<div>
PREFIX user: <users#>
</div> <p>SELECT ?person ?name ?age<br>FROM <users.rdf><br>WHERE {<!-- --><br>?person a foaf:Person ;<br>foaf:name ?name .<br>OPTIONAL { ?person user:age ?age } .<br>FILTER (REGEX(?name, “clickstone”))<br>}<br>ORDER BY ASC(?name)<br>LIMIT 10<br>OFFSET 10 </p> </td></tr></tbody></table>
<br>简要的说明一下例子中出现的语法。
<br> 1. BASE,根 IRI,其他以此为根的 IRI 就可以写成相对形式了,见例子里面的注释。一旦定义了 BASE,就可以在 SPARQL 的任何地方进行使用了,例子中共用到了 2 处。
<br> 2. 使用 # 进行注释。
<br> 3. PREFIX,IRI 前缀的缩写。
<br> 4. SELECT,查询关键字,和 SQL 中的一个意思。
<br> 5. ?person ?name ?age,要查询的变量,使用 ? 标识变量,也可以使用 $。变量间使用空白分隔(现在正在
<a href="http://www.w3.org/TR/rdf-sparql-query/#punctuationSyntax" rel="noopener noreferrer" target="_blank" title="征集意见">征集意见</a>,正式标准中使用空白还是逗号分隔尚未最终确定)。
<br> 6. FROM,从何处查询数据。可以一次查询多个 RDF 数据集,只需要使用 FROM 逐一列出即可。
<br> 7. WHERE,过滤条件集合,和 SQL 的 WHERE 一个意思。
<br> 8. ?person a foaf:Person,具体的过滤条件,使用
<a href="http://www.dajobe.org/2004/01/turtle/" rel="noopener noreferrer" target="_blank" title="Turtle">Turtle</a> 语法。还记得“a”是什么意思吗?具体的介绍可以参看《RDF 实战》。
<br> 9. 例子中两个过滤条件的主语都是“?person”,因此,使用了简写的形式。如果主语不同,逐一列出检索条件即可。
<br> 10. OPTIONAL,可选过滤条件。比如有些 ?person 可能没有填写 age 属性,如果不使用 |
|