Domanda

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?

È stato utile?

Soluzione

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top