Skip to content

Latest commit

 

History

History

lab-1

Лабораторная работа №1 "Доступ к разнородным БД на основе онтологий"

Задание

Цель данной работы - ознакомление и получение практических навыков в развертывании решения для интеграции реалиционных данных на основе онтологий.

Задача:

  1. Выбрать предметную область. Примером предметной области могут быть базы данных 2-х библиотек с информацией о книгах и авторах, к которым нужно обеспечить доступ через единый интерфейс запросов.

  2. Развернуть 2 реалиционные БД и наполнить их данными в соответствии с требованиями:

    1. Каждая из БД должна иметь отличную от другой схему данных, т.е. разные наименования таблиц и полей, а так же разная структура таблиц,
    2. Данные в обоих БД не должны полностью дублироваться.
  3. Разработать онтологию для предметной области. При разработке онтологии необходимо определить компетентностные вопросы.

  4. Развернуть Ontop и подключить его к БД.

  5. Настроить маппинги онтологии на схемы данных БД с помощью соответствующего плагина к Protege.

  6. Подговить SPARQL запросы к Ontop, в соответствии с определенными ранее компетентностными вопросами.

Пример развёртывания системы Ontop для базы данных MySQL

Для демонстрации возможностей системы Ontop развернём простую реляционную базу данных. Наша цель: сделать возможным обращение к базе данных SQL как к онтологии - с помощью SPARQL-запросов. Ontop предоставляет богатый инструментарий для разных видов развёртывания и разных СУБД. Например, можно развернуть SPARQL-end-point в виде web-сервиса для базы данных PostgreSQL. Либо использовать Ontop API в собственном приложении на Java. В данном примере мы используем базу данных MySQL, развёрнутую в docker-контейнере, и плагин Ontop для Protege.

Для дальнейшей работы нам потребуются:

  • Java 8;
  • MySQL Server или Docker-образ с предуставноленной MySQL Server;
  • Docker;
  • Git;
  • Protege 5 или выше (пример протестирован на Protege 5.2, его и рекомендуется использовать);
  • JDBC-драйвер для MySQL (рекомендуется использовать версию Platform Independent);
  • SQL-скрипты для построения базы данных. Пример был протестирован на операционных системах Linux Mint и Parrot Linux.

На Вики Ontop есть пример HelloWorld, где используется СУБД H2, но в данной конфигурации он оказался неработоспособен - плагин Ontop неправильно взаимодействовал с JDBC-драйвером H2 (было проверено на обеих системах разными людьми независимо друг от друга). Тем не менее, ничего не мешает вам попробовать запустить и его - может, у вас получится ;)

Перед началом работы склонируйте репозиторий на локальную машину с помощью git.

1. Развёртывание базы данных

Этот шаг можно реализовать по-своему, например, не использовать Docker или установить другую СУБД - полностью на ваше усмотрение ;)

Мы же продемонстрируем развёртывание СУБД MySQL в Docker-контейнере. Этот же контейнер может быть достаточно быстро развёрнут на любой машине. Находясь в директории со склонированным репозиторием, запустите следующую команду, чтобы создать образ:

docker build -t ontop-mysql .

Запускать контейнер рекомендуется так:

docker run --name ontop-mysql --rm -d -p 3306:3306 ontop-mysql

Вы можете проверить, что база данных запустилась и собралась корректно. Если у вас есть установленный клиент mysql, запустите, чтобы попасть в командную строку СУБД:

mysql -uroot -p111 -h 127.0.0.1

Если у вас нет установленного клиента mysql, вы можете воспользоваться встроенным в docker-контейнер:

docker exec -it ontop-mysql mysql -uroot -p111

Обращаем внимание, что в некоторых случаях непосредственно после запуска контейнера подключение может быть доступно не сразу. Проверьте корректность выполнения запроса:

USE simple_library;
SELECT * FROM books;

Если всё пошло хорошо, то у вас есть полностью готовая база данных о библиотеках, книгах и читателях, которую можно использовать на следующем шаге.

2. Настройка Protege

Для работы с Ontop в Protege необходимо установить соответствующий плагин. Его можно поставить автоматически: File -> Check for plugins, в списке выбрать Ontop ODBA Protege plugin - тогда установится последняя стабильная версия плагина (на момент написания - 1.18). Более новый плагин можно скачать здесь. Его необходимо закинуть в директорию /путь/до/protege/plugins. Работа была проверена на версиях 1.18 и 3.0.0 beta-2.

Второй шаг в настройке: JDBC-драйвер. Для MySQL ссылка дана во введении. Для других СУБД есть отличный список, который находится тут. Далее нужно рассказать Protege, где этот драйвер лежит: File -> Preferences -> JDBC Drivers, кнопка Add. Заполните поля:

  • Description: Connector/J (на самом деле что угодно),
  • Class Name: com.mysql.jdbc.Driver,
  • Driver File (jar): /путь/до/файла/драйвера

Последний шаг: настроить рабочее пространство. Window -> Tabs -> Ontop Mappings и Window -> Tabs -> Ontop SPARQL

3. Запуск и тестирование

Файлы с маппингами и онтологиями прилагаются. Для того, чтобы всё заработало, откройте в Protege файл library_ont.owl. В рабочем пространстве перейдите на вкладку Ontop Mappings -> Datasource manager и проверьте, что все поля заполнены:

Connection URL: jdbc:mysql://localhost/simple_library
Database User: root
Database Password: 111
Driver class: com.mysql.jdbc.Driver

Нажмите на кнопку Test Connection, чтобы проверить соединение с базой.

На вкладке Mapping Manager должен находиться список маппингов. Вы можете проверить валидность SQL-запросов. Щёлкните правой кнопкой мыши по любому блоку и нажмите Validate SQL или Execute SQL.

Если всё в порядке, можно запустить reasoner. Убедитесь, что в меню Reasoner выбран Ontop <версия> и нажмите Start reasoner.

После успешного запуска reasoner'а можно проверить работоспособность системы. Для этого перейдите на вкладку Ontop SPARQL и в поле Query Editor введите любой SPARQL-запрос, например:

PREFIX : <http://www.semanticweb.org/dis/library-ontology#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

select ?name where { 
   ?person rdf:type :Person .
   ?person :firstName ?name .
}

Если всё пошло хорошо, то выведется таблица с именами читателей библиотеки.