¿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.

Curso de Java

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

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 Tema 12 – XML - 1

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 Tema 12 – XML - 2

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

Tema 12 – XML - 3

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 NOMBRE PROFESOR HORARIO ASIGNATURA CREDITOS PERIODO

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

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 Tema 12 – XML - 4 Curso de Java

ASIGNATURA

NOMBRE

CREDITOS

PROFESOR

PERIODO

HORARIO

Tema 12 – XML - 5

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".

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.
Tema 12 – XML - 6 Curso de Java Tema 12 – XML - 7

Curso de Java

Aplicaciones XML
Un conjunto general de elementos XML junto con una estructura de documento se conoce como aplicación XML o vocabulario XML.

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)

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).

Una aplicación XML normalmente se define creando una

Curso de Java

Tema 12 – XML - 8

Curso de Java

Tema 12 – XML - 9

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>

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"?> <!-- 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> ... <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>

Declaración XML Comentario

Elemento documento (raíz)

Elementos anidados en el elemento documento

Curso de Java

Tema 12 – XML - 10

Curso de Java

Tema 12 – XML - 11

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 Tema 12 – XML - 12

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 Contenido (elementos anidados) Marca de cierre <ASIGNATURA> <NOMBRE>Lógica</NOMBRE> <CREDITOS>4,5</CREDITOS> <PROFESOR>Javier Leach</PROFESOR> <PERIODO>1º Cuatrimestre</PERIODO> <HORARIO>LMX 15-16</HORARIO> </ASIGNATURA> Tipo (etiqueta)
Curso de Java Tema 12 – XML - 13

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:

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.

Tipo (etiqueta)

Tipo (etiqueta)

<PROFESOR>Javier Leach</PROFESOR> Marca de inicio Contenido (datos de caracteres) Marca de cierre

Curso de Java

Tema 12 – XML - 14

Curso de Java

Tema 12 – XML - 15

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 Tema 12 – XML - 16

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

Tema 12 – XML - 17

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 +:

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:

Pulsando el + se vuelve a desplegar el contenido

Error en la etiqueta de cierre

Curso de Java

Tema 12 – XML - 18

Curso de Java

Tema 12 – XML - 19

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 }

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 Tema 12 – XML - 21

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

Tema 12 – XML - 20

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:

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

Tema 12 – XML - 22

Curso de Java

Tema 12 – XML - 23

Ejercicio: un primer documento XML
Tienda

Ejercicio: un primer documento XML

Equipo

Equipo

Nombre Precio: pts. euros

Nombre

Precio

Características

Opciones

Características: CPU velocidad, memoria disco Opciones

Pesetas

Euros

CPU

Velocidad

Memoria

Disco Comic Sans MS, 12 pt

Curso de Java

Tema 12 – XML - 24

Curso de Java

Tema 12 – XML - 25

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>

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. <!-- ... -->

Datos de caracteres:
<PROFESOR>Javier Leach</PROFESOR>

Datos de caracteres y elementos anidados:
<PROFESOR> Javier Leach <CATEGORIA>Titular</CATEGORIA> </PROFESOR>
Curso de Java Tema 12 – XML - 26

Curso de Java

Tema 12 – XML - 27

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>

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

Sin embargo, XML contempla una abreviatura para ahorrar escritura con los elementos vacíos; lo siguiente es equivalente a lo anterior:
<HR/>

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>

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 Tema 12 – XML - 28

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 Tema 12 – XML - 29

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>

¿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 Tema 12 – XML - 31

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 Tema 12 – XML - 30

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.

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 Tema 12 – XML - 32 Curso de Java Tema 12 – XML - 33

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.

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

Tema 12 – XML - 34

Curso de Java

Tema 12 – XML - 35

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.

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> <F>...</F> <F>...</F> </E> <E> <J>...</J> <K>...</K> <K>...</K> </E>

Curso de Java

Tema 12 – XML - 36

Curso de Java

Tema 12 – XML - 37

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 Tema 12 – XML - 38

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

Tema 12 – XML - 39

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>
Curso de Java

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 Tema 12 – XML - 41

(continúa)

Tema 12 – XML - 40

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 --> ] >

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.

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

Curso de Java

Tema 12 – XML - 42

Curso de Java

Tema 12 – XML - 43

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>

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>

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 Tema 12 – XML - 44

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

Tema 12 – XML - 45

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;

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:

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

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:

También hay unas pocas referencias predefinidas: &amp; & &quot; " &lt; < &gt; > &apos; '

<?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.
Tema 12 – XML - 46 Curso de Java Tema 12 – XML - 47

Curso de Java

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 Tema 12 – XML - 48

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 Tema 12 – XML - 49

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

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

Tema 12 – XML - 50

Curso de Java

Tema 12 – XML - 51

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>

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"/>

Elementos XSL; por ejemplo:
<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).

Los elementos XSL se distinguen porque todos empiezan por xsl:.

Curso de Java

Tema 12 – XML - 52

Curso de Java

Tema 12 – XML - 53

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>

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

Tema 12 – XML - 54

Curso de Java

Tema 12 – XML - 55

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/> ...

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>

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

Tema 12 – XML - 56

Curso de Java

Tema 12 – XML - 57

Introducción a XSL
Ahora el resultado es el deseado:

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

Tema 12 – XML - 58

Curso de Java

Tema 12 – XML - 59

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>

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']">

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.

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

Tema 12 – XML - 60

Curso de Java

Tema 12 – XML - 61

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"/>

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)

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

Tema 12 – XML - 62

Curso de Java

Tema 12 – XML - 63

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>

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

Tema 12 – XML - 64

Curso de Java

Tema 12 – XML - 65

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>

Un ejemplo completo de uso de XSL
El resultado es el siguiente:

Curso de Java

Tema 12 – XML - 66

Curso de Java

Tema 12 – XML - 67