Professional Documents
Culture Documents
Contenidos
XML
DTD Schema
SAX API DOM API
XML Parsing
XSLT
2
Qu es XML?
eXtensible Mark-up Language. Es un metalenguaje que permite disear otros lenguajes (WML, MathML, XHTML,..). Cualquiera puede desarrollar su propio lenguaje de etiquetas adecuado al tipo de aplicacin que ms le convenga. En realidad hay muchas tecnologas 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 aplicacin de SGML XML es subconjunto ms fcil de usar de SGML XHTML es una aplicacin de XML
Ventajas XML
Una de las mayores utilidades de XML es poder etiquetar los datos con su significado (self-describing data). Permite la estructuracin de la informacin. Ello lleva el tratamiento automtico de la informacin a lmites insospechados. XML es la base de la nueva generacin de aplicaciones web intercambio de datos
7
Usos XML
Sitios web
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 prlogo del documento:
10
Comentarios en XML
11
Los elementos son los que aportan estructura semntica al documento. Se delimitan por etiquetas de apertura, cierre y etiquetas sin elementos interiores (etiquetas vacas). Las etiquetas de apertura y las vacas suelen venir acompaadas de atributos, que parametrizan el elemento. El valor de los atributos siempre se encierra entre comillas, dobles o simples.
<saludo tipo=coloquial>Hola</saludo>
12
Demasiados atributos hacen que los documentos XML se puedan leer difcilmente. 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" />
13
Referencias a entidades
Las referencias a entidades sirven para insertar un determinado contenido definido previamente.
15
Cdigos de escape
& el carcter & < el carcter < > el carcter > ' el carcter ` " el caracter
16
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>]]>
17
Gramticas en XML
La gramtica que restringe los elementos vlidos dentro de un nuevo derivado de XML puede expresarse en forma de:
18
<!ELEMENT lab_group (student_name)*> <!ELEMENT student_name (#PCDATA)> <!ATTLIST student_name dni ID #REQUIRED tutor IDREF #IMPLIED>
19
20
XML Schemas Los DTD no son muy potentes para definir gramticas. Otra forma de hacerlo es con Esquemas XML basados en el propio XML y que soporta ms tipos de datos.
21
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>
22
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>
23
Hay dos tipos de documentos XML: Bien formados: son aquellos que
cumplen las reglas sintcticas de XML
ser bien formados, siguen las reglas de una gramtica (definida en un DTD o XML Schema)
24
Debe tener un prlogo Debe tener una etiqueta raz Las etiquetas se hallan correctamente anidadas Se usan caracteres vlidos y bien aplicados Los valores de los atributos vienen encerrados entre comillas ...
25
Para que un documento sea vlido debe declarar el DTD o XML Schema contra el cual debe validarse. Se hace mediante DOCTYPE, pudiendo ser los DTD pblicos o de sistema.
<!DOCTYPE saludo SYSTEM saludo.dtd> <!DOCTYPE saludo PUBLIC -//Saludos//DTD Lenguaje de saludos//ES http://www.deusto.es/dtds/saludo.dtd>
Tambin se puede insertar el DTD entero en ese punto, en lugar de referenciar al fichero.
26
DTD?
Procesamiento de la informacin
(opcional)
no
si si
DTD
Valid?
no
27
XML Namespaces
El estndar XML tambin define los espacios de nombres (XML Namespaces). Permiten que un mismo documento XML tenga etiquetas de diferentes lenguajes (definidas en diferentes gramticas DTD). As es posible mezclar ms informacin en los documentos, por ejemplo, aadir informacin semntica a un documento XHTML.
28
29
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
XML parsers
http://www.xmlcooktop.com/ gratis XML Spy, www.xmlspy.com Lee un documento XML Verifica que XML est bien formado Verifican que XML es vlido
XML Validators
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)
Un documento XML puede ser fcilmente 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 cdigo portable
32
XML Parsing
Documento XML Aplicacin XML
Parser XML
33
SAX
Define interfaz dirigido por eventos (event-driven) para el procesamiento de un documento XML Definido por David Megginson y lista correo XMLDEV : http://www.megginson.com/SAX
DOM
Provee una representacin de un documento XML en forma de un rbol Carga todo el documento XML en memoria http://www.w3.org/DOM
34
Define un interfaz comn implementado por muchos XML Parsers Es el estndar de-facto para procesamiento de XML basado en eventos SAX no es un parseador de XML SAX2 aade soporte para XML Namespaces La especificacin de SAX 2.0/Java est en: http://www.megginson.com/SAX/Java/index. html
35
Caractersticas de SAX
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 anlisis Desventaja: no disponemos de la estructura en rbol de los documentos
36
Detecta cundo 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
startElement & characters startElement & characters endElement startElement startElement & characters startElement & characters endElement endElement & endDocument 37
<email>perallos@deusto.es</email>
</person> </addressbook>
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 para crear una instancia de un objeto SAXParser (independiente de implementacin SAX parser)
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
39
40
EntityResolver y DTDHandler
EntityResolver
DTDHandler
ErrorHandler
void error(SAXParserException exception)
ContentHandler
void characters(char[] ch, int start, int length)
Recibe notificacin de caracteres encontrados dentro de un elemento. Recibe notificacin de final de documento. Recibe notificacin de final de elemento.
void endDocument()
void startDocument()
DefaultHandler
Manejador de contenido que define una serie de mtodos 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 mtodos callback de los 4 manejadores de SAX2:
46
48
49
50
51
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-2Core/java-binding.html
52
Caractersticas DOM
de la jerarqua de elementos, as como modificar el contenido de los documentos e incluso crearlos desde cero.
53
Element un elemento XML Attribute un attributo Text texto contenido en un elemento o atributo CDATAsection seccin CDATA EntityReference Referencia a una entidad Entity Indicacin de una entidad XML ProcessingInstruction Una instruccin 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 anotacin
54
Node un nodo en el rbol de un documento NodeList una lista de objetos nodos NamedNodeMap permite interaccin y acceso por nombre a una coleccin de atributos
55
56
57
JAXP DOM
API JAXP de J2SE provee independencia del analizador Para conseguir una instancia de analizador DOM a travs 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
Mtodo parse() analiza el fichero entrada Mtodo Document getDocument() devuelve el documento generado durante parsing
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 raz 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
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
NodeList
int getLength() Devuelve nmero de nodos en lista Node item(int index) Devuelve el nodo identificado por index en una coleccin int getLength() Devuelve nmero 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 coleccin
62
NamedNodeMap
Ejemplo DOM I
<?xml version="1.0" encoding="iso-8859-1"?> <Peliculas> <Pelicula codigo='1' titulo='Lo que el viento se llev' director='Victor Fleming' actores='Clark Gable, Vivien Leigh, Leslie Howard'/> <Pelicula codigo='2' titulo='Los Otros' director='Alejandro Amenabar' actores='Nicole Kidman'/> <Pelicula codigo="5" titulo="Malena" director="Giuseppe Tornatore" actores="Monica Bellucci, Giuseppe Sulfaro"/> </Peliculas>
63
Ejemplo DOM II
Root
Pelculas
Pelcula
...
Pelcula
codigo=1
codigo=5
titulo=Malena
diirector=Victor Fleming
diirector=Giuseppe Tornatore
64
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("<xml version=\"1.0\">"); 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<ats.getLength(); i++) { tratarNodo(ats.item(i)); } System.out.println(">"); NodeList hijos = nodo.getChildNodes(); ... // tratar los hijos recursivamente break; case Node.ATTRIBUTE_NODE: System.out.print(" " + nodo.getNodeName() + "=\"" + nodo.getNodeValue() +"\"");
68
Con la diversidad de lenguajes de presentacin que hay (WML, HTML, cHTML) existen dos alternativas para desarrollar las aplicaciones:
Desarrollar versiones de los procesos de generacin de presentacin (JSP, ASP, CGI,..) para cada lenguaje. Desarrollar solo una versin que genere XML y conversores de XML a los lenguajes de presentacin.
70
Dos partes:
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
72
Ventajas:
No asume un nico formato de salida de documentos Permite manipular de muy diversas maneras un documento XML: reordenar elementos, filtrar, aadir, borrar, etc. Permite acceder a todo el documento XML XSLT es un lenguaje XML
Su utilizacin es ms compleja que un lenguaje de programacin convencional Consume cierta memoria y capacidad de proceso DOM detrs
Desventajas:
73
El documento XML a transformar (students.xml) La hoja de estilo que especifica la transformacin (students.xsl)
74
75
Resultado de transformacin
(students.html)
<HTML> <HEAD> <TITLE>Name of students</TITLE> </HEAD> <BODY> <P>Usue Artaza</P> <P>Iigo Urrutia</P> </BODY> </HTML>
77
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 slo el resultado de la transformacin.
78
JSP
Arquitectura en 5 capas dnde el servidor contiene conversores XSLT para generar presentacin en distintos formatos.
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/charliebin/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
Se asocia con un fragmento del documento a travs de una expresin en XPath Transforma XML entrante en otro fragmento de XML match Atributo para seleccionar nodo
Elemento xsl:apply-templates. Aplica los templates definidos para los hijos de un nodo seleccionado
81
Ejemplo XSLT
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999 /XSL/Transform"> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet>
82
Elementos XSLT
Los nodos son seleccionados usando la sintxis de la especificacin XPath XML Slo selecciona el valor del primer estudiante que encuentre
O usar xsl:for-each
83
84
Ejemplo
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <HTML> <HEAD> <TITLE>Name of students</TITLE> </HEAD> <BODY> <xsl:apply-templates/> </BODY> </HTML> </xsl:template> <xsl:template match="course"> <xsl:apply-templates select="student"/> </xsl:template> <xsl:template match="student"> <xsl:for-each select="name"><P><xsl:value-of select="."/></P></xsl:for-each> </xsl:template> </xsl:stylesheet>
85
86
Seleccionar comentarios:
<xsl:template match="comment()"> ... </xsl:template>
88
Ejemplo XSLT
Problema: Imprimir nombre de alumnos con nota media mayor de 65% <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:template match="course"> <xsl:apply-templates select="student"/> </xsl:template> <xsl:template match="student"> <xsl:variable name="ave"> <xsl:value-of select="(hw1 + hw2 + project + final) div 4"/> </xsl:variable> <xsl:if test="$ave > 65"> Student name="<xsl:value-of select="name"/>" average="<xsl:valueof select="$ave"/>" </xsl:if> </xsl:template> </xsl:stylesheet> 89
Resultado transformacin
Salida (grades70.txt):
90
Java JAXP
Provee clase Transformer para la aplicacin de XSL a un documento XML Como siempre Java JAXP asegura que el cdigo fuente sea el mismo independientemente del parser XSLT subyacente
91
94
95
96
99
100