During our bicycle world travel we had to update our website under Spartan conditions. The website maintenance was just a means to an end and we strove to shorten the time exposure. The major time consuming task was the comprehending of the HTML code interweaved with SSI like comments dispatching the dynamic functions. We needed a different, more sophisticated technology which would speed up the work on the website.
We noticed that the integration of dynamic content in website often causes charge conflicts between the designer and programmer. Such conflicts are well known in bigger web design teams. The more people work on a project together, the more often problems occur due to mixture of HTML and program code. It can become visible e.g. when php or asp error messages appear on a website. They are sometimes caused by the designer who unintentionally corrupted the program code.
We have been looking for a possible improvements of SSI that would allow the flexibility of php while maintaining the familiar HTML syntax. The goal was to make the designer basically independent from the programmer while maintaining the design and content of existing websites.
To exclude program code from the HTML documents, the set of HTML tags would need to be extended and customized according to the requirements of a project. Such strategy would keep the familiar HTML syntax intact and do not change the readability of the HTML document for the designer. With that idea the basic concept of UHTML was born.
The first simplistic approach is to scan the code and replace all user tags with appropriate content. But such individual project bound text scanner is no answer for the implementation of UHTML as it makes the later resumption of a project and the reusing of code difficult. Reuse and simple maintenance have been indisputable design requirements of UHTML.
Those requirements imply a library implementing a universal programming interface. Such library has to parse the UHTML file into a hierarchical data structure in which each UHTML tag is represented by a data node and provide functions to attach program code to each node. Furthermore it has to provides functions to manipulate attributes including variables (functions) available for the designer within the attribute values.
This guidelines and the nature of the problem lead to the first implementation of UHTML in perl. This first implementation turned out to be efficient enough to be used in production. With minor improvements it is the actual implementation of UHTML in perl found on the Download page.