XMI - smiffy.de
Transcription
XMI - smiffy.de
Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 Current Workflow Rules T1 Extensions Rules XMLfile DOM processing with Meta API-calls Model 1 T2 Model 2 Code Generation (Smarty) Source code PP formatted sourcecode V1 DTD Rules XMI 1/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 Anbindung eines graphischen Frontends Optionen: • Entwicklung eines graphischen Editors (z.B. mit Hilfe des Eclipse Graphical editing framework - GEF) • Einsatz eines handelsüblichen UML-Modellierungstools (Magic Draw, Poseidon, ...) mit XMI-Export • XMI ist das Standardaustauschformat für UML Modelle (OMG) • Hauptbestandteile von XMI: • XMI model (semantische Information des UML-Modells) • XMI diagram (Darstellungsinformationen) • Aktuelle Version: 2.1 • Ein sehr „gesprächiges“ Format XMI 2/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 Werkzeuge UML - Editor • • • • XML Editor • Oxygen Version 9.3 Magic Draw UML 17.04 • Im Poolraum installiert Unterstützt XMI 2.1 • Trialversion verfügbar Trialversion verfügbar Homepage: http://www.magicdraw.com/ XSLT-Prozessor (Kommandozeile) • Xalan-C++ (Apache 2 License) • Download von http://xml.apache.org/xalan-c/ (benötigt zusätzlich Xerces-C++) XQuery-Prozessor (Kommandozeile) • Zorba (Apache 2 License) • Download von http://www.zorba-xquery.com/html/download XMI 3/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 UML Klassenmodell XMI 4/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 Struktur XMI (1) XMI 5/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 Struktur XMI (2) XMI 6/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 Struktur XMI (3) XMI 7/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 Struktur XMI (4) XMI 8/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 XML-Element f. Klasse <packagedElement xmi:type="uml:Class" xmi:id="_485" name="Film" visibility="public" isLeaf="false" isAbstract="false" isActive="false"> <ownedAttribute xmi:type="uml:Property" xmi:id="..._503" name="titel" visibility="private" isOrdered="false" isUnique="true" isLeaf="false" ...> <type xmi:type="uml:PrimitiveType" href="...uml.xml#String"> <xmi:Extension extender="MagicDraw UML 16.5"> <referenceExtension referentPath="...s::PrimitiveTypes::String" referentType="PrimitiveType"/> </xmi:Extension> </type> </ownedAttribute> <ownedAttribute xmi:type="uml:Property" xmi:id="_505" name="erscheinungsjahr" visibility="private" ... > <type xmi:type="uml:DataType" href="UML_Standard_Pr...3305590699_364818_1"> <xmi:Extension extender="MagicDraw UML 16.5"> <referenceExtension referentPath="...::datatypes::date" referentType="DataType"/> </xmi:Extension> </type> </ownedAttribute> XMI 9/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 <ownedAttribute xmi:type="uml:Property" xmi:id="..._541" name="schauspieler" visibility="public" ... type="..._509"> <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="..._560" name="" visibility="public" value="*"/> <lowerValue xmi:type="uml:LiteralInteger" xmi:id="..._559" name="" visibility="public" value="0"/> </ownedAttribute> <ownedAttribute xmi:type="uml:Property" xmi:id="..._568" name="regisseur" visibility="public" ... type="..._509" association="..._567"> <xmi:Extension extender="MagicDraw UML 16.5"> <modelExtension> <upperValue xmi:id="..._592" name=""visibility="public" value="1"/> </modelExtension> </xmi:Extension> <lowerValue xmi:type="uml:LiteralInteger" xmi:id="..._591" name="" visibility="public" value="0"/> </ownedAttribute> </packagedElement> XMI 10/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 XML-Element f. Assoziation <packagedElement xmi:type="uml:Association" xmi:id="..._539" name="spielt_mit" visibility="public" > <memberEnd xmi:idref="..._540"/> <memberEnd xmi:idref="..._541"/> </packagedElement> <packagedElement xmi:type="uml:Association" xmi:id="..._567" name="fuehrt_regie" visibility="public" > <memberEnd xmi:idref="..._568"/> <memberEnd xmi:idref="..._569"/> </packagedElement> XMI 11/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 Oxygen - XPath Builder XMI 12/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 XPath zur Extraktion relevanter Teile • Klassen des Modells /xmi:XMI/uml:Model/packagedElement[@xmi:type='uml:Class'] • Attribute einer Klasse /xmi:XMI/uml:Model/packagedElement[@xmi:type='uml:Class' and @name='Film'] /ownedAttribute[type]/@name • Assoziationsenden einer Klasse /xmi:XMI/uml:Model/packagedElement[@xmi:type='uml:Class' and @name='Film'] /ownedAttribute[@association]/@name • Assoziationen des Modells /xmi:XMI/uml:Model/packagedElement[@xmi:type='uml:Association'] • ID’s der Assoziationsenden einer Assoziation /xmi:XMI/uml:Model/packagedElement[@xmi:id='_16_5_ca5026a_1241545088561_668956_605'] /memberEnd/@xmi:idref XMI 13/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 ... puh, und jetzt ? Möglichkeiten: • Anpassen des Importfilters auf XMI • Transformation von XMI in unser Format • XQuery (z.B. mittels Zorba) • XSLT (z.B. mittels Xalan) XMI 14/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 XQuery Transformation (1) declare namespace xmi = "http://www.omg.org/spec/XMI/20110701"; declare namespace uml="http://www.omg.org/spec/UML/20110701"; for $class in /xmi:XMI/uml:Model/packagedElement[@xmi:type='uml:Class'] return <class name="{$class/@name}"/> <?xml version="1.0" encoding="UTF-8"?> <class name="Film"/> <class name="Person"/> XMI 15/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 XQuery Transformation (2) declare namespace xmi = "http://schema.omg.org/spec/XMI/2.1"; declare namespace uml="http://schema.omg.org/spec/UML/2.2"; for $class in /xmi:XMI/uml:Model/packagedElement[@xmi:type='uml:Class'] return <class name="{$class/@name}"> {for $attribute in $class/ownedAttribute[type] return <attribute name="{$attribute/@name}"/>} </class> <?xml version="1.0" encoding="UTF-8"?> <class name="Film"> <attribute name="titel"/> <attribute name="erscheinungsjahr"/> </class> <class name="Person"> <attribute name="nachname"/> <attribute name="vorname"/> </class> XMI 16/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 • attribute/@type: analog Attribut ’name’ + fn:substring-after($string, $delim) • Element relation: analog Element ’attribute’ mit xml-Attributen: • @min • @max • @role • @relation_name Hinweis: z.T. sind die Hierarchien bei den Kardinalitäten und Datentypen leicht unterschiedlich (--> // statt / benutzen) XMI 17/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 Weitere Modelltransformation • Unsere XMI Datei ist plattformunabhängig und kennt deshalb nicht das Konzept des Primärschlüssels • Wie kann diese Information hinzugefügt werden ? • Modell Transformation mithilfe der Metamodell API • XSLT Transformation • Eingabaut in Transformation von XMI -> unserem XML • Separate Transformation unseres XML Modells (Stylesheet siehe nächste Seite) XMI 18/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 XSLT-Transformation <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" doctype-system="my-meta.dtd"/> handle all existing attributes <xsl:template match="class"> <class> add ’id’ attribute <xsl:apply-templates select="@*"/> <attribute name="id" type="Integer" primary-key="true"/> <xsl:apply-templates select="node()"/> </class> handle all subelements </xsl:template> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> identity stylesheet </xsl:stylesheet> XMI 19/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 Current Workflow new features in blue Stylesheet Rules Rules XSLT T1 T3 UML modeling tool Rules XMI XQuery Engine XMLFile DOM processing with Meta API-calls Model 1 T2 Model 2 Extensions Code Generation (Smarty) Source Code PP Formatted Source Code V1 XQuery DTD Rules XMI 20/21 Fakultät für Informatik & Wirtschaftsinformatik MDSD - SS 2014 Übung 5 • Erweiterung des Generators um eine Komponente die XMI (Version 2.1) in unser XML-Format übersetzt. • XSLT, bzw. XQueryTransformationen durch Kommandotool (z.B. Xalan, Zorba) • Entwicklung eines eigenen, durchgängigen Szenarios, das alle Schritte der Codegenerierung umfasst • Steuerung durch makefile XMI 21/21