我在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:Concept
而http://it.dbpedia.org/resource/Piemonte没有,但我得到了相同的结果。为什么?我在这里做错了什么?
我也尝试添加LIMIT 1
,但结果是http://it.dbpedia.org/resource/Categoria:Piemonte
,因为结果不能保证在同一顺序。
答案 0 :(得分:6)
使用类似FILTER (rdf:type != skos:Concept)
的过滤器,您只是询问两个常量是否不相等。 URI rdf:type
和skos: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 }
}