Tema12

17
El lenguaje XML El lenguaje Java — Tema 12 — Java y XML — XML Curso de Java Curso de Java Tema 12 – XML - 1 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). ¿Qué es XML? Curso de Java Tema 12 – XML - 2 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> <ASIGNATURA> <NOMBRE>Lógica</NOMBRE> <CREDITOS>4,5</CREDITOS> <PROFESOR>Javier Leach</PROFESOR> <PERIODO>1º Cuatrimestre</PERIODO> <HORARIO>LMX 15-16</HORARIO> </ASIGNATURA> Los elementos de XML (continúa) Codificación que admite caracteres internacionales Curso de Java Tema 12 – XML - 3 <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> Los elementos de XML

Transcript of Tema12

Page 1: Tema12

El lenguaje XML

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

Curso de Java

Curso de Java Tema 12 – XML - 1

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

¿Qué es XML?

Curso de Java Tema 12 – XML - 2

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>

<ASIGNATURA>

<NOMBRE>Lógica</NOMBRE>

<CREDITOS>4,5</CREDITOS>

<PROFESOR>Javier Leach</PROFESOR>

<PERIODO>1º Cuatrimestre</PERIODO>

<HORARIO>LMX 15-16</HORARIO>

</ASIGNATURA>

Los elementos de XML

(continúa)

Codificación que admitecaracteres internacionales

Curso de Java Tema 12 – XML - 3

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

Los elementos de XML

Page 2: Tema12

Curso de Java Tema 12 – XML - 4

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 marcasde los elementos, dejando al usuario que los elija.

En el documento anterior, hemos usado los siguientes elementos:CURSO ASIGNATURANOMBRE CREDITOSPROFESOR PERIODOHORARIO

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

Los elementos de XML

Curso de Java Tema 12 – XML - 5

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:

Estructura jerárquica de los elementos XML

CURSO

ASIGNATURA

NOMBRE CREDITOS PROFESOR PERIODO HORARIO

Elemento raíz oelemento documento

Curso de Java Tema 12 – XML - 6

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

Redacción de documentos XML

Curso de Java Tema 12 – XML - 7

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.

Visualización de documentos XML

Page 3: Tema12

Curso de Java Tema 12 – XML - 8

Un conjunto general de elementos XML junto con una estructura dedocumento 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 enel 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).

Aplicaciones XML

Curso de Java Tema 12 – XML - 9

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)

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

Curso de Java Tema 12 – XML - 10

<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

Curso de Java Tema 12 – XML - 11

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

En los documentos XML, se pueden distinguir dos secciones principales: el prólogo y el elemento documento (o documento raíz).

Prólogo

Elementodocumento

(raíz)

Elementosanidadosen elelementodocumento

DeclaraciónXMLComentario

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

Page 4: Tema12

Curso de Java Tema 12 – XML - 12

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.

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

Curso de Java Tema 12 – XML - 13

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:

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

</ASIGNATURA>

Contenido(elementos

anidados)

Marca de inicio

Marca de cierre

Tipo (etiqueta)

Tipo (etiqueta)

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

Curso de Java Tema 12 – XML - 14

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:

<PROFESOR>Javier Leach</PROFESOR>

Tipo (etiqueta) Tipo (etiqueta)

Marca de inicio

Marca de cierre

Contenido(datos de

caracteres)

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

Curso de Java Tema 12 – XML - 15

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

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

Page 5: Tema12

Curso de Java Tema 12 – XML - 16

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

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

Curso de Java Tema 12 – XML - 17

Visualización del documento XML sin hoja de estilo

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

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

Curso de Java Tema 12 – XML - 18

Pulsando sobre un signo menos a la izquierda de un elemento intermedio del árbol se repliega su contenido y el signo cambia a +:

Pulsandoel + se

vuelve adesplegar

el contenido

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

Curso de Java Tema 12 – XML - 19

Internet Explorer analiza el documento XML y si encuentra erroresde construcción del documento no lo muestra, mostrando en cambioun mensaje indicando el error detectado:

Error enla etiqueta

de cierre

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

Page 6: Tema12

Curso de Java Tema 12 – XML - 20

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

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

Curso de Java Tema 12 – XML - 21

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>

...

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

Curso de Java Tema 12 – XML - 22

Ahora, se muestra la información de acuerdo con las características de estilo asociadas en la hoja de estilo a los elementos:

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

Curso de Java Tema 12 – XML - 23

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.

Ejercicio: un primer documento XML

Page 7: Tema12

Curso de Java Tema 12 – XML - 24

Ejercicio: un primer documento XML

Tienda

EquipoEquipo

Nombre Precio Características Opciones

Pesetas Euros CPU Velocidad Memoria Disco

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

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>

Contenido de los elementos XML

Curso de Java Tema 12 – XML - 27

Referencias a entidades o referencias a caracteres:<PAGINATITULO>Autor: &autor;Nombre: "Caracteres especiales como &#60;"</PAGINATITULO>

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.

<!-- ... -->

Contenido de los elementos XML

Referencia a una entidad

Referencia al carácter '<'

Page 8: Tema12

Curso de Java Tema 12 – XML - 28

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.

Elementos XML sin contenido (vacíos)

Curso de Java Tema 12 – XML - 29

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>

Los atributos proporcionan información adicional sobre el elemento XML, información distinta de su contenido principal:<PROFESOR CATEGORIA="Titular" EMAIL="[email protected]" 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.

Atributos de los elementos XML

Atributo

Curso de Java Tema 12 – XML - 30

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>[email protected]</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.

Atributos frente a contenido

Curso de Java Tema 12 – XML - 31

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 ouna relación de profesores).

¿Es un atributo o es parte del contenido?

Page 9: Tema12

Curso de Java Tema 12 – XML - 32

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.

Ejercicio: uso de atributos

Curso de Java Tema 12 – XML - 33

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 (queno 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.

Documentos válidos: la DTD

Curso de Java Tema 12 – XML - 34

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.

La Definición de tipo de documento (DTD)

Curso de Java Tema 12 – XML - 35

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.

Declaración de un tipo de elemento

Page 10: Tema12

Curso de Java Tema 12 – XML - 36

Se forman mediante secuencias y/o selecciones de otros elementosy/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

Curso de Java Tema 12 – XML - 37

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>

Modelos de contenido

Curso de Java Tema 12 – XML - 38

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

Definición de atributos

Curso de Java Tema 12 – XML - 39

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.

Definición de atributos

Page 11: Tema12

Curso de Java Tema 12 – XML - 40

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="[email protected]" TELEFONO="912345679">Javier Leach</PROFESOR><PERIODO>1º Cuatrimestre</PERIODO><HORARIO>LMX 15-16</HORARIO>

</ASIGNATURA>

Una DTD para el documento de ejemplo

(continúa)

Curso de Java Tema 12 – XML - 41

<ASIGNATURA><NOMBRE>Introducción a la programación</NOMBRE><CREDITOS>9</CREDITOS><PROFESOR CATEGORIA="Titular"EMAIL="[email protected]" 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>

Una DTD para el documento de ejemplo

Curso de Java Tema 12 – XML - 42

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.

Una DTD para el documento de ejemplo

Curso de Java Tema 12 – XML - 43

Una entidad puede ser tan pequeña como un carácter individualo 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 usapara 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 unarchivo 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.

Entidades

Page 12: Tema12

Curso de Java Tema 12 – XML - 44

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

>

Entidades

Curso de Java Tema 12 – XML - 45

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>

Entidades

Curso de Java Tema 12 – XML - 46

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

Referencias a caracteres especiales

Curso de Java Tema 12 – XML - 47

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.

Introducción a XSL

Page 13: Tema12

Curso de Java Tema 12 – XML - 48

Una hoja de estilo XSL, más que incluir reglas de estilo, lo queincluye 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>

Introducción a XSL

Curso de Java Tema 12 – XML - 49

Una hoja de estilo XSL con una plantilla para visualizar todo eldocumento 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/>

Introducción a XSL

(continúa)

Curso de Java Tema 12 – XML - 50

<SPAN STYLE="font-style:italic">Periodo: </SPAN><xsl:value-of select="ASIGNATURA/PERIODO"/>

</xsl:template></xsl:stylesheet>

Introducción a XSL

Orden distinto del documento XML

Curso de Java Tema 12 – XML - 51

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>

Introducción a XSL

Page 14: Tema12

Curso de Java Tema 12 – XML - 52

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

Introducción a XSL

Curso de Java Tema 12 – XML - 53

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

Así, los elementos HTML vacíos no se pueden incluir como se haceen 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).

Introducción a XSL

Curso de Java Tema 12 – XML - 54

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

Curso de Java Tema 12 – XML - 55

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

Introducción a XSL

Page 15: Tema12

Curso de Java Tema 12 – XML - 56

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.

Introducción a XSL

Curso de Java Tema 12 – XML - 57

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>

Introducción a XSL

Curso de Java Tema 12 – XML - 58

Ahora el resultado es el deseado:

Introducción a XSL

Curso de Java Tema 12 – XML - 59

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

Introducción a XSL

(continúa)

Page 16: Tema12

Curso de Java Tema 12 – XML - 60

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

Introducción a XSL

Curso de Java Tema 12 – XML - 61

Manipulación de datos

Se pueden filtrar u ordenar los datos del documento XML antes deproducir 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"/>

Introducción a XSL

Curso de Java Tema 12 – XML - 62

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 dellibro XML Step by Step, de Microsoft Press).

Introducción a XSL

Curso de Java Tema 12 – XML - 63

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

Un ejemplo completo de uso de XSL

(continúa)

Page 17: Tema12

Curso de Java Tema 12 – XML - 64

<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

Curso de Java Tema 12 – XML - 65

<?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-eachselect="INVENTORY/BOOK[@InStock='yes']"><TR ALIGN="CENTER">

Un ejemplo completo de uso de XSL

(continúa)

Curso de Java Tema 12 – XML - 66

<TD><xsl:value-of select="TITLE"/></TD><TD>

<xsl:value-of select="AUTHOR"/> <BR/>(born <xsl:value-ofselect="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

Curso de Java Tema 12 – XML - 67

El resultado es el siguiente:

Un ejemplo completo de uso de XSL