13.01.2013 Aufrufe

MRDB - Fachgebiet Datenbanken und Informationssysteme ...

MRDB - Fachgebiet Datenbanken und Informationssysteme ...

MRDB - Fachgebiet Datenbanken und Informationssysteme ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Fakultät<br />

Fakultät<br />

für<br />

für<br />

Elektrotechnik<br />

Elektrotechnik <strong>und</strong><br />

<strong>und</strong><br />

Informatik<br />

Informatik<br />

Institut für Praktische Informatik<br />

<strong>Fachgebiet</strong> <strong>Fachgebiet</strong> <strong>Datenbanken</strong> Software <strong>und</strong>Engineering <strong>Informationssysteme</strong><br />

Entwicklung von AAA/NAS-basierten<br />

Strukturen <strong>und</strong> XML-Schnittstellen für<br />

eine Multi-Repräsentations-Datenbank<br />

Kritiksystem für ein<br />

erfahrungsbasiertes<br />

Bachelorarbeit<br />

im Studiengang Informatik<br />

Anforderungswerkzeug<br />

Michael Schäfers<br />

Matrikelnummer: 2296620<br />

Prüfer: Prof. Dr. Udo Lipeck<br />

Zweitprüfer: Dr. Hans Hermann Brüggemann<br />

Betreuer: Dipl.-Math. Michael Tiedge<br />

Bachelorarbeit<br />

im Studiengang Informatik<br />

von<br />

11. September 2007<br />

Ingo Kitzmann


Zusammenfassung<br />

Raumbezogene Daten ( ” Geodaten“) werden in der heutigen Zeit fast ausschließlich digital<br />

verwaltet. Das AAA-Modell (AFIS-ALKIS-ATKIS) stellt ein einheitliches Datenmodell<br />

für geographische Daten der zuvor getrennt geführten Fachinformationssysteme AFIS,<br />

ALKIS <strong>und</strong> ATKIS zur Verfügung. Hierzu gehört auch ein Modell für den externen Datenaustausch,<br />

welches in der Normbasierten Austauschschnittstelle (NAS) verwirklicht<br />

ist.<br />

In dieser Arbeit wird ein umfassender Überblick über das AAA-Modell gegeben. Anschließend<br />

wird ein zum AAA-Modell konformes ATKIS-Datenmodell in Form eines relationalen<br />

Datenbankschemas entwickelt, das in eine Multi-Repräsentations-Datenbank<br />

(<strong>MRDB</strong>) integriert werden soll. In einer <strong>MRDB</strong> werden geographische Datenbestände<br />

integriert, die denselben geographischen Raum beschreiben, sich aber bezüglich der Auflösung,<br />

dargestellter Informationen, Aktualität, Genauigkeit usw. unterscheiden können.<br />

Des Weiteren wird in der Programmiersprache JAVA ein NAS-Importer implementiert,<br />

der NAS-Dateien verarbeiten <strong>und</strong> in das zuvor erstellte Datenbankschema einlesen kann.<br />

Änderungen am Datenbestand in Form von NAS-Fortführungsaufträgen sollen hierbei<br />

sowohl lokal verarbeitet als auch anderen Anwendungen der <strong>MRDB</strong> zur Verfügung gestellt<br />

werden.


Inhaltsverzeichnis<br />

1 Einleitung 5<br />

2 XML-Gr<strong>und</strong>lagen 8<br />

2.1 Extensible Markup Language (XML) . . . . . . . . . . . . . . . . . . . . 8<br />

2.1.1 Document Object Model (DOM) . . . . . . . . . . . . . . . . . . 9<br />

2.1.2 Simple API for XML (SAX) . . . . . . . . . . . . . . . . . . . . . 10<br />

2.1.3 Streaming API for XML (StAX) . . . . . . . . . . . . . . . . . . . 10<br />

2.2 XML Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

2.3 Geography Markup Language (GML) . . . . . . . . . . . . . . . . . . . . 13<br />

2.4 Filter Encoding Specification (FES) . . . . . . . . . . . . . . . . . . . . . 16<br />

2.5 Web Feature Service (WFS) . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />

3 Das AAA-Modell 20<br />

3.1 Das AAA-Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

3.2 Amtliches Topographisch-Kartographisches Informationssystem (ATKIS) 30<br />

3.3 Amtliches Liegenschaftskatasterinformationssystem (ALKIS) . . . . . . . 33<br />

3.4 Amtliches Festpunktinformationssystem (AFIS) . . . . . . . . . . . . . . 33<br />

3.5 Normbasierte Austauschschnittstelle (NAS) . . . . . . . . . . . . . . . . . 34<br />

4 ATKIS Datenmodell 39<br />

4.1 Konzeptioneller Entwurf . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

4.2 Relationales Datenbankschema . . . . . . . . . . . . . . . . . . . . . . . . 42<br />

4.3 Implementierung in Oracle 10g . . . . . . . . . . . . . . . . . . . . . . . 44<br />

4.4 Integration in die Multi-Repräsentations-Datenbank . . . . . . . . . . . . 49<br />

4.5 Realisierung von Fortführungsaufträgen . . . . . . . . . . . . . . . . . . . 52<br />

5 NAS-Import 54<br />

5.1 Konzeptioneller Entwurf des Importers . . . . . . . . . . . . . . . . . . . 54<br />

5.2 Implementierung des Importers in Java . . . . . . . . . . . . . . . . . . . 59<br />

5.3 Behandlung der GML-Geometrien . . . . . . . . . . . . . . . . . . . . . . 65<br />

5.4 Vergleich der Parser-Engines . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />

3


6 Fazit <strong>und</strong> Ausblick 74<br />

6.1 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />

6.2 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />

6.3 Motivation zur Implementierung eines NAS-Exporters . . . . . . . . . . . 78<br />

6.4 Entwurf <strong>und</strong> Ideen zur Implementierung . . . . . . . . . . . . . . . . . . 79<br />

A Objektartenübersicht ATKIS-OK BASIS-DLM 83<br />

B Übersicht über das relationale Datenbankschema 87<br />

C Einheitswürfel dargestellt durch gml:Surface 89<br />

D Abkürzungsverzeichnis 91<br />

4


Kapitel 1<br />

Einleitung<br />

Die Vermessungs- <strong>und</strong> Katasterverwaltungen der B<strong>und</strong>esländer haben die Aufgabe, raumbezogene<br />

Daten für Verwaltung, Wirtschaft <strong>und</strong> private Nutzer zu liefern. Diese Daten<br />

werden seit den 1970er Jahren zunehmend digital bereitgestellt; viele Datenmodelle <strong>und</strong><br />

Standards stammen ebenfalls aus dieser Zeit.<br />

Um diese Systeme an die veränderte Technologie der heutigen Zeit anzupassen <strong>und</strong> die<br />

im Laufe der Zeit gesammelten Erfahrungen umzusetzen, wird von der Arbeitsgemeinschaft<br />

der Vermessungsverwaltungen der Länder der B<strong>und</strong>esrepublik Deutschland (AdV)<br />

seit Mitte der 1990er Jahre das AAA-Modell (AFIS-ALKIS-ATKIS) entwickelt. Es beschreibt<br />

die drei ebenfalls von der AdV entwickelten <strong>Informationssysteme</strong> AFIS, ALKIS<br />

<strong>und</strong> ATKIS, zeigt Zusammenhänge zwischen den Systemen auf <strong>und</strong> stellt somit ein b<strong>und</strong>esweit<br />

einheitliches konzeptionelles Modell für räumliche Daten bereit.<br />

In dieser Arbeit soll der ATKIS-Teil (Amtliches Topographisch-Kartographisches Informationssystem)<br />

des AAA-Modells betrachtet werden, dessen Daten die Oberfläche der<br />

Erde mit Digitalen Landschaftsmodellen (DLM) <strong>und</strong> Digitalen Geländemodellen (DGM)<br />

beschreiben. Hierzu soll für die DLM ein Datenbankschema entwickelt werden, das in<br />

eine Multi-Repräsentations-Datenbank (<strong>MRDB</strong>) integriert werden soll.<br />

In einer <strong>MRDB</strong> werden Geodaten gespeichert, die denselben Kartenausschnitt darstellen,<br />

jedoch beispielsweise in unterschiedlichen Maßstäben, verschiedenem Informationsgehalt,<br />

ungleicher Aktualität etc. vorliegen. Dies kann z.B. in ATKIS die Darstellung<br />

desselben geographischen Raumes im BASIS-DLM, DLM50 <strong>und</strong> DLM1000 sein.<br />

Ein bestimmtes Objekt der realen Welt kann somit durch mehrere Repräsentationen in<br />

der Datenbank in den verschiedenen Datenbeständen vorhanden sein. Um diese Repräsentationen,<br />

die alle das gleiche Phänomen der Realität beschreiben, einander zuordnen<br />

zu können, werden Verknüpfungen, die so genannten Links, zwischen ihnen gebildet.<br />

Dies geschieht über komplexe Matchingverfahren, die für größere Kartenausschnitte sehr<br />

zeitaufwändige Berechnungen durchführen müssen.<br />

5


Die maßstabsübergreifende Modellierung, Verwaltung, Speicherung <strong>und</strong> Aktualisierung<br />

raumbezogener Daten in einer <strong>MRDB</strong> ist ein Teilprojekt im Rahmen des Projekts Wissensbasierter<br />

Photogrammetrisch-Kartographischer Arbeitsplatz (WIPKA), das an der<br />

Leibniz Universität Hannover durch das <strong>Fachgebiet</strong> <strong>Datenbanken</strong> <strong>und</strong> <strong>Informationssysteme</strong><br />

1 in Zusammenarbeit mit dem B<strong>und</strong>esamt für Kartographie <strong>und</strong> Geodäsie 2 <strong>und</strong><br />

weiteren Fachbereichen der Leibniz Universität Hannover durchgeführt wird.<br />

Neben den drei bereits genannten Fachinformationssystemen AFIS, ALKIS <strong>und</strong> AT-<br />

KIS ist im AAA-Modell auch ein Modell für den externen Datenaustausch festgelegt.<br />

Die Normbasierte Austauschschnittstelle (NAS) ermöglicht den Austausch von Geodaten<br />

zwischen verschiedenen auf dem AAA-Modell basierenden Systemen. Dies betrifft<br />

sowohl kleinere Fortführungsaufträge (Update-Aufträge) als auch komplette Einrichtungsaufträge,<br />

die schnell große Datenmengen verursachen können.<br />

Unter Berücksichtigung dieser Aspekte soll ein NAS-konformer Importer für raumbezogene<br />

Daten entworfen <strong>und</strong> implementiert werden, der ATKIS-Daten aus einer NAS-<br />

XML-Datei einliest <strong>und</strong> in die <strong>MRDB</strong> <strong>und</strong> das im ersten Teil dieser Arbeit erstellte<br />

Schema importiert.<br />

Die durch die NAS gelieferten Fortführungsaufträge betreffen meist nur einige Objekte<br />

<strong>und</strong> somit nur jeweils kleine Ausschnitte des gesamten Kartenausschnitts. In dieser Situation<br />

ist ein komplettes Matching zu aufwändig <strong>und</strong> insofern unnötig, da stets auch<br />

die unveränderten Daten neu gematcht werden würden. Für diese Daten bestehen jedoch<br />

bereits alle Links, die auch weiterhin ihre Gültigkeit behalten. Daher wird parallel zu<br />

dieser Arbeit an der Leibniz Universität Hannover ein Verfahren zum lokalen Matching<br />

entwickelt [Nie07].<br />

Mit diesem Ansatz ist es möglich, nur die Gebiete neu zu matchen, in denen auch wirklich<br />

Änderungen stattgef<strong>und</strong>en haben. Die bereits vorhandenen Verknüpfungen der Gebiete,<br />

deren Daten unverändert geblieben sind, werden ohne erneute Überprüfung übernommen.<br />

So wird bei einem Update nur ein Bruchteil der Rechenzeit im Gegensatz zum<br />

Komplettmatching benötigt.<br />

Um die durch NAS-Fortführungsaufträge gelieferten Aktualisierungen des Datenbestandes<br />

für das lokale Matching zur Verfügung zu stellen, wird das oben beschriebene Datenbankschema<br />

um drei Tabellen erweitert, welche die Updateoperationen (insert, delete<br />

<strong>und</strong> replace) speichern <strong>und</strong> somit die Gr<strong>und</strong>lage für die Verarbeitung der Updates<br />

durch das lokale Matching darstellen.<br />

Das AAA-Modell wird in der ” GeoInfoDok“ [AdV06] beschrieben, die aktuell in Version<br />

5.1 vom 31.03.2006 vorliegt. Diese Version bildet auch die Gr<strong>und</strong>lage für diese Arbeit.<br />

1 http://www.dbs.uni-hannover.de<br />

2 http://www.bkg.b<strong>und</strong>.de<br />

6


Die verwendete Version der NAS ist 5.1.1 vom 15.02.2007 [AdV07].<br />

Die vorliegende Arbeit ist in sechs Kapitel gegliedert <strong>und</strong> behandelt dort die folgenden<br />

Themen:<br />

Kapitel 2 führt zunächst in für diese Arbeit wichtige XML-Technologien ein. Neben<br />

allgemeinen Gr<strong>und</strong>lagen zum Aufbau <strong>und</strong> zur Verarbeitung von XML-Dokumenten werden<br />

die in der NAS verwendeten Standards WFS, GML <strong>und</strong> FES erläutert.<br />

In Kapitel 3 wird in das AAA-Modell der AdV eingeführt. Hierbei liegt der Schwerpunkt<br />

neben allgemein gültigen Konzepten auf dem ATKIS-Ausschnitt <strong>und</strong> dem Modell<br />

für den externen Datenaustausch, NAS.<br />

Das 4. Kapitel beschreibt die Entwicklung eines relationalen Datenbankschemas für<br />

ATKIS-Daten, auf dessen Implementierung in Oracle 10g hier ebenfalls eingegangen<br />

wird. Auch die Integration in die <strong>MRDB</strong> <strong>und</strong> die spezielle Behandlung der Fortführungsaufträge<br />

werden in diesem Kapitel beschrieben.<br />

Die Implementierung eines NAS-Importers wird in Kapitel 5 beschrieben. Neben einem<br />

ausführlichen konzeptionellen Entwurf <strong>und</strong> der anschließenden Implementierung in<br />

der Programmiersprache JAVA werden auch die JAVA-Implementierungen der beiden<br />

XML-Parser SAX <strong>und</strong> StAX anhand dieses Projekts betrachtet <strong>und</strong> bewertet. Zudem<br />

wird auf die Behandlung der GML-Geometrien eingegangen, die in der NAS verwendet<br />

werden.<br />

Im 6. Kapitel findet sich in Form eines Fazits eine Zusammenfassung der wichtigsten<br />

Aspekte dieser Arbeit. Des Weiteren werden Vorschläge zur Fortführung <strong>und</strong> Erweiterung<br />

der zuvor vorgestellten Ansätze gemacht. Außerdem gibt dieses Kapitel einen Ausblick<br />

auf die Implementierung eines Exporters für NAS-Dateien <strong>und</strong> beschreibt mögliche<br />

Ansätze hierfür. Dies umfasst auch die konzeptionelle Vorbereitung auf den Export <strong>und</strong><br />

es wird dargelegt, wie bei der Implementierung des Importers der Export berücksichtigt<br />

wurde.<br />

7


Kapitel 2<br />

XML-Gr<strong>und</strong>lagen<br />

2.1 Extensible Markup Language (XML)<br />

Die Extensible Markup Language (XML) des World Wide Web Consortium (W3C)<br />

[W3C06a] ist aus der heutigen Zeit kaum mehr wegzudenken. Von einfachen Strukturen<br />

für Konfigurationsdateien über den Austausch von Daten zwischen Softwaresystemen<br />

oder -komponenten bis hin zu Dateiformaten für Office-Software ist das Stichwort ” XMLbasiert“<br />

überall zu finden.<br />

Ein XML-Dokument setzt sich stets durch Kombinationen von Elementen <strong>und</strong> Attributen<br />

zusammen. Im folgenden Beispiel sieht man ein Element stadt mit einem Attribut<br />

name <strong>und</strong> einem Attributwert Hannover. Darin befinden sich weitere Elemente vom<br />

Typ stadtteil mit jeweils einem Attribut einwohner <strong>und</strong> dem zum Element gehörigen<br />

Inhalt Bemerode bzw. Wülferode.<br />

<br />

Bemerode<br />

Wülferode<br />

<br />

XML-Namensräume (Namespaces) [W3C06b] ermöglichen die Nutzung verschiedener<br />

XML-Sprachen in einem einzigen Dokument. Die verschiedenen Namensräume müssen<br />

explizit in einem Element im Dokument angegeben werden <strong>und</strong> sind dann für alle Kindelemente<br />

gültig. Ein Beispiel für die Einbindung eines Namensraums ist der auch in der<br />

NAS verwendete GML-Namensraum:<br />

xmlns:gml="http://www.opengis.net/gml"<br />

Nun können Elemente eindeutig durch Angabe des Präfix gml: dem GML-Namensraum<br />

zugeordnet werden. So wäre es z.B. möglich, zwei Elemente mit dem identischen Namen<br />

Feature zu verwenden, einmal aus dem GML-Namensraum <strong>und</strong> ein zweites mit<br />

verschiedener Bedeutung aus dem AdV-Namensraum.<br />

8


Ein XML-Dokument ist wohlgeformt (well-formed), wenn seine Syntax korrekt ist. Dies<br />

beinhaltet beispielsweise das Vorhandensein von Start- <strong>und</strong> Endtags für jedes Element<br />

oder die korrekte Verschachtelung der Elemente ineinander. Außerdem muss das Dokument<br />

in einer Baumstruktur darstellbar sein; dies schließt auch das Vorhandensein genau<br />

eines Wurzelelements mit ein.<br />

Von einem validen (valid) XML-Dokument spricht man hingegen, wenn das Dokument<br />

den Vorgaben durch eine Document Type Definition (DTD) oder eine XML Schema<br />

Definition (XSD) (siehe Abschnitt 2.2) entspricht. So müssen alle Elemente <strong>und</strong> ihre<br />

Attribute durch die Schemasprache definiert sein. Oft muss auch eine bestimmte Reihenfolge<br />

oder Anzahl der Elemente eingehalten werden.<br />

Um XML-Daten in einer Anwendung zu verarbeiten, wird ein XML-Prozessor eingesetzt.<br />

Notwendige Komponente eines jeden XML-Prozessors ist ein so genannter XML-Parser,<br />

der ein XML-Dokument einliest <strong>und</strong> einzelne Bestandteile wie Elemente <strong>und</strong> Attribute<br />

erkennt. Um diese erkannten Daten in einer Anwendung zu verarbeiten, gibt es verschiedene<br />

Methoden zum Zugriff auf die Dokumente. Die populärsten Ansätze werden<br />

nachfolgend erläutert.<br />

2.1.1 Document Object Model (DOM)<br />

Das vom W3C entwickelte Document Object Model (DOM) beschreibt ein XML-Dokument<br />

in einer Baumstruktur. Abbildung 2.1 zeigt das im vorigen Abschnitt genannte<br />

Beispiel als DOM-Baum.<br />

Stadt<br />

Stadtteil Stadtteil<br />

Bemerode Wülferode<br />

Abbildung 2.1: Darstellung eines XML-Dokuments in einer Baumstruktur.<br />

Ein auf dem DOM basierender Parser liest zunächst das komplette Dokument in den<br />

Hauptspeicher ein. Daraufhin wird eine Baumstruktur aufgebaut, die das eingelesene<br />

Dokument repräsentiert. Nun ist es einer Anwendung möglich, über einheitliche Schnittstellen<br />

auf das Dokument bzw. einzelne Elemente davon zuzugreifen. So ist ein gezielter<br />

lesender <strong>und</strong> auch schreibender Zugriff möglich <strong>und</strong> auch das Einfügen neuer Elemente<br />

9


an beliebigen Stellen kann so einfach realisiert werden.<br />

Der Kern der Implementierung findet sich in der Klasse Node. Hier finden sich die meisten<br />

Methoden, die aus der Verwendung von Bäumen als Datenstrukturen bekannt sind. Mit<br />

getParentNode() kann beispielsweise der Zugriff auf Knoten <strong>und</strong> ihre Beziehungen zueinander<br />

realisiert werden, durch appendChild(newchild) oder removeChild(oldchild)<br />

ist es möglich, den Baum <strong>und</strong> somit das XML-Dokument zu verändern. Die Klasse<br />

Element steuert den direkten Zugriff auf einzelne Elemente. So können beispielsweise<br />

mit getElementsByTagName(name) alle Elemente mit dem angegebenen Namen zurückgegeben<br />

werden. Für Attribute <strong>und</strong> Textanteile stehen ähnliche Zugriffsmethoden zur<br />

Verfügung.<br />

Den oben genannten Vorteilen (direkter Zugriff <strong>und</strong> Manipulation von Elementen sind<br />

möglich) steht ein großer Nachteil des DOM gegenüber: der hohe Ressourcenverbrauch.<br />

Da das komplette Dokument in den Hauptspeicher eingelesen wird, stößt die Technik hier<br />

schnell an ihre Grenzen. Deshalb ist eine Verarbeitung von großen XML-Dokumenten<br />

fast unmöglich zu realisieren.<br />

2.1.2 Simple API for XML (SAX)<br />

Die Simple API for XML (SAX) wählt einen ereignisgesteuerten Ansatz zum Einlesen<br />

von XML-Dokumenten. Hierbei wird das zu parsende XML-Dokument sequentiell abgearbeitet,<br />

wobei das Vorkommen bestimmter Bestandteile jeweils eine passende Aktion<br />

bzw. eine Methode aufruft, die für die Anwendung entsprechend implementiert werden<br />

muss.<br />

Beispielsweise startDocument() <strong>und</strong> endDocument() werden aufgerufen, wenn am Anfang<br />

des Dokuments das Einlesen begonnen wird bzw. das Ende des Dokuments erreicht<br />

wurde <strong>und</strong> es somit komplett eingelesen ist. Ähnlich verhalten sich die Methoden<br />

startElement(Name, Attributes) <strong>und</strong> endElement(Name); hier werden zusätzlich der<br />

Elementname <strong>und</strong> etwaige Attribute als Parameter an die Methode übergeben. So ist es<br />

möglich, auf die unterschiedlichen Elemente <strong>und</strong> Attribute verschieden zu reagieren.<br />

Da SAX stets nur einen kleinen Teil eines Dokuments bearbeitet, eignet sich das Parsen<br />

mit SAX auch für sehr große XML-Dokumente. Die Daten sollten möglichst als Sequenz<br />

von Elementen mit einer einfachen Struktur vorliegen. Zu den größten Nachteilen von<br />

SAX zählen die fehlende Möglichkeit der Manipulation von Dokumenten <strong>und</strong> der fehlende<br />

Direktzugriff auf einzelne Elemente.<br />

2.1.3 Streaming API for XML (StAX)<br />

Auch die Streaming API for XML (StAX) gehört zur Familie der ereignisorientierten<br />

XML-Parser <strong>und</strong> ist sehr stark an SAX orientiert. Der große Unterschied besteht in<br />

der Kommunikation zwischen einem Anwendungsprogramm <strong>und</strong> dem Parser: bei SAX<br />

10


spricht man hier von einer push-API, während StAX eine pull-API ist. SAX ” drückt“<br />

(to push) die gelesenen Daten in das Anwendungsprogramm hinein, ohne auf eine Rückmeldung<br />

zu warten. Das Anwendungsprogramm hat keinen Einfluss darauf, wann die<br />

nächsten Daten geliefert werden.<br />

Dem entgegen greift eine pull-API das Konzept eines Iterators auf. Die Daten werden<br />

erst zur Anwendung ” gezogen“ (to pull), wenn sie auch wirklich benötigt werden.<br />

Der Parser bewegt einen Cursor durch das zu lesende XML-Dokument, der durch Aufruf<br />

der next()-Methode zum jeweils nächsten Element springt <strong>und</strong> das entsprechende<br />

Ereignis auslöst. Das folgende Codebeispiel illustriert einen Durchlauf durch ein komplettes<br />

XML-Dokument, wobei jeweils die Namen der gelesenen Startelemente ausgegeben<br />

werden:<br />

while (parser.hasNext()) {<br />

int ereignis = parser.next();<br />

if (ereignis == XMLStreamConstants.START_ELEMENT) {<br />

System.out.println("Gelesenes Element: " + parser.getLocalName());<br />

}<br />

}<br />

2.2 XML Schema<br />

Um die Struktur <strong>und</strong> den Aufbau eines XML-Dokuments, ein XML-Schema 1 , zu beschreiben<br />

<strong>und</strong> eindeutig festzulegen, bedient man sich einer so genannten Schemasprache.<br />

Das W3C schuf bei der Entwicklung von XML die Document Type Definition (DTD) als<br />

solch eine Schemasprache. Sie ist im XML 1.0 Standard [W3C06a] verankert <strong>und</strong> genießt<br />

daher eine weite Verbreitung in Anwendungsprogrammen, gilt aber heutzutage bereits<br />

als veraltet (siehe [Bri05]). Die größten Kritikpunkte sind zu geringe Darstellungsmöglichkeiten<br />

<strong>und</strong> die Tatsache, dass die DTD selbst kein XML-Dokument ist. Deswegen<br />

wird seit 2001 vom W3C der Nachfolger, XML Schema ([W3C04a] <strong>und</strong> [W3C04b]), entwickelt.<br />

Eine XML Schema Definition (XSD) ist eine Instanz eines in XML Schema verfassten<br />

XML-Schemas. Diese wird gewöhnlich in einer .xsd-Datei abgespeichert <strong>und</strong> kann dann<br />

in ein XML-Dokument eingeb<strong>und</strong>en werden. Es wird festgelegt, welche Elemente <strong>und</strong><br />

Attribute vorkommen dürfen, in welcher Beziehung sie zueinander stehen <strong>und</strong> welche<br />

Datentypen sie beinhalten.<br />

In XML Schema wird zwischen zwei Arten von Typen unterschieden:<br />

1. Einfache Typen (simpleType) dürfen weder Kindelemente noch Attribute besitzen.<br />

Ein Beispiel für einen einfachen Typen ist folgendes:<br />

1 Im Rahmen dieser Arbeit bezeichnet XML-Schema (mit Bindestrich) stets ein Schema, nach dem<br />

ein XML-Dokument aufgebaut ist, XML Schema (ohne Bindestrich) bezeichnet die Schemasprache.<br />

11


mit einer dazugehörigen Instanz<br />

Hannover<br />

2. Komplexe Typen (complexType) können sowohl Kindelemente als auch Attribute<br />

besitzen. Sie können sich auch aus einfachen Typen zusammensetzen, wie folgendes<br />

Beispiel zeigt:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

mit einer dazugehörigen Instanz<br />

<br />

Hannover<br />

7996942<br />

<br />

XML Schema stellt eine Vielzahl von Standardtypen bereit. Hierbei handelt es sich<br />

hauptsächlich um die auch aus Programmiersprachen bekannten primitiven Datentypen<br />

wie String, Integer oder Date. Eine Einschränkung eines selbst definierten oder<br />

Standarddatentyps ist durch das Element möglich. So kann beispielsweise<br />

ein String auf 10 Zeichen begrenzt werden oder der Integer-Zahlenbereich für ein<br />

Schulnoten-Element auf 1 bis 6 eingeschränkt werden. Ebenso ist eine Erweiterung von<br />

(komplexen) Datentypen über das Element möglich. Im Zusammenspiel<br />

mit der Vererbung lassen sich so bereits vorhandene Typen (base) leicht um zusätzliche<br />

Attribute oder Kinderelemente erweitern.<br />

Im Rahmen dieser Arbeit wird XML Schema als Beschreibungssprache für das AAA-<br />

Modell in den GML-Anwendungsschemata (siehe folgenden Abschnitt) verwendet, die<br />

eine wichtige Gr<strong>und</strong>lage der NAS sind.<br />

12


2.3 Geography Markup Language (GML)<br />

Wie in den vorigen Kapiteln bereits angedeutet, ist es ein wesentlicher Bestandteil von<br />

verteilten Geoinformationssystemen, Daten zwischen verschiedenen Systemen auszutauschen.<br />

Außerdem ist es teilweise nötig, Daten in eine Datei zu speichern bzw. zu exportieren.<br />

Um diesen Daten eine einheitliche Form zu geben, wurde vom Open Geospatial<br />

Consortium (OGC) die Geography Markup Language (GML) entworfen. Zunächst als<br />

OGC 02-023r4<br />

OGC-Standard veröffentlicht durchläuft GML zur Zeit als Version 3.1 die Prüfung zum<br />

Standard 19136 der International Organization for Standardization (ISO) [ISO07] <strong>und</strong><br />

basiert The auch types selbst and elements auf zahlreichen required for OGC- backwards <strong>und</strong> ISO-Spezifikationen. compatibility with GML Seit2 Version are part of 2 ist<br />

GML<br />

geometryBasic0d1d.xsd,<br />

komplett in der Beschreibungssprache<br />

geometryBasic2d.xsd<br />

XML<br />

and<br />

Schema<br />

geometryAggregates.xsd.<br />

verfasst.<br />

geometryPrimitives.xsd and geometryComplex.xsd are comprised of entirely new<br />

types and elements.<br />

Die hier betrachtete, da in der NAS verwendete, Version 3.0 von GML [OGC02] definiert<br />

Class - diagrams im Vergleich of an mit UML der Model Vorgängerversion are added for illustration. GML 2 - eine These wesentlich diagrams größere are Menge<br />

aninformative, Geometrietypen not normative. [LBTR04]. Figure Die7.5-1 Beschreibungssprache shows an overview deckt of the nun type beispielsweise hierarchy of the auch<br />

dreidimensionale GML geometry types. Objekte <strong>und</strong> Topologie ab. Abbildung 2.2 zeigt die Typenhierarchie<br />

der in GML 3.0 möglichen Geometrietypen. An dieser Stelle wird jedoch im Wesentlichen<br />

der<br />

NOTE:<br />

für diese<br />

The diagrams<br />

Arbeit relevante<br />

represent<br />

Teil<br />

an implementation<br />

der GML-Geometrien<br />

model derived<br />

betrachtet,<br />

from the<br />

der sich an das<br />

Simple<br />

conceptual<br />

Features<br />

UML<br />

Profile<br />

model<br />

[OGC06a]<br />

specified<br />

des<br />

in<br />

OGC<br />

Topic<br />

hält.<br />

1 of OGC’s Abstract Specification (ISO<br />

DIS 19107).<br />

LineString<br />

_CoordinateReferenceSystem<br />

(from CoordinateReferenceSystems)<br />

Curve<br />

i<br />

+segments 1<br />

<br />

_CurveSegment<br />

Point<br />

OrientableCurve<br />

Polygon<br />

+interior +exterior<br />

0..n<br />

0..1<br />

_Ring<br />

+srsName<br />

0..1<br />

_GeometricPrimitive<br />

_Curve<br />

CompositeCurve<br />

Surface<br />

i<br />

+patches 1<br />

<br />

_SurfacePatch<br />

_GML<br />

(from gmlBase)<br />

+ description [0..1] : CharacterString<br />

+ name [0..*] : CharacterString<br />

+ id [0..1] : ID<br />

_Geometry<br />

+ gid [0..1] : CharacterString<br />

_Surface<br />

OrientableSurface<br />

GeometricComplex<br />

_Solid<br />

Solid CompositeSolid<br />

CompositeSurface<br />

MultiGeometry<br />

_GeometricAggregate<br />

MultiPoint<br />

MultiCurve MultiSolid<br />

MultiSurface<br />

Abbildung 2.2: UML-Klassendiagramm Figure 7.5-1 – Type Hierarchy der Geometrietypen of the GML geometry von GML types 3.0 aus [OGC02].<br />

Any geometry element that inherits the semantics of AbstractGeometryType can be<br />

viewed as a set of direct positions.<br />

All of the classes in the inheritance tree of AbstractGeometryType 13<br />

inherit an optional<br />

association to a coordinate reference system. All direct positions shall directly or<br />

indirectly be associated with a coordinate reference system. When geometry elements are<br />

aggregated in another geometry element (such as a MultiGeometry or


Die in GML 3 zur Verfügung stehenden Geometrischen Primitiven (Geometric-<br />

Primitives) sind:<br />

1. Point für einfache Punkte.<br />

2. Curve, d.h. Kurven bzw. Linien, zur Modellierung aller linienförmigen Geometrien.<br />

Eine Curve besteht immer aus einem oder mehreren segments 2 (Segmenten).<br />

Diese Segmente können einfache linear interpolierte Kurvensegmente sein<br />

(LineStringSegment), aber auch Kreisbögen (z.B. Arc) oder weitere durch verschiedene<br />

Interpolationsverfahren gewonnene Liniengeometrien (z.B. CubicSpline).<br />

3. Surface zur Darstellung von Flächengeometrien. Ähnlich zu den Kurven werden<br />

auch Flächen aus mehreren Teilen zusammengesetzt. Hier spricht man von patches<br />

bzw. genauer von surface patches (nach [BT07] in etwa ” Flächenstück“). Diese<br />

Teilstücke werden in den meisten Fällen Polygone (PolygonPatch) sein. Es sind<br />

aber z.B. auch Dreiecke (Triangle) oder Rechtecke (Rectangle) möglich.<br />

4. Solid (nach [BT07] in etwa ” Festkörper“) ist speziell für dreidimensionale Geometrien<br />

entwickelt worden. Diese Geometrien spielen im Rahmen dieser Arbeit jedoch<br />

keine Rolle, da nur zweidimensionale Geometrien verwendet werden.<br />

Bei der Benennung der Kurvensegmente fällt auf, dass z.B. LineStringSegment nicht<br />

zur weiteren Systematik der Benennung passt. Dies liegt daran, dass LineString bereits<br />

eine GML 2-Geometrie ist <strong>und</strong> hier zur klaren Unterscheidung ein neuer Name gewählt<br />

werden musste. Gleiches gilt für PolygonPatch in GML 3 <strong>und</strong> Polygon bei GML 2.<br />

Neben den oben genannten GeometricPrimitives stellt GML 3 auch komplexe Geometrien<br />

(GeometricComplex) zur Verfügung. Diese sind aus den einfachen Geometrietypen<br />

zusammengesetzt. Die einzelnen Komponenten einer komplexen Geometrie müssen dabei<br />

zusammenhängend sein, dürfen sich aber nicht überschneiden. Eine CompositeCurve beispielsweise<br />

kann aus zwei oder mehr aneinandergrenzenden Geometrien vom Typ Curve<br />

zusammengesetzt sein. Der Startpunkt der zweiten Curve ist dabei der Endpunkt der<br />

ersten Curve <strong>und</strong> so weiter.<br />

Die Bedingung des Zusammenhangs entfällt bei den GeometricAggregates. Dies sind<br />

einfache Sammlungen von gleichartigen Geometrien, die nicht zusammenhängen müssen.<br />

Beispielsweise könnte eine MultiCurve zur Darstellung mehrerer unverb<strong>und</strong>ener Straßen<br />

(modelliert durch je eine Curve) innerhalb eines Gebietes verwendet werden.<br />

Das folgende Beispiel einer GML 3-Geometrie stellt eine Curve dar, also eine Linie,<br />

die in diesem einfachen Fall nur aus einem Segment besteht. Dieses LineStringSegment<br />

setzt sich wiederum aus zwei Koordinatenpaaren zusammen, zwischen denen das Liniensegment<br />

interpoliert wird.<br />

2 Die Kleinschreibung wurde hier <strong>und</strong> im Folgenden aus der GML-Spezifikation übernommen.<br />

14


<br />

<br />

3463335.510 5528724.660<br />

3463421.850 5528759.060<br />

<br />

<br />

<br />

Die in der NAS für ein Raumbezogenes Elementarobjekt (REO) zu verwendende Geometrie<br />

wird in einer Anlage zur GeoInfoDok [AdV06] festgelegt. Hier wird die Verwendung<br />

der GML-Geometrien auf folgende Geometrien eingeschränkt:<br />

• gml:Surface <strong>und</strong> gml:MultiSurface<br />

• gml:Curve, gml:MultiCurve <strong>und</strong> gml:CompositeCurve<br />

• gml:Point <strong>und</strong> gml:MultiPoint<br />

Ein GML-Feature ist ein Objekt der realen Welt, welches in GML modelliert werden<br />

kann. Mit GML lassen sich sowohl die räumlichen als auch die thematischen Eigenschaften<br />

von Features modellieren. Der Zusatz Simple schränkt die zu einem Feature<br />

gehörende Geometrie auf den zweidimensionalen Raum ein. Es lassen sich also im Wesentlichen<br />

Geometrien aus Punkten, Linien <strong>und</strong> Polygonen realisieren.<br />

Da eine bestimmte Anwendung selten auf den gesamten Funktionsumfang von GML<br />

zugreifen wird, gibt es die so genannten GML-Profile. Ein Profil definiert den für eine<br />

Anwendung relevanten Teil, stellt also eine Auswahl <strong>und</strong> Einschränkung des Funktionsumfangs<br />

dar. Wendet man ein Profil an, so hat man weiterhin nur die Basisdatentypen<br />

aus der GML-Spezifikation zur Verfügung. Eigene Typen (s.u.) sind hier noch nicht eingeplant.<br />

Ein weit verbreitetes Profil ist beispielsweise das GML Simple Features Profile<br />

([OGC06a], s.o.), das nur lineare Geometrien beinhaltet, dreidimensionale Geometrien<br />

oder Topologie hingegen ganz außen vor lässt. Es bietet so ausreichend Möglichkeiten zur<br />

Modellierung der realen Welt <strong>und</strong> blendet komplexere Möglichkeiten von GML zunächst<br />

aus. Noch restriktiver ist beispielsweise das Point Profile [OGC05a], das nur Punkt-<br />

Geometrien zulässt. Auch in der NAS wird der Umfang der erlaubten GML-Elemente<br />

<strong>und</strong> -Typen durch ein GML-Profil (gml3nas.xsd) 3 reduziert.<br />

Ein GML-Anwendungsschema hingegen ist zur Erweiterung des Sprachumfangs gedacht.<br />

Hierbei ist es möglich, den vollen GML-Sprachumfang zu nutzen, oder einen zuvor durch<br />

ein Profil eingegrenzten. Durch ein Anwendungsschema ist es möglich, dem Basisschema<br />

von GML eigene Typen hinzuzufügen. Ein Anwendungsschema deckt meist einen speziellen<br />

Themenbereich ab <strong>und</strong> stellt neue Objekttypen zu diesem Thema bereit. So kann ein<br />

3 Diese Datei befindet sich im Unterordner NAS5.1.1/gml/3.0.0/base der unter [AdV07] erhältlichen<br />

ZIP-Datei.<br />

15


Anwendungsschema zum Thema ” Stadt“ die neuen Objekttypen Straße oder Marktplatz<br />

mit sich bringen, die wiederum aus den in GML spezifizierten Primitiven zusammengesetzt<br />

sind. Ein Anwendungsschema wird in XML Schema verfasst <strong>und</strong> kann auf anderen<br />

Anwendungsschemata aufbauen oder diese einbinden. In der NAS finden sich u.a.<br />

GML-Anwendungsschemata für das AAA-Basisschema (AAA-Basisschema.xsd) <strong>und</strong> das<br />

AAA-Fachschema (AAA-Fachschema.xsd) 4 . Eine Übersicht über die in der NAS verwendeten<br />

GML-Anwendungsschemata findet sich in Abschnitt 3.5.<br />

2.4 Filter Encoding Specification (FES)<br />

Die Filter Encoding Specification (FES) wurde vom OGC ursprünglich im Rahmen des<br />

Web Feature Service (WFS) entwickelt, um Filterausdrücke in Anfragen (Queries) an<br />

den Server zu ermöglichen. Mittlerweile wurde die Spezifikation jedoch in einen eigenen<br />

Standard ausgelagert [OGC05b], da sie heute in zahlreichen weiteren OGC-Standards<br />

Verwendung findet. Ziel der Filter Encoding Specification ist es, bestimmte Objektinstanzen<br />

aufgr<strong>und</strong> ihrer Eigenschaften (Attribute, Typ, Beziehungen) aus einer großen<br />

Menge von Objektinstanzen herauszufiltern, d.h. anzufragen. Diese Filterausdrücke werden<br />

in XML verfasst <strong>und</strong> können mit der WHERE-Klausel einer SQL-Anfrage verglichen<br />

werden. Auch in der NAS wird die FES als Anfragesprache zum Identifizieren einzelner<br />

Objektinstanzen benutzt.<br />

Die Filter Encoding Specification kennt drei verschiedene Klassen von Operatoren:<br />

1. Vergleichsoperatoren, die im Wesentlichen aus SQL bekannt sind. Dies sind beispielsweise<br />

für =“, für<br />

”<br />


<br />

20<br />

<br />

<br />

<br />

Eine dazu passende Objektinstanz könnte folgendermaßen aussehen:<br />

<br />

[..]<br />

15<br />

<br />

Um auch Anfragen an komplexe Objekteigenschaften zu ermöglichen, kann innerhalb eines<br />

Filter-Ausdrucks die XML-Anfragesprache XPath [W3C07] verwendet werden. Das<br />

folgende Beispiel zeigt die Eigenschaft lebenszeitintervall als komplexe Objekteigenschaft.<br />

Im Gegensatz zu der oben genannten einfachen Eigenschaft breiteDesGewaessers<br />

hat diese Eigenschaft selbst wieder Kindelemente (siehe Abschnitt 2.1):<br />

<br />

[..]<br />

<br />

<br />

2007-07-20T14:30:00Z<br />

<br />

<br />

<br />

Ein dazu passender Filterausdruck, der diese komplexe Eigenschaft überprüft, ist im<br />

Folgenden angegeben:<br />

<br />

<br />

<br />

lebenszeitintervall/AA_Lebenzeitintervall/beginnt<br />

<br />

2007-07-15T10:00:00<br />

<br />

2.5 Web Feature Service (WFS)<br />

Der Web Feature Service (WFS) wurde vom Open Geospatial Consortium (OGC) spezifiziert<br />

[OGC05c], um einen plattformunabhängigen Zugriff auf verteilte vektorielle Geodaten<br />

zu ermöglichen. Die Methode zur Speicherung der Daten auf dem Server (Datenbank,<br />

Dateisystem) <strong>und</strong> ihr Format spielt hierbei keine Rolle, da die Clients nur<br />

17


auf fest definierte Schnittstellen der Server zugreifen. Der Datenaustausch erfolgt über<br />

das Hypertext Transfer Protocol (HTTP) bzw. HTTPS für verschlüsselte Verbindungen.<br />

Die von einem Web Feature Server angebotenen Dienste können variieren. Man unterscheidet<br />

zwischen:<br />

1. Basic WFS mit den Schnittstellen<br />

• GetCapabilities() zur Beschreibung der vom Server angebotenen Operationen<br />

<strong>und</strong> der auf dem Server verfügbaren FeatureTypes, wiederum mit ihren<br />

Operationen. Dies stellt in der Regel die erste Anfrage des Clients dar.<br />

• DescribeFeatureType(typename) zur Beschreibung eines auf dem Server<br />

verfügbaren FeatureType. Als Antwort wird eine XML-Schema-Datei zurückgegeben.<br />

• GetFeature(filter) für Anfragen des Clients nach bestimmten Feature-<br />

Instanzen. Eine Einschränkung der Ergebnismenge ist durch den Parameter<br />

filter möglich, der nach der OGC Filter Encoding Specification eine detaillierte<br />

Selektion der zu holenden Features ermöglicht.<br />

2. Transaction WFS mit den Schnittstellen<br />

• Insert(features) zum Einfügen neuer Feature-Instanzen. Diese werden in<br />

GML an den WFS übergeben, wobei sie der durch DescribeFeatureType<br />

(typename) festgelegten Schemadefinition entsprechen müssen.<br />

• Delete(filter) zum Löschen vorhandener Feature-Instanzen. Auch hier kann<br />

wieder ein OGC-Filter verwendetet werden.<br />

• Update(filter, propertyname, propertyvalue) zum Aktualisieren oder<br />

Ändern vorhandener Feature-Instanzen. Die Auswahl einer Instanz erfolgt<br />

wiederum durch einen OGC-Filter, außerdem wird der Name des zu aktualisierenden<br />

Feature-Attributs <strong>und</strong> dessen neuer Wert als Parameter übergeben.<br />

Ein OGC-konformer Web Feature Server muss mindestens die Basisschnittstelle (nur<br />

lesender Zugriff) zur Verfügung stellen, die schreibenden Zugriffe des Transaction WFS<br />

sind optional. Alle Schnittstellen sind in XML Schema verfasst <strong>und</strong> frei verfügbar.<br />

Will ein Client einen Server kontaktieren, so sendet er einen Request (Anfrage) an diesen.<br />

Der Server muss laut Spezifikation jede Anfrage mit einer Response (Antwort) beantworten.<br />

Im Fall eines validen Requests ist das Format der Antwort genau spezifiziert, im<br />

Fehlerfall ist eine Service Exception an den Client zu senden.<br />

Die Antworten des Servers sind allesamt XML-Dokumente. Im Falle von GetCapabilities()<br />

<strong>und</strong> den Methoden des Transaction WFS handelt es sich um ” reines XML“,<br />

DescribeFeatureType() liefert ein GML-Anwendungsschema in XML Schema zurück.<br />

18


Ein zu diesem Schema konformes GML-Dokument (siehe Abschnitt 2.3) wird letztendlich<br />

von GetFeature() generiert <strong>und</strong> an den Client gesendet.<br />

In der NAS werden die Methoden des WFS als Steuerinformationen innerhalb einer<br />

NAS-konformen XML-Datei verwendet. So wird festgelegt, welche Daten eingefügt, gelöscht<br />

oder aktualisiert werden müssen. Die WFS-Spezifikation wurde von der AdV um<br />

einige AdV-spezifische Funktionen ergänzt. Besonders ist zu beachten, dass in der NAS<br />

statt update eine neue Funktion replace eingeführt wird. Bei einem replace sind stets<br />

alle Eigenschaften des Objekts anzugeben, die Verwendung von update würde hingegen<br />

nur die geänderten Eigenschaften benötigen.<br />

Der WFS entstammt einer ganzen ” Familie“ von OGC-Standards (WFS, WCS <strong>und</strong><br />

WMS), die sich in ihrem Aufbau sehr ähnlich sind. So muss beispielsweise die Basisfunktion<br />

GetCapabilities() in allen drei Spezifikationen implementiert werden. Ergänzend<br />

seien deshalb hier noch die beiden anderen durch das OGC spezifizierten Webservices<br />

erwähnt:<br />

• Der Web Coverage Service (WCS) [OGC06c] ist komplett analog zum WFS aufgebaut,<br />

liefert jedoch Geodaten in Form von Coverages an den Client. Coverage<br />

steht nach ISO- <strong>und</strong> OGC-Definition eigentlich für kontinuierliche flächenhafte<br />

Phänomene, der WCS-Standard interpretiert diesen Begriff jedoch ausschließlich<br />

als Rasterdaten. Sie werden mit detaillierten Beschreibungen <strong>und</strong> ihrer ursprünglichen<br />

Semantik bereitgestellt.<br />

• Der Web Map Service (WMS) [OGC06b], der aus Raster- oder Vektordaten auf<br />

dem Server ein Kartenbild in Form einer Bilddatei erzeugt <strong>und</strong> diese als Rastergrafik<br />

(z.B. JPG) oder Vektorgrafik (z.B. SVG) an den Server zurückschickt. Im<br />

Gegensatz zu beiden zuvor betrachteten Services liefert ein WMS stets nur eine<br />

Visualisierung zurück, nicht aber die zu Gr<strong>und</strong>e liegenden Daten <strong>und</strong> deren Semantik.<br />

19


Kapitel 3<br />

Das AAA-Modell<br />

3.1 Das AAA-Modell<br />

Das AAA-Modell wird von der AdV entwickelt, um die zuvor getrennt geführten Datenbestände<br />

der <strong>Informationssysteme</strong> AFIS, ALKIS <strong>und</strong> ATKIS in einem gemeinsamen<br />

Referenzmodell in Beziehung zu bringen. Eine standardisierte Beschreibung in UML,<br />

ein gemeinsames Objektmodell <strong>und</strong> harmonisierte Objektartenkataloge stellen hierbei<br />

die konzeptionelle Ebene dar, die Normbasierte Austauschschnittstelle (NAS) legt eine<br />

einheitliche externe Sicht auf die Daten fest <strong>und</strong> definiert somit auch die Datenaustauschschnittstelle.<br />

Die gesamte Spezifikation ist in Form der ” GeoInfoDok“ [AdV06] frei<br />

verfügbar.<br />

AAA-Anwendungsschema<br />

Internationale Normen<br />

(ISO, OGC)<br />

AAA-Basisschema<br />

ATKIS ALKIS AFIS<br />

AAA-Fachschema<br />

NAS<br />

Abbildung 3.1: Das AAA-Anwendungsschema.<br />

Die Umsetzung dieses Referenzmodells wird im gemeinsamen AAA-Anwendungsschema<br />

beschrieben (Abbildung 3.1). Ein Anwendungsschema entsteht durch Abstraktion der<br />

realen Welt <strong>und</strong> definiert formale Strukturen für Daten <strong>und</strong> Inhalte. Alle in der realen<br />

20


Welt erfassten Daten müssen dann nach diesem festgelegten Modell in den Datenbestand<br />

der Anwendung aufgenommen werden. Das AAA-Anwendungsschema unterteilt<br />

sich wiederum in<br />

1. das AAA-Basisschema <strong>und</strong><br />

2. ein Fachschema, beispielsweise das AAA-Fachschema, das sich aus AFIS, ATKIS<br />

<strong>und</strong> ALKIS zusammensetzt.<br />

<br />

AAA_Operationen<br />

AA_Auftrag<br />

AA_Ergebnis<br />

AA_Instanzenthemen<br />

AA_Themendefinition<br />

AA_Art_Themendefinition<br />

AA_Themendimension<br />

AA_Empfaenger<br />

AA_NAS_Ausgabeform<br />

AA_Benutzungsauftrag<br />

AA_Anlassart_Benutzungsauftrag<br />

AA_Bestandsdatenauszug<br />

AA_Koordinatenreferenzsystemangaben<br />

AA_Objektliste<br />

AA_Fortfuehrungsauftrag<br />

AA_Fortfuehrungsergebnis<br />

GetCapabilities<br />

ServiceMetadata<br />

DataContents<br />

DCP<br />

ExceptionFortfuehrung<br />

Operation<br />

NAS_Filter_Capabilities<br />

<br />

AAA_Praesentationsobjekte<br />

AP_TPO<br />

AP_PPO<br />

AP_LPO<br />

AP_FPO<br />

AP_GPO<br />

AP_HorizontaleAusrichtung<br />

AP_PTO<br />

AP_LTO<br />

AP_VertikaleAusrichtung<br />

AP_Darstellung<br />

<br />

AAA_GemeinsameGeometrie<br />

AG_Punktobjekt<br />

AG_Linienobjekt<br />

AG_Flaechenobjekt<br />

AG_Geometrie<br />

AG_Objekt<br />

<br />

AAA_Katalog<br />

AC_FeatureType<br />

AC_ObjektTypenBezeichnung<br />

AC_Objektartengruppe<br />

AC_Thema<br />

AC_Themenart<br />

AC_Objektartenbereich<br />

AC_FeatureCatalogue<br />

AC_FeatureAttribute<br />

AC_AssociationRole<br />

AC_FeatureOperation<br />

AC_Typensammlung<br />

AC_Erfassungskriterium<br />

AC_DataType<br />

AC_DataTypeKategorie<br />

AC_Profil<br />

AC_CommonElements<br />

AC_LetzteAenderung<br />

AC_ListedValue<br />

AC_Konsistenzbedingung<br />

AC_Bildungsregel<br />

<br />

<br />

AAA_Spatial Schema<br />

AG_ObjektMitGemeinsamerGeometrie<br />

AA_PunktLinienThema<br />

AA_Flaechengeometrie<br />

AA_Liniengeometrie<br />

TA_SurfaceComponent<br />

TA_CurveComponent<br />

TA_PointComponent<br />

TA_MultiSurfaceComponent<br />

AU_ObjektMitUnabhaengigerGeometrie<br />

AAA_Punktmengenobjekte<br />

AD_PunktCoverage<br />

AD_GitterCoverage<br />

AD_ReferenzierbaresGitter<br />

AD_Wertematrix<br />

<br />

AAA_Projektsteuerung<br />

AA_Antrag<br />

AA_Projektsteuerung<br />

AA_Meilenstein<br />

AA_Vorgang<br />

AA_Projektsteuerungsart<br />

AA_Vorgangsart<br />

AA_VorgangInProzess<br />

AA_Dokumentationsbedarf<br />

AA_Gebuehrenparameter<br />

AA_Projektsteuerungskatalog<br />

AA_Antragsart<br />

AA_BesondereMeilensteinkategorie<br />

AA_Aktivitaet<br />

AA_Aktivitaetsart<br />

AA_AktivitaetInVorgang<br />

AA_DurchfuehrungAktivitaet<br />

AA_ProzesszuordnungAktivitaet<br />

AA_Antragsgebiet<br />

<br />

AAA_Nutzerprofile<br />

AA_Benutzer<br />

AA_Benutzergruppe<br />

<br />

AAA_Unabhaengige Geometrie<br />

AU_Punktobjekt<br />

AU_Linienobjekt<br />

AU_Flaechenobjekt<br />

AU_KontinuierlichesLinienobjekt<br />

AU_Geometrie<br />

AU_Objekt<br />

AA_Punktgeometrie<br />

AU_Punkthaufenobjekt<br />

<br />

AAA_Basisklassen<br />

AA_ZUSO<br />

AA_REO<br />

AA_NREO<br />

AA_Objekt<br />

AA_Fachdatenverbindung<br />

AA_Lebenszeitintervall<br />

AA_UUID<br />

AA_ObjektOhneRaumbezug<br />

AA_Fachdatenobjekt<br />

AA_Modellart<br />

AA_AdVStandardModell<br />

URI<br />

AA_PMO<br />

AA_Anlassart<br />

AA_WeitereModellart<br />

Abbildung 3.2: Pakete des AAA-Basisschemas. Eigene Darstellung nach [AdV06].<br />

Das AAA-Basisschema stellt hierbei die Gr<strong>und</strong>lage für beliebige Fachschemata dar, ist<br />

also nicht auf das AAA-Fachschema beschränkt. Es werden dort in 10 Paketen die<br />

gr<strong>und</strong>legenden Klassen definiert, die eine Modellierung der Fachobjekte in einem Fachschema<br />

ermöglichen (siehe Abbildung 3.2). Hierzu zählt beispielsweise ein Paket, welches<br />

Basisklassen für Objekte mit unabhängiger Geometrie enthält (AAA_Unabhaengige<br />

21


Geometrie). Ein weiteres Paket stellt Basisklassen für Präsentationsobjekte zur Verfügung<br />

(AAA_Praesentationsobjekte). Das AAA-Basisschema implementiert zahlreiche<br />

Normen der ISO 191XX -Familie des technischen Komitees 211 1 ( ” Geographic information“);<br />

diese werden teilweise jedoch angepasst bzw. erweitert.<br />

Die Zugehörigkeit zu einem Paket bzw. der Ursprung einer Klasse ist als Präfix dem<br />

Klassennamen vorangestellt. Die Benennung erfolgt nach folgender Systematik (gekürzt<br />

übernommen aus [AdV07] <strong>und</strong> mit eigenen Anmerkungen ergänzt):<br />

• Genormte Klassen (z.B. durch ISO oder OGC) behalten das jeweilige genormte<br />

Präfix im Klassennamen (z.B. FC für ” Feature Catalogue“, MD für ” Metadata“).<br />

• Klassen mit gr<strong>und</strong>sätzlicher Bedeutung für AFIS, ALKIS <strong>und</strong> ATKIS erhalten das<br />

Präfix AA. Dies betrifft viele Klassen des Basisschemas.<br />

• Klassen, die aus den ISO TS *Component - Klassen ( ” simple topology“) abgeleitet<br />

wurden, erhalten das Präfix TA.<br />

• Klassen mit gemeinsam genutzter Geometrie erhalten das Präfix AG.<br />

• Klassen der unabhängigen Geometrie erhalten das Präfix AU.<br />

• Klassen der Präsentationsobjekte erhalten das Präfix AP.<br />

• Die instanziierbaren Klassen der Fachobjekte <strong>und</strong> ihre Bezeichnung in der NAS<br />

haben das Präfix AX (z.B. AX_Wald).<br />

Die Klassen des AAA-Anwendungsschemas folgen einer strengen Klassenhierarchie. Das<br />

Prinzip der Vererbung wird konsequent eingesetzt. Gr<strong>und</strong>lage aller Klassen zur Darstellung<br />

von Fachobjekten ist die abstrakte Klasse AA_Objekt aus dem Paket AAA_Basisklassen.<br />

Alle Fachobjekte erben von dieser Klasse somit die folgenden fünf Eigenschaften:<br />

1. Den Identifikator, der ein Fachobjekt eindeutig bestimmt.<br />

2. Das Lebenszeitintervall zur Versionierung.<br />

3. Den Anlass für die Entstehung, Änderung oder Löschung des Objekts.<br />

4. Die Modellart, bei ATKIS z.B. Basis-DLM.<br />

5. Die Beziehung zeigtAufExternes, um einen Verweis auf externe Fachinformationssysteme<br />

zu ermöglichen.<br />

1 http://www.iso.org/iso/en/stdsdevelopment/tc/tclist/TechnicalCommitteeDetailPage. Technical-<br />

CommitteeDetail?COMMID=4637<br />

22


Um ein Objekt innerhalb eines Systems (z.B. auch b<strong>und</strong>esweit) eindeutig zu repräsentieren,<br />

wird jedes Objekt im AAA-Modell mit einem Identifikator versehen. Dieser Identifikator<br />

wird festgelegt, wenn das Objekt entsteht <strong>und</strong> bleibt bis zum Löschen der letzten<br />

Version des Objekts unverändert. Eine Versionierung ist im AAA-Modell durch das Lebenszeitintervall<br />

eines Objekts möglich. Die Lebenszeit der ersten Version eines Objektes<br />

beginnt stets mit dem Einfügen in den Datenbestand. Hierfür wird die Transaktionszeit<br />

betrachtet, es wird also die Systemzeit des Systems betrachtet, auf dem das Objekt<br />

in den Datenbestand eingepflegt wird. Bei Änderung eines Objekts wird zwischen zwei<br />

Fällen unterschieden:<br />

1. Änderung von objektbildenden Eigenschaften bewirken das Löschen des zu ändernden<br />

Objekts (d.h. das Lebenszeitintervall der letzten Version bekommt ein Enddatum)<br />

<strong>und</strong> ein neues Objekt mit einem neuen Identifikator wird in den Datenbestand<br />

eingefügt (delete mit anschließendem insert). Die Änderung der Objektart oder<br />

der Geometrie eines Objekts erzeugt beispielsweise immer ein neues Objekt.<br />

2. Änderung von nicht-objektbildenden Eigenschaften bewirken die Schaffung einer<br />

neuen Version des Objekts (mit identischem Identifikator). Das Anfangsdatum des<br />

Lebenszeitintervalls der neuen Version entspricht hierbei dem Enddatum der alten<br />

Version (replace). Beispielsweise die Änderung eines Attributwertes bringt die<br />

Erschaffung einer neuen Version eines bestehenden Objektes mit sich.<br />

Die Regeln zur Objektbildung werden durch Kennzeichnung von objektbildenden Eigenschaften<br />

einerseits verbindlich im Objektartenkatalog (z.B. ATKIS) festgelegt, können<br />

aber andererseits auch ” länderspezifisch erweitert werden“ [AdV07]. Die B<strong>und</strong>esländer<br />

können also weitere Eigenschaften eines Fachobjekts als objektbildend festlegen.<br />

Die historischen Informationen bleiben durch diese Art der Versionierung komplett im<br />

Datenbestand erhalten.<br />

Der Aufbau des 16-stelligen Identifikators ist in der GeoInfoDok genau festgelegt <strong>und</strong> enthält<br />

Informationen zur Nationalität (DE), eine Kennung der ausstellenden Implementierungsstelle,<br />

beginnend mit dem ISO-Code des B<strong>und</strong>eslandes bzw. der -behörde (NI1234),<br />

<strong>und</strong> eine laufende eindeutige Nummer: DENI123412345678. Um verschiedene Versionen<br />

eines Objekts unterscheiden zu können, wird der Identifikator um die Zeitangabe der<br />

Entstehung der Version des Objektes ergänzt. Eine so zusammengesetzte Kennung hat<br />

folgende Form:<br />

DENI12341234567820070501T132500Z<br />

Sie verweist also auf die Version des oben angegebenen Objektes, deren Lebenszeitintervall<br />

am 1. Mai 2007 um 13:25:00 Uhr der Zeitzone Z 2 begann. Durch diese Kennzeichnung<br />

werden sichere Lösch- <strong>und</strong> Updatevorgänge garantiert, auch eindeutige Verweise auf Objektversionen<br />

sind so möglich.<br />

2 Universal Time Coordinated (UTC), Greenwich Mean Time<br />

23


Neben den hier genannten Attributen, die für alle Fachobjekte gültig sind, können im<br />

AAA-Modell für jedes Fachobjekt weitere thematische Attribute festgelegt werden. In<br />

den jeweiligen Objektartenkatalogen des Fachschemas wird für jedes Fachobjekt festgelegt,<br />

welche Atttribute für eben dies Objekt möglich sind. Hierbei werden die Attributtypen<br />

wie folgt beschrieben:<br />

• Jedes Attribut hat eine eindeutige Kennung. Dies ist z.B. NAM für ein thematisches<br />

Attribut, das einen Namen - beispielsweise einen Straßennamen - angibt.<br />

• Der Datentyp des Attributwertes wird festgelegt. In diesem Fall ist der Name vom<br />

Typ String.<br />

• Es wird eine Kardinalität vorgegeben <strong>und</strong> somit auch festgelegt, welche Attribute<br />

zwingend angegeben werden müssen. So kann z.B. ein Name für eine Straße<br />

als zwingend notwendig definiert werden, während ein Friedhof auch ohne einen<br />

Namen auskommt.<br />

Auch die Einschränkung eines Attributtyps auf eine bestimmte Menge vordefinierter<br />

Werte ist im AAA-Modell vorgesehen. Dies geschieht durch die so genannten Codelisten.<br />

Sie bestehen aus einer Aufzählung von Zuordnungen zwischen Kennungen <strong>und</strong> Werten.<br />

Die Kennungen sind hierbei in Form von Nummern gegeben, die innerhalb einer Codeliste<br />

eindeutig sein müssen. Die Werte stellen Beschreibungen dar, welche die Bedeutung<br />

je einer Nummer erläutern.<br />

Codelisten werden im AAA-Modell als Datentypen in eigenen Klassen modelliert. Das<br />

nachfolgende Beispiel (in XML Schema verfasst; aus dem GML-Anwendungsschema des<br />

AAA-Fachschema) legt die möglichen Werte für die Vegetation eines Waldes fest. Es handelt<br />

sich um den Datentyp AX_Vegetationsmerkmal_Wald, der unter dieser Bezeichnung<br />

auch einem Fachobjekt als Attributtyp zugeordnet werden kann.<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Dieser neu erstellte Datentyp kann dann in der Definition der Attribute eines Fachobjekts<br />

verwendet werden (hier für das Fachobjekt AX_Wald):<br />

24


Als Attributwert wird in der NAS dann stets nur die Nummer des referenzierten Wertes<br />

angegeben, also beispielsweise<br />

1100.<br />

Auf der nächsten Stufe der Klassenhierarchie definiert das AAA-Basisschema vier weitere<br />

abstrakte Basisklassen für Objekte, die im Vergleich zu AA_Objekt jedoch bereits<br />

weiter spezialisiert sind. Diese sind im Paket ebenfalls im Paket AAA_Basisklassen enthalten<br />

<strong>und</strong> werden in Abbildung 3.3 <strong>und</strong> nachfolgend erläutert:<br />

• Raumbezogene Elementarobjekte (Klasse AA_REO) sind die kleinste mögliche Einheit,<br />

lassen sich also nicht in weitere Objekte zerlegen <strong>und</strong> haben neben thematischen<br />

Eigenschaften einen Raumbezug in Form von geometrischen oder topologischen<br />

Eigenschaften. Dies ist z.B. bei einem Flurstück der Fall <strong>und</strong> es wird somit<br />

im AAA-Modell als REO angesehen.<br />

<br />

AA_PMO<br />

+name [0..1]: CharacterString<br />

+beschreibung [0..1]: CharacterString<br />

+ausdehnung: GM_Envelope<br />

<br />

AA_Objekt<br />

+ identifikator: AA_UUID<br />

+lebenszeitintervall: AA_Lebenszeitintervall<br />

+modellart: Set<br />

+anlass [0..1]: Sequence<br />

+zeigtAufExternes [0..1]: Set<br />

+hatDirektUnten<br />

0..*<br />

Unterführung<br />

<br />

AA_REO<br />

0..*<br />

+istAbgeleitetAus<br />

0..*<br />

+traegtBeiZu<br />

0..1<br />

Kartengeometrie<br />

+bestehtAus<br />

1..*<br />

<br />

AA_NREO<br />

<br />

AA_ZUSO<br />

Zusammensetzung<br />

+istTeilVon<br />

0..*<br />

Abbildung 3.3: Die vier Basisklassen für Objekte im Zusammenhang. Eigene Darstellung<br />

nach [AdV06].<br />

• Nicht raumbezogene Elementarobjekte (Klasse AA_NREO) gehören ebenfalls zu den<br />

Elementarobjekten, haben im Unterschied zu REOs aber keinen Raumbezug <strong>und</strong><br />

somit nur thematische Eigenschaften. Personen sind im Sinne des AAA-Modells<br />

NREOs, da sie z.B. einen Namen als thematische Eigenschaft, jedoch keine Geometrie<br />

besitzen.<br />

• Zusammengesetzte Objekte (Klasse AA_ZUSO) werden aus beliebig vielen semantisch<br />

zusammengehörigen Objekten (REOs, NREOs <strong>und</strong> auch ZUSOs) gebildet,<br />

müssen aber mindestens aus einem Elementarobjekt (REO oder NREO) bestehen.<br />

Das Konzept der ZUSOs ermöglicht hierarchische Zusammenhänge zwischen<br />

25


Objekten gleicher oder verschiedener Objektarten. Ein Beispiel für ein ZUSO<br />

aus dem ATKIS-Objektartenkatalog ist in Abbildung 3.4 dargestellt: das ZUSO<br />

AX_Strasse besteht aus den drei Elementarobjekten AX_Fahrbahnachse 3 (zweimal)<br />

<strong>und</strong> AX_Strassenachse. Die angrenzenden Flächen der Objektart AX_Landwirtschaft<br />

sind nicht Teil des ZUSO <strong>und</strong> dienen nur zur Veranschaulichung der<br />

Umgebung.<br />

AX_Fahrbahnachse<br />

AX_Strasse<br />

bestehtAus<br />

AX_Strassenachse AX_Fahrbahnachse<br />

AX_Landwirtschaft<br />

Abbildung 3.4: Aufbau eines ZUSOs am Beispiel einer Straße. Eigene Darstellung nach<br />

[AdV06].<br />

• Punktmengenobjekte (Klasse AA_PMO) beschreiben große Ansammlungen von unterschiedlichen<br />

geometrischen Orten mit gleichen Attributarten. Diese Basisklasse<br />

spielt im Wesentlichen für ein Digitales Geländemodell (DGM) eine Rolle, genauer<br />

für die Punkte des DGM-Gitters. Im Kontext dieser Arbeit, die sich hauptsächlich<br />

mit den ATKIS-DLM beschäftigt, spielt diese Klasse von Objekten keine Rolle.<br />

3 AX_Fahrbahnachse ist im AAA-Modell als linienförmige Geometrie (als Mittelachse der Fahrbahn)<br />

modelliert. Die Zuweisung einer Breite erfolgt durch das Attribut breiteDerFahrbahn. In Abbildung<br />

3.4 wurde die intuitivere flächenförmige Visualisierung einer Fahrbahn gewählt.<br />

26


Auf diesen vier Basisklassen aufbauend definiert das AAA-Basisschema in den in Abbildung<br />

3.2 dargestellten Paketen zahlreiche abstrakte Objektklassen, von denen die Fachschemata<br />

durch Vererbung konkrete Klassen ableiten können. Dies sind bei den Fachobjekten<br />

beispielsweise AA_ZUSO <strong>und</strong> AA_REO selbst, AG_Linienobjekt, AU_Flaechenobjekt<br />

usw. Eine komplette Klassenhierarchie für ein Fachobjekt wird in Abbildung 3.5 für die<br />

Objektarten AX_Friedhof, AX_Strasse <strong>und</strong> AX_Strassenachse dargestellt.<br />

<br />

AA_REO<br />

<br />

AA_Objekt<br />

+identifikator<br />

+lebenszeitintervall<br />

+modellart<br />

+anlass<br />

+zeigtAufExternes<br />

<br />

AG_ObjektMitGemeinsamerGeometrie<br />

<br />

TA_SurfaceComponent<br />

<br />

AX_TatsaechlicheNutzung<br />

<br />

AX_Friedhof<br />

+name<br />

<br />

TA_CurveComponent<br />

<br />

AX_Strassenachse<br />

+breiteDerFahrbahn<br />

+funktion<br />

+[...]<br />

<br />

AA_ZUSO<br />

<br />

AX_Strasse<br />

+name<br />

+widmung<br />

+[...]<br />

Abbildung 3.5: Darstellung der Klassenhierarchie im AAA-Anwendungsschema anhand<br />

der Fachobjekte AX Friedhof, AX Strasse <strong>und</strong> AX Strassenachse.<br />

27


Diese Vorgaben durch das Basisschema finden sich auch bei den Beziehungstypen, die<br />

die Objekte untereinander eingehen können. Die Zusammenhangsrelation bestehtAus<br />

<strong>und</strong> istTeilVon ermöglicht Objekte der Basisklasse ZUSO, die durch das Zusammenfügen<br />

mehrerer Objekte entstehen. Die Unterführungsrelation hatDirektUnten kennzeichnet<br />

die relative vertikale Lage zweier Objekte zueinander. Diese Beziehung ist auch<br />

transitiv möglich, das heißt ein Objekt kann beliebige unter sich befindliche Objekte<br />

referenzieren. Für Objekte mit generalisierter Geometrie ist die Relation zu den zugehörigen<br />

Basisobjekten wichtig. Dies stellt der Beziehungstyp Kartengeometrie mit<br />

istAbgeleitetAus <strong>und</strong> traegtBeiZu dar. Ähnliches leistet die Präsentationsbeziehung<br />

mit dientZurDarstellungVon, die einem Objekt der Bestandsdaten ein Präsentationsobjekt<br />

zuordnet. Auch ein Verweis auf ein fremdes Fachinformationssystem ist möglich,<br />

dies leistet zeigtAufExternes.<br />

Einige Beziehungen zwischen Fachobjekten des AAA-Anwendungsschemas sind von der<br />

AdV für ” beide Richtungen“ modelliert, das heißt, es gibt zu jeder Beziehung eine inverse<br />

Beziehung, die von dem referenzierten Fachobjekt wieder auf das ursprüngliche Fachobjekt<br />

verweist. Diese Modellierung der Beziehungen ist in den UML-Modellen <strong>und</strong> auch in<br />

den XML Schema-Dateien vorgesehen, um auch Gegenrelationen in Abfragen mit Hilfe<br />

der OGC Filter (siehe Abschnitt 2.4) zu ermöglichen. Es handelt sich somit um eine<br />

AdV-spezifische Festlegung, die im Gegensatz zum Typ (gml:ReferenceType), der im<br />

Namespace der GML-Spezifikation enthalten ist, nur im Namespace der AdV zu finden<br />

ist (adv:InverseReferenceType). Beispielhaft wird in Abbildung 3.6 die Zusammenhangsrelation<br />

mit den beiden Beziehungstypen bestehtAus <strong>und</strong> istTeilVon dargestellt:<br />

bestehtAus bestehtAus<br />

REO1 ZUSO REO2<br />

istTeilVon istTeilVon<br />

Abbildung 3.6: Beziehungen zwischen einem ZUSO <strong>und</strong> zwei REOs, die Bestandteil des<br />

ZUSOs sind.<br />

Bei der Beschreibung des Raumbezugs <strong>und</strong> der Geometrie hält sich das AAA-Basisschema<br />

stark an die ISO-Norm 19107 ” Spatial schema“ [ISO03]. Diese führt den Begriff des<br />

geographischen Features ein <strong>und</strong> legt ein Referenzmodell zum Umgang mit räumlichen<br />

Eigenschaften fest. Es werden drei Arten von Raumbezugsgr<strong>und</strong>formen im AAA-Modell<br />

verwendet:<br />

• Objekte mit einfacher Topologie, die einen topologischen Raumbezug haben, der<br />

durch geometrische Eigenschaften ausgedrückt wird. Die Oberklassen dieser Objekte<br />

haben das Präfix TA_ <strong>und</strong> befinden sich in dem Paket AAA_Spatial Schema.<br />

Mit Hilfe dieser Klassen wird beispielsweise bei ATKIS die komplette Überdeckung<br />

der Erdoberfläche erreicht. Durch Linien- (z.B. Straßen) <strong>und</strong> Flächenobjekte (z.B.<br />

28


Siedlungsfläche) wird die Erdoberfläche scheinbar topologisch in Maschen aufgeteilt;<br />

das zu Gr<strong>und</strong>e liegende Datenmodell setzt sich jedoch aus Objekten mit<br />

einfachen Geometrien zusammen.<br />

• Objekte mit unabhängiger Geometrie mit Geometrien aus unabhängigen Punkten,<br />

Linien oder Flächen. Diese Klassen befinden sich im Paket AAA_Unabhaengige<br />

Geometrie <strong>und</strong> erben von der Oberklasse AU_ObjektMitUnabhaengigerGeometrie<br />

aus dem Paket AAA_Spatial Schema.<br />

• Objekte mit gemeinsam genutzter Geometrie, die ebenfalls Punkt-, Linien- oder<br />

Flächengeometrien nutzen, hier aber als Besonderheit Punkt- <strong>und</strong> Liniengeometrien<br />

gemeinsam von mehreren Fachobjekten genutzt werden können. Diese Geometrien<br />

werden dabei nur einmal definiert <strong>und</strong> können von mehreren Fachobjekten<br />

referenziert werden. Analog zu den Objekten mit unabhängiger Geometrie gibt es<br />

auch für diese Klassen ein eigenes Paket im AAA-Basisschema (AAA_Gemeinsame-<br />

Geometrie) <strong>und</strong> eine Oberklasse AG_ObjektMitGemeinsamerGeometrie im Paket<br />

AAA_Spatial Schema.<br />

Für Geometrien kann ein Koordinatenreferenzsystem (CRS) festgelegt werden. Somit<br />

wird auch die Anzahl <strong>und</strong> Art der Koordinatenwerte bestimmt. Eine detaillierte Übersicht<br />

der verfügbaren Systeme findet sich in [AdV06], Kapitel 11.<br />

Präsentationsobjekte sind Texte <strong>und</strong> Signaturen, die zur Darstellung eines Fachobjekts<br />

benötigt werden <strong>und</strong> über eine Relation fest an dieses geb<strong>und</strong>en sind. Die Festlegungen<br />

zum Umgang mit Präsentationsobjekten sind im AAA-Basisschema bewusst allgemein<br />

gehalten <strong>und</strong> sehen eine spätere Konkretisierung in einem Fachschema vor. Dennoch<br />

stellt das AAA-Basisschema bereits konkrete Klassen für Präsentationsobjekte im Paket<br />

AAA_Praesentationsobjekte bereit. Dies sind beispielsweise AP_FPO, flächenförmiges<br />

Präsentationsobjekt; AP_LPO, linienförmiges Präsentationsobjekt usw., die allesamt als<br />

REOs modelliert sind. So ist für ein neues Fachschema bereits eine Gr<strong>und</strong>menge von<br />

Präsentationsobjekten direkt verfügbar. Wenn möglich sollten Präsentationsobjekte automatisch<br />

beim Erzeugen einer Ausgabe nach festen Ableitungsregeln erstellt werden.<br />

Daneben gibt es die Möglichkeit, beim Erfassen automatisch erstellte Präsentationsobjekte<br />

im Bestand zu speichern, um die Geschwindigkeit beim Erzeugen der Ausgabe zu<br />

steigern. Als dritte Möglichkeit bietet die komplett manuelle Erzeugung der Präsentationsobjekte<br />

den größten Gestaltungsspielraum im Hinblick auf beispielsweise Größe <strong>und</strong><br />

Position der Objekte.<br />

Das AAA-Fachschema setzt sich aus den einzelnen Fachschemata zu AFIS, ALKIS <strong>und</strong><br />

ATKIS zusammen. Diese konkretisieren die Festlegungen des AAA-Basisschema für das<br />

jeweilige Fachinformationssystem. In den Objektartenkatalogen werden die fachlichen<br />

Inhalte (Fachobjekte) festgelegt, die von den Basisklassen des Basisschemas erben. Im<br />

Rahmen dieser Arbeit soll besonders das ATKIS-Fachschema vorgestellt werden.<br />

29


3.2 Amtliches Topographisch-Kartographisches<br />

Informationssystem (ATKIS)<br />

Das Amtliche Topographisch-Kartographische Informationssystem (ATKIS) wurde mit<br />

dem Ziel geschaffen, die Oberfläche der Erde in digitalen Modellen zu beschreiben <strong>und</strong><br />

zu speichern. Die reale Welt wird hierfür nach topographischen Gesichtspunkten erfasst<br />

<strong>und</strong> u.a. in den so genannten Digitalen Landschaftsmodellen (DLM) in Form von Objekten<br />

mit punkt-, linien- <strong>und</strong> flächenförmigen Geometrien gespeichert. Bereits seit 1989<br />

wird ATKIS von den Vermessungsverwaltungen in Deutschland eingesetzt <strong>und</strong> ist somit<br />

der älteste Teil des AAA-Modells.<br />

Der ATKIS-Teil des AAA-Modells umfasst vier Komponenten:<br />

1. Digitale Landschaftsmodelle (DLM) stellen die Erdoberfläche nach topographischen<br />

Gesichtspunkten objektstrukturiert dar.<br />

2. Digitale Geländemodelle (DGM) zur Darstellung der Geländehöhe <strong>und</strong> -form <strong>und</strong><br />

somit Strukturinformationen zur Erdoberfläche.<br />

3. Digitale Topographische Karten (DTK), die durch Ableitung aus den DLM <strong>und</strong><br />

DGM entstehen.<br />

4. Digitale Orthophotos (DOP) als Gr<strong>und</strong>lage der Datenerfassung für die DLM.<br />

Die dazugehörigen ATKIS-Katalogwerke gliedern sich in<br />

• die ATKIS-Objektartenkataloge,<br />

– ATKIS-Objektartenkatalog für das Digitale Basis Landschaftsmodell<br />

(ATKIS-OK Basis-DLM)<br />

– ATKIS-Objektartenkatalog für das Digitale Landschaftsmodell 50<br />

(ATKIS-OK50)<br />

– ATKIS-Objektartenkatalog für das Digitale Landschaftsmodell 250<br />

(ATKIS-OK250)<br />

– ATKIS-Objektartenkatalog für das Digitale Landschaftsmodell 1000<br />

(ATKIS-OK1000)<br />

• die ATKIS-Objektartenkataloge für das Digitale Geländemodell,<br />

– ATKIS-Objektartenkatalog für das Digitale Geländemodell 2<br />

(ATKIS-OK DGM2)<br />

– ATKIS-Objektartenkatalog für das Digitale Geländemodell 5<br />

(ATKIS-OK DGM5)<br />

– ATKIS-Objektartenkatalog für das Digitale Geländemodell 25<br />

(ATKIS-OK DGM25)<br />

30


– ATKIS-Objektartenkatalog für das Digitale Geländemodell 50<br />

(ATKIS-OK DGM50)<br />

• die ATKIS-Signaturenkataloge.<br />

Diese Kataloge sind alle im Rahmen der GeoInfoDok [AdV06] frei verfügbar. Die ATKIS-<br />

Signaturenkataloge befinden sich jedoch zur Zeit (Stand: September 2007) noch in der<br />

Entwicklung <strong>und</strong> stehen nur in einer Vorabversion für die kommende GeoInfoDok 6.0<br />

zum Download bereit. Sie sind ausdrücklich nicht Bestandteil der GeoInfoDok 5.1<br />

Für diese Arbeit werden nur die Digitalen Landschaftsmodelle (DLM) betrachtet. Sie<br />

liegen in ATKIS in mehreren Maßstäben vor. Dabei hat das DLM50 einen Maßstab von<br />

1:50.000 das DLM250 1:250.000 usw. Das BASIS-DLM liegt im Maßstab 1:25.000 vor<br />

<strong>und</strong> besitzt somit die höchste Auflösung <strong>und</strong> den größten Detailreichtum. Die Digitalen<br />

Landschaftsmodelle mit kleineren Maßstäben als das Basis-DLM (DLM50, DLM250,<br />

DLM1000) können durch Generalisierung aus diesem gewonnen werden. Sie bieten aufgr<strong>und</strong><br />

der niedrigeren Auflösung einen geringeren Detail- <strong>und</strong> einen höheren Generalisierungsgrad<br />

als das BASIS-DLM.<br />

Abbildung 3.7: Kartenausschnitt eines ATKIS-NAS-Testdatensatzes im BASIS-DLM.<br />

Visualisiert mit GML Viewer von Snowflake Software [Sno06]<br />

31


Im ATKIS Basis-DLM wird die Landschaft zunächst in topologische Strukturen eingeteilt,<br />

die objektbasiert dargestellt werden. Durch Straßen, Gewässer <strong>und</strong> ähnliche im<br />

topologischen Modell linienförmige Erscheinungen wird ein Netz von Maschen auf der<br />

Erdoberfläche gebildet. Deren Kanten <strong>und</strong> Innenflächen werden als (flächenförmige) Objekte<br />

aus dem Objektbereich (s.u.) Tatsächliche Nutzung mit den Objektartengruppen<br />

(Siedlung, Verkehr, Vegetation, Gewässer) dargestellt. Somit ist für eine lückenlose<br />

<strong>und</strong> überschneidungsfreie Überdeckung der Oberfläche gesorgt. Der Objektbereich<br />

Tatsächliche Nutzung wird als Folge der Harmonisierung zwischen beiden Systemen<br />

analog in ALKIS verwendet. Als Beispiel für die in ATKIS dargestellten Daten ist in<br />

Abbildung 3.7 ein Ausschnitt einer ATKIS-Karte im BASIS-DLM visualisiert. Die dort<br />

mit der Software GML Viewer von Snowflake Software ([Sno06]) dargestellten Daten<br />

entstammen direkt einer der NAS-Dateien des Testdatensatzes.<br />

Objekte, die direkt überhalb der Erdoberfläche liegen (wie z.B. Brücken) werden ohne<br />

spezielle Relation zur Erdoberfläche direkt darauf platziert. Überlagern sich diese<br />

Objekte wiederum, so werden sie durch die Unterführungsrelation (hatDirektUnten)<br />

vom oberen Objekt aus mit den darunter liegenden in Beziehung gebracht. Folgendes<br />

Beispiel zeigt eine Straße, die auf einer Brücke platziert ist: 42003 AX Strassenachse<br />

hatDirektUnten 53001 AX BauwerkImVerkehrsbereich mit der Attributart BWF <strong>und</strong><br />

dem Wert 1800 ( ” Brücke“).<br />

Die zur Verfügung stehenden Objektarten werden im Objektartenkatalog (OK) mit sämtlichen<br />

Attributen <strong>und</strong> Relationen genau definiert. Alle Fachobjekte des ATKIS-OK erben<br />

von den im AAA-Basisschema festgelegten abstrakten Oberklassen (siehe Beispiel in Abbildung<br />

3.5). Eine Übersicht über den Aufbau des ATKIS-OK des BASIS-DLM findet<br />

sich in Anhang A.<br />

Die Fachobjekte sind im Objektartenkatalog in Objektbereiche (z.B. Objektbereich AAA-<br />

Basisschema oder Objektbereich Tatsächliche Nutzung) eingeteilt, diese wiederum in<br />

Objektartengruppen (z.B. Siedlung oder Verkehr). Nachfolgend soll beispielhaft der Objektartenkatalogeintrag<br />

des Fachobjekts AX_Friedhof (Tabelle 3.1) aus der Objektartengruppe<br />

Siedlung erläutert werden: Neben der Objektart in textueller Form (AX_Friedhof)<br />

besitzt jede Objektart eine eindeutige fünfstellige Kennung (41009). Die darunter folgende<br />

Definition legt genau fest, welche Realweltobjekte diese Objektart zugeordnet bekommen<br />

können. ” Abgeleitet aus“ benennt die Oberklasse, der Objekttyp entspricht einem<br />

der im AAA-Basisschema definierten Basisobjektklassen. Die Modellart ist Basis-DLM,<br />

da dieses Beispiel dem ATKIS-Objektartenkatalog für das Digitale Basis Landschaftsmodell<br />

entnommen ist. Regeln zur Erfassung eines Realweltobjekts können ebenfalls im<br />

OK festgelegt werden.<br />

Das einzige Attribut des Fachobjekts AX_Friedhof ist vom Attributtyp Name, der die<br />

eindeutige Kennung NAM besitzt. Es ist vom Datentyp String <strong>und</strong> kann null- oder einmal<br />

vorkommen. Neben einer Definition des Attributs findet sich auch hier wieder eine<br />

Angabe, für welches Modell das Attribut spezifiziert ist.<br />

32


Objektart: AX Friedhof<br />

Kennung: 41009<br />

Definition: [E] ’Friedhof’ ist eine Fläche, auf der Tote bestattet sind.<br />

Abgeleitet aus: AX TatsaechlicheNutzung<br />

Objekttyp: REO<br />

Modellart: Basis-DLM<br />

Gr<strong>und</strong>datenbestand: Basis-DLM<br />

Erfassungskriterien: Fläche >= 0,5 ha<br />

Attributart: Bezeichnung: Name<br />

Kennung: NAM<br />

Datentyp: CharacterString<br />

Kardinalität: 0..1<br />

Modellart: Basis-DLM<br />

Gr<strong>und</strong>datenb.: Basis-DLM<br />

Definition: ’Name’ ist der Eigenname von ’Friedhof’.<br />

Tabelle 3.1: Objektartenkatalogeintrag AX Friedhof aus dem ATKIS-OK Basis-DLM<br />

3.3 Amtliches Liegenschaftskatasterinformationssystem<br />

(ALKIS)<br />

Ein (Liegenschafts)Kataster verzeichnet Flurstücke <strong>und</strong> Gebäude mit Informationen zu<br />

Nutzungsart, Größe, Lage (Adresse) <strong>und</strong> Eigentümer. Zudem wird eine kartographische<br />

Darstellung dieser Informationen geführt. Das Amtliche Liegenschaftskatasterinformationssystem<br />

(ALKIS) ist aus den <strong>Informationssysteme</strong>n Automatisierte Liegenschaftskarte<br />

(ALK) <strong>und</strong> Automatisiertes Liegenschaftsbuch (ALB) hervorgegangen, in denen die Daten<br />

zum Liegenschaftskataster bereits digital geführt wurden. Das Liegenschaftsbuch<br />

enthält alle textlichen Daten, während die Liegenschaftskarte den Raumbezug in graphischer<br />

Form herstellt.<br />

Für die Modellierung des Liegenschaftskatasters im ALKIS-Teil des AAA-Modells werden<br />

diese beiden Systeme zusammengelegt <strong>und</strong> an die übrigen AAA-Komponenten angeglichen,<br />

um dem Ziel eines einheitlichen Datenmodells gerecht zu werden. Insbesondere<br />

wurde eine Harmonisierung mit ATKIS angestrebt, was hauptsächlich den Objektartenkatalog<br />

betrifft. Hier gibt es bei vielen Objekten Gemeinsamkeiten in Semantik <strong>und</strong><br />

Geometrie, so dass beispielsweise die Semantik der Objektarten der Gr<strong>und</strong>flächen (Objektartenbereich<br />

” Tatsächliche Nutzung“) nur einmal in einem gemeinsamen Katalog<br />

beschrieben werden kann.<br />

3.4 Amtliches Festpunktinformationssystem (AFIS)<br />

Die zeitlich als letzte entwickelte Komponente des AAA-Modells ist das Amtliche Festpunktinformationssystem<br />

(AFIS). Die Einführung eines weiteren Fachinformationssy-<br />

33


stems war notwendig, da die noch zu modellierenden Festpunkte weder in ALKIS, noch<br />

in ATKIS integriert werden konnten.<br />

Ein geodätischer Festpunkt ist ein eindeutig in der Natur gekennzeichneter (Vermarkung)<br />

Vermessungspunkt, dessen Koordinaten aus einer Vermessung eindeutig bestimmt sind.<br />

Man unterscheidet zwischen Lagefestpunkten, Höhenfestpunkten <strong>und</strong> Festpunkten, die<br />

beide Koordinatenangaben enthalten.<br />

Die zentrale Speicherung aller Festpunkte erfolgt in einer Festpunktdatei, die im AAA-<br />

Modell durch AFIS modelliert wird. Da die Festpunktdatei bisher in der Automatisierte<br />

Liegenschaftskarte (ALK) geführt wurde, ist AFIS stark an ALKIS angelehnt. Der<br />

Gr<strong>und</strong>datenbestand (die zwingend zu implementierenden Elemente) ist jedoch sehr klein<br />

gehalten, damit die Umsetzung dieses Modells möglichst einfach bleibt.<br />

3.5 Normbasierte Austauschschnittstelle (NAS)<br />

Die Normbasierte Austauschschnittstelle (NAS) stellt im AAA-Modell das externe Modell<br />

dar. Es wird festgelegt, in welcher Form Daten für den Import in bzw. den Export aus<br />

einem nach dem AAA-Modell aufgebauten System strukturiert sein müssen. Die NAS<br />

legt diese Struktur eindeutig fest, indem sie internationale Standards um AdV-spezifische<br />

Erweiterungen ergänzt: in GML beschriebene Daten werden mit Hilfe der Methoden der<br />

WFS-Spezifikation <strong>und</strong> der FES als Anfragesprache um Steuerinformationen ergänzt.<br />

Bei der Entwicklung der NAS hat sich die AdV streng an die ISO-Norm 19118 ” Encoding“<br />

[ISO06] gehalten. Diese gibt genaue Regeln für die Kodierung von Geodaten<br />

aus einem gegebenen Anwendungsschema vor, unter anderem für einen XML-basierten<br />

Datenaustausch. So wird auch bei der NAS die Schnittstelle als in XML Schema verfasstes<br />

GML 3.0-Anwendungsschema automatisch aus dem in UML verfassten AAA-<br />

Anwendungsschema (Basis- <strong>und</strong> Fachschema) erstellt. Dies geschieht unter Verwendung<br />

der Software Rational Rose 4 . Die für die automatische Erzeugung verwendeten Steuerparameter<br />

(Encoding Rules) wurden von der AdV manuell angepasst <strong>und</strong> sind unter<br />

[AdV07] einsehbar.<br />

Abbildung 3.8: Kodierung des UML-Anwendungsschemas nach XML Schema.<br />

4 http://www-306.ibm.com/software/awdtools/developer/rose/index.html<br />

34


Es ergeben sich folgende XML-Schema-Dateien, die unter [AdV07] frei verfügbar sind:<br />

• AAA-Basisschema.xsd <strong>und</strong> AAA-Fachschema.xsd, die das GML-Anwendungsschema<br />

des AAA-Modells enthalten.<br />

• ISO19100.xsd mit den direkt aus der ISO-Familie 191XX übernommenen Klassen,<br />

z.B. die Möglichkeit zur Angabe von Koordinatenreferenzsystemen (CRS).<br />

• WFS-Erweiterungen.xsd, die AdV-spezifische Erweiterungen des WFS enthält<br />

(z.B. die Verwendung von replace statt update).<br />

• NAS-Operationen.xsd, die die in der NAS möglichen Operationen festlegt. Dazu<br />

zählen z.B. der Einrichtungsauftrag oder der Fortführungsauftrag (s.u.).<br />

• AAA-Katalog.xsd <strong>und</strong> ISO-Katalog.xsd, die es ermöglichen, Objektartenkataloge<br />

in XML zu beschreiben.<br />

Beziehungen zwischen Objekten werden in der NAS mit XLink [W3C01] realisiert. Mit<br />

dieser W3C-Spezifikation ist es möglich, Hyperlinks in XML-Elemente einzubinden. Das<br />

Ziel eines XLinks kann innerhalb des XML-Dokuments liegen oder auf ein externes<br />

Dokument verweisen. Von der AdV wird die Verwendung von XLink jedoch auf einfache<br />

Verweise (xlink:type="simple", d.h. nur unidirektional) eingeschränkt. Es ist in der<br />

NAS vorgesehen, ein Objekt durch die Angabe eines Uniform Resource Name (URN) zu<br />

referenzieren. Folgendes Beispiel 5 illustriert, wie ein Flurstück einer Buchungsstelle über<br />

deren Identifikator zugeordnet werden kann:<br />

<br />

[...]<br />

<br />

[...]<br />

<br />

Die Betrachtung der in der NAS möglichen Operationen sollen für diese Arbeit auf<br />

Einrichtungs- <strong>und</strong> Fortführungsaufträge eingeschränkt werden. Daneben sind beispielsweise<br />

auch Bestandsdatenauszüge <strong>und</strong> das Sperren <strong>und</strong> Entsperren von Objekten möglich.<br />

Die NAS-Operationen bestehen analog zur WFS-Spezifikation gr<strong>und</strong>sätzlich aus<br />

einem Request (z.B. Fortführungsauftrag) <strong>und</strong> einer Response (z.B. Fortführungsprotokoll).<br />

Das nachfolgende Beispiel 6 stellt einen kompletten Fortführungsauftrag dar, also eine<br />

Aktualisierung eines vorhandenen Datenbestands. Neben einer Benennung aller benötigten<br />

XML-Namensräume im Wurzelelement (Zeile 2-6) des Dokuments finden sich danach<br />

5 aus [AdV06], Seite 89f.<br />

6 Basierend auf einem der GeoInfoDok [AdV06] entnommenem Beispiel; eigenständig ergänzt <strong>und</strong><br />

vervollständigt.<br />

35


weitere organisatorische Angaben. Diese enthalten unter anderem eine Empfängerangabe<br />

(Zeile 10-15), die Auftragsnummer (Zeile 17) <strong>und</strong> eine Angabe des verwendeten Koordinatenreferenzsystems<br />

(CRS, Zeile 18-24). In einer WFS-Transaction werden dann die<br />

eigentlichen Änderungen am Datenbestand vorgenommen: zwei Feature-Instanzen werden<br />

eingefügt (Zeile 27-34), ein Feature wird in einem Attribut aktualisiert (Zeile 36-42)<br />

<strong>und</strong> zwei Feature-Instanzen werden gelöscht (Zeile 44-49).<br />

01 <br />

02 <br />

07<br />

08 MS<br />

09 Test<br />

10 <br />

11 <br />

12 mailto:info@auftragsempfaenger.de<br />

13 true<br />

14 <br />

15 <br />

16 application/xml<br />

17 Test_001<br />

18 <br />

19 <br />

20 urn:adv:crs:DE_DHDN_3GK3<br />

21 3<br />

22 true<br />

23 <br />

24 <br />

25<br />

26 <br />

27 <br />

28 <br />

29 [...]<br />

30 <br />

31 <br />

32 [...]<br />

33 <br />

34 <br />

35<br />

36 <br />

37 amtlicheFlaeche<br />

36


38 287<br />

39 <br />

40 <br />

41 <br />

42 <br />

43<br />

44 <br />

45 <br />

46 <br />

47 <br />

48 <br />

49 <br />

50 <br />

51 <br />

Bei den neu hinzuzufügenden Objekten handelt es sich um ein Flurstück (Zeile 28-30)<br />

<strong>und</strong> ein Gebäude (Zeile 31-33), jeweils mit ihrem eindeutigen Identifikator. Weitere Attribute<br />

sind zur Vereinfachung weggelassen worden.<br />

Die von der Aktualisierung in diesem Beispiel betroffene Feature-Instanz wird durch<br />

den OGC-Filter (siehe Abschnitt 2.4) unter Angabe von Identifikator <strong>und</strong> Version<br />

DEBY0000F000000220010101T000000Z<br />

(Konkatenation von Identifikator <strong>und</strong> Beginn des Lebenszeitintervalls des Objekts) eindeutig<br />

bestimmt (Zeile 39-41). Bei dieser Instanz erhält das Attribut amtlicheFlaeche<br />

den neuen Wert 287 (Zeile 38).<br />

Die beiden zu löschenden Objekte werden ebenfalls durch einen OGC-Filter <strong>und</strong> der<br />

Kombination aus Identifikator <strong>und</strong> Versionsdatum eindeutig identifiziert (Zeile 45-48).<br />

Neben den hier vorgestellten expliziten Funktionen müssen Systeme, welche die NAS<br />

implementieren, auch einige implizite Funktionen bieten, die den Datenbestand auf Konsistenz<br />

prüfen. Man unterscheidet zwischen zwei Arten von Systemen:<br />

1. Systeme für den Primärnachweis, den amtlichen, zentral geführten Geodatenbestand.<br />

Zu den impliziten Aufgaben dieser Systeme gehört beispielsweise, das Entstehungsdatum<br />

eines Objekts oder einer Version aus der Systemzeit beim Einfügen<br />

abzuleiten, eindeutige Identifikatoren zu vergeben, wenn diese noch nicht existieren<br />

oder Referenzen auf ein nach dem Löschen nicht mehr vorhandenes Objekt zu<br />

entfernen, damit diese nicht ins Leere zeigen.<br />

2. Systeme für den Sek<strong>und</strong>ärnachweis, der eine Kopie des Primärnachweises für ein<br />

bestimmtes Fachinformationssystem darstellt <strong>und</strong> auf ein bestimmtes Interessengebiet<br />

eingegrenzt werden kann (z.B. nur Daten, die den Niedersächsischen Raum<br />

37


etreffen). Diese Systeme müssen bei einem Replace nicht vorhandene Elemente<br />

durch ein Insert implizit einfügen.<br />

Ein Beispiel hierzu ist, dass ein Flurstück, das im Interessenbereich (Niedersachsen)<br />

liegt, einen neuen Besitzer erhält. Diese Person ist im gesamtdeutschen Datenbestand<br />

bereits vorhanden; da sie aber nur Flurstücken in Bayern zugeordnet war, ist<br />

sie dem auf Niedersachsen eingegrenzten System unbekannt <strong>und</strong> muss hinzugefügt<br />

werden.<br />

38


Kapitel 4<br />

ATKIS Datenmodell<br />

4.1 Konzeptioneller Entwurf<br />

In diesem Abschnitt wird ein konzeptioneller Entwurf für ein Datenmodell für ATKIS-<br />

Daten vorgestellt. Zu diesem Thema wurde an der Leibniz Universität Hannover bereits<br />

im Jahr 2003 eine Studienarbeit angefertigt [Opi03]. Diese orientiert sich jedoch an der<br />

” GeoInfoDok“ in der Version 1.0 <strong>und</strong> einem ATKIS-Schema, welches nach dem ” alten“<br />

ATKIS-Modell (vor den Anpassungen im Rahmen des AAA-Modells) aufgebaut war.<br />

Da auch Daten aus dem vorhandenen ATKIS-Schema migriert werden sollten, flossen<br />

teilweise Konzepte aus diesem Schema in das neu erstellte ein. In dieser Arbeit wird<br />

ein komplett neues Schema entwickelt, welches sich streng an den Konzepten des AAA-<br />

Modells orientiert.<br />

Das hier vorgestellte <strong>und</strong> in Abbildung 4.1 dargestellte Schema greift die objektorientierte<br />

Herangehensweise des AAA-Modells auf. Zudem wurde die Trennung des AAA-<br />

Anwendungsschemas in AAA-Basisschema <strong>und</strong> AAA-Fachschema beibehalten, indem<br />

die Fachspezifischen Besonderheiten wie z.B. Objektarten <strong>und</strong> Attribute nach Vorbild<br />

eines Objektartenkatalogs von den im gesamten AAA-Anwendungsschema gültigen Konzepten<br />

getrennt wurden. Somit könnte dieses Schema mit minimalen Änderungen (z.B.<br />

Kardinalitäten der Präsentationsobjekte) auch Gr<strong>und</strong>lage für ein ALKIS-Fachdatenschema<br />

oder ähnliche Fachinformationssysteme sein.<br />

Ausgangspunkt des Schemas ist - wie auch im AAA-Anwendungsschema - die allgemeine<br />

Basisklasse Objekt. Sie legt die folgenden für alle Objekte gültigen Attribute<br />

fest <strong>und</strong> ist die Oberklasse der drei weiter spezialisierten Klassen Zusammengesetztes<br />

Objekt (ZUSO), Raumbezogenes Elementarobjekt (REO) <strong>und</strong> Nicht-raumbezogenes<br />

Elementarobjekt (NREO) (siehe Abbildung 3.3):<br />

• Der Identifikator, der ein Fachobjekt eindeutig bestimmt.<br />

• Das Lebenszeitintervall zur Versionierung, das hier in Anfang <strong>und</strong> Ende aufgeteilt<br />

wurde.<br />

39


• Der Anlass für das Einfügen, Ändern oder Löschen dieser Objektversion.<br />

• Die Modellart, die das Modell (z.B. BASIS-DLM, DLM50) angibt, dem das Fachobjekt<br />

zugeordnet ist.<br />

ObjektartNr Bezeichnung Kennung Bezeichnung<br />

Objektart<br />

(0,n)<br />

istVonTyp<br />

(1,1)<br />

Präsentationsobjekt<br />

(0,n)<br />

Geometrie<br />

(0,n)<br />

kannHaben<br />

Attributwert<br />

Modellart<br />

Identifikator<br />

(0,n)<br />

dZDV*<br />

(0,n)<br />

Datentyp<br />

(0,n)<br />

Objekt<br />

REO ZUSO NREO<br />

hatDirektUnten<br />

(0,n)<br />

Attribut<br />

(0,n)<br />

besitzt<br />

(0,n)<br />

(0,n) (0,n)<br />

möglicheWerteIn<br />

(1,n)<br />

istVersionVon<br />

(0,n)<br />

bestehtAus<br />

(1,n)<br />

(1,1)<br />

Name<br />

Nummer<br />

Codeliste<br />

Bezeichnung<br />

LebenszeitintervallEnde<br />

Objektversion<br />

Anlass<br />

LebenszeitintervallAnfang<br />

*dientZurDarstellungVon<br />

Abbildung 4.1: Entity-Relationship-Diagramm für das ATKIS-Datenmodell<br />

Um die im AAA-Modell vorgesehene Versionierung umzusetzen, wurde die Klasse Objekt<br />

in die beiden Entities Objekt <strong>und</strong> Objektversion aufgeteilt. Es gibt spezielle Attribute<br />

(objektbildende Eigenschaften), wie z.B. die Objektart, die für alle Objektversionen<br />

gleich bleiben müssen. Werden diese Eigenschaften verändert, so wird ein neues Objekt<br />

in den Datenbestand eingefügt <strong>und</strong> das alte Objekt muss gelöscht werden. Hierzu zählen<br />

40


auch die Geometrie oder die Beziehungen, die ein Objekt mit anderen Objekten eingehen<br />

kann. Daher beziehen sich all diese Eigenschaften auf ein Objekt, nicht auf dessen<br />

Versionen.<br />

Außer den genannten ” speziellen“ Attributen kann jede Objektversion durch weitere<br />

Attribute (nicht-objektbildende Eigenschaften) näher beschrieben werden. Die zu einem<br />

bestimmten Fachobjekt gehörenden Attribute werden durch das Fachschema im<br />

Objektartenkatalog definiert. Sie sind von einem festgelegten Attributtyp, der durch<br />

seine eindeutige Kennung bestimmt wird. Die Bezeichnung beschreibt den Attributtyp.<br />

Außerdem ist für jeden Attributtyp ein Datentyp festgelegt. Dieser bestimmt auch die<br />

Form der zugelassenen Werte (Integer-Zahlen, Strings usw.). Bei der Zuweisung eines<br />

Attributtyps zu einer Objektversion muss immer ein Attributwert angegeben werden.<br />

Beispielsweise kann einem Fachobjekt ein Name (Kennung: NAM, Bezeichnung: name) mit<br />

dem Attributwert Rathausplatz vom Datentyp String zugewiesen werden.<br />

Um Attributen, deren Attributwert einen Eintrag in einer Codeliste (siehe Abschnitt 3.1)<br />

referenziert, die dahinter stehende Bedeutung zuzuordnen, werden auch die Codelisten in<br />

das Datenmodell mit aufgenommen. Ein Beispiel für eine Codeliste ist AX_Vegetationsmerkmal_Wald,<br />

die unter anderem die folgenden beiden Nummer-Bezeichnung-Paare enthält:<br />

1100-Laubholz, 1200-Nadelholz. Jede Codeliste hat einen Namen (der dem Namen<br />

des Attributtyps entspricht) <strong>und</strong> besteht aus mehreren Zuordnungen aus Nummern <strong>und</strong><br />

Bezeichnungen.<br />

Ein besonderes Attribut ist die Objektart. Um das Konzept des Objektartenkatalogs<br />

weiterzuführen <strong>und</strong> die Klassenhierarchie des AAA-Modells nachzubilden, wird sie als<br />

eigenes Entity modelliert. Analog zu den Attributen gibt es auch hier eine eindeutige<br />

Kennung (ObjektartNr) <strong>und</strong> eine Beschreibung (Bezeichnung) der Objektart.<br />

Eine Beziehung zwischen Objektart <strong>und</strong> Attribut legt fest, welche Attribute einer bestimmten<br />

Objektart zugeordnet werden dürfen. Dies ist ebenfalls im Objektartenkatalog<br />

festgelegt.<br />

Ein NREO hat im Vergleich zur Oberklasse Objekt keine weiteren Attribute.<br />

Ein ZUSO kann durch die Zusammensetzungsrelation mit weiteren Objekten die Beziehung<br />

bestehtAus eingehen. Dies können beliebig viele Objekte sein, es muss sich aber<br />

mindestens ein Elementarobjekt (REO, NREO) darunter befinden. Eine Selbstreferenz ist<br />

nicht zulässig (auch nicht indirekt).<br />

Ein REO besitzt eine fest zugeordnete Geometrie, die den Raumbezug herstellt. Des Weiteren<br />

kann die vertikale Lage je zweier REOs durch die Unterführungsrelation hatDirektUnten<br />

dargestellt werden.<br />

Präsentationsobjekte (siehe Abschnitt 3.1) sind spezielle REOs. Sie erben sämtliche<br />

41


Attribute der Oberklasse REO <strong>und</strong> werden beliebigen Objekten durch die Präsentationsrelation<br />

dientZurDarstellungVon zugewiesen.<br />

4.2 Relationales Datenbankschema<br />

Aus dem im vorigen Abschnitt vorgestellten konzeptionellen Entwurf wird im Folgenden<br />

ein relationales Datenbankschema erstellt. Eine besondere Herausforderung bei der<br />

Entwicklung war die Umsetzung der objektorientierten Modellierung des AAA-Modells<br />

in ein rein relationales Schema. Hierfür wurde nach den gängigen Methoden zur Transformation<br />

eines ER-Schemas in ein relationales Datenbankschema 1 vorgegangen (z.B.<br />

[Lip06]):<br />

Das Entity Objekt wird mit dem Attribut Identifikator die Tabelle Objekt übernommen.<br />

Das Attribut Modellart fehlt an dieser Stelle in der Tabelle Objekt, da es<br />

bei der Implementierung anderweitig umgesetzt wird (siehe 4.3). Die Zuordnung eines<br />

Objekts zu einer Objektart wird direkt mit in die Tabelle Objekt aufgenommen, da es<br />

sich um eine rein funktionale Beziehung handelt.<br />

Objekt(Identifikator, Objektart → Objektartenkatalog)<br />

Die im AAA-Modell vorgesehene Versionierung (siehe Abschnitt 3.1) wird in der Tabelle<br />

Objekt noch nicht berücksichtigt. Wie im konzeptionellen Entwurf vorgegeben, gibt<br />

es im relationalen Datenbankschema daher eine Trennung von Objekt <strong>und</strong> Objektversion.<br />

Eine eindeutige Identifizierung einer Objektversion ausschließlich über den Identifikator<br />

ist aufgr<strong>und</strong> mehrerer Versionen mit demselben Identifikator nicht mehr möglich.<br />

Es müssen also Identifikator <strong>und</strong> der Beginn des Lebenszeitintervalls zur eindeutigen<br />

Bestimmung herangezogen werden.<br />

Um nicht immer zwei Werte angeben oder bei jeder Anfrage mit Konkatenation von<br />

Strings arbeiten zu müssen, wird eine (nur interne!) ObjektID vergeben, die dann immer<br />

direkt eine Version eines Objektes bezeichnet. Diese wird - in Anlehnung an die<br />

OGC-Filter-Anfragen im AAA-Modell - einmalig beim Einfügen eines neuen Objekts<br />

durch Konkatenation von Identifikator <strong>und</strong> LebenszeitintervallAnfang gebildet.<br />

Die ObjektID ist somit ein Surrogatschlüssel 2 , d.h. ein künstlich erzeugter Schlüssel für<br />

diese Tabelle.<br />

Neben dem Beginn <strong>und</strong> Ende des Lebenszeitintervalls wird zu einer Objektversion auch<br />

stets ein Anlass gespeichert. Hier wird in Form der Auftragskennung des NAS-Auftrags<br />

der Anlass für die Erschaffung dieser Objektversion erfasst. So kann stets nachvollzogen<br />

werden, durch welchen NAS-Auftrag eine Objektversion eingefügt oder verändert wurde.<br />

1Eine Abweichung vom rein relationalen Schema stellt die Geometrie dar, die als Objekt gespeichert<br />

wird.<br />

2http://de.wikipedia.org/wiki/Surrogatschl%C3%BCssel 42


Objektversion(ObjektID, Identifikator → Objekt, LebenszeitintervallAnfang,<br />

LebenszeitintervallEnde NULL , Anlass) 3<br />

Die Tabelle REO verknüpft Objekte mit ihrem Raumbezug, also mit einer Geometrie.<br />

Gemäß der Klassenhierarchie im AAA-Modell ist die Klasse REO eine Unterklasse von<br />

Objekt <strong>und</strong> erhält als Spezialisierung einen Raumbezug. Durch die Modellierung der<br />

REOs in einer eigenen Tabelle wird beispielsweise auch sichergestellt, dass die Unterführungsrelation<br />

nur von zwei REOs eingegangen werden kann.<br />

REO(ReoID → Objekt, Geometrie)<br />

Die Tabelle NREO erfüllt lediglich den Zweck, alle NREOs in einer zentralen Stelle zu sammeln.<br />

Dies könnte z.B. nützlich sein, wenn eine Anfrage an die Datenbank nur NREOs<br />

betreffen soll.<br />

NREO(NReoID → Objekt)<br />

Die Tabelle ZUSO modelliert die Zusammenhangsrelation bestehtAus. Analog zu REO<br />

<strong>und</strong> NREO wird sie jedoch ZUSO benannt, denn eben diese Beziehung ist charakteristisch<br />

für ZUSOs.<br />

ZUSO(ZusoID → Objekt, Teil → Objekt)<br />

Präsentationsobjekte erben von der Klasse REO die Geometrie. Des Weiteren sind in der<br />

Tabelle verschiedene Angaben zur Schriftformatierung <strong>und</strong> zur Darstellung gespeichert.<br />

Praesentationsobjekt(PraesentationsobjektID → Objekt, Schriftinhalt,<br />

Fontsperrung, Skalierung, HorizontaleAusrichtung, VertikaleAusrichtung,<br />

Geometrie)<br />

Die Tabelle hatDirektUnten stellt die Umsetzung der Unterführungsrelation zwischen<br />

je genau zwei REOs dar.<br />

hatDirektUnten(Oben → Objekt, Unten → Objekt)<br />

In der Tabelle dientZurDarstellungVon wird die Präsentationsrelation realisiert. Sie<br />

ordnet einem Präsentationsobjekt eindeutig das Fachobjekt zu, welches es (re)präsentiert.<br />

dientZurDarstellungVon(Objekt → Objekt, Praesentationsobjekt → Praesentationsobjekt)<br />

Kartengeometrieobjekte sind Objekte mit eventuell veränderter Lage <strong>und</strong> Geometrie,<br />

die durch Generalisierung aus einem Fachobjekt für einen anderen Maßstab gewonnen<br />

werden. Sie erhalten durch die Beziehung istAbgeleitetAus einen Verweis auf das<br />

zugehörige Fachobjekt.<br />

3 Ist ein Attribut durch NULL gekennzeichnet, so kann dieses Attribut auch den Nullwert annehmen,<br />

ist also optional anzugeben.<br />

43


istAbgeleitetAus(Kartengeometrieobjekt → Objekt, Basisobjekt → Objekt)<br />

Objektarten <strong>und</strong> Attributarten sind durch den Objektartenkatalog festgelegt. Alle dort<br />

entnommenen Werte sind in den Tabellen ObjektArtenKatalog bzw. AttributArten-<br />

Katalog gespeichert. Da Attributkennungen bzw. Objektartennummern in der NAS in<br />

anderer Form gespeichert werden als im Objektartenkatalog, wird zusätzlich eine Spalte<br />

aufgenommen, die diese Bezeichnung in der NAS enthält (NASBezeichnung). So ist eine<br />

Zuordnung in beide Richtungen möglich. Bei Attributen ist zusätzlich noch der Datentyp<br />

der Attributwerte gespeichert, damit die aus der NAS stets als Strings eingelesenen (<strong>und</strong><br />

auch als Strings in der Datenbank gespeicherten) Werte von einer Anwendung korrekt<br />

weiter verarbeitet werden können. Optional kann eine Beschreibung (beispielsweise eine<br />

Definition) der Objektart bzw. des Attributtyps angegeben werden.<br />

ObjektArtenKatalog(ObjektartNr, NASBezeichnung, Beschreibung NULL )<br />

AttributArtenKatalog(Kennung, NASBezeichnung, Beschreibung NULL ,<br />

Datentyp)<br />

Auch die aus dem Objektartenkatalog übernommenen Codelisten werden nach dem Vorbild<br />

eines Kataloges, ähnlich wie die Attribute, in einer Tabelle gespeichert. Der Name<br />

der Codeliste (z.B. AX_Vegetationsmerkmal_Wald) muss mit einer Spalte des zugehörigen<br />

Attributtyps aus dem Attributartenkatalog übereinstimmen, damit hierüber später<br />

eine Zuordnung möglich ist. Hierfür wird die NAS-Bezeichnung gewählt, da die Namen<br />

der Codelisten ebenfalls aus den NAS-Schemata ausgelesen werden. Beispiele für eine<br />

Zuordnung einer Nummer zu einer Bezeichnung ist aus der o.g. genannten Codeliste<br />

1100-Laubholz <strong>und</strong> 1200-Nadelholz.<br />

Codelisten(Name → AttributArtenKatalog, Nummer, Bezeichnung)<br />

Die folgende Tabelle bildet die Zuordnung von Attributen zu Objekten ab. An dieser<br />

Stelle wird auch der Attributwert zugewiesen.<br />

AttributZuweisung(ObjektID → Objektversion, Kennung → AttributArtenKatalog,<br />

AttributWert)<br />

Eine Übersicht über das relationale Datenbankschema findet sich in Anhang B.<br />

4.3 Implementierung in Oracle 10g<br />

Bei der Implementierung des zuvor entwickelten relationalen Datenbankschemas wurde<br />

zunächst betrachtet, welche Art von Daten in einem Schema gemeinsam gespeichert<br />

werden sollten. Hierbei ging es um eine Unterscheidung nach<br />

1. dem betrachteten Kartenausschnitt (z.B. Hannover, Hildesheim, Niedersachsen<br />

usw.) <strong>und</strong><br />

44


2. dem betrachteten Maßstab bzw. die Modellbezeichnung in ATKIS (z.B. BASIS-<br />

DLM oder DLM50).<br />

Um eine bessere Übersicht zu wahren, gibt es für jede Kombination von Kartenausschnitt<br />

<strong>und</strong> Modellart eine eigene Schemainstanz. Die Tabellen dieser Schemata erhalten eine<br />

Benennung in der Form Kartenausschnitt_Tabellenname_Modellart. Beispiele hierfür<br />

sind Hannover_REO_DLM50 oder Hildesheim_ZUSO_DLM250.<br />

Der Objektartenkatalog, der Attributartenkatalog <strong>und</strong> die AAA-Codelisten sind unabhängig<br />

vom betrachteten Kartenausschnitt. Nach dem ATKIS-Teil des AAA-Modells<br />

gibt es je einen Objektartenkatalog pro Modellart. Zur Vereinfachung des hier beschriebenen<br />

Datenbankschemas wird jedoch nur ein Objektartenkatalog für alle Modellarten<br />

verwendet. Der Objektartenkatalog wird im Rahmen des Importer-Programms nur dazu<br />

verwendet, die in der NAS verwendeten Bezeichnungen der Objektart einer Objektartennummer<br />

des ATKIS-OK zuzuordnen. Diese ist in allen Modellarten einheitlich. Spezielle<br />

Angaben, z.B. zur Datenerfassung, die im AAA-Modell das Vorhandensein verschiedener<br />

Objektartenkataloge rechtfertigen, können im Rahmen dieser Arbeit vernachlässigt<br />

werden. Es wird davon ausgegangen, dass die zum Import gelieferten Daten stets korrekt<br />

<strong>und</strong> konsistent vorliegen.<br />

Um eine Schemainstanz jederzeit einfach erzeugen zu können, wurden die SQL-Anweisungen<br />

zum Anlegen der Tabellen in PL/SQL-Prozeduren auf dem Datenbankserver<br />

gespeichert. Die folgenden Prozeduren finden sich im Package INIT:<br />

• setup() erstellt die gemeinsam genutzten Objekt- <strong>und</strong> Attributartenkataloge <strong>und</strong><br />

das Verzeichnis der Codelisten für eine Modellart.<br />

• erstelleSchema(gebiet, modell) erstellt das spezifische Schema für einen Kartenausschnitt<br />

(gebiet) <strong>und</strong> eine Modellart (modell).<br />

• loescheSchema(gebiet, modell) löscht ein bereits bestehendes Schema, welches<br />

den beiden o.g. Parametern entspricht.<br />

• erstelleSchemaNeu(gebiet, modell) führt das Löschen <strong>und</strong> (Neu-) Anlegen eines<br />

Schemas hintereinander aus. Diese Prozedur kann somit auch zum Entleeren<br />

eines vorhandenen Schemas genutzt werden, da dieses erst gelöscht <strong>und</strong> dann ohne<br />

Inhalte neu angelegt wird.<br />

• entleereSchema(gebiet, modell) wird für die Integration in die <strong>MRDB</strong> benötigt,<br />

da diese Prozedur in jeder Komponentendatenbank vorhanden sein muss. Die<br />

Prozedur ruft erstelleSchemaNeu(gebiet, modell) auf (s.o.).<br />

• kopiereSchema(gebiet_alt, modell_alt, gebiet_neu, modell_neu) kopiert<br />

die Daten aus dem ersten angegebenen Schema in das als zweites angegebene<br />

Schema. Dies wird bei Bedarf erstellt.<br />

45


• erstelleViews(gebiet, modell) legt die zur <strong>MRDB</strong>-Integration benötigten Sichten<br />

an. Diese Prozedur wird in Abschnitt 4.4 beschrieben.<br />

Als Beispiel wird im Folgenden der PL/SQL-Code zum Erstellen der Tabelle Objekt<br />

aus der Prozedur erstelleSchema dargestellt. Der komplette Quellcode ist mit dieser<br />

Arbeit erhältlich. Die Variablen praefix <strong>und</strong> suffix enthalten die Bezeichnungen von<br />

Gebiet <strong>und</strong> Modellart, um einen Tabellennamen nach dem oben entwickeltem Schema<br />

zu erreichen.<br />

EXECUTE IMMEDIATE ’CREATE TABLE ’ || praefix || ’Objekt’ || suffix || ’(<br />

ObjektID VARCHAR2(32),<br />

ObjektartNr NUMBER(5),<br />

Identifikator VARCHAR2(16),<br />

Lebenszeitintervallanfang DATE,<br />

Lebenszeitinervallende DATE,<br />

Anlass VARCHAR2(100),<br />

PRIMARY KEY (ObjektID),<br />

UNIQUE (Identifikator, Lebenszeitintervallanfang),<br />

FOREIGN KEY (Identifikator) REFERENCES<br />

’ || praefix || ’Ids’ || suffix || ’(Identifikator),<br />

FOREIGN KEY (ObjektartNr) REFERENCES<br />

ObjektArtenKatalog(ObjektartNr))’;<br />

Des Weiteren finden sich im Package UTIL zwei Hilfsfunktionen, die von den Prozeduren<br />

des Package INIT verwendet werden können:<br />

• dropTableIfExists, die eine Tabelle löscht, falls sie existiert <strong>und</strong> im anderen Fall<br />

die Fehlermeldung des DBMS abfängt. Dies erleichtert zum Beispiel das Löschen<br />

eines unvollständigen Schemas - eine Situation, die hauptsächlich während der<br />

Entwicklung des Schemas zu berücksichtigen ist.<br />

• tableExists liefert true zurück, wenn eine Tabelle existiert, false, wenn sie auf<br />

dem Server nicht vorhanden ist. Dies wird benötigt, um beim Anlegen einer neuen<br />

Schemainstanz zu prüfen, ob die gemeinsam genutzten Kataloge bereits vorhanden<br />

sind, oder ob sie durch Aufruf der Prozedur setup(modell) zuvor eingerichtet<br />

werden müssen.<br />

Das dritte Package mit PL/SQL-Prozeduren für das AAA-konforme Datenbankschema<br />

<strong>und</strong> den NAS-Importer ist das Package OK. In diesem Package sind Funktionen zur<br />

manuellen Erzeugung des Objektartenkatalogs (inklusive Attributartenkatalog <strong>und</strong> Codelisten)<br />

enthalten. Dies ist notwendig, da durch das B<strong>und</strong>esamt für Kartographie <strong>und</strong><br />

Geodäsie (BKG) kein vollständig elektronisch lesbarer Objektartenkatalog (OK) zur Verfügung<br />

gestellt werden konnte. U.a. stand zur Bearbeitungszeit dieser Arbeit die genaue<br />

Zusammensetzung des OK noch nicht fest.<br />

46


Für den Betrieb des Importers ist ein OK zwingend erforderlich, da z.B. für eine in<br />

der NAS verwendete Objektbezeichnung die ObjektartNr aus dem OK gelesen werden<br />

muss. Auch im Datenbankschema vorgesehene Fremdschlüssel, beispielsweise von der<br />

Tabelle Attributzuweisung zu der Tabelle des Attributartenkatalogs, können ohne vorhandenen<br />

OK nie erfüllt werden.<br />

Die manuelle Erzeugung des OK erfolgt durch die folgenden drei PL/SQL-Prozeduren<br />

des Package OK. Die Prozeduren arbeiten nacheinander zahlreiche SQL-INSERTs in die<br />

jeweilige Tabelle ab. Zu jeder Prozedur ist ein Beispiel hierfür angegeben:<br />

• fillOK() fügt in die Tabelle Objektartenkatalog zu einem Objekt die NASBezeichnung<br />

<strong>und</strong> die dazugehörige ObjektartenNr ein. Die zu einer Objektart zugehörige<br />

Beschreibung bzw. Definition (zu dem unten angegebenen Beispiel wäre<br />

dies ” ’Bauwerk im Verkehrsbereich’ ist ein Bauwerk, das dem Verkehr dient.“) ist<br />

in der Datenbank vorgesehen, jedoch als optionale Angabe. Um den Aufwand der<br />

manuellen Erstellung des OK zu minimieren, wurde die Beschreibung nicht mit<br />

aufgenommen.<br />

INSERT INTO Objektartenkatalog(Objektartnr, NASBezeichnung)<br />

VALUES(53001, ’AX_BauwerkImVerkehrsbereich’);<br />

• fillAK() füllt analog zu fillOK() den Attributartenkatalog. Dieser ist normalerweise<br />

implizit in den Objektartenkatalog integriert, indem zu jeder Objektart die<br />

möglichen Attribute festgelegt werden. Da bei den zu importierenden Daten diese<br />

Bedingungen jedoch als erfüllt vorausgesetzt werden, dient der Attributartenkatalog<br />

in diesem Kontext wie der Objektartenkatalog hauptsächlich der Zuordnung<br />

von der im OK verwendeten Kennung zur NASBezeichnung. Für den Attributartenkatalog<br />

ist als zusätzliche Angabe der Datentyp eines Attributs unbedingt<br />

notwendig. Auf die Beschreibung wurde jedoch auch hier verzichtet.<br />

INSERT INTO Attributartenkatalog(Kennung, NASBezeichnung, Datentyp)<br />

VALUES(’NAM’, ’name’, ’String’);<br />

• fillCodelisten() speichert die Einträge der Codelisten ab, die für Fachobjekte<br />

als Attributart angegeben werden können.<br />

INSERT INTO Codelisten(Name, Nummer, Bezeichnung)<br />

VALUES(’AX_VerkehrsbedeutungUeberoertlich’, 1001, ’Fernverkehr’);<br />

Die Namen der Tabellen des Datenbankschemas mussten bei der Implementierung teilweise<br />

im Vergleich zum Entwurf des relationalen Schemas gekürzt werden. Oracle beschränkt<br />

die Länge des Tabellennamens im Normalfall auf 30 Zeichen. Diese Grenze ist<br />

bei langen Tabellennamen wie ” dientZurDarstellungVon“ in Kombination mit Präfix <strong>und</strong><br />

Suffix schnell erreicht. Daher in diesem Beispiel die Abkürzung ” dZDV“.<br />

47


Bei der Implementierung der Tabelle AttributZuweisung stellte die Umsetzung des<br />

Attributwertes eine Herausforderung dar. Laut Objektartenkatalog sind die folgenden<br />

einfachen Datentypen für Attributwerte im AAA-Modell möglich 4 :<br />

• NUMBER<br />

• REAL<br />

• INTEGER<br />

• BOOLEAN<br />

• STRING<br />

Zudem besteht die Möglichkeit, auch Werte aus den im AAA-Modell definierten Codelisten<br />

(Zuordnungen von möglichen Bezeichnern zu Kennungen) als Attributwerte zu<br />

verwenden.<br />

Um das Datenbankschema in diesem Punkt möglichst einfach implementieren zu können,<br />

musste ein gemeinsamer Datentyp gef<strong>und</strong>en werden. All diese Datentypen lassen sich relativ<br />

einfach durch Strings ausdrücken. Zudem werden die Daten in einer NAS-Datei<br />

bereits als ” Text“ geliefert <strong>und</strong> durch den Parser als Strings eingelesen. Für die einfachen<br />

Datentypen stehen in vielen Programmiersprachen Funktionen zum Konvertieren in<br />

<strong>und</strong> aus Strings bereit, so dass sich die in der Datenbank als Strings gespeicherten Werte<br />

leicht in z.B. Integer-Zahlen umwandeln lassen. Des Weiteren ist durch die Aufnahme des<br />

Datentyps eines Attributtyps in dem Attributartenkatalog jederzeit eine Rekonstruktion<br />

des ursprünglichen Datentyps aus den gespeicherten Strings möglich.<br />

Codelisten können ebenfalls einfach durch Strings dargestellt werden, da als Attributwert<br />

nur jeweils eine Kennung eingesetzt werden kann. Die Zuordnung zur dahinter<br />

stehenden Bedeutung ist über die Tabelle Codelisten möglich. Bei dem schon zuvor<br />

verwendeten Beispiel der Codeliste AX_Vegetationsmerkmal_Wald, die unter anderem<br />

die beiden Nummer-Bezeichnung-Paare 1100-Laubholz <strong>und</strong> 1200-Nadelholz enthält,<br />

würde als Attributwert 1100 bzw. 1200 in die Tabelle AttributZuweisung eingetragen<br />

werden.<br />

Diesen Vorteilen gegenüber steht der große Nachteil, dass Operationen, die direkt in<br />

der Datenbank ausgeführt werden, nicht mehr unmittelbar möglich sind. SQL-Abfragen<br />

à la WHERE strassenBreite > 10 oder die effizientere Trennung von Indexen nach Zahlenwerten<br />

<strong>und</strong> Strings entfallen.<br />

Die Verwendung eines Index zur Optimierung der Zugriffsgeschwindigkeiten bietet sich<br />

für den Objektarten- <strong>und</strong> den Attributartenkatalog an. In der NAS wird die Objektart<br />

durch den Namen des Start-Elements eines neuen Fachobjekts festgelegt (beispielsweise<br />

4 Es werden nur Datentypen angegeben, die bisher im ATKIS-Objektartenkatalog verwendet werden.<br />

48


). Da jedoch in der Datenbank die Objektartennummer<br />

(in diesem Fall 53001) verwendet werden soll, muss bei jedem Einfügen eines<br />

neuen Objekts die passende Objektartennummer zu einer gelesenen NAS-Bezeichnung<br />

ermittelt werden (diese Funktionalität ist im NAS-Importer in JAVA implementiert). Da<br />

sich die Daten des Objektartenkatalogs selten ändern <strong>und</strong> nahezu ausschließlich lesende<br />

Zugriffe auf diese Tabelle stattfinden, kann ein Index auf die Spalte der NAS-Bezeichnung<br />

hier die Zugriffe optimieren. Analog dazu kann auch der Zugriff auf den Attributartenkatalog<br />

optimiert werden - auch hier werden in der NAS andere Kennungen verwendet<br />

als im Objektartenkatalog.<br />

4.4 Integration in die Multi-Repräsentations-Datenbank<br />

Eine Multi-Repräsentations-Datenbank (<strong>MRDB</strong>) ist nach dem Konzept eines föderierten<br />

Datenbanksystems [Con97] aufgebaut. Die Daten in einem solchen System sind in<br />

mehreren verteilten autonomen Datenbanksystemen gespeichert. Diese Komponentendatenbanken<br />

können beispielsweise auf verschiedene Standorte eines Unternehmens verteilt<br />

sein <strong>und</strong> werden für sich alleine zunächst von einem ” normalen“ Datenbankmanagementsystem<br />

verwaltet. Insbesondere bleiben die lokalen Schemata erhalten <strong>und</strong> können durch<br />

lokale Anwendungen (siehe Abbildung 4.2) ohne Beeinflussung genutzt werden. Die Integration<br />

in das föderierte Datenbanksystem erfolgt durch Sichtenbildung (Exportsicht).<br />

Um diese Daten in Beziehung zu bringen, <strong>und</strong> um einen einheitlichen globalen Zugriff<br />

auf die verteilten Datenbestände zu ermöglichen, wird an einer zentralen Stelle eine Integrationsdatenbank<br />

geführt. Hier finden sich Informationen darüber, wie die Daten der<br />

Komponentendatenbanken in Beziehung gebracht werden können. Es sind Verküpfungen<br />

zwischen den Datenbeständen hinterlegt.<br />

Ein gemeinsamer Zugriff auf das föderierte System findet ebenfalls an zentraler Stelle<br />

über den Föderierungsdienst statt. Dies ist der Einstiegspunkt für sämtliche globale<br />

Anwendungen.<br />

Bezogen auf die im Rahmen des Wissensbasierter Photogrammetrisch-Kartographischer<br />

Arbeitsplatz (WIPKA)-Projekts an der Leibniz Universität Hannover entwickelte <strong>und</strong><br />

verwendete <strong>MRDB</strong> (siehe [Man02]) stellen die Datenbestände in den verschiedenen Auflösungen<br />

oder zu unterschiedlichen Thematiken die Komponentendatenbanken dar. So<br />

kann es beispielsweise je ein DBMS für die Verwaltung räumlicher Daten des ATKIS-<br />

BASIS-DLM, ATKIS-DLM50 <strong>und</strong> einer Straßenkarte geben. Die Verknüpfung dieser<br />

Datenbestände erfolgt über die durch Matchingverfahren berechneten Links, die somit<br />

die Integrationsdatenbank darstellen. Der Aufbau der <strong>MRDB</strong> ist in Abbildung 4.2 dargestellt.<br />

49


Integrations-DB<br />

(Links)<br />

DBMS 1 DBMS 2<br />

BASIS DLM DLM50<br />

Komponenten-DBS 1<br />

<strong>MRDB</strong><br />

Föderierungsdienst<br />

Komponenten-DBS 2<br />

Globale Anwendung<br />

(z.B. GISVisual)<br />

Lokale Anwendung<br />

(z.B. NAS-Importer)<br />

Abbildung 4.2: Aufbau der <strong>MRDB</strong> nach [Con97] <strong>und</strong> [Man02].<br />

Das in den vorigen Abschnitten entwickelte Datenbankschema für ATKIS-Daten nach<br />

dem AAA-Modell soll nachfolgend in die <strong>MRDB</strong> integriert werden. Eine Komponentendatenbank<br />

muss nach folgendem Schema aufgebaut sein, damit die Integration in das<br />

GeoFoed-Datenbankschema der <strong>MRDB</strong> möglich ist:<br />

In der Sicht Objektview werden die Objekte mitsamt ihrer Geometrie (objektgeometrie)<br />

dargestellt. Neben der ObjektID wird die Zuweisung der Objektart zu einem<br />

Objekt gespeichert. Hier sollen nur Objekte angezeigt werden, die nicht als gelöscht<br />

markiert sind (das Lebenszeitintervallende darf also keinen von NULL verschiedenen<br />

Wert haben).<br />

Objektview(ObjektID, Objektgeometrie, Objektart)<br />

Die Speicherung der Attribute eines Objekts erfolgt in Form eines Kennung-Wert-Paares,<br />

das über die objektid einem Objekt zugewiesen wird.<br />

Attributview(ObjektID, Kennung, Wert)<br />

Der Name eines Objekts wird als spezielles Attribut in einer eigenen Tabelle gepeichert.<br />

Namenview(ObjektID, Name)<br />

Das in der <strong>MRDB</strong> verwendete Schema sieht bisher kein Versionierungssystem wie das<br />

des AAA-Modells vor. Daher wird bei der Integration des AAA-konformen Schemas in<br />

die <strong>MRDB</strong> stets nur die aktuellste Objektversion (mit dem zeitlich spätesten Lebenszeitintervallanfang)<br />

zur Verfügung gestellt.<br />

50


Das oben vorgestellte Datenbankschema einer Komponentendatenbank der <strong>MRDB</strong> wird<br />

durch Sichtenbildung (views) auf das zuvor entwickelte AAA-ATKIS-Datenbankschema<br />

gebildet:<br />

Erstellen des Objektview:<br />

CREATE VIEW Objektview AS<br />

SELECT Identifikator "ObjektID",<br />

Geometrie "Objektgeometrie", ObjektartNr "Objektart"<br />

FROM Gebiet_Objekt_Modellart JOIN Gebiet_REO_Modellart<br />

ON (REOID = Identifikator)<br />

WHERE NOT EXISTS<br />

(SELECT *<br />

FROM Gebiet_Objektversion_Modellart ov1<br />

WHERE ov1.Identifikator = out.Identifikator<br />

AND Lebenszeitintervallanfang =<br />

(SELECT max(Lebenszeitintervallanfang)<br />

FROM Gebiet_Objektversion_Modellart ov2<br />

WHERE ov2.Identifikator = out.Identifikator)<br />

AND<br />

ov1.Lebenszeitintervallende != NULL)<br />

Erstellen des Attributview:<br />

CREATE VIEW Attributview AS<br />

SELECT ObjektID "ObjektID", Kennung "Kennung", Attributwert "Wert"<br />

FROM Gebiet_Objektversion_Modellart out JOIN Gebiet_Attrzuweisung_Modellart<br />

ON (ObjektID = Objekt)<br />

WHERE LOWER(Kennung) != ’nam’<br />

AND Lebenszeitintervallanfang =<br />

(SELECT max(Lebenszeitintervallanfang)<br />

FROM Gebiet_Objektversion_Modellart ov<br />

WHERE ov.Identifikator = out.Identifikator)’;<br />

Erstellen des Namenview:<br />

CREATE VIEW Namenview AS<br />

SELECT ObjektID "ObjektID", Attributwert "Name"<br />

FROM Gebiet_Objektversion_Modellart out JOIN Gebiet_Attrzuweisung_Modellart<br />

ON (ObjektID = Objekt)<br />

WHERE LOWER(Kennung) = ’nam’<br />

AND Lebenszeitintervallanfang =<br />

(SELECT max(Lebenszeitintervallanfang)<br />

FROM Gebiet_Objektversion_Modellart ov<br />

WHERE ov.Identifikator = out.Identifikator)’;<br />

51


Die PL/SQL-Prozedur erstelleViews(gebiet, modell) zum Erstellen der Sichten findet<br />

sich im Paket INIT. Diese Prozedur wird auch während der Erstellung des AAA-<br />

ATKIS-Datenbankschemas aufgerufen. Somit sind die Sichten zur <strong>MRDB</strong>-Integration<br />

für ein neu angelegtes Schema sofort verfügbar.<br />

Durch die Registrierung der hier vorgestellten Tabellen bzw. Sichten in der <strong>MRDB</strong> ist<br />

es auch für die dort verwendeten Anwendungen möglich, auf den Datenbestand des<br />

AAA-ATKIS-Datenbankschemas zuzugreifen. Dies ist z.B. für das parallel zu dieser Arbeit<br />

entwickelte lokale Matching ([Nie07]) im Zusammenhang mit den zu verarbeitenden<br />

Fortführungsaufträgen (Updates) wichtig, wenn die in der NAS-Datei gelieferten Daten<br />

zur Verarbeitung des Fortführungsauftrags nicht ausreichend sind. Dies ist z.B. beim Löschen<br />

eines Objekts der Fall, da für das lokale Matching die Geometrie des zu löschenden<br />

Objekts benötigt wird. In einem NAS-Fortführungsauftrag findet sich in einer delete-<br />

Anweisung jedoch nur ein Verweis auf die zu löschende Objektversion durch deren ObjektID.<br />

Die zusätzlich benötigte Geometrie muss also zuvor aus der Sicht Objektview<br />

ausgelesen werden, damit das lokale Matching die Löschoperation korrekt verarbeiten<br />

kann.<br />

4.5 Realisierung von Fortführungsaufträgen<br />

Das in den vorigen Abschnitten entworfene Datenmodell <strong>und</strong> das im Rahmen dieser<br />

Arbeit implementierte Datenbankschema ist primär für einen kontinuierlich gepflegten<br />

Bestandsdatensatz entworfen worden. Ziel dieser Arbeit ist es jedoch auch, Aktualisierungen<br />

(Updates) für beliebige Datenbestände entgegen zu nehmen <strong>und</strong> innerhalb der<br />

<strong>MRDB</strong> dem lokalen Matching (siehe [Nie07]) zur Verfügung zu stellen. Hierfür muss das<br />

verwendete Datenbankschema erweitert werden.<br />

Wie bereits zuvor erwähnt, können in NAS-Dateien verschiedene Auftragsarten enthalten<br />

sein. Die beiden für diese Arbeit relevanten Auftragsarten sind der Einrichtungsauftrag<br />

<strong>und</strong> der Fortführungsauftrag. In ihrer Schemabeschreibung 5 ist jeweils ein Element<br />

<br />

spezifiziert, welches Änderungen des Datenbestands erlaubt. Bei der Definition des Einrichtungsauftrag<br />

wird dieses Element mit neueObjekte betitelt, bei einem Fortführungsauftrag<br />

hingegen mit geaenderteObjekte. Dies bedeutet, dass bei einem Einrichtungsauftrag<br />

nur neue Objekte eingefügt werden können (insert), bei einem Fortführungsauftrag<br />

ist hingegen zusätzlich das Löschen (delete) <strong>und</strong> Ändern (replace) von Objekten<br />

möglich.<br />

Vereinfacht könnte man einen Einrichtungsauftrag also als ” Fortführungsauftrag ohne<br />

delete <strong>und</strong> replace“ bezeichnen, weswegen im Folgenden nur Fortführungsaufträge behandelt<br />

werden.<br />

5 NAS-Operationen.xsd im Unterordner NAS5.1.1 der unter [AdV07] erhältlichen ZIP-Datei.<br />

52


Die folgenden Tabellen werden einmal je Schemainstanz angelegt <strong>und</strong> gepflegt:<br />

Die Tabelle insert dokumentiert alle durch den NAS-Auftrag neu in den Datenbestand<br />

eingefügten Fachobjekte. Die Fachobjekte werden durch den Importer mit sämtlichen<br />

Attributen in das ATKIS-Datenbankschema geschrieben. Daher ist es an dieser Stelle<br />

ausreichend, eine ObjektID anzugeben. Weitere Attribute, die für das lokale Matching<br />

von Interesse sind, können bei Bedarf aus den weiteren Tabellen ausgelesen werden.<br />

Zur Dokumentation des Kontextes, aus dem das Objekt in den Datenbestand eingefügt<br />

wurde, ist der Anlass anzugeben. Dieser wird als eindeutige Kennung für einen NAS-<br />

Auftrag vergeben. Außerdem kann optional das Datum der Operation - in diesem Fall<br />

die Systemzeit des importierenden Rechners - angegeben werden.<br />

insert(Anlass, ObjektID, Datum NULL )<br />

In der Tabelle delete werden alle Löschoperationen gespeichert. Hierfür ist es ebenfalls<br />

ausreichend, den Anlass, die ObjektID <strong>und</strong> das Datum der Operation zu kennen.<br />

delete(Anlass, ObjektID, Datum NULL )<br />

Bei einer replace-Operation können einzelne Attribute eines Fachobjekts verändert werden.<br />

Dies ist für Attribute mit nicht-objektbildender Eigenschaft möglich (vergleiche<br />

Abschnitt 3.1). Neben den drei zuvor benannten Daten muss hier zusätzlich das zu ändernde<br />

Attribut durch seine Kennung benannt werden <strong>und</strong> dazu der neue Attributwert<br />

angegeben werden.<br />

replace(Anlass, ObjektID, Attributkennung, Attributwert, Datum NULL )<br />

Da der NAS-Importer im Kontext der <strong>MRDB</strong> als lokale Anwendung läuft, werden<br />

die eingelesenen Fortführungsaufträge auch auf den lokalen Datenbestand angewendet.<br />

Wird beispielsweise im Rahmen eines Fortführungsauftrag ein Fachobjekt gelöscht<br />

(), so werden die folgenden beiden Schritte durchgeführt:<br />

1. Es wird ein neuer Eintrag in die Tabelle delete nach oben genanntem Muster<br />

geschrieben.<br />

2. Das Fachobjekt wird aus dem lokalen Datenbestand gelöscht, indem das Lebenszeitintervallende<br />

der letzten Objektversion gesetzt wird (ALTER TABLE ...).<br />

Die Historie des Fachobjekts bleibt durch diese Vorgehensweise erhalten <strong>und</strong> es ist für die<br />

globalen Anwendungen der <strong>MRDB</strong> auch weiterhin möglich, beispielsweise die Geometrie<br />

eines gelöschten Objekts auszulesen, wie es für das lokale Matching notwendig ist.<br />

53


Kapitel 5<br />

NAS-Import<br />

5.1 Konzeptioneller Entwurf des Importers<br />

In diesem Kapitel werden gr<strong>und</strong>legende Konzepte vorgestellt, die bei der Implementierung<br />

des NAS-Importers verwendet wurden. Die Beschreibung wird in diesem Kapitel<br />

bewusst allgemein gehalten <strong>und</strong> erst im folgenden Abschnitt anhand der Umsetzung in<br />

JAVA konkretisiert.<br />

Die Implementierung des Importers in Java folgt dem Entwurfsmuster (Design Pattern)<br />

Model View Controller (MVC). Hierbei wird ein Softwaresystem in die drei Komponenten<br />

Modell (model), Steuerung (controller) <strong>und</strong> Ansicht bzw. Präsentation (view)<br />

aufgeteilt (siehe Abbildung 5.1). Das Modell repräsentiert hierbei das Datenmodell <strong>und</strong><br />

die Steuerung nimmt Benutzereingaben entgegen <strong>und</strong> verarbeitet diese. Die Darstellung<br />

für den Nutzer erfolgt letztendlich durch die Benutzeroberfläche. Durch die strikte<br />

Trennung der Komponenten ist es möglich, z.B. Änderungen an der Benutzeroberfläche<br />

durchzuführen, ohne dass die übrigen Komponenten geändert werden müssen.<br />

model<br />

view<br />

controller<br />

Abbildung 5.1: Aufbau des MVC-Entwurfsmusters.<br />

54


Des Weiteren begünstigt das MVC-Entwurfsmuster auch die Nutzung unterschiedlicher<br />

Oberflächen des Programms. Der NAS-Importer soll mit den folgenden Präsentationsformen<br />

realisiert werden:<br />

1. Eine grafische Oberfläche, die mit JAVA Swing realisiert werden soll. Dies ist auf<br />

Systemen mit grafischer Benutzerschnittstelle sicher die erste, da komfortabelste<br />

Wahl.<br />

2. Eine reine Textversion, die über die Konsole <strong>und</strong> somit beispielsweise auch über<br />

eine Remoteverbindung per Secure Shell (SSH) benutzt werden kann, wenn keine<br />

grafische Benutzerschnittstelle zur Verfügung steht.<br />

Ein weiteres verwendetes Entwurfsmuster ist das Verhaltensmuster Beobachter (Observer).<br />

Es wird dazu eingesetzt, den Fortschritt des Importvorgangs zu überwachen <strong>und</strong><br />

darzustellen. Die Rolle des beobachteten Objekts (Observable) übernimmt hierbei eine<br />

Klasse aus dem Modell-Paket, die den aktuellen Zustand (verarbeitete Zeilen, Gesamtanzahl<br />

der Zeilen im NAS-Dokument) repräsentiert. Die Beobachter (Observer) sind die<br />

Klassen des Präsentationspaket des MVC-Patterns: auf der grafischen Oberfläche soll<br />

der Fortschritt durch einen Fortschrittsbalken (Progressbar) dargestellt werden, auf der<br />

Konsole soll eine Prozentzahl ausgegeben werden, die den aktuellen Fortschritt anzeigt.<br />

beobachtetes Objekt<br />

+meldeAn(Beobachter)<br />

+benachrichtige()<br />

Fortschrittsklasse<br />

+Fortschritt<br />

+gibFortschritt()<br />

Beobachter<br />

+aktualisiere()<br />

ProgrammOberfläche<br />

+aktualisiere()<br />

Abbildung 5.2: Verwendung des Observer-Patterns im Kontext des NAS-Importers.<br />

Die Controller-Klassen, also der allgemeine Importer-Controller, der Fortschrittsmanager<br />

(zur Verwaltung des Observer-Patterns) <strong>und</strong> der Datenbankmanager (in dieser<br />

Klasse wird die Kommunikation mit der Datenbank realisiert) werden jeweils nach dem<br />

Einzelstück-Entwurfsmuster (Singleton-Pattern) umgesetzt. Von diesen Klassen sollte es<br />

nur eine Instanz geben, da sie zentrale Klassen zur Steuerung sind <strong>und</strong> beispielsweise<br />

nur ein einziger lokaler Zwischenspeicher für Beziehungen (wird durch den Importer-<br />

Controller verwaltet) existieren sollte.<br />

55


Neben der Möglichkeit, zwischen mehreren Benutzeroberflächen zu wählen, soll der erstellte<br />

NAS-Importer auch in der Wahl des Parsers möglichst flexibel sein. Dies ist auch<br />

für einen Vergleich der Geschwindigkeit <strong>und</strong> Zuverlässigkeit der verschiedenen Ansätze<br />

(SAX vs. StAX) <strong>und</strong> ihren unterschiedlichen Implementierungen (beide Ansätze geben<br />

nur eine API vor <strong>und</strong> sind daher in vielen verschiedenen Implementierungen erhältlich)<br />

wichtig. Um dieses Ziel zu erreichen, wird eine Architektur nach dem Vorbild des<br />

Adapter-Entwurfsmusters eingesetzt. Dieses Entwurfsmuster wird eingesetzt, wenn zwei<br />

Klassen mit zueinander inkompatiblen Schnittstellen kommunizieren müssen. Es stellt<br />

die Kompatibilität zwischen den Klassen durch Übersetzen der Schnittstelle auf eine<br />

gemeinsam nutzbare Form her.<br />

SAX-Parser<br />

+...()<br />

+characters(c:char[])<br />

+...()<br />

Controller<br />

+starteParsing(Parsertyp)<br />

Common_Handler<br />

+...()<br />

+characters(c:String)<br />

+...()<br />

StAX-Parser<br />

+...()<br />

+characters(c:String)<br />

+...()<br />

Abbildung 5.3: Verwendung des Adapter-Patterns im Kontext des NAS-Importers.<br />

Abblidung 5.3 zeigt einen Ausschnitt des prinzipiellen Ablaufs eines Importvorgangs:<br />

der Controller ruft den vom Benutzer gewählten Parser auf <strong>und</strong> startet das Parsing. Da<br />

die beiden hier dargestellten Parser beide einem ereignisgesteuerten Prinzip folgen, sind<br />

die Implementierungen ähnlich, aber im Detail doch verschieden. So werden bei SAX<br />

durch das Ereignis characters erkannte Zeichen als char-Array gelesen, der StAX-<br />

Parser erhält diese Zeichen als String. In diesem Fall muss also im SAX-Parser eine<br />

Umwandlung des char-Arrays in einen String erfolgen, bevor die Daten an die Klasse<br />

Common_Handler weitergeleitet werden können. Diese Klasse realisiert dann - unabhängig<br />

vom gewählten Parser - die weitere Verarbeitung der Daten.<br />

Die Umwandlung geschieht hier direkt in der jeweiligen Parserklasse. Es gibt keine extra<br />

Adapterklasse, was eine Abweichung zum ” original“ Adapter-Entwurfsmuster darstellt.<br />

56


Weitere Informationen zu den hier verwendeten Entwurfsmustern finden sich in [GHJV95],<br />

dem Standardwerk zu diesem Thema.<br />

Der Ablauf des Parsingvorgangs kann anhand eines deterministischen endlichen Automaten<br />

(DEA) dargestellt werden. Der Common_Handler zur Behandlung der Parser-<br />

Ereignisse empfängt diese Ereignisse von der jeweiligen Parser-Implementierung <strong>und</strong> verarbeitet<br />

sie. Hierbei kann sich der Common_Handler in verschiedenen Zuständen befinden.<br />

Abbildung 5.4 zeigt eine Teilmenge möglicher Zustände <strong>und</strong> soll die Funktionsweise anhand<br />

eines Beispiels erläutern:<br />

<br />

Start<br />

<br />

isInsert<br />

<br />

<br />

isDelete<br />

<br />

<br />

<br />

isFeature<br />

[...]<br />

<br />

sonst<br />

<br />

isLZI<br />

isAnlass<br />

isAttribute<br />

<br />

[...]<br />

[...]<br />

isLZIA<br />

Wert<br />

isLZIE [...]<br />

Abbildung 5.4: DEA zur Darstellung der Funktionsweise des Importers.<br />

Dieser Ausschnit des DEA zeigt im Wesentlichen die Zustände, die beim Einfügen (insert)<br />

eines neuen Fachobjekts erreicht werden können. Der besseren Übersicht halber<br />

wurde nicht jeder erreichbare Zustand des Common_Handlers aufgenommen. Die Verwendung<br />

von [...] deutet an, dass hier die Verarbeitung der Daten innerhalb weiterer<br />

Zustände fortgeführt wird.<br />

Zu Beginn befindet sich der Common_Handler im Zustand Start, nachdem durch den<br />

Parser das Ereignis startDocument() gesendet wurde. In diesem Zustand sind in Abbildung<br />

5.4 nur zwei Möglichkeiten gegeben. Es werden also alle Ereignisse ignoriert ( ” überlesen“),<br />

bis entweder ein oder ein durch den Parser erkannt<br />

wurde. Der Parser wechselt bei gelesenem in den Zustand isInsert. Bei<br />

einem wohlgeformten <strong>und</strong> nach den NAS-Schemata validen XML-Dokument kann nun<br />

als nächstes gelesenes Element nur das Startelement eines neuen Fachobjekts gelesen<br />

57


werden. Der Common_Handler wechselt also bei jedem nun durch den Parser ausgelösten<br />

Ereignis in den Zustand isFeature, was u.a. mit der Erzeugung einer neuen Feature-<br />

Instanz verb<strong>und</strong>en ist.<br />

Dies stellt eine erhebliche Vereinfachung der AAA-Klassenhierarchie dar, indem letztendlich<br />

alle Fachobjektklassen wieder auf ihre Oberklasse Objekt zurückgeführt werden.<br />

Alternativ hätte hier jedes im Objektartenkatalog spezifizierte Fachobjekt explizit<br />

benannt werden müssen. Die Folge wäre ein Zustand für AX_Platz, ein weiterer für<br />

AX_Straße, für AX_Wald etc., was natürlich eine große Menge an Zuständen <strong>und</strong> somit<br />

einen unübersichtlichen Code mit sich gebracht hätte. Da alle diese Fachobjekte von der<br />

Klasse Objekt eine gleichartige Struktur erben, ist diese Vereinfachung möglich.<br />

In diesem Zustand isFeature - <strong>und</strong> nur in diesem Zustand - erwartet der Parser das Auftreten<br />

von Attributen, die dann eingelesen <strong>und</strong> der zuvor erstellten Feature-Instanz zugeordnet<br />

werden können. Die beiden speziellen Attribute <br />

<strong>und</strong> werden gesondert behandelt <strong>und</strong> ihr Auftreten lässt den Common_Handler<br />

erneut in je einen anderen Zustand wechseln, in dem diese Attribute weiter verarbeitet<br />

werden. Für die übrigen Attribute, die keine besondere Weiterverarbeitung benötigen,<br />

erfolgt eine ähnliche Vereinfachung wie die bereits oben erwähnte. Es wird auf die durch<br />

den OK festgelegte Unterscheidung zwischen verschiedenen Attributarten verzichtet <strong>und</strong><br />

es bleibt nur ein allgemeiner Typ Attribut.<br />

Meldet der Parser, dass zu der aktuell verarbeiteten Feature-Instanz ein passendes Endelement<br />

im XML-Dokument erkannt wurde, so wird diese Instanz durch die Methode<br />

Feature.write() in die Datenbank geschrieben. Der Common_Handler wechselt aus<br />

dem Zustand isFeature wieder nach isInsert <strong>und</strong> wartet dort entweder auf das Startelement<br />

der nächsten Feature-Instanz oder verlässt bei erkanntem auch<br />

den Zustand isInsert wieder. Der Startzustand ist auch gleichzeitig der einzige Endzustand<br />

des Automaten. Bricht das Parsing in einem anderen Zustand ab, gab es entweder<br />

einen unvorhergesehenen Fehler oder das zu importierende NAS-Dokument war nicht<br />

valide.<br />

Der Übersicht halber wurde bei den Zuständen ” nach“ isFeature auf eine weitere Darstellung<br />

der Rückwege verzichtet. Generell geht der Common_Handler in den vorigen<br />

Zustand zurück, wenn<br />

• entweder das zu einem Zustand gehörende Endelement gelesen wurde,<br />

• oder sobald der zwischen Start- <strong>und</strong> Endelement eines Zustands stehende Wert<br />

eingelesen wurde.<br />

Der Datenfluss innerhalb des NAS-Importers ist in Abbildung 5.5 dargestellt. Die jeweilige<br />

Parserklasse (SAX oder StAX) liest die NAS-Datei ein <strong>und</strong> gibt die ausgelösten<br />

Ereignisse mitsamt der gelesenen Werte an den Commom_Handler weiter. Dieser entscheidet,<br />

wie die ankommenden Daten weiterverarbeitet werden. Wird eine Beziehung gelesen,<br />

58


findet die weitere Verarbeitung in der Klasse Relations statt.<br />

Ein Fachobjekt wird intern in der Klasse Feature verwaltet. Geometrien werden zunächst<br />

durch den Common_Handler and eine Klasse GMLReader weitergereicht, die nach<br />

der Umwandlung der GML-Geometrie in ein internes Datenformat dieses an die zugehörige<br />

Feature-Instanz weiterleitet. Zentraler Verbindungspunkt zwischen dem internen<br />

Datenmodell <strong>und</strong> dem Datenbankserver ist die Klasse DB_Manager, welche die internen<br />

Strukturen in SQL-Statements überführt <strong>und</strong> die Kommunikation mit dem DB-Server<br />

steuert.<br />

NAS-<br />

Datei<br />

Relations<br />

Parser Common_Handler Feature DB_Manager<br />

GMLReader<br />

DB-Server<br />

Abbildung 5.5: Datenfluss im Ablauf des NAS-Importers von der NAS-Datei bis in die<br />

Datenbank.<br />

5.2 Implementierung des Importers in Java<br />

Bei der Entwicklung des NAS-Importers wurde die frei verfügbare Entwicklungsumgebung<br />

Eclipse 1 eingesetzt. Die grafische Oberfläche wurde mit dem komfortablen GUI-<br />

Designer Matisse der ebenfalls frei verfügbaren Entwicklungsumgebung NetBeans 2 erstellt.<br />

Im Quellcode wurden Funktionen verwendet, die seit JAVA 6 (teilweise auch als Version<br />

1.6 bezeichnet) zum Umfang der Sprache gehören. Dies sind beispielsweise die Funktionen<br />

zur Darstellung der grafischen Oberfläche. Auch die StAX-Implementierung ist erst<br />

sei JAVA 6 Bestandteil der JAVA API. Daher ist die JAVA-Version 6 Voraussetzung für<br />

den Betrieb der Software.<br />

Der NAS-Importer besteht aus vier Packages. Dies sind die drei Pakete model, view <strong>und</strong><br />

controller des MVC-Patterns sowie ein Paket util, das ein einfaches Logging-System<br />

1 http://www.eclipse.org/<br />

2 http://www.netbeans.org/<br />

59


enthält. Der Inhalt der Packages mit ihren wichtigsten Klassen <strong>und</strong> deren Funktionen<br />

wird nachfolgend dargestellt:<br />

Das Package view beinhaltet alle Komponenten zur Präsentation des Programms gegenüber<br />

dem Benutzer. Die Klasse Main_Importer ist der Haupteinstiegspunkt in das<br />

Programm. Je nach Aufrufparameter wird entweder die grafische Oberfläche (Abbildung<br />

5.9) oder die Konsolenversion (Abbildung 5.10) gestartet. Die grafische Oberfläche ist in<br />

der Klasse GUI_Importer realisiert. Die Klasse MessageBox stellt eine einfache grafische<br />

Textbox zur Ausgabe von Hilfetexten <strong>und</strong> Fehlermeldungen zur Verfügung. Die Konsolenversion<br />

ist in der Klasse Console_Importer umgesetzt.<br />

Beide Oberflächen implementieren die update()-Methode des Observer-Interface. Hier<br />

werden die Änderungen an den beobachteten Subjekten gemeldet. Ebenfalls in beiden<br />

Klassen enthalten ist eine Verbindung zum Importer_Controller (controller). Hierdurch<br />

wird die Kommunikation mit dem Controller <strong>und</strong> somit auch mit den Klassen des<br />

Package model ermöglicht. Unter anderem erfolgt hierüber die Anmeldung als Beobachter<br />

bei den beobachteten Klassen oder der Start des Importvorgangs mit Übergabe der<br />

eingegebenen Parameter.<br />

Abbildung 5.6: UML-Klassendiagramm des Package view.<br />

Die Klassen des Package view dienen somit ausschließlich der Präsentation bzw. Eingabe<br />

von Daten gegenüber dem Benutzer <strong>und</strong> enthalten nach dem MVC-Entwurfsmuster<br />

keine Steuerungs- oder Programmlogik.<br />

Das Package controller enthält drei Klassen, welche die Funktionen zur Steuerung<br />

des Importvorgangs implementieren. Der Importer_Controller ist die zentrale Klas-<br />

60


se zur Steuerung des gesamten Importvorgangs. Hier werden die vom Benutzer eingegebenen<br />

Daten verarbeitet <strong>und</strong> der Import vorbereitet (startImport()), indem z.B.<br />

checkFile() die ausgewählte NAS-Datei überprüft <strong>und</strong> getLineCount() die Gesamtzahl<br />

der Zeilen in dieser Datei ausliest (wird zur Überwachung des Fortschritts benötigt).<br />

Mit startParsing() wird dann - je nach Wahl des Benutzers - einer der zur Verfügung<br />

stehenden Parser gestartet.<br />

Auch während des laufenden Importvorgangs wird der Importer_Controller benötigt:<br />

getOK() stellt eine lokale Kopie des zuvor vom Datenbankserver eingelesenen Objektartenkatalogs<br />

zur Verfügung (siehe Klasse OK des Package model). Der Zwischenspeicher<br />

für Beziehungen ist für die Klassen des Importers über getRelations() erreichbar.<br />

Die Schnittstelle zum Datenbankserver ist in der Klasse DB_Manager zu finden. Neben allgemeinen<br />

Methoden zur Verbindungsverwaltung (connect(), logoff()) werden hier die<br />

Prepared Statements zur Datenmanipulation vorbereitet. Dies ist nötig, da die Tabellennamen<br />

vom gewählten Gebiet <strong>und</strong> von der Modellart abhängig sind <strong>und</strong> jedes Statement<br />

erst erstellt werden kann, nachdem diese Daten durch den Benutzer eingegeben <strong>und</strong> an<br />

den DB_Manager übermittelt (setSchema(gebiet, modellart)) wurden. Die Methoden<br />

write_Objekt, write_Geometry etc. setzen dann für jede Operation (Einfügen eines Objekts,<br />

Einfügen der Geometrie zu einem Objekt) die Parameter des passenden Prepared<br />

Statement <strong>und</strong> führen dies auf dem Datenbankserver aus. Zur Kommunikation mit der<br />

Datenbank wird der Oracle JDBC driver in der Version 10.2.0.1.0 (ojdbc14.jar) verwendet.<br />

Abbildung 5.7: UML-Klassendiagramm des Package controller.<br />

Der ImportProgressManager verwaltet die Fortschrittsklasse des Modells, indem er bei-<br />

61


spielsweise eine Liste der Beobachter führt <strong>und</strong> diese bei den beobachteten Klassen anmeldet.<br />

Auch der Zugriff auf die Fortschrittsinstanz ist über diesen Controller realisiert.<br />

Alle Klassen dieses Pakets folgen dem Singleton-Pattern (Einzelstück), da es je Controllerklasse<br />

nur eine Instanz geben sollte.<br />

Das Package model umfasst alle Klassen des Datenmodells <strong>und</strong> der Programmlogik zu<br />

diesem Modell. Die Fachobjekte werden in der Klasse Feature modelliert. Mit Hilfe dieser<br />

Datenstruktur werden die sequentiell gelesenen Teile eines Fachobjekts zusammengesetzt.<br />

Der Parser erstellt beim Lesen des Startelements eines neuen Fachobjekts eine neue<br />

Instanz dieser Klasse. Werden dann im weiteren Parsingverlauf Attribute, Beziehungen<br />

oder eine Geometrie gelesen, so werden diese dem Fachobjekt mit den entsprechenden<br />

set()-Methoden zugeordnet. Wird das Endelement eines Fachobjekts durch den Parser<br />

gelesen, so wird die Instanz des Fachobjekts mit der Methode write() gespeichert. Dies<br />

geschieht entweder direkt in die Datenbank (writeObjekt(), writeGeometry()) oder<br />

zunächst in den lokalen Zwischenspeicher (writeAttributes()).<br />

Abbildung 5.8: UML-Klassendiagramm des Package model.<br />

Mit der Klasse Relations wurde für den NAS-Importer eine Datenstruktur zum tempo-<br />

62


ären Speichern von Beziehungen entwickelt. Dies ist notwendig, da bei der seriellen Verarbeitung<br />

des XML- bzw. NAS-Dokuments ein in einer Beziehung referenziertes Fachobjekt<br />

erst nach dem Fachobjekt eingelesen werden kann, von dem die Beziehung ausgeht.<br />

Beispielsweise kann ein Fachobjekt durch die Beziehung hatDirektUnten auf die Fachobjekte<br />

verweisen, die räumlich unter dem Objekt liegen. Die Zuordnung erfolgt über<br />

die ObjektID (Konkatenation von Identifikator <strong>und</strong> Lebenszeitintervallanfang). Existiert<br />

das referenzierte Fachobjekt in der Datenbank noch nicht, da es in der Datei weiter ” hinten“<br />

steht (höhere Zeilennummer), läuft die Beziehung ” ins Leere“. Schreibt man eine<br />

solche Beziehung direkt in die Datenbank, so werden Fremdschlüsselbeziehungen verletzt.<br />

Die Klasse Relations speichert die Beziehungen zunächst in JAVA-Objekten ab<br />

<strong>und</strong> schreibt sie erst dann in die Datenbank, wenn der Parser signalisiert, dass alle Fachobjekte<br />

eingelesen wurden.<br />

Abbildung 5.9: Screenshot des NAS-Importers mit grafischer Benutzeroberfläche (GUI).<br />

Zu jeder Parser-Implementierung muss im Paket model eine passende Importerklasse existieren,<br />

die das Interface IImporter mit der einzigen Methode start() implementiert.<br />

63


Dies sind hier die Klassen SAX_Importer <strong>und</strong> StAX_Importer. Sie haben die Aufgabe,<br />

die spezifische Parser-Implementierung zu initialisieren, zu starten <strong>und</strong> dann die gelesenen<br />

Daten (inklusive eventuell nötiger Typ/Formatumwandlung) an die entsprechenden<br />

Methoden des Common_Handler ” durchzureichen“. Die Klasse SAX_Handler ist nötig, da<br />

die SAX-Implementierung die Behandlung der Parser-Ereignisse in einer extra Klasse<br />

erwartet.<br />

Zur Behandlung der Geometrien gibt es die Klasse GMLReader. Hier werden die durch<br />

den Common_Handler vom Parser ” durchgereichten“ Geometrien weiter verarbeitet. Die<br />

genaue Funktionsweise ist im folgenden Abschnitt 5.3 beschrieben.<br />

Der Common_Handler ist die gemeinsame, parserunabhängige Klasse zur Verarbeitung<br />

der auftretenden Ereignisse <strong>und</strong> der eingelesenen Daten. Er implementiert das einfache<br />

Interface IHandler, das genau diese Methoden vorgibt. Die Funktionsweise der Verarbeitungsklasse<br />

Common_Handler ist im vorigen Abschnitt 5.1 anhand eines deterministischen<br />

endlichen Automaten (DEA) beschrieben.<br />

Abbildung 5.10: Screenshot der Konsolenversion des NAS-Importers.<br />

Die Klasse OK stellt in einer lokalen Datenstruktur den Objektartenkatalog bereit, der<br />

auf dem Datenbankserver hinterlegt ist. Bei jedem Einfügen eines Fachobjekts bzw. eines<br />

Attributes zu einem Fachobjekt muss zu der aus der NAS-Datei gelesenen Bezeichnung<br />

die passende ObjektartNr bzw. Kennung aus dem Objektartenkatalog geholt werden.<br />

Um die Kommunikation mit den Datenbankserver zu minimieren, wird der Objektartenkatalog<br />

bei der Initialisierung einmalig durch diese Klasse eingelesen. Die Speicherung<br />

erfolgt jeweils in einer HashMap mit der NASBezeichnung als Schlüssel <strong>und</strong> ObjektartNr<br />

bzw. Kennung als Wert. Die Abfragen an den Objektartenkatalog finden im Programmablauf<br />

dann ausschließlich lokal statt.<br />

64


Die beiden Enumerationen (Aufzählungen) Parsertype <strong>und</strong> Modellart beinhalten die<br />

verfügbaren Parser bzw. die Modellarten. So wird zum Einem die fehlerhafte Zuweisung<br />

von Werten vermieden <strong>und</strong> bei JAVA auch eine höhere Typsicherheit erreicht, zum<br />

Anderen ist das Programmieren mit den zuvor vorgegebenen Werten einfacher <strong>und</strong> übersichtlicher.<br />

Abbildung 5.11: UML-Klassendiagramm des Package util.<br />

Die einzige Klasse im Package util ist die Implementierung eines einfachen Log-Systems.<br />

Es wird eine Textdatei im Programmverzeichnis angelegt, in welche die Einträge geschrieben<br />

werden. Die write()-Methode ist statisch <strong>und</strong> kann von allen weiteren Klassen des<br />

Importers genutzt werden. Diese Funktion wird zum Protokollieren von Informationen<br />

einerseits <strong>und</strong> Fehlermeldungen (z.B. von Exceptions) andererseits ausgiebig genutzt.<br />

Dies ermöglicht eine gute Überwachung des Importverlaufs <strong>und</strong> eine präzise Fehlerdiagnose.<br />

Eine detaillierte Beschreibung zu allen Klassen <strong>und</strong> Methoden des NAS-Importers findet<br />

sich in der beigefügten Java Dokumentation (JavaDoc) des Projekts. Diese befindet sich<br />

im Verzeichnis doc des Projektordners.<br />

5.3 Behandlung der GML-Geometrien<br />

Das in dieser Arbeit verwendete Datenbanksystem Oracle 10g enthält zwar Funktionen,<br />

um vorhandene Daten aus der Datenbank nach GML zu exportieren 3 , nicht aber<br />

für den umgekehrten Weg [KGB04]. Der Import der Geometrien, die in einer NAS-Datei<br />

innerhalb des Elements des jeweiligen Fachobjekts gespeichert sind,<br />

musste also über eigene Funktionen realisiert werden.<br />

Oracle selbst veröffentlicht ein Codebeispiel 4 , mit dem es möglich ist, GML-Daten einzulesen<br />

<strong>und</strong> in die Datenbank zu speichern. Dies geschieht mit Hilfe der Oracle Spatial Java<br />

Class Library, einer Sammlung von Klassen, die die Funktionen von Oracle Spatial in<br />

JAVA abbilden. Da diese Klassen jedoch nur GML in den Versionen 1 <strong>und</strong> 2 unterstützen,<br />

entfällt auch dieser Weg zum Importieren der in GML 3 verfassten Geometrien der NAS.<br />

Bei der Suche nach einer externen Lösung fiel die Wahl dann auf GeoTools [GT07a].<br />

3 Dies leistet die Funktion SDO_UTIL.TO_GMLGEOMETRY(sdo_geometry)<br />

4 http://www.oracle.com/technology/sample code/products/spatial/index.html (06.08.2007)<br />

65


GeoTools ist eine modular aufgebaute Sammlung von JAVA-Bibliotheken zum Bearbeiten,<br />

Darstellen <strong>und</strong> Konvertieren von GeoDaten. Das Projekt hat sich dabei zum Ziel<br />

gesetzt, stets die OGC-Spezifikationen komplett zu implementieren. GeoTools steht unter<br />

der GNU Lesser General Public License (LGPL) <strong>und</strong> ist somit samt Quelltexten frei<br />

erhältlich. Die Software wird von einer großen Entwicklergemeinde aktiv entwickelt, wodurch<br />

eine stetige Weiterentwicklung auch im Hinblick auf zukünftige OGC-Standards<br />

zu erwarten ist. Des weiteren ist GeoTools gut dokumentiert: die Dokumentation der<br />

einzelnen Module findet sich im GeoTools UserGuide unter [GT07b].<br />

Versuche, mit der zur Zeit (Stand: August 2007) als stabil veröffentlichten Version (2.3.3)<br />

zu arbeiten, scheiterten an den bereits oben genannten Kriterien: die GML 3-Unterstützung<br />

ist in dieser Version noch nicht integriert. Die aktuelle Testversion (2.4-RC0) der<br />

GeoTools 2.4-Serie unterstützt bereits fast vollständig GML 3 <strong>und</strong> wird daher für den<br />

Importer verwendet.<br />

Auch in dieser Version galt es zunächst, einige Hürden zu überwinden: die Umsetzung<br />

von Flächen in GML wurde in der NAS <strong>und</strong> somit in den Testdatensätzen sehr kompliziert<br />

gewählt. Die Darstellung der Geometrien wird in einer sehr allgemeinen Form<br />

angegeben:<br />

Flächen () werden aus verschiedenen ” Stücken“ () zusammengesetzt,<br />

die wiederum durch Polygone () realisiert sind. Diese<br />

Polygone werden durch einen äußeren <strong>und</strong> optional einem oder mehreren inneren Ringen<br />

() dargestellt, deren Liniensegmente jeweils aus Kurven () bestehen.<br />

Diese Darstellung erlaubt nicht nur linear interpolierte Polygone (), sondern kann auch Flächen darstellen, deren Begrenzungslinien aus Kreisbögen<br />

oder anderen in GML 3 zum GML Sprachumfang hinzugekommenen Geometrien<br />

zusammengesetzt sind.<br />

Ein sehr einfach gehaltenes Beispiel für diese allgemeine Art der Darstellung eines Polygons<br />

ist in Anhang C zu finden. Dort wird der Einheitswürfel des R 2 nach dem oben<br />

beschriebenen Muster in GML dargestellt.<br />

Die in GeoTools verwendete Programmbibliothek JTS Topology Suite (JTS) [Viv06],<br />

die JAVA-Klassen für ein räumliches Objektmodell zur Verfügung stellt, ist nicht in der<br />

Lage, diese Geometrien darzustellen. Zunächst konnten mit dem NAS-Importer deshalb<br />

nur Linien- <strong>und</strong> Punktgeometrien eingelesen werden. Eine mit dem Programm Open-<br />

JUMP 5 erstellte Visualisierung der so eingelesenen Geometrien findet sich in Abbildung<br />

5.12.<br />

Um in Zukunft auch komplexere Geometrien verarbeiten zu können arbeitet das GeoTools-<br />

5 http://www.openjump.org<br />

66


Team bereits an einem erweiterten Geometriemodell, der so genannten GeoAPI 6 . Als<br />

Erscheinungstermin für diese neue Geometriebibliothek wird jedoch nur ” the moment<br />

they are ready“ angegeben. Es musste also eine eigene Lösung zur Verarbeitung der<br />

Geometrien erstellt werden.<br />

Hierzu wurde der Ansatz verfolgt, die gegebenen Geometrien vor der Verarbeitung durch<br />

GeoTools zu vereinfachen. Da bei den ATKIS-Daten nur linear interpolierte Polygone zur<br />

Darstellung der Flächen verwendet werden, können die allgemein gehaltenen Flächengeometrien,<br />

wie sie oben beschrieben sind, auf Geometrien des Typs <br />

eingeschränkt werden.<br />

Abbildung 5.12: Kartenausschnitt des Testdatensatzes mit Punkt- <strong>und</strong> Liniengeometrien.<br />

Visualisiert mit OpenJUMP.<br />

Die entsprechend vereinfachte GML-Darstellung durch ein Polygon zu dem in Anhang<br />

C gezeigten Einheitswürfel des R 2 ist Folgende:<br />

<br />

6 http://docs.codehaus.org/display/GEOTDOC/02+GeoAPI<br />

67


<br />

0,0 0,1 1,1 1,0 0,0<br />

<br />

<br />

<br />

Der geschlossene Polygonzug wird durch eine Liste von Eckpunkten angegeben, wobei<br />

der letzte Punkt dieser Liste dem Anfangspunkt entsprechen muss. Ein interner Ring ist<br />

auch in dieser Darstellung (durch analog zu ) möglich.<br />

Zur Transformation der erstgenannten Darstellung in letztere steht in der Klasse<br />

GMLReader die Methode convertSurface(String gml) zur Verfügung, die als Parameter<br />

die aus der NAS-Datei eingelesene Flächengeometrie erhält.<br />

Hier kommt in Form der Bibliothek JDOM 7 ein Document Object Model (DOM)-basierter<br />

Ansatz (siehe Abschnitt 2.1.1) zur Verarbeitung des XML- ” Dokuments“ (dies ist in diesem<br />

Fall die als Parameter übergebene GML-Geometrie) zum Einsatz. Da die Struktur<br />

des XML-Dokuments genau bekannt ist, stellt der direkte Zugriff auf einzelne Elemente,<br />

der durch das DOM ermöglicht wird, die schnellste <strong>und</strong> einfachste Art der Implementierung<br />

dar.<br />

Vom Wurzelelement aus wird transitiv 8 der äußere <strong>und</strong> - sofern vorhanden<br />

- ein oder mehrere innere Ringe () ausgewählt, die in ihren Segmenten<br />

() je zwei Koordinatenpaare als Kindelemente haben (ebenfalls nicht<br />

direkt sondern transitiv). Diese Punkte werden nun in die Liste der Eckpunkte des neuen<br />

Polygons aufgenommen.<br />

Durch diese Vereinfachung können die Flächen anschließend von der JTS-Bibliothek<br />

<strong>und</strong> somit von GeoTools verarbeitet werden. Eine Visualisierung der nun komplett eingelesenen<br />

Geometrien findet sich in Abbildung 5.13.<br />

Die Umwandlung der gelesenen GML-Geometrien (hier gespeichert im String gml) in<br />

ein JTS-Geometrieobjekt erfolgt durch folgenden Code:<br />

org.geotools.xml.Configuration configuration = new GMLConfiguration();<br />

org.geotools.xml.Parser parser = new org.geotools.xml.Parser(<br />

configuration);<br />

InputStream xml = new ByteArrayInputStream(gml.getBytes());<br />

Geometry jtsgeom = (Geometry) parser.parse(xml);<br />

Es wird zunächst ein GeoTools-XML-Parser-Objekt erstellt, das als Parameter ein Konfigurationsobjekt<br />

bekommt. Dieses Objekt entstammt dem GML3-Paket von GeoTools<br />

7 http://www.jdom.org<br />

8 Transitiv bedeutet in diesem Fall, dass nicht direktes Kindelement von <br />

ist <strong>und</strong> in der XML-Baumstruktur noch einige Elemente dazwischen liegen.<br />

68


Abbildung 5.13: Kartenausschnitt des Testdatensatzes inklusive der flächenförmigen<br />

Geometrien. Visualisiert mit OpenJUMP.<br />

<strong>und</strong> signalisiert dem Parser somit, dass ein GML3-konformes XML-Dokument zu erwarten<br />

ist. Der Parser liefert als Ergebnis einen String zurück, der in ein JTS-Geometrieobjekt<br />

gecasted werden kann (explizite Typumwandlung).<br />

Zur Fehlerbehandlung bietet es sich an, die letzte Zeile des Codes mit einem try-catch-<br />

Block zu umschließen, der eine java.lang.ClassCastException abfängt, falls eine Geometrie<br />

nicht korrekt gelesen <strong>und</strong> zu einer JTS-Geometrie transformiert werden konnte.<br />

Das Schreiben der Geometrien in die Datenbank erfolgt ebenfalls mit Hilfe der GeoTools-<br />

Klassen, genauer gesagt durch das Oracle Spatial Plugin:<br />

Connection conn = DB_Manager.getInstance().getConn();<br />

OracleConnection oconn = (OracleConnection) conn;<br />

GeometryConverter conv = new GeometryConverter(oconn);<br />

STRUCT ogeom = conv.toSDO(this.geom);<br />

DB_Manager.getInstance().write_Geometry(this.identifikator, ogeom);<br />

69


Zunächst benötigt das GeoTools-Plugin eine spezielle OracleConnection, die jedoch<br />

aus der bestehenden JDBC-Datenbankverbindung erzeugt werden kann. Nun kann eine<br />

Instanz der Klasse GeometryConverter erstellt werden, die dann mit der Methode<br />

toSDO(geometry) die JTS-Geometrie in ein Oracle Spatial-konformes SDO_Geometry-<br />

Objekt umwandelt. Dieses Objekt kann dann mit dem Datenbankmanager des NAS-<br />

Importers in die Datenbank geschrieben werden.<br />

GML-<br />

String<br />

GML3-Configuration<br />

Parser<br />

JTS Geometry Oracle Geometry DB_Manager Oracle-<br />

Connection<br />

Eingabe Ausgabe<br />

Abbildung 5.14: Ein- <strong>und</strong> Ausgabe der GML-Geometrien.<br />

DB-Server<br />

Der komplette Vorgang - aufgeteilt in Ein- <strong>und</strong> Ausgabe - ist in Abbildung 5.14 dargestellt.<br />

Die zu GeoTools gehörenden Klassen sind grün markiert.<br />

5.4 Vergleich der Parser-Engines<br />

In diesem Abschnitt sollen die beiden Parser-Engines Simple API for XML (SAX) <strong>und</strong><br />

Streaming API for XML (StAX) im Hinblick auf Geschwindigkeit, Zuverlässigkeit <strong>und</strong><br />

Einfachheit der Implementierung verglichen werden. Konkret werden die beiden Implementierungen<br />

von SAX bzw. StAX betrachtet, die Bestandteil der aktuellen JAVA-<br />

Version, JAVA 6, sind.<br />

Bei diesem Aspekt der Verfügbarkeit kann SAX punkten: die Implementierung ist bereits<br />

seit JAVA 1.4 fester Bestandteil der XML-Pakete von JAVA. StAX gehört erst seit<br />

JAVA 6 zur JAVA-API. Steht auf einem System diese Version nicht zur Verfügung, muss<br />

eine StAX-Implementierung über eine externe Bibliothek eingeb<strong>und</strong>en werden.<br />

Im Bezug auf die Zuverlässigkeit konnten keine gravierenden Nachteile festgestellt werden.<br />

Die StAX-Implementierung ” ignorierte“ vereinzelt das Startelement des Dokuments<br />

<strong>und</strong> das damit verb<strong>und</strong>ene Ereignis wurde nicht ausgelöst. So konnte die Startzeit des<br />

Parsingvorgangs (s.u.) nicht zuverlässig dokumentiert werden. Dies musste für den StAX-<br />

Parser anderweitig implementiert werden (die Startzeit wird bei der Initialisierung des<br />

Parsers gesetzt). Eine Erklärung für dieses Verhalten konnte nicht gef<strong>und</strong>en werden.<br />

Weitere Mängel wurden nicht festgestellt, es wurden stets alle Elemente der Testdatensätze<br />

korrekt eingelesen.<br />

70


Für den SAX-Parser mussten allerdings teilweise kompliziertere Lösungen gewählt werden,<br />

als für den StAX-Parser nötig gewesen wären. In [Ull06] heißt es zum SAX-Parser<br />

bzw. zur Methode characters(), die den Text verarbeitet, der zwischen einem Startelement<br />

<strong>und</strong> dem dazugehörigen Endelement im XML-Dokument steht:<br />

” Es ist nicht festgelegt, ob der Parser den Text an einem Stück liefert oder<br />

in kleinen Stücken.“<br />

Dies bedeutet konkret, dass Text, der vom Parser durch die Methode geliefert wird, auch<br />

in Bruchstücken gelesen werden kann. Beispielsweise der Lebenszeitintervallanfang<br />

wird zur weiteren Verarbeitung im Format 9999-01-0100:00:00 benötigt. Während der<br />

Tests wurde durch den SAX-Parser teilweise nur 9999-01- geliefert, was zu einer unerwarteten<br />

Ausnahme führte <strong>und</strong> mit einer Sonderbehandlung verhindert werden musste.<br />

Mit der StAX-Implementierung kann man sicher sein, stets den vollständigen Text geliefert<br />

zu bekommen.<br />

Für die Messung der Parsergeschwindigkeit wurden ebenfalls praktische Tests durchgeführt.<br />

Anhand zweier NAS-Testdatensätze mit 10000 (Testdatensatz 1 ) bzw. gut 5000<br />

Fachobjekten (Testdatensatz 2 ) sollte unter realen Bedingungen die Dauer eines Importvorgangs<br />

ermittelt werden: durch die beim Lesen des Start- bzw. Endelements des<br />

Dokuments auftretenden Ereignisse wird ein Zeitstempel der aktuellen Unixzeit 9 des<br />

Testsystems zu Beginn <strong>und</strong> zum Ende des Parsings in eine Logdatei geschrieben. Als<br />

Differenz dieser beiden Werte erhält man somit die genaue Zeit (in Millisek<strong>und</strong>en), die<br />

der NAS-Importer zum Verarbeiten des Dokuments benötigt.<br />

Die Tests fanden allesamt im lokalen Netz des <strong>Fachgebiet</strong>s <strong>Datenbanken</strong> <strong>und</strong> <strong>Informationssysteme</strong><br />

(DBIS) an der Leibniz Universität Hannover statt. In diesem Netz befindet<br />

sich auch der Datenbankserver, der zur Speicherung genutzt wird. Die Messungen wurden<br />

in den späten Abendst<strong>und</strong>en durchgeführt, um die Messergebnisse nicht durch konkurrierende<br />

Prozesse zu verfälschen, die im alltäglichen Betrieb zu den Hauptarbeitszeiten<br />

anfallen. Es wurden je Testdatensatz zwei Messungen durchgeführt <strong>und</strong> daraus ein Mittelwert<br />

gebildet.<br />

Testdatensatz 1 Testdatensatz 2<br />

SAX: 135 Minuten 78 Minuten<br />

StAX: 134 Minuten 77 Minuten<br />

Differenz: 1 Minute 1 Minute<br />

Tabelle 5.1: Verarbeitungszeiten der betrachteten Parser-Implementierungen mit vollständig<br />

implementiertem NAS-Importer (Messung 1).<br />

Die erste Messung (Tabelle 5.1) wurde durchgeführt, als der Importer bereits komplett<br />

9 http://de.wikipedia.org/wiki/Unixzeit<br />

71


implementiert war. Es werden also alle Fachobjekte mit all ihren Attributen <strong>und</strong> Beziehungen<br />

in die dafür vorgesehenen Tabellen eingelesen. Auch die Zeit, die zur Verarbeitung,<br />

Umwandlung <strong>und</strong> Speicherung der GML-Geometrien benötigt wird, ist in dieser<br />

gesamten Verarbeitungszeit enthalten.<br />

Um die Parser-Implementierungen noch einmal isoliert von der Implementierung des<br />

NAS-Importers zu testen, wurde dieser stark vereinfacht. Die einzige Funktion des so<br />

veränderten Importers bestand darin, die Objektart der gelesenen Fachobjekte auf der<br />

Konsole auszugeben. In dieser Implementierung wurden Attribute, Beziehungen <strong>und</strong><br />

Geometrien der Fachobjekte nicht verarbeitet. Auch die Kommunikation mit dem Datenbankserver<br />

wurde temporär auskommentiert. Die Ergebnisse dieser zweiten Messung<br />

sind in der nachfolgenden Tabelle 5.2 dargestellt:<br />

Testdatensatz 1 Testdatensatz 2<br />

SAX: 6406 Millisek<strong>und</strong>en 2843 Millisek<strong>und</strong>en<br />

StAX: 6312 Millisek<strong>und</strong>en 2812 Millisek<strong>und</strong>en<br />

Differenz: 94 Millisek<strong>und</strong>en 31 Millisek<strong>und</strong>en<br />

Tabelle 5.2: Verarbeitungszeiten der betrachteten Parser-Implementierungen mit verändertem<br />

Importprogramm (Messung 2).<br />

Vergleicht man nun die Zeiten beider Messungen, so wird deutlich, dass die Parsing-<br />

Zeit den geringsten Anteil an der Gesamtzeit des Importvorgangs hat. Ein Großteil der<br />

Verarbeitungszeit während des Importvorgangs wird somit für die Verarbeitung der gelesenen<br />

Daten im internen Datenmodell (z.B. die Erstellung von neuen Feature-Instanzen,<br />

Zuordnung der gelesenen Attribute usw.), für die Behandlung der Geometrien oder für<br />

die Kommunikation mit dem Datenbankserver (es finden beispielsweise pro gelesenem<br />

Fachobjekt ca. fünf schreibende Zugriffe auf die Datenbank statt) genutzt.<br />

Die zweite Messung könnte somit noch die genaueste Aussage über die reine Parsing-<br />

Geschwindigkeit der Implementierungen geben: hier zeigt sich ein geringer Geschwindigkeitsvorteil<br />

bei der StAX-Implementierung. Dieser bewegt sich jedoch mit wenigen<br />

Millisek<strong>und</strong>en in einem für menschliche Nutzer kaum wahrnehmbaren Bereich. Da diese<br />

zweite Testsituation nur ein konstruiertes Szenario darstellt <strong>und</strong> die Gesamtgeschwindigkeit<br />

eines Importvorgangs - wie oben beschrieben - stärker von anderen Faktoren<br />

abhängt, wird der Vorsprung von StAX relativiert.<br />

Abschließend lässt sich zum Aspekt Geschwindigkeit festhalten, dass bei einer Gesamtzeit<br />

von über zwei St<strong>und</strong>en für den ersten Testdatensatz eine Differenz von einigen<br />

Millisek<strong>und</strong>en nicht wahrgenommen werden kann. Deshalb spielt der Faktor ” Geschwindigkeit“<br />

bei der Wahl einer Parser-Implementierung keine Rolle.<br />

Insgesamt ergibt sich ein relativ einheitliches Bild beider Implementierungen, die sich in<br />

72


den betrachteten Faktoren kaum unterscheiden. Wer z.B. nicht die neueste JAVA-Version<br />

zur Verfügung hat <strong>und</strong> keine externen Bibliotheken verwenden möchte, sollte eher SAX<br />

benutzen; hat man vielleicht bereits ein Projekt mit StAX realisiert oder gefallen die<br />

besseren Einflussmöglichkeiten auf die Position des Parsers, so bietet sich StAX an. Das<br />

Endergebnis ist mit beiden Varianten zufrieden stellend.<br />

Da die beiden oben vorgestellten Messungen keinen Hinweis darauf geben, welcher Schritt<br />

des Importvorgangs bzw. welche Komponente des NAS-Importers die hohe Verarbeitungszeit<br />

verursacht, wurden weitere Messungen durchgeführt. Zunächst wurde der NAS-<br />

Importer so verändert, dass keine Kommunikation mit dem Datenbankserver stattfand.<br />

Hierzu wurden die Methoden zum Schreiben der Fachobjekte, Attribute usw. in die<br />

Datenbank auskommentiert. Da im vorigen Teil dieses Abschnitts bereits ein Geschwindigkeitsunterschied<br />

aufgr<strong>und</strong> der verwendeten Parser-Implementierung ausgeschlossen<br />

wurde, wurden die Tests nur mit der StAX-Implementierung durchgeführt. Auch wurde<br />

in dieser Messung nur ein Testdatensatz betrachtet, da die vorigen Messungen keinen<br />

Einfluss der Dateigröße bzw. Anzahl der Fachobjekte auf die Verarbeitungszeit erkennen<br />

ließen.<br />

Testdatensatz 1<br />

StAX: 125 Minuten<br />

Differenz zu Messung 1: 9 Minuten<br />

Tabelle 5.3: Verarbeitungszeiten des NAS-Importers mit Nutzung des internen Datenmodells<br />

aber ohne Kommunikation mit dem DB-Server (Messung 3).<br />

Die hier ermittelten <strong>und</strong> in Tabelle 5.3 dargestellten Werte schließen die Anbindung an<br />

die Datenbank als Ursache für die lange Verarbeitungszeit aus. Vergleicht man Messung<br />

1 <strong>und</strong> Messung 3, so sieht man, dass für die Kommunikation mit dem Datenbankserver<br />

lediglich neun Minuten mehr gebraucht werden.<br />

Es muss also weiter untersucht werden, wie sich die übrigen 125 Minuten zusammensetzen.<br />

Hierzu wurde die für die dritte Messung eingesetzte Version des NAS-Importers um<br />

die Ausgabe weiterer Informationen zur Verarbeitungszeit eines einzelnen Fachobjekts<br />

ergänzt. Hierbei wurde eine durchschnittliche Verarbeitungsdauer von 1100 Millisek<strong>und</strong>en<br />

pro Fachobjekt gemessen. Die Verarbeitung einer Geometrie trug im Durchschnitt<br />

1000 Millisek<strong>und</strong>en zu diesem Wert bei.<br />

Somit wurde die Verarbeitung der Geometrien als Hauptursache für die lange Verarbeitungszeit<br />

des NAS-Importers identifiziert.<br />

73


Kapitel 6<br />

Fazit <strong>und</strong> Ausblick<br />

6.1 Fazit<br />

In mehreren B<strong>und</strong>esländern laufen bereits Vorbereitungen zur Einführung des AAA-<br />

Modells. Es werden die Voraussetzungen für einen Umstieg geprüft, teilweise werden<br />

Testsysteme eingerichtet, die in anderen Ländern bereits seit einiger Zeit in Benutzung<br />

sind. Wenige Länder haben bereits mit der Datenmigration begonnen. Niedersachsen<br />

sieht eine Migration im Jahr 2008 vor ([Ueb06]), andere Länder folgen in den nächsten<br />

Jahren. Unter diesen Voraussetzungen ist in naher Zukunft mit einer weiten Verbreitung<br />

des AAA-Modells im täglichen Praxiseinsatz zu rechnen.<br />

Einen großen Vorteil bietet das einheitliche Konzept des AAA-Modells besonders für<br />

Benutzer mindestens zweier der zuvor getrennt geführten Fachinformationssysteme für<br />

raumbezogene Daten. Beispielsweise die Harmonisierung der Objektartenkataloge von<br />

ATKIS <strong>und</strong> ALKIS oder die gemeinsame Verwendung des AAA-Basisschemas für AL-<br />

KIS, AFIS <strong>und</strong> ATKIS minimieren den Unterschied zwischen den Komponenten <strong>und</strong><br />

erleichtern somit auch die Einarbeitung.<br />

Da das AAA-Modell sozusagen als ” Zweite Generation“ der <strong>Informationssysteme</strong> zur<br />

digitalen Verwaltung von geografischen Daten gilt, konnten Erfahrungen aus den vergangenen<br />

Jahrzehnten in die Planung mit einfließen <strong>und</strong> veraltete Konzepte überdacht<br />

werden. Besonders die Versionierung ist als neue Errungenschaft hervorzuheben. Eine<br />

lückenlose Historie kann sehr nützlich sein <strong>und</strong> auch der dadurch höhere Speicherbedarf<br />

ist im Zeitalter stetig fallender Speicherpreise leicht zu rechtfertigen.<br />

Die konsequent durchgeführte modellbasierte Entwicklung mit Hilfe der Unified Modeling<br />

Language (UML) ist durch die weite Verbreitung dieses Standards ein lobenswerter<br />

Ansatz. Leider muss an der Durchführung durch die AdV Kritik geübt werden: da die<br />

Ergebnisse des Entwicklungsprozess nur in einem proprietären Dateiformat der Software<br />

Rational Rose veröffentlicht werden, ist die Verwendung dieser Dateien nur einem kleinen<br />

Benutzerkreis vorbehalten, der Zugriff auf die o.g. Software hat. Erschwerend kommt<br />

74


hinzu, dass die textuellen Formulierungen in der GeoInfoDok teilweise ungenau sind <strong>und</strong><br />

einige konkrete Fragen nicht beantworten können. Gerade in diesen Situationen ist ein<br />

Blick in die Modelldateien unerlässlich. Hier sollte die AdV nachbessern <strong>und</strong> zumindest<br />

einen Export der Daten in ein freies Dateiformat veröffentlichen. So verfügt Rational Rose<br />

beispielsweise über einen Web-Export, der das komplette Datenmodell nach HTML<br />

übertragen kann, wodurch es mit jedem Webbrowser angesehen werden kann.<br />

Dass es auch anders geht, zeigt die Spezifikation der Normbasierten Austauschschnittstelle<br />

(NAS). Als GML-Anwendungsschema veröffentlicht, ist der Zugang zu diesem Datenmodell<br />

einfach möglich. Generell kann gesagt werden, dass es der AdV bei der Entwicklung<br />

der NAS gelungen ist, eine plattformunabhängige <strong>und</strong> streng an offenen Standards<br />

orientierte Datenaustauschschnittstelle zu entwerfen, die besonders den Austausch von<br />

Daten über das Internet berücksichtigt. Durch die große Menge an Verwaltungsdaten<br />

(Overhead) führen NAS-konforme Daten allerdings schnell zu großen Dateien. Dies ist<br />

der Preis der Universalität gegenüber einem proprietären Dateiformat.<br />

Innerhalb des WIPKA-Projekts werden mit zunehmender Verbreitung des AAA-Modells<br />

mehr <strong>und</strong> mehr AAA-konforme Geodaten in der <strong>MRDB</strong> gespeichert <strong>und</strong> verarbeitet<br />

werden. Die vorliegende Arbeit leistet dazu einen Beitrag, indem ein AAA-konformes<br />

ATKIS-Datenbankschema vorgestellt <strong>und</strong> ein Importer für NAS-Dateien erstellt wurde.<br />

Somit ist ein erster Schritt in Richtung der Kompatibilität zum AAA-Modell getan. Der<br />

aktuelle Entwicklungsstand dieser Komponenten sollte jedoch noch nicht als endgültig<br />

bezeichnet werden. Das AAA-Modell befindet sich in einigen Punkten noch in Bearbeitung<br />

<strong>und</strong> es fehlen Erfahrungen aus dem alltäglichen Praxiseinsatz der Software.<br />

Vorschläge zur weiteren Entwicklung von AAA-konformen Komponenten innerhalb der<br />

<strong>MRDB</strong> werden im folgenden Abschnitt angesprochen.<br />

6.2 Ausblick<br />

Durch diese Arbeit wurde ein Gr<strong>und</strong>stein für die zukünftige Verwendung des AAA-<br />

Modells im Rahmen des WIPKA-Projekts gelegt. Das erstellte Datenbankschema bietet<br />

eine solide Basis zur Verwaltung von raumbezogenen Daten, die nach den Vorgaben des<br />

AAA-Modells dort gespeichert sind. Die Realisierung der Datenaustauschschnittstelle<br />

ist durch den NAS-Importer zumindest in eine Richtung schon implementiert <strong>und</strong> kann<br />

- mit Einschränkungen durch die lange Dauer des Importvorgangs - bereits produktiv<br />

eingesetzt werden. Dennoch gibt es bei einem so umfangreichen Thema stets weitere<br />

Verbesserungen <strong>und</strong> Erweiterungsmöglichkeiten. Einige davon, die in naher Zukunft eine<br />

Rolle spielen werden, sollen im Folgenden vorgestellt werden.<br />

Im Rahmen dieser Arbeit wurde der NAS-Importer als eigenständiges Programm konzipiert.<br />

Für den praktischen Einsatz innerhalb des WIPKA-Projekts sollte der NAS-<br />

Importer fest in das Programm GeoFoed (siehe [Man02]) integriert werden. Diese Softwa-<br />

75


e wird an der Leibniz Universität Hannover zur Verwaltung der Multi-Repräsentations-<br />

Datenbank (<strong>MRDB</strong>) verwendet <strong>und</strong> realisiert den Zugriff auf diese. Die Integration in<br />

GeoFoed besteht im Wesentlichen aus der Erstellung einer neuen Programmoberfläche -<br />

eben der Oberfläche von GeoFoed. Da der NAS-Importer auf dem MVC-Pattern basiert,<br />

das die Programmlogik von der Präsentation trennt, sind hier keine Probleme bei der<br />

Integration zu erwarten.<br />

Der NAS-Importer sollte in Zukunft um ein Modul ergänzt werden, welches den Objektartenkatalog<br />

(<strong>und</strong> somit auch den Attributartenkatalog <strong>und</strong> die Codelisten) automatisch<br />

in die Datenbank einlesen kann. Dies konnte bisher nicht verwirklicht werden, da<br />

der Objektartenkatalog von offizieller Seite noch nicht in einem elektronisch gut lesbaren<br />

Format veröffentlicht wurde. Zudem befindet sich das AAA-Modell <strong>und</strong> insbesondere der<br />

Objektartenkatalog weiterhin in Entwicklung <strong>und</strong> es kann nicht abgesehen werden, welche<br />

Teile der Dokumente sich noch ändern werden. Sind diese Voraussetzungen erfüllt,<br />

so kann der NAS-Importer leicht - beispielsweise durch eine weitere Parserklasse - um<br />

ein solches Modul erweitert werden.<br />

Ebenfalls Raum für Verbesserungen bietet die Arbeitsgeschwindigkeit des NAS-Importers.<br />

In der für diese Arbeit erstellten Version braucht ein Import des größeren Testdatensatzes<br />

(10000 Fachobjekte) über zwei St<strong>und</strong>en Rechenzeit. Ein Großteil der Zeit wird für<br />

die Verarbeitung der Geometrien genutzt (siehe Abschnitt 5.4). Eventuell ist hier in Zukunft<br />

durch die stetige Weiterentwicklung der verwendeten GeoTools-Bibliotheken eine<br />

Optimierung zu erwarten. Beispielsweise könnte die geplante GeoAPI als neues Geometriemodell<br />

von GeoTools ebenfalls kürzere Verarbeitungszeiten mit sich bringen. Ist dies<br />

nicht der Fall <strong>und</strong> die Arbeitsgeschwindigkeit in ihrer aktuellen Höhe erweist sich im<br />

Praxiseinsatz als unzureichend, müsste über eine Alternative zu GeoTools nachgedacht<br />

werden <strong>und</strong> z.B. eine eigene Implementierung begonnen werden.<br />

Im Rahmen dieser Arbeit konnte die Verarbeitung der Geometrien nicht weiter optimiert<br />

werden. Die Geometriebehandlung als Ursache für die lange Importzeit wurde erst<br />

relativ spät festgestellt, da die Verarbeitung aller Geometrien aufgr<strong>und</strong> diverser Probleme<br />

(siehe Abschnitt 5.3) ebenfalls erst spät implementiert werden konnte. Des Weiteren<br />

konnte auch nach intensiver Recherche keine Alternative zur Verwendung von GeoTools<br />

gef<strong>und</strong>en werden. Es ist zur Zeit (Stand: September 2007) keine Software verfügbar, die<br />

1. GML 3 verabeiten kann <strong>und</strong><br />

2. in ein JAVA-Programm integriert oder innerhalb eines Oracle-Datenbankservers<br />

verwendet werden kann <strong>und</strong><br />

3. frei verfügbar ist.<br />

Für eine Produktivversion des NAS-Importers sollte überlegt werden, nur noch eine<br />

Parser-Implementierung zu verwenden. Die Konzeption des NAS-Importers mit zwei<br />

76


Parserklassen diente zum Vergleich beider Implementierungen. Um das Programm möglichst<br />

klein zu halten <strong>und</strong> eine zusätzliche Fehlerquelle zu eliminieren, sollte eine Parserklasse<br />

entfernt werden. In Abschnitt 5.4 wird die Verwendung der StAX-Implementierung<br />

empfohlen.<br />

Bei der Implementierung des relationalen Datenbankschemas wurden Integritätsbedingungen<br />

hauptsächlich über Fremdschlüssel realisiert. So wird z.B. bei der Attributzuweisung<br />

sichergestellt, dass dieser Attributtyp auch Bestandteil des Attributartenkataloges<br />

ist oder dass beide Objekte, die an der Beziehung hatDirektUnten teilnehmen, auch<br />

wirklich in der Datenbank enthalten sind.<br />

Auf die Prüfung weiterer Integritätsbedingungen wird in diesem Kontext verzichtet, da<br />

davon ausgegangen wird, dass die gelieferten <strong>und</strong> zu importierenden NAS-Daten korrekt<br />

sind. Ohne diese Voraussetzung müsste beispielsweise überprüft werden, ob ein angegebener<br />

Attributtyp für die Objektart eines Fachobjekts zulässig ist, ob Attributwerte<br />

in einem bestimmten Bereich liegen (z.B. Anzahl der Fahrstreifen einer Straße größer<br />

0) <strong>und</strong> so weiter. Es handelt sich hierbei also hauptsächlich um Integritätsbedingungen,<br />

welche die durch den Objektartenkatalog festgelegten Vorgaben prüfen. Hier wird der<br />

praktische Einsatz zeigen, ob weitere Integritätsbedingungen notwendig sind.<br />

Zur vollständigen Integration in die <strong>MRDB</strong> sind noch einige zusätzliche Informationen<br />

nötig, damit Programme <strong>und</strong> Algorithmen wie das Matching die AAA-Daten verarbeiten<br />

können. Das Matchingverfahren sieht zu Beginn eine semantische Filterung vor (siehe<br />

[LMT04]). Hierbei werden die Fachobjekte anhand ihrer thematischen Eigenschaften,<br />

beispielsweise der Objektart, klassifiziert. Es wird eine Zuordnungstabelle von Objekten<br />

zweier Maßstäbe erstellt, die sich semantisch überlappen <strong>und</strong> so das gleiche Realweltobjekt<br />

darstellen können. So wird sichergestellt, dass z.B. niemals ein Haus einer Straße<br />

zugeordnet werden kann. Abbildung 6.1 zeigt eine solche Tabelle mit Klassenzuordnungen.<br />

Eine ObjektartNr des BASIS-DLM wird dabei einer ObjektartNr des DLM1000<br />

zugeordnet.<br />

1<br />

2<br />

3<br />

Objektart BASIS-DLM DLM1000<br />

AX_Strassenachse<br />

AX_Fahrbahnachse<br />

AX_Bahnstrecke<br />

AX_Platz<br />

Abbildung 6.1: Klassenzuordnungen für die semantische Filterung anhand des BASIS-<br />

DLM <strong>und</strong> DLM1000 (Ausschnitt). Eigene Darstellung nach [LMT04].<br />

77


In diesem Beispiel gibt es eine Objektart (AX_Bahnstrecke), die in beiden Datenbeständen<br />

äquivalent vorhanden ist <strong>und</strong> somit die gleiche Objektart für ein Realweltobjekt gewählt<br />

werden kann. Zu AX_Platz gibt es im DLM1000 keine äquivalente Objektart <strong>und</strong><br />

es existiert auch keine Objektart, durch die ein Platz der realen Welt repräsentiert werden<br />

könnte. AX_Fahrbahnachse aus dem BASIS-DLM hingegen kann im DLM1000 einer<br />

Straßenachse zugeordnet werden. In diesem kleineren Maßstab wird nicht mehr zwischen<br />

einzelnen Fahrbahnen unterschieden, weswegen der OK des DLM1000 die Objektart<br />

AX_Fahrbahnachse nicht enthält. Semantisch kann die Objektart AX_Fahrbahnachse<br />

der Objektart AX_Strassenachse gleichgesetzt werden.<br />

Diese Zuordnungen komplett manuell zu erstellen ist bei vier verschiedenen Objektartenkatalogen<br />

sehr aufwändig. Automatisierte Verfahren (zumindest könnten Objektarten,<br />

die in allen Maßstäben vorhanden sind, automatisch zugeordnet werden) benötigen einen<br />

elektronisch verfügbaren Objektartenkatalog. Da diese Voraussetzung zur Zeit noch nicht<br />

erfüllt ist (s.o.), konnten die Tabellen zur Klassenzuordnung in dieser Arbeit noch nicht<br />

realisiert werden.<br />

6.3 Motivation zur Implementierung eines<br />

NAS-Exporters<br />

Da die in die <strong>MRDB</strong> importierten Geodaten durch die verschiedenen dort implementierten<br />

Verfahren, z.B. das Matching, verändert werde können, ist eine Exportfunktion<br />

notwendig, um diese veränderten Daten auch in Anwendungen außerhalb der <strong>MRDB</strong><br />

nutzen zu können. Im Rahmen des Matchings werden beispielsweise die Zuordnungen<br />

(Links) den Daten hinzugefügt; Änderungen an den vorhandenen Daten sind beispielsweise<br />

durch Geometrieanpassungen möglich.<br />

Abbildung 6.2 zeigt den so entstehenden typischen Datenfluss.<br />

NAS-Datei<br />

AAA-Daten<br />

<strong>MRDB</strong><br />

Matching<br />

Links<br />

AAA-Daten<br />

NAS-Datei<br />

mit Links<br />

Abbildung 6.2: Datenfluss von AAA-NAS-Daten in der <strong>MRDB</strong> inklusive Im- <strong>und</strong> Export.<br />

78


Vor diesem Szenario können nun Anforderungen an den NAS-Exporter erhoben werden:<br />

1. Verlustloser Export: die zuvor mit dem NAS-Importer eingelesenen Daten sollen<br />

vollständig rekonstruierbar sein.<br />

2. Einarbeitung der Links in die NAS-Daten: sämtliche durch das Matching<br />

erstellte Zuordnungen sollen exportiert werden, <strong>und</strong> die dadurch verknüpften Fachobjekte<br />

sollen referenziert werden.<br />

Ideen zur Umsetzung eines NAS-Exporters nach diesen Vorgaben werden im folgenden<br />

Abschnitt diskutiert.<br />

6.4 Entwurf <strong>und</strong> Ideen zur Implementierung<br />

Der NAS-Exporter hat die Aufgabe, geografische Daten (zunächst ATKIS-Daten), die<br />

in einem nach dem AAA-Modell erstellten Datenbankschema verwaltet werden, in eine<br />

NAS-Datei zu exportieren. Dieser Vorgang wird in Abbildung 6.3 illustriert.<br />

DB-Server<br />

ATKIS-Daten<br />

Fachobjekte<br />

Geometrien<br />

Beziehungen<br />

NAS-<br />

Exporter<br />

NAS-<br />

Datei<br />

Abbildung 6.3: Export von NAS-Daten aus einer ATKIS-Datenbank.<br />

Die erste im vorigen Abschnitt erwähnte Anforderung eines verlustlosen Exports ist einfach<br />

zu realisieren. Bei der Implementierung des NAS-Importers wurde diese Anforderung<br />

bereits berücksichtigt, <strong>und</strong> somit ist eine wichtige Voraussetzung für den Exporter<br />

bereits umgesetzt.<br />

Die zweite Anforderung lässt sich durch die Spezifikation der NAS nicht realisieren. Im<br />

ursprünglichen NAS-GML-Anwendungsschema sind keine Links vorgesehen. Folgende<br />

Lösungswege bieten sich an:<br />

1. Erweiterung des GML-Anwendungsschemas für NAS-Dateien um Datenstrukturen<br />

für Links.<br />

79


2. Speicherung der Links in einer zusätzlichen Datei. Die NAS-Datei enthält dann<br />

keine Informationen über die Links, sondern diese müssten in einem zusätzlichen<br />

Verarbeitungsschritt in eine Anwendung importiert werden.<br />

Hier ist allgemein die zweite Methode zu bevorzugen, da so die exportierte NAS-Datei<br />

weiterhin von allen AAA-konformen Systemen verarbeitet werden kann. Durch den erstgenannten<br />

Ansatz würde sozusagen ein neues Fachschema entwickelt werden, dessen Daten<br />

von anderen Importprogrammen ohne Kenntnis des neuen GML-Anwendungsschemas<br />

nicht verarbeitet werden können.<br />

Die Behandlung der Geometrien gestaltet sich beim NAS-Exporter ähnlich schwierig,<br />

wie bei der Implementierung des NAS-Importers. Wie schon in Abschnitt 5.3 erwähnt,<br />

stellt Oracle Spatial eine Funktion<br />

SDO_UTIL.TO_GMLGEOMETRY(sdo_geometry)<br />

zur Verfügung, die eine in der Datenbank gespeicherte Geometrie in GML ausgibt. Da<br />

die AdV im Rahmen der GeoInfoDok jedoch genaue Vorgaben bezüglich der Codierung<br />

der Geometrien in GML vorgibt <strong>und</strong> dabei GML 3 verwendet wird, kann hierdurch keine<br />

standardkonforme Ausgabe erreicht. GeoTools bietet unter dem Stichwort XML Transform<br />

1 ein Exportmodul an, welches Daten aus dem intern verwendeten Geometriemodul<br />

in XML <strong>und</strong> somit auch GML exportieren kann.<br />

Diese Möglichkeit sollte vor der Integration in den NAS-Exporter im Hinblick auf Standarderfüllung<br />

(GeoInfoDok), Geschwindigkeit <strong>und</strong> Zuverlässigkeit anhand von praktischen<br />

Tests überprüft werden. Kann kein zufrieden stellendes Ergebnis erzielt werden,<br />

so muss eventuell eine eigene Lösung implementiert werden.<br />

Bei der Entwicklung des NAS-Importers wurde Wert auf eine möglichst modulare Implementierung<br />

gelegt. Durch diese Vorgabe ist es nun möglich, zahlreiche Komponenten<br />

des Importers für den Exporter wieder zu verwenden:<br />

Das interne Datenmodell kann mit kleinen Veränderungen wie bisher genutzt werden.<br />

So wird beispielsweise auch beim Export aus der Datenbank der Objektartenkatalog (in<br />

Form der Klasse OK) benötigt, diesmal um einer ObjektartNr wieder die äquivalente<br />

NASBezeichnung zuweisen zu können.<br />

Auch die Feature-Klasse kann weiter verwendet werden, um ein Fachobjekt schrittweise<br />

aufzubauen. So werden beispielsweise erst die allgemeinen Daten zu einen Objekt aus der<br />

Datenbank gelesen, dann eine eventuell vorhandene Geometrie, die verschiedenen Attribute<br />

usw. Die Datenstruktur Feature sollte für den Export noch um die Beziehungen<br />

erweitert werden. Diese wurden beim Import zunächst lokal zwischengespeichert (Klasse<br />

Relations) <strong>und</strong> nach dem Einlesen aller Fachobjekte in der Datenbank gespeichert. Für<br />

1 http://docs.codehaus.org/display/GEOTDOC/03+XML+Transform<br />

80


den Export wird die direkte Zuordnung einer Beziehung zu einem Fachobjekt benötigt.<br />

Zum Schreiben der NAS-Datei sollte es eine Klasse nach Vorbild des DB_Managers geben,<br />

die Methoden zum Schreiben in eine NAS-Datei implementiert. Diese Methoden<br />

können dann auch von der Klasse Feature verwendet werden, um eine Feature-Instanz<br />

zu speichern.<br />

Für die Kommunikation mit der Datenbank kann weiter der DB_Manager verwendet<br />

werden. Da die Klasse bisher nur Methoden zum Schreiben von Daten in die Datenbank<br />

vorsieht, müssen zunächst Methoden zum Lesen der Daten aus der Datenbank hinzugefügt<br />

werden.<br />

Eine Programmoberfläche sollte für den NAS-Exporter komplett neu erstellt werden.<br />

Die anzuzeigenden Daten bzw. Optionen unterscheiden sich zu sehr von denen des Importers.<br />

Da auch der NAS-Exporter in die <strong>MRDB</strong> bzw. in GeoFoed integriert werden soll,<br />

bietet sich die Erstellung einer Oberfläche für diesen Zweck an. Wie schon in Abschnitt<br />

6.2 erwähnt, sollte die Erstellung einer weiteren Oberfläche dank des MVC-Pattern keine<br />

Probleme darstellen.<br />

81


Anhang A<br />

Objektartenübersicht ATKIS-OK<br />

BASIS-DLM<br />

• Objektartengruppe ExternalCodeLists<br />

• Objektbereich AAA Basisschema<br />

– Objektartengruppe AAA Praesentationsobjekte<br />

∗ Objektart AP GPO<br />

∗ Objektart AP PPO<br />

∗ Objektart AP LPO<br />

∗ Objektart AP FPO<br />

∗ Objektart AP TPO<br />

∗ Objektart AP PTO<br />

∗ Objektart AP LTO<br />

∗ Objektart AP Darstellung<br />

• Objektbereich Flurstücke, Lage, Punkte<br />

– Objektartengruppe Angaben zur Lage<br />

∗ Objektart AX LagebezeichnungMitHausnummer<br />

∗ Objektart AX LagebezeichnungMitPseudonummer<br />

∗ Objektart AX Lagebezeichnung<br />

∗ Objektart AX Lage<br />

– Objektartengruppe Angaben zum Netzpunkt<br />

– Objektartengruppe Angaben zum Punktort<br />

– Objektartengruppe Fortführungsnachweis<br />

– Objektartengruppe Angaben zur Reservierung<br />

– Angaben zur Historie<br />

– Personen- <strong>und</strong> Bestandsdaten<br />

∗ Objektart AX Person<br />

∗ Objektart AX Anschrift<br />

• Objektbereich Gebäude<br />

– Objektartengruppe Angaben zum Gebäude<br />

∗ Objektart AX Gebaeude<br />

∗ Objektart AX Bauteil<br />

∗ Objektart AX Nutzung Gebaeude<br />

83


∗ Objektart AX Lage<br />

• Objektbereich Tatsächliche Nutzung<br />

– Objektart AX TatsaechlicheNutzung<br />

– Objektartengruppe Siedlung<br />

∗ Objektart AX Wohnbauflaeche<br />

∗ Objektart AX IndustrieUndGewerbeflaeche<br />

∗ Objektart AX Halde<br />

∗ Objektart AX Bergbaubetrieb<br />

∗ Objektart AX TagebauGrubeSteinbruch<br />

∗ Objektart AX FlaecheGemischterNutzung<br />

∗ Objektart AX FlaecheBesondererFunktionalerPraegung<br />

∗ Objektart AX SportFreizeitUndErholungsflaeche<br />

∗ Objektart AX Friedhof<br />

– Objektartengruppe Verkehr<br />

∗ Objektart AX Strassenverkehr<br />

∗ Objektart AX Strasse<br />

∗ Objektart AX Strassenachse<br />

∗ Objektart AX Fahrbahnachse<br />

∗ Objektart AX Fahrwegachse<br />

∗ Objektart AX Platz<br />

∗ Objektart AX Bahnverkehr<br />

∗ Objektart AX Bahnstrecke<br />

∗ Objektart AX Schiffsverkehr<br />

– Objektartengruppe Vegetation<br />

∗ Objektart AX Landwirtschaft<br />

∗ Objektart AX Wald<br />

∗ Objektart AX Gehoelz<br />

∗ Objektart AX Heide<br />

∗ Objektart AX Moor<br />

∗ Objektart AX Sumpf<br />

∗ Objektart AX UnlandVegetationsloseFlaeche<br />

∗ Objektart AX FlaecheZurZeitUnbestimmbar<br />

– Objektartengruppe Gewässer<br />

∗ Objektart AX Fliessgewaesser<br />

∗ Objektart AX Wasserlauf<br />

∗ Objektart AX Kanal<br />

∗ Objektart AX Gewaesserachse<br />

∗ Objektart AX Hafenbecken<br />

∗ Objektart AX StehendesGewaesser<br />

∗ Objektart AX Meer<br />

• Objektbereich Bauwerke, Einrichtungen <strong>und</strong> sonstige Angaben<br />

– Objektart AX BauwerkeEinrichtungenUndSonstigeAngaben<br />

– Objektartengruppe Bauwerke <strong>und</strong> Einrichtungen in Siedlungsflächen<br />

∗ Objektart AX Turm<br />

∗ Objektart AX BauwerkOderAnlageFuerIndustrieUndGewerbe<br />

∗ Objektart AX VorratsbehaelterSpeicherbauwerk<br />

∗ Objektart AX Transportanlage<br />

∗ Objektart AX Leitung<br />

∗ Objektart AX BauwerkOderAnlageFuerSportFreizeitUndErholung<br />

84


∗ Objektart AX HistorischesBauwerkOderHistorischeEinrichtung<br />

∗ Objektart AX SonstigesBauwerkOderSonstigeEinrichtung<br />

∗ Objektart AX EinrichtungInOeffentlichenBereichen<br />

– Objektartengruppe Besondere Anlagen auf Siedlungsflächen<br />

∗ Objektart AX Ortslage<br />

∗ Objektart AX Hafen<br />

∗ Objektart AX Schleuse<br />

∗ Objektart AX Grenzuebergang<br />

∗ Objektart AX Testgelaende<br />

– Objektartengruppe Bauwerke, Anlagen <strong>und</strong> Einrichtungen für den Verkehr<br />

∗ Objektart AX BauwerkImVerkehrsbereich<br />

∗ Objektart AX Strassenverkehrsanlage<br />

∗ Objektart AX WegPfadSteig<br />

∗ Objektart AX Bahnverkehrsanlage<br />

∗ Objektart AX SeilbahnSchwebebahn<br />

∗ Objektart AX Gleis<br />

∗ Objektart AX Flugverkehrsanlage<br />

∗ Objektart AX EinrichtungenFuerDenSchiffsverkehr<br />

∗ Objektart AX BauwerkImGewaesserbereich<br />

– Objektartengruppe Besondere Vegetationsmerkmale<br />

∗ Objektart AX Vegetationsmerkmal<br />

– Objektartengruppe Besondere Eigenschaften von Gewässern<br />

∗ Objektart AX Gewaessermerkmal<br />

∗ Objektart AX Polder<br />

– Objektartengruppe Besondere Angaben zum Verkehr<br />

∗ Objektart AX Netzknoten<br />

∗ Objektart AX Nullpunkt<br />

∗ Objektart AX Abschnitt<br />

∗ Objektart AX Ast<br />

– Objektartengruppe Besondere Angaben zum Gewässer<br />

• Objektbereich Relief<br />

∗ Objektart AX Wasserspiegelhoehe<br />

∗ Objektart AX SchifffahrtslinieFaehrverkehr<br />

∗ Objektart AX Gewaesserstationierungsachse<br />

∗ Objektart AX Sickerstrecke<br />

– Objektartengruppe Reliefformen<br />

∗ Objektart AX BoeschungKliff<br />

∗ Objektart AX Boeschungsflaeche<br />

∗ Objektart AX DammWallDeich<br />

∗ Objektart AX Einschnitt<br />

∗ Objektart AX Hoehleneingang<br />

∗ Objektart AX FelsenFelsblockFelsnadel<br />

∗ Objektart AX Duene<br />

∗ Objektart AX Hoehenlinie<br />

– Objektartengruppe Primäres DGM<br />

∗ Objektart AX Erfassung DGM<br />

∗ Objektart AX Gelaendekante<br />

– Objektartengruppe Sek<strong>und</strong>äres DGM<br />

85


• Objektbereich Gesetzliche Festlegungen, Gebietseinheiten, Kataloge<br />

– Objektartengruppe Öffentlich-rechtliche <strong>und</strong> sonstige Festlegungen<br />

∗ Objektart AX AndereFestlegungNachWasserrecht<br />

∗ Objektart AX SchutzgebietNachWasserrecht<br />

∗ Objektart AX NaturUmweltOderBodenschutzrecht<br />

∗ Objektart AX SchutzgebietNachNaturUmweltOderBodenschutzrecht<br />

∗ Objektart AX Denkmalschutzrecht<br />

∗ Objektart AX SonstigesRecht<br />

∗ Objektart AX Schutzzone<br />

– Objektartengruppe Bodenschätzung, Bewertung<br />

– Objektartengruppe Kataloge<br />

∗ Objektart AX Nationalstaat<br />

∗ Objektart AX B<strong>und</strong>esland<br />

∗ Objektart AX Regierungsbezirk<br />

∗ Objektart AX KreisRegion<br />

∗ Objektart AX Gemeinde<br />

∗ Objektart AX Gemeindeteil<br />

∗ Objektart AX Verwaltungsgemeinschaft<br />

∗ Objektart AX Dienststelle<br />

∗ Objektart AX LagebezeichnungKatalogeintrag<br />

∗ Objektart AX Gemeindekennzeichen<br />

∗ Objektart AX Katalogeintrag<br />

∗ Objektart AX Dienststelle Schluessel<br />

∗ Objektart AX B<strong>und</strong>esland Schluessel<br />

∗ Objektart AX Regierungsbezirk Schluessel<br />

∗ Objektart AX Kreis Schluessel<br />

∗ Objektart AX VerschluesselteLagebezeichnung<br />

∗ Objektart AX Verwaltungsgemeinschaft Schluessel<br />

– Objektartengruppe Geographische Gebietseinheiten<br />

∗ Objektart AX Landschaft<br />

∗ Objektart AX KleinraeumigerLandschaftsteil<br />

∗ Objektart AX Gewann<br />

∗ Objektart AX Insel<br />

∗ Objektart AX Wohnplatz<br />

– Objektartengruppe Administrative Gebietseinheiten<br />

∗ Objektart AX KommunalesGebiet<br />

∗ Objektart AX Gebiet Nationalstaat<br />

∗ Objektart AX Gebiet B<strong>und</strong>esland<br />

∗ Objektart AX Gebiet Regierungsbezirk<br />

∗ Objektart AX Gebiet Kreis<br />

∗ Objektart AX Kondominium<br />

∗ Objektart AX Gebietsgrenze<br />

∗ Objektart AX Gebiet<br />

• Objektbereich Nutzerprofile<br />

– Objektartengruppe Nutzerprofile<br />

∗ Objektart AX Benutzer<br />

∗ Objektart AX Benutzergruppe<br />

∗ Objektart AX BenutzergruppeMitZugriffskontrolle<br />

∗ Objektart AX BenutzergruppeNBA<br />

∗ Objektart AX BereichZeitlich<br />

∗ Objektart AX FOLGEVA<br />

∗ Objektart AX Portionierungsparameter<br />

86


Anhang B<br />

Übersicht über das relationale<br />

Datenbankschema<br />

Tabelle Objekt:<br />

Objekt(Identifikator, Objektart → Objektartenkatalog)<br />

Tabelle Identifikatoren:<br />

Objektversion(ObjektID, Identifikator → Objekt, LebenszeitintervallAnfang,<br />

LebenszeitintervallEnde NULL , Anlass)<br />

Tabelle REO:<br />

REO(ReoID → Objekt, Geometrie)<br />

Tabelle NREO:<br />

NREO(NReoID → Objekt)<br />

Tabelle ZUSO:<br />

ZUSO(ZusoID → Objekt, Teil → Objekt)<br />

Tabelle Praesentationsobjekt:<br />

Praesentationsobjekt(PraesentationsobjektID → Objekt, Schriftinhalt,<br />

Fontsperrung, Skalierung, HorizontaleAusrichtung, VertikaleAusrichtung,<br />

Geometrie)<br />

Tabelle hatDirektUnten:<br />

hatDirektUnten(Oben → Objekt, Unten → Objekt)<br />

Tabelle dientZurDarstellungVon:<br />

dientZurDarstellungVon(Objekt → Objekt, Praesentationsobjekt → Praesentationsobjekt)<br />

87


Tabelle istAbgeleitetAus:<br />

istAbgeleitetAus(Kartengeometrieobjekt → Objekt, Basisobjekt → Objekt)<br />

Tabelle ObjektArtenKatalog:<br />

ObjektArtenKatalog(ObjektartNr, NASBezeichnung, Beschreibung NULL )<br />

Tabelle AttributArtenKatalog:<br />

AttributArtenKatalog(Kennung, NASBezeichnung, Beschreibung NULL ,<br />

Datentyp)<br />

Tabelle Codelisten:<br />

Codelisten(Name → AttributArtenKatalog, Nummer, Bezeichnung)<br />

Tabelle AttributZuweisung:<br />

AttributZuweisung(ObjektID → Objektversion, Kennung → AttributArten-<br />

Katalog, AttributWert)<br />

Tabelle insert (Fortführungsaufträge):<br />

insert(Anlass, ObjektID, Datum NULL )<br />

Tabelle delete (Fortführungsaufträge):<br />

delete(Anlass, ObjektID, Datum NULL )<br />

Tabelle replace (Fortführungsaufträge):<br />

replace(Anlass, ObjektID, Attributkennung, Attributwert, Datum NULL )<br />

Sicht Objektview (<strong>MRDB</strong>-Integration):<br />

Objektview(ObjektID, Objektgeometrie, Objektart)<br />

Sicht Attributview (<strong>MRDB</strong>-Integration):<br />

Attributview(ObjektID, Kennung, Wert)<br />

Sicht Namenview (<strong>MRDB</strong>-Integration):<br />

Namenview(ObjektID, Name)<br />

88


Anhang C<br />

Einheitswürfel dargestellt durch<br />

gml:Surface<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

0 0<br />

0 1<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

0 1<br />

1 1<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

89


1 1<br />

1 0<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

1 0<br />

0 0<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

(0,1) (1,1)<br />

(0,0)<br />

Y<br />

(1,0)<br />

Abbildung C.1: Darstellung des Einheitswürfels im R 2 .<br />

90<br />

X


Anhang D<br />

Abkürzungsverzeichnis<br />

AAA AFIS-ALKIS-ATKIS<br />

AdV Arbeitsgemeinschaft der Vermessungsverwaltungen der Länder der<br />

B<strong>und</strong>esrepublik Deutschland<br />

AFIS Amtliches Festpunktinformationssystem<br />

ALB Automatisiertes Liegenschaftsbuch<br />

ALK Automatisierte Liegenschaftskarte<br />

ALKIS Amtliches Liegenschaftskatasterinformationssystem<br />

API Application programming interface<br />

ATKIS Amtliches Topographisch-Kartographisches Informationssystem<br />

BKG B<strong>und</strong>esamt für Kartographie <strong>und</strong> Geodäsie<br />

CRS Coordinate Reference System<br />

DBMS Datenbankmanagementsystem<br />

DEA Deterministischer endlicher Automat<br />

DGM Digitales Geländemodell<br />

DLM Digitales Landschaftsmodell<br />

DOM Document Object Model<br />

DTD Document Type Definition<br />

FES Filter Encoding Specification<br />

GML Geography Markup Language<br />

91


ISO International Organization for Standardization<br />

JTS JTS Topology Suite<br />

LGPL GNU Lesser General Public License<br />

<strong>MRDB</strong> Multi-Repräsentations-Datenbank<br />

MVC Model View Controller<br />

NAS Normbasierte Austauschschnittstelle<br />

NREO Nicht-raumbezogenes Elementarobjekt<br />

OGC Open Geospatial Consortium<br />

OK Objektartenkatalog<br />

REO Raumbezogenes Elementarobjekt<br />

SAX Simple API for XML<br />

SSH Secure Shell<br />

StAX Streaming API for XML<br />

SQL Structured Query Language<br />

UML Unified Modeling Language<br />

URN Uniform Resource Name<br />

W3C World Wide Web Consortium<br />

WCS Web Coverage Service<br />

WFS Web Feature Service<br />

WIPKA Wissensbasierter Photogrammetrisch-Kartographischer Arbeitsplatz<br />

WMS Web Map Service<br />

XML Extensible Markup Language<br />

XSD XML Schema Definition<br />

ZUSO Zusammengesetztes Objekt<br />

92


Abbildungsverzeichnis<br />

2.1 Darstellung eines XML-Dokuments in einer Baumstruktur. . . . . . . . . 9<br />

2.2 UML-Klassendiagramm der Geometrietypen von GML 3.0 aus [OGC02]. 13<br />

3.1 Das AAA-Anwendungsschema. . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

3.2 Pakete des AAA-Basisschemas. Eigene Darstellung nach [AdV06]. . . . . 21<br />

3.3 Die vier Basisklassen für Objekte im Zusammenhang. Eigene Darstellung<br />

nach [AdV06]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />

3.4 Aufbau eines ZUSOs am Beispiel einer Straße. Eigene Darstellung nach<br />

[AdV06]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />

3.5 Darstellung der Klassenhierarchie im AAA-Anwendungsschema anhand<br />

der Fachobjekte AX Friedhof, AX Strasse <strong>und</strong> AX Strassenachse. . . . . 27<br />

3.6 Beziehungen zwischen einem ZUSO <strong>und</strong> zwei REOs, die Bestandteil des<br />

ZUSOs sind. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

3.7 Kartenausschnitt eines ATKIS-NAS-Testdatensatzes im BASIS-DLM. Visualisiert<br />

mit GML Viewer von Snowflake Software [Sno06] . . . . . . . . 31<br />

3.8 Kodierung des UML-Anwendungsschemas nach XML Schema. . . . . . . 34<br />

4.1 Entity-Relationship-Diagramm für das ATKIS-Datenmodell . . . . . . . 40<br />

4.2 Aufbau der <strong>MRDB</strong> nach [Con97]<strong>und</strong> [Man02]. . . . . . . . . . . . . . . . 50<br />

5.1 Aufbau des MVC-Entwurfsmusters. . . . . . . . . . . . . . . . . . . . . . 54<br />

5.2 Verwendung des Observer-Patterns im Kontext des NAS-Importers. . . . 55<br />

5.3 Verwendung des Adapter-Patterns im Kontext des NAS-Importers. . . . 56<br />

5.4 DEA zur Darstellung der Funktionsweise des Importers. . . . . . . . . . . 57<br />

5.5 Datenfluss im Ablauf des NAS-Importers von der NAS-Datei bis in die<br />

Datenbank. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />

5.6 UML-Klassendiagramm des Package view. . . . . . . . . . . . . . . . . . 60<br />

5.7 UML-Klassendiagramm des Package controller. . . . . . . . . . . . . . 61<br />

5.8 UML-Klassendiagramm des Package model. . . . . . . . . . . . . . . . . 62<br />

5.9 Screenshot des NAS-Importers mit grafischer Benutzeroberfläche (GUI). . 63<br />

5.10 Screenshot der Konsolenversion des NAS-Importers. . . . . . . . . . . . . 64<br />

5.11 UML-Klassendiagramm des Package util. . . . . . . . . . . . . . . . . . 65<br />

5.12 Kartenausschnitt des Testdatensatzes mit Punkt- <strong>und</strong> Liniengeometrien.<br />

Visualisiert mit OpenJUMP. . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

93


5.13 Kartenausschnitt des Testdatensatzes inklusive der flächenförmigen Geometrien.<br />

Visualisiert mit OpenJUMP. . . . . . . . . . . . . . . . . . . . . 69<br />

5.14 Ein- <strong>und</strong> Ausgabe der GML-Geometrien. . . . . . . . . . . . . . . . . . . 70<br />

6.1 Klassenzuordnungen für die semantische Filterung anhand des BASIS-<br />

DLM <strong>und</strong> DLM1000 (Ausschnitt). Eigene Darstellung nach [LMT04]. . . 77<br />

6.2 Datenfluss von AAA-NAS-Daten in der <strong>MRDB</strong> inklusive Im- <strong>und</strong> Export. 78<br />

6.3 Export von NAS-Daten aus einer ATKIS-Datenbank. . . . . . . . . . . . 79<br />

C.1 Darstellung des Einheitswürfels im R 2 . . . . . . . . . . . . . . . . . . . . 90<br />

94


Tabellenverzeichnis<br />

3.1 Objektartenkatalogeintrag AX Friedhof aus dem ATKIS-OK Basis-DLM 33<br />

5.1 Verarbeitungszeiten der betrachteten Parser-Implementierungen mit vollständig<br />

implementiertem NAS-Importer (Messung 1). . . . . . . . . . . . 71<br />

5.2 Verarbeitungszeiten der betrachteten Parser-Implementierungen mit verändertem<br />

Importprogramm (Messung 2). . . . . . . . . . . . . . . . . . . 72<br />

5.3 Verarbeitungszeiten des NAS-Importers mit Nutzung des internen Datenmodells<br />

aber ohne Kommunikation mit dem DB-Server (Messung 3). . . 73<br />

95


Literaturverzeichnis<br />

[AdV06] AdV. Dokumentation zur Modellierung der Geoinformationen des amtlichen<br />

Vermessungswesens (GeoInfoDok). Arbeitsgemeinschaft der Vermessungsverwaltungen<br />

der Länder der B<strong>und</strong>esrepublik Deutschland (AdV), 5.1 Aufl.,<br />

2006. URL http://www.adv-online.de/.<br />

[AdV07] AdV. Das externe Modell, Datenaustausch (ZIP-Datei mit sämtlichen XML-<br />

Schemadateien). Arbeitsgemeinschaft der Vermessungsverwaltungen der<br />

Länder der B<strong>und</strong>esrepublik Deutschland (AdV), 5.1.1 Aufl., 2007. URL<br />

http://www.adv-online.de/.<br />

[Bri05] T. Brinkhoff. Geodatenbanksysteme in Theorie <strong>und</strong> Praxis – Einführung<br />

in objektrelationale Geodatenbanken unter besonderer Berücksichtigung von<br />

Oracle Spatial. Wichmann, 1 Aufl., 2005.<br />

[BT07] BEOLINGUS-Team. BEOLINGUS - Online-Wörterbuch Englisch-Deutsch<br />

<strong>und</strong> Deutsch-Englisch. Technische Universität Chemnitz, 2007. URL http:<br />

//www.beolingus.de.<br />

[Con97] S. Conrad. Föderierte Datenbanksysteme - Konzepte der Datenintegration.<br />

Springer, 1 Aufl., 1997.<br />

[GHJV95] E. Gamma, R. Helm, R. Johnson, J. Vlissides. Design Patterns - Elements of<br />

Reusable Object-Oriented Software. Addison-Wesley Longman, 1 Aufl., 1995.<br />

[GT07a] GeoTools-Team. GeoTools - The Open Source Java GIS Toolkit. GeoTools<br />

Project, 2007. URL http://geotools.codehaus.org.<br />

[GT07b] GeoTools-Team. GeoTools Users Guide. GeoTools Project, 2007. URL http:<br />

//docs.codehaus.org/display/GEOTDOC/Home.<br />

[ISO03] ISO. ISO 19107:2003 - Geographic information – Spatial schema. International<br />

Organization for Standardization, 90.92 Aufl., 2003. URL<br />

http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?<br />

CSNUMBER=26012.<br />

[ISO06] ISO. ISO 19118:2005 - Geographic information – Encoding. International<br />

Organization for Standardization, 60.60 Aufl., 2006. URL http://www.iso.<br />

org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=37796.<br />

96


[ISO07] ISO. ISO/PRF 19136 - Geographic information – Geography Markup<br />

Language (GML). International Organization for Standardization, 50.20<br />

Aufl., 2007. URL http://www.iso.org/iso/en/CatalogueDetailPage.<br />

CatalogueDetail?CSNUMBER=32554.<br />

[KGB04] R. Kothuri, A. Godfrind, E. Beinat. Pro Oracle Spatial. Apress, 1 Aufl.,<br />

2004.<br />

[KM03] M. Klettke, H. Meyer. XML & <strong>Datenbanken</strong> - Konzepte, Sprachen <strong>und</strong> Systeme.<br />

dpunkt.Verlag, 1 Aufl., 2003.<br />

[LBTR04] R. Lake, D. S. Burggraf, M. Trninic, L. Rae. Geography Mark-Up Language:<br />

Fo<strong>und</strong>ation for the Geo-Web. Wiley, 1 Aufl., 2004.<br />

[Lip06] U. Lipeck. Skript zur Vorlesung Gr<strong>und</strong>lagen der Datenbanksysteme. <strong>Fachgebiet</strong><br />

<strong>Datenbanken</strong> <strong>und</strong> <strong>Informationssysteme</strong>, Leibniz Universität Hannover,<br />

2006. URL http://www.dbs.uni-hannover.de.<br />

[LMT04] U. W. Lipeck, D. Mantel, M. Tiedge. Identifikation kartographischer Objekte<br />

in föderierten räumlichen <strong>Datenbanken</strong>. Techn. Ber. DB-01/2004. Institut<br />

für <strong>Informationssysteme</strong>, Universität Hannover, 2004. URL http://www.<br />

dbs.uni-hannover.de.<br />

[Man02] D. Mantel. Konzeption eines Föderierungsdienstes für geographische <strong>Datenbanken</strong>;<br />

Diplomarbeit. <strong>Fachgebiet</strong> <strong>Datenbanken</strong> <strong>und</strong> <strong>Informationssysteme</strong>,<br />

Universität Hannover, 2002. URL http://www.dbs.uni-hannover.de.<br />

[Nie07] R. Niehaus. Lokale Matching- <strong>und</strong> Update- Verfahren für eine räumliche<br />

Multi-Repräsentations-Datenbank; Bachelorarbeit. <strong>Fachgebiet</strong> <strong>Datenbanken</strong><br />

<strong>und</strong> <strong>Informationssysteme</strong>, Leibniz Universität Hannover, 2007. URL http:<br />

//www.dbs.uni-hannover.de/.<br />

[OGC02] OGC. OpenGIS R○Geography Markup Language (GML) Encoding Specification.<br />

Open Geospatial Consortium Inc., 3.0 Aufl., 2002. URL http:<br />

//portal.opengeospatial.org/files/?artifact_id=7174.<br />

[OGC05a] OGC. GML Point Profile. Open Geospatial Consortium Inc., 0.4 Aufl., 2005.<br />

URL http://portal.opengeospatial.org/files/?artifact_id=11606.<br />

[OGC05b] OGC. OpenGIS R○Filter Encoding Implementation Specification. Open<br />

Geospatial Consortium Inc., 1.1.0 Aufl., 2005. URL http://portal.<br />

opengeospatial.org/files/?artifact_id=8340.<br />

[OGC05c] OGC. Web Feature Service Implementation Specification. Open Geospatial<br />

Consortium Inc., 1.1 Aufl., 2005. URL http://portal.opengeospatial.<br />

org/files/?artifact_id=8339.<br />

97


[OGC06a] OGC. Geography Markup Language (GML) simple features profile. Open<br />

Geospatial Consortium Inc., 1.0.0 Aufl., 2006. URL http://portal.<br />

opengeospatial.org/files/?artifact_id=15201.<br />

[OGC06b] OGC. OpenGIS R○Web Map Server Implementation Specification. Open<br />

Geospatial Consortium Inc., 1.3.0 Aufl., 2006. URL http://portal.<br />

opengeospatial.org/files/?artifact_id=14416.<br />

[OGC06c] OGC. Web Coverage Service (WCS) Implementation Specification. Open<br />

Geospatial Consortium Inc., 1.1.0 Aufl., 2006. URL https://portal.<br />

opengeospatial.org/files/?artifact_id=18153.<br />

[Opi03] H. Opitz. Entwurf <strong>und</strong> Implementierung einer kartographischen Datenbank<br />

nach dem AFIS-ALKIS-ATKIS-Referenzmodell; Studienarbeit. <strong>Fachgebiet</strong><br />

<strong>Datenbanken</strong> <strong>und</strong> <strong>Informationssysteme</strong>, Leibniz Universität Hannover,<br />

2003. URL http://www.dbs.uni-hannover.de/ftp/studienarbeiten/<br />

opitz/studienarbeit.pdf.<br />

[SKPH03] W. Schmidt, J. Knappen, H. Partl, I. Hyna. LATEX2ε -Kurzbeschreibung.<br />

Walter Schmidt, 2 Aufl., 2003. URL ftp://dante.ctan.org/tex-archive/<br />

info/lshort/german/.<br />

[Sno06] SnowflakeSoftware. GML Viewer - Generic GML viewer capable of reading<br />

any GML2 or GML3 dataset. (kostenlos; Registrierung erforderlich).<br />

Snowflake Software, 3 Aufl., 2006. URL http://www.snowflakesoftware.<br />

co.uk/products/gmlviewer/index.htm.<br />

[Ueb06] R. Ueberholz. AAA <strong>und</strong> ETRS89/UTM in Niedersachsen - Strategie <strong>und</strong> Einführungskonzept.<br />

LGN, 2006. URL http://cdl.niedersachsen.de/blob/<br />

images/C21110566_L20.pdf.<br />

[Ull06] C. Ullenboom. Java ist auch eine Insel. Programmieren mit der Java Standard<br />

Edition Version 6. Galileo Computing, 6 Aufl., 2006. URL http:<br />

//galileocomputing.de/openbook/javainsel6/.<br />

[Viv06] VividSolutions. JTS Topology Suite - an API for modelling and manipulating<br />

2-dimensional linear geometry. (LGPL). Vivid Solutions, 1 Aufl., 2006. URL<br />

http://www.vividsolutions.com/jts/JTSHome.htm.<br />

[W3C01] W3C. XML Linking Language (XLink) Version 1.0. World Wide Web Consortium<br />

(W3C), 1 Aufl., 2001. URL http://www.w3.org/TR/xlink/.<br />

[W3C04a] W3C. XML Schema Part 1: Structures (Second Edition). World Wide<br />

Web Consortium (W3C), 1 Aufl., 2004. URL http://www.w3.org/TR/<br />

xmlschema-1/.<br />

98


[W3C04b] W3C. XML Schema Part 2: Datatypes (Second Edition). World Wide<br />

Web Consortium (W3C), 1 Aufl., 2004. URL http://www.w3.org/TR/<br />

xmlschema-2/.<br />

[W3C06a] W3C. Extensible Markup Language (XML) 1.0 (Fourth Edition). World<br />

Wide Web Consortium (W3C), 1 Aufl., 2006. URL http://www.w3.org/<br />

TR/2006/REC-xml-20060816/.<br />

[W3C06b] W3C. Namespaces in XML 1.0 (Second Edition). World Wide Web<br />

Consortium (W3C), 1 Aufl., 2006. URL http://www.w3.org/TR/2006/<br />

REC-xml-names-20060816/.<br />

[W3C07] W3C. XML Path Language (XPath) 2.0. World Wide Web Consortium<br />

(W3C), 2 Aufl., 2007. URL http://www.w3.org/TR/xpath20/.<br />

99


Erklärung<br />

Hiermit versichere ich, dass ich die vorliegende Arbeit <strong>und</strong> die zugehörige Implementierung<br />

selbständig verfasst <strong>und</strong> dabei nur die angegebenen Quellen <strong>und</strong> Hilfsmittel verwendet<br />

habe.<br />

Hannover, 11. September 2007<br />

Michael Schäfers<br />

100

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!