Vorlagenprozessor

Jan Burse, erstellt 24. Okt 2011 Während Robinson Crusoe sah dass ihm seine Tinte ausgeht, hätte er ein Blatt seines Tagebuchs nehmen können, einen Meldung fabrizieren können, sie in eine Flasche bringen und dem Meer übergeben können. Unser Verkaufssystem würde nicht mit dieser Form der Kommunikation funktionieren. Nicht nur wäre der Liefermechanismus unzuverlässig und viel zu langsam. Auch eine hingeschmierter Hilferuf ist wahrscheinlich nicht was wir über unser Verkaufssystem kommunizieren möchten. Das Verkaufssystem sollte fähig sein automatisch Briefe zu erstellen die sich am jeweiligen Kunden orientieren und Teil einer Geschäftskommunikation bilden. Die automatischen Briefe werden durch einen Vorlagenprozessor angetrieben. Die Anforderungen an den Vorlagenprozessor sind vielfältig. Da die Kunden individuell ihre Kommunikationssprache wählen können, ist die Internationalisierung ein wichtiger Aspekt. Weiter sollte der Vorlagenprozessor fähig sein Briefe zu generieren die von einfachen Klartextnachrichten bis hin zu grösseren HTML basierten Multimediaflugblättern reichen. Schliesslich möchten wir einen schnellen Entwicklungsprozess. Unsere Anforderungen an den Vorlagenprozessor schliessen die in der Anwendung verwendete Haupttechnologie schnell aus. Ein Problem von JSP dynamisch generierten Java Klassen besteht darin, dass diese den permanenten Speicherbereich verstopfen. Unser massgeschneiderter Vorlagenprozessor unterstützt zwei Anwendungsfälle. Der erste Anwendungsfall beinhaltet Vorschau und Validierung der Vorlage. Für diesen Anwendungsfall benötigt der Vorlagenprozessor nur die Vorlage und das Datenschema als Eingabe. Die Ausgabe besteht in einer Vorschau der Vorlage und einer Liste der Fehler. Der zweite Anwendungsfall beinhaltet die Generierung der Textausgabe. Diesmal besteht die Eingabe neben der Vorlage aus den aktuellen Daten und nicht nur dem Datenschema. Die Ausgabe besteht aus dem Klartext bzw. dem HTML Markup des Briefes. Zur Sicherheit kann sogar eine validierte Vorlage während der Anwendung eine Ausnahme produzieren falls die aktuellen Daten unvollständig sind. Wir können den massgeschneiderten Vorlagenprozessor mit der erweiterbaren Formatvorlagensprache für Transformation (XSLT) vergleichen. Was die aktuellen Daten betrifft so verenden wir kein XML Objekt. Stattdessen verwenden wir die Matula Datenbankschicht zusammen mit der Entitäten-JSON Kodierung für komplexe Datentypen und Subtypen wie in einem vorhergehenden Tagebucheintrag beschrieben. Der Vorlagenprozessor lädt einen erster Stapel der Daten vor der Verarbeitung der Vorlage. Während der Verarbeitung der Vorlage, falls Referenzobjekte auftreten, können weitere Stapel von Daten durch den Vorlagenprozessor geladen werden. Die Daten können aus verschiedenen Quellen stammen sodass eine Integration stattfindet. Die Vorlage selber wir durch ein XML Objekt repräsentiert. Eine Vorlage definiert dann eine Mischung aus rohem Ausgabetext und Kontrollstrukturen. Der Text wird produziert indem der rohe Ausgabetext sequentiell mit der Ausführung der Kontrollstrukturen kombiniert wird. Unter den Kontrollstrukturen finden wir Schleifen und Verzweigungen. Eine Vorlage kann sich auf Untervorlagen beziehen, diese werden in der Vorlagendatenbank aufgrund passender Bedingungen nachgeschlagen. Im Gegensatz zu XSLT basieren die Schleifen, Verzweigungen und Bedingungen aktuell nicht auf XPath Ausdrücken. Da die Entitäten JSON Kodierung von Vector und Hashtable abstammt basieren unsere Ausdrücke auf Arrayelement- und Feldzugriffen. Resultate aus Entitäten JSON Ausdrücken können sogar in Vorlagenblockvariablen gespeichert werden. Der Vorlagenprozessor dient uns schon sehr gut im bestehenden Verkaufssystem. Es gibt einige Punkte auf unserer Wunschliste. Der Befund dass ein erweitertes Schema der Verwaltung der strukturierten Daten zugutekommen könnte überträgt sich auch auf den Vorlagenprozessor. Die Vorschauvalidierung verwendet ein schwaches Typensystem, Subtypen werden durch Vereinigungstypen modelliert. Durch ein erweitertes Schema und ein strengeres Typensystem würden mehr Fehler in einem frühen Stadium gefunden. Zufälligerweise verleiht uns der Vorlagenprozessor einen zusätzlichen Nutzen. Indem wir Bedingungen zur Filterung und Ausdrücke zur Auswahl einsetzen können wir Vorlagen auch als Anfragesprache an unsere Kundenbasis verwenden.

Kommentare