Zum Einstieg, zur Wiederholung und zur Vertiefung: Datengewinnung Datenanreicherung Datenverarbeitung …mit XML und XSLT.

Slides:



Advertisements
Ähnliche Präsentationen
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil3.
Advertisements

Einführung in die Informatik: Programmierung und Software-Entwicklung
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Bonn-to-code.net Keine Angst vor Regulären Ausdrücken Martin Winkler
CPCP Institute of Clinical Pharmacology AGAH Annual Meeting, 29. Februar 2004, Berlin, Praktischer Umgang mit den Genehmigungsanträgen gemäß 12. AMG Novelle.
Anmerkungen zu XML Im September 2000 Entwicklung/Anspruch von XML
Modelle und Methoden der Linearen und Nichtlinearen Optimierung (Ausgewählte Methoden und Fallstudien) U N I V E R S I T Ä T H A M B U R G November 2011.
Modelle und Methoden der Linearen und Nichtlinearen Optimierung (Ausgewählte Methoden und Fallstudien) U N I V E R S I T Ä T H A M B U R G November 2011.
Workshop zur Medienarbeit der katholischen Kirche Aspekte des Religionsmonitors Berlin, 02. April 2008.
Perfekt, Possessivpronomen und Imperative Winterurlaub.
Scratch Der Einstieg in das Programmieren. Scatch: Entwicklungsumgebung Prof. Dr. Haftendorn, Leuphana Universität Lüneburg,
IMS Universität Stuttgart 1 Einführung in XML Hannah Kermes HS: Elektronische Wörterbücher Do,
Java: Dynamische Datentypen
DOM (Document Object Model)
WS Algorithmentheorie 02 - Polynomprodukt und Fast Fourier Transformation Prof. Dr. Th. Ottmann.
© 2006 W. Oberschelp, G. Vossen Rechneraufbau & Rechnerstrukturen, Folie 2.1.
Einführung XML XML Einführung Andreas Leicht.
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil2.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Differentieller Stromverstärker
Schieferdeckarten Dach.ppt
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Bild 1.1 Copyright © Alfred Mertins | Signaltheorie, 2. Auflage Vieweg+Teubner PLUS Zusatzmaterialien Vieweg+Teubner Verlag | Wiesbaden.
XSLT.
20:00.
Die Geschichte von Rudi
„Küsse deine Freunde“ – FlexKom-App teilen
SK / , , in Hochkössen und der Wildschönau flow Ski- und Snowboardschule Intersport Menzel.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Java für Fortgeschrittene
RATEME Suchen und Bewerten von Ausgangsorten. Inhalt RateMe - Pirmin Schürmann, Thomas Junghans - Hochschule für Technik Zürich 2 Unser Ziel.
NEU! 1 2. Wo kommt diese Art von Rezeptor im Körper vor?
Analyse von Ablaufdiagrammen
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Publikation auf Knopfdruck Judith Riegelnig Michael Grüebler 19. Oktober 2010 / Statistiktage Neuenburg.
RATEME Suchen und Bewerten von Ausgangsorten. Inhalt RateMe - Pirmin Schürmann, Thomas Junghans - Hochschule für Technik Zürich 2 Unser Ziel.
PROCAM Score Alter (Jahre)
Vorlesung Mai 2000 Konstruktion des Voronoi-Diagramms II
Das ist die Geschichte eines kleinen Jungen aus der Schweiz.
Symmetrische Blockchiffren DES – der Data Encryption Standard
PARTENARIAT ÉDUCATIF GRUNDTVIG PARTENARIAT ÉDUCATIF GRUNDTVIG REPERES KULTURELLER ZUSAMMENHALT UND AUSDEHNUNG DER IDEEN AUF EUROPÄISCHEM.
Das IT - Informationssystem
Großer Altersunterschied bei Paaren fällt nicht auf!
MINDREADER Ein magisch - interaktives Erlebnis mit ENZO PAOLO
1 (C)2006, Hermann Knoll, HTW Chur, FHO Quadratische Reste Definitionen: Quadratischer Rest Quadratwurzel Anwendungen.
Analyseprodukte numerischer Modelle
Pigmentierte Läsionen der Haut
RATEME Suchen und Bewerten von Ausgangsorten. Inhalt RateMe - Pirmin Schürmann, Thomas Junghans - Hochschule für Technik Zürich 2 Unser Ziel.
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
Vortrag von Rechtsanwältin Verena Nedden, Fachanwältin für Steuerrecht zur Veranstaltung Wege zum bedingungslosen Grundeinkommen der Piratenpartei Rhein-Hessen.
Elektronische Landkarten am Beispiel der Google Maps API Map Objects.
1 Mathematical Programming Nichtlineare Programmierung.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
se_10_regulaere_ausdruecke.ppt1 Softwareengineering Reguläre Ausdrücke (regular expressions) Prof. Dr.-Ing. Axel Benz, Berlin School of Economics.
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
1 IdeenSet Sonnensystem Ideenset Wann können Sonnenfinsternisse stattfinden? Erich Laager / 2014.
Bildergalerie PRESEASON CAMP Juni 2014 Romanshorn Get ready for the Season!
Es war einmal ein Haus
1 Tagesüberblick 4 Lösung Hausaufgabe/Fragen Mustervergleiche.
Numbers Greetings and Good-byes All about Me Verbs and Pronouns
prof. dr. dieter steinmannfachhochschule trier © prof. dr. dieter steinmann Folie 1 vom Montag, 30. März 2015.
Kompetenztraining Jura Martin Zwickel / Eva Julia Lohse / Matthias Schmid ISBN: © 2014 Walter de Gruyter GmbH, Berlin/Boston Abbildungsübersicht.
1 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt Wie.
Das IT - Informationssystem
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
Monatsbericht Ausgleichsenergiemarkt Gas – Oktober
IT-Zertifikat der Phil.Fak Kurs 4: Daten- und Metadatenstandards Patrick Sahle XML-BasicsWS 08/09.
Programmierungssprache PERL
 Präsentation transkript:

Zum Einstieg, zur Wiederholung und zur Vertiefung: Datengewinnung Datenanreicherung Datenverarbeitung …mit XML und XSLT

Der Plan Wo das XML herkommt Wie das XML schöner wird Regex XSLT Was hinten rauskommt document() Variablen xsl:for-each-group Visualisierung

… wo das XML herkommt XML aus Word Word ist schon XML Übersetzung Typographie in Markup Übergabe an OpenOffice XML aus OpenOffice TEI OpenOffice Package

… wo das XML herkommt XML aus XML-Editoren XML aus Word Word ist schon XML Übersetzung Typographie in Markup Übergabe an OpenOffice XML aus OpenOffice TEI OpenOffice Package Pro und Kontra XML aus XML-Editoren Author Mode

… wo das XML herkommt XML aus XML-Editoren XML aus Word Word ist schon XML Übersetzung Typographie in Markup Übergabe an OpenOffice XML aus OpenOffice TEI OpenOffice Package Pro und Kontra XML aus XML-Editoren Author Mode Die Welt der spitzen Klammern

XML-Daten verbessern Ziel: Handarbeit vermeiden! Einfaches Suchen&Ersetzen Word-(OpenOffice)-Macros Regular Expressions regex in XSLT Datenanreicherung mit XSLT

Regular Expressions (in Oxygen) Ausgangslage Verschiedene Dialekte Maßgeblich: perlre Umfang der Implementierung? oXygen vs. XML-Schema vs. XSLT Syntax

Regular Expressions (in Oxygen) Syntax (nur das allerwichtigste) . Beliebiges Zeichen [] Zeichenklasse [0-9], [a-z] beliebige Ziffer bzw. Buchstabe () Gruppierung … kann später angesprochen werden | oder [r | v] der Buchstabe r oder v \ Maskierung \. tatsächlich ein Punkt und nicht beliebieges Zeichen * Beliebige Häufigkeit .* beliebige Menge beliebiger Zeichen + Ein oder mehrmals [0-9]+ eine Zahl mit mindestens einer Stelle ? Ein oder kein Mal [0-9]? eine Ziffer oder nichts

Regular Expressions (in Oxygen) Syntax (schon nicht mehr so wichtig) \d Ziffer \w Buchstabe oder Ziffer \s Whitespace-Zeichen ^ Anfang einer neuen Zeile $ Zeilenende \n Zeilenumbruch ? Greediness ausschalten ([0-9].*\])*? [in Oxygen10 nicht implementiert] … und weitere, siehe z.B. http://perldoc.perl.org/perlre.html

Regular Expressions (in Oxygen) Ausgangslage (perlre) Syntax Das wichtigste: Gruppierte Muster bilden Variablen auf die man beim Ersetzen zugreifen kann Obacht: Zeilenorientierung, greediness Beispiel 1 (einfache Seitenumbrüche) Beispiel 2 (Ilg-Apparat)

Regular Expressions (in Oxygen) Beispiel 1 text [1ra] text [1rb] text [1va] text [1vb] text [2ra] text [2rb] text [2va] Beispiel 2 <app n="1"></app><app n="X_*">Versus C. R., et ed. R. absunt ab omnibus… <app n="2"></app><app n="X_1">animaeque, V.</app><app n="X_2">vacationem… <app n="3"></app><app n="X_1">hylariV,.</app><app n="X_2">evangelici C. …

Regular Expressions (in Oxygen) Ausgangslage (perlre) Syntax Das wichtigste: Gruppierte Muster bilden Variablen auf die man beim Ersetzen zugreifen kann Obacht: Zeilenorientierung, greediness Beispiel 1 (einfache Seitenumbrüche) Beispiel 2 (Ilg-Apparat) Erweiterung: regex plus XPath Möglichkeiten und Grenzen

regex in XSLT xsl:analyze-string XPath-Funktionen xsl:matching-substring, xsl:non-matching-substring XPath-Funktionen matches() replace() tokenize()

Datenanreicherung per XSLT: copy-all-but … Ausgangslage Grundtemplate

Datenanreicherung per XSLT: copy-all-but … Grundtemplate <xsl:template match="node() | @* | processing-instruction() | comment()"> <xsl:copy> <xsl:apply-templates select="node() | @* | processing-instruction() | comment()"/> </xsl:copy> </xsl:template> - Was ist der Trick dahinter?

Datenanreicherung per XSLT: copy-all-but … Ausgangslage Grundtemplate Beispiel 1 (falsche Seitenumbrüche, copy-all-Beispiel1.xml) … mit copy-all.xsl Beispiel 2 (mehrfache Apparate) Lösung: multiple_apps.xl

Datenanreicherung per XSLT: die document()-Funktion Anwendungsszenarien Die document()-Funktion ( … und doc-available() ) Mögliche Fehlerquellen (String vs. Pfad; Namensräume) Beispiel1 (Images hinzuziehen, regex-Beispiel1, images.xml, copy-all.xsl) Beispiel2 (Geokoordinaten, locations.xml) Zum Verständnis: http://maps.google.com/maps/geo?q=Berlin&output=xml&sensor=false&key=ABQIAAAA6wyLPpbDp03tNqBX6NzZyRT2yXp_ZAY8_ufC3CFXhHIE1NvwkxRNs-JV0rqHP75bygTkcn_guLR8zg … was mit einem Google-Service geht, geht mit jeder wohlgeformten XHTML-Seite! (Beispiel geo-coord aus wp; Schriftsteller aus wp)

Auch ein Single Source Prinzip: die result-document()-Funktion Anwendungsszenarien (siehe z.B. sdoe) <xsl:result-document href="Pfad/Dateiname"> … viele weitere Schalter … Die Mächtigkeit von result-document <xsl:for-each select="div"> <xsl:result-document href="html/teil-{@n}.html"> … alle weiteren Anweisungen </xsl:result-document> </xsl:for-each>

Schwach, stark, nützlich: Variablen Variablen in XML können nichts keine Veränderung nur lokal gültig (Übergabe als Parameter) Variablen in XML können vieles Ständige Überschreibung in Schleifen Komplexe Inhalte durch Aufruf weiterer Templates Variablen in XML sind anders Variablen können Kontextinformationen speichern Variablen können temporäre Knotenbäume enthalten … Variablen können beliebige Bäume enthalten

Wie ging es eigentlich jemals ohne? xsl:for-each-group Einsatzzwecke Der xsl:for-each-group-Befehl @select, @group-by (@group-adjacent, @group-ending-with, @group-starting-with) current-group(), current-grouping-key() Beispiel1 (Fischer-Frage) Refs rausziehen; mit copy-all-but + document zurückspielen Beispiel2 (Schriftsteller (herleiten!), Geburtskohorten) geb-kohorten.xsl schreiben

Visualisierung? Visualisierung wozu? Fake-Grafiken (?) mit HTML http://benfry.com/traces/ Fake-Grafiken (?) mit HTML Beispiel (Geburtskohorten) Eigene Grafiken mit SVG Torten und anderes Eye Candy Beispiel (Verteilung der Hss. auf Sprachen) Google-Maps Beispiel (Handschriftenlokalisierung)

XSLT- produziert

Visualisierung? Visualisierung wozu? Fake-Grafiken (?) mit HTML Beispiel (Geburtskohorten) Eigene Grafiken mit SVG Torten und anderes Eye Candy

http://code.google.com/intl/de-DE/apis/charttools/

Visualisierung? Visualisierung wozu? Fake-Grafiken (?) mit HTML Beispiel (Geburtskohorten) Eigene Grafiken mit SVG Torten und anderes Eye Candy Beispiel (Verteilung der Hss. auf Sprachen)

Simple Pie Chart … <img src= "http://chart.apis.google.com/chart? chs=450x125 & cht=p & chd=t:{$ProzArab},{$ProzHeb},{$ProzLat} & chl=arabic|hebrew|latin & chdl={$ProzArab}%|{$ProzHeb}%|{$ProzLat}% " />

"Google-o-Meter" <img src="http://chart.apis.google.com/chart? chs=225x125 & cht=gom & chd=t:{$VollstaendigkeitFol} & chl=Seitenangaben({$VollstaendigkeitFol}%) "/>

Visualisierung? Visualisierung wozu? Fake-Grafiken (?) mit HTML Beispiel (Geburtskohorten) Eigene Grafiken mit SVG Torten und anderes Eye Candy Beispiel (Verteilung der Hss. auf Sprachen) Google-Maps Beispiel (Handschriftenlokalisierung)

Google Maps per XSLT

Google Maps per XSLT Drei Zutaten HTML-Container Externe Javascripte Lokale Einstellungen (Javascript) Key Karte: Mittelpunkt, Zoomfaktor, Funktionalitäten Marker: Position, Info-Fenster (HTML)

Drei Zutaten … <script src="http://maps.google.com/maps?file=api&v=2&sensor=false&key=ABQIAAAA6wyLPpbDp03tNqBX6NzZyRT2yXp_ZAY8_ufC3CFXhHIE1NvwkxRNs-JV0rqHP75bygTkcn_guLR8zg" type="text/javascript"></script> <div id="map" style="width: 950px; height: 350px"></div>

Drei Zutaten … <script type="text/javascript"> //<![CDATA[ if (GBrowserIsCompatible()) { function createMarker(point,html) { var marker = new GMarker(point); GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(html); }); return marker; } // Display the map, with some controls and set the initial location var map = new GMap2(document.getElementById("map")); map.addControl(new GLargeMapControl()); map.addControl(new GMapTypeControl()); map.setCenter(new GLatLng(48,-7),3); …

Drei Zutaten … // Set up markers with info windows <xsl:for-each-group select="//location" group-by="."> <xsl:variable name="longlat" select="document('locations_geo.xml')// locations[.=current-grouping-key()]/@longlat"></xsl:variable> <xsl:variable name="breite" select="substring-before($longlat,' ')"/> <xsl:variable name="laenge" select="substring-after($longlat,' ')"/> <xsl:variable name="infotext" select="'//institution'"></xsl:variable> var point = new GLatLng(<xsl:value-of select="$breite"/>, <xsl:value-of select="$laenge"/>); var marker = createMarker(point,'<a href="#{current-group()[1]/../text()}"> <xsl:value-of select="current-grouping-key()"/></a>:<br/> <xsl:for-each-group select="current-group()" group-by="../../institution"> <xsl:value-of select="current-grouping-key()"/> <br/> </xsl:for-each-group>'); map.addOverlay(marker); </xsl:for-each-group> } //]]> </script>

… jetzt noch einmal grundsätzlich: zwei Basisstrategien in XSLT "pull-Ansatz" ein template erledigt so viel wie möglich, indem es nacheinander Teilaufgaben abarbeitet und sich dazu die benötigten Inhalte selbst holt zunächst übersichtlich, einfach zu entwickeln, unabhängig von der Reihenfolge der Elemente im xml, nicht modular, wird bei komplexen Dokumenten unübersichtlich "push-Ansatz" templates betreffen möglichst immer nur bestimmte Elemente und verweisen für deren Inhalte auf andere templates (xsl:apply-templates) für Anfänger unübersichtlicher, abhängig von der Reihenfolge der Elemente im xml, modularsierte templates werden in verschiedenen Kontexten verwendet, bei komplexen Dokumenten letztlich leichter wartbar in der Praxis häufig Mischung beider Strategien

Basisstrategien in XSLT … <!-- Pull --> <xsl:template match="/"> <xsl:for-each select="div"> <h1><xsl:value-of select="head"/></h1> <xsl:for-each select="p"> <p><xsl:value-of select="."></xsl:value-of></p> </xsl:for-each> </xsl:for-each> </xsl:template> Es gibt Situationen, die sich mit einem pull-Ansatz nicht lösen lassen! <p> enthalte <persName> …

Basisstrategien in XSLT … <!-- Push --> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> <xsl:template match="div"> <xsl:apply-templates/> </xsl:template> <xsl:template match="head"> <h1><xsl:value-of select="."/></h1> </xsl:template> <xsl:template match="p"> <p><xsl:value-of select="."/></p> </xsl:template>

Basisstrategien in XSLT … <!-- Pull und Push --> <xsl:template match="/"> <h1>Inhalte</h1> <ul> <xsl:for-each select="div"> <li><a href="#@n"><xsl:value-of select="head"/></a></li> </xsl:for-each> </ul> <xsl:apply-templates/> <xsl:template match="div"> <a name="@n"/> <xsl:apply-templates/> </xsl:template> <xsl:template match="head"> <h1><xsl:value-of select="."/></h1> </xsl:template> <xsl:template match="p"> <p><xsl:value-of select="."/></p> </xsl:template> </xsl:template>

Templates können sich auch wie Funktionen verhalten <!– am Anfang muss der namespace kml deklariert sein --> <xsl:call-template name="fetchGeo"> <xsl:with-param name="suche" select="Berlin"/> </xsl:call-template> <xsl:template name="fetchGeo"> <xsl:param name="suche"/> <xsl:variable name="key" select="'ABQIAAAA6wyLPpbDp03tNqBX6NzZyRT2yXp_ZAY8_ufC3CFXhHIE1NvwkxRNs-JV0rqHP75bygTkcn_guLR8zg'"/> <xsl:variable name="URL" select="http://maps.google.com/maps/geo? q={$suche}&output=xml&sensor=false&key={$key}"/> <xsl:value-of select="document($URL)//kml:coordinates"/> </xsl:template>