Está en la página 1de 68

FUNDACIÓN GENERAL

Curso para IZAR

El lenguaje XML

El lenguaje Java — Tema 12 — Java y XML — XML


¿Qué es XML?

XML: eXtensible Markup Language (lenguaje de marcas extensible).


Es un subconjunto de SGML, mientras que HTML es una aplicación
SGML (pero tienen muchas características comunes).
¿En qué se diferencia XML de HTML?
HTML proporciona un conjunto predefinido de elementos (etiquetas)
que se pueden usar para describir páginas web en general; resulta
adecuado para documentos de un tipo muy concreto: páginas web.
Hay muchos tipos de documentos que no se pueden describir con
HTML, tales como una base de datos o un documento que describa
entidades organizadas en una estructura jerárquica.
HTML se ocupa principalmente de la descripción del aspecto de la
información (el contenido de una página web), mientras que XML
se centra en la estructura de la información.
XML es un estándar simple de intercambio electrónico de datos (EDI).

Curso de Java para IZAR Tema 12 – XML - 2


Los elementos de XML

A diferencia de HTML, XML delega en el usuario la elección de los


elementos (etiquetas) que quiere usar en el documento.
Veamos un ejemplo de documento XML:

<?xml version="1.0" encoding="UTF-7"?>

<CURSO> Codificación que admite


<ASIGNATURA> caracteres internacionales
<NOMBRE>Lógica</NOMBRE>
<CREDITOS>4,5</CREDITOS>
<PROFESOR>Javier Leach</PROFESOR>
<PERIODO>1º Cuatrimestre</PERIODO>
<HORARIO>LMX 15-16</HORARIO>
</ASIGNATURA>

(continúa)

Curso de Java para IZAR Tema 12 – XML - 3


Los elementos de XML

<ASIGNATURA>
<NOMBRE>Introducción a la programación</NOMBRE>
<CREDITOS>9</CREDITOS>
<PROFESOR>Luis Hernández</PROFESOR>
<PERIODO>Anual</PERIODO>
<HORARIO>LMX 16-17</HORARIO>
</ASIGNATURA>
<ASIGNATURA>
<NOMBRE>Laboratorio de programación</NOMBRE>
<CREDITOS>4,5</CREDITOS>
<PROFESOR>Luis Hernández</PROFESOR>
<PERIODO>2º Cuatrimestre</PERIODO>
<HORARIO>LMX 15-16</HORARIO>
</ASIGNATURA>
</CURSO>

Curso de Java para IZAR Tema 12 – XML - 4


Los elementos de XML

Como se puede ver, se ha usado XML para describir una base de datos
pequeña (como lenguaje de descripción de bases de datos
XML tiene la ventaja de ser texto simple).
XML no define los elementos (etiquetas) que se pueden usar en los
documentos, sino que define la forma que pueden tener las marcas
de los elementos, dejando al usuario que los elija.
En el documento anterior, hemos usado los siguientes elementos:
CURSO ASIGNATURA
NOMBRE CREDITOS
PROFESOR PERIODO
HORARIO
No son etiquetas predefinidas como las de HTML: son exactamente
las que hemos querido usar.
Además, todos los elementos llevan pares de marcas: tanto la de inicio
como la de cierre (algunos elementos HTML no se cierran).

Curso de Java para IZAR Tema 12 – XML - 5


Estructura jerárquica de los elementos XML

Como se puede ver también, algunos elementos XML se encuentran


dentro de otros: esto es típico de los documentos XML.
Los elementos de un documento XML suelen estar anidados,
de forma que se define una estructura jerárquica de elementos:

CURSO Elemento raíz o


elemento documento

ASIGNATURA

NOMBRE CREDITOS PROFESOR PERIODO HORARIO

Curso de Java para IZAR Tema 12 – XML - 6


Redacción de documentos XML

El hecho de que XML no incluya elementos predefinidos puede hacer


pensar que se trata de un estándar relativamente informal.
Sin embargo, XML tiene definida una sintaxis muy estricta;
por ejemplo, a diferencia de HTML, todo elemento de XML
debe estar delimitado por una marca de inicio y otra de cierre;
también, todo elemento anidado debe estar completamente
contenido dentro del elemento que lo engloba.
Aunque no son muchas las reglas sintácticas de XML,
se deben conocer y saber aplicar correctamente.
Sin embargo, veremos que la sintaxis de XML contempla
dos niveles de reglas sintácticas.
Dependiendo del nivel de aplicación estricta de las reglas
sintácticas se distinguen dos tipos de documentos:
documentos "bien formados" y documentos "válidos".

Curso de Java para IZAR Tema 12 – XML - 7


Visualización de documentos XML

Un navegador sabe qué hacer con un elemento H1 o LI de HTML,


cómo mostrar su contenido en la ventana (el estándar de HTML le
indica el aspecto que debe tener cada elemento).
Sin embargo, para el navegador no significa nada un elemento
CURSO o NOMBRE de XML, ya que son elementos cuyos nombres
(etiquetas) nos hemos inventado nosotros.
Básicamente se pueden utilizar tres técnicas distintas para indicar al
navegador cómo debe mostrar los elementos de un documento XML:
Vinculación de hojas de estilo: hojas de estilo en cascada
como las del HTML u hojas de estilo XSL (eXtensible Stylesheet
Language - Lenguaje de estilo extensible), específicas para XML.
Vinculación de datos: página HTML con el documento XML
vinculado referencias a los elementos XML en elementos HTML.
Guiones: mediante programación.

Curso de Java para IZAR Tema 12 – XML - 8


Aplicaciones XML

Un conjunto general de elementos XML junto con una estructura de


documento se conoce como aplicación XML o vocabulario XML.
Una aplicación XML normalmente se define creando una
Definición de tipo de documento (DTD), un componente
opcional de los documentos XML.
Una DTD es como un esquema de base de datos: define los
nombres de los elementos que se pueden usar en el documento, el
orden en el que pueden aparecer los elementos, los atributos que
admite cada elemento y otras características de los documentos.
Las aplicaciones XML que más estrictamente se ajustan a las
especificaciones del estándar incluyen en el documento XML
la DTD, de forma que ésta restrinja los elementos que se pueden
utilizar y la forma de la estructura del documento
(el ejemplo anterior no ajunta ninguna DTD).

Curso de Java para IZAR Tema 12 – XML - 9


Creación y visualización de un primer documento XML

Dado que los documentos XML se guardan en archivos de texto


simple, se puede utilizar el editor de texto favorito;
aquí seguiremos usando JCreator.
Abre el documento Clase.xml:
<?xml version="1.0" encoding="UTF-7"?>

<!-- File name: Clase.xml -->

<CURSO>
<ASIGNATURA>
<NOMBRE>Lógica</NOMBRE>
<CREDITOS>4,5</CREDITOS>
<PROFESOR>Javier Leach</PROFESOR>
<PERIODO>1º Cuatrimestre</PERIODO>
<HORARIO>LMX 15-16</HORARIO>
</ASIGNATURA>
(continúa)

Curso de Java para IZAR Tema 12 – XML - 10


Creación y visualización de un primer documento XML

<ASIGNATURA>
<NOMBRE>Introducción a la programación</NOMBRE>
<CREDITOS>9</CREDITOS>
<PROFESOR>Luis Hernández</PROFESOR>
<PERIODO>Anual</PERIODO>
<HORARIO>LMX 16-17</HORARIO>
</ASIGNATURA>
<ASIGNATURA>
<NOMBRE>Laboratorio de programación</NOMBRE>
<CREDITOS>4,5</CREDITOS>
<PROFESOR>Luis Hernández</PROFESOR>
<PERIODO>2º Cuatrimestre</PERIODO>
<HORARIO>LMX 15-16</HORARIO>
</ASIGNATURA>
</CURSO>

Curso de Java para IZAR Tema 12 – XML - 11


Creación y visualización de un primer documento XML

En los documentos XML, se pueden distinguir dos secciones


principales: el prólogo y el elemento documento (o documento raíz).

Prólogo <?xml version="1.0" encoding="UTF-7"?> Declaración


XML
<!-- File name: Clase.xml -->
Comentario
<CURSO>
<ASIGNATURA>
<NOMBRE>Lógica</NOMBRE>
<CREDITOS>4,5</CREDITOS>
<PROFESOR>Javier Leach</PROFESOR>
<PERIODO>1º Cuatrimestre</PERIODO> Elementos
Elemento <HORARIO>LMX 15-16</HORARIO> anidados
documento </ASIGNATURA> en el
...
(raíz) <ASIGNATURA> elemento
<NOMBRE>Laboratorio de programación</NOMBRE> documento
<CREDITOS>4,5</CREDITOS>
<PROFESOR>Luis Hernández</PROFESOR>
<PERIODO>2º Cuatrimestre</PERIODO>
<HORARIO>LMX 15-16</HORARIO>
</ASIGNATURA>
</CURSO>

Curso de Java para IZAR Tema 12 – XML - 12


Creación y visualización de un primer documento XML

El prólogo
El prólogo del documento anterior contiene información general
sobre el documento: versión de XML usada, definición de tipo de
documento, instrucciones de procesamiento.
En el ejemplo el prólogo consiste tan sólo en la declaración XML,
que informa de la versión de XML –1.0 en este caso– y de la
codificación usada, así como un comentario (que toma la misma
forma que en HTML).
Además, como se ve se pueden colocar líneas en blanco para
mejorar la legibilidad.
Los comentarios, por supuesto, son opcionales, pero se anima a que
se incluyan para aclarar aspectos que puedan resultar confusos.
Y aunque la especificación XML dice que se debe incluir la
declaración XML, en realidad también es opcional.

Curso de Java para IZAR Tema 12 – XML - 13


Creación y visualización de un primer documento XML

Los elementos
El elemento documento en XML es similar al documento BODY de
HTML, a excepción de que nosotros elegimos su nombre de etiqueta.
En este caso es CURSO y contiene elementos de tipo ASIGNATURA.
Igualmente, cada elemento ASIGNATURA contiene una serie
de elementos anidados:
Tipo (etiqueta)

Marca de inicio <ASIGNATURA>


<NOMBRE>Lógica</NOMBRE>
Contenido <CREDITOS>4,5</CREDITOS>
(elementos <PROFESOR>Javier Leach</PROFESOR>
anidados) <PERIODO>1º Cuatrimestre</PERIODO>
<HORARIO>LMX 15-16</HORARIO>
Marca de cierre </ASIGNATURA>

Tipo (etiqueta)

Curso de Java para IZAR Tema 12 – XML - 14


Creación y visualización de un primer documento XML

El contenido de cada elemento ASIGNATURA es una secuencia de


elementos NOMBRE, CREDITOS, PROFESOR, PERIODO Y HORARIO.
Cada uno de esos elementos contenidos en ASIGNATURA contiene
únicamente una secuencia de caracteres:

Tipo (etiqueta) Tipo (etiqueta)

<PROFESOR>Javier Leach</PROFESOR>

Marca Contenido Marca


de inicio (datos de de cierre
caracteres)

Curso de Java para IZAR Tema 12 – XML - 15


Creación y visualización de un primer documento XML

Algunas reglas básicas de XML


A continuación se muestran algunas reglas básicas para
la creación de documentos XML bien formados (aquellos que
respetan el conjunto mínimo de reglas necesarias para que sean
entendidos por los navegadores u otros programas).
El documento debe tener exactamente un elemento de nivel
superior (el elemento raíz o elemento documento).
Los elementos deben estar adecuadamente anidados.
Cada elemento debe tener tanto una marca de inicio como
una marca de cierre.
El nombre de tipo (etiqueta) de elemento de la marca de inicio
debe ser igual que el nombre de tipo (etiqueta) de elemento
de la correspondiente marca de cierre.
En las etiquetas se distingue entre mayúsculas y minúsculas.

Curso de Java para IZAR Tema 12 – XML - 16


Creación y visualización de un primer documento XML

Visualización del documento XML


Se puede abrir directamente un documento XML en Internet
Explorer, de la misma forma que se abre un documento HTML.
Si el documento XML no tiene vinculada una hoja de estilo,
IE simplemente muestra el texto del documento completo,
incluyendo el prólogo y las marcas.
IE aplica un código de colores a los distintos componentes del
documento para ayudar a reconocerlos (marcas en azul, etiquetas
en marrón, comentarios en gris y datos de caracteres en negro).
Además, IE muestra los elementos del documento en forma de árbol
colapsable/expandible para indicar la estructura del documento.
Si el documento tiene vinculada una hoja de estilo, IE mostrará tan
sólo los datos de caracteres de los elementos del documento, con las
características de formato especificadas por la hoja de estilo.

Curso de Java para IZAR Tema 12 – XML - 17


Creación y visualización de un primer documento XML

Visualización del documento XML sin hoja de estilo


Basta pulsar dos veces sobre el archivo XML Clase.xml:

Curso de Java para IZAR Tema 12 – XML - 18


Creación y visualización de un primer documento XML

Pulsando sobre un signo menos a la izquierda de un elemento


intermedio del árbol se repliega su contenido y el signo cambia a +:

Pulsando
el + se
vuelve a
desplegar
el contenido

Curso de Java para IZAR Tema 12 – XML - 19


Creación y visualización de un primer documento XML

Internet Explorer analiza el documento XML y si encuentra errores


de construcción del documento no lo muestra, mostrando en cambio
un mensaje indicando el error detectado:

Error en
la etiqueta
de cierre

Curso de Java para IZAR Tema 12 – XML - 20


Creación y visualización de un primer documento XML

Visualización del documento XML con una hoja de estilo en cascada


Se puede vincular al documento XML una hoja de estilo.
En la hoja de estilo se utilizarán los nombres de tipos de los
elementos como selectores.
Por ejemplo, tenemos una hoja de estilo en el archivo Clase.css:
ASIGNATURA { font-family : Times New Roman;
font-size : 12pt; display : block; margin-bottom : 10pt
}
NOMBRE { font-weight : bold }
CREDITOS { font-style : italic }
PERIODO { display : block; font-style : italic }
display: block crea una nueva caja para el elemento
(aquí, entre otras cosas, se pasa al principio de una nueva línea).

Curso de Java para IZAR Tema 12 – XML - 21


Creación y visualización de un primer documento XML

En principio, los elementos hijos heredan las características


de estilo de sus padres.
En el documento XML se vincula la hoja de estilo de forma similar a
como se hace en los documentos HTML:

<?xml version="1.0" encoding="UTF-7"?>

<!-- File name: Clase.xml -->

<?xml-stylesheet type="text/css" href="Clase.css"?>

<CURSO>
<ASIGNATURA>
<NOMBRE>Lógica</NOMBRE>
<CREDITOS>4,5</CREDITOS>
<PROFESOR>Javier Leach</PROFESOR>
...

Curso de Java para IZAR Tema 12 – XML - 22


Creación y visualización de un primer documento XML

Ahora, se muestra la información de acuerdo con las características


de estilo asociadas en la hoja de estilo a los elementos:

Curso de Java para IZAR Tema 12 – XML - 23


Ejercicio: un primer documento XML

Crea un documento XML denominado Equipos.xml que contenga


la información sobre dos equipos de una tienda de informática;
sobre cada producto se deben proporcionar los siguientes datos:
nombre, precio, características y opciones.
El precio se debe proporcionar tanto en pesetas como en euros.
Las características que se han de indicar son: CPU, velocidad,
memoria y espacio de disco.

Una vez creado el documento XML visualízalo en IE sin hoja de estilo.


Luego, crea una hoja de estilo Equipos.css y aplícala al documento.

En las siguientes páginas puedes ver la estructura, el contenido y el


aspecto final deseados.

Curso de Java para IZAR Tema 12 – XML - 24


Ejercicio: un primer documento XML

Tienda

Equipo Equipo

Nombre Precio Características Opciones

Pesetas Euros CPU Velocidad Memoria Disco

Curso de Java para IZAR Tema 12 – XML - 25


Ejercicio: un primer documento XML

Nombre

Precio: pts. euros

Características:
CPU velocidad,
memoria disco
Opciones

Comic Sans MS,


12 pt

Curso de Java para IZAR Tema 12 – XML - 26


Contenido de los elementos XML

Los elementos XML pueden tener distintos tipos de contenidos:


Otros elementos anidados:
<ASIGNATURA>
<NOMBRE>Lógica</NOMBRE>
<CREDITOS>4,5</CREDITOS>
<PROFESOR>Javier Leach</PROFESOR>
<PERIODO>1º Cuatrimestre</PERIODO>
<HORARIO>LMX 15-16</HORARIO>
</ASIGNATURA>
Datos de caracteres:
<PROFESOR>Javier Leach</PROFESOR>
Datos de caracteres y elementos anidados:
<PROFESOR>
Javier Leach
<CATEGORIA>Titular</CATEGORIA>
</PROFESOR>

Curso de Java para IZAR Tema 12 – XML - 27


Contenido de los elementos XML

 Referencias a entidades o referencias a caracteres:


<PAGINATITULO> Referencia a una entidad
Autor: &autor;
Nombre: "Caracteres especiales como &#60;"
</PAGINATITULO>
Referencia al carácter '<'
 Secciones CDATA (bloques de texto que no son interpretados
como código XML (permite, por ejemplo, incluir código HTML):
<![CDATA[ ... ]]> Cualquier texto excepto ]]>
 Instrucciones de procesamiento:
<? ... ?>
 Comentarios: igual que en HTML.
<!-- ... -->

Curso de Java para IZAR Tema 12 – XML - 28


Elementos XML sin contenido (vacíos)

Igual que en HTML, en XML se pueden declarar elementos vacíos.


Pero a diferencia de HTML, en XML los elementos vacíos también
deben llevar las dos marcas (de inicio y de cierre).
Por ejemplo, en HTML el elemento vacío HR tan sólo lleva marca de
inicio (<HR>), no existiendo siquiera marca de cierre.
En XML un elemento así se debe crear con las dos marcas:
<HR></HR>
Sin embargo, XML contempla una abreviatura para ahorrar escritura
con los elementos vacíos; lo siguiente es equivalente a lo anterior:
<HR/>
Un elemento vacío puede servir para que una aplicación XML realice
una determinada acción (de procesamiento o de visualización).
Además, un elemento vacío puede tomar sentido con sus atributos.

Curso de Java para IZAR Tema 12 – XML - 29


Atributos de los elementos XML

Dentro de la marca de inicio de un elemento (o de la marca única de


un elemento vacío) se pueden incluir especificaciones de atributos
(pares propiedad-valor con la misma sintaxis que en HTML).
<PROFESOR CATEGORIA="Titular">Luis Hernández</PROFESOR>

Atributo

Los atributos proporcionan información adicional sobre el elemento


XML, información distinta de su contenido principal:
<PROFESOR CATEGORIA="Titular" EMAIL="luis@jet.es"
TELEFONO="912345678">
Luis Hernández
</PROFESOR>
No resulta fácil saber qué debe ser parte del contenido y qué
información se debe incluir en forma de atributos.

Curso de Java para IZAR Tema 12 – XML - 30


Atributos frente a contenido

La información sobre un elemento se puede incluir en forma de


atributos o en forma de subelementos:
<PROFESOR>
Luis Hernández
<CATEGORIA>Titular</CATEGORIA>
<EMAIL>luis@jet.es</EMAIL>
<TELEFONO>912345678</TELEFONO>
</PROFESOR>
Por lo que respecta a la información en sí, ésta se incluye tanto de
una forma como de otra.
Las diferencias se encuentran en el procesamiento de la información;
por ejemplo, con una hoja de estilo en cascada no se muestra la
información que se encuentra en forma de atributos.
Se pueden plantear las diferencias conceptuales entre contenido y
atributos de la forma que se indica a continuación.

Curso de Java para IZAR Tema 12 – XML - 31


¿Es un atributo o es parte del contenido?

Hay que intentar distinguir entre lo que es contenido y lo que es


metainformación; la metainformación es información que describe al
contenedor y que se incluirá en forma de atributos, mientras que el
contenido es la información que se encuentra dentro del contendor.
Para saber si una información es un metadato o es contenido se
puede plantear la siguiente pregunta: Si elimino el dato, ¿cambiará
mi comprensión o posibilidad de comprensión del contenido?
Si la respuesta en no, entonces es un metadato;
si la respuesta es sí, entonces es un contenido.
Por ejemplo, lo fundamental de un profesor es su nombre, que
permite identificarlo, mientras que su categoría, su e-mail o su
teléfono es claramente información adicional.
Sin embargo, la distinción no resulta fácil y depende mucho del tipo
de aplicación XML de que se trate (una relación de asignaturas o
una relación de profesores).

Curso de Java para IZAR Tema 12 – XML - 32


Ejercicio: uso de atributos

Modifica el documento XML denominado Equipos.xml para que cada


elemento de producto de valor a dos atributos: tipo (de sobremesa o
de mano) y color; además, el elemento de características dará valor
a otros dos atributos: CPU y velocidad.

Curso de Java para IZAR Tema 12 – XML - 33


Documentos válidos: la DTD

Un documento XML sin DTD tan sólo puede ser considerado "bien
formado"; para que sea considerado válido debe llevar la DTD.
La Definición de tipo de documento (DTD) es un bloque de marcado
XML que se debe incluir en el prólogo, a continuación de la
declaración XML.
La DTD define la estructura del documento: si se abre un documento
XML sin DTD, simplemente se comprueba si el documento está bien
formado, pero si lleva DTD también se comprobará su validez (que
no se usen atributos no especificados o que el orden sea correcto).
Forma general de una DTD:
<!DOCTYPE Nombre DTD>
donde Nombre es el elemento raíz (documento) y DTD es la
definición de tipo de documento, que está delimitada por [ ] y
contiene la descripción de los elementos, atributos, etcétera.

Curso de Java para IZAR Tema 12 – XML - 34


La Definición de tipo de documento (DTD)

La definición de tipo de documento está delimitada por [ ] y


contiene declaraciones de marcado con diversos propósitos:
Declaraciones de tipos de elementos
Declaraciones de listas de atributos
Declaraciones de entidades
Declaraciones de notaciones
Instrucciones de procesamiento
Comentarios
Referencias a entidades de parámetros
La DTD se puede encontrar en un archivo aparte.

Curso de Java para IZAR Tema 12 – XML - 35


Declaración de un tipo de elemento

Una declaración de tipo de elemento tiene esta forma:


<!ELEMENT Nombre Especificación>
donde Nombre es el nombre del tipo de elemento (etiqueta) y
Especificación define su contenido, lo que el elemento puede
contener:
EMPTY: elemento vacío
<!ELEMENT IMAGEN EMPTY>
Serán <IMAGEN></IMAGEN> (o <IMAGEN/>)
ANY: cualquier contenido (sin restricciones)
<!ELEMENT VARIOS ANY>
Otro contenido más concreto:
se especifica mediante un modelo de contenido.

Curso de Java para IZAR Tema 12 – XML - 36


Modelos de contenido

Se forman mediante secuencias y/o selecciones de otros elementos


y/o #PCDATA (datos de caracteres interpretados; los trataremos
como elementos a efectos de sintaxis); también se contemplan
repeticiones y ausencias.
 Secuencia: elementos separados por comas y entre paréntesis
<!ELEMENT FECHA (DIA, MES, ANIO)>
 Selección: elementos separados por BARRAS y entre paréntesis
<!ELEMENT CREACION (#PCDATA | FECHA)>
 Cardinales: se puede indicar si una parte del contenido ha de
estar necesariamente, puede no estar o se puede repetir.
? detrás del contenido: una vez o ninguna.
+ detrás del contenido: una o más veces.
* detrás del contenido: una o más veces o ninguna.

Curso de Java para IZAR Tema 12 – XML - 37


Modelos de contenido

Los distintos modelos se pueden combinar y anidar, llegando a


especificaciones de contenido muy precisas:
<!ELEMENT A (B*, C, D+)>
<!ELEMENT E (F* | (J, K+))?>
Supuesto que los elementos E, F, J y K se declaran como #PCDATA,
para la segunda especificación, las siguientes estructuras serían
correctas:
<E></E>
<E> <E>
<F>...</F> <J>...</J>
<F>...</F> <K>...</K>
</E> <K>...</K>
</E>

Curso de Java para IZAR Tema 12 – XML - 38


Definición de atributos

Los atributos también deben estar definidos en la DTD para cada


elemento que los contemple; se definen mediante una declaración
de lista de atributos (nombres, tipos y posible ausencia):
<!ATTLIST Nombre Definiciones>
El nombre identifica al elemento para el que se define la lista de
atributos y se sigue de una lista de definiciones de atributos:
Atributo Tipo Predeterminado
Las definiciones se separan por espacios.
Algunos tipos de atributos:
CDATA: cadenas de caracteres delimitadas por comillas.
ID: identificador único (distinto de los demás elementos).
ENTITY: una entidad (por ejemplo, un archivo externo).
Enumerado: identificadores entre paréntesis y separados por |.

Curso de Java para IZAR Tema 12 – XML - 39


Definición de atributos

Por ejemplo:
<!ATTLIST Nombre TIPO (uno|dos|tres)>

El valor predeterminado: un valor concreto o una palabra clave.


Ejemplo de valor concreto (ha de ir entrecomillado):
<!ATTLIST Nombre TIPO (uno|dos|tres) "uno">
Palabras clave:
#REQUIRED: debe estar necesariamente asignado.
#IMPLIED: puede tomar valor; si no toma valor queda
indeterminado.

Curso de Java para IZAR Tema 12 – XML - 40


Una DTD para el documento de ejemplo

Recordemos cómo es actualmente el ejemplo de documento XML


(ampliado con uso de atributos):
<?xml version="1.0" encoding="UTF-7"?>

<!-- File name: Clase.xml -->

<?xml-stylesheet type="text/css" href="Clase.css"?>

<CURSO>
<ASIGNATURA>
<NOMBRE>Lógica</NOMBRE>
<CREDITOS>4,5</CREDITOS>
<PROFESOR CATEGORIA="Catedratico"
EMAIL="jla@sip.ucm.es" TELEFONO="912345679">
Javier Leach</PROFESOR>
<PERIODO>1º Cuatrimestre</PERIODO>
<HORARIO>LMX 15-16</HORARIO>
</ASIGNATURA>
(continúa)

Curso de Java para IZAR Tema 12 – XML - 41


Una DTD para el documento de ejemplo

<ASIGNATURA>
<NOMBRE>Introducción a la programación</NOMBRE>
<CREDITOS>9</CREDITOS>
<PROFESOR CATEGORIA="Titular"
EMAIL="lhy@sip.ucm.es" TELEFONO="912345678">
Luis Hernández</PROFESOR>
<PERIODO>Anual</PERIODO>
<HORARIO>LMX 16-17</HORARIO>
</ASIGNATURA>
<ASIGNATURA>
<NOMBRE>Laboratorio de programación</NOMBRE>
<CREDITOS>4,5</CREDITOS>
<PROFESOR CATEGORIA="Titular">
Luis Hernández</PROFESOR>
<PERIODO>2º Cuatrimestre</PERIODO>
<HORARIO>LMX 15-16</HORARIO>
</ASIGNATURA>
</CURSO>

Curso de Java para IZAR Tema 12 – XML - 42


Una DTD para el documento de ejemplo

La siguiente podría ser una DTD para este documento:


<!DOCTYPE CURSO
[
<!ELEMENT CURSO (ASIGNATURA)+> <!-- Una o más -->
<!ELEMENT ASIGNATURA (NOMBRE, CREDITOS, PROFESOR,
PERIODO, HORARIO)> <!-- Todos y en ese orden -->
<!ELEMENT NOMBRE (#PCDATA)>
<!ELEMENT CREDITOS (#PCDATA)>
<!ELEMENT PROFESOR (#PCDATA)>
<!ELEMENT PERIODO (#PCDATA)>
<!ELEMENT HORARIO (#PCDATA)>
<!ATTLIST PROFESOR CATEGORIA (Catedratico|Titular)
#REQUIRED EMAIL CDATA #IMPLIED TELEFONO CDATA
"912345670"> <!-- teléfono de la Secretaría -->
]
>

Ejercicio: Incluye en el documento Equipos.xml una DTD adecuada.

Curso de Java para IZAR Tema 12 – XML - 43


Entidades

Una entidad puede ser tan pequeña como un carácter individual


o tan grande como un documento XML completo.
Simplificando, una entidad consiste en un nombre y un contenido;
el contenido son los datos reales almacenados y el nombre se usa
para referirse a esos datos.
Se distinguen dos clases generales de entidades: internas y
externas.
Una entidad interna es aquella que se define sin necesidad de un
archivo externo que englobe su contenido, de forma que su
contenido forma parte de su declaración (cadena entrecomillada).
Todas las entidades internas son interpretadas de igual forma que
cualquier otro código XML.
Una entidad externa tiene su contenido en algún otro lugar del
sistema y puede ser interpretada o no.

Curso de Java para IZAR Tema 12 – XML - 44


Entidades

Las entidades se definen en la DTD con una sintaxis similar a la de


declaración de elemento o atributo; se insertan en el documento en
el lugar en el que se requieran.
Entidades internas:
<!ENTITY Nombre Valor>
Una vez definida la entidad en la DTD se puede usar en el
documento precediendo su nombre con & y posponiéndolo con ;
Se sustituye por el valor.
<!DOCTYPE CURSO
[
...
<!ENTITY LH '<PROFESOR CATEGORIA="Titular">Luis
Hernández</PROFESOR>'>
]
>

Curso de Java para IZAR Tema 12 – XML - 45


Entidades

Entidades externas interpretadas:


<!ENTITY Nombre SYSTEM URL>
Para referenciar archivos externos que contienen código XML.

Entidades externas no interpretadas:


<!ENTITY Nombre SYSTEM URL NDATA Tipo>

Para referenciar archivos externos que contienen otra cosa distinta


de código XML (imágenes, por ejemplo):
<!ENTITY FOTO SYSTEM "UnaFoto.gif" NDATA GIF>

Curso de Java para IZAR Tema 12 – XML - 46


Referencias a caracteres especiales

Las referencias a caracteres toman en XML una forma similar a las


de HTML: comienzan por &# y acaban en ;
Sin embargo, en medio de esos dos símbolos se coloca el código
ASCII del carácter, o en decimal o en hexadecimal (con x delante):
&#91; &#xF0;

Algunas referencias útiles:


&#225; á &#233; é &#237; í &#243; ó
&#250; ú &#241; ñ &#209; Ñ

También hay unas pocas referencias predefinidas:


&amp; & &lt; < &gt; > &apos; '
&quot; "

Curso de Java para IZAR Tema 12 – XML - 47


Introducción a XSL

XSL es un lenguaje de estilo mucho más sofisticado que CSS,


habiendo sido diseñado específicamente para la visualización de
documentos XML; es mucho más potente y ofrece un completo
control sobre la salida producida a partir de los datos del documento
XML; pero por eso, también es más difícil de aprender.
Dos son los pasos principales del uso de una hoja de estilo XSL
para la visualización de un documento XML:
1. Crear el archivo de hoja de estilo XSL.
2. Vincular la hoja de estilo XSL al documento XML.
Para esto último basta con incluir una instrucción de procesamiento
en el prólogo del documento XML similar a la de las hojas CSS:
<?xml-stylesheet type="text/xsl" href="URL"?>
XSL es una aplicación XML, por lo que debe adaptarse a las reglas
sintácticas de XML para ser un documento XML bien formado.

Curso de Java para IZAR Tema 12 – XML - 48


Introducción a XSL

Una hoja de estilo XSL, más que incluir reglas de estilo, lo que incluye
es una o más plantillas, cada una de las cuales contiene instrucciones
para la visualización de una determinada rama de elementos del
documento XML.
Veamos un ejemplo de plantilla XSL; la aplicaremos al siguiente
documento XML (Asignatura.xml):
<?xml version="1.0" encoding="UTF-7"?>
<!-- File name: Asignatura.xml -->
<?xml-stylesheet type="text/xsl" href="Asignatura.xsl"?>

<ASIGNATURA>
<NOMBRE>Introducción a la programación</NOMBRE>
<CREDITOS>9</CREDITOS>
<PROFESOR>Luis Hernández</PROFESOR>
<PERIODO>Anual</PERIODO>
<HORARIO>LMX 16-17</HORARIO>
</ASIGNATURA>

Curso de Java para IZAR Tema 12 – XML - 49


Introducción a XSL

Una hoja de estilo XSL con una plantilla para visualizar todo el
documento sería como la siguiente:
<?xml version="1.0" encoding="UTF-7"?>
<!-- File name: Asignatura.xsl -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<H2>Descripción de asignatura</H2>
<SPAN STYLE="font-style:italic">Profesor: </SPAN>
<xsl:value-of select="ASIGNATURA/PROFESOR"/><BR/>
<SPAN STYLE="font-style:italic">Asignatura: </SPAN>
<xsl:value-of select="ASIGNATURA/NOMBRE"/><BR/>
<SPAN STYLE="font-style:italic">Créditos: </SPAN>
<xsl:value-of select="ASIGNATURA/CREDITOS"/><BR/>
<SPAN STYLE="font-style:italic">Horario: </SPAN>
<xsl:value-of select="ASIGNATURA/HORARIO"/><BR/>

(continúa)

Curso de Java para IZAR Tema 12 – XML - 50


Introducción a XSL

<SPAN STYLE="font-style:italic">Periodo: </SPAN>


<xsl:value-of select="ASIGNATURA/PERIODO"/>
</xsl:template>
</xsl:stylesheet> Orden distinto del documento XML

Curso de Java para IZAR Tema 12 – XML - 51


Introducción a XSL

Examinemos las características de la hoja de estilo XSL:


Aparte del prólogo, que ya nos resulta familiar dado que una hoja
XSL es un documento XML, la hoja de estilo XSL debe tener como
elemento documento (raíz) el siguiente:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<!-- uno o más elementos plantilla -->
</xsl:stylesheet>
El elemento documento sirve para contener a los otros elementos
(las plantillas) y para identificar el documento como hoja de estilo.
El documento anterior sólo tiene un elemento plantilla:
<xsl:template match="/">
<!-- elementos hijos -->
</xsl:template>

Curso de Java para IZAR Tema 12 – XML - 52


Introducción a XSL

El atributo match indica la rama específica del árbol de elementos


del documento XML para la que se aplica la plantilla.
/ indica el documento entero; toda hoja de estilo XSL debe tener una
plantilla que se corresponda con el documento XML entero;
/ no representa al elemento raíz, sino al documento entero, dentro
del cual se encuentra el elemento raíz (ASIGNATURA en este caso).
Una plantilla contiene dos tipos de elementos:
Elementos XML que representan marcas HTML; por ejemplo:
<H2>Descripción de asignatura</H2>
<SPAN STYLE="font-style:italic">Profesor: </SPAN>
Elementos XSL; por ejemplo:
<xsl:value-of select="ASIGNATURA/PROFESOR"/>
Los elementos XSL se distinguen porque todos empiezan por xsl:.

Curso de Java para IZAR Tema 12 – XML - 53


Introducción a XSL

En cualquier caso, los elementos deben ser elementos XML correctos.


Así, los elementos HTML vacíos no se pueden incluir como se hace
en HTML (por ejemplo, <BR>), sino que deben tener marca de inicio
y marca de cierre; eso sí, se recurre a la abreviatura de XML para
elementos vacíos:
<BR/>
Igual para los elementos XSL:
<xsl:value-of select="ASIGNATURA/PROFESOR"/>
El elemento XSL value-of añade el contenido textual del elemento
XML especificado (junto con el de sus hijos, si los tiene) a la salida
HTML que el navegador visualiza.
Supongamos que el documento XML fuera un poco distinto
(como se muestra en la siguiente página).

Curso de Java para IZAR Tema 12 – XML - 54


Introducción a XSL

Supongamos que el documento XML fuera un poco distinto:

<?xml version="1.0" encoding="UTF-7"?>


<!-- File name: Asignatura.xml -->
<?xml-stylesheet type="text/xsl" href="Asignatura.xsl"?>

<ASIGNATURA>
<NOMBRE>Introducción a la programación</NOMBRE>
<CREDITOS>9</CREDITOS>
<PROFESOR>
<PILA>Luis</PILA>
<APELLIDOS>Hernández Yáñez</APELLIDOS>
</PROFESOR>
<PERIODO>Anual</PERIODO>
<HORARIO>LMX 16-17</HORARIO>
</ASIGNATURA>

Curso de Java para IZAR Tema 12 – XML - 55


Introducción a XSL

La misma hoja de estilo serviría para mostrar la información.


Se puede ver cómo para PROFESOR se muestra en secuencia la
información de sus elementos hijos (PILA y APELLIDOS).

Curso de Java para IZAR Tema 12 – XML - 56


Introducción a XSL

Visualización de varias asignaturas


Para aplicar la hoja de estilo anterior al documento Curso.xml,
el ejemplo de las secciones anteriores, es necesario modificarla, ya
que existe otro elemento de mayor nivel: CURSO:
...
<H2>Descripción de curso</H2>
<SPAN STYLE="font-style:italic">Profesor: </SPAN>
<xsl:value-of select="CURSO/ASIGNATURA/PROFESOR"/>
<BR/>
...
Al aplicar la hoja de estilo (Curso.xsl), se verá que sólo se
visualiza la información de una asignatura, aunque en el documento
XML haya tres. Esto se debe a que no se ha indicado en la hoja de
estilo que se debe repetir el proceso para las distintas asignaturas.

Curso de Java para IZAR Tema 12 – XML - 57


Introducción a XSL

Modifiquemos la plantilla XSL:


<xsl:template match="/">
<H2>Descripción de curso</H2>
<xsl:for-each select="CURSO/ASIGNATURA">
<SPAN STYLE="font-style:italic">Profesor: </SPAN>
<xsl:value-of select="PROFESOR"/><BR/>
<SPAN STYLE="font-style:italic">Asignatura: </SPAN>
<xsl:value-of select="NOMBRE"/><BR/>
<SPAN STYLE="font-style:italic">Créditos: </SPAN>
<xsl:value-of select="CREDITOS"/><BR/>
<SPAN STYLE="font-style:italic">Horario: </SPAN>
<xsl:value-of select="HORARIO"/><BR/>
<SPAN STYLE="font-style:italic">Periodo: </SPAN>
<xsl:value-of select="PERIODO"/><P/>
</xsl:for-each>
</xsl:template>

Curso de Java para IZAR Tema 12 – XML - 58


Introducción a XSL

Ahora el resultado
es el deseado:

Curso de Java para IZAR Tema 12 – XML - 59


Introducción a XSL

Uso de múltiples plantillas


<?xml version="1.0" encoding="UTF-7"?>

<!-- File name: Clase2.xsl -->

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<H2>Descripción de curso</H2>
<xsl:apply-templates select="CURSO/ASIGNATURA"/>
</xsl:template>

<xsl:template match="ASIGNATURA">
<SPAN STYLE="font-style:italic">Profesor: </SPAN>
<xsl:value-of select="PROFESOR"/><BR/>
<SPAN STYLE="font-style:italic">Asignatura: </SPAN>
<xsl:value-of select="NOMBRE"/><BR/>

(continúa)

Curso de Java para IZAR Tema 12 – XML - 60


Introducción a XSL

<SPAN STYLE="font-style:italic">Créditos: </SPAN>


<xsl:value-of select="CREDITOS"/><BR/>
<SPAN STYLE="font-style:italic">Horario: </SPAN>
<xsl:value-of select="HORARIO"/><BR/>
<SPAN STYLE="font-style:italic">Periodo: </SPAN>
<xsl:value-of select="PERIODO"/><P/>
</xsl:template>
</xsl:stylesheet>
El resultado es el mismo que antes, pero ahora no hay que indicar
explícitamente la repetición para cada elemento ASIGNATURA, ya
que xsl:apply-templates indica que se aplique la plantilla de
ASIGNATURA para todos los elementos de ese tipo que haya.

Curso de Java para IZAR Tema 12 – XML - 61


Introducción a XSL

Manipulación de datos
Se pueden filtrar u ordenar los datos del documento XML antes de
producir la visualización.
Para filtrar datos, se puede colocar la condición de filtrado detrás del
patrón de plantilla (valor de match) entre corchetes..
Por ejemplo, si se quiere mostrar sólo aquellas asignaturas que
tengan un determinado valor en un elemento hijo, se puede escribir
algo como lo siguiente:
<xsl:template match="ASIGNATURA[CREDITOS='4,5']">
Sólo se verán las asignaturas de 4,5 créditos.
Para ordenar los datos se puede hacer uso del atributo order-by:
<xsl:apply-templates select="CURSO/ASIGNATURA"
order-by="NOMBRE"/>

Curso de Java para IZAR Tema 12 – XML - 62


Introducción a XSL

Acceso a los atributos


Se puede acceder a los atributos de un elemento simplemente
colocando una @ delante del nombre del atributo.
Por ejemplo:
<xsl:for-each select="CURSO/ASIGNATURA[@Optativa='Si']">
<xsl:value-of select="PROFESOR/@EMAIL"/>

Terminamos este tema con un ejemplo completo que hace uso de


atributos y genera una tabla HTML (el ejemplo se ha obtenido del
libro XML Step by Step, de Microsoft Press).

Curso de Java para IZAR Tema 12 – XML - 63


Un ejemplo completo de uso de XSL

<?xml version="1.0" encoding="UTF-7"?>


<!-- File Name: XslDemo06.xml -->
<?xml-stylesheet type="text/xsl" href="XslDemo06.xsl"?>

<INVENTORY>
<BOOK InStock="yes">
<TITLE>The Adventures of Huckleberry Finn</TITLE>
<AUTHOR Born="1835">Mark Twain</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>298</PAGES>
<PRICE>$5.49</PRICE>
</BOOK>
<BOOK InStock="no">
<TITLE>Leaves of Grass</TITLE>
<AUTHOR Born="1819">Walt Whitman</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>462</PAGES>

(continúa)

Curso de Java para IZAR Tema 12 – XML - 64


Un ejemplo completo de uso de XSL

<PRICE>$7.75</PRICE>
</BOOK>
<BOOK InStock="yes">
<TITLE>The Marble Faun</TITLE>
<AUTHOR Born="1804">Nathaniel Hawthorne</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>473</PAGES>
<PRICE>$10.95</PRICE>
</BOOK>
<BOOK InStock="yes">
<TITLE>Moby-Dick</TITLE>
<AUTHOR Born="1819">Herman Melville</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>724</PAGES>
<PRICE>$9.95</PRICE>
</BOOK>
</INVENTORY>

Curso de Java para IZAR Tema 12 – XML - 65


Un ejemplo completo de uso de XSL

<?xml version="1.0" encoding="UTF-7"?>


<!-- File Name: XslDemo06.xsl -->

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<H2>Books In Stock</H2>
<TABLE BORDER="1" CELLPADDING="5">
<THEAD>
<TH>Title</TH>
<TH>Author</TH>
<TH>Binding Type</TH>
<TH>Number of Pages</TH>
<TH>Price</TH>
</THEAD>
<xsl:for-each
select="INVENTORY/BOOK[@InStock='yes']">
<TR ALIGN="CENTER">

(continúa)

Curso de Java para IZAR Tema 12 – XML - 66


Un ejemplo completo de uso de XSL

<TD><xsl:value-of select="TITLE"/></TD>
<TD>
<xsl:value-of select="AUTHOR"/> <BR/>
(born <xsl:value-of
select="AUTHOR/@Born"/>)
</TD>
<TD><xsl:value-of select="BINDING"/></TD>
<TD><xsl:value-of select="PAGES"/></TD>
<TD><xsl:value-of select="PRICE"/></TD>
</TR>
</xsl:for-each>
</TABLE>
</xsl:template>
</xsl:stylesheet>

Curso de Java para IZAR Tema 12 – XML - 67


Un ejemplo completo de uso de XSL

El resultado
es el siguiente:

Curso de Java para IZAR Tema 12 – XML - 68

También podría gustarte