如何从SPARQL结果中排除具有特定rdf:type的资源?

时间:2014-06-11 15:46:10

标签: java rdf sparql semantic-web rdfs

我在it.dbpedia.org/sparql上运行了这个查询SPARQL:

select ?resource where {
  ?resource rdfs:label "Piemonte"@it
}

我得到了这个结果:

http://it.dbpedia.org/resource/Categoria:Piemonte
http://it.dbpedia.org/resource/Piemonte

我希望结果只有http://it.dbpedia.org/resource/Piemonte。我正在尝试编写此查询SPARQL以从结果中删除http://it.dbpedia.org/resource/Categoria:Piemonte

select ?resource where {
  ?resource rdfs:label "Piemonte"@it
  FILTER (rdf:type != skos:Concept)
}

因为我注意到http://it.dbpedia.org/resource/Categoria:Piemonte有对象skos:Concepthttp://it.dbpedia.org/resource/Piemonte没有,但我得到了相同的结果。为什么?我在这里做错了什么?

我也尝试添加LIMIT 1,但结果是http://it.dbpedia.org/resource/Categoria:Piemonte,因为结果不能保证在同一顺序。

1 个答案:

答案 0 :(得分:6)

使用类似FILTER (rdf:type != skos:Concept)的过滤器,您只是询问两个常量是否不相等。 URI rdf:typeskos:Concept当然是不同的。

您想要的是对于属性skos:Concept没有值rdf:type的资源。你会在?resource rdf:type skos:Concept之前表明它 的那个。因此,您的查询只需要一个过滤器,以确保数据中不存在该三元组。在意大利语DBpedia上,您可以询问以下内容并获得一个结果。

select ?resource where {
  ?resource rdfs:label "Piemonte"@it
  filter not exists { ?resource rdf:type skos:Concept }
}

SPARQL results