Ein Blog mit Access, XML und XSLT

Haben Sie Office auf Ihrem Rechner? Dann haben Sie bestimmt auch Access. Nutzen Sie doch die Datenbank, um ein schickes Weblog zu schreiben: Mit Access erfassen Sie die Daten, den Rest erledigt ein XSLT-Stylesheet.

XML und XSLT zusammen sind ein eleganter Weg, Daten ins Web zu bringen. Sie erzeugen und pflegen eine XML-Datei und ein XSLT-Stylesheet kümmert sich um die Darstellung im Web.

Doch mit welchem Tool soll man die XML-Datei erzeugen und auf dem neuesten Stand halten? Viele XML-Editoren sind für das Erzeugen simpler XML-Dateien mit Textinhalt zu komplex. Auf der anderen Seite ist es kaum zumutbar, dass man XML-Files mit einer Textverarbeitung pflegt.

Bleibt als Mittelweg eine hübsche kleine Datenbank. Nehmen Sie dazu Access 2002, das auf vielen Office-Rechnern ein tristes Randdasein fristet. Für dieses Access erzeugen Sie eine Tabelle namens „Meldungen“. Diese Tabelle hat vier Felder: Überschrift, Datum, Text und URL. Falls Sie möchten, fügen Sie noch weitere Felder hinzu. Ein fünftes Feld erzeugt Access dann noch automatisch, den primären Schlüssel mit der Bezeichnung ID. Der bezeichnet jeden Datensatz unverwechselbar mit einer fortlaufenden Nummer.

Die Access-Datenbank müssen Sie natürlich nicht selbst anlegen. Sie können Sie in der rechten Spalte downloaden. Damit die Eingabe der Texte nicht zu umständlich wird, bekommt die Datenbank noch ein hübsches Formular spendiert. Dieses nimmt Datensatz für Datensatz die Meldungen auf.

Ganz unten im Formular finden Sie den Button „Export“ und rechts daneben ein Eingabefeld für einen Dateinamen. Wenn Sie die Daten nach XML exportieren möchten, tragen Sie einen Namen ein und klicken Sie auf Export. Achtung: Fehler werden nicht abgefangen, falls Sie keinen Dateinamen eingeben, erscheint also eine Access-Basic-Fehlermeldung.

Und noch ein Haken: Access 2003 blockiert per Default die VBA-Funktion zum Exportieren nach XML. In diesem Fall verwenden Sie Datei – Exportieren und wählen XML als Dateityp Hinter dem „Export“-Button steckt eine einfache VBA-Methode, die den Inhalt der Abfrage „NeueMeldungen“ in einer XML-Datei speichert. Die sieht so aus:

Application.ExportXML ObjectType:=acExportTable, DataSource:="NeueMeldungen", DataTarget:=Forms![MiniBlog]![targetFile]

 

Die zusätzliche Abfrage sortiert die gespeicherten Meldungen abwärts nach Uhrzeit und Datum – es erscheinen also immer die neuesten Meldungen an erster Stelle.

Mit Forms![MiniBlog]![targetFile] holt sich Access im Feld neben Export eingetragenen Dateinamen. Wenn Sie in VBA fit sind, können Sie an dieser Stelle zum Beispiel auch den Namen des aktuellen Monats erzeugen lassen und für den Dateinamen verwenden.

Das Stylsheet

Die aus der Datenbank erzeugten Daten stellen XSLT vor einige Herausforderungen. Während die Titelzeile noch simpel zu verarbeiten ist, wird’s beim Text der Meldung schon kniffliger. Denn hier sollen die Zeilenumbrüche in HTML hinüber gerettet werden. Und das geht nur, wenn man die Zeilenumbrüche mit einem hübschen <br/> ersetzt.

Hierfür ist ein rekursiv eingesetztes Template notwendig. Zunächst wird der in body gespeicherte Text einer Variablen namens string zugewiesen. Mit dieser Variablen als Parameter ruft das Stylesheet dann das Template ersetzen auf. Im Quelltext sieht das so aus:

<xsl:template match="body">

<xsl:call-template name=“ersetzen“>

<xsl:with-param name=“string“ select=“.“/>

</xsl:call-template>

</xsl:template>

 

Mit with-param weisen Sie der Variablen string den Wert des aktuellen Elements zu, also von body. Das Template ersetzen untersucht nun den Parameter string auf das Vorkommen eines Zeilenumbruchs. Beachten Sie, dass $string hierbei mit vorangestelltem Dollarzeichen geschrieben wird:

<xsl:template name="ersetzen">

<xsl:param name=“string“/>

<xsl:choose>

<xsl:when test=“contains($string,‘

‚)“>

<xsl:value-of select=“substring-before($string,‘

‚)“/>

<br/>

<xsl:call-template name=“ersetzen“>

<xsl:with-param name=“string“ select=“substring-after($string,‘

‚)“/>

</xsl:call-template>

</xsl:when>

<xsl:otherwise>

<xsl:value-of select=“$string“/>

</xsl:otherwise>

</xsl:choose>

</xsl:template>

 

Die Zweile <xsl:when test=“contains($string,‘

‚)“> prüft, ob die Zeichenkette $string einen Zeilenumbruch enthält. Ist dies der Fall, wird mit substring-before($string,‘

‚) der Inhalt dieser Zeichenkette bis zur Fundstelle ausgegeben. Danach setzt das Stylesheet einen Zeilenumbruch mit <br/>. Damit auch weitere Zeilenumbrüche erkannt und verarbeitet werden, muss das Template sich mit dem Rest der Zeichenkette selbst aufrufen. Diesen Rest ermittelt substring-after($string,‘

‚). Das Template ruft sich so oft selbst auf, bis kein Zeilenumbruch mehr gefunden wird. Dann gibt es nur noch den Rest des Strings aus und ist fertig mit seiner Arbeit.




Datumsausgabe

Die nächste Herausforderung an das Stylesheet ist das Aufarbeiten des Datums. Die Access-Tabelle schreibt nach jeder Änderung in Überschrift oder Text automatisch einen neuen Timestamp in ein Feld. In der XML-Datei sieht der zum Beispiel so aus:

<datum>2003-11-12T19:35:34</datum>

 

(Das T stammt von Access.) Uns interessiert hier nur das Datum. Damit dies dem hiesigen Standard entspricht, muss es so aussehen: 12.11.2003.

Am besten geht das mit einer Substring-Funktion. Die holt den gewünschten Teil aus der Timestamp und zeigt ihn an:

<xsl:template match="datum">

<xsl:variable name=“date“ select=“.“/>

<xsl:value-of select=“substring($date, 9, 2)“/>

<xsl:text>.</xsl:text>

<xsl:value-of select=“substring($date, 6, 2)“/>

<xsl:text>.</xsl:text>

<xsl:value-of select=“substring($date, 1, 4)“/>

</xsl:template>

 

Zunächst wird der Wert des aktuellen Elements an die Variable date übergeben. Aus dieser Variablen holt substring($date, 9, 2) dann zum Beispiel die zwei Zeichen heraus, die ab der neunten Stelle beginnen, also die 1 und die 2. Nachdem das Datum des Tages angezeigt ist, schreibt das Stylesheet mit <xsl:text>.</xsl:text> einen Punkt. Danach geht es weiter mit den anderen Substrings aus dem Datum, bis der korrekte Eintrag da steht.

Die URL darstellen

Jeder Eintrag darf in diesem Log neben Überschrift, Text und Datum noch eine URL enthalten. Im Stylesheet wird diese angezeigt und gleich mit dem korrekten Link hinterlegt. Beachten Sie, dass Sie die URL dazu korrekt inklusive http:// in Access eingeben müssen.

<xsl:template match="url">

<a class=“meldungURLLink“>

<xsl:attribute name=“href“>

<xsl:value-of select=“.“/>

</xsl:attribute>

<xsl:value-of select=“.“ />

</a>

</xsl:template>

 

Das Template schreibt zunächst ein <a>-Tag mit einer Klassenangabe. Dazu später mehr. Danach setzt es mit

<xsl:attribute name="href">

 

ein Attribut und weist ihm den Wert des aktuellen Elements zu. Der Stylesheet-Prozessor macht daraus später ein korrektes <a href=“xxx“>.

Der ganze Rest

Das <xsl:attribute> sehen Sie im Quelltext noch an anderer Stelle. Denn damit das Blog hübsch aussieht, ist es in drei Tabellen gepackt. Die oberste Tabelle sorgt lediglich für einen Balken mit einer Überschrift, darunter folgt eine Tabelle mit den Inhalten und ganz unten nochmals ein Balken. Damit alle drei Tabellen die gleiche Breite haben, legt ganz am Anfang

<xsl:variable name=“tableWidth“ select=“600″/>

die Tabellenbreite fest. Auf die Variable tableWidth wiederum greifen an passender Stelle wieder <xsl:attribute> zu.

Die Formatierung des Blogs ist über ein Cascading Stylesheet geregelt. Bis auf die Tabellenbreite können Sie alle Darstellungsinformationen im Stylesheet einstellen. Besonders interessant sind padding-top und die anderen padding-Varianten, die für Abstand zwischen den Rändern einer Tabellenzelle und deren Inhalt sorgen.

Der Prozessor

Um die Daten für das Netz aufzubereiten, verwenden Sie Saxon. Diesen XSL-Prozessor laden Sie unter saxon.sourceforge.net herunter. Verwenden Sie die Vollversion, denn Instant Saxon funktioniert nur, wenn die Microsoft Virtual Machine installiert ist. Und die gibt es bei Microsoft nicht mehr. Verwenden Sie statt dessen die Java-Umgebung von Sun.

Um eine Datei von XML nach HTML zu verwandeln, geben Sie auf der Kommandozeile diesen Befehl ein:

java -jar saxon.jar meinblog.xml meinblog.xsl >meinblog.html

 

Nach der Umwandlung können Sie das neue Blog auf Ihren Server laden.

So geht es weiter

Mit der Access-Datenbank und dem Stylesheet ist die Grundlage für eine hübsche Blog-Seite gelegt. Es gibt aber noch eine Menge auszubauen. Wer mag, macht den Access-Teil noch sicherer, indem er Fehler bei der Eingabe des Dateinamens abfängt. Oder Sie wagen sich an die Datenbank selbst, binden noch weitere Informationsfelder ein und sorgen dafür, dass Abfragen jeweils die Einträge eines Monats aus der Datenbank holen und automatisch speichern. Natürlich dürfen Sie auch das Umwandeln und den FTP-Upload auch mit einer Batch-Datei erledigen. Viel Spaß mit dem Miniblog.

 

Ähnliche Beiträge