Bases de Datos - Parte 9/10 XML

2,883 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,883
On SlideShare
0
From Embeds
0
Number of Embeds
37
Actions
Shares
0
Downloads
223
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Bases de Datos - Parte 9/10 XML

  1. 1. Sistemas de Información II Tema 9. Procesamiento de texto XML Carlos Castillo UPF – 2007 1
  2. 2. Agenda XML como texto estructurado Procesamiento de XML Validación de XML con DTDs 2
  3. 3. XML Texto Estructurado 3
  4. 4. 4
  5. 5. HTML Lenguaje usado para escribir páginas Web Inicialmente Estructura Actualmente Presentación 5
  6. 6. Código HTML Describe tamaño, posición, etc... 6
  7. 7. HTML y datos Difícil extraer el texto importante 7
  8. 8. Pérdida de información Página HTML <h1>Gente</h1> <dl> <dt>Perez</dt> Despliegue Extracción <dd>12345 – Calle 111</dd> <dt>González</dt> <dd>67889 – Calle 222</ddd> </dl> 8
  9. 9. XML: Objetivos Describir contenido, no presentación Nuevos tags Estructuras anidadas Documentos autodescriptivos Representación textual de los datos Para almacenamiento, trasmisión “Internacionalizable” Legible 9
  10. 10. Puntos fundamentales XML Información estructurada en un archivo. XML es texto plano, internacionalizable. XML es modular Crear aplicaciones cuando se necesiten XML es un formato no propietario 10
  11. 11. NO son objetivos ... No es fácil de editar “a mano” No está comprimido La compresión debe ser provista externamente Ejemplo: cierre de elemento es explícito, pero como es un árbol, podría no serlo. No es directamente compatible con HTML XHTML es una aplicación XML. 11
  12. 12. Texto y Árbol Un documento corresponde a un árbol A <?xml version=”1.0”?> <agenda>  <persona> P P   <nombre>Juan</nombre>   <fono>123</fono>  </persona>  <persona>   <nombre>Pedro</nombre> F N F N   <fono>234</fono>  </persona> </agenda> P 2 J 1 12
  13. 13. Sintaxis elementos <persona> Tag inicial </persona> Tag final “Juan” Nodo textual <persona/> Nodo vacío 13
  14. 14. Sintaxis atributos Atributos usan comillas “dobles” <e a1=”v1” a2=”v2” .. an=”vn”> ... </e> a1 .. an son identificadores no repetidos, cuyo orden NO ES conservado. Identificador es una secuencia de letras, números o '-', que comienza con una letra, de largo > 1 v1 .. vn son texto 14
  15. 15. Ejemplo uso de atributos (1) <menu>   <menu­item portion=quot;250 mlquot;>     <name>Small soft drink</name>   </menu­item>   <menu­item portion=quot;500 gquot;>     <name>Sirloin steak</name>   </menu­item> </menu> 15
  16. 16. Ejemplo uso de atributos (2) <menu>   <menu­item portion­size=quot;250”              portion­unit=”mlquot;>     <name>...</name> </menu­item>   <menu­item portion­size=”500”              portion­unit=quot;gquot;>     <name>...</name> </menu­item> </menu> 16
  17. 17. Ejemplo uso de atributos (3) <menu>   <menu­item>     <portion unit=”ml”>250</portion>     <name>...</name> </menu­item>   <menu­item>     <portion unit=”g”>500</portion>     <name>...</name> </menu­item> </menu> 17
  18. 18. Sutilezas (newlines) <tag>n <tag>n <tag a=”1”n <tag a=”1”n b=”2”>n b=”2”>n Texton Texton Texton Texton </tag> </tag> <tag>Texto</tag>n <tag>Texto</tag>n </tag> </tag> <tag><tag a=”1”b=”2”>Texton Texto</tag><tag>Texto</tag></tag> 18
  19. 19. XML Contenido 19
  20. 20. Procesamiento de XML Orientado a eventos SAX – Simple API for XML Más rápido Orientado a estructura DOM Más usable 20
  21. 21. Parsing SAX SAXparse( start, end, text ) Se provee de apuntadores a funciones Start( nombre_del_tag ) Ejecutado cada vez que se ve un tag End() Cada vez que se ve un tag de cierre Text( buffer ) Cada vez que se lee texto 21
  22. 22. Ejemplo de parsing en SAX <p>Hola <b>mundo</b></p> saxParse(“...”,start,text,end)  text(quot;Holaquot;)  start(quot;bquot;)  text(quot;mundoquot;)  end(quot;bquot;)  end(quot;pquot;) 22
  23. 23. Parsing DOM doc = DOMParse( “archivo.xml”) Se lee un árbol completo en memoria Se pueden buscar nodos Node = doc.getElementById() doc.getChild(), etc... Las funciones se llaman igual en varios lenguajes: Java, Perl, Python, C++, etc... 23
  24. 24. Ejemplo de DOM en Java Extraer primer nodo “recipe” (receta) en un documento XML public static void main(String[] args) {       DOMParser p = new DOMParser();       p.parse(args[0]);       Document doc = p.getDocument();       Node n = doc.getDocumentElement().getFirstChild();       while (n!=null &&         !n.getNodeName().equals(quot;recipequot;))          {            n = n.getNextSibling();         }       PrintStream out = System.out;       out.println(quot;<?xml version=quot;1.0quot;?>quot;);       out.println(quot;<collection>quot;);       if (n!=null)         print(n, out);       out.println(quot;</collection>quot;);   } 24
  25. 25. Validación de XML 25
  26. 26. Diferentes aplicaciones de XML personas.dtd productos.dtd doc1.xml doc2.xml <?xml version=”1.0”?> <?xml version=”1.0”?> <pacientes> <lavadoras>  <paciente>  <lavadora>   <nombre>Juan</nombre>   <marca>Samsung</marca>   <apellido>Perez</apellido>   <modelo>RX­1200</modelo>   <edad>38</edad>  </lavadora>  </paciente> ... ... </lavadoras> </pacientes> 26
  27. 27. Documento XML bien formado Se dice que un documento XML está bien  formado si es sintácticamente correcto. 27
  28. 28. Documento XML válido Se dice que un documento XML es válido  si está de acuerdo con una cierta  especificación de tipo de dato. 28
  29. 29. Procesamiento doc.xml Parsing tipo.dtd Validación ... procesamiento 29
  30. 30. ¿Para qué sirven las DTD? Describir un formato de datos Usar un formato común de datos Verificar los datos al intercambiarlos Mantener la consistencia 30
  31. 31. Ejemplo simple DTD 1 ejemplo.dtd ok1.xml <!ELEMENT ejemplo <!DOCTYPE ejemplo    (#PCDATA)>  SYSTEM ejemplo.dtd> <ejemplo>  Este es un ejemplo. </ejemplo> ok2.xml <!DOCTYPE ejemplo  SYSTEM ejemplo.dtd> <ejemplo/> 31
  32. 32. Ejemplo simple DTD 2 ejemplo.dtd <!ELEMENT ejemplo    (#PCDATA)> malo1.xml malo2.xml <!DOCTYPE ejemplo <!DOCTYPE ejemplo  SYSTEM ejemplo.dtd>  SYSTEM ejemplo.dtd> <inicioejemplo> <example>  Este es un ejemplo.  Este es un ejemplo. </finejemplo> </example> (NO ESTA BIEN FORMADO) (NO ES VÁLIDO) 32
  33. 33. ¿Qué describe una DTD? Elementos Cuales son los tags permitidos Cual es el contenido de cada tag Estructura En que orden van los tags en el documento Anidamiento Cuales tags van dentro de cuales 33
  34. 34. Contenido ELEMENT Un elemento tiene ejemplo.dtd contenido <!ELEMENT mensaje    (urgente?, asunto, ELEMENT, si solo     cuerpo)> puede contener a <!ELEMENT asunto    (#PCDATA)> otros elementos, <!ELEMENT cuerpo    (#PCDATA|cita)*> opcionalmente <!ELEMENT cita    (#PCDATA)> separados por <!ELEMENT urgente espacios en    EMPTY> blanco. 34
  35. 35. Contenido TEXT Un elemento tiene ejemplo.dtd contenido TEXT, si <!ELEMENT mensaje    (urgente?, asunto, solo puede     cuerpo)> contener texto <!ELEMENT asunto    (#PCDATA)> <!ELEMENT cuerpo (PCDATA = printable    (#PCDATA|cita)*> <!ELEMENT cita character data)    (#PCDATA)> <!ELEMENT urgente    EMPTY> 35
  36. 36. Contenido MIXED Un elemento tiene ejemplo.dtd contenido MIXED, <!ELEMENT mensaje    (urgente?, asunto, si puede contener     cuerpo)> texto u otros <!ELEMENT asunto    (#PCDATA)> elementos <!ELEMENT cuerpo    (#PCDATA|cita)*> <!ELEMENT cita    (#PCDATA)> <!ELEMENT urgente    EMPTY> Nota: #PCDATA debe aparecer primero en la lista ej.: “(#PCDATA|cita)” 36
  37. 37. Contenido EMPTY Un elemento tiene ejemplo.dtd contenido EMPTY, <!ELEMENT mensaje    (urgente?, asunto, si no puede    cuerpo)> contener otros <!ELEMENT asunto    (#PCDATA)> elementos <!ELEMENT cuerpo    (#PCDATA|cita)*> <!ELEMENT cita    (#PCDATA)> <!ELEMENT urgente    EMPTY> 37
  38. 38. Ejemplos documentos 1/4 ejemplo.dtd ok1.xml <!ELEMENT mensaje <?xml version=”1.0”?>    (urgente?, asunto, <!DOCTYPE mensaje    cuerpo)>    SYSTEM “asunto.dtd”> <!ELEMENT asunto <mensaje>    (#PCDATA)>  <urgente/> <!ELEMENT cuerpo  <asunto>    (#PCDATA|cita)*>   Agenda del curso <!ELEMENT cita  </asunto>    (#PCDATA)>  <cuerpo> <!ELEMENT urgente   <cita>    EMPTY>    Por favor enviar agenda   </cita>   Te envio la agenda ahora  </cuerpo> </mensaje> 38
  39. 39. Ejemplos documentos 2/4 ejemplo.dtd ok2.xml <!ELEMENT mensaje <?xml version=”1.0”?>    (urgente?, asunto, <!DOCTYPE mensaje    cuerpo)>    SYSTEM “asunto.dtd”> <!ELEMENT asunto <mensaje>    (#PCDATA)>  <asunto> <!ELEMENT cuerpo   Agenda del curso    (#PCDATA|cita)*>  </asunto> <!ELEMENT cita  <cuerpo>    (#PCDATA)>   Te envio la agenda ahora <!ELEMENT urgente  </cuerpo>    EMPTY> </mensaje> 39
  40. 40. Ejemplos documentos 3/4 ejemplo.dtd malo1.xml <!ELEMENT mensaje <?xml version=”1.0”?>    (urgente?, asunto, <!DOCTYPE mensaje    cuerpo)>    SYSTEM “asunto.dtd”> <!ELEMENT asunto <mensaje>    (#PCDATA)>  <urgente>Si</urgente> <!ELEMENT cuerpo  <asunto/>    (#PCDATA|cita)*>  <cita>Enviar</cita> <!ELEMENT cita  <cuerpo>    (#PCDATA)>   Te envio la agenda ahora <!ELEMENT urgente  </cuerpo>    EMPTY> </mensaje> 40
  41. 41. Ejemplos documentos 4/4 ejemplo.dtd malo2.xml <!ELEMENT mensaje <?xml version=”1.0”?>    (urgente?, asunto, <!DOCTYPE mensaje    cuerpo)>    SYSTEM “asunto.dtd”> <!ELEMENT asunto <mensaje>    (#PCDATA)>  <cuerpo> <!ELEMENT cuerpo   Te envio la agenda ahora    (#PCDATA|cita)*>  </cuerpo> <!ELEMENT cita  <asunto>Test</asunto>    (#PCDATA)> </mensaje> <!ELEMENT urgente    EMPTY> 41
  42. 42. Orden e inclusion de  elementos ejemplo.dtd <!­­ Uno o varios FirstName seguidos de       uno o varios LastName ­­> <!ELEMENT nombre (FirstName+, LastName+)> <!­­ Cero o varios FirstName seguidos de      uno o varios LastName ­­> <!ELEMENT nombre (FirstName*, LastName+)> <!­­ cheque O BIEN efectivo O BIEN tarjeta ­­> <!ELEMENT pago (cheque|efectivo|tarjeta)> <!­­ Carta con o sin fecha ­­> <!ELEMENT carta (fecha?, cuerpo)> 42
  43. 43. Orden de elementos, ejemplo msj.dtd ok.xml <!ELEMENT mensaje <?xml version=”1.0”?>  (urgente?|asunto|cuerpo)> <!DOCTYPE mensaje <!ELEMENT asunto    SYSTEM “msj.dtd”>    (#PCDATA)> <mensaje> <!ELEMENT cuerpo  <cuerpo/>    (#PCDATA|cita)*>  <asunto/> <!ELEMENT cita </mensaje>    (#PCDATA)> <!ELEMENT urgente    EMPTY> 43
  44. 44. Atributos CDATA: lavadora.dtd <!ELEMENT lavadora EMPTY> texto <!ATTLIST lavadora  carga NMTOKEN #IMPLIED NMTOKEN:  marca CDATA #IMPLIED  voltaje NMTOKENS “abc...z0123..9-_:.”   #REQUIRED> <!­­ #IMPLIED=opcional ­­> NMTOKENS: NMTOKEN + espacios ID: empezar con letra IDREF: ser un ID 44
  45. 45. Atributos, ejemplo lavadora.dtd lavadora.xml <!ELEMENT lavadora EMPTY> <?xml version=”1.0”?> <!ATTLIST lavadora <!DOCTYPE lavadora  carga NMTOKEN #IMPLIED   SYSTEM “lavadora.dtd”>  marca CDATA #IMPLIED <lavadora  voltaje NMTOKENS  carga=”frontal”     #REQUIRED>   marca=”Samsung 10XE”  voltaje=”210V 110V”/> 45
  46. 46. Repetición de elementos biblioteca1.dtd biblioteca2.dtd <!ELEMENT bib <!ELEMENT bib  (libro|revista)+>  (libro|revista)+> <!ELEMENT libro <!ENTITY % bibelem  (titulo,autor)>  “titulo,autor”> <!ELEMENT revista <!ELEMENT libro  (titulo,autor)>  (%bibelem;) > <!ELEMENT titulo <!ELEMENT revista  (#PCDATA)>  (%bibelem;) > <!ELEMENT autor <!ELEMENT titulo  (#PCDATA)>  (#PCDATA)> <!ELEMENT autor  (#PCDATA)>   46
  47. 47. Repetición de atributos biblioteca1.dtd biblioteca2.dtd <!ELEMENT bib <!ELEMENT bib  (libro|revista)+>  (libro|revista)+> <!ENTITY % bibattrs <!ELEMENT libro EMPTY> “titulo CDATA #REQUIRED <!ATTLIST libro  editorial CDATA #REQUIRED“  titulo CDATA #REQUIRED >  editorial CDATA #REQUIRED <!ELEMENT libro EMPTY>  autor CDATA #REQUIRED> <!ATTLIST libro <!ATTLIST revista  %bibattrs;  titulo CDATA #REQUIRED  autor CDATA #REQUIRED>  editorial CDATA #REQUIRED <!ELEMENT revista EMPTY>  numero NMTOKEN #REQUIRED> <!ATTLIST revista  %bibattrs;  numero CDATA #REQUIRED>   47
  48. 48. Resumen XML = Texto estructurado DTD = Descripción de estructura Validar XML usando DTD 48

×