Текстовое представление информационных ресурсов

Содержание

1. Введение

Текстовое представление информационных ресурсов (далее ТПИР) используется для следующих целей: На основе их типа (уровня, согласно метафоре анкетирования) информационные ресурсы создаются (описываются) двумя способами: Таким образом, информационный ресурс Язык ИРУО (прямо или косвенно) является метаинформацией для всех информационных ресурсов.

2. Общий формат текстового представления информационных ресурсов

ТПИР хранится в текстовых файлах в UTF-8 кодировке. Имя файла может быть произвольным, однако рекомендуется использовать расширение ".ir" (inforesource) для ТПИР с описанием одного инфоресурса и ".irs" (inforesources) для ТПИР с описанием нескольких инфоресурсов. В начале файла могут быть одна или несколько директив порождения. В одном файле может быть описано от одного до нескольких инфоресурсов как языке текстового представления метаинформации, так и языке текстового представления объектной информации.

Формат файла следующий:
директива1;
директива2;
...
 
инфоресурс1
инфоресурс2
инфоресурс3
...

Неокторые правила: Отметим также, что корневое понятие задается самим определением информационного ресурса, т.е., в таком инфоресурсе:
<название ресурса> {
  ...
}
будет автоматически создано корневое понятие с именем "<название ресурса>".

Пример.
текущий раздел : Платфлома IACPaaS / Ядро платформы ;
 
# Создать информационный ресурс "Структура пользователей и сервисов"
Структура пользователей и сервисов {
    ~set пользователь{
        ~set сервис {
           ~copy решатель { ~one -> Платфлома IACPaaS / Ядро платформы / Структура решателя задач$ ; }
           ~copy входные инфоресурсы { ~set -> инфоресурс$ ; }
           ~copy выходные инфоресурсы { ~set -> инфоресурс$ ; }
           ~one раздел по умолчанию [str]
        }
    }
}

В этом примере одна директива – "текущий раздел : Проблемно-независимая предметная область / ИАС" и описание на языке текстового представления метаинформации одного инфоресурса "Структура пользователей и сервисов" с одноименным корневыем понятием ("Структура пользователей и сервисов").

3. Директивы порождения

На данный момент существует только одна директива, задающая контекст порождения:
текущая папка: <путь к папке>;

Где <путь к папке> имеет вид в случае пути в Общем Фонде: <название раздела> / {<название папки>}*, или в личном фонде: <e-mail> / Мой Фонд / {<название папки>}* (используется разделитель "/", папки могут отсутствовать). После этой директивы к коротким названиям инфоресурсов анализатор текстового представления информационных ресурсов автоматически добавляет префикс
<путь к разделу> /

Данная директива служит для того, чтобы упростить описание нескольких инфоресурсов в одном файле: если описывается несколько ресурсов из одного раздела, то путь к этому разделу можно опускать, предварительно задав его в этой директиве. Следовательно, такая запись:
Физика / Механика / Свойства материалов {
  ...
}
аналогична следующей:
текущий раздел: Физика / Механика
 
Свойства материалов {
  ...
}

Директива действует и на короткие названия инфоресурсов внутри описаний информационных ресурсов.

4. Язык текстового представления метаинформации

4.1. Общий синтаксис

Синтаксис для описания информационных ресурсов, представляющих метаинформацию, имеет следующий вид:
<полное имя инфоресурса> <тип набора отношений> { <содержание метаинформации> }
где Каждое <описание понятия>, в свою очередь, имеет вид:

<тип отношения> <понятие>

где Нетерминальное понятие (<нетерминал>) описывается следующим образом:
<имя> <тип набора отношений> { <содержание метаинформации> } #синтаксис описания нетерминального понятия
где <имя> — имя нетерминального понятия.

Терминальное понятие, описывающее сорт (<терминал-сорт>), представляется следующим способом:
<имя>[<сорт>] #синтаксис для представления терминального понятия, описывающего сорт
где <имя> — имя терминального понятия, описывающего сорт; <сорт> — один из базовых сортов Языка ИРУО: Терминальное понятие, описывающее значение (<терминал-значение>), представляется следующим способом:
[<значение>] #синтаксис для представления терминального понятия, описывающего значение
где <значение> — значение в одном из следующих форматов: Ссылка на понятие (<ссылка>) — описывает синтаксис создания ссылки на понятие из этого же или другого информационного ресурса.

4.2. Наборы отношений

<тип набора отношений> — ~ALT | λ.

Пустая строка символов (λ) означает то, что для создания наборов отношений (вместе с понятиями) от некоторого текущего нетерминала к его содержанию используется конструкция (примитив) Языка ИРУО описать множество, т.е. созданные понятия и отношения образуют "непустое множество". Это означает, что при генерации объектной информации использование некоторого понятия (и отношения к нему) в качестве прототипа для порождения, остальные понятия из этого множества остаются доступными для использования их в качестве прототипов для порождения понятий и/или отношений в объектной информации.

Ключевое слово "~ALT" означает то, что для создания наборов отношений (вместе с понятиями) от некоторого текущего нетерминала к его содержанию используется конструкция (примитив) Языка ИРУО описать множество альтернатив, т.е. созданные понятия и отношения образуют "непустое множество альтернатив". Это означает, что при генерации объектной информации использование некоторого понятия (и отношения к нему) в качестве прототипа для порождения, остальные понятия из этого множества становятся не доступными для использования их в качестве прототипов для порождения понятий и/или отношений в объектной информации.

Пример.
Пусть есть метаинформация:
M {
  a {
    aa[str]
    ab[bool]
    ac[real]
  }
  b ~ALT {
    ba[int]
    bb[date]
    bc[str] 
  }
}

В этой метаинформации есть корневое понятие M, которое определяется через два нетерминальных понятия: a и b. Значит, есть два метаотношения M–>a и M–>b – оба со спецификатором ~copy ("копия"). В данном случае в информации по этим метаотношениям могут быть порождены два нетерминала (и соответственно два отношения) с именами a и b. Поэтому при порождении метаотношения может задаваться только имя метапонятия:
G <<< M { # создается информация G, у которой метаинформация M, корневое понятие этой информации будет иметь имя "G"
  a { ... } # по метаотношению M->a создан нетерминал "a" (с таким же именем, но в уже в информации G) и отношение G->a;
  b { ... } # по M->b создан нетерминал "b" и отношение G->b; 
}

Продолжим порождение по содержанию метапонятия "a". Оно связано набором отношений к понятиям "aa", "ab", "ac" "непустое множество" (поскольку перед содержанием понятия "a" не используется ключевое слово "~ALT"). Поэтому выполняется порождение по всем трем метаотношениям — a–>aa, a–>ab и a–>ac, причем (как это видно в примере ниже) не обязательно в порядке, заданном в метаинформации M:
G <<< M {
  a {
    aa["значение1"]
    ac[3.14]
    ab[true]
  }
  b { ... }
}

Теперь рассмотрим порождение по содержанию метапонятия "b". Оно связано набором отношений к понятиям "ba", "bb" и "bc" "непустое множество альтернатив" (поскольку перед содержанием понятия "b" используется ключевое слово "~ALT"). Поэтому можно породить только одно из метаотношений b–>ba, b–>bb, b–>bc; при попытке породить другое произойдет ошибка. Породим, например, bb:
G <<< M {
  a { ... }
  b {
    bc [15.05.2010-10:12:35.000]
  }
}

Вот порожденная объектная информация целиком:
G <<< M {
  a {
    aa["значение1"]
    ac[3.14]
    ab[true]
  }
  b {
    bb [15.05.2010-10:12:35.000]
  }
}

4.3. Типы отношений

<тип отношения> — Тип отношения определяет спецификатор множественности (спецификатор) конкретного отношения между двумя понятиями (устанавливается перед именем/значением понятия, входящего в содержание некоторое нетерминального понятия или корневое понятия). Семантика каждого спецификатора подробно описана в разделах Отношения семантической сети и Описание соответствия между метаинформацией и информацией документа "Описание логической структуры информационного ресурса".

Ограничения на значения спецификаторов для разных типов понятий: Значения спецификаторов по умолчанию (в случае, когда спецификатор перед понятием не указан):

Пример.
(здесь и далее не будем указывать те спецификаторы отношений, которые по умолчанию могут быть опущены):
# История болезней – это очень упрощенная метаинформация для описания журналов болезней, используемая
# в медицинской практике
Истории болезней { # Создать информационный ресурс "Истории болезней", с корнем "Истории болезней"
                   # Указан спецификатор "~set", поэтому корень будет связан с нетерминалом
                   # "История болезни" отношением-множеством.
                   # Это значит, что в информации можно порождать сколько угодно экземпляров понятия
                   # "История болезни".
  ~set История болезни {
    # История болезни включает два нетерминала: "Пациент" и "Динамика", а также терминал-сорт
    # "Жалоба".
    # Другими словами, история болезни – это сведения о пациенте и жалобе при поступлении, а также
    # история его наблюдения, задаваемая нетерминалом "Динамика".
    Пациент {
      Имя [str]
      Возраст [str]
    }
    Жалоба[str]
    Динамика { # "Динамика" – это набор событий во времени
      ~set Событие {
        Время [date]
        Описание события [str]
      }
    }    
  }
}

4.4. Ограничители

Каждая дуга в орграфе метаинформации имеет ограничитель. Значениями ограничителя могут быть «порождение», «ссылка», «порождение или ссылка». Если значение ограничителя есть:
  1. ~new («порождение»), то ответом на вопрос анкеты является новый экземпляр понятия (в орграфе информации дуга входит в новую вершину);
  2. ~ref («ссылка»), то ответом на вопрос анкеты является подходящий экземпляр понятия, который уже создан при ответе на другой из вопросов анкеты (в орграфе информации дуга входит в уже существующую вершину);
  3. ~clone («зависимый клон»), то ответом на вопрос анкеты является новый экземпляр понятия (в орграфе информации дуга входит в новую вершину), метка которого зависит от метки другого понятия;
  4. ~new-ref («ссылка») - см. соответствующие ~new и ~ref описанные выше случаи, возможен тот или другой;
  5. ~new-clone («ссылка») - см. соответствующие ~new и ~clone описанные выше случаи, возможен тот или другой;
  6. ~ref-clone («ссылка») - см. соответствующие ~clone и ~ref описанные выше случаи, возможен тот или другой;
  7. ~all («порождение или ссылка»), то возможен любой из этих вариантов.

4.5. Ссылки

4.5.1. Общий синтаксис

<ссылка>  — <тип ссылки><полный путь к понятию>;
где
<указатель информационного ресурса><путь к понятию>
где где

4.5.2. Типы ссылок

 =>
Созданная в метаинформации ссылка такого типа позволяет порождать в объектной информации понятия и отношения к ним обычным образом: интерпретируя <путь к понятию> так, словно он описывает обычное отношение в данной метаинформации (которое можно использовать как отношение-прототип при порождении объектной информации).
 ->
Созданная в метаинформации ссылка такого типа позволяет указать, что при порождении объектной информации нужно обязательно сделать ссылку на некоторый уже существующий фрагмент (другого или текущего) инфоресурса. Другими словами, такая запись интерпретируется как необходимость создать ссылку на информацию, порожденную по фрагменту, на который создана ссылка, описываемая в <путь к понятию> в метаинформации.

Пример.
Пусть есть метаинформация "Сведения о пациенте" и по ней порождена информация о конкретных пациентах. Кроме того, есть инфоресурс "Диагноз", при порождении которого нужно сослаться на некоторого пациента (а не заново формировать сведения о нем).
Сведения о пациенте {
  ...
}
 
Диагноз {
  -> Сведения о пациенте $ ; # При порождении этого отношения будет сделана ссылка на
                              # описание конкретного пациента.
  ...
}
 ~>
Ссылка данного типа, созданная в метаинформации, при порождении объектной информации имеет ту же семантику, что и отношение со спецификатором ~proxy.

4.5.3. Специальные ссылки

5. Язык текстового представления объектной информации

5.1. Общий синтаксис

Синтаксис для описания информационных ресурсов, представляющих объектную информацию, имеет следующий вид:
<полное название объектной информации> <<< <полное название метаинформации> { <содержание объектной информации> }
где <порождение понятия>+ (т.е. это множество описаний порождений прямых понятий-потомков и отношений с ними).

<порождение понятия> — описание порождения нетерминального понятия, либо терминального понятия, описывающего значение, либо ссылки на понятие в соответствии с одним из правил порождения или переход к формированию фрагмента (подсети) метаинформации:

<порождение нетерминала> | <порождение терминала-значения> | <порождение ссылки> | <формирование фрагмента метаинформации>

5.2. Порождение нетерминала

<порождение нетерминала> —
<имя метапонятия> { <содержание объектной информации> } | <имя метапонятия> [<имя понятия>] { <содержание объектной информации> }

Альтернатива 1:
<имя метапонятия> { <содержание объектной информации> } #синтаксис для порождения нетерминального понятия
#в объектной информации по понятию-прототипу <имя метапонятия> с именем <имя метапонятия>
используется только если спецификатор метаотношения есть ~copy ("копия") или ~copymm ("возможное отсутствие") - см. документ "Описание логической структуры информационного ресурса, правило порождения 1).

Здесь <имя метапонятия> — имя нетерминального понятия из метаинформации, являющегося понятием-прототипом для порождаемого в объектной информации нетерминального понятия (имя порождаемого понятия в этом случае будет совпадать с <имя метапонятия>).

Пример
Пусть есть метаинформация с корневым понятием M, которое определяется через нетерминальное понятие A. Значит, есть метаотношение M –> A, которое по умолчанию имеет спецификатор ~copy ("копия"):
M {
  A {
    ...
  }
}

В данном случае в информации с корневым понятием G по этому метаотношению может быть порожден один нетерминал с именем A (и соответственно одно отношение G –> A). При порождении по метаотношению задается только имя метапонятия:
G <<< M { # создается информация G, у которой метаинформация M, корневое понятие информации будет иметь имя "G"
  A { ... } # по метаотношению M –> A создан нетерминал "A" (с таким же именем, но в уже в информации G) и отношение G –> A;
}


Альтернатива 2:
<имя метапонятия> [<имя понятия>] { <содержание объектной информации> } #синтаксис для порождения нетерминального понятия
#в объектной информации по понятию-прототипу <имя метапонятия> с именем <имя понятия>
используется, если спецификатор метаотношения отличается от ~copy ("копия") или ~copymm ("возможное отсутствие") (см. Модель порождения информации по метаинформации).

Здесь

Пример
Пусть есть метаинформация с корневым понятием M, которое определяется через нетерминальное понятие A. Метаотношение M –> A имеет спецификатор ~set ("непустое множество"):
M {
  ~set A {
    ...
  }
}

В данном случае в информации с корневым понятием G по этому метаотношению могут быть порождены один и более нетерминалов с задаваемым именем (и соответственно множество отношений вида G –> <название понятия>). При порождении по метаотношению задается имя порождаемого понятия:
G <<< M { # создается информация G, у которой метаинформация M, корневое понятие этой информации будет иметь имя "G"
  A [a] { ... } # по метаотношению M –> A в информации G создан нетерминал "a" и отношение G –> a;
  A [b] { ... } # по метаотношению M –> A в информации G создан нетерминал "b" и отношение G –> b;
  ...
}

Примечание:
Если в метаинформации метапонятием является корневое понятие информационного ресурса Язык ИРУО, то в объектной информации для указания метапонятия используется ключевое слово "инфоресурс".

Пример
Метаинформация:
A { ~set -> Предметно-независимая предметная область / Языки / Язык ИРУО$; }

Объектная информация:
  A
  {
    инфоресурс [-> ИР1$;] # ссылка на корневое понятие информационного ресурса ИР1 
    инфоресурс [-> ИР2$ /a;] # ссылка на понятие-потомка корня информационного ресурса ИР2
  }

5.3. Порождение терминала-значения

<порождение терминала-значения> —
<имя метапонятия>[<значение>] | [<значение>]

Альтернатива 1:
<имя метапонятия>[<значение>] #синтаксис для порождения терминального понятия, описывающего значение,
#в объектной информации по терминальному понятию-прототипу с именем <имя метапонятия>, описывающему сорт, со значением <значение>
используется, если порождение выполняется по метаотношению, конечным понятием которого является терминальное понятие, описывающее сорт (см. Модель порождения информации по метаинформации).

Здесь

Пример
Пусть есть метаинформация с корневым понятием M, которое определяется через терминальное понятие-сорт A строкового типа. Метаотношение M –> A по умолчанию имеет спецификатор ~one ("в точности один"):
M {
  A[str]
}

В данном случае в информации с корневым понятием G по этому метаотношению может быть порожден один терминал с заданным значением строкового типа (и соответственно отношение вида G –> <значение понятия>). При порождении по метаотношению задается значение порождаемого понятия:
G <<< M { # создается информация G, у которой метаинформация M, корневое понятие этой информации будет иметь имя "G"
  A ["b"] # по метаотношению M –> A в информации G создан терминал-значение "b" и отношение G –> "b";
}


Альтернатива 2:
[<значение>] #синтаксис для порождения в объектной информации терминального понятия, описывающего значение, со значением <значение>
# по терминальному понятию-прототипу, описывающему значение, со значением <значение>
используется, если порождение выполняется по метаотношению, конечным понятием которого является терминальное понятие, описывающее значение со значением <значение> (см. Модель порождения информации по метаинформации).

Здесь <значение> — значение (см. конец раздела) терминального понятия из метаинформации, описывающего значение и являющегося понятием-прототипом для порождаемого в объектной информации терминального понятия, описывающего значение (значение порождаемого понятия в этом случае будет совпадать с <значение>).

Пример
Пусть есть метаинформация с корневым понятием M, которое определяется через два терминальных понятия-значения — "abc" строкового типа и 3.14 вещественного типа. Значит, есть два метаотношения — M –> "abc" и M –> 3.14, каждое из которых имеет спецификатор ~copy ("копия") (он подразумевается по умолчанию и в примере опущен):
M {
  ["abc"]
  [3.14]
}

В данном случае в информации с корневым понятием G по этим метаотношениям может быть порождено соответственно два терминала-значения с такими же значениями, как в метаинформации (и соответственно два отношения G –> "abc" и G –> 3.14). При порождении по метаотношениям указываются значения соответствующих метапонятий:
G <<< M { # создается информация G, у которой метаинформация M, корневое понятие этой информации будет иметь имя "G"
  ["abc"] # по метаотношению M –> "abc" создан терминал-значение "abc" (с таким же значением и типом, но в уже в информации G) и отношение G –> "abc";
  [3.14] # по метаотношению M –> "abc" создан терминал-значение 3.14 (с таким же значением и типом, но в уже в информации G) и отношение G –> 3.14;
}

5.4. Порождение ссылки

<порождение ссылки> —
<имя метапонятия> [ -> <полный путь к понятию>; ]
где
Ссылка в объектной информации используется тогда, когда нужная порожденная структура (подсеть) уже есть в фонде. В этом случае вместо порождения можно указать ссылку на этот фрагмент.

Если нужно сослаться на корневое понятие Языка ИРУО, то, чтобы не указывать полный пусть к этому инфоресурсу, можно использовать ключевое слово инфоресурс$". Таким образом, ссылка вида
<имя метапонятия> [ –> инфоресурс$ ; ]
является ссылкой на корневое понятие Языка ИРУО.

Пример
Пусть есть метаинформация M:
M {
  ~one a { ... }
}

Вместо порождения метаотношения M–>a можно сделать ссылку:
G <<< M {
  a [ -> название другого ресурса $ путь к понятию в другом ресурсе ; ]
}


В этом случае будет порождена объектная информация G, а по метаотношению M–>a будет порождено отношение "G –> другой ресурс $ путь к понятию в другом ресурсе".

5.5. Переход к формированию фрагмента метаинформации

<формирование фрагмента метаинформации> —
! { <содержание метаинформации> }
где <содержание метаинформации> — описание понятий и отношений инфоресурса на языке текстового представления метаинформации.

Если в метаинформации после некоторого метапонятия стоит ссылка на Язык ИРУО вида: объектной информации при порождении по такой ссылке необходимо указать на то, что в данном месте осуществляется переход к формированию произвольного фрагмента метаинформации (внутри объектной информации) на языке текстового представления метаинформации. Для этого используется символ "!".

Пример
M { # метаинформация со ссылкой на "Язык ИРУО"
  a { * } #ссылка на корневое понятие "Язык ИРУО"
}

Порождение:
G <<< M {
  a !{
     нетерминал1 {
       k [int]
       l [str]
       m [real]
     }
     [25] # терминал-значение
     терм-сорт1 [int]
  }
}

6. Импорт-экспорт

Для импорта инфоресурсов из файлов формата ТПИР используется внутрений платформенный класс (недоступен через API). Его методы применяются платфомой при запуске в исходное состояние (в момент начала работы нового экземпляра) - для импорта базовых инфоресурсов в пустое хранилище. Импорт пользовательских инфоресурсов в данном формате в настоящее время не предусмотрен (доступен только для инфоресурсов в формате JSON).

Экспорт инфоресурсов в формат ТПИР предназначен для их публикации в различных документах. Это более компактный формат, по сравнению с форматом JSON.