! " # " eingereicht von Malte Ahrens HOCHSCHULE KARLSRUHE –TECHNIK UND WIRTSCHAFT Fakultät Geomatik – Diplomstudiengang Kartographie und Geomatik Dezember 2010 HOCHSCHULE KARLSRUHE –TECHNIK UND WIRTSCHAFT Fakultät Geomatik – Diplomstudiengang Kartographie und Geomatik Diplomarbeit zur Erreichung des akademischen Grades Dipl.-Ing. (FH) für Kartographie und Geomatik für Herrn Malte Ahrens Matrikelnummer: 21779 Thema: Integration raumbezogener Daten in ein Umweltinformationssystem ! # " # " Im Rahmen der Projekte WISDOM und CAWa entwickelt das Deutsche Fernerkundungsdatenzentrum (DFD), als Institut des Deutschen Luft- und Raumfahrtzentrum (DLR), ein internetbasiertes Umweltinformationssystem für das Mekong Delta in Vietnam und fünf Länder Zentralasiens. Die Konzeption des Systems sieht vor, dass Inhalte von den Nutzern bereitgestellt und in den Speichersystemen gespeichert und verwaltet werden. Für die Integration von Geodaten wurde vom DFD ein Datenaustauschformat („WISDOM Geodata Exchange Format“, WGEF) entwickelt, das als „Behälter“ für die verschiedenen Bestandteile eines Geodatensatzes dient. Bestandteile eines Geodatensatzes sind neben den Geometriedaten im Rasteroder Vektordateiformat, eine Dokumentation der Daten und deren Erhebung mittels Metadaten und Regeln für die Symbolisierung. In dieser Diplomarbeit wird eine grafische Oberfläche für die schrittweise Eingabe der Bestandteile eines Geodatensatzes entwickelt. Diese umfasst Funktionen zum Hochladen von Geodaten und Formulare für die Eingabe von Metadaten und Darstellungsregeln. Die Bestandteile werden durch die entwickelte Software in das WGEF-Dateiformat überführt und die Integration in das Umweltinformationssystem durchgeführt. Des Weiteren wird die Integrationssoftware erweitert, so dass Messdaten von in-situ Sensormessstationen automatisch in das System integriert werden können. Rahmenbedingungen Erstprüfer Ausgabedatum: 15.09.2010 Prof. Dr. Bernhard Bürg (Hochschule Karlsruhe) Abgabedatum: 13.12.2010 Zweitprüferin Bearbeitungszeit: 4 Monate Dipl.-Informatikerin Verena Klinger (DLR) Mit dieser Diplomarbeit schließe ich mein Studium der Kartographie und Geomatik ab. Während der Studienzeit konnte ich den faszinierenden Wandel hin zur digitalen Kartographie hautnah miterleben. Google legte zu Beginn meines Studiums mit Google Maps™ im Jahre 2005, durch die gute Bedienbarkeit und die kostenlose Bereitstellung, den Grundstein für die Entwicklung von Kartenanwendungen im Internet hin zu einer digitalen Kulturtechnik. Google handelt aus finanziellem Interesse. Kartennutzer werden als Konsumenten gesehen und restriktive Lizenzen beschränken künstlich die Kreativität der Menschen. Die Kreativität ist mittlerweile entfesselt worden. Mit dem freien Projekt OpenStreetMap entsteht ein Weltwunder der Neuzeit, das ich, zusammen mit hunderttausenden anderen Menschen mitgestalten kann. Man versteht das Ausmaß erst, wenn man sich veranschaulicht, dass dabei ein Bild der Erde mit unglaublicher Detaildichte gezeichnet wird, das gedruckt eine Breite von 80km hätte. Getrieben von der Faszination, gemeinschaftlich etwas Großes zu schaffen. We now use the country itself, as its own map, and I assure you it does nearly as well. (Lewis Carroll, 1893) Besonders danken möchte ich meinen Eltern Uwe und Gabi und meinen beiden Geschwistern Meike und Wibke, die in schwierigen Situationen zu mir gestanden und mir Mut zugesprochen haben. Für die Betreuung meiner Diplomarbeit und das entgegengebrachte Vertrauen danke ich Verena Klinger und auch Thilo Wehrmann. Binh für den leck‘ren vietnamesischen Kaffee, der so gut nach Schokolade riecht und Magith als Vorbild dafür, wie man die Arbeit auch unter Zeitdruck zu Ende bringt. Danke auch an Herrn Prof. Dr. Bürg, der die kurzfristige Abgabe möglich gemacht hat. Vorwort .......................................................................................................................... IIV Inhaltsverzeichnis ............................................................................................................ IVI Abbildungsverzeichnis...................................................................................................... VI Tabellenverzeichnis ......................................................................................................... VII Listings (Programmausdrücke)........................................................................................ VII Abkürzungsverzeichnis ..................................................................................................... IX Glossar ...............................................................................................................................X 1 Einleitung.............................................................................................................11 1.1 Problembeschreibung....................................................................................... 12 1.2 Zielsetzung....................................................................................................... 14 1.3 Vorgehensweise................................................................................................ 15 2 Stand der Technik ................................................................................................16 2.1 Geodaten ......................................................................................................... 16 2.1.1 Datenformate ...................................................................................... 16 2.1.2 Metadaten ........................................................................................... 18 2.1.3 Visualisierung ...................................................................................... 19 2.2 Geodatendienste .............................................................................................. 20 2.2.1 Web Processing Service (WPS) ............................................................ 20 2.2.2 Sensor Observation Service (SOS) ....................................................... 21 2.3 Internetbasierte Geoinformationssysteme ......................................................... 22 2.4 Softwarearchitekturmuster ............................................................................... 22 2.4.1 Model – View – Controller (MVC) ..................................................... 22 2.4.2 Representational State Transfer (REST) .............................................. 24 2.4.3 Muster für grafische Benutzeroberflächen ............................................ 24 3 „Status quo“ der Datenintegration in ELVIS .......................................................25 3.1 ELVIS Dateninhalte......................................................................................... 25 3.2 Automatische Datenintegration ....................................................................... 26 3.2.1 WISDOM Geodata Exchange Format (WGEF).................................. 26 3.2.2 DatenEingangsPortal (DEP)................................................................ 27 4 Entwicklung eines grafischen Assistenten für die Zusammenstellung und Integration von Geodaten in ELVIS .....................................................................32 4.1 Rahmenbedingungen ....................................................................................... 32 4.1.1 Google Web Toolkit (GWT)............................................................... 32 4.1.2 SmartGWT ......................................................................................... 33 4.1.3 Grafische Benutzeroberfläche von ELVIS ............................................ 33 IV 4.2 Anforderungserhebung..................................................................................... 35 4.2.1 Nichtfunktionale Anforderungen......................................................... 35 4.2.2 Funktionale Anforderungen................................................................. 36 4.3 Entwurfsplanung.............................................................................................. 38 4.3.1 Teilkonzepte........................................................................................ 38 4.3.2 Gesamtkonzept.................................................................................... 41 4.4 Implementierung ............................................................................................. 50 4.4.1 Grafische Oberfläche ........................................................................... 50 4.4.2 Funktionen.......................................................................................... 55 4.5 Ergebnisse ........................................................................................................ 63 4.5.1 Diskussion ........................................................................................... 68 5 Erweiterung DEP für den Import von Sensormessdaten ......................................69 5.1 Rahmenbedingungen ....................................................................................... 70 5.1.1 Sensoren und Sensormessdaten in ELVIS ............................................ 70 5.2 Anforderungserhebung..................................................................................... 72 5.2.1 Nichtfunktionale Anforderungen......................................................... 72 5.2.2 Funktionale Anforderungen................................................................. 72 5.3 Entwurfsplanung.............................................................................................. 74 5.3.1 Teilkonzepte........................................................................................ 74 5.4 Implementierung ............................................................................................. 79 5.4.1 Erweiterung ......................................................................................... 79 5.4.2 Verarbeitung........................................................................................ 80 5.4.3 Einlesen & Validierung........................................................................ 81 5.5 Ergebnisse ........................................................................................................ 85 5.5.1 Aufruf.................................................................................................. 85 5.5.2 Softwaretest ......................................................................................... 85 6 Schlussbetrachtung ...............................................................................................87 6.6 Zusammenfassung............................................................................................ 87 6.7 Fazit................................................................................................................. 88 Quellenverzeichnis ........................................................................................................... 89 Anhang ............................................................................................................................ 95 V Abbildung 1.01 – Kartenansicht des „EnvironmentaL Visualisation and Information System“ (ELVIS) ................................................................................. 12 Abbildung 2.01 – Kernprofil des ISO 19115 Metadatenstandards ................................... 18 Abbildung 2.02 – Schematische Darstellung der Integration von Sensormessdaten .......... 21 Abbildung 2.03 – UML-Diagramm der MVC-Architektur in ELVIS .............................. 23 Abbildung 3.01 – ELVIS Systemarchitektur .................................................................... 27 Abbildung 3.02 – Automatische Datenintegration mittels des DatenEingangsPortal........ 28 Abbildung 3.03 – WPS Kapselung des DEP .................................................................... 30 Abbildung 4.01 – ELVIS Layout Gestaltung.................................................................... 34 Abbildung 4.02 – WGEF Zusammenstellung durch einen WPS-Dienst .......................... 39 Abbildung 4.03 – Datenfluss ........................................................................................... 43 Abbildung 4.04 – Bedienkonzept..................................................................................... 44 Abbildung 4.05 – Layoutkonzept..................................................................................... 46 Abbildung 4.06 – Startbildschirm .................................................................................... 48 Abbildung 4.07 – Initialisierung der Editoren für Datensatzbestandteile.......................... 49 Abbildung 4.08 – Schaltflächen für die Navigation .......................................................... 49 Abbildung 4.09 –Navigationsschaltflächen zum Abschließen der Aufgabe ....................... 50 Abbildung 4.10 – Verknüpfung der JAVA-Klassen mit den Toolboxes in der GUI Konfigurationsdatei ............................................................................. 51 Abbildung 4.11 – Instanziierung der Toolboxes............................................................... 51 Abbildung 4.12 – Initialisierung der Bearbeitungstabs am Beispiel eines Geodatensatzes . 55 Abbildung 4.13 – Funktion updateTabs(type) ................................................................. 56 Abbildung 4.14 – Sequenzdiagramm für den Aufruf des nächsten Bearbeitungsschritt..... 57 Abbildung 4.15 – Erstellung WGEF und Integration ...................................................... 61 Abbildung 4.16 – Startbildschirm .................................................................................... 63 Abbildung 4.17 – Eingabe von Geodaten......................................................................... 64 Abbildung 4.18 – Metadateneingabe................................................................................ 65 Abbildung 4.19 – Eingabe Darstellungsvorschriften......................................................... 66 Abbildung 4.20 – Datenintegration ................................................................................. 67 Abbildung 5.01 – Datenbankmodellierung für die Verwaltung von Sensoren und Sensormesswerte .................................................................................. 70 Abbildung 5.02 – WPS Kapselung des DatenEingangsPortal........................................... 74 Abbildung 5.03 – JAVA-Klassen ...................................................................................... 76 Abbildung 5.04 – Verarbeitung der Sensormessdaten....................................................... 80 Abbildung 5.05 – Validierung der Dateneingaben ........................................................... 82 VI Tabelle 3.01 – ELVIS Dateninhalte ................................................................................. 25 Tabelle 4.01 – Nichtfunktionale Anforderungen.............................................................. 35 Tabelle 4.02 – Funktionale Anforderungen...................................................................... 36 Tabelle 4.03 – Schritte für die Zusammenstellung und Integration eines WGEF Datensatzes in ELVIS .............................................................................. 42 Tabelle 4.04 – Overview Toolbox, Auswahl Datensatztyp und Dateneingabe .................. 47 Tabelle 4.05 – Zu speichernde Daten für einen Datensatztyp .......................................... 52 Tabelle 4.06 – Ereignistypen für die Kommunikation zwischen Toolboxes...................... 54 Tabelle 5.01 – Nichtfunktionale Anforderungen.............................................................. 72 Tabelle 5.02 – Funktionale Anforderungen...................................................................... 72 Listing 3.01 – Ordner- und Dateistruktur eines Geodatensatzes nach dem WGEF Standard (Zip-Archiv) ............................................................................................. 26 Listing 3.02 – Kommandozeilenaufruf des DatenEingangsPartal ..................................... 28 Listing 3.03 – HTTP Anfrage zur Bestimmung der Kennziffer des Datenanbieters („Provider“).............................................................................................. 29 Listing 3.04 – HTTP Antwort zur Bestimmung der Kennziffer des Datenanbieters......... 29 Listing 3.05 – HTTP Anfrage zur Bestimmung der Kennziffer der thematischen Gruppe 29 Listing 3.06 – HTTP Antwort zur Bestimmung der Kennziffer der thematisch Gruppe .. 30 Listing 3.07 – Aufruf des gekapselten DatenEingangsPortal über das Internet ................. 30 Listing 4.01 – Beispielaufruf des WPS Dienstes zum Erstellen eines WGEF Archivs........ 40 Listing 4.02 – Datenmodellierung innerhalb der OverviewTBDataSource....................... 52 Listing 4.03 – Umsetzung der Datenmodellierung der OverviewTBDataSource in JAVA 52 Listing 4.04 – „Weiter“-Schaltfläche in der Control Toolbox, NextEvent Ereignis........... 58 Listing 4.05 – Verarbeitung des NextEvent-Ereignisses durch die DataEntry Toolbox..... 58 Listing 4.06 – Veranlassen der Speicherung der Eingaben ............................................... 59 Listing 4.07 – Validierung und Speicherung innerhalb des MetadataTabController ........ 59 Listing 4.08 – Weiterleitung der Antwort an den DataEntry-Controller .......................... 59 Listing 4.09 – Verarbeitung der Antwort durch den DataEntry-Controller...................... 60 Listing 4.10 – Generieren eines CompleteEvent: Funktion tabCompletEvent.................. 60 Listing 4:11 – Reaktion auf das CompleteEvent durch DataEntryTB.java ....................... 60 Listing 4.12 – Reaktion auf das „CompleteEvent“ durch die OverviewTB ....................... 60 Listing 4.13 – Setzen des Status des Bearbeitungsschrittes in der OverviewTB ................. 61 Listing 5.01 – Kodierung von Sensormessdaten im kommagetrennten CSV-Format........ 71 Listing 5.02 – Bestimmen der UUID anhand des Modul Akronyms über die Tabelle observations.module ................................................................................. 78 VII Listing 5.03 – Speicherung der Werte in der Tabelle observations.{uuid} über „Copy“ (PostgreSQL) ........................................................................................... 78 Listing 5.04 – Speicherung der Werte in der Tabelle observations.{uuid} über eine INSERT-Anweisung ................................................................................ 79 Listing 5.05 – Weiche zum Aufruf der Startfunktion ....................................................... 79 Listing 5.06 – Adresse des Sensor WPS Dienstes.............................................................. 80 Listing 5.07 – Einlesen der Dateien ................................................................................. 81 Listing 5.08 – Klasse Measurements................................................................................. 81 Listing 5.09 – Typumwandlung von String zu Date der Werte in der Spalte „time“ ........ 82 Listing 5.10 – Überführung der Ausgelesenen Werte in Measurement-Objekte ............... 83 Listing 5.11 – Fehlermeldung bei Verletzung des Fremdschlüssel-Contstraint ................. 84 Listing 5.12 – Methode save() der Klasse Module.java ..................................................... 84 Listing 5.13 – Aufruf der Erweiterung.............................................................................. 85 Listing 5.14 – Beispieldatensatz Sensormessdaten (measurements.csv) ............................. 85 VIII CAWa Central Asian Water DEP DatenEingangsPortal / DataEntryPortal DFD Deutsches Fernerkundungsdatenzentrum DLR Deutsches Zentrum für Luft- und Raumfahrt ELVIS EnvironmentaL Visualisation and Information System GDI Geodateninfrastruktur GIS Geoinformationssystem GML Geography Markup Language GUI Graphical User Interface GWT Google Web Toolkit HTTP Hyper Text Transfer Protocol ISO International Standards Organisation KML Keyhole Markup Language MVC Model-View-Controller OGC Open Geospatial Consortium REST Representational State Transfer SLD Styled Layer Descriptor SOS Sensor Observation Service SWE Sensor Web Enablement URI Uniform Resource Identifier URL Uniform Resource Locator UUID Universally Unique Identifier WGEF WISDOM Geodata Exchange Format WISDOM Water Related Information System for the Sustainable Development of the Mekong, Vietnam WMS Web Map Service WPS Web Processing Service XML Extensible Markup Language IX Ein Assistent (engl. „Assistant“ oder „Wizard“) ist in der Datenverarbeitung eine Softwarekomponente, die den Nutzer bei der Erreichung eines Aufgabenziels unterstützt. Dafür wird der Nutzer, unter Anleitung, durch eine Folge von Teilschritten geführt. Nach Beendigung eines Teilschrittes kann er mit einer „Weiter“-Schaltfläche zum folgenden Schritt navigieren. Mit einer „Zurück“-Schaltfläche lassen sich zuvor getätigte Eingaben überprüfen und gegebenenfalls korrigieren. Softwareassistenten finden häufig bei Installationsroutinen von Desktop-Anwendungen oder beispielsweise bei Bestellprozessen in Online-Shops Anwendung. Unter Datenintegration wird in dieser Arbeit das Überführen von Daten in Inhalte des Informationssystems verstanden. Dafür werden die Daten von einem Datenlieferanten bereitgestellt und in den Datenstrukturen des Zielsystems gespeichert. Das Ziel des Vorgangs ist es die Daten innerhalb des Informationssystems für Analysen und die Darstellung verfügbar zu machen. Als Datensatz wird in dieser Arbeit eine Sammlung von Dateien verstanden, die zusammen alle benötigten Informationen für eine erfolgreiche Integration in das Informationssystem enthalten. Die Vollständigkeit legt ein definierter Standard fest. Ein Datensatz vom Typ „Geodaten“ gilt z. B. nach dem „WISDOM Geodata Exchange Format“ als vollständig, wenn Geodaten, Metadaten, und Darstellungsregeln innerhalb einer bestimmten Ordnerstruktur in einem Zip-Archiv vorliegen. Einzelne Dateien eines Datensatzes werden als Datensatzbestandteile oder Datensatzelemente bezeichnet. Eine grafische Benutzeroberfläche (Graphical User Interface, GUI) ist ein Hilfsmittel für die Bedienung eines technischen Systems durch Menschen. Sie besteht aus grafischen Komponenten, die in einem Layout angeordnet sind und der Interaktion, Dateneingabe und Datenpräsentation dienen. Die Bedienung erfolgt mit einem Zeigergerät und einer Tastatur. X Die Natur beeinflusst das Leben auf der Erde - der Mensch beeinflusst die Natur. Technologie hilft Veränderungen in unserer Umwelt zu erkennen, den Grund dafür zu verstehen und gezielt zu handeln. Daten bilden das Gedächtnis und erlauben über Datenverarbeitung den Blick auf Vergangenes, die Gegenwart und die vermeintliche Zukunft. Die gewonnenen Informationen können die Grundlage für zukünftiges Handeln sein, um das menschliche Zusammenleben auf der Erde positiv zu gestalten. Durch das Bevölkerungswachstum, Umweltverschmutzung, Klimawandel und den kontinuierlich steigenden Wasserverbrauch wird es zukünftig vermehrt zu Konflikten um die Ressource Süßwasser kommen. Die beiden Projekte WISDOM1 und CAWa2 adressieren diese Problematik. Mit Hilfe von Fernerkundungsdaten und Sensormessstationen werden großflächig Daten zum Wasserhaushalt in den Regionen des Mekong Deltas und Zentralasiens gewonnen und verarbeitet. An diesen Projekten sind, neben dem Deutschen Fernerkundungsdatenzentrum (DFD) zahlreiche andere Organisationen an der Bearbeitung verschiedener Fragestellungen beteiligt. Die Ergebnisse sollen einem breiten Benutzerkreis zur Verfügung gestellt werden, der einerseits aus den beteiligten, deutschen Institutionen - andererseits aus Projektpartnern der Länder Zentralasiens und Vietnam besteht. Die gewonnen Erkenntnisse sollen Entscheidungen im Bereich der Planung zur Nutzung von Wasserressourcen unterstützten. Die technischen Werkzeuge werden von Menschen bedient und sollen einen einfachen Zugang zu den Informationen ermöglichen. Dabei sollten technische Details der Umsetzung für die Nutzer unsichtbar sein, damit diese sich auf ihr Fachwissen konzentrieren können und nicht an der Hürde der Bedienung des Systems scheitern. Daraus ergibt sich die wichtige Rolle der Schnittstellen zwischen Mensch und Technik. 1 WISODM - Water Related Information System for the Sustainable Development of the Mekong Homepage: http://www.wisdom.caf.dlr.de/intro_en.html 2 CAWa - Central Asian Water Homepage: http://www.cawa-project.net/ - 11 - ) Im Rahmen der Projekte WISDOM und CAWa entwickelt das DFD (Deutsches Fernerkundungsdatenzentrum), ein Institut des DLR (Deutsches Zentrum für Luft- und Raumfahrt), ein internetbasiertes Umweltinformationssystem mit dem Namen ELVIS (EnvironmentaL Visualisation and Information System). Das System stellt den Nutzern Informationen aus den Bereichen der Hydrologie, Soziologie und der Erdbeobachtung für die Regionen des Mekong Delta in Vietnam (Projekt WISDOM) und die fünf Länder Kasachstan, Usbekistan, Kirgisistan, Turkmenistan und Tajikistan in Zentralasien (Projekt CAWa) zur Verfügung. Abbildung 1.01 zeigt die grafische Oberfläche von ELVIS in der Kartenansicht. & % !$ '(" # Nutzer können innerhalb von ELVIS nach Datensätzen suchen. Dabei können zeitliche, räumliche und thematische Suchkriterien angegeben werden. Hat der Nutzer einen oder mehrere Datensätze identifiziert, die für ihn von Interesse sind, lassen sich die Daten als „Ebene“ zu einer Basiskarte hinzufügen. Neben Geodaten im Raster- oder Vektorformat, verwaltet das System unter anderem Sensormessstationen und erlaubt den Abruf von Messdaten dieser Stationen. - 12 - Die Konzeption des Systems sieht vor, dass Inhalte von Nutzern oder technischen Systemen bereitgestellt und innerhalb der ELVIS Speichersysteme gespeichert und verwaltet werden. Für die Integration von Geodaten wurde ein Datenaustauschformat WGEF (WISDOM Geodata Exchange Format,) entwickelt, das als „Behälter“ für die Bestandteile eines Geodatensatzes dient. Bestandteile des Geodatensatzes sind neben den Geometriedaten im Rasteroder Vektordateiformat (GeoTiff / ESRI Shapefile), eine Dokumentation der Daten und deren Erhebung mittels Metadaten nach der ISO 19115 Norm – Geographic Information3 und Regeln für die Symbolisierung nach dem SLD-Standard4 (Styled Layer Descriptor). Eine vom DFD entwickelte Datenintegrationssoftware nimmt einen WGEF-Datensatz entgegen und verteilt dessen Bestandteile in der Geodateninfrastruktur. Die automatische Integration von Sensormessdaten wird von der Software nicht unterstützt. Zur Erzeugung eines gültigen Datensatzes nach dem WGEF-Standard ist es für die Eingabe der Datensatzbestandteile zunächst notwendig verschiedene Programme lokal auf dem Rechner zu installieren und deren Bedienung zu erlernen. Die Bestandteile müssen in einem ZIP-Archiv in einer vorgegebenen Datei- und Ordnerstruktur zusammengestellt werden. Erst wenn diese Voraussetzungen erfüllt sind, ist die Datenintegration in das System möglich. Die Vorbereitungen für den Import sind zeitaufwendig und erfordern ein fundiertes technisches Wissen des Datenlieferanten über zugrunde liegende Datenstandards, Datenstrukturen und Vorgänge zum Einbinden der Daten in das System. 3 http://www.gdi-de.org/de_neu/thema/2009/c_thema_iso_uebersetzung.html (Abgerufen am 7.8.2010) 4 http://www.opengeospatial.org/standards/sld (Abgerufen am 7.8.2010) - 13 - Diese Diplomarbeit verfolgt zwei Ziele. Ein Ziel ist es, den Datenlieferanten ein Werkzeug an die Hand zu geben, um Geodaten für die Integration vorzubereiten und sie durch den Integrationsvorgang zu führen. Das zweite Ziel ist die Erweiterung der bestehenden Integrationssoftware für die Speicherung von Sensormessdaten. Für die Erreichung des ersten Ziels wird ein grafischer Assistent entworfen und in der Programmiersprache JAVA und mit den Frameworks GWT (Google Web Toolkit) und SmartGWT realisiert. Der Assistent unterstützt die Nutzer bei der Eingabe und der Zusammenstellung von Geodatensätzen nach dem WGEF-Standard, indem er Editoren für die einzelnen Datensatzbestandteile bereitstellt. Durch klar definierte Schritte und Handlungsanweisungen wird der Nutzer durch den Eingabeprozess geführt. Ein Studium der WGEF-Spezifikation wird überflüssig. Der Assistent stellt Funktionen und eine grafische Benutzeroberfläche bereit, um Geodaten hochzuladen, mittels Metadaten zu beschreiben, die grafische Darstellung festzulegen und den Integrationsprozess zu starten. Er fügt sich in die bestehende grafische Oberfläche ein, so dass eine Installation von proprietärer Einzelplatzsoftware nicht mehr notwendig ist. Das zweite Ziel besteht in der Erweiterung der bestehenden Integrationssoftware für den automatischen Import von Messdaten von in-situ Sensormessstationen in ELVIS. Der Software werden Messdaten als Eingabe übergeben. Diese werden ohne weitere Benutzerinteraktion verarbeitet und zu registrierten Sensoren hinzugefügt. Die Daten können nach der Integration durch das System abgerufen werden. Eine Registrierung von neuen Sensoren wird nicht angestrebt. - 14 - In Kapitel 1 wurde das Environmental Information and Visualisation System (ELVIS) kurz vorgestellt, die Problemstellung beschrieben und Ziele für die Lösung formuliert. Dieses Unterkapitel 1.3 beschreibt die Vorgehensweise zur Zielerreichung. Kapitel 2 gibt einen Einblick in den Stand der Technik. Das Kapitel beschreibt die technischen Grundlagen. Dafür wird auf die Architektur von Geoinformationssystemen eingegangen, verschiedene Aspekte von Geodaten wie die Kodierung in Datenformaten, deren Dokumentation mittels Metadaten und die kartografische Visualisierung mit dem SLDStandard vorgestellt. Für den Austausch und die Verarbeitung von Geodaten werden die beiden Dienste Web Processing Service und Sensor Observation Service des Open Geospatial Consortium eingeführt. Kapitel 3 beschreibt den aktuellen Entwicklungsstand der Datenintegration in ELVIS. Es wird auf die Rahmenbedingungen eingegangen, die durch die bisherigen Entwicklungsarbeiten vom DFD geschaffen wurden und die Grundlage für die folgenden Arbeiten bilden. Dazu wird eine Übersicht über die durch ELVIS verwalteten Inhalte und deren Speicherung gegeben. Darüber hinaus stellt das Kapitel die WGEF-Spezifikation und die Software für die automatische Integration von Geodaten in ELVIS vor. In Kapitel 4 wird der grafische Assistent für die Zusammenstellung und Integration von Geodaten in ELVIS entwickelt. Die Entwicklung führt über die Anforderungserhebung, der Entwurfsplanung hin zu der Implementierung des Konzeptes. Am Ende des Kapitels werden die Ergebnisse vorgestellt. In Kapitel 5 wird die bestehende Integrationssoftware für den Import von Sensormessdaten erweitert. Analog zur Vorgehensweise in Kapitel 4 werden Anforderungen an die Erweiterung erhoben, ein Konzept erstellt und das Konzept implementiert. Am Ende des Kapitels werden die Ergebnisse vorgestellt. In Kapitel 6 werden die Arbeiten aus den vorherigen Kapiteln zusammengefasst und ein Fazit gezogen. - 15 - Der Begriff Geodaten ist die Kurzform für geographische Daten. Dies sind Daten, denen über Koordinaten Orte auf der Erdoberfläche zugeordnet werden. Geodaten können einen direkten räumlichen Bezug haben, wenn sie Koordinaten innerhalb der Daten enthalten, oder einen indirekten Raumbezug haben, wenn die Daten keine Koordinaten enthalten, diese jedoch auf Objekte mit Raumbezug verweisen. Ein Bezugssystem legt die angenommene, dreidimensionale Gestalt der Erde fest (z. B. WGS845, Erde = Ellipsoid mit spezifischen Eigenschaften). Eine Projektion überführt Orte auf der Oberfläche des Bezugssystems auf eine Fläche (z. B. UTM, Projektion auf einen gedachten Schnittzylinder und Abrollen der Zylinderoberfläche). Damit werden den Orten auf der dreidimensionalen Oberfläche Koordinaten in einem zweidimensionalen Koordinatensystem zugewiesen. Dadurch lassen sich Geodaten auf ebenen Karten darstellen. Es entstehen dabei jedoch zwangsläufig Verzerrungen bei Winkeln und/oder Strecken und/oder Flächen. Für die Speicherung bzw. den Austausch von Geodaten lassen sich zwei verschiedene Formattypen unterscheiden. Vektordaten und Rasterdaten. Vektordaten besitzen als geometrische Primitiven Punkt, Linie und Fläche. Bei Rasterdaten ist die geometrische Primitive ein Pixel. Die geometrischen Primitiven werden in verschiedenen Datenformaten formatspezifisch modelliert. Geodaten können innerhalb eines Dateisystems oder in Datenbanksystemen gespeichert werden. Ein ESRI-Shapefile ist ein Datenformat für die Speicherung von Vektordaten. Es wurde von der Firma ESRI (Environmental Systems Research Institute) bereits Anfang der 1990er entwickelt6 und ist zu einem Quasi-Standard im Umfeld von Geodaten geworden. Durch die weite Verbreitung von ESRI-Software liegt eine große Anzahl an Daten in diesem Da- 5 http://de.wikipedia.org/wiki/World_Geodetic_System_1984 (Stand: 17.11.2011, 21:19 Uhr) 6 http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf (abgerufen am 08.10.2010) - 16 - teiformat vor und wird von vielen (freien) Desktop-Geoinformationssystemen unterstützt7. Im Zusammenhang von Geodaten und Internet haben sich die Standards mit dem Namen GML (Geography Markup Language) und KML (Keyhole Markup Language) etabliert. Diese besitzen jedoch eine geringere Unterstützung durch die verschiedene DesktopInformationssysteme6. Die geometrischen Primitiven innerhalb von Shapefiles werden unter anderen als Punkte, Polylinien (Linienzüge: miteinander verbundene Koordinaten) und Polygone (Flächen: geschlossene Polylinien) modelliert. Zu den enthaltenen Objekten (features) können Sachdaten (attributes) hinzugefügt werden (z. B. Name eines Flusses). Ein ESRI-Shapefile besteht aus mehreren Dateien. Die Dateien besitzen das gleiche Präfix im Dateinamen, jedoch unterschiedliche Dateiendungen. Es gibt optionale und verpflichtende Dateien. Verpflichtende Dateien sind die Hauptdatei (*.shp), eine Tabelle, die die Sachdaten der einzelnen Objekte (*.dbf) enthält und eine Indexdatei (*.shx) für die Optimierung des Zugriffs auf die Inhalte. Optionale Dateien sind zum Beispiel eine *.prj Datei, die das Koordinatensystem festlegt oder eine *.shp.xml Datei, die Metadaten beinhaltet. Das Format legt nicht fest, wie die Daten zum Beispiel auf einer Karte dargestellt werden sollen. Ein GeoTiff ist ein Dateiformat für die Speicherung von Rasterdaten. Es ist eine spezielle Form eines Tiff-Bildes, das innerhalb der Datei Koordinaten für die Georeferenzierung des Bildausschnittes sowie zur verwendeten Kartenprojektion enthält. Ein Tiff-Bild erlaubt die verlustfreie Kodierung von Daten in einer rechteckigen Rastermatrix, bestehend aus Zeilen und Spalten. Die Dateien können mehrere „Bänder“ enthalten. Dies sind mehrere übereinander gelegte Bilder, deren Pixel jeweils eigene Werte beinhalten und z. B. bei Fernerkundungsdaten optische Objekteigenschaften verschiedener Wellenlängen widerspiegeln. GeoTiff-Dateien besitzen die Dateiendungen *.tiff oder *.tif oder *.geotiff. Das Format beinhaltet keine Regeln für die Visualisierung, wie zum Beispiel die Zuweisung von Pixelwerten zu Klassen und die Darstellung mittels Farbwerten. 7 spreadsheets.google.com/ccc?key=0Albk_XRkhVkzdGxyYk8tNEZvLUp1UTUzTFN5bjlLX2c&hl=en (Stand: 2010, abgerufen am 08.10.2010) - 17 - „Metadaten sind als strukturierte Dokumentation von Datensätzen zu verstehen, die es Erstellern, Verwaltern und Nutzern ermöglicht, den Inhalt und damit den anwendungsbezogenen Nutzwert der beschriebenen Datensätze zu verstehen.“8 Der Inhalt von Metadaten ist abhängig von den Eigenschaften der zu beschreibenden Daten und dem Zweck der Metadatenerfassung. Viele Datenformate sehen die Speicherung von Metadaten innerhalb der jeweiligen Formate vor. Da verschiedene Formate jedoch unterschiedliche Metadateninhalte festlegen, ist es sinnvoll einen formatübergreifenden Standard zu verwenden, der an die jeweiligen Bedürfnisse angepasst werden kann. Für die Beschreibung von Geodaten gibt es verschiedene Normen, die die Metadatenerhebung und Speicherung standardisieren. Unter anderen hat die International Standards Organisation (ISO) dafür eine internationale Norm Geographic Information – Metadata (ISO 19115) entwickelt. Sie besteht aus 409 unterschiedlichen Elementen. Die Elemente werden 14 Klassen zugeordnet. Bestimmte, aussagekräftige Elemente sind in der Norm als Hauptelemente deklariert und im "! "! so genannten Kernprofil (core metadata) zusammengefasst (siehe Abbildung 2.01). Neben sieben verpflichtenden („M“ = Mandatory) gibt es optionale („O“ = Optional) oder konditionell verpflichtende („C“ = Conditional) Elemente. Für die Erfüllung des Standards ist mindestens die Dokumentation der sieben Elemente Dataset title, Dataset reference, Dataset language, Dataset topic category, Dataset Abstract, Metadata point of contact und Metada8 http://ispace.researchstudio.at/downloads/2004/mittlboeck_schreilechner_2004_agit_iso_profil_at.pdf - 18 - ta date stamp verpflichtend. Je nach Bedürfnis können weitere Elemente aus dem Standard hinzugenommen oder der Standard nach bestimmten, im Standard festgehaltenen Regeln erweitert werden. Die Zusammenstellung wird als Profil bezeichnet. Die GDI-DE (Geodateninfrastruktur Deutschland) merkt an, dass es „selbst im englischsprachigen Raum […] schwierig [sein dürfte], alle Felder einheitlich zu interpretieren. Das ergibt sich zum einen aus sprachlichen Mehrdeutigkeiten (je nachdem, welche Fachbereich den Standard betrachtet) als auch aus verschiedenen Möglichkeiten, die Felder und Klassen in Beziehung zu setzen.“9 „Styled Layer Descriptor (SLD) ist ein XML Schema, das vom Open Geospatial Consortium (OGC) definiert wurde, um das Aussehen von Kartenebenen zu definieren. Mit der SLD-Darstellungsbeschreibungssprache kann das Aussehen von Vektor- und Rasterdaten beschrieben werden“10. Die Darstellung von Objekten wird über so genannte Symbolizer-Elemente festgelegt. Im Anhang auf Seite 97 ist ein Beispiel für den Inhalt einer SLDDatei abgedruckt, mit der die Darstellung von Rasterdaten über einen Rastersymbolizer umgesetzt wurde. Verschiedene Kartenebenen können über die SLD-Datei miteinander kombiniert werden, so dass daraus eine Karte entsteht. Die Konformität eines SLD kann über den Vergleich mit einem XML-Schemata softwaretechnisch überprüft werden. Unterstützt wird der SLD-Standard von verschiedenen Map Servern wie beispielsweise dem UMN-MapServer11 oder GeoServer12 und von JAVA-Bibliotheken wie GeoTools13. Die aktuelle Version besitzt die Nummer 1.1.0 (Stand: 29.6.2007). Um eine bessere Wiederverwendbarkeit der Darstellungsregeln zu ermöglichen, wurden im Vergleich zu der Versi- 9 http://www.gdi-de.org/de_neu/thema/2009/c_thema_iso_uebersetzung.html (abgerufen am 07.08.2010) 10 http://de.wikipedia.org/wiki/Styled_Layer_Descriptor (Stand: 03.08.2009, 09:17 Uhr) 11 http://mapserver.org/ (abgerufen am 29.11.2010) 12 http://geoserver.org/display/GEOS/Welcome (abgerufen am 29.11.2010) 13 http://docs.geotools.org/stable/userguide/faq.html (abgerufen am 29.11.2010) - 19 - on 1.0.0 die Regeln für die Symbolisierung in eine OpenGIS Symbology Encoding Datei ausgelagert14. Ein Geodatendienst ist eine spezialisierte Form eines Webservice. „Das World Wide Web Consortium definiert die Bereitstellung eines Webservices als Unterstützung zur Zusammenarbeit zwischen verschiedenen Anwendungsprogrammen, die auf unterschiedlichen Plattformen und/oder Frameworks betrieben werden“15,16. Sie sind für den Einsatz im Internet, genauer gesagt für das Hypertext Transfer Protocol (HTTP)17 konzipiert. Darauf aufbauend bieten Geodatendienste Schnittstellen für den Austausch und die Verarbeitung von Daten mit Raumbezug (Geodaten). Im Bereich der Geodaten ist das OGC (Open Geospatial Consortium) aktiv an der Geodatendiensten beteiligt. Die Standards beinhalten häufig Leistungsbeschreibungen, jedoch keine fertigen Implementierungen. Verbreitete OGC-Dienste sind der WMS (Web Mapping Service) und der WFS (Web Feature Service) für den Abruf von Kartendaten. Für diese Arbeit sind vor allem der WPS (Web Processing Service) und der SOS (Sensor Observation Service) von Bedeutung. Diese werden im Folgenden vorgestellt. „Ein Web Processing Service (WPS) ist ein Mechanismus, um über das Internet eine räumliche Analyse von Geodaten durchzuführen. Im Jahr 2007 wurde vom Open Geospatial Consortium (OGC) die Version 1.0.0 des WPS-Standards definiert“18. Ein WPS kann aber auch dazu verwendet werden, beliebige Prozessoren zu kapseln und über das Internet zur Verfügung zu stellen. Es muss sich nicht zwangsläufig um eine räumliche Analyse handeln. Der Standard definiert die drei Operationen GetCapabilities, DescribeProcess und Execute. Über GetCapabilities wird eine Beschreibung aller, vom WPS-Dienst zur Verfügung gestellten Prozesse abgerufen. DescribeProcess erzeugt eine Beschreibung der jeweiligen Prozesse 14 http://www.opengeospatial.org/pressroom/pressreleases/761 (abgerufen am 25.11.2010) 15 http://de.wikipedia.org/wiki/Webservice (Stand: 15.10.2010, 20:24 Uhr) 16 http://www.w3.org/TR/ws-arch/#introduction (abgerufen am 29.10.2010) 17 http://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol (Stand 05.07.2010, 12:15) 18 http://de.wikipedia.org/wiki/Web_Processing_Service (Stand: 27. Mär. 2010, 17:19) - 20 - mit Eingabe und Ausgabeparametern. Execute startet einen Prozess. Die Operationen werden über eine Internetadresse aufgerufen, an die eine XML-Datei mit Anweisungen übergeben werden kann. Der SOS (Sensor Observation Service)19 ist ein Paket verschiedener Standards, das innerhalb der SWE (Sensor Web Enablement) Initiative des OGC entstanden ist. Er „[…] stellt eine einheitliche Webserviceschnittstelle zur Abfrage von EchtzeitSensordaten sowie Sensordatenzeitreihen dar. Die angebotenen Sensordaten umfassen einerseits Beschreibungen von Sensoren, die in der SensorML (Sensor Model Language) kodiert werden, sowie die Messwerte, die in dem O&M-Format (Observations&Measurements) kodiert werden.“20 Die Funktionalitäten werden in ein verpflichtendes Kernprofil (Core Profile) und ein optionales, transaktionales Profil (Transactional Profile) unterteilt. Implementierungen eines SOS müssen mindestens die Operationen GetCapabilites für die Beschreibung des Dienstes, DescribeSensor für den Abruf von Metadaten eines Sensors und GetObservation für den Abruf von Messdaten unterstützen. Optional können Implementierungen die beiden Operationen des transaktionalen Profils RegisterSensor, für das Hinzufügen neuer Sensoren und InsertObservation, für das Hinzufügen von Sensormessdaten zu einem Sensor anbieten. Die Begrifflichkeiten des SOS werden in Abbildung 2.02 veranschaulicht. 19 http://www.opengeospatial.org/standards/sos (Abgerufen am: 02+.07.2010) 20 http://de.wikipedia.org/wiki/Sensor_Observation_Service (Stand: 06.08.2010, 17:57) - 21 - Der Standard bezeichnet eine Messung als Observation. Eine Observation liefert einen Messwert (Result) für die Eigenschaft (Phenomenon) eines observierten Objektes (FeatureOfInterest, FOI). Der Vorgang der Messung wird als Procedure bezeichnet. Über die Operation InsertObservation können Messwerte zu einem registrierten Sensor hinzugefügt werden. Zentraler Bestandteil von Geoinformationssystemen (GIS) sind Geodaten, die zu digitalen Karten weiterverarbeitet werden. Ein GIS bietet Funktionalitäten zum Erfassen, Verwalten, der Analyse und Ausgabe von Geodaten 21. Kann man über das Internet darauf zugreifen, so spricht man von einem internetbasierten Geoinformationssystem. Für eine solche Art eines Informationssystems werden Begriffe wie WebGIS, InternetGIS oder OnlineGIS verwendet. Dient das GIS zur Verarbeitung von Daten über die Umwelt, so spricht man von einem Umweltinformationssystem. Es gibt jedoch keine allgemeingültigen Definitionen, die die Begriffe eindeutig untereinander abgrenzen. Ein WebGIS besteht aus Client- und Server-Komponenten (Client-Server-Architektur). Bausteine sind Geodatendienste wie zum Beispiel die OGC-Dienste WMS (Web Map Service), WPS (Web Processing Service) und SOS (Sensor Observation Service). Clients senden Anfragen an die Server-Dienste, der Server verarbeitet die Anfrage und liefert eine Antwort zurück an den Client. Die Antwort wird daraufhin clientseitig verarbeitet und visualisiert. Die MVC-Architektur (Model-View-Controller) ist ein weit verbreitetes Softwarearchitekturmuster für die Umsetzung von grafischen Benutzungsoberflächen. Sie wurde Ende der 1970er Jahre für grafische Oberflächen von Desktop-Anwendungen in der Programmiersprache Smalltalk entwickelt22. Inzwischen wird das Prinzip auch für InternetAnwendungen eingesetzt. Das Ziel ist eine flexible Softwarearchitektur, die eine spätere Anpassung und die Wiederverwendbarkeit von einzelnen Teilen der Anwendung ermöglicht. 21 Lexikon der Kartographie und Geomatik, Geoinformationssystem 22 http://c2.com/cgi/wiki?ModelViewControllerHistory (abgerufen am 05.09.2010) - 22 - % Das Modell (Model) dient der Datenhaltung. Der Controller dient der Steuerung und reagiert auf Eingaben mit entsprechenden Aktionen. Für die Darstellung ist die Präsentationsschicht (View) zuständig. Sie erhält entweder über ein Push-Verfahren geänderte Daten oder fragt diese in einem Pull-Verfahren vom Modell ab. In ELVIS ist die GUI nach dem MVC als Architekturmuster umgesetzt (siehe Abbildung 2.03). $## ! " „Das Model enthält, nach entsprechenden Anfragen, die darzustellenden Daten. Alle GUIElemente sind eigene Views, die im Model registriert werden und jeweils einen speziellen Controller haben. Über den Controller werden Benutzeraktionen verarbeitet und beispielsweise Datenanfragen über einen spezifischen Request an die Datenbank geschickt. Die angefragten Daten werden im Model hinterlegt. Durch notify-Methoden werden die ViewElemente über die Existenz neuer Daten informiert. Daraufhin konsumieren „interessierte“ Views die Daten und zeigen diese an oder verarbeiten sie anderweitig. Die Identifikation interessierter Views geschieht über den Abgleich definierter IDs der GUI-Elemente.“23 23 WISDOM Projektdokumentation: GUI_Architektur_Beschreibung.doc (Stand: 30.06.2010) - 23 - ! !#! Als REST (Representational State Transfer) wird ein Softwarearchitekturmuster bezeichnet, das für die Entwicklung von verteilten Informationssystemen, beispielsweise im Internet, verwendet wird. Der Architekturstil wurde im Jahr 2000 von Roy T. Fielding in seiner Dissertation beschrieben24 und folgt vier Prinzipien: Adressierbarkeit: Daten sind Ressourcen, die über URI (Uniform Resource Identifier) eindeutig zugeordnet werden können. Zustandslosigkeit: Weder der Server noch der Client speichern Zustandsinformationen zwischen zwei Nachrichten. In jeder Nachricht sind alle Informationen enthalten, um diese interpretieren zu können. Wohldefinierte Operationen: alle Ressourcen müssen eine Reihe von wohldefinierten Operationen unterstützen. Im Fall von HTTP gehören dazu GET, POST, PUT und DELETE. Verwendung von Hypermedia: als Medium für die Repräsentation der Daten kommt Hypermedia wie beispielsweise HTML oder XML zum Einsatz. Ressourcen werden über Hyperlinks miteinander verknüpft. !#" Neben Softwarearchitekturmustern (siehe zum Beispiel REST) existieren Muster für grafische Benutzeroberflächen, die beschreiben wie bestimmte Aufgaben mit Hilfe von grafischen Komponenten sinnvoll gelöst werden. Beispiele für solche Muster sind unter anderen „Tabs“, „Login“, „Menü“. Ein Assistent ist ebenfalls eine Bezeichnung für ein solches Muster. Laut der Internetseite ui-patterns.com dient ein Assistent dazu ein Aufgabenziel zu erreichen, das aus mehreren, voneinander abhängigen Teilaufgaben besteht („Problem summary: The user wants to achieve a single goal which consists of multiple dependable sub-tasks“25). Es wird verwendet, wenn Nutzer mit den einzelnen Teilschritten zur Erreichung des Gesamtziels nicht vertraut sind und Hilfestellungen benötigen. Die Teilaufgaben müssen in einer bestimmten Reihenfolge durchgeführt werden. Die Navigation zwischen einzelnen Bearbeitungsschritten findet mit Hilfe von „Weiter“- und „Zurück“-Schaltflächen statt. 24 http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm (abgerufen am 19.09.2010) 25 http://ui-patterns.com/patterns/Wizard (abgerufen am 02.08.2010) - 24 - In diesem Kapitel wird auf die Rahmenbedingen eingegangen, die durch die bisherigen Entwicklungsarbeiten vom DFD geschaffen wurden und die Grundlage für die folgenden Arbeiten bilden. ELVIS verwaltet heterogene Dateninhalte. Tabelle 3.1 gibt einen Überblick über die verschiedenen Datentypen, deren Bestandteile, Speicherformate und Standards. Datentyp Datensatzelemente Format (Dateinamenserweiterung) Standard(s) Vektor Vektor-Geometrie WGEF, Geodaten + Attribute ESRI Shape (.shp, .prj, .dbf, .shx) Metadaten XML (.xml) SLD 1.0 SLD-Datei XML (.sld) Raster Raster-Geometrie Geotiff (.tiff oder .tif) Geodaten Metadaten XML (.xml) SLD-Datei XML (.sld) Sensoren Standort, Module XML (xml) Sensormessdaten Messwerte (Zeit, CSV (.csv) / XML (.xml) Wert, Sensor, Messmodul) Statistik Statistiken Werte, Fremdschlüssel CSV (.csv) --- Felddaten Felddaten Koordinate WellKnownText (WKT) --- Geodaten Sensor ISO 19115, SOS, O&M, SensorML 4 Fotos (Richtung JPEG (.jpg) / Tiff (.tiff Nord, Ost, Süd, West) oder .tif) Publikation Publikation Metadaten XML (.xml) Textdokument PDF (.pdf) Bibliographie XML (.pdf) --- - 25 - ,%$ Als automatische Datenintegration wird der Import von externen Daten durch eine Software in das Informationssystem verstanden. Die Software nimmt einen Datensatz in einem bestimmten Format entgegen, extrahiert daraus die zu verarbeiten Daten, transformiert diese in das Schema und Format der Zieldatenbank und lädt bzw. speichert sie in der Zieldatenbank. Der Begriff automatisch bezieht sich auf die Tatsache, dass nach einer Datenübergabe und dem parametrisierten Start der Software keine Benutzerinteraktion mehr stattfindet. Der Prozess wird in Fachliteratur als „Extract / Transform / Load“-Prozess bezeichnet und mit ETL abgekürzt26. Für den Transformationsprozess ist ein „Mapping“ der Daten notwendig. Das Mapping benötigt Informationen an welchem Ort die erwarteten Daten gespeichert sind und in welche Strukturen sie überführt werden sollen. Dafür muss ein Eingabestandard spezifiziert sein, der das Eingabedatenformat festlegt. Für die automatische Integration von Geodatensätzen in ELVIS wurde ein Austauschdateiformat entwickelt, das im Folgenden vorgestellt wird. ,#+#* !() Die „WISDOM Geodata Exchange Format“27 Spezifikation beschreibt die Zusammenstellung und Strukturierung von Geodaten zu einem ELVIS-Geodatensatz, mit dem Ziel die Daten unter den Projektpartnern auszutauschen und automatisch in ELVIS einzuspielen. Bei dem Format handelt es sich um ein proprietäres, vom DFD spezifiziertes, Dateiformat (siehe Listing 3.01). ' &"(& ) 01 02 03 04 05 06 07 08 SubNIAPP_2000_landuse_100K.zip metadata.xml private SubNIAPP_2000_landuse_100K_poly.shp SubNIAPP_2000_landuse_100K_poly.shx SubNIAPP_2000_landuse_100K_poly.dbf SubNIAPP_2000_landuse_100K_poly.prj SubNIAPP_2000_l anduse_100K_poly.sld Bestandteile sind neben Geodaten im Raster- (GeoTiff) oder Vektorformat (ESRI Shapefile, Zeile 04-07), zugehörige Metadaten nach der ISO 19115 Norm (Zeile 02) und Darstel26 Geographic hypermedia: concepts and systems, Stefanakis, E et al., 2006, Springer 27 Spezifikation nach „WISDOM_WGEF_EN_01.doc“, Steffen Gebhardt, DLR, 12.01.2010 - 26 - )$ # lungsvorschriften im SLD-Dateiformat (Zeile 08). Die Dateien werden innerhalb einer bestimmten Ordnerstruktur in einem Zip-Archiv zu einem WGEF-Datensatz gruppiert. )"("( &' Das DatenEingangsPortal (DEP) ist eine vom DFD in der Programmiersprache JAVA entwickelte Software für die automatische Datenintegration von Geodaten in ELVIS. Das Programm registriert und verteilt die Bestandteile von Geodatensätzen (siehe Listing 3.01, vorherige Seite) in den Datenspeichersystemen des Informationssystems, so dass diese daraus abgerufen, verarbeitet und visualisiert werden können (siehe Abbildung 3.01). % ! Das DEP nimmt ein WGEF-konformes ZIP-Archiv entgegen und verarbeitet dessen Inhalt. Abbildung 3.02 auf Seite 28 stellt den Vorgang schematisch dar. Zunächst wird der Inhalt auf Vollständigkeit und standardgemäße Datei- und Ordnerstrukturen überprüft („Validierung“). Trifft dieses zu, so werden die Dateien daraus extrahiert („Entpacken“). Nach einer weiteren Analyse, ob der Dateiinhalt gelesen werden kann, findet eine Verarbeitung der Daten statt (z. B. Umprojizieren der Geodaten in das Zielkoordinatensystem, automatisches Auslesen von Metadaten aus den Vektor- bzw. Rasterdateien und Erweiterung der manuell erstellten Metadaten). - 27 - *& !!% In einem letzten Schritt werden die Daten an die jeweiligen Datenspeichersysteme registriert und verteilt. Vektordaten werden in einer PostgreSQL-Datenbank mit PostGIS Erweiterung gespeichert. XML- Dateien werden in einer XMLDatenbank eXist gespeichert. Rasterdateien werden im Dateisystem vorgehalten, da sie nicht effizient innerhalb der Datenbank PostgreSQL abgelegt werden können. Datensätze werden auf einem FTP-Server archiviert. Das DEP gibt Verarbeitungs- Informationen als Ausgabetext zurück, welche Schritte durchgeführt ' ! ( )# !$ ! wurden und ob Fehler dabei aufgetreten sind. Das Programm besitzt für den Aufruf eine Kommandozeilenschnittstelle, die mit vier Parametern aufgerufen wird (siehe Listing 3.02) '"!! > java -jar dep.jar -c ../config.xml -i /landuse.wgef -p 7 -g 102 Parameter -c: Pfad zur Konfigurationsdatei. Die Konfigurationsdatei enthält Schalter zur Steuerung des Informationsflusses, Adressen und Authentifizierungsdaten für die Speichersysteme. -i: Datei oder Ordner, der die Quelldaten (WGEF Archiv(e)) enthält. -p: Kennziffer für die Organisation des Datenlieferanten („Provider“). -g: Kennziffer für die thematische Gruppe des Datensatzes („ThematicGroup“). - 28 - )% $ Das DEP wurde als Server-Software konzipiert. Aus sicherheitstechnischen Gründen muss das DEP auf dem gleichen System vorliegen, auf dem auch die Datenbank läuft. Des Weiteren müssen die einzuspielenden Datensätze im gleichen Dateisystem wie das DEP vorhanden sein. Der Aufruf geschieht entweder lokal über die Kommandozeile oder entfernt, z. B. über die Netzwerkprotokolle SSH28 oder Telnet29. Als Zusatzinformationen werden beim Start der Integrationssoftware Kennziffern für die thematische Gruppe (Parameter „-g XX“) und den Provider (Parameter „-p XXX“) übergeben. Die Parameter ermöglichen eine spätere Suche nach Datensätzen bestimmter Datenlieferanten oder Thematiken. Um die Kennziffern zu bestimmen, muss der Datenlieferant eine Internetadresse aufrufen (siehe Listing 3.03 und Listing 3.05), die ein Dokument im JSON-Datenformat30 als Antwort zurückliefert (siehe Listing 3.04 und Listing 3.06). Darin werden allen in der Datenbank vorgehaltenen Organisationen oder thematischen Gruppen eindeutige Kennziffern zugewiesen, die der Benutzer beim Start des DEP als Parameter übergibt. &# #'%!$( GET http://indus.caf.dlr.de/elvis_rest_dev/providers/json &"# # 01 02 03 04 05 06 07 [ { "name":"GFZ", "id":7, "description":"German Research Center for Geoscience }, … ] &# # GET http://indus.caf.dlr.de/elvis_rest_dev/thematicgroups/json 28 http://de.wikipedia.org/wiki/Secure_Shell (Stand: 12.11.2010, 10:50 Uhr) 29 http://de.wikipedia.org/wiki/Telnet (Stand: 22.11.2010, 12:09 Uhr) 30 http://de.wikipedia.org/wiki/JavaScript_Object_Notation (Stand: 30.11.2010) - 29 - +)""#!#( "" " *"% "&# !"# & ""! # 01 02 03 04 05 06 [ { "name":"Inundation scenario from raster", "id":102 }, … ] Um das Kommandozeilenprogramm über das Internet starten zu können, wurde vom DFD ein WPS entwickelt, der die JAVA-Software kapselt und über eine Internetadresse aufrufbar macht. Abbildung 3.03 veranschaulicht die Kommunikation mit der JAVA Software über den WPS Dienst: *!#! Der WPS Dienst wird über eine Internetadresse aufgerufen und nimmt die Eingabeparameter entgegen, erstellt daraus ein Kommando und ruft das DEP über die Kommandozeile auf und führt die Integration durch (Abbildung 3.02). Der Ausgabetext und der Status werden an den Aufrufer als XML-Datei zurückgegeben. Aufruf Der WPS-Dienst wird über eine HTTP GET Anfrage an eine URL gestartet (Listing 3.07). *# #!!""! "$ !" " 01 02 03 04 05 06 07 http://mekongvm5/cgi-bin/wps.py? datainputs=[ dataintegraton:resource=http://mekongvm5/test.wgef; dataintegration:thematic=101; dataintegration:provider=5]& identfier=dataIntegration& request=execute& service=wps& version=1.0.0 - 30 - Voraussetzung: • Geodatensatz liegt als WGEF-Archiv vor 1. WGEF Archiv ist über eine Adresse (URL) über das Internet abrufbar 2. Adresse (URL) ist bekannt • Kennziffern für die „Thematische Gruppe“ und den „Provider“ sind bekannt • URL des WPS und Name des Dienstes sind bekannt Eingaben: • Zeile 03: Adresse (URL) des WGEF Archivs • Zeile 04: Identifikationsnummer - Thematische Gruppe • Zeile 05: Identifikationsnummer - Provider Verarbeitung: • Der WGEF Datensatz wird von der übergebenen URL heruntergeladen • Erstellen eines Kommandos für den Kommandozeilenaufruf des DEP • Kommandozeilenaufruf Ausgaben: • XML-Dokument: Log-File mit Informationen (Ausgabetext) als Integrationsdokumentation - 31 - $ # Die Komplexität der Datenintegrationsaufgabe liegt in der Vorbereitung des Geodatensatzes, also in der Erstellung der Datensatzbestandteile und Zusammenstellung derer innerhalb eines WGEF-Archivs, als Voraussetzung für den Start des DatenEingangsPortals. Der grafische Assistent deckt aus diesem Grund den kompletten Arbeitsfluss der Integrationsaufgabe – Erstellung, Zusammenstellung und Integration eines WGEF-Datensatzes – ab, um den Nutzer bestmöglich bei der Datenintegration in ELVIS zu unterstützen, ohne dass dieser sich in die technischen Details der Gesamtaufgabe einarbeiten muss. Die Entwicklung führt über die Anforderungserhebung, der Entwurfsplanung hin zur Implementierung des Konzeptes. Zunächst werden jedoch die Rahmenbedingungen vorgestellt, die für die Entwicklung vorgegeben sind. #!" Die Rahmenbedingungen sind durch die bisher vom DFD geleisteten Entwicklungsarbeiten vorgegeben. Eine wichtige Anforderung an den Assistenten ist es, dass sich dieser in die bestehende Oberfläche von ELVIS einfügt. Aus diesem Grund werden im Folgenden die Technologie und die Gestaltung der grafischen Benutzeroberfläche von ELVIS vorgestellt. $## ! " Für die Entwicklung des Umweltinformationssystems wird das Google Web Toolkit (GWT)31 eingesetzt. Es vereinheitlicht den Entwicklungsprozess von Server- und ClientKomponenten, da es eine durchgehende Implementierung von Funktionalitäten in der Programmiersprache JAVA ermöglicht. Dadurch „sollen sich Entwickler nicht mit den Eigenarten der Browser beschäftigen müssen“32. Der Quellcode wird durch einen Javanach-JavaScript-Compiler verarbeitet, so dass die verschiedenen Browser diesen ausführen können. 31 http://code.google.com/webtoolkit/ (abgerufen am 25.10.2010) 32 http://www.golem.de/0612/49434.html (abgerufen am 25.10.2010) - 32 - (! ($%$& SmartGWT33 ist ein Framework, um die Entwicklung von Internetanwendungen zu erleichtern, indem es die beiden Frameworks SmartClient34 (JavaScript) und das GWT miteinander verknüpft. SmartGWT erweitert GWT um so genannte „Widgets“ und Konzepte für den Datentransport von Server zum Client und andersherum. Widgets sind in SmartGWT wiederverwendbare grafische Komponenten (z. B. Eingabefelder, Tabellen,…), die mit Datenquellen (DataSources) verbunden werden können. Der Inhalt wird automatisch aktualisiert, sobald sich Inhalte der Datenquellen ändern. SmartGWT ist unter verschiedenen Lizenzmodellen verfügbar35. Die unterstützten Merkmale variieren je nach Lizenztyp: In der kostenlosen Version, die unter der OpenSource Lizenz LPGL steht, können ausschließlich client-seitige Funktionen genutzt werden (z. B. Widgets und client-seitige Datenquellen). Höhere Lizenzen sind kostenpflichtig und unterstützen weitere Merkmale, wie z. B. die Kommunikation mit dem Server und Konzepte zur Synchronisation von Datenquellen auf Server und Client. Es ist eine Anforderung an ELVIS, dass es auf OpenSource Komponenten aufbaut. Deshalb steht für die Implementierung des Assistenten nur die LPGL Lizenzversion mit eingeschränkter Funktionalität zur Verfügung. ($%$' " Die Inhalte von ELVIS sind über die grafische Benutzeroberfläche mittels eines Browser über das Internet abrufbar. Über diese Schnittstelle können Nutzer mit dem System interagieren. Die Oberfläche ist aus Seiten aufgebaut und bedient sich grafischer Komponenten von SmartGWT. Zwischen den Seiten kann über Registerkarten (Tabs) navigiert werden. Seiten beinhalten Werkzeugkästen (Toolboxes), die den Zugriff auf die Funktionalitäten erlauben. Abbildung 4.01 auf Seite 34 zeigt die schematische Darstellung einer Seite in ELVIS. Die blauen Elemente sind die Tabs für die Navigation zwischen verschiedenen Seiten (Navigationsleiste). Die gezeigte Seite dient der Darstellung von Karten und beinhaltet eine Toolbox für die Ebenenverwaltung (Layer Toolbox), die Karte (Map Toolbox), den Abruf von Sensormessdaten (Observations Toolbox) und statistischen Daten (Thematic Mapping Toolbox). 33 http://code.google.com/p/smartgwt/ (abgerufen am 25.10.2010) 34 http://www.smartclient.com/ (abgerufen am 25.10.2010) 35 http://www.smartclient.com/product/ (abgerufen am 10.9.2010) - 33 - Die Anordnung der Toolboxes ist über eine XML-Datei konfigurierbar (siehe Anhang 7.3 auf Seite 98). In der Konfigurationsdatei lassen sich neue Seiten zu ELVIS hinzufügen und ihnen Toolboxes zuweisen. Toolboxes sind Einheiten, die den Zugriff auf zusammengehörige Funktionen ermöglichen. Sie können neben- und untereinander auf einer Seite angeordnet und auf verschiedenen Seiten wiederverwendet werden. Die Toolboxes sind nach dem MVCArchitekturmuster (siehe Kapitel 2.4.1) programmiert, d.h. Datenmodell, Ansicht und Steuerung sind voneinander entkoppelt. Jede Toolbox benachrichtigt bei Ereignissen (z. B. Klick auf eine Schaltfläche) oder bei Änderungen im Datenmodell andere Toolboxes, die innerhalb der Konfigurationsdatei als EventHandler oder DataConsumer registriert wurden. - 34 - " "! Der Assistent ist ein Werkzeug zum Erstellen eines gültigen WGEF-Datensatzes und dessen Integration in ELVIS. Zur Lösung der Aufgabe wurden verschiedene Anforderungen an die Software identifiziert, die in Gesprächen mit den Entwicklern von ELVIS36, durch Studium der Dokumentation zu dem WGEF-Datenstandard37 und aus Anleitungen für die Datenintegration38,39 erhoben wurden. Die Anforderungen sind in „nichtfunktionale“ (Unterkapitel 4.2.1) und „funktionale“ (Unterkapitel 4.2.2) klassifiziert. Das Präfix „A_“ kürzt im Folgenden die Bezeichnung „Anforderung“ ab. Der Auflistung liegt eine hierarchische Struktur zugrunde, d.h. Anforderungen mit der Bezeichnung A_XX_XX sind durch Anforderung A_XX bedingt bzw. konkretisieren diese. "! „Eine nichtfunktionale Anforderung legt fest, welche Eigenschaften das Produkt haben soll“40. Tabelle 4.01 listet die nichtfunktionalen Anforderungen auf. Im Anschluss an die Tabelle werden diese erläutert. " Identifikator Anforderung A_01 Fügt sich in die bestehende Oberfläche des Informationssystems ein. A_01_01 Nutzt die Programmiersprache JAVA und baut auf den Frameworks Google Web Toolkit und SmartGWT auf. A_02 Bedienung ist intuitiv A_03 Erweiterbarkeit Der Assistent wird in die bestehende ELVIS-Oberfläche eingebunden. Dafür wird innerhalb der ELVIS-Navigationsleiste eine neue Registerkarte für den Start des Assistenten hinzugefügt. Der Assistent wird als Internetanwendung umgesetzt. Dies fördert – durch eine 36 Verena Klinger (DLR), Thilo Wehrmann (DLR), Steffen Gebhardt (DLR) 37 WISDOM Projekt Dokumentation: 2008-04-07_WISDOM_GeodataExchangeStandard_doc_SG.pdf 38 WISDOM Projekt Dokumentation: WISDOM_DEP_EN_01.doc 39 WISDOM Projekt Dokumentation: 2008-07-10_WISDOM_MetadataGenerator_doc_SG.doc 40 http://de.wikipedia.org/wiki/Anforderung_Informatik (Stand: 31. Okt. 2010, 20:20) - 35 - ! konsistente grafische Oberfläche – die Bedienbarkeit des Systems. Die Installation und Wartung von proprietärer Einzelplatzsoftware durch den Nutzer wird dadurch vermieden. Aus der Anforderung A_01 ergeben sich die Programmiersprache JAVA und die eingesetzten Frameworks Google Web Toolkit und SmartGWT für die Implementierung (Anforderung: A_01_01). Die Nutzer können ohne das Studium externer Dokumentation bzw. Anleitungen das System bedienen und das Aufgabenziel der Datenintegration erfolgreich erreichen. Die Abfolge der Teilaufgaben soll übersichtlich und einprägsam sein, um bei wiederholter Durchführung der Integrationsaufgabe die Effizienz zu steigern. Innerhalb dieser Arbeit wird ein Konzept für die Eingabe von Datensätzen vom Typ „Geodaten“ nach dem WGEF-Standard erstellt und umgesetzt. Auf Grundlage dieser Arbeit soll der Assistent für die Integration weiterer Datensatztypen, wie in Kapitel 3.1 auf Seite 25 aufgelistet, erweitert werden können. ! „Eine funktionale Anforderung legt fest, was das Produkt tun soll.“41 Tabelle 4.02 listet die funktionalen Anforderungen auf. Im Anschluss an die Tabelle werden diese erläutert. Identifikator Anforderung A_04 Erstellung eines gültigen und vollständigen WGEF Datensatzes A_04_01 A_04_01_01 A_04_02 A_04_02_01 A_04_02_01_01 A_04_02_02 A_04_02_02_01 41 Transfer lokaler Dateien zum Server Transfer von Dateien bis zu einer Größe von 400MB Editoren zur Eingabe von Datensatzbestandteilen Eingabe von Metadaten Temporäre Speicherung der Metadaten Eingabe von Darstellungsregeln für Geodaten Temporäre Speicherung der Darstellungsregel http://de.wikipedia.org/wiki/Anforderung_Informatik(Stand: 31. Okt. 2010, 20:20) - 36 - A_04_02_03 A_05 Validierung der Dateneingaben Start des Integrationsprozesses #$(" Aus den Dateneingaben wird ein WGEF-konformes Archiv erstellt. Der Dienst sammelt die bereitgestellten Daten ein und speichert diese in einer vom „WISDOM Geodata Exchange Standard“ spezifizierten Datei- und Ordnerstruktur in einem ZIP-Archiv. Die Eingaben werden in den Anforderungen A_04_01: Transfer lokaler Dateien zum Server, A_04_02_01: Eingabe von Metadaten und A_04_02_02: Eingabe von Darstellungsregeln für Geodaten beschrieben. #$(#$%" Transfer (Upload) von lokalen Dateien (die im Dateisystem, auf dem Rechner des Datenlieferanten vorliegen) zu einem Server. Es sollen Dateien bis zu einer Größe von 400 MB unterstützt werden (A_04_01_01). Der Benutzer wählt eine Datei vom lokalen Dateisystem aus, die daraufhin zum Server übertragen wird. Während des Vorgangs bekommt der Nutzer Rückmeldung über den Status (Fortschrittsanzeige/Erfolg/Misserfolg). Auf die hochgeladenen Dateien kann mittels einer Internetadresse (URL) zugegriffen werden. #$(#$&" Die Editoren dienen der Dateneingabe mittels Formularmaske. Die eingegebenen Daten werden in XML-Dokumente überführt und zu einem Server übertragen. Auf die übertragene Datei kann über eine Internetadresse (URL) zugegriffen werden. #$(#$&#$'" Eingaben in Formularmasken werden zunächst auf dem Client auf Vollständigkeit und das erwartete Format überprüft. Die Struktur der übertragenen XML-Dokumente wird gegen ein Schema validiert. Ist die Validierung des XML-Dokuments erfolgreich, so gilt die Eingabe als erfolgreich abgeschlossen. #$)" Der Integrationsprozess kann über die grafische Oberfläche aufgerufen werden. Es wird der in A_04 erstellte WGEF zusammen mit den Startparametern übergeben. - 37 - .#'$"!""""##%!#!#&# Das Ergebnis der Entwurfsplanung ist ein Konzept für die Umsetzung der in Kapitel 4.2 identifizierten Anforderungen. Zunächst werden Teilkonzepte erarbeitet, die im Folgenden zu einem Gesamtkonzept zusammengefügt werden. .+-+, ) # %#""#!"!#""("#" Der Assistent wird als neue Seite in das Informationssystem eingefügt und wird durch Auswahl einer Registerkarte gestartet. Als mögliche Namen für den Kartenreiter kommen zum Beispiel DataEntryPortal, Data Import, Import oder Data Integration in Frage. Im Konsens mit dem Entwicklerteam wurde der Begriff DataEntryPortal gewählt. Innerhalb der Seite werden Werkzugboxen platziert, die die Funktionalitäten implementieren. Das Layout und die Registrierung der Werkzeugboxen wird über die Anpassung der ELVIS Layout Konfigurationsdatei umgesetzt. $#)#!!!" !$$#$!'!"#$!#$+ Für die spätere Implementierung ist eine lokale Entwicklungsumgebung aufzusetzen. Diese hat sich an die im Team eingesetzten Werkzeuge zu orientieren, da dies den Entwicklungsprozess vereinheitlicht. Es kommen die Entwicklungsumgebung Eclipse42 und das Google Plugin for Eclipse43 zum Einsatz. Der Quellcode wird innerhalb des Versionierungstools Subversion44 verwaltet und über das Plugin Subclipse45 importiert und nach erfolgreicher Implementierung zurückgespielt. $"##$#& Die nichtfunktionale Anforderung, dass das System „intuitiv“ bedient werden kann, wird innerhalb eines Bedienkonzeptes gelöst (siehe Kapitel 4.3.2, Bedienkonzept). Es ist Be- 42 http://www.eclipse.org/ 43 http://code.google.com/intl/de-DE/eclipse/ 44 http://subversion.tigris.org/ 45 http://subclipse.tigris.org/ - 38 - (# !" standteil des Gesamtkonzeptes, das die einzelnen Teilkonzepte aus diesem Kapitel zu einem Ganzen zusammenfügt. # Die Anzahl und die Art der Editoren für die Eingabe von Datensatzbestandteilen sind bei verschiedenen Datensatztypen unterschiedlich. Soll der Assistent zu einem späteren Zeitpunkt zum Beispiel für die Integration von Literaturdaten erweitert werden, so muss dieser den Upload von PDF-Dateien ermöglichen und eine Formularmaske zur Eingabe des Literaturnachweises (Autor, Publikationsdatum, …) bereitstellen. Gemeinsam haben die Integrationsaufgaben für unterschiedliche Datensatztypen, dass sich die Gesamtaufgabe in eine bis beliebig viele Teilaufgaben unterteilen lässt. Demzufolge ist vor der Initialisierung des Assistenten für die Integration eines Datensatztypen eine Verzweigung einzubauen, die vom Nutzer abfragt, welcher Datensatztyp integriert werden soll. Je nach gewähltem Typ werden die entsprechenden Teilaufgaben geladen und der Nutzer bis zur Erreichung der jeweiligen Gesamtaufgabe geführt. ! "$ Die bereitgestellten Dateien müssen in das WISDOM Geodata Exchange Format überführt werden. Voraussetzung dafür ist, dass alle benötigten Bestandteile eingegeben und über das Internet bereitgestellt werden (siehe Anforderungen A_04_01, A_04_02_01, A_04_02_02). Die Verarbeitung übernimmt ein WPS (siehe Abbildung 4.02). ' & Der WPS-Dienst wird über eine Internetadresse mit Eingabeparametern aufgerufen (siehe Listing 4.01). Er lädt die Dateien von den übergebenen Adressen herunter, ordnet sie in die WGEF-Ordnerstruktur ein und erstellt daraus ein ZIP-Archiv. An den Aufrufer wird ein XML-Dokument zurückgegeben, das die Internetadresse des erstellten Archivs enthält. - 39 - '# !" & $ " 01 02 03 04 05 06 07 08 09 10 11 http://mekongvm5/cgi-bin/wps.py? request=execute& identifier=createwgef& datainputs=[ geodata=http://129.247.183.248/geodata; metadata=http://129.247.183.248:8080/metadata.xml; sld=http://129.247.183.248:8080/styling.sld; uuid=CCEA257DF1AE493DB932CEA5094C8C95]& responsedocument=[package:wgef:result=@asreference=true]& service=wps& version=1.0.0 Eingaben (datainputs): • Zeile 05: geodata = URL zu Ergebnis aus Anforderung A_04_01 • Zeile 06: metadata = URL zu Ergebnis aus Anforderung A_04_02_01_01 • Zeile 07: sld = URL zu Ergebnis aus Anforderung A_04_02_02_01 • Zeile 08: Universally Unique Identifier (UUID) Verarbeitung durch den „createWgef“-WPS: • Download der Geodatendateien mittels des Kommandozeilenprogramms wgef • Kopieren der Eingaben in die erforderlichen Dateistrukturen • Packen der Ordner und Dateien mittels des Kommandozeilenprogramms zip Ausgaben: • XML Dokument mit der URL des erstellten WGEF Archivs. $ " Geodatendateien werden über den Browser vom lokalen Dateisystem des Nutzers (Client) in einen temporären Ordner auf dem Server übertragen. Der Ordnername auf dem Server muss eindeutig sein, da es sonst bei gleichzeitiger Nutzung durch mehrere Nutzer zur Durchmischung von Daten kommt. Die Eindeutigkeit des Ordnernamens wird durch die Verwendung eines UUID (Universally Unique Identifier)46 sichergestellt. Für die Implementierung wird recherchiert, ob es Lösungen für den Dateiupload über GWT gibt und ob diese für diese Arbeit angepasst werden können. 46 http://de.wikipedia.org/wiki/Universally_Unique_Identifier - 40 - % Darstellungsvorschriften beinhalten Regeln zur Symbolisierung von Geodaten. Die Benutzerfreundlichste Lösung wäre ein grafischer Editor nach dem Prinzip What You See Is What You Get (WYSIWYG). Auf Grund der Komplexität eines solchen Editors, ist diese innerhalb dieser Arbeit nicht zu bewerkstelligen. Daher sieht dieses Konzept ein Eingabefeld vor, in das ein Dokument nach dem SLD-Standard47 über „Copy & Paste“ eingefügt werden kann. Das SLD-Dokument muss außerhalb des Informationssystems, mit externer GISSoftware, erstellt werden. Der Assistent gibt Hinweise, welche Software dafür verwendet werden kann und verweist auf Hilfetexte. Die Datenintegrationssoftware wird unter Angabe der erforderlichen Parameter über einen WPS-Dienst gestartet (siehe Kapitel 3.2.1, Kapselung). Dafür muss die Software die Parameter zusammenstellen und den Dienst über eine Internetadresse aufrufen. %"$"# In diesem Kapitel werden die Teilkonzepte aus Kapitel 4.3.1 in ein Gesamtkonzept überführt. Technische Details werden im technischen Konzept behandelt. Die grafische Oberfläche und die Bedienung des Assistenten werden in einem Bedienkonzept und einem gestalterischen Konzept entworfen. Die Aufgabe für die Zusammenstellung und Integration eines WGEF-Datensatzes besteht aus einer bekannten Anzahl an Teilaufgaben, die im Folgenden als „Schritte“ (Steps) bezeichnet werden. Tabelle 4.03 gibt einen Überblick über die erforderlichen Schritte für die Zusammenstellung und Integration eines WGEF-Datensatzes in ELVIS. 47 http://www.opengeospatial.org/standards/sld (abgerufen am 7.8.2010) - 41 - $ #! Schritt Nr. Id Anforderung Beschreibung 1 Upload A_04_01 Bereitstellung von Geodaten durch den Nutzer: Dateitransfer vom lokalen Rechner zum Server. 2 Metadaten A_04_02_01 Eingabe von Metadaten in eine Formularmaske. Erstellen eines XML-Dokuments nach der ISO 19115:2003 Norm. Transfer des erstellten XML-Dokuments zum Server. 3 Styling A_04_02_02 „Copy & Paste“ eines SLD-Dokuments in ein Eingabefeld. Transfer des XML-Dokuments zum Server. 4 WGEF A_04 Die Dateien aus Schritt 1, 2 & 3 werden in den WGEF-Standard überführt. 5 Save A_05 Start der Integrationssoftware In den Schritten 1, 2 und 3 sind Dateneingaben durch den Nutzer erforderlich. Die Schritte sind geordnet und voneinander abhängig, d.h. ein bestimmter Schritt muss abgeschlossen sein, um mit dem nächsten Schritt fortfahren zu können. Ein Geodatensatz kann z. B. erst in ein WGEF-Archiv überführt werden, wenn die Teilaufgaben Upload, Metadaten und Styling erfolgreich abgeschlossen sind. Des Weiteren kann die Integration erst durchgeführt werden (A_05), wenn ein vollständiges WGEF-Archiv vorliegt (A_04). Abbildung 4.03 zeigt den Datenfluss des Gesamtprozesses. In Schritt 1, 2 und 3 finden Dateneingaben statt. Die Eingaben werden temporär in Orten auf dem Server gespeichert (Ordner in einem Dateisystem oder in einer Datenbank), auf die mittels Adressen (URL) aus dem Internet zugegriffen werden kann. Formulardaten werden in XML-Dokumente überführt und über HTTP POST in einer XML-Datenbank mit dem Namen eXist gespeichert. Neben der REST-Schnittstelle bietet diese Datenbank eine Funktion zum Validieren der eingegebenen XML-Dokumente gegen ein XML-Schema (XSD-Schema). Dies erspart Implementierungsarbeit zum Übertragen und der serverseitigen Überprüfung der Eingaben, da diese Schnittstellen bzw. bereits von der Datenbanksoftware umgesetzt sind. - 42 - Ist die Dateneingabe abgeschlossen, so wird in Schritt 4 aus den Eingaben mittels eines WPS ein WGEF-Archiv erstellt (Anforderung A_04). Das Archiv wird in Schritt 5 über eine Internetschnittstelle an einen WPS-Dienst übergeben, der das DEP über die Kommandozeile aufruft und die Datensatzbestandteile in den ELVIS-Speichersystemen registriert und speichert (Anforderung A_05, Details in Kapitel 3.2.2 auf Seite 27). Das Bedienkonzept erweitert das technische Konzept um Benutzerinteraktion und Navigation zwischen den Bearbeitungsschritten. Es muss sich um ein generisches Konzept handeln, das einerseits die Anforderungen aus dem speziellen technischen Konzept für die Erstellung und Integration eines WGEF-Datensatzes abdeckt, andererseits die Erweiterung des Assistenten um neue Datensatztypen berücksichtigt (Anforderung A_03). Des Weiteren liegt der Fokus dieses Konzepts auf der Erfüllung der Anforderung A_02. Abbildung 4.04 veranschaulicht das Bedienkonzept. - 43 - ! Nach dem Aufruf des Assistenten (Auswahl der Registerkarte: DataEntryPortal) wählt der Nutzer aus einer Liste verschiedener Datensatztypen denjenigen aus, der in das System importiert werden soll. Daraufhin startet der Assistent (siehe Abbildung: „Start“). Für den gewählten Datensatztypen werden die entsprechenden Editoren für die Datensatzbestandteile initialisiert („Schritt 1“, „Schritt 2“, …) Zunächst ist lediglich „Schritt 1“ aktiviert. Dieser wird dem Benutzer angezeigt. Der Benutzer tätigt die Dateneingabe für „Schritt 1“. Sobald er der Meinung ist, dass er die Eingabe erfolgreich bearbeitet hat, betätigt er eine „Weiter“-Schaltfläche. Daraufhin wird zunächst die Eingabe clientseitig überprüft (Validierung). Ist die Eingabe vollständig und entspricht dem erwarteten Format, so wird die Eingabe in ein Transportformat überführt und temporär in einer oder mehreren Datei(en) auf dem Server gespeichert. Es findet eine serverseitige Validierung statt. Tritt dabei ein Fehler auf, so wird dem Nutzer ein Hinweis gegeben, welche Eingabe nicht korrekt war. Ist die Validierung jedoch - 44 - erfolgreich, so wird der nächste Bearbeitungsschritt freigegeben und angezeigt. Der oben beschriebene Vorgang ist für alle folgenden Schritte einheitlich. In einem letzten Schritt (siehe Abbildung: „Schritt n“) wird die Gesamtaufgabe abgeschlossen: Durch einen Mausklick auf die Abschluss-Schaltfläche wird aus den zuvor eingegebenen Daten ein WGEF-Archiv erstellt und dieses in ELVIS integriert. Der Server gibt Rückmeldung über den Status des Integrationsprozesses. War die Integration erfolgreich, so ist die Gesamtaufgabe erfolgreich abgeschlossen. Dem Nutzer wird daraufhin erneut die Startseite präsentiert, auf der er einen neuen Datensatztypen zur Integration auswählen kann. Innerhalb jedes Bearbeitungsschrittes kann der Nutzer über eine „Abbrechen“-Schaltfläche die Bearbeitung ohne Datenintegration beenden. Die bisher getätigten Eingaben gehen dabei verloren und temporär gespeicherte Dateien werden gelöscht. Er gelangt dadurch zur Startseite. Über eine „Zurück“-Schaltfläche kann der Nutzer vorherige Eingaben überprüfen und gegebenenfalls Änderungen vornehmen. Das gestalterische Konzept schließt die Gesamtkonzeption ab. Innerhalb dieses Unterkapitels wird die Oberfläche des Assistenten in Hinblick auf das Bedienkonzept entworfen. Layout Das grafische Oberfläche des DatenEingangsPortals wird als neue Seite in die ELVIS-GUI eingebunden und über die Registerkarte DataEntryPortal gestartet (Anforderung: A_01). Die Anwendung behält durchgehend das Layout aus Abbildung 4.05 bei. Das Layout besitzt zwei Spalten, in denen drei unterschiedliche Toolboxes angeordnet werden: Eine Overview-, eine DataEntry- und eine Control-Toolbox. Die Aufgaben und Gestaltung der einzelnen Toolboxes werden im Folgenden vorgestellt. - 45 - ! Die Overview-Toolbox nimmt die komplett verfügbare Höhe der linken Spalte ein und besitzt eine feste Breite. Die DataEntry-Toolbox und die Control-Toolbox teilen sich die verfügbare Höhe der rechten Spalte. Die Control-Toolbox besitzt eine festgelegte Höhe. Der Rest der verfügbaren Höhe wird von der DataEntry-Toolbox ausgefüllt, die oberhalb der Control-Toolbox angeordnet ist. Overview-Toolbox Die Overview-Toolbox besitzt zwei unterschiedliche Aufgaben. Einerseits dient sie, nach Start des Assistenten, zur Auswahl eines Datensatztypen. Andererseits gibt sie eine Übersicht über die notwendigen Schritte zur Zusammenstellung und Integration eines gewählten Typs. Beim Start des Assistenten übernimmt die Overview-Toolbox zunächst die Funktion zur Auswahl eines Datensatztypen, der in ELVIS eingespielt werden soll (Bedienkonzept „Start“). Dafür werden mehrere „Kacheln“ bestehend aus einem Namen und einem Bild angezeigt. Die Kacheln repräsentieren verschiedene Datensatztypen. Durch Auswahl (einfacher Klick mit der linken Maustaste) wird die Eingabe für den gewählten Datensatztyp gestartet (Tabelle 4.04 – Auswahl Datensatztyp). - 46 - ' & !% #" Auswahl Datensatztyp • • • Es können 1..n unterschiedliche Datensatztypen ausgewählt werden. Ein Datensatztyp wird von einem Namen und einem Bild repräsentiert. Zusammen bilden diese beiden Daten eine „Kachel“. Reicht der vertikale Platz nicht für die Darstellung aller Datensatztypen aus, so wird am rechten Rand eine Scrollleiste angezeigt. Übersicht Dateneingabe • • • • Wurde ein Datensatztyp ausgewählt, so werden der Titel und das Bild des gewählten Typs angezeigt. (1) Für die Eingabe und Integration eines Datensatztypen sind 1..n Schritte (S_1 .. S_n) notwendig. Jeder Schritt besitzt einen Titel und eine Kurzbeschreibung Es gibt vier Bearbeitungszustände: Nach Auswahl eines Datensatztypen wird eine Übersicht über die Gesamtaufgabe angezeigt, die eine Auflistung der einzelnen Teilaufgaben beinhaltet (Tabelle 4.04, Übersicht Dateneingabe). Zusätzlich wird der Bearbeitungsstatus der Teilaufgaben angegeben. Die Übersicht gibt dem Nutzer folgende Informationen: • Benennung der Gesamtaufgabe („Import Datensatztyp“) • Beschreibung der einzelnen Schritte, die für die Datenzusammenstellung und Integration notwendig sind (Titel, Kurzbeschreibung) • Status (aktiv/inaktiv/vollständig/unvollständig) Aus Tabelle 4.04 ergeben sich folgende Daten, die für die Gestaltung der OverviewToolbox benötigt werden: • Gesamtheit aller Datensatztypen, die in ELVIS integriert werden können • Für jeden Datensatztyp: - 47 - o Name o Bild o Für jeden Bearbeitungsschritt: Titel Kurzbeschreibung DataEntry-Toolbox Die Dateneingabe, Zusammenstellung und Integration findet innerhalb der DataEntryToolbox statt. Nach Auswahl eines Datensatztypen werden alle notwendigen Schritte für die Dateneingabe und Integration geladen. Jeder Schritt wird durch einen Tab repräsentiert, die unter anderem Formularmasken für die Dateneingabe bereitstellen. Beim Start wird dem Nutzer zunächst eine Einführung in die Benutzung des Assistenten gegeben (siehe Abbildung 4.06). Innerhalb der DataEntry-Toolbox wird eine Unterseite mit Informationen geladen, die beschreibt, wozu das DEP dient, welche unterschiedlichen Datensatztypen integriert werden können und welche Aktion der Nutzer als nächstes durchführen muss, um fortzufahren. Er wird aufgefordert auf in der Overview-Toolbox einen Datensatztypen auszuwählen, den er in ELVIS importieren will. - 48 - # Hat der Nutzer einen Datensatztypen für die Integration ausgewählt, so wird der Assistent initialisiert. Es werden innerhalb der DataEntry-Toolbox die Editoren für die einzelnen Schritte geladen. Die Editoren werden als Tabs eingefügt. Die Kartenreiter sind in Bearbeitungsreihenfolge und erhalten als Titel den Identifikator der Teilaufgabe (Tabelle 4.03), die darin bearbeitet wird. Abbildung 4.07 veranschaulicht dies. " Eine Teilaufgabe besitzt einen Hilfetext, der beschreibt, was das Ziel der Teilaufgabe ist und was vom Nutzer für die vollständige Bearbeitung verlangt wird. Der Hilfetext wird aus einer externen HTML-Datei geladen. Für die Internationalisierung des Assistenten sind die HTML-Dateien in die jeweilige Sprache zu übersetzen. Control-Toolbox Die Control-Toolbox dient der Navigation zwischen einzelnen Bearbeitungsschritten (siehe Abbildung 4.08). Der Nutzer kann zum nächsten oder vorherigen Schritt wechseln („Weiter“ und „Zurück“) oder die Bearbeitung abbrechen („Abbrechen“). " - 49 - '! Im letzten Bearbeitungsschritt wird die Gesamtaufgabe abgeschlossen. Die Beschriftung des „Weiter“-Schaltfläche ändert sich nun in „>> Speichern <<“ (siehe Abbildung 4.09). % " Die „Weiter“-Schaltfläche ist der zentrale Ort für die Navigation innerhalb des Assistenten. Sie veranlasst bei einfachem Mausklick auf die Schaltfläche die Validierung und die Speicherung der Eingaben der aktuell gewählten Registerkarte und ruft danach den nächsten Bearbeitungsschritt auf. Eine separate „Speichern“-Schaltfläche wird aus diesem Grund nicht benötigt. Dadurch lässt sich der Assistent intuitiv bedienen, weil der Nutzer für die Navigation zwischen den Schritten durchgängig die gleiche Schaltfläche betätigt, die an einem festen Ort platziert wird. Schaltflächen innerhalb der Editoren werden nicht benötigt. Bemerkung: Dieses Kapitel kann aus Platzgründen nicht alle Details der Implementierung umfassen. Es wurde eine Auswahl getroffen, die einen Überblick über die Implementierung des entwickelten Konzepts gibt. '$'$& Für die Umsetzung des - im gestalterischen Konzept entwickelten - Layouts wurde die ELVIS-GUI-Konfigurationsdatei (/conf/xml/LayoutElvis.xml) erweitert. Es wurde ein neues <page> Element hinzugefügt, das die drei Toolboxes Overview-Toolbox, DataEntry-Toolbox und Control-Toolbox enthält und ihnen unter anderem die jeweilige Position, deren Höhe und die Breite zuweist (siehe Anhang 7.3 auf Seite 98). Die Toolboxes werden über das <Classname> Element mit der jeweilige JAVA-Klasse verknüpft, die den Quellcode für die jeweiligen Funktionalitäten beinhalten (Abbildung 4.10). Der Begriff Toolbox wird dabei mit TB abgekürzt. Toolboxes sind nach der MVC-Architektur aufgebaut (siehe Kapitel 2.4.1 auf Seite 22). Der View wird im Folgenden als Toolbox (z. B. DataEntry-Toolbox oder DataEntryTB) bezeichnet, an die Bezeichnung der Toolbox wird der Begriff Controller (z. B. DataEntry-Controller) angehängt, wenn die Controller-Klasse des Views gemeint ist. Das Modell erhält den Anhang DataSource (z. B. DataEntry-DataSource). - 50 - (" ! ' & # Bei den zugewiesenen Klassen handelt es sich um den View der Toolboxes. Beim Start des Assistenten werden die Klassen instanziiert und deren init() Methode aufgerufen. Die Methode instanziiert rund registriert den zugehörigen Controller und das Model (DataSources) und zeichnet den Startbildschirm der jeweiligen Toolboxes. Abbildung 4.11 zeigt beispielhaft, den Mechanismus zum Laden der „Einführungs“-Seite in der DataEntry-Toolbox (siehe Abbildung 46 auf Seite 48). Dafür wird innerhalb der Funktion init() beim Start die Funktion updateTabs() mit dem Parameter „introduction“ aufgerufen, die den Inhalt der Einführungsseite zusammenstellt und zeichnet. In Kapitel 4.4.2 auf Seite 55 wird die Funktion näher erläutert. '$ # DataSources entsprechen dem Modell der MVC-Architektur (siehe Kapitel 2.4.1, Seite 22). Innerhalb einer OverviewTBDataSource werden alle benötigten Daten gespeichert, die für die Darstellung der Informationen zu verschiedenen Datensatztypen und die Übersicht über die Integrationsschritte notwendig sind (siehe Tabelle 4.05, abgeleitet aus Tabelle 4.04 auf Seite 47). - 51 - *!%" !!#!!$! )" !#! !'!& ID: „geodata“ Bild: geodata.png Name: „Raster/Vektor“ Bild: „geodata.png“ Schritte: “Upload”, “Transfer files from local…” “Metadata”, “Describe data…” “Styling”, “Style your data…” “Save”, “Start integration process…” Diese Daten werden mit folgenden Datenstrukturen innerhalb der OverviewTBDataSource modelliert (Listing 4.02) )!" $$%!" 01 02 03 04 05 06 07 08 09 10 11 12 Datensatztypen (Array) |_ Datensatztyp1 (Objekt vom Typ OverviewTBDataSource) |_ ID (String) |_ Name (String) |_ Bild (String) |_ Schritte (LinkedHashMap) |_Titel (String), Kurzbeschreibung (String) |_Titel (String), Kurzbeschreibung (String) |_ Datensatztyp2 (Objekt vom Typ OverviewTBDataSource) |_ ID |_ … |_ … Die Umsetzung in JAVA wird in der Klasse OverviewTBDataSource.java vorgenommen (Listing 4.03). ) !'"!" $$%!" 01 02 03 04 05 06 07 08 08 09 10 11 12 public OverviewTBDataSource ( String id, String name, String picture, LinkedHashMap<String, String> steps) { setId(id); setName(name); setPicture(picture); setSteps(steps); } public static OverviewTBDataSource[] getDatasetTypes() { - 52 - 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 LinkedHashMap<String, String> geodataIntegrationSteps = new LinkedHashMap<String, String>(); geodataIntegrationSteps.put("Upload", "Transfer geodata …"); geodataIntegrationSteps.put("Metadata", "Please describe…"); geodataIntegrationSteps.put("Styling", "Control symboliza…"); geodataIntegrationSteps.put("Save", "Start the integration"); OverviewTBDataSource[] datasetTypes = new OverviewTBDataSource [] { new OverviewTBDataSource ( "geodata", "Raster/Vector", geodataIntegrationSteps ), new OverviewTBDataSource ( … ), … }; return datasetTypes; } Toolboxes kommunizieren über Ereignisse (Events) miteinander. In der ELVIS-GUIKonfigurationsdatei werden einer Toolbox andere Toolboxes zugeordnet, die auf Ereignisse reagieren (siehe Anhang 7.3 – Element <EventHandler>). Alle drei Toolboxes konsumieren Ereignisse von sich selbst und der anderen beiden Toolboxes. Der Benutzer führt Aktionen aus (zum Beispiel ein Mausklick auf eine Schaltfläche), die Ereignisse eines bestimmten Typs hervorrufen. Des Weiteren können Ereignisse auch bei Zustandsänderungen innerhalb des Assistenten programmtechnisch aufgerufen werden. Dadurch werden Abläufe kaskadiert und gekapselt. Die Views der registrierten Toolboxes werden durch Aufruf der Funktion handleEvent(GWTEvent event) von dem Ereignis benachrichtigt. Sie können - bedingt durch den Ereignistyp - auf die Aktion reagieren. Neue Ereignistypen wurden durch Ableitung von der Klasse GwtEvent entworfen. Tabelle 4.06 gibt einen Überblick über die umgesetzten Ereignistypen, um die Kommunikation zwischen den drei Toolboxes zu realisieren. - 53 - & %"# ! ID Ereignistyp Beschreibung 1 StartEvent Dieses Ereignis wird nach der Auswahl eines Datensatztyps generiert. Der Assistent lädt daraufhin, die für die Eingabe, Zusammenstellung und Integration des gewählten Typs, notwendigen Schritte innerhalb der DataEntry-Toolbox. Innerhalb der Overview-Toolbox wird eine Übersicht über die Teilaufgaben angezeigt. 2 NextEvent Der Benutzer nimmt an, dass der jetzige Bearbeitungsschritt vollständig ist und erzeugt ein NextEvent durch Betätigen der „Weiter“-Schaltfläche in der ControlToolbox. Die DataEntry-Toolbox empfängt das Ereignis und leitet die Speicheranfrage an den Controller des aktuell gewählten Tabs weiter. 3 CompleteEvent Der Tab-Controller hat die Speicheranfrage und die Validierung bearbeitet und übergibt den Status an die Funktion saveConfirm() des DataEntry-Controllers. Es wird ein CompleteEvent erzeugt, das als Attribut den Identifikator und den Status der Ereignisquelle besitzt. War die Speicherung und Validierung erfolgreich, so wird der nächste Bearbeitungsschritt freigegeben. Das Ereignis setzt den Status des bearbeiteten Schrittes innerhalb der Overview-Toolbox auf vollständig oder unvollständig. 4 TabSelectedEvent Bis auf den ersten Schritt sind bei der Initialisierung zunächst alle anderen Schritte deaktiviert. Wurde ein Schritt zur Bearbeitung freigegeben, so wird ein TabSelectedEvent erzeugt. Dieses Ereignis bewirkt, dass innerhalb der Overview-Toolbox der momentan bearbeitete Schritt hervorgehoben wird. 5 PreviousEvent Anzeige des vorherigen Bearbeitungsschrittes (falls ein vorheriger Bearbeitungsschritt existiert). 6 CancelRequestEvent Anfrage zum Abbruch der Bearbeitung durch betätigen der „Abbrechen“-Schaltfläche innerhalb der Control-Toolbox. Es wird eine Rückfrage in Form eines Dialogfelds angezeigt, in dem der Benutzer entscheiden kann, ob er tatsächlich abbrechen, oder ob er mit der Bearbeitung fortfahren möchte. Bestätigt der Nutzer die Rückfrage mit einem „Ja“, so wird ein CancelEvent erzeugt. Bestätigt er mit „Nein“ wird das Dialogfeld geschlossen und keine weitere Aktion ausgeführt. 7 CancelEvent Abbruch ohne Rückfrage. 8 RecordClickEvent Das Ereignis wird bei Auswahl eines Datensatztyps in der Overview-Toolbox erzeugt. - 54 - & &#&#% Innerhalb der Toolboxes werden verschiedene Funktionen implementiert. Im Folgenden werden die wichtigsten Funktionen erläutert. Nach der Auswahl eines Datensatztypen werden der DataEntry-Toolbox verschiedene Registerkarten (Tabs) hinzugefügt, die der Eingabe und Integration von Daten in ELVIS dienen (Abbildung 4.07 auf Seite 49). Die Anzahl und Art der Tabs ist abhängig vom gewählten Datensatztypen. Tabs besitzen einen View der im Folgenden als Tab (z.B. Metadata-Tab oder MetadataTab) bezeichnet wird und einen Controller, der als TabController (z.B. MetadataTab-Controller) bezeichnet wird. Abbildung 4.12 stellt schematisch den Mechanismus dar, um die entsprechenden Tabs in der DataEntry-Toolbox anzuzeigen. $! Die Tabs werden nach der Auswahl eines Datensatztypen initialisiert. Dafür wird die Funktion updateTabs(…) mit dem Identifikator des gewählten Datensatztyps aufgerufen (siehe Abbildung 4.13). Die Funktion updateTabs(…) bestimmt durch den übergebenen Identifikator datasetType, welche Funktion für die Initialisierung der Tabs zuständig ist. Im Falle eines Geodatensatzes (datasetType = „geodata“) ist dies die Funktion geodataTabs(). Die Funktion instanziiert die entsprechenden Tab Controller und konfiguriert diese. Im Falle eines Geodatensatzes sind dies die Controller: UploadTabController, MetadataTab- 55 - % Controller, StylingTabController und SaveTabController. Durch die Konfiguration wird eine Wiederverwendung der Tabs ermöglicht. Im Falle des Dateiuploads kann zum Beispiel der Upload-Tab konfiguriert werden, welche Dateinamenserweiterungen hochgeladen werden müssen, um den Bearbeitungsschritt erfolgreich abzuschließen. Bei Raster-Geodaten ist dies zum Beispiel eine Datei mit der Endung *.tif, bei Literaturdaten eine Datei mit der Endung *.pdf. Dadurch kann der gleiche Upload-Tab sowohl für die Integration von Geodatensätzen als auch "# $ für die Integration von zum Beispiel von Literaturdatensätzen wiederverwendet werden. Nach der erfolgreichen Instanziierung und Konfiguration aller Tab Controller für den gewählten Datensatztyp werden die Referenzen als geordnete Liste (LinkedHashMap<Identifikator><Controller>)) an die Funktion loadTabs(…) übergeben. Jeder Tab Controller besitzt per Vertrag (Interface) die Funktion generateForm(). Die Funktion loadTabs() entfernt zunächst alle bereits geladenen Tabs und ruft daraufhin in einer Schleife für jeden Tab Controller die Funktion generateForm() auf, die den Inhalt des Tabs generiert und in einem Layout anordnet und zurückgibt. Das Layout wird zu einem Tab hinzugefügt und in ein so genanntes TabSet eingehängt. Dieses TabSet wird nach Durchlauf durch alle Tab-Controller-Referenzen innerhalb der DataEntry-Toolbox angezeigt. Damit ist die Initialisierung des Assistenten zur Bearbeitung des gewählten Datensatztypen abgeschlossen und der Nutzer kann mit der Eingabe für den ersten Schritt beginnen. - 56 - %! Zentraler Ort der tion ist die „Weiter“-Schaltfläche innerhalb der Control-Toolbox. Sie stößt die Validierung und Speicherung der aktuellen Eingabe an. Abbildung 4.14 zeigt die Funktionsverkettung als Sequenzdiagramm. $" Nach dem Betätigen der „Weiter“-Schaltfläche in der ControlTB wird die DataEntryTB durch ein NextEvent über den Benutzerwunsch benachrichtigt, mit dem nächsten Schritt fortfahren zu wollen. Die DataEntryTB verknüpft den Ereignistyp NextEvent mit der Funktion saveRequest() und ruft diese Funktion im DataEntry-Controller auf. Der Controller bestimmt über die Funktion getTabController() den Controller des aktuell ausgewählten Tabs (Tab Controller) und leitet die Anfrage an dessen saveRequest() Funktion weiter. Die Funktion veranlasst zunächst eine clientseitige Validierung der Eingaben ( validate() ). Ist die Validierung erfolgreich, so wird die Eingabe in ein Transportformat XML überführt (Funktion generateXML()) und über den Request Manager zum Server gesendet (HTTP POST). XML Dokumente werden innerhalb einer XML Datenbank verwaltet. Die Datenbank validiert bei Eingabe das XML-Dokument gegen ein XML Schema und speichert es. Es wird eine Antwort (Response) zurückgegeben, ob die Validierung und Speicherung erfolgreich war. Die Antwort wird von der Funktion saveResponse() des Tab-Controllers verarbeitet. Enthält die Antwort eine Fehlermeldung, so wird innerhalb des Tabs der Fehler angezeigt. Die Antwort wird an den DataEntry-Controller weitergeleitet, der daraus ein CompleteEvent generiert. Das CompleteEvent benachrichtigt die DataEntry-Toolbox und die OverviewTB. Hat das CompleteEvent als Eigenschaft den Statuswert „true“, so war die Speicherung und Validierung erfolgreich und der nächste Bearbeitungsschritt wird in der - 57 - +" ! DataEntryTB für die Bearbeitung freigegeben und angezeigt. Ist der Statuswert des CompleteEvent „true“, so wird der Schritt als „vollständig“, d.h. mit einer grünen Farbe hinterlegt. Ist der Statuswert des CompleteEvent „false“, so wird der Schritt als „unvollständig“, d.h. mit der Farbe Rot hinterlegt. Außerdem wird durch das erzeugte TabSelectedEvent in der OverviewTB angezeigt, dass der nächste Schritt bearbeitet werden kann. Im Folgenden wird die Implementierung der Funktionskette anhand von Auszügen aus dem Quellcode verdeutlicht. Listing 4.04 zeigt den Quellcode der „Weiter“-Schaltfläche in der Control Toolbox (nextButton). Zu dieser wird ein ClickHandler hinzugefügt (Zeile 04), der bei Betätigung der Schaltfläche ein NextEvent (Zeile 06) erzeugt und die anderen Toolboxes davon benachrichtigt (Zeile 07). *(') #&#! 01 02 03 04 05 06 07 08 09 nextButton = new IButton("Next"); nextButton.setHeight100(); nextButton.setWidth("33%"); nextButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { NextEvent nextStepEvent = new NextEvent(); controller.notifyHandlers(handlerIDs, nextStepEvent); } }); Das Ereignis wird vom View der Toolboxes über die Funktion handleEvent(GwtEvent evt) entgegengenommen und verarbeitet (Listing 4.05). Über instanceof wird nach der Art des Ereignisses gefiltert (Zeile 02). Die DataEntry-Toolbox informiert den DataEntry-Controller über den Speicherwunsch, indem sie die Funktion saveRequest() aufruft. *#!)$# 01 02 03 04 05 06 public void handleEvent(GwtEvent evt) { if (evt instanceof NextEvent) { controller.saveRequest(); } … } Listing 4.06 zeigt die Verarbeitung durch den DataEntryTB-Controller. Dieser ermittelt den Controller des aktuell gewählten Tabs (Zeile 03) und leitet die Speicheranfrage an diesen weiter (Zeile 04). Per Vertrag (Interface) besitzt jeder Tab-Controller die Funktion saveRequest(). - 58 - '" ! & # 01 02 03 04 05 @Override public void saveRequest() { Controller controller = getTabController(selectedTabTitle); controller.saveRequest(); } Ist zum Beispiel aktuell der Tab “Metadata” ausgewählt, so wird die Speicheranfrage an den MetadataTab-Controller weitergeleitet. Listing 4.07 zeigt die Verarbeitung der Speicheranfrage durch die Funktion saveRequest() des MetadataTab-Controllers. Der Controller führt zunächst die client-seitige Validierung durch (Zeile 03 und 04). Ist diese erfolgreich (Rückgabewert „true“), so werden die Eingaben in das XML Format überführt (Zeile 07, generateXML()), eine Anfrage erstellt (Zeile 05+06) und diese an den Server weiterleitet (Zeile 07). Ist die Validierung nicht erfolgreich gewesen, so wird der Benutzer über eine Nachricht davon informiert (Zeile 09). & 01 02 03 04 05 06 07 08 09 10 11 @Override public void saveRequest() { ValuesManager valuesManager = getValuesManager(); if(valuesManager.validate()) { PutMetadataRequest request = new PutMetadataRequest(this, consumerIDs, handlerIDs); model.sendRequest(generateXml(), request); } else { SC.say("Please complete the form"); } } Der Server generiert eine Antwort und ruft die Funktion saveConfirm() des MetadataTab Controller auf (Listing 4.08). Die Funktion saveConfirm() wird per Vertrag (Interface) von jedem Tab Controller implementiert. Der TabController reicht die Antwort an den DataEntry-Controller weiter. &"#% 01 02 03 04 @Override public void saveConfirm(boolean status, String errMsg) { controller.saveConfirm(status, errMsg); } - 59 - /"&#! !!!!""$ " "%" Der DataEntry-Controller verarbeitet die Antwort innerhalb der Funktion saveConfirm() (Listing 4.09). Es wird ein CompleteEvent erzeugt (Listing 4.10, Zeile 04) und an die anderen Toolboxes verteilt (Listing 4.10, Zeile 05). . "# "& "# "" '-" 01 02 03 04 05 06 0 @Override public void saveConfirm(boolean status, String response) { tabCompleteEvent(status); if(!response.equals("")) { SC.say(response); } } . !"%")#"""%" 01 02 03 04 05 06 public void tabCompleteEvent(boolean status) { CompleteEvent completeEvent = new CompleteEvent( SelectedTabTitle(), status); notifyHandlers(handlerIDs, completeEvent); } Das CompleteEvent wird nun von der DataEntry-Toolbox verarbeitet (Listing 4:11). Besitzt der übergebene Status den Wert „true“, so wird der nächste Bearbeitungsschritt freigegeben. ."#!"%"# "" '*% 01 02 03 04 05 06 public void tabCompleteEvent(boolean status) { CompleteEvent completeEvent = new CompleteEvent( SelectedTabTitle(), status); notifyHandlers(handlerIDs, completeEvent); } Innerhalb der Overview-Toolbox bewirkt das CompleteEvent, dass der Status für den Bearbeitungsschritt als complete oder notComplete angezeigt wird (Listing 4.12 und Listing 4.13). ."#!,"%"+# % %& 01 02 03 04 05 06 else if(evt instanceof CompleteEvent) { CompleteEvent event = (CompleteEvent) evt; String tabName = event.getTabName(); boolean tabStatus = event.getTabStatus(); controller.tabCompleteEvent(tabName, tabStatus); } - 60 - %! $ " ! 01 02 03 04 05 06 07 08 09 public void tabCompleteEvent(String completedTab, boolean status) { String stepStatus = "status"+completedTab.toLowerCase(); if(status) { Layout.getById(stepStatus).setStyleName("complete"); else { Layout.getById(stepStatus).setStyleName("notComplete"); } } Die Funktionalitäten für die Erstellung eines WGEF-Archivs aus den Eingaben werden innerhalb eines eigenen Tabs SaveTab.java umgesetzt. Durch Auswahl der „Weiter“Schaltfläche wird der Prozess angestoßen. War die Erstellung erfolgreich, so wird die Integration gestartet. Abbildung 4.15 zeigt mit Hilfe eines Sequenzdiagramms die Verkettung der beteiligten Funktionen des Prozesses. $ Der DataEntry-Controller ruft die Funktion saveRequest() des Tab Controllers auf. Dieser erzeugt zunächst einen Request (Funktion createWgefRequest()) mit den benötigten Parametern und sendet diesen an den WPS Dienst, der für die Erstellung des WGEF Datensatzes zuständig ist. - 61 - Die zurückgelieferte Antwort wird verarbeitet. Ist ein Fehler aufgetreten so wird dieser dem Nutzer gemeldet. Ist die Erstellung erfolgreich gewesen, so kann die Integration gestartet werden. Dazu wird erneut ein Request aufgebaut und an den Integrations-WPS abgeschickt. Die Antwort wird erneut verarbeitet ( parseResponse() ). Bei einem Fehler wird der Nutzer informiert. Bei Erfolg wird ein Hinweis gegeben, dass die Integration erfolgreich war. Zusätzlich wird ein CancelEvent erzeugt, das den Assistenten wieder auf den Ausgangszustand zurücksetzt und somit ein neuer Datensatztyp für eine weitere Integration gewählt werden kann. Für die temporäre Speicherung von XML-Dateien wird innerhalb des Projektes die XMLDatenbank eXist48 eingesetzt. Diese besitzt eine REST-konforme Schnittstelle für die Übertragung von XML-Dokumenten. Sie besitzt des Weiteren die Möglichkeit über die Konfiguration einen XML-Validierungsmechanismus einzuschalten, der die Dokumente bei der Eingabe gegen ein Schema zu überprüfen. Die Schemata können innerhalb der Datenbank verwaltet werden. Ist das Dokument valide, so wird es gespeichert. Ist das Dokument jedoch nicht gültig, so wird es abgelehnt und es wird eine Fehlermeldung zurückgegeben. 48 http://exist.sourceforge.net/ (abgerufen am 05.09.2010) - 62 - Die erhobenen Anforderungen dokumentieren die Ansprüche an die entwickelte Software. In den Teilkonzepten und dem Gesamtkonzept wurde deren Umsetzung geplant. Die Konzepte wurden in der Programmiersprache JAVA implementiert. Das Ergebnis der Implementierung ist eine grafische Oberfläche, die sich in das ELVIS System als neue Seite einfügt und über die Registerkarte „DataEntryPortal“ gestartet wird. Dem Benutzer wird der Startbildschirm präsentiert (Abbildung 4.16) Das Layout besteht aus zwei Spalten. Die rechte Spalte des Startbildschirms führt den Nutzer in die Bedienung des Assistenten ein und gibt ihm einen Überblick über die verschiedenen Datentypen, die in ELVIS integriert werden können. Um den Integrationsvorgang zu beginnen, wird der Nutzer gebeten in der linken Spalte den gewünschten Datentypen aus einer Liste verschiedener Datentypen auszuwählen. Durch einen einfachen Mausklick mit - 63 - der linken Maustaste auf einen Datentyp wird der Assistent für die Integrationsaufgabe initialisiert. Im Rahmen dieser Diplomarbeit wurde der Assistent für die Integration eines Datensatzes vom Typ Geodaten umgesetzt (Abbildung 4.17). Wurde im Startbildschirm der Datensatztyp Geodaten ausgewählt, so werden die verschiedenen Schritte für die Eingabe, Zusammenstellung und Integration geladen. In der linken Spalte wird nun eine Übersicht angezeigt, welcher Datensatztyp ausgewählt wurde („Raster/Vector Geodata“), welche Schritte für die Integration notwendig sind („Step 1 – Upload“, „Step 2 – Metadata“, Step 3 Styling“, „Step 4 – Save“ & eine Kurzbeschreibung der einzelnen Schritte). Die weiße Hinterlegung zeigt den momentan bearbeiten Schritt an und die Umrandung der Schritte den Bearbeitungsstatus (rot = unvollständig / grün = vollständig). - 64 - Zunächst ist lediglich der erste Schritt (Upload) für die Bearbeitung freigegeben. Der Nutzer wird gebeten entweder Dateien im ESRI Shapefile oder im GeoTiff Dateiformat von seinem Computer auf den Server hochzuladen. Über die Schaltfläche „Browse“ kann er die gewünschten Dateien hochladen. Der Nutzer über die Schaltfläche „Next“ in der Steuerungsleiste (rechte Spalte, unten) den Wunsch äußern, mit dem nächsten Bearbeitungsschritt fortzufahren. Es wird zunächst vom Assistenten überprüft, ob alle verpflichtenden Dateien bereitgestellt wurden. Ist dies der Fall, so wird der zweite Schritt (Metadata) für die Bearbeitung freigegeben (Abbildung 4.18). In der Übersicht wird der erste Schritt durch die grüne Umrandung als vollständig markiert. Als aktuell bearbeiteter Schritt wird durch die weiße Hinterlegung nun „Step 2 – Metadata“ angezeigt. Der zweite Schritt dient der Eingabe von Metadaten, die den Inhalt der bereitgestellten Dateien beschreiben. Dafür wird ein Formular mit verschiedenen Eingabefeldern angezeigt, - 65 - die vom Nutzer auszufüllen sind. Es gibt verpflichtende und optionale Felder. Der Nutzer äußert durch Betätigen der „Next“-Schaltfläche den Wunsch mit dem nächsten Schritt fortzufahren. Es wird überprüft ob alle Pflichtfelder korrekt ausgefüllt wurden. Ist die Eingabe unvollständig, so wird er mit einer Dialogbox darauf aufmerksam gemacht und hat die Möglichkeit die Eingaben zu ergänzen. Sind alle Felder korrekt ausgefüllt, so wird der dritte Schritt („Step 3 - Styling“) für die Bearbeitung freigeben (Abbildung 4.19). Schritt zwei wird als vollständig markiert und Schritt 3 als aktuell bearbeiteter Schritt angezeigt. In Schritt drei wird festgelegt, wie später die Daten in ELVIS angezeigt werden. Dafür wird ein Eingabefeld bereitgestellt, in das der Nutzer ein extern erstelltes SLD-Dokument hineinkopiert. Durch Verweise (Links) auf externe Internetseiten und Software wird Hilfestellung gegeben, wie eine SLD-Datei erstellt werden kann. Nach Betätigen der Schaltfläche „Next“ wird die Datei zum Server übertragen und dort validiert, ob es sich um - 66 - ein gültiges SLD-Dokument handelt. Ist dies der Fall, so wird der letzte Schritt („Step 4 Save“) freigegeben und angezeigt (Abbildung 4.20). Im letzten Bearbeitungsschritt ändert die „Next“-Schaltfläche die Beschriftung zu „>>SAVE<<“. Sind alle zuvor getätigten Eingaben vollständig, so werden die Eingaben nach Betätigen der „SAVE“-Schaltfläche verarbeitet. Aus den Eingaben wird ein WGEFArchiv erstellt und dieses an die Integrationssoftware übergeben. Ist die Integration erfolgreich, so wird der Nutzer über eine Dialogbox darüber informiert. Es wird der Startbildschirm angezeigt, um mit der Integration weiterer Datensäte fortzufahren. Mit Auswahl der „Previous“-Schaltfläche kann von jedem Schritt aus zum vorherigen Schritt navigiert werden. Die Schaltfläche „Cancel“ bewirkt den Abbruch der Integration. Nach Bestätigung des Abbruch-Wunsches werden getätigte Eingaben gelöscht und der Startbildschirm angezeigt, um mit der Integration eines anderen Datensatzes fortzufahren oder das DatenEingangsPortal zu verlassen. - 67 - ! Der entwickelte Assistent erfüllt technisch die erhobenen Anforderungen. Mit ihm können die Eingaben der Bestandteile vorgenommen und diese in die ELVIS Geodateninfrastrukur integriert werden. Des Weiteren kann der Assistent im Anschluss an diese Arbeit für die Integration weiterer Datensatztypen erweitert werden. Die Technik wurde während der Entwicklung getestet. Die Umsetzung der Anforderung, dass die „Bedienung intuitiv ist“ beruht auf eigenen Erfahrungswerten und Erfahrungen des Entwicklerteams mit der Integrationsaufgabe. Sie müsste evaluiert werden. Dies konnte auf Grund der begrenzten Zeit nicht durchgeführt werden. Die Evaluierung könnte mit zukünftigen Nutzern des DatenEingangsPortal durchgeführt werden. Dafür wäre ein Test vorstellbar, in dem man potentielle Nutzer ein erstes Mal die Software bedienen lässt und ihnen über die Schulter schaut, ohne Hilfestellungen zu geben. Im Anschluss daran sollte die Eigenwahrnehmung der Probanden mittels eines Fragebogens abgefragt werden. Die Beobachtungen möglicher Irritationen bei der Bedienung sollten in weitere Verbesserungen der Software einfließen. Des Weiteren ist es bei „Assistenten“ üblich im letzten Schritt (siehe Abbildung 4.20) eine Zusammenfassung der zuvor getätigten Eingaben anzuzeigen. Die Anzeige eines Bildes, das die hochgeladenen Geodaten nach den eingegeben Darstellungsregeln visualisiert, bevor der tatsächliche Integrationsvorgang gestartet wird, könnte einen deutlichen Mehrwehrt bieten. Der Benutzer könnte interaktiv die Darstellung der bereitgestellten Geodaten anpassen, ohne die Daten zunächst in ELVIS einspielen zu müssen. - 68 - Das in Kapitel 3.2.2 auf Seite 27 vorgestellte DatenEingangsPortal (DEP) integriert Geodaten im Raster- (GeoTiff) oder Vektor (ESRI Shapefile) Datenformat in die ELVIS Geodateninfrastruktur. In diesem Aufgabenteil wird das DatenEingangsPortal für die Integration von Messdaten von in-situ Sensoren erweitert. Das Hinzufügen neuer Sensoren zu ELVIS wird in dieser Arbeit nicht realisiert. Im Kapitel 2 Stand der Technik auf Seite 11 wurde der Sensor Observation Service (SOS) des Open Geospatial Consortium vorgestellt, dessen Schnittstellen und Formate offene Standards für die Verwaltung so genannter Sensornetzwerke bereitstellen. Der SOS standardisiert unter anderem die Kodierung von Sensormesswerten in XML Dokumenten (Observations&Measurements (O&M)), und beschreibt Schnittstellen für den Datenabruf über die Funktion GetObservation, die Registrierung neuer Sensoren mittels RegisterSensor und auch den Import von Sensormessdaten über die Funktion InsertObservation. In der Entwurfsphase von ELVIS gab es die Anforderung der einmaligen Integration von Sensoren und Sensormessdaten. Ein kontinuierlicher Datenfluss neuer Sensormessdaten war nicht vorgesehen. Aus dieser Anforderung heraus wurde die Entscheidung getroffen, dass das Hinzufügen und der Abruf von Sensoren und Sensormessdaten nicht über den SOS-Standard umzusetzen, sondern proprietäre Datenmodelle und Schnittstellen zu entwickeln. Im Zuge der Entwicklung hat sich die Anforderung einer kontinuierlichen Ergänzung von Sensormessdaten ergeben. Für die Umsetzung der Anforderung wäre die Integration von Sensormessdaten über den SOS-Standard wünschenswert. Dies würde aber bedeuten, dass die Funktionalitäten zum Abruf und Visualisierung der Daten neu implementiert werden müssten, da diese auf das proprietäre Datenmodell und Schnittstellen angepasst sind. Dies kann weder im Rahmen dieser Arbeit, noch im Projektkontext zeitnah geleistet werden. Aus diesem Grund wird in dieser Arbeit die Datenintegration in das bestehende Datenmodell angestrebt. Das Datenmodell und das Austauschformat werden in den folgenden Unterkapiteln vorgestellt und darauf aufbauend das DEP für den Import von Sensormessdaten erweitert. - 69 - $ $!#!# Die Verwaltung und Speicherung von Sensoren und Sensormessdaten wird innerhalb einer relationalen Datenbank vorgenommen (PostgreSQL). Dafür hat das DFD ein eigenes Datenbankmodell entwickelt. Die Modellierung baut auf Begriffen und Beziehungen zwischen den Begriffen auf, die im Folgenden beschrieben werden (semantisches Modell): Ein Sensor („observer“) ist eine Plattform, auf der ein oder mehrere Messmodule installiert werden. Ein Messmodul („module“) ist für die Messung eines Objektparameters (z. B. Wasserstand, Lufttemperatur) in einer festgelegten Einheit zuständig. Eine Messung („observation“) verknüpft einen Messwert („value“), der zu einem bestimmten Zeitpunkt („time“) gemessen wurde mit dem Modul, das die Messung vorgenommen hat und den Sensor, zu dem das Modul zugehörig ist. Damit sind für eine Messung der Wert, der gemessene Umweltparameter, die Messeinheit („unit“), der Zeitpunkt und der Ort der Messung bekannt. Aufbauend auf das semantische Modell wurden Datenbankschemata entwickelt (siehe Abbildung 5.01). observations.dataset 1:1 #!! 1:1 1:1 1:m " Messungen werden als Datensätze in der Tabelle observations.dataset verwaltet. Ein Datensatz besteht aus 1 .. n Messungen eines Modultypen, die von einem oder mehreren Sensoren vorgenommen wurden. Er besitzt einen eindeutigen Identifizierungsschlüssel (uuid). - 70 - ! Der Datensatz wird über die Spalte uuid_clean einerseits mit einem Modul (Tabelle observation.module, Spalte cleanuuid), andererseits mit einer Tabelle observations.{uuid_clean}, die die Messungen speichert, verknüpft. Eine Messung besteht aus einem Identifikator (id), einem Zeitpunkt (date), einem gemessenen Wert (value) und einem Fremdschlüssel zu einem Sensor (observer). Der Fremdschlüssel verweist auf die Spalte code in der Tabelle reference.spatial_observations. Eine Integritätsbedingung (Fremdschlüssel-„Constraint“) legt fest, dass in die Tabelle observations.{uuid} nur Messungen eingefügt werden können, deren Sensor bereits in der Tabelle reference.spatial_observation registriert sind. Anderenfalls wird beim Einfügen eine Fehlermeldung zurückgegeben. Für den Austausch von Sensormessdaten wurde ein Format festgelegt, das die Messdaten kodiert (siehe Listing 5.01). Das Listing zeigt beispielhaft vier Messungen eines Moduls (Zeile 02 – Zeile 04). Projektpartner liefern Messdaten als kommagetrennte Dateien (Comma Separated Values, CSV-Dateiformat). Diese beinhaltet vier Spalten: Den Identifikator des Sensors (Spalte 1: observer), den Messzeitpunkt (Spalte 2: time) im Format „YYYY-MM-DD hh:mm:ss.f“ (Y=Jahr, M=Monat, D=Tag, h=Stunde, m=Minute, s=Sekunde), den numerischen Messwert (Spalte 3: value) und das Akronym des Sensormoduls (Spalte 3: module), das den Wert gemessen hat. Das Akronym „wl“ steht in diesem Beispiel für die Bezeichnung „waterlevel“, also ein Sensormodul, das den Pegelstand zum Beispiel eines Flusses misst und ein Modul in Tabelle observations.module (Spalte „acronym“) referenziert. Der angegebene Sensor verweist auf einen, in reference.spatial_observation (Spalte „code“) gespeicherten, Sensor. Innerhalb der Spaltenwerte können Hochkommas und Leerzeichen vorkommen. 01 02 03 04 05 06 observer, time, value, module GFZ_G1, 2008-06-01 01:00:00.0, GFZ_G1, 2008-06-01 02:00:00.0, GFZ_G1, 2008-06-01 03:00:00.0, GFZ_G1, 2008-06-01 04:00:00.0, … -0.08, wl -0.07, wl 0.02, wl 0.29, wl - 71 - $ ! $#" „Eine nichtfunktionale Anforderung legt fest, welche Eigenschaften das Produkt haben soll“49. Tabelle 5.01 listet die nichtfunktionalen Anforderungen auf. Im Anschluss an die Tabelle werden diese erläutert. !! Identifikator Anforderung A_01 Erweitert das bestehende DatenEingangsPortal A_01_01 Kann über das Internet ausgeführt werden Der Mechanismus für den Import der Messdaten wird in das bestehende DatenEingangsPortal (DEP) eingebunden. Nach der Erweiterung kann beim Aufruf des DEPs - alternativ zum WGEF Archiv, das Geodaten enthält - eine Datei übergeben werden, die die Messdaten beinhaltet. Der Dienst kann über das Internet ausgeführt werden. Dafür muss eine Schnittstelle geschaffen werden, die die Messdaten über das Internet entgegennimmt und ein Kommandozeilenprogramm für die Integration aufruft. $## „Eine funktionale Anforderung legt fest, was das Produkt tun soll.“50 Tabelle 4.02 listet die funktionalen Anforderungen auf. Im Anschluss an die Tabelle werden diese erläutert. ! ! Identifikator Anforderung A_02 Identifizierung des übergebenen Datensatztypen A_03 Auslesen der Inhalte einer kommagetrennten Textdatei (CSV Format). Überführen der Spalteninhalte in JAVA-Objekte. A_03_01 Validierung der Dateneingaben 49 http://de.wikipedia.org/wiki/Anforderung_Informatik (Stand: 31. Okt. 2010, 20:20) 50 http://de.wikipedia.org/wiki/Anforderung_Informatik(Stand: 31. Okt. 2010, 20:20) - 72 - A_04 Bestimmen des Namens der Zieltabelle A_05 Speichern der Daten in der Datenbank .13-#(!$"%!#"#(#' Anforderung A_02 folgt aus A_01. Beim Aufruf des DEP muss ein Einstiegspunkt (Funktionsaufruf) für die Integration des jeweiligen Datensatztypen bestimmt werden. Dafür wird zunächst der Datensatztyp identifiziert. Eine Weiche ruft nach der Erkennung des Datensatztypen die entsprechende Startfunktion auf. .14 - $"" ! # ! #!# &## /,!#0+ !%!! ##, #+ Für die Verarbeitung und Validierung der Eingabedaten wird der Inhalt der CSV-Datei in JAVA-Objekte/Variablen eingelesen. .14.12-!$!# Da die übergebenen Messdaten Fehler enthalten können, die zu einer Inkonsistenz in der Datenbank führen könnten, muss überprüft werden, ob der Inhalt der CSV-Datei definierten Erwartungen entsprechen. Dafür müssen die Erwartungen festgelegt und diese mit dem Inhalt der CSV verglichen werden. Entspricht der Inhalt nicht den Erwartungen, so werden die Daten nicht in der Datenbank gespeichert. .15-"#""!# Die Messungen werden zu einem Datensatz hinzugefügt. Da die Messwerte eines Datensatzes in einer Zieltabelle observations.{uuid} gespeichert werden, muss zunächst über das - in der CSV Datei angegebene – Modul-Akronym der Identifikator des Datensatzes bestimmt werden. Dafür wird eine SQL-Anfrage an die Datenbank gesendet. Das zurück gelieferte Ergebnis entspricht dem Tabellennamen der Zieltabelle, in der die Messungen gespeichert werden. .16- !!#!# Die eingelesenen Messwerte werden in der, in Anforderung A_04, bestimmten Zieltabelle der Datenbank dauerhaft gespeichert. - 73 - ! &"%"$ & Für die Integration von Sensormessdaten wird das DatenEingangsPortal in der gleichen Art und Weise aufgerufen, wie bei der Integration von Geodaten (siehe Kapitel 3.2.2). Anstatt des WGEF-Archivs wird eine Datei übergeben, die die Sensormessdaten enthält. Das DatenEingangsPortal bestimmt aus der übergebenen Datei den Datensatztypen (Anforderung A_02) und startet durch einen Funktionsaufruf den Import der Messdaten (Anforderung A_01_01). In Kapitel 3.2.2 auf Seite 30 wurde die WPS Kapselung des DEP vorgestellt. Der WPS stellt eine Schnittstelle für den Kommandozeilenaufruf der JAVA-Software über das Internet bereit. Um die Modularität des DEP zu erhöhen wird das Programm für die Sensormessdatenintegration ebenfalls über einen WPS gekapselt. Dieser wird durch das DEP aufgerufen (siehe Abbildung 5.02). !# Der Typ eines Datensatzes kann über mehrere Methoden identifiziert werden. Einerseits besteht die Möglichkeit diese über eine generische Methode durch das DEP zu bestimmen: - 74 - ,%!" #!$ ! • Ein Datensatz besteht aus einer oder mehreren Dateien. Jede Datei besitzt eine Dateinamenswertweiterung. Die Kombination verschiedener Erweiterungen kann für die Identifizierung des Datensatztypen herangezogen werden. Z. B. charakterisiert die Kombination *.shp, *.prj, *.shx, *.dbf, *.xml, *.sld einen Geodatensatz. Ein Sensordatensatz besteht aus einer einzigen *.csv Datei. Die Kombination wird mit einer vorgehaltenen Liste abgeglichen. Allerdings kann nicht sichergestellt werden, dass diese Kombination für jeden Typ eindeutig ist. Anderseits kann von außen die Information über den Datensatztypen beim Start durch den Aufrufer mitgegeben werden: • Beim Aufruf des DatenEingangsPortals wird ein weiteres Argument übergeben, dass den Datensatztyp spezifiziert („-type sensor“ bzw. „-t sensor“). Das DatenEingangsPortal wertet das Argument aus. Der Datensatztyp wird innerhalb der Dateinamenserweiterung kodiert: • Die Datei(en) eines Datensatzes werden in einem Archiv komprimiert. Das Archiv erhält eine eindeutige Dateinamenserweiterung, durch die der Datensatztyp bestimmt wird. Analog zur Dateinamenserweiterung *.wgef wird die CSV-Datei in einem Archiv gespeichert, das die Endung *.wsef besitzt (WISDOM Sensor Exchange Format). Die letztgenannte Methode ist für die Erfüllung der Anforderung gut geeignet. Sie erweitert das bisherige Konzept für die Kodierung der Datensatztypen (siehe WGEF). Die Dateinamenserweiterung ist eindeutig und die Methode ermöglicht die gleichzeitige Integration mehrerer Datensätze („Batch“-Import), da die Information innerhalb der Datei kodiert wird. " !!!&!!*!+)#!!!) Die, in der CSV-Datei gespeicherten Daten werden in der Tabelle observations.{uuid} gespeichert. Vor der Speicherung muss zunächst der Identifikator der Zieltabelle (uuid) bestimmt werden (Anforderung A_04). Dafür ist es notwendig die Daten aus der CSV-Datei zunächst in JAVA-Objekte einzulesen und über die Spalte „module“ die Zieltabelle zu bestimmen. - 75 - ! Es wird eine Klasse „Measurement“ entworfen, die einzelne Messungen modelliert (Abbildung 5.03). Sie besitzt die Attribute „observer“, „value“ und „time“ und hat Methoden zum Auslesen der Attributwerte (getObserver() ). Die CSV- Datei wird in einer Klasse DataExtractor in der Funktion readCsvFile() eingelesen und enthaltene Messungen zeilenweise in Measurement-Objekte überführt und verschiedenen Module-Objekten eingehängt. Das Ziel der Validierung ist es die Konsistenz der Datenbank zu wahren. Konsistenz bedeutet, dass die Daten innerhalb der Datenbank widerspruchsfrei sind. Eine Inkonsistenz würde z. B. dadurch entstehen, dass Werte in der CSV Datei falsche Datentypen beinhalten, Spalten fehlen oder Referenzen auf (in der Datenbank gespeicherte) Module oder Sensoren nicht korrekt sind. Es müssen Erwartungen an die Formatierung der Daten gestellt und diese in JAVA formuliert werden. Des Weiteren müssen Mechanismen entwickelt werden, den Inhalt mit den Erwartungen zu vergleichen. Erwartungen • Spalten sind durch Kommata getrennt (Trennzeichen: „ , “) • Zeilen sind durch einen Zeilenumbruch getrennt (Steuerzeichen „\n “) • Die erste Zeile enthält vier Spaltenüberschriften (observer, time, value, module). Sie liegen in dieser Reihenfolge vor. • Jede folgende Zeile entspricht einer Messung. Eine Messung besteht aus vier Spalten mit folgenden Datentypen: o 1. Spalte (observer): Datentyp String o 2. Spalte (time): Datentyp Date, Format: YYYY-MM-DD hh:mm:ss.f o 3. Spalte (value): Datentyp Float o 4. Spalte (module): Datentyp String - 76 - Validierung Die Validierung findet nach dem Auslesen und hauptsächlich vor der Überführung in JAVA Objekte statt. Dafür werden die Spaltenwerte aus der CSV-Datei mit den Erwartungen über Zeichenkettenvergleiche, Bedingungen, Typumwandlung validiert. Eine weitere Art der Validierung sind die in den Datenbanktabellen modellierten Integritätsbedingungen: • Das Vorhandensein der Spaltenüberschriften wird über einen Zeichenkettenvergleich durchgeführt Es wird überprüft, ob die erste Zeile die Spaltenüberschriften „observer“, „time“, „value“, „module“ besitzen und in dieser Reihenfolge vorliegen (Spalte1.equals(„observer“), Spalte2.equals(„…“), …). • Überprüfen, ob alle Zeilen (Überschrift, Messungen) vier Spalten besitzen (Spalten.length == 4) • Für das Programm sind alle eingelesenen Daten zunächst vom Typ String. Über eine Typumwandlung kann überprüft werden, ob der Inhalt den Erwartungen entspricht. Validierung der Spaltenwerte: o time: Der Spalteninhalt wird vom Typ String in einen Date-Datentyp umgewandelt. Schlägt die Konvertierung fehl, so ist der Inhalt der Spalte ungültig. o value: Schlägt die Konvertierung vom Typ String in den Typ float fehl, so ist der Inhalt der Spalte ungültig. o observer: Der Spalteninhalt wird ohne Typumwandlung als String eingelesen. Bei der Ermittlung der Zieltabelle (siehe Anforderung A_04) über eine SQL-Anfrage wird ein leeres Ergebnis zurückgeliefert, falls der referenzierte Sensor in der Tabelle reference.spatial_observation nicht vorhanden ist. Ist dies der Fall, so ist der Inhalt der Spalte ungültig. o module: Wird ohne Typumwandlung als String eingelesen. Falls das referenzierte Modul nicht in der Tabelle observations.module vorhanden ist (Integrititätsbedingung der Datenbanktabelle, Fremdschlüssel- „Constraint“Verletzung), wird beim Durchführen der INSERT-Anweisung ein Fehler zurückgegeben. Ist dieses der Fall, so ist der Inhalt der Spalte ungültig. - 77 - 2!'#!$%! !#&"!""# "#" "!# Für die Speicherung der Messungen, muss der Name der Zieltabelle bestimmt werden. Die Zieltabelle wird über das, in der Messungen angegebene, Modul-Akronym (Listing 5.01 auf Seite 71, Zeile 02-05, Spalte 4) mittels einer SQL-Anfrage ermittelt (Listing 5.02). Das Ergebnis ist der Identifikator des zugehörigen Datensatzes (UUID) und entspricht dem Namen der Zieltabelle, in der die Messungen gespeichert werden (UUID: o2bb6c26305304a87b3bcb9e4a8967eac -> Zieltabelle: observations.o2bb6c26305304a87b3bcb9e4a8967eac). -"#!"$!("%!"!&#"*$ 01 SELECT cleanuuid FROM observations.module WHERE acronym = 'wl'; Wird eine leere Ergebnismenge zurückgebenden, so ist das referenzierte Modul nicht in der Datenbank registriert. Die Messung wird nicht weiter verarbeitet. ! !!#!# Die Speicherung der Messungen erfolgt in der, in Anforderung A_04, ermittelten Tabelle observations.{uuid}. Die Struktur von CSV Dateien, ist der Datenstruktur der Datenbanktabellen ähnlich (Zeilen und Spalten). In manchen Datenbankmanagementsystemene gibt es Anweisungen für den direkten Import von Dateien im CSV-Format in die Datenbank (MySQL: „LOAD DATA INFILE“, PostgreSQL: „COPY“, siehe Listing 5.03). Diese Anweisungen sind Datenbanksystem spezifisch und bieten eine höhere Geschwindigkeit beim Import über einzelne INSERT-Anweisungen51. - !$!!#!"!&#"*0$$1%!, (+."#!/ 01 02 03 04 05 06 07 08 51 COPY tablename [ ( column [, ...] ) ] FROM { 'filename' | STDIN } [ [ WITH ] … [ CSV [ HEADER ] [ QUOTE [ AS ] 'quote' ] [ ESCAPE [ AS ] 'escape' ] [ FORCE NOT NULL column [, ...] ] http://jakub.wartak.pl/blog/?p=93 (abgerufen am 1.11.2010) - 78 - ," ! ' 01 02 COPY observations.o9352c9d2b03c40b58e48d9cace7158c0 (observer, date, value) FROM 'C:/data/measurements_ph.csv' WITH CSV HEADER , Die Spaltenanzahl innerhalb der CSV-Datei muss dabei der Spaltenanzahl der Zieltabelle entsprechen. Dies ist jedoch bei vorliegender Spezifikation des Austauschformats für Sensormessdaten (Listing 5.01 auf Seite 71) nicht der Fall. Vor dem Ausführen des COPY Befehls müsste die Spalte „module“ aus der CSV Datei entfernt werden. Des Weiteren können in einer CSV-Datei Messungen verschiedener Module eines Sensors enthalten sein. Messungen unterschiedlicher Module werden in verschiedenen Zieltabellen gespeichert. Damit ist die Speicherung der Messdaten mit der COPY Anweisung in diesem Fall nicht umsetzbar. Aus diesem Grund wird die Speicherung über INSERT-Statements durchgeführt. Die verschiedenen Messmodule werden als Module-Objekte modelliert, in die die verschiedenen Messungen einsortiert werden. Die Methode save() der Klasse Module speichert die enthaltenen Messungen in der Datenbank. ' !%() &" 01 02 03 04 ,%+%* INSERT INTO observations.{uuid} VALUES (observer, time, value), (observer, time, value); … " Das DatenEingangsPortal (DEP) dient als zentraler Einstiegspunkt für die Datenintegration in ELVIS. Der DEP-WPS wird über eine HTTP GET Anfrage an eine URL gestartet (Kapitel 3.2.2, Seite 30). Der Dienst ruft über die Kommandozeile das DEP auf und übergibt eine ZIP-Datei mit der Endung .wsef, die die CSV Datei mit den Messungen enthält. Über die Dateiendung des Archivs wird der Datensatztyp bestimmt und die zugehörige Startfunktion aufgerufen (siehe Listing 5.05). '# 01 02 03 04 05 if(file.endsWith(wsef)) { sensorIntegration(file); } else if(file.endsWith(wgef) { geodataIntegration(file); } - 79 - ! Die Startfunktion sensorIntegration(file) erzeugt eine URL zum Aufruf des Sensor WPS und führt eine HTTP GET Anfrage an die URL durch (Listing 5.06) 01 02 03 04 05 06 07 08 http://mekongvm5/cgi-bin/wps.py? request=execute& identifier=sensorIntegration& datainputs=[ geodata=http://xxx.xxx.xxx.xxx/sensorMeasurement.wsef] responsedocument=[package:wsef:result=@asreference=true]& service=wps& version=1.0.0 Der Sensor WPS ruft wiederum über die Kommandozeile die JAVA-Software für die Integration von Sensormessdaten auf, die im Folgenden beschrieben wird. ! Die Methode readCsvFile() der Klasse DataExractor liest die Messungen Zeilenweise aus der CSV-Datei ein und validiert diese. Die Werte werden in „Measurement“-Objekte überführt (siehe Kapitel 5.4.3). Abhängig von dem angegebene Modul-Akronym wird ein Objekt der Klasse Module instanziiert (falls dieses nicht schon vorhanden ist) und zu einer HashMap modules hinzugefügt. Bei der Instanziierung wird über das Module-Akronym die Zieltabelle aller enthaltenen Messungen ermittelt. Dafür wird eine Anfrage an die Datenbank gestellt (siehe Listing 5.02). Aus dem Ergebnis der Anfrage (UUID) wird der Name Zieltabelle für die Speicherung bestimmt. Die Messung wird durch Aufruf der Objektmethode addMeasurement(…) zu dem jeweiligen Modul-Objekt hinzugefügt. Nach dem Einlesen aller Zeilen wird für jedes Modul in modules die Objektmethode save() aufgerufen. Diese transformiert alle im Module-Objekt enthaltenen Measurement-Objekte in ein INSERT-Statement (siehe Abbildung 5.04) und speichert die Messungen in der, bei der Instanziierung ermittelten Zieltabelle. - 80 - " "! Für das Einlesen der Messungen wird zunächst ein Objekt der Klasse DataExtractor instanziiert (Listing 5.07, Zeile 01). 01 02 DataExtractor dataExtractor = new DataExtractor(file); ArrayList<Module> modules = dataExtractor.readCsvFile(…); Dem Konstruktor wird eine Dateireferenz auf die CSV-Datei übergeben. Durch Aufruf der Funktion readCsvFile() werden die Messwerte in Measurement-Objekte überführt. zu Module-Objekten hinzugefügt und Referenzen auf die Module-Objekte als ArrayListe zurückgegeben. Measurement-Objekte besitzen die Attribute observer, value, time (siehe Listing 5.08)und bieten Funktionen zum Lesen der Attributwerte (z. B. Zeile 12, getObserver() ). 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 public class Measurement { String observer; float value; Date time; Measurement(String observer,Date time,float value) { this.observer = observer; this.value = value; this.time = time; } public String getObserver() { return observer; } ... } Validierung Abbildung 5.05 verdeutlicht schematisch die Validierung des Dateiinhalts. Die erste Zeile der CSV Datei enthält die Spaltenüberschriften. Beim Einlesen werden die Zeilen durch das Trennzeichen Komma in Spalten getrennt ( columns = Zeile.split(„,“) ). Die einzelnen Spalten werden in einem Array „columns“ gespeichert. Über die Größe des Arrays wird die Spaltenanzahl bestimmt ( columns.length() ). Diese muss der Zahl Vier entsprechen. - 81 - # Die Erwartung ist, dass das erste Element des Arrays die Zeichenkette „observer“, die Zweite „time“, die Dritte „value“ und die vierte „module“ enthält. Der Vergleich erfolgt über die Funktion „column[0].equals(„observer“)“, die bei Übereinstimmung einen Boolean-Wert „true“ zurückliefert, anderenfalls ein „false“. Vor dem Vergleich werden zunächst alle Hochkommata und Leerzeichen entfernt. Sind alle oben genannten Bedingungen „true“, so sind die Spaltenüberschriften korrekt. Andernfalls wird eine Fehlermeldung ausgegeben und die Verarbeitung aller weiteren Messungen abgebrochen. Alle folgenden Zeilen der CSV-Datei enthalten Messungen. Die Validierung geschieht entweder über Typumwandlung (Listing 5.09). Die Messungen werden ebenfalls über die „split()“-Funktion in Spalten getrennt und Hochkommata und Leerzeichen aus den Werten entfernt. " Listing 5.09 zeigt beispielhaft die Validierung der zweiten Spalten „time“. Zunächst wird in Zeile 08 die Erwartungen an das Format der Werte festgelegt. In Zeile 10 erfolgt die Typumwandlung von String zu dem Datentyp Date. Hochkommata werden zuvor über replace() ersetzt. Schlägt die Konvertierung fehl, so wird eine Fehlermeldung ausgegeben (siehe Zeile 12 bis 16) und der Initialwert der Variable „time“ bleibt „null“. " ! 01 02 03 04 05 06 07 08 09 10 Date time = null; switch(x) { case 0: { ... } case 1: { try { DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.f"); - 82 - '" ! 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 2& time = (Date) formatter.parse(columns[x].replace("'", "")); } catch (ParseException e) { logger.error(formatter.format(new Date()) + " File: "+file.getName() + ", row "+(lineCount+1)+", + column "+(x+1)+" ("+csvHeader[x]+"). Necessary format: yyyy-MM-dd HH:mm:ss.f"); } } case 2: { ... } case 3: { ... } break; } } Die Überführung in Measurement-Objekte findet nur statt, wenn alle Typumwandlungen erfolgreich durchgeführt werden können (Listing 5.10). & % 01 02 03 04 05 06 07 08 09 10 11 12 13 HashMap<String, Module> modules = new HashMap<String, Module>(); if( observer != null && time != null && value != null && module != null && error != null) { Measurement measurement=new Measurement(observer, time, value); module.addMeasurement(measurement); } … return measurements Eine Validierung findet nur statt, wenn beim Einlesen eine Typumwandlung stattfindet. Spalte 1, case 0 (observer): String -> String (keine Validierung) Spalte 2, case 1 (time): String -> Date (Validierung) Spalte 3, case 2 (value): Datentyp -> Float (Validierung) Spalte 4, case 3 (module): String -> String (keine Validierung) Da in Spalte 1 & 4 keine Typumwandlung stattfindet werden diese bei Durchführung der INSERT-Anweisung validiert. Falls der referenzierte Sensor („observer“) nicht in der Tabelle reference.spatial_observation vorhanden ist (Fremschlüssel-„Constraint“ in der Tabelle observations.{uuid}), wird ein Fehler von der Datenbank zurückgegeben (Listing 5.11) - 83 - )! &"% 01 02 03 FEHLER: Einfügen oder Aktualisieren in Tabelle »o32057d17769041f69a24da93fe42736e« verletzt FremdschlüsselConstraint »fk32_observer« Speicherung Die Funktion readCsvFile() zum Lesen der CSV Datei hat als Rückgabewert eine HashMap mit allen Referenzen auf alle Modul-Objekte, die die Measurement-Objekte beinhalten. Für alle Module wird die Funktion save() aufgerufen, die die Messungen in eine INSERTAnweisung transformiert und in der Datenbank speichert (siehe Listing 5.12). Verletzt die Sensor-Referenz (observer) beim Speichern die Fremdschlüssel-Bedingung, so wird eine Fehlermeldung zurückgegeben. & '($ 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 void save() { java.util.Iterator<Measurement> iterator=measurements.iterator(); while(iterator.hasNext()) { Measurement measurement = (Measurement) iterator.next(); if(!uuid.equals("")) { sqlInsert += "('"+measurement.getObserver()+"','"+ measurement.getTime()+"','"+ measurement.getValue()+"')"; if(iterator.hasNext()) { sqlInsert += ","; } else { sqlInsert += ";"; try { this.dbTemplate.execute(sqlInsert); } catch (Exception e){ System.out.println("Exception: "+e); } } } } } - 84 - $ $$" Die Integrationssoftware wird in der gleichen Art und Weise aufgerufen, wie bei der Integration von Geodaten, allerdings wird statt dem WGEF-Archiv eine CSV-Datei übergeben (Listing 5.13). Die Parameter für den „Provider“ und die „ThematicGroup“ (Kapitel 3.2.2, Seite 27) werden für die Integration von Sensormessdaten nicht benötigt. 01 java –jar sensor.jar -c wisdom_configuration.xml -i data/wl.csv Parameter: -c: Konfigurationsdatei. Enthält Anmeldedaten für die Datenbank. -i: Sensormessdatei im CSV-Dateiformat $$# Für den Test der Software wurde ein Testdatensatz erstellt (siehe Listing 5.14). ! 01 02 03 04 05 06 07 08 09 10 11 observer,time,value,module U_B1, '2008-07-17 23:19:41',0.3438194, 'wl' U_B1, '2008-07-17 23:04:34',0.3538194, 'wl' U_B1, '2008-07-17 23:34:48',0.34308416, 'wl' U_B1, '2008-07-17 23:49:55',0.34279609, 'wl' U_B1, '2008-07-18 00:05:02',0.3425537, 'wl' U_B1, '2008-07-18 00:20:10',0.33890206, 'wl' U_B1, '2008-07-18 00:35:17',0.33207196, 'wl' U_B1, '2008-07-18 00:50:24',0.32816511, 'wl' U_B1, '2008-07-18 01:05:31',0.32145578, 'wl' U_B1, '2008-07-18 01:20:38',0.31738895, 'wl' Die Ausgabe wird in Listing 5.15 dargestellt. Für die Integration von 10 Messungen benötigt die Erweiterung etwas weniger als eine Sekunde (Zeitvergleich: Zeile 01 & Zeile 22), wobei die Verarbeitung der Testdatei in JAVA in etwa die gleiche Zeit benötigt, wie die Speicherung in der Datenbank (Zeitdifferenz: Zeile 01 & Zeile 07, Zeile 07 & Zeile 22). - 85 - ! 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 16:43:23,869 INFO - 2010/11/16 16.43.23 Starting sensor measurements integration: measurements.csv 16:43:23,947 INFO - Loading XML bean definitions from file [C:\eclipse_workspace\dep_new_work\wisdom_configuration.xml] 16:43:24,072 INFO - Loaded JDBC driver: org.postgresql.Driver INSERT INTO observations.o9352c9d2b03c40b58e48d9cace7158c0 (observer, date, value) VALUES ('U_B1','Thu Jul 17 23:19:41 CEST 2008','0.3438194'), ('U_B1','Thu Jul 17 23:04:34 CEST 2008','0.3538194'), ('U_B1','Thu Jul 17 23:34:48 CEST 2008','0.34308416'), ('U_B1','Thu Jul 17 23:49:55 CEST 2008','0.3427961'), ('U_B1','Fri Jul 18 00:05:02 CEST 2008','0.3425537'), ('U_B1','Fri Jul 18 00:20:10 CEST 2008','0.33890206'), ('U_B1','Fri Jul 18 00:35:17 CEST 2008','0.33207196'); ('U_B1','Fri Jul 18 00:50:24 CEST 2008','0.3281651'), ('U_B1','Fri Jul 18 01:05:31 CEST 2008','0.32145578'), ('U_B1','Fri Jul 18 01:20:38 CEST 2008','0.31738895'); 16:43:24,588 INFO Inserted 10 measurements 16:43:24,588 INFO - 2010/11/16 16.43.24 --Stopping sensor measurements integration: measurements.csv Es wurden weitere Tests mit fehlerhaft strukturierten Datensätzen durchgeführt. Diese sind im Anhang dokumentiert. - 86 - Die Entwicklungsarbeiten fanden unter vorgegebenen Rahmenbedingungen statt. Diese wurden durch die bisher vom DFD geleisteten Arbeiten vorgegeben. Daraus resultieren die verwendeten Technologien GWT, SmartGWT und JAVA für die Entwicklung des Assistenten. Aus diesem Grund wurden zunächst die bestehenden Softwarekomponenten in dieser Arbeit analysiert und beschrieben. Darauf aufbauend wurde ein grafischer Assistent für die Eingabe von Geodatendateien, Metadaten und Darstellungsregeln und den Aufruf der Integrationssoftware entwickelt. Dafür wurden zunächst - zusammen mit dem Entwicklerteam - funktionale und nichtfunktionale Anforderungen an den Assistenten erhoben. Diese Anforderungen wurden zunächst in Teilkonzepten einzeln betrachtet und mittels eines Gesamtkonzeptes, bestehend aus einem technischen, einem gestalterischen und einem Bedienkonzept, miteinander in Verbindung gesetzt. Die Konzeption ist wiederum die Grundlage für die darauf folgende programmtechnische Implementierung der Funktionalitäten, die zu den beschriebenen Ergebnissen führten. Neben der grafischen Oberfläche zur Eingabe durch einen Datenlieferanten als Vorbereitung für die Integration von Geodaten, wurde im zweiten Teil der Arbeit die bestehende Integrationssoftware zur automatischen Integration erweitert. Dafür wurde zunächst das bestehende DatenEingangsPortal als Softwarekomponente für die automatische Integration von Geodaten vorgestellt. Die Erweiterung beinhaltet das Hinzufügen von Messdaten von in-situ Sensoren zu bereits registrierten Sensormessstationen und Messmodulen. Dafür liest die Erweiterung übergebene Daten aus einer CSV-Datei ein, validiert die Eingaben und überführt sie in JAVA-Objekte. Die Messwerte werden in einer bestimmten Datenbanktabelle gespeichert. Die Entwicklung führte analog zur vorherigen Vorgehensweise über eine Anforderungserhebung, der Konzeptionierung hin zur Implementierung. - 87 - Durch den zweigeteilten Aufbau der Arbeit wurde die Integration von Geodaten in das Umweltinformationssystem aus zwei verschiedenen Blickwinkeln betrachtet. Mit der Entwicklung des Assistenten wurde ein benutzerfreundliches Werkzeug geschaffen, um Daten in ein Austauschformat zu überführen. Die Erweiterung für den Import von Sensormessdaten hingegen hatte als Ziel, Daten von einem Austauschformat entgegenzunehmen und dessen Inhalt in die Speicherstrukturen zu überführen. Dreh und Angelpunkt der Datenintegration sind die Austauschformate. Die Komplexität der Integration steigt durch die Vielzahl unterschiedlicher Formate und die verschiedenen Aspekte, die Daten zugeordnet werden können. Bei Geodaten gibt es in ELVIS die Aspekte der Geometrie, der Attributdaten, der Visualisierung, der Zeit und der Dokumentation mittels Metadaten. Diese werden (teilweise) in ein eigenes, proprietäres Format „verpackt“. Eine Reduktion der verschiedenen Formate könnte z.B. durch die Verwendung von GML bzw. KML erreicht werden, da diese innerhalb einer Beschreibungssprache (XML) die verschiedenen Aspekte, wie z.B. Geometrie, Darstellung und die Zeit modellieren. Dies könnte einerseits die Integration vereinfachen, andererseits auch die Datenverarbeitung innerhalb von ELVIS. - 88 - Die Nummern innerhalb der Fußnoten verweisen auf die Nummern in diesem Quellenverzeichnis. Quellen, die der WISDOM Projektdokumentation entnommen wurden und bisher nicht öffentlich verfügbar sind, wurden auf der beiliegenden CD-ROM archiviert (siehe Anhang 7.1.1 und README.txt im Stammverzeichnis der beigelegten CD-ROM). Bei den entsprechenden Quellenangaben wird darauf verwiesen. 1 – Projekt WISDOM Titel: Homepage: Water Related Information System for the Sustainable Development of the Mekong http://www.wisdom.caf.dlr.de/intro_en.html 2 – Projekt CAWa Titel: Homepage: CAWa - Central Asian Water http://www.cawa-project.net/ 3 / 10 – Geodateninfrastruktur Deutschland Titel: URL: Abruf: Übersetzung des ISO 19115 - Metadaten vom Englischen in deutsche Sprache http://www.gdi-de.org/de_neu/thema/2009/c_thema_iso_uebersetzung.html 7.8.2010 4 – Open Geospatial Consortium Titel: URL: Abruf: Styled Layer Descriptor http://www.opengeospatial.org/standards/sld 7.8.2010 5 – Deutsche Wikipedia Titel: URL: Stand: World Geodatic System 1984 http://de.wikipedia.org/wiki/World_Geodetic_System_1984 17.11.2011, 21:19 Uhr 6 – ESRI Titel: URL: ESRI Shapefile Technical Description http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf 7 – Stefan Steiniger Titel: An Overview of Free & Open Source Desktop GIS (FOS-GIS) URL:http://spreadsheets.google.com/ccc?key=0Albk_XRkhVkzdGxyYk8tNEZvLUp1UTUzTFN5bjlLX2c& hl=en Stand: 2010 Abruf: 08.10.2010 8 – Manfred Mittelböck, Paul Schreilechner Titel: Metadaten: ISO – konformes Profil als Schritt in die Praxis in Österreich URL: http://ispace.researchstudio.at/downloads/2004/mittlboeck_schreilechner_2004_agit_iso_profil_at.pdf Stand: 2004 - 89 - 9 – Deutsche Wikipedia Titel: URL: Styled Layer Descriptor http://de.wikipedia.org/wiki/Styled_Layer_Descriptor (Stand: 03.08.2009, 09:17 Uhr) 11 – Open Source Geospatial Foundation Titel: URL: Abruf: MapServer http://mapserver.org/ 29.11.2010 12 – GeoServer Titel: URL: Abruf: Welcome http://geoserver.org/display/GEOS/Welcome 29.11.2010 13 – GeoTools Titel: URL Abruf: Frequently Asked Questions http://docs.geotools.org/stable/userguide/faq.html 29.11.2010 14 – Open Geospatial Consortium (OGC) Titel: URL: Abruf: The OGC Announces Styled Layer Descriptor & Symbol Encoding Specifications http://www.opengeospatial.org/pressroom/pressreleases/761 25.11.2010 15 – Deutsche Wikipedia Titel: URL: Stand: Webservice http://de.wikipedia.org/wiki/Webservice 15.10.2010, 20:24 Uhr 16 – World Wide Web Consortium (W3C) Titel: URL: Abruf: Web Services Architecture - W3C Working Group Note 11 February 2004 http://www.w3.org/TR/ws-arch/#introduction 29.10.2010 17 – Deutsche Wikipedia Titel: URL: Stand: Hypertext Transfer Protocol http://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol 05.07.2010, 12:15 18 – Deutsche Wikipedia Titel: URL: Stand: Web Processing Service http://de.wikipedia.org/wiki/Web_Processing_Service Stand: 27.03.2010, 17:19 19 – Open Geospatial Consortium (OGC) Titel: URL: Abruf: OpenGIS Sensor Observation Service http://www.opengeospatial.org/standards/sos 02.07.2010 - 90 - 20 – Deutsche Wikipedia Titel: Sensor Observation Service URL: http://de.wikipedia.org/wiki/Sensor_Observation_Service Stand: 06.08.2010, 17:57 21 – Lexikon der Kartographie und Geomatik - Müller, A. in Bollmann, J., Koch, W. Titel: Geoinformationssystem Seite: 304/305 Band: Erster Band Verlag: Spektrum Akademischer Verlag Ort: Heidelberg Datum: 2001. 22 – Cunningham & Cunningham, Inc. Titel: URL: Abruf: Model View Controll History http://c2.com/cgi/wiki?ModelViewControllerHistory am 05.09.2010 23 – Fielding Roy Thomas, 2000 Titel: URL: Stand: Abruf: Architectural Styles and the Design of Network-based Software Architectures http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm 2000 19.09.2010 24 – WISDOM Projekt-Dokumentation Titel: Dateiname: Stand: ELVIS GUI Architektur GUI_Architektur_Beschreibung.doc (Anlage: CD-ROM) GUI_Architektur_Beschreibung.doc 25 – ui-patterns.com Titel: URL Abruf: Wizard http:// ui-patterns.com/patterns/Wizard 02.08.2010 26 – Stefanakis, E et al. Titel: Geographic hypermedia: concepts and systems Verlag: Springer Stand: 2006 27 – WISDOM Projekt-Dokumentation Titel: Dateiname: Version: WGEF Spezifikation WISDOM_WGEF_EN_01.doc (Anlage: CD-ROM) 0.1 - 91 - 28 – Deutsche Wikipedia Titel: URL: Stand: Secure Shell http://de.wikipedia.org/wiki/Secure_Shell 12.11.2010, 10:50 Uhr 29 – Deutsche Wikipedia Titel: URL: Stand: Telnet http://de.wikipedia.org/wiki/Telnet 22.11.2010, 12:09 Uhr 30 – Deutsche Wikipedia Titel: URL: Stand: JavaScript Object Notaion http://de.wikipedia.org/wiki/JavaScript_Object_Notation 30.11.2010 31 – Google Titel: URL: Abruf: Google Web Toolkit http://code.google.com/webtoolkit/ 25.10.2010 32 – Golem.de, Klaß & Ihlenfeld Verlag GmbH Titel: URL: Abruf: Google Web Toolkit nun Open Source http://www.golem.de/0612/49434.html 25.10.2010 33 – Smart GWT Titel: URL: Abruf: Smart GWT - GWT API's for SmartClient http://code.google.com/p/smartgwt/ 25.10.2010 34 / 35 – Smart Client Titel: Ajax RIA system URL 1: http://www.smartclient.com/ Abruf: 25.10.2010 URL 2: http://www.smartclient.com/product/ Abruf: 10.9.2010 36 – Verena Klinger (DLR), Thilo Wehrmann (DLR), Steffen Gebhardt (DLR) Kontakt: Verena Klinger: Kontakt: Thilo Wehermann: Kontakt: Steffen Gebhardt: [email protected] [email protected] [email protected] 37 – WISDOM Projekt-Dokumentation Titel: Dateiname: Version: Bedienungsanleitung DataEntryPortal WISDOM_DEP_EN_01.doc (Anlage: CD-ROM) 0.1 38 – WISDOM Projekt-Dokumentation Titel: Dateiname: Version: WGEF Spezifikation WISDOM_WGEF_EN_01.doc (Anlage: CD-ROM) 0.1 - 92 - 39 – WISDOM Projekt-Dokumentation Titel: Dateiname: Version: Anleitung Metadaten Erstellung WISDOM_MetadataGenerator_EN_01.doc (Anlage: CD-ROM) 0.1 40 / 41 / 50 / 51 – Deutsche Wikipedia Titel: URL: Stand: Anforderung (Informatik) http://de.wikipedia.org/wiki/Anforderung_Informatik 31. Okt. 2010, 20:20 42 – Eclipse Foundation Titel: URL: Eclipse IDE http://www.eclipse.org/ 43 – Google Titel: URL: Google Plugin for Eclipse http://code.google.com/intl/de-DE/eclipse/ 44 – Tigris.org, Open Source Software Engineering Tools Titel: Subversion URL: http://subversion.tigris.org/ 45 – Tigris.org, Open Source Software Engineering Tools Titel: URL: Subclipse http://subclipse.tigris.org/ 46 – Deutsche Wikipedia Titel: URL: Stand: Universally Unique Identifier http://de.wikipedia.org/wiki/Universally_Unique_Identifier 6. Okt. 2010, 17:04 47 – Open Geospatial Consortium (OGC) Titel: URL: Abruf: Styled Layer Descriptor http://www.opengeospatial.org/standards/sld 7.8.2010 48 – Wolfgang Meier Titel: URL: Abruf: Open Source Native XML Database http://exist.sourceforge.net/ 05.09.2010 49 – Vnull’s blog Titel: URL: Abruf: Benchmarking PostgeSQL’s INSERT/COPY data loading performance http://jakub.wartak.pl/blog/?p=93 1.11.2010 - 93 - Hiermit erkläre ich, dass ich die vorliegende Arbeit selbständig verfasst und keine anderen als die von mir angegebenen Quellen und Hilfsmittel benutzt habe. Die aus fremden Quellen direkt oder indirekt übernommenen Gedanken sind als solche kenntlich gemacht. Die vorliegende Arbeit wurde bisher in gleicher oder ähnlicher Form keiner anderen Prüfungskommission vorgelegt und auch nicht veröffentlicht. Oberpfaffenhofen, den 7. Dezember 2010 _______________________________ Malte Ahrens, Matrikelnummer: 21779 - 94 - ) )$( % Weitere Informationen sind auf der CD-ROM in der Datei README.txt enthalten. • Diplomarbeit im PDF Dateiformat • WISDOM Projektdokumentation • Quellcode Verzeichnis: / (Hauptverzeichnis) Dateiname: MalteAhrens_Diplomarbeit_DataEntryPortal.pdf ! & !"#' Verzeichnis: /WISDOM_Projektdokumentation Dateiname 1: WISDOM_DEP_EN_01.pdf Dateiname 2: WISDOM_HandsOn_EN_01.pdf Dateiname 3: WISDOM_MetadataGenerator_EN_01.pdf Dateiname 4: WISDOM_WGEF_EN_01.pdf Dateiname 5: GUI_Architektur_Beschreibung.doc Dateiname 6: GUI_How_to_code_a_toolbox.pdf ! Auf der beigefügten CD-ROM befindet sich der Quellcode der in Kapitel 4 und Kapitel 5 entwickelten Programme. Dieser ist im Verzeichnis „Quellcode“ in Eclipse-Projekten abgelegt, auf die mittels eines Dateibrowsers und Texteditors zugegriffen werden kann (oder über den Import in Eclipse [Import – Existing Projects into Workspace]). Der Assistent kann momentan nur innerhalb des DLR-Intranets ausgeführt werden, da die zugrundeliegenden Dienste (WPS: createWgef.py, startDep.py) und Datenspeichersysteme (eXist und PostgreSQL Datenbanken) durch eine Firewall vom DLR nach außen abgeschottet sind. Im Diplom-Kolloquium wird die Bedienung der Programme vorgeführt. - 95 - Der Quellcode ist in Paketen (Ordnern) und JAVA-Dateien strukturiert: Projektverzeichnis: /Quellcode/DataEntryPortal_Assistant_Gui/ src/de/dlr/caf/elvis/client/view/toolboxes/dep • ControlTB.java • DepTB.java • DepTBController.java • OverviewTB.java • OverviewTBController.java • UUID.java src/de/dlr/caf/elvis/client/view/toolboxes/dep/event • CancelEvent.java • CancelRequestEvent.java • CompleteEvent.java • NextEvent.java • PreviousEvent.java • SaveEvent.java • StartEvent.java src/de/dlr/caf/elvis/client/view/toolboxes/dep/dataSources • DatasetProviderDataSource.java • DatasetThemeDataSource.java • DepTBDataSource.java • OverviewTBDataSource.java src/de/dlr/caf/elvis/client/view/toolboxes/dep/requests • DeleteDepFolderRequest.java • GetDatasetProviderRequest.java • GetDatasetThemeRequest.java • PostWpsCreateWgefRequest.java • PostWpsStartDepRequest.java • PutMetadataRequest.java • PutSldRequest.java - 96 - src/de/dlr/caf/elvis/client/view/toolboxes/dep/tabs • ErrorForm.java • ErrorFormController.java • Tab.java • TabController.java • IntroductionTab.java • IntroductionTabController.java • MetadataTab.java • MetadataTabController.java • SaveTab.java • SaveTabController.java • SldTab.java • SldTabController.java • UploadTab.java • UploadTabController.java Projektverzeichnis: /Quellcode/DataEntryPortal_Sensor_Extension/ src/de/dlr/caf/elvis/system/dep • DataEntryPortal.java • DataExtractor.java • Measurement.java • Module.java • DepConfigurationManager.java • DepConfigurationSettings.java • DEPException.java Projektverzeichnis: /Quellcode/WPS/ • createWgef.py, startDep.py <sld:StyledLayerDescriptor xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sld="http://www.opengis.net/sld" version="1.0.0"> <sld:NamedLayer xmlns="http://www.opengis.net/sld"> <sld:Name>Inundation</sld:Name> <sld:UserStyle> <sld:Name>Inundation depth</sld:Name> <sld:Title>Inundation depth</sld:Title> - 97 - <sld:Abstract /> <sld:FeatureTypeStyle> <sld:Name>Inundation depth</sld:Name> <sld:Title>Inundation depth</sld:Title> <sld:Abstract /> <sld:SemanticTypeIdentifier> generic:geometry </sld:SemanticTypeIdentifier> <sld:Rule> <sld:Name>Inundation depth</sld:Name> <sld:Title>Inundation depth</sld:Title> <sld:RasterSymbolizer> <! -Colour ramp for 8 bit --> <sld:Opacity>0.8</sld:Opacity> <sld:ColorMap> <sld:ColorMapEntry color="#FFCCE1" quantity="1" opacity="1.0" /> <sld:ColorMapEntry color="#F7A8C5" quantity="2" opacity="1.0” /> <sld:ColorMapEntry color="#ED82AA" quantity="4" opacity="1.0" /> <sld:ColorMapEntry color="#E05E90" quantity="6" opacity="1.0" /> <sld:ColorMapEntry color="#D43B78" quantity="8" opacity="1.0" /> <sld:ColorMapEntry color="#C70063" quantity="10" opacity="1.0"/> </sld:ColorMap> </sld:RasterSymbolizer> </sld:Rule> </sld:FeatureTypeStyle> </sld:UserStyle> </sld:NamedLayer> </sld:StyledLayerDescriptor> <wisdom:Container> ... <Page> <Title>DataEntryPortal</Title> <ID>page5</ID> <Orientation>H</Orientation> <PageElementContainer> <Orientation>H</Orientation> <Height>100%</Height> <Width>100%</Width> <ID>integrationContainer</ID> <PageElementContainer> <Orientation>H</Orientation> <Height>100%</Height> <Width>250</Width> <ID>xyz</ID> <Toolbox xsi:type="wisdom:Toolbox"> <Classname> de.dlr.caf.elvis.client.view.toolboxes.dep.IntegrationStepsTB </Classname> <ID>integrationSteps</ID> <Height>100%</Height> <Width>100%</Width> <EventHandler>depTB</EventHandler> <EventHandler>controlTB</EventHandler> <EventHandler>integrationSteps</EventHandler> <Icon>true</Icon> <Minimizable>false</Minimizable> - 98 - <Movable>false</Movable> <Resizeable>false</Resizeable> <StartMinimized>false</StartMinimized> </Toolbox> </PageElementContainer> <PageElementContainer> <Orientation>V</Orientation> <Height>100%</Height> <Width>*</Width> <ID>contentTB</ID> <Toolbox xsi:type="wisdom:Toolbox"> <Classname> de.dlr.caf.elvis.client.view.toolboxes.dep.DepTB </Classname> <ID>depTB</ID> <Height>*</Height> <Width>100%</Width> <DataConsumer>depTB</DataConsumer> <EventHandler>depTB</EventHandler> <EventHandler>controlTB</EventHandler> <EventHandler>integrationSteps</EventHandler> <Icon>true</Icon> <Minimizable>false</Minimizable> <Movable>false</Movable> <Resizeable>false</Resizeable> <StartMinimized>false</StartMinimized> </Toolbox> <Toolbox xsi:type="wisdom:Toolbox"> <Classame> de.dlr.caf.elvis.client.view.toolboxes.dep.ControlTB </Classname> <ID>controlTB</ID> <Height>60</Height> <Width>100%</Width> <EventHandler>depTB</EventHandler> <EventHandler>controlTB</EventHandler> <EventHandler>integrationSteps</EventHandler> <Icon>true</Icon> <Minimizable>false</Minimizable> <Movable>false</Movable> <Resizeable>false</Resizeable> <StartMinimized>false</StartMinimized> </Toolbox> </PageElementContainer> </PageElementContainer> </Page> </wisdom:Container> - 99 - 001 003 004 005 005 006 007 008 009 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 From pywps.Process.Process import WPSProcess import logging.config, os, tempfile, types import urllib import configuration logging.config.fileConfig(configuration.WPS_LOGFILE, disable_existing_loggers=False) logger = logging.getLogger("createWgef") class Process(WPSProcess): def __init__(self): WPSProcess.__init__( self, identifier=" createWgef", #the same as the file name title="Generate WGEF package for DEP", abstract="Preparing data for data integration", version="1.0", storeSupported="true", statusSupported="true", grassLocation=False ) self.geodataResourceIn = self.addLiteralInput( identifier="geodata", title="URL to geodata content", # some optional parameters abstract="web folder to geodata", # default is empty metadata=[{"wis":"dom"}], # default is empty type=types.StringType, # default value maxOccurs=1 # default maximum size ) self.identifierIn = self.addLiteralInput( identifier="uuid", title="identifier", metadata=[{"wis":"dom"}], type=types.StringType, maxOccurs=1 ) self.metadataResourceIn = self.addComplexInput( identifier="metadata", title="URL to metadata", # some optional parameters abstract="Metadata file", # default is empty metadata=[{"wis":"dom"}], # default is empty - 100 - 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 084 085 086 087 088 089 090 091 092 093 094 formats=[{"mimeType":"text/xml"}], # default value maxOccurs=1, maxmegabites="500" # default maximum size ) self.sldResourceIn = self.addComplexInput( identifier="sld", title="Url to sld file", # some optional parameters abstract="SLD file", # default is empty metadata=[{"wis":"dom"}], # default is empty formats=[{"mimeType":"text/xml"}], # default value maxOccurs=1, maxmegabites="500" # default maximum size ) self.resourceOut = self.addComplexOutput( identifier="package:wgef:result", title="Identified resource.", formats=[{"mimeType":"text/xml"}] # default value ) def execute(self): percent = 0 uuid = self.identifierIn.getValue() geodataUrl = self.geodataResourceIn.getValue() localDir = "/local/wps/temp/"+uuid+"/private/" geodataUrl = " http://129.247.183.248/geodata/"+uuid+"/" downloadCmd ="wget -r --level=2 -nd -A '.xml, .shp, .shx, .dbf, .prj, .sbn, .sld, .tif, .txt' -P" downloadCmd += localDir downloadCmd += geodataUrl self.cmd(downloadCmd) self.cmd("mkdir geodata") self.cmd("mkdir geodata/public") self.cmd("touch geodata/public/.empty") self.cmd("cp -R " + localDir + "/ geodata/") self.cmd("cp " + self.metadataResourceIn.getValue() + " geodata/" + self.metadataResourceIn.getValue() + ".xml") self.cmd("cp " + self.sldResourceIn.getValue() + " geodata/" + self.sldResourceIn.getValue() + ".sld") self.cmd("zip -r geodata.zip geodata") logger.info(os.listdir(".")) self.resourceOut.setValue("geodata.zip") - 101 - 001 003 004 005 005 006 007 008 009 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 From pywps.Process.Process import WPSProcess import logging.config, os, tempfile, types import configuration logging.config.fileConfig(configuration.WPS_LOGFILE, disable_existing_loggers=False) logger = logging.getLogger("startDep") class Process(WPSProcess): def __init__(self): WPSProcess.__init__(self, identifier="test_startDep", #the same as the file name title="Start DataEntryPortal", abstract="Data integration", version="1.0", storeSupported="true", statusSupported="true", grassLocation=False ) self.inputWgetIn = self.addComplexInput( identifier="dataintegration:resource", title="URL to unzipped content", # some optional parameters abstract="C5 text file containing rules", # default is empty metadata=[{"wis":"dom"}], # default is empty formats=[{"mimeType":"application/zip"}], # default value maxOccurs=1, maxmegabites="500" # default maximum size ) self.providerIn = self.addLiteralInput( identifier="dataintegration:provider", title="Sensor: tsx", # some optional parameters abstract="C5 text file containing rules", # default empty metadata=[{"wis":"dom"}], # default is empty type=types.IntType, maxOccurs=1 # default maximum size ) self.thematicIn = self.addLiteralInput( identifier="dataintegration:thematic", title="Sensor: tsx", # some optional parameters abstract="C5 text file containing rules", # default is empty - 102 - 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 084 metadata=[{"wis":"dom"}], # default is empty type=types.IntType, maxOccurs=1 # default maximum size ) self.resourceOut = self.addComplexOutput( identifier="dataintegration:result", title="Identified resource.", formats=[{"mimeType":"text/plain"}]) def execute(self): percent = 0 out = "" logger.info("WGEF import into database started...") self.status.set(msg="Starting ", percentDone=percent) depConfiguration = "http://mekongvm5/xml/wamapro/wisdom_configuration.xml" path = configuration.WPS_EXTERNAL_FUNCTIONS_DIR + "java/" inputfile = self.inputWgetIn.getValue() inputfile = inputfile[inputfile.find("/") + 1:] cmd cmd cmd cmd cmd = "echo += " -c += " -g += " -p += " -i java -jar " + path + "2010-04-19_wisdom-dep.jar" " + depConfiguration " + str(self.thematicIn.getValue()) " + str(self.providerIn.getValue()) " + inputfile logger.info(os.listdir(".")) self.cmd("cp " + self.inputWgetIn.getValue() + " /tmp") logger.info("Cmd: " + str(cmd)) out = self.cmd(cmd) logger.info("Cmd output: " + str(out)) outfile = open("out.txt", "w") outfile.write(out) self.resourceOut.setValue("out.txt") - 103 - ! time,observer,value,module '2008-07-17 23:19:41', U_B1, 0.35029736, 'wl' 16:35:20,575 ERROR DataExtractor:129 - 2010/11/16 16.35.20 File: measurements_wl_full.csv, row 1, column 1 ('time') needs to be 'observer'. Abort. 16:35:20,575 ERROR DataExtractor:129 - 2010/11/16 16.35.20 File: measurements.csv, row 1, column 2 ('observer') needs to be 'time'. Abort. 16:35:20,575 ERROR SensorEntryPortal:93 - 2010/11/16 16.35.20 ABORTION Error in file: C:\eclipse_workspace\dep_sensor\data\measurements.csv ! U_B1, '2008-07-17 23:19:41', 'wl' 16:22:15,178 ERROR DataExtractor:118 - 2010/11/16 16.22.15 File: measurements.csv, row 32. Column missing. Skip this measurement. ! U_B1, '2008-07-28',0.48647872, 'wl' 16:23:21,805 ERROR DataExtractor:81 - 2010/11/16 16.23.21 File: measurements.csv, row 32, column 2 (time). Necessary format: yyyy-MM-dd HH:mm:ss.f ! U_B, '2008-07-17 23:19:41',0.48647872, 'wl' FEHLER: Einfügen oder Aktualisieren in Tabelle »o9352c9d2b03c40b58e48d9cace7158c0« verletzt Fremdschlüssel-Constraint »fk11_observer« - 104 - UU_B1, '2008-07-28 10:49:26',0.48647872, 'w' 16:31:14,655 ERROR No table matches the referenced module in csv file... org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0 --- U_B1, '2008-07-17 23:19:41', , 'wl'--- 16:26:03,731 ERROR DataExtractor:90 - 2010/11/16 16.26.03 Error in file measurements.csv - line 311, column 2 ('value'): empty String. Field must contain a float value. Skip. - 105 -