Mit dieser Seite dokumentiere ich die Technik, die hinter meiner Sitemap steckt. Die Ideen dahinter basieren unter anderem auf dem Artikel Wie baut man eine Sitemap? 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.
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.
Urheber der hier beschrieben Technologie, dieses Dokuments sowie aller zu diesem Dokument gehörenden Dateien ist Robert Bienert.
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert:
Sie dürfen:
Zu den folgenden Bedingungen:
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:
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.
Eine konkrete Beispiel-Anwendung befindet sich weiter unten.
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.
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> – Meine Homepage</li> <li> <a href="/gb/">Gästebuch</a> </li> <li><a href="/literatur/">lesenswerte Literatur</a> – Dieses Verzeichnis enthä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ücher</a></li></ul></li> <li> <a href="/impressum/">Impressum</a> </li> </ul>