Upload
friedrich-koenig
View
215
Download
1
Embed Size (px)
Citation preview
1 2 3 4 5 6 7 8 9 10 11 12Geoinformation3
13 14 15 16 17 18 19 20
Geoinformation III
Ableitung UML XML Schema
Vorlesung 14
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6 12
UML XML
A 1x
M LU
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6 12
UML XML
A 1x
M LU
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6 12
UML XML
A 1x
M L
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6 12
UML XML
A 1x
M LX
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6 13
Von UML zu XML (I)
• Objektorientierte Modellierung von Systemen und Datenstrukturen erfolgt heutzutage zumeist mittels UML-Diagrammen (graphisch)
• Für den Datenaustausch oder die Speicherung der Anwendungsdateien ist die Verwendung von XML sinnvoll
• zugrundeliegendes Konzept: Model-driven architecture:• Modellierung in UML• automatische Ableitung von implementierungsspezifischen
Formalismen (Java, Tabellen einer relationalen Datenbank, XML, ...) aus UML
Probleme:• Keine 1:1-Abbildung von UML auf XML-Schema-Strukturen
– Abbildung von UML nach XML nicht eindeutig (mehrere Möglichkeiten)
– Festlegung auf Abbildungsvarianten sind sog. Entwurfsentscheidungen
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6 13
Von UML zu XML (II)
• Gegeben: UML-Klassendiagramm• Gesucht: XML-Schema zu dem UML-Klassendiagramm• Konvertierung durch Regeln für:
• Klassen mit Stereotyp Enumeration oder CodeList• Klassen• Klassen mit Oberklasse (Vererbung)• Attribute von Klassen• Kompositionen• Assoziationen/Aggregationen
• Methoden werden in XML ignoriert
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6 13
Von UML zu XML (III): Vereinfachungen
• im folgenden werden werden aus Gründen der Übersichtlichkeit folgende Konzepte von XML-Schema nicht berücksichtigt:• Namespaces. Der Namespace für Schema-Elemente ist z.B.
xs.
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6
Konvertierung von Klassen mit Stereotyp Enumeration oder CodeList
<simpleType name="UMLKLASSENNAMEType><restriction base="string">
<enumeration value="wert_1" /><enumeration value="wert_2" />....<enumeration value="wert_n" />
</restriction> </simpleType>
<CodeList>UMLKLASSENNAME
+ wert_1+ wert_2
...+ wert_n
<CodeList>Dachform
+ Satteldach+ Walmdach+ Flachdach
+Krüppelwalmdach
Beispiel:
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6 7
Konvertierung von Klassen
Klassenname+ Attribut1:String+ Attribut2:String
<complexType name="KlassennameTyp"> <sequence> <element name="Attribut1" type="string"/> <element name="Attribut2" type="string"/> </sequence> </complexType>
<element name="Klassename" type="KlassennameTyp"/>
• jede Klasse wird zu komplexem Typen (complexType)• Attribute der Klasse werden zu Kindelementen dieses
komplexen Typs, geklammert durch <sequence>• Zu jedem komplexen Typ (Klasse) muss Element erzeugt
werden
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6 7
Konvertierung von Klassen mit Oberklasse
Oberklasse Attribut_Ober:String
UnterklasseAttribut_Unter:String
<complexType name="OberklasseTyp"> <sequence> <element name="Attribut_Ober" type="string"/> </sequence> </complexType>
<complexType name="UnterklasseTyp"> <complexContent> <extension base="OberklasseTyp" <sequence> <element name="Attribut_Unter" type="String"/> </sequence> </extension> </complexContent> </complexType>
<element name="Oberklasse" type="OberklasseTyp"/>
<element name="Unterklasse" type="UnterklasseTyp" substitutionGroup="Oberklasse"/>
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6
Konvertierung von Klassen mit Oberklasse
• jede Klasse wird zu komplexem Typen (complexType)• Attribute der Klasse werden zu Kindelementen dieses
komplexen Typs• der komplexe Typ einer Unterklasse erhält einen complex
content und darin als extension base den Typ der Oberklasse.• Zu jedem komplexen Typ (Klasse) muss Element erzeugt
werden• Element der Unterklasse erhält eine substitution group mit
Element der Oberklasse – wegen Ersetzbarkeit von Elementen der Oberklasse durch Elemente
der Unterklasse
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6
Vererbung: Beispiel-XML-Datei
Person name:String
Student
matrikelnr:String
<Person> <name>Schmitz</name> </Person>
<Student> <name>Schmitz</name> <matrikelnr>123456789</matrikelnr> </Student>
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6
Mehrfachvererbung
• UML erlaubt Mehrfachvererbung (eine Klasse hat mehr als eine Oberklasse)
• XML Schema erlaubt Mehrfachvererbung nicht• Wenn Mehrfachvererbung in UML vorliegt:
– eine Vererbung auswählen und in XML Schema umsetzen– die andere(n) Vererbungsbeziehungen durch Kopieren von
Attributen/Elementen von Ober- zu Unterklasse realisieren– Ein Element kann mehrere substitution groups haben
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6
Konvertierung von Attributen
<complexType name="PersonTyp"> <sequence> <element name="name" type="string"/> <element name="alter" type="integer"/> <element name="maennlich" type="boolean"/> <element name="groesse" type="decimal"/> <element name="adresse" type="AdressTyp"/> </sequence> </complexType>
<complexType name="AdressTyp"> <sequence> <element name="Strasse" type="string"/> <element name="hausnummer" type="string"/>
.............. </sequence> </complexType>
Person
+ name:CharacterStri
ng+ alter:integer+ maennlich:boolean+ groesse: real+ adresse:AdressTyp
Beispiel:
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6
Konvertierung von Attributen• Attribute einer werden zu Kindelementen des Typs der
Klasse– geklammert durch <sequence>
• Ist Typ des Attributs ein einfacher Datentyp, so wird dieser ersetzt und zum Typ des Kindelements:– CharacterString -> string– Integer -> integer– Boolean -> boolean– Real -> decimal
• Ist Typ des Attributs eine Klasse, so – wird ein neuer Typ für diese Klasse erzeugt– und zum Typen des Kindelements– Alternative: anonymer Datentyp für Attribut...
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6
Konvertierung von Attributen: Anonyme Typen
<complexType name="PersonTyp"> <sequence> <element name="name" type="string"/> <element name="alter" type="integer"/> <element name="maennlich" type="boolean"/> <element name="groesse" type="decimal"/> <element name="adresse">
<complexType> <sequence>
<element name="Strasse" type="string"/>
<element name="hausnummer" type="string"/> ..............
</sequence> </complexType> </element> </sequence> </complexType>
Person
+ name:CharacterStri
ng+ alter:integer+ maennlich:boolean+ groesse: real+ adresse:AdressTyp
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6
Konvertierung von Assoziationen (Aggregationen, Kompositionen)
• Assoziationen in UML können ungerichtet (beidseitig) sein• Assoziationen in XML-Schema sind gerichtet
– Ersetzen der ungerichteten durch zwei gerichtete Assoziationen (falls beide notwendig, i. d. R. nur eine Richtung erforderlich)
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6
Konvertierung von Kompositionen
• Komposition (vgl. GIS I): – Existenz des Teils hängt vom
Ganzen ab– jedes Teil gehört zu genau einem
Ganzen• Beispiel:
– Existenz der Linie hängt vom Polygon ab
– jede Linie gehört zu genau einem Polygon• eine Linie kann nicht von
zwei Polygonen benutzt werden (keine Topologie)
• zu einem Polygon können alle Linien aufgezählt werden (keine Verweise nötig)
Ganzes
Teil
3..*
Polygon
Linie
bestehtAusLinie
1
Beispiel:
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6
Konvertierung von Kompositionen
<complexType name="LinieTyp">.......
</complexType>
<element name="Linie" type="LinieTyp"/>
<complexType name="PolygonTyp"><sequence><element name="bestehtAusLinie" type="LinienPropertyType" minOccurs="3" maxOccurs="unbounded"/></sequence>
</complexType>
<complexType name="LinienPropertyType">
<sequence><element ref="Linie"/></sequence>
</complexType>
Ganzes
Teil
3..*
Polygon
Linie
bestehtAusLinie
1
Beispiel:
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6
Konvertierung von Kompositionen
• jede Klasse wird zu komplexem Typ (wie bisher)• Komposition wird zu komplexem Typ
– mit Bestandteil (z.B. Linie) mit als Kindelement
• Ganzes-Klasse erhält Kindelement vom Typ des Kompositions-Typen– Multiplizitäten beachten
(minOccurs/maxOccurs)
Ganzes
Teil
3..*
Polygon
Linie
bestehtAusLinie
1
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6
Kompositionen: Beispiel XML-Datei
<Polygon><bestehtAusLinie><Linie>...</Linie></bestehtAusLinie><bestehtAusLinie><Linie>...</Linie></bestehtAusLinie><bestehtAusLinie><Linie>...</Linie></bestehtAusLinie>
</Polygon><Polygon>
<bestehtAusLinie><Linie>...</Linie></bestehtAusLinie><bestehtAusLinie><Linie>...</Linie></bestehtAusLinie><bestehtAusLinie><Linie>...</Linie></bestehtAusLinie>
</Polygon>
Ganzes
Teil
3..*
Polygon
Linie
bestehtAusLinie
1
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6
Konvertierung von Aggregationen/Assoziationen
• Ein Teil/ein Assoziationspartner kann zu mehreren Ganzen/Partner gehören
• Beispiel:– eine Linie kann zu mehreren Polygonen
gehören (Topologie)– nicht möglich, zu einem Polygon alle Linien
explizit aufzuzählen• Verweise (Links) nötig
– Linien brauchen z.B. eine ID (um darauf zu verweisen)
– Assoziation bestehtAusLinien muss Verweise auf eine Linie (auf deren ID) verwalten können
– Konzept: XLink
Ganzes
Teil
3..*
Polygon
Linie
bestehtAusLinie
0..*
Beispiel:
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6
Verwenden des XLink-Schemas für Verweise
• XLink/XPointer: Ergänzung zu XML Schema• Zweck: Verweise zwischen Elementen • Verwendet XML-Attribute
– für Identifier– für Verweise auf Elemente (Identifier), z.B. xlink:href="#Lin22"
• Verweise innerhalb einer Datei (xlink:href beginnt mit #)• auch Verweise auf Elemente in anderen Dateien möglich (wird
hier nicht behandelt)
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6
Konvertierung von Aggregationen/Assoziationen
<complexType name="LinieTyp">.........<attribute name="id" type="ID"/>
</complexType>
<element name="Linie" type="LinieTyp"/>
<complexType name="PolygonTyp"><sequence><element name="bestehtAusLinie" type="LinienPropertyType" minOccurs="3" maxOccurs="unbounded"/></sequence>
</complexType>
<complexType name="LinienPropertyType">
<sequence><element ref="Linie"/></sequence><xs:attributeGroup ref="xlink:simpleLink"/>
</complexType>
Ganzes
Teil
3..*
Polygon
Linie
bestehtAusLinien
0..*
Beispiel:
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6
Aggregation: Beispiel-XML-Datei<Polygon>
<bestehtAusLinie><Linie id="Lin21">...</Linie></bestehtAusLinie><bestehtAusLinie><Linie id="Lin22">...</Linie></bestehtAusLinie><bestehtAusLinie><Linie id="Lin26">...</Linie></bestehtAusLinie><bestehtAusLinie><Linie id="Lin28">...</Linie></bestehtAusLinie>
</Polygon><Polygon>
<bestehtAusLinie xlink:href="#Lin22"/><bestehtAusLinie xlink:href="#Lin26"/><bestehtAusLinie><Linie id="Lin30">...</Linie></bestehtAusLinie><bestehtAusLinie><Linie id="Lin34">...</Linie></bestehtAusLinie>...............
</Polygon>
Lin21 Lin28
Lin22Lin26
Lin30 Lin32
Lin34
Lin33
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6
Multiplizitäten von Assoziationen• Multiplizitäten können mit minOccurs oder maxOccurs
angegeben werden• Elemente ohne minOccurs und maxOccurs dürfen genau einmal
vorkommen
<complexType name="PolygonTyp"><sequence>
<element name="bestehtAusLinie" type="LinienPropertyType"
minOccurs="3" maxOccurs="unbounded"/></sequence>
</complexType>
<complexType name="LinienPropertyType">
<sequence><element ref="Linie"/>
</sequence></complexType>
Ganzes
Teil
3..*
Polygon
Linie
bestehtAusLinien
Beispiel:
1 2 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20Geoinformation3
5 6
Übungsaufgabe: XML-Schema für UML-Diagramm
1..*
Bauliche Anlage
Polygon
Gebäude+ eigentümer: Eigentümer[1..*]
benachbart
<Codelist>Gebäudefunktion
+Wohnen+ Gewerbe
+Mischgebiet+Verwaltung
Gebäudeteil+ funktion: Gebäudefunktion[1..*]+ baujahr:integer+ höhe: real
Eigentümer+ Name: CharacterString
+ Vorname:CharacterString+Alter:integer
1
1
1..*
0..*
0..*