<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Отображение графовой модели данных в каноническую объектно-фреймовую информационную модель при создании систем интеграции неоднородных информационных ресурсов*</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Москва ssa@ipi.ac.ru</string-name>
        </contrib>
      </contrib-group>
      <fpage>85</fpage>
      <lpage>94</lpage>
      <abstract>
        <p>В работе рассматривается отображение модели данных атрибутированных графов в каноническую информационную модель данных для создания систем виртуальной или материализованной интеграции неоднородных информационных ресурсов СУБД, Веб-сервисов и т.д.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Целью работы является создание
обоснованной теоретической базы для
интеграции ресурсов, основанных на
графовых моделях.</p>
      <p>
        Роль данных в различных областях деятельности
человека – научных исследованиях,
здравоохранении, образовании, промышленности и
т.д. – непрерывно растет в последние годы.
Укрепляется новая парадигма в науке и
информационных технологиях, связанная с
интенсивным использованием данных – так
называемая четвертая парадигма [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]. Развиваются
новые информационные технологии, в которых
данные становятся доминирующим фактором,
новые подходы к концептуализации, организации и
реализации информационных систем. При этом
требуется не только создание методов и средств
оперирования данными, объемы которых выходят за
рамки возможностей современных технологий баз
данных, но и разработка новых подходов,
позволяющих справляться с разнообразием массово
и хаотично развивающихся языков и моделей
      </p>
      <p>Материализованная интеграция предполагает
создание хранилища данных, в которое загружаются
интегрируемые ресурсы. При этом данные из схемы
ресурса преобразуются в общую схему хранилища.</p>
      <p>
        Виртуальная интеграция обычно предполагает
создание предметных посредников, образующих
промежуточный слой между пользователем
(приложением) и неоднородными
информационными ресурсами. Данные из ресурсов
не материализуются в посредниках: доступ к
данным осуществляется при помощи запросов к
посреднику в терминах федеративной схемы
посредника. Эти запросы переписываются в
частичные запросы над информационными
ресурсами, затем исполняются на ресурсах.
Результаты частичных запросов объединяются и
выдаются пользователю также в терминах
федеративной схемы [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
      </p>
      <p>
        Унификацией модели данных ресурса называется
ее отображение в каноническую информационную
модель (служащую общим языком в среде
разнообразных моделей ресурсов), сохраняющее
информацию и семантику операций языка
манипулирования данными (ЯМД) [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ].
Унификация моделей ресурсов является
необходимым предусловием материализованной
или виртуальной интеграции ресурсов, т.к.
семантические отображения, связывающие
федеративную схему и схемы ресурсов, нужно
проводить в единой (канонической) модели [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
В ранее проведенных исследованиях изучались
вопросы унификации NoSQL-моделей [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ] и
моделей, основанных на многомерных массивах
[
        <xref ref-type="bibr" rid="ref22">22</xref>
        ].
      </p>
      <p>
        В данной статье рассматривается еще один
важный класс моделей данных – графовые модели.
Исследования графовых моделей начались в
середине 1980-х годов. Математическими
основаниями для них послужила теория графов, а
наибольшее влияние оказали так называемые
семантические модели (например, модель
«сущность-связь») [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Целью графовых моделей
было преодоление ограничений, налагаемых
традиционными моделями данных, связанных с
представлением исходных графовых структур
данных.
      </p>
      <p>
        Основными отличительными чертами графовых
моделей данных являются следующие [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]:
 данные и/или схема данных представляются в
виде графов или структур данных,
обобщающих понятие графа (гиперграфы или
гипервершины);
 манипулирование данными выражается в
виде трансформаций графов или при помощи
операций, основными параметрами которых
являются такие характерные графовые
структуры и свойства, как пути, подграфы,
связность и т.д.;
 ограничения целостности тесно связаны с
графами как структурой данных. Так,
ограничениями могут быть уникальность
меток ребер и вершин, типизация ребер и
вершин, ограничения на область определения
и область значений свойств ребер и вершин.
Графовые модели данных применяются в тех
случаях, когда информация о взаимосвязях между
данными или их топологии является более важной
(или настолько же важной), как сами данные.
Поводом к использованию графовых моделей может
быть также недостаточная выразительная сила
языков запросов традиционных моделей. Наиболее
распространенными примерами применения
графовых моделей являются системы управления и
анализа сложных сетей – социальных,
биологических, информационных, транспортных,
телекоммуникационных и других.
      </p>
      <p>
        Наибольшего разнообразия в своем развитии
графовые модели достигли в 1990-х годах. Наряду с
обычными графами, представляющими собой
множества вершин (помеченных или
непомеченных), соединенных ребрами
(направленными или ненаправленными,
помеченными или непомеченными), развитие в
графовых моделях получили такие структуры, как
гипервершины и гиперграфы. Гипервершина
представляет собой вложенный граф, а ребра
гиперграфа могут соединять не две, а произвольное
количество вершин [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
      </p>
      <p>
        Однако, обзоры состояния современных
графовых СУБД [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] показывают, что большинство
существующих баз данных основаны на простых
или атрибутированных графах (attributed graph или
property graph), в которых атрибуты (свойства)
приписываются ребрам и/или вершинам графа.
Именно такие модели и были выбраны в данной
статье в качестве исходных, подлежащих
унификации моделей.
      </p>
      <p>
        В качестве канонической модели в работе
рассматривается объектно-фреймовая модель
данных, а именно - язык СИНТЕЗ [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], нацеленный
на разработку предметных посредников для
решения задач в средах неоднородных ресурсов, и
поддержанный программными средствами
исполнительной среды предметных посредников.
Статья организована следующим образом.
      </p>
      <p>В разделе 2 рассмотрена и проиллюстрирована
на примере модель данных атрибутированных
графов.</p>
      <p>В разделе 3 рассмотрены и проиллюстрированы
основные принципы отображения модели данных
атрибутированных графов в язык СИНТЕЗ.</p>
      <p>
        В разделе 4 рассмотрены вопросы доказательства
сохранения информации и семантики операций при
отображении графовых моделей в объектные с
использованием формального языка спецификаций
AMN [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
      </p>
      <p>В разделе 5 рассмотрены родственные
исследования и направления дальнейшей работы.
2 Модель данных атрибутированных
графов</p>
      <p>
        В настоящее время существует большое
количество СУБД, модели данных которых
основаны на простых или атрибутированных
графах. Языки определения данных (ЯОД), языки
манипулирования данными (ЯМД), прикладные
интерфейсы пользователя (API) различаются в этих
системах весьма существенно. Для того, чтобы
обеспечить общность подхода по унификации
графовых моделей, в данной статье рассматривается
синтетическая модель данных атрибутированных
графов. Структуры данных модели покрывают
возможности моделей таких известных систем, как,
например, Neo4j [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], Dex [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], InfiniteGraph,
OrientDB, VertexDB, Filament, OQGraph, Horton,
InfoGrid.
      </p>
      <p>
        В качестве ЯМД синтетической модели
рассматривается декларативный язык Cypher [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ],
развиваемый в системе Neo4j. Поэтому, фактически,
рассматриваемая модель является расширением
графовой модели Neo4j. С точки зрения общности
по отношению к другим графовым языкам запросов,
язык Cypher покрывает такие классы возможностей,
как смежность (adjacency) вершин и ребер,
достижимость по путям фиксированной длины
(fixed-length paths reachability), достижимость по
простым регулярным путям (regular simple paths),
поиск кратчайших путей, поиск подграфов по
образцу (pattern matching) [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Это также означает,
что язык Cypher покрывает возможности языков
запросов основных современных графовых баз
данных (в том числе, перечисленных в предыдущем
параграфе).
      </p>
      <p>Итак, синтетическая модель выбрана таким
образом, чтобы рассматриваемые методы
отображения ее в каноническую (раздел 3) можно
было применить для унификации различных
реальных графовых моделей систем, упомянутых
выше.</p>
      <p>
        Заметим, что в данной работе не рассматривается
важный класс СУБД, основанных на модели RDF
[
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], включающий такие системы, как AllegroGraph,
G-Store, BrightstarDB. Часто RDF относят к
графовым моделям. Однако, ввиду обширности
области применения и развития приложений RDF, а
также специфики ЯОД, ЯМД и семантики RDF по
сравнению с основной массой графовых моделей,
вопросы унификации RDF следует рассматривать
отдельно.
      </p>
      <p>Рассмотрим сначала вопросы определения
данных в модели данных атрибутированных графов.</p>
      <p>База данных в модели есть граф, вершины и
ребра которого типизированы. Тип вершины или
ребра представляет собой, фактически,
совокупность атрибутов (свойств), приписываемых
вершине или ребру. Определим формально
множество всевозможных типов вершин VertexTypes
и множество типов ребер EdgeTypes.</p>
      <p>Так, VertexTypes представляет собой множество
троек вида &lt;id, name, A&gt;, где id – идентификатор
типа (например, целое число), name – имя типа
(строка символов), А – подмножество множества
всевозможных атрибутов Attributes.</p>
      <p>Множество атрибутов Attributes есть множество
кортежей вида &lt;id, name, type&gt;, где id и name –
идентификатор и имя атрибута соответственно, type
 B – тип атрибута, B – множество встроенных
типов (например, boolean, int, float, string,типы
массивов и т.д.)</p>
      <p>Множество EdgeTypes есть набор кортежей вида
&lt;id, name, A, directed, restricted, head, tail&gt;, где id –
идентификатор типа; name – имя типа; А 
Attributes; directed  {true, false} – флаг
направленности ребра; restricted  {true, false} –
булевский флаг определенности типов вершин,
которые связывает ребро; head  VertexTypes – тип
исходящей вершины ребра; tail  VertexTypes – тип
входящей вершины ребра.</p>
      <p>Для любого типа T  EdgeTypes если restricted(T)
= true, то значения head(T), tail(T) определены; если
же restricted(T) = false, то значения head(T), tail(T)
не определены.</p>
      <p>Произвольная схема S = &lt;VT(S), ET(S)&gt;
обобщенной графовой модели включает два
множества: множество типов вершин VT(S) </p>
      <p>VertexTypes и множество типов ребер ET(S) 
EdgeTypes.</p>
      <p>База данных (граф) G, удовлетворяющий схеме S
имеет вид G = &lt;V, E&gt;, где
 V = {v | T.(T  VT(S) &amp; v: T)} – множество
вершин графа такое, что любая вершина
имеет тип из VT(S);
 E = {&lt;e, t, h&gt; | T.(T  ET(S) &amp; e: T &amp; t  V &amp;
t: tail(T) &amp; h  V &amp; h: head(T))} – множество
ребер графа такое, что любое ребро имеет тип
из ET(S) и соединяет вершины из V.</p>
      <p>Типизация x: T означает, что для вершины
(ребра) x могут быть определены атрибуты из A(T)
(атрибуты типа Т).</p>
      <p>
        Рассмотрим пример схемы Cinema базы данных
фильмов [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] в обобщенной модели. Для упрощения
будем опускать в примерах идентификаторы типов
и атрибутов, считая, что имена однозначно
идентифицируют типы:
      </p>
      <p>VT(Cinema) = { people, movie }
ET(Cinema) = { cast, directs }
A(movie) = {&lt;id, long&gt;, &lt;title, string&gt;, &lt;year, integer&gt;}
A(people) = {&lt;id, long&gt;, &lt;name, string&gt;}
cast = &lt;{&lt;character, string&gt;}, false, false, undefined,
undefined&gt;
directs = &lt;, true, true, people, movie&gt;
Схема включает два типа вершин (people, movie)
и два типа ребер (cast, directs). Тип movie включает
три атрибута (id, title, year), people – два (id, name),
cast – один (character), directs – ни одного. Ребра
типа cast являются ненаправленными и типы
вершин, которые они связывают, не определены;
ребра типа directs – направлены от вершины типа
people к вершине типа movie.</p>
      <p>Пример простого графа g, удовлетворяющего
схеме Cinema выглядит следующим образом:
g = &lt;{m, p}, {e}&gt;
m: movie = &lt;id: 1, title: “Lost in Translation”,</p>
      <p>
        year: 2003&gt;
p: people = &lt;id: 1, name: “Scarlett Johansson”&gt;
e: cast = &lt;&lt;character: “Charlotte”&gt;, m, p&gt;
Вопрос выбора ЯМД для обобщенной графовой
модели достаточно сложен. Графовые языки
запросов развивались в течении многих лет вместе с
самими графовыми моделями [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. Существуют
работы по анализу и сравнению выразительной
силы и вычислительной сложности графовых ЯМД
[
        <xref ref-type="bibr" rid="ref19">19</xref>
        ].
      </p>
      <p>
        Однако, в современных популярных графовых
СУБД языки манипулирования представлены в
большинстве случаев просто прикладным
интерфейсом пользователя (API), предоставляющим
доступ к структуре графа, методы обхода графа и
инкапсулирующим основные алгоритмы на графах.
Не существует стандарта графового языка запросов.
В данной работе в качестве ЯМД модели
атрибутированных графов выбран язык Cypher [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ].
С одной стороны, этот язык поддерживается и
развивается в одной из самых популярных графовых
СУБД с открытым кодом – Neo4j. С другой
стороны, язык является декларативным, в отличие
от существующих графовых API или скриптовых
языков (как Gremlin). Язык основывается на
различных подходах и сложившихся техниках
выразительных запросов. Основные конструкции и
ключевые слова имеют сходство с такими широко
распространенными языками, как SQL и SPARQL.
3 Отображение модели
атрибутированных графов в
каноническую информационную модель
В качестве канонической модели в данной статье
рассматривается объектная модель языка СИНТЕЗ
[
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. Объектные модели хорошо зарекомендовали
себя при унификации различных классов моделей –
структурированных, онтологических, сервисных,
процессных [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. Поэтому есть основания выбирать
канонические объектные модели при интеграции
информационных ресурсов, представленных в
моделях различных классов. При этом графовые
модели выступают как один из классов моделей
ресурсов, подлежащих интеграции.
3.1 Отображение языка определения данных
Схема в обобщенной графовой модели
представляется в языке СИНТЕЗ в виде
одноименного модуля (например, Cinema),
включающего классы, содержащие вершины и ребра
графа (например, vertices и edges соответственно):
{ Cinema; in: module;
{ vertices; in: class; … },
{ edges: in: class; … };
…
Тип вершины (например, movie – см. раздел 2)
представляется в языке СИНТЕЗ одноименным
классом (который объявляется подклассом класса
всех вершин vertices), также входящим в модуль,
соответствующий схеме:
{ Movie; in: class; superclass: vertices;
instance_type: {
id: long;
title: string;
year: integer; };
Атрибуты типа вершины, представляются в
языке СИНТЕЗ атрибутами типа экземпляров
(instance_type) соответствующего класса. Между
встроенными типами графовой модели (long, string,
int и т.д.) и встроенными типами языка СИНТЕЗ
(long, string, integer) устанавливается
взаимнооднозначное соответствие.
      </p>
      <p>}
}</p>
      <p>Тип ребра (например, directs – см. раздел 2)
также представляется одноименным классом
(который объявляется подклассом класса всех
вершин edges):
{ directs; in: class; superclass: edges;
instance_type: {
metaframe
directed: true;
restricted: true;
startVertexType: people;
endVertexType: movie;
end
edgeConstr: {in: invariant;
{{ all e/directs.inst (directs(e) -&gt;</p>
      <p>people(e.startVertex) &amp; movie(e.endVertex)) }}
}</p>
      <p>}; };
Атрибуты типа ребра, аналогично типу вершины,
представляются в языке СИНТЕЗ атрибутами типа
экземпляров соответствующего класса.</p>
      <p>
        Заметим, что информация о направленности
(directed), определенности ребра (restricted), типах
его исходящей (startVertexType) и входящей
(endVertexType) вершин представляется специальной
конструкцией - метафреймом [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], связанным с
типом экземпляра класса. Метафреймы в языке
СИНТЕЗ предназначены для выражения
дополнительной метаинформации, связанной с
такими сущностями, как модули, типы, классы,
функции.
      </p>
      <p>Кроме того, ограничение на типы исходящей и
входящей вершин представляется инвариантом
edgeConstr, заданным формулой в типизированной
логике первого порядка. Знак all означает квантор
всеобщности, знак -&gt; - логическую импликацию, &amp;
конъюнкцию, выражение x/T – типизацию
переменной x типом T, C.inst – тип экземпляров
(instance) класса C. Предикат C(x), где С – имя
класса, обращается в истину на экземплярах класса
С.</p>
      <p>Заметим также, что на переменной e типа
directs.inst определены атрибуты исходящей
вершины ребра startVertex и входящей вершины
ребра endVertex, хотя их нет непосредственно в типе
directs.inst. Эти атрибуты являются общими для всех
типов вершин и принадлежат типу экземпляров
класса edges:
{ edges; in: class;
instance_section: {
startVertex: vertices.inst;
endVertex: vertices.inst;
isValidEdge: { in: predicate;
params: {+stVtx/vertices.inst,
+endVtx/vertices.inst
returns/Boolean };
{{ (stVtx = this.startVertex &amp;
endVtx = this.endVertex -&gt; returns = true) &amp;
(stVtx &lt;&gt; this.startVertex |
endVtx &lt;&gt; this.endVertex -&gt; returns = false) }}
}</p>
      <p>};
Кроме упомянутых атрибутов, тип edges.inst
включает метод-предикат isValidEdge. Предикат
e.isValidEdge(v1, v2) обращается в истину, если
исходящая вершина ребра е (e.startVertex) совпадает
с v1 и входящая вершина ребра е (e.endVertex)
совпадает с v2. Спецификация метода задается
формулой первого порядка, связывающей входные и
выходные параметры метода. Знак | означает
дизъюнкцию, &lt;&gt; - неравенство, this – объект, для
которого вызывается метод.
3.2 Отображение языка манипулирования
данными</p>
      <p>При интеграции неоднородных ресурсов (баз
данных, сервисов и т.д.) необходимо отображение
ЯОД модели ресурса в каноническую. ЯМД
канонической модели, напротив, необходимо
отображать в ЯМД модели ресурса, т.к. запросы к
посреднику в канонической модели нужно
отображать в запросы к ресурсам.</p>
      <p>Язык запросов (программ) модели СИНТЕЗ
представляет собой Datalog-подобный язык в
объектной среде. Программа представляет собой
набор конъюнктивных запросов (правил) вида
q(x/T) :- C1(x1/T1), … , Cn(xn/Tn),</p>
      <p>F1(X1, Y1), … Fm(Xm, Ym), B.</p>
      <p>Тело запроса представляет собой конъюнкцию
предикатов-коллекций, функциональных
предикатов и ограничения. Здесь Сi - имена
коллекций (классов), Fj – имена функций, xi – имена
переменных, значения которых пробегают по
классам, Ti – типы переменных, Xj и Yj – входные и
выходные параметры функций, B – ограничение,
налагаемое на xi, Xj, Yj.</p>
      <p>В дальнейшем будет использоваться запись
предиката-коллекции вида movie([title, year]).
Неформально это означает, что нас не интересуют
объекты класса movie целиком, а лишь их атрибуты
title, year. Формально запись означает сокращение
от movie(_/movie.inst[title, year]). Здесь знак _
обозначает анонимную переменную, movie.inst –
анонимный тип экземпляров (instance) класса movie,
title, year – необходимые атрибуты типа
экземпляров класса.</p>
      <p>Будет также использоваться запись source([i, j,
val1/val]), означающая переименование атрибута val
в val1.</p>
      <p>Ввиду ограниченного объема статьи,
отображение основных конструкций ЯМД будет
продемонстрировано на нескольких примерах.</p>
      <p>Пример 1 (Конъюнктивный запрос с
использованием предиката смежности вершин и
ребер). Рассмотрим запрос, возвращающий имена
актеров по фамилии Круз, игравших в фильмах
вместе со Скарлетт Йохансон:
q([colleague_name])
:people(scarlett/[name]),
movies(m),
people(colleague/[collegue_name: name]),
cast(c1), cast(c2),
c1.isValidEdge(m, scarlett),
c2.isValidEdge(m, colleague),
scarlett.name = “Scarlett Johansson”,
colleague.name.like(“*Cruz*”).</p>
      <p>Запрос вернет непустой результат, если в графе
базы данных существуют такие вершины-фильмы
m, и такие ребра c1, c2 типа cast, что c1 соединяет m
с вершиной scarlett, и c2 соединяет m с вершиной
colleague.</p>
      <p>В языке Cypher такой запрос имеет вид
START scarlett =</p>
      <p>node:node_auto_index(name = 'Scarlett Johansson')
MATCH m-[c1:cast]-scarlett, m-[c2:cast]-collegue
WHERE collegue.name =~ /*Cruz*/
RETURN collegue.name
Каждый запрос языка Cypher представляет собой
образец (pattern), по которому производится поиск в
графе базы данных.</p>
      <p>В секции START запроса указываются вершины
или ребра, с которых следует начинать поиск. В
данном случае это вершина scarlett, поскольку для
нее указано значение атрибута name, а значит,
возможен поиск по индексу этого атрибута.</p>
      <p>В секции MATCH указывается образец поиска в
графе, привязанный к стартовым вершинам. В
данном случае это указание, что следует искать
фильмы, в которых играла (Cast) scarlett, а также
других актеров, играющих в том же фильме.</p>
      <p>В секции WHERE указывается фильтр поиска. В
данном случае это фамилия коллеги-актрисы.</p>
      <p>В секции RESULT указываются возвращаемые
значения. В данном случае это полное имя
коллегиактера.</p>
      <p>Основные принципы отображения
конъюнктивных запросов объектной модели в язык
Cypher, проиллюстрированные на данном примере,
состоят в следующем:
 конъюнктивный запрос представляется в
языке Cypher запросом, возвращающим
результат (секция RETURN);
 предикаты-коллекции и предикат смежности
вершин и ребер представляются образцами
секции MATCH. Каждому предикату
смежности соответствует свой образец.
Переменные, типизированные в
предикатахколлекциях, представляются одноименными
переменными, использующимися в образцах;
 предикаты-условия представляются
соответствующими предикатами секции
WHERE или START;
 атрибуты результирующего предиката
конъюнктивного запроса представляются
одноименными атрибутами в секции
RETURN.</p>
      <p>Пример 2 (Удаление
запрос, удаляющий из
«Отчаянный»:
вершин). Рассмотрим
базы данных фильм
-movie(m) :- movie(m), m.year = “Desperado”.</p>
      <p>В правилах со знаком «–» в голове
осуществляется удаление объектов из коллекции.</p>
      <p>В языке Cypher такой запрос представляется
запросом с секцией DELETE:</p>
      <p>START m = node:node_auto_index(title = 'Desperado')
DELETE m
Пример 3 (Обновление значения атрибута).
Рассмотрим запрос, устанавливающий год создания
фильма «Васаби»:
movie(m/[year])
:movie(m/[title, year1/year]), m.title = “Vasabi”,
year = 2001.</p>
      <p>В языке Cypher такой запрос такой запрос
представляется запросом с секцией SET:</p>
      <p>START m = node:node_auto_index(title = 'Vasabi')
SET m.year = 2001</p>
      <p>RETURN year
4 Сохранение информации и семантики
операций ЯМД при отображении</p>
      <p>
        В данном разделе рассматриваются вопросы
доказательства сохранения информации и
семантики операций при отображении графовых
моделей в объектные с использованием
формального языка спецификаций AMN [
        <xref ref-type="bibr" rid="ref1 ref4">1, 4</xref>
        ].
Применяется метод, предложенный и опробованный
при унификации модели, основанной на
многомерных массивах, в работе [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ].
      </p>
      <p>Язык AMN основан на теории множеств и
типизированном языке первого порядка.
Спецификации AMN называются абстрактными
машинами и сочетают в себе пространства
состояний и поведения машины, определенного
операциями на состояниях. В языке AMN
формализуется специальное отношение между
спецификациями – уточнение.</p>
      <p>Идея метода заключается в следующем.
Рассмотрим исходную модель S и целевую модель
T. Построим отображение  модели S в модель T.
Выразим семантику моделей в виде абстрактных
машин AMN, построив при этом машины MS и MT
соответственно. При этом структуры данных
моделей представляются переменными машин,
свойства структур данных представляются
инвариантами машин, характерные операции
моделей данных представляются операциями
машин. Операциями в данном случае называются
характерные родовые запросы в языках СИНТЕЗ и
Cypher соответственно.</p>
      <p>Рассматриваемые операции исходной и целевой
модели должны быть связаны отображением ЯМД.
Отображение ЯОД представляется в виде
специального склеивающего инварианта –
замкнутой формулы, связывающей состояния
машин MS и MT.</p>
      <p>Отображение  считается сохраняющим
информацию и семантику операций, если машина</p>
      <p>
        MS, соответствующая исходной модели, уточняет
машину MT, соответствующую целевой модели [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ].
Уточнение доказывается интерактивно при помощи
специальных программных средств [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ].
      </p>
      <p>В качестве иллюстрации основных принципов
выражения семантики синтетической графовой
модели и языка СИНТЕЗ в AMN рассмотрим
частичные (в связи с ограниченным объемом статьи)
AMN-спецификации, соответствующие данным
моделям. Нижеследующий текст организован
следующим образом: приводятся последовательные
части спецификации на языке AMN и
сопровождаются комментариями.</p>
      <p>
        Основные идеи представления семантики
объектной модели языка СИНТЕЗ в языке AMN
изложены в работе [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ]. В настоящей статье
рассматривается семантика специфических
конструкций, необходимых для унификации
графовых моделей.
      </p>
      <p>Итак, спецификация, выражающая семантику
объектной модели языка СИНТЕЗ, представляется в
языке AMN конструкцией REFINEMENT:</p>
      <p>REFINEMENT ObjectDM
Константы, необходимые для унификации
графовой модели, объявлены в разделе
CONSTANTS машины ObjectDM и типизируются в
разделе PROPERTIES:</p>
      <p>CONSTANTS
c_edges, c_vertices,
a_startVertex, a_endVertex,
c_edges_instance_type
PROPERTIES …
Раздел PROPERTIES содержит формулу, которая
состоит из предикатов, типизирующих константы
Предикаты соединяются операцией конъюнкции.
Так, имена классов ребер и вершин представлены
константами c_edges и c_vertices, тип которых –
подмножество множества строк (STRING_Type):
c_edges: STRING_Type &amp;
c_vertices: STRING_Type
Знак типизации «:» формально
принадлежность элемента множеству.
означает
Имя типа экземпляров класса ребер
представлено константой c_edges_instance_type:
c_edges_instance_type: STRING_Type
Идентификаторы атрибутов этого типа,
соответствующих исходящей и входящей вершинам
ребра, представляются константами a_startVertex,
a_endVertex, тип которых – натуральное число
(NAT):
a_startVertex: NAT &amp;
a_endVertex: NAT
Переменные, составляющие пространство
состояний объектной модели, объявлены в разделе
ABSTRACT_VARIABLES машины ObjectDM и
типизируются в разделе INVARIANT:
ABSTRACT_VARIABLES
m_directed, m_restricted,
m_startVertexType, m_endVertexType,
isValidEdge
INVARIANT …
Раздел INVARIANT содержит формулу, которая
состоит из предикатов, типизирующих переменные
состояния, и налагающих различные совместные
ограничения на переменные и константы.
Предикаты соединяются операцией конъюнкции.</p>
      <p>
        Так, декларируется, что c_edges и c_vertices
действительно являются именами классов:
c_edges: classNames &amp;
c_vertices: classNames
Здесь classNames – множество, содержащее
имена всех классов базы данных [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ].
      </p>
      <p>Метаинформация, связанная с типом
экземпляров класса ребер, представлена
переменными m_directed (направленность ребра),
m_restricted (определенность типов вершин ребра),
m_startVertexType (тип исходящей вершины),
m_endVertexType (тип входящей вершины):
m_directed: subclasses(c_edges) --&gt; BOOL &amp;
m_restricted: subclasses(c_edges) --&gt; BOOL &amp;
m_startVertexType:</p>
      <p>subclasses(c_edges) --&gt; subclasses(c_vertices) &amp;
m_endVertexType:</p>
      <p>subclasses(c_edges) --&gt; subclasses(c_vertices)
Переменные типизированы полными функциями
(знак --&gt;), определенными на множестве всех
классов ребер (которые являются подклассами
класса всех вершин c_edges). Функция subclasses
ставит в соответствие классу множество его
подклассов.</p>
      <p>
        Декларируется, что c_edges_instance_type
действительно является именем типа, а атрибуты
a_startVertex и a_endVertex являются атрибутами
этого типа. Декларируется также, что тип значений
данных атрибутов – абстрактный тип данных (ADT):
c_edges_instance_type: typeNames &amp;
a_startVertex: typeAttributes(c_edges_instance_type) &amp;
a_endVertex: typeAttributes(c_edges_instance_type) &amp;
attributeType(a_startVertex) = ADT &amp;
attributeType(a_endVertex) = ADT
Здесь функция typeAttributes возвращает
множество атрибутов типа, функция attributeType –
тип значений атрибута [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ].
      </p>
      <p>Предикат смежности вершин и ребер
представляется функцией isValidEdge,
сопоставляющей ребру edg и двум вершинам v1, v2
значение истина, если вершины v1, v2 соединены
ребром edg:
isValidEdge: objectsOfClass(c_edges)*
objectsOfClass(c_vertices) *
objectsOfClass(c_vertices) --&gt; BOOL
!(edg, v1, v2).(edg: objectsOfClass(c_edges) &amp;
v1: objectsOfClass(c_vertices) &amp;
v2: objectsOfClass(c_vertices) =&gt;
((isValidEdge(edg, v1, v2) = TRUE) &lt;=&gt;
(adtAttributeValue(a_startVertex)(edg) = v1 &amp;
adtAttributeValue(a_endVertex)(edg) = v2) ) )</p>
      <p>
        Здесь * - знак декартова произведения множеств.
Функция adtAttributeValue(a)(o) возвращает
значение атрибута a объекта o [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ].
      </p>
      <p>Дополнительные необходимые свойства
переменных состояния представлены
конъюнктивными компонентами инварианта. Так,
ребро обязательно связывает два объекта из класса
c_vertices (вершины):
!edg.(edg: objectsOfClass(c_edges) =&gt;
adtAttributeValue(a_startVertex)(edg):</p>
      <p>objectsOfClass(c_vertices) &amp;
adtAttributeValue(a_endVertex)(edg):</p>
      <p>
        objectsOfClass(c_vertices) )
Здесь «!» – знак квантора всеобщности, «=&gt;» –
логическая импликация. Функция objectsOfClass
возвращает множество объектов – экземпляров
класса [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ].
      </p>
      <p>Если типы вершин, соединяемых ребром,
определены, то они должны принадлежать классам,
задаваемым метаатрибутами startVertexType и
endVertexType класса ребра:
!(cls, edg).(cls: subclasses(c_edges) &amp;
edg: objectsOfClass(cls) =&gt;
(m_restricted(cls) = TRUE =&gt;
adtAttributeValue(a_startVertex)(edg):</p>
      <p>objectsOfClass(m_startVertexType(cls)) &amp;
adtAttributeValue(a_endVertex)(edg):</p>
      <p>objectsOfClass(m_endVertexType(cls)) ) ) &amp;
Из всего ЯМД в спецификации рассмотрена
единственная операция deleteVertex удаления
вершины:</p>
      <p>OPERATIONS
deleteVertex(attr, cond) =
PRE attr : dom(attributeNames) &amp;
cond : INT --&gt; BOOL &amp;
attributeType(attr) = Integer
THEN
objectsOfClass(c_vertices) :=
objectsOfClass(c_vertices)
{ vert | vert: objectsOfClass(c_vertices) &amp;
vert: dom(adtAttributeValue(attr)) &amp;
cond(integerAttributeValue(attr)(vert)) = TRUE }
END
Параметрами операции являются идентификатор
целочисленного атрибута attr и функция cond,
отвечающая условию на значение атрибута.
Операция deleteVertex удаляет из класса c_vertices
все такие вершины vert, что на vert определен
атрибут attr, и для значения этого атрибута
выполнено условие cond. Здесь знак «:=» означает
присваивание, знак «-» - разность множеств;
конструкция {v | F(v)} – выделение множества таких
значений v, что предикат F(v) обращается в истину,
функция integerAttributeValue(a)(o) возвращает
значение целочисленного атрибута a объекта o.</p>
      <p>Cпецификация, выражающая семантику
синтетической графовой модели, представляется в
языке AMN конструкцией</p>
      <p>REFINEMENT GraphDM
Переменные, составляющие пространство
состояний объектной модели, объявлены в разделе
ABSTRACT_VARIABLES машины GraphDM:
Идентификаторы типов вершин представлены
переменной vertexTypeIDs; идентификаторы типов
ребер - переменной edgeTypeIDs; идентификаторы
атрибутов – переменной attributeIDs; имена типов
переменной typeName; принадлежность атрибутов
типам – переменной attributes; имена атрибутов –
переменной attributeName; типы значений атрибутов
– переменной attributeTyping; направленность ребер
- переменной directed; определенность типов
исходящей и входящей вершин ребра
переменными restricted, headType, tailType; вершины
и ребра, составляющие базу данных - переменными
vertices, edges; типы конкретных вершин и ребер
переменными vertixType, edgeType;исходящая и
входящая вершины конкретных ребер
переменными headVertix, tailVertix; значения
целочисленных атрибутов - переменной
g_integerAttributeValue. Функции, представляющие
значения атрибутов других типов (например, BOOL
или STRING), определяются аналогично.</p>
      <p>Переменные типизируются в разделе
INVARIANT при помощи частичных (знак «+-&gt;») и
тотальных функций аналогично переменным,
использующимся для придания семантики
объектной модели:</p>
      <p>INVARIANT
vertexTypeIDs: POW(NAT) &amp;
edgeTypeIDs: POW(NAT) &amp;
attributeIDs: POW(NAT) &amp;
typeName: vertexTypeIDs \/ edgeTypeIDs --&gt;</p>
      <p>STRING_Type &amp;
attributes: vertexTypeIDs \/ edgeTypeIDs --&gt;</p>
      <p>POW(attributeIDs) &amp;
directed: edgeTypeIDs --&gt; BOOL &amp;
restricted: edgeTypeIDs --&gt; BOOL &amp;
headType: edgeTypeIDs +-&gt; vertexTypeIDs &amp;
tailType: edgeTypeIDs +-&gt; vertexTypeIDs &amp;
attributeName: attributeIDs --&gt; STRING_Type &amp;
attributeTyping: attributeIDs --&gt; BuiltInTypes &amp;
vertices: POW(NAT) &amp;
vertixType: vertices --&gt; vertexTypeIDs &amp;
edges: POW(NAT) &amp;
edgeType: edges --&gt; edgeTypeIDs &amp;
headVertix: edges --&gt; vertices &amp;
tailVertix: edges --&gt; vertices &amp;
g_integerAttributeValue:</p>
      <p>(vertices \/ edges)*attributeIDs +-&gt; INT &amp;
Здесь знак «\/» означает объединение множеств.
Дополнительные необходимые свойства
переменных состояния представлены
конъюнктивными компонентами инварианта. Так,
для тех типов, метаатрибут restricted которых
принимает значение TRUE, заданы типы исходящей
и входящей вершин:
!(type).(type: edgeTypeIDs =&gt;
(restricted(type) = TRUE =&gt;</p>
      <p>type: dom(headType) &amp; type: dom(tailType)) &amp;
(restricted(type) = FALSE =&gt;</p>
      <p>type /: dom(headType) &amp; type /: dom(tailType)) )
Здесь функция dom возвращает область
определения функции, знак «/:» означает
непринадлежность элемента множеству.</p>
      <p>Функция g_integerAttributeValue определена
только для целочисленных атрибутов. Атрибут, для
которого определена эта функция, принадлежит
типу соответствующей вершины или ребра:
!(vert, attr).(vert: vertices &amp; attr: attributeIDs =&gt;
((vert |-&gt; attr) : dom(g_integerAttributeValue) =&gt;
attributeTyping(attr) = Integer) &amp;
attr: attributes(vertixType(vert)) ) &amp;
!(edg, attr).(edg: edges &amp; attr: attributeIDs =&gt;
((edg |-&gt; attr) : dom(g_integerAttributeValue) =&gt;
attributeTyping(attr) = Integer) &amp;
attr: attributes(edgeType(edg)) )
Если типы вершин, соединяемых ребром,
определены (значение метаатрибута restricted типа
этого ребра принимает значение TRUE), то они
должны принадлежать типам, задаваемым
метаатрибутами headType и tailType типа ребра:
!edg.(edg: edges =&gt;
(restricted(edg) = TRUE =&gt;
vertixType(headVertix(edg)) =</p>
      <p>headType(edgeType(edg)) &amp;
vertixType(tailVertix(edg)) =</p>
      <p>tailType(edgeType(edg)) ) )
Аналогично объектной модели рассмотрена
единственная операция ЯМД – операция удаления
вершины deleteVertex:</p>
      <p>OPERATIONS
deleteVertex(attr, cond) =
PRE attr: attributeIDs &amp; cond: INT --&gt; BOOL &amp;</p>
      <p>attributeTyping(attr) = Integer
THEN
vertices := vertices
{vert | vert: vertices &amp;
attr: attributes(vertixType(vert)) &amp;
cond(g_integerAttributeValue(vert, attr)) = TRUE }
END
Сигнатура операции совпадает с сигнатурой
операции объектной модели. Семантика операции
также аналогична: вершина vert удаляется из базы
данных (множества vertices), если на vert определен
атрибут attr, и для значения этого атрибута
выполнено условие cond.</p>
      <p>Для формального доказательства того, что
машина GraphDM уточняет машину ObjectDM
необходимо построить инвариант уточнения,
связывающий переменные машин и добавить его к
инварианту уточняющей машины.</p>
      <p>Инвариант формализует принципы отображения
ЯОД, изложенные в разделе 3.1 и объединяет их в
одну конъюнкцию.</p>
      <p>Множество имен типов графовой модели
совпадает с множеством имен классов объектной
модели (за исключением предопределенных классов
c_edges, c_vertices):
ran(typeName) = classNames - {c_edges, c_vertices}
Множество атрибутов типов графовой модели
соответствует множеству атрибутов объектной
модели (за исключением предопределенных
атрибутов a_startVertex, a_endVertex):
attributeIDs = dom(attributeNames) –</p>
      <p>{a_startVertex, a_endVertex}
Имена и типы атрибутов графовой и объектной
модели совпадают:
!attr.(attr: attributeIDs =&gt;
attributeName(attr) = attributeNames(attr) &amp;
attributeTyping(attr) = attributeType(attr) )
Вершины и ребра графовой
соответствуют объектам классов
c_edges:
базы данных
c_vertices и
vertices = objectsOfClass(c_vertices) &amp;
edges = objectsOfClass(c_edges)
!vert.(vert: vertices =&gt;
((vert: objectsOfClass(typeName(vertixType(vert)))) &lt;=&gt;
(vert: vertices)) ) &amp;
!edg.(edg: edges =&gt;
((edg: objectsOfClass(typeName(edgeType(edg)))) &lt;=&gt;
(edg: edges)) )
Значения атрибутов вершин и ребер графовой
модели совпадают со значениями соответствующих
атрибутов соответствующих объектов:
!(vert, attr).(vert: vertices &amp; attr: attributeIDs =&gt;
((vert |-&gt; attr) : dom(g_integerAttributeValue) =&gt;
g_integerAttributeValue(vert, attr) =</p>
      <p>integerAttributeValue(attr)(vert)) )
!(edg, attr).(edg: edges &amp; attr: attributeIDs =&gt;
((edg |-&gt; attr) : dom(g_integerAttributeValue) =&gt;
g_integerAttributeValue(edg, attr) =</p>
      <p>integerAttributeValue(attr)(edg)) )
Для указания того, что машина GraphDM
уточняет машину ObjectDM, в машину GraphDM
была добавлена директива</p>
      <p>
        REFINES ObjectDM
Спецификации ObjectDM и GraphDM вместе с
инвариантом уточнения были загружены в
инструментальное средство Atelier B [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ].
Автоматически были сгенерированы теоремы,
выражающие уточнение спецификаций. В
частности, для операции deleteVertex были
сгенерированы 15 теорем, все они были доказаны
также автоматически.
5 Родственные исследования и
направления дальнейшей работы
Известно сравнительно небольшое количество
работ, в которых исследуются вопросы интеграции
или отображения графовых моделей данных.
Например, в работе [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] язык запросов над
гиперграфами используется для описания взглядов
при интеграции графовых баз данных в
посредниках. В работе [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] гиперграфовая модель
также используется для интеграции графовых баз
данных. Предлагается набор операций в рамках
гиперграфовой модели для преобразования схемы
ресурса в федеративную схему. В данных работах
вопрос модельной неоднородности не встает, так
как и в качестве канонической модели, и в качестве
модели ресурсов выступает гиперграфовая модель.
В работе [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] рассматривается отображение
реляционной модели в гиперграфовую и
императивная реализация операций реляционной
алгебры в гиперграфовой модели. Таким образом, в
качестве канонической модели также выступает
гиперграфовая модель, а в качестве модели ресурса
– реляционная.
      </p>
      <p>
        В области интеграции графовых баз данных
существует еще одна группа работ, в которых
рассматриваются вопросы поглощения запросов,
ответа на запросы и переписывания запросов с
использованием взглядов (представлений). Текущие
результаты в данной области изложены в работе [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
Получены верхние границы сложности ответа на
запросы, переписывания запросов с использованием
GLAV-взглядов (Global and Local As View) в
графовых моделях; доказана разрешимость
поглощения запросов.
      </p>
      <p>Основные особенности настоящей работы
состоят в следующем. Целью работы является
устранение модельной неоднородности
современных графовых СУБД для дальнейшей их
виртуальной или материализованной интеграции. В
качестве исходной модели при отображении
используется синтетическая модель, структуры
данных которой покрывают возможности
современных СУБД, основанных на простых и
атрибутированных графах. В качестве целевой
модели используется каноническая
объектнофреймовая модель - язык СИНТЕЗ. Для
отображения обеспечивается формальное
доказательство сохранения информации и
семантики операций ЯМД.</p>
      <p>Дальнейшая работа включает следующие этапы:
 выбор конкретных графовых моделей,
основанных на простых и атрибутированных
графах и построение трансформаций,
реализующих изложенное отображение;
 расширение инструментальных средств
поддержки предметных посредников для
виртуальной интеграции графовых баз
данных;
 применение технологии предметных
посредников для решения научных задач в
некоторой предметной области над
множеством неоднородных ресурсов,
включающим графовые базы данных.</p>
      <p>Mapping of a Graph Data Model into a
Canonical Information Model for the
Heterogeneous Information Resource</p>
      <p>Integration</p>
      <p>An aim of the work is developing of a sound
theoretical basis for the integration of graph-based
resources. A verification of the mapping using a formal
specification language and a specific theorem prover is
provided.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>Abrial J.-R. The B-Book</surname>
          </string-name>
          : Assigning Programs to Meanings. Cambridge: Cambridge University Press,
          <year>1996</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>R.</given-names>
            <surname>Angles</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Gutierrez</surname>
          </string-name>
          .
          <source>Survey of Graph Database Models. ACM Computing Surveys</source>
          , Vol.
          <volume>40</volume>
          , No. 1. Article No.
          <volume>1</volume>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>R.</given-names>
            <surname>Angles</surname>
          </string-name>
          .
          <article-title>A Comparison of Current Graph Database Models</article-title>
          .
          <source>Proc. IEEE 28th International Conference on Data Engineering Workshops (ICDEW)</source>
          ,
          <year>2012</year>
          . - P.
          <fpage>171</fpage>
          -
          <lpage>177</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>Atelier</surname>
            <given-names>B,</given-names>
          </string-name>
          <article-title>the industrial tool to efficiently deploy the B Method</article-title>
          . http://www.atelierb.eu/indexen.php
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>Diego</given-names>
            <surname>Calvanese</surname>
          </string-name>
          , Giuseppe De Giacomo, Maurizio Lenzerini,
          <string-name>
            <given-names>Moshe</given-names>
            <surname>Vardi</surname>
          </string-name>
          .
          <article-title>Query Processing under GLAV Mappings for Relational and Graph Databases</article-title>
          .
          <source>VLDB</source>
          <year>2013</year>
          :
          <fpage>61</fpage>
          -
          <lpage>72</lpage>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>Dex</given-names>
            <surname>User Manual</surname>
          </string-name>
          .
          <year>2013</year>
          . http://www.sparsitytechnologies.com/downloads/UserManual.pdf
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>B.</given-names>
            <surname>Iordanov</surname>
          </string-name>
          .
          <article-title>Hypergraphdb: a generalized graph database</article-title>
          .
          <source>Proc. 2010 International Conference on Web-age information management (WAIM)</source>
          . Springer-Verlag,
          <year>2010</year>
          , pp.
          <fpage>25</fpage>
          -
          <lpage>36</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <surname>Kalinichenko</surname>
            <given-names>L.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Briukhov</surname>
            <given-names>D.O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Martynov</surname>
            <given-names>D.O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Skvortsov</surname>
            <given-names>N.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Stupnikov</surname>
            <given-names>S.A.</given-names>
          </string-name>
          <string-name>
            <surname>Mediation</surname>
          </string-name>
          <article-title>Framework for Enterprise Information System Infrastructures</article-title>
          .
          <source>Proc. of the 9th International Conference on Enterprise Information Systems ICEIS</source>
          <year>2007</year>
          .
          <article-title>-</article-title>
          <string-name>
            <surname>Funchal</surname>
          </string-name>
          ,
          <year>2007</year>
          . - Volume
          <source>Databases and Information Systems Integration</source>
          . - P.
          <fpage>246</fpage>
          -
          <lpage>251</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>Kalinichenko</surname>
            <given-names>L.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Stupnikov</surname>
            <given-names>S.A.</given-names>
          </string-name>
          <article-title>Heterogeneous information model unification as a pre-requisite to resource schema mapping // A. D'Atri and D</article-title>
          . Saccà (eds.), Information Systems: People, Organizations, Institutions, and
          <article-title>Technologies (Proc. of the V Conference of the Italian Chapter of Association for Information Systems itAIS</article-title>
          ). - Berlin-Heidelberg: Springer Physica Verlag,
          <year>2010</year>
          . - P.
          <fpage>373</fpage>
          -
          <lpage>380</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Kalinichenko</surname>
            <given-names>L.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Stupnikov</surname>
            <given-names>S.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Martynov</surname>
            <given-names>D.O.</given-names>
          </string-name>
          <article-title>SYNTHESIS: a Language for Canonical Information Modeling and Mediator Definition for Problem Solving in Heterogeneous Information Resource Environments</article-title>
          . Moscow: IPI RAN,
          <year>2007</year>
          . - 171 p.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>Neo4j</given-names>
            <surname>Graph Database</surname>
          </string-name>
          . - http://www.neo4j.org/
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>RDF</given-names>
            <surname>Primer</surname>
          </string-name>
          .
          <source>W3C Recommendation 10 February</source>
          <year>2004</year>
          . Eds.
          <string-name>
            <given-names>F.</given-names>
            <surname>Manola</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Miller</surname>
          </string-name>
          .
          <year>2004</year>
          . - http://www.w3.org/TR/2004/REC-rdf-primer20040210/
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Srikrishnan</surname>
            <given-names>Sundaresan</given-names>
          </string-name>
          , Gongzhu Hu:
          <article-title>Schema integration of distributed databases using hypergraph data model</article-title>
          .
          <source>IRI</source>
          <year>2005</year>
          :
          <fpage>548</fpage>
          -
          <lpage>553</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>Amani</surname>
            <given-names>Tahat</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Maurice H</surname>
          </string-name>
          .
          <source>T. Ling: Mapping Relational Operations onto Hypergraph Model CoRR abs/1105</source>
          .6118 (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <article-title>The Dex Graph Database Management System</article-title>
          . http://www.sparsity-technologies.com/dex.php
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <article-title>The Fourth Paradigm: Data-Intensive Scientific Discovery</article-title>
          . Eds. Tony Hey,
          <string-name>
            <given-names>Stewart</given-names>
            <surname>Tansley</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Kristin</given-names>
            <surname>Tolle</surname>
          </string-name>
          .
          <source>Redmond: Microsoft Research</source>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          <source>[17] The Neo4j Manual</source>
          .
          <year>2013</year>
          . - http://docs.neo4j.org/
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <surname>Dimitri</surname>
            <given-names>Theodoratos</given-names>
          </string-name>
          :
          <article-title>Semantic Integration and Querying of Heterogeneous Data Sources Using a Hypergraph Data Model</article-title>
          .
          <source>BNCOD</source>
          <year>2002</year>
          :
          <fpage>166</fpage>
          -
          <lpage>182</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>P. T.</given-names>
            <surname>Wood</surname>
          </string-name>
          .
          <article-title>Query languages for graph databases</article-title>
          .
          <source>ACM SIGMOD Record</source>
          .
          <year>2012</year>
          . V. 41,
          <string-name>
            <surname>I.</surname>
          </string-name>
          <year>1</year>
          . P.
          <volume>50</volume>
          -
          <fpage>60</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <surname>Захаров</surname>
            <given-names>В. Н.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Калиниченко</surname>
            <given-names>Л</given-names>
          </string-name>
          . А.,
          <string-name>
            <surname>Соколов</surname>
            <given-names>И</given-names>
          </string-name>
          . А.,
          <string-name>
            <surname>Ступников</surname>
            <given-names>С</given-names>
          </string-name>
          . А.
          <article-title>Конструирование канонических информационных моделей для интегрированных информационных систем // Информатика и ее применения</article-title>
          .
          <source>- М</source>
          .,
          <year>2007</year>
          . -
          <fpage>Т</fpage>
          . 1,
          <issue>Вып</issue>
          . 2. - C.
          <fpage>15</fpage>
          -
          <lpage>38</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <surname>Скворцов</surname>
            <given-names>Н. А.</given-names>
          </string-name>
          <article-title>Отображение моделей данных NoSQL в объектные спецификации</article-title>
          .
          <source>Труды RCDL</source>
          '
          <year>2012</year>
          .
          <article-title>- Переславль-</article-title>
          <source>Залесский: Университет города Переславля</source>
          ,
          <year>2012</year>
          . С.
          <volume>78</volume>
          -
          <fpage>87</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <surname>Ступников</surname>
            <given-names>С. А.</given-names>
          </string-name>
          <article-title>Унификация модели данных, основанной на многомерных массивах, при интеграции неоднородных информационных ресурсов</article-title>
          .
          <source>Труды RCDL</source>
          '
          <year>2012</year>
          . - Переславль- Залесский: Университет города Переславля,
          <year>2012</year>
          . С.
          <volume>67</volume>
          -
          <fpage>77</fpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>