Генерация модели EMF с применением схемы XML (XSD)

Обновлен: 29 июня 2004 года

В этом справочнике приведено последовательное описание процесса создания модели EMF из схемы XML и генерации для нее простого редактора модели. Показано, с какой легкостью EMF позволяет перейти от простого определения модели в схеме XML к полнофункциональному редактору для этой модели.

Моментальные копии экрана соответствуют версии Eclipse SDK версии 3.0 и версии 2.0 среды EMF.

Файл схемы XML, используемый в данном справочнике, можно найти здесь: library.xsd. Сохраните его в каком-нибудь каталоге на вашей рабочей станции для дальнейшей работы с ним.

Основные правила преобразования схемы XML в модель Ecore следующие:

С точки зрения моделирования, схема XML не так выразительна, как Ecore. Она не позволяет ни задать тип объекта, на который указывает ссылка, ни определить двунаправленные ссылки (впрочем, EMF предоставляет свой собственный способ преодоления этих ограничений).


Оглавление

Шаг 0: Предварительные требования
Шаг 1: Импорт модели из схемы XML
Шаг 2: Генерация кода модели EMF
Шаг 3: Генерация редактора для модели
Шаг 4: Запуск генерированного редактора


 оглавление

Шаг 0: Предварительные требования

Для работы с данным справочником требуется пакет EMF Runtime, включающий генератор EMF и связанные с ним модули, и пакет XML Schema Infoset Model (XSD) Runtime. Последний предоставляет модель EMF схемы XML, используемую средой EMF для чтения схем. Для простоты можно использовать пакет, объединяющий EMF и XSD SDK. После установки этого пакета (или пакетов) проверьте, все ли компоненты доступны в среде Eclipse:

Другие модули EMF и XSD, которые не выделены в показанном выше окне, для работы с данным справочником не требуются. В зависимости от того, какие пакеты установлены, эти модули могут отображаться или не отображаться в этом окне.


 оглавление

Импорт модели из схемы XML

Создайте в рабочей области новый проект EMF:


 оглавление

Шаг 2: Генерация кода модели EMF

Модель генератора отображает корневой объект, представляющий всю модель целиком. Дочерние объекты этого объекта представляют его пакеты, для которых, в свою очередь, существуют дочерние объекты, представляющие классификаторы (классы и типы данных, в том числе перечислимые типы). Дочерние элементы классов - это атрибуты, ссылки и операции классов; дочерние элементы перечислимых типов - это перечислимые (литеральные) константы.

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

Модель генератора представляет собой точку, в которой запускается генерация кода. Для того чтобы генерировать код для какого-либо объекта модели, щелкните на этом объекте правой кнопкой мыши.

В процессе генерации должны быть созданы интерфейсы классов и класс enum; кроме того, создается новая пара интерфейсов для самого пакета и для фабрики. Создаются также два новый пакета с расширением "impl" и "util", которые содержат реализации этих интерфейсов и дополнительные служебные классы, и файл манифеста "plugin.xml" для модуля модели.

Если вы изменили модель, то можете выполнить повторную генерацию кода; при этом изменения будут слиты с любыми модификациями кода, выполненными вручную. Кроме того, можно выборочно генерировать фрагменты кода модели. Для этого достаточно щелкнуть правой кнопкой мыши на пакете, классе или перечислимом объекте и затем выбрать из всплывающего меню пункт "Генерировать код модели".


 оглавление

Шаг 3: Генерация редактора для модели

Для любой модели можно создать полнофункциональный редактор Eclipse. По умолчанию, он включает два модуля: модуль "edit" содержит адаптеры, которые предоставляют структурированное представление и выполняют изменение объектов модели на основе команд, и модуль "editor", предоставляющий пользовательский интерфейс для редактора и мастера.

В общем случае, если требуется генерировать модуль модели, модуль edit и модуль editor на одном шаге, то это можно сделать, выбрав во всплывающем меню пункт "Генерировать все".

При создании кода должна автоматически выполняться его компиляция, а при изменении - повторная компиляция. Компиляцию можно запускать вручную, если в параметрах рабочей области отключить автоматическую компоновку:


 оглавление

Шаг 4: Запуск генерированного редактора

Для того чтобы протестировать созданные модули, необходимо запустить второй экземпляр Eclipse, называемый рабочей средой выполнения. Модули будут запускаться в этой рабочей среде.

Теперь для создания нового экземпляра модели можно использовать мастер создания модели library.

Корневой объект в этом редакторе соответствует ресурсу My.library. Под ним лежит одна библиотека, - это объект, выбранный в качестве объекта модели в мастере.


оглавление