Question

I need a Sparql query to recover the Type of a specific DBpedia resource. Eg.:

pt.DBpedia resource: http://pt.dbpedia.org/resource/Argentina

Expected type: Country (as can be seen at http://pt.dbpedia.org/page/Argentina)

Using pt.DBpedia Sparql Virtuoso Interface (http://pt.dbpedia.org/sparql) I have the query below:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

select ?l ?t where {
 ?l rdfs:label "Argentina"@pt .
 ?l rdf:type ?t .
}

But it is not recovering anything, just print the variable names. The virtuoso answer.

Actually I do not need to recover the label (?l) too.

Anyone can fix it, or help me to define the correct query?

Was it helpful?

Solution

http in graph name

I'm not sure how you generated your query string, but when I copy and paste your query into the endpoint and run it, I get results, and the resulting URL looks like:

http://pt.dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fpt.dbpedia.org&sho...

However, the link in your question is:

http://pt.dbpedia.org/sparql?default-graph-uri=pt.dbpedia.org%2F&should-sponge...

If you look carefully, you'll see that the default-graph-uri parameters are different:

yours: pt.dbpedia.org%2F
mine:  http%3A%2F%2Fpt.dbpedia.org

I'm not sure how you got a URL like the one you did, but it's not right; the default-graph-uri needs to be http://pt.dbpedia.org, not pt.dbpedia.org/.

The query is fine

When I run the query you've provided at the endpoint you've linked to, I get the results that I'd expect. It's worth noting that the label here is the literal "Argentina"@pt, and that what you've called ?l is the individual, not the label. The individual ?l has the label "Argentina"@pt.

We can simplify your query a bit, using ?i instead of ?l (to suggest individual):

select ?i ?type where {
  ?i rdfs:label "Argentina"@pt ;
     a ?type .
}

When I run this at the Portuguese endpoint, I get these results:

query results

If you don't want the individual in the results, you don't have to select it:

select ?type where {
  ?i rdfs:label "Argentina"@pt ;
     a ?type .
}

or even:

select ?type where {
  [ rdfs:label "Argentina"@pt ; a ?type ]
}

If you know the identifier of the resource, and don't need to retrieve it by using its label, you can even just do:

select ?type where {
  dbpedia-pt:Argentina a ?type
}
type
==========================================
http://www.w3.org/2002/07/owl#Thing
http://www.opengis.net/gml/_Feature
http://dbpedia.org/ontology/Place
http://dbpedia.org/ontology/PopulatedPlace
http://dbpedia.org/ontology/Country
http://schema.org/Place
http://schema.org/Country
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top