23
XML 2: XSLT, XPath Kostadin Koroutchev

XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

Embed Size (px)

Citation preview

Page 1: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

XML 2: XSLT, XPath

Kostadin Koroutchev

Page 2: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

XSL TransformXSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

muy buenos para pantalla (vamos a utilizar CSS en las prácticas)

XMLT Uso – transformación de XML a XML Un tipo particular de XML – XHTML

XHTML – muy parecido a HTML, pero XML Los browsers lo aceptan Prácticamente la misma funcionalidad que HTML 4.01.

Page 3: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

XSLT Q&A¿Qué es?

Un lenguaje de programación

¿De qué sirve? De transformar el árbol de un fichero XML a otro formato. Mas frecuente – a otro fichero XML.

¿Dónde esta definido? http:www.w3.org/TR/

Libros de texto: La definición XML in a nutshell XML Bible

Manera mas fácil de dominarlo – programando.Programas:

Xsltproc, Netscape 6.0, IE 5.5+

¿Ejemplos? Ver el soporte, ejemplo ??2*.*.

Page 4: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

Proceso:El fichero, por ejemplo xx21.xml contiene instrucciones de procesamiento:<?xml-stylesheet type="text/xsl" href="xx21.xsl" ?>

Existe fichero con estilos xx21.xslEste fichero (formato xml) incluye las instrucciones de procesar el fichero xml.

Salida:fichero o vista

Browser/procesar xsl

xx21.xml

xx21.xsl

Page 5: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

XSLT Ejemplo entradaXSL pp21.xsl XML pp21.xml

<?xml version="1.0" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/cd-s/cd"> <html><body><p> <xsl:for-each select="flavor">   Flavor:   <xsl:value-of select="." />  </xsl:for-each>  </p></body></html> </xsl:template></xsl:stylesheet>

<?xml version="1.0" ?><?xml-stylesheet type="text/xsl" href="pp21.xsl" ?><cd-s> <cd duration="2134">  <flavor>jazz</flavor>  <performer>L. Ams</performer>  <producer>EMI</producer> + <contents> </cd></cd-s>

Resultado:<html><body><p> Flavor: jazz</p></body></html>

• Elemento root - stylesheet. • Elemento Hay 2 tipos de xsl tags• Namespace, version

• template mapea su match=.• Todo el texto no <xsl:...> se copia.

Page 6: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

XSLT Ejemplo entradaTres tipos de marcos xsl:

Cabecera (raíz). Los hijos de stylesheet

Tipo template. Programación declarativa. Existen valores por

defecto. Los hijos de estos hijos

(recursivo).Tipo for-each, value-of

Se parecen a programación funcional

Elementos que apuntan al árbol:

/cd-s/cd, flavor

<?xml version="1.0" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/cd-s/cd"> <html><body><p> <xsl:for-each select="flavor">   Flavor:   <xsl:value-of select="." />  </xsl:for-each>  </p></body></html> </xsl:template></xsl:stylesheet>

Ejemplos en el soporte – xx2*

Page 7: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

XSLT Top-level element

Top-level = 12 posibles elementos hijos de stylesheet:

import, include URL – incluir ficheros. strip-space, preserve-space elements – tratar espacios. decimal-format, namespace-alias – control de la

salida/entrada output – salida “literal” opciones de salida. key – a xsl ID (uso no muy frecuente) attribute-set, param,

variable name=...>...valor...</xsl:varalable> conjunto nombrado de identificadores.

template – el más importante elemento de XSL Ejecuta todo que mapea.

Page 8: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

XSLT template 1

<xsl:template match=“/cd-s/cd”> ..zzz...</xsl:template>Si /cd-s/cd se encuentra en la entrada se produce enparejamiento y se ejecuta el código ..zzz.. .El árbol-salida se construye al ejecutar ..zzz...Atributos:

match – el patrón de emparejamiento. name= nombre del template. Puede llamarse con este

nombre. mode= clase de template.

Page 9: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

XSLT template 2

Ejemplo con más de un template

<?xml version="1.0" ?> <xsl:stylesheet xmlns:xsl=“http://www.w3.org/1999/XSL/Transform” version="1.0"> <xsl:template match="/"> <html><body>  <xsl:apply-templates select="cd-s/cd" /> </body></html> </xsl:template> <xsl:template match="*">  <xsl:apply-templates select="flavor" /> </xsl:template> <xsl:template match="flavor"> <p>Flavor: <xsl:value-of select="." /></p> </xsl:template></xsl:stylesheet>

•Manera habitual de programar con XSLT.

•Nunca hay que olvidar el xsl:template por defecto.

• xsl:apply-templates aplica los templates dentro de otro template de forma recursiva sobre los elementos del nodo actual.

•xsl:value-of escribe el elemento seleccionado a la salida.

Page 10: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

XSLT default template

Template: Existen por defecto 2 templates:

<xsl:template match=“*|/”><xsl:apply-templates/>

</xsl:template> </xsl:telmplate match=“comment()|

processing-instructions()”/>

Page 11: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

XSLT elements – instrucciones

Las instrucciones son de tipo: apply-templates, call-templates

Ejecuta templates

if, for-each, choose, when, otherwise – control de flujo de ejecución

value-of, copy-of – valor de un elemento.

Etc.

Page 12: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

XPath

Las expresiones match= en template son un ejemplo de Xpath.XPath es Mecanismo de direccionar el árbol xml. Conjunto de funciones y expresiones.

Page 13: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

XPath como mecanismo de direccionar árboles.

Muy parecido a UNIX: /cd-s/cd/flavor direcciona el elemento flavor que es el hijo de cd

que se el hijo del nodo cd-s, el elemento root (la / inicial). XSLT siempre direcciona relativamente de la posición actual en

el árbol. La posición se denomina “.” El padre: .., el padre del padre “./..” etc. como en UNIX. Los atributos se marcan con @. Ver el soporte, ejemplo

xx22.xml. En XPath // significa cualquier hijo. Otros: podemos añadir [...] en cualquier punto de la ruta con

condición buleana o numero Numero (o expresión numérica)

/cd-s/cd[2] – el segundo cd de los cd-s. Condición buleana:

/cd-s/cd[@duration<100]/flavor, direcciona flavor solo de discos con duración menor que 100.

/cd-s/cd[position()=last()] – el ultimo de los cd-s.

Page 14: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

Xpath funcionesQue direccionan algo del árbol

Xpath Significado

. Contenido textual del nodo y sus hijos.

text() C-data pero solo de un nivel.

node() Todo en el nodo

name() Nombre del elemento (tag)

@duracion Atributo de un nodo

comment() Comentarios

processing-instrucciones()

PI <? .... ?>

Page 15: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

Xpath funcionesDe posición

Numéricas: number(c-data), sum().

Lógicas: true(), false(), not(), boolean(c-data|numeric)

Cadenas de caracteres: string(), string-length(), concat(), contains(), starts-with(),substring(),substring-after(),substring-before(), translate() Ejemplo: translate(‘John','abcd...z',‘ABC...Z‘);

Xpath Significado

position() Número de hijo. 1- primer hijo.[position()=2] es lo mismo como [2]

last() Número de ultimo hijo

Page 16: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

Xpath expresiones

Operadores: * div mod + - = != < > <= >= and or |

Variables – con $.

Page 17: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

Xpath atributos

Como generar:

Solución – generarlo por partes:

Resultado(ejemplo):

<xsl:element name=“table”> <xsl:attribute name=“bgcolor” > <xsl:value-of select=“color-de-xml” > </xsl:attribute> El texto de la tabla </xsl:element>

<table bgcolor=“ <xsl:value-of select=“color-de-xml””> El texto de la tabla </table>

<table bgcolor=“#ff0000”> El texto de la tabla </table>

Page 18: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

XSLT Como aprenderloComo cualquier lenguaje de programación – programando.No hemos mencionado bastante cosas útiles de Xpath y XSLT.Ejemplos:

pp21.* -- sacar 1 campo de los apuntes. pp22.* -- sacar 1 campo con templates. xx21.* -- template+instrucciones xx22.* -- fo: + xsl: xx23.* -- Xpath xx24.* -- Cascade Style Sheet

Referencia rápida (chuletas): http://www.mulberrytech.com/

Page 19: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

Representación gráfica de árboles.Cascade Style Sheet (CSS)

Un árbol se puede presentar en 2 dimensiones:

todo

p1

p2

p22

p3

todo

p1 p2

p22p3

•Cada nodo tieneborde comúnsolo con su padre.•Cada padre encaja en su totalidadsus hijos

Ejemplo – XHTML

Idea de Xerox 1968XML es un árbol – CSS nos da la manera de ordenar los nodos.

Page 20: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

Representación grafica de árboles.Cascade Style Sheet (CSS)

CSS solo resuelve el problema de poner las casitas de representación es su sitio. xx24.*Ejemplo CSS: flavor { display:inline;t ext-align left;

font-size:24pt; color:blue}performer {color:red}performer:before {content:"Performer: "}contents {display:block}song {

margin-left:1cm;display:list-item;list-style-type:diamond;list-style-position:inside

}contents song[type="good"] title {color:maroon;}

todop1

p2 p22p3

jazz Luis Amstrong EMI•On the sunny side of the street •Chick to chick •On the Sunny Side of the Street

Elementos_del_árbol : { descripción_del_formato }• CSS representa el árbol por una parte y el formato por otra• Cascada – por heredar los atributos de formateo del padre.

Page 21: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

CSS Elemento principalEl elemento de formateo es el elemento XML.

Hay que presentarlo: en caja rectangular la cajita tiene:

Por tanto los atributos son del tipocomposer {border-color:red;margin-left:5mm;}

Hay que direccionar el elemento en el árbolcon el nombre del elemento.

• Contenido

• Padding

• Border

• Margin

• Position

Page 22: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

CSS displayDonde se coloca el siguiente elemento:

Según el lenguaje – el orden natural de lectura de texto. Castellano: Japones

El orden por defecto se puede cambiar: atributo – displaydisplay: inline /* por defecto */display: block /* en la siguiente línea */display: list /* ítem de una lista */display: table /* tabla rectangular mas control, más complicado */display: none /* no se presenta */

Page 23: XML 2: XSLT, XPath Kostadin Koroutchev. XSL Transform XSL consiste de 2 partes: XSL Transform (XSLT) XSL Format Object (fo). Buenos para impresión. No

CSS grupos de elementos

Ver la referencia rápida de los atributos más utilizados.Grupos de formateo:

Bloques (border, color, width,backgroung, margin,...) Control desbordamiento etc.

Fuentes (style, size, ...) Texto (alineación, decoración,word-spacing,letter-spacing) L ink (hover, active, focus, visited)

Más de 300 paginas de definición de CSS2. Ver http://genuera.ugr.es/~maribel/xml/css/index.html Ver http://www.w3.org/TR/REC-CSS2/

Mas – en la segunda práctica.