SlideShare una empresa de Scribd logo
Federico Peinado
www.federicopeinado.es
Depto. de Ingeniería del Software e
Inteligencia Artificial
disia.fdi.ucm.es
Facultad de Informática
www.fdi.ucm.es
Universidad Complutense de Madrid
www.ucm.es
 En principio, nada que ver con DOO ni POO
 No son lenguajes para programar, sino para estructurar
documentos de manera explícita, añadiendo ciertas
“marcas” en determinados puntos del documento
 Probablemente el más popular es HTML
(HyperText Markup Language)
• Sirve para definir el contenido de una página web, la disposición
de los elementos que debe visualizar un navegador web
• Las “marcas” en este caso se conocen como etiquetas
 Por ejemplo, se usan estas dos para delimitar un párrafo:
<p>Texto ...</p>
2
Laboratorio de Programación de Sistemas – XML en Java
3
Laboratorio de Programación de Sistemas – XML en Java
http://www.w3schools.com/html/
4
Laboratorio de Programación de Sistemas – XML en Java
 XML (eXtensible Markup Language) es un estándar para
lenguajes de marcado del W3C (World Wide Web
Consortium)
 Diseñado para describir documentos estructurados y
cualquier información en forma de texto
• Los documentos llevan contenidos con marcas
• Las marcas aquí también se denominan etiquetas
 Son identificadores encerrados entre < y >
 Crean una estructura jerárquica, equivalente a un árbol
 En realidad se trata de un meta-lenguaje
• Permite definir lenguajes de marcado específicos para una
aplicación concreta
 No tiene etiquetas predefinidas, hay que definirlas según la aplicación
• Ejemplo: XHTML es una versión de HTML, pero definida
mediante el meta-lenguaje estándar XML
5
Laboratorio de Programación de Sistemas – XML en Java
 Ofrece una sintaxis estándar para todos los lenguajes de marcado
• Permite simplificar el tratamiento automático de este tipo de información
 Existen varios lenguajes asociados que lo hacen aún más potente
• DTD
• XML Schema
• XSLT
• ...
 Disponemos de muchas herramientas y software ya creado
• Analizadores (Parsers)
• Generadores
• Intérpretes
• Editores
• ...
 Permite comprobar formalmente si un documento es “correcto”
 ...
 ¡Ojo! XML no es ninguna “bala de plata”: no tiene porque ser la
mejor solución para todos nuestros problemas
6
Laboratorio de Programación de Sistemas – XML en Java
 Las etiquetas definen cada uno de los elementos
• Pueden servir para marcar unos ciertos contenidos:
<nombre_etiqueta> Marca el inicio de este elemento
Contenido (puede contener a su vez más etiquetas)
</nombre_etiqueta> Marca el final de este elemento
• Pueden estar vacías de contenidos:
<nombre_etiqueta />
 Las etiquetas pueden llevar atributos asociados
• <nombre_etiqueta nombre_atributo1=“valor_atributo1”
nombre_atributo2=“valor_atributo2” ...>
...
</nombre_etiqueta>
7
Laboratorio de Programación de Sistemas – XML en Java
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<notes>
<note type=“Post-it”>
<to>Paco</to>
<from>Juana</from>
<heading>Lista de la compra</heading>
<body>¡Acuérdate de la leche!</body>
</note>
<note type=“Correo electrónico”>
<to>Aurora</to>
<from>Manuel Esteban</from>
<heading>Re: Felicitación</heading>
<body>Gracias por tu felicitación...</body>
</note>
...
</notes>
8
Laboratorio de Programación de Sistemas – XML en Java
 Los comentarios se delimitan mediante las
etiquetas <!-- y -->
 Los documentos XML son sensibles a minúsculas y
mayúsculas
 Para poder usar caracteres reservados en XML
como son <, > y & hay que utilizar combinaciones
especiales de caracteres en el contenido como
&lt;, &gt;, &amp; y otras
 Los valores de los atributos deben ir siempre
entrecomillados, para lo que puede usarse la
comilla doble o la simple
 Todo documento debe tener un único elemento
como raíz del árbol de la jerarquía de elementos
9
Laboratorio de Programación de Sistemas – XML en Java
10
Laboratorio de Programación de Sistemas – XML en Java
 Un documento XML es “correcto” si está bien formado y es válido
 Bien formado: que cumple la sintaxis básica que impone XML en general, en
cuanto a apertura y cierre de etiquetas, uso de atributos, etc.
• Esto sería un documento mal formado:
<notes>
<note type=“Post-it”>
</to> <to>Paco
<from>Juana</from>
...
 Válido: que cumple con las normas semánticas establecidas para el lenguaje
de marcado específico que hayamos creado
• Esto, según las normas de XHTML sería un documento inválido:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head> <title>Título</title> ... </head>
<p>Párrafo fuera de su sitio.</p>
<body> ... </body>
</html>
11
Laboratorio de Programación de Sistemas – XML en Java
 Para definir un lenguaje derivado de XML es
necesario definir una gramática que
especifique:
• Etiquetas válidas
• Atributos válidos
• Jerarquía existente entre las distintas etiquetas
DTD (Document Type Definition) es un
lenguaje específico con el que se puede
definir dicha gramática
• Una DTD proporciona los criterios con los que
podremos validar una serie de documentos XML
12
Laboratorio de Programación de Sistemas – XML en Java
 Las declaraciones en una DTD tienen esta forma:
<!keyword parámetro1 parámetro2 ... parámetroN>
 Hay 4 palabras reservadas básicas
• ELEMENT: Declara el nombre de un elemento y a continuación
sus posibles subelementos
• ATTLIST: Declara los nombres de los atributos de un elemento,
así como sus posibles valores y/o valor por defecto
• ENTITY: Declara referencias a caracteres especiales o a bloques
de texto (similar a un #define de C++) o también a contenido
que va a ser repetido y que puede estar en un recurso externo
(similar a un #include de C++).
• NOTATION: Declara contenido externo “no-XML” (por ejemplo,
ficheros con imágenes), indicando la aplicación externa que es
capaz de gestionar dicho contenido
13
Laboratorio de Programación de Sistemas – XML en Java
 La declaración de un elemento tiene esta forma:
<!ELEMENT nombre_elemento contenido>
• nombre_elemento es el nombre de la etiqueta que
corresponde al elemento que estamos definiendo
 Hay 5 tipos posibles de contenido
• ANY: El elemento puede contener cualquier XML bien
formado
• EMPTY: El elemento no puede contener nada (aunque
puede tener atributos)
• Texto: El elemento sólo puede contener texto, pero sin
subelementos (se indica con (#PCDATA))
• Subelementos: El elemento sólo contiene los subelementos
que se mencionen
• Mixto: El elemento puede contener tanto texto como
subelementos
14
Laboratorio de Programación de Sistemas – XML en Java
 Cuando el contenido es del tipo Subelementos o Mixto, se
utiliza una expresión regular que especifica cómo debe
organizarse dicho contenido
 Ejemplos de expresiones regulares:
• Una colección que contiene uno o más libros
<!ELEMENT coleccion (libro)+>
• Un libro que contiene un título, cero o más autores, y cero o una
ediciones
<!ELEMENT libro (titulo, autor*, edicion?)>
• Una edición tiene una editorial, una colección y un año (todos
opcionales)
<!ELEMENT edicion (editorial?, coleccion?, año?)>
15
Laboratorio de Programación de Sistemas – XML en Java
 Los atributos se utilizan para asociar pares
nombre-valor a los elementos
 La declaración comienza con la palabra reservada
ATTLIST seguida por el nombre del elemento al
que pertenecen los atributos y por la definición de
cada uno de los atributos individuales
• El orden en que se presentan los atributos es indiferente
 Cada atributo puede tener un nombre, un tipo, una
definición de característica y un valor por defecto.
 Ejemplo
<!ATTLIST nombreElemento
nombreAtributo1 tipo1 caracteristica1 valorPorDefecto1
...
nombreAtributoN tipoN caracteristicaN valorPorDefectoN>
16
Laboratorio de Programación de Sistemas – XML en Java
 Hay 4 tipos básicos para los atributos
• CDATA: Datos formados únicamente por caracteres
(es decir, cadenas de texto)
• Valores enumerados
 Se proporciona el conjunto de todos los valores permitidos
 Opcionalmente puede darse un valor por defecto
• ID: Identificador único por cada ejemplar del elemento
 El analizador debe comprobar que efectivamente el valor de
este atributo sea único para cada ejemplar en el documento
• IDREF: Una referencia al identificador de un elemento
 El analizador debe comprobar que efectivamente hay un
ejemplar del elemento con ese identificador en el documento
17
Laboratorio de Programación de Sistemas – XML en Java
 Las características indican cómo debe comportarse un
analizador si un determinado atributo no aparece en un
documento XML
 Hay 4 posibles características
• #REQUIRED: El atributo es necesario, por lo que debería estar
siempre presente en los ejemplares del elemento en el documento
• #IMPLIED: El atributo es opcional
• #FIXED: El atributo es opcional y además:
 Si aparece debe coincidir con el valor por defecto
 Si no aparece el analizador puede darle el valor por defecto
• Por defecto (sin palabra clave): El atributo es opcional y además:
 Si aparece debe tener un valor adecuado para su tipo
 Si no aparece el analizador puede darle el valor por defecto
18
Laboratorio de Programación de Sistemas – XML en Java
 Todo documento XML (tenga o no DTD) debe
empezar con esta línea:
<?xml version="num_versión" encoding="codificación" ?>
• num_versión = Número de versión del estándar XML
• codificación = Sistema de codificación de los
caracteres del documento (ISO-8859-1, UTF-8, etc.)
 Además, a continuación se puede añadir una
referencia a la DTD que lo valida:
<!DOCTYPE nombre SYSTEM “ruta" >
• nombre = Nombre lógico de la gramática del DTD
• ruta = Ruta que lleva al fichero DTD
19
Laboratorio de Programación de Sistemas – XML en Java
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tablero SYSTEM "barcos.dtd">
<tablero ancho="12" alto="12">
<barco tipo="portaaviones">
<posicion x="1" y="2"/>
<posicion x="1" y="3"/>
<posicion x="1" y="4"/>
<posicion x="1" y="5"/>
</barco>
<barco tipo="submarino">
<posicion x="5" y="8"/>
</barco>
<!-- Definición del resto de barcos... -->
<casilla-especial tipo="tierra">
<posicion x="2" y="0"/>
</casilla-especial>
</tablero>
20
Laboratorio de Programación de Sistemas – XML en Java
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT tablero (barco+, casilla-especial*)>
<!ATTLIST tablero
ancho CDATA #REQUIRED
alto CDATA #REQUIRED >
<!ELEMENT barco (posicion+)>
<!ATTLIST barco
tipo (portaaviones|destructor|fragata|submarino)
#REQUIRED >
<!ELEMENT casilla-especial (posicion)>
<!ATTLIST casilla-especial
tipo (tierra) #REQUIRED >
<!ELEMENT posicion EMPTY>
<!ATTLIST posicion
x CDATA #REQUIRED
y CDATA #REQUIRED >
21
Laboratorio de Programación de Sistemas – XML en Java
36
Laboratorio de Programación de Sistemas – XML en Java
Existen diversas APIs para manejar XML
desde una aplicación Java
• JAXP (Java API for XML Processing) es
probablemente la más popular
 SAX (Analizador basado en eventos)
 DOM (Analizador tipo árbol)
 Transformer (transformador de documentos XML)
 …
37
Laboratorio de Programación de Sistemas – XML en Java
 Representan dos filosofías distintas
de procesar documentos XML
• SAX realiza rápidamente una única
pasada por todo el documento
 Requiere poca memoria principal
 Es necesario disponer del documento
íntegro para terminar de analizarlo
 Muy usado para operaciones de sólo
lectura sobre un documento XML
• DOM copia el árbol de elementos XML (total o parcialmente) en
memoria principal usando objetos Java y nos permite trabajar sobre ellos
 Requerirá más memoria cuanto mayor sea el documento XML
 Permite crear y modificar elementos dentro del documento XML
 Normalmente no se usa para leer un fichero ya existente
38
Laboratorio de Programación de Sistemas – XML en Java
39
Laboratorio de Programación de Sistemas – XML en Java
 El uso de SAX (Simple API for XML) consiste en los siguientes pasos:
1. Crear un SAXParser (a través de una Factoría)
2. El SAXParser contiene un SAXReader
3. El SAXReader procesa el documento completo y va lanzando eventos
según el contenido los elementos que va encontrando
4. Habrá una clase Oyente que va
“escuchando” esos eventos y
actúa en consecuencia
40
Laboratorio de Programación de Sistemas – XML en Java
 Nosotros debemos construir esa clase Oyente, para lo que
hay 4 interfaces que implementar
• ContentHandler
 startDocument y endDocument: Métodos llamados al empezar y
al terminar de procesar el documento
 startElement y endElement: Métodos llamados al comenzar y
al terminar de procesar cualquier elemento XML
 characters: Método llamado al encontrar texto dentro de un
elemento
• ErrorHandler
 error, fatalError y warning: Métodos para tratar distintos
problemas que pueden producirse durante el análisis
• DTDHandler
 Se usa si queremos definir un analizador de DTDs
• EntityResolver
 resolveEntity: Método llamado al encontrar una referencia en
el XML que deba ser resuelta (como una URI, por ejemplo)
41
Laboratorio de Programación de Sistemas – XML en Java
 Habitualmente no interesa implementar
todos los métodos de dichas 4 interfaces
 DefaultHandler da una implementación por
defecto para todos ellos
• Implementaciones básicas de operaciones “de servicio”
• Implementaciones vacías para muchas operaciones
 Podemos crear nuestra clase Oyente
heredando de DefaultHandler para
aprovechar todas esas implementaciones
42
Laboratorio de Programación de Sistemas – XML en Java
// Fichero a procesar
File archivoXML = new File("barcos.xml");
// Creamos el parser empleando la Factoría
(que es un Ejemplar Único)
SAXParserFactory factory =
SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
// Nuestro oyente heredará de DefaultHandler
DefaultHandler oyente = new Oyente();
// Lanzamos el proceso de parseo, siendo
nuestro oyente uno de los argumentos
parser.parse(archivoXML, oyente);
43
Laboratorio de Programación de Sistemas – XML en Java
public class Oyente extends DefaultHandler {
public void startDocument() throws SAXException {
System.out.println(“Comienzo del documento”);
}
public void endDocument() throws SAXException {
System.out.println(“Final del documento”);
}
public void startElement(String namespace, String sName,
String qName, Attributes atrs) throws SAXException {
System.out.println(“Elemento: ” + qName);
if (atrs != null) {
for(int i=0; i < atrs.getLength(); i++) {
System.out.println(“Atributo: “ + atrs.getQName(i)
+ “ = “ + atrs.getValue(i);}
}
}
public void characters(char buf[], int offset, int len) {
String aux = new String(buf, offset, len);
System.out.println(“Texto: ” + aux);
}
}
44
Laboratorio de Programación de Sistemas – XML en Java
45
Laboratorio de Programación de Sistemas – XML en Java
 El uso de DOM (Document Object Model) consiste en los siguientes pasos:
• Crear un DocumentBuilder mediante una Factoría
• DocumentBuilder lee un documento XML y crea en memoria principal
un árbol de objetos Java que se corresponde con la estructura del mismo
 DocumentBuilder también puede crear árboles vacíos si hiciera falta
• Usar dicho árbol para navegarlo (pudiendo añadir, eliminar o modificar
elementos si hiciera falta)
46
Laboratorio de Programación de Sistemas – XML en Java
 Curiosamente, los fragmentos de texto del documento XML se consideran
nodos del árbol, como los propios elementos XML
• DOM no los sitúa dentro directamente de los propios nodos de los elementos
 Sin embargo, los atributos de los elementos sí están dentro de los nodos
<?xml version=“1.0”?>
<coleccion>
<libro ID="1">Libro de Java</libro>
<libro ID="2">Libro de C++</libro>
</coleccion>
47
Laboratorio de Programación de Sistemas – XML en Java
Element
libro
ID = “1”
Element
coleccion
Text
“Libro de Java”
Element
libro
ID = “2”
Text
“Libro de C++”
 Construcción de un árbol DOM vacío
try {
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
}
catch (ParserConfigurationException e) { ... }
 Construcción de un árbol DOM a partir de un fichero XML
try {
File fichero = new File(“coleccion.xml”);
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(fichero);
}
catch (ParserConfigurationException e) { ... }
48
Laboratorio de Programación de Sistemas – XML en Java
 org.w3c.dom.Node es una interfaz con métodos para
organizar un árbol
• getParent(): Devuelve el nodo padre
• getChildNodes(): Devuelve una lista de hijos
• appendChild(Node newChild): Añade un hijo al nodo actual
• removeChild(Child hijo): Elimina el nodo hijo indicado
 Generalmente, se emplean interfaces que extienden Node
• Element: Para representar cualquier elemento XML
• Text: Para representar un fragmento de texto
• Attr: Para representar los atributos de un elemento
• Document: Para representar el árbol completo y crear más nodos
49
Laboratorio de Programación de Sistemas – XML en Java
 Métodos más comunes de org.w3c.dom.Element
• String getAttribute(String s): Devuelve el valor del
atributo llamado “s”
• NodeList getElementsByTagName(String s): Devuelve
una lista con todos los subelementos con la etiqueta “s”
• String getTagName(): Devuelve la etiqueta del propio
elemento
• boolean hasAttribute(String s): Pregunta si hay un
atributo llamado “s”
• void setAttribute(String nombre, String valor):
Añade un nuevo atributo con un cierto “nombre” y “valor”
• void removeAttribute(String nombre): Elimina el
atributo llamado “nombre”
50
Laboratorio de Programación de Sistemas – XML en Java
 org.w3c.dom.Text
• String getWholeText(): Devuelve el contenido
textual del nodo
• Text setWholeText(String texto): Cambia el
contenido textual del nodo
 org.w3c.dom.Attr
• String getName(): Devuelve el nombre del
atributo
• String getValue(): Devuelve el valor del atributo
• void setValue(String valor): Cambia el valor
del atributo
51
Laboratorio de Programación de Sistemas – XML en Java
 org.w3c.dom.Document
• Por un lado representa al documento XML completo
• Por otro lado actúa como Factoría para crear nuevos nodos
 Los nodos sólo pueden colocarse directamente en aquel documento que los creó
• ¡Ojo! Sólo puede tener un único hijo (= el nodo raíz del documento)
 Métodos más habituales
• Element createElement(String nombre): Crea un nodo
de tipo Element
• Attr createAttribute(String nombre): Crea un nodo de
tipo Attr
• Text createTextNode(String texto): Crea un nodo de
tipo Text
• Node adoptNode(Node fuente): Intenta “adoptar” un nodo
creado en un documento distinto, colocándolo dentro de este
52
Laboratorio de Programación de Sistemas – XML en Java
53
Laboratorio de Programación de Sistemas – XML en Java
 La clase javax.xml.transform.Transformer
implementa un motor para realizar transformaciones a
documentos XML
• Los ejemplares se obtienen de Factorías de este tipo:
javax.xml.transform.TransformerFactory
 Dispone del método transform(fuente, destino)
• La fuente debe ser un objeto de tipo:
javax.xml.transform.Source
• El destino debe ser un objeto de tipo:
javax.xml.transform.Result
 Ambas interfaces (Source y Result) disponen de
implementaciones para representar a un documento
XML basado en DOM, SAX o en un flujo de datos
(Stream) genérico
54
Laboratorio de Programación de Sistemas – XML en Java
DOMSource
• Se construye pasándole como parámetro el
nodo raíz del subárbol DOM a tratar
SAXSource
• Se construye a partir de un InputStream
conectado al fichero que queremos tratar
•getInputSource y setOutputSource
nos permiten acceder y modificar el flujo de
datos
StreamSource
• Se construye a partir de un objeto de tipo
File, de un InputStream (flujo de datos
binarios) o un Reader (lector de caracteres)
55
Laboratorio de Programación de Sistemas – XML en Java
 DOMResult
• Se construye pasándole como parámetro un objeto de
tipo nodo, que actúa como raíz del árbol donde
queremos colocar la salida de la transformación
• Con setNextSibling(Node node) se puede
especificar en que punto del árbol queremos colocar la
salida de la transformación
 SAXResult
• La salida del transformador se analiza directamente
como un flujo SAX
• Se construye a partir de un ContentHandler que será
quién escuche los eventos emitidos al analizar la salida
del transformador
 StreamResult
• La salida se escribe directamente en un flujo de datos
• Se pueden construir a partir de un objeto de tipo File,
de un OutputStream (flujo de datos binarios) o un
Writer (escritor de caracteres)
56
Laboratorio de Programación de Sistemas – XML en Java
 Usamos un transformador para pasar un árbol DOM (con DOMSource) a un
fichero normal (con StreamResult)
//Creación del transformador a partir de una factoría
TransformerFactory factoria =
TransformerFactory.newInstance();
Transformer transformer = factoria.newTransformer(); //
Podría llevar como argumento un documento XSLT
//Creación de un Source a partir del árbol DOM
DOMSource origen = new DOMSource(arbolDOM);
//Creación de un Result a partir del fichero de destino
File ficheroDestino = new File("barcos.xml");
StreamResult destino = new StreamResult(ficheroDestino);
transformer.transform(origen, destino);
 En realidad a partir de Java 5, hay métodos para cargar y guardar árboles
DOM en el paquete org.w3d.dom.loader
57
Laboratorio de Programación de Sistemas – XML en Java
Federico Peinado
www.federicopeinado.es

Más contenido relacionado

PPTX
Portafolio de evidencias
PPS
Programacion
PPTX
Portafolio de evidencias
PDF
Tutorial basico prolog
PPTX
Tutorial para-eclipse
PPTX
Identificadores palabras clave y tipos Java
Portafolio de evidencias
Programacion
Portafolio de evidencias
Tutorial basico prolog
Tutorial para-eclipse
Identificadores palabras clave y tipos Java

La actualidad más candente (14)

PDF
Apuntes de DTD
PPTX
Introduccion a java script y extjs, componentes extjs
PPTX
Prolog2
PPTX
Prolog
DOCX
Lenguajes de programación orientados a objetos
PDF
001 Html
 
PPTX
Clase Html + CSS
PPT
Intro Java
PPTX
Lenguajes de programación: Paradigmas de Programación
PPTX
Programacion web
PDF
Manual basico de PHP
Apuntes de DTD
Introduccion a java script y extjs, componentes extjs
Prolog2
Prolog
Lenguajes de programación orientados a objetos
001 Html
 
Clase Html + CSS
Intro Java
Lenguajes de programación: Paradigmas de Programación
Programacion web
Manual basico de PHP
Publicidad

Destacado (11)

PDF
Best Way to Write SQL in Java
PDF
Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017
PDF
sistema de classificação dos solos
PDF
ORM Injection
PPTX
Les micro orm, alternatives à entity framework
PDF
[오픈소스컨설팅]Java Performance Tuning
PDF
Programmation concurrente en Java
PDF
Java, JCP, Adopt-a-JSR & You DevNexus
PDF
InterConnect: Java, Node.js and Swift - Which, Why and When
PPT
Down-to-Earth Microservices with Java EE
PDF
Conf orm - explain
Best Way to Write SQL in Java
Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017
sistema de classificação dos solos
ORM Injection
Les micro orm, alternatives à entity framework
[오픈소스컨설팅]Java Performance Tuning
Programmation concurrente en Java
Java, JCP, Adopt-a-JSR & You DevNexus
InterConnect: Java, Node.js and Swift - Which, Why and When
Down-to-Earth Microservices with Java EE
Conf orm - explain
Publicidad

Similar a Prg java l (20)

PPT
Presentación muy chula ApéndiceTecnologíaXML.ppt
PPT
XML de A a Z
PDF
Xml para todos
PDF
PDF
Tema 2
PPTX
PPTX
Bases de Datos XML
PDF
Introduccion al xml
PDF
infografíaxml
PPTX
Exposicion dora, alex y eric
PDF
"Android de la A a la Z" -- Unidad 5
DOCX
Android de la A a la Z - Unidad 5
PPTX
Xml presentacin
PPTX
Presentacion xml
PPT
PPTX
Lenguajes de marcas
Presentación muy chula ApéndiceTecnologíaXML.ppt
XML de A a Z
Xml para todos
Tema 2
Bases de Datos XML
Introduccion al xml
infografíaxml
Exposicion dora, alex y eric
"Android de la A a la Z" -- Unidad 5
Android de la A a la Z - Unidad 5
Xml presentacin
Presentacion xml
Lenguajes de marcas

Último (15)

PPTX
Evolución de la computadora ACTUALMENTE.pptx
PDF
[Ebook gratuito] Introducción a la IA Generativa, Instalación y Configuración...
PPTX
Qué es Google Classroom Insertar SlideShare U 6.pptx
PPTX
tema-2-interes-.pptx44444444444444444444
PDF
CAPACITACIÓN MIPIG - MODELO INTEGRADO DE PLANEACIÓN Y GESTIÓN
PPTX
presentacion_energias_renovables_renovable_.pptx
PDF
LA INTELIGENCIA ARTIFICAL SU HISTORIA Y EL FUTURO
PPTX
Presentación de un estudio de empresa pp
PDF
Herramientaa de google google keep, maps.pdf
PPT
laser seguridad a la salud humana de piel y vision en laser clase 4
PPTX
Guia de power bi de cero a avanzado detallado
PDF
Frases de Fidel Castro. Compilación Norelys Morales Aguilera
PPTX
Plantilla-Hardware-Informático-oficce.pptx
PDF
Mesopotamia y Egipto.pptx.pdf historia universal
PPTX
FUNCIONES DE CLASSROOM EN EL FUNCIONAMIENTO ESCOLAR
Evolución de la computadora ACTUALMENTE.pptx
[Ebook gratuito] Introducción a la IA Generativa, Instalación y Configuración...
Qué es Google Classroom Insertar SlideShare U 6.pptx
tema-2-interes-.pptx44444444444444444444
CAPACITACIÓN MIPIG - MODELO INTEGRADO DE PLANEACIÓN Y GESTIÓN
presentacion_energias_renovables_renovable_.pptx
LA INTELIGENCIA ARTIFICAL SU HISTORIA Y EL FUTURO
Presentación de un estudio de empresa pp
Herramientaa de google google keep, maps.pdf
laser seguridad a la salud humana de piel y vision en laser clase 4
Guia de power bi de cero a avanzado detallado
Frases de Fidel Castro. Compilación Norelys Morales Aguilera
Plantilla-Hardware-Informático-oficce.pptx
Mesopotamia y Egipto.pptx.pdf historia universal
FUNCIONES DE CLASSROOM EN EL FUNCIONAMIENTO ESCOLAR

Prg java l

  • 1. Federico Peinado www.federicopeinado.es Depto. de Ingeniería del Software e Inteligencia Artificial disia.fdi.ucm.es Facultad de Informática www.fdi.ucm.es Universidad Complutense de Madrid www.ucm.es
  • 2.  En principio, nada que ver con DOO ni POO  No son lenguajes para programar, sino para estructurar documentos de manera explícita, añadiendo ciertas “marcas” en determinados puntos del documento  Probablemente el más popular es HTML (HyperText Markup Language) • Sirve para definir el contenido de una página web, la disposición de los elementos que debe visualizar un navegador web • Las “marcas” en este caso se conocen como etiquetas  Por ejemplo, se usan estas dos para delimitar un párrafo: <p>Texto ...</p> 2 Laboratorio de Programación de Sistemas – XML en Java
  • 3. 3 Laboratorio de Programación de Sistemas – XML en Java http://www.w3schools.com/html/
  • 4. 4 Laboratorio de Programación de Sistemas – XML en Java
  • 5.  XML (eXtensible Markup Language) es un estándar para lenguajes de marcado del W3C (World Wide Web Consortium)  Diseñado para describir documentos estructurados y cualquier información en forma de texto • Los documentos llevan contenidos con marcas • Las marcas aquí también se denominan etiquetas  Son identificadores encerrados entre < y >  Crean una estructura jerárquica, equivalente a un árbol  En realidad se trata de un meta-lenguaje • Permite definir lenguajes de marcado específicos para una aplicación concreta  No tiene etiquetas predefinidas, hay que definirlas según la aplicación • Ejemplo: XHTML es una versión de HTML, pero definida mediante el meta-lenguaje estándar XML 5 Laboratorio de Programación de Sistemas – XML en Java
  • 6.  Ofrece una sintaxis estándar para todos los lenguajes de marcado • Permite simplificar el tratamiento automático de este tipo de información  Existen varios lenguajes asociados que lo hacen aún más potente • DTD • XML Schema • XSLT • ...  Disponemos de muchas herramientas y software ya creado • Analizadores (Parsers) • Generadores • Intérpretes • Editores • ...  Permite comprobar formalmente si un documento es “correcto”  ...  ¡Ojo! XML no es ninguna “bala de plata”: no tiene porque ser la mejor solución para todos nuestros problemas 6 Laboratorio de Programación de Sistemas – XML en Java
  • 7.  Las etiquetas definen cada uno de los elementos • Pueden servir para marcar unos ciertos contenidos: <nombre_etiqueta> Marca el inicio de este elemento Contenido (puede contener a su vez más etiquetas) </nombre_etiqueta> Marca el final de este elemento • Pueden estar vacías de contenidos: <nombre_etiqueta />  Las etiquetas pueden llevar atributos asociados • <nombre_etiqueta nombre_atributo1=“valor_atributo1” nombre_atributo2=“valor_atributo2” ...> ... </nombre_etiqueta> 7 Laboratorio de Programación de Sistemas – XML en Java
  • 8. <?xml version="1.0" encoding="ISO-8859-1"?> <!-- Edited by XMLSpy® --> <notes> <note type=“Post-it”> <to>Paco</to> <from>Juana</from> <heading>Lista de la compra</heading> <body>¡Acuérdate de la leche!</body> </note> <note type=“Correo electrónico”> <to>Aurora</to> <from>Manuel Esteban</from> <heading>Re: Felicitación</heading> <body>Gracias por tu felicitación...</body> </note> ... </notes> 8 Laboratorio de Programación de Sistemas – XML en Java
  • 9.  Los comentarios se delimitan mediante las etiquetas <!-- y -->  Los documentos XML son sensibles a minúsculas y mayúsculas  Para poder usar caracteres reservados en XML como son <, > y & hay que utilizar combinaciones especiales de caracteres en el contenido como &lt;, &gt;, &amp; y otras  Los valores de los atributos deben ir siempre entrecomillados, para lo que puede usarse la comilla doble o la simple  Todo documento debe tener un único elemento como raíz del árbol de la jerarquía de elementos 9 Laboratorio de Programación de Sistemas – XML en Java
  • 10. 10 Laboratorio de Programación de Sistemas – XML en Java
  • 11.  Un documento XML es “correcto” si está bien formado y es válido  Bien formado: que cumple la sintaxis básica que impone XML en general, en cuanto a apertura y cierre de etiquetas, uso de atributos, etc. • Esto sería un documento mal formado: <notes> <note type=“Post-it”> </to> <to>Paco <from>Juana</from> ...  Válido: que cumple con las normas semánticas establecidas para el lenguaje de marcado específico que hayamos creado • Esto, según las normas de XHTML sería un documento inválido: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Título</title> ... </head> <p>Párrafo fuera de su sitio.</p> <body> ... </body> </html> 11 Laboratorio de Programación de Sistemas – XML en Java
  • 12.  Para definir un lenguaje derivado de XML es necesario definir una gramática que especifique: • Etiquetas válidas • Atributos válidos • Jerarquía existente entre las distintas etiquetas DTD (Document Type Definition) es un lenguaje específico con el que se puede definir dicha gramática • Una DTD proporciona los criterios con los que podremos validar una serie de documentos XML 12 Laboratorio de Programación de Sistemas – XML en Java
  • 13.  Las declaraciones en una DTD tienen esta forma: <!keyword parámetro1 parámetro2 ... parámetroN>  Hay 4 palabras reservadas básicas • ELEMENT: Declara el nombre de un elemento y a continuación sus posibles subelementos • ATTLIST: Declara los nombres de los atributos de un elemento, así como sus posibles valores y/o valor por defecto • ENTITY: Declara referencias a caracteres especiales o a bloques de texto (similar a un #define de C++) o también a contenido que va a ser repetido y que puede estar en un recurso externo (similar a un #include de C++). • NOTATION: Declara contenido externo “no-XML” (por ejemplo, ficheros con imágenes), indicando la aplicación externa que es capaz de gestionar dicho contenido 13 Laboratorio de Programación de Sistemas – XML en Java
  • 14.  La declaración de un elemento tiene esta forma: <!ELEMENT nombre_elemento contenido> • nombre_elemento es el nombre de la etiqueta que corresponde al elemento que estamos definiendo  Hay 5 tipos posibles de contenido • ANY: El elemento puede contener cualquier XML bien formado • EMPTY: El elemento no puede contener nada (aunque puede tener atributos) • Texto: El elemento sólo puede contener texto, pero sin subelementos (se indica con (#PCDATA)) • Subelementos: El elemento sólo contiene los subelementos que se mencionen • Mixto: El elemento puede contener tanto texto como subelementos 14 Laboratorio de Programación de Sistemas – XML en Java
  • 15.  Cuando el contenido es del tipo Subelementos o Mixto, se utiliza una expresión regular que especifica cómo debe organizarse dicho contenido  Ejemplos de expresiones regulares: • Una colección que contiene uno o más libros <!ELEMENT coleccion (libro)+> • Un libro que contiene un título, cero o más autores, y cero o una ediciones <!ELEMENT libro (titulo, autor*, edicion?)> • Una edición tiene una editorial, una colección y un año (todos opcionales) <!ELEMENT edicion (editorial?, coleccion?, año?)> 15 Laboratorio de Programación de Sistemas – XML en Java
  • 16.  Los atributos se utilizan para asociar pares nombre-valor a los elementos  La declaración comienza con la palabra reservada ATTLIST seguida por el nombre del elemento al que pertenecen los atributos y por la definición de cada uno de los atributos individuales • El orden en que se presentan los atributos es indiferente  Cada atributo puede tener un nombre, un tipo, una definición de característica y un valor por defecto.  Ejemplo <!ATTLIST nombreElemento nombreAtributo1 tipo1 caracteristica1 valorPorDefecto1 ... nombreAtributoN tipoN caracteristicaN valorPorDefectoN> 16 Laboratorio de Programación de Sistemas – XML en Java
  • 17.  Hay 4 tipos básicos para los atributos • CDATA: Datos formados únicamente por caracteres (es decir, cadenas de texto) • Valores enumerados  Se proporciona el conjunto de todos los valores permitidos  Opcionalmente puede darse un valor por defecto • ID: Identificador único por cada ejemplar del elemento  El analizador debe comprobar que efectivamente el valor de este atributo sea único para cada ejemplar en el documento • IDREF: Una referencia al identificador de un elemento  El analizador debe comprobar que efectivamente hay un ejemplar del elemento con ese identificador en el documento 17 Laboratorio de Programación de Sistemas – XML en Java
  • 18.  Las características indican cómo debe comportarse un analizador si un determinado atributo no aparece en un documento XML  Hay 4 posibles características • #REQUIRED: El atributo es necesario, por lo que debería estar siempre presente en los ejemplares del elemento en el documento • #IMPLIED: El atributo es opcional • #FIXED: El atributo es opcional y además:  Si aparece debe coincidir con el valor por defecto  Si no aparece el analizador puede darle el valor por defecto • Por defecto (sin palabra clave): El atributo es opcional y además:  Si aparece debe tener un valor adecuado para su tipo  Si no aparece el analizador puede darle el valor por defecto 18 Laboratorio de Programación de Sistemas – XML en Java
  • 19.  Todo documento XML (tenga o no DTD) debe empezar con esta línea: <?xml version="num_versión" encoding="codificación" ?> • num_versión = Número de versión del estándar XML • codificación = Sistema de codificación de los caracteres del documento (ISO-8859-1, UTF-8, etc.)  Además, a continuación se puede añadir una referencia a la DTD que lo valida: <!DOCTYPE nombre SYSTEM “ruta" > • nombre = Nombre lógico de la gramática del DTD • ruta = Ruta que lleva al fichero DTD 19 Laboratorio de Programación de Sistemas – XML en Java
  • 20. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE tablero SYSTEM "barcos.dtd"> <tablero ancho="12" alto="12"> <barco tipo="portaaviones"> <posicion x="1" y="2"/> <posicion x="1" y="3"/> <posicion x="1" y="4"/> <posicion x="1" y="5"/> </barco> <barco tipo="submarino"> <posicion x="5" y="8"/> </barco> <!-- Definición del resto de barcos... --> <casilla-especial tipo="tierra"> <posicion x="2" y="0"/> </casilla-especial> </tablero> 20 Laboratorio de Programación de Sistemas – XML en Java
  • 21. <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT tablero (barco+, casilla-especial*)> <!ATTLIST tablero ancho CDATA #REQUIRED alto CDATA #REQUIRED > <!ELEMENT barco (posicion+)> <!ATTLIST barco tipo (portaaviones|destructor|fragata|submarino) #REQUIRED > <!ELEMENT casilla-especial (posicion)> <!ATTLIST casilla-especial tipo (tierra) #REQUIRED > <!ELEMENT posicion EMPTY> <!ATTLIST posicion x CDATA #REQUIRED y CDATA #REQUIRED > 21 Laboratorio de Programación de Sistemas – XML en Java
  • 22. 36 Laboratorio de Programación de Sistemas – XML en Java
  • 23. Existen diversas APIs para manejar XML desde una aplicación Java • JAXP (Java API for XML Processing) es probablemente la más popular  SAX (Analizador basado en eventos)  DOM (Analizador tipo árbol)  Transformer (transformador de documentos XML)  … 37 Laboratorio de Programación de Sistemas – XML en Java
  • 24.  Representan dos filosofías distintas de procesar documentos XML • SAX realiza rápidamente una única pasada por todo el documento  Requiere poca memoria principal  Es necesario disponer del documento íntegro para terminar de analizarlo  Muy usado para operaciones de sólo lectura sobre un documento XML • DOM copia el árbol de elementos XML (total o parcialmente) en memoria principal usando objetos Java y nos permite trabajar sobre ellos  Requerirá más memoria cuanto mayor sea el documento XML  Permite crear y modificar elementos dentro del documento XML  Normalmente no se usa para leer un fichero ya existente 38 Laboratorio de Programación de Sistemas – XML en Java
  • 25. 39 Laboratorio de Programación de Sistemas – XML en Java
  • 26.  El uso de SAX (Simple API for XML) consiste en los siguientes pasos: 1. Crear un SAXParser (a través de una Factoría) 2. El SAXParser contiene un SAXReader 3. El SAXReader procesa el documento completo y va lanzando eventos según el contenido los elementos que va encontrando 4. Habrá una clase Oyente que va “escuchando” esos eventos y actúa en consecuencia 40 Laboratorio de Programación de Sistemas – XML en Java
  • 27.  Nosotros debemos construir esa clase Oyente, para lo que hay 4 interfaces que implementar • ContentHandler  startDocument y endDocument: Métodos llamados al empezar y al terminar de procesar el documento  startElement y endElement: Métodos llamados al comenzar y al terminar de procesar cualquier elemento XML  characters: Método llamado al encontrar texto dentro de un elemento • ErrorHandler  error, fatalError y warning: Métodos para tratar distintos problemas que pueden producirse durante el análisis • DTDHandler  Se usa si queremos definir un analizador de DTDs • EntityResolver  resolveEntity: Método llamado al encontrar una referencia en el XML que deba ser resuelta (como una URI, por ejemplo) 41 Laboratorio de Programación de Sistemas – XML en Java
  • 28.  Habitualmente no interesa implementar todos los métodos de dichas 4 interfaces  DefaultHandler da una implementación por defecto para todos ellos • Implementaciones básicas de operaciones “de servicio” • Implementaciones vacías para muchas operaciones  Podemos crear nuestra clase Oyente heredando de DefaultHandler para aprovechar todas esas implementaciones 42 Laboratorio de Programación de Sistemas – XML en Java
  • 29. // Fichero a procesar File archivoXML = new File("barcos.xml"); // Creamos el parser empleando la Factoría (que es un Ejemplar Único) SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); // Nuestro oyente heredará de DefaultHandler DefaultHandler oyente = new Oyente(); // Lanzamos el proceso de parseo, siendo nuestro oyente uno de los argumentos parser.parse(archivoXML, oyente); 43 Laboratorio de Programación de Sistemas – XML en Java
  • 30. public class Oyente extends DefaultHandler { public void startDocument() throws SAXException { System.out.println(“Comienzo del documento”); } public void endDocument() throws SAXException { System.out.println(“Final del documento”); } public void startElement(String namespace, String sName, String qName, Attributes atrs) throws SAXException { System.out.println(“Elemento: ” + qName); if (atrs != null) { for(int i=0; i < atrs.getLength(); i++) { System.out.println(“Atributo: “ + atrs.getQName(i) + “ = “ + atrs.getValue(i);} } } public void characters(char buf[], int offset, int len) { String aux = new String(buf, offset, len); System.out.println(“Texto: ” + aux); } } 44 Laboratorio de Programación de Sistemas – XML en Java
  • 31. 45 Laboratorio de Programación de Sistemas – XML en Java
  • 32.  El uso de DOM (Document Object Model) consiste en los siguientes pasos: • Crear un DocumentBuilder mediante una Factoría • DocumentBuilder lee un documento XML y crea en memoria principal un árbol de objetos Java que se corresponde con la estructura del mismo  DocumentBuilder también puede crear árboles vacíos si hiciera falta • Usar dicho árbol para navegarlo (pudiendo añadir, eliminar o modificar elementos si hiciera falta) 46 Laboratorio de Programación de Sistemas – XML en Java
  • 33.  Curiosamente, los fragmentos de texto del documento XML se consideran nodos del árbol, como los propios elementos XML • DOM no los sitúa dentro directamente de los propios nodos de los elementos  Sin embargo, los atributos de los elementos sí están dentro de los nodos <?xml version=“1.0”?> <coleccion> <libro ID="1">Libro de Java</libro> <libro ID="2">Libro de C++</libro> </coleccion> 47 Laboratorio de Programación de Sistemas – XML en Java Element libro ID = “1” Element coleccion Text “Libro de Java” Element libro ID = “2” Text “Libro de C++”
  • 34.  Construcción de un árbol DOM vacío try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.newDocument(); } catch (ParserConfigurationException e) { ... }  Construcción de un árbol DOM a partir de un fichero XML try { File fichero = new File(“coleccion.xml”); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(fichero); } catch (ParserConfigurationException e) { ... } 48 Laboratorio de Programación de Sistemas – XML en Java
  • 35.  org.w3c.dom.Node es una interfaz con métodos para organizar un árbol • getParent(): Devuelve el nodo padre • getChildNodes(): Devuelve una lista de hijos • appendChild(Node newChild): Añade un hijo al nodo actual • removeChild(Child hijo): Elimina el nodo hijo indicado  Generalmente, se emplean interfaces que extienden Node • Element: Para representar cualquier elemento XML • Text: Para representar un fragmento de texto • Attr: Para representar los atributos de un elemento • Document: Para representar el árbol completo y crear más nodos 49 Laboratorio de Programación de Sistemas – XML en Java
  • 36.  Métodos más comunes de org.w3c.dom.Element • String getAttribute(String s): Devuelve el valor del atributo llamado “s” • NodeList getElementsByTagName(String s): Devuelve una lista con todos los subelementos con la etiqueta “s” • String getTagName(): Devuelve la etiqueta del propio elemento • boolean hasAttribute(String s): Pregunta si hay un atributo llamado “s” • void setAttribute(String nombre, String valor): Añade un nuevo atributo con un cierto “nombre” y “valor” • void removeAttribute(String nombre): Elimina el atributo llamado “nombre” 50 Laboratorio de Programación de Sistemas – XML en Java
  • 37.  org.w3c.dom.Text • String getWholeText(): Devuelve el contenido textual del nodo • Text setWholeText(String texto): Cambia el contenido textual del nodo  org.w3c.dom.Attr • String getName(): Devuelve el nombre del atributo • String getValue(): Devuelve el valor del atributo • void setValue(String valor): Cambia el valor del atributo 51 Laboratorio de Programación de Sistemas – XML en Java
  • 38.  org.w3c.dom.Document • Por un lado representa al documento XML completo • Por otro lado actúa como Factoría para crear nuevos nodos  Los nodos sólo pueden colocarse directamente en aquel documento que los creó • ¡Ojo! Sólo puede tener un único hijo (= el nodo raíz del documento)  Métodos más habituales • Element createElement(String nombre): Crea un nodo de tipo Element • Attr createAttribute(String nombre): Crea un nodo de tipo Attr • Text createTextNode(String texto): Crea un nodo de tipo Text • Node adoptNode(Node fuente): Intenta “adoptar” un nodo creado en un documento distinto, colocándolo dentro de este 52 Laboratorio de Programación de Sistemas – XML en Java
  • 39. 53 Laboratorio de Programación de Sistemas – XML en Java
  • 40.  La clase javax.xml.transform.Transformer implementa un motor para realizar transformaciones a documentos XML • Los ejemplares se obtienen de Factorías de este tipo: javax.xml.transform.TransformerFactory  Dispone del método transform(fuente, destino) • La fuente debe ser un objeto de tipo: javax.xml.transform.Source • El destino debe ser un objeto de tipo: javax.xml.transform.Result  Ambas interfaces (Source y Result) disponen de implementaciones para representar a un documento XML basado en DOM, SAX o en un flujo de datos (Stream) genérico 54 Laboratorio de Programación de Sistemas – XML en Java
  • 41. DOMSource • Se construye pasándole como parámetro el nodo raíz del subárbol DOM a tratar SAXSource • Se construye a partir de un InputStream conectado al fichero que queremos tratar •getInputSource y setOutputSource nos permiten acceder y modificar el flujo de datos StreamSource • Se construye a partir de un objeto de tipo File, de un InputStream (flujo de datos binarios) o un Reader (lector de caracteres) 55 Laboratorio de Programación de Sistemas – XML en Java
  • 42.  DOMResult • Se construye pasándole como parámetro un objeto de tipo nodo, que actúa como raíz del árbol donde queremos colocar la salida de la transformación • Con setNextSibling(Node node) se puede especificar en que punto del árbol queremos colocar la salida de la transformación  SAXResult • La salida del transformador se analiza directamente como un flujo SAX • Se construye a partir de un ContentHandler que será quién escuche los eventos emitidos al analizar la salida del transformador  StreamResult • La salida se escribe directamente en un flujo de datos • Se pueden construir a partir de un objeto de tipo File, de un OutputStream (flujo de datos binarios) o un Writer (escritor de caracteres) 56 Laboratorio de Programación de Sistemas – XML en Java
  • 43.  Usamos un transformador para pasar un árbol DOM (con DOMSource) a un fichero normal (con StreamResult) //Creación del transformador a partir de una factoría TransformerFactory factoria = TransformerFactory.newInstance(); Transformer transformer = factoria.newTransformer(); // Podría llevar como argumento un documento XSLT //Creación de un Source a partir del árbol DOM DOMSource origen = new DOMSource(arbolDOM); //Creación de un Result a partir del fichero de destino File ficheroDestino = new File("barcos.xml"); StreamResult destino = new StreamResult(ficheroDestino); transformer.transform(origen, destino);  En realidad a partir de Java 5, hay métodos para cargar y guardar árboles DOM en el paquete org.w3d.dom.loader 57 Laboratorio de Programación de Sistemas – XML en Java