By Adam Chlipala
I want my academic web site to have all of the following:
All of these outputs are based on what you can think of as a single relational database. I wanted to be able to keep these documents up-to-date without having to make more changes than necessary. Here are a few potential problems that I wanted to avoid, and that you probably want to avoid if you're in the same situation:
I'd been hearing about (and trash talking!) XML for a while, so I thought this would be a good opportunity to come to know the enemy better. With some help from W3Schools, I learned about XSLT, an XML-based declarative language for transforming XML documents.
Using XSLT, I created a small system to do what I've described. It uses entirely what I'd call domain-specific declarative languages, namely XSLT and a tiny Makefile. It's not much to look at, and I haven't spent overly much effort factorizing it for generality for other people, but I figure someone else might like to use it as a base. Here's the quick tour.
All of the actual "data" lives in a single XML file. A number of XSLT stylesheets control building the different documents:
Finally, a small Makefile controls the build process. You can find the complete set of files here.
I still don't think XML is a particularly good common data format; I think values for an ML-style (as in Standard ML and OCaml) type system are superior. If someone in the know disagrees, I'd love to hear how I'm deceived.
However, there sure are a lot of useful tools available today for XML. I think it would be worthwhile to try to duplicate them in some sort of type theoretical setting. (Maybe someone already has, but at least I now know more about the XML hub-bub.)