In a post from quite a while back, I talk about eXtensible State Machines, a way to reduce a web application to an XML document. The original implementation was a stand-alone web application environment/framework written in Perl. The web has evolved since that initial work. We now have web 2.0, Ruby on Rails, and content management systems that are easy to extend (e.g., Radiant).
Image via Wikipedia
My current work involves creating a series of extensions to Radiant to implement such things as TEI to HTML transformations. I’m also using the state machine concept to define modules in the Writing and Learning Communities software so a course developer can create new assignment modules for students without having to know Ruby or have access to the server.
Fabulator will be the next version of the “document as application” system. This will be an extension to Radiant that defines a new “Fabulator” page type. Radiant gives us a way to manage everything in the application as a single, compact document.
The body of the page remains a simple text document that can be used to provide a description of the application. A separate page part is used to define the state machine, and each state in the state machine has its view in a page part with the same name as the state.
The Fabulator page type will define a number of tags that can be used in the views (page parts) to create forms and pull in data. I’m still debating what data sources to support out-of-the-box, though I’m sure I’ll add the ability to read from RSS and RDF sources. I will probably create an admin extension to manage data sources that are part of the Radiant site installation, or at least data repositories that can be written to by the Fabulator pages.
I also need a way to upload XSLT files that can be used as macros for the Fabulator pages. I’m not sure yet how I want to present them to the application author: either as a list of check boxes that they can select (e.g., stating that the application is a wizard that consists of a series of views that culminate in some action with the collected data), or as a help box with the XML snippets to add to pull in the XSLT (less friendly, but probably easier).
I don’t have code up as of when I wrote this entry, but when I do, it will be available at http:github.com/jgsmith/radiant-fabulator/.
Leave a comment