1 / 100

Tecnología XML

Tecnología XML. Dr. Diego Lz. de Ipiña Gz. de Artaza dipina@eside.deusto.es http://paginaspersonales.deusto.es/dipina. Contenidos. XML DTD Schema XML Parsing SAX API DOM API XSLT. ¿Qué es XML?. eXtensible Mark-up Language.

nen
Download Presentation

Tecnología XML

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Tecnología XML Dr. Diego Lz. de Ipiña Gz. de Artaza dipina@eside.deusto.es http://paginaspersonales.deusto.es/dipina

  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 <?xml version=”1.0”> <!DOCTYPE comedor SYSTEM “comedor.dtd”> <comedor> <fabricante>Ipiña Altzariak</fabricante> <mesa tipo="redonda" madera="arce"> <precio>€400</precio> </mesa> <silla madera="arce"> <cantidad>2</cantidad> <calidad>excelente</calidad> <cojin incluido="sí"> <color>azul</color> </cojin> <precio>€200</precio> </silla> </comedor>

  6. HTML describe formato <html> <head><title>Comedor</title></head> <body> <h1>Comedor</h1> <p>Fabricante: Ipiña Altzariak</p> <ul> <li><b>Mesa redonda de madera de arce</b></li> <li><b>Dos sillas de madera de arce</b>, de excelente calidad, con un cojín azul cada una.</li> <li><b>3 sillas de madera de roble</b>.</li> </ul> </body> </html>

  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 <-> 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: <?xml version="1.0"?> <saludo> Hola, mundo! </saludo>

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

  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. <saludo tipo=“coloquial”>Hola</saludo>

  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 <CUSTOMER LAST_NAME="Smith“ FIRST_NAME="Sam" DATE="October 15, 2001" PURCHASE="Tomatoes" PRICE=“€1.25" NUMBER="8" />

  14. Elementos vs. Atributos (cont) <CUSTOMER> <NAME> <LAST_NAME>Smith</LAST_NAME> <FIRST_NAME>Sam</FIRST_NAME> </NAME> <DATE>October 15, 2001</DATE> <ORDERS> <ITEM> <PRODUCT>Tomatoes</PRODUCT> <NUMBER>8</NUMBER> <PRICE>$1.25</PRICE> </ITEM> </ORDERS> </CUSTOMER>

  15. Referencias a entidades • Las referencias a entidades sirven para insertar un determinado contenido definido previamente. <!ENTITY Empresa “Universidad de Deusto”> <pie>Creado por &Empresa;</pie>

  16. Códigos de escape • Existen 5 referencias a entidades predefinidas: • &amp; el carácter & • &lt; el carácter < • &gt; el carácter > • &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. <![CDATA[<saludo>Hola, mundo!</saludo>]]>

  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 <!ELEMENT lab_group (student_name)*> <!ELEMENT student_name (#PCDATA)> <!ATTLIST student_name dni ID #REQUIRED tutor IDREF #IMPLIED>

  20. Document Type Definitions (cont) <?xml version="1.0"?> <!DOCTYPE mensaje SYSTEM “labgroups.dtd"> <lab_group> <student_name dni=“44670523"> Josu Artaza </student_name> <student_name dni=“44543211"> Nuria Buruaga </student_name> <student_name dni=“23554521" tutor=“33456211"> Inga Dorsman </student_name> </lab_group>

  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 : <!ELEMENT text (#PCDATA | emph | name)*> <!ATTLIST text timestamp NMTOKEN #REQUIRED> • XML Schema: <xsd:element name="text"> <xsd:complexType mixed="true"> <xsd:sequence> <xsd:element ref="emph"/> <xsd:element ref="name"/> </xsd:sequence> <xsd:attribute name="timestamp" type="xsd:date" use="required"/> </xsd:complexType> </xsd:element>

  23. Ejemplo Schema (cont) • XML Document: <?xml version="1.0"?> <text timestamp="08:45:00.000">The deadline of <name>ISO3 assigment</name> is <emph>November 21th 2003</emph>. </text>

  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. <!DOCTYPE saludo SYSTEM “saludo.dtd”> <!DOCTYPE saludo PUBLIC “-//Saludos//DTD Lenguaje de saludos//ES” “http://www.deusto.es/dtds/saludo.dtd”> • 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 <?xml version="1.0"?> <!DOCTYPE mensaje SYSTEM "mensaje.dtd"> <mensaje> <remite> <dir:direccion xmlns:dir=“http://www.deusto.es/direccion”> <dir:calle>Avda. Universidades</dir:calle> <dir:localidad cp=“40007”>Bilbao</dir:localidad> </dir:direccion> <nombre>Diego Ipiña</nombre> <email>dipina@eside.deusto.es</email> </remite> <!-- Resto del mensaje XML... --> </mensaje>

  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 Jakarta 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á en:http://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. XML Document SAX Objects <?xml version=“1.0”?> Parser endElement & endDocument endElement startElement startDocument startElement startElement & characters startElement & characters endElement startElement & characters startElement & characters <addressbook> </addressbook> Parser <person> </person> <name>Diego Ipiña</name> Parser <email>dipina@deusto.es</email> Parser Parser <person> </person> Parser <name>Asier Perallos</name> Parser Parser <email>perallos@deusto.es</email> Parser Parser ¿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/mhkay/saxon/ • Oracle XML Developer's Kit for Javahttp://technet.oracle.com/tech/xml/xdk_java.html • ParserAdapterhttp://www.megginson.com/SAX/Java/index.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: • EntityResolver – 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 <?xml version="1.0"?> <CarteleraCine> <Pelicula codigo='2' titulo='Los Otros' director='Alejandro Amenabar' actores='Nicole Kidman'> <Sesion>16:00</Sesion> <Sesion>19:00</Sesion> <Sesion>22:00</Sesion> </Pelicula> <Pelicula codigo='5' titulo='Malena' director='Giuseppe Tornatore' actores='Monica Bellucci, Giuseppe Sulfaro'> <Sesion>16:30</Sesion> <Sesion>19:00</Sesion> </Pelicula> </CarteleraCine>

  46. 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; ...

  47. Ejemplo SAX Parsing III public SesionCineSAXParser(String url) { // Obtener referencia al parser factory SAXParserFactory factory = SAXParserFactory.newInstance(); // 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 --> 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 = ""; } }

  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.textoSesion); } }

More Related