XMI

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

XMI (XML Metadata Interchange) — стандарт OMG для обмена метаданными с помощью языка XML. Может использоваться для любых метаданных, если их метамодель может быть выражена с помощью MOF (Meta-Object Facility). [1] Наиболее часто XMI применяется как формат обмена UML-моделями. Информатик не мог раньше импортировать UML-модель из одного инструмента UML-моделирования в другой - из-за различий в определении синтаксиса и семантики элементов языка. [2]

Синтаксис[править | править вики-текст]

Спецификация XMI довольно сложна (в версии 1.2 - более 400 страниц). Метамодель языка UML, изложенная на XMI, также пугающе велика. Чтобы дать общее представление о синтаксисе, воспользуемся тем фактом, что на XMI определяется не только метамодель языка UML, но и конкретные UML-модели, и приведем лишь определение UML-конструкции "адрес"[3]. Последующие пояснения синтаксиса языка приведены также из упомянутого источника. Обратите внимание, что тэги "UML:Class", "UML:Attribute", "UML:Classifier" не принадлежат языку XMI, а были определены в метамодели языка UML, на которую ссылается данный XMI-файл.

Пример XMI-файла: адрес[править | править вики-текст]

<?xml version="1.0"?> <XMI xmi.version="1.2" xmlns:UML="org.omg/UML/1.4">

<XMI.header>
 <XMI.documentation>
  <XMI.exporter>ananas.org stylesheet</XMI.exporter>
 </XMI.documentation>
 <XMI.metamodel xmi.name="UML" xmi.version="1.4"/>
</XMI.header>
<XMI.content>
 <UML:Model xmi.id="M.1" name="address" visibility="public"
             isSpecification="false" isRoot="false"
             isLeaf="false" isAbstract="false">
  <UML:Namespace.ownedElement>
   <UML:Class xmi.id="C.1" name="address" visibility="public"
              isSpecification="false" namespace="M.1" isRoot="true"
              isLeaf="true" isAbstract="false" isActive="false">
    <UML:Classifier.feature>
     <UML:Attribute xmi.id="A.1" name="name" visibility="private"
                    isSpecification="false" ownerScope="instance"/>
     <UML:Attribute xmi.id="A.2" name="street" visibility="private"
                    isSpecification="false" ownerScope="instance"/>
     <UML:Attribute xmi.id="A.3" name="zip" visibility="private"
                    isSpecification="false" ownerScope="instance"/>
     <UML:Attribute xmi.id="A.4" name="region" visibility="private"
                    isSpecification="false" ownerScope="instance"/>
     <UML:Attribute xmi.id="A.5" name="city" visibility="private"
                    isSpecification="false" ownerScope="instance"/>
     <UML:Attribute xmi.id="A.6" name="country" visibility="private"
                    isSpecification="false" ownerScope="instance"/>
    </UML:Classifier.feature>
   </UML:Class>
  </UML:Namespace.ownedElement>
 </UML:Model>
</XMI.content>

</XMI>

XMI шапка[править | править вики-текст]

XMI определяет следующие теги и атрибуты:

  • XMI всегда является корневым элементом. Он должен иметь атрибут xmi.version (действующие версии 1.0, 1.1, 1.2 и 2.0).
    • XMI.header - шапка. Наиболее важны ее дети XMI.documentation и XMI.metamodel.
      • XMI.documentation содержит информацию о конечном пользователе:
        • XMI.owner - владелец метамодели
        • XMI.contact - его контактные данные
        • XMI.longDescription - длинное описание владельца
        • XMI.shortDescription - короткое описание
        • XMI.exporter - экспортер
        • XMI.exporterVersion - версия экспортера
        • XMI.exporterID - идентификатор экспортера
        • XMI.notice - комментарий
      • XMI.metamodel - описание метамодели, к которой алгоритм XMI был применен
    • XMI.content - содержание модели
      • xmi.id - уникальный идентификатор ссылки на метамодель
      • xmi.idref - сама ссылка на метамодель.

Средства описания метамоделей[править | править вики-текст]

UML-метамодель, это модель, которая описывает язык UML - в частности, она описывает классы, атрибуты, ассоциации, пакеты (packages), сотрудничество (collaborations), варианты использования (use cases), актеры, сообщения, состояния и другие понятия языка UML. Метамодель сама может быть написана в UML.

Приставка "мета" означает, что метамодель описывает модель модели. Кроме того, XML используется в данном случае как метаязык (язык, на котором описывается другой язык). Метамодель UML опубликована в спецификации UML. Более конкретно, XMI использует "UML Model Interchange", описанную в главе 5 спецификации UML.

Одним из центральных понятий в UML, по крайней мере - в диаграммах классов - является само понятие "class". В метамодели это понятие моделируется метаклассом Class, наследующим от абстрактного метакласса Classifier. Classifier является родительским для класса, интерфейса и типа данных. Цепочку наследования продолжают: GeneralizableElement, который представляет все концепции, которые могут быть генерализованы (то-есть - унаследованы от других); ModelElement, который представляет все абстракции в модели (такие как пространство имен, ограничения, класс), и, наконец Element, самый верхний метакласс. Каждый из этих метаклассов имеет атрибуты, из которых Class наследует.

Существует композиция между Classifier и Feature, являющейся родителем StructuralFeature. Attribute наследует от StructuralFeature.

Программы, использующие этот формат[править | править вики-текст]

Примечания[править | править вики-текст]

  1. Сайт OMG о XMI
  2. Stevens, P. XMI and MOF: a mini-tutorial. University of Edinburgh.
  3. Marchal B. Working XML: UML, XMI, and code generation, Part 2