2013-02-26 1 views
4

Я пытаюсь найти города в Дании с населением более 100 000 человек.Как найти города с населением более X в определенной стране

я могу найти все города в Дании с этим кодом:

SELECT ?s ?o 
WHERE { 
    ?s a <http://dbpedia.org/class/yago/CitiesAndTownsInDenmark> 
} 

И с этим кодом можно найти города с более чем 100 000 в популяции:

SELECT ?resource ?value 
WHERE { 
    ?resource <http://dbpedia.org/property/populationTotal> ?value 
    FILTER (?value > 100000) 
} 
ORDER BY ?resource ?value 

Я был бы признателен за помощью о том, как объединить эти запросы.

ответ

5

Простой:

SELECT ?resource ?value 
WHERE { 
    ?resource a <http://dbpedia.org/class/yago/CitiesAndTownsInDenmark> . 
    ?resource <http://dbpedia.org/property/populationTotal> ?value . 
    FILTER (?value > 100000) 
} 
ORDER BY ?resource ?value 

Другими словами: найти все вещи с типом «Город или город в Дании», и найти их населения. Вы можете сокращать запрос, избегая повторения «ресурса», используя ';' а не «„:

?resource a <http://dbpedia.org/class/yago/CitiesAndTownsInDenmark> ; 
      <http://dbpedia.org/property/populationTotal> ?value . 

(“.» Если вы привыкли к SQL является по существу естественное соединение: у вас есть ресурс на каждой стороне, так что присоединяйтесь на это значение?)

+0

Спасибо очень много! –

+0

Любая идея, где я могу найти список стран, охваченных? «Китай» не работает. – Hugolpz

+0

Этот полезный тип существует, потому что люди используют категорию http://en.wikipedia.org/wiki/Category:Cities_and_towns_in_Denmark в википедии. Глядя на http://dbpedia.org/page/Beijing, я вижу yago: MetropolitanAreasOfChina, но это плохо заполнено. Возможно, вам лучше не полагаться на существование таких категорий и напрямую запрашивать населенные пункты в стране. Например: 'select? S { ? S a ; . } ' – user205512