240 likes | 489 Views
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 muy buenos para pantalla (vamos a utilizar CSS en las prácticas) XMLT Uso – transformación de XML a XML
E N D
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 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.
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*.*.
Proceso: • El fichero, por ejemplo xx21.xml contiene instrucciones de procesamiento:<?xml-stylesheet type="text/xsl" href="xx21.xsl" ?> • Existe fichero con estilosxx21.xsl • Este fichero (formato xml) incluye las instrucciones de procesar el fichero xml. xx21.xsl Salida:fichero o vista xx21.xml Browser/ procesar xsl
XSLT Ejemplo entrada <?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-ofselect="." /> </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> XSL pp21.xsl XML pp21.xml 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.
XSLT Ejemplo entrada • Tres 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-ofselect="." /> </xsl:for-each> </p></body></html> </xsl:template> </xsl:stylesheet> Ejemplos en el soporte – xx2*
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.
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.
XSLT template 2 • Ejemplo con más de un template • 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. <?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-templatesselect="cd-s/cd" /> </body></html> </xsl:template> <xsl:template match="*"> <xsl:apply-templatesselect="flavor" /> </xsl:template> <xsl:template match="flavor"> <p>Flavor:<xsl:value-ofselect="." /></p> </xsl:template> </xsl:stylesheet>
XSLT default template • Template: • Existen por defecto 2 templates: • <xsl:template match=“*|/”> <xsl:apply-templates/></xsl:template> • </xsl:telmplate match=“comment()|processing-instructions()”/>
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.
XPath • Las expresiones match= en template son un ejemplo de Xpath. • XPath es • Mecanismo de direccionar el árbol xml. • Conjunto de funciones y expresiones.
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.
Xpath funciones • Que direccionan algo del árbol
Xpath funciones • De 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 expresiones • Operadores: • * div mod + - • = != < > <= >= • and or | • Variables – con $.
Xpath atributos • Como generar: • Solución – generarlo por partes: • Resultado(ejemplo): <table bgcolor=“ <xsl:value-of select=“color-de-xml””> El texto de la tabla </table> <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=“#ff0000”> El texto de la tabla </table>
XSLT Como aprenderlo • Como 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/
Representación gráfica de árboles.Cascade Style Sheet (CSS) • Un árbol se puede presentar en 2 dimensiones: • Cada nodo tieneborde comúnsolo con su padre. • Cada padre encaja en su totalidadsus hijos todo todo p1 p2 p1 p22 p3 p2 p22 Ejemplo – XHTML p3 Idea de Xerox 1968 XML es un árbol – CSS nos da la manera de ordenar los nodos.
todo p1 p2 p22 p3 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;} • jazz Luis AmstrongEMI • 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.
CSS Elemento principal • El 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
CSS display • Donde 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 */
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.