По материалам переписок в чате, не могу не поделиться сообщением @Denis Nikiforov
Есть два основных подхода к моделированию:
Подход MOF. Он описан в стандартах OMG, на нём основано много языков моделирования типа UML, BPMN, SysML, ... Например здесь https://www.omg.org/spec/BPMN есть спецификация описывающая BPMN на человеческом английском языке. И есть формальное описание BPMN на языке MOF https://www.omg.org/spec/BPMN/20100501/BPMN20.cmof Т.е. это не какая-то нишевая штука, а вполне распространенная. Если коротко, то MOF - это язык описания языков моделирования
Подход Semantic Web (RDF, OWL, ...). Подход к моделированию с акцентом на концептуальное моделирование, логический вывод фактов
Оба подхода взаимозаменяемые. Например, на языке MOF можно описаать RDF и OWL https://www.omg.org/odm/ И наоборот любую MOF, UML, BPMN и т.д. модель можно описать на языке RDF или OWL.
Как это может выглядеть:
- Например, мы на языке MOF описываем язык для моделирования процессов.
1.1) В метамодели мы определяем метаклассы: процесс, шаг процесса, последовательность выполнения шагов
1.2) Определяем атрибуты. У процесса - название. У шага - название, длительность выполнения и любые другие атрибуты, какие нужны
1.3) Определяем связи. У шага ссылка на родительский процесс. У последовательности выполнения ссылка на предыдущий и следующий шаги
Теперь мы можем создавать экземпляры этой метамодели. Т.е. создать модель конкретного процесса с конкретными шагами
Если нам нужно замапить всё это в rdf, то сначала мапим метамодель в онтологию верхнего уровня.
Онтология будет вида:
процесс - это класс
шаг процесса - это класс
последовательность выполнения шагов - это класс
название - это атрибут
процесс имеет атрибут название
шаг процесса имеет атрибут название
родительский процесс - это объектное свойство (ссылка)
родительский процесс имеет целевой класс процесс
шаг процесса имеет ссылку родительский процесс
...
Т.е. мапинг достаточно тривиальный
- Затем можем мапить конкретные модели, например:
объект
#1 - это процесс
объект
#1 имеет название "процесс закупок"
...
Тут тоже мапинг тривиальный
Если всё так хорошо мапится в RDF, то почему бы для всего не использовать RDF?
Зачем нужны MOF, UML, SysML и т.д. Это отдельная большая тема.
- MOF удобнее для технических моделей, ориентированных на атрибуты, причем если важен порядок этих атрибутов.
- Для MOF моделей удобно генерить документы, код, преобразовывать их в другие модели. Для этого есть много готовых инструментов.
- Для MOF моделей обычно есть удобная графическая нотация, текстовая нотация в виде DSL. Для людей это понятная вещь, куча инструментов. Плюс эти модели обычно основаны на предположении о закрытости мира
https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B4%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1_%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D0%BE%D1%81%D1%82%D0%B8_%D0%BC%D0%B8%D1%80%D0%B0
С другой стороны RDF модели обычно основаны на предположении об открытости мира. Поэтому они хороши для концептуального моделирования, для логического вывода. Эти модели больше ориентированы на описание фактов, а не атрибутов или структуры. В онтологии мы можем указать, что у класса есть атрибуты, но обычно не задаём порядок атрибутов, не ограничиваем этот набор атрибутов. Для концептуального моделирования это отлично, но для моделирования технических систем не всегда удобно. Плюс у RDF/OWL сложно с визуализацией, сложно с генерацией кода из этих моделей и т.д.
В общем это два равнозначных подхода, которые плюс минус один в один мапятся друг в друга
MOF - это не обязательно диаграммы.
Там есть четкая граница между моделью (смысловым, содержательным описанием объекта) и представлениями этой модели. Модель может быть сериализована разными способами: XML, JSON, произвольный DSL. У модели может быть много разных представлений: диаграмма, таблица, дерево, текст
Да, я не спорю, что можно всё сделать через триплеты. Просто для MOF много готовых инструментов
Например, есть язык запросов к моделям https://www.omg.org/spec/OCL/2.4/PDF (аналог SPARQL)
Язык преобразования моделей https://www.omg.org/spec/QVT/1.3/PDF (например, на нём можно описать преобразование логической модели классов в физическую реляционную модель данных)
Язык преобразования моделей в текст https://www.omg.org/spec/QVT/1.3/PDF
Инструмент для создания графических редакторов моделей https://eclipse.dev/sirius/
Инструмент для описания текстовой нотации для моделей https://eclipse.dev/Xtext/
И много всего другого
Тот же Xtext позволяет достаточно легко описать грамматику языка и замапить её на MOF-метамодель. И мы почти даром получаем парсер для этого языка в AST. Только в случае Xtext AST будет представлена не в виде RDF графа, а в виде MOF-модели. И так же мы получаем кодогенератор для этого языка, который преобразует MOF-модель в текст.
Я описывал это более детально в этих статьях (только вместо Xtext на EMFText, что по смыслу то же самое):
https://habr.com/ru/companies/cit/articles/270483/
https://habr.com/ru/companies/cit/articles/271945/
Тут несколько статей (кроме последних трех) про метамодели, MOF и т.д.:
https://habr.com/ru/users/Ares_ekb/articles/
Всё то же самое можно делать и для RDF просто это параллельное пространство моделирования https://www.sfu.ca/\~dgasevic/papers/The_Tao_of_Modeling_Spaces.pdf
со своим подходом, инструментарием