Está en la página 1de 53

TEMA 3

Servicios Web (2)


Eduardo Martnez Graci
Humberto Martnez Barber
Servicios Telemticos Avanzados. Tema 3-2

Metadatos
Definicin:

datos sobre datos

Fichero: una ficha por libro


con la siguiente informacin:
Ttulo del libro
Autor
Localizacin en las estanteras
...
Servicios Telemticos Avanzados. Tema 3-2

Libro: datos sobre los que se


describen cosas

Metadatos
Se pueden considerar como etiquetas asignadas a datos,
de la forma nombre = valor
Autor = Miguel de Cervantes
Ttulo = Novelas ejemplares
Localizacin = 1 D 3

Para que sea de utilidad, cada etiqueta debe


estar bien definida (nombre, descripcin, valores posibles)
El conjunto de etiquetas se denomina esquema.
Habitualmente, etiqueta y marca son sinnimos.
Servicios Telemticos Avanzados. Tema 3-2

Lenguajes de marcas
Los documentos electrnicos tienen 3 partes:
Contenido: los datos o palabras en s mismos
Estructura: la organizacin del contenido
Presentacin: el aspecto con el que se presenta el contenido al lector

Las marcas son secuencias de smbolos que, insertados en el


contenido de un documento, sirven para indicar su presentacin o su
estructura
HTML (Hypertext Markup Language):
Las marcas definen la presentacin
Problema: los buscadores no disponen de
informacin til para localizar los documentos
solicitados
Servicios Telemticos Avanzados. Tema 3-2

XML: eXtended Markup Language


Con HTML:

Con XML: las marcas indican la estructura

<H1>Factura</H1>
<P>De: Pepe Martinez</P>
<P>A: Juan Fernandez</P>
<P>Fecha: 1 Dic 2000</P>
<P>Cantidad: 1000 Pts</P>
<P>Iva: 17%</P>
<P>Total: 1170 Pts</P>

<Factura>
<De>Pepe Martinez</De>
<A>Juan Fernandez</A>
<Fecha ao=2000 mes=12 dia =1/>
<Cantidad moneda=Pts>1000</Cantidad>
<Iva>17</Iva>
<Total>1170</Total>
</Factura>

<H1> : Cabecera tipo 1


<P>: Nuevo prrafo

<Factura> : comienza la informacin de factura


<De> ... </De> : Quin cre la factura

Las bsquedas son ms precisas con XML


Servicios Telemticos Avanzados. Tema 3-2

Origen XML
Hacia finales de los sesenta, un grupo de investigadores
comenz a interesarse por darle otros usos a los
documentos electrnicos. En particular, IBM pidi a Charles
Goldfarb que construyese un sistema para almacenar,
buscar, gestionar y publicar documentos legales.
El resultado de su trabajo fue el lenguaje SGML (Standard
Generalized Markup Language), actualmente el estndar de
la ISO 8879. XML es un subconjunto de SGML pensado
para ser llevado al web.
Servicios Telemticos Avanzados. Tema 3-2

Documentos estructurados
Goldfarb y otros investigadores de IBM reconocieron tres hechos
importantes:!
Para intercambiar informacin, los programas tienen que soportar un
lenguaje comn. Tiene sentido que ese lenguaje comn sea algn tipo de
lenguaje de marcas.
La estructura de un documento se puede ver como una jerarqua de
elementos. Por ejemplo, una carta puede tener, en un primer nivel, un
elemento "encabezado" y otro "cuerpo". El encabezado puede contener, a su
vez, elementos "destinatario", "asunto", etc. Las marcas que delimitan estos
elementos se denominan marcas estructurales generalizadas (structural
generalized markup).
Los documentos tienen que seguir algn tipo de reglas, es decir, el lenguaje
de marcas debera ser especificado de algn modo formal que permitiese
garantizar que el documento cumple cierta estructura.
Servicios Telemticos Avanzados. Tema 3-2

Separacin contenido/presentacin
Una vez que se tiene definido un tipo de documento, es necesario
definir cmo se va a imprimir o a visualizar en una pantalla. Esta
descripcin se recoge en una hoja de estilo. !
La idea central de la solucin propuesta por Goldfarb es que
mantener separados los tres aspectos de un documento, contenido,
estructura, y presentacin, aporta grandes ventajas:
Permite al navegador hacer el trabajo de presentacin de los datos en la
pantalla
Facilita al navegador la manipulacin de los datos, y la realizacin de
clculos a partir de ellos
Se pueden realizar bsquedas "inteligentes" de informacin.
Fomenta la creacin de vocabularios (marcas) estndar en diferentes
dominios, como los bancos, las telecomunicaciones, el transporte, etc.
Servicios Telemticos Avanzados. Tema 3-2

XML bsico
La siguiente figura muestra los elementos bsicos de un
sistema basado en XML:
documento
XML
Parser XML

Aplicacin XML

Definicin de
Tipo de
Documento

Servicios Telemticos Avanzados. Tema 3-2

Detalles sintcticos
Los documentos XML estn compuestos por caracteres del conjunto
Unicode. Cualquier secuencia de caracteres se denomina string. La
sintaxis de XML describe la forma de combinar strings para crear
documentos XML bien formados.!
XML distingue maysculas y minsculas, y por tanto no es lo mismo
"ELEMENT" que "element".
Las marcas se parecen a las de HTML. Empiezan por '<' o por '&'.
Los blancos son el espacio (ASCII 32), el tabulador (ASCII 9), el retorno de
carro (ASCII 13) y el carcter de lnea nueva (ASCII 10).
Los literales aparecen rodeados de comillas simples o dobles.
Los nombres que se pueden utilizar para designar elementos XML deben
empezar por letra, '.' o '_', e ir seguidos de letras, dgitos, '-', '_', '.' y ':'.
Servicios Telemticos Avanzados. Tema 3-2

10

Prlogo de un documento XML


Los documentos XML estn divididos en dos partes principales: un
prlogo y una instancia de documento.
El prlogo est compuesto de una declaracin XML y una declaracin
de tipo de documento, y ambas son opcionales. Este es un ejemplo:!
<?xml version="1.0"?>
<!DOCTYPE DOCBOOK SYSTEM "http://www.um.es/docbook">
!

Este prlogo dice que el documento se ajusta a XML versin 1.0, y es


una instancia de un determinado tipo de documento, DOCBOOK.

Servicios Telemticos Avanzados. Tema 3-2

11

Contenido de un documento XML


El contenido real del documento XML se encuentra en la instancia del
documento. Este es un ejemplo de documento XML:!
<?xml version="1.0"?>
prlogo
<!DOCTYPE memo SYSTEM "memo.dtd">
<memo>
<from><name>Eduardo Martinez</name><email>edumart@um.es</email>
</from>
<to><name>Humberto Martinez</name><email>humberto@um.es</email>
</to>
<subject>Ejemplo de Memo</subject>
<body>
<paragraph>Humberto, te aseguro que <emphasis>no</emphasis> quera
usar el ejemplo tpico de Memo, pero no se me ocurra otra cosa.
</paragraph>
</body>
instancia de
</memo>
documento

Servicios Telemticos Avanzados. Tema 3-2

12

rbol sintctico
Parser XML: genera el rbol sintctico
memo

from

name: Eduardo...
email: edumart@...

to

name: Humberto...
email: humberto@...

subject: Ejemplo de...

body

Servicios Telemticos Avanzados. Tema 3-2

paragraph: Humberto...

13

Elementos y atributos XML (1)


Los elementos XML se dividen en dos categoras: los que
tienen contenido y los que son vacos. Ejemplo de elemento
con contenido:!
<titulo>Este es el ttulo</titulo>!

Los elementos XML sin contenido, o elementos vacos,


tienen este aspecto:!
<Fecha ao=1999 mes=2 dia=1 />

Los atributos son una forma de adjuntar caractersticas o


propiedades a los elementos de un documento. Los atributos
tienen nombre y valor.
Servicios Telemticos Avanzados. Tema 3-2

14

Elementos y atributos XML (2)


A veces, un elemento con subelementos puede ser modelado de
forma equivalente con un elemento vaco con atributos. A
continuacin se dan tres formas de modelar un elemento persona de
un mensaje de correo:
!
<FROM>
<NAME>Eduardo Martinez</NAME>
<EMAIL>edumart@um.es</EMAIL>
</FROM>
<FROM NAME="Eduardo Martinez" EMAIL="edumart@um.es" />
<FROM EMAIL="edumart@um.es">
Eduardo Martinez
</FROM>
Servicios Telemticos Avanzados. Tema 3-2

15

CDATA y comentarios
A veces puede resultar interesante indicarle al analizador XML que no
intente interpretar una porcin de documento. Esto se hace marcando
la seccin de la siguiente manera:!
<![CDATA[ contenido que no se interpretar ]]>!
De esta forma, es posible incluir contenido que tiene caracteres
empleados por XML para establecer el comienzo de las marcas:
!<![CDATA[
<HTML>
Esto es un ejemplo de HTML dentro de XML
<p>Los prrafos se indican con esta marca
</HTML> ]]>!

Comentarios similares a HTML:!


<!-- Esto es un comentario en XML -->
Servicios Telemticos Avanzados. Tema 3-2

16

Document Type Definition (DTD)


Documento bien formado: documento que cumple las reglas
sintcticas de XML.
Es interesante definir los tipos de elementos permitidos, atributos y
entidades, y puede expresar restricciones sobre sus combinaciones
vlidas: se consigue con DTDs
Documento vlido: documento que declara en su prlogo cierto
DTD, y que efectivamente lo cumple.
Documento no vlido: documento que declara en su prlogo cierto
DTD, y que no lo cumple.
Un documento no vlido puede ser bien formado
Un documento bien formado puede no ser vlido ni no vlido
Servicios Telemticos Avanzados. Tema 3-2

17

DTD interno: definido dentro del mismo fichero que el


documento XML

<?xml version="1.0"?>
<!DOCTYPE label[
<!ELEMENT label (name, street, city, state, country, code)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT street (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT state (#PCDATA)>
<!ELEMENT country (#PCDATA)>
<!ELEMENT code (#PCDATA)>
]>
<label>
<name>Rock N. Robyn</name>
<street>Jay Bird Street</street>
<city>Baltimore</city>
<state>MD</state>
<country>USA</country>
<code>43214</code>
</label>
Servicios Telemticos Avanzados. Tema 3-2

18

DTD externo: contenido en otro fichero


Si se indica "SYSTEM", a continuacin aparece una URL
que localiza el fichero que contiene la DTD.
<?xml version="1.0"?>
<!DOCTYPE LABEL SYSTEM
"http://www.sgmlsource.com/dtds/label.dtd">
<LABEL>
...
</LABEL>

Si se emplea "PUBLIC", se hace referencia a la DTD externa


mediante un identificador pblico nico:!
<!DOCTYPE MEMO PUBLIC "-//SGMLSOURCE//DTD MEMO//EN"
"http://www.sgmlsource.com/dtds/memo.dtd">
<MEMO>...</MEMO>
Servicios Telemticos Avanzados. Tema 3-2

19

Definicin de elementos XML


Los elementos son la base del lenguaje XML. Cada
elemento de un documento XML vlido debe conformar con
un tipo de elemento declarado en el DTD.
Las declaraciones de tipos de elementos deben comenzar
con el string "<!ELEMENT", seguido del nombre (o
identificador genrico) del tipo de elemento que se est
declarando. Finalmente, debe aparecer una especificacin
de contenido. !
<!ELEMENT memo (to, from, body)>

Servicios Telemticos Avanzados. Tema 3-2

20

Especificacin de contenido de elementos (1)


EMPTY: indica que un elemento no puede tener contenido, como la
etiqueta IMG de HTML:
<!ELEMENT elemento-vacio EMPTY>
!
ANY: el elemento puede contener cualquier tipo de sub-elemento o
datos (string de caracteres). Un elemento con la especificacin de
contenido ANY es completamente no estructurado.
<!ELEMENT cualquier-cosa ANY>
Servicios Telemticos Avanzados. Tema 3-2

21

Especificacin de contenido de elementos (2)


#PCDATA se refiere a cualquier secuencia de caracteres que no
contiene elementos.
Contenido mixto: si deseamos que el contenido de un elemento est
formado por cierta combinacin estructurada de datos y subelementos, es necesario emplear expresiones regulares (*, +, ?) para
describir la sintaxis de dicho contenido:
<!ELEMENT parrafo (#PCDATA|enfatizado)*>
<!ELEMENT resumen
(#PCDATA|enfatizado|cita)*>
!
Servicios Telemticos Avanzados. Tema 3-2

22

Expresiones regulares
Permiten definir una gramtica de forma recursiva
Las expresiones regulares ms sencillas son:
(#PCDATA) : caracteres
(elemento): el contenido es una y slo una aparicin de elemento

Expresiones regulares que indican cardinalidad:


(ER?) : contenido opcional, es decir, vaco o cualquier contenido descrito con la expresin
regular ER.
(ER*): contenido con cardinalidad mxima no definida y mnima posiblemente 0
(ER+): contenido con cardinalidad mxima no definida y mnima 1

Expresin regular que indica una opcin:


(ER1 | ER2): contenido que puede ser cualquiera de los descritos por ER1 y los descritos por
ER2

Expresin regular que indica secuencia:


(ER1, ER2, ER3, ...): contenido formado por la secuencia del contenido descrito por ER1,
seguido por el descrito por ER2, ...
Servicios Telemticos Avanzados. Tema 3-2

23

Atributos (1)
Otra forma de aadir informacin a un elemento es definiendo
atributos. La principal diferencia entre los atributos y el contenido de
un elemento no vaco es que el valor de los primeros no puede
contener sub-elementos. !
Los atributos se declaran para tipos de elementos especficos:!
<!ELEMENT PERSONA (#PCDATA)>
<!ATTLIST PERSONA EMAIL CDATA #REQUIRED>

Las declaraciones de atributos empiezan con el string "<!ATTLIST".


Inmediatamente despus de un espacio en blanco viene el
identificador del elemento. Despus se indica el nombre del atributo,
su tipo y una indicacin relativa a su valor por defecto.
Servicios Telemticos Avanzados. Tema 3-2

24

Atributos (2)
Los atributos pueden tener valores por defecto:
!<!ATTLIST

CAMISA TAMAO (PEQUEO|MEDIO|GRANDE) MEDIO>

Los atributos pueden declararse de forma que sus valores


cumplan ciertas restricciones de tipo lxico o semntico.
CDATA: significa "character data". El contenido es cualquier
secuencia de caracteres que no contenga otros elementos.
<!ATTLIST PERSONA EMAIL CDATA #REQUIRED>

Enumerados: se emplea cuando un atributo debe tomar un valor


dentro de un conjunto discreto:
<!ATTLIST ELECCION (OPCION1|OPCION2|OPCION3) #REQUIRED>

Servicios Telemticos Avanzados. Tema 3-2

25

Atributos (3)
!ID e IDREF: permite crear referencias cruzadas entre
elementos.
<!ELEMENT SECTION (TITULO, PARRAFO*)>
<!ATTLIST SECTION IDENTIFICADOR ID #IMPLIED>
<!ELEMENT REFERENCIA EMPTY>
<!ATTLIST REFERENCIA TARGET IDREF #REQUIRED>
...
<SECTION IDENTIFICADOR="Capitulo 1">
...
</SECTION>
...
Vea <REFERENCIA TARGET="Capitulo 1"/> para volver a
leer sobre
...
Servicios Telemticos Avanzados. Tema 3-2

26

Atributos (4)
ENTITY: tipo de los atributos cuyo valor es el nombre
de una entidad.!
<!ATTLIST REFERENCIA-LIBRO TARGET ENTITY
#REQUIRED>
...
<!ENTITY otro-libro SYSTEM
"http://www.amazon.com/....">
...
<REFERENCIA-LIBRO TARGET="otro-libro">
...
Servicios Telemticos Avanzados. Tema 3-2

27

Entidades (1)
Son abreviaturas que representan un valor (su contenido).
Pueden ser:
Internas: su valor est indicado en el mismo DTD en el que se declaran.
Externas: su valor est en documentos externos al DTD en el que se
declaran.
Generales: se emplean en DTDs y en documentos XML
Parmetro: slo se emplean en DTDs

Las entidades generales internas son las ms simples. Una entidad


de este tipo es siempre una entidad analizada por el procesador XML.

Servicios Telemticos Avanzados. Tema 3-2

28

Entidades (2)
Ejemplo de declaracin de entidad general interna:
<?xml version="1.0" ?>
<!DOCTYPE EJEMPLO SYSTEM "ejemplo.dtd" [
<!ENTITY xml "Extensible Markup Language">
]>
<EJEMPLO>
&xml;
</EJEMPLO>

Ejemplo de declaracin de entidad general externa:!


<!ENTITY introduccion SYSTEM
"http://ants.dif.um.es/servicios/introduccion.xml
">
Servicios Telemticos Avanzados. Tema 3-2

29

Entidades (3)
Una referencia a una entidad es un string formado por el smbolo '&'
concatenado con el nombre de la entidad.
El procesador XML se encarga de sustituir la referencia por su
contenido, que es automticamente analizado por el procesador, que
asume que contiene texto XML.
Mediante entidades es posible dividir un documento en mltiples
ficheros, lo cual favorece la reutilizacin y el mantenimiento de
documentos de gran tamao.
Si queremos incluir en un documento una entidad que no es XML,
debemos emplear el string 'NDATA' seguido de un identificador que
indica el tipo de notacin de la entidad.
<!ENTITY imagen SYSTEM
"http://www.home.org/migato.gif" NDATA GIF>
Servicios Telemticos Avanzados. Tema 3-2

30

Entidades (4)
Las entidades parmetro slo pueden aparecer en DTDs. La forma
de distinguirlas de las entidades generales es mediante un smbolo
'%' en su declaracin, y una sintaxis diferente en su uso.
!
<!DOCTYPE EJEMPLO [
<!-- declaracin de una entidad parmetro -->
<!ENTITY % entidad-ejemplo "<!ELEMENT EJEMPLO
(#PCDATA)>">
<!-- uso de la entidad parmetro -->
%entidad-ejemplo;
]>
<EJEMPLO>
...
</EJEMPLO>
Servicios Telemticos Avanzados. Tema 3-2

31

Espacios de nombres

Los vocabularios de marcas se deben reutilizar


Un mismo documento puede usar varios vocabularios de marcas
Posibilidad de colisin entre nombres de elementos y atributos
Solucin: nombres universales

Definicin: un espacio de nombres XML es una coleccin de nombres, identificada con una
referencia URI, que se emplean en documentos XML como nombres de elementos y nombres de
atributos.
Definicin: dos referencias URI que identifican espacios de nombres se consideran idnticas si
son iguales carcter a carcter.
Los nombres de elementos y atributos aparecen cualificados:
prefijo:parte_local
El prefijo corresponde a una referencia URI, que identifica el espacio de nombres

Servicios Telemticos Avanzados. Tema 3-2

32

Declaracin de espacios de nombres


El espacio de nombres se declara con un atributo especial de un elemento XML:
El atributo de la forma xmlns:NCName=URI, declara que el elemento en el que aparece
pertenece al espacio de nombres URI, y se usa el prefijo NCName para cualificar los
nombres de elementos y atributos
Un elemento puede tener varias declaraciones de espacios de nombres.
Ejemplo: espacio de nombres http://ecommerce.org/schema con prefijo edi
<edi:x xmlns:edi='http://ecommerce.org/schema'>
<!-- El prefijo edi se liga a la URI en el elemento x y su
contenido -->
<edi:y>...</edi:y>
<z edi:att=XX>...</z>
</edi:x>

Servicios Telemticos Avanzados. Tema 3-2

33

Declaracin de espacios de nombres (2)


Espacio de nombres por defecto: espacio de nombres declarado sin prefijo.
Por defecto se considera que cualquier nombre sin prefijo pertenece a dicho
espacio de nombres. Ejemplo:
<?xml version="1.0"?>
<book xmlns=http://www.um.es/books
xmlns:isbn=http://www.isbn.org/isbn>
<title>Manual de XML</title>
<isbn:number>1234566789</isbn:number>
<notes>
<p xmlns=http://www.w3c.org/HTML'>
Este es un <i>gran</i> libro
</p>
</notes>
</book>

Servicios Telemticos Avanzados. Tema 3-2

34

Hojas de estilo
XML no predefine la apariencia de los elementos. Se requiere una descripcin
aparte mediante una hoja de estilo.
XSL (eXtensible Stylesheet Language) es un lenguaje basado en XML,
estandarizado por el W3C, para expresar hojas de estilo aplicables a
documentos XML. Est formado por tres partes:
XSLT (eXtensible Stylesheet Transformations): lenguaje para especificar transformaciones
de documentos XML
XPath (XML Path Language): lenguaje para crear patrones para identificar elementos XML
sobre los que aplicar transformaciones
Formating Objects: vocabulario XML de objetos de formateo, que describen de manera
independiente el estilo a aplicar

Servicios Telemticos Avanzados. Tema 3-2

35

Uso de XSL
El lenguaje XSL se
puede usar para:
Representar documentos
XML en diferentes
formatos
Extraer parte del
contenido de un
documento XML

hoja de estilo
XSL

Procesador
XSL

documento
RTF

documento
XML

Procesador
XSL

documento
PDF

Procesador
XSL

documento
HTML

Transformar
documentos XML entre
esquemas
Servicios Telemticos Avanzados. Tema 3-2

36

Hojas de estilo y documentos XML


Un documento XML que quiera emplear cierta hoja de estilo debe indicar su
localizacin mediante la siguiente instruccin en el prlogo:
!
<?xml-stylesheet type="text/xsl" href="[URI hoja estilo]"?>

Se pueden usar:
En el visualizador: IExplorer 5 soporta el uso de hojas de estilo en documentos XML
En el servidor de contenidos: Cocoon es un sistema de publicacin de documentos basado
en XML y XSL.

Servicios Telemticos Avanzados. Tema 3-2

37

Objetos de formato
Es un conjunto muy extenso de elementos y atributos que
representan reas del documento de salida.
Son especialmente tiles para convertir datos XML de tipo
texto en representaciones binarias (como PDF).
<fo:block font-size="24pt" text-align="centered"
space-before.optimum="24pt">
Java y XML
</fo:block>

Lo habitual es emplear etiquetas XHTML para definir el


formato de los elementos XML (IExplorer no soporta objetos
de formato)
Servicios Telemticos Avanzados. Tema 3-2

38

Ejemplo
Extracto de la hoja de estilo:
<xsl:template match=LIBRO">
<P><xsl:apply-templates/></P>
</xsl:template>
<xsl:template match=AUTOR>
<B> <xsl:value-of/>:</B>
</xsl:template>
<xsl:template match=TITULO">
<xsl:value-of/>
</xsl:template>

Extracto del documento XML:

<LIBRO>
<AUTOR>Carlos Urruti</AUTOR>
<TITULO>Cocina rpida</TITULO>
</LIBRO>
<LIBRO>
<AUTOR>Carmen Lpez</AUTOR>
<TITULO>101 Recetas</TITULO>
</LIBRO>
<LIBRO>
<AUTOR>Sue Meyer</AUTOR>
<TITULO>Cocina italiana</TITULO>
</LIBRO>

Resultado HTML:

<P><B>Carlos Urruti:</B> Cocina rpida</P>


<P><B>Carmen Lpez:</B> 101 Recetas</P>
<P><B>Sue Meyer:</B> Cocina italiana</P>

Servicios Telemticos Avanzados. Tema 3-2

39

Procesamiento de Documentos XML


Una aplicacin que procese documentos XML debe analizarlos. El
anlisis se realiza usando libreras que implementan los analizadores.
Existen dos tipos de analizadores XML:
Analizadores simples, comprueban que los documentos XML son documentos bien
formados.
Analizadores de validacin, comprueban que los documentos son bien formados y
vlidos XML de acuerdo a DTDs o esquemas.

Otra clasificacin de los analizadores es la siguiente:


Analizadores que tratan el documento como estructura plana (secuencialmente): el
programador escribe los procedimientos a ejecutar durante el anlisis: etiqueta de
apertura, etiqueta de cierre, etc.
Analizadores que general un rbol de anlisis. El programador recorre el rbol y consulta
las propiedades de los nodos, que representan elementos XML.

Segundo tipo ms prctico, pero ms lento. Adems, los documentos


grandes pueden requerir excesiva memoria para generar el rbol.
Servicios Telemticos Avanzados. Tema 3-2

40

SAX: Simple API for XML


SAX es una API estndar para el anlisis de documentos XML. Apache Xerces
incluye varias clases para emplearla.
El anlizador SAX trata de forma secuencial a los documentos XML, e invoca a
cdigo escrito por el programador cuando se producen eventos importantes a
medida que recorre el documento.
El programador registra handlers en el parser SAX. Un handler es un mtodo
escrito por el programador, cuya signatura est definida en un interfaz SAX, y
que es invocado por el parser SAX al producirse cierto evento.
Existen cuatro interfaces de handlers:

org.xml.sax.ContentHandler: eventos estndares relacionados con los datos.


org.xml.sax.ErrorHandler: eventos que notifican errores de anlisis.
org.xml.sax.DTDHandler: eventos de anlisis de DTDs.
org.xml.sax.EntityResolver: eventos para resolver entidades externas en documentos XML.

El parser SAX ofrece mtodos setContentHandler(), setErrorHandler()... para


registrar clases que implementan los interfaces anteriores.
Servicios Telemticos Avanzados. Tema 3-2

41

Creacin de parser SAX (1)


import
import
import
import
import
import
import
import
...
public

java.io.IOException;
org.xml.sax.SAXException;
org.xml.sax.Attributes;
org.xml.sax.Locator;
org.xml.sax.XMLReader;
org.xml.sax.ContentHandler;
org.xml.sax.ErrorHandler;
org.apache.xerces.parsers.SAXParser;
void performDemo(String uri) {
System.out.println("Parsing XML File:" + uri );
ContentHandler contentHandler = new MyContentHandler();
ErrorHandler errorHandler = new MyErrorHandler();
try {
XMLReader parser = new SAXParser();
parser.setContentHandler(contentHandler);
parser.setErrorHandler(errorHandler);
parser.parse(uri);
} catch (IOException e) {
System.out.println("Error reading URI:" + e.getMessage());
} catch (SAXException e) {
System.out.println("Error in parsing: " + e.getMessage());
}}

Servicios Telemticos Avanzados. Tema 3-2

42

Creacin de parser SAX (2)


class MyContentHandler implements ContentHandler {
private Locator locator;
public void setDocumentLocator(Locator locator) {
// Locator tiene los mtodos
// getLineNumber() y getColumnNumber()
this.locator = locator;
}
public void startDocument() throws SAXException {
System.out.println("Parsing begins...");
}
public void endDocument() throws SAXException {
System.out.println("....Parsing ends.");
}
public void processingInstruction(String target,
String data) throws SAXException {
System.out.println("PI: Target:" + target +
" and Data: " + data);
}Servicios Telemticos Avanzados. Tema 3-2

43

Creacin de parser SAX (3)


public void startPrefixMapping(String prefix,
String uri) {
System.out.println("Mapping starts for prefix " +prefix +
" mapped to URI " + uri);
}
public void endPrefixMapping(String prefix) {
System.out.println("Mapping ends for prefix " +prefix);
}
public void startElement(String namespaceURI,
String localName, String rawName, Attributes atts) throws SAXException
{
System.out.print("startElement: " + localName);
if (!namespaceURI.equals("")) {
System.out.println(" in namespace "+ namespaceURI +
" (" + rawName + ")");
} else {
System.out.println(" has no associated namespace"); }
for (int i = 0; i < atts.getLength(); i++)
System.out.println(" Attribute: " + atts.getLocalName(i)+
"=" + atts.getValue(i)); }
Servicios Telemticos Avanzados. Tema 3-2

44

Creacin de parser SAX (4)


public void endElement(String namespaceURI,
String localName, String rawName) throws SAXException {
System.out.println("endElement: " + localName + "\n");
}
public void characters(char[] ch, int start, int end)
throws SAXException {
String s = new String(ch, start, end);
System.out.println("characters: " + s);
}
public void ignorableWhitespace(char[] ch, int start, int end)
throws SAXException {
}
public void skippedEntity(String name)
throws SAXException {
}
}

Servicios Telemticos Avanzados. Tema 3-2

45

Creacin de parser SAX (5)


class MyErrorHandler implements ErrorHandler {
public void warning (SAXParseException exception) throws SAXException {
System.out.println("**Parsing Warning**\n" +
"Line: " +
exception.getLineNumber() + "\n" +
"URI: " +
exception.getSystemId() + "\n" +
"Message: " +
exception.getMessage());
throw new SAXException("Warning encountered"); }
public void error (SAXParseException exception) throws SAXException {
// Errores de validacin
System.out.println("**Parsing Error**\n" +
"Line: " +
exception.getLineNumber() + "\n" +
"URI: " +
exception.getSystemId() + "\n" +
"Message: " +
exception.getMessage());
throw new SAXException("Error encountered"); }
Servicios Telemticos Avanzados. Tema 3-2

46

Creacin de parser SAX (6)


public void fatalError (SAXParseException exception)
throws SAXException {
// Errores de XML mal formado
System.out.println("**Parsing Fatal Error**\n" +
"Line: " +
exception.getLineNumber() + "\n" +
"URI: " +
exception.getSystemId() + "\n" +
"Message: " +
exception.getMessage());
throw new SAXException("Fatal Error encountered");
}
}

Servicios Telemticos Avanzados. Tema 3-2

47

Configuracin del parser


SAX 2.0 incorpora un mecanismo estndar y extensible para la configuracin de
caractersticas de un parser XML (dada la continua evolucin de XML)
La configuracin se realiza con el mtodo setFeature("[URI]", true) del interfaz
XMLReader.
URI es el identificador que representa la caracterstica que se est configurando.
SAX 2.0 define las siguientes:
Namespace Processing: http://xml.org/sax/features/namespaces. Activa o desactiva el
procesamiento de namespaces (startPrefixMapping, endPrefixMapping, y ciertos parmetros de
startElement y endElement).
Validacin: http://xml.org/sax/features/validation. Activa o desactiva la validacin (y por tanto las
llamadas al interfaz ErrorHandler)
Procesamiento de entidades externas generales:
o http://xml.org/sax/features/external-general-entities

Procesamiento de entidades externas parmetro


o http://xml.org/sax/features/external-parameter-entities

Los parsers pueden definir sus propios URIs de configuracin:


Validacin con esquemas: http://xml.apache.org/xerces2-j/features.html
Servicios Telemticos Avanzados. Tema 3-2

48

DOM: Document Object Model

DOM es una especificacin del W3C (a diferencia de SAX) independiente de la plataforma que
define una serie de interfaces basados en objetos que permiten crear programas y scripts que
accedan y actualicen al contenido, la estructura y la presentacin de los documentos.
Existen "bindings" de DOM a diversos lenguajes de programacin, entre ellos Java. En Java, los
programadores emplean libreras que implementan el paquete org.w3c.dom
El resultado del anlisis es un org.w3c.dom.Document, un objeto que representa un rbol de
anlisis del documento. Por tanto, hasta que no finaliza el anlisis no puede comenzar el
procesamiento:
public void performDemo(String uri) {
DOMParser parser = new DOMParser();
try {
parser.parse(uri);
org.w3c.dom.Document doc = parser.getDocument();
// Procesamiento
} catch (Exception e) { ... } }
Servicios Telemticos Avanzados. Tema 3-2

49

Uso de un rbol DOM


Los nodos de un rbol DOM pueden ser de diversos tipos, de acuerdo a la
jerarqua de interfaces del paquete org.w3c.dom

Determinar el tipo de un nodo:

Document
DocumentFragment
DocumentType
ProcessingInstruction
Node

Comment

CharacterData
Text
Element
Attr
EntityReference
Entity

CDATASection

Node node;
...
switch (node.getNodeType()) {
case Node.DOCUMENT_NODE:
// Objeto Document
Document doc =(Document)node;
break;
case Node.ELEMENT_NODE:
// Objeto Element
Element e = (Element)node;
break;
case Node.TEXT_NODE:
// Objeto Text
Text t = (Text)node;
break;
... }

Notation
Servicios Telemticos Avanzados. Tema 3-2

50

Impresin del rbol de anlisis (1)


public void performDemo(String uri) {
System.out.println("Parsing XML File: " + uri);
DomParser parser = new DOMParser();
try { parser.parse(uri);
Document doc = parser.getDocument();
printNode(doc, "");
} catch (IOException e) {
System.out.println("Error reading URI: " + e.getMessage());
} catch (SAXException e) {
System.out.println("Error in parsing: " + e.getMessage());
} }
public void printNode(Node node, String indent) {
switch(node.getNodeType()) {
case Node.DOCUMENT_NODE:
System.out.println("<? xml version=\"1.0\" ?>\n");
Document doc = (Document)node;
DocumentType docType = doc.getDoctype();
System.out.print("<!DOCTYPE " + docType.getName());
System.out.print(" SYSTEM \"" + docType.getSystemId());
System.out.println("\">");
printNode(doc.getDocumentElement(), "");
break;
Servicios Telemticos Avanzados. Tema 3-2

51

Impresin del rbol de anlisis (2)


case Node.ELEMENT_NODE:
String name = node.getNodeName();
System.out.print(ident + "<" + name);
NamedNodeMap attributes = node.getAttributes();
for (int i = 0; i < attributes.getLength(); i++) {
Node current = attributes.item(i);
System.out.print(" " + current.getNodeName() +
" = \"" + current.getNodeValue() + "\"");
}
System.out.println(">");
NodeList children = node.getChildNodes();
// Recursividad por cada hijo
if (children != null) {
for (int i = 0; i < children.getLength(); i++) {
printNode(children.item(i), ident + " "); } }
System.out.println(ident + "</" + name + ">");
break;
case Node.TEXT_NODE:
case Node.CDATA_SECTION_NODE:
System.out.print(node.getNodeValue());
break; } }
Servicios Telemticos Avanzados. Tema 3-2

52

Generacin de documentos XML


import org.apache.xerces.dom.DOMImplementationImpl;
import org.w3c.dom.*;
// construyo el documento
DOMImplementation domImpl = new DOMImplementationImpl();
Document doc = domImpl.createDocument(uri_nombres, "respuestaPerfil", null);
// Raiz
Element _root = doc.getDocumentElement();
_root.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance",
"xsi:schemaLocation", uri_nombres + " " + url_esquema);
Element _id = doc.createElementNS(uri_nombres, "id");
_id.appendChild(doc.createTextNode(cod_propio));
_root.appendChild(_id);
Element _nombre = doc.createElementNS(uri_nombres, "nombre");
_nombre.appendChild(doc.createTextNode(nombre));
_root.appendChild(_nombre);
Servicios Telemticos Avanzados. Tema 3-2

53