Benjamin Johnston (im Bild seine Heimatstadt Brisbane) ist der Australier, der den schon früher erwähnten Ausspruch tat:
Prolog is the coolest language I know. If it were legal to marry programming languages, I would marry Prolog. 🙂
Er ist auch der, auf dessen Prolog Server Pages (PSP) hier vor allem Bezug genommen wird. Prolog, in der Tat eine wunderschöne Programmiersprache, hat in Bezug auf das Web die Ungnade der frühen Geburt, will heißen: Obwohl es von der Konzeption her wunderbar für die Handhabung der dem Web innewohnenden Strukturen geeignet ist, ist es nicht so für die praktische Einbettung ins Web entworfen worden wie z.B. PHP oder Javascript. Zwar gibt es durchaus auch für Prolog Bibliotheken zur Webhandhabung, z.B. DisLog (Seipel) oder Pillow (Diaz), aber das sind eben vollwertige Programmierumgebungen, die nicht so geeignet sind, wenn in vorwiegend textliche Webseiten gelegentlich programmgenerierte Elemente eingebettet werden sollen. Dafür gibt es z.B. in PHP oder Java Server Pages. Aber auch in Prolog finden sich dafür Ansätze, die ihre Bekanntmachung und vielleicht auch Weiterentwicklung verdienen.
Der erste mir bekannte Ansatz entstammt einem Papier von Suciu, Pusztai und Vancea, aus dem aber nicht alle Details der Implementierung klar werden. Das ist dann aber bei Benjamin Johnstons Ansatz der Fall, der seine frei verfügbaren Prolog Server Pages auf der Basis von SWI-Prolog realisiert. Darüber hinaus gibt er auch einen knappen, aber guten Überblick über verwandte Bemühungen. Er erwähnt dabei Minerva (Bartenstein), General Server Pages (Devaux), den SWI-HTTP-Server (Wielemaker), die Beziehung zu CGI-Scripting, ein JavascriptProlog mit anderen Zielsetzungen, aber interessant, und schließlich die PSPs von diNuzzo, der eine eigene, ziemlich ähnliche Version erstellt hat und auch ein Portal dafür, das aber scheinbar nicht mehr erreichbar ist.
In Server Pages spielen Templates (Schablonen) eine wesentliche Rolle. Sie stellen Konventionen dar, wie programmgenerierte Elemente quasi als Variablen in WebTexte eingebettet werden. Die Funktionalität von Templates reicht von der puren Einbettung von Variablen in (Hyper)Textseiten bis zu ganzen Benutzeroberflächen. Ihre optimale Ausgestaltung ist natürlich ein eigenes Thema. Ich will nur einen Punkt erwähnen: viele gängige Templatesprachen (und auch die entsprechenden Server Pages) verstoßen gegen die Regeln von HTML/XML-Editoren, und entsprechende Dokumente werden dementsprechend nicht als wohlgeformt anerkannt. Diese Schwierigkeiten werden vermieden, wenn die entsprechenden Kennzeichnungen in Attribute verlagert werden. Das ist das Konzept der Template Attribute Language (TAL), die ursprünglich für Zope/Python entwickelt wurde, inzwischen aber für eine Reihe von Websprachen existiert. Interessant ist, dass O‘Keefe einen entsprechenden Vorschlag auch für Prolog gemacht hat. Sein Proof-of-Concept ist hier herunterladbar.