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
6.,.. f $ chose 3*rocesamiento condicional4 Todos los lenguajes de programación nos de#en permitir reali%ar elecciones! )a que en caso contrario su utilidad sera mu) escasa. XSLT no es una e&cepción a esa regla! ) nos #rinda un par de elementos para reali%ar elecciones/ G&sl/ifI ) G&sl/chooseI/ G&sl/if test=e&presión #ooleana=I
G&sl/chooseI G&sl/+hen test=e&presión #ooleana=I G&sl/+hen test=e&presión #ooleana=I G&sl/other+iseI G&sl/&hooseI *ara am#os elementos! la e&pression #ooleana es simplemente una e&presión X*ath que se con'ierte a un 'alor #ooleano 2siguiendo las reglas de la función #oolean24 'ista en el tema anterior4. G&sl/if test=name=I Se encuentra el elemento name. G.&sl/ifI *ara el ejemplo anterior si e&iste el elemento &name' que sea hijo del elemento de conte&to se insertará el te&to ;Se encuentra el elemento name=. Si no e&iste el elemento no se insertará nada. G&sl/chooseI G&sl/+hen test=num#er\. gt 7QQQ=IEn n"mero grande G&sl/+henI G&sl/+hen test=num#er\. gt 9QQQ=IEn n"mero mediano G&sl/+henI G&sl/other+iseIEn numero peque?o G&sl/other+iseI G&sl/&hooseI
9C $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
,n un elemento G&sl/chooseI tan pronto como una de las e&presiones de compro#ación de e'al"a como cierta! el control del proceso sale del elemento G&sl/chooseI. on esto! se quiere dejar claro! que aunque dos e&presiones se puedan e'aluar como ciertas solo se ejecutará una! la primera. Ueamos un ejemplo. Supongamos que tenemos una #ase de datos que es capa% de de'ol'ernos la información en formato XML como la que sigue/ GB&ml 'ersion9.Q BI Gempleado 1ullSecurit)9I Gnom#reI Nuan `arciaGnom#reI GdepartamentoIUentasGdepartamentoI GtelefonoI264 DDD DD DDGe&tensionIDDDDGe&tensionIGtelefonoI GsalarioI7CQQQGsalarioI GareaI>GareaI GempleadoI ,l atri#uto FullSecurit( está determinado por el identificador del usuario que pide la información. ;9= indica miem#ro de recursos humanos que tiene acceso a la información de salarios ) un ;Q= indica que no tiene acceso a esta información. La empresa está su#di'idida en di'ersas u#icaciones ) area nos indica la u#icación del empleado. @ueremos generar un documento HTML a partir del documento XML anterior donde se muestre la información del empleado. *ara ello 'amos a crear tres plantillas. La primera generará la ma)or parte del contenido HTML. Luefo utili%aremos dos más para los casos especiales del tel-fono ) del área. GB&ml 'ersion9.Q BI G#sl:st$lesheet 'ersion9.Q &mlns/&slhttp/+++.+>.org9XSLTransformI G#sl:tem"late matchI GHTMLI GH,5$I GT0TL,I G#sl:%alue&of selectempleadonom#reIGT0TL,I GH,5$I GF$VI Gh9IG#sl:%alue&of selectempleadonom#reIGh9I GpI$epartamento/ G#sl:%alue
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
G#sl:(hen testnum#er2.4 9IUalenciaG#sl:(henI G#sl:(hen testnum#er2.4 7IastellónG#sl:(henI G#sl:(hen testnum#er2.4 >I5licanteG#sl:(henI G#sl:other(iseILocali%ación desconocidaG#sl:other(iseI G#sl:chooseI G#sl:tem"lateI G#sl:st$lesheetI ,L resultado de aplicar esta hoja de estilo al XML inicial sera el siguiente/
omo podemos 'er en nuestro caso podemos 'er el salario. *ro#ar a cam#iar el 'alor del parámetro FullSecurit( ) 'er que el Salario aparece o desaparece en función de ese 'alor. 0gual que si cam#iamos el 'alor del elemento GareaI de#e cam#iar la locali%ación.
6.,.15. for&each ,n muchos casos es necesario reali%ar un procesamiento especfico para 'arios nodos del ár#ol de origen. *or ejemplo cuando 'imos el elemento G&sl/apl)
96 $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
G&ls/for.org9XSLTransformI G#sl:tem"late matchI GHTMLI GH,5$I GT0TL,IListaGT0TL,I GH,5$I GF$VI G#sl:for&each selectsimplenameI G*IG&sl/'alue
9[ $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
@ue es el mismo que conseguimos con otro XSLT. *or tanto ) como en todo lenguaje de programación en XSLT tampoco ha) una forma "nica de hacer las cosas ) cada uno puede crear diferentes XSLT que generen un mismo resultado.
6.,.11. co"$&of ,n muchos casos el ár#ol de resultado será similar al ár#ol de entrada. @ui%á e&istan incluso secciones largas que sean e&actamente iguales. ,l elemento G&sl/cop).org9XSLTransformI G#sl:out"ut method&ml indent)esI G#sl:tem"late matchI G#sl:chooseI G#sl:(hen testnum#er2empleado_1ullSecurit)4I G#sl:co"$&of selectI G#sl:(henI G&sl:other(iseI 9: $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
G#sl:element nameempleadoI G#sl:attri/ute name1ullSecurit)I G#sl:%alue&of selectempleado_1ullSecurit)I G#sl:attri/uteI G#sl:for&each selectempleadoY\not2self//salario4]I G#sl:co"$&of select.I G#sl:for&eachI G#sl:elementI G#sl:other(iseI G#sl:chooseI G#sl:tem"lateI G#sl:st$lesheetI omo podemos 'er la plantilla anterior se compone principalmente de dos partes. La primera/ G#sl:(hen testnum#er2empleado_1ullSecurit)4I G#sl:co"$&of selectI G#sl:(henI $onde cuando el ni'el de seguridad del usuario es el indicado copiamos el XML del ár#ol de entrada tal cual en el ár#ol de resultado. La segunda/ G&sl:other(iseI G#sl:element nameempleadoI G#sl:attri/ute name1ullSecurit)I G#sl:%alue&of selectempleado_1ullSecurit)I G#sl:attri/uteI G#sl:for&each selectempleadoY\not2self//salario4]I G#sl:co"$&of select.I G#sl:for&eachI G#sl:elementI G#sl:other(iseI $onde se reconstru)e de nue'o el ár#ol pero sin el elemento GsalarioI. *ara ello creamos un elemento empleado! le agregamos el parámetro FullSecurit( ) a continuación copiamos todos los hijos de GempleadoI e&cepto el hijo GsalarioI.
6.,.12. co"$ ,l elemento G&sl/cop)I a diferencia del anterior simplemente copia el nodo de conte&to. Los hijos ) atri#utos del nodo de conte&to no se copian al ár#ol de resultado. *or ejemplo si tenemos el siguiente XML/ GnameI GfirstINohnGfirstI GmidleI1it%geraldGmidleI GlastI$oeGlastI GnameI 9 $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
V utli%amos la siguiente plantilla/ G&sl/template match=name=I G&sl/cop)I G&sl/templateI La salida será/ GnameI
*ero si utili%amos la siguiente plantilla/ G&sl/template match=name=I G&sl/cop)I G#lahIG&sl/'alue
6.,.1).Sort ,n XSLT la clasificación se reali%a a?adiendo uno o más elementos G&sl/sortI a un elemento G&sl/appl).org9XSLTransformI G#sl:tem"late matchI GHTMLI GH,5$I GT0TL,IListaGT0TL,I GH,5$I GF$VI G#sl:for&each selectsimplenameI G#sl:sort select=.=I G*IG&sl/'alue
7Q $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
GF$VI GHTMLI G#sl:tem"lateI G#sl:st$lesheetI 5hora la salida de nuestro XSLT será la siguiente/
$onde podemos apreciar como el procesador ha ordenado los elementos GnameI antes de procesarlos.
6.,.1,.aria/les7 constantes $ "lantillas con nom/re Todos los que hemos tra#ajado con lenguajes de programación estamos familiari%ados con las 'aria#les ) las constantes. *or ejemplo en Na'a podemos definirlas as/ int int5ge >Q final int csng*0 >.9C ,n el código nosotros siempre podemos cam#iar el 'alor de la 'aria#le intge per nunca el de la constante )a que como su propio nom#re indica su 'alor no 'ara durante toda la ejecución del 79 $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
programa. ,n XSLT podemos crear constantes simples con el elemento G&sl/'aria#leI. *or ejemplo/ G#sl:%aria/le name=csng*0=I>.9CG&sl/'aria#leI 5hora podemos utili%ar esta constante en cualquier lugar 2normalmente dentro de la plantilla donde ha sido definida4 empleando un signo seguido de la 'aria#le/ Gmath pi=2csng*04=I G&sl/'alue
*ero G&sl/'aria#leI tam#i-n puede contener marcas XML e incluso elementos XSLT! por ejemplo/ G#sl:%aria/le name=space=I G#sl:te#tI G#sl:te#tI G#sl:%aria/leI G#sl:%aria/le name=name=I GnameI G#sl:%alue&of select=namefirst=I G#sl:%alue&of select=space=I G#sl:%alue&of select=namelast=I GnameI G#sl:%aria/leI GK< esto o#tiene el 'alor de la 'aria#le name! inclu)endo cualquier marca XML G#sl:co"$&of select=name=I Solo ha) que tener en cuenta que una constante no puede hacer referencia a s misma no tampoco se permiten referencias circulares. En motor XSL de#e detectar estas situaciones para e'itar los #loqueos pero podemos encontrar alguno que no lo detecte ) nuestra aplicación se meta en un #ucle sin fin. omo sinta&is alternati'a G&sl/'aria#leI puede tener el atri#uto select para dar 'alor a la constante desde una e&presión X*ath. *or ejemplo/ G#sl:%aria/le name=name= select=personanom#re=I Ha) que hacer hincapi- en que con lo que estamos tra#ajando son constantes ) por lo tanto el 'alor de las mismas no puede alterarse una 'e% han sido declaradas. Ftra cosa a tener en cuanta es lo que estamos acostum#raos a llamar el ám#ito de las 'aria#les ) constantes. ,s decir dónde puedo declararlas ) dónde puedo utili%arlas. ,l elemento G&sl/'aria#leI puede declararse #ien como hijo de el elemento G&sl/st)lesheetI con lo cual podrá ser utili%ado en todas las plantillas de esa hoja de estilo. ien como hijo de G&sl/templateI con lo cual su ám#ito será solo local dentro de esta plantilla. GB&ml 'ersion9.Q BI G#sl:st$lesheet 'ersion9.Q &mlns/&slhttp/+++.+>.org9XSLTransformI G#sl:out"ut method te&t I G#sl:%aria/le nameageI>QG#sl:%aria/leI G#sl:tem"late matchI 77 $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
G#sl:%aria/le name nameI1redG#sl:%aria/leI G#sl:%alue&of selectconcat2name! R tiene R! age! R a?osR4 I G#sl:tem"lateI G#sl:st$lesheetI ,n el ejemplo anterior hemos definido una constante glo#al ;age# ) una contante local ;name#. *or "ltimo 'amos a 'er las plantillas con nom#re. *ara ello utili%aremos el atri#uto name del elemento G&sl/templateI. V el elemento G&sl/call.org9XSLTransformI G#sl:tem"late matchI G#sl:for&each selectnameI G#sl:call&tem"late name#oldI G#sl:for&eachI G#sl:tem"lateI G#sl:tem"late name#oldI GIG#sl:%alue&of select.IGI G#sl:tem"lateI G&sl/st)lesheetI
7> $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
6.-. +ercicios *artiendo del siguiente XML/ 1 1! 1# %utor&as ! 1! 1# 'ut(matas # 9 11 )rocesadores de lengua*es 1+ 1, 9 11 )rocesadores de lengua*es 5 1,
7C $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
18 er la tele
6.-.1. +ercicio 1 5 partir del XML inicial reali%a la transformación necesaria para o#tener la siguiente página HTML sónde los n"mero se corresponden con el contenido de las etiquetas RnumdiaR/
6.-.2. +ercicio 2 5 partir del XML inicial reali%a la transformación necesaria para o#tener la siguiente página HTML/
7D $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
6.-.). +ercicio ) 5 partir del XML inicial reali%a la transformación necesaria para o#tener la siguiente página HTML/
horario
6.-.,. +ercicio , 5 partir del XML inicial reali%a la transformación necesaria para o#tener la siguiente página HTML/
horario
76 $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
6.-.-. +ercicio 5 partir del XML inicial reali%a la transformación necesaria para o#tener la siguiente página HTML/
horario
6.-.6. +ercicio 6 5 partir del XML inicial reali%a la transformación necesaria para o#tener la siguiente página HTML/
listas html etiquetas "ol" "li" lista no ordenada "ul" "li"
7[ $e 7:
XML – Lenguaje de presentación de datos
Tema 6. Transformación de documentos. XSLT
6.-.. +ercicio 5 partir del XML inicial reali%a la transformación necesaria para o#tener la siguiente página HTML/
horario
6.-.0. +ercicio 0
5 partir del XML inicial reali%a la transformación necesaria para o#tener la siguiente página XML/