Tecnología XML Dr. Diego Lz. de Ipiña Gz. de Artaza [email protected] http://paginaspersonales.deusto.es/dipina Contenidos  XML    XML Parsing    DTD Schema SAX API DOM API XSLT.

Download Report

Transcript Tecnología XML Dr. Diego Lz. de Ipiña Gz. de Artaza [email protected] http://paginaspersonales.deusto.es/dipina Contenidos  XML    XML Parsing    DTD Schema SAX API DOM API XSLT.

Tecnología XML

Dr. Diego Lz. de Ipiña Gz. de Artaza [email protected]

http://paginaspersonales.deusto.es/dipina

Contenidos

   XML   DTD Schema XML Parsing  SAX API  DOM API XSLT 2

¿Qué es XML?

     eXtensible Mark-up Language.

Es un metalenguaje que permite diseñar otros lenguajes (WML, MathML, XHTML,..).

Cualquiera puede desarrollar su propio lenguaje de etiquetas adecuado al tipo de aplicación que más le convenga.

En realidad hay muchas tecnologías basadas en XML (XPath, XLink, XPointer, XSL, ...).

XML 1.0 Specification http://www.w3.org/TR/REC-xml 3

HTML y XML

    SGML (Standard Generalized Markup Language) HTML es una aplicación de SGML XML es subconjunto más fácil de usar de SGML XHTML es una aplicación de XML 4

XML describe estructura y semántica

Ipiña Altzariak €400 2 excelente azul €200 5

HTML describe formato

Comedor

Comedor

Fabricante: Ipiña Altzariak

  • Mesa redonda de madera de arce
  • Dos sillas de madera de arce, de excelente calidad, con un cojín azul cada una.
  • 3 sillas de madera de roble.
6

Ventajas XML

    Una de las mayores utilidades de XML es poder etiquetar los datos con su significado (self-describing data).

Permite la estructuración de la información.

Ello lleva el tratamiento automático de la información a límites insospechados.

XML es la base de la nueva generación de aplicaciones web  intercambio de datos 7

Usos XML

   Sitios web  Permite separar contenido y presentación Comunicación <-> intercambio datos  Servicios web Como configuración de programas   Deployment descriptos en servidores J2EE Ant make system 8

Componentes documento XML

 Los documentos XML constan de:       Instrucciones de procesamiento ( processing instructions – PI ) Declaraciones de tipo de documento Comentarios Elementos Referencias a entidades Secciones CDATA 9

Instrucciones de procesamiento

  Las PI son instruccciones para el procesador del documento XML.

Siempre hay al menos una PI, que pertenece al prólogo del documento: Hola, mundo!

10

Comentarios en XML

  Los comentarios no se procesan.

Tienen la siguiente sintaxis: 11

Elementos y atributos en XML

    Los elementos son los que aportan estructura semántica al documento.

Se delimitan por etiquetas de apertura, cierre y etiquetas sin elementos interiores (etiquetas vacías).

Las etiquetas de apertura y las vacías suelen venir acompañadas de atributos, que parametrizan el elemento.

El valor de los atributos siempre se encierra entre comillas, dobles o simples.

Hola 12

Elementos vs. Atributos

  Demasiados atributos hacen que los documentos XML se puedan leer difícilmente.

No se puede indicar estructura de documento mediante atributos 13

Elementos vs. Atributos (cont)

Smith Sam October 15, 2001 Tomatoes 8 $1.25 14

Referencias a entidades

 Las referencias a entidades sirven para insertar un determinado contenido definido previamente.

Creado por &Empresa; 15

Códigos de escape

 Existen 5 referencias a entidades predefinidas:      & el carácter & < el carácter < > el carácter > ' el carácter ` " el caracter “  Se incluyen los caracteres del juego ISO 10646.

‘ ⼱ 16

Secciones CDATA

  Las secciones CDATA (

character data

contienen texto que no debe ser procesado.

) Se tratan como una secuencia de caracteres sin estructura.

Hola, mundo!]]> 17

Gramáticas en XML

 La gramática que restringe los elementos válidos dentro de un nuevo derivado de XML puede expresarse en forma de:   DTD (Document Type Definitions) o Esquemas XML 18

Document Type Definitions (DTDs)

  Especifican la estructura y sintaxis de un documento XML Labgroups.dtd

19

Document Type Definitions (cont)

Josu Artaza Nuria Buruaga Inga Dorsman 20

XML Schemas

 

Los DTD no son muy potentes para definir gramáticas.

Otra forma de hacerlo es con Esquemas XML basados en el propio XML y que soporta más tipos de datos.

21

Ejemplo Schema

DTD :

XML Schema:

22

Ejemplo Schema (cont)

XML Document:

The deadline of ISO3 assigment is November 21th 2003. 23

XML bien formado y/o XML válido

 Hay dos tipos de documentos XML:  

Bien formados

: son aquellos que cumplen las reglas sintácticas de XML

Válidos

Schema) : son aquellos que, además de ser bien formados, siguen las reglas de una gramática (definida en un DTD o XML 24

Reglas para que un documento esté bien formado

 Para que un documento esté bien formado:   Debe tener un prólogo Debe tener una etiqueta raíz     Las etiquetas se hallan correctamente anidadas Se usan caracteres válidos y bien aplicados Los valores de los atributos vienen encerrados entre comillas ...

25

Reglas para que un documento sea válido

  Para que un documento sea válido debe declarar el DTD o XML Schema contra el cual debe validarse.

Se hace mediante DOCTYPE, pudiendo ser los DTD públicos o de sistema.

 También se puede insertar el DTD entero en ese punto, en lugar de referenciar al fichero.

26

Proceso de validación documento XML

Documento XML (opcional) DTD ¿Well Formed?

no si Error: Documento XML mal formado ¿DTD?

no Procesamiento de la información si ¿Valid?

si no Error: Documento XML no válido

27

XML Namespaces

   El estándar XML también define los espacios de nombres ( XML Namespaces ).

Permiten que un mismo documento XML tenga etiquetas de diferentes lenguajes (definidas en diferentes gramáticas DTD).

Así es posible mezclar más información en los documentos, por ejemplo, añadir información semántica a un documento XHTML.

28

Ejemplo XML Namespaces

Avda. Universidades Bilbao Diego Ipiña [email protected] 29

Lenguajes basados en XML

         Chemical Markup Language (CML) Mathematical Markup Language (MathML) Channel Definition Format (CDF) Synchronized Multimedia Integration Language (SMIL) XHTML Scalable Vector Graphics (SVG) SOAP y WSDL VoiceML Wireless Markup Language (WML) 30

Herramientas de XML

   Editores   http://www.xmlcooktop.com/ XML Spy, www.xmlspy.com XML parsers  gratis    Lee un documento XML Verifica que XML está bien formado Verifican que XML es válido    expat, parser written in C by James Clark ( www.jclark.com

) Lark, written in Java ( www.textuality.com/Lark/ ) Apache Jakarta Xerces ( www.apache.org

) XML Validators  Verifican que XML es válido  XML.com's Validator based on Lark (xml.com) 31

¿Por qué usar XML?

   Un documento XML puede ser fácilmente procesado y sus datos manipulados Existen APIs para procesar esos documentos en Java, C, C++, Perl.. (y por supuesto Python) XML define datos portables al igual que Java define código portable 32

XML Parsing

Documento XML Parser XML XML DTD XML Schema Aplicación XML

33

XML Parsing (cont)

 SAX  Define interfaz dirigido por eventos ( event-driven para el procesamiento de un documento XML )  Definido por David Megginson y lista correo XML DEV : http://www.megginson.com/SAX  DOM    Provee una representación de un documento XML en forma de un árbol Carga todo el documento XML en memoria http://www.w3.org/DOM 34

Simple API for XML: SAX

     Define un interfaz común implementado por muchos XML Parsers Es el estándar de-facto para procesamiento de XML basado en eventos SAX no es un parseador de XML SAX2 añade soporte para XML Namespaces La especificación de SAX 2.0/Java está en: http://www.megginson.com/SAX/Java/index.

html 35

Características de SAX

     Analizador o parser SAX:    Detecta cuándo empieza y termina un elemento o el documento, o un conjunto de caracteres, etc. (genera eventos) Gestiona los espacios de nombres Comprueba que el documento está bien formado Las aplicaciones necesitan implementar manejadores de los eventos notificados SAX lee secuencialmente de principio a fin, sin cargar todo el documento en memoria

Ventaja:

árbol eficiencia

Desventaja:

en cuanto al tiempo y la memoria empleados en el análisis no disponemos de la estructura en de los documentos 36

¿Cómo funciona SAX?

XML Document Diego Ipiña [email protected] Asier Perallos [email protected] Parser Parser Parser Parser Parser Parser Parser Parser Parser Parser SAX Objects startDocument startElement startElement & characters startElement & characters endElement startElement startElement & characters startElement & characters endElement endElement & endDocument

37

SAX2/Java Parsers y Drivers

     Sun's JAXP http://java.sun.com/xml/ The Apache XML Project's Xerces Java Parser http://xml.apache.org/xerces-j/index.html

SAXON XSLT processor http://users.iclway.co.uk/mhkay/saxon/ Oracle XML Developer's Kit for Java http://technet.oracle.com/tech/xml/xdk_java.html

ParserAdapter http://www.megginson.com/SAX/Java/index.html

38

Java JAXP

 Define clase SAXParserFactory objeto SAXParser para crear una instancia de un (independiente de implementación SAX parser) factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser();    Objeto SAXParser procesamiento define method parse() Es necesario registrar SAXHandlers Los 4 SAX Handlers principales son:     para arrancar con cada SAXParser EntityResolver DTDHandler – maneja entidades externas – maneja eventos de DTD ContentHandler ErrorHandler – maneja contenido de un documento – maneja errores 39

Arquitectura Java JAXP

40

EntityResolver y DTDHandler

  EntityResolver  InputSource resolveEntity(String publicId, String systemId) DTDHandler   void notationDecl(String name, String publicId, String systemId) void unparsedEntityDecl(String name, String publicId, String systemId, String notationName) 41

ErrorHandler

void error(SAXParserException exception)  Recibe notificación de error recuperable. void fatalError(SAXParserException exception)  Recibe notificación de error fatal.

void warning (SAXParserException exception)  Recibe notificación de advertencia. 42

ContentHandler

void characters(char[] ch, int start, int length)  Recibe notificación de caracteres encontrados dentro de un elemento. void endDocument()  Recibe notificación de final de documento.

void endElement(String namespaceURI, String localName, String qName)  Recibe notificación de final de elemento.

void processingInstruction(String target, String data)  Recibe notificación cada vez que se encuentra una instrucción de procesamiento. void setDocumentLocator(Locator locator)  Recibe objeto para determinar el origen de los eventos en el documento.

void startDocument()  Recibe notificación de comienzo de documento.

void startElement(String namespaceURI, String localName, String qName, Attributes atts)  Recibe notificación de comienzo de elemento 43

DefaultHandler

   Manejador de contenido que define una serie de métodos que son invocados cuando analizador detecta determinados eventos al leer documento Clase de conveniencia que puede ser usada como clase base para aplicaciones SAX2 Provee implementaciones por defecto de los métodos callback de los 4 manejadores de SAX2:   EntityResolver DTDHanler   ErrorHandler ContentHandler 44

Ejemplo SAX Parsing I

16:00 19:00 22:00 16:30 19:00 45

Ejemplo SAX Parsing II

import java.util.Vector; // Imports de JAXP API import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; // Imports de SAX API import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SesionCineSAXParser extends DefaultHandler { // Atributos en los que se cachea el estado de SesionesPelicula // Vector con todas las sesiones por pelicula de este cine private Vector sesionesPeliculas; // Vector con los strings de horarios de todas las sesiones de una pelicula private Vector sesionesStrPelicula; // Metadata asociada a una película private String codigo, titulo, director, actores; // Contenido textual de una sesión private String textoSesion; // Flag que indica si estamos parseando el contenido de texto de una sesión private boolean esTextoSesion = false; ...

46

Ejemplo SAX Parsing III

public SesionCineSAXParser(String url) { // Obtener referencia al parser factory SAXParserFactory factory = try { SAXParserFactory.newInstance(); // factory.setNamespaceAware(true); // activar namespaces // Crear una nueva instancia de un SAX parser SAXParser saxParser = factory.newSAXParser(); // Parsear el documento apuntado por URL saxParser.parse(url, this); } catch (Throwable t) { t.printStackTrace(); } } 47

Ejemplo SAX Parsing IV

public void startElement(String namespaceURI, String lName, String qName,Attributes attrs) throws SAXException { // lname --> contiene el nombre local (sin prefijo), o el string vacio // si procesamiento de namespaces no se lleva a cabo. // qname --> el nombre cualificado (con prefijo), o el string vacío si namespaces no activo if (qName.equals("CarteleraCine")) { this.sesionesPeliculas = new Vector(); } else if (qName.equals("Pelicula")) { // Por cada peli preparar vector con horarios de sesiones this.sesionesStrPelicula = new Vector(); this.codigo = attrs.getValue("codigo"); this.titulo = attrs.getValue("titulo"); this.director = attrs.getValue("director"); this.actores = attrs.getValue("actores"); } else if (qName.equals("Sesion")) { // Sólo recoger texto si dentro de sesión this.esTextoSesion = true; this.textoSesion = ""; } } 48

Ejemplo SAX Parsing V

public void characters(char[] ch, int start, int length) { if (this.esTextoSesion == true) { // Sólo si estamos dentro de un elemento sesión // recogemos su contenido.

// Si el contenido es largo este método callback puede ser // invocado varias veces por el parser SAX this.textoSesion += (new String(ch, start, length)).trim(); } } 49

Ejemplo SAX Parsing VI

public void endElement(String namespaceURI, String sName, String qName) throws SAXException { if (qName.equals("Pelicula")) { // Salvamos los detalles de una pelicula en un objeto Pelicula pelicula = new Pelicula(this.codigo, this.titulo, this.director, this.actores); // Añadimos nuevo objeto SesionesPelicula a vector sesionesPeliculas this.sesionesPeliculas.add(new SesionesPelicula(pelicula, this.sesionesStrPelicula)); } else if (qName.equals("Sesion")) { // Por cada sesión salvar el texto conteniendo horario sesión this.esTextoSesion = false; this.sesionesStrPelicula.add(this.textoSesion); } } 50

Ejemplo SAX Parsing VII

// Método para recuperar vector con // objetos SesionesPelicula creados // en parsing public Vector getSesionesPeliculas() { return this.sesionesPeliculas; } 51

W3C Document Object Model (DOM)

     Documentos XML son tratados como un árbol de nodos Cada elemento es un “nodo” Los elementos hijos y el texto contenido dentro de un elemento son subnodos W3C DOM Site: http://www.w3.org/DOM/ DOM Java Language Binding: http://www.w3.org/TR/DOM-Level-2 Core/java-binding.html

52

Características DOM

   Documento se carga totalmente en memoria en una estructura de árbol

Ventaja:

fácil acceder a datos en función de la jerarquía de elementos, así como modificar el contenido de los documentos e incluso crearlos desde cero.

Desventaja:

coste en tiempo y memoria que conlleva construir el árbol 53

W3C XML DOM Objects

            Element – un elemento XML Attribute – un attributo Text – texto contenido en un elemento o atributo CDATAsection – sección CDATA EntityReference – Referencia a una entidad Entity – Indicación de una entidad XML ProcessingInstruction – Una instrucción de procesamiento Comment – Contenido de un comentario de XML Document – El objeto documento DocumentType – Referencia al elemento DOCTYPE DocumentFragment – Referencia a fragmento de documento Notation – Contenedor de una anotación 54

Objetos relacionados con Nodos

   Node – un nodo en el árbol de un documento NodeList – una lista de objetos nodos NamedNodeMap acceso por nombre a una colección de atributos – permite interacción y 55

Documento XML como un árbol de nodos

Hello from XML Welcome to Programing XML in Java 56

Documento XML como un árbol de nodos (cont)

57

JAXP DOM

  API JAXP de J2SE provee independencia del analizador Para conseguir una instancia de analizador DOM a través de JAXP usamos DocumentBuilder y DocumentBuilderFactory : import javax.xml.parsers.*; import org.w3c.dom.*; DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance(); // Crear nueva instancia de DOMBuilder DocumentBuilder parser = fact.newDocumentBuilder(); 58

Clase DocumentBuilder

  Método parse() entrada analiza el fichero Método Document getDocument() devuelve el documento generado durante parsing parser.parse(fich); Document doc = parser.getDocument(); 59

Métodos del objecto Document

 Attr createAttribute(String name) Crea un atributo con el nombre dado  Element createElement(String tagName) Crea un elemento con el nombre dado  Text createTextNode(String data) Crea un nodo de texto  Element getDocumentElement() Devuelve el elemento raíz el documento  Element getElementById(String elementId) Devuelve el elemento identificado por elementId  NodeList getElementsByTagName(String tagname) Devuelve una lista de elementos identificados por el nombre de etiqueta dado 60

Métodos del interfaz Node

 Node         NamedNodeMap getAttributes() Devuelve lista de atributos en un nodo Node getFirstChild() Devuelve el primer hijo de este nodo Node getFirstChild() Devuelve el último hijo de este nodo NodeList getChildNodes() Devuelve todos los hijos de este nodo Node getParentNode() Devuelve nodo padre del nodo actual short getNodeType() Devuelve tipo de nodo actual String getNodeName() Devuelve nombre nodo String getNodeValue() Devuelve contenido nodo 61

Métodos del interfaz NodeList y NamedNodeMap

  NodeList   int getLength() Devuelve número de nodos en lista Node item(int index ) Devuelve el nodo identificado por index en una colección NamedNodeMap    int getLength() Devuelve número de nodos en lista Node getNamedItem(String name) Recupera un nodo dado su nombre Node item(int index ) Devuelve el nodo identificado por index en una colección 62

Ejemplo DOM I

63

Ejemplo DOM II

Root Películas Película ...

Película codigo=1 titulo=’Lo que el viento se llevó’ diirector=’Victor Fleming’ actores=’Clark Gable, Vivien Leigh, Leslie Howard’ codigo=5 titulo=’Malena’ diirector=’Giuseppe Tornatore’ actores=’Monica Bellucci, Giuseppe Sulfaro’ 64

Ejemplo DOM III

import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import java.io.IOException; public class EjemploDOM { public static void main(String[] args) { ...

DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance(); // Crear nueva instancia de DOMBuilder a través factoria DocumentBuilder parser = fact.newDocumentBuilder(); parser.parse(fich); Document doc = parser.getDocument(); EjemploDOM.tratarNodo(doc); ...

} } 65

Ejemplo DOM IV

public static void tratarNodo(Node nodo) { switch (nodo.getNodeType()) { case Node.DOCUMENT_NODE: break; case Node.ELEMENT_NODE: break; case Node.ATTRIBUTE_NODE: break; case Node.TEXT_NODE: break; case Node.CDATA_SECTION_NODE: break; case Node.PROCESSING_INSTRUCTION_NODE: break; case Node.ENTITY_REFERENCE_NODE: break; case Node.DOCUMENT_TYPE_NODE: break; } } 66

Ejemplo DOM V

case Node.DOCUMENT_NODE: System.out.println(""); Document doc = (Document)nodo; tratarNodo(doc.getDocumentElement()); break; 67

Ejemplo DOM VI

case Node.ELEMENT_NODE: String nombre = nodo.getNodeName(); System.out.print("<" + nombre); NamedNodeMap ats = nodo.getAttributes(); for (int i=0; i"); NodeList hijos = nodo.getChildNodes(); ... // tratar los hijos recursivamente break; case Node.ATTRIBUTE_NODE: System.out.print(" " + nodo.getNodeName() + "=\"" + nodo.getNodeValue() +"\""); 68

Ejemplo DOM VII

case Node.TEXT_NODE: String texto = nodo.getNodeValue().trim(); if (!texto.equals("")) { System.out.println(ind + texto); } break; case Node.CDATA_SECTION_NODE: System.out.println(nodo.getNodeValue()); break; NodeList peliNodes = document.getElementsByTagName("Pelicula"); 69

Extensible Style Language Transformations (XSLT) I

 Con la diversidad de lenguajes de presentación que hay (WML, HTML, cHTML) existen dos alternativas para desarrollar las aplicaciones:  Desarrollar versiones de los procesos de generación de presentación (JSP, ASP, CGI,..) para cada lenguaje.

 Desarrollar solo una versión que genere XML y conversores de XML a los lenguajes de presentación.

70

Extensible Style Language Transformations (XSLT) II

    Dos partes:  Transformation Language (XSLT)  Formatting Language (XSL Formatting Objects) XSLT transforma un documento XML en otro documento XML XSLFO formatea y estiliza documentos en varios modos XSLT W3C Recommendation http://www.w3.org/TR/xslt 71

Operaciones entre árboles en XSL

72

Ventajas y desventajas de XSLT

  Ventajas:     No asume un único formato de salida de documentos Permite manipular de muy diversas maneras un documento XML: reordenar elementos, filtrar, añadir, borrar, etc.

Permite acceder a todo el documento XML XSLT es un lenguaje XML Desventajas:   Su utilización es más compleja que un lenguaje de programación convencional Consume detrás cierta memoria y capacidad de proceso  DOM 73

Usando hojas de estilo XSLT

 Para crear una transformación XSL necesitamos:  El documento XML a transformar ( students.xml

)  La hoja de estilo que especifica la transformación ( students.xsl

) 74

Documento XML (students.xml)

Programming XML in Java Diego Ipiña Usue Artaza 30 70 80 85 Iñigo Urrutia 80 90 100 40 75

Hoja de estilo XSLT (students.xsl)

Name of students

76

Resultado de transformación

 (students.html) Name of students

Usue Artaza

Iñigo Urrutia

77

Formas de uso de XSLT

   Visualizar directamente en un navegador el documento XML que tiene asociada una hoja XSLT.

Ejecutar el procesador XSLT independientemente navegador. Se le pasan las entradas necesarias (fichero origen y hoja XSLT a utilizar) y genera la salida en un fichero, con el que podemos hacer lo que queramos. del Realizar las transformaciones dentro de un programa en el servidor y enviar a los clientes sólo el resultado de la transformación. 78

Aplicaciones usando XSLT

Cliente Servidor XML Internet XSLT JSP Arquitectura en 5 capas dónde el servidor contiene conversores XSLT para generar presentación en distintos formatos.

Clases Java Base de Datos 79

Ejemplos de Procesadores XSLT existentes

       Oracle XML parser for Java http://technet.oracle.com/tech/xml/parser_java2/ Saxon http://users.iclway.co.uk/mhkay/saxon/index.html

XT http://www.jclark.com/xml/xt.html

Sablotron http://www.gingerall.com/charlie bin/get/webGA/act/sablotron.act

Microsoft XML Parser http://msdn.microsoft.com/downloads/webtechnology/xml/msx ml.asp

Xalan Java http://xml.apache.org/xalan-j/index.html

Java JAXP 80

XSLT son documentos XML bien formados

   xsl:stylesheet – elemento raiz xsl:template seleccionado  – cómo transformar un nodo Se asocia con un fragmento del documento a través de una expresión en XPath   Transforma XML entrante en otro fragmento de XML match – Atributo para seleccionar nodo  "/" – nodo raiz del documento de entrada Elemento xsl:apply-templates seleccionado . Aplica los templates definidos para los hijos de un nodo 81

Ejemplo XSLT

82

Elementos XSLT

   xsl:value-of   permite recuperar el valor de un nodo Los nodos son seleccionados usando la sintáxis de la especificación XPath XML Sólo selecciona el valor del primer estudiante que encuentre Si queremos seleccionar varios podemos hacer: O usar xsl:for-each 83

Elementos XSLT (cont)

  Para realizar distintos procesamientos en función de los datos se usa xsl:choose :   Se compone de elementos xsl:when Un elemento opcional xsl:otherwise Para procesar o no un elemento en función de una condición se usa xsl:if :  Condición en atributo test 84

Ejemplo

Name of students

85

Patrones XPath para el atributo match o select

 Seleccionar el nodo raiz: ...  Seleccionar un elemento: ...  Seleccionar hijos de un elemento: ... ...  Seleccionar descendientes de un elemento: ... 86

Patrones XPath para el atributo match o select

    Seleccionar atributo título: Seleccionar comentarios: ... Seleccionar elementos de texto: ... Recuperar posición que ocupa un sub elemento dentro de elemento padre 87

Evaluando condiciones con []

 Evaluando si una condición es cierta:  Si el elemento estudiante tiene un hijo name  Cualquier elemento que tiene un elemento namE  Elemento student tiene un sub-elemento hw1 o hw2 element 88

Ejemplo XSLT

Problema: Imprimir nombre de alumnos con nota media mayor de 65% Student name="" average="" 89

Resultado transformación

 Salida (grades70.txt): Student name=“Usue Artaza" average="66,25" Student name=“Iñigo Urrutia" average="77,5" 90

Java JAXP

  Provee clase Transformer para la aplicación de XSL a un documento XML Como siempre Java JAXP asegura que el código fuente sea el mismo independientemente del parser XSLT subyacente 91

Usando Java JAXP

import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; ...

92

Usando Java JAXP (cont)

public String obtenerCarteleraHMTL() { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { // Usar JAXP DOM para generar Document con fichero xml DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse( "http://localhost:8080/cartelera/Cines.jsp?Funcion=TodaCartelera"); // Generar un objeto transformer para realizar transform XSL TransformerFactory tFactory = TransformerFactory.newInstance(); StreamSource stylesource = new StreamSource( "http://localhost:8080/cartelera/Cartelera.xsl"); Transformer transformer = tFactory.newTransformer(stylesource); DOMSource source = new DOMSource(document); ByteArrayOutputStream outputByteArray = new ByteArrayOutputStream(); StreamResult result = new StreamResult(outputByteArray); transformer.transform(source, result); return outputByteArray.toString(); } catch (Exception e) { e.printStackTrace(); } } 93

I Ejemplo XML + XSL

XHTML

16:00 19:30 22:00 16:30 19:00 94

Ejemplo XML + XSL

II XHTML

95

Ejemplo XML + XSL

III XHTML

Cine Dirección Población 96

Ejemplo XML + XSL

IV XHTML

Sesión Hora 97

Ejemplo XML + XSL

V XHTML

98

Ejemplo XML + XSL

VI XHTML

...

Cine Dirección Población
Coliseo Java Avda. Abaro Portugalete
Película Director Actores
Lo que el viento se llevó Santiago Segura Bo Derek, Al Pacino, Robert Reford
Sesión Hora
1
16:00 99

Resultado procesamiento XSLT

100