О модели - SmartCityGraph/OWL2ERD GitHub Wiki

Структура данных:

Основными элементами онтологии являются дороги и элементы освещения, связанные с помощью вспомогательного класса "Дорожное освещение". Есть определённые дороги с определёнными характеристиками, которые имеют некоторое количество элементов освещения определённого типа. В соответствии с этим соотношением определяется - обеспечены дороги освещением или нет. Также в онтологию добавлены города, в которых находятся эти дороги, графики наружного освещения этих городов, геометрии для отображения местоположения и границ дорог и городов, а также интервалы времени, во время которых освещаются дороги.

Схема отношений индивидов в онтологии:

Итоговая иерархия классов в программе Protege:

Требования к исходным данным:

Свойство "ERDname" отражает альтернативное имя сущности в онтологии, используемое в реляционной базе данных. Свойство "areDomains" отражает дополнительную область определения для отношения. Данное свойство необходимо указывать для каждой дополнительной области определения отдельно. Свойство "notConvertable" отражает верхнеуровневые классы, которые не нужно конвертировать в таблицы. Свойство "reverseProperty" используется для отражения случаев, когда область определения и область значения для объектного отношения необходимо поменять местами в итоговой реляционной базе данных.

При составлении онтологии необходимо учитывать, что только топ-классы преобразуются в таблицы. Подклассы будут преобразованы в свойство category или аналогичное ему для их родительских классов. Все имена сущностей должны начинаться с префикса. В противном случае они должны иметь ERDname. По умолчанию объектные отношения привязывают к классу domain класс range, таким образом, класс domain получает характеристики класса range. Для обратного свойства есть свойство "reverse property".

Алгоритм работы кода:

Программа открывает файл онтологии в формате ttl, он считывает все классы, и отношения, и создаёт на их основе объекты для последующей работы (в формате классов, но сейчас в формате массивов). Считывание происходит путём нахождения ключевого вхождения подстроки, с которой начинается описание практически всех сущностей в онтологии. После этого считываются все последующие строки и на их основе заполняются свойства этих сущностей до тех пор, пока программа не считывает вхождение окончания сущности.

После идёт формирование связей между классами и отношениями. Для этого все литеральные сущности присваиваются к классам, к которым они относятся. Затем связываются все классы таким образом, чтобы все литеральные сущности подклассов присваивались топовым классам. После идёт связь между классами с помощью объектных отношений. Связи между классами таблиц оформляются в виде id-свойства одной из таблиц по отношению к другой. Связь между классом таблицы и классом не таблицы формируется путём передачи литеральных свойств последнего к первому.

После создаётся вывод для каждого класса таблицы, у него заполняется необходимое имя (из онтологии, или иное, если указано), все стандартные свойства, а также нестандартные - литеральные и объектные отношения. На основе данного вывода впоследствии можно создавать ERD диаграммы и реляционные базы данных. Также, во время работы программы, можно указать имя для свойства категории/типа/подкласса в таблицах.

Выходные данные

Выходные данные программы находятся в двух файлах - documentation.txt и tables.sql.

documentation.txt - содержит все классы и отношения вместе с их комментариями в простом текстовом формате.

tables.sql - содержит команды для создания sql-таблиц следующего формата: CREATE TABLE table_name ( - название таблицы id_name INT , - название свойства индивидуального идентификатора label TINYTEXT , - свойство имени объекта category TINYTEXT , - свойство категории (если есть) PREFIX_property_name TEXT , - пример дополнительного свойства таблицы ... PRIMARY KEY(id_name) - установка свойства индивидуального идентификатора как основного ключа );