如何从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 }
}
标签:rdfs,java,sparql,semantic-web,rdf 来源: https://codeday.me/bug/20190825/1715041.html