извлечь данные о городе из dbpedia или LinkedGeoData

Я пытаюсь сейчас в течение нескольких часов выяснить, как получить различную информацию из dbpedia или LinkedGeoData. Я использовал этот интерфейс (http://dbpedia.org/snorql) и пробовал разные подходы, но так и не получил нужного мне результата.

Если я использую что-то вроде этого:

SELECT * WHERE {
?subject rdf:type <http://dbpedia.org/ontology/City>.
    OPTIONAL {
        ?subject <http://dbpedia.org/ontology/populationTotal> ?populationTotal.
    }
    OPTIONAL {
        ?subject <http://dbpedia.org/ontology/populationUrban> ?populationUrban.
    }
    OPTIONAL {
        ?subject <http://dbpedia.org/ontology/areaTotal> ?areaTotal.
    }
    OPTIONAL {
        ?subject <http://dbpedia.org/ontology/populationUrbanDensity> ?populationUrbanDensity.
    }
    OPTIONAL {
        ?subject <http://dbpedia.org/ontology/isPartOf> ?isPartOf.
    }
    OPTIONAL {
        ?subject <http://dbpedia.org/ontology/country> ?country.
    }
    OPTIONAL {
        ?subject <http://dbpedia.org/ontology/utcOffset> ?utcOffset.
    }
    OPTIONAL {
        ?subject <http://dbpedia.org/property/janHighC> ?utcOffset.
    }
    OPTIONAL {
        ?subject <http://dbpedia.org/property/janLowC> ?utcOffset.
    }
}
LIMIT 20

Я выхожу за пределы.

Я также пробовал это:

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

SELECT *  WHERE {
  ?subject rdf:type <http://dbpedia.org/ontology/City>.
  ?subject rdfs:label ?label.
FILTER ( lang(?label) = 'en'
}
LIMIT 100

Но это дает мне ошибку, которую я не понимаю. Если я удалю ФИЛЬТР, он сработает, но дайте мне метки на всех языках...

Я ищу что-то вроде этого http://dbpedia.org/page/Vancouver, но не все данные, но некоторые из них, такие как население, площадь, страна, высота над уровнем моря, широта, долгота, часовой пояс, label@en, abstract@en и т. д.

Может ли кто-нибудь помочь мне получить рабочий синтаксис?

Спасибо за помощь.


ОБНОВЛЕНИЕ:

Я получил это, чтобы работать до сих пор с:

SELECT DISTINCT *
WHERE {
   ?city rdf:type dbpedia-owl:Settlement ;
         rdfs:label ?label;
         dbpedia-owl:abstract ?abstract ;
         dbpedia-owl:populationTotal ?pop ;
         dbpedia-owl:country ?country ;
         dbpprop:website ?website .
   FILTER ( lang(?abstract) = 'en' && lang(?label) = 'en')
}
LIMIT 20

Но все еще не хватает лимитов, если я хочу получить все расчеты. Кстати. есть ли способ получить все города и населенные пункты в одной таблице?


person Dominik    schedule 10.10.2012    source источник


Ответы (1)


Под «выходом за пределы» вы имеете в виду ошибку «Превышено ограничение пропускной способности URI = '/!sparql/'»? Я предполагаю, что это ограничение, установленное dbpedia, чтобы убедиться, что оно не перегружено запросами, выполнение которых занимает «вечность», и если это так, то, вероятно, вы не так уж много можете сделать. Вы можете запрашивать данные порциями, используя OFFSET, LIMIT и ORDER BY, см. http://www.w3.org/TR/rdf-sparql-query/#modOffset.

ОБНОВЛЕНИЕ: Да, похоже, это правильный путь: http://www.mail-archive.com/[email protected]/msg03368.html

Во втором запросе ошибка - пропущенная скобка. Этот

FILTER ( lang(?label) = 'en'

должно быть

FILTER ( lang(?label) = 'en')

Для вашего последнего вопроса естественным способом собрать несколько вещей/(похожих запросов) в одном запросе/таблице является использование UNION, например,

SELECT ?x
WHERE {
  { ?x rdf:type dbpedia-owl:City }
UNION
  { ?x rdf:type dbpedia-owl:Settlement }
}
person mgs    schedule 12.10.2012