Reputation: 572
I have this query SPARQL that I ran on it.dbpedia.org/sparql:
select ?resource where {
?resource rdfs:label "Piemonte"@it
}
I get this result:
http://it.dbpedia.org/resource/Categoria:Piemonte
http://it.dbpedia.org/resource/Piemonte
I would like to have only http://it.dbpedia.org/resource/Piemonte as a result. I am trying to write this query SPARQL to delete http://it.dbpedia.org/resource/Categoria:Piemonte from the results:
select ?resource where {
?resource rdfs:label "Piemonte"@it
FILTER (rdf:type != skos:Concept)
}
because I noticed that http://it.dbpedia.org/resource/Categoria:Piemonte has the object skos:Concept
whereas the http://it.dbpedia.org/resource/Piemonte doesn't, but I get the same result. Why? What am I doing wrong here?
I also tries adding LIMIT 1
, but the result was http://it.dbpedia.org/resource/Categoria:Piemonte
, since the results aren't guaranteed to be in the same order.
Upvotes: 7
Views: 4244
Reputation: 85813
With a filter like FILTER (rdf:type != skos:Concept)
you're just asking whether two constants are unequal. The URIs rdf:type
and skos:Concept
are, of course, different.
What you want is a resource that doesn't have the value skos:Concept
for the property rdf:type
. You'd indicate that it does have that by ?resource rdf:type skos:Concept
. So your query just needs a filter that ensures that that triple does not exist in the data. On the Italian DBpedia, you can ask the following and get just one result back.
select ?resource where {
?resource rdfs:label "Piemonte"@it
filter not exists { ?resource rdf:type skos:Concept }
}
Upvotes: 10