javax.xml.transform
: núcleo de interfaces
para transformaciónjavax.xml.transform.sax
: interfaces de transformación basados en
SAXjavax.xml.transform.dom
: interfaces relacionados con DOMjavax.xml.transform.stream
: interfaces relacionados con flujos
String xml="file.xml";
String xsl="tr.xsl";
TransformerFactory f =
TransformerFactory.newInstance();
Transformer t =
f.newTransformer(new StreamSource(new File(xsl)));
t.transform(new StreamSource(new File(xml)),
new StreamResult(System.out));
Cocoon. Es un servlet Java que usa Xalan (por defecto) para transformar documentos que pueden generarse de forma dinámica.
Todas las páginas se generan a través de un pipeline en 3 fases: generación, transformación y serialización
Los navegadores incluyen una implementación de XSLT
Varias librerías:
Docbook es un completo sistema de documentación. Especialmente útil para documentación de proyectos, aunque puede utilizarse en otros contextos.
Está formado por una especificación del vocabulario en SGML DTDs y en Relax NG
Contiene numerosas hojas de estilo para transformar a diferentes formatos: FO, HTML, PDF, etc.
<article>
<articleinfo>
<title>Ejemplo</title>
<author>
<firstname>Fanjul</firstname>
<surname>Herrera</surname>
</author>
<abstract>
<para>Este libro resume algunas experiencias</para>
</abstract>
</articleinfo>
<sect1 id="S1">
<title>La Primavera</title>
<para>Hablar de la primavera es interesante</para>
</sect1>
</article>
Schematron define un sistema de validación de documentos XML basado en reglas. Reciéntemente aprobado como estándar ISO
Las reglas se definen mediante sentencias XPath
La implementación de referencia fue realizada en XSLT en 2 fases. Una hoja toma las reglas y genera una hoja XSLT que toma el documento y lo valida.
<sch:schema xmlns:sch="http://www.ascc.net/xml/schematron">
<sch:title>Comprobar emails</sch:title>
<sch:pattern name="Chequea email">
<sch:rule context="email">
<sch:assert test="contains(.,'@')">
Falta la arroba en el email</sch:assert>
</sch:rule>
</sch:pattern>
</sch:schema>
Iniciativa para crear un conjunto de extensiones relativamente estándar.
Soportadas por diversos procesadores: libxml2
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:math="http://exslt.org/math"
extension-element-prefixes="math" >
<xsl:template match="/">
N = <xsl:value-of select="math:random()" />
</xsl:template>
</xsl:stylesheet>
Recomendación aprobada en Junio 2006
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:m="http://misFunciones.org">
<xsl:template match="/">
10! = <xsl:value-of select="m:fact(10)" />
</xsl:template>
<xsl:function name="m:fact" as="xs:integer">
<xsl:param name="n" as="xs:integer" />
<xsl:value-of
select="if ($n = 0) then 1
else $n * m:fact($n - 1)" />
</xsl:function>
<xsl:stylesheet>
<ciudades>
<ciudad nombre="Londres"
pais="Inglaterra"/>
<ciudad nombre="Roma"
pais="Italia"/>
<ciudad nombre="Paris"
pais="Francia"/>
<ciudad nombre="Venecia"
pais="Italia"/>
</ciudades>
<xsl:template match="/">
<xsl:for-each-group
select="ciudades/ciudad"
group-by="@pais">
<xsl:value-of select="@pais"/>:
<xsl:value-of
select="current-group()/@nombre"/><xsl:text>
</xsl:text>
</xsl:for-each-group>
</body>
</html>
</xsl:template>
<xsl:template match="alumnos">
<xsl:for-each select="alumno">
<xsl:result-document
href="out/alumno{position()}.html">
<xsl:apply-templates select="." />
</xsl:result-document>
</xsl:for-each>
</xsl:template>
<xsl:template match="alumno">
<p><xsl:value-of select="nombre" /></p>
</xsl:template>