Цель данной работы - ознакомление и получение практических навыков в развертывании решения для интеграции реалиционных данных на основе онтологий.
Задача:
-
Выбрать предметную область. Примером предметной области могут быть базы данных 2-х библиотек с информацией о книгах и авторах, к которым нужно обеспечить доступ через единый интерфейс запросов.
-
Развернуть 2 реалиционные БД и наполнить их данными в соответствии с требованиями:
- Каждая из БД должна иметь отличную от другой схему данных, т.е. разные наименования таблиц и полей, а так же разная структура таблиц,
- Данные в обоих БД не должны полностью дублироваться.
-
Разработать онтологию для предметной области. При разработке онтологии необходимо определить компетентностные вопросы.
-
Развернуть Ontop и подключить его к БД.
-
Настроить маппинги онтологии на схемы данных БД с помощью соответствующего плагина к Protege.
-
Подговить SPARQL запросы к Ontop, в соответствии с определенными ранее компетентностными вопросами.
Для демонстрации возможностей системы 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
.
Этот шаг можно реализовать по-своему, например, не использовать 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;
Если всё пошло хорошо, то у вас есть полностью готовая база данных о библиотеках, книгах и читателях, которую можно использовать на следующем шаге.
Для работы с 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
Файлы с маппингами и онтологиями прилагаются.
Для того, чтобы всё заработало, откройте в 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 .
}
Если всё пошло хорошо, то выведется таблица с именами читателей библиотеки.