nivel 16: estructuras recursivas n-arias · •el documento entero xml es un nodo de documento....

27
ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS XML 1

Upload: others

Post on 26-Apr-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS

XML

1

Page 2: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Agenda

• XML

• DOM

• Xerces

2

2

Page 3: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

3

Qué es XML?

• Es un lenguaje estándar diseñado para describircualquier tipo de información.

• Su principal motivación es estructurar, guardar y enviar información.

• Utiliza tags para estructurar la información en elementos.

• Lenguaje muy difundido y considerado neutro

Page 4: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

4

Ejemplo XMLTag que define el comienzo del elemento “libro”

Pueden existir elementos dentro un elemento!

Elemento “libro”

Tag que indica la terminacióndel elemento “libro”

Page 5: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

5

Ejemplo XML

Descripción del elemento “isbn” del elemento “libro”

Descripción del elemento “descripcion”del elemento “libro”

Page 6: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

6

Conceptos Básicos• XML permite representar información jerárquicamente.

• Un elemento puede contener elementos y también puede tener atributos. Ejemplo:

Atributos

Page 7: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Sintaxis Básica y Restricciones

• Un documento XML está restringido a ser bien formado, esto significa que:

• Cada tag que empieza un elemento tiene que tener un tag que termina el elemento.

• Los valores de los atributos están entre comillas “”.

• No puede haber caracteres aislados que signifiquen comienzo de tags como < ó &, en caso de necesitarse deben substituirse por: &lt; y &amp;

7

Page 8: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Sintaxis Básica y Restricciones

• Un archivo xml siempre empieza por una declaración:

• Comentarios:

8

<!–- Esto es un comentario en un archivo xml -->

<?xml version="1.0" encoding=“iso-8859-1“?>

Page 9: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

A trabajar…

• Proponga una estructura XML para representar la información del ejercicio del nivel.

9

Page 10: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Agenda

• XML

• DOM

• Xerces

10

10

Page 11: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

DOM

• El Document Object Model es una manera estándar de representar un documento xml en una estructura arborescente.

• DOM responde a la pregunta de ¿cómo leer, recorrer y escribir un archivo xml?

• DOM define unas interfaces programables para manipular esta estructura

11

Page 12: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

DOM

• Cuando se usa DOM en una aplicación, primerose carga en memoria la estructura completa deldocumento y luego, de acuerdo con losrequerimientos de la aplicación, se visita laestructura para procesar la información.

12

Page 13: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

DOM

DOM establece lo siguiente:

• El documento entero xml es un nodo de documento.

• Todo tag xml es un nodo de elemento.

• El texto que contienen los elementos son nodos de texto.

• Cada atributo xml es un nodo de atributo.

• Los comentarios son nodos de comentario.

13

Page 14: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

A trabajar…

• Haga el diagrama de clases de los elementos antes mencionados y relaciónelo con el caso del ejericicio

14

Page 15: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

15

Ejemplo (XML file)

Page 16: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

16

Ejemplo (DOM model)

Elemento raíz: <libros>

Elemento: <libro>

Atributo: <codigo>

Atributo: <numEjemplares>

Elemento: <isbn>

Elemento: <autor>

Elemento: <titulo>

Texto: 8401427541

Texto: Gabriel Garcia Marquez

Texto: La hojarasca

Page 17: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Agenda

• XML

• DOM

• Xerces

17

17

Page 18: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

18

Xerces

• Librería que provee las clases concretas que implementan las interfaces del modelo DOM.

• Las clases proveen la funcionalidad suficiente para cargar y guardar la estructura arborescente que propone DOM.

Page 19: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Xerces

• Actúa como un parser de XML. Esto quiere decir que se encarga de leer un archivo escrito en XML y cargarlo en memoria principal.

• Para usarlo se debe importar al proyecto la librería xercesImpl.jar que se encuentra en el archivo Xerces-J-bin.2.9.0.zip de la página http://archive.apache.org/dist/xml/xerces-j/binaries/

19

Page 20: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Xerces – Cargando a memoria

• Para cargar un documento xml a memoria

1. Leer el archivo y guardarlo como String

StringBuffer lectura = new StringBuffer( );

BufferedReader in = new BufferedReader(new FileReader( “C:/prueba.xml” ) );

String str;

while( ( str = in.readLine( ) ) != null )

lectura.append( str );

String documentoXML = lectura.toString( );

20

Page 21: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Xerces – Cargando a memoria

2. Crear el parser encargado de crear la estructura arborescente en memoria principal.

DOMParser parser = new DOMParser( );

parser.parse( new InputSource( new StringReader( xmlString ) ) );

Document documento = parser.getDocument( );

3. Recorrer la estructura que el parser se encargó de crear.

21

Page 22: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Xerces – Recorriendo el DOM

Una vez obtenido el documento, se debe recuperar el elemento raíz del árbol.

Document documento = parser.getDocument( );

Element elementoRaiz = documento.getDocumentElement( );

Para el ejemplo de los libros, el elemento raíz es el elemento “libros”

22

Page 23: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Xerces – Recorriendo el DOM

Una vez obtenido el nodo raíz del árbol, es posible recorrer todos los nodos en el árbol.

NodeList nodosHijos = elementoRaiz.getChildNodes( );

for( int i = 0; i < nodosHijos.getLength( ); i++ )

{

Node nodo = nodosNumeros.item( i );

String textoElemento = nodo.getTextContent( ) );

}

23

Page 24: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Xerces – Guardando en XML

• Para persistir un modelo de objetos en XML es necesario hacer lo siguiente:

1. Crear las entidades encargadas de construir nuevos DOM.

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance( );

DocumentBuilder db = dbf.newDocumentBuilder( );

24

Page 25: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Xerces – Guardando en XML

2. Crear la estructura DOM que se quiere guardar en un

XML.

Document documento = db.newDocument( );

3. Poblar la estructura DOM con la información que se quiere guardar del modelo de objetos respectivo.

Element elementoRaiz = documento.createElement( “raiz" );

documento.appendChild( elementoRaiz );

25

Page 26: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

Xerces – Guardando en XML

4. Llamar el método que se encarga de guardar el archivo.

StringWriter stringWriter = new StringWriter( );

OutputFormat format = new OutputFormat( documento );

XMLSerializer serial = new XMLSerializer( stringWriter, format );

serial.serialize( documento );

String xml = stringWriter.toString( );

FileOutputStream fos = new FileOutputStream( xmlPath );

fos.write( xml.getBytes( ) );

fos.close( );

26

Page 27: NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS · •El documento entero xml es un nodo de documento. •Todo tag xml es un nodo de elemento. •El texto que contienen los elementos son

ISIS1206 – Estructuras de Datos

http://cupi2.uniandes.edu.co

27

Referencias

• http://www.w3schools.com

• http://xerces.apache.org/