Bases de Datos - Parte 9/10 XML

48
1 Sistemas de Información II Tema 9. Procesamiento de texto XML Carlos Castillo UPF – 2007

Transcript of Bases de Datos - Parte 9/10 XML

Page 1: Bases de Datos - Parte 9/10 XML

1

Sistemas de Información II

Tema 9. Procesamiento de texto XML

Carlos Castillo

UPF – 2007

Page 2: Bases de Datos - Parte 9/10 XML

2

Agenda

XML como texto estructurado

Procesamiento de XML

Validación de XML con DTDs

Page 3: Bases de Datos - Parte 9/10 XML

3

XMLTexto Estructurado

Page 4: Bases de Datos - Parte 9/10 XML

4

Page 5: Bases de Datos - Parte 9/10 XML

5

HTMLLenguaje usado para escribir páginas Web

Inicialmente

Estructura

Actualmente

Presentación

Page 6: Bases de Datos - Parte 9/10 XML

6

Código HTMLDescribe tamaño, posición, etc...

Page 7: Bases de Datos - Parte 9/10 XML

7

HTML y datosDifícil extraer el texto importante

Page 8: Bases de Datos - Parte 9/10 XML

8

Pérdida de información

<h1>Gente</h1>

<dl><dt>Perez</dt><dd>12345 – Calle 111</dd><dt>González</dt><dd>67889 – Calle 222</ddd></dl>

Página HTML

Despliegue Extracción

Page 9: Bases de Datos - Parte 9/10 XML

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

Page 10: Bases de Datos - Parte 9/10 XML

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

Page 11: Bases de Datos - Parte 9/10 XML

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.

Page 12: Bases de Datos - Parte 9/10 XML

12

Texto y Árbol

Un documento corresponde a un árbol

<?xml version=”1.0”?>

<agenda> <persona>  <nombre>Juan</nombre>  <fono>123</fono> </persona> <persona>  <nombre>Pedro</nombre>  <fono>234</fono> </persona></agenda>

A

P P

N F N F

J 1 P 2

Page 13: Bases de Datos - Parte 9/10 XML

13

Sintaxis elementos

<persona>

Tag inicial

</persona>

Tag final

“Juan”

Nodo textual

<persona/>

Nodo vacío

Page 14: Bases de Datos - Parte 9/10 XML

14

Sintaxis atributosAtributos 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

Page 15: Bases de Datos - Parte 9/10 XML

15

Ejemplo uso de atributos (1)

<menu>

  <menu­item portion="250 ml">

    <name>Small soft drink</name>

  </menu­item>

  <menu­item portion="500 g">

    <name>Sirloin steak</name>

  </menu­item>

</menu>

Page 16: Bases de Datos - Parte 9/10 XML

16

Ejemplo uso de atributos (2)

<menu>

  <menu­item portion­size="250”

             portion­unit=”ml">

    <name>...</name> </menu­item>

  <menu­item portion­size=”500”

             portion­unit="g">

    <name>...</name> </menu­item>

</menu>

Page 17: Bases de Datos - Parte 9/10 XML

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>

Page 18: Bases de Datos - Parte 9/10 XML

18

Sutilezas (newlines)<tag>\n<tag a=”1”\nb=”2”>\nTexto\nTexto\n</tag><tag>Texto</tag>\n</tag>

<tag>\n<tag a=”1”\nb=”2”>\nTexto\nTexto\n</tag><tag>Texto</tag>\n</tag>

<tag><tag a=”1”b=”2”>Texto\nTexto</tag><tag>Texto</tag></tag>

Page 19: Bases de Datos - Parte 9/10 XML

19

XML Contenido

Page 20: Bases de Datos - Parte 9/10 XML

20

Procesamiento de XML

Orientado a eventos

SAX – Simple API for XML

Más rápido

Orientado a estructura

DOM

Más usable

Page 21: Bases de Datos - Parte 9/10 XML

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

Page 22: Bases de Datos - Parte 9/10 XML

22

Ejemplo de parsing en SAX

saxParse(“...”,start,text,end) text("Hola") start("b") text("mundo") end("b") end("p")

<p>Hola <b>mundo</b></p>

Page 23: Bases de Datos - Parte 9/10 XML

23

Parsing DOM

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

doc = DOMParse( “archivo.xml”)

Page 24: Bases de Datos - Parte 9/10 XML

24

Ejemplo de DOM en Java

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("recipe"))         {           n = n.getNextSibling();        }      PrintStream out = System.out;      out.println("<?xml version=\"1.0\"?>");      out.println("<collection>");      if (n!=null)        print(n, out);      out.println("</collection>");  }

Extraer primer nodo “recipe” (receta) en un documento XML

Page 25: Bases de Datos - Parte 9/10 XML

25

Validación de XML

Page 26: Bases de Datos - Parte 9/10 XML

26

Diferentes aplicaciones de XML

<?xml version=”1.0”?><pacientes> <paciente>  <nombre>Juan</nombre>  <apellido>Perez</apellido>  <edad>38</edad> </paciente>...</pacientes>

doc1.xml<?xml version=”1.0”?><lavadoras> <lavadora>  <marca>Samsung</marca>  <modelo>RX­1200</modelo> </lavadora>...</lavadoras>

doc2.xml

personas.dtd

productos.dtd

Page 27: Bases de Datos - Parte 9/10 XML

27

Documento XML bien formado

Se dice que un documento XML está bien formado si es sintácticamente correcto.

Page 28: Bases de Datos - Parte 9/10 XML

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.

Page 29: Bases de Datos - Parte 9/10 XML

29

Procesamiento

doc.xml

Parsing

Validación

... procesamiento

tipo.dtd

Page 30: Bases de Datos - Parte 9/10 XML

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

Page 31: Bases de Datos - Parte 9/10 XML

31

Ejemplo simple DTD 1

<!ELEMENT ejemplo   (#PCDATA)>

<!DOCTYPE ejemplo SYSTEM ejemplo.dtd><ejemplo> Este es un ejemplo.</ejemplo>

ok1.xmlejemplo.dtd

<!DOCTYPE ejemplo SYSTEM ejemplo.dtd><ejemplo/>

ok2.xml

Page 32: Bases de Datos - Parte 9/10 XML

32

Ejemplo simple DTD 2

<!ELEMENT ejemplo   (#PCDATA)>

<!DOCTYPE ejemplo SYSTEM ejemplo.dtd><inicioejemplo> Este es un ejemplo.</finejemplo>

(NO ESTA BIEN FORMADO)

malo1.xml

ejemplo.dtd

<!DOCTYPE ejemplo SYSTEM ejemplo.dtd><example> Este es un ejemplo.</example>

(NO ES VÁLIDO)

malo2.xml

Page 33: Bases de Datos - Parte 9/10 XML

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

Page 34: Bases de Datos - Parte 9/10 XML

34

Contenido ELEMENT

<!ELEMENT mensaje   (urgente?, asunto,    cuerpo)><!ELEMENT asunto   (#PCDATA)><!ELEMENT cuerpo   (#PCDATA|cita)*><!ELEMENT cita   (#PCDATA)><!ELEMENT urgente   EMPTY>

ejemplo.dtd Un elemento tiene contenido ELEMENT, si solo puede contener a otros elementos, opcionalmente separados por espacios en blanco.

Page 35: Bases de Datos - Parte 9/10 XML

35

Contenido TEXT

<!ELEMENT mensaje   (urgente?, asunto,    cuerpo)><!ELEMENT asunto   (#PCDATA)><!ELEMENT cuerpo   (#PCDATA|cita)*><!ELEMENT cita   (#PCDATA)><!ELEMENT urgente   EMPTY>

ejemplo.dtd Un elemento tiene contenido TEXT, si solo puede contener texto

(PCDATA = printable character data)

Page 36: Bases de Datos - Parte 9/10 XML

36

Contenido MIXED

<!ELEMENT mensaje   (urgente?, asunto,    cuerpo)><!ELEMENT asunto   (#PCDATA)><!ELEMENT cuerpo   (#PCDATA|cita)*><!ELEMENT cita   (#PCDATA)><!ELEMENT urgente   EMPTY>

ejemplo.dtd Un elemento tiene contenido MIXED, si puede contener texto u otros elementos

Nota: #PCDATA debe aparecer primero en la lista ej.: “(#PCDATA|cita)”

Page 37: Bases de Datos - Parte 9/10 XML

37

Contenido EMPTY

<!ELEMENT mensaje   (urgente?, asunto,   cuerpo)><!ELEMENT asunto   (#PCDATA)><!ELEMENT cuerpo   (#PCDATA|cita)*><!ELEMENT cita   (#PCDATA)><!ELEMENT urgente   EMPTY>

ejemplo.dtd Un elemento tiene contenido EMPTY, si no puede contener otros elementos

Page 38: Bases de Datos - Parte 9/10 XML

38

Ejemplos documentos 1/4

<!ELEMENT mensaje   (urgente?, asunto,   cuerpo)><!ELEMENT asunto   (#PCDATA)><!ELEMENT cuerpo   (#PCDATA|cita)*><!ELEMENT cita   (#PCDATA)><!ELEMENT urgente   EMPTY>

ejemplo.dtd<?xml version=”1.0”?><!DOCTYPE mensaje   SYSTEM “asunto.dtd”><mensaje> <urgente/> <asunto>  Agenda del curso </asunto> <cuerpo>  <cita>   Por favor enviar agenda  </cita>  Te envio la agenda ahora </cuerpo></mensaje>

ok1.xml

Page 39: Bases de Datos - Parte 9/10 XML

39

Ejemplos documentos 2/4

<!ELEMENT mensaje   (urgente?, asunto,   cuerpo)><!ELEMENT asunto   (#PCDATA)><!ELEMENT cuerpo   (#PCDATA|cita)*><!ELEMENT cita   (#PCDATA)><!ELEMENT urgente   EMPTY>

ejemplo.dtd<?xml version=”1.0”?><!DOCTYPE mensaje   SYSTEM “asunto.dtd”><mensaje> <asunto>  Agenda del curso </asunto> <cuerpo>  Te envio la agenda ahora </cuerpo></mensaje>

ok2.xml

Page 40: Bases de Datos - Parte 9/10 XML

40

Ejemplos documentos 3/4

<!ELEMENT mensaje   (urgente?, asunto,   cuerpo)><!ELEMENT asunto   (#PCDATA)><!ELEMENT cuerpo   (#PCDATA|cita)*><!ELEMENT cita   (#PCDATA)><!ELEMENT urgente   EMPTY>

ejemplo.dtd<?xml version=”1.0”?><!DOCTYPE mensaje   SYSTEM “asunto.dtd”><mensaje> <urgente>Si</urgente> <asunto/> <cita>Enviar</cita> <cuerpo>  Te envio la agenda ahora </cuerpo></mensaje>

malo1.xml

Page 41: Bases de Datos - Parte 9/10 XML

41

Ejemplos documentos 4/4

<!ELEMENT mensaje   (urgente?, asunto,   cuerpo)><!ELEMENT asunto   (#PCDATA)><!ELEMENT cuerpo   (#PCDATA|cita)*><!ELEMENT cita   (#PCDATA)><!ELEMENT urgente   EMPTY>

ejemplo.dtd<?xml version=”1.0”?><!DOCTYPE mensaje   SYSTEM “asunto.dtd”><mensaje> <cuerpo>  Te envio la agenda ahora </cuerpo> <asunto>Test</asunto></mensaje>

malo2.xml

Page 42: Bases de Datos - Parte 9/10 XML

42

Orden e inclusion de elementos

<!­­ 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)>

ejemplo.dtd

Page 43: Bases de Datos - Parte 9/10 XML

43

Orden de elementos, ejemplo

<!ELEMENT mensaje (urgente?|asunto|cuerpo)><!ELEMENT asunto   (#PCDATA)><!ELEMENT cuerpo   (#PCDATA|cita)*><!ELEMENT cita   (#PCDATA)><!ELEMENT urgente   EMPTY>

msj.dtd<?xml version=”1.0”?><!DOCTYPE mensaje   SYSTEM “msj.dtd”><mensaje> <cuerpo/> <asunto/></mensaje>

ok.xml

Page 44: Bases de Datos - Parte 9/10 XML

44

Atributos

<!ELEMENT lavadora EMPTY><!ATTLIST lavadora carga NMTOKEN #IMPLIED marca CDATA #IMPLIED voltaje NMTOKENS  #REQUIRED>

<!­­ #IMPLIED=opcional ­­>

lavadora.dtd CDATA:

texto

NMTOKEN:

“abc...z0123..9-_:.”

NMTOKENS:

NMTOKEN + espacios

ID: empezar con letra

IDREF: ser un ID

Page 45: Bases de Datos - Parte 9/10 XML

45

Atributos, ejemplo

<!ELEMENT lavadora EMPTY><!ATTLIST lavadora carga NMTOKEN #IMPLIED marca CDATA #IMPLIED voltaje NMTOKENS    #REQUIRED> 

lavadora.dtd<?xml version=”1.0”?><!DOCTYPE lavadora  SYSTEM “lavadora.dtd”><lavadora carga=”frontal” marca=”Samsung 10XE” voltaje=”210V 110V”/>

lavadora.xml

Page 46: Bases de Datos - Parte 9/10 XML

46

Repetición de elementos

<!ELEMENT bib (libro|revista)+><!ELEMENT libro (titulo,autor)><!ELEMENT revista (titulo,autor)><!ELEMENT titulo (#PCDATA)><!ELEMENT autor (#PCDATA)>

biblioteca1.dtd<!ELEMENT bib (libro|revista)+><!ENTITY % bibelem “titulo,autor”><!ELEMENT libro (%bibelem;) ><!ELEMENT revista (%bibelem;) ><!ELEMENT titulo (#PCDATA)><!ELEMENT autor (#PCDATA)>

 

biblioteca2.dtd

Page 47: Bases de Datos - Parte 9/10 XML

47

Repetición de atributos

<!ELEMENT bib (libro|revista)+><!ELEMENT libro EMPTY><!ATTLIST libro titulo CDATA #REQUIRED editorial CDATA #REQUIRED autor CDATA #REQUIRED><!ATTLIST revista titulo CDATA #REQUIRED editorial CDATA #REQUIRED numero NMTOKEN #REQUIRED>

biblioteca1.dtd<!ELEMENT bib (libro|revista)+><!ENTITY % bibattrs“titulo CDATA #REQUIRED editorial CDATA #REQUIRED“><!ELEMENT libro EMPTY><!ATTLIST libro %bibattrs; autor CDATA #REQUIRED><!ELEMENT revista EMPTY><!ATTLIST revista %bibattrs; numero CDATA #REQUIRED>

 

biblioteca2.dtd

Page 48: Bases de Datos - Parte 9/10 XML

48

Resumen

XML = Texto estructurado

DTD = Descripción de estructura

Validar XML usando DTD