ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
NIVEL 16: ESTRUCTURAS RECURSIVAS N-ARIAS
XML
1
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Agenda
• XML
• DOM
• Xerces
2
2
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
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”
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”
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
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: < y &
7
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“?>
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
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Agenda
• XML
• DOM
• Xerces
10
10
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
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
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
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
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
15
Ejemplo (XML file)
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
…
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Agenda
• XML
• DOM
• Xerces
17
17
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.
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
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
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
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
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
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
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
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
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
27
Referencias
• http://www.w3schools.com
• http://xerces.apache.org/