XSL: XML Style Sheets (Hojas de Estilo)
Introducción
XML se utiliza por lo general para etiquetar contenidos dándoles semántica para ser interpretados. Pero no se ocupa de como estos contenidos deben de ser visualizados. En función de en que dispositivo o con que objetivo se visualicen, existirán diferentes formas óptimas de visualizarlos.
La motivación de este documento ha sido la de crear hojas de estilo para visualizar los contenidos generados por gjdoc, una herramienta del proyecto Classpath que genera XML a partir de la documentación de los ficheros fuente en Java. Esta herramienta ya dispone de hojas de estilo XSL para generar HTML. Si son modulares nos servirán para reutilizar para de ellas para poder generar otros formatos.
Estructura del XML a visualizar
Lo primero es entender la estructura del XML a visualizar, algo que vendrá definido en general por el DTD (Data Type Dictonary) o por el XSL Schema. A partir de esta definición crearemos una hoja de estilo soportando todo los elementos del DTD/XS que queramos visualizar.
Los XSL de gjdoc
Dentro del código fuente de gjdoc encontramos que:
acs@rayito:/tmp$ tree gjdoc-0.7.8/src/resources/doctranslets/
gjdoc-0.7.8/src/resources/doctranslets/
|-- gjdoc_common.xsl
`-- html
|-- about.xsl
|-- allclasses.xsl
|-- allpackages.xsl
|-- alphaindex.xsl
|-- alphaindex_chunked.xsl
|-- classdoc-source.xsl
|-- classdoc-uses.xsl
...
|-- res
| |-- default_help_en.html
| |-- gjdoc.js
| |-- gjdochtml-clean.css
| |-- gjdochtml-fixed.css
| |-- gjdochtml-sclara.css
| `-- gjdochtml.css
`-- serialized.xslEstas hojas de estilo las utiliza de forma automática gjdoc para generar la documentación en formato HTML:
documentpublisher-portlet/docroot/WEB-INF/src$ gjdoc -d api-docs com.liferay.documentpublisher ... Writing HTML files for package com.liferay.documentpublisher 56 warnings
Vemos que se usan hojas de estilo CSS lo que nos da aún mayor flexibilidad.
Podemos generar el XML solamente y luego aplicarle nosotros las hojas de estilo a mano:
documentpublisher-portlet/docroot/WEB-INF/src$ gjdoc -d api-docs-xml -doclet gnu.classpath.tools.doclets.xmldoclet.Driver com.liferay.documentpublisher documentpublisher-portlet/docroot/WEB-INF/src$ tree api-docs-xml/ api-docs-xml/ |-- alphaindex.xml |-- com.liferay.documentpublisher.ActionKeys.xml |-- com.liferay.documentpublisher.Constants.xml ... |-- dtd | |-- dbcentx.mod | |-- ent | | |-- iso-amsa.ent ... | |-- gjdoc-alphaindex.dtd | `-- gjdoc.dtd `-- index.xml
Vemos que se nos genera además el DTD que describe este XML generado por gjdoc. Para utilizar las hojas de estilo para generar la salida HTML utilizamos un procesador de XSL, por ejemplo xsltproc. Este aplicará las hojas de estilo al XML generando la versión para ser visualizada.
xsltproc /tmp/gjdoc-0.7.8/src/resources/doctranslets/html/gjdoc.xsl api-docs-xml/index.xml
La salida no es el HTML que queremos pero cambiando la hoja de estilo vamos obteniendo diferentes salidas. Tenemos que estudiar un poco mejor estas hojas de estilo.