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

Java 如何从SPARQL结果中排除具有特定rdf:type的资源?,java,rdf,sparql,semantic-web,rdfs,Java,Rdf,Sparql,Semantic Web,Rdfs,我在SPARQL上运行了这个查询。dbpedia.org/SPARQL: select?资源在哪里{ ?资源RDF:标签“Piemonte”@it } 我得到这个结果: http://it.dbpedia.org/resource/Categoria:Piemonte http://it.dbpedia.org/resource/Piemonte 我只想作为一个结果。我正在尝试编写此查询SPARQL以从结果中删除: select?资源在哪里{ ?资源RDF:标签“Piemonte”@it 过

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

select?资源在哪里{
?资源RDF:标签“Piemonte”@it
}
我得到这个结果:

http://it.dbpedia.org/resource/Categoria:Piemonte
http://it.dbpedia.org/resource/Piemonte
我只想作为一个结果。我正在尝试编写此查询SPARQL以从结果中删除:

select?资源在哪里{
?资源RDF:标签“Piemonte”@it
过滤器(rdf:type!=skos:Concept)
}
因为我注意到有object
skos:Concept
,而没有,但是我得到了相同的结果。为什么?我做错了什么


我还尝试添加
限制1
,但结果是
http://it.dbpedia.org/resource/Categoria:Piemonte
,因为不能保证结果的顺序相同。

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

您需要的是一个不具有属性
rdf:type
的值
skos:Concept
的资源。您可以通过
?resource rdf:type skos:Concept
来指示它确实有这个功能。因此,您的查询只需要一个过滤器来确保数据中不存在三元组。在意大利语DBpedia上,您可以询问以下问题,只得到一个结果

select?资源在哪里{
?资源RDF:标签“Piemonte”@it
筛选器不存在{?资源rdf:type skos:Concept}
}

它可以工作!我还有一个问题。如果我写这个查询:prefix-rdfs:prefix-skos:prefix-rdf:select?resource-where{?resource-rdfs:label“Piemonte”@it-filter不存在{?resource-rdf:type-skos:Concept}},我会得到这个SPARQL结果:为什么?两个查询之间的区别是什么?我只添加了前缀!我的解决方法是:前缀rdfs:prefix skos:prefix rdf:select?resource where{?resource rdfs:label“Piemonte”@it filter不存在{?resource rdf:type skos:Concept}}我把skos前缀弄错了。@Musich87注释用于要求澄清问题/答案,如果您有新问题,请以新问题的形式提问,并将其链接回原始问题,作为相关参考