Преобразование данных, заданных
 в терминах различных метамоделей

Виноградов О. В., Чувиляев М.В.
(г. Москва, ИВЦ МЭИ (ТУ), Россия)

При разработке приложений в самых различных областях часто возникает задача обмена данными между различными приложениями, различными платформами. Особенно большую роль это играет в приложениях,  регулируемых данными (datadrivenapplications), и в приложениях, занимающихся активной обработкой хранимых данных. В таких ситуациях нередко данные, подлежащие конвертации, не могут быть просто перекодированы, так как  заданы в терминах различных метамоделей. Примером может служить задача сохранения данных, заданных в терминах объектной метамодели, в реляционных базах данных, что подразумевает преобразование к реляционной метамодели.

Ввиду потенциального разнообразия метамоделей очевидно нецелесообразно разрабатывать отдельные механизмы преобразования для каждой пары метамоделей. Поэтому в данной работе используется базовый универсальный формата представления абстрактных данных, принадлежащих не только к разным метамоделям, но и находящихся на различных метауровнях. То есть в предлагаемом формате возможно единообразно кодировать данные, модели данных, метамодели, метаметамодели и более высокие уровни абстракции. Формат является подмножеством языка XML, что обеспечивает его переносимость; при его разработке были использованы рекомендации консорциума OMG по кодированию метаданных [2].

При преобразовании данных ключевыми являются понятия модели и метауровня. То есть каждая совокупность данных на определенном уровне абстракции должна ссылаться на  свое описание (модель) на более высоком уровне абстракции (метауровне относительно рассматриваемого). При построении такой иерархии описаний оказывается возможным на некотором метауровне построить общего предка (метаметамодель) для различных метамоделей и, таким образом, рассматривать их в одних и тех же терминах. В данной работе были построены одни из возможных метамоделей, описывающих объектную и реляционную методологии, а в качестве их общей метаметамодели было выбрано базовое подмножество объектной метамодели.  Последняя, таким образом, оказалась самоописываемой и замкнула иерархию рассматриваемых метауровней.

Используя подобный, максимально обобщенный подход, разрабатывался и формат кодирования отображения элементов различных моделей. Предлагаемый формат также является подмножеством языка XML, что обеспечивает требуемую гибкость. При использовании данного формата оказывается несущественной принадлежность данных отображаемых моделей к конкретным метамоделям. Таким образом, этот формат возможно использовать и для конвертации данных в пределах одной метамодели. Другой особенностью формата является его независимость от применяемого метауровня, то есть он может  быть использован для преобразования не только данных, но и моделей различного уровня. Формат расширяем с точки зрения поддержки свойств отображения, специфичных как для конкретной пары метамоделей, так и для конкретной реализации алгоритма конвертации.

 Применительно к задаче отображения данных между объектной и реляционной метамоделями традиционно выделяются несколько базовых стратегий отображения иерархий классов на таблицы: таблица на класс, таблица на конкретный класс, таблица на иерархию ([3], [4], [7]). Гибкость предлагаемого формата оказывается достаточной для задания параметров отображения на уровне отдельных атрибутов классов, что не исключает и применения более высокоуровневых стратегий. Кроме того возможно задавать соответствие атрибута не только одному столбцу в таблице, но и тройке столбцов, содержащих идентификатор экземпляра, имя атрибута и его значение. Все упомянутые свойства позволяют  встраивать подсистему преобразования сохраняемых данных в связку существующих баз данных, изначально не рассчитанных на работу с объектными данными, и использующих их приложений.

На сегодняшний день реализован предварительный вариант алгоритма загрузки объектных данных, представленных в универсальном формате,  из реляционных данных. При этом корректно поддерживается полиморфизм, что подразумевает поиск и загрузку максимально удаленного наследника с заданным идентификатором, чьи данные возможно загрузить, в рамках иерархии наследования с корнем, представляющим предполагаемый класс загружаемого объекта.

При решении задачи отображения данных, заданных в универсальном формате, возникают некоторые смежные задачи. Так часто оказывается целесообразным хранить не документ целиком, а только его отличия от другого, базового документа. В задаче загрузки объектов это применимо, например, для обратного отбражения в базу данных изменений, сделанных в течение сеанса работы с системой. Для хранения изменений также необходим свой формат, позволяющий кодировать различия между двумя документами в универсальном формате эффективно и независимо от метауровня и метамодели. На данный момент созданы несколько версий такого формата, ведется работа по его уточнению. Также необходимы алгоритмы, вычисляющие разность двух совокупностей данных и позволяющие получать новый документ  путем применения изменений к базовому документу. Эти алгоритмы находятся в стадии разработки.

Другой смежной задачей является контроль корректности XML-документа. Поскольку данные представлены в универсальном формате, нет возможности использовать для этой цели возможные схемы (xsd, xdr) или определения типа документа (DTD). Поэтому возникает потребность в специализированных алгоритмах (валидаторах) проверки корректности создаваемых и загружаемых документов. Их можно разделить на два класса: валидаторы структуры и валидаторы семантики. Первые сверяют модель произвольного метауровня с предполагаемым описанием следующего метауровня, контролируя структурное соответствие модели ей описанию. Валидаторы второго класса создаются под конкретную метамодель или модель и проверяют данные с учетом семантики метамодели (модели). На данный момент реализованы алгоритмы структурной валидации, валидации объектных моделей, объектных данных, реляционных моделей.

Все упоминаемые алгоритмы первоначально были написаны на языке JScript, что позволяло быстро строить прототипы на базе HTML-страниц. В данный момент ведется работа по переводу алгоритмов в COM-технологию. Первым шагом для этого стало оформление кода в виде WindowsScriptingComponents ([6]), что позволяет эмулировать работу COM-компонент, оставаясь в рамках скриптового языка. В дальнейшем планируется переписывание кода на компилируемый язык с целью создания полноценных COM-объектов.

 

ЛИТЕРАТУРА

1.      Meta Object Facility (MOF) Specification, OMG, www.omg.org

2.      XML Metadata Interchange (XMI), OMG, www.omg.org

3.      Mapping Objects To Relational Databases, Scott W. Ambler, www.ambysoft.com/mappingObjects.pdf

4.      The Design Of a Robust Persistence Layer For Relational Databases, Scott W. Ambler, www.ambysoft.com/persistenceLayer.pdf

5.      XML for Data: Modeling many-to-many relationships,  Kevin Williams, ftp://www6.software.ibm.com/software/developer/library/x-xdm2m.pdf

6.      Windows Script Documentation V5.6, http://download.microsoft.com/ download/winscript56/Install/5.6/W982KMeXP/EN-US/scrdoc56en.exe

7.      Mapping Objects To Relational Databases. What You Need To Know And Why, Scott W. Ambler.  ftp://www6.software.ibm.com/ software/developer/library/mapping-to-rdb.pdf