aXSL: Modules

Summary of Modules

The following table lists the aXSL modules and the dependencies between them. The aXSL jar is small enough that there is no great benefit to building only the module that are needed. (In other words, it is recommended that the entire aXSL jar file be installed by client applications, even if only some of it is used). However, when considering whether to use any part of aXSL, it is important to understand the scope of that commitment. For example, when using the axslPDF module to create PDFs, you have a built-in dependency on the axslFont and axslGraphic packages as well.

aXSL is a work in progress, and some modules are more stable and mature than others. The meanings of the items in the "Maturity" column below are as follows:

Module Name Repository module Description Dependencies XSL-FO Specific? Maturity
Universal components (available globally)
SVG library lib Pre-compiled jar for SVG. None. No. Stable.
axslCommon axsl-common Common interfaces and enumerations useful in document processing. None. No (although enumerations are based on XSL-FO). Experimental.
Standalone Modules
axslPs axsl-ps Interfaces for handling encoding issues. None. No. Partial.
axslFont axsl-font Interfaces for handling fonts. axslCommon, axslPs. Current repository code and releases after 0.2 no longer have a dependency on axslCommon. No. Partial.
axslGraphic axsl-graphic Interfaces for handling graphics, both bitmapped images and vector drawings. SVG library, axslPs, axslFont. No. Experimental.
axslHyphen axsl-hyphen Interfaces for hyphenation words. axslCommon. No. Experimental.
axslSpeech axsl-speech Interfaces for handling the integration of documents with speech systems. None. No. Experimental.
axslLinebreak axsl-linebreak Interfaces for line-breaking. axslCommon, axslFont No. Experimental.
axslPdf axsl-pdf Interfaces for creating PDF files. SVG Library, axslFont, axslGraphic. No. Experimental.
Document Processing Modules
axslFoTree axsl-fo Interfaces for making XSL-FO content available. SVG Library, axslCommon, axslFont, axslGraphic, axslText. Yes. Experimental.
axslGalley axsl-galley Interfaces useful for making laid-out pages available to renderers. SVG Library, axslCommon, axslFont, axslGraphic. No. Experimental.
axslAreaTree axsl-area Interfaces useful for creating an Area Tree. axslCommon, axslFont, axslGraphic, axslText, axslFoTree, axslGalley. Yes. Experimental.
axslLayout axsl-layout Interface useful for converting an FoTree to an AreaTree. axslAreaTree. No. Experimental.
axslOutput axsl-output Interfaces useful for converting an axslFoTree directly to an output format that handles layout itself (like RTF or MIF), or rendering an axslGalley to a more fixed output medium (like PDF or PostScript). axslFont, axslGalley. No. Experimental.

Area Tree Issues

You may have noticed that the concept of a "laid-out" document is represented twice in the above list of modules, once in axslAreaTree (for its creation) and the other in axslGalley (for its consumption). In practice, many applications will have one module that implements both of these. However, we think it is important to keep them separate within aXSL for two reasons:

Now, the axslAreaTree module is dependent on the axslFoTree module. Some implementations may have the Area Tree encapsulate the Fo Tree, providing a "view" of the Fo Tree. Others may choose instead to copy the relevant data out of the Fo Tree and embed it in the Area Tree. But both depend on the Fo Tree as the Area Tree is being created, that is they have "Bound Input". However, it is conceivable that a different scheme could be used there as well, that would allow an Area Tree to be independent of axslFoTree specifically and independent of XSL-FO generally, that is, having "Free Input".

There are advantages to each approach. If there is interest in a "Free Input" package, it seems conceivable that an adapter could be created that would adapt "Bound Input" to "Free Input". This would allow XSL-FO systems to always write to the Bound Input API, but be able to use implementations that natively used either API.