I have recently written a small Java web app called Retailer, which is a
platform for server-side XSLT-based web apps. It's a bit experimental and
I'd appreciate comment and especially feedback from people who want to try
Then to run on top of the platform I have written (so far) a couple of
applications which expose the national digitised newspaper collections of
Australia and New Zealand (Trove and Papers Past, respectively).
So Retailer is of interest if you want to harvest bulk historical newspaper
articles from Austalia and NZ, but I think it may be more generally of
interest to librarians as a way to host small web applications they have
written in pure XSLT, because I know lots of librarians do have XSLT
I see it as a tool for hosting small protocol-converters, query-handlers,
and formatters on the web.
For example it could be used to implement Atom feeds or OAI-PMH
repositories on top of some back-end web API; perform HTTP content
negotiation over a SPARQL store; as a front-end proxy adding metadata
crosswalks to back-end OAI-PMH servers; exposing XML back ends as JSON, or
CSV; that kind of thing.
The Retailer platform is not at all complicated (it's not Cocoon!). I've
deliberately designed the platform as something very light-weight that
defers as much as possible to an XSLT script. The XSLT defines the full
application, not just a metadata crosswalk or a presentation layer. It is
responsible for parsing the HTTP request, performing any application logic,
and formatting the results. The only way to call back-end services is via
HTTP using the XPath document() function. So it's not for running big
complicated apps, I would say, but for simple apps that are mainly protocol
converters in front of one or more "Web APIs", XSLT can be quite concise.
How it works is it just creates an XML document from each HTTP request it
receives (i.e. the request URI, HTTP headers, etc.), passes the XML to your
XSLT, and returns the XSLT's output to the HTTP client. e.g. here is
Retailer running an "identity" stylesheet:
Feel free to play around with the URL; anything beginning with
http://conaltuohy.com/identity/ will be handled by the same stylesheet.
(stylesheet = <
I've written a couple of blog posts about Retailer and about the two
I hope people will find interesting and useful, and I'd be delighted to
hear any feedback on it.