Das VIO.Matrix Pipeline-Modell ermöglicht es, aus beliebigen Datenquellen ein definiertes Ausgabeformat zu erzeugen. Inhalte einer Webseite können über eine entsprechend konfigurierte Pipeline unkompliziert in ein PDF umgewandelt werden. Jede VIO.Matrix-basierende Webseite verwendet auch mindestens 2 Pipelines: eine für die Ausgabe von CSS- und eine für die Ausgabe von HTML-Codes.
Ein Expertentutorial zeigt bereits die Grundlagen für die Implementierung einer Pipeline. Doch daneben gibt es auch noch viele Tipps die man für die Verwendung geben kann.
Eine Pipeline besteht aus 3 Hauptfunktionen:
Beispiel 1:
Ein HTML-Code aus einem Layout des VIO.Matrix Administrators soll ausgegeben werden. Der Generator nimmt den eingegegebenen Code und gibt ihn an den Transformator weiter. Dieser schaut auf Grundlage seiner Konfiguration nach, was er mit dem Code machen soll und passt ihn ggfs. an. Der Serialisierer ergänzt jetzt noch den in HTML zwingend erforderlichen Doctype und legt die Dateiendung für die so erzeugte Datei fest (.html meist).
Beispiel 2:
Ein XML-Code soll ausgegeben werden. Wieder gibt der Generator den Code an den Transformator, welcher wieder schaut was er damit machen soll. Das Ergebnis geht an den Serialisierer, welcher nun die Dateiendung (z.B. .xml oder .rss) festlegt und ggfs. auch einen XML-Prolog einfügt.
Beispiel 3:
Ein PDF soll erzeugt werden. Im VIO.Matrix Administrator wird dazu der nötige XSL-Code hinterlegt. Dieser wird wieder vom Generator an den Transformator gegeben, angepasst, und weiter an den Serialisierer gereicht. Der Serialisierer ruft nun ein externes Tool, z.B. Apache FOP, auf und gibt diesem den erzeugten Code. Das externe Programm erzeugt eine PDF-Datei die daraufhin vom Serialisierer an den eigentlichen Verursacher des Aufrufs zurückgegeben werden kann.
<?xml version="1.0" encoding="iso-8859" ?>
<map:components>
<map:generators default="file">
<map:generator label="contentcreator" name="file" src="org.viosys.viomatrix.generation.FileGenerator" />
</map:generators>
<map:transformers>
<map:transformer label="html-codeoptimizer" name="html-codeoptimizer" src="org.viosys.viomatrix.transformation.CodeOptimizerTransformer">
<remove-emptylines>true</remove-emptylines>
<remove-emptyspaces>true</remove-emptyspaces>
</map:transformer>
</map:transformers>
<map:serializers default="html">
<map:serializer label="HTML 4.01 Transitional" name="html" src="org.viosys.viomatrix.serialization.HTMLSerializer">
<http-header name="Content-Type">text/html</http-header>
<doctype-public>-//W3C//DTD HTML 4.01 Transitional//EN</doctype-public>
<doctype-system>http://www.w3.org/TR/html4/loose.dtd</doctype-system>
<doctype-file-extension>html</doctype-file-extension>
</map:serializer>
</map:serializers>
</map:components>
Das ist die einfachste Pipeline-Konfiguration die von einem VIO.Matrix-Projekt zur Ausgabe einer HTML 4.01-Datei genutzt werden kann. Sie baut, wie man sieht, auf XML-Code auf, dessen einzelne Abschnitte genau definiert sind. Zuerst sieht man die verfügbaren Generatoren (<map:generators default="file">), dann die Transformatoren (<map:transformers>) und zuletzt die Serialisierer (<map:serializers default="html">).
Wenn man in diesem XML-Code der Pipeline-Konfiguration auch nur ein Zeichen falsch schreibt, welches die XML-Struktur zerstört, so erhält man dann nicht das eigentliche Wunschformat ausgegeben. VIO.Matrix reagiert in dem Fall so flexibel und gibt ein HTML-Dokument aus, ohne Doctype jedoch. Man merkt daher sofort, wenn man ein Layout im VIO.Matrix Administrator hinterlegt hat, welchem keine Pipeline zugeordnet ist.
Der Generator
org.viosys.viomatrix.generation.FileGenerator
entspricht der Funktion im VIO.Matrix CMS, welche den Inhalt eines Layouts im VIO.Matrix Administrator ausgibt.
Der Transformator
org.viosys.viomatrix.transformation.CodeOptimizerTransformer
stellt mehrere Funktionen zur Bearbeitung des Quellcodes zur Verfügung. Das sind z.B.:
Funkion | Beschreibung |
---|---|
<remove-emptylines>true</remove-emptylines> | Entfernt leere Zeilen aus dem Quellcode. Dadurch wird dieser schlanker da einzelne, nicht für das menschliche Auge sichtbare Zeichen (Zeilenumbruch) aus dem Code entfernt werden. |
<remove-emptyspaces>true</remove-emptyspaces> | Entfernt Leerzeichen am Anfang einer Zeile im Quellcode. Dadurch werden pro Zeichen einige Byte eingespart, was den Quellcode wiederum schlanker macht. |
<remove-exception type="ignore" command="remove-emptylines" element="textarea" /> | Definiert eine Ausnahme für das Entfernen von Leerzeichen am Anfang einer Zeile, nämlich wenn diese innerhalb eines textarea-Elements stehen. |
<remove-exception type="ignore" command="remove-emptyspaces" element="textarea" /> | Das Gleiche nochmal, nur in Bezug auf Leerzeichen. |
Die letzten beiden Funktionen können auch auf alle anderen Elemente im Quellcode angewendet werden. Zu empfehlen ist das bei Formulareingabefeldern, genauer gesagt: option, input und textarea.
Die einfachsten Serialisierer sind die, die auch am meisten verwendet werden:
org.viosys.viomatrix.serialization.HTMLSerializer
Der kann den auszugebenden Quellcode optimal für Browser anpassen. Daneben gibt es auch noch den
org.viosys.viomatrix.serialization.ExternalSerializer
welcher ein externes Tool aufruft und diesem die erzeugten Codes übergeben kann um etwas bestimmtes zu erzeugen (z.B. ein PDF).
<map:serializer label="XHTML 1.0 Transitional" name="xhtml" src="org.viosys.viomatrix.serialization.HTMLSerializer">
<http-header name="Content-Type">text/html</http-header>
<http-header name="Content-Encoding">gzip</http-header>
<doctype-public>-//W3C//DTD XHTML 1.0 Transitional//EN</doctype-public>
<doctype-system>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</doctype-system>
<doctype-file-extension>html</doctype-file-extension>
</map:serializer>
<map:serializer label="CSS 2.0" name="css" src="org.viosys.viomatrix.serialization.HTMLSerializer">
<http-header name="Content-Type">text/css</http-header>
<doctype-file-extension>css</doctype-file-extension>
<sitemap>no</sitemap>
</map:serializer>
<map:serializer label="php" name="php" src="org.viosys.viomatrix.serialization.HTMLSerializer">
<http-header name="Content-Type">text/plain</http-header>
<doctype-file-extension>php</doctype-file-extension>
<sitemap>no</sitemap>
</map:serializer>
<map:serializer label="PDF" name="pdf" src="org.viosys.viomatrix.serialization.ExternalSerializer">
<http-header name="Content-Type">application/octet-stream</http-header>
<http-header name="Accept-Ranges">bytes</http-header>
<http-header name="Content-Disposition">attachment; filename=viomatrix.pdf</http-header>
<command os="linux">fop.sh {$1} {$2} > fop.err</command>
<command os="win32">fop.bat {$1} {$2} > fop.err</command>
<doctype-file-extension>pdf</doctype-file-extension>
</map:serializer>
Die Pipeline dient nicht dazu Fehler des Programmierers oder Fehler im Quellcode zu beseitigen. Sie unterstützt die Entwicklung einer Webseite nur dadurch, dass sie eine Eingabe-Ausgabe-Umwandlung bereitstellt die einen Programmierer ansonsten längere Zeit beschäftigen würde.
Dank der Pipeline könnte man auch Systemdateien generieren. VIO.Matrix ist dadurch z.B. in der Lage theoretisch auch einen Server selbstständig zu verwalten (ersetzt natürlich keinen Administrator, aber vereinfacht ggfs. die Arbeit). D.h. man könnte Serverkonfigurationen bearbeiten und speichern, .htaccess-Dateien erzeugen, Scripte für die automatische Generierung von HTML-Dateien erzeugen oder auch neue Domains über eine von einem Domainregistrar bereitgestellte Schnittstelle erzeugen.
VIO.Matrix eröffnet mit dem Pipelining-Modell weit mehr Möglichkeiten für Webseiten als man selbst für die eigene Webseite eigentlich benötigt.