3.5 Externe Klassendiagramme
4.3.4 Das Type-System-Editor Dateiformat .TED
Da ein Schema im neuen JGraLab deutlich mehr Funktionalit¨at im Vergleich zu den alten Versionen bietet, wird sich bei der Persistenz des Schemas nicht vollst¨andig an .G orientiert.
Als weitere Basis dient das sogenannte Type System Editor Dateiformat mit der Endung .TED9. Die Entwicklung dieses Formates wurde andersherum motiviert wie .G: Das .TED-Dateiformat soll von Hand geschrieben und m¨oglichst intuitiv verstanden werden k¨onnen. .G dagegen dient prim¨ar als Austauschformat f¨ur GraLab - die M¨oglichkeit, es von Hand auszulesen und schreiben zu k¨onnen, war nicht das prim¨are Entwicklungsziel.
Aus einer TED-Beschreibung kann ein Typsystem f¨ur das alte GraLab generiert werden [DaKaMo98].
Beispiel f ¨ur ein Typsystem in .TED
In diesem Abschnitt wird versucht, das Schema-Beispiel der Abbildung 4.10 mittels .TED auszudr¨ucken.
schema TGTest
abstract entity Junction;
entity Intersection: Junction;
entity CarPark: Junction { capacity: INTEGER; open: BOOL;
width: REAL; name: STRING;
numberPlate: LIST(STRING);
numberPlateHistory: LIST(LIST(STRING); };
relationship Street from Junction (1,*) to Junction (1,*) { streetName: STRING };
end
Die .TED-Datei wird mit dem Schl¨usselwortschemaeingeleitet, gefolgt von seinem Namen. Anschließend wird das gesamte Schema beschrieben, welches sich durch das
9TED = Textual EER Description, eine Schemabeschreibungssprache
Schl¨usselwort end abschließt. Knotenklassen k¨onnen durch entity deklariert wer-den, Kantenklassen durchrelationship. Ein vorangestelltes abstractdefiniert eine Klasse als abstrakt.
Die Hierarchie wird direkt in der Deklaration der jeweiligen Graphelementklassen defi-niert, indem nach dem Namen des Elements, durch einen Doppelpunkt abgetrennt, seine Superklassen aufgelistet werden.
Sollte das Element Attribute besitzen, sind diese in geschweiften Klammern aufgef¨uhrt.
Die direkte Angabe der Dom¨anen hinter den Attributnamen f¨uhrt zu einer besseren Les-barkeit. Da die Dom¨anen Object, Record und Enum nicht in TED verf¨ugbar sind, werden sie weggelassen, Set wird durchLISTersetzt.
Eine Kantenklasse (relationship) besitzt in .TED die M¨oglichkeit festzusetzen, zwischen welchen Kantenklassen sie bestehen muss.
Die Multiplizit¨aten von 1 bis 6 sind nur eingeschr¨ankt anf¨uhrbar, da .TED keine anderen Multiplizit¨aten außer 0, 1 und unendlich erlaubt.
Alle fehlenden Eigenschaften von .TED sind detailliert in Abschnitt 4.3.4 aufgelistet.
EBNF-Definition des Type-System-Editor Dateiformats .TED
An dieser Stelle wird das TED-Dateiformat mit Hilfe der EBNF erl¨autert.
Generell gelten ¨ahnliche Basisregeln wie beim G-Dateiformat: Die EBNF-Beschrei-bungen der Bezeichner NL und Number sind identisch, das Symbol SP darf nun al-lerdings beliebig viele Leerzeichen bezeichnen. Ein String hingegen wird anders defi-niert, und zwar als einfache Zeichenfolge ohne eine Angabe der Anzahl der Zeichen des Strings.
Eine TED-Datei (TedFile) beginnt immer mit dem Schl¨usselwortschema, gefolgt von einem Namen. Nacheinander werden dann alle Entit¨aten (Entity) und anschlie-ßend alle Assoziationen (Relationship) beschrieben. Die Datei beendet das Schl¨us-selwortend.
TedFile = "schema" SP SchemaName NL { Entity NL } NL
{ Relationship NL }
"end" ;
String = { ? alle im Rechner darstellbaren Zeichen ? } ;
4.3. Eingabe/Ausgabe SP = SP { SP }
Der Schemaname wird durch eine beliebige Zeichenkette repr¨asentiert. Eine Entit¨at (Entity) kann durch das Schl¨usselwortabstractals abstrakt definiert werden. Das Wort entity leitet schließlich die Definition der Entit¨at ein. Sie beginnt mit einem Namen, anschließend werden ihre Hierarchie (genauer gesagt, ihre Oberklassen) und ihre Attribute festgesetzt. Abgeschlossen wird jede Definition einer Entit¨at mittels eines Semikolons.
SchemaName = String ;
Entity = [ "abstract" ] "entity" SP EName [ Hierarchy ] [ Attributes ] ";" ; EName = String ;
Die Definition einer Assoziation (Relationship) ist ¨ahnlich definiert wie die Defi-nition einer Entit¨at, auch sie spezifiziert eine Hierarchie und ihre Attribute. Zus¨atzlich wird diese Assoziation durch je einefromund einetoAngabe erg¨anzt, die angeben, mit welchen Entit¨aten sich verbunden werden darf. Des Weiteren ist eine Angabe der Multiplizit¨aten (Multiplicity) notwendig.
Relationship = "relationship" SP RSName [Hierarchy] SP
"from" SP EName Multiplicity
"to" EName Multiplicity [ Attributes ] ";" ; RSName = String ;
Die Angabe der Multiplizit¨at wird definiert durch eine oder zwei Zahlen. Die Angabe von nur einer Zahl bedeutet, dass die minimale und die maximale Multiplizit¨at gleich sind. Als Zahlen sind nur 0 oder 1 erlaubt.
Die Angabe eines Sterns (*) bedeutet, dass sich beliebig viele Instanzen von Entit¨aten mittels einer Instanz dieser Assoziation untereinander verbinden d¨urfen. Wird nur ein einziger Stern angegeben, sind damit die Multiplizit¨aten von 0 bis unendlich gemeint.
Auch die Angabe eines Plus-Zeichens (+) ist m¨oglich, sie definiert die Multiplizit¨aten von 1 bis unendlich.
Multiplicity = "(" ( 0 | 1 | "*" | "+" )
[ "," ( 0 | 1 | "*" | "+" ) ] ")" ;
Die Beschreibung der Hierarchie (Hierarchy) wird mittels eines Doppelpunktes ein-geleitet. Es folgt eine Liste von Superklassen, welche durch Semikolons getrennt wer-den.
Hierarchy = ":" SP EntityName { ";" SP EntityName } ;
Die Attribute (Attributes) werden in geschweiften Klammern ({, }) beschrieben.
Auch sie werden durch Semikolons aufgez¨ahlt. Im Einzelnen bestehen sie aus der An-gabe eines Namens und einer durch einen Doppelpunkt davon abgetrennten Dom¨ane (AttrDomain), welche den Datentyp des Attributs angibt.
Attributes = SP "{" SP Attribute { ";" Attribute } SP
"}" SP ;
Attribute = AttrName ":" SP AttrDomain ; AttrDomain = "STRING" | "INTEGER" | "BOOL" ;
Nicht speicherbare Information in .TED
Generell erscheint das .TED-Format wesentlich lesbarer als .G. Dies ist haupts¨achlich dem Umstand zu verdanken, dass .TED explizit auf intuitive Lesbarkeit hin entwickelt wurde. Es existieren hier keine Zahlen-IDs, welche die Lesbarkeit einschr¨anken.
Die folgenden Eigenschaften werden auf der Schema-Ebene von .TG ben¨otigt, k¨onnen jedoch nicht mittels .TED ausgedr¨uckt werden.
• Definition einer Record- und einer Enumeration-Dom¨ane und anschließender Re-ferenz mittels eines Namens darauf innerhalb der Attributdeklaration
• Definition einer Object-Dom¨ane, um Java-Objects zu speichern
• Repr¨asentation einer Set-Dom¨ane f¨ur eine Menge ohne Duplikate
• Deklaration einer Graphklasse inklusive ihrer Attribute
• Angabe von Rollennamen f¨ur die Endpunkte einer Kantenklasse
• Festlegung einer Kantenklasse als Aggregation oder als Komposition
• Festlegung von anderen Multiplizit¨aten außer 0, 1 und unendlich
4.3. Eingabe/Ausgabe