Примеры работы с геополитической онтологией

Может быть кто-то помнит, в январе месяце я публиковал OWL описание геополитической онтологии России вот тут — http://ivbeg.livejournal.com/252756.html.

И тогда были вопросы, а как же с ней работать.
Чтобы немного упростить эту задачу приведу несколько способов
1. OpenLink Data Expolorer
Открываете ссылку http://linkeddata.uriburner.com/ode/

и вбиваете туда http://schema.opengovdata.ru/core/regions.owl
в результате появится интерфейс для различных способов навигации по онтологии
выглядящий примерно вот так

В правой панели можно настраивать фильтры по свойствам, что я и делал как можно увидеть на скриншоте. Например, можно увидеть какие регионы в каких часовых поясах и так далее

2. RedLand Rasqal RDF Query
Это инструмент для исполнения SQARQL запросов онлайн и доступный тут http://librdf.org/query. В качестве эндпоинта ему задаётся http://schema.opengovdata.ru/core/regions.owl, а в качестве скрипта запрос который хотелось бы исполнить.
Например, такой:

PREFIX reg:
select ?x ?taxCode ?nameEN ?nameRU ?codeOKATO ?codeKLADR where { ?x
reg:taxCode ?taxCode;
reg:nameEN ?nameEN;
reg:nameRU ?nameRU;
reg:codeOKATO ?codeOKATO;
reg:codeKLADR ?codeKLADR;
} ORDER BY ?taxCode

3. Пример кода на Python
И для тех кто ищет как попроще и что-то готовое

Прилагаю скрипт на Python который извлекает список регионов из OWL отпечатывает в TSV формате. Всё что для него нужно это библиотека RDFLib


#!/usr/bin/env python
# -*- coding: utf-8 -*-
import csv
from StringIO import StringIO
from rdflib.Graph import Graph
from rdflib.sparql.bison import Parse

def convert_regions():
g = Graph()
g.parse('http://schema.opengovdata.ru/core/regions.owl')
parsed_query = Parse("""
PREFIX reg:
select ?x ?taxCode ?nameEN ?nameRU ?codeOKATO ?codeKLADR where { ?x
reg:taxCode ?taxCode;
reg:nameEN ?nameEN;
reg:nameRU ?nameRU;
reg:codeOKATO ?codeOKATO;
reg:codeKLADR ?codeKLADR;
} ORDER BY ?taxCode
""")
resp = g.query(parsed_query).serialize('python')

io = StringIO()

wr = csv.writer(io, delimiter='\t')
for o in resp:
wr.writerow(o[0:4])
print io.getvalue()

if __name__ == "__main__":
convert_regions()

About This Author

Яндекс.Метрика