Asmo reads in an XML document and using XML namespaces chooses from tag libraries to process sections of the XML document. Every taglib implements a SAX2-like inteface and can output to a SAX2-like interface.
Asmo is recursive in nature and any XML output by a taglib is processed by Asmo and may be passed to another taglib. The advantage of this is that taglibs can sort of 'call' other taglibs like functions. Since all communication between taglibs is done via XML, taglibs can be written in any language.
Take a look at this example to see how Asmo works.