Post on 05-Apr-2015
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010
Zum Einstieg,zur Wiederholung
und zur Vertiefung:
DatengewinnungDatenanreicherungDatenverarbeitung
…mit XML und XSLT
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 2
Der Plan- Wo das XML herkommt- Wie das XML schöner wird
- Regex
- XSLT
- Was hinten rauskommt- document()- Variablen- xsl:for-each-group- Visualisierung
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 3
… wo das XML herkommt- XML aus Word
- Word ist schon XML- Übersetzung Typographie in Markup- Übergabe an OpenOffice
- XML aus OpenOffice- TEI OpenOffice Package
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 4
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 5
… wo das XML herkommt- 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
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 6
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 7
… wo das XML herkommt- 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
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 8
XML-Daten verbessern- Ziel: Handarbeit vermeiden!- Einfaches Suchen&Ersetzen- Word-(OpenOffice)-Macros- Regular Expressions
- regex in XSLT- Datenanreicherung mit XSLT
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 9
Regular Expressions (in Oxygen)
- Ausgangslage- Verschiedene Dialekte
- Maßgeblich: perlre
- Umfang der Implementierung?
- oXygen vs. XML-Schema vs. XSLT
- Syntax
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 10
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
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 11
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
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 12
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)
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 13
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. …
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 14
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
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 15
regex in XSLT- xsl:analyze-string
- xsl:matching-substring, xsl:non-matching-substring
- XPath-Funktionen- matches()
- replace()
- tokenize()
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 16
Datenanreicherung per XSLT: copy-all-but …
- Ausgangslage- Grundtemplate
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 17
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?
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 18
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
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 19
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)
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 20
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>
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 21
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
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 22
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
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 23
Visualisierung?
- Visualisierung wozu?- 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)
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 24
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 25
XSLT-
produziert
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 26
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 27
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 28
Visualisierung?
- Visualisierung wozu?- Fake-Grafiken (?) mit HTML
- Beispiel (Geburtskohorten)
- Eigene Grafiken mit SVG- Torten und anderes Eye Candy
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 29
http://code.google.com/intl/de-DE/apis/charttools/
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 30
Visualisierung?
- Visualisierung wozu?- Fake-Grafiken (?) mit HTML
- Beispiel (Geburtskohorten)
- Eigene Grafiken mit SVG- Torten und anderes Eye Candy
- Beispiel (Verteilung der Hss. auf Sprachen)
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 31
<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}% " />
Simple Pie Chart …
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 32
<img src="http://chart.apis.google.com/chart?chs=225x125 &cht=gom &chd=t:{$VollstaendigkeitFol} &chl=Seitenangaben({$VollstaendigkeitFol}%) "/>
"Google-o-Meter"
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 33
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)
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 34
Google Maps per XSLT
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 35
Google Maps per XSLT
- Drei Zutaten- HTML-Container
- Externe Javascripte
- Lokale Einstellungen (Javascript)- Key- Karte: Mittelpunkt, Zoomfaktor, Funktionalitäten- Marker: Position, Info-Fenster (HTML)
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 36
Drei Zutaten …
1. <script src="http://maps.google.com/maps?file=api&v=2&sensor=false&key=ABQIAAAA6wyLPpbDp03tNqBX6NzZyRT2yXp_ZAY8_ufC3CFXhHIE1NvwkxRNs-JV0rqHP75bygTkcn_guLR8zg" type="text/javascript"></script>
2. <div id="map" style="width: 950px; height: 350px"></div>
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 37
Drei Zutaten …
3. <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);
…
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 38
Drei Zutaten …3. // 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>
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 39
… 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
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 40
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> …
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 41
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>
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 42
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>
Institut für Dokumentologie und Editorik
Spring School 2. März bis 5. März 2010Datengewinnung-, anreicherung, -verarbeitungFolie 43
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>