选择SPARQL查询的负数

选择SPARQL查询的负数,sparql,Sparql,可以选择sparql查询的“负数”吗 例如,考虑以下RDF数据、查询和期望结果: 知识库: 有办法通过吗?(我需要它进行删除)我想减去就是你要找的: 前缀gr: 选择?prod WHERE { 产品采购订单。 负{o?p2?o2} } 它获取左侧匹配的内容(?prod?p?o),并删除与减模式匹配的项目对应的任何内容 注意,这并不能给出您想要的答案,因为?prod?p?o模式匹配所有您对结果不感兴趣的内容,包括链接属性(:propB rdfs:label“Hello”) 要获得您想要的答案,您

可以选择sparql查询的“负数”吗

例如,考虑以下RDF数据、查询和期望结果:

知识库:
有办法通过吗?(我需要它进行
删除

我想
减去
就是你要找的:

前缀gr: 选择?prod WHERE { 产品采购订单。 负{o?p2?o2} }
它获取左侧匹配的内容(
?prod?p?o
),并删除与
减模式匹配的项目对应的任何内容

注意,这并不能给出您想要的答案,因为
?prod?p?o
模式匹配所有您对结果不感兴趣的内容,包括链接属性(
:propB rdfs:label“Hello”

要获得您想要的答案,您需要使查询的第一部分更加具体,如下所示:

前缀:
前缀gr:
选择?prod WHERE
{
?产品:hasProp?o。
负{o?p2?o2}
}
在这里,我将
?p
变量改为
:hasProp
常量。通过这个问题,我得到了你想要的答案


NB-您的示例中没有定义空前缀,因此我发明了一个空前缀以使查询有效,因此我可以测试它是否有效

另一种方法是使用
过滤器不存在

SELECT ?prod WHERE 
{
  ?prod :hasProp ?o.
  FILTER NOT EXISTS { ?o rdfs:label "Hello". }
}
第一个
?prod:hasProp?o.
是哪个?然后检查?o是否导致
?o rdfs:标签“Hello”
匹配。使用你认为最容易理解的形式

| ?prod   |
|---------|
| :prod_A | 
| :prod_C | 
| :prod_D | 
SELECT ?prod WHERE 
{
  ?prod :hasProp ?o.
  FILTER NOT EXISTS { ?o rdfs:label "Hello". }
}