Интеграция моделей с помощью Visual Studio Modelbus
Visual Studio ModelBus предоставляет метод для создания связей между моделями и из других средств в модели. Например, можно связать модели доменного языка (DSL) с моделями UML или создать интегрированный набор DSL.
ModelBus позволяет создать уникальную ссылку на модель или на определенный элемент внутри модели. Эта ссылка может храниться вне модели, например в элементе другой модели. Если впоследствии средству потребуется доступ к элементу, инфраструктура ModelBus загрузит соответствующую модель и вернет элемент. При необходимости модель можно отобразить для пользователя. Если доступ к файлу в его прежнем расположении невозможен, ModelBus предложит пользователю его найти. Если пользователь найдет файл, ModelBus исправит все ссылки на этот файл.
Примечание
В текущей реализации Visual Studio ModelBus связанные модели должны быть элементами одного и того же решения Visual Studio.
Дополнительные сведения и образец кода см. здесь:
Практическое руководство. Добавление обработчика перетаскивания
веб-сайт пакета SDK визуализации и моделирования (VMSDK) Visual Studio.
Предоставление доступа к DSL
Перед созданием ссылок ModelBus на модель или ее элементы необходимо определить ModelBusAdapter для DSL. Проще всего это сделать с помощью расширения Visual Studio ModelBus, добавляющего команды в Конструктор DSL.
Передача определения DSL в расширение ModelBus
Скачайте и установите расширение Visual Studio ModelBus, если оно еще не установлено. Дополнительные сведения см. в разделе Пакет SDK для визуализации и моделирования.
Откройте файл определения DSL. Щелкните область конструктора правой кнопкой мыши и выберите команду Включить Modelbus.
В диалоговом окне выберите параметр Я хочу предоставить этот DSL для ModelBus. Если вы хотите, чтобы DSL предоставил свои модели и использовал ссылки на другие DSL, выберите оба параметра.
Нажмите кнопку ОК. В решение DSL будет добавлен новый проект ModelBusAdapter.
Если вам необходимо получить доступ к DSL из текстового шаблона, измените файл AdapterManager.tt в новом проекте. Пропустите этот шаг, если доступ к DSL необходимо получить из другого кода, например из обработчика команд и событий. Для получения дополнительной информации см. Using Visual Studio ModelBus in a Text Template.
Измените базовый класс AdapterManagerBase на класс VsTextTemplatingModelingAdapterManager.
Ближе к концу файла вставьте перед классом AdapterManager следующий дополнительный атрибут:
[Microsoft.VisualStudio.Modeling.Integration.HostSpecific(HostName)]
В ссылки проекта ModelBusAdapter добавьте строку Microsoft.VisualStudio.TextTemplating.Modeling.11.0.
Если доступ к DSL должен предоставляться как из текстовых шаблонов, так и из другого кода, необходимо указать два адаптера — один измененный и один неизмененный.
Нажмите кнопку Преобразовать все шаблоны.
Выполните повторную сборку решения.
Теперь ModelBus может открывать экземпляры этого DSL.
В папке ModelBusAdapters\bin\* содержатся сборки, построенные проектом Dsl и проектом ModelBusAdapters. Чтобы сослаться на этот DSL из другого DSL, импортируйте эти сборки.
Проверка возможности ссылки на элементы
По умолчанию адаптеры Visual Studio ModelBus используют для идентификации элемента его глобальный уникальный идентификатор. Это значит, что такие идентификаторы должны храниться в файле модели.
Проверка сохранности идентификаторов элемента
Откройте файл DslDefinition.dsl.
В Обозревателе DSL разверните узел Поведение XML-сериализации, а затем Данные класса.
Для каждого класса, к которому необходимо создать ссылки ModelBus, сделайте следующее:
Щелкните узел класса, а затем в окне "Свойства" убедитесь, что параметр Идентификатор сериализации имеет значение true.
Если вместо глобального уникального идентификатора для идентификации элементов необходимо использовать имена элементов, следует переопределить части созданных адаптеров. Переопределите следующие методы в классе адаптера.
Метод GetElementId, чтобы вернуть необходимый для использования идентификатор. Этот метод вызывается при создании ссылок.
Метод ResolveElementReference, чтобы найти правильный элемент по ссылке ModelBus.
Доступ к DSL из другого DSL
Ссылки ModelBus можно сохранять в свойство домена в DSL, написав специальный код, который будет их использовать. Также можно позволить пользователю создавать ссылки ModelBus, выбирая файлы модели и элементы в нем.
Чтобы позволить DSL использовать ссылки на другой DSL, сначала его следует сделать получателем ссылок ModelBus.
Предоставление DSL возможности получать ссылки на предоставляемый DSL
На схеме "Определение DSL" щелкните основную часть схемы правой кнопкой мыши и выберите пункт Включить ModelBus.
В диалоговом окне выберите пункт Я хочу разрешить этой модели получать ссылки ModelBus.
В проекте Dsl принимающего DSL к ссылкам проекта добавьте указанные ниже сборки (файлы .DLL). Они находятся в каталоге ModelBusAdapter\bin\* предоставляемого DSL.
Сборка предоставляемого DSL, например Fabrikam.FamilyTree.Dsl.dll
Сборка предоставляемого адаптера ModelBus, например Fabrikam.FamilyTree.ModelBusAdapter.dll
Добавьте следующие сборки платформы .NET к ссылкам проекта получающего DSL:
Microsoft.VisualStudio.Modeling.Sdk.Integration.11.0.dll
Microsoft.VisualStudio.Modeling.Sdk.Integration.Shell.11.0.dll
Сохранение ссылки ModelBus в свойстве домена
В схеме "Определение DSL" принимающего DSL добавьте к классу домена свойство домена и присвойте ему имя.
В окне "Свойства" выберите свойство домена и укажите для параметра Тип значение ModelBusReference.
На данном этапе программный код может определять значение свойства, но в окне "Свойства" он доступен только для чтения.
Можно разрешить пользователям устанавливать свойство с помощью специализированного редактора ссылок ModelBus. Существуют две версии этого редактора (или средства выбора): один разрешает пользователям выбирать файл модели, а другой — файл модели и элемент внутри нее.
Разрешение пользователю устанавливать ссылку ModelBus в свойстве домена
Щелкните свойство домена правой кнопкой мыши и выберите пункт Изменить некоторые свойства ModelBusReference. Откроется диалоговое окно. Это средство выбора Model Bus .
Выберите соответствующее значение в поле Тип ModelBusReference: модель или элемент внутри модели.
В строке фильтра диалогового окна выбора файла введите строку вида Family Tree files |*.ftree. Замените расширение файла предоставляемого DSL.
Если выбрана ссылка на элемент в модели, можно добавить список типов, доступных для выбора пользователем, например Company.FamilyTree.Person.
На панели элементов Обозревателя решений нажмите кнопку OK, а затем кнопку Преобразовать все шаблоны.
Предупреждение
Если допустимая модель или сущность не выбрана, нажатие кнопки "ОК" не будет иметь никакого действия, даже если выглядит активной.
При указании списка целевых типов, таких как Company.FamilyTree.Person, необходимо также добавить ссылку на сборку проекта DSL, ссылающуюся на DLL целевого DSL, например Company.FamilyTree.Dsl.dll
Проверка ссылки ModelBus
Постройте предоставляемый и принимающий DSL.
Запустите один из DSL в экспериментальном режиме, нажав клавишу F5 или сочетание клавиш CTRL + F5.
В проект "Отладка" в экспериментальном экземпляре Visual Studio добавьте файлы, являющиеся экземплярами каждого DSL.
Примечание
Visual Studio ModelBus может разрешать ссылки только на модели, которые являются элементами того же решения Visual Studio.Например, создать ссылку на файл модели, расположенный в другой части файловой системы, нельзя.
Создайте и сохраните несколько элементов и связей в экземпляре предоставляемого DSL.
Откройте экземпляр принимающего DSL и выберите элемент модели, имеющий свойство ссылки ModelBus.
В окне "Свойства" дважды щелкните свойство ссылки ModelBus. Откроется диалоговое окно выбора.
Нажмите кнопку Обзор и выберите экземпляр предоставляемого DSL.
Средство выбора позволяет также выбрать элемент в модели в том случае, если был указан определенный тип элемента ссылки ModelBus.
Создание ссылок в программном коде
Если ссылку необходимо сохранить в модели или в элементе внутри модели, создается объект ModelBusReference. Существует два вида объектов ModelBusReference: ссылки на модель и ссылки на элемент.
Для создания ссылки на модель требуется AdapterManager доменного языка, в котором модель является экземпляром, и имя файла или элемент проекта Visual Studio модели.
Для создания ссылки на элемент требуется адаптер для файла модели и элемент, на который необходимо сослаться.
Примечание
С помощью Visual Studio ModelBus можно создавать ссылки только на элементы в том же решении Visual Studio.
Импорт предоставляемых сборок DSL
В принимающем проекте добавьте ссылки проекта на сборки DSL и ModelBusAdapter предоставляемого DSL.
Например, предположим, что ссылки ModelBus необходимо сохранить в элементах DSL библиотеки MusicLibrary. Ссылки ModelBus будут ссылаться на элементы DSL FamilyTree. В проекте Dsl решения MusicLibrary и в узле "Ссылки" добавьте ссылки на следующие сборки:
Fabrikam.FamilyTree.Dsl.dll — предоставляемый DSL;
Fabrikam.FamilyTree.ModelBusAdapters.dll — адаптер ModelBus предоставляемого DSL;
Microsoft.VisualStudio.Modeling.Sdk.Integration.11.0;
Microsoft.VisualStudio.Modeling.Sdk.Integration.Shell.11.0.
Эти сборки находятся в проекте ModelBusAdapters предоставляемого DSL в папке bin\*.
В файл кода, предназначенного для создания ссылок, как правило, импортируются следующие пространства имен:
// The namespace of the DSL you want to reference:
using Fabrikam.FamilyTree; // Exposed DSL
using Fabrikam.FamilyTree.ModelBusAdapters;
using Microsoft.VisualStudio.Modeling.Integration;
using System.Linq;
...
Создание ссылки на модель
Чтобы создать ссылку на модель, необходимо получить сначала доступ к AdapterManager для предоставляемого DSL, а затем использовать его для создания ссылки на модель. Можно указать либо путь к файлу, либо EnvDTE.ProjectItem.
Из AdapterManager можно получить адаптер, который предоставляет доступ к отдельным элементам в модели.
Примечание
После использования адаптер необходимо ликвидировать.Наиболее удобным способом достижения этой цели является использование оператора using.Это показано в следующем примере.
// The file path of a model instance of the FamilyTree DSL:
string targetModelFile = "TudorFamilyTree.ftree";
// Get the ModelBus service:
IModelBus modelBus =
this.Store.GetService(typeof(SModelBus)) as IModelBus;
// Get an adapterManager for the target DSL:
FamilyTreeAdapterManager manager =
(modelbus.GetAdapterManager(FamilyTreeAdapter.AdapterId)
as FamilyTreeAdapterManager;
// or: (modelBus.FindAdapterManagers(targetModelFile).First())
// or could provide an EnvDTE.ProjectItem
// Create a reference to the target model:
// NOTE: the target model must be a file in this project.
ModelBusReference modelReference =
manager.CreateReference(targetModelFile);
// or can use an EnvDTE.ProjectItem instead of the filename
// Get the root element of this model:
using (FamilyTreeAdapter adapter =
modelBus.CreateAdapter(modelReference) as FamilyTreeAdapter)
{
FamilyTree modelRoot = adapter.ModelRoot;
// Access elements under the root in the usual way:
foreach (Person p in modelRoot.Persons) {...}
// You can create adapters for individual elements:
ModelBusReference elementReference =
adapter.GetElementReference(person);
...
} // Dispose adapter
Чтобы modelReference можно было использовать позднее, ее можно сохранить в свойстве домена, имеющем ссылку ModelBusReference внешнего типа:
using Transaction t = this.Store.TransactionManager
.BeginTransaction("keep reference"))
{
artist.FamilyTreeReference = modelReference;
t.Commit();
}
Чтобы разрешить пользователям изменять свойство домена, используйте ModelReferenceEditor в качестве параметра атрибута Editor ("Редактор"). Дополнительные сведения см. в разделе Предоставление пользователю разрешения на изменение ссылки.
Создание ссылки на элемент
Созданный для модели адаптер можно использовать для создания и разрешения ссылок.
// person is an element in the FamilyTree model:
ModelBusReference personReference =
adapter.GetElementReference(person);
Чтобы elementReference можно было использовать позднее, ее можно сохранить в свойстве домена, имеющем ссылку ModelBusReference внешнего типа: Чтобы разрешить пользователям изменять эту ссылку, используйте ModelElementReferenceEditor в качестве параметра атрибута Editor ("Редактор"). Дополнительные сведения см. в разделе Предоставление пользователю разрешения на изменение ссылки.
Разрешение ссылок
Наличие ссылки ModelBusReference (MBR) позволяет получить модель или элемент модели, к которой она относится. Если элемент представлен на схеме или в другом представлении, откройте это представление и выберите нужный элемент.
Из MBR можно создать адаптер. Из адаптера можно получить корень модели. Также можно разрешить MBR, ссылающиеся на определенные элементы внутри модели.
using Microsoft.VisualStudio.Modeling.Integration; ...
ModelBusReference elementReference = ...;
// Get the ModelBus service:
IModelBus modelBus =
this.Store.GetService(typeof(SModelBus)) as IModelBus;
// Use a model reference or an element reference
// to obtain an adapter for the target model:
using (FamilyTreeAdapter adapter =
modelBus.CreateAdapter(elementReference) as FamilyTreeAdapter)
// or CreateAdapter(modelReference)
{
// Get the root of the model:
FamilyTree tree = adapter.ModelRoot;
// Get a model element:
MyDomainClass mel =
adapter.ResolveElementReference<MyDomainClass>(elementReference);
if (mel != null) {...}
// Get the diagram or other view, if there is one:
ModelBusView view = adapter.GetDefaultView();
if (view != null)
{
view.Open();
// Display the diagram:
view.Show();
// Attempt to select the shape that presents the element:
view.SetSelection(elementReference);
}
} // Dispose the adapter.
Разрешение ссылок ModelBus в текстовом шаблоне
DSL, к которому необходимо получить доступ, должен иметь адаптер ModelBus, настроенный с помощью текстовых шаблонов на получение доступа. Для получения дополнительной информации см. To provide access to a DSL.
Как правило, получение доступа к целевому DSL осуществляется с помощью ссылки ModelBus (MBR), которая хранится в исходном DSL. В связи с этим шаблон включает директиву исходного DSL и код, необходимый для разрешения MBR. Дополнительные сведения о текстовых шаблонах см. в разделе Generating Code from a Domain-Specific Language.
<#@ template debug="true" hostspecific="true" inherits="Microsoft.VisualStudio.TextTemplating.Modeling.ModelBusEnabledTextTransformation" #> <#@ SourceDsl processor="SourceDslDirectiveProcessor" requires="fileName='Sample.source'" #> <#@ output extension=".txt" #> <#@ assembly name = "Microsoft.VisualStudio.Modeling.Sdk.Integration.11.0" #> <#@ assembly name = "System.Core" #> <#@ assembly name = "Company.CompartmentDragDrop.Dsl.dll" #> <#@ assembly name = "Company.CompartmentDragDrop.ModelBusAdapter.dll" #> <#@ import namespace="Microsoft.VisualStudio.Modeling.Integration" #> <#@ import namespace="System.Linq" #> <#@ import namespace="Company.CompartmentDragDrop" #> <#@ import namespace="Company.CompartmentDragDrop.ModelBusAdapters" #> <# // Get source root from directive processor: ExampleModel source = this.ExampleModel; // This DSL has a MBR in its root: using (ModelBusAdapter adapter = this.ModelBus.CreateAdapter(source.ModelReference) as ModelBusAdapter) { ModelBusAdapterManager manager = this.ModelBus.FindAdapterManagers(this.Host.ResolvePath("Sample.compDD1")).FirstOrDefault(); ModelBusReference modelReference = manager.CreateReference(this.Host.ResolvePath("Sample.compDD1")); // Get the root element of this model: using (CompartmentDragDropAdapter adapter = this.ModelBus.CreateAdapter(modelReference) as CompartmentDragDropAdapter) { ModelRoot root = adapter.ModelRoot; #> [[<#= root.Name #>]] <# } #>
Дополнительные сведения и пошаговое руководство см. в разделе Using Visual Studio ModelBus in a Text Template.
Сериализация ссылки ModelBus (ModelBusReference)
Если ModelBusReference (MBR) необходимо сохранить в виде строки, ее можно сериализовать:
string serialized = modelBus.SerializeReference(elementReference);
// Store it anywhere, then get it back again:
ModelBusReference elementReferenceRestored =
modelBus.DeserializeReference(serialized, null);
MBR, сериализованная подобным образом, не зависит от контекста. При использовании простого файлового адаптера ModelBus MBR содержит абсолютный путь к файлу. Этого достаточно, если файлы модели экземпляра никогда не перемещаются. Тем не менее файлы модели обычно являются элементами в проекте Visual Studio. Пользователи будут рассчитывать на возможность перемещать весь проект в различные части файловой системы, а также сохранять исходный контроль над проектом и открывать его на разных компьютерах. В связи с этим пути следует сериализовать относительно расположения проекта, содержащего файлы.
Сериализация относительно указанного пути к файлу
ModelBusReference содержит ReferenceContext — словарь, в котором можно хранить такую информацию, как путь к файлу, относительно которого его следует сериализовать.
Сериализация относительно пути:
elementReference.ReferenceContext.Add(
ModelBusReferencePropertySerializer.FilePathSaveContextKey,
currentProjectFilePath);
string serialized = modelBus.SerializeReference(elementReference);
Получение ссылки из строки:
ReferenceContext context = new ReferenceContext();
context.Add(ModelBusReferencePropertySerializer.FilePathLoadContextKey,
currentProjectFilePath);
ModelBusReference elementReferenceRestored =
modelBus.DeserializeReference(serialized, context);
Ссылки ModelBus, созданные другими адаптерами
Приведенные ниже сведения будут полезны при создании собственного адаптера.
ModelBusReference (MBR) состоит из двух частей: заголовка MBR, десериализованого шиной модели, и адаптера, который обрабатывается специальным диспетчером адаптеров. Это позволяет обеспечить собственный формат сериализации адаптера. Например, можно ссылаться на базу данных, а не на файл, или хранить дополнительные сведения в ссылке на адаптер. Собственный адаптер может помещать дополнительные сведения в ReferenceContext.
При десериализации MBR необходимо указать контекст ссылки (ReferenceContext), который сохраняется в объекте MBR. При сериализации MBR, сохраненное значение ReferenceContext используется адаптером для создания строки. Десериализованная строка не содержит все сведения, указанные в ReferenceContext. Например, в простом файловом адаптере ReferenceContext содержит корневой путь к файлу, который не хранится в сериализованной строке MBR.
MBR десериализуется в два этапа.
ModelBusReferencePropertySerializerпредставляет собой стандартный сериализатор, который работает с заголовком MBR. Он использует стандартный для DSL контейнер свойств SerializationContext, который сохраняется в ReferenceContext с помощью ключа ModelBusReferencePropertySerializer.ModelBusLoadContextKey. В частности, SerializationContext должен содержать экземпляр ModelBus.
Адаптер ModelBus работает с адаптерной частью MBR. Он может использовать дополнительные сведения, сохраненные в значении ReferenceContext ссылки ModelBus. Простой файловый адаптер хранит корневые пути к файлу, используя ключи FilePathLoadContextKey и FilePathSaveContextKey.
Ссылка на адаптер в файле модели десериализуется только в случае ее использования.
Создание модели
Создание, открытие и изменение модели
Следующий фрагмент взят из примера "Конечный автомат", приведенного на веб-сайте VMSDK. В нем показывается использование ссылок ModelBus для создания и открытия модели, а также для получения связанной с моделью схемы.
В данном примере целевой DSL имеет имя StateMachine. От него наследуются несколько имен, например имя класса модели и имя ModelBusAdapter.
using Fabrikam.StateMachine.ModelBusAdapters;
using Microsoft.VisualStudio.Modeling;
using Microsoft.VisualStudio.Modeling.Diagrams;
using Microsoft.VisualStudio.Modeling.Integration;
using Microsoft.VisualStudio.Modeling.Integration.Shell;
using Microsoft.VisualStudio.Modeling.Shell;
...
// Create a new model.
ModelBusReference modelReference =
StateMachineAdapterManager .CreateStateMachineModel(modelName, fileName);
//Keep reference of new model in this model.
using (Transaction t = ...)
{
myModelElement.ReferenceProperty = modelReference;
t.Commit();
}
// Get the ModelBus service from Visual Studio.
IModelBus modelBus = Microsoft.VisualStudio.Shell.Package.
GetGlobalService(typeof(SModelBus)) as IModelBus;
// Get a modelbus adapter on the new model.
ModelBusAdapter modelBusAdapter;
modelBus.TryCreateAdapter(modelReference,
this.ServiceProvider, out modelBusAdapter);
using (StateMachineAdapter adapter =
modelBusAdapter as StateMachineAdapter)
{
if (adapter != null)
{
// Obtain a Diagram from the adapter.
Diagram targetDiagram =
((StandardVsModelingDiagramView)
adapter.GetDefaultView()
).Diagram;
using (Transaction t =
targetDiagram.Store.TransactionManager
.BeginTransaction("Update diagram"))
{
DoUpdates(targetDiagram);
t.Commit();
}
// Display the new diagram.
adapter.GetDefaultView().Show();
}
}
Проверка ссылок
BrokenReferenceDetector проверяет все свойства домена в хранилище (Store), которое может содержать ссылки ModelBus (ModelBusReference). Он вызывает действие, которое определяет место выполнения любого действия. Это особенно полезно для методов проверки. Следующий метод проверки тестирует хранилище, пытаясь сохранить модель, и сообщает в окне ошибок о "битых" ссылках:
[ValidationMethod(ValidationCategories.Save)]
public void ValidateModelBusReferences(ValidationContext context)
{
BrokenReferenceDetector.DetectBrokenReferences(this.Store,
delegate(ModelElement element, // parent of property
DomainPropertyInfo property, // identifies property
ModelBusReference reference) // invalid reference
{
context.LogError(string.Format(INVALID_REF_FORMAT,
property.Name,
referenceState.Name,
new ModelBusReferenceTypeConverter().
ConvertToInvariantString(reference)),
"Reference",
element);
});
}}
private const string INVALID_REF_FORMAT =
"The '{0}' domain property of ths ReferenceState instance "
+ "named '{1}' contains reference value '{2}' which is invalid";
Действия, выполняемые расширением ModelBus
Следующая информация не является существенно важной, но может пригодиться при широком использовании ModelBus.
Расширение ModelBus вносит в решение DSL описанные ниже изменения.
Щелкните схему "Определение DSL" правой кнопкой мыши, выберите пункт Включить Modelbus, а затем Включить этот DSL, чтобы использовать ModelBus.
В проекте DSL ссылка добавляется в Microsoft.VisualStudio.Modeling.Sdk.Integration.11.0.dll.
В окне "Определение DSL" добавляется ссылка внешнего типа: Microsoft.VisualStudio.Modeling.Integration.ModelBusReference.
Эту ссылку можно увидеть в окне Обозреватель DSL под элементом Типы домена. Чтобы добавить ссылки внешнего типа вручную, щелкните корневой узел правой кнопкой мыши.
Добавится новый файл шаблона, Dsl\GeneratedCode\ModelBusReferencesSerialization.tt.
Установив тип свойства домена для ссылки ModelBus, щелкните свойство правой кнопкой мыши и выберите пункт Включить специальные свойства ModelBusReference.
В свойство домена будут добавлены несколько атрибутов CLR. Их можно увидеть в поле "Пользовательские атрибуты" окна "Свойства". В файле Dsl\GeneratedCode\DomainClasses.cs атрибуты можно найти в объявлении свойства:
[System.ComponentModel.TypeConverter(typeof( Microsoft.VisualStudio.Modeling.Integration.ModelBusReferenceTypeConverter))] [System.ComponentModel.Editor(typeof( Microsoft.VisualStudio.Modeling.Integration.Picker .ModelReferenceEditor // or ModelElementReferenceEditor ), typeof(System.Drawing.Design.UITypeEditor))] [Microsoft.VisualStudio.Modeling.Integration.Picker .SupplyFileBasedBrowserConfiguration ("Choose a model file", "Target model|*.target")]
Щелкните схему "Определение DSL" правой кнопкой мыши и выберите пункт Включить ModelBus, а затем Предложить этот DSL для ModelBus.
Новый проект ModelBusAdapter будет добавлен в решение.
Ссылка на ModelBusAdapter будет добавлена в проект DslPackage. В ModelBusAdapter появится ссылка на проект Dsl.
В DslPackage\source.extention.tt |ModelBusAdapter| будет добавлен в качестве компонента MEF.
См. также
Основные понятия
How to: Open a Model from File in Program Code
Практическое руководство. Интеграция моделей UML с другими моделями и средствами
Практическое руководство. Добавление обработчика перетаскивания