Modell/Metamodell Model Generator Generated Source Code Andreas Schmidt Modellierung 1/18
Modell Modell beschreibt die zu generierende Anwendung Modell ist... abstrakt kompakt formal Modell kann in unterschiedlichen Notationen vorliegen: textuell graphisch XML API-Aufrufe... Andreas Schmidt Modellierung 2/18
Metamodell Begriff Meta kommt aus dem grischichen und bedeutet über Metamodelle sind Modelle, die etwas über Modellierungen aussagen. Ein Metamodell legt die Konstrukte der Modellierungssprache (Objekte, Beziehungen, Constraints,...) fest. Jede formale Sprache (Java, SQL, UML, Postscript,...) besitzt ein Metamodell. Metamodell und Modell stehen in Klasse - Instanz Beziehung zueinander, d.h. jedes Modell ist Instanz ihres Metamodells Metamodell beschreibt die Struktur des Modells Andreas Schmidt Modellierung 3/18
Beispiele zu Model/Metamodell Beispiele: Ein XML-Schema oder eine DTD bildet das Metamodell zu einem, entsprechend diesem Schema/DTD gültigen, XML-Dokument Die BNF (Backus Naur Form) ist eine Metasprache für die Beschreibung der Syntax von Programmiersprachen, d.h. die BNF Beschreibung der Sprache Java ist eine Instanz der BNF. Eine in BNF vorliegende Beschreibung der Sprache Java ist ein Metamodell der Sprache Java. Ein Objektnetz das während eines Programmablaufs erzeugt wurde ist eine Instanz der für dieses Programm definierten Klassen. Das UML Diagramm/ER-Diagram repräsentiert ein Modell einer Anwendung Andreas Schmidt Modellierung 4/18
Metamodellierung/Metamodelle und wie lege ich die Struktur der Metamodelle fest? => (Meta-) Metamodell Modellierungsebenen (nach OMG, MOF): M0: Instanzen M1: Modell M2: Meta- M3: Metamodell Metamodell Typ: Stadt ID: 64647 Name: Karlsruhe Einwohner: 276543 beschreibt ist Instanz von Typ: Klasse ID: 8725811 Name: Stadt Attribute: Name, Einwohner Operationen:... Beziehungen:... Typ: Classifier ID: 64647 Name: Klasse Features: Attributes, Operationen, Beziehungen Andreas Schmidt Modellierung 5/18
Modell (ER-Notation) id jahr spielt_mit name id <0,n> <0,n> Film Person <1,1> regisseur <0,n> titel vorname Andreas Schmidt Modellierung 6/18
andere Notation des selben Modells <?xml version="1.0"?> <!DOCTYPE my-model SYSTEM "my-meta.dtd"> <my-model> <class name="person"> <attribute name="id" primary-key="true" type="integer" length="10"/> <attribute name="name" type="varchar" length="30"/> <attribute name="vorname" type="varchar" length="30"/> </class> <class name="film"> <attribute name="id" primary-key="true" type="integer"/> <attribute name="titel" type="varchar" length="120"/> <attribute name="jahr" type="date"/> </class> <association name="regisseur"> <association-end class="person" role="regisseur" min="1" max="1"/> <association-end class="film" role="directed_film"/> </association> <association name="spielt_mit"> <association-end class="person" role="schauspieler"/> <association-end class="film" role="film"/> </association> </my-model> Andreas Schmidt Modellierung 7/18
DTD repräsentiert Metamodell <!ELEMENT my-model (class+, association*)> <!ELEMENT class (attribute+)> <!ATTLIST class name ID #REQUIRED> <!ELEMENT association (association-end, association-end)> <!ATTLIST association name CDATA #REQUIRED> <!ELEMENT association-end EMPTY> <!ATTLIST association-end class IDREF #REQUIRED role CDATA #REQUIRED min CDATA "0" max CDATA "*"> <!ELEMENT attribute EMPTY> <!ATTLIST attribute name CDATA #REQUIRED primary-key (true false) #IMPLIED type (date integer varchar double number) #REQUIRED length CDATA #IMPLIED> Andreas Schmidt Modellierung 8/18
Frage: wie lautet das Metamodell des ER-Modells? Andreas Schmidt Modellierung 9/18
was soll unser Modell ausdrücken können? Entitäten Attribute Typen Beziehungen zwischen Klassen Kardinalitäten Beziehungsenden Rollenbezeichner Andreas Schmidt Modellierung 10/18
Metamodell (ER-Notation) name name <1,n> <1,1> <1,1> <0,n> Entität Attribut Typ <0,n> name <1,1> Beziehungsende <1,1> <2,2> Beziehung rolle min max name Andreas Schmidt Modellierung 11/18
Repräsentation des Modells Externe Repräsentation des Modells Text XML Graphische Notation Aufrufe von Methoden einer API Interne Repräsentation des Modells Text ( on-the-fly Extraktion, z.b. durch reguläre Ausdrücke) XML (nur für XSLT Transformation) XML DOM Tree/SAX Komplexe Datenstruktur (geschachtelte Arrays/Dictionaries) Komplexes Objektnetz Andreas Schmidt Modellierung 12/18
Metamodel API class MetaModel Methods MetaModel static function createmodel($name) MetaClass function addclass($name) MetaRelation function addrelation($name) function setdate($value) function setsource($value) Properties classes: array of MetaClass relations:array of MetaRelation name : string source : string date : string class MetaClass Methods MetaAttribute function addattribute($name, $type, $len="", $is_primary_key=false) MetaRelation function addrelationend($role, $type, $min=0, $max="1", $name=null) Properties name : string attributes : array of MetaAttribute relations : array of MetaRelationEnd primary_key: MetaAttribute model : MetaModel Andreas Schmidt Modellierung 13/18
class MetaAttribute Properties name : string type : MetaType length : integer class : MetaClass is_primary_key : boolean class MetaRelationEnd Properties role : string type : MetaClass min : integer max : integer class : MetaClass relation_name : string class MetaRelation Methods addrelationend($rel_end) Properties name:string model:metamodel relation_ends:array of MetaRelationEnd class MetaType Methods boolean static function is_primitive_type($type_name) Properties name : string Andreas Schmidt Modellierung 14/18
Beispiel für den Aufbau eines Modells <?php include_once 'meta-model.php'; $model = MetaModel::createModel('Film DB'); $film = $model->addclass('film'); $person = $model->addclass('person'); primary key cardinality $person->addattribute('id','integer',10, true); $person->addattribute('surname','string',30); $person->addattribute('first_name','string',30); $person->addattribute('birthday','date'); $person->addrelationend('directed_films', 'Film',0, *, "directs"); $film->addattribute('id', 'Integer',10, true); $film->addattribute('title', 'String',50); $film->addattribute('year', 'date'); $film->addrelationend('director', 'Person',0,1, "directs");); indicates that both ends belong to the same relation?> Andreas Schmidt Modellierung 15/18
Beispiel in UML-Notation Andreas Schmidt Modellierung 16/18
Fakultät IWI Accessing a Modell via Properties File api-access-example.php <?php include_once 'api-model-example.php'; print "Model $model->name\n"; foreach ($model->classes as $class) { echo "$class->name with primary key "; echo "(".$class->primary_key->name.")\n"; foreach ($class->attributes as $att) { echo " - [A] $att->name ".$att->type->name." $att->length "; echo ($att->is_primary_key?"[pk]":"")."\n"; } foreach ($class->relations as $rel) { echo " - [R] $rel->role --($rel->min/$rel->max)-->"; echo $rel->type->name."\n"; } print "\n"; }?> Output $ php api-read-access-example.php Model Film DB Person with primary key (id) - [A] id Integer 10 [PK] - [A] surname String 30 - [A] first_name String 30 - [A] birthday date - [R] film --(0/-1)-->Film Film with primary key (id) - [A] id Integer 10 [PK] - [A] title String 50 - [A] year date - [R] director --(0/1)-->Person Andreas Schmidt Modellierung 17/18
API-basiertes Metamodell: Eigenschaften Modell wird durch Objektnetz repräsentiert Methodenaufrufe erstellen internes Modell Vorteile: Die API ist einfach zu benutzen Zusätzliche Methoden (oder Unterklassen) erlauben die Implementierung... von Verifikations-Methoden zur Sicherung der Modellkonsistenz von Transformations-Methoden zum Anreichern oder Transformieren des Modells von zusätzlichen Hilfsmethoden zur Unterstützung der Transformation/Codegenerierung für bestimmte Plattformen Die Modellinformationen können durch Navigation entlang den Properties/Methoden des Objektmodells extrahiert werden. Andreas Schmidt Modellierung 18/18