institut für dokumentologie und editorik spring school 2. märz bis 5. märz 2010 zum einstieg, zur...
TRANSCRIPT
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>