Filters的作用域

FILETER是对其出现的整个组的限制,因此只要大括号内有FILTER,解决方案都是相同的

Basic Garph Patterns

  • Basic Graph Patterns,where a set of triple patterns must match

example:

{
    ?x foaf:name ?name .
    ?x foaf:mbox ?mbox .
  }  

是一组基本图形模式,由两个三重模式组成

{
    ?x foaf:name ?name . FILTER regex(?name, "Smith")
    ?x foaf:mbox ?mbox .
  }

在上述基础上添加了FILTER

包含可选(OPTIONAL关键字)

语法如下:
{OPTIONAL{pattern}}
个人理解:由于不是所有的RDF图中都具有完整的结构,有些RDF会缺乏部分属性,因此OPTIONAL的作用就是在OPTIONAL的括号内的属性如果匹配,即选上,如果可选部分不匹配,但是其他基础属性都匹配的话,也会认定为是匹配的
就比方说上大学,有很多人是有加分项的,有加分项的人可以被录取并标明,但是没有加分项的人也可以被录取,这就是OPTIONAL的功能

example:
数据:

@prefix foaf:       <http://xmlns.com/foaf/0.1/> .
@prefix rdf:        <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

_:a  rdf:type        foaf:Person .
_:a  foaf:name       "Alice" .
_:a  foaf:mbox       <mailto:alice@example.com> .
_:a  foaf:mbox       <mailto:alice@work.example> .

_:b  rdf:type        foaf:Person .
_:b  foaf:name       "Bob" .  

查询语句:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?mbox
WHERE  { ?x foaf:name  ?name .
         OPTIONAL { ?x  foaf:mbox  ?mbox }
       }

结果:

name	mbox
"Alice"	<mailto:alice@example.com>
"Alice"	<mailto:alice@work.example>
"Bob"	

可见name为Bob的这项匹配即使mbox为空白(即在mbox方面不匹配)也可以在最终被认定为匹配

UNION关键字

个人理解:用UNION链接的模式中满足任意一个即可匹配
example:
数据:

@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.0/>
PREFIX dc11:  <http://purl.org/dc/elements/1.1/>

SELECT ?title
WHERE  { { ?book dc10:title  ?title } UNION { ?book dc11:title  ?title } }  

结果

          title
"SPARQL Protocol Tutorial"
"SPARQL"
"SPARQL (updated)"
"SPARQL Query Language Tutorial"  

可以看出,凡是满足三重模式第三项中为"title"的都成功匹配了
二而第二项可以为dc10或者dc11,这两个也是UNION连接的两个条件

FROM关键字

SPARQL查询可以使用FROMFROM NAMED字句来指定要用于匹配的数据集,以描述RDF数据集

由许多FROMFROM NAMED 自己产生的数据集是:

  • 一个默认图谱(graph),由FROM字句中引用的图谱的RDF合并形成
  • 一组(IRI,图谱)对,每个FROM NAMED字句一个

每个FROM语句都包含一个IRI
example:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT  ?name
FROM    <http://example.org/foaf/aliceFoaf>
WHERE   { ?x foaf:name ?name }  

如果一个查询包含多个FROM,那么最终的默认图谱是这些FROM所引用所有图谱的合并

使用FROM NAMED来匹配RDF数据集中的命名图

GRAPH关键字

GRAPH关键字用于将图形模式与数据集中的每个命名图形相匹配,并形成解决方案
可将其后面的变量绑定到匹配的图谱的IRI
example:


WHERE 
  { 
    GRAPH ?src 
    { 
      ?x foaf:mbox <mailto:bob@work.example>.
      ?x foaf:nick? bobNick 
    } 
  }  

最终src匹配到的都是类似<http://example.org/foaf/aliceFoaf>的IRI
同时GRAPH还可以限制应用于特定图谱的匹配

重复的解决方案

如果在查询语句中没有DISTINCT或者REDUCED关键字,重复的解决方案将会被保留,也就是说不同的匹配可能会相同
DISTINCT
该关键字用法如下
SELECT DISTINCT ?name WHERE{ ?x foaf:name ?name }
该方法将会消除所有重复的解决方案
REDUCED
该关键字用法如下
SELECT REDUCED ?name WHERE { ?x foaf:name ?name }
顾名思义,该方法将会减少重复的次数,范围从1~未使用上述两个关键字之间不等
也就是说仍然可能不变,比如重复的匹配有4个,那么使用REDUCED后可能就剩1个,2个,3个甚至仍然还是四个

OFFSET关键字

该关键字定义在特定的偏移数量后的方法,顾名思义,OFFSET即偏移,OFFSET 0没有实际作用

LIMIT关键字

这个关键字想必也不难理解,就是限制结果显示匹配的数量,假设有10个满足条件匹配成功,使用LIMIT 5使得最终结果只显示5个匹配

SPARQL官方教程(英文):https://www.w3.org/TR/rdf-sparql-query/

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议