View on GitHub

zensur-in-bildern

Verlauf der Zensur der chinesischen Wikipedia in den 2010er Jahren in Bildern

Skripte und Schemata

Mit den hier dokumentierten Skripten und Schemata wurden sämtliche Quelldaten des Projekts erhoben. Im Folgenden wird zunächst kurz der übliche Arbeitsablauf zum Abruf der Quelldaten umrissen und anschließend die Funktion und der Aufruf der jeweiligen Skripte und Schemata erläutert. Folgende Dateien wurden hier dokumentiert:

BASH-Skripte XSLT-Schemata
getHistory.sh history.xsl
getArticles.sh images.xsl
getImages.sh combineImages.xsl
getImageTable.sh  

Zum Abruf der Quelldaten wird zunächst getArticles.sh unter Angabe der URL der jeweiligen Artikelversionsgeschichte aufgerufen. Das Skript ermittelt dabei über getHistory.sh die Versionsgeschichte des Artikels und liest aus dieser anschließend die IDs aller Artikelversionen aus, um die Volltexte der Versionen schließlich herunterzuladen. Als Nächstes werden über getImages.sh sämtliche Bildeinträge aus den zuvor heruntergeladenen Artikelversionen ausgelesen und als XML gespeichert. Mittels getImageTable.sh werden diese Bildeinträge schließlich ausgewertet; das Endergebnis ist eine Matrix in Form einer HTML-Tabelle, in der sämtliche Artikelversionen mit sämtlichen Bildeinträgen gegenübergestellt werden.
Eine exemplarische und ausführliche Beschreibung des Prozesses findet sich im Dokument Quellenarbeit im Abschnitt Exemplarischer Ablauf.


BASH-Skripte

Zur Ausführung der Shell-Skripte ist eine bash-kompatible Shell nötig, wie sie unter GNU/Linux sowie MacOS üblicherweise zum Einsatz kommt. Unter Windows kann diese über die Einrichtung des Windows-Subsystems für Linux nachträglich installiert werden.

getHistory.sh (2020-01-27)

Das Skript ruft eine angegebene Wikipedia-Artikelgeschichte ab und speichert neben der unveränderten HTML-Datei auch eine auf Kennwerte reduzierte und vom HTML freigestellte XML. Für den zweiten Schritt ist es dabei notwendig, dass sich die Transformationsdatei (Siehe history.xsl) im Skriptverzeichnis befindet.

sh getHistory.sh -u URL -v VERZEICHNIS

Der Aufruf ist optional parametrisiert und akzeptiert die Parameter -u zur Angabe der abzurufenden URL sowie -v zur Angabe eines Arbeitsverzeichnisses, um die Ergebnisdateien dort abzulegen. Es ist angeraten, die Parameter in Anführungszeichen zu setzen, um eine korrekte Übernahme auch bei komplexeren Zeichenketten (mit Leerzeichen und anderen Sonderzeichen) zu gewährleisten. Wird keine URL angegeben, wird diese zur Laufzeit des Skriptes abgefragt. Sollte kein Arbeitsverzeichnis angegeben sein, werden die Ergebnisdateien im Skriptverzeichnis abgelegt. Die Prozesse werden in einem Logfile dokumentiert. Es werden folgende Kommandozeilenprogramme verwendet:

getArticles.sh (2020-01-23)

Das Skript ruft eine Reihe von Wikipedia-Artikelversionen ab und speichert diese als XML-Datei. Die XML entspricht dabei folgender Form:

<article>
	<version id= >
	</version>
</article>

Der Abruf folgt dabei einer ID-Liste, die entweder als CSV- oder XML-Datei vorliegen muss. Die XML muss dabei dem Schema history.xsl entsprechen. Alternativ wird über den Aufruf des Skriptes getHistory.sh eine ID-Liste erzeugt, die weiterhin auch zeitlich eingeschränkt werden kann. Der Skriptverlauf wird in eine Logfile geschrieben.

sh getArticles.sh -u URL -v VERZEICHNIS -b BEGINNZEITRAUM -e ENDEZEITRAUM -l

Der Aufruf ist optional parametrisiert und akzeptiert die Parameter -v zur Angabe eines Arbeitsverzeichnisses sowie -u zur Angabe der URL der zugehörigen Versionsgeschichte. Es ist angeraten, die Parameter in Anführungszeichen zu setzen, um eine korrekte Übernahme auch bei komplexeren Zeichenketten (mit Leerzeichen und anderen Sonderzeichen) zu gewährleisten. Wird keine URL angegeben, wird diese zur Laufzeit des Skriptes abgefragt. Sollte kein Arbeitsverzeichnis angegeben sein, werden die Ergebnisdateien im Skriptverzeichnis abgelegt. Über die Parameter -b Beginn sowie -e Ende kann der Zeitraum der abzurufenden Artikel eingegrenzt werden. Die Datumsangaben sind im Format YYYYMMDDhhmm anzugeben. Werden Beginn oder Ende nicht gesetzt, kann der abzurufende Zeitraum zur Laufzeit des Skriptes angegeben werden. Mit dem Parameter -l kann der Abruf der historyData.xml unterbunden werden, das Skript wird lokal ausgeführt. Die maximale Dateigröße der Zieldatei ist im Standard auf 200 MB gesetzt. Bei Überschreiten dieser Grenze legt das Skript eine weitere Ergebnisdatei an (durch Anfügen eines Zählers an den Dateinamen), in der die Ergebnisse fortgeschrieben werden. Es werden folgende Kommandozeilenprogramme verwendet:

getImages.sh (2020-01-27)

Das Skript ermittelt aus articleData.xml-Dateien sämtliche Bilder und speichert deren Metadaten als XML-Datei.

sh getImages.sh -v VERZEICHNIS

Es können belibig viele Dateien im Format articleData[n].xml eingelesen werden, wobei [n] eine natürliche Zahl sein muss. Die erste Datei einer Serie muss stets articleData.xml heißen und alle folgenden müssen aufsteigend nummeriert werden. Über den Parameter -v kann ein Arbeitsverzeichnis relativ zum Skriptverzeichnis angegeben werden. Die Ermittlung der auszulesenden Dateien beschränkt sich auf das unmittelbare Arbeitsverzeichnis. Zur Transformation der Daten wird das Schema images.xsl angewandt. Es werden folgende Kommandozeilenprogramme verwendet:

getImageTable.sh (2020-01-29)

Das Skript legt eine HTML-Tabelle an, in der alle aus der Quelldatei (bzw. den Quelldateien) ermittelten Bilder allen Artikelversionen gegenübergestellt werden. Aus dieser Tabelle lässt sich somit die Entwicklung der Verwendung einzelner Bilder über den definierten Versionsverlauf nachvollziehen.

sh getImageTable.sh -v VERZEICHNIS -n

Der Aufruf ist optional parametrisiert und akzeptiert die Parameter -v zur Angabe eines Arbeitsverzeichnisses sowie -n, um keine Transformation der articleData.xml durchzuführen. Zur Prüfung der Artikelversionen gegen den Bildbestand werden zunächst alle einzigartigen (unique) Bilder ermittelt, diese werden dabei anhand der URL identifiziert. Anschließend wird die HTML-Tabelle geschrieben, wobei für jede Artikelversion geprüft wird, welche Bilder aus dem Gesamtbestand darin vorkommen. Das Ergebnis wird in eine HTML-Datei (Standard: imageTable.html) geschrieben. Die einzelnen Skript-Schritte werden in einem Logfile dokumentiert. Es werden folgende Kommandozeilenprogramme verwendet:


XSLT-Schemata

Die XSLT-Schemata folgen dem XSLT-Standard 1.0 und können mittels beliebiger XML-Editoren angewendet werden.

history.xsl (2020-01-27)

Die Schemadatei dient dazu, das HTML-Dokument einer Wikipedia-Versionsgeschichte zu zerlegen und in eine auswertbare Struktur zu bringen. Die XML folgt dabei der Form:

<article>
	<versions>
        <version>
            <id/>
            <timestamp/>
            <date/>
            <time/>
            <user/>
            <minoredit/>
            <comment/>
        </version>
	</versions>
</article>

Das Tag <versions/> beinhaltet hierbei die zentrale Liste mit den einzelnen Versionen des zugehörigen Artikels. Der restliche Seiteninhalt wird entsprechend davor und dahinter im Tag <article/> gekapselt. Das Schema zerlegt die dargestellten Datumsangaben in das neutrale Format YYYYMMDDhhmm um eine einfache Verarbeitung zu gewährleisten. Mit Stand 27.01.2020 ist nur die Zerlegung des in der chinesischen Wikipedia benutzten Datumsformat (etwa 2020年1月4日 (六) 10:20) implementiert.

Das Schema wird üblicherweise über das Skript getHistory.sh aufgerufen. Unabhängig davon kann es über des Kommandozeilenprogramms xsltproc angewendet werden:

xsltproc -v -o ZIELDATEI history.xsl HTMLDATEI

images.xsl (2020-01-27)

Die Schemadatei dient der Ermittlung von Bild-Elementen aus Wikipediaartikeln. Das HTML der Artikel wird dabei als Inhalt von article/version erwartet. Um eine Stapelverarbeitung zu ermöglichen, simuliert das Schema eine Schleifenstruktur durch einen rekursiven Aufruf. Dabei werden externe Dateien durchiteriert. Die Dateibezeichnungen müssen dem Schema articleData[n].xml folgen. Der Prozess ist bei größeren Quelldaten sehr Speicherintensiv. NB Auf System mit 8 GB Ram wird eine maximales Quelldatenvolumen von 1,5 GB pro Durchlauf empfohlen. Die Ausgabe entspricht folgender Form:

<article>
	<version id= >
		<image id= >
			<alt/>
			<url/>
			<class/>
			<width/>
			<height/>
			<width_file/>
			<height_file/>
			<decoding/>
			<srcset/>
		</image>
	</version>
</article>

Das Schema wird üblicherweise über das Skript getImages.sh aufgerufen. Unabhängig davon kann es über des Kommandozeilenprogramms xsltproc angewendet werden:

xsltproc -v -o ZIELDATEI -param count ANZAHL -stringparam directory VERZEICHNIS images.xsl articeData.xml

Der Parameter count entspricht dabei der Anzahl der zusätzlichen articleData.xml-Dateien, also jenen mit einer Ziffer im Dateinamen. Mittels directory kann das Arbeitsverzeichnis angegeben werden. (NB! Die Angabe des Arbeitsverzeichnis wirkt sich nicht auf die Adressierung der Quell- oder Zieldatei im xsltproc-Aufruf aus!)

combineImages.xsl (2020-01-27)

Die Schemadatei dient dem Zusammenführen von imageData.xml-Dateien. Dies ist nötig, wenn bei größeren Quelldatenmengen nur partielle Transformationen via getImages.sh durchgeführt werden. Die Quelldateien müssen dem Schema imageData[n].xml entsprechen. Der Zähler n ist dabei eine natürliche Zahl, die erste Datei trägt die Ziffer 1, alle weiteren sind aufsteigend beziffert. Das Schema wird über das Konsolenprogramm xsltproc angewendet:

xsltproc -v -o ZIELDATEI -param count ANZAHL -stringparam directory VERZEICHNIS combineImages.xsl imageData1.xml

Der Parameter count entspricht dabei der Gesamtanzahl der imageData[n].xml-Dateien. Mittels directory kann das Arbeitsverzeichnis angegeben werden. (NB! Die Angabe des Arbeitsverzeichnis wirkt sich nicht auf die Adressierung der Quell- oder Zieldatei im xsltproc-Aufruf aus!)


Creative Commons Lizenzvertrag Sämtliche Skripte und Schemata sind lizenziert unter einer Creative Commons Namensnennung 3.0 Deutschland Lizenz. Dieser Hinweis findet sich weiterhin in der Quelltextkommentierung der einzelnen Dateien.