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. |
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.