Universally Unique Identifier (UUID) in Innovator

UUIDs dienen dazu, Informationen in verteilten Systemen automatisch und mit sehr hoher Sicherheit eindeutig identifizieren zu können. In Innovator müssen Sie einige Aspekte bei deren Verwendung berücksichtigen.

Universally Unique Identifier

Was ist ein Universally Unique Identifier?

Ein Universally Unique Identifier (UUID) ist ein Identifikator innerhalb der Softwareentwicklung, der von der Open Software Foundation (OSF) als Teil des Distributed Computing Environment (DCE) standardisiert wird. UUIDs dienen dazu, Informationen in verteilten Systemen automatisch und mit sehr hoher Sicherheit eindeutig kennzeichnen zu können.

Eine UUID besteht aus einer 16-Byte-Zahl, die in fünf Gruppen unterteilt wird. In seiner Normalform sieht eine UUID beispielsweise so aus: 5fcb94e2-c083-cd74-839b-eba953124e6f.

UUID-fähige Innovator-Elemente

Beim Erzeugen wird für die Modell- und Profilelemente eines Innovator-Modells eine UUID vergeben.

Im Folgenden werden die Profilelemente, die Sie im Konfigurationseditor bearbeiten, und die eigentlichen Modellelemente, die Sie im Innovator-Modelleditor bearbeiten, unter dem Begriff Modellelement zusammengefasst, sofern sie nicht ausdrücklich unterschieden werden.

Die UUID erlaubt es, ein Modellelement in verschiedenen Versionsständen eines Innovator-Modells zu identifizieren. Somit können Elemente, die in einer Folgeversion umbenannt bzw. in einen anderen Namensraum verschoben wurden, trotz geänderter struktureller Eigenschaften identifiziert werden.

Vergabe einer UUID

Die UUID wird beim Erzeugen einer UUID-fähigen Instanz vergeben. Diese UUID ist dann über alle Innovator-Repositorys eindeutig. Die UUID eines Elements wird während seiner Lebensdauer nicht geändert, außer dies wird im Rahmen einer Konfliktauflösung beim Importieren eines Modellfragments bzw. interaktiv im Editor Modelle abgleichen explizit gewünscht.

Zu einigen Elementen kann ein Bild gespeichert werden. Diagramme nutzen dieses Bild als Vorschaubild. Wenn sich die Darstellung des Diagramms ändert, dann müssen auch die Vorschaubilder angepasst werden. Die UUID der Bilder wird dabei nach einem festen Schema berechnet und bleibt damit konstant.

Für Werte von Stereotypeigenschaften, Typsystemoptionen und Labels wird die UUID ebenfalls nach einem festen Schema berechnet und bleibt damit ebenfalls konstant.

Beim Importieren eines Modellfragments werden die darin enthaltenen Elemente im Modell gesucht. Sie können festlegen, nach welchem Verfahren importierte Modellelemente ihren Platz im Modell finden sollen und wie im Konfliktfall (Namensgleichheit im Namensraum) verfahren wird.

UUIDs beim Importieren eines Modellfragments

Suchstrategien beim Importieren eines Modellfragments

Suche nach Elementen über UUID

Durch eine Suche über UUID können auch umbenannte und verschobene Elemente gefunden werden.

Die Suche über UUID kann aber beim Einfügen des zu importierenden Elements zur Verletzung der Eindeutigkeit von Namensräumen führen. Wird in einem Paket beispielsweise eine umbenannte Klasse über ihre UUID gefunden, dann kann sie in der Modellfragmentdatei einen Namen besitzen, der im Modell bereits wieder für eine andere Klasse aus demselben Paket vergeben ist. Nach dem Importieren würde das Paket zwei gleichnamige Klassen enthalten, was verhindert werden muss.

Suche nach Elementen über strukturelle Eigenschaften (Namensraum)

Ergänzend erfolgt eine Suche über strukturelle Eigenschaften. Umbenannte bzw. in der Modellhierarchie verschobene Elemente können mit diesem Verfahren nicht mehr gefunden werden. Bereits im Namensraum existierende Elemente werden beim Importieren aus dem Modell gelöscht und durch ihre geänderte Version aus der Modellfragmentdatei ersetzt. Beim Löschen gehen sämtliche Referenzen auf diese Instanzen verloren.

Umbenannte oder in der Modellhierarchie verschobene Elemente, die nicht mehr gefunden werden, werden im importierenden Modell nur dann gelöscht, wenn sie zu einem als Modellfragment speicherbaren Element gehören, das über die Suche gefunden wird. Tabellen sind z.B. solche "versionierbaren" Elemente, deren Spalten jedoch nicht, da sie nicht unabhängig von einer Tabelle existieren können. Wird also einerseits z.B. eine im Modell nach dem Speichern des Modellfragments umbenannte Spalte in einer Tabelle in der Modellfragmentdatei nicht identifiziert, wird im Modell diese umbenannte Spalte aus der Tabelle gelöscht und die ursprüngliche Spalte aus der Modellfragmentdatei eingefügt. Wird andererseits z.B. eine umbenannte Tabelle in der Modellfragmentdatei nicht identifiziert, wird diese nicht im Modell gelöscht, sondern die ursprüngliche Tabelle zusätzlich dort eingefügt.

Generelles zusätzliches Suchprinzip für beide Suchstrategien

Beide Suchstrategien werden durch die jeweils andere ergänzt, um bestehende Widersprüche zwischen Modellfragmentdatei und Modell sicher erkennen zu können. Wenn diese Widersprüche nicht durch die Vorgaben für den Import (zur (vorrangigen) Suchstrategie und zur UUID-Berücksichtigung) gelöst werden können, wird von einem Konflikt gesprochen. In diesem Fall können Sie als Anwender entscheiden wie der Konflikt gelöst werden soll.

Konflikte bei der Suche nach identischen Elementen

Konflikte können bei der Suche nach identischen Elementen im Modell durch widersprüchliche Suchergebnisse über UUID bzw. Namensraum entstehen.

Kein Konflikt liegt vor, wenn UUID und strukturelle Eigenschaften identisch sind, da dann von einem identischen Element ausgegangen werden kann.

Ebenso liegt kein Konflikt vor, wenn ein Element mit gleicher UUID und anderen strukturellen Eigenschaften gefunden wird, da der Import eines Modellfragments dem (widerspruchsfreien) Importieren des Versionsstands dienen soll.

Es sind also zwei Konfliktfälle zu behandeln:

  • Konflikt durch strukturell gleiche Elemente mit anderer UUID
  • Konflikt durch verschiedene Fundstellen für UUID und Namensraum
Tabelle: Konflikt durch strukturell gleiche Elemente mit anderer UUID
Konflikt 1 UUID-Suche findet nichts, strukturelle Suche findet ein Element mit gleichem Namen und Namensraum.
Problem Wenn das importierte Element neu erzeugt wird, dann entstehen zwei strukturell gleiche Elemente.
Konfliktlösung 1.1 Die Modelle werden (interaktiv) so geändert, dass die strukturelle Suche keinen Treffer liefert.
Konfliktlösung 1.2 Das importierte Element ersetzt das gefundene Element und behält dabei seine UUID aus der Modellfragmentdatei. Somit wird die UUID eines bestehenden Modellelements geändert.
Konfliktlösung 1.3 Das importierte Element ersetzt das strukturell gefundene Element und erhält dabei die UUID des im Modell gefundenen Elements. Somit wird die UUID des importierten Elements aus der Modellfragmentdatei verworfen.
Tabelle: Konflikt durch verschiedene Fundstellen für UUID und Namensraum
Konflikt 2 UUID-Suche und strukturelle Suche finden verschiedene Elemente.
Problem Wird das über UUID gefundene Element angepasst, dann entstehen zwei strukturgleiche Elemente.
Konfliktlösung 2.1 Die Modelle werden (interaktiv) so geändert, dass die strukturelle Suche keinen Treffer liefert.
Konfliktlösung 2.2 Das importierte Element ersetzt das gefundene Element und behält dabei seine UUID aus der Modellfragmentdatei. Um die Eindeutigkeit der UUID nicht zu verletzen, muss für das über die UUID-Suche gefundene Element eine neue UUID erzeugt werden. Somit werden die UUIDs von zwei Elementen geändert.
Konfliktlösung 2.3 Das importierte Element ersetzt das strukturell gefundene Element und erhält dabei die UUID des im Modell gefundenen Elements. Somit wird die UUID des importierten Elements aus der Modellfragmentdatei verworfen. Das strukturell gefundene Element behält seine alte UUID. Im Modell ist also weiterhin ein anderes Element mit der verworfenen UUID des importierten Elements enthalten.

Weitere Aspekte der Verwendung von UUIDs in Innovator

Laden einer Add-on-Modellvorlage

Beim Laden einer Add-on-Vorlage in der Backstage Administrative Aufgaben können zwar Konflikte auftreten, sie werden jedoch stets einheitlich in folgender Weise gelöst.

Tipp

Sie können sich über die Konsequenzen des Imports vorab informieren, indem Sie als Verhalten zunächst Import abbrechen wählen.

  • Konfigurationsbestandteile werden stets mit den Optionen Elemente über UUID identifizieren und UUIDs beim Import übernehmen für die Suche sowie dem Verhalten Das im Modell bereits vorhandene Element wird eindeutig umbenannt im Konfliktfall importiert. Dies gilt entsprechend für den Import einer Profil-Vorlage im Konfigurationseditor.

  • Modellbestandteile werden stets mit der Option Elemente über UUID identifizieren, jedoch mit deaktivierter Option UUIDs beim Import übernehmen (UUIDs des Modells werden verwendet und neue Modellelemente erhalten neue UUIDs) sowie dem Verhalten Das aus dem Modellfragment übernommene Element wird eindeutig umbenannt importiert.

Modelle, die anhand derselben Modellvorlage erstellt wurden, sind somit voneinander unabhängige Modelle. Sie stehen in keiner Vorgänger-Nachfolger-Beziehung untereinander bzw. zur Modellvorlage.

Modell kopieren

Im Administrationsprogramm können Sie Modelle kopieren und in das gleiche oder ein anderes Repository einfügen.

Die UUIDs des Quellmodells werden im Zielmodell beibehalten. Beide Modelle sind somit identisch und unterscheiden sich zunächst höchstens im Namen.

Modelle zusammenführen

Zum Ermitteln von Modellunterschieden wird im Editor Modelle abgleichen zu einem gegebenen Element aus dem linken Modell ein entsprechendes Element im rechten Modell ermittelt. Die Suche im rechten Modell erfolgt wie bei der Suche eines Platzhalterelements beim Kopieren/Einfügen vorrangig über ihre UUID bzw. eine strukturelle Suche, falls über die UUID kein Treffer ermittelt wird.

Daher kann die UUID eines Elements von seinem entsprechenden Element übernommen werden, wenn es über eine strukturelle Suche identifiziert wurde.

Innovator-Modellreferenzen

Mittels der URI-Funktionalität (Uniform Resource Identifier) von Innovator können Sie von externen Anwendungen (Word-Dokumente, Präsentationen, E-Mails usw.) oder von einem Innovator-Spezifikationstext direkt zu einem Innovator-Modellelement in einem beliebigen, erreichbaren Modell springen. Zeitraubendes Navigieren durch den Modellbaum entfällt.

Die Innovator-URI (URL-Protokoll inno) wird unter Verwendung der UUID konstruiert, z. B.

inno://./Demo/Innovator/Modell%20einer%20Autovermietung?uuid=9de33f98-a03f-5817-8bd4-5e335887a410.

oAW-Schablonen

Geschützte Bereiche in oAW-Schablonen können durch Verwendung der UUID eines Elements identifiziert werden.