node.js + XSLT 2.0
Mein typisches Vorgehen bei der technischen Evaluation bei einem Projekt läuft in etwa immer gleich. Können wir XSLT einsetzen: Ja? Ok! | Nein? Glaub ich nicht! In den meisten Fällen bedeutet das jedoch, dass entweder nur libxslt und damit XSLT-Version 1 zum Einsatz kommt oder über einen System-Call Java mit Saxon gestartet werden muss. XSLT 1 ist allerdings sehr beschränkt da die Unterstützung für Gruppierungen und Sequenzen nicht gegeben ist. Und der Umweg über Java/Saxon scheidet wg. der dafür anfallenden Zeitkosten in den meisten Fällen aus.
XSLT 2.0 ist seit 2007 definiert und nach wie vor gibt es keinen Prozessor, der es vollständig unterstützt. Mit Ausnahme von Saxon gibt es eigentlich gar keinen Prozessor der es irgendwie unterstützt. Und Saxon gibt es nur für Java und .Net. Eine Implementierung durch libxslt scheint gescheitert und wird offensichtlich nicht weiter betrieben. Und damit steht es für alle hippen Techniken wie Ruby oder Node nicht zur Verfügung.
Robbert Broersma hat sich nun zum Ziel gesetzt XSLT 2 für node.js umzusetzen. Unter XSLT2.org kann man sich für einen Betatest anmelden. Denn derzeit hat er den Code noch nicht zur Verfügung gestellt. Laut eigener Aussage soll dies im Laufe des Jahres geschehen. Da die Implementierung nicht auf node.js beschränkt ist sondern auch in den Browsern arbeiten soll dürfte es sich um eines der spannendsten Projekte aktuell handeln.
Als ein spannendes Anwendungsgebiet kann man sich zum Beispiel die Chartgenerierung oder Sprites vorstellen. Während ein node-Prozess sich um die Transformation aus Templates zu HTML beschäftigt wird aus den XSLTs ein weiterer node-Service aufgerufen der zum Beispiel dynamische Images aus einer Datenbankabfrage generiert und diese für den direkt folgenden Aufruf durch den Browser cached. Da bei einem solchen Setup sowohl zum Beispiel canvas und Flot zum Einsatz kommen kann, könnte der Server in Abhängigkeit von den Fähigkeiten oder der Geschwindigkeit des Browsers die Arbeit an den Browser übergeben oder sie selbst durchführen.