[英]selecting using sparql based on 'triple does not exist'
我需要一些帮助来从我的商店中选择合适的三元组......
<a> a <type/1> .
<b> a <type/1> .
<c> a <type/1> .
<c> a <type/2> .
我只想 select 元素是 type/1 而不是 type/2
使用 sparql select 查询实现此目的的最佳方法是什么?
我正在寻找类似的东西:
select ?a where
{
?a a <type/1> .
!{ ?a a <type/2> }
}
谢谢,
:)
另一种 SPARQL 1.1 解决方案是使用MINUS
,例如
SELECT ?a
WHERE
{
?a a <type/1> .
MINUS { ?a a <type/2> . }
}
MINUS
从现有匹配项中减去与其三重模式匹配的解决方案。
在大多数情况下,使用FILTER NOT EXISTS { }
和MINUS { }
是等价的,但要注意在某些极端情况下这是不正确的 - 请参阅SPARQL 1.1 规范以获取一些示例。
在 SPARQL 1.0 中,这有点棘手:
SELECT ?a WHERE {
?a a <type/1>.
OPTIONAL {
?a a ?othertype .
FILTER (?othertype = <type/2>)
}
FILTER (!BOUND(?othertype))
}
OPTIONAL
子句将?othertype
绑定到任何具有<type/2>
的?a
?a
上。
最后的FILTER
然后只选择?a
未绑定的那些行。
在 SPARQL 1.1 中,这要容易得多:
SELECT ?a WHERE {
?a a <type/1>.
FILTER NOT EXISTS { ?a a <type/2> . }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.