Curso de XSL - PowerPoint PPT Presentation

1 / 60
About This Presentation
Title:

Curso de XSL

Description:

Curso de XSL Sistema para la visualizaci n de documentos XML Arquitectura XSL XSLT: lenguaje para la transformaci n de documentos XML. XPath: lenguage de consulta ... – PowerPoint PPT presentation

Number of Views:106
Avg rating:3.0/5.0
Slides: 61
Provided by: PedroP158
Category:
Tags: xsl | curso

less

Transcript and Presenter's Notes

Title: Curso de XSL


1
Curso de XSL
  • Sistema para la visualización de documentos XML

2
Arquitectura XSL
  • XSLT lenguaje para la transformación de
    documentos XML.
  • XPath lenguage de consulta en estructuras XML.
  • XSLFO lenguaje de definición de objetos de
    formato de presentación.

3
XSLT definición
  • eXtensible Stylesheet Language Tranformations.
  • http//www.w3.org/TR/xstl
  • Diseñado para la transformación de documentos XML
    en otras estructuras XML y no-XML.

4
Por que transformar XML ?
  • Conversión entre modelos de datos
  • Aunque legible, XML está pensado para el
    intercambio de información entre aplicaciones.
  • Es necesaria una capa de presentación para hacer
    amigable el acceso de los humanos a la
    información XML.
  • XML produce separación entre el modelo de datos y
    presentación visual.

5
Cómo se construye una presentación
  1. Una transformación estructural desde el documento
    con la estructura de datos original hacia una
    estructura que refleje la presentación gráfica
    deseada.
  2. Formateo de la salida, utilizando los elementos
    de representación visual adecuados.

6
Proceso de publicación XML-XSL.
Doc. XML original
HTML, PDF, ...
7
Cómo se realiza la transformación (1)
8
Cómo se realiza la transformación(2)
9
Cómo se realiza la transformación(3)
10
Lo que ve el procesador
  • La raiz del documento.
  • Elementos.
  • Texto.
  • Atributos.
  • Espacios de nombres (Namespaces).
  • Instrucciones de procesamiento (PI).
  • Comentarios.

11
Como se implementa la transformación
  • Desarrollo de una aplicación a medida a partir de
    los parsers XML existentes (SAX, DOM).
  • Programación XSLT
  • lenguaje declarativo para definir reglas de
    transformación genéricas (dependientes de un
    contexto).

12
Procesamiento XSLT-Servidor
Fuente de contenidos
Visor de FO
XSL_FO
Procesador XSLT
Navegador Web
HTML
XML
XML
13
Procesamiento XSLT-Cliente
Fuente de contenidos
Visor de FO
IMAGEN
Procesador XSLT
XML
Navegador Web
HTML
14
Dónde tiene lugar la transformación
  • En el cliente
  • Tanto el documento XML como el XSL son servidos
    al cliente y este los procesa.
  • En el servidor
  • Éste aplica la XSL al XML y genera un documento
    publicable que envía al cliente (servlet, ASP,
    CGI, ...).
  • Un tercer programa hace la transformación.

15
Comparación XSLT - SQL
  • XML modelo de datos jerárquico (más rico que el
    relacional).
  • Lenguaje de acceso a los datos XSLT.
  • Selección declarativa de los datos XPath.
  • XSLT manipula el resultado de la selección
  • Modelo relacional modelo de datos tabular.
  • Lenguaje de query SQL.
  • Selección declarativa de los datos SELECT.

16
Comparación XSLT - SQL
  • Ambos aportan funciones adicionales para las
    queries aritméticas, manejo de cadenas,
    operadores de comparación, etc.
  • Ambos complementan la sintaxis declarativa con
    construcciones procedimentales que ayudan a la
    descripción de secuencias.
  • Ambos son cerrados respecto del modelo de datos.

17
Por que XSL ?
  • Está diseñado para integrarse en la arquitectura
    XML.
  • Es mucho más potente que CSS.
  • Aunque un poco menos potente que DSSSL es mucho
    más sencillo de usar.
  • Cada vez hay más herramientas para XSL.

18
Composición de los documentos XSL.
  • XSLT usa XML para describir las reglas
  • patrones y plantillas.
  • Un documento XSL se construye a partir de una
    raiz ltxslstylesheetgt ... lt/xslstylesheetgt
  • Todos los elementos de XSL que son instrucciones
    pertenecen al espacio de nombres
  • xmlnsxslhttp//www.w3.org/XSL/Transform/1.0

19
Declaración de Hoja de Estilo
  • El elemento raiz de la Hoja de Estilo debe tener
    al menos el atributo versionx.y
  • lt?xml version"1.0" encoding"UTF-8"?gt
  • ltxslstylesheet version"1.0 xmlnsxsl"http//ww
    w.w3.org/1999/XSL/Transform"gt
  • ltxsloutput method"xml" version"1.0
    encoding"UTF-8" indent"yes"/gt
  • lt/xslstylesheetgt

20
Asociar una XSL a un XML
  • Insertar una instrucción de procesamiento
  • lt?xml version1.0?gt
  • lt?xml-stylesheet typetext/xsl
    hrefmyHoja.xsl?gt
  • El atributo type debe contener el valor fijo
    text/xsl.
  • href debe contener la URL que localiza la hoja de
    estilo.

21
XSLT Elementos Top-level.
El elemento ltxslstylesheetgt puede contener como
hijos cualquiera de los siguientes elementos
(top-level)
  • xslimport
  • xslinclude
  • xslstrip-space
  • xslpreserve-space
  • xsloutput
  • xslkey
  • xsldecimal-format
  • xslnamespace-alias
  • xslattribute-set
  • xslvariable
  • xslparam
  • xsltemplate

22
Definición de ltxsloutputgt
  • lt!-- Category top-level-element --gt
  • ltxsloutput
  • method"xml" "html" "text"
    qname-but-not-ncname
  • version nmtoken
  • encoding string
  • omit-xml-declaration "yes" "no"
  • standalone "yes" "no"
  • doctype-public string
  • doctype-system string
  • cdata-section-elements qnames
  • indent "yes" "no"
  • media-type string /gt

23
Templates (Plantillas)
  • Es el elemento más importante de la
    especificación XSL.
  • Especifica la transformación que se aplicará a
    una parte concreta del documento origen.
  • Cada hoja de estilo debe tener al menos un
    template.
  • Un template seleccionado asocia una salida
    concreta con una entrada concreta.

24
Plantillas XSL
  • ltxsltemplate matchxpathgt
  • Plantilla a aplicar (acción).
  • lt/xsltemplategt
  • Dispara una acción ante el patrón de búsqueda
    xpath.
  • Una expresión XPath lenguaje de query para
    localizar elementos en una estructura XML
    (lenguaje regular de árboles).

25
apply-templates
  • Para ir más allá de la raiz hay que dirigir al
    procesador en la búsqueda de elementos hijos del
    documento origen.
  • El uso deltxslapply-templatesgt indica dónde
    continuar recursivamente el proceso.
  • En dicho punto se aplicarán los templates
    apropiados según los hijos del elemento activo

26
xslapply-templates
  • En general, este elemento es vacío e indica el
    punto de inserción de contenidos.
  • Cada nodo que cumple el patrón (match) es tratado
    como un árbol.
  • lttemplate matchCapítulogt
  • ltapply-templates/gt
  • lt/templategt

27
Cómo funcionan los templates
  • lt?xml version1.0?gt
  • lt?xml-stylesheet typetext/xsl
    hrefmiEstilo.xsl?gt
  • ltDocumentogt
  • lthijoA_1gt
  • lthijoA_1-1gt ... lt/hijoA_1-1gt
  • lthijoA_1-2gt ... lt/hijoA_1-2gt
  • lthijoA_1-1gt ... lt/hijoA_1-1gt
  • lt/hijoA_1gt
  • lthijoB_1gt ... lthijoB_1gt
  • lt/Documentogt

28
Cómo funcionan los templates
  • lt?xml version1.0?gt
  • ltxslstylesheet xmlnsxslhttp//www.w3.org/XSL/
    Transaform/1.0gt
  • ltxsltemplate match/gt
  • lthtmlgt ltxslapply-templates/gtlt/htmlgt
  • lt/xsltemplategt
  • ltxsltemplate matchDocumentogt
  • ltbodygtltxslapply-templates/gtlt/bodygt
  • lt/xsltemplategt
  • lt/xslstylesheetgt

29
Cómo funcionan los templates
  • ltxsltemplate matchhijoA_1gt
  • lth1gtEsto es la salidalth1gt
  • ltxslapply-templategt
  • lt/xsltemplategt
  • ltxsltemplate matchhijoA_1-1gt
  • ltpgtElemento HijoA_1.1lt/pgt
  • lt/xsltemplategt
  • lt/xslstylesheetgt

30
Cómo funcionan los templates
  • La raiz del documento XML se compara con todos
    los patrones y casa con / .
  • Se imprime la marca lthtmlgt .
  • La instrucción ltxslapply-templatesgt induce el
    procesamiento de los hijos de la raiz.
  • El primer hijo es una PI lt?xml-stylesheet?gt no
    casa con nada gt no es procesado.

31
Cómo funcionan los templates
  • El segundo hijo casa con la segunda regla se
    imprime la marca ltbodygt .
  • Se siguen aplicando reglas recursivamente gracias
    a que esta regla contiene la instrucción
  • ltxslapply-templates/gt
  • El hilo de ejecución sigue con los hijos del
    elemento actual (nodo_contexto)
  • ltDocumentogt

32
Cómo funcionan los templates
  • Resultado
  • lthtmlgt
  • ltbodygt
  • lth1gtEsto es la salidalth1gt
  • ltpgtElementoHijoA_1.1lt/pgt
  • ltpgtElementoHijoA_1.1lt/pgt
  • lt/bodygt
  • lt/htmlgt

33
El atributo select
  • ltxslapply-templates selectelemento/gt
  • Restringe a un tipo de hijos (subárboles) la
    aplicación de la regla.

34
xslvalue-of
  • ltxsltemplate matchpadregt
  • ltxslvalue-of selectid_hijo/gt
  • ltxsltemplate/gt
  • Copia el contenido del nodo seleccionado en la
    salida.
  • El valor de id_hijo es relativo al nodo fuente
    seleccionado en el template.

35
Regla por defecto para texto
  • ltxsltemplate matchtext()gt
  • ltxslvalue-of select./gt
  • lt/xsltemplategt
  • Concuerda con todos los nodos-texto y copia sus
    contenidos a la salida.
  • Asegura que como mímimo se imprime el texto de
    todos los elementos seleccionados.
  • Se puede sobrecargar esta regla para modificar el
    comportamiento por defecto.

36
Regla por defecto para elementos
  • Situación no queremos procesar un elemento pero
    si algunos de sus hijos.
  • ltxsltemplate match/gt
  • ltxslapply-templates/gt
  • lt/xsltemplategt
  • Asegura que todos los elementos serán procesados
    (visitados) recursivamente.

37
Regla por defecto para elementos(ejemplo-1)
  • ltlibrogt
  • ltintroduccióngt
  • ltparagt Esto es un párrafolt/paragt
  • ltparagt Otro párrafolt/paragt
  • lt/introduccióngt
  • lt/librogt

38
Regla por defecto para elementos(ejemplo-2)
  • lttemplate matchlibrogt
  • ltapply-templates/gt
  • lt/templategt
  • lttemplate matchparagt
  • ltapply-templates/gt
  • lt/templategt
  • lt! No hay template para introducción --gt

39
Modificar la regla por defecto
  • Ejemplo
  • Evitar que se procese ningún hijo de un elemento
    que no tenga definido un template.
  • lttemplate match/gt
  • lt! Nada --gt
  • lt/templategt

40
Ocultar contenidos
  • ltnotagtltparagt...lt/paragtltparagt...lt/paragtlt/notagt
  • lttemplate matchnotagtlt/templategt
  • Como consecuencia
  • es necesaria una regla vacía para que no se
    procese un subárbol que depende de un elemento
    concreto.

41
xslfor-each
  • ltxslfor-each selectgt
  • otras reglas XSL
  • lt/xslfor-eachgt
  • Se aplica a colecciones de nodos.
  • Si no hay select, se aplica a todos los hijos del
    nodo actual.

42
Manejo de tipos de nodos
  • Text()
  • Comment()
  • Pi()
  • Node()

43
Manipulación de espacios en blanco
  • ltxslpreserve-space elementnombre/gt
  • Indica el subárbol origen al cual hay que
    preservarle los espacios en blanco.
  • ltxslstrip-space elementnombre/gt
  • Indica el subárbol origen al cual hay que
    preservarle los espacios en blanco.

44
Xslchoose xslwhen
  • ltxsltemplate matchcapítulo/títulogt
  • ltxslchoosegt
  • ltxslwhen test.first-of-type()gt
  • Primer capítulo
  • lt/xslwhengt
  • ltxslotherwisegt
  • Capítulo siguiente
  • lt/xslotherwisegt
  • lt/xslchoosegt
  • lt/xsltemplategt

45
xsl element- attribute - text
  • Insertan un elemento, un atributo y un nodo hijo
    de tipo texto, respectivamente, en el árbol de
    salida.
  • ltxslelement namelibrogt
  • ltxslattribute nametítulogtEl Quijote
  • lt/xslattributegt
  • ltxsltextgtEste libro es famoso.lt/xsltextgt
  • lt/xslelementgt
  • ltlibro títuloEl QuijotegtEste libro es
    famoso.lt/librogt

46
Templates con nombre
  • Se parece a la definición y llamada a subrutina
  • ltxsltemplate namenombreTemplategt
  • ltxslparam nameparametro1/gt
  • lt! El código va aquí --gt
  • lt/xsltemplategt
  • ltxslcall-template namenombreTemplategt
  • ltxslwith-param nameparametro1
    selectvalorParam/gt
  • lt/xslcall-templategt

47
Variablesy función document()
  • Muy Importante Una vez instanciadas NUNCA pueden
    cambiar de valor !!!
  • ltxslvariable nameficheroExt
  • selectdocument(url)/XPath/gt
  • ...
  • ltxslapply-templates selectficheroExt/XPath/gt

48
XPath
  • Lenguaje de expresiones de localización

49
Expresiones XPath
  • Parten una gramática formal especificación).
  • Generan un lenguaje formal no-ambiguo.
  • Expresiones de localización con doble
    funcionalidad en las operaciones
  • pattern matching -gt devuelven un booleano.
  • Evaluación de expresiones -gt devuelven un
    conjunto de nodos.

50
Expresiones de localización(1)
  • Seleccionan un conjunto de nodos del documento
    origen.
  • Existe un punto absoluto de referencia para las
    localizaciones /, la raiz del documento
    origen.
  • Las expresiones que no comienzan con / son
    relativas a un nodo de contexto (normalmente el
    actual).

51
Expresiones de localización(2)
  • El símbolo / a mitad de expresión sirve para
    incluir expresiones recursivamente (paso de
    localización), actuando como filtros sucesivos.
  • Un paso de localización se compone de
  • Una base
  • Un eje de identificación (indicando dirección de
    localiz.).
  • Un nodo de test (filtrando nodos de su tipo y
    nombre).
  • Uno o más predicados (filtrando nodos).

52
Ejes de localización
Hay trece ejes de localización
  • following-sibling
  • namespace
  • parent
  • preceding
  • preceding-sibling
  • self
  • ancestor
  • ancestor-or-self
  • attribute
  • child
  • descendant
  • descendant-or-self
  • following

53
Ejes XPath
54
Ejes de localizaciónabreviaturas
  • Un nombre o tipo de nodo indica child
  • Un carácter _at_ indica attribute
  • La secuencia // indica
  • /descendant-or-selfnode()/
  • La secuencia .. indica parentnode()
  • La secuencia . indica selfnode()

55
Nodos de test
  • Determinan que nodos localizar en el eje
    indicado
  • Por nombre del nodo.
  • Por tipo de nodo.
  • Por valor de atributo.

56
Predicados
  • Qualificadores opcionales de listas de nodos (la
    lista ordenada de nodos en un eje).
  • El orden es en función de la proximidad al nodo
    actual.
  • La concatenación de predicados se evalúa
  • de izda. a dcha.
  • Contra todos los nodos del contexto.
  • reduce la lista de nodos seleccionados, cambiando
    la posición (contexto) de la expresión XPath.

57
Ejemplos de expresiones y contextos
  • SelfnomNodo ,
  • Indica el nodo actual si se llama nomNodo, si
    no da lista_vacía.
  • nomNodo , ./nomNodo , childnomNodo ,
  • Conjunto de elementos-hijo del nodo actual que se
    llamen nomNodo.
  • .//nomNodo ,
  • Elementos decendientes del actual
    (nombrenomNodo).
  • //nomNodo ,
  • Elementos decendientes del raiz
    (nombrenomNodo).

58
Ejemplos de expresiones y contextos
  • ../nomNodo ,
  • Elementos hermano (y él mismo) nomNodo.
  • _at_atrib ,
  • Nodos atributos asociados con nombreatrib.
  • ../_at_atrib ,
  • Los nodos atributo del nodo-padre con
    nombreatrib.
  • ../nomNodo/_at_atrib ,
  • Atributos atrib de los elementos-hermanonomNod
    o.
  • nomNodo/_at_atrib ,
  • Atributos atrib de los elementos-hijonomNodo.

59
Ejemplos de expresiones y contextos
  • nomNodoposition()last() ,
  • El último elemento-hijonomNodo.
  • nomNodoposition()3 , nomNodo3 ,
  • El tercer elemento-hijonomNodo.
  • nomNodo_at_atrib3 ,
  • El tercer elemento-hijonomNodo que tiene un
    atributoatrib.
  • nomNodo3_at_atrib ,
  • El tercer elemento-hijonomNodo SI tiene un
    atributo asociadoatrib, en caso negtivo da
    lista-vacía.

60
Ejemplos de expresiones y contextos
  • ancestornomNodo ,
  • Conjunto de nodos antecesoresnomNodo.
  • ancestornomNodo1 ,
  • El nodo antecesor más próximonomNodo.
  • ancestornomNodo_at_atrib1 ,
  • El nodo antecesor más próximonomNodo y
    atributoatrib.
  • ancestor1_at_atrib ,
  • El nodo antecesor más próximonomNodo SII tiene
    un atributoatrib, si-no lista vacía.

61
Ejemplos de expresiones y contextos
  • ancestornomNodo/_at_atrib ,
  • Selecciona los atributosatrib de todos los
    elementos-antecesoresnomNodo.
  • ancestornomNodo_at_atrib1/_at_atrib ,
  • El atributoatrib del elemento-antecedentenomN
    odo más próximo.
  • id(_at_ref)/_at_atrib ,
  • El atributoatrib del elemento que devuelve la
    función id() con parámetro el valor del atributo
    ref del elemento actual.

62
Dirección de procesamiento de los Ejes
  • Los predicados se orientan por proximidad al nodo
    actual
  • Aplicados a antecesores actúan sobre conjuntos
    ordenados en forma inversa al orden del
    documento.
  • Aplicados a sucesores actúan sobre conjuntos
    ordenados en el mismo orden del documento.
  • Los conjuntos resultado que se procesen como
    colección, se hará en el orden del documento.

63
Dirección de procesamiento de ejes (ejemplo)
  • Documento XML origen de transformación
  • lt?xml version1.0?gt
  • ltconjuntogt
  • ltitemgtAlt/itemgt
  • ltitemgtBlt/itemgt
  • ltitemgtClt/itemgt
  • lt/conjuntogt

64
Ejemplo (cont.)
  • Hoja de estilo XSL
  • ltxsltemplate match/gt
  • ltxslfor-each select//itemlast()gt
  • ltxsltextgtpreceding-siblingitem1lt/xsltextgt
  • ltxslvalue-of selectpreceding-siblingitem1
    /gt
  • ltxsltextgtnl(preceding-siblingitem)1lt/xsl
    textgt
  • ltxslvalue-of select(preceding-siblingitem)1
    /gt
  • ltxsltextgtfor-each preceding-siblingitemlt/xsl
    textgt
  • ltxslfor-each selectpreceding-siblingitem/tex
    t()gt
  • ltxsltextgtnl Itemlt/xsltextgtltxslvalue-of
    select./gt
  • lt/xslfor-eachgtlt/xslfor-eachgtlt/xsltemplategt

65
Ejemplo resultado
  • preceding-siblingitem1 B
  • (preceding-siblingitem1 A
  • for-each proceding-siblingitem
  • Item A
  • Item B
Write a Comment
User Comments (0)
About PowerShow.com