rosenhaeger.de

SiGHTS - Hypertexte komfortabel erstellen

Das Content Management Systemen SiGHTS entstand, während ich mich mit Hypertexten, XML und der Programmiersprache XSLT beschäftigt habe. Die wesentlichen Ideen des Konzeptes waren

  • Webpräsenzen ohne einen spezialisierten Offline-Editor (z.B. Frontpage) zu erstellen. Webseiten ohne eine datenbankgestütztes und pflegeintensives CMS als statische HTML-Seiten zu erstellen
  • Ein System zu schaffen, dass zugleich in diesen statischen HTML-Dateien Menüs, Breadcrumbs, Backlinks, etc. dynamisch erstellt.
  • Möglichst weitgehend und konsequent Metadaten zu nutzen.
  • Immer den Dokumenttypdeklarationen (DTDs) zu entsprechen und XHTML-konforme Seiten zu erstellen.

SiGTHS steht für:
Struktur-Gestützte HyperText Markup-Sprache

Dazu wird eine komplette Web-Präsenz in einer Quelle vorgehalten, die über eine feste (Baum-)Struktur verfügt. Diese Struktur wird von einem Satz von Skripten in der Sprache XSL-T ausgewertet und verarbeitet, um die Informationseinheiten untereinander zu verlinken.

 

Baumstrukturen in singulärer Datei

Die gesamte Präsenz liegt in einer große XML-Datei vor. Sie wird von kleineren Skripten, wie unten näher beschrieben, auf die verschiedenen fertigen HTML-Dateien verteilt.

Diese Datei organisiert sich in einer Baumstruktur. Dies bedeute in einer ganz generellen Weise, dass Daten so angeordnet werden, das sie in einem eindeutigen Abhängigkeitsverhältnis zueinander stehen (ein Ast geht immer von einem Stamm ab) und in einer eindeutigen Reihenfolge angeordnet sind (es ist immer klar, welcher Ast höher als ein anderer am Stamm sitzt).

Diese dem Standard XML zu Grunde liegenden theoretischen Prinzipien nutzt Sights. Konkret sind hier die "Äste" die einzelnen Seiten. Aus ihrer Abhängigkeit wird ihre Zugehörigkeit zu einer konkreten Unterbereich dieser Homepage geschlossen. Aus ihrer Reihenfolge aufeinander wird das obere Navigationsmenü erzeugt.

Seiten als logische Grundeinheiten

Das logische Element Seite, gekennzeichnet durch das XML-Element <seite>, dient hier zwei Zwecken: als Container für die Inhalte, die hier einfach als XHTML vorliegen und zugleich implizit als Beschreibung der Struktur der Präsenz.

Dazu sind die einzelnen Bestandteile der Präsenz, die Seiten, in größere logische Einheiten zusammengefasst: die Sektionen. Diese Seite etwa ist in der Sektion "schreiben". Sie hat mehrere Nachbarn, etwa "Startseite", "NW-Artikel" und so fort. Aus diese Nebeneinander der Bestandteile generieren die Skripte die Navigationsleiste. 

Aus dieser Datenhaltung in einer strukturierten XML-Datei ergeben sich Vorteile. Wird die Struktur umgestellt, also etwa eine Seite in eine ander Sektion verschoben, muss diese Änderung nicht von Hand in den Navigationsleisten aller Seiten übernommen werden. Das Skript erzeugt automatisch entsprechende Navigationensleisten und Link-Möglichkeiten.

Dies ist die zentrale Funktion der Skripte. Sie stellen sich, dass Links und Menüs immer auf gültige Ziele verweisen.

Ergänzende Daten 

Als Grundelement einer in diesem Markup vorgehaltenen Web-Präsenz werden Seiten verwendet. Diese sind zu Sektionen zusammengefasst. Diese wiederum sind auf der höchsten Ebene als "Präsenz", also als kompletter Web-Auftritt, geordnet.
Zudem ist es möglich unterhalb der Ebene der Seiten weitere Seiten unterzuordnen. So ergeben sich insgesamt vier logische Ebenen: Präsenz, Sektion, Seite und untergeordnete Seite. Auf jeder dieser Ebenen sind jeweils neben den Inhalten - bei den Seiten sind dies der XHTML-strukturierte Text, bei der Präsenz und Sektion die jeweiligen untergeordneten Strukturen -, weitere Daten beigefügt.

Diese Daten sind gewissermaßen Meta-Daten, also Daten über die konkreten Inhaltsdaten. Diese sind nach drei unterschiedlichen Aspekten der Weiterverarbeitung der Daten geordnet: Zum einen finden sich "echte" Meta-Daten. Diese umfassen etwa Erstellungsdaten, Beschreibung des Inhalts und Titel. Für die konkrete Annotation wird hier der Dublin-Core-Standard verwendet, der sich als ausreichend für die Zwecke dieses Markups erwiesen hat.

Zum Zweiten werden Inhalte formuliert, die sich auf das Dateisystem beziehen. Für eine Sektion etwa wird in diesem Aspekt der Metadaten ein Unterpfad der Domäne angegeben. Drittens können für jeden Datenbestand Angaben zur Verarbeitung der Inhalte gemacht werden. Einzelne Seiten können beispielsweise von ihrer Aufnahme in eine Navigationsleiste ausgeschlossen werden. Außerdem lassen sich unter dem Strukturaspekt "Serialisierung" - diese Bezeichnung bezieht sich auf die serielle Verarbeitung der Seiten - auch zusätzlich Angaben zur Formatierung mittels CSS machen.

Diese Seiten werden aus einer XML-Datei automatisch erzeugt. Diese wird gegen eine Schema validiert, das in der Schemasprache Relax NG formuliert ist. Mit dieser wird ein gültige Struktur für die Daten festgelegt und die Typen der darin enthaltenen Daten (Text, Zahl, Dateiname, Datum)

Hier ein kleiner Auszug aus der XML-Quelldatei, die diesem Web-Auftritt zugrunde liegt:

Gut sichtbar wird hier zweierlei:
  1. Die Ergänzungsdaten, also Metadaten im Element <meta>, Angaben zur Verarbeitung der Daten in <serialisierung> und Bezüge zum Dateisystem - <dateisystem> -, wiederholen sich auf jeder Ordnungsebene. Das verdeutlicht noch einmal, das diese, obowohl sie unterschiedlich benannt sind, über diesselbe logische Funktion verfügen; nämlich einzelne Informationseinheiten in einen Strukturzusammenhang zu stellen.
    Die Ergänzung dominieren sich in hierarchischer Abfolge. So gilt die Statusinformation (<status>) der Sektion für alle ihr untergeordneten Seiten. Selbst wenn deren Status "publiziert" aufweist, sorgt der Status "offline" bei der Sektion dafür, dass die Seiten vom Skript nicht erzeugt werden.
  2. Die Seiten sind in einer Sektion ganz streng linear angeordnet und zugleich mit einer eindeutigen "ID" versehen. Daraus gewinnt das Skript seinen eigentlichen Mehrwert. Ansonsten wäre diese Markup nur ein weiteres Format zur Datenhaltgung von Web-Daten.

Wie diese Struktur von den Skripten genutzt wird, zeigte die Seite : Link-Mechanismen auf.

Dies würde in die Datei "drei.html" geschrieben. Die Markierung geschieht jeweils in der aktuell verarbeiteten Datei, wenn deren Dateiname mit dem verlinkten übereinstimmt. So wird es möglich, mittels CSS eine optische Orientierung über den "Aufenthaltsort" des Lesers zu geben.

Verlinkung einzelner Seiten oben

Allerdings werden die Seiten intern nicht anhand ihrer Dateien identifiziert. Diese sind ein variable Größe. Will man also auf einzelne Seiten verlinken, kann nicht manuell ein Link mit einer fest codierten Datei, in der Form <a href=""vier.html">Vierte Seite</a>, eingefügt werden.

Derartige Probleme werden mit einem System fester Bezeichner für die Seiten umgangen. Für jede Informationseinheit (Seite) wird ein Attribut "ID" vergeben, das die logische Einheit und den Inhalt eindeutig kennzeichnet. Über dieses kann die Seite verlinkt werden.
Im Quellcode formuliert werden derartige Referenzen mithilfe des XLink-Standards.

Die Strukturvorgeben für SiGHTs ermöglicht es, in den Fließtext, der in XHTML ausgezeichnet (annotiert) ist, weitere Elemente einzuführen, was sich vielfältig nutzen lässt (Siehe dazu die folgende Seite Informationsverarbeitung).
In diesem Zusammenhang interessiert im Markup vor allem das Element <sht:xlink/>. Der Namespace kennzeichnet es als zu SiGHTs gehörig.

Diese Element wird bei der Verarbeitung als ein dynamischer Link interpretiert: Es zeigt auf eine Seiten-ID, die bei der weiteren Verarbeitung in einen statischen umgewandelt wird.

		<sht:xlink xlink:href="#vier" />
	      

Das verarbeitende Skript sucht für die referenzierte Seite Dateinamen und Titel aus dem Meta-Daten und erzeugt daraus einen XHTML-Link: <a href="vier.html">Vierte Seite</a>. Da die ID über den Verarbeitungsprozess gleich bleibt, werden, der Generation der Navigationsleiste analog, Änderungen in der Position der Seite oder an deren Dateinamen und Titel dynamisch übernommen.

Aufbereitung der SiGHTs-Daten

Das Markup von SiGHTs beschreibt eine Struktur, die Inhalte in Kontainer-Elementen vorhält und zugleich strukturiert. Wie die Struktur bei der Verarbeitung genutzt wird, beschreiben die vorangegangenen Seiten. Was geschieht mit den Inhalten?

Die Skripte sollen auf der einen Seite Inhalten dynamisch Generieren und auf der anderen Seite für einheitliches Aussehen und Anordung der Webseiten sorgen. Dies war ihre ursprüngliche Aufgabe.
Dazu verwenden sie "Skin"-Dateien; dies sind im Prinzip normale XHTML-Dateien, die in XHTML Aufbau, Layout (und sehr begrenzt) die Formatierung einer Seite beschreiben.

In diese Seiten sind Schlüsselelemente eingebettet, die wie Platzhalter für die Inhalte der einzelnen Seiten fungieren. Die Skripte durchlaufen die Seiten - spezifisch: sie parsen sie - wobei sie von der Skin-Datei für jede im Quellcode vorgesehene Seite (durch das <seite>-Element) eine Kopie (eigentlich: eine Instanz) der Skin-Datei erzeugen. Diese Kopie wird in die konkrete Datei (wie Informationsverarbeitung aufgezeigt, etwa "vier.html") geschrieben.
Lediglich die Schlüsselelemente lösen ein spezielles Verhalten aus; an ihre Stelle werden dynamische Inhalte eingefügt. Hier eine beispielhafte Darstellung einer Skin-Datei.

	      <html>
	        <meta>
		<sht:dynamic contentkey="titel">
		. . . 
	      </meta>
	      <body>
	      . . .
	    

Hier wird offensichtlich in einer Skin-Datei ein Platzhalter für den Seitentitel definiert. Diesen erzeugt das Skript, wenn es eine beim Kopieren der Skin-Datei diese mit den Inhalten einer Seite "auffüllt", erneut aus den Meta-Daten der Seite und der übergeordneten Sektion.

In analoger Weise kopieren die Skripte die in der SiGHTs-Quelle vorgehaltenen Daten in die konkreten Dateien, die wiederum in der Quell-Datei angegeben sind. Dabei stellt eben die Verwendung der Skin-Dateien sicher, dass gleiche Inhalte immer an derselben Position auf der Seite erscheinen. Auch hier ergeben sich die Vorteile bei einer Umstellung: Verschiebt sich ein Platzhalter auf der Seite erscheinen bei allen Seiten, die dieselbe Skin-Datei verwenden, der durch den Platzhalter symbolisierte Inhalte an der neuen Position. Zudem ist man so in der Lage ein und denselben Inhalt mit wenig Aufwand optisch neu zu gestalten oder das Layout für zahlreiche Seiten schnell zu ändern. Jeder der einmal die Inhalte einer kompletten Web-Präsenz von Hand in ein neues Design überführt hat, weiß diese Vorteile zu schätzen.

Statische XML-Vorlagen oben

Ein weitere Erleichterung ergibt sich aus der Verwendung von XML und XSL-T: Komplexe und aufwändige XHTML-Strukturen werden aus "einfacherem" XML-Markup erzeugt. Gleichzeitig sollen externe Daten diesen möglichst gut entsprechend in der XML-Datenquelle repräsentiert werden. Hinter dieser generischen Repräsentation steht erneut die Idee, die Daten möglichst rasch und zugleich vielfältig grafisch aufzubereiten.

So ist im Schema das Element <sht:fotoliste> spezifiziert. Erreicht der Saxon-Prozessor beim Abarbeiten diese Element, stößt er im XSL-T-Skript für die statischen Inhalte auf ein passendes XSL-T Template für dieses Element. Darin erhält der Prozessor die Anweisung, eine dreispaltige Tabelle zu erzeugent. Das Element <sht:fotoliste> sieht als Unterelemente <sht:foto> vor, in dem auf Bilder referenziert wird. Darüber hinaus beschreibt dieses Element Aspekte des Bildes wie Größe und eine Beschreibung. Diese generische Struktur wird in eine XHTML-Struktur umgeformt, die die im Markup enthaltenen Daten verwendet.