I'm new to sparql and I'm trying to understand how to get the resources I need for building a query. I started trying to get all the politicians that ruled a city or a country, and at the moment I could do just the following:
I started by following the links in snorql (in the prefixes) and looking for an entity by adding "politician" at the end. I found one :
PREFIX : <http://dbpedia.org/resource/>
So I wrote http://dbpedia.org/resource/Politician and the resource does exist. I tryed to use it in this way:
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
SELECT ?thing WHERE {
?thing a :Politician .
?thing dbo:birthPlace dbpedia:Italy.
}
LIMIT 50
Run in virtuoso.
Even if I remove the second line of the SELECT, I have no results. But if I change the first line with: ?thing a dbo:Person. or even if I remove it, I get the people born in Italy. But not just the politicians. A second problem is I don't need the politicians that were born but ruled that place. How or where can I find that kind of "relations/descriptors"? Now I am just googling and copy-pasting some existing examples, but I would like to understand how to look for more specific things.
Thanks in advance
Your first query isn't working because Politician is not part of the default (:) namespace, but instead it is present in DBpedia Ontology namespace (dbo).
So, your query should be:
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
SELECT ?thing WHERE {
?thing a dbo:Politician .
?thing dbo:birthPlace dbpedia:Italy.
}
LIMIT 50
To list all politician who ruled Italy you would need to know which is the predicate for "ruled". Once you have it you can construct a query.
To list all predicates present in the database you can write something like this
SELECT DISTINCT(?b) WHERE {
?a ?b ?c.
}
And it will list all predicates.
I would recommend you to browse through one or two politician and see the predicates they have to check if one works for you.
Related
I am using DBpedia to retrieve data on specific towns' POIs, for instance Barcelona. I've tried to find appropriate answers to my problems on Stack Overflow but almost all the answers provided did not work out for me, and given that I am new in SPARQL, I couldn't manage to figure out whether or not it was the syntax that was at fault or if there was something else. I am using the DBpedia SPARQL Endpoint available at the following address : http://dbpedia.org/sparql
I've tried to use some things such as ?citylabel or ?location, and to either use the FILTER command or directly fill a value for these classes. I've also tried a few other things, without satisfying results (and most of the times syntax errors that I could not resolve). These solutions have been, in most cases, applied and seemed to work just fine for people, so I do not understand what's going on.
BASE <http://www.dbpedia.org/resource/>
PREFIX : <http://dbpedia.org/resource/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dbpedia: <http://dbpedia.org/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX dbpedia3: <http://dbpedia.org/ontology/>
SELECT (SAMPLE(?label) as ?activity_name)
(SAMPLE(?latitude) as ?activity_lat)
(SAMPLE(?longitude) as ?activity_lon)
(SAMPLE(?homepage) as ?URL)
(SAMPLE(?type) as ?activity_type)
(SAMPLE(?abstract) as ?descriptor)
WHERE
{ ?Museum a dbo:Museum ;
rdfs:label ?label ;
dbo:abstract ?abstract ;
dbo:type ?type ;
geo:lat ?latitude ;
geo:long ?longitude ;
foaf:homepage ?homepage .
}
GROUP BY ?Museum ?label
The results of this query are, I think, pretty much any museum that is known by DBpedia and categorized as such. What I'd like to have is a list of museums within Barcelona. Can somebody give me an rather in-depth answer so I can understand how it is working ? Thanks, in advance.
I try to understand SPARQL and mess around with the SPARQL Tool that is provided by dbpedia. I've read the w3 documentation and now I want to create my very own query. I would like to find the names of all books in dbpedia written by J. J. R. Tolkien.
Therefore I "designed" this query:
SELECT ?name WHERE { ?name ?author "J._R._R._Tolkien".
?name ?mediaType "Print"}
The result is empty, but I would at least expect this book popping up:
http://dbpedia.org/page/The_Lord_of_the_Rings
Can someone tell me, what my conceptual mistake is?
I good approach would be to review his DBpedia page and then choose the desired properties. In your case two good candidates are notableWork and author. Here's a query with both of them, effectively using the latter.
PREFIX : <http://dbpedia.org/resource/>
PREFIX o: <http://dbpedia.org/ontology/>
PREFIX p: <http://dbpedia.org/property/>
SELECT DISTINCT ?is_author_of #?has_notable_work
FROM <http://dbpedia.org/>
WHERE {
:J._R._R._Tolkien rdf:type o:Writer ;
#o:notableWork ?has_notable_work ;
^p:author ?is_author_of .
}
I have used rdf:type o:Writer to reduce possible ambiguity (none, in case of using URI of an individual resource in dbpedia), and ^ to get the right direction. My preference for ?is_author_of and ?has_notable_workinstead of e.g. ?book and ?popular_book was because I'm not sure what kind of work is he author of.
Why does this SPARQL query return no data?
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
SELECT *
WHERE {
<http://dbpedia.org/resource/Louis,_Prince_of_Condé_(1530–1569)> dbpedia-owl:abstract ?abstract
}
LIMIT 1
If you look at the DBpedia page, it shows the person has an abstract. Is it to do with the brackets in the URL? If so, how can I get round this?
This URI does not lead to the same result as the DBpedia page - for what ever reason. You can see this with
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
SELECT *
WHERE {
<http://dbpedia.org/resource/Louis,_Prince_of_Condé_(1530–1569)> ?p ?o
}
LIMIT 100
But it has an owl:sameAs relation to
http://dbpedia.org/resource/Louis,_Prince_of_Cond%C3%A9_(1530%E2%80%931569)
That means if you use this URI in your query, it should work as expected. But you should indeed apply a FILTER on the language, e.g. 'en' for English abstracts.
As AKSW mentions, the resource actually doesn't have many properties, but is connected to the "canonical" version by an owl:sameAs link. You can keep using the IRI that you're using now, follow owl:sameAs in either direction to any of its equal resources (let's call them ?s), and then ask for the abstract of ?s. (And then it's not a bad idea to filter by language, if that's applicable.) You can do this with a query like this (note that the current DBpedia endpoint uses dbo:, now, not the older dbpedia-owl:):
select ?abstract where {
<http://dbpedia.org/resource/Louis,_Prince_of_Condé_(1530–1569)> (owl:sameAs|^owl:sameAs)* ?s .
?s dbo:abstract ?abstract .
filter langMatches(lang(?abstract),'en')
}
It does not have dbpedia-owl:abstract predicate. If you list its predicates you find the following properties:
http://www.w3.org/2002/07/owl#sameAs
http://xmlns.com/foaf/0.1/name
http://purl.org/dc/elements/1.1/description
http://dbpedia.org/ontology/alias
http://dbpedia.org/ontology/birthYear
http://dbpedia.org/ontology/deathYear
http://dbpedia.org/ontology/viafId
http://dbpedia.org/ontology/deathPlace
http://dbpedia.org/ontology/deathDate
http://dbpedia.org/ontology/birthPlace
http://dbpedia.org/ontology/birthDate
I am very new to the semantic web, dbpedia and SPARQL. I want to find all states of the united states and their capitals. This is what i have now.
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?state_label ?capital_label
WHERE {
?state_label dct:subject dbc:States_of_the_United_States.
?state_label dbo:capital ?capital_label.
}
I only got 36 results instead of 50. Could somebody help?
In looking at the resource for New Hampshire, I see that one of its types is yago:StatesOfTheUnitedStates. When I request all of those, I get 51 results, and when I request all of those and their capitals, I get 50. Those numbers sound right, but looking at the data, it's a bit more complicated; there's a non-state result (U.S. State), and New Jersey has two (the resource Trenton, and the string "Trenton"), and Delaware doesn't have a capital listed (I'm not sure why, but the triple just isn't present in DBpedia). At any rate, if you're willing to take the 49 that have capitals, you filter use this:
select ?state ?capital where {
?state a yago:StatesOfTheUnitedStates ;
dbp:capital ?capital .
filter isIRI(?capital)
}
SPARQL results
Sometimes, as in this case, the issue is in the data, not in your query.
Also note that even though the main DBpedia data set typically lags behind Wikipedia, the primary way to correct DBpedia data is still by editing Wikipedia. If DBpedia doesn't seem to have extracted the correct data from Wikipedia, it's helpful to tell DBpedia...
There are apparently only 5 yago:StateCapitalsInTheUnitedStates in DBpedia, but we know that's not true about the world, nor about the data in Wikipedia -- so there are definitely things to be changed.
Here's a query that gets you all resources typed as yago:StatesOfTheUnitedStates with their http://dbpedia.org/property/capital (missing for Delaware; doubled for New Jersey) and http://dbpedia.org/ontology/capital (missing for several states) --
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
SELECT ?state
?dbocapital
?dbpcapital
WHERE
{
?state a yago:StatesOfTheUnitedStates
OPTIONAL { ?state dbo:capital ?dbocapital }
OPTIONAL { ?state dbp:capital ?dbpcapital }
}
ORDER BY ?state
I'm new at semantic web, where I learn basics, but I'm stuck at the beginning.
After reading this link: http://www.cambridgesemantics.com/semantic-university/sparql-by-example, I try some examples by myself, but without success.
For example, using OpenLink Virtuoso SPARQL Query Editor http://demo.openlinksw.com/sparql, I put at Default Graph URI this http://njh.me/foaf.rdf and simple query
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
select ?name
where
{
?person foaf:name ?name .
}
to get name of a person who is owner of this RDF file. Also, if I put following query
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
select ?name
where
{
?OnlineAcount foaf:name ?name .
}
nothing is happening.
Where I make mistake?
The same situation is with https://ai.wu.ac.at/~polleres/foaf.rdf, http://richard.cyganiak.de/foaf.rdf for the first query.
Any help at the beginning of my semantic tour will be appreciated :)
Thanks in advance.
Below the query input pane, there's an option for Sponging. You need to select the option Retrieve remote RDF data for all missing source graphs. Then you'll get results. However, the file that you mentioned actually has lots of foaf:name triples, not just one for the creator of the file. You might try select ?person ?name to see what else is in that data.