This might be the occasion to remark that a zeroth-order description of Architectural Forms is that they were a transformation of a document, specified within one or other DTD rather than in a separate transformation language.
Indeed. And the advantage to that is that they are written declaratively. Writing transformations in Java (or whatever) carries all the perils of imperative code. Using XSLT or another functional language eases them quite a lot. But saying "I have this, I want that, you figure it out!", with occasional helpful annotations, is IMO best of all.
My transformation engine could easily be written in XSLT. If I ever get back to the project, I'll surely use a functional language to write it in.