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

我有这个查询SPARQL我在它上运行.dbpedia.org/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,因为结果不保证是相同的顺序.

解决方法:

使用像FILTER(rdf:type!= skos:Concept)这样的过滤器,你只是问两个常量是否不相等. URIs rdf:type和skos:Concept当然是不同的.

你想要的是一个没有skos值的资源:属性rdf:type的概念.你会指出它确实有吗?资源rdf:输入skos:Concept.因此,您的查询只需要一个过滤器,以确保数据中不存在该三元组.在意大利语DBpedia上,您可以询问以下内容并获得一个结果.

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

SPARQL results

上一篇:java – 一旦我编写了内置函数,我需要做些什么才能让reasoners知道它?


下一篇:使用Java代码将SPARQL查询到DBPedia