(Ulrike Henny)

X-Technologien

Um Informationen aus Wikipedia-Artikeln nicht nur lesend und browsend nutzen zu können, sondern auch Erkenntnisse über viele Wikipedia-Artikel hinweg gewinnen zu können, indem diese systematisch ausgewertet werden, bieten sich verschiedene Technologien an. Hier soll nur eines von verschiedenen möglichen Szenarien vorgestellt werden. Die Technologie der Wahl sind an dieser Stelle X-Technologien (XPath und XSLT), die den Vorteil haben, dass sie sehr gut mit dem Format der Wikipedia-Seiten – XHTML – umgehen können. Außerdem sind sie auch vergleichsweise leicht zu erlernen.

Die hinter Wikipedia stehende Software ist ein Mediawiki. Dafür gibt es zwar eine eigene Programmierschnittstelle (API), über die ebenfalls systematisch Informationen aus der Wikipedia abgerufen werden können, aber die Mediawiki-API erwartet ganz bestimmte Aufrufe und unterstützt auch nur ganz bestimmte Arten von Abfragen. Die X-Technologien bieten in dieser Hinsicht also mehr Freiheit und zugleich sind sie, einmal erlernt, auch in vielen anderen Zusammenhängen einsetzbar. Dazu kommt noch, dass mit XPath und XSLT nicht nur die Informationen eingesammelt werden können. Auch die Analyse der Daten und die Präsentation der Ergebnisse lassen sich mit ihnen umsetzen.

XML

XHTML ist zugleich auch XML (Extensible Markup Language). Der folgende Code-Abschnitt ist ein Beispiel für ein XHMTL-Fragment aus dem Wikipedia-Artikel „Historiker“:

XML-Dokumente sind hierarchisch aufgebaut. Man kann sie sich wie einen Baum vorstellen, mit Ästen, die sich immer weiter verzweigen, und Blättern am Ende. In dem Beispiel oben gibt es ein Absatz-Element p, das in diesem Fall die Wurzel des XML-Baumes darstellt. Wenn man sich die Hierarchie als ineinander geschachtelte Elemente vorstellt, ist es das äußerste Element. Denkt man sich die Schritte von außen nach innen zugleich als von oben nach unten, dann ist das Wurzelelement das höchste Element im Baum.

Ein XML-Element besteht aus einem öffnenden Tag (<p>), einem schließenden Tag (</p>) und dem dazwischen stehenden Elementinhalt. Wie am Beispiel zu sehen ist, stehen innerhalb von <p> und </p> noch weitere Elemente, zum Beispiel <b>Historiker</b>. Das b-Element zeigt hier an, dass das Wort „Historiker“ fett dargestellt werden soll. Die Elemente, die direkt innerhalb des p-Elementes vorkommen, sind dessen Kindelemente. Aus Sicht dieser Elemente ist das Absatzelement das Elternelement. Kommen Elemente auf der gleichen Ebene vor, sind sie Geschwisterelemente: Das Link-Element <a> ist ein auf <p> folgendes Geschwisterelement. Die Textteile innerhalb von den Elementen sind die Blätter des XML-Baumes.

Neben Elementen gibt es noch Attribute, mit denen ein Element genauer beschrieben werden kann. Die Link-Elemente <a> im Beispiel haben zwei Attribute: href und title. Attribute stehen innerhalb des öffnenden Element-Tags und bestehen aus einem Attributnamen und einem Attributwert. Der Attributwert steht in Anführungszeichen und wird dem Attributnamen über ein Gleichheitszeichen zugewiesen. Der Wert des href-Attributs ist hier das Linkziel und der Wert des title-Attributs ein Text, der angezeigt wird, wenn man im Browser die Maus über die Textstelle bewegt. Die Attribute mit ihren Werten können ebenfalls als Blätter im XML-Baum angesehen werden.

XPath

Auf die in XML ausgedrückten Strukturen kann mit Hilfe von XPath zugegriffen werden. XPath steht für „XML Path Language“ und ist eine Pfad- bzw. Abfragesprache, die es einem erlaubt, durch den XML-Baum zu „klettern“ und sich bestimmte Teile des Baumes zurückgeben zu lassen. Ein Pfadausdruck besteht aus einzelnen Schritten, die aneinandergehängt werden können:

Die Teilschritte werden über einen Slash miteinander verbunden. Der Pfadausdruck im Beispiel beginnt an der Wurzel des XML-Dokuments und sucht dann beliebig tief (//) nach einem Absatzelement p, geht von da aus weiter und sucht nach einem Element a, das Kindelement von p ist und stellt schließlich noch die Bedingung (die in eckigen Klammern notiert wird), dass nur das zweite von allen Linkelementen, die gefunden werden, zurückgegeben werden soll. Dieser Pfadausdruck würde das Wort „Geschichte“ zurückliefern.

XSLT

Wenn die mit XPath ausgewählten XML-Elemente in eine andere Struktur gebracht werden oder in ein anderes Format umgewandelt werden sollen, kann die Transformationssprache XSLT (Extensible Stylesheet Language Transformation) verwendet werden. XSLT besteht aus Anweisungen, die eine über XPath ausgewählte XML-Menge entgegennehmen und damit etwas bestimmtes tun. Auf diese Weise können ganze XML-Dokumente in andere Ergebnisdokumente umgewandelt werden. Es können aber auch Teile aus XML-Dokumenten abgefragt und damit weitergearbeitet werden. Im folgenden Beispiel werden alle Links aus dem obigen XML-Baum genommen und der Textinhalt der Links wird in das Ergebnisdokument geschrieben:

In Worte gefasst steht dort: Für jedes (xsl:for-each) Element a, das im Eingabedokument gefunden wird (//a), wähle es aus (select) und mache etwas damit. Was getan werden soll, steht innerhalb der for-each-Anweisung: Der Wert (xsl:value-of) des aktuell ausgewählten Elements (.) soll genommen (select) und in das Ergebnisdokument geschrieben werden. Wenn der XML-Baum oben mit dieser XSLT-Anweisung verarbeitet wird, sieht das Ergebnis so aus:

Dies wäre also schon eine Möglichkeit, Informationen aus dem Text des Wikipedia-Artikels zu extrahieren; nämlich, dass der Text des Artikels „Historiker“ Verknüpfungen zu den beiden Wikipedia-Artikeln „Wissenschaftler“ und „Geschichte“ enthält. Um die Transformation ausführen zu können, braucht es einen XSLT-Prozessor. Dieser kann in Software zur Bearbeitung von XML integriert sein. Aber auch Web-Browser sind in der Lage, XSLT-Transformationen auszuführen, wenn ihnen ein XML-Dokument mit einer darin enthaltenen Verarbeitungsanweisung übergeben wird, die sagt, mit welchem XSLT-Skript das XML verarbeitet werden soll.

Auf Wikipedia-Artikel zugreifen

Nun liegt der Wikipedia-Artikel „Historiker“ nicht bei uns, sondern auf dem Wikipedia-Webserver. Das XSLT-Skript muss daher so angepasst werden, dass es zunächst den Artikel vom Wikipedia-Server abholt, um dann damit etwas zu tun. Für diesen Zweck gibt es die XPath-Funktion document, der die Adresse der Webseite übergeben werden kann:

Dieses XSLT-Skript würde allerdings sämtliche Links von der Wikipedia-Seite einsammeln. Es interessieren aber nur die Links, die im eigentlichen Artikeltext stehen und nicht etwa Links aus den Kopf-, Fuß- oder Seitenbereichen, wie „Benutzerkonto anlegen“ oder „Als PDF herunterladen“. Um nur die Links aus dem Text einzusammeln, muss das HTML-Element gefunden werden, das den Haupttext enthält. Mit Rechtsklick auf die Seite öffnet sich ein Kontextmenü, über das der Quelltext angezeigt werden kann. So ist herauszufinden, dass sich der eigentlich Artikeltext innerhalb von einem div-Element befindet, das über ein id-Attribut mit dem Wert „mw-content-text“ näher bestimmt ist:

historiker-seite-quelltext

Der XPath-Ausdruck kann nun durch das Hinzufügen einer Bedingung so erweitert werden, dass nur die Links ausgewählt werden, die innerhalb des gewünschten Abschnitts innerhalb von Absätzen vorkommen. Außerdem sind dem Stylesheet noch eine HTML-Überschrift und ein Element br hinzugefügt worden, das dafür sorgt, dass im Ergebnisdokument nach jedem Linktext ein Zeilenumbruch eingefügt wird. Schließlich sollen die Links noch alphabetisch sortiert werden, was mit der XSLT-Anweisung sort erreicht werden kann:

Die Beispiel-Dateien sind hier verfügbar: XSLT-Skript, HTML-Ergebnis