XML – Le Lengua nguaje je de prese esenta ntación ción de da datos
Tema ema 6. 6. Tr Transf ansfor orm maci ación de de doc docum umen enttos. os. XS XSLT
6.Transformación de documentos: XSLT Ha llegado el momento de encarar el hecho que XML no incorpora ninguna semántica semántica intrnseca de presentación! por lo que sin una tecnologa tecno loga apropiada aprop iada ning"n ning" n procesador proces ador sa#ra como representar repres entar el contenido de un documento! como no fuera en forma de una cadena indiferenciada de caracteres. $e hecho! cuando XML empe%ó su camino no e&ista ning"n na'egador capa% de mostrar sus documento documento como no fuera en forma de un simple te&to! lo que supona un paso hacia atrás respecto a HTML! que si interpreta el documento de una página (e# ) lo traduce en te&to e imágenes formateadas. *or ello manejar documentos XML! #ien por un humano #ien por una aplicación soft+are! conlle'a que difcilmente difcilmente se podrán usar en la forma en que se presentan presentan al ser accedidos ) en consecuencia ine'it ine'ita#l a#lem ement entee estos estos docum document entos os de#er de#erán án ser ser o#jet o#jeto o de alg"n alg"n tipo tipo de trans transfo form rmaci ación ón para para adaptarse ) ser "tiles en cada conte&to concreto. ,n el presente captulo se presentan las t-cnicas que permiten transformar un documento en otro! de forma que el resultado que se o#tenga se adapte a los distintos usos ) necesidades! que pueden ser mu) numerosas. omo simple refle&ión consid-rese la siguiente relación! que no pretende ser e&hausti'a de posi#ilidades/ •
*asarlo a HTML para mostrarlo en un determinado tipo de terminal en la (e#.
•
*onerlo en formato M01 2Ma3er 0nterchange 1ormat4 para posteriores intercam#ios.
•
$arle un estilo para su presentación ) pu#licación impresa.
•
*asarlo a (ML para presentarlo presentar lo so#re perif-ricos (5* (5*..
•
on'ertirlo a distintos dialectos XML para la transferencia de datos en 7.
•
on'ertirlo a te&to plano.
•
,tc.
,l uso de transformaciones de documentos se da en dos grandes escenarios/ en la con'ersión de datos entre aplicaciones XML ) en el proceso de presentación de documentos XML. ,n el primer caso ha) que recalcar que para este intercam#io no es posi#le limitarse a la simple transformación de datos XML a otros datos XML! )a que tam#i-n se de#en com#inar datos XML con otros que no lo sean ) en consecuencia ha) que dotar al XML de una tecnologa #ásica que permita las con'ersiones correspondientes. ,l segundo pro#lema surge de la propia arquitectura de la (e# ) de los propios requisitos de XML ) en consecuencia ha) que poder transformar los datos para poder presentarlos. 8esol'er la presentación de un documento XML es ine'ita#lemente complejo! no solo por los temas de formato sino tam#i-n por la necesidad de contar con t-cnicas que hagan de puente con las posi#ilidades especficas de cada perif-rico 2impresoras! 2i mpresoras! pantallas! panta llas! terminales de 'o%! etc.4 etc .4 a la hora que las personas puedan acceder a los contenidos de los documentos. 8esol'er la presentación de un documento XML es ine'ita#lemente complejo tanto por los temas de formato relacionados con la estricta presentación como por la necesidad de contar con t-cnicas que hagan de puente con las posi#ilidades especficas de cada perif-rico 2impresoras! 2i mpresoras! pantallas! panta llas! terminales de 'o%! etc.4 etc .4 a la hora de proceder a la presentación de un documento. ,sta adaptación es imprescindi#le! )a que a modo de ejemplo ha) que estar preparados tanto para que -sta pueda ser o#jeto de impresión! como de pu#licación en la (e#! siendo o#'io que tanto una como otra! presentan sus particulares 9 $e 7:
XML – Le Lengua nguaje je de prese esenta ntación ción de da datos
Tema ema 6. 6. Tr Transf ansfor orm maci ación de de doc docum umen enttos. os. XS XSLT
caractersticas. $esde los inicios del XML se fue consciente de la necesidad de disponer de herramientas que ejercieran un control detallado de la presentación en la (e# ) para ello se recurrió a los S como una tecnologa )a e&istente que se aplica#a con -&ito a los documentos HTML ) que se adaptó al XML sin grandes dificultades. La utili%ación de los SS para mostrar los documentos XML )a la hemos tratado en un captulo anterior. anterior.
5 pesar de su #uen funcionamiento! SS es incapa% de ejecutar operaciones lógicas! tales como constr construcc uccion iones es ;if
(> empe empe%a %ara ra a trat tratar ar de supe supera rarr las las posi#ilidades de SS e impulsó XSL 2,&tensi#le 2,&tensi# le St)lesheet St)leshee t Language4 como un metalenguaje para e&presar hojas de estilo. La idea consiste en utili%ar una clase de documentos documentos XML que definen una hoja de estilo ) que e&prese la forma como un contenido estructurado en un documento XML puede presentarse en distintos entornos. ,n otras pala#ras! una forma de hacer que el contenido XML pueda asociarse a un estilo a un dise?o ) a una paginación! p aginación! que generalice gen eralice lo que qu e SS consigue en la 'entana de un na'egador. Objetivos.
@ue el alumno entienda qu- es una hoja de estilo XSLT XSLT ) por qu- es necesaria. @ue entienda como funcionan las hojas de estilo junto con el motor XSL. Sa#er utili%ar los templates par crear hojas de estilo sencillas! utili%ar los elemetos de la gramática &sl ) sa#er crear hojas de estilo XSLT s+encillos. Contenidos.
6.9. A@u- es XSLB 6.7. Aómo funcionan las hojas de estilo XSLTB 6.>. *lantillas 6.C. ,lementos XSLT XSLT 6.D. ,jercicios
6.1. ¿Qué es XSL? ,l lenguaje de hoja de estilo e&tensi#le o ampliado! tal ) como su nom#re indica! es un lenguaje #asado en XML que se usa para crear cr ear hojas de estilo. estilo . En motor de hojas de estilo es tilo usa hojas de estilo para transformar documentos XML en otros tipos de documentos ) para formatear la salida. ,n estas hojas de estilo se define el dise?o del documento de salida ) desde dónde se o#tienen los datos en el documento de entrada. ,s decir! ;los datos que se utili%an están en un sitio del documento de entrada ) de#en tener una distri#ución determinada en el documento de salida=. ,n terminologa XSL! el documento de entrada se denomina ár#ol de origen ) el documento de salida se denomina ár#ol de resultado. ajo XSL e&isten en realidad dos lenguajes completamente diferentes/ ●
En lenguaje de transformación! denominado XSLT
●
En lenguaje utili%ado para descri#ir la 'isuali%ación de los documentos XML! que se 7 $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
denomina XSL Formating Objects. *or su puesto! los dos lenguajes se pueden usar juntos! de manera que XSLT transforma los datos ) XSL Formating Objects se encarga de la 'isuali%ación de los datos! de manera similar las hojas de estilo en cascada. F#ser'ar que además del XML #ien formado! XSLT tam#i-n puede producir HTML! o incluso te&to regular. $e hecho! uno de los usos más promocionados de XSLT es la trasformación de XML en documentos HTML para su 'isuali%ación en un na'egador.
6.2. ¿Cómo funcionan las hoas de estilo XSLT? Las hojas de estilo XSLT se constru)en so#re estructuras denominadas plantillas. Ena plantilla especifica qu- es lo que ha) que #uscar en el ár#ol de origen ) qu- es lo que ha) que colocar en el ár#ol de resultado. XSLT está escrito en XML! lo que significa que e&isten elementos ) atri#utos XSLT especiales que se utili%an para crear nuestras hojas de estilo. En ejemplo sencillo/ G&sl/template match=first=I JSe encontró la primera etiquetaK G&sl/templateI Las plantillas 2templates4 están definidas usando el elemento XSLT G&sl/templateI. ,n esta plantilla e&isten dos partes importantes/ el atri#uto match ) los contenidos de la plantilla. ,L atri#uto match especifica un modelo en el ár#ol de origen esta plantilla se aplicará para todos los nodos del ár#ol que coincida en el modelo del patrón. ,n este caso se aplica a todos los elementos denominados first . ,l contenido de una plantilla puede ser! ) de hecho suele ser! mucho más complejo que simplemente producir la salida de te&to. ,&isten 'arios elementos XSLT que se pueden insertar en la plantilla para reali%ar las distintas acciones. *or ejemplo e&iste un elemento G&sl/'alue
> $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
6.2.1. !n eem"lo 5unque es pronto para entender todos los elementos de la hoja de estilo 'amos a 'er un ejemplo o que nos dará una idea general de lo que puede hacer XSL. ,n puntos posteriores 'eremos que significa cada uno de los elementos que util%aremos en el ejemplo. *rimero necesitamos un documento XML que posteriormente transformaremos/ GB&ml 'ersionP9.QPBI GorderI GsalespersonINohn $oeGsalespersonI GitemI*roduction<lass (idgetGitemI Gquantit)I96Gquantit)I GdateI GmonthI9GmonthI Gda)I99Gda)I G)earI7QQQG)earI GdateI GcustomerISall) 1in3elsteinGcustomerI GorderI 5hora 'eamos la hoja de estilo/ GB&ml 'ersionR9.QRBI G#sl:st$lesheet 'ersion9.Q &mlns/&slhttp/+++.+>.org9XSLTransformI G#sl:out"ut method&ml indent)esI G#sl:tem"late matchI GorderI GdateI G#sl:%alue&of selectorderdate)earIG#sl:%alue&of selectorderdatemonthIG#sl:%alue&of selectorderdateda)I GdateI GcustomerIompan) 5GcustomerI GitemI G#sl:a""l$&tem"lates select orderitemI Gquantit)IG#sl:%alue&of selectorderquantit) IGquantit)I GitemI GorderI G'#sl:tem"lateI G#sl:tem"late matchitemI Gpart
C $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
GpartGsI GstringsI @ueremos o#tener un código HTML asociado a este XML equi'alente al siguiente/ GHTMLI GF$VI G*I *ara 9 G*I G*I *ara 7 G*I G*I *ara > G*I GF$VI GHTMLI *ara ello utili%amos el siguiente código XSL/ GB&ml 'ersion9.Q BI G#sl:st$lesheet 'ersion9.Q &mlns/&slhttp/+++.+>.org9XSLTransformI G#sl:tem"late matchI GHTMLI D $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
GF$VI G#sl:for&each select stringssI G*IG#sl:%alue&of select. IG*I G#sl:for&eachI GF$VI GHTMLI G#sl:tem"lateI G#sl:st$lesheetI *odemos 'er que la hoja de estilo se parece mucho a la salida! con algunos elementos XSLT com#inados en el código para especificar dónde se coloca el contenido! estos son los elementos con el prefijo xsl. ,l motor XSL hará lo siguiente/ 2a4uscará la ra% del documento en el ár#ol de origen 2es decir! la ra% 'irtual de la jerarqua del documento4. 2#4omparará la ra% del documento con el contenido de la plantilla en nuestra hoja de estilo. 2c4*roducirá la salida de los elementos HTML de la salida 2d4 *rocesará los elementos XSLT de la plantilla. , nuestro caso el G&sl/for
8ecordemos del captulo anterior 2X*5TH4 que los ár#oles formados a partir de un XML siempre tienen un nodo ra% 'irtual 24 del cuál cuelga el nodo ra% de nuestro documento. 6 $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
6.). *lantillas Va conocemos conceptualmente la idea propuesta por las plantillas. 8ealmente las podramos considerar el alma de XSLT. Las hojas de estilo son simplemente una colección de estas plantillas! que se aplican a los documentos de entrada para crear el documento de salida. Ueamos de nue'o la hoja de estilo del punto anterior/ GB&ml 'ersion9.Q BI G#sl:st$lesheet 'ersion9.Q &mlns/&slhttp/+++.+>.org9XSLTransformI G&sl/template matchI GHTMLI GF$VI G&sl/for
La sección !rbol de origen a la que se aplica la plantilla.
●
La salida que se insertará en el ár#ol de resultado.
La sección ár#ol de origen contra la que se está reali%ando la comparación se especifica en el atri#uto match. ,n esta caso hemos especificado match"#$#% que significa que la plantilla se compara con la ra% del documento. Todo lo que está dentro de la plantilla es lo que será la salida del ár#ol de resultado. Todos los elementos XML normales o te&to que aparecen del elemento &xmltemplate' terminará en el documento de salida tal cual está. Todos los elementos con el prefijo O&sl/P indican al procesador que de#erá hacerse algo con ellos.
6.).1. +L orden de las o"eraciones de XSLT Si una hoja de estilo tiene más de una plantilla! entonces! Aómo sa#emos cual actuará primeroB ,n realidad el procesador XSL inicia el proceso a partir de la comparación de la ra% del documento con la plantilla en la hoja de estilo que mejor se adapte en la ma)ora de los casos ha#rá una sola. Si no se especifica una plantilla en nuestro documento! XSLT suministra una predeterminadaa que simplemente aplica cualquier otra plantilla que e&ista. La plantilla predeterminada se define de la siguiente manera/ G&sl/template match =YZ=I G&sl/appl)
[ $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
,sto reali%e la compro#ación con todos los elementos del document! o la ra% del documento ) llama a G&sl/appl)
6.).2. ¿Cómo afectan las "lantillas al nodo de conte#to? Ha) que tener en cuenta que en XSLT lo que la plantilla utilice en su atri#uto match se con'ierte en el nodo de conte&to de esa plantilla. ,sto significa que todas las e&presiones X*5TH dentro de la plantilla son relati'as a ese nodo. Si tomamos el siguiente ejemplo/ G&sl/template match=ordertem=I G&sl/'alue
6.,. +lementos XSLT ,n este apartado no 'amos a listar todos los elementos disponi#les en XSLT. Simplemente presentaremos los más comunes que pro#a#lemente podamos encontrar.
6.,.1. St$lesheet ,l elemento G&sl/st)lesheetI es el elemento ra% de casi todas las hojas de estilo XSLT ) se utili%a de la siguiente manera/ G#sl:st$lesheet 'ersion9.Q &mlns/&slhttp/+++.+>.org9XSLTransformI ,ste elemento siempre lo aplicamos igual mientra no cam#ie la 'ersión o el espacio de nom#res.
6.,.2. Tem"late Tal ) como )a hemos 'isto el elemento G&sl/templateI es el elemento utili%ado para definir las plantillas. ,ste elemento es mu) simple/ G#sl:tem"late match=Xpath mode=mode name=I
e&pression=
name=template
name=
priorit)=num#er=
,l atri#uto match es para indicar el modelo X*ath que se comparará con el ár#ol de origen. Lo que especificamos es el tipo de nodo que se selecciona! no la ruta de acceso a un nodo particular. *or ejemplo la e&presión X*ath ;namefirst= significa/ 'e a la ra% del documento. Luego al elemento hijo llamado OnameP ) despu-s al hijo de este llamado OfirstP. *ero si incluimos esta e&presión en el elemento template como match=namefirst=! significa #uscar la coincidencia de todo elemento : $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
GfirstI que sea hijo de un elemento GnameI ) que a su 'e% sea hijo del nodo ra% del documento. 8ecordar que como hemos 'isto anteriormente cuando el motor XSLT puede aplicar dos plantillas so#re un mismo nodo siempre elige la más especifica. *or ejemplo si tenemos las siguientes plantillas definidas/ G&sl/template match=name=I G&sl/template match=name\.PNohnP]=I En elemento GnameI con un 'alor diferente a ONohnP utili%ará la primera plantilla. Mientras que un elemento GnameI con 'alor ONohnP utili%ará la segunda por ser más especfica. ,n caso de poder aplicar dos plantillas se utili%a el atri#uto priorit( para o#ligar a elegir una so#re la otra. Tam#i-n podemos crear plantillas con nom#re utili%ando el atri#uto name. ,sto nos permitirá llamar a una plantilla desde cualquier parte del documento XSLT.
6.,.). a""l$&tem"lates ,l elemento G&sl/appl)
$e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
5 continuación creamos la hoja de estilo para este código XML. *rimero utili%amos una plantilla para crear los elementos principales HTML. Luego llamamos a G&sl/appl)
5hora si aplicamos la plantilla a nuestro documento XML o#tendremos el siguiente código HMTL/
9Q $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
,ste resultado como se puede apreciar es una página (, completa.! que podemos 'er en cualquier na'egador. ,n el mismo Cooktop si pulsamos so#re la "ltima pesta?a result)html* nos simula como se 'era el resultado en un na'egador/
Uamos a intentar e&plicar cómo ha sucedido todo. $espu-s que el procesador XSL ha cargado el documento XML ) la hoja de estilo XSLT! genera una instancia de la plantilla que coincide con la ra% del documento. ,sta plantilla genera la salida de las etiquetas iniciales GHTMLI! GH,5$I! GT0TL,I ) GF$VI. Luego se encuentra con el elemento G&sl/appl)
6.,.,. %alue&of ,l ejemplo anterior ha estado #ien para comprender el funcionamiento de las plantillas. *ero es el momento de hacer algo más producti'o con la información de nuestro ár#ol de entrada. *ara ello 'amos a utili%ar el elemento G&sl/'alue
99 $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
G#sl:%alue&of select=.=I 0nserte *$5T5 desde el nodo de conte&to en la salida. V/ G#sl:%alue&of select=customer_id=I 0nserta el te&to del atri#uto id del elemento GcustomerI. ,l atri#uto disble+ouput+scaping es opcional su 'alor por defecto es no. Sir'e para indicar al procesador que de#e hacer con las secuencias de escape que podemos encontrar en los documentos XML. omo por ejemplo ;,amp-#o ; ,lt-#. Si el 'alor del atri#uto es no 2por defecto4 copiará la secuencia de escape en el ár#ol de salida. Si el 'alor es (es escri#irá en la salida el carácter asociado a la secuencia de escape! ;,# ) ;&# en nuestro ejemplo. Modificar el ejemplo anterior para conseguir que la salida HMTL sea la siguiente/
6.,.-. out"ut 5nteriormente ha#amos mencionado que XSLT puede generar salida XML! HTML o incluso formato de te&to simple. ,l elemento G&sl/outputI nos permite especificar el m-todo que usaremos. Si se inclu)e en nuestra hoja de estilo de#e ser un hijo directo de G&sl/st)lesheetI. ,n XSLT! los elementos que son hijos directos del elemento G&sl/st)lesheetI se denominan elementos de ni'el superior. La siguiente es la sinta&is de G&sl/outputI/ G#sl:out"ut method=&ml ZhtmlZte&t= 'ersion='ersion= encoding=encoding= standalone=)esZ no= indent=)esZno=I ,l atri#uto method especifica el tipo de salida que se producirá. Si no se especifica el elemento G&sl/outputI ) el elemento ra% del ár#ol de salida es GHTMLI o GhtmlI entonces el m-todo de salida predeterminado será html . ,n caso contrario será xml . Los atri#utos version% encoding ( standalone se pueden utili%ar cuando el m-todo de salida es xml . Los 'alores especificados se utili%arán para crear la declaración XML del ár#ol de resultado. 97 $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
,l atri#uto indent tiene como 'alor por defecto no. ,sto hace que la salida se escri#a como una secuencia de elementos sin ning"n tipo de orden! por lo tanto la lectura de este documento final no será nada clara para una persona. Sin em#argo si utili%amos el 'alor (es el ár#ol de salida se escri#irá en un fichero de forma legi#le para una persona. ada elemento en una lnea ) los elementos hijos se irán indentando de forma que se 'ea a simple 'ista qui-n es hijo de qui-n. ,l 'alor del parámetro de#emos considerarlo desde el punto de 'ista de cómo 'amos a utili%ar el fichero de salida. Si lo 'a a tratar automáticamente una aplicación no necesitamos que estindentado )a que el programa lo 'a a entender igual. Si es para leerlo una persona lo mejor es que est- indentado si no será difcil de comprender.
6.,.6. element ,n ejemplos anteriores )a hemos 'isto como insertar elementos directamente en el ár#ol de resultado. *ero! A@u- ocurre si no sa#emos de antemano el nom#re de estos elementosB ,l elemento G&sl/elementI nos permite crear elementos de manera dinámica/ G#sl:element name=element name= use. generará en el ár#ol de salida los siguientes elementos/ GNuanIM) Te&t GNuanI! G$a'idI M) Te&t G$a'idI W
6.,.. attri/ute Similarmente a los que sucede con G&sl/elementI! G&sl/attri#uteI se puede usar para a?adir dinámicamente atri#utos a un elemento. GnameIG#sl:attri/ute name=id=I79>G&sl/attri#uteIarlotaGnameI La lnea anterior producirá el siguiente resultado/ ;Gname id79>IarlotaGnameI= GnameIG#sl:attri/ute name . bI79>G&sl/attri#uteIarlotaGnameI L5 lnea anterior hará lo mismo solo que el nom#re del atri#uto será el te&to del nodo de conte&to. Ha) que tener en cuenta que el elemento G&sl/attri#uteI de#e ir siempre detrás de la declaración del elemento al que queremos a?adir el atri#uto.
6.,.0. te#t ,l elemento G&sl/te&tI inserta algo de te&to 2*$5T54 en el ár#ol de resultado/
9> $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
G#sl:te#t disa#le