Rdf 基于“triple不存在”选择使用sparql

Rdf 基于“triple不存在”选择使用sparql,rdf,sparql,triplestore,triples,Rdf,Sparql,Triplestore,Triples,我需要一点帮助从我的商店选择正确的三倍 <a> a <type/1> . <b> a <type/1> . <c> a <type/1> . <c> a <type/2> . 我只想选择类型为/1而不是类型为/2的元素 使用sparql select查询实现这一点的最佳方法是什么 我在寻找像这样的东西: select ?a where { ?a a <type/1> .

我需要一点帮助从我的商店选择正确的三倍

<a> a <type/1> .
<b> a <type/1> .
<c> a <type/1> .
<c> a <type/2> .
我只想选择类型为/1而不是类型为/2的元素

使用sparql select查询实现这一点的最佳方法是什么

我在寻找像这样的东西:

select ?a where 
{ 
    ?a a <type/1> .
    !{ ?a a <type/2> }
}
谢谢


在SPARQL 1.0中,这有点棘手:

SELECT ?a WHERE {
    ?a a <type/1>.
    OPTIONAL {
        ?a a ?othertype .
        FILTER (?othertype = <type/2>)
    }
    FILTER (!BOUND(?othertype))
}

另一种SPARQL 1.1解决方案是使用负号,例如

减号从现有匹配中减去与其三重模式匹配的解


在大多数情况下,使用筛选器不存在{}和负{}是等效的,但请注意,在某些情况下,这是不正确的-有关这方面的一些示例,请参阅。

将您的SPARQL 1.1示例更改为在“不存在”中使用显式URI,因为使用变量也会匹配找到的第一个模式的三元组,并导致筛选出所有解决方案
SELECT ?a WHERE {
    ?a a <type/1>.
    FILTER NOT EXISTS { ?a a <type/2> . }
}
SELECT ?a
WHERE
{
  ?a a <type/1> .
  MINUS { ?a a <type/2> . }
}