U

uml2xsd

EMF basiertes Skript zur Transformation von UML Klassendiagrammen nach XSD

UML to XSD

Damit eine Software ihren Anforderungen entspricht, ist die Dokumentation des Konzepts der Software nicht das entscheidende Kriterium. Die Dokumentation ist jedoch notwendig, um die Nachhaltigkeit einer Software zu gewährleisten. Nur mit einer Dokumentation können neue Entwickler die bestehenden Konzepte einer Software eindeutig verstehen und effizient weiterentwickeln.

Zu diesem Zweck wurde von der OMG die grafische Modellierungssprache UML eingeführt. Sie zielt hauptsächlich auf gute Lesbarkeit durch den Menschen ab, auch wenn sie in einer Notation beschrieben wird, die auch von Maschinen verarbeitet werden kann. UML ist sehr umfangreich und unterstützt eine große Anzahl an Diagrammen. Wir beschränken uns hier auf das Klassendiagramm der UML, da wir uns hauptsächlich mit statischen Modellen beschäftigen. Um eine Dokumentation des Modells als Teil des Konzepts einer Software anzufertigen, gibt es zwei Varianten:

  1. Die Klassen des Modells in einer Programmiersprache implementieren und die Struktur im Nachhinein in UML nachzeichnen.
  2. Ein Modell in UML als Klassendiagramm anfertigen und die Klassen anschließend entlang des Diagramms implementieren.

Die zweite Variante beschreibt das Modell als Klassendiagramm unabhängig von der Programmiersprache. Sie stellt eine abstraktere Dokumentation dar, in der das Konzept des Entwurfs für das Modell am klarsten erkennbar ist. Bei der Entwicklung von komplexer Software ist es sinnvoll, vom Abstrakten zum Konkreten zu gehen. Aus diesem Grund sollte die zweite Variante der ersten vorgezogen werden.

Ein Entwickler muss in beiden Fällen manuell das Modell der UML in ein Modell der jeweiligen Programmiersprache überführen oder umgekehrt. Dieser Vorgang ist aufwendig und fehleranfällig. Es wäre effizienter, wenn die Überführung des Modells in UML in ein Modell der jeweiligen Programmiersprache automatisiert geschehen kann.

Das Eclipse Projekt Papyrus, versucht genau diese Funktionalität anzubieten. Es handelt sich um einen UML Editor, mit dem ein UML Klassendiagramm in ein Ecore basiertes Modell für eine Java Laufzeit überführt werden kann. Problematisch ist jedoch, dass beim Überführen in ein Ecore Modell die Unabhängigkeit der Plattform verletzt wird. Das Modell kann dann nur noch in Software auf Grundlage der Java Laufzeit und des Ecore Metamodells genutzt werden.

Um unabhängig davon zu sein, könnte man die XML Schema Sprache XSD nutzen, mit der Modelle beschrieben werden. Im Gegensatz zu UML handelt es sich nicht um eine grafische Notation, sondern XSD wurde hauptsächlich dafür entwickelt, von Maschinen auswertbar zu sein. Würde ein Modell in XSD vorliegen, so ist es mit XML Binding Frameworks wie JAXB, PyXB oder XML Data Binding for C++ leicht, dieses in eine Programmiersprache zu überführen. Die Verwendung von XSD hat den Vorteil, dass Instanzen des Modells in der verbreiteten Notation XML persistiert und ausgetauscht werden können.

Das Metamodell Ecore ist angelehnt an die MOF und in Papyrus existieren Funktionen, die es erlauben, das Ecore Modell in ein XSD Schema zu exportieren. Dieses Schema nutzt als einzige weitere Referenz eine Teilmenge des XMI Standards. Es ist also möglich mit dem Papyrus Projekt ein Modell in UML zu definieren, dieses nach XSD zu überführen, um es anschließend mittels XML Binding in einer Programmiersprache zu verwenden. Was genau aus dem UML in das XSD überführt werden kann, ist noch zu untersuchen. Klar ist, dass nicht alle in UML möglichen Konzepte nach XSD überführbar sind. So gibt es zum Beispiel kein Äquivalent zu einer UML Methode in XSD.

Der ganze Prozess kann vollständig manuell über die Oberfläche in Papyrus durchgeführt werden. Um einen höheren Grad an Automatisierung zu erreichen, wurde ein Shell Skript sowie ein Ant Build File konfiguriert. Mit diesen beiden Dateien, ist es möglich das Modell eines UML Klassendiagramms in einem Schritt in eine XSD zu überführen.

Es wird vorausgesetzt, dass java ausführbar ist und auf Windows Betriebssystemen die git-bash genutzt wird. Um Papyrus schnell und unkompliziert zu beziehen, kann es mit folgendem Befehl gestartet werden.

# gegebenenfalls wird Papyrus heruntergeladen und entpackt
./uml2xsd

Sobald in Papyrus ein Modell in UML als Klassendiagramm erstellt wurde, kann es dann mit folgendem Befehl in ein XSD überführt werden.

# es wird der Pfad zur UML Datei benötigt
./uml2xsd /pfad/zum/modell_in.uml

Anschließend liegt im aktuellen Verzeichnis die XSD Datei des Modells und eine Kopie des Schemas für XMI. Je nach Programmiersprache, in der das Modell jetzt verwendet werden soll, kann dann ein geeignetes XML Binding Framework verwendet werden. Beispielsweise könnte man JAXB nutzen.

# zuerst wird das Verzeichnis für den Java Quellcode erstellt
mkdir src-gen
# anschließend wird das Modell in XSD mit xjc in Java Quellcode übersetzt
xjc -d src-gen modell_in.xsd