Проект как RDF
Текст может содержать неточности, устаревшие данные или технические ошибки. Пожалуйста, проверяйте критически важную информацию перед использованием.
Содержимое проекта доступно в виде RDF: объект становится ресурсом, атрибут и ссылка — триплетом, модель — именованным графом. У проекта есть своя конечная точка SPARQL, а модель можно скачать в Turtle или TriG.
Скачайте модель
Щёлкните правой кнопкой мыши по модели в навигаторе моделей, откройте подменю Скачать и выберите RDF Turtle или RDF TriG.
Триплеты в обоих файлах одинаковы. Turtle записывает их плоско и объявляет префикс для каждой используемой метамодели. TriG помещает их в именованный граф, IRI которого совпадает с URL скачивания модели — тем же, которым модель обозначена в конечной точке SPARQL.
В начале файла стоит заголовок онтологии: модель объявлена как owl:Ontology, а
метамодели, от которых она зависит, перечислены через owl:imports.
Как выглядят объекты
Объект — ресурс, названный по своему идентификатору:
urn:uuid:8b1f0d38-6c40-4a1e-9a20-2f8b7d1c5e44
Триплет rdf:type называет конкретный класс объекта. IRI класса состоит из
пространства имён метамодели, символа # и имени класса:
http://www.archimatetool.com/archimate#BusinessActor
В IRI свойства добавляется класс, который объявляет признак, точка и имя
признака. Имя есть у BusinessActor, но объявлено оно в Nameable:
?actor archimate:Nameable.name "Customer" .
То же со связями: source и target объявлены в ArchimateRelationship
независимо от конкретного типа связи.
Атрибут даёт триплет с литералом, ссылка — триплет с IRI целевого объекта. Вложенность записывается ссылками, поэтому дерево папок модели — цепочка триплетов. Триплеты появляются только у заданных признаков: производные и временные не записываются.
Запросы к проекту
У каждого проекта есть конечная точка SPARQL 1.1, работающая по всем его моделям:
curl -X POST https://architeezy.com/api/projects/$PROJECT/sparql \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/sparql-query" \
--data 'SELECT DISTINCT ?g WHERE { GRAPH ?g { ?s ?p ?o } }'
Этот запрос перечисляет графы — по одному на модель. Сохраните их IRI:
обновление обязано указывать граф. Запрос без GRAPH читает все модели проекта.
Поддерживаются все четыре формы запроса. Тип ответа зависит от формы: SELECT
даёт application/sparql-results+json, ASK — логическое значение в JSON,
CONSTRUCT и DESCRIBE — Turtle.
Параметр ?inference=rdfs выполняет запрос над графом с выведенными триплетами,
поэтому запрос по надтипу находит и экземпляры подтипов.
Анонимный запрос отклоняется с кодом 401. Недоступный проект отвечает 404 —
так же, как несуществующий.
Обновления
Обновления отправляют на отдельный адрес,
POST /api/projects/<projectId>/sparql/update с типом содержимого
application/sparql-update. Успешное обновление отвечает кодом 204.
Триплеты в INSERT и DELETE должны находиться внутри GRAPH: обновление с
триплетами в графе по умолчанию отклоняется с кодом 400.
PREFIX archimate: <http://www.archimatetool.com/archimate#>
DELETE {
GRAPH <https://architeezy.com/api/models/acme/landscape/1.0.0/core/content> {
?actor archimate:Nameable.name ?old .
}
}
INSERT {
GRAPH <https://architeezy.com/api/models/acme/landscape/1.0.0/core/content> {
?actor archimate:Nameable.name "Customer" .
}
}
WHERE {
GRAPH <https://architeezy.com/api/models/acme/landscape/1.0.0/core/content> {
?actor a archimate:BusinessActor ;
archimate:Nameable.name ?old .
FILTER (str(?old) = "Client")
}
}
Модели, графы которых изменились, записываются обратно в репозиторий, и
изменение появляется в открытых редакторах. Остальные модели не затрагиваются.
Обновление модели без прав на запись отклоняется с кодом 403.
Загрузка RDF
Команда Загрузить модель в меню проекта читает .ttl как Turtle, .trig —
как TriG. То же содержимое отправляют через API запросом
PUT /api/models/<id>/content?format=ttl.
При загрузке RDF отображается на метамодель, которая уже есть в репозитории:
каждый IRI rdf:type разрешается в класс, каждый IRI предиката — в признак
объявляющего класса. Новые классы и свойства не создаются, поэтому файл должен
соответствовать метамодели, а метамодель — быть доступной проекту. Утверждение с
неразрешённым классом или свойством пропускается, объект абстрактного класса не
создаётся.
Идентификаторы сохраняются: ресурс urn:uuid:<id> загружается как объект с тем
же идентификатором, поэтому выгрузка и загрузка дают исходные объекты, а не их
копии.
Метамодель как онтология
Метамодель выгружается в виде онтологии, описывающей данные. Для этого к её
адресу добавляют /owl:
GET /api/models/<scope>/<project>/<version>/<model>/owl?format=ttl
GET /api/predefined-metamodels/<id>/owl?format=ttl
Классы становятся ресурсами с rdfs:label и rdfs:subClassOf. Атрибуты и
ссылки становятся свойствами с rdfs:domain и rdfs:range; однозначный признак
объявляется ещё и owl:FunctionalProperty. Противоположные ссылки связываются
через owl:inverseOf, идентифицирующий атрибут — owl:hasKey. Перечисления
сохраняют литералы, а тип данных, совпадающий со стандартным типом XML Schema,
объявляется его owl:equivalentClass: String соответствует xsd:string.