Генерация модели EMF с применением схемы XML (XSD)
Обновлен: 29 июня 2004 года
В этом справочнике приведено последовательное описание процесса создания модели EMF из
схемы XML и генерации для нее простого редактора модели. Показано, с какой легкостью EMF
позволяет перейти от простого определения модели в схеме XML к полнофункциональному
редактору для этой модели.
Моментальные копии экрана соответствуют версии Eclipse SDK версии 3.0 и версии 2.0
среды EMF.
Файл схемы XML, используемый в данном справочнике, можно найти здесь:
library.xsd. Сохраните его в
каком-нибудь каталоге на вашей рабочей станции для дальнейшей работы с ним.
Основные правила преобразования схемы XML в модель Ecore следующие:
- Схема преобразуется в класс EPackage. Любые включаемые схемы, объявляющие другие целевые
пространства имен, преобразуются в свои собственные классы EPackage.
- Определение составного типа преобразуется в класс EClass.
- Определение простого типа преобразуется в класс EDataType.
- Объявление атрибута или объявление вложенного элемента преобразуется в EAttribute или
EReference, в зависимости от его типа.
- Для хранения объявлений элементов наивысшего уровня или атрибутов создается класс
EClass, называемый DocumentRoot.
С точки зрения моделирования, схема XML не так выразительна, как Ecore. Она не
позволяет ни задать тип объекта, на который указывает ссылка, ни определить
двунаправленные ссылки (впрочем, EMF предоставляет свой собственный способ преодоления
этих ограничений).
Оглавление
оглавление
Шаг 0: Предварительные требования
Для работы с данным справочником требуется пакет EMF Runtime, включающий генератор EMF
и связанные с ним модули, и пакет XML Schema Infoset Model (XSD) Runtime. Последний
предоставляет модель EMF схемы XML, используемую средой EMF для чтения схем. Для простоты
можно использовать пакет, объединяющий EMF и XSD SDK. После установки этого пакета (или
пакетов) проверьте, все ли компоненты доступны в среде Eclipse:
- Откройте окно "Справка/О платформе Eclipse".

- Выберите "Сведения о модулях".

- Щелкните на заголовке столбца "ИД модуля", чтобы упорядочить список модулей по этому
полю. Затем проверьте, есть ли в таблице выделенный набор модулей.



Другие модули EMF и XSD, которые не выделены в показанном выше окне, для работы с
данным справочником не требуются. В зависимости от того, какие пакеты установлены, эти
модули могут отображаться или не отображаться в этом окне.
оглавление
Импорт модели из схемы XML
Создайте в рабочей области новый проект EMF:
- Откройте окно "Файл/Создать/Проект...".

- Разверните "Eclipse Modeling Framework" и выберите "Проект EMF". Нажмите кнопку
"Далее".

- Задайте имя проекта, например, "library". Затем нажмите кнопку "Далее".

- Выберите опцию "Загрузить из схемы XML" и нажмите кнопку "Далее".

- Нажмите кнопку "Обзор" и найдите файл схемы.

- При получении показанного ниже сообщения об ошибке необходимо выйти из программы
Eclipse и внести исправления в синтаксический анализатор XML. Это сообщение вызывается
ошибкой в реализации Crimson DOM, используемой в некоторых версиях Sun JDK.
Дополнительную
информацию можно найти на Web-сайте EMF.

- Схема будет проверена, и будет предложено имя по умолчанию для модели генератора. При
желании это имя можно изменить, указав в поле ввода другое имя. Для генерации модели
преобразования, используемой для схемы, можно выбрать опцию "Создать схему XML для
преобразования Ecore". Затем нажмите кнопку "Далее".

- В общем случае, если схема содержит другие схемы, объявляющие разные целевые
пространства имен, то из нее можно создать несколько пакетов. Выберите пакет, для
которого должна генерироваться модель EMF; в данном случае пакет только один - "library".
Нажмите кнопку "Готово".

- Будут созданы базовая модель (library.ecore) и модель генератора (library.genmodel).
Если был отмечен переключатель "Создать схему XML для преобразования Ecore", то будет
также создана модель преобразования (library.xsd2ecore). Ее можно открыть, чтобы
посмотреть, как схема преобразуется в Ecore. Модель генератора автоматически открывается в главной
панели.

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

- С каждым объектом связаны свойства. Если панель Свойства еще не открыта, щелкните
правой кнопкой мыши на объекте модели "Library" и выберите во всплывающем меню пункт
"Показать панель Свойства".

- Эти свойства управляют поведением генератора кода.

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

- Посмотрите, какие файлы созданы.

В процессе генерации должны быть созданы интерфейсы классов и класс enum; кроме того,
создается новая пара интерфейсов для самого пакета и для фабрики. Создаются также два
новый пакета с расширением "impl" и "util", которые содержат реализации этих интерфейсов
и дополнительные служебные классы, и файл манифеста "plugin.xml" для модуля модели.
Если вы изменили модель, то можете выполнить повторную генерацию кода; при этом
изменения будут слиты с любыми модификациями кода, выполненными вручную. Кроме того,
можно выборочно генерировать фрагменты кода модели. Для этого достаточно щелкнуть правой
кнопкой мыши на пакете, классе или перечислимом объекте и затем выбрать из всплывающего
меню пункт "Генерировать код модели".
оглавление
Шаг 3: Генерация редактора для модели
Для любой модели можно создать полнофункциональный редактор Eclipse. По умолчанию, он
включает два модуля: модуль "edit" содержит адаптеры, которые предоставляют
структурированное представление и выполняют изменение объектов модели на основе команд, и
модуль "editor", предоставляющий пользовательский интерфейс для редактора и мастера.
- В генераторе щелкните правой кнопкой мыши на объекте модели "Library" и выберите во
всплывающем меню пункт "Генерировать код модуля edit".

- Еще раз щелкните правой кнопкой мыши на объекте модели и выберите во всплывающем меню
пункт "Генерировать код модуля editor".

- Генерированные объекты появляются в панели Структура пакетов; их можно распознать по
суффиксам "edit" и "editor".

В общем случае, если требуется генерировать модуль модели, модуль edit и модуль editor
на одном шаге, то это можно сделать, выбрав во всплывающем меню пункт "Генерировать все".
При создании кода должна автоматически выполняться его компиляция, а при изменении -
повторная компиляция. Компиляцию можно запускать вручную, если в параметрах рабочей
области отключить автоматическую компоновку:
- Выберите пункт "Скомпоновать все" в меню "Проект".

- Просмотрите панель Неполадки. В проектах library, library.edit и library.editor
не должно быть ошибок.

оглавление
Шаг 4: Запуск генерированного редактора
Для того чтобы протестировать созданные модули, необходимо запустить второй экземпляр
Eclipse, называемый рабочей средой выполнения. Модули будут запускаться в этой рабочей
среде.
- В выпадающей панели инструментов "Выполнить" выберите "Выполнить в/Рабочей среде
выполнения".

- Подождите, пока запустится второй экземпляр платформы Eclipse. Откройте окно
"Справка/О платформе Eclipse", нажмите кнопку "Сведения о модулях" и проверьте, есть ли в
списке генерированные модули.

Теперь для создания нового экземпляра модели можно использовать мастер создания модели
library.
- Откройте окно "Файл/Создать/Проект...".

- Разверните "Простой" и выберите "Проект". Нажмите кнопку "Далее".

- Задайте имя проекта и нажмите кнопку "Готово".

- Щелкните правой кнопкой мыши на проекте и выберите во всплывающем меню пункт
"Создать/Другое...".

- Разверните "Мастеры создания моделей EMF" и выберите "Модель library". Нажмите кнопку
"Далее".

- Введите имя файла для модели библиотеки. Убедитесь, что он имеет расширение
".library". Затем нажмите кнопку "Далее".

- Выберите "Library" в качестве объекта модели и нажмите кнопку "Готово".

- Только что созданная модель Library откроется в главной панели.

Корневой объект в этом редакторе соответствует ресурсу My.library. Под ним лежит одна
библиотека, - это объект, выбранный в качестве объекта модели в мастере.
- Разверните ресурс "platform:/resource/librarytest/My.library", чтобы увидеть объект
"Library". Выберите его.

- Если панель Свойства еще не открыта, щелкните правой кнопкой мыши на объекте
"Library" и выберите во всплывающем меню пункт "Показать панель Свойства".

- Для того чтобы получить имя библиотеки, в панели Свойства щелкните на столбце
"Значение" свойства "Имя". После нажатия клавиши Enter метка в главной панели будет
обновлена.

- Щелкните правой кнопкой мыши на библиотеке и выберите во всплывающем меню пункт
"Создать потомка/Автор". В библиотеку будет добавлен новый автор.

- В панели Свойства введите имя автора.

- Точно так же в библиотеку можно добавить книгу.

- Все атрибуты и ссылки для книги можно отредактировать в панели Свойства.

- Для просмотра сериализации XML на основе схемы модель необходимо сохранить, закрыть и
затем снова открыть в текстовом редакторе.

оглавление