To jest stara wersja strony!
Brudnopis
XML Metadata Interchange (XMI) to standard dla wymiany metadanych przy użyciu XMLa.
XMI może być używany dla jakichkolwiek metadanych, których metamodel da się wyrazić w specyfikacji MOF.
Metamodel jest zapisywany w postaci XML Document Type Definitions (DTD), zaś model jest zapisywany w XMI zgodnie z regułami określonymi w specyfikacji mapowania XMI (XMI Mapping Specification).
Najczęściej XMI jest używany jako format zapisu i wymiany modeli UMLa pomiędzy różnymi narzędziami
(jest to możliwe, gdyż UML jest oficjalnie zdefiniowany w metamodelu UML zgodnym z MOF).
XMI może zostać użyty także do zapisu aplikacji (np. Java, C++), komponentów (np. EJB), baz danych (np. CWM).
XMI może definiować: [za: 1]
reprezentację obiektów i atrybutów,
powiązania między obiektami (w tym samym pliku lub międzyplikowe),
referencje do innych obiektów poprzez wykorzystanie identyfikatorów,
wersjonowanie obiektów i ich definicji,
walidację dokumentów XMI przy pomocy DTD i XML Schema.
Należy podkreślić, że w obecnej postaci służy zapisowi modelu, a nie diagramów,
gdyż nie determinuje postaci wizualnej wykraczającej poza formalną treść modelu. [2]
Uproszczony przykład reprezentacji klasy
Uproszczony przykład reprezentacji klasy zapisanej przy pomocy XMLa: [za: 3]
Reprezentacja powyższej klasy w XMI wygenerowana przy użyciu StarUML:
<?xml version = "1.0" encoding = "UTF-8"?>
<XMI xmi.version = "1.1" xmlns:UML="href://org.omg/UML/1.3">
<XMI.content>
<UML:Model xmi.id="UMLModel" name="Design Model">
<UML:Class xmi.id="UMLClass" name="Osoba" visibility="public" namespace="UMLModel">
<UML:Classifier.feature>
<UML:Attribute xmi.id="UMLAttribute.6" name="imie"
visibility="public" owner="UMLClass"/>
<UML:Attribute xmi.id="UMLAttribute.7" name="nazwisko"
visibility="public" owner="UMLClass"/>
<UML:Attribute xmi.id="UMLAttribute.8" name="pesel"
visibility="public" owner="UMLClass"/>
</UML:Classifier.feature>
</UML:Class>
</UML:Model>
</XMI.content>
</XMI>
Przykład dwóch klas powiązanych asocjacją
Przykład dokumentu XMI dla dwóch klas powiązanych asocjacją (z zaznaczonymi rolami i licznością) wygenerowanego przy użyciu StarUML:
<?xml version = "1.0" encoding = "UTF-8"?>
<XMI xmi.version = "1.1" xmlns:UML="href://org.omg/UML/1.3">
<XMI.header>
<XMI.metamodel xmi.name = "UML" xmi.version = "1.3"/>
</XMI.header>
<XMI.content>
<UML:Model xmi.id="UMLProject.1">
<UML:Namespace.ownedElement>
<UML:Package xmi.id="UMLPackage.2" name="Package1" namespace="UMLProject.1">
<UML:Namespace.ownedElement>
<UML:Class xmi.id="UMLClass.3" name="Firma"
namespace="UMLPackage.2" participant="UMLAssociationEnd.6"/>
<UML:Class xmi.id="UMLClass.4" name="Osoba"
namespace="UMLPackage.2" participant="UMLAssociationEnd.7"/>
<UML:Association xmi.id="UMLAssociation.5" name=""
visibility="public" namespace="UMLPackage.2">
<UML:Association.connection>
<UML:AssociationEnd xmi.id="UMLAssociationEnd.6"
name="pracodawca" visibility="public" targetScope="instance"
ordering="unordered" aggregation="none" isNavigable="true"
association="UMLAssociation.5" type="UMLClass.3">
<UML:AssociationEnd.multiplicity>
<UML:Multiplicity xmi.id="X.8">
<UML:Multiplicity.range>
<UML:MultiplicityRange xmi.id="X.9" lower="1" upper="-1"
multiplicity="X.8"/>
</UML:Multiplicity.range>
</UML:Multiplicity>
</UML:AssociationEnd.multiplicity>
</UML:AssociationEnd>
<UML:AssociationEnd xmi.id="UMLAssociationEnd.7"
name="pracownik" visibility="public" targetScope="instance"
ordering="unordered" aggregation="none" isNavigable="true"
association="UMLAssociation.5" type="UMLClass.4">
<UML:AssociationEnd.multiplicity>
<UML:Multiplicity xmi.id="X.10">
<UML:Multiplicity.range>
<UML:MultiplicityRange xmi.id="X.11" lower="-1" upper="-1"
multiplicity="X.10"/>
</UML:Multiplicity.range>
</UML:Multiplicity>
</UML:AssociationEnd.multiplicity>
</UML:AssociationEnd>
</UML:Association.connection>
</UML:Association>
</UML:Namespace.ownedElement>
</UML:Package>
</UML:Namespace.ownedElement>
</UML:Model>
</XMI.content>
</XMI>
Źródła