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

Documents pareils