R-Sitemap – eine Sitemap mit XML

Mit dieser Seite dokumentiere ich die Technik, die hinter meiner Sitemap steckt. Die Ideen dahinter basieren unter anderem auf dem Artikel Für weitere Informationen über Sitemaps allgemein und Gedanken, die mit der hier beschriebenen Technik nichts zu tun haben, verweise ich auf den genannten Artikel.

  1. kurze technische Einführung mit Übersicht
  2. Copyright- und Lizenz-Informationen
  3. Definition des XML-Formats
  4. Transformation nach HTML
  5. Beispiel-Anwendung
  6. Download aller Dateien

Kurze Technische Einführung mit Übersicht

Im Zuge der (Wieder-) Installation einer Sitemap für meine Webseite kam ich auf die Idee, diese Sitemap in XML zu formulieren, weil dies ein universelles und auf Grund der Vielfalt an Bibliotheken gut zu verarbeitenden Formats ist. In diesem Dokument ist neben dem Dateiformat auch die Transformation nach HTML als konkrete Anwendung beschrieben.

Bei der Definition des Formats habe ich mich von dem Konzept der Listen in HTML inspirieren lassen: Es gibt ein Listen-Element, welches die ganzen Einträge enthält. Ein Eintrag kann dabei eine weitere Liste als Kindelement enthalten und so weiter. Auf diese Weise werden in HTML recht einfache, aber sehr mächtige Listen definiert, weshalb ich dieses Konzept für die Sitemap in XML übernommen habe. Das Listenelement heißt hierbei directory, die eingeschachtelten Einträge item. Im Gegensatz zu HTML enthalten die items alle Daten als Attribute und sind aus der „XML-Sicht“ so genannte leere Elemente.

Copyright- und Lizenz-Informationen

Urheber der hier beschrieben Technologie, dieses Dokuments sowie aller zu diesem Dokument gehörenden Dateien ist Robert Bienert.

Creative Commons License Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert:

Sie dürfen:

Zu den folgenden Bedingungen:

Definition des XML-Formats

Das der Sitemap zu Grunde liegende XML-Format wird formal durch das XML-Schema r-sitemap.xsd definiert und lässt sich folgendermaßen beschreiben:

Das Toplevel-Element ist directory, welches mindestens ein item enthält. Der XML-Namesraum ist dabei http://www.robertbienert.de/dokumente/web/sitemap/.

directory

Dieses Element enthält mindestens ein item. Zusätzlich ist eines der beiden Attribute möglich:

path
Der Attributwert ist ein absoluter Pfad, der von eingeschachtelten items mittels subpath benutzt werden kann.
subpath
Dieser Attributwert enthält lediglich einen relativen Pfad, der an einen vorher definierten Pfadteil angehangen wird. »Vorher definiert« heißt dabei, dass die entsprechenden Pfadbestandteile übergeordneter items und directorys aneinandergehangen um diesen Pfad ergänzt werden.

item

Dieses Element ist bei normalen Verzeichniseinträgen leer, d.h. es enthält lediglich die im Folgenden aufgeführten Attribute. Es kann allerdings auch Unterverzeichnisse enthalten.

path
Damit wird dem Verzeichniseintrag ein absoluter Pfad zugeordnet, der genau so verwendet wird.
subpath
Für dieses Attribut gilt das gleiche, was bereits zum gleichlautenden Attribut für directorys gesagt worden ist: Die Pfade werden der Reihe nach, also „von oben nach unten“ in der Hierarchie zusammengesetzt.
title
Dieses obligatorische Attribut definiert den Titel eines items. Der Titel soll kurz und prägnant die hinter dem Verzeichniseintrag stehende Ressource beschreiben, wobei für längere Beschreibungen das Attribut desc gedacht ist.
desc
Mit diesem optionalen Attribut wird dem Eintrag eine (längere) Beschreibung zugeordnet.

Eine konkrete Beispiel-Anwendung befindet sich weiter unten.

Transformation nach HTML

Wie die konkrete Transformation nach HTML funktioniert ist dem XML-Stylesheet r-sitemap.xsl zu entnehmen.

Am Einfachsten lässt sich die Funktionsweise des XML-Stylesheets zur Transformation nach HTML so beschreiben, dass alle directory-Elemente durch ul und alle items durch li ersetzt werden. Der Inhalt des li-Elements besteht dabei aus einem Link zur Ressource, die mit dem Attribut path oder subpath des items referenziert wird. Als Beschriftungstext des Links wird der Inhalt des title verwendet, ein eventuell vorhandenen Attribut desc liefert eine zusätzliche Beschreibung, die durch einen Trennstrich vom Titel separiert wird.

Das mitgeliefert XML-Stylesheet erzeugt allerdings keinen kompletten HTML-Baum, sondern lediglich eine Liste, so dass das Ergebnis einer XSL-Transformation bequem weiter verarbeitet werden kann.

Beispiel-Anwendung

Basierend auf der Definition des XML-Formats haben wir folgende kleine Sitemap erstellt:

<?xml version="1.0" encoding="UTF-8" ?>
<!-- FIXME
     Das XML-Stylesheet kommt aktuell mit der Namensraum-Angabe nicht
     klar, d.h. es findet keine Elemente und produziert daher einen
     leeren Ausgabe-Baum.

<directory xmlns="http://www.robertbienert.de/dokumente/web/sitemap/">
-->
<directory>
	<item path="/" title="Startseite" desc="Meine Homepage" />
	<item path="/gb/" title="Gästebuch" />
	<item path="/literatur/" title="lesenswerte Literatur"
		desc="Dieses Verzeichnis enthält die wirklich guten Schicken der Weltliteratur">
		<!-- Der quasi-leere subpath ist notwendig, damit die
		     relativen Pfade gleich funktionieren!
		  -->
		<directory subpath=".">
			<item subpath="krimi" title="Krimis" />
			<item subpath="sf" title="Science Fiction" />
			<item subpath="mathe" title="Mathematik-Lehrbücher" />
		</directory>
	</item>
	<item path="/impressum/" title="Impressum" />
</directory>

Dieses Beispiel enthält die Anwendung von Unterverzeichnissen und verdeutlicht außerdem auch die Verwendung relativer Pfade. Eine Transformation nach HTML führt nun zu diesem Ergebnis:

<?xml version="1.0"?>
<ul>
  <li><a href="/">Startseite</a> &#x2013; Meine Homepage</li>
  <li>
    <a href="/gb/">G&#xE4;stebuch</a>
  </li>
  <li><a href="/literatur/">lesenswerte Literatur</a> &#x2013; Dieses Verzeichnis enth&#xE4;lt die wirklich guten Schicken der Weltliteratur<ul><li><a href="/literatur/./krimi">Krimis</a></li><li><a href="/literatur/./sf">Science Fiction</a></li><li><a href="/literatur/./mathe">Mathematik-Lehrb&#xFC;cher</a></li></ul></li>
  <li>
    <a href="/impressum/">Impressum</a>
  </li>
</ul>

Download aller Dateien