Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la...

19
El profesional de la información, vol. 10, n os 1-2, enero-febrero 2001 4 Artículos Lenguajes de marcas aplicados a la transformación de estructuras documentales Resumen: Este artículo se ocupa de las tecnologías CSS (cascading style sheet) y Xslt (extensible style sheets language: transformations). Se trata de un trabajo de carácter práctico, sencillo y demostrativo más que un estudio teórico o exhaustivo. La idea que se pretende transmitir es que la unidad básica de gestión de información vuelve a ser el documento, con su marca de documento digital. La tecnología en la web se orienta hacia el control absoluto de su ciclo vital, funcionalidades y componentes estructurales. Este artículo presenta Xslt como una de las opciones más interesantes para controlar la estructura de los documentos digitales mediante transformaciones. Palabras clave: CSS (cascading style sheet), Documento digital, DOM (document object model), Hojas de estilo, html (hypertext markup language), Internet Explorer, sgml (standard generalized markup language), XSL (extensible style sheets language), Xslt (extensible style sheets language: transformations), Xslf (extensible style sheets language: formatting), xml (extensible markup language). Title: Markup languages applied to the transformation of documentary structures. Abstract: This article addresses CSS (cascading style sheet) and Xslt (extensible style sheets language: transformations) technologies, from a practical, straightforward and demonstrative perspective, rather than attempting to provide a theoretical or exhaustive study. The central idea is that the basic unit of information management again becomes the document, marked up as a digital document. Web technology is directed at an absolute control over its life-cycle, functionalities and structural elements. This article presents Xslt as one of the most interesting options for controlling digital documents’ structure through transformations. Keywords: CSS (cascading style sheet), Digital document, DOM (document object model), Style sheets, html (hypertext markup language), Internet Explorer, sgml (standard generalized markup language), XSL (extensible style sheets language), Xslt (extensible style sheets language: transformations), Xslf (extensible style sheets language: formatting), xml (extensible markup language). Rosa Piñero, Antonio de la. ”Lenguajes de transformación de estructuras aplicados al intercambio de documentación”. En: El profesional de la información, 2001, enero-febrero, v. 10, n. 1-2, pp. 4-22. Antonio de la Rosa Piñero Introducción ¿De dónde viene la idea de tratar un documento di- gital como una estructura arbórea de nodos? En reali- dad se trata de la evolución lógica de una de las áreas de estudio clásicas de la informática: el desarrollo de aplicaciones para la generación y edición automática de documentos digitales. Este campo abarca un amplio espectro de programas de todo tipo (procesadores de textos sencillos, sistemas de ayuda basados en hiper- texto, producción automática de bases de datos, edi- ción, diseño, etc.) dirigidas a todos los tipos de usua- rios: principiantes, profesionales o programadores. Históricamente, la evolución del procesamiento de textos se puede esquematizar en los siguiente pasos: durante la década de los 60 el sistema utilizado era simple: tras generar el documento se aplicaba el for- mato deseado. Por lo general, la salida de este texto era impresa, y aquel tenía asociado, junto al dato propia- mente dicho, la descripción deseada (llamada repro- ducción) que era convertida por el programa en una presentación. Algunas de las notaciones utilizadas en esta época para la reproducción siguen estando hoy en día en vigencia (con modificaciones, claro está): rtf (rich text format) o troff. «Para gestionar información de forma eficaz es necesario con- tar con un sistema que permita estructurarla lógicamente» Poco tiempo después de que este sistema empeza- ra a tener éxito, apareció el marcado de formato: se procedía a marcar el texto con una serie de etiquetas o códigos. Con la aparición de sistemas wysiwyg (what you see is what you get) se produjo una separación. Por un lado se desarrollaron lenguajes de etiquetas más complejos, por otro, se unió la potencia de los sistemas de reproducción a la capacidad de las nuevas interfa- ces. El producto final de esta opción son los actuales procesadores de texto (AmiPro, Pagemaker, Word, WordPerfect, etc.). Por Antonio de la Rosa Piñero, consultor e ingeniero de programación, Wisdom B. V., Assen, Holanda. [email protected] Original recibido el 9-9-00 Aceptación definitiva: 26-10-00

Transcript of Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la...

Page 1: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas

El profesional de la información, vol. 10, nos 1-2, enero-febrero 20014

ArtículosLenguajes de marcas aplicados a la transformación

de estructuras documentalesResumen: Este artículo se ocupa de las tecnologías CSS (cascading style sheet) y Xslt (extensible style sheetslanguage: transformations). Se trata de un trabajo de carácter práctico, sencillo y demostrativo más que unestudio teórico o exhaustivo. La idea que se pretende transmitir es que la unidad básica de gestión deinformación vuelve a ser el documento, con su marca de documento digital. La tecnología en la web se orientahacia el control absoluto de su ciclo vital, funcionalidades y componentes estructurales. Este artículo presentaXslt como una de las opciones más interesantes para controlar la estructura de los documentos digitalesmediante transformaciones.

Palabras clave: CSS (cascading style sheet), Documento digital, DOM (document object model), Hojas deestilo, html (hypertext markup language), Internet Explorer, sgml (standard generalized markup language), XSL(extensible style sheets language), Xslt (extensible style sheets language: transformations), Xslf (extensible stylesheets language: formatting), xml (extensible markup language).

Title: Markup languages applied to the transformation of documentary structures.

Abstract: This article addresses CSS (cascading style sheet) and Xslt (extensible style sheets language:transformations) technologies, from a practical, straightforward and demonstrative perspective, rather thanattempting to provide a theoretical or exhaustive study. The central idea is that the basic unit of informationmanagement again becomes the document, marked up as a digital document. Web technology is directed at an absolute control over its life-cycle,functionalities and structural elements. This article presents Xslt as one of the most interesting options for controlling digital documents’ structurethrough transformations.

Keywords: CSS (cascading style sheet), Digital document, DOM (document object model), Style sheets, html (hypertext markup language), InternetExplorer, sgml (standard generalized markup language), XSL (extensible style sheets language), Xslt (extensible style sheets language: transformations),Xslf (extensible style sheets language: formatting), xml (extensible markup language).

Rosa Piñero, Antonio de la. ”Lenguajes de transformación de estructuras aplicados al intercambio de documentación”. En: El profesional de lainformación, 2001, enero-febrero, v. 10, n. 1-2, pp. 4-22.

Antonio de la Rosa Piñero

Introducción

¿De dónde viene la idea de tratar un documento di-gital como una estructura arbórea de nodos? En reali-dad se trata de la evolución lógica de una de las áreasde estudio clásicas de la informática: el desarrollo deaplicaciones para la generación y edición automáticade documentos digitales. Este campo abarca un amplioespectro de programas de todo tipo (procesadores detextos sencillos, sistemas de ayuda basados en hiper-texto, producción automática de bases de datos, edi-ción, diseño, etc.) dirigidas a todos los tipos de usua-rios: principiantes, profesionales o programadores.

Históricamente, la evolución del procesamiento detextos se puede esquematizar en los siguiente pasos:durante la década de los 60 el sistema utilizado erasimple: tras generar el documento se aplicaba el for-mato deseado. Por lo general, la salida de este texto eraimpresa, y aquel tenía asociado, junto al dato propia-mente dicho, la descripción deseada (llamada repro-ducción) que era convertida por el programa en una

presentación. Algunas de las notaciones utilizadas enesta época para la reproducción siguen estando hoy endía en vigencia (con modificaciones, claro está): rtf(rich text format) o troff.

«Para gestionar información deforma eficaz es necesario con-tar con un sistema que permitaestructurarla lógicamente»

Poco tiempo después de que este sistema empeza-ra a tener éxito, apareció el marcado de formato: seprocedía a marcar el texto con una serie de etiquetas ocódigos. Con la aparición de sistemas wysiwyg (whatyou see is what you get) se produjo una separación. Porun lado se desarrollaron lenguajes de etiquetas máscomplejos, por otro, se unió la potencia de los sistemasde reproducción a la capacidad de las nuevas interfa-ces. El producto final de esta opción son los actualesprocesadores de texto (AmiPro, Pagemaker, Word,WordPerfect, etc.).

Por Antonio de la Rosa Piñero, consultor e ingeniero de programación, Wisdom B. V., Assen, [email protected] recibido el 9-9-00Aceptación definitiva: 26-10-00

Page 2: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas

5El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001

Lenguajes de marcas aplicados a la transformación de estructuras documentales

De ahí el éxito del formato xml (extensible markuplanguage), válido para la representación digital de do-cumentos de cualquier tipo. Para trabajar con él es ne-cesario estructurar la información. Éste es un procesomuy sencillo dentro del campo de la documentación,ya que la mayoría de “materiales” con los que se tra-baja es susceptible de ser dividida en componentes.Así, un libro tiene título, capítulos, índices o un artí-culo resumen, apartados, subapartados, notas al pie,etc. Al mismo tiempo, cada una de estas partes tiene asu vez párrafos, frases, imágenes, etc. Xml denominaa todos ellos integrantes.

La siguiente tabla muestra una lista de libros for-mateada en xml:

<?Xml version=”1.0”?><?xml-stylesheet type=”text/css” href=”listadelibros.css”?><listadelibros>

<libro><codigo>16-048</codigo><categoria>scripting</categoria><fecha_pub>1998-04-21</fecha_pub><titulo>instant javascript</titulo><ventas>375298</ventas>

</libro><libro>

<codigo >16-105</codigo><categoria>asp</categoria><fecha_pub>1998-05-10</fecha_pub>

Figura 1

Figura 2

Bibliografía recomendada

Cascading style sheets, level 2 Css2 specifica-tion. W3C recommendation, 12 de mayo,1998. http://www.w3.org/TR/REC-CSS2/

Cascading style sheets home page.http://www.w3.org/Style/CSS/

Extensible markup language (xml) 1.0 (se-cond edition). W3C recommendation, 6 deoctubre, 2000.h t t p : / /www.w3 . o r g /TR /2000 /REC - xm l -20001006

Francis, Brian, et al. IE5 dynamic html pro-grammer’s reference. Chicago (Illinois):Wrox Press Inc., 1999. Isbn 1861001746.

Kay, Michael. Xslt programmer’s reference.Chicago (Illinois): Wrox Press Inc., 2000. Isbn1861003129.

Xsl transformations (Xslt), version 1.0. W3Crecomendation, 16 de noviembre, 1999.http://www.w3.org/TR/xslt

El profesional de la información está abiertoa todos los bibliotecarios, documentalistas y pro-fesionales de la información, así como a las em-presas y organizaciones del sector para que pue-dan exponer sus noticias, productos, servicios,experiencias y opiniones.

Dirigir todas las colaboraciones para publicar a:

El profesional de la información

Apartado 32.280

08080 Barcelona

Fax: +34-934 250 029

[email protected]

La proliferación de diversos formatos generó unproblema: la información tenía diferentes maneras derepresentarse. Dentro de este contexto apareció, a fina-les de los 60, sgml. Lo interesante de esta evolución esconstatar cómo en un momento determinado se produ-jo una separación entre presentación y estructuración.

El siguiente paso en la web ha sido asimilar la ideade que para gestionar información de forma eficaz esnecesario contar con un sistema que permita estructu-rarla lógicamente, ya sea de manera tabular o arbórea,puesto que esa ordenación facilitará la automatizaciónde las operaciones que se realicen sobre ella: recupe-ración, intercambio, integración, etc. Por otra parte,mantener una estructura de datos rígida dentro de unmodelo abierto, como es el caso de la www, es un con-trasentido.

Page 3: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas

El profesional de la información, vol. 10, nos 1-2, enero-febrero 20016

Antonio de la Rosa Piñero

<titulo>instant active server pages</titulo><ventas>297311</ventas>

</libro><libro>

<codigo>16-041</codigo><categoria>html</categoria><fecha_pub>1998-03-07</fecha_pub><titulo>instant html</titulo><ventas>127853</ventas>

</libro></listadelibros>

Esto lo podríamos traducir gráfi-camente al árbol de etiquetas presen-tado en la figura 1. El cual, algo másdesarrollado, genera el árbol de con-tenidos de la figura 2.

Éste es el estado de la cuestiónactual por lo que se refiere a docu-mentación digital en la www y xml.Los documentos se digitalizan en este formato de mo-do que puedan ser gestionados más fácilmente por apli-caciones específicas. Ahora bien, ¿cuál va a ser el si-guiente paso en la evolución? Este artículo se centra endicho tema. El próximo avance probablemente sea lagestión de información al nivel de elemento. Salvandolas distancias se podría decir que, en un futuro próxi-mo, un documento digital en la www se considerará co-mo una pequeña base de datos y, para las aplicacionesque lo gestionen, la interacción con su contenido seráalgo parecido a la forma en que SQL interactúa con lasbases de datos convencionales en la actualidad.

Una pista fundamental para basar esta aseveraciónes el hecho de que los lenguajes de programación tra-dicionales (aquellos que operan con la información) ylos de etiquetas (los que la descri-ben), se aproximan cada vez más aun territorio intermedio. Éste es elprincipio de CSS (cascading stylesheets) y de xslt (extensible stylesheets language: transforma-tions), las dos especificaciones enlas que se centra este estudio. Co-mo se intentará demostrar, las im-plicaciones de su planteamientode trabajo van mucho más allá dela simple presentación de datos.

CSSEl ejemplo bajo estas líneas es

un documento html a partir delcual se van a introducir algunosconceptos sobre esta clase de ho-jas de estilo:

<!doctype html public “-//W3C//dtd html4.0//en”><html>

<head>

<title> Página html simple </title></head><body>

<h1> Ejemplo html – CSS </h1><p> Así se aplica CSS (cascading style sheets) </p>

</body></html>

Para hacer que el contenido del elemento <h1>aparezca en azul, se podría usar lasiguiente regla CSS:

h1 {color:blue}

Una regla CSS consta de dos com-ponentes principales: un selector(’h1’) y una declaración(’color:blue’) la cual, a su vez, tie-ne dos partes: propiedad (’color’)y valor (’blue’). El código anteriorpodría verse como una hoja de es-

tilo muy simple; combinada con otras (su característi-ca fundamental1 es que pueden combinarse) servirá pa-ra determinar la presentación final del documento.

La especificación html 4.0 define cómo se debenaplicar las reglas CSS a los documentos html: tantodentro del mismo documento como mediante una hojade estilo externa. Para incluirla internamente se usa elelemento <style>:

<!doctype html public “-//W3C//dtd html 4.0//en”><html>

<head><title> Página simple html </title><style type=”text/css”>

body {color:red}h1 {color:blue}

</style></head>

<body><h1> Ejemplo html - CSS </h1><p> Así se aplica CSS (cascading

style sheets) </p></body>

</html>

La hoja de estilo (en este caso secorresponde con el elemento<style>) contiene dos reglas: laprimera hace que el elemento<body> adopte por defecto el co-lor rojo mientras que la segundahace posible que el contenido de<h1> aparezca en azul. No se es-pecifica ningún color para <p> ypor lo tanto heredará el color desu elemento padre (aquel en elcual está contenido): <body>.<h1> es también hijo de <body>pero en este caso se aplica la se-gunda regla de la hoja de estilo.’Color’ es sólo una de las aproxi-

madamente 100 propiedades incluidas en CSS-2. En elsiguiente código se utilizan algunas otras:

Figura 3

Figura 4. Apariencia por defecto del documentobook.xml en IE5

Page 4: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas

7El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001

Lenguajes de marcas aplicados a la transformación de estructuras documentales

<!doctype html public “-//W3C//dtd html 4.0//en”><html>

<head><title> Página simple html </title><style type=”text/css”>

body {font-family:”Gill Sans” sans-serif;font-size:12pt ;margin:3em ;}

h1 {color:blue}</style>

</head><body>

<h1> Ejemplo html - CSS </h1><p> Así se aplica CSS (cascading style sheets) </p>

</body></html>

El primer punto a comentar es que hay varias de-claraciones agrupadas en un bloque de código delimi-tado por llaves ({...}), separadascon (;), aunque la última puedeaparecer también seguida por (:).La primera declaración asociadacon el elemento <body> fija el tipode letra en gill sans. Si no está dis-ponible, el navegador usará sans-serif, que es uno de los genéricosque todos los navegadores “cono-cen”. Los hijos del elemento<body> heredarán el valor de lapropiedad font-family si no especifican los suyos pro-pios. La segunda declaración fija el tamaño de la letradel elemento <body> en 12 puntos2. La tercera usa unaunidad de dimensión relativa, la unidad “em”, y se re-fiere a la medida de la letra; en este caso, los márgenesalrededor de dicho elemento serán tres veces el tama-ño de la letra (por lo tanto, 36 puntos).

1. Elementos-objeto (selectores). El siguienteejemplo es un poco más complicado. El código defineun estilo para todos los elementos <p>: 14 puntos, co-lor verde, letra arial; y otro para todos los que presen-ten un atributo “class” con el valor ”miclase”: 12 pun-tos, color azul, letra courier:

<head><style type=”text/css”>

p {font-family:Arial; font-size:14pt; color:green}.miclase {font-family:Courier; font-size:12pt; color:blue}

</style></head>

Como se ha visto antes, CSS permite definir un se-lector o elemento-objeto del estilo a aplicar, usando elnombre de dicho elemento, como se acaba de hacercon <p>. Es posible ser más precisos a la hora de es-pecificar los selectores indicando su forma de anida-miento. En este otro ejemplo el estilo se aplica sola-mente a los elementos <em> anidados dentro de <p>:

p em {font-family:Arial; font-size:14pt; color:green}

El siguiente código es ligeramente diferente, pues-to que separa los nombres de los selectores con una co-ma. Con esta sintaxis, el estilo se aplicará a todos loselementos <p> y a todos los <em>:

p, em {font-family:Arial; font-size:14pt; color:green}

2. Clases–objeto. El ejemplo anterior también de-finía un estilo para una clase llamada miclase. Para in-dicar que es una clase propietaria3, se antecede el nom-bre con un punto:

.miclase {font-family:Courier; font-size:12pt; color:blue}

Ahora se puede asignar este estilo a cualquier ele-mento usando el atributo (class) de la siguiente forma:

<p class=”miclase”>Texto</p>

a. Estilos dinámicos. Usar clases objeto, como enel ejemplo anterior, es una técnica muy popular cuan-

do se utiliza dhtml (dynamic html).La razón es que un script puedecambiar el estilo de un elemento enrespuesta a un determinado evento.Si se definen varias clases, sólo ha-brá que ajustar la propiedad class-Name del elemento en cuestión a laclase apropiada usando el script.En el siguiente ejemplo se cambiala propiedad className de un ele-mento <p> en respuesta a un even-

to onmouseover:

<style type=”text/css”>.grande{font-family:Arial; font-size:24pt; font-weight:bold}.peque{font-family:Courier; font-size:12pt; font-

weight:normal }</style>

<p class=”peque”id=”miEncabez”onmouseover=”hazGrande();”onmouseout=”haz-Peque();”>Texto</p>

...<script language=”JScript”>

function hazGrande(){

document.all(‘miEncabez’).className = ‘grande’;}function hazPeque(){

document.all(‘miEncabez’).className = ‘peque’;}

</script>

b. Hojas de estilo enlazadas. El ejemplo anteriorutiliza una sección <style> dentro de un documentohtml para definir la información relativa a su presenta-ción. Sin embargo, también se puede vincular una ho-ja de estilo independiente con un documento htmlusando tanto el elemento <link> como la instrucciónde estilo @import. Los siguientes ejemplos enlazan aldocumento html una hoja independiente llamada mies-tilo.css:

<link rel=”stylesheet” type=”text/css” href=”miestilo.css”>

Figura 5. Book.xml asociado a la hoja de estiloXslt expresada en el código anterior

Page 5: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas

El profesional de la información, vol. 10, nos 1-2, enero-febrero 20018

Antonio de la Rosa Piñero

El elemento <link> especifica:

— El tipo de archivo con el que se enlaza: “styles-heet”.

— La ruta a ese archivo mediante el atributo“href”.

— El tipo de hoja de estilo: “text/css”.

<style type=”text/css”>@import url(miestilo.css);

</style>

Es siempre recomendable usar hojas de estilo ex-ternas por dos motivos fundamentales: pueden modifi-carse sin tocar el documento fuente html y es posiblecompartirlas entre diferentes documentos.

3. Usar CSS con documentos xml. A las aplica-ciones documentales les resulta más interesante el usoque se pueda hacer de CSS a partir de documentos xml.¿Cómo se trabaja con esto? No es posible usar bloquesde código delimitados por el elemento <style> ya queno tiene sentido en xml. Sucede lo mismo con <link>;el navegador presentará el contenido de ambos comosimple texto; al fin y al cabo éste es el planteamientotras xml: cada elemento significa lo que su creador de-cida.

«Salvando las distancias se po-dría decir que, en un futuro pró-ximo, un documento digital enla www se considerará comouna pequeña base de datos»

a. La instrucción de proceso xml-stylesheet. Lasolución al problema es usar una instrucción de proce-so xml. Este lenguaje define el elemento <?xml...?>como una instrucción de proceso que se usa para darórdenes al parser o procesador xml. Una versión espe-cial de esa instrucción de proceso se usa para enlazardocumentos xml con las hojas de estilo que contienenla información sobre su presentación:

<?xml-stylesheet type=”text/css” href=”miestilo.css”?>

El parser xml buscará la hoja de estilo en la direc-ción especificada en el atributo href y la usará para darformato al contenido del documento xml. También sepueden definir diferentes hojas de estilo usando variasinstrucciones <?xml-stylesheet..>. En ese caso los es-tilos se fusionan y, en caso de duplicación, los últimosen aplicarse tienen precedencia.

b. Un ejemplo. El siguiente código muestra cómouna hoja de estilo CSS puede servir para controlar lapresentación de un documento xml, llamadobook.xml4, que es una lista de tres libros:

<?xml version=”1.0”?><?xml-stylesheet type=”text/css” href=”listadelibros.css”?>

<listadelibros><libro>

<codigo>16-048</codigo><categoria>scripting</categoria><fecha_pub>1998-04-21</fecha_pub><titulo>instant javascript</titulo><ventas>375298</ventas>

</libro><libro>

<codigo >16-105</codigo><categoria>asp</categoria><fecha_pub>1998-05-10</fecha_pub><titulo>instant active server pages</titulo><ventas>297311</ventas>

</libro><libro>

<codigo>16-041</codigo><categoria>html</categoria><fecha_pub>1998-03-07</fecha_pub><titulo>instant html</titulo><ventas>127853</ventas>

</libro></listadelibros>

Se puede observar que la segunda línea es la ins-trucción de proceso que especifica la hoja de estilo lla-mada listadelibros.css. A continuación se muestra sucontenido:

libro {display:block; margin:15px}

codigo {display:inlinefont-family:tahoma, arial, sans-serif;font size:10pt;font weight: bold}

categoria {display:inlinefont-family:tahoma, arial, sans-serif;color:darkgray;font size:12pt;font weight: bold}

fecha_pub {display:inlinefont-family:tahoma, arial, sans-serif;color:red;font size:10pt}

titulo {display:inlinefont-family:tahoma, arial, sans-serif;font size:12pt;color:white;background-color:black}

ventas {display:none }

Para cada uno de los elementos del documentofuente xml (excepto <listadelibros>), se especifica unconjunto de propiedades de estilo. Para el elemento<libro> se define como display:block. Por lo tanto,cada <libro> aparecerá formando un bloque5 separadode los demás por un salto de línea. Esto es análogo a loque se consigue con el elemento html <div>. También

Figura 6

Page 6: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas

9El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001

Lenguajes de marcas aplicados a la transformación de estructuras documentales

se ha incrementado el espacio entre elementos <libro>al fijar la propiedad margin en 15 píxeles.

<codigo>, <categoria>, <fecha_pub> y <titulo>presentan la propiedad display:inline, por lo que sepresentan en la misma línea, algo similar a lo que seobtiene usando el elemento html <span>. Cada uno deellos, sin embargo, posee diferentes propiedades de es-tilo y por eso aparecerán en diferentes tamaños y colo-res. Por otra parte, no se quiere presentar el contenidode los elementos <ventas> y por eso la propiedad dis-play: para los cuales se fijó en none. La imagen de lafigura 3 muestra el resultado de la hoja de estilo lista-delibros.css actuando sobre el documento book.xml:

Xslt

En este apartado se cambia de tema: de CSS a xslt;de hojas de estilo para la presentación del documentofuente a otras para su transformación. Si se quisieraanalizar xslt desde un punto de vista global, sería un te-ma demasiado amplio para un trabajo como éste. Porlo tanto, esta sección se centrará en su rendimientopráctico en el navegador Internet explorer 5. Lo que sepretende es, por un lado, ver cómo funciona en la prác-tica esta tecnología y tener muy en cuenta que uno delos posibles entornos de aplicación es una herramientatan asequible y globalmente difundida como IE5; porotro, llegar a ciertas conclusiones que nos ayudarán ala hora de plantear posibles soluciones en el mundo dela documentación digital.

1. Introducción.

a. Transformar código xml para su presenta-ción. La función de xslt se describe a menudo como:“transformar xml para su presentación”. Lo que estorealmente significa es que no hay una forma normali-zada de presentar elementos xml, ya que no poseenningún significado intrínseco.

Lo que hace xslt es permitir que el autor, o el re-ceptor del documento xml, puedan especificar cómo sedebe presentar su contenido. Esto lo consigue al trans-formarlo en html o en un lenguaje equivalente que po-sea características de presentación normalizadas6. Ge-neralmente los elementos xml se convertirán a html;en otras palabras, se especificará código html para ca-

da elemento xml que será el encargado de producir lapresentación deseada. Si los elementos creados son vá-lidos en html y xml, el navegador los mostrará en pan-talla. La necesidad de que todo el código cumpla conla sintaxis xml, sin dejar de ser html válido, hace quelos elementos vacíos como <hr> deban presentar supropio cierre (<hr></hr> o <hr/>). También es posi-ble incluir secciones <script> en el código que seránpresentadas como html y después ejecutadas por el na-vegador.

Lo más importante es la posibilidad de usar xsltpara crear nuevos elementos o eliminar otros incluidosen el documento fuente. Esto significa que xslt no estálimitado al modelo CSS de aplicación de estilo a ele-mentos existentes. Xslt presenta la posibilidad de co-piar elementos desde documento fuente al nuevo, usarestructuras de decisión para presentar sólo ciertos ele-mentos preseleccionados, crear nuevos u ordenar elcontenido del documento fuente de forma diferente ala original antes de presentarlo.

b. ¿Qué hace xslt? El principio básico de xslt enIE5 es que actúa como un “procesador” para transfor-mar cualquier documento xml7 en otro diferente. Sinembargo, las hojas de estilo xslt están escritas en xmlcomo cualquier otro tipo de documento. Por lo tanto,la entrada de datos del proceso xslt puede ser perfecta-mente una hoja de estilo xslt en lugar de un documen-to xml convencional8, según se ve en la figura 12.

El resultado del proceso es otro documento, peroéste podría asumir cualquier formato. La forma en quexslt procesa los datos permite que un nodo xml puedaser transformado en casi cualquier tipo de cadena detexto, incluyendo ascii. La gran ventaja de este plante-amiento es que proporciona una técnica automática deconversión entre diferentes tipos de datos o diferentesformatos.

¿Qué ocurre cuando se lee un documento xml conIE5? Lo que se obtiene en pantalla es el resultado deltrabajo de una hoja de estilo xslt. IE5 contiene una quese utiliza por defecto cuando se carga un documentoxml que no especifica otra hoja. Su propósito es mos-trar el documento de una forma más legible y obvia(desde la perspectiva xml). Se podría decir que IE5

Figura 7

Figura 8

Page 7: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas

El profesional de la información, vol. 10, nos 1-2, enero-febrero 200110

Antonio de la Rosa Piñero

“entiende” xml puesto que añade saltos de línea, in-dentaciones y signos + y – delante de los nodos consubelementos o los que se encuentran vacíos. Lo queocurre es que IE5 está aplicando su hoja de estilo pordefecto al documento xml para producir un resultadocomo el que se ve en la imagen de la figura 4.

c. ¿Cómo se trabaja con xslt? En términos gene-rales, CSS relaciona la información sobre el estilo conlos elementos donde lo va a aplicar especificando elnombre de estos elementos (como <p> o <em>) ousando una clase previamente definida (como .miesti-lo) que se aplica a un elemento utilizando su atributoclass.

Xslt es completamente diferente. Usa instruccionesde proceso especiales llamadas templates para especi-ficar los nodos–objeto9 a los que se les aplicará un con-junto de instrucciones de estilo. Los templates decla-ran un patrón o un filtro que pueden asociar con mu-cha precisión la información de estilo que contienencon elementos o grupos de ellos específicos. Los ele-mentos-objeto no deben tener el mismo nombre o con-tener atributos especiales. Hay muchas formas de es-pecificar un patrón, de forma que se seleccionen sólolos apropiados en el documento fuente xml.

d. Xslt en el futuro. Aunque es imposible estar ab-solutamente seguro de lo que va a ocurrir con xslt, lasrecomendaciones actuales del W3C dan valiosas pistasal respecto. Actualmente las transformaciones realiza-das con esta tecnología son sobre todo xml en html pa-ra que el contenido pueda ser presentado en el navega-dor. Hay planes para extender sus posibilidades y asípermitir conversiones a otros lenguajes, particular-mente aquellos mejor adaptados a funciones como re-sultado impreso, hablado, etc.

El borrador del W3C para xslt también proponetécnicas para dar formato a la información usando “ob-jetos de formato” o de “flujo” y un vocabulario de for-mato. Estos temas están en constante evolución, peroprobablemente resultarán en una nueva especificaciónxslfo (extensible style sheets: formatting) que se ocu-pará del estilo en profundidad mientras xslt se concen-tra en las transformaciones del contenido.

2. Enlazar hojas de estilo xslt con documentosxml. Una hoja de estilo xslt es simplemente un archi-vo de texto, igual que una del tipo CSS. Se puede vin-cular un documento xml con una xslt usando una ins-trucción de proceso de forma similar a lo que se hizoanteriormente para unirlo con una CSS:

<?xml-stylesheet type=”text/xsl” href=”miestilo.xsl”?>

Sólo es posible asociar una hoja de estilo xslt a undocumento; si se definen más de una, sólo la primeraserá interpretada y ejecutada. Si se especifican dos ho-

jas de estilo, una xslt y otra CSS, IE5 elegirá el primerformato. Otra circunstancia a tener en cuenta es que lashojas de estilo xslt sólo pueden cargarse desde el mis-mo dominio del documento xml al que están asocia-das. Esto es así por motivos de seguridad, ya que pue-den contener código script.

3. Templates xslt. Como ya se ha dicho, una hojade estilo xslt se compone de una o más instruccionesespeciales llamados templates. Cada uno especifica unpatrón (o un filtro) que se utiliza para emparejar eltemplate con el/los nodo/s objeto sobre los que actua-rá. También contienen información sobre cómo debenser presentados.

a. Una hoja de estilo xslt. Todas las instruccionesen una hoja de estilo xslt están escritas en sintaxis xmly se podrían considerar “elementos” xslt. En realidadson elementos xml ordinarios con el prefijo “xsl:”. Elnamespace10 definido para ese prefijo asigna significa-dos especiales a cada uno de esos elementos. El si-guiente código muestra una hoja de estilo xslt sencillaque contiene un solo template. Obsérvese que el na-mespace debe especificarse tal y como aparece en elejemplo para que pueda ser procesado por IE5:

<?xml version=”1.0”?>11

<xsl:stylesheet xmlns:xsl=”http://www.w3.org/TR/WD-xsl”>

<xsl:template match=”/”>

<xsl:value-of />

</xsl:template>

</xsl:stylesheet>

El código anterior presentará el texto del docu-mento fuente book.xml exactamente como está, con eltipo de letra por defecto del navegador. El código tie-ne un elemento raíz: <xsl:stylesheet>, y dentro de élun sólo elemento template: <xsl:template>, que espe-cifica un atributo de asociación “match” con el patrón“/” como valor, lo que significa que ese template seemparejará con el elemento raíz de book.xml. Final-mente, el contenido del template (la acción) es la ins-trucción xslt <xsl:value-of>. Este elemento le dice alprocesador: “considera como texto el contenido delnodo objeto y sus descendientes e insértalo en el do-cumento resultado”. Lo que se obtiene puede verse enla figura 5.

Figura 9

Page 8: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas

11El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001

Lenguajes de marcas aplicados a la transformación de estructuras documentales

La clave del funcionamiento de las hojas de estiloxslt es la forma en que los templates se asocian con loselementos del documento fuente xml a través del pa-trón especificado en el atributo “match=” del elemen-to <xsl:template>. Xslt utiliza la recursión para aplicara los elementos–objeto las instrucciones de estilo otransformación especificadas dentro de <xsl:templa-te> (en este caso la instrucción es simplemente<xsl:value-of />).

El ejemplo anterior usaba el elemento <xsl:tem-plate>:

<xsl:template match=”/”>

Aquí se especifica el patrón “/” mediante el cual seselecciona el nodo raíz del documento fuente xml. Demodo que este template se emparejará unívocamentecon ese elemento. La instrucción dentro del templateera el siguiente elemento xslt:

<xsl:value-of />

Esto provoca que el procesador xslt inserte en elresultado tan sólo el texto del nodo seleccionado y susdescendientes. En este caso es toda la cadena de ca-racteres del contenido del documento fuente, puestoque el nodo raíz contiene al resto de los nodos. Se pue-den especificar diferentes templates para cada tipo denodo usando la instrucción <xsl: apply-templates>con los patrones adecuados:

<xsl:apply-templates select=”patrón”/>

La forma más simple de seleccionar un nodo es re-ferenciándolo por su nombre —lo que asegura que laacción se llevará a cabo sobre todos los que tengan esenombre—, lo cual, en la mayoría de los casos, es loque se pretende conseguir. Sin embargo, la técnicamencionada (<xsl: apply-templates>) permite asociartemplates a los elementos hijo de la raíz, seleccionán-dolos mediante el patrón, especificado en el atributo“select”. Después, sucesivamente, se pueden añadirmás instrucciones <xsl: apply-templates> a esos nue-

vos templates para relacionarlos con los elementos hi-jo de los elementos anteriores y así sucesivamente, lle-gando a todos los niveles de profundidad del árbol do-cumental.

«Es siempre recomendable usarhojas de estilo externas por dosmotivos fundamentales: puedenmodificarse sin tocar el docu-mento fuente html y es posiblecompartirlas entre diferentesdocumentos»

En la hoja de estilo anterior un solo template seasociaba con el nodo raíz del documento fuente xml12,y la acción consistía en aplicarlo (y las instruccionesanidadas en él) a los elementos descendientes del no-do raíz. Mediante la recursión, los templates de la ho-ja de estilo se asocian a diferentes elementos del docu-mento fuente xml, comenzando por el nivel superior(el elemento raíz) y recorriendo el árbol del documen-to hacia abajo hasta localizar todos los elementos se-leccionados. Para ejemplificar este funcionamiento sepuede añadir un nuevo template a la hoja de estilo an-terior:

<?xml version=”1.0”?><xsl:stylesheet xmlns:xsl=”http://www.w3.org/TR/WD-xsl”>

<xsl:template match=”/”><xsl:apply-templates select=”//libro” />

</xsl:template><xsl:template match=”libro”>

<p><xsl:value-of /></p></xsl:template>

</xsl:stylesheet>

Lo que se ha hecho es sustituir el elemento<xsl:value-of> en el template original con<xsl:apply-templates select=”//libro”>, quecomunica al procesador xslt que debe aplicar eltemplate asociado con el patrón //libro a cadaelemento <libro> en el documento fuente xml(el patrón //libro se asocia con todos <libro> acualquier nivel por debajo del nodo raíz). Elnuevo template que se ha añadido a la hoja deestilo se asocia con //libro y las instruccionesanidadas dentro de él se ejecutarán para cada

<libro>. Quizás se ve un poco más claro en la imagende la figura 6.

En el template rodeado por la línea roja se usa denuevo el elemento <xsl:value-of> para dar formato alresultado de cada elemento <libro>. Se puede obser-var que, en este caso, se rodea el elemento <xsl:value-of> con la etiqueta html <p></p>, con lo que cada<libro> (y sus descendientes13) aparecerá en un párra-fo aparte. En la imagen de la figura 7 se puede apreciarel resultado.

Figura 10

Page 9: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas

El profesional de la información, vol. 10, nos 1-2, enero-febrero 200112

Antonio de la Rosa Piñero

b. Sintaxis IE5-xslt de asociación de patrones.El atributo “match” del elemento <xsl:template> pro-porciona varias posibilidades a la hora de especificarexactamente qué nodos (elementos o atributos) del do-cumento fuente xml deben ser procesados por un tem-plate particular. La primera hoja de estilo usaba “/”para referirse al nodo raíz, pero hay muchas más posi-bilidades. Básicamente hay dos formas de especificarnodos:

— Mediante la posición del nodo ogrupo de nodos en el árbol jerárquico deldocumento fuente.

— A través de la aplicación de un filtroque seleccione uno o varios nodos.

b.1. Operadores de posición para xslt eIE5. Para seleccionar un nodo o nodosusando su posición en el árbol del docu-mento fuente se usa un conjunto de opera-dores de posición o ruta; combinándolos seobtiene un patrón que, como se ha visto, seutiliza para escoger el nodo o nodos apropiados juntoa sus descendientes sobre los que posteriormente seejecutarán las acciones previstas en el template. Cuan-do no se especifica ninguno, el nodo “corriente” serála raíz del documento fuente. Los operadores de posi-ción son los de la tabla 1, mientras que los ejemplos dela tabla 2 ayudan a comprender esta sintaxis.

Los operadores de posición siempre devuelven to-dos los elementos que coinciden con el patrón. La fun-ción index() puede usarse para especificar un elemen-to particular dentro del conjunto de aquellos recupera-dos mientras que end() define el último nodo (tabla 3).

Por ejemplo, para retornar los detalles del últimoelemento <libro> del documento fuente xml, se usaríala siguiente hoja de estilo:

<?xml version=”1.0”?><xsl:stylesheet xmlns:xsl=”http://www.w3.org/TR/WD-xsl”>

<xsl:template match=”/”><xsl:apply-templates select=”//libro” />

</xsl:template><xsl:template match=”libro[end()]”>

El último elemento <libro> es:<p><b><xsl:value-of/></b></p>

</xsl:template></xsl:stylesheet>

La cual, actuando sobre el documento fuente: bo-ok.xml daría en el navegador lo que se ve en la figura8. Obsérvese que, como muchos operadores, la fun-ción end() sólo puede aplicarse a nodos que son hijosdel mismo padre. Por ejemplo, para encontrar el ele-mento <titulo> del último elemento <libro> tendría-mos que usar:

listadelibros/libro[end()]/titulo

Si utilizáramos:

listadelibros/libro/titulo[end()]

obtendríamos el último elemento <titulo> del pri-mer <libro>.

b.2. Operadores de filtro para xslt e IE5. Un filtroxslt tiene la forma: [operador patrón], donde opera-dor es un filtro opcional que define cómo se va a apli-car el patrón y patrón, es el filtro xslt que seleccionauno o varios elementos en el documento fuente basán-dose en diferentes criterios. Es posible elegir elemen-

tos basándose en:

— La existencia de elementos hijos.

— El valor de un elemento o de un ele-mento hijo.

— La presencia de atributos.

— El valor de éstos.

— Cualquier combinación de las posibili-dades anteriores.

El siguiente código, por ejemplo, usa el fil-tro xslt [titulo] para seleccionar solamente los elemen-tos <categoria> de libros que tengan elementos hijo<titulo> (por lo tanto no se seleccionarán elementos<libro> sin hijos <titulo>):

libro[titulo]/categoria

Para encontrar todos los libros que tengan hijos<titulo> y <categoria> se usarán dos filtros:

libro[titulo][categoria]

Para seleccionar un elemento por su valor (porejemplo, elementos <libro> que contengan un ele-mento <categoria> cuyo valor sea “Scripting”) se po-dría usar el siguiente código:

libro[categoria = ‘Scripting’]

Hay, además del =, varios operadores de compara-ción que pueden usarse:

— libro[ventas > 10000].

— libro[fecha_pub <= ‘1998-02-07’].

— libro[titulo != ‘Instant JavaScript’].

— libro[titulo $ine$ ‘Instant JavaScript’].

El último ejemplo usa un operador de comparación“no igual a” insensible a mayúsculas o minúsculas. Esdiferente del anterior, que sí tiene en cuenta esa dife-rencia. Un filtro puede usar también el operador @ pa-ra especificar un atributo del elemento actual. El si-guiente, por ejemplo, especifica que el elemento <li-bro> debe tener un atributo fecha_impr:

libro[@fecha_impr]

Cuando un filtro especifica el valor de un atributo,puede usar * para definir cualquier nombre de atribu-

Figura 11

Page 10: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas

13El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001

Lenguajes de marcas aplicados a la transformación de estructuras documentales

to. Con este, por ejemplo, sólo se seleccionan elemen-tos <autor> con un atributo tipo cuyo valor sea “con-trato”:

, autor[@tipo = ‘contrato’]

El siguiente filtro obtiene elementos <autor> enlos que cualquiera de sus atributos tenga un valor“contrato”:

autor[@* = ‘contrato’]

Finalmente, es posible construir filtros más com-plejos usando operadores booleanos para combinarotros simples. Los disponibles son: $and$, $or$ y$not$. En el siguiente código se seleccionan todos loselementos <libro> que tengan un elemento hijo <ca-tegoria> con el valor ‘Scripting’ pero no uno con elvalor ‘html’:

libro[categoria = ‘Scripting’ $and$ categoria != ‘html’]libro[categoria = ‘Scripting’ $and$ $not$ categoria = ‘html’]

b.3. Coincidencia de varios patrones con un sóloelemento. Si hay más de un template en una hoja de es-tilo, es fácil que algunos elementos del documentofuente estén asociados a más de un patrón en los tem-plates. Para impedir la duplicación en el resultado, elprocesador xslt no permitirá que se aplique más de untemplate a cada elemento y decide cuál debe usarsecomprobando todos los que tiene asociados y eligien-do el que mejor se corresponda con él. Sin embargo, esmejor evitar estas situaciones. Un ejemplo: un ele-mento <autor> hijo de un elemento <libro>, podríarelacionarse a varios templates diferentes: “libro/au-tor”, “libro/*” o “*”. En este caso el procesador esco-gería el pri-mero porquese trata de laa s o c i a c i ó nmás restricti-va, es decir,la que mejorse correspon-de con el ele-m e n t o<autor>.

3. Ele-mentos xsltbásicos. IE5soporta varios elementos o instrucciones xslt que pue-den usarse en una hoja de estilo xslt. Los fundamenta-les son:

— <xsl:stylesheet>.

— <xsl:template>.

— <xsl:define-template-set>.

— <xsl:apply-templates>.

— <xsl:copy>.

— <xsl:value-of>.

1. <xsl:stylesheet>. Es el elemento raíz de una ho-ja de estilo xslt y, por lo tanto, contiene a los demáselementos. En él se puede especificar el lenguaje descript usado en la hoja, si se utiliza alguno, y si nece-sitan preservarse o no los espacios blancos del docu-mento fuente en el que se da como resultado. Ademáscontiene una declaración de namespace para el prefijoxsl. La sintaxis es:

<xsl:stylesheet xmlns:xsl=”http://www.w3.org/TR/WD-xsl”indent-result=”yes”language=”JavaScript1.2”>

</xsl:stylesheet>

El namespace (xmlns) debe teclearse exactamentecomo en el ejemplo para que pueda ser leído por IE5.El atributo “indent-result” con valor positivo hace quelos espacios en blanco sean preservados en el docu-mento resultado.

2. <xsl:template>. Define un template específicodentro de una hoja de estilo xslt. Utiliza el atributo“match” cuyo valor es un patrón de asociación dadopara especificar los elementos en el documento fuentexml que serán seleccionados y procesados por la hojade estilo. También acepta un atributo para especificarel lenguaje script que se va a usar en el template. Lasintaxis es:

<xsl:template match=”patrón” language=”VBScript”>…

</xsl:template>

3. <xsl:defi-ne-template-set>. Esteelemento seusa paraagrupar unconjunto detemplates quetienen un ám-bito diferenteal del resto dela hoja de es-tilo. Puedeusarse dentro

de los elementos <xsl:stylesheet> o <xsl:template>.El siguiente código define dos templates que sólo seaplicarán cuando se use el elemento (<xsl:templatematch=”*”>) en el que se hallan anidadas:

<xsl:template match=”*”><xsl:define-template-set>

<xsl:template match=”libro”>…</xsl:template><xsl:template match=”autor”>…</xsl:template>

</xsl:define-template-set></xsl:apply-templates>

Figura 12

Page 11: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas

El profesional de la información, vol. 10, nos 1-2, enero-febrero 200114

Antonio de la Rosa Piñero

</xsl:template>

4. <xsl:apply-templates>. Este elemento le indicaal procesador que debe buscar y ejecutar los templatesasociados a los elementos hijos del elemento actual. Sihay un atributo “select” cuyo valor sea un patrón deasociación, los elementos seleccionados según ese pa-trón serán los que se procesen. También acepta el atri-buto “order-by” que determina el orden en que se pre-sentarán dichos elementos. El valor de este atributo esuna lista de patrones separados por “;” cada uno de loscuales puede ser precedido por “+” o “-” para indicarorden ascendente o descendente. Los patrones en lalista se procesarán en relación con aquel dado en elatributo “select”. La sintaxis es:

<xsl:apply-templates select=”patrón” order-by=”lista de patro-nes”/>

Para confeccionar una lista de libros ordenados al-fabéticamente por el nombre del autor, se usaría el si-guiente código:

<xsl:apply-templates select=”libro” order-by=”+autor/apellido; +autor/nombredepila”>

5. <xsl:copy14>. Simplemente copia los elementosseleccionados al resultado como están, es decir, inclu-yendo sus etiquetas. Ésta es la diferencia respecto de<xsl:value-of..> que sólo copiaba el contenido de loselementos elegidos:

<xsl:template match=”*”><xsl:copy />

</xsl:template>

6. <xsl:value-of>. Devuelve el valor de un nodoxml (y de sus descendientes si los tiene) en forma detexto que se inserta en el resultado. Se puede usar op-

cionalmente un patrón(como valor del atributo“select”) para seleccio-nar uno o varios ele-mentos en el documentofuente. Si se omite elatributo “select” se op-tará por el elemento ac-tual en el documentofuente. Si el patrón seasocia con más de unelemento, sólo se proce-sará el primero de ellos.Si el elemento tienedescendientes, sus valo-res se concatenarán enel resultado. La sintaxises:

<xsl:value-of select=”pa-trón” />

e. Generar html me-diante xslt. Los elementos xslt que se han comentadohasta ahora son suficientes para construir hojas de es-tilo de una complejidad razonable y con capacidad se-mejante a las construidas con CSS. Se ha visto cómoxslt procesa los documentos xml emparejando los tem-plates de la hoja de estilo con los elementos del docu-mento fuente y generando a partir de ahí un documen-to resultante en el que los elementos originales han si-do simplemente copiados o bien procesados hasta cier-to punto. La mayoría de los ejemplos anteriores gene-raban como resultado código html que podía ser ges-tionado por el navegador de la forma usual.

Para ver mejor cómo puede usarse xslt para darformato a un documento xml, en los siguientes ejem-plos se va a definir una hoja de estilo xslt que, asocia-da al archivo book.xml, producirá el mismo resultadoque la hoja de estilo CSS que se usó al principio. En laprimera sección de la hoja de estilo xslt se puede verque el template raíz (cuyo atributo “match” tiene elvalor “/”) contiene código html con el que se creará laestructura básica del documento resultante. Dentro delhtml hay un elemento <xsl:apply-templates...> que se-lecciona los elementos <libro> del documento fuente:

<?xml version=”1.0” ?><xsl:stylesheet xmlns:xsl=”http://www.w3.org/TR/WD-xsl”>

<xsl:template match=”/”><html>

<body><xsl:apply-templates select=”//libro” />

</body></html>

</xsl:template>

La hoja de estilo anterior transformará book.xml enel siguiente documento html:

Tabla 1

Page 12: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas

15El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001

Lenguajes de marcas aplicados a la transformación de estructuras documentales

<html><body>

resultado del proceso del primer elemento <libro>resultado del proceso del segundo elemento <libro>resultado del proceso del tercer elemento <libro> etc.

</body></html>

Al procesar el template raíz, el procesador xslt en-cuentra el patrón “//libro” y busca todos los elementos<libro> bajo la raíz en el documento fuente. Al en-contrarlos, busca en la hoja de estilo un template quese asocie con ellos, como el siguiente:

<xsl:template match=”libro”><span style=”display:block; margin:15px”>

<xsl:apply-templates select=”codigo” /><xsl:apply-templates select=”categoria” /><xsl:apply-templates select=”fecha_pub” /><xsl:apply-templates select=”titulo” />

</span></xsl:template>

Este template simplemente inserta un elementohtml <span> para cada elemento <libro>, dentro delcual se incluyen las referencias a los templates asigna-dos a cada uno de los elementos hijos de <libro>:<codigo>, <categoria>, etc.

Las propiedades de estilo usadas con el elemento<span> son exactamente las mismas que se utilizaronen la hoja de estilo CSS. El resultado es simplementeque el contenido de cada elemento <libro> apareceráen un bloque aparte, dado que se ha vuelto a usar lapropiedad display:block. Lo único que falta para com-pletar la hoja de estilo xslt es, por lo tanto, añadir elformato que deseemos a los templates asignados a loselementos: <codigo>, <categoria>, <fecha_pub> y<titulo>. Para <categoria>, por ejemplo, podría ser elsiguiente:

<xsl:template match=”categoria”><span style=”

display:inline;font-family:Ta-

homa, Arial,sans-serif;color:darkgray;

font-size:12pt;font-

weight:bold”><xsl:value-of />

</span></xsl:template>

De nuevo, es unsimple elemento<span> dentro del cualse inserta el contenidodel elemento <catego-ria> (en el documentofuente book.xml) me-diante el uso de la ins-trucción <xsl:value-of..>. El estilo especifi-cado es idéntico al que

se usó en la hoja de estilo CSS. Los otros tres tem-plates, para los elementos <codigo>, <fecha_pub> y<titulo>, siguen exactamente el mismo criterio. La ho-ja de estilo xslt completa es:

<?xml version=”1.0” ?><xsl:stylesheet xmlns:xsl=”http://www.w3.org/tr/wd-xsl”>

<xsl:template match=”/”><html>

<body><xsl:apply-templates select=”//libro” />

</body></html>

</xsl:template>

<xsl:template match=”libro”><span style=”display:block; margin:15px”>

<xsl:apply-templates select=”codigo” /><xsl:apply-templates select=”categoria” /><xsl:apply-templates select=”fecha_pub” /><xsl:apply-templates select=”titulo” />

</span></xsl:template>

<xsl:template match=”codigo”><span style=” display:inline;

font-family:tahoma, arial,sans-serif;font-size:10pt;font-weight:bold”>

<xsl:value-of /></span>

</xsl:template>

<xsl:template match=”categoria”><span style=” display:inline;

font-family:tahoma, arial,sans-serif;color:darkgray; font-size:12pt;font-weight:bold”>

<xsl:value-of /></span>

</xsl:template>

<xsl:template match=”fecha_pub”><span style=” display:inline;

font-family:tahoma, arial,sans-serif;color:red; font-size:10pt”>

Tabla 2

Page 13: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas

El profesional de la información, vol. 10, nos 1-2, enero-febrero 200116

Antonio de la Rosa Piñero

<xsl:value-of /></span>

</xsl:template>

<xsl:template match=”titulo”><span style=” display:inline;

font-family:tahoma, arial,sans-serif;font-size:12pt;color:white; background-color:black”>

<xsl:value-of /></span>

</xsl:template>

</xsl:stylesheet>

Y el resultado en el navegador es idéntico al con-seguido con CSS (figura 9).

Una diferencia sutil que no puede apreciarse en elejemplo es que con CSS los elementos se presentan enel orden en que están dispuestos dentro del documentofuente xml, mientras que con xslt aparecen según estándispuestos en los elementos <xsl:apply-templates...>en la hoja de estilo xslt. Después de haber comprobadoque xslt es capaz de llevar a cabo todo lo que CSS pue-de hacer, sería interesante ver si también es posible re-alizar otras que CSS no puede realizar. La forma máscoherente de comprobarlo es llevando el ejemplo ante-rior un poco más lejos. La imagen de la figura 10 es elresultado de aplicar una nueva hoja de estilo xslt al mis-mo documento book.xml. Es fácil apreciar que se tratade un resultado completamente diferente.

«El principio básico de xslt enIE5 es que actúa como un ‘pro-cesador’ para transformar cual-quier documento xml en otro di-ferente»

Aunque parezca muy distinto, básicamente siguetratándose de la transformación de un documento xmlen html. Sin embargo se usan algunos trucos comoañadir nuevos elementos al resultado o cambiar el or-den de presentación de los elementos xml originales.Ahora <categoria> aparece en primer lugar seguidode <titulo>. Esto podría haberse hecho usando las pro-piedades de posicionamiento absoluto en CSS, pero loque ocurre en esta página es que los elementos estánen celdas de una tabla html. Además los libros apare-cen ordenados alfabéticamente. ¿Qué ha cambiado enla hoja de estilo?

d.1. La hoja de estilo del ejemplo anterior puededividirse en tres partes.

— Primera parte:

<?xml version=”1.0” ?><xsl:stylesheet xmlns:xsl=”http://www.w3.org/TR/WD-xsl”><xsl:template match=”/”><html>

<body><div style=” font-family:Tahoma,Arial,sans-serif;

font-size:24pt; color:green;text-align:center; letter-spacing:8px;font-weight:bold”>

Una lista de libros para estudiar </div>

<hr/><table width=”100%” cellpadding=”5”>

<xsl:apply-templates select=”//libro” order-by=”+cate-goria” />

</table><div style=” font-family:Arial,sans-serif;

font-size:8pt; margin-left:10px”>2000 Antonio de la Rosa

</div> </body>

</html></xsl:template>

Para el encabezamiento se usa un elemento html<div> al que se aplican las propiedades de estilo apro-piadas. Después una línea horizontal <hr/>. A conti-nuación se incluye una tabla donde se inserta la ins-trucción <xslt:apply-templates...> encargada de selec-cionar los elementos <libro> del documento fuente. Ala tabla le sigue otro elemento <div> que contiene unanota al pie. En otras palabras, se crea una tabla htmlque va a contener el contenido del documento xml bo-ok.xml. Para hacer que cada elemento <libro> se in-serte en una fila separada en la tabla, se añade al códi-go anterior lo siguiente.

— Segunda parte:

<xsl:template match=”libro”><tr>

<xsl:apply-templates select=”categoria” /><xsl:apply-templates select=”titulo” /><xsl:apply-templates select=”codigo” />

</tr><tr>

<xsl:apply-templates select=”fecha_pub” />

</tr><tr><td colspan=”3”><hr/></td></tr>

</xsl:template>

En este ejemplo se puede ver cómo se cambia en elresultado el orden de los elementos. Sólo es necesarioespecificar el template para cada uno según se deseaque aparezcan: <categoria> en primer lugar, seguidopor <titulo>, <codigo> y <fecha_pub>. Este templa-te es más complicado por el hecho de que las celdasque van a contener los elementos <categoria> y <ti-tulo> deben abarcar dos columnas, mientras que la co-lumna final contiene <codigo> y <fecha_pub> en cel-das ordinarias. Esa es la razón para emplear la etique-ta <tr></tr> como se ha hecho porque, de esa forma,se fuerza al contenido del elemento <fecha_pub> a

Tabla 3

Page 14: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas

17El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001

Lenguajes de marcas aplicados a la transformación de estructuras documentales

aparecer en la primera celda disponible dentro de la si-guiente fila, es decir: debajo de la celda de <codigo>.Entre cada elemento <libro> hay otra fila que abarcalas tres columnas descritas y que contiene una líneahorizontal. Gráficamente se podría describir según latabla 4.

Para completar la hoja de estilo xslt que produce laimagen mostrada anteriormente, sólo se necesitan loscuatro templates referenciados en el código anterior ycorrespondientes a los elementos <categoria>, <titu-lo>, <codigo> y <fecha_pub>.

— Tercera parte:

<xsl:template match=”codigo”><td style=” font-family:Tahoma, Arial,sans-serif;

Font-size:10pt”>Código: <b><xsl:value-of /></b>

</td></xsl:template>

<xsl:template match=”categoria”><td rowspan=”2” style=” font-family:Comic Sans MS,

Arial,sans-serif;Color:darkblue; font-size:16pt;Font-weight:bold”>

<xsl:value-of /></td>

</xsl:template>

<xsl:template match=”fecha_pub”><td style=” font-family:Tahoma, Arial,sans-serif;

Font-size:10pt”>Fecha:<b><xsl:value-of /></b>

</td></xsl:template>

<xsl:template match=”titulo”><td rowspan=”2” style=”

Font-family:Lucida Casual Italic,sans-serif;Font-size:18pt;Color:darkred; Font-weight:bold”>

<i>”<xsl:value-of />”</i></td>

</xsl:template>

</xsl:stylesheet>

Puede observarse que las etiquetas <td></td> seinsertan en las posiciones adecuadas con los atributos“rowspan” correspondientes para las celdas que con-tienen los elementos <categoria> y <titulo>. No hay

necesidad de reorganizar los templates porque son eje-cutados en el orden especificado según el principal (elde <libro> en la segunda parte). En definitiva, sólohay que unir las tres partes comentadas en una sola ho-ja de estilo xslt, y ésta, asociada al documentobook.xml, producirá el resultado que ya se ha visto (fi-gura 10).

e. Crear elementos xml en el resultado. Con xsltse pueden crear nuevos elementos xml en el documen-to resultante, con lo cual se proporciona un método pa-ra mantener la documentación constantemente actuali-zada sin tener que cambiar, necesariamente, los docu-mentos fuente. Los elementos xslt con los que se con-sigue esto son:

— Xsl:attribute.

— Xsl:cdata.

— Xsl:comment.

— Xsl:element.

— Xsl:entity-ref.

— Xsl:pi.

— Xslt también tiene un elemento que devuelve elnombre del nodo actual en forma de texto: xsl:node-name.

1. Xsl:attribute. Crea un atributo xml con el nom-bre y contenido que se especifique:

<xsl:attribute name=”nombre del atributo”>Valor delatributo</xsl:attribute>

Por ejemplo, para añadir a todos lo elementos <au-tor> un atributo llamado “tipodeautor” y el valor “in-vestigador” se usaría el siguiente código:

<xsl:template match:”/”><xsl:apply-templates select=”//autor” />

</xsl:template>

<xsl:template match:”autor”><xsl:copy>

<xsl:attribute name=”tipodeautor”>Investigador</xsl:attri-bute>

</xsl:copy></xsl:template>

Si se quisiera añadir elatributo solamente alúltimo autor, habríaque modificar el códigode la siguiente forma:

<xsl:template match:”/”><xsl:apply-templates se-

lect=”//autor” /></xsl:template>

<xsl:template match:”au-tor[end()]”>

<xsl:copy><xsl:attribute na-

me=”tipodeautor”>investi-Tabla 4

Page 15: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas

El profesional de la información, vol. 10, nos 1-2, enero-febrero 200118

Antonio de la Rosa Piñero

gador</xsl:attribute></xsl:copy>

</xsl:template>

Este elemento puede ser muy útil, por ejemplo, pa-ra construir enlaces en los documentos xml. Para con-seguirlo se necesitará envolver el texto del vínculo conla etiqueta html <a></a> y añadir la URL apropiadacomo su atributo “href”, suponiendo que quiera usarsecomo texto del enlace, y que es el contenido del ele-mento <mienlace> en el documento fuente. Podríaconstruirse de la siguiente forma:

<xsl:template match:”//mienlace”><a>

<xsl:attribute name=”href”><xsl:value-of />

</xsl:attribute></a>

</xsl:template>

2. Xsl:cdata. Crea una sección cdata15 xml y sucontenido. El procesador xslt no lo procesará y, por lotanto, esta posibilidad puede usarse para crear elemen-tos xslt en el resultado si es necesario:

<xsl:cdata>contenido de la sección cdata</xsl:cdata>

3. Xsl:comment. Crea un comentario xml y su con-tenido:

<xsl:comment>Contenido del comentario</xsl:comment>

El siguiente código, por ejemplo produciría comoresultado < ! - -Esto es un comentario xml - - >:

<xsl:comment>Esto es un comentario xml</xsl:comment>

4. Xsl:element. Crea un elemento xml con el nom-bre y contenido que se especifique:

<xsl:element name=”nombre del elemento”>Contenido del ele-mento</xsl:element>

El siguiente código produciría como resultado<mielemento>hola</mielemento>:

<xsl:element name=”mielemento”>hola</xsl:element>

5. Xsl:entity-ref. Crea una entidad de referenciaxml con el nombre y valor que se defina:

<xsl:entity-ref name=”nombre de la entidad”>Contenido</xsl:en-tity-ref>

6. Xsl:pi. Produce una instrucción de proceso xmlcon el nombre y contenido señalados:

<xsl:pi name=”nombre”>Contenido</xsl:pi>

El siguiente caso, por ejemplo produciría la ins-trucción <?xml version=’1.0’?>:

<xsl:piname=”xml”>’1.0’</xsl:pi>

7. Xsl:node-name. De-vuelve el nombre delelemento actual en el do-cumento fuente xml enforma de texto, de modoque puede insertarse enel documento resultantecomo texto, y no comoelemento en sí. Sólo fun-ciona con nombres deelementos y no con co-mentarios, instruccionesde proceso etc. Para ha-cer una lista con losnombres de los elemen-tos de un documento,por ejemplo, se podríausar el siguiente código:

<xsl:template match=”/”><xsl:for-each se-

lect:”//”>Nombre del ele-

mento: <xsl:node-name/><br/>

</xsl:for-each></xsl:template>

f. Transformar un documento xml en un docu-mento xml diferente. Los ejemplos anteriores conver-tían xml en html para que aquel pudiera ser presenta-do sin problemas en el navegador. Pero en general, elplanteamiento tras xslt es la mutación de unos forma-tos en otros. Esto incluye la idea de transformar un do-cumento xml en otro diferente. Usando las caracterís-ticas de xslt es posible modificar la estructura y conte-nido de un documento xml, cambiar el orden y la apa-riencia de los elementos, seleccionar los datos que sequieren o no presentar y sumar nuevos elementos a laestructura original.

Tabla 5

Page 16: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas

19El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001

Lenguajes de marcas aplicados a la transformación de estructuras documentales

El siguiente ejemplo de hoja de estilo xslt toma eldocumento book.xml y crea otro nuevo a partir de élinsertando una instrucción de proceso y un comenta-rio, seleccionando solamente tres elementos del docu-mento original. También se limitan los libros presenta-dos usando un filtro que obtiene sólo aquellos publica-dos después del 31 de marzo de 1998:

<?xml version=”1.0” ?><xsl:stylesheet xmlns:xsl=”http://www.w3.org/TR/WD-xsl”>

<xsl:template match=”/”><xsl:pi name=”xml”>version=”1.0”</xsl:pi><xsl:comment>Nueva versión del documento

book.xml</xsl:comment><xsl:element name=”nuevoslibros”>

<xsl:apply-templates select=”//libro” /></xsl:element>

</xsl:template>

<xsl:template match=”libro[fecha_pub $gt$ ‘1998-03-31’]”><xsl:apply-templates select=”codigo” /><xsl:apply-templates select=”titulo” /><xsl:apply-templates select=”ventas” />

</xsl:template>

<xsl:template match=”codigo”><xsl:copy />

</xsl:template>

<xsl:template match=”titulo”><xsl:copy />

</xsl:template>

<xsl:template match=”ventas”><xsl:copy />

</xsl:template>

</xsl:stylesheet>

Después de seleccionar los elementos <libro> quese quieren insertar en el documento resultante, se es-pecifican los templates para los elementos hijo: <codi-go>, <titulo> y <ventas> que deben copiar los ele-mentos a los que se refieren en el documento resultan-te usando la instrucción <xslt:copy>. El resultado deaplicar la hoja de estilo anterior al documentobook.xml (a la izquierda) es un nuevo documento xml(a la derecha) con estructura y contenido diferentes(tabla 5).

«La forma en que xslt procesalos datos permite que un nodoxml pueda ser transformado encasi cualquier tipo de cadena detexto, incluyendo ascii»

g. Programación en xslt. Además de dar formatoal contenido de un documento xml o crear nuevos ele-mentos, el procesador xslt también puede controlar elresultado usando elementos de loop y estructuras dedecisión. Es parecido a la forma en que SQL puedeexaminar los resultados obtenidos al consultar una ba-se de datos. Además, también se pueden incluir scripts

en las hojas de estilo xslt, lo que resulta particular-mente útil pues es actualmente la única técnica para in-cluirlos en documentos xml puros.

g.1. Loops y estructuras de decisión. Hay cincoelementos básicos en xslt que proporcionan a las hojasde estilo la capacidad de definir loops y estructuras dedecisión:

— Xsl:for-each

— Xsl:if

— Xsl:choose

— Xsl:when

— Xsl:otherwise

1. Xsl:for-each. Se utiliza para detallar series deelementos xslt sobre los que se va a repetir un deter-minado proceso. Esta instrucción permite controlar elorden de los elementos a los que afecta sin tener queespecificar templates en un orden determinado (comoocurría con el elemento <xsl:apply-templates...>). Siel atributo “select” presenta algún valor, sólo se pro-cesarán los elementos hijos del elemento o aquellos alos que se refiera ese valor. También acepta un atribu-to opcional “order-by” que define el orden en que sepresentarán los elementos seleccionados. El valor deeste atributo es un conjunto de patrones delimitadospor “;”, cada uno de los cuales puede estar precedidopor “+” o “-“ para indicar orden ascendente o des-cendente. Su sintaxis general es:

<xsl:for-each select=”patrón” order-by=”conjunto de patro-nes”>…

</xsl:for-each>

Para conseguir, a partir de book.xml una lista denombres de autores en orden alfabético, se podría usarel siguiente código:

<xsl:for-each select=”libro/autor” order-by=”+apellido; +nombre-depila”>…Aquí los elementos xslt que deban procesarse para cada elemen-to <autor>.</xsl:for-each>

2. Xsl:if. Se usa para obtener un resultado condi-cionado al producido por una prueba, la cual no es másque un patrón xslt:

<xsl:if match=”patrón”>Resultado condicionado</xsl:if>

El siguiente código insertará el texto Investigadorsolamente si el atributo “tipodeautor” de <autor>presenta un valor “investigador”:

<xsl:if match=”autor[@tipodeautor=’investigador’]”>Investigador

</xsl:if>

3. Xsl:choose, Xsl:when y Xsl:otherwise. Se usanconjuntamente para proporcionar al procesador xslt ca-pacidad de bifurcación condicional. <xsl:when..> pre-

Page 17: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas

El profesional de la información, vol. 10, nos 1-2, enero-febrero 200120

Antonio de la Rosa Piñero

senta un atributo “match”, cuyo valor, como en el ca-so de <xsl:if..>, es la prueba sobre la que se construyela condición. Si el contenido del documento fuentexml supera esa prueba, entonces, el contenido de<xsl:when..> se incluirá en el resultado. Solamente seprocesa el primer elemento <xsl:when..> que supera lacondición y si no hay ninguno, se utiliza <xsl:other-wise..> en su lugar. Por ejemplo, dado el documentoxml numeros.xml:

<?xml version=”1.0”?><?xml-stylesheet type=”text/xsl” href=”numeros.xsl”?><pruebanumeros>

<numero>16</numero><numero>0</numero><numero>-78</numero><numero>1687698</numero><numero>-2</numero><numero>-0</numero>

</pruebanumeros>

se puede crear una hoja de estilo (numeros.xsl) queindique cuándo un número es positivo, negativo o ce-ro usando los elementos <xsl:choose>, <xsl:when> y<xsl:otherwise>:

<?xml version=”1.0” ?><xsl:stylesheet xmlns:xsl=”http://www.w3.org/tr/wd-xsl”><xsl:template match=”/”> <html><body><h3>prueba con cifras</h3><xsl:for-each select=”//numero”><xsl:value-of /><xsl:choose><xsl:when match=”*[. $gt$ 0]”>positivo</xsl:when><xsl:when match=”*[. $lt$ 0]”>negativo</xsl:when><xsl:otherwise>cero</xsl:otherwise>

</xsl:choose> <br/></xsl:for-each></body>

</html></xsl:template>

</xsl:stylesheet>

El template raíz crea la estructura básica de la pá-gina html que va a ser el resultado. Después se usa unloop <xsl:for-each..> para iterar el programa sobre to-dos los elementos <numero>. El elemento <xslt:value-of> inserta en el resultado el valor actual del númeroque está siendo procesado, por lo que <xsl:choose...>añade a ese valor el texto apropiado dependiendo de sies positivo, negativo o cero. El resultado de la hoja deestilo numeros.xsl actuando sobre el documento nume-ros.xml puede observarse en la figura 11.

«Xslt proporciona un elementoespecial que permite asociarscripting a los documentos xmldefiniéndolo en la hoja de estilo»

La traducción del código <xsl:when match=”*[.$gt$ 0]”>positivo</xsl:when> podría ser: “si cual-quiera de los elementos seleccionados presenta un va-

lor mayor que cero, entonces escribe el valor de eseelemento seguido de la cadena de caracteres positivo”.Si asociamos cada parte de la expresión anterior con sucorrespondiente en el código resultaría algo así: “sicualquiera (por eso el ‘*’) de los elementos seleccio-nados (<xsl:for-each select=”//numero”>) presentaun valor (por eso el ‘.’: el valor del elemento que se es-té procesando en ese momento) mayor que cero (“*[.$gt$ 0]” ($gt$ = greater than) ($lt$ = less than)), en-tonces escribe el valor de ese elemento (<xsl:value-of/>) seguido de la cadena de caracteres positivo”.

«Es posible incluir scripts enlas hojas de estilo xslt, lo queresulta particularmente útilpues es actualmente la únicatécnica para incluirlos en docu-mentos xml puros»

g.2. Añadir script a hojas de estilo xslt. Xslt pro-porciona distintos medios de manipular y presentar do-cumentos xml en el navegador. Por lo tanto ¿se podríapensar que a partir de ahora es posible abandonar htmly utilizar simplemente xml? Una de los temas que sedeben considerar es que en xml la etiqueta html<script> no significa nada. Para superar esta limita-ción, xslt proporciona un elemento especial que per-mite asociar scripting a los documentos xml definién-dolo en la hoja de estilo:

— Xsl:script

— Xsl:eval

1. Xsl:script. Este elemento define una secciónscript de la hoja de estilo que puede ejecutarse desdecualquier parte de la hoja de estilo simplemente invo-cándolo. <xsl:script...> acepta un atributo “langua-ge” que especifica el lenguaje de scripting que se va ausar:

<xsl:script language=”lenguaje de scripting”>...</xsl:script>

El siguiente ejemplo define una función que de-vuelve la hora y fecha actuales:

<xsl:script language=”VBScript”>Function getDateTime()

GetDateTime = Now()End Function

</xsl:script>

2. Xsl:eval. Se utiliza para evaluar una cadena decaracteres del script e insertar el resultado de la eva-luación en el nuevo documento. También acepta unatributo “language”:

<xsl:eval language=”lenguaje de scripting”>…

Page 18: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas
Page 19: Revista 101 (Page 4) - eprints.rclis.orgeprints.rclis.org/19317/1/1.pdf · 4 El profesional de la información, vol. 10, nos 1-2, enero-febrero 2001 Artículos Lenguajes de marcas

El profesional de la información, vol. 10, nos 1-2, enero-febrero 200122

Antonio de la Rosa Piñero

</xsl:eval>

Como ejemplo, se puede llamar a la función get-DateTime() definida antes:

<xsl:eval language=”VBScript”>getDateTime()</xsl:eval>

El mismo código podría servir para llamar a lafunción now():

<xsl:eval language=”VBScript”>Now()</xsl:eval>

Conclusión

En estas páginas se ha analizado una de las especi-ficaciones del entorno xml con más proyección de fu-turo. Si se tuvieran que resumir las características dexslt se podría hablar de su estructura jerárquica de for-ma y de su proximidad conceptual con la orientación aobjetos.

«Xslt pretende situarse justo amedio camino, estructurandolos objetos como xml, pero ges-tionando también su comporta-miento como en un lenguaje deprogramación»

¿Cuál es la diferencia fundamental entre un len-guaje de programación orientado a objetos y un len-guaje de etiquetas como xml? La disparidad reside enel concepto de comportamiento de los objetos. Unaparte importante de la orientación a objetos se basa enla especificación del comportamiento del objeto. Xmlespecifica sólo la estructura de los objetos (entiéndan-se éstos el documento y sus elementos), excluyendointencionadamente su comportamiento para dar a losdesarrolladores la máxima flexibilidad a la hora de uti-lizar esos datos. Pues bien, xslt pretende situarse justoa medio camino, estructurando los objetos como xml,pero gestionando también su comportamiento como enun lenguaje de programación.

La flexibilidad, compatibilidad y vocación wwwde esta especificación son otras tres característicasmuy importantes. Xslt es un tema muy amplio. Las po-sibilidades examinadas muy brevemente en este traba-jo han sido simplemente: seleccionar, modificar, darformato y presentar documentos xml transformándo-los en código html. Hay que tener presente que las fun-cionalidades reales de aplicación de esta tecnologíavan mucho más allá. Por otra parte no se ha comenta-do nada sobre otros parsers (más sofisticados que IE5)como: Oracle xsl, Saxon, Xalan, xt, ixslt, Stylus o 4xsltsimplemente para subrayar el hecho de que es una tec-nología al alcance de todo aquel que pueda descargaren su sistema la última versión del navegador IE.

Las preguntas que quedan por hacerse son: ¿dóndesería más útil emplear esta tecnología?, ¿qué tipo deaplicaciones documentales podrían desarrollarse conella? Las respuestas deberían darse en forma de pro-yectos concretos.

Notas

1. De ahí el nombre cascading style sheets, porque se aplican en cascadaa un documento.

2. El “punto” es una unidad absoluta de dimensión usada en tipografía.

3. Definida por el autor del código.

4. Este ejemplo volverá a usarse en varias ocasiones a lo largo del trabajo.

5. Este bloque en realidad estará formado por el contenido de los descen-dientes del elemento <libro>, que no es más que una forma abstracta deagrupar ese contenido.

6. Aceptadas por la aplicación en la que el documento vaya a ser presen-tado. Generalmente un navegador.

7. También otros formatos.

8. Por el mismo razonamiento, el input del proceso xslt también podríaser una DTD, un esquema, etc., lo que nos da una idea aproximada delpotencial de esta tecnología.

9. Generalmente elementos.

10. Xml permite a los desarrolladores crear sus propios lenguajes de eti-quetas para sus propios proyectos. Estos lenguajes pueden compartirsecon individuos que trabajen en el mismo tipo de proyecto a través de laweb. Un ejemplo claro es xslt. El lenguaje de transformación xslt debegenerar xml bien-formado que incluya etiquetas xslt. Por lo tanto se nece-sita un sistema para distinguir claramente cuándo esos elementos xml sonen realidad “instrucciones” xslt y cuándo son simples elementos de salida(incluso si ambos elementos tienen el mismo nombre). Esa es la razón deser de los namespaces, pues permiten que cada elemento pueda ser enten-dido en un entorno específico. Por ejemplo, los elementos xml que con-ciernen a las instrucciones de transformación xslt están en el namespace:http://www.w3.org/xsl/transform/1.0, mientras que los que sólo son ele-mentos xml de salida están en: http://www.w3.org/xsl/format/1.0.

11. Because xslt style sheets are xml documents they should begin withthe usual xml declaration.

12. El nodo raíz de book.xml era <listadelibros></listadelibros>.

13. <codigo/>, <categoria/>, <fecha_pub/> y <ventas/>.

14. <xslt:copy> es particularmente útil cuando el documento fuente XMcontiene etiquetas html como <b>, <i> o <table>. Usar el elementoxslt:copy es como decir al procesador: “Trata estas etiquetas xml como situvieran su significado html habitual”.

15. En xml el contenido de las secciones cdata o character data es trata-do como texto plano.