 Tutoriales
Apuntes de XML
Presentación y transformación de documentos XML
Hojas de estilo CSS
CSS con XML
- CSS es un lenguaje de hojas de estilo que se utiliza
normalmente para controlar la presentación de documentos HTML,
pero también se puede utilizar con documentos XML. Su principal
característica, en contraste con el lenguaje XSLT, es su
sencillez.
- Ventajas:
- Fácil de aprender y utilizar. Muchos desarrolladores
ya lo conocen.
- Consume poca memoria y tiempo de proceso, pues no
construye una representación en arbol del documento.
- Muestra el documento según se va procesando.
- Desventajas:
- Sólo sirve para visualizar documentos en un
navegador.
- No permite realizar manipulaciones sobre el
documento, tales como añadir y borrar elementos, realizar
ordenaciones, etc.
- Sólo permite acceder al contenido de los elementos.
No a los atributos, instrucciones de proceso, etc.
- Utiliza una sintaxis diferente a la del
XML.
Un ejemplo
- Ejemplo de documento XML:
<?xml version="1.0" ?>
<?xml-stylesheet type="text/css" href="proyectos.css" ?>
<BD_Proyectos>
<Proyecto pid="0511-001" tipo="Web" comienzo="11/1/05">
<Nombre_Proy> Xray Mind Learners Web Site </Nombre_Proy>
<Contacto tipo="primario">
<Nombre>Kell Attain</Nombre>
<Direccion> Web Ravin Consulting, 661 Oakey Rd</Direccion>
<Tlf> 111-555-1111 </Tlf>
<Fax> 111-555-2222 </Fax>
<E-Mail> kattain@webravin.com </E-Mail>
</Contacto>
<Contacto tipo="marketing">
<Nombre> Francis Chillington </Nombre>
<Direccion> Web Ravin Consulting, 661 Oakey Rd</Direccion>
<Tlf> 111-555-1112 </Tlf>
<Fax> 111-555-2222 </Fax>
<E-Mail> fchillington@webravin.com </E-Mail>
</Contacto>
<Contacto tipo="graficos">
<Nombre> Lara Firewalker </Nombre>
<Direccion> Web Ravin Consulting, 661 Oakey Rd</Direccion>
<Tlf> 111-555-1113 </Tlf>
<Fax> 111-555-2222 </Fax>
<E-Mail> lfirewalker@webravin.com </E-Mail>
</Contacto>
<Notas>
<Entrada fecha="11/03/05" contacto="kta001"> Development on the Web site
has started. The primary graphics - logo | backgrounds | navigation
system - should be done by 11/8/00.
</Entrada>
</Notas>
</Proyecto>
<Proyecto pid="0511-002" tipo="Database">
<Nombre_Proy> XML Database for Site Visitors </Nombre_Proy>
<Contacto tipo="primario">
<Nombre> Tom Phannon </Nombre>
<Direccion> Web Ravin Consulting, 661 Oakey Rd</Direccion>
<Tlf> 111-555-1122 </Tlf>
<Fax> 111-555-2222 </Fax>
<E-Mail> tphannon@webravin.com </E-Mail>
</Contacto>
<Notas>
<Entrada fecha="11/10/05">
Database structure is complete. Ready to start propagating the data.
</Entrada>
</Notas>
</Proyecto>
<Proyecto tipo="AI">
<Nombre_Proy> House of Glass </Nombre_Proy>
<Contacto tipo="primario">
<Nombre> Shamu Wagonride </Nombre>
<Direccion> Web Ravin Consulting, 661 Oakey Rd</Direccion>
<Tlf> 111-555-1133 </Tlf>
<Fax> 111-555-2222 </Fax>
<E-Mail> shamu@wagonride.com </E-Mail>
</Contacto>
<Notas>
<Entrada fecha="11/01/05">
AI logic model software has been picked out and ordered, as well
as the equipment required to run it. Networking (MIS) has been notified
of the machine's arrival and networking needs.
</Entrada>
<Entrada fecha="11/11/05">
MIS has received equipment and software and is starting the installation.
Expected date for network connection is 11/15/05.
</Entrada>
</Notas>
</Proyecto>
</BD_Proyectos>
- Hoja de estilo para visualizar el documento en un
navegador:
Proyecto {display: block;
background: blue;
font-family: sans-serif;
margin: 1cm}
Nombre_Proy {display: block;
background: #FF0000;
font-size: larger;
font-weight: bold;
color: yellow;
font-family: Arial;
border: #FF0000;
border-style: double}
Contacto {display: block;
padding: 5pt;
text-indent: 1cm}
Nombre {display: block;
font-variant: small-caps;
font-size: medium;
font-weight: bold;
color: red}
Direccion {display: block;
font-style: italic;
font-size: smaller;
color: white}
Tlf {display: block;
font-weight: bold;
font-size: smaller;
color: white}
Fax {display: block;
font-weight: bold;
font-size: smaller;
color: white}
E-Mail {display: block;
font-weight: bold;
font-style: italic;
color: white}
Notas {display: block;
font-style: italic;
color: white;
padding: 3em}
Entrada {display: block}
Lenguaje XSLT
Introducción a XSLT
- Para aclarar terminología, XSL es un estándar que se
compone de dos partes diferenciadas:
- XSLT: Lenguaje para transformar documentos XML en
otro formato (otro XML, HTML, DHTML, texto plano, PDF, RTF,
Word, etc.)
- XSL-FO: Especificación que trata cómo deben ser los
objetos de formato para convertir XML a formatos binarios (PDF,
Word, imágenes, etc.)
- La principal característica del lenguaje XSLT es su
potencia. No es sólo un lenguaje para visualizar
documentos, sino en general para transformarlos y manipularlos.
- Esta manipulación la gestiona un programa especial que se
llama procesador XSLT. Existen distintos procesadores
disponibles, como Xalan, del proyecto colaborativo de
código abierto Apache.
Ventajas y desventajas
- Ventajas:
- La salida no tiene por qué ser HTML para visualización en un
navegador, sino que puede estar en muchos formatos.
- Permite manipular de muy diversas maneras un
documento XML: reordenar elementos, filtrar, añadir, borrar,
etc.
- Permite acceder a todo el documento XML, no sólo al
contenido de los elementos.
- XSLT es un lenguaje XML, por lo que no hay que
aprender nada especial acerca de su sintaxis.
- Desventajas:
- Su utilización es más compleja.
- Consume cierta memoria y capacidad de proceso, pues
se construye un árbol con el contenido del
documento.
Formas de uso
- Visualizar directamente en un navegador el documento
XML que tiene asociada una hoja XSLT. El navegador debe tener
incorporado un procesador XSLT.
- Ejecutar el procesador XSLT independientemente del
navegador. Se le pasan las entradas necesarias (fichero origen y
hoja XSLT a utilizar) y genera la salida en un fichero, con el que
podemos hacer lo que queramos.
- Realizar las transformaciones dentro de un programa en el
servidor y enviar a los clientes sólo el resultado de la
transformación.
Un ejemplo de hoja
Características
- Se puede observar que una hoja de estilo XSLT es un documento
XML.
- El elemento raíz es stylesheet, en el que se
especifican los espacios de nombre para la propia hoja de
estilo y para el documento XML que se quiere presentar.
- Cada elemento template se asocia con un fragmento del
documento XML (que puede ser un elemento o un conjunto de
elementos) y se transforma en otro fragmento de XML, según
una serie de reglas que se especifican en su interior.
- El elemento value-of extrae un valor concreto
del documento.
- El elemento apply-templates aplica las
plantillas que se especifiquen e inserta la salida de las
mismas.
- Para iterar sobre una serie de elementos que se repiten
se utiliza for-each.
- Para realizar distintos procesamientos en función de
los datos se puede utilizar el elemento choose, que se
compone de un número de elementos when, cada uno con un
caso distinto, y un elemento opcional otherwise que se
refiere al caso por defecto.
- Para procesar o no un elemento en función de una
condición se utilizaría simplemente el elemento if,
especificando la condición en el atributo test.
- El HTML que se especifica en las plantillas debe seguir
las reglas del XML (es decir, debe ser XHTML).
XPath
- Las expresiones que pueden aparecer en los atributos
select, match o test de los elementos
explicados siguen el lenguaje XPath, y pueden llegar a ser
todo lo complejas que se requiera.
- Veamos un ejemplo sobre el mismo documento del libro con
algunas expresiones XPath. Este ejemplo muestra una lista
con las secciones de 3 ó más apartados de capítulos cuya materia
sea Java, numerándolas e indicando a qué capítulo pertenecen.
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:Lib="http://www.mislibros.com/libros/javaxml"
version="1.0">
<xsl:template match="Lib:Libro">
<html><body>
<ul>
<xsl:for-each select="Lib:Contenido/Lib:Capitulo[@materia='Java']
/Lib:Seccion[@apartados>=3]">
<li>
<xsl:value-of select="position()" />:
<xsl:value-of select="." />, de
<xsl:value-of select="preceding-sibling::Lib:Tema" />
</li>
</xsl:for-each>
</ul>
</body></html>
</xsl:template>
</xsl:stylesheet>
- La especificación XPath contiene muchas complejidades que no
podemos detenernos a cubrir, pero destaquemos algunos
aspectos del ejemplo:
- Para descender por la jerarquía de elementos se
utiliza el separador /.
- Se pueden imponer restricciones al conjunto de nodos
extraídos, entre corchetes.
- Existen una serie de funciones predefinidas, como
position(), que nos da el número de orden de un nodo
respecto al conjunto de nodos extraídos.
- Se puede trabajar con los nodos relacionados con el
actual (nodo padre, hijos, nodos al mismo nivel, etc.) mediante
una serie de ejes, como preceding-sibling, que nos da
los nodos anteriores al actual del mismo
nivel.
Crear elementos
- Con XSLT también es posible crear nuevos elementos
mediante las etiquetas element y attribute. Esto
sirve para crear elementos con algún atributo no conocido a
priori, que debe tomarse del fichero XML.
- Añadimos el siguiente fragmento de XML al final del
documento del libro, a partir del cual queremos generar enlaces
HTML:
<Referencias>
<Referencia>
<Nombre>XSL en el W3C</Nombre>
<Url>http://www.w3.org/Style/XSL</Url>
</Referencia>
<Referencia>
<Nombre>Lista XSL</Nombre>
<Url>http://www.mulberrytech.com/xsl/xsl-list</Url>
</Referencia>
</Referencias>
- El fragmento de XSLT que genera los enlaces es:
<xsl:template match="Lib:Referencias">
<p>
<center><h3>Referencias útiles</h3></center>
<ol>
<xsl:for-each select="Lib:Referencia">
<li>
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="Lib:Url" />
</xsl:attribute>
<xsl:value-of select="Lib:Nombre" />
</xsl:element>
</li>
</xsl:for-each>
</ol>
</p>
</xsl:template>
(Recordar aplicar la nueva plantilla:)
<xsl:apply-templates select="Lib:Contenido|Lib:Referencias" />
Ordenaciones
|
|
|