JSON-представление информационных ресурсов
Дата последней модификации документа: 15 июля 2024.
Содержание
- Общие сведения
- Описание графа (инфоресурса)
- Описание вершины (понятия)
- Описание дуги (отношения)
- Описание типа набора дуг (отношений)
- Дополнительный (упрощенный) формат
- Примечания
- Пути
- Спецсимволы
- Примеры
1. Общие сведения
Платформа поддерживает работу с инфоресурсами, представленными в формате JSON. Эта поддержка включает в себя с одной стороны экспорт инфоресурсов в данный формат (при помощи редактора инфоресурсов), а с другой стороны - импорт в фонд пользователя (при помощи редактора инфоресурсов и административной системы). С помощью этого функционала становится возможным ручной (посредством системы управления и редактора инфоресурсов) и автоматический (см. документацию по API экспорта-импота) обмен данными со сторонними программами и платформами.
Платформа предлагает два основных формата json файлов: универсальный и онтологоориентированный (также предлагается дополнительный упрощенный формат - см. раздел 6). Различие между основными форматами заключается в способе именования атрибутов json и способе представления потомков вершины. В универсальном формате атрибуты имеют названия в виде англоязычных слов (title, name, path, comment и т.д.), все потомки вершины описываются под атрибутом successors. В онтологоориентированном формате атрибуты имеют названия в виде англоязычных слов с префиксным символом $ ($name, $path, ...), общий атрибут successors для потомков не используется, а вместо этого потомки группируются по их метавершинам, и каждая такая группа помещаются под отдельный атрибут, имеющий имя, совпадающее с именем (значением) этой метавершины (без префиксного символа $). Цель создания онтологоориентированного формата - более удобная навигация к потомкам определённого типа.
2. Описание графа (инфоресурса)
Описание основных сведений об инфоресурсе выполняется в фигурных скобках {} с помощью следующих атрибутов:
- title (строка) - имя инфоресурса (пример: "title" : "Test Ir")
- path (строка) - путь к инфоресурсу в фонде пользователя, причём конец пути должен совпадать с title (пример: "path" : "user@mailserver.com/Мой Фонд/Test Ir$;")
- date (строка) - дата последней модификации инфоресурса в формате DD.MM.YYYY-hh:mm:ss.mmm (пример: "date" : "05.03.2011-14:45:51.349") (игнорируется при импорте)
- creation(строка) - дата создания инфоресурса в формате DD.MM.YYYY-hh:mm:ss.mmm (пример: "date" : "01.01.2010-12:30:45.678") (игнорируется при импорте)
- owner_id (натуральное число) - идентификатор владельца (пример: "owner_id" : 1) (игнорируется при импорте)
- json_type (строка) - тип json-представления: "json_type" : "universal" - для универсального, "json_type" : "meta" - для онтологоориентированного, "json_type" : "simple" - для упрощенного
- ontology (строка) - путь к инфоресурсу, являющемуся метаинформацией (онтологией) для данного (пример: "ontology" : "user@mailserver.com/Мой Фонд/Test Meta Ir$;")
- context (массив) - задаёт множество контекстных инфоресурсов для данного, где каждый элемент это путь к контекстному инфоресурсу (пример: "context" : [] или "context" : ["user@mailserver.com/Мой Фонд/Test Context Ir1$;", "user@mailserver.com/Мой Фонд/Test Context Ir2$;"])
3. Описание вершины (понятия)
Описание каждой вершины инфоресурса (в том числе ссылок на вершины этого же и сторонних инфоресурсов) выполняется в фигурных скобках {} с помощью следующих атрибутов:
- id (целое положительное ненулевое число) - идентификатор вершины (пример: "id" : 8118561931264111) (игнорируется при импорте)
- name (строка) - имя вершины (используется для описания вершин всех типов, кроме ТЕРМИНАЛ-ЗНАЧЕНИЕ), причём для корня инфоресурса name должно совпадать с title (пример: "name" : "Test Ir")
- value (разные типы) - значение вершины (используется для описания вершин типа ТЕРМИНАЛ-ЗНАЧЕНИЕ) (пример: "value" : 9.3)
- original (строка) - путь к вершине, являющейся оригинальной для данной (используется только если понятие является зависимым клоном другого понятия - понятия-оригинала), причём конец этого пути должен совпадать с name или value у данной вершины (не выводится в случае ссылки - link) (пример: "original" : "Test Ir$/Оригиналы/прототип1;")
- type (строка) - тип вершины, принимает одно из следующих четырёх значений: "КОРЕНЬ", "НЕТЕРМИНАЛ", "ТЕРМИНАЛ-СОРТ", "ТЕРМИНАЛ-ЗНАЧЕНИЕ"
- valtype (строка) - тип значения вершины (только для вершин типа ТЕРМИНАЛ-СОРТ и ТЕРМИНАЛ-ЗНАЧЕНИЕ), принимает одно из следующих значений: "STRING", "INTEGER", "REAL", "BOOLEAN", "DATE", "BLOB"
- meta (строка) - метка метавершины, соответствующей данной вершине, причём для корня инфоресурса она должна совпадать с концом пути в ontology (не указывается в онтологоориентированном формате) (пример: "meta" : "Test Meta Ir")
- comment (строка) - комментарий вершины (не выводится в случае ссылки - link) (пример: "comment" : "в соответствии с ГОСТ Р 70242-2022")
- successors (массив) - множество (возможно, пустое) прямых потомков вершины (только при использовании универсального формата и только для вершин типа КОРЕНЬ и НЕТЕРМИНАЛ, принадлежащих описываемому инфоресурсу и описываемых впервые в его рамках) (вид использования: "successors" : [..., ...], где ... - описание вершины-потомка)
- XXXXX (массив), YYYYY (массив), ZZZZZ (массив), ... - множества (возможно, пустые) прямых потомков вершины, порождённых по метавершинам XXXXX, YYYYY, ZZZZZ, ... соответственно (только при использовании онтологоориентированного формата и только для вершин типа КОРЕНЬ и НЕТЕРМИНАЛ, принадлежащих описываемому инфоресурсу и описываемых впервые в его рамках) (вид использования: "XXXXX" : [..., ...], где ... - описание вершины-потомка)
- link (строка) - путь к вершине, расположенной в стороннем инфоресурсе или использованной в данном инфоресурсе повторно (в последнем случае её первичное описание с возможными потомками уже должно быть дано ранее), причём конец этого пути должен совпадать с name или value у данной вершины (пример: "link" : "Test Ir$ / данные / ранее использованная вершина;")
Примечание: Описание корня инфоресурса выполняется на том же уровне, что и описание самого инфоресурса (в тех же {}).
4. Описание дуги (отношения)
Описание входящего в вершину отношения выполняется в рамках описания этой вершины с использованием следующих атрибутов:
- specifier (строка) - спецификатор отношения, принимающий одно из значений: "copy" (копия), "copymm" (возможное отсутствие), "one" (в точности один), "onemm" (ноль или один), "list" (непустой список), "listmm" (возможно пустой список), "proxy" (пропуск), "seq" (непустая последовательность), "seqmm" (возможно пустая последовательность), "set" (непустое упорядоченное множество), "setmm" (возможно пустое упорядоченное множество) (только для отношений в метаинформации)
- restrictor (строка) - ограничитель отношения, принимающий одно из значений: "ref" (ссылка), "new" (новая), "clone" (клон), "ref-new" (ссылка или новая), "ref-clone" (ссылка или клон), "new-clone" (новая или клон), "all" (любая), "none" (никакая) (только для отношений в метаинформации)
- rcomment (строка) - комментарий у отношения (не указывается для корневой вершины инфоресурса) (пример: "rcomment" : "задавать только положительные числа")
5. Описание типа набора дуг (отношений)
Описание типа набора дуг, исходящих из некоторой вершины (при описании метаинформации), выполняется в рамках описания вершин - прямых потомков, у каждой из которых указывается в качестве метавершины (атрибут "meta") либо "описать вариант альтернативы", либо "описать элемент списка".
6. Дополнительный (упрощенный) формат
Упрощенный формат может быть использован только для экспорта инфоресурса. В таком формате выводятся только метки вершин (имена и значения) и метки их мета-вершин. То есть, не выводятся никакие служебные атрибуты, имена вершин являются именами атрибутов, а содержимое нетерминалов и значения терминалов - значениями атрибутов. Значения атрибута по-умолчанию есть объект и лишь в случае вывода нетерминалов, порожденных по мета-дуге со спецификатором "непустой список" (или "возможно пустой список"), и вывода значений терминалов - значение атрибута есть массив. При этом структура формата схожа с онтологоориентированным форматом - потомки выводятся не единым множеством в качестве значения атрибута successors, а распределены по их метапонятиям.
7. Примечания
7.1. Пути
- путь к инфоресурсу - последовательность местоположений в общем Фонде или фонде пользователя, где разделителем пути является символ прямого слеша "/", в конце ставятся символы "$" и ";" ("$" - окончание пути к инфоресурсу, ";" - окончание пути), а в качестве местоположений используются имена папок, разделов, а также для фонда пользователя - его e-mail и "Мой Фонд" (вид для Фонда: "Раздел / папка 1 / папка 2 / Имя ИР$;", вид для фонда пользователя: "user@mailserver.com / Мой Фонд / папка Х / Имя ИР$;")
- путь к вершине - путь к инфоресурсу, которому принадлежит вершина, совмещённый (через символ прямого слеша "/") с последовательностью местоположений для перехода к этой вершине в инфоресурсе, начиная с его корня сверху-вниз (вид для фонда пользователя: "user@mailserver.com / Мой Фонд / папка Х / Имя ИР$ / вершина под корнем / подвершина / целевая вершина;")
7.2 Спецсимволы
- двойные кавычки - если имя/значене понятия или отдельное местоположение в пути (обычно, также имя/значение вершины в некотором инфоресурсе) содержит двойные кавычки, то их необходимо экранировать с помощью символа обратного слеша "\" (пример: "name" : "\"недовершины\"")
- тройные кавычки - если отдельное местоположение в пути (обычно, имя/значение вершины в некотором инфоресурсе) содержит символ прямого слеша "/", то это местоположение заключается в тройные кавычки - ‴ (пример: "path" : "начало пути / ‴г/л‴ / конец пути")
8. Примеры
Путь есть метаинформация meta test 1, в которой под корнем присутствует нетерминал ~copy ~new Nonterm/1, а под ним терминал-сорт для создания строк ~list ~new-clone TermSort2.
Тогда универсальное json-представление этого инфоресурса выглядит так:
{
"title" : "meta test 1",
"path" : "user@dvo.ru/Мой Фонд/meta test 1$;",
"date" : "01.01.2019-10:00:00.000",
"owner_id" : 1000,
"json_type" : "universal",
"ontology" : "Платформа IACPaaS/Ядро платформы/Язык ИРУО$;",
"context" :
[
],
"id" : 1,
"name" : "meta test 1",
"type" : "КОРЕНЬ",
"meta" : "Язык ИРУО",
"successors" :
[
{
"id" : 2,
"specifier" : "копия",
"restrictor" : "new",
"name" : "Nonterm/1",
"type" : "НЕТЕРМИНАЛ",
"meta" : "описать элемент списка",
"successors" :
[
{
"id" : 3,
"specifier" : "возможно пустой список",
"restrictor" : "new-clone",
"name" : "TermSort2",
"type" : "ТЕРМИНАЛ-СОРТ",
"valtype" : "STRING",
"meta" : "описать элемент списка",
"rcomment" : "",
"comment" : ""
}
],
"rcomment" : "",
"comment" : ""
}
],
"comment" : ""
}
В свою очередь онтологоориентированное json-представление этого инфоресурса выглядит так:
{
"$title" : "meta test 1",
"$path" : "user@dvo.ru/Мой Фонд/meta test 1$;",
"$date" : "01.01.2019-10:00:00.000",
"$owner_id" : 1000,
"$json_type" : "meta",
"$ontology" : "Платформа IACPaaS/Ядро платформы/Язык ИРУО$;",
"$context" :
[
],
"$id" : 1,
"$name" : "meta test 1",
"$type" : "КОРЕНЬ",
"описать элемент списка" :
[
{
"$id" : 2,
"$specifier" : "копия",
"$restrictor" : "new",
"$name" : "Nonterm/1",
"$type" : "НЕТЕРМИНАЛ",
"$описать вариант альтернативы" :
[
],
"$описать элемент списка" :
[
{
"$id" : 3,
"$specifier" : "возможно пустой список",
"$restrictor" : "new-clone",
"$name" : "TermSort2",
"$type" : "ТЕРМИНАЛ-СОРТ",
"$valtype" : "STRING",
"$rcomment" : "",
"$comment" : ""
}
],
"$rcomment" : "",
"$comment" : ""
}
],
"$описать вариант альтернативы" :
[
],
"$comment" : ""
}
По данной метаинформации создан целевой информационный ресурс, где по Nonterm/1 создано путём копирования понятие Nonterm/1, а под ним создана строка val"1 и строка-зависимый клон от врешины Nonterm/1.
Универсальный json для данного инфоресурса выглядит так:
{
"title" : "target 1 by meta test 1",
"path" : "user@dvo.ru/Мой Фонд/target 1 by meta test 1$;",
"date" : "20.01.2019-10:00:00.00",
"owner_id" : 1000,
"json_type" : "universal",
"ontology" : "user@dvo.ru/Мой Фонд/meta test 1$;",
"context" :
[
],
"id" : 11,
"name" : "target 1 by meta test 1",
"type" : "КОРЕНЬ",
"meta" : "meta test 1",
"successors" :
[
{
"id" : 12,
"name" : "Nonterm/1",
"type" : "НЕТЕРМИНАЛ",
"meta" : "Nonterm/1",
"successors" :
[
{
"id" : 13,
"value" : "val\"1",
"type" : "ТЕРМИНАЛ-ЗНАЧЕНИЕ",
"valtype" : "STRING",
"meta" : "TermSort2",
"rcomment" : "",
"comment" : ""
},
{
"id" : 14,
"value" : "Nonterm/1",
"type" : "ТЕРМИНАЛ-ЗНАЧЕНИЕ",
"valtype" : "STRING",
"meta" : "TermSort2",
"original" : "user@dvo.ru/Мой Фонд/target 1 by meta test 1$/‴Nonterm/1‴;",
"rcomment" : "",
"comment" : ""
}
],
"rcomment" : "",
"comment" : ""
}
],
"comment" : ""
}
Онтологоориентированный json для данного инфоресурса выглядит так:
{
"$title" : "target 1 by meta test 1",
"$path" : "user@dvo.ru/Мой Фонд/target 1 by meta test 1$;",
"$date" : "20.01.2019-10:00:00.00",
"$owner_id" : 1000,
"$json_type" : "meta",
"$ontology" : "user@dvo.ru/Мой Фонд/meta test 1$;",
"$context" :
[
],
"$id" : 11,
"$name" : "target 1 by meta test 1",
"$type" : "КОРЕНЬ",
"Nonterm1" :
[
{
"$id" : 12,
"$name" : "Nonterm/1",
"$type" : "НЕТЕРМИНАЛ",
"TermSort2" :
[
{
"$id" : 13,
"$value" : "val\"1",
"$type" : "ТЕРМИНАЛ-ЗНАЧЕНИЕ",
"$valtype" : "STRING",
"$rcomment" : "",
"$comment" : ""
},
{
"$id" : 14,
"$value" : "Nonterm/1",
"$type" : "ТЕРМИНАЛ-ЗНАЧЕНИЕ",
"$valtype" : "STRING",
"$original" : "user@dvo.ru/Мой Фонд/target 1 by meta test 1$/‴Nonterm/1‴;",
"$rcomment" : "",
"$comment" : ""
}
],
"$rcomment" : "",
"$comment" : ""
}
],
"$comment" : ""
}