sig*_*nce 22 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/2> }
}
谢谢,
:)
Rob*_*obV 26
另一种SPARQL 1.1解决方案是使用MINUS例如
SELECT ?a
WHERE
{
  ?a a <type/1> .
  MINUS { ?a a <type/2> . }
}
MINUS 从现有匹配中减去与其三重模式匹配的解决方案.
在大多数情况下使用FILTER NOT EXISTS { }和MINUS { }等效,但要注意有一些不合适的极端情况 - 请参阅SPARQL 1.1规范以获取此示例.
cyg*_*gri 13
在SPARQL 1.0中,这有点棘手:
SELECT ?a WHERE {
    ?a a <type/1>.
    OPTIONAL {
        ?a a ?othertype .
        FILTER (?othertype = <type/2>)
    }
    FILTER (!BOUND(?othertype))
}
该OPTIONAL条款?othertype对任何?a有该条款的条款具有约束力<type/2>,并且对于没有该条款的条款,该条款不受约束?a.
然后决赛FILTER只选择那些?a未绑定的行.
在SPARQL 1.1中,它更容易:
SELECT ?a WHERE {
    ?a a <type/1>.
    FILTER NOT EXISTS { ?a a <type/2> . }
}