【SPARQL】FILTER 子句

我们使用下面的数据集作为例子:

@prefix ab: <http://learningsparql.com/ns/addressbook#> .
@prefix d:  <http://learningsparql.com/ns/data#> .

# Richard information
d:i0432 ab:firstName "Richard" . 
d:i0432 ab:lastName  "Mutt" . 
d:i0432 ab:homeTel   "(229) 276-5135" . 
d:i0432 ab:nick      "Dick" .
d:i0432 ab:email     "richard49@hotmail.com" . 

# Cindy information
d:i9771 ab:firstName "Cindy" . 
d:i9771 ab:lastName  "Marshall" . 
d:i9771 ab:homeTel   "(245) 646-5488" . 
d:i9771 ab:email     "cindym@gmail.com" . 

# Craig infomation
d:i8301 ab:firstName "Craig" . 
d:i8301 ab:lastName  "Ellis" . 
d:i8301 ab:workTel   "(245) 315-5486" .
d:i8301 ab:email     "craigellis@yahoo.com" . 
d:i8301 ab:email     "c.ellis@usairwaysgroup.com" .

FILTER 关键字用于过滤掉不符合条件的数据。

以下语句:

PREFIX ab: <http://learningsparql.com/ns/addressbook#>

SELECT ?first ?last 
WHERE {
    ?s  ab:firstName ?first ; 
    	ab:lastName ?last .
	OPTIONAL { ?s ab:workTel ?workNum . }   
    FILTER (!bound(?workNum)) 
}
  • bound() function returns true if the variable passed as a parameter is bound(that is, if it’s been assigned a value) and false otherwise.

查询结果:

-------------------------
| first     | last       | 
========================== 
| "Cindy"   | "Marshall" | 
| "Richard" | "Mutt"     | 
--------------------------

该查询语句得到的是拥有 ab:fistNameab:lastName 但又没有 ab:workTel 的人。

在SPARQL 1.1中,又引入 FILTER NOT EXISTSMINUS 语句,借助他们,上面的查询语句可以改写成下面这样的语句:

PREFIX ab: <http://learningsparql.com/ns/addressbook#>

SELECT ?first ?last 
WHERE {   
    ?s ab:firstName ?first ; 
       ab:lastName ?last . 
    FILTER NOT EXISTS { ?s ab:workTel ?workNum } 
}
PREFIX ab: <http://learningsparql.com/ns/addressbook#> 
SELECT ?first ?last 
WHERE {   
  ?s ab:firstName ?first ;      
     ab:lastName ?last .
  MINUS { ?s ab:workTel ?workNum }
}

在一些情况下,FILTER NOT EXISTSMINUS 所得到的结果也会有些区别,需要根据情况和语义来使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值