answer_42 (answer_42) wrote,
answer_42
answer_42

Category:

Запросы к Википедии, как к базе данных

Пардон за ретроградство, но недавно я осознал, что википедия это не только энциклопедия, но и огромная база данных. После посещения конференции тамошний доклад про семантический веб как-то сильно меня затронул. Я конечно слышал про linkeddata и до этого, но никогда не воспринимал его всерьез и почему-то в этот раз это сильно задело, на википедию и на веб вцелом я стал смотреть по другому.

Например есть задачка, получить список стран и их площадь. Казалось бы, все просто, лезем, гуглим ищем, находим какой-нибудь приличный источник...Это подход прошлого и настоящего, в будущем мы будем осуществлять запрос к некой вселенской базе данных и получать инфу. Чем это отличается от настоящего, тоже базы данных и т.д.? Тем что из себя представляет эта вселенская БД - связанное множество источников знающих друг о друге и транслирующих себя в интернет.

Вернусь к задаче. Википедия это не структурированная база данных к которой можно делать запросы. Ее структурированной версией является DBPedia. Чтобы решить нашу задачку надо составить правильный запрос на SPARQL - языке запросов который может запрашивать данных хранимые в формате RDF.

Наш будет выглядеть так:
select distinct * where
 ?country dbpprop:areaKm  ?area .
}
Читается он так, выбери все неповторяющиеся (distinct) сущности Country и их площади в километрах. Чтобы понять какие есть параметры у сущностей, надо просто перейти по ссылке и посмотреть что есть в списке. Вместо dbpprop:area можно писать ссылкой: http://dbpedia.org/property/areaKm
select distinct * where
}
Так как нам нужно на самом название страны, а не ее сущность, то расширим так. Вместо звездочки поставим названия переменных которые нам нужны, добавим еще одно свойство commonName (а - это сокращение для rdf:type).
select ?name ?area where
{?country rdf:type <http://dbpedia.org/ontology/Country> . 
}
И наконец отфильтруем всякую фигню не на английском добавив FILTER:
select ?name ?area where
{?country rdf:type <http://dbpedia.org/ontology/Country> . 
 FILTER langMatches( lang(?name), "EN" )
}
Результат копируем и засовываем в Virtuoso SPARQL Query Editor.  Обратите внимание, что можно выбрать вывод сразу в CSV.

Еще подробные примеры можно найти тут.
Tags: dbpedia, linkeddata, sparql, wikipedia
Subscribe
  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 5 comments