Tecnolog - PowerPoint PPT Presentation

About This Presentation
Title:

Tecnolog

Description:

expat, parser written in C by James ... com n implementado por muchos XML Parsers ... XML Project's Xerces Java Parser. http://xml.apache.org/xerces ... – PowerPoint PPT presentation

Number of Views:124
Avg rating:3.0/5.0
Slides: 101
Provided by: bas54
Category:
Tags: parsers | tecnolog

less

Transcript and Presenter's Notes

Title: Tecnolog


1
Tecnología XML
  • Dr. Diego Lz. de Ipiña Gz. de Artaza

2
Contenidos
  • XML
  • DTD
  • Schema
  • XML Parsing
  • SAX API
  • DOM API
  • XSLT

3
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 Specificationhttp//www.w3.org/TR/REC-xml

4
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

5
XML describe estructura y semántica
  • lt?xml version1.0gt
  • lt!DOCTYPE comedor SYSTEM comedor.dtdgt
  • ltcomedorgt
  • ltfabricantegtIpiña Altzariaklt/fabricantegt
  • ltmesa tipo"redonda" madera"arce"gt
  • ltpreciogt400lt/preciogt
  • lt/mesagt
  • ltsilla madera"arce"gt
  • ltcantidadgt2lt/cantidadgt
  • ltcalidadgtexcelentelt/calidadgt
  • ltcojin incluido"sí"gt
  • ltcolorgtazullt/colorgt
  • lt/cojingt
  • ltpreciogt200lt/preciogt
  • lt/sillagt
  • lt/comedorgt

6
HTML describe formato
  • lthtmlgt
  • ltheadgtlttitlegtComedorlt/titlegtlt/headgt
  • ltbodygt
  • lth1gtComedorlt/h1gt
  • ltpgtFabricante Ipiña Altzariaklt/pgt
  • ltulgt
  • ltligtltbgtMesa redonda de madera de
    arcelt/bgtlt/ligt
  • ltligtltbgtDos sillas de madera de
    arcelt/bgt, de excelente calidad, con un cojín azul
    cada una.lt/ligt
  • ltligtltbgt3 sillas de madera de roblelt/bgt.lt/ligt
  • lt/ulgt
  • lt/bodygt
  • lt/htmlgt

7
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

8
Usos XML
  • Sitios web
  • Permite separar contenido y presentación
  • Comunicación lt-gt intercambio datos
  • Servicios web
  • Como configuración de programas
  • Deployment descriptos en servidores J2EE
  • Ant make system

9
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

10
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
  • lt?xml version"1.0"?gt
  • ltsaludogt
  • Hola, mundo!
  • lt/saludogt

11
Comentarios en XML
  • Los comentarios no se procesan.
  • Tienen la siguiente sintaxis
  • lt!-- Esto es un comentario --gt

12
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.
  • ltsaludo tipocoloquialgtHolalt/saludogt

13
Elementos vs. Atributos
  • Demasiados atributos hacen que los documentos XML
    se puedan leer difícilmente.
  • No se puede indicar estructura de documento
    mediante atributos
  • ltCUSTOMER LAST_NAME"Smith
  • FIRST_NAME"Sam" DATE"October 15, 2001"
    PURCHASE"Tomatoes" PRICE1.25" NUMBER"8" /gt

14
Elementos vs. Atributos (cont)
  • ltCUSTOMERgt
  • ltNAMEgt
  • ltLAST_NAMEgtSmithlt/LAST_NAMEgt
  • ltFIRST_NAMEgtSamlt/FIRST_NAMEgt
  • lt/NAMEgt
  • ltDATEgtOctober 15, 2001lt/DATEgt
  • ltORDERSgt
  • ltITEMgt
  • ltPRODUCTgtTomatoeslt/PRODUCTgt
  • ltNUMBERgt8lt/NUMBERgt
  • ltPRICEgt1.25lt/PRICEgt
  • lt/ITEMgt
  • lt/ORDERSgt
  • lt/CUSTOMERgt

15
Referencias a entidades
  • Las referencias a entidades sirven para insertar
    un determinado contenido definido previamente.
  • lt!ENTITY Empresa Universidad de Deustogt
  • ltpiegtCreado por Empresalt/piegt

16
Códigos de escape
  • Existen 5 referencias a entidades predefinidas
  • amp el carácter
  • lt el carácter lt
  • gt el carácter gt
  • apos el carácter
  • quot el caracter
  • Se incluyen los caracteres del juego ISO 10646.
  • 145
  • x2F31

17
Secciones CDATA
  • Las secciones CDATA (character data) contienen
    texto que no debe ser procesado.
  • Se tratan como una secuencia de caracteres sin
    estructura.
  • lt!CDATAltsaludogtHola, mundo!lt/saludogtgt

18
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

19
Document Type Definitions (DTDs)
  • Especifican la estructura y sintaxis de un
    documento XML
  • Labgroups.dtd
  • lt!ELEMENT lab_group (student_name)gt
  • lt!ELEMENT student_name (PCDATA)gt
  • lt!ATTLIST student_name
  • dni ID REQUIRED
  • tutor IDREF IMPLIEDgt

20
Document Type Definitions (cont)
  • lt?xml version"1.0"?gt
  • lt!DOCTYPE mensaje SYSTEM labgroups.dtd"gt
  • ltlab_groupgt
  • ltstudent_name dni44670523"gt
  • Josu Artaza
  • lt/student_namegt
  • ltstudent_name dni44543211"gt
  • Nuria Buruaga
  • lt/student_namegt
  • ltstudent_name dni23554521"
    tutor33456211"gt
  • Inga Dorsman
  • lt/student_namegt
  • lt/lab_groupgt

21
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.

22
Ejemplo Schema
  • DTD
  • lt!ELEMENT text (PCDATA emph name)gt
  • lt!ATTLIST text timestamp NMTOKEN REQUIREDgt
  • XML Schema
  • ltxsdelement name"text"gt
  • ltxsdcomplexType mixed"true"gt
  • ltxsdsequencegt
  • ltxsdelement ref"emph"/gt
  • ltxsdelement ref"name"/gt
  • lt/xsdsequencegt
  • ltxsdattribute name"timestamp"
    type"xsddate" use"required"/gt
  • lt/xsdcomplexTypegt
  • lt/xsdelementgt

23
Ejemplo Schema (cont)
  • XML Document
  • lt?xml version"1.0"?gt
  • lttext timestamp"084500.000"gtThe deadline of
    ltnamegtISO3 assigmentlt/namegt is ltemphgtNovember
    21th 2003lt/emphgt.
  • lt/textgt

24
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 son aquellos que, además de ser bien
    formados, siguen las reglas de una gramática
    (definida en un DTD o XML Schema)

25
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
  • ...

26
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.
  • lt!DOCTYPE saludo SYSTEM saludo.dtdgt
  • lt!DOCTYPE saludo PUBLIC -//Saludos//DTD Lenguaje
    de saludos//ES http//www.deusto.es/dtds/saludo.
    dtdgt
  • También se puede insertar el DTD entero en ese
    punto, en lugar de referenciar al fichero.

27
Proceso de validación documento XML
28
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.

29
Ejemplo XML Namespaces
  • lt?xml version"1.0"?gt
  • lt!DOCTYPE mensaje SYSTEM "mensaje.dtd"gt
  • ltmensajegt
  • ltremitegt
  • ltdirdireccion xmlnsdirhttp//www.deusto.es/d
    irecciongt
  • ltdircallegtAvda. Universidadeslt/dircallegt
  • ltdirlocalidad cp40007gtBilbaolt/dirlocalidad
    gt
  • lt/dirdirecciongt
  • ltnombregtAlfredo Reinolt/nombregt
  • ltemailgtalf_at_ibium.comlt/emailgt
  • lt/remitegt
  • lt!-- Resto del mensaje XML... --gt
  • lt/mensajegt

30
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)

31
Herramientas de XML
  • Editores
  • http//www.xmlcooktop.com/ ? gratis
  • XML Spy, www.xmlspy.com
  • XML parsers
  • 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 Xerces (www.apache.org)
  • XML Validators
  • Verifican que XML es válido
  • XML.com's Validator based on Lark (xml.com)

32
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

33
XML Parsing
34
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

35
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á
    enhttp//www.megginson.com/SAX/Java/index.html

36
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 eficiencia en cuanto al tiempo y la
    memoria empleados en el análisis
  • Desventaja no disponemos de la estructura en
    árbol de los documentos

37
Cómo funciona SAX?
38
SAX2/Java Parsers y Drivers
  • Sun's JAXPhttp//java.sun.com/xml/
  • The Apache XML Project's Xerces Java
    Parserhttp//xml.apache.org/xerces-j/index.html
  • SAXON XSLT processorhttp//users.iclway.co.uk/mhk
    ay/saxon/
  • Oracle XML Developer's Kit for Javahttp//technet
    .oracle.com/tech/xml/xdk_java.html
  • ParserAdapterhttp//www.megginson.com/SAX/Java/in
    dex.html

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

40
Arquitectura Java JAXP
41
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)

42
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.

43
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

44
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

45
Ejemplo SAX Parsing I
  • lt?xml version"1.0"?gt
  • ltCarteleraCinegt
  • ltPelicula codigo'2' titulo'Los Otros'
  • director'Alejandro Amenabar'
  • actores'Nicole Kidman'gt
  • ltSesiongt1600lt/Sesiongt
  • ltSesiongt1900lt/Sesiongt
  • ltSesiongt2200lt/Sesiongt
  • lt/Peliculagt
  • ltPelicula codigo'5' titulo'Malena'
  • director'Giuseppe Tornatore'
  • actores'Monica Bellucci, Giuseppe
    Sulfaro'gt
  • ltSesiongt1630lt/Sesiongt
  • ltSesiongt1900lt/Sesiongt
  • lt/Peliculagt
  • lt/CarteleraCinegt

46
Ejemplo SAX Parsing II
  • import java.util.Vector
  • // Imports de JAXP API
  • import javax.xml.parsers.SAXParserFactory
  • import javax.xml.parsers.ParserConfigurationExcept
    ion
  • 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

47
Ejemplo SAX Parsing III
  • public SesionCineSAXParser(String url)
  • // Obtener referencia al parser factory
  • SAXParserFactory factory SAXParserFactory.newI
    nstance()
  • // factory.setNamespaceAware(true) // activar
    namespaces
  • try
  • // 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()

48
Ejemplo SAX Parsing IV
  • public void startElement(String namespaceURI,
    String lName,
  • String qName,Attributes
    attrs)
  • throws SAXException
  • // lname --gt contiene el nombre local (sin
    prefijo), o el string vacio
  • // si procesamiento de namespaces no se lleva a
    cabo.
  • // qname --gt 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 ""

49
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()

50
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.textoSes
    ion)

51
Ejemplo SAX Parsing VII
  • // Método para recuperar vector con
  • // objetos SesionesPelicula creados
  • // en parsing
  • public Vector getSesionesPeliculas()
  • return this.sesionesPeliculas

52
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 Bindinghttp//www.w3.org/TR/DO
    M-Level-2-Core/java-binding.html

53
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

54
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

55
Objetos relacionados con Nodos
  • Node un nodo en el árbol de un documento
  • NodeList una lista de objetos nodos
  • NamedNodeMap permite interacción y acceso por
    nombre a una colección de atributos

56
Documento XML como un árbol de nodos
  • lt?xml version"1.0" encoding"UTF-8"?gt
  • ltDOCUMENTgt
  • ltGREETINGgtHello from XMLlt/GREETINGgt
  • ltMESSAGEgtWelcome to Programing XML in
    Javalt/MESSAGEgt
  • lt/DOCUMENTgt

57
Documento XML como un árbol de nodos (cont)
58
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 DocumentBuilderFacto
    ry.newInstance()
  • // Crear nueva instancia de DOMBuilder
  • DocumentBuilder parser fact.newDocumentBuilder()

59
Clase DocumentBuilder
  • Método parse() analiza fichero entrada
  • Método Document getDocument() devuelve el
    documento generado durante parsing
  • parser.parse(fich)
  • Document doc parser.getDocument()

60
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
    raiz el documento
  • Element getElementById(String elementId)Devuelve
    el elemento identificado por elementoId
  • NodeList getElementsByTagName(String
    tagname)Devuelve una lista de elementos
    identificados por el nombre de etiqueta dado

61
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

62
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

63
Ejemplo DOM I
  • lt?xml version"1.0" encoding"iso-8859-1"?gt
  • ltPeliculasgt
  • ltPelicula codigo'1' titulo'Lo que el viento
    se llevó'
  • director'Victor Fleming'
  • actores'Clark Gable, Vivien
    Leigh, Leslie Howard'/gt
  • ltPelicula codigo'2' titulo'Los Otros'
  • director'Alejandro Amenabar'
  • actores'Nicole Kidman'/gt
  • ltPelicula codigo"5" titulo"Malena"
  • director"Giuseppe Tornatore"
  • actores"Monica Bellucci,
    Giuseppe Sulfaro"/gt
  • lt/Peliculasgt

64
Ejemplo DOM II
65
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.newDocumentBuild
    er()
  • parser.parse(fich)
  • Document doc parser.getDocument()
  • EjemploDOM.tratarNodo(doc)
  • ...

66
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

67
Ejemplo DOM V
  • case Node.DOCUMENT_NODE
  • System.out.println("ltxml version\"1.0\"gt")
  • Document doc (Document)nodo
  • tratarNodo(doc.getDocumentElement())
  • break

68
Ejemplo DOM VI
  • case Node.ELEMENT_NODE
  • String nombre nodo.getNodeName()
  • System.out.print("lt" nombre)
  • NamedNodeMap ats nodo.getAttributes()
  • for (int i0 iltats.getLength() i)
  • tratarNodo(ats.item(i))
  • System.out.println("gt")
  • NodeList hijos nodo.getChildNodes()
  • ... // tratar los hijos recursivamente
  • break
  • case Node.ATTRIBUTE_NODE
  • System.out.print(" " nodo.getNodeName()
    "\"" nodo.getNodeValue() "\"")

69
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")

70
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.

71
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/xsl
    t

72
Operaciones entre árboles en XSL
73
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 cierta memoria y capacidad de proceso ?
    DOM detrás

74
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)

75
Documento XML (students.xml)
  • lt?xml version"1.0"?gt
  • ltcoursegt
  • ltname id"csci_2962"gtProgramming XML in
    Javalt/namegt
  • ltteacher iddi"gtDiego Ipiñalt/teachergt
  • ltstudent idua"gt
  • ltnamegtUsue Artazalt/namegt
  • lthw1gt30lt/hw1gt
  • lthw2gt70lt/hw2gt
  • ltprojectgt80lt/projectgt
  • ltfinalgt85lt/finalgt
  • lt/studentgt
  • ltstudent idiu"gt
  • ltnamegtIñigo Urrutialt/namegt
  • lthw1gt80lt/hw1gt
  • lthw2gt90lt/hw2gt
  • ltprojectgt100lt/projectgt
  • ltfinalgt40lt/finalgt
  • lt/studentgt
  • lt/coursegt

76
Hoja de estilo XSLT (students.xsl)
  • lt?xml version"1.0"?gt
  • ltxslstylesheet version"1.0 xmlnsxsl"http//ww
    w.w3.org/1999/XSL/Transform"gt
  • ltxsltemplate match"course"gt
  • ltHTMLgt
  • ltHEADgtltTITLEgtName of studentslt/TITLEgtlt/HEADgt
  • ltBODYgt
  • ltxslapply-templates select"student"/gt
  • lt/BODYgt
  • lt/HTMLgt
  • lt/xsltemplategt
  • ltxsltemplate match"student"gt
  • ltPgtltxslvalue-of select"name"/gtlt/Pgt
  • lt/xsltemplategt
  • lt/xslstylesheetgt

77
Resultado de transformación
  • (students.html)
  • ltHTMLgt
  • ltHEADgt ltTITLEgtName of studentslt/TITLEgt lt/HEADgt
  • ltBODYgt
  • ltPgtUsue Artazalt/Pgt
  • ltPgtIñigo Urrutialt/Pgt
  • lt/BODYgt
  • lt/HTMLgt

78
Formas de uso de XSLT
  • Visualizar directamente en un navegador el
    documento XML que tiene asociada una hoja XSLT.
  • Ejecutar el procesador XSLT independientemente
    del 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.
  • Realizar las transformaciones dentro de un
    programa en el servidor y enviar a los clientes
    sólo el resultado de la transformación.

79
Aplicaciones usando XSLT
80
Ejemplos de Procesadores XSLT existentes
  • Oracle XML parser for Javahttp//technet.oracle.c
    om/tech/xml/parser_java2/
  • Saxonhttp//users.iclway.co.uk/mhkay/saxon/index.
    html
  • XThttp//www.jclark.com/xml/xt.html
  • Sablotronhttp//www.gingerall.com/charlie-bin/get
    /webGA/act/sablotron.act
  • Microsoft XML Parserhttp//msdn.microsoft.com/dow
    nloads/webtechnology/xml/msxml.asp
  • Xalan Javahttp//xml.apache.org/xalan-j/index.htm
    l
  • Java JAXP

81
XSLT son documentos XML bien formados
  • xslstylesheet elemento raiz
  • xsltemplate cómo transformar un nodo
    seleccionado
  • 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 xslapply-templates. Aplica los
    templates definidos para los hijos de un nodo
    seleccionado

82
Ejemplo XSLT
  • lt?xml version"1.0"?gt
  • ltxslstylesheet version"1.0"
    xmlnsxsl"http//www.w3.org/1999/XSL/Transform"gt
  • ltxsltemplate match"/"gt
  • ltxslapply-templates/gt
  • lt/xsltemplategt
  • lt/xslstylesheetgt

83
Elementos XSLT
  • xslvalue-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
  • ltxsltemplate matchcourse"gt
  • ltxslvalue-of selectstudent"/gt
  • lt/xsltemplategt
  • Si queremos seleccionar varios podemos hacer
  • ltxsltemplate matchcourse"gt
  • ltxslapply-templates selectstudent"/gt
  • lt/xsltemplategt
  • ltxsltemplate matchstudent"gt
  • ltxslvalue-of select"."/gt
  • lt/xsltemplategt
  • O usar xslfor-each
  • ltxsltemplate matchcourse"gt
  • ltxslfor-each selectstudent"gt
  • ltxslvalue-of select"."/gt
  • lt/xslfor-eachgt
  • lt/xsltemplategt

84
Elementos XSLT (cont)
  • Para realizar distintos procesamientos en función
    de los datos se usa xslchoose
  • Se compone de elementos xslwhen
  • Un elemento opcional xslotherwise
  • Para procesar o no un elemento en función de una
    condición se usa xslif
  • Condición en atributo test

85
Ejemplo
  • lt?xml version"1.0"?gt
  • ltxslstylesheet version"1.0" xmlnsxsl"http//ww
    w.w3.org/1999/XSL/Transform"gt
  • ltxsltemplate match"/"gt
  • ltHTMLgt
  • ltHEADgt ltTITLEgtName of studentslt/TITLEgt
    lt/HEADgt
  • ltBODYgt
  • ltxslapply-templates/gt
  • lt/BODYgt
  • lt/HTMLgt
  • lt/xsltemplategt
  • ltxsltemplate match"course"gt
  • ltxslapply-templates select"student"/gt
  • lt/xsltemplategt
  • ltxsltemplate match"student"gt
  • ltxslfor-each select"name"gtltPgtltxslvalue-of
    select"."/gtlt/Pgtlt/xslfor-eachgt
  • lt/xsltemplategt
  • lt/xslstylesheetgt

86
Patrones XPath para el atributo match o select
  • Seleccionar el nodo raiz
  • ltxsltemplate match"/"gt ... lt/xsltemplategt
  • Seleccionar un elemento
  • ltxsltemplate match"student"gt ...lt/xsltemplategt
  • Seleccionar hijos de un elemento
  • ltxsltemplate match"course/student"gt ...
    lt/xsltemplategt
  • ltxsltemplate match"course//name"gt ...
    lt/xsltemplategt
  • Seleccionar descendientes de un elemento
  • ltxsltemplate match"course//name"gt ...
    lt/xsltemplategt

87
Patrones XPath para el atributo match o select
  • Seleccionar atributo título
  • ltxslvalue-of select"./_at_id"/gt
  • Seleccionar comentarios
  • ltxsltemplate match"comment()"gt ...
    lt/xsltemplategt
  • Seleccionar elementos de texto
  • ltxsltemplate match"text()"gt ... lt/xsltemplategt
  • Recuperar posición que ocupa un sub-elemento
    dentro de elemento padre
  • ltxslvalue-of select"position()"/gt

88
Evaluando condiciones con
  • Evaluando si una condición es cierta
  • Si el elemento estudiante tiene un hijo name
  • ltxsltemplate match"studentname"gt
  • Cualquier elemento que tiene un elemento namE
  • ltxsltemplate match"name"gt
  • Elemento student tiene un sub-elemento hw1 o hw2
    element
  • ltxsltemplate match"studenthw1 hw2"gt

89
Ejemplo XSLT
  • Problema Imprimir nombre de alumnos con nota
    media mayor de 65
  • lt?xml version"1.0"?gt
  • ltxslstylesheet version"1.0"
  • xmlnsxsl"http//www.w3.org/1999/XSL/T
    ransform"gt
  • ltxsloutput method"text"/gt
  • ltxsltemplate match"course"gt
  • ltxslapply-templates select"student"/gt
  • lt/xsltemplategt
  • ltxsltemplate match"student"gt
  • ltxslvariable name"ave"gt
  • ltxslvalue-of select"(hw1 hw2
    project final) div 4"/gt
  • lt/xslvariablegt
  • ltxslif test"ave gt 65"gt
  • Student name"ltxslvalue-of select"name"/gt"
    average"ltxslvalue-of select"ave"/gt"
  • lt/xslifgt
  • lt/xsltemplategt
  • lt/xslstylesheetgt

90
Resultado transformación
  • Salida (grades70.txt)
  • Student nameUsue Artaza" average"66,25"
  • Student nameIñigo Urrutia" average"77,5"

91
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

92
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.TransformerConfiguratio
    nException
  • import javax.xml.transform.dom.DOMSource
  • import javax.xml.transform.stream.StreamSource
  • import javax.xml.transform.stream.StreamResult
  • import org.w3c.dom.Document
  • ...

93
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//localhost8080/cartelera/Cines.jsp?Funcion
    TodaCartelera")
  • // Generar un objeto transformer para
    realizar transform XSL
  • TransformerFactory tFactory
    TransformerFactory.newInstance()
  • StreamSource stylesource new
    StreamSource(
  • "http//localhost8080/cartelera/C
    artelera.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()

94
Ejemplo XML XSL ? XHTML I
  • lt?xml version"1.0" encoding"iso-8859-1"?gt
  • ltCarteleragt
  • ltCine codigo'1' nombre'Coliseo Java'
    direccion'Avda. Abaro' poblacion'Portugalete'gt
  • ltPelicula codigo'1' titulo'Lo que el
    viento se llevó'
  • director 'Victor Fleming '
  • actores 'Clark Gable,
    Vivien Leigh, Leslie Howard 'gt
  • ltSesiongt1600lt/Sesiongt
  • ltSesiongt1930lt/Sesiongt
  • ltSesiongt2200lt/Sesiongt
  • lt/Peliculagt
  • ltPelicula codigo'5' titulo'Malena'
  • director'Giuseppe
    Tornatore'
  • actores'Monica Bellucci,
    Giuseppe Sulfaro'gt
  • ltSesiongt1630lt/Sesiongt
  • ltSesiongt1900lt/Sesiongt
  • lt/Peliculagt
  • lt/Cinegt
  • lt/Carteleragt

95
Ejemplo XML XSL ? XHTML II
  • lt?xml version"1.0" encoding"iso-8859-1"?gt
  • ltxslstylesheet xmlnsxslhttp//www.w3.org/1999/X
    SL/Transform version"1.0"gt
  • ltxsloutput method"html"/gt
  • ltxsltemplate match"/"gt
  • lthtmlgt
  • ltheadgt
  • ltstyle type"text/css"gt
  • table font-family
    arial, 'sans serif' margin-left 15pt
  • th,td font-size 80
  • th background-colorFAEB
    D7
  • lt/stylegt
  • lt/headgt
  • ltbodygt
  • lttable border"1"gt
  • ltxslapply-templates/gt
  • lt/tablegt
  • lt/bodygt
  • lt/htmlgt
  • lt/xsltemplategt

96
Ejemplo XML XSL ? XHTML III
  • ltxsltemplate match"Cartelera"gt
  • ltxslfor-each select"Cine"gt
  • lttrgt
  • ltthgtltxsltextgtCinelt/xsltextgtlt
    /thgt
  • ltthgtltxsltextgtDirecciónlt/xslt
    extgtlt/thgt
  • ltthgtltxsltextgtPoblaciónlt/xslt
    extgtlt/thgt
  • ltthgtlt/thgt
  • lt/trgt
  • lttrgt
  • lttdgtltxslvalue-of
    select"./_at_nombre"/gtlt/tdgt
  • lttdgtltxslvalue-of
    select"./_at_direccion"/gtlt/tdgt
  • lttdgtltxslvalue-of
    select"./_at_poblacion"/gtlt/tdgt
  • lttdgtltxsltextgtlt/xsltextgtlt/tdgt
  • lt/trgt
  • ltxslfor-each select"Peliculagt
  • lttrgt
  • ltthgtlt/thgt
  • ltthgtltxsltextgtPelículalt/xs
    ltextgtlt/thgt
  • ltthgtltxsltextgtDirectorlt/xs
    ltextgtlt/thgt

97
Ejemplo XML XSL ? XHTML IV
  • lttrgt
  • ltthgtlt/thgt
  • ltthgtlt/thgt
  • ltthgtltxsltextgtSesiónlt/xslte
    xtgtlt/thgt
  • ltthgtltxsltextgtHoralt/xsltext
    gtlt/thgt
  • lt/trgt
  • ltxslfor-each select"Sesion"gt
  • lttrgt
  • lttdgtltxsltextgtlt/xsltext
    gtlt/tdgt
  • lttdgtltxsltextgtlt/xsltext
    gtlt/tdgt
  • lttdgtltxslvalue-of
    select"position()"/gtlt/tdgt
  • lttdgtltxslvalue-of
    select"."/gtlt/tdgt
  • lt/trgt
  • lt/xslfor-eachgt
  • lt/xslfor-eachgt
  • lt/xslfor-eachgt
  • lt/xsltemplategt
  • lt/xslstylesheetgt

98
Ejemplo XML XSL ? XHTML V
  • lthtmlgt
  • ltbodygt
  • lttable border"1"gt
  • lttrgt
  • ltthgtCinelt/thgt
  • ltthgtDireccioacutenlt/thgt
  • ltthgtPoblacioacutenlt/thgt
  • ltthgtlt/thgt
  • lt/trgt
  • lttrgt
  • lttdgtColiseo Javalt/tdgt
  • lttdgtAvda. Abarolt/tdgt
  • lttdgtPortugaletelt/tdgt
  • lttdgtlt/tdgt
  • lt/trgt
  • lttrgt
  • ltthgtlt/thgt
  • ltthgtPeliacuteculalt/thgt
  • ltthgtDirectorlt/thgt

99
Ejemplo XML XSL ? XHTML VI
  • lttrgt
  • lttdgtlt/tdgt
  • lttdgtLo que el viento se
    llevoacutelt/tdgt
  • lttdgtSantiago Seguralt/tdgt
  • lttdgtBo Derek, Al Pacino, Robert
    Refordlt/tdgt
  • lt/trgt
  • lttrgt
  • ltthgtlt/thgt
  • ltthgtlt/thgt
  • ltthgtSesioacutenlt/thgt
  • ltthgtHoralt/thgt
  • lt/trgt
  • lttrgt
  • lttdgtlt/tdgt
  • lttdgtlt/tdgt
  • lttdgt1lt/tdgt
  • lttdgt1600lt/tdgt
  • lt/trgt
  • lttrgt

100
Resultado procesamiento XSLT
Write a Comment
User Comments (0)
About PowerShow.com