How to get information like capital, currency, language, population about a country in simple way using SPARQL from DBPEDIA - sparql

How to get information like capital, currency, language, population about a country in simple way using SPARQL from DBPEDIA.
Is there a simple way to do it?

I found a solution for this problem,
I figured out a query that returns all the required fields,
SELECT DISTINCT ?country ?population ?capital ?currency WHERE {
{?country rdf:type
<http://dbpedia.org/class/yago/WikicatMemberStatesOfTheUnitedNations> .
?country <http://dbpedia.org/ontology/populationTotal> ?population .
?country <http://dbpedia.org/ontology/capital> ?capital .
?country <http://dbpedia.org/ontology/currency> ?currency .}
UNION
{?country rdf:type <http://dbpedia.org/ontology/Country> .
?country <http://dbpedia.org/ontology/populationTotal> ?population .
?country <http://dbpedia.org/ontology/capital> ?capital .
?country <http://dbpedia.org/ontology/currency> ?currency .}
}
SPARQL Result

Related

How to better filter the sparql query output to avoid the Query timeout limit reached error?

I am getting the Query timeout limit reached error. Is there any way to maybe filter the output more? Thank you!
SELECT (count(distinct ?city) as ?count) WHERE {
?city wdt:P31/wdt:P279* wd:Q486972. # human settlement
?city wdt:P131 ?region.
?city wdt:P17 ?country.
#not a former country
FILTER NOT EXISTS {?country wdt:P31 wd:Q3024240}
#and not an ancient civilisation (needed to exclude ancient Egypt)
FILTER NOT EXISTS {?country wdt:P31 wd:Q28171280}
#not demolished, abolished countries etc.
FILTER NOT EXISTS {?country wdt:P576 ?abolished}
?article schema:about ?city.
?article schema:isPartOf <https://en.wikipedia.org/>.
}

Why this wikidata SPARQL query is missing country information?

This SPARQL query on Wikidata is missing the form of government for a lot of entries. My query:
SELECT DISTINCT ?country ?countryLabel
(group_concat(DISTINCT ?bfogLabel;separator=", ") as ?Government)
WHERE
{
?country wdt:P31 wd:Q3624078.
OPTIONAL {?country wdt:P122 ?bfog } . # basic form of government
SERVICE wikibase:label
{ bd:serviceParam wikibase:language "en" .
?country rdfs:label ?countryLabel .
?bfog rdfs:label ?bfogLabel .
}
}
GROUP BY ?country ?countryLabel
ORDER BY ?countryLabel
Angola is in Wikipedia's infobox: "Unitary dominant-party presidential constitutional republic". But it is empty in this query.
Why is that? More important: is there any fix for this? I saw in this question that wikidata is not as reliable as possible when it comes to data categorization.
Try it out here

getting the list of countries which have more than one official language

I tried to find the all the country from dbpedia which have more than one official language. i tried the following sparql query but did not work.
SELECT distinct ?country ?officialLanguage
WHERE {
?country rdf:type dbo:Country .
?country dbo:officialLanguage ?officialLanguage.
FILTER (COUNT(?officialLanguage) >1)
}
and got the following error-
Virtuoso 37000 Error SP030: SPARQL compiler, line 8: Aggregates are allowed only in result sets at ')' before '>'
I am very new to sparql. I think I am missing something.
As an alternative query to the answer of #svick you could try
SELECT ?country (COUNT(?officialLanguage) AS ?nrOfLanguages)
WHERE {
?country rdf:type dbo:Country .
?country dbo:officialLanguage ?officialLanguage.
}
GROUP BY ?country
HAVING(COUNT(?officialLanguage) > 1)
SPARQL doesn't work like that, it can't deduce that you mean the count of distinct ?officialLanguage for each ?country. You will need to be more explicit than that, for example:
SELECT distinct ?country ?officialLanguage
WHERE {
?country rdf:type dbo:Country .
?country dbo:officialLanguage ?officialLanguage.
{
SELECT ?country COUNT(*) AS ?languages
WHERE {
?country dbo:officialLanguage [].
}
}
FILTER (?languages > 1)
}

can not find out all city from germany

I tried with this query.
SELECT distinct ?city ?cityName ?country WHERE {
?city rdf:type dbo:City .
?city rdfs:label ?cityName.
?city dbo:country ?country.
?city dbo:country dbr:Germany.
FILTER (lang(?cityName) = 'en')
} ORDER BY ?city
But some city which have dbo:country predicate and dbr:Germany value those are still not listed in the output. For example try this link http://dbpedia.org/page/Goslar . There is no "Goslar" city in output. Can anybody explain me why?
First of all, dbpedia is really a messy place. For example, Goslar, in dbpedia, is not even a city it is a dbo:PopulatedPlace dbo:Town yago:City108524735 . That's why It's not in the output. Another example is Paris. You can check it.

SPARQL query to retrieve countries population density from DBPedia

Note: This question is different from SPARQL query to retrieve countries population from DBpedia. This question is about population density as understood by DBPedia itself.
How can I retrieve country population density from DBPedia?
I have tried the following, but Virtuoso endpoint returns an empty result set:
PREFIX p: <http://dbpedia.org/property/>
SELECT DISTINCT ?name ?populationDensity
WHERE {
?country a dbpedia-owl:Country .
?country rdfs:label ?name .
?country p:populationDensity ?populationDensity . }
Your current query returns an empty table because there is no ?country that fulfills your query that has the rdf:type dbpedia-owl:Country (represented by 'a'). Check that with this query.
To find the list of rdf:type's that the set of data that does use your populationDensity you could use this query. Following that lead you can just check all properties for Portugal and find that it does have populationDensity, but not the one you used.
This works:
PREFIX dbpedia-ont-PP: <http://dbpedia.org/ontology/PopulatedPlace/>
SELECT DISTINCT ?country ?populationDensity
WHERE {
?country a dbpedia-owl:Country .
?country dbpedia-ont-PP:populationDensity ?populationDensity .
}