XML y JAVA

1,621 views

Published on

Introducción a XML y programa

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,621
On SlideShare
0
From Embeds
0
Number of Embeds
137
Actions
Shares
0
Downloads
5
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

XML y JAVA

  1. 1. Si buscas resultados distintos, no hagas siempre lo mismo. XML: Carlos Luis Sánchez Bocanegra @redeskakoXML-XPath-XLST
  2. 2. Índice 0.1. Introducción a XMLXML: XML-XPath-XLST 0.2. Creación de DTD 0.3. XPath 0.4. XML NameSpaces 0.5. XSLT 0.6. Aplicaciones XML con JAVA 0.7. Serialización de objetos con XML
  3. 3. Introduccion al XML ¿Qué es XML?∗ Un meta-lenguaje que permite crear nuestros documentos basados en etiquetas.∗ Define la forma de estructurar datos en un documento de texto: ∗ Fácil de leer. ∗ Preciso. ∗ Extensible. ∗ Independiente de la plataforma. ∗ XML 1.0 Specefication: ∗ http://www.w3.org/TR/REC-xml ∗ Es un subconjunto de SGML (Standard General Markup Language). ∗ XHTML es una aplicación de XML. <?xml version=”1.0” encoding=”UTF-8”?> <colegio> <director>Luis Fabra</director> <aula nivel="primaria" grupo="A"> Pablo Neruda </aula> </colegio>
  4. 4. Introduccion al XML ¿Qué es XML?∗ Adaptando a mejoras <?xml version=”1.0”> <colegio> <director>Luis Fabra</director> <aulas> <aula nivel="primaria" grupo="A"> <alumnos total=”2”> <alumno id=”33443212Q”> <nombre>Felipe Extremera</nombre> </alumno> <alumno id=”25723011R”> <nombre>Alberto Ruiz</nombre> </alumno> <alumnos> Pablo Neruda </aula> <aulas> <aulario aforo=”200”/> </colegio>
  5. 5. Introduccion al XML ¿Qué es XML?∗ Adaptando a mejoras <html> <head><title>Colegio</title></head> <body> <h1>Colegio</h1> <p>Director: Luis Fabra</p> <ul> <li><b>Aula primaria grupo A</b></li> <ul> <li><b>Felipe Extremera</li> <li><b>Alberto Ruiz</b></li> </ul> </ul> </body> </html>
  6. 6. Introduccion al XML Componentes XML∗ Intrucción de procesamiento. <?xml version=”1.0” encoding=”UTF-8”?> <bienvenida> Hola a todos </bienvenida>
  7. 7. Introduccion al XML Componentes XML∗ Comentarios <!-- Esto es un comentario --> <!-- También acepta el formato Multilínea -->
  8. 8. Introduccion al XML Componentes XML∗ Elementos XML <bienvenida> Hola a todos </bienvenida>
  9. 9. Introduccion al XML Componentes XML∗ Atributos XML <bienvenida tipo=”amena”> Hola a todos </bienvenida>∗ Muchos atributos hace un xml incomprensible.∗ La estructura no la define los atributos.
  10. 10. Introduccion al XML Componentes XML <item id=”34”> <cantidad>33</cantidad>∗ Mezclando Elementos y Atributos XML <precioUnidad>22.3</precioUnidad> <facturacion> </item> <factura id=”1/2011” fecha=”01/02/2011”> <proveedor id=”1”>Salmoneda S.A.</proveedor> <items> <item id=”34” cantidad=”3” precioUnidad=”33.2”/> <item id=”21” cantidad=”2” precioUnidad=”83.1”/> <item id=”55” cantidad=”5” precioUnidad=”11.9”/> <item id=”42” cantidad=”10” precioUnidad=”1.3”/> <item id=”1” cantidad=”10” precioUnidad=”2.3”/> <items> </factura> <factura id=”2/2011” fecha=”27/03/2011”> <proveedor id=”2”>Ruiz S.A.</proveedor> <items> <item id=”2” cantidad=”24” precioUnidad=”3.2”/> </items> </factura> </facturacion>
  11. 11. Introduccion al XML Componentes XML∗ Referencias XML <!ENTITY Organismo “Tesorería de la Seguridad Social”> <pie>&Organismo</pie> Referencias predefinidas ∗ &amp; el carácter & ∗ &lt; el carácter < ∗ &gt; el carácter > ∗ &apos; el carácter ` ∗ &quot; el caracter “
  12. 12. Introduccion al XML Componentes XML∗ Secciones CDATA ∗ Character DATA → Texto a no ser procesado ∗ Secuencia de caracteres sin estructura. <![CDATA [<bienvenida>Hola a todos</bienvenida>]]>
  13. 13. Índice 0.1. Introducción a XMLXML: XML-XPath-XLST 0.2. Creación de DTD 0.3. XPath 0.4. XML NameSpaces 0.5. XSLT 0.6. Aplicaciones XML con JAVA 0.7. Serialización de objetos con XML
  14. 14. Creación de DTD ¿Qué es un DTD y un XML Schema?∗ Define la gramática para documentos XML. ∗ DTD: Document Type Definition. ∗ Esquema XML o XML Schema.∗ Especifican la estructura de un documento XML.<!DOCTYPE etiqueta[ <!ELEMENT etiqueta (nombre, calle, ciudad, pais, codigo)> <!ELEMENT nombre (#PCDATA)> <!ELEMENT calle (#PCDATA)> <!ELEMENT ciudad (#PCDATA)> <!ELEMENT pais (#PCDATA)> <!ELEMENT codigo (#PCDATA)> ]> <etiqueta> <nombre7>Luis Pérez</nombre> <calle>C/Ramadilla, 33</calle> <ciudad>Málaga</ciudad> <pais>España</pais> <codigo>29110</codigo> </etiqueta>
  15. 15. Creación de DTD Descripción DTD∗ Elementos en un DTD ∗ EMPTY : Sin contenido <!ELEMENT casado EMPTY> ----------- <casado/> ∗ ANY : Cualquier contenido <!ELEMENT particular ANY> ----------- <particular>Algo en detalle</particular ∗ Mixed: Puede contener mezcla de tipo de datos. <!ELMENT cosa (#PCDATA|casado)> ----------- ∗ <cosa> <casado/> </cosa> ------------ <cosa> Alguna cosa </cosa>
  16. 16. Creación de DTD Descripción DTD∗ Elementos en un DTD ∗ Contenidos:: Añadir más elementos compuestos. <!ELEMENT complejo (particular,cosa)> ----------- <complejo> <particular>Algunos detalles que concretar</particular> <cosa>Más que decir aun</cosa> <complejo/> ∗ *y+ ∗ * : 0 o más veces. ∗ +: 1 o más veces. <!ELEMENT muchascosas (cosa)*> ----------- <muchascosas/> ----------- <muchascosas> <cosa>1</cosa> <cosa>2</cosa> <cosa>3</cosa> </muchascosas>
  17. 17. Creación de DTD Descripción DTD∗ Elementos en un DTD ∗ Contenidos:: Añadir atributos. <!ELEMENT correo (de, a, descripcion)> <!ATTLIST correo prioridad (normal | urgente) normal> <!ELEMENT descripcion(#PCDATA)> <!ATTLIST descripcion lang CDATA #REQUIRED> ------------------------- <correo prioridad="normal"> <de>Rafael Carmargo</de> <a>Luis Vaals</a> <descripcion lang=”esp”> Hola Luis que tal vas? </descripcion> </correo>
  18. 18. Creación de DTD Descripción DTD∗ Elementos en un DTD ∗ Contenidos:: Tipos de atributos. ∗ CDATA, NMTOKEN → Datos en atributo ∗ Enumerados , y opcionales | ∗ ID, IDREF → un nombre único al que puede ser referenciado
  19. 19. Creación de DTD Descripción DTD∗ Elementos en un DTD ∗ Contenidos:: Asociar un XML a un DTD <?xml version="1.0"?> <!DOCTYPE proveedores SYSTEM “facturacion.dtd"> <facturacion> <factura id=”1/2011” fecha=”01/02/2011”> <proveedor id=”1”>Salmoneda S.A.</proveedor> <items> <item id=”34” cantidad=”3” precioUnidad=”33.2”/> <item id=”21” cantidad=”2” precioUnidad=”83.1”/> <item id=”55” cantidad=”5” precioUnidad=”11.9”/> <item id=”42” cantidad=”10” precioUnidad=”1.3”/> <item id=”1” cantidad=”10” precioUnidad=”2.3”/> <items> </factura> <factura id=”2/2011” fecha=”27/03/2011”> <proveedor id=”2”>Ruiz S.A.</proveedor> <items> <item id=”2” cantidad=”24” precioUnidad=”3.2”/> </items> </factura> </facturacion>
  20. 20. Creación de DTD Descripción DTD ∗ Elementos en un DTD ∗ Documento Bien Formado ∗ Documento Válido<?xml version="1.0"?><!DOCTYPE saludos SYSTEM “saludo.dtd"> <?xml version="1.0"?><bienvenida> <bienvenida> Hola que tal? Hola que tal?</bienvenida> </bienvenida><!ElEMENT bienvenida (#PCDATA)> <!DOCTYPE saludo SYSTEM “saludo.dtd”> <!DOCTYPE saludo PUBLIC “-//saludos//DTD Bienvenida//ES” “http://milugar.es/saludo.dtd”>
  21. 21. Creación de DTD Descripción DTD∗ Ejemplo final: <?xml encoding="UTF-8"?> <!ELEMENT agenda (contacto)+> <!ELEMENT contacto (nombre, phone)> <!ATTLIST contacto id ID #REQUIRED> <!ELEMENT nombre (#PCDATA)> <!ELEMENT phone (#PCDATA)> <?xml version="1.0"?> <!DOCTYPE agenda SYSTEM “agenda.dtd"> <agenda> <contacto id="33244223C"> <nombre>Rafael Amargo</nombre> <phone>952178833</phone> </contacto> <contacto id="23111111R"> <nombre>Luis Zafio</nombre> <phone>953222222</phone> </contacto> </agenda>
  22. 22. Índice 0.1. Introducción a XMLXML: XML-XPath-XLST 0.2. Creación de DTD 0.3. XPath 0.4. XML NameSpaces 0.5. XLST 0.6. Aplicaciones XML con JAVA 0.7. Serialización de objetos con XML
  23. 23. XPath ¿Qué es Xpath?∗ XML Path Language que nos permite seleccionar y hacer referencia a texto, elementos, atributos y cualquier otra información contenida dentro de un fichero XML.∗ XPath es un lenguaje. Alrededor hay instalada un conjunto de herramientas y aplicacones para la navegación web: Xpointer, Xlink, XQL, XIndice.∗ Un documento XML es procesado por un analizador (parser), éste construye un árbol de nodos cuya razí se despliega de los elementos que cuelgan de él.
  24. 24. XPath ¿Qué es Xpath?<facturacion> <factura id=”1/2011” fecha=”01/02/2011”> <proveedor id=”1”>Salmoneda S.A.</proveedor> <items> <item id=”34” cantidad=”3” precioUnidad=”33.2”/> <item id=”21” cantidad=”2” precioUnidad=”83.1”/> <item id=”55” cantidad=”5” precioUnidad=”11.9”/> <item id=”42” cantidad=”10” precioUnidad=”1.3”/> <item id=”1” cantidad=”10” precioUnidad=”2.3”/> <items> </factura> <factura id=”2/2011” fecha=”27/03/2011”> <proveedor id=”2”>Ruiz S.A.</proveedor> <items> <item id=”2” cantidad=”24” precioUnidad=”3.2”/> </items> </factura></facturacion>
  25. 25. XPath ∗ ExpresionesLocations Paths ∗ Una instrucción en lenguaje XPath se denomina una expresión /facturacion/factura/items → Todos los elementos items de factura /facturacion/factura/proveedor → Todos los elementos proveedor de factura ∗ Nodo contexto ∗ Punto de partida de un contexto: /facturacion/factura/items: items es un nodo contexto /facturacion/factura/proveedor: proveedor es un item ∗ Predicados /facturacion/factura[@id=”1/2011”]/items /facturacion/factura[@id=”2/2011”]/proveedor
  26. 26. XPath ∗ Axes/Ejes ∗ Selección de nodos dentro del árbolLocations Paths ∗ Atributos se determinan con @ ∗ Para seleccionar el atributo id que posean los elementos capitulo /facturacion/factura/@id ∗ Para seleccionar todos los elementos hijo de los capitulo que posean el atributo cantidad /facturacion/factura[@cantidad]/* ∗ Para seleccionar todos los elementos hijo de factura cuyo atributo destacar sea igual a "2/2011". /facturacion/factura[@cantidad="10"]
  27. 27. XPath ∗ Axes/Ejes (cont.)Locations Paths ∗ Descendant ∗ Se expresa con // ∗ Entrega todos los nodos que descendiendan de los nodos contexto. ∗ Para seleccionar todos los items de una factura: /facturacion/factura[@id=”1/2011]//items ∗ Para seleccionar todos los descendientes de items que tienen un atributo cantidad. //items//*[@cantidad] ∗ Para ver el valor del atributo cantidad del caso anterior: //parrafo//*[@cantidad]/@cantidad ∗ Para seleccionar todos los elementos descendientes de items: ∗ /facturacion/factura/items//*
  28. 28. XPath ∗ Axes/Ejes (cont.)Locations Paths ∗ Self/Parent ∗ . → Self ∗ .. → Parent ∗ Seleccionar todos los nodos que tienen algún hijo de tipo factura: //factura/.. ∗ Seleccionar todos los nodos factura que tienen algún hijo de tipo item: //factura/../../item ∗ Ancestor ∗ Seleccionar todos los elementos que tienen entre sus descendientes alguna factura //ancestor::factura/ancestor::* ∗ Seleccionar todos las facturas que tienen entre sus descendientes alguno con el atributo cantidad ∗ //*[@cantidad]/ancestor::factura
  29. 29. XPath ∗ Nodos TestLocations Paths ∗ Funciones que nos van a ayudar a restringir. ∗ node(). ∗ text(). ∗ comment(). ∗ processing-instruction(). ∗ processing-instruction(destino). ∗ processing-instruction(cursor). ∗ Predicados ∗ Permite restringir el conjunto de nodos seleccionados. ∗ Seleccionar todos los elementos que tengan el atributo num: //*[@cantidad] ∗ Seleccionar todos los capitulo que tengan un parrafo que tenga algún elemento con atributo href: //factura[parrafo/*[@href]] ∗ Seleccionar todos los capitulo que no tengan el atributo public //capitulo[not(@public)] ∗ Posición //capitulo[2] ∗ id(“capitulo_1”)/parrafo
  30. 30. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Seleccionar los empleados de la empresa <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  31. 31. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Seleccionar los empleados de la empresa <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  32. 32. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Seleccionar los empleados de la empresa <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> /empresa/departameto/empleado <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  33. 33. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar los nombres de todos los empleados de la <empleado salario=”200000”> empresa <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  34. 34. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar los nombres de todos los empleados de la <empleado salario=”200000”> empresa <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  35. 35. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar los nombres de todos los empleados de la <empleado salario=”200000”> empresa <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> /empresa/departamento/empleado/nombre <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  36. 36. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar la lista de todos los nombres <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  37. 37. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar la lista de todos los nombres <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  38. 38. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar la lista de todos los nombres <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> //nombre <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  39. 39. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar nombre de los empleados <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  40. 40. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar nombre de los empleados <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  41. 41. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar nombre que son nodo-hijo de empleado <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> /empresa/departamento/nombre <departamento telefono=”728833”> //empleado/nombre <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  42. 42. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar nombre de departamentos <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  43. 43. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar nodos nombre de profundidad dos niveles <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  44. 44. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar nodos nombre de profundidad dos niveles <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> /empresa/departamente/nombre <departamento telefono=”728833”> •/*/*/nombre <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  45. 45. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> ? <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> //*/*/*/nombre <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  46. 46. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Nombres existentes a 3 niveles → nombre de <empleado salario=”200000”> empleados <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> //*/*/*/nombre <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  47. 47. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar los teléfonos de la empresa <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  48. 48. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar los teléfonos de la empresa <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  49. 49. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar los teléfonos de la empresa <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> /empresa/departamento/@telefono <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  50. 50. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar empleados con salario mayor de 300000 <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  51. 51. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar empleados con salario mayor de 300000 <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  52. 52. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar empleados con salario mayo rde 300000 <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> /empresa/departamento/empleado[@salario>3000000] <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  53. 53. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar nombre empleados del departamento SIEM <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  54. 54. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar nombre empleados del departamento SIEM <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  55. 55. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar nombre empleados del departamento SIEM <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> //departamento[@nombre=”SIEM”]/empleado/nombre <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  56. 56. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar empleados del primer departamento <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  57. 57. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar empleados del primer departamento <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  58. 58. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar empleados del primer departamento <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> /empresa/departamento[1]/empleado <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  59. 59. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar el primer empleado del segundo <empleado salario=”200000”> departamento <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  60. 60. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar el primer empleado del segundo <empleado salario=”200000”> departamento <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  61. 61. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar el primer empleado del segundo <empleado salario=”200000”> departamento <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> /empresa/departamento[2]/empleado[1] <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  62. 62. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Id de Departamentos con más de un empleado <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  63. 63. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Id de Departamentos con más de un empleado <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  64. 64. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Id de Departamentos con más de un empleado <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> /empresa/departamento[count(empleados)>1]/id <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  65. 65. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar el id de empleado Miguel Páez <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  66. 66. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar el id de empleado Miguel Páez <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> <id>99A</id> <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  67. 67. XPath<empresa> <departamento telefono=”713388”> <id>A80</id> <nombre>SAC</nombre> Buscar el id de empleado Miguel Páez <empleado salario=”200000”> <cod>383829829</cod> <nombre>Luis Zote</nombre> </empleado> <empleado salario=”430000”> <cod>321181</cod> <nombre>Raul Pitre</nombre> </empleado> … </departamento> <departamento telefono=”728833”> //empleado[nombre=”Miguel Paez”]/cod <id>99A</id> //nombre[nombre=”Miguel Paez”]/parent::empleado/cod <nombre>SIEM</nombre> <empleado salario=”100000”> <cod>8322</cod> <nombre>Miguel Paez</nombre> </empleado> …. </departamento> ...</empresa>
  68. 68. ÍndiceXML: XML-XPath-XLST 0.1. Introducción a XML 0.2. Creación de DTD 0.3. Xpath 0.4. XML NameSpaces 0.5. XSLT 0.6. Aplicaciones XML con JAVA 0.7. Serialización de objetos con XML
  69. 69. XML NameSpaces come
  70. 70. XML NameSpaces come come
  71. 71. XML NameSpaces∗ Un documento XML puede usar múltiples vocabularios ∗ Ejemplos: ∗ Un documento XHTML podría contener elementos SVG y MathML. ∗ Una hoja de estilos XSLT puede contener debe transformarla distinguiendo si la tag a cual pertenece (si es SVG o MathML). <cd> <libro> <autor> <autor> <nombre>Luis</nombre> <nombre>Luis</nombre> </autor> </autor> </cd> </libro> ∗ ¿Cómo evitar la colisión? → NameSpaces
  72. 72. XML NameSpaces∗ Síntaxis ∗ Declaración NameSpace. ∗ Puede ser declarado como un elemento raiz. ∗ Puede definirse múltiples namespaces. ∗ Puede redefinirse el mismo prefijo en el mismo documento. ∗ El ámbito de la declaración del namespace se define con el elemento. ∗ Examples XMLClass:syllabus svg:set mathml:set ∗ prefijo: parte local ∗ Prefijo: identifica el namespace de un elemento o atributo (no puede : ni xml) ∗ Parte local: identifica el elemento concreto dentro del namespace (no puede :) ∗ Ambas juntas define un Qualified name ∗ URI: xmlns="http://www.w3.org/1999/xhtml" ∗ Elementos y Atributos.
  73. 73. XML NameSpaces <?xml version="1.0"?> <html xmlns="http://www.w3.org/1999/xhtml"∗ Ejemplo xmlns:xlink="http://www.w3.org/1999/xlink"> <head><title>Tres Namespaces</title></head> <body> <h1 align="center">Un elipse y un rectángulo</h1> <svg xmlns="http://www.w3.org/2000/svg" width="12cm" height="10cm"> <ellipse rx="110" ry="130" /> <rect x="4cm" y="1cm" width="3cm" height="6cm" /> </svg> <p xlink:type="simple" xlink:href="ellipses.html"> Más acerca de elipses </p> <p xlink:type="simple" xlink:href="rectangles.html"> Más acerca de rectángulos </p> <hr/> <p>Curso XML y JAVA</p> </body> </html>
  74. 74. XML NameSpaces<?xml version="1.0"?><html xmlns="http://www.w3.org/1999/xhtml" xmlns:xlink="http://www.w3.org/1999/xlink"> <head><title>Tres Namespaces</title></head> <body> <h1 align="center">Un elipse y un rectángulo</h1> <svg xmlns="http://www.w3.org/2000/svg" width="12cm" height="10cm"> <ellipse rx="110" ry="130" /> <rect x="4cm" y="1cm" width="3cm" height="6cm" /> </svg> <p xlink:type="simple" xlink:href="ellipses.html"> Más acerca de elipses </p> <p xlink:type="simple" xlink:href="rectangles.html"> Más acerca de rectángulos </p> <hr/> <p>Curso XML y JAVA</p> </body></html>
  75. 75. Índice 0.1. Introducción a XMLXML: XML-XPath-XLST 0.2. Creación de DTD 0.3. XPath0. 0.4. XML NameSpaces 0.5. XSLT 0.6. Aplicaciones XML con JAVA 0.7. Serialización de objetos con XML
  76. 76. XSLT ¿Qué es XSLT?∗ Es un lenguaje XML.∗ Las hojas de estilo XSLT realizan la transformación del documento utilizando una o varias reglas de plantilla.∗ Las reglas de plantilla junto al documento XML a transformar se sirven de un procesador de XSLT -que realiza las transformaciones.∗ Existen dos alternativas para desarrollar las aplicaciones: ∗ Desarrollar código adaptado a la plataforma (JSP, ASP, CGI,..) para cada lenguaje. ∗ Desarrollar solo una versión que genere XML y conversores de XML a los lenguajes de presentación.∗ XSLT transforma un documento XML.∗ XSLFO formatea y estiliza documentos en varios modos ∗ http://www.w3.org/TR/xslt∗ http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog
  77. 77. XSLT ¿Qué es XSLT? Documento XSL Documento XML BIEN FORMADO TransformaciónDocumento DTD Documento HTML Documento PDF
  78. 78. XSLT<?xml version="1.0"?><curso> <nombre id="CISCO">Switches</name> <profesor id=“26017033R">Luis Samaniego</profesor> <estudiante id=“32333333A"> <nombre>Felipe Extremera</nombre> <ex1>35</ex1> <ex2>72</ex2> <projecto>84</projecto> <final>83</final> </estudiante> <estudiante id=“44444444B"> <nombre>Pedro Romera</nombre> <ex1>79</ex1> <ex2>90</ex2> <projecto>100</projecto> <final>40</final> </estudiante></curso> clase.xml
  79. 79. XSLT<?xml version="1.0"?><xsl:stylesheet version="1.0“ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="curso"> <HTML> <HEAD><TITLE>Estudiantes</TITLE></HEAD> <BODY> <xsl:apply-templates select="estudiante"/> </BODY> </HTML> </xsl:template> <xsl:template match="estudiante"> <P><xsl:value-of select="nombre"/></P> </xsl:template></xsl:stylesheet>
  80. 80. XSLT<?xml version="1.0"?><xsl:stylesheet version="1.0“ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="curso"> <HTML> <HEAD><TITLE>Estudiantes</TITLE></HEAD> <BODY> <xsl:apply-templates select="estudiante"/> </BODY> </HTML> </xsl:template> xsl:stylesheet → xsl documento <xsl:template match="estudiante"> xmlns:xsl → ruta DTD/Schema <P><xsl:value-of select="nombre"/></P> hoja de est Defino que esto es una Basando en el formato xsl de w3 </xsl:template></xsl:stylesheet>
  81. 81. XSLT<?xml version="1.0"?><xsl:stylesheet version="1.0“ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="curso"> <HTML> <HEAD><TITLE>Estudiantes</TITLE></HEAD> <BODY> <xsl:apply-templates select="estudiante"/> </BODY> </HTML> </xsl:template> xsl:template <xsl:template match="estudiante"> match=”curso” <P><xsl:value-of select="nombre"/></P> a procesar Desde donde voy Desde la raiz curso </xsl:template></xsl:stylesheet>
  82. 82. XSLT Incorporación de etiquetas HTML Permite dar forma a la presentación<?xml version="1.0"?><xsl:stylesheet version="1.0“ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="curso"> <HTML> <HEAD><TITLE>Estudiantes</TITLE></HEAD> <BODY> <xsl:apply-templates select="estudiante"/> </BODY> </HTML> </xsl:template> <xsl:template match="estudiante"> <P><xsl:value-of select="nombre"/></P> </xsl:template></xsl:stylesheet>
  83. 83. XSLT xsl:apply-templates Aplica el estilo actual al tag estudiantes (como si llamara a una función)<?xml version="1.0"?><xsl:stylesheet version="1.0“ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="curso"> <HTML> <HEAD><TITLE>Estudiantes</TITLE></HEAD> <BODY> <xsl:apply-templates select="estudiante"/> </BODY> </HTML> </xsl:template> <xsl:template match="estudiante"> <P><xsl:value-of select="nombre"/></P> </xsl:template></xsl:stylesheet>
  84. 84. XSLT xsl:template macth=”estudiante” Resolviendo el template “estudiante”<?xml version="1.0"?><xsl:stylesheet version="1.0“ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="curso"> <HTML> <HEAD><TITLE>Estudiantes</TITLE></HEAD> <BODY> <xsl:apply-templates select="estudiante"/> </BODY> </HTML> </xsl:template> <xsl:template match="estudiante"> <P><xsl:value-of select="nombre"/></P> </xsl:template></xsl:stylesheet>
  85. 85. XSLT<?xml version="1.0"?><xsl:stylesheet version="1.0“ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> xsl:value-of Devuelve el valor del contenido del tag <xsl:template match="curso"> nombre <HTML> <HEAD><TITLE>Estudiantes</TITLE></HEAD> <BODY> <xsl:apply-templates select="estudiante"/> </BODY> </HTML> </xsl:template> <xsl:template match="estudiante"> <P><xsl:value-of select="nombre"/></P> </xsl:template></xsl:stylesheet>
  86. 86. XSLT<?xml version="1.0"?><xsl:stylesheet version="1.0“ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="curso"> <HTML> <HEAD><TITLE>Estudiantes</TITLE></HEAD> <BODY> <xsl:apply-templates select="estudiante"/> </BODY> Transformación </HTML> </xsl:template> <xsl:template match="estudiante"> <HTML> <P><xsl:value-of select="nombre"/></P> </xsl:template> <HEAD></xsl:stylesheet> <TITLE>Estudiantes</TITLE> </HEAD> <BODY> <p>Felipe Extremera</p> <p>Pedro Romera</p> </BODY> </HTML>
  87. 87. XSLT∗ xsl:stylesheet ∗ Elemento raiz del documento xsl∗ xsl:template ∗ Cómo transformar un nodo ∗ Se asocia mediante una expresión Xpath para una posterior transformación. ∗ Match ∗ Atributo para seleccionar nodo ∗ “/” es nodo raiz del documento∗ xsl:apply-templates ∗ Aplica los templates definidos para los hijos de un nodo seleccionado. <?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>
  88. 88. XSLT∗ xsl:value-of ∗ Recupera el valor de un nodo. <xsl:template match=”curso”> <xsl:value-of select=”estudiante”/> <!-- Sólo escogería el valor del primer estudiante que encuentre--> </xsl:template> ----------------------- <xsl:template match=”curso”> <xsl:apply-templates select=”estudiante”/> <!-- Esto procesa varios estudiantes --> </xsl:template> <xsl:template match=”estudiante”> <xsl:value-of select=”.”/> <!--Transforma todo los elementos de estudiante --> </xsl:template>∗ xsl:for-each ∗ Iterar sobre cada nodo <xsl:template match=”curso”> <!-- Otra forma de procesar la iteración de cada estudiante--> <xsl:for-each select=”estudiante”> <xsl:value-of select=”.”/> </xsl:for-each> </xsl:template>
  89. 89. XSLT∗ xsl:choose/xsl:when/xsl:otherwise ∗ Procesamiento condicional. … <xsl:choose> <xsl:when test=”ex1 &gt; 20”> ... </xsl:when> <xsl:otherwise> ... </xsl:otherwise> </xsl:choose> ...∗ xsl:if ∗ Procesamiento condicional. ∗ Atributo test … <xsl:if test=”ex1 &gt; 35”> <!-- Proceso aquellos que ex1 mayor 35 --> ... </xsl:if> ...
  90. 90. XSLT∗ xsl:variable ∗ Define una variable para algún valor calculado <xsl:variable name="media"> <xsl:value-of select="(hw1 + final) div 2"/> </xsl:variable>
  91. 91. XSLT∗ Queremos los alumnos con nota media mayor del 70% <?xml version=”1.0”> <xsl:stylesheet version=”1.0” xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”> </xsl:stylesheet>
  92. 92. XSLT∗ Queremos los alumnos con nota media mayor del 70% <?xml version=”1.0”> <xsl:stylesheet version=”1.0” xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”> <!-- Esto tipifica el tipo de documento de salida texto --> <xsl:template match=”curso”> </xsl:template> </xsl:stylesheet>
  93. 93. XSLT∗ Queremos los alumnos con nota media mayor del 70% <?xml version=”1.0”> <xsl:stylesheet version=”1.0” xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”> <!-- Esto tipifica el tipo de documento de salida texto --> <xsl:template match=”curso”> <html> <head><tittle>Primer XML</title></head> <body> <xsl:apply-template select=”estudiante”/> </body> </html> </xsl:template> </xsl:stylesheet>
  94. 94. XSLT∗ Queremos los alumnos con nota media mayor del 70% <?xml version=”1.0”> <xsl:stylesheet version=”1.0” xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”> <xsl:template match=”curso”> <html> <head><title>Primer XML</title></head> <body> <xsl:apply-template select=”estudiante”/> </body> </html> </xsl:template> <xsl:template match=”estudiante”> </xsl:template> </xsl:stylesheet>
  95. 95. XSLT∗ Queremos los alumnos con nota media mayor del 70% <?xml version=”1.0”> <xsl:stylesheet version=”1.0” xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”> <xsl:template match=”curso”> <html> <head><title>Primer XML</title></head> <body> <xsl:apply-template select=”estudiante”/> </body> </html> </xsl:template> <xsl:template match=”estudiante”> <xsl:variable name=”media”> <xsl:value-of select=”(ex1+ex2+proyecto+final)div 4”/> </xsl:variable> </xsl:template> </xsl:stylesheet>
  96. 96. XSLT∗ Queremos los alumnos con nota media mayor del 70% <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version=”1.0” xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”> <xsl:template match=”curso”> <html> <head><title>Primer XML</title></head> <body> <ul> <xsl:apply-template select=”estudiante”/> </ul> </body> </html> </xsl:template> <xsl:template match=”estudiante”> <xsl:variable name=”media”> <xsl:value-of select=”(ex1+ex2+proyecto+final) div 4”/> </xsl:variable> <xsl:if test=”$media>70”> <li><xsl:value-of select=”nombre”/> - <xsl:value-of select=”$media”/> <li> </xsl:if> </xsl:template> </xsl:stylesheet>
  97. 97. XSLT∗ Queremos los alumnos con nota media mayor del 70% <?xml version="1.0" encoding="UTF-8" ?> <?xml-stylesheet version="1.0" type="text/xsl" href="ejercicio1.xsl"?> <curso> <nombre id="CISCO">Switch</nombre> <profesor id="2601702333R">Luis Samaniego</profesor> <estudiante id="32333333A"> <nombre>Felipe Extremera</nombre> <ex1>35</ex1> <ex2>72</ex2> <proyecto>84</proyecto> <final>83</final> </estudiante> <estudiante id="44444444B"> <nombre>Pedro Romera</nombre> <ex1>79</ex1> <ex2>90</ex2> <proyecto>100</proyecto> <final>53</final> </estudiante> </curso>
  98. 98. XSLT 79+90+100+53 >70 4
  99. 99. XSLT∗ Ordenar <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet version="1.0" type="text/xsl" href="ejercicio2.xsl"?> <personas> <persona> <titulo>Sr.</titulo> <nombre>Juan</nombre> <apellidos>Laredo</apellidos> </persona> <persona> <titulo>Dr.</titulo> <nombre>Carmen</nombre> <apellidos>Saavedra</apellidos> </persona> <persona> <titulo>Sr.</titulo> <nombre>Miguel</nombre> <apellidos>Dominguez</apellidos> </persona> </personas>
  100. 100. XSLT∗ Ordenar <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html"/> <xsl:template match="personas"> <html> <head> <title>Personas</title> </head> <body> <table border="1"> <xsl:for-each select="persona"> <xsl:sort select="apellidos" order="descending"/> <tr> <td><xsl:value-of select="nombre"/>, <xsl:value-of select="apellidos"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
  101. 101. XSLT http://www.w3.org/TR/xsl/
  102. 102. Índice 0.1. Introducción a XMLXML: XML-XPath-XLST 0.2. Creación de DTD 0.3. Xpath 0.4. XML NameSpaces 0.5. XSLT 0.6. Aplicaciones XML con JAVA 0.7. Serialización de objetos con XML
  103. 103. Aplicaciones JAVA con XML¿Cómo se come esto?
  104. 104. Aplicaciones JAVA con XMLBase de Datos: Mysql cdcol -- phpMyAdmin SQL Dump -- version 3.2.4 -- http://www.phpmyadmin.net -- -- Servidor: localhost -- Tiempo de generación: 08-12-2011 a las 12:36:24 -- Versión del servidor: 5.1.44 -- Versión de PHP: 5.3.1 -- Base de datos: `cdcol` -- Estructura de tabla para la tabla `cds` CREATE TABLE IF NOT EXISTS `cds` ( `titulo` varchar(200) DEFAULT NULL, `interprete` varchar(200) DEFAULT NULL, `anyo` int(11) DEFAULT NULL, `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ; -- -- Volcar la base de datos para la tabla `cds` -- INSERT INTO `cds` (`titulo`, `interprete`, `anyo`, `id`) VALUES (Beauty, Ryuichi Sakamoto, 1990, 1), (Goodbye Country (Hello Nightclub), Groove Armada, 2001, 4), (Glee, Bran Van 3000, 1997, 5);
  105. 105. Aplicaciones JAVA con XMLDocumento XSL: Hoja de Estilo <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="CDS"> <html> <head><title>Repertorio de música</title></head> <body> <ul> <xsl:for-each select="CD"> <li> <xsl:value-of select="TITULO"/> - <xsl:value-of select="INTERPRETE"/> </li> </xsl:for-each> </ul> </body> </html> </xsl:template> </xsl:stylesheet>
  106. 106. Aplicaciones JAVA con XMLDocumento XML: XML a generar <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet version="1.0" type="text/xsl" href="cd.xsl"?> <CDS> <CD fecha="1990" id="1"> <TITULO>Beauty</TITULO> <INTERPRETE>Ryuichi Sakamoto</INTERPRETE> </CD> <CD fecha="1997" id="5"> <TITULO>Glee</TITULO> <INTERPRETE>Bran Van 3000</INTERPRETE> </CD> <CD fecha="2001" id="4"> <TITULO>Goodbye Country (Hello Nightclub)</TITULO> <INTERPRETE>Groove Armada</INTERPRETE> </CD> </CDS>
  107. 107. Aplicaciones JAVA con XMLindex.jsp<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><%@page import="java.util.*"%><%@page import="java.io.*"%><%@page import="org.w3c.dom.*"%><%@page import="javax.xml.transform.*"%><%@page import="javax.xml.transform.stream.StreamResult"%><%@page import="javax.xml.transform.stream.StreamSource"%><%@page import="org.apache.xalan.processor.*"%><%@page import="javax.xml.transform.dom.DOMSource"%><%@page import="com.prueba.CD" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>CD</title></head><body><% String xslFicheroName = new String("/cd.xsl"); try{ File xslFichero = new File(xslFicheroName); StreamSource xslt = new StreamSource(xslFichero); //Crear la factory TransformerFactory tFactory = new TransformerFactoryImpl(); //Crear un Transformador asociado al Source xslt de cd.xsl // Generar el motor de Transformación Transformer transformer = tFactory.newTransformer(xslt); /********2 – Crear el objeto OrdenCliente para extraer sus datos***********/ CD cd = new CD(); /********3 – Extrayendo el xml usando la clase OrdenCliente***********/ Document xmlCliente = cd.devuelveCD(); DOMSource domSource = new DOMSource(xmlCliente); // Valida la transformación xsl con el dom domSource transformer.transform(domSource, new StreamResult(out)); }catch(Exception e){ out.write("Error en JSP:" + e.toString()); }%></body></html>
  108. 108. Aplicaciones JAVA con XMLindex.jsp<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><%@page import="java.util.*"%><%@page import="java.io.*"%><%@page import="org.w3c.dom.*"%><%@page import="javax.xml.transform.*"%><%@page import="javax.xml.transform.stream.StreamResult"%><%@page import="javax.xml.transform.stream.StreamSource"%><%@page import="org.apache.xalan.processor.*"%><%@page import="javax.xml.transform.dom.DOMSource"%><%@page import="com.prueba.CD" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>CD</title></head><body><% String xslFicheroName = new String("/cd.xsl"); try{ File xslFichero = new File(xslFicheroName); - Importar las librerías StreamSource xslt = new StreamSource(xslFichero); //Crear la factory → paquete procesor TransformerFactory tFactory = new TransformerFactoryImpl(); //Crear un Transformador asociado al Source xslt de cd.xsl → paquete transform // Generar el motor de Transformación Transformer transformer = tFactory.newTransformer(xslt); → Nuestro paquete com.prueba.CD /********2 – Crear el objeto OrdenCliente para extraer sus datos***********/ CD cd = new CD(); /********3 – Extrayendo el xml usando la clase OrdenCliente***********/ Document xmlCliente = cd.devuelveCD(); DOMSource domSource = new DOMSource(xmlCliente); // Valida la transformación xsl con el dom domSource transformer.transform(domSource, new StreamResult(out)); }catch(Exception e){ out.write("Error en JSP:" + e.toString());
  109. 109. Aplicaciones JAVA con XMLindex.jsp<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> - Definición del documento xhtml<%@page import="java.util.*"%>... - Se incorpora los tags necesario para crear una página web<%@page import="com.prueba.CD" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>CD</title></head><body><% String xslFicheroName = new String("/cd.xsl"); try{ File xslFichero = new File(xslFicheroName); StreamSource xslt = new StreamSource(xslFichero); //Crear la factory TransformerFactory tFactory = new TransformerFactoryImpl(); //Crear un Transformador asociado al Source xslt de cd.xsl // Generar el motor de Transformación Transformer transformer = tFactory.newTransformer(xslt); /********2 – Crear el objeto OrdenCliente para extraer sus datos***********/ CD cd = new CD(); /********3 – Extrayendo el xml usando la clase OrdenCliente***********/ Document xmlCliente = cd.devuelveCD(); DOMSource domSource = new DOMSource(xmlCliente); // Valida la transformación xsl con el dom domSource transformer.transform(domSource, new StreamResult(out)); }catch(Exception e){ out.write("Error en JSP:" + e.toString()); }%></body></html>
  110. 110. Aplicaciones JAVA con XMLindex.jsp Defino un StreamSource xslt<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><%@page import="java.util.*"%> Con el contenido del fichero cd.xsl...<%@page import="com.prueba.CD" %> (la hoja de estilo)<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>CD</title></head><body><% String xslFicheroName = new String("/cd.xsl"); try{ File xslFichero = new File(xslFicheroName); StreamSource xslt = new StreamSource(xslFichero); //Crear la factory TransformerFactory tFactory = new TransformerFactoryImpl(); //Crear un Transformador asociado al Source xslt de cd.xsl // Generar el motor de Transformación Transformer transformer = tFactory.newTransformer(xslt); /********2 – Crear el objeto OrdenCliente para extraer sus datos***********/ CD cd = new CD(); /********3 – Extrayendo el xml usando la clase OrdenCliente***********/ Document xmlCliente = cd.devuelveCD(); DOMSource domSource = new DOMSource(xmlCliente); // Valida la transformación xsl con el dom domSource transformer.transform(domSource, new StreamResult(out)); }catch(Exception e){ out.write("Error en JSP:" + e.toString()); }%></body></html>
  111. 111. Aplicaciones JAVA con XMLindex.jsp<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> - Creo el tFactory y asigno a transformer<%@page import="java.util.*"%>... La hoja de estilo xslt (pasándolo como un StreamSource)<%@page import="com.prueba.CD" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>CD</title></head><body><% String xslFicheroName = new String("/cd.xsl"); try{ File xslFichero = new File(xslFicheroName); StreamSource xslt = new StreamSource(xslFichero); //Crear la factory TransformerFactory tFactory = new TransformerFactoryImpl(); //Crear un Transformador asociado al Source xslt de cd.xsl // Generar el motor de Transformación Transformer transformer = tFactory.newTransformer(xslt); /********2 – Crear el objeto OrdenCliente para extraer sus datos***********/ CD cd = new CD(); /********3 – Extrayendo el xml usando la clase OrdenCliente***********/ Document xmlCliente = cd.devuelveCD(); DOMSource domSource = new DOMSource(xmlCliente); // Valida la transformación xsl con el dom domSource transformer.transform(domSource, new StreamResult(out)); }catch(Exception e){ out.write("Error en JSP:" + e.toString()); }%></body></html>
  112. 112. Aplicaciones JAVA con XMLindex.jsp - Creo el bean CD<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><%@page import="java.util.*"%> -Devuelvo sus datos en un documento XML...<%@page import="com.prueba.CD" %> - Lo meto en el flujo del objeto DOMSource<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>CD</title></head><body><% String xslFicheroName = new String("/cd.xsl"); try{ File xslFichero = new File(xslFicheroName); StreamSource xslt = new StreamSource(xslFichero); //Crear la factory TransformerFactory tFactory = new TransformerFactoryImpl(); //Crear un Transformador asociado al Source xslt de cd.xsl // Generar el motor de Transformación Transformer transformer = tFactory.newTransformer(xslt); /********2 – Crear el objeto OrdenCliente para extraer sus datos***********/ CD cd = new CD(); /********3 – Extrayendo el xml usando la clase OrdenCliente***********/ Document xmlCliente = cd.devuelveCD(); DOMSource domSource = new DOMSource(xmlCliente); // Valida la transformación xsl con el dom domSource transformer.transform(domSource, new StreamResult(out)); }catch(Exception e){ out.write("Error en JSP:" + e.toString()); }%></body></html>
  113. 113. Aplicaciones JAVA con XMLindex.jsp<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> Creo la validación xml con el transformer<%@page import="java.util.*"%>... Y lo envio a out (web).<%@page import="com.prueba.CD" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>CD</title></head><body><% String xslFicheroName = new String("/cd.xsl"); try{ File xslFichero = new File(xslFicheroName); StreamSource xslt = new StreamSource(xslFichero); //Crear la factory TransformerFactory tFactory = new TransformerFactoryImpl(); //Crear un Transformador asociado al Source xslt de cd.xsl // Generar el motor de Transformación Transformer transformer = tFactory.newTransformer(xslt); /********2 – Crear el objeto OrdenCliente para extraer sus datos***********/ CD cd = new CD(); /********3 – Extrayendo el xml usando la clase OrdenCliente***********/ Document xmlCliente = cd.devuelveCD(); DOMSource domSource = new DOMSource(xmlCliente); // Valida la transformación xsl con el dom domSource transformer.transform(domSource, new StreamResult(out)); }catch(Exception e){ out.write("Error en JSP:" + e.toString()); }%></body></html>
  114. 114. Aplicaciones JAVA con XMLCD.javapackage com.prueba;import java.sql.*; /*JDBC Classes*/import java.sql.Connection;import java.sql.Statement;import com.mysql.jdbc.*; /*MySQL JDBC classes*/import org.w3c.dom.*; /*W3C Interfaces*/import org.apache.xerces.dom.*; /*Xerces DOM Classes*/import org.apache.xml.serialize.*; /*Xerces serializer*/import java.io.*; /*Java io classes for file reading/writing*/public class CD { public static final String JDBCURL="jdbc:mysql://localhost/cdcol?user=curso&password=curso"; public static final String JDBCDRIVER="com.mysql.jdbc.Driver"; public static final String OUTPUTFILE="/cd.xml"; public StringBuffer sql = new StringBuffer(); public CD(); public Document devuelveCD(); private ResultSet devuelveCDRS(); private Document creaCDXML(ResultSet) private static Element creaDBElement(Document, String, String ); private static void printDOM(Document , File ) throws Exception;}
  115. 115. Aplicaciones JAVA con XMLCD.javapackage com.prueba;Import …public class CD { … JDBCURL="jdbc:mysql://localhost/cdcol?user=curso&password=curso"; … JDBCDRIVER="com.mysql.jdbc.Driver"; … OUTPUTFILE="/cd.xml"; … sql = new StringBuffer(); public CD(){ sql.append("SELECT "); sql.append(" id, "); sql.append(" titulo, "); sql.append(" interprete, "); sql.append(" anyo "); sql.append(" FROM cds "); sql.append(" order by titulo "); } public Document devuelveCD(); private ResultSet devuelveCDRS(); private Document creaCDXML(ResultSet) private static Element creaDBElement(Document, String, String ); private static void printDOM(Document , File ) throws Exception;}

×