Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
El lenguaje XML 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).
El lenguaje Java — Tema 12 — Java y XML — XML
Curso de Java Tema 12 – XML - 1
(continúa)
Como se puede ver, se ha usado XML para describir una base de Como se puede ver también, algunos elementos XML se encuentran
datos pequeña (como lenguaje de descripción de bases de datos dentro de otros: esto es típico de los documentos XML.
XML tiene la ventaja de ser texto simple). Los elementos de un documento XML suelen estar anidados,
XML no define los elementos (etiquetas) que se pueden usar en los de forma que se define una estructura jerárquica de elementos:
documentos, sino que define la forma que pueden tener las marcas
de los elementos, dejando al usuario que los elija. CURSO Elemento raíz o
En el documento anterior, hemos usado los siguientes elementos: elemento documento
CURSO ASIGNATURA
NOMBRE CREDITOS
PROFESOR PERIODO
HORARIO
ASIGNATURA
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 NOMBRE CREDITOS PROFESOR PERIODO HORARIO
inicio como la de cierre (algunos elementos HTML no se cierran).
El hecho de que XML no incluya elementos predefinidos puede hacer Un navegador sabe qué hacer con un elemento H1 o LI de HTML,
pensar que se trata de un estándar relativamente informal. cómo mostrar su contenido en la ventana (el estándar de HTML le
Sin embargo, XML tiene definida una sintaxis muy estricta; indica el aspecto que debe tener cada elemento).
por ejemplo, a diferencia de HTML, todo elemento de XML Sin embargo, para el navegador no significa nada un elemento
debe estar delimitado por una marca de inicio y otra de cierre; CURSO o NOMBRE de XML, ya que son elementos cuyos nombres
también, todo elemento anidado debe estar completamente (etiquetas) nos hemos inventado nosotros.
contenido dentro del elemento que lo engloba. Básicamente se pueden utilizar tres técnicas distintas para indicar al
Aunque no son muchas las reglas sintácticas de XML, navegador cómo debe mostrar los elementos de un documento XML:
se deben conocer y saber aplicar correctamente. Vinculación de hojas de estilo: hojas de estilo en cascada
Sin embargo, veremos que la sintaxis de XML contempla como las del HTML u hojas de estilo XSL (eXtensible Stylesheet
dos niveles de reglas sintácticas. Language - Lenguaje de estilo extensible), específicas para XML.
Dependiendo del nivel de aplicación estricta de las reglas Vinculación de datos: página HTML con el documento XML
sintácticas se distinguen dos tipos de documentos: vinculado referencias a los elementos XML en elementos HTML.
documentos "bien formados" y documentos "válidos". Guiones: mediante programación.
Un conjunto general de elementos XML junto con una estructura de Dado que los documentos XML se guardan en archivos de texto
documento se conoce como aplicación XML o vocabulario XML. simple, se puede utilizar el editor de texto favorito;
Una aplicación XML normalmente se define creando una aquí seguiremos usando JCreator.
Definición de tipo de documento (DTD), un componente Abre el documento Clase.xml:
opcional de los documentos XML. <?xml version="1.0" encoding="UTF-7"?>
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 <!-- File name: Clase.xml -->
el que pueden aparecer los elementos, los atributos que admite cada
<CURSO>
elemento y otras características de los documentos. <ASIGNATURA>
Las aplicaciones XML que más estrictamente se ajustan a las <NOMBRE>Lógica</NOMBRE>
especificaciones del estándar incluyen en el documento XML <CREDITOS>4,5</CREDITOS>
la DTD, de forma que ésta restrinja los elementos que se pueden <PROFESOR>Javier Leach</PROFESOR>
<PERIODO>1º Cuatrimestre</PERIODO>
utilizar y la forma de la estructura del documento
<HORARIO>LMX 15-16</HORARIO>
(el ejemplo anterior no ajunta ninguna DTD). </ASIGNATURA>
(continúa)
Creación y visualización de un primer documento XML Creación y visualización de un primer documento XML
Creación y visualización de un primer documento XML Creación y visualización de un primer documento XML
El contenido de cada elemento ASIGNATURA es una secuencia de Algunas reglas básicas de XML
elementos NOMBRE, CREDITOS, PROFESOR, PERIODO Y HORARIO. A continuación se muestran algunas reglas básicas para
Cada uno de esos elementos contenidos en ASIGNATURA contiene la creación de documentos XML bien formados (aquellos que
únicamente una secuencia de caracteres: 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
Tipo (etiqueta) Tipo (etiqueta) superior (el elemento raíz o elemento documento).
Los elementos deben estar adecuadamente anidados.
<PROFESOR>Javier Leach</PROFESOR>
Cada elemento debe tener tanto una marca de inicio como
Marca Contenido Marca una marca de cierre.
de inicio (datos de de cierre El nombre de tipo (etiqueta) de elemento de la marca de inicio
caracteres) 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.
Visualización del documento XML Visualización del documento XML sin hoja de estilo
Se puede abrir directamente un documento XML en Internet Basta pulsar dos veces sobre el archivo XML Clase.xml:
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.
Creación y visualización de un primer documento XML Creación y visualización de un primer documento XML
Pulsando sobre un signo menos a la izquierda de un elemento Internet Explorer analiza el documento XML y si encuentra errores
intermedio del árbol se repliega su contenido y el signo cambia a +: de construcción del documento no lo muestra, mostrando en cambio
un mensaje indicando el error detectado:
Pulsando
el + se Error en
vuelve a la etiqueta
desplegar de cierre
el contenido
Visualización del documento XML con una hoja de estilo en cascada En principio, los elementos hijos heredan las características
Se puede vincular al documento XML una hoja de estilo. de estilo de sus padres.
En la hoja de estilo se utilizarán los nombres de tipos de los En el documento XML se vincula la hoja de estilo de forma similar a
elementos como selectores. como se hace en los documentos HTML:
Por ejemplo, tenemos una hoja de estilo en el archivo Clase.css: <?xml version="1.0" encoding="UTF-7"?>
ASIGNATURA { font-family : Times New Roman; <!-- File name: Clase.xml -->
font-size : 12pt; display : block; margin-bottom : 10pt
} <?xml-stylesheet type="text/css" href="Clase.css"?>
NOMBRE { font-weight : bold }
CREDITOS { font-style : italic } <CURSO>
<ASIGNATURA>
PERIODO { display : block; font-style : italic } <NOMBRE>Lógica</NOMBRE>
display: block crea una nueva caja para el elemento <CREDITOS>4,5</CREDITOS>
<PROFESOR>Javier Leach</PROFESOR>
(aquí, entre otras cosas, se pasa al principio de una nueva línea).
...
Ahora, se muestra la información de acuerdo con las características Crea un documento XML denominado Equipos.xml que contenga
de estilo asociadas en la hoja de estilo a los elementos: 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.
Tienda
Características:
Nombre Precio Características Opciones CPU velocidad,
memoria disco
Opciones
Los elementos XML pueden tener distintos tipos de contenidos: Referencias a entidades o referencias a caracteres:
Otros elementos anidados: <PAGINATITULO>
Referencia a una entidad
Autor: &autor;
<ASIGNATURA>
Nombre: "Caracteres especiales como <"
<NOMBRE>Lógica</NOMBRE>
</PAGINATITULO>
<CREDITOS>4,5</CREDITOS>
<PROFESOR>Javier Leach</PROFESOR> Referencia al carácter '<'
<PERIODO>1º Cuatrimestre</PERIODO>
<HORARIO>LMX 15-16</HORARIO> Secciones CDATA (bloques de texto que no son interpretados
</ASIGNATURA> como código XML (permite, por ejemplo, incluir código HTML):
Datos de caracteres: <![CDATA[ ... ]]> Cualquier texto excepto ]]>
<PROFESOR>Javier Leach</PROFESOR> Instrucciones de procesamiento:
Datos de caracteres y elementos anidados: <? ... ?>
<PROFESOR> Comentarios: igual que en HTML.
Javier Leach
<CATEGORIA>Titular</CATEGORIA> <!-- ... -->
</PROFESOR>
Igual que en HTML, en XML se pueden declarar elementos vacíos. Dentro de la marca de inicio de un elemento (o de la marca única de
Pero a diferencia de HTML, en XML los elementos vacíos también un elemento vacío) se pueden incluir especificaciones de atributos
deben llevar las dos marcas (de inicio y de cierre). (pares propiedad-valor con la misma sintaxis que en HTML).
<PROFESOR CATEGORIA="Titular">Luis Hernández</PROFESOR>
Por ejemplo, en HTML el elemento vacío HR tan sólo lleva marca de
inicio (<HR>), no existiendo siquiera marca de cierre. Atributo
En XML un elemento así se debe crear con las dos marcas:
<HR></HR> Los atributos proporcionan información adicional sobre el elemento
XML, información distinta de su contenido principal:
Sin embargo, XML contempla una abreviatura para ahorrar escritura
con los elementos vacíos; lo siguiente es equivalente a lo anterior: <PROFESOR CATEGORIA="Titular" EMAIL="luis@jet.es"
TELEFONO="912345678">
<HR/> Luis Hernández
Un elemento vacío puede servir para que una aplicación XML realice </PROFESOR>
una determinada acción (de procesamiento o de visualización). No resulta fácil saber qué debe ser parte del contenido y qué
Además, un elemento vacío puede tomar sentido con sus atributos. información se debe incluir en forma de atributos.
La información sobre un elemento se puede incluir en forma de Hay que intentar distinguir entre lo que es contenido y lo que es
atributos o en forma de subelementos: metainformación; la metainformación es información que describe al
<PROFESOR> contenedor y que se incluirá en forma de atributos, mientras que el
Luis Hernández contenido es la información que se encuentra dentro del contendor.
<CATEGORIA>Titular</CATEGORIA> Para saber si una información es un metadato o es contenido se
<EMAIL>luis@jet.es</EMAIL>
puede plantear la siguiente pregunta: Si elimino el dato, ¿cambiará
<TELEFONO>912345678</TELEFONO>
</PROFESOR> mi comprensión o posibilidad de comprensión del contenido?
Si la respuesta en no, entonces es un metadato;
Por lo que respecta a la información en sí, ésta se incluye tanto de si la respuesta es sí, entonces es un contenido.
una forma como de otra.
Por ejemplo, lo fundamental de un profesor es su nombre, que
Las diferencias se encuentran en el procesamiento de la información; permite identificarlo, mientras que su categoría, su e-mail o su
por ejemplo, con una hoja de estilo en cascada no se muestra la teléfono es claramente información adicional.
información que se encuentra en forma de atributos.
Sin embargo, la distinción no resulta fácil y depende mucho del tipo
Se pueden plantear las diferencias conceptuales entre contenido y de aplicación XML de que se trate (una relación de asignaturas o
atributos de la forma que se indica a continuación. una relación de profesores).
Modifica el documento XML denominado Equipos.xml para que cada Un documento XML sin DTD tan sólo puede ser considerado "bien
elemento de producto de valor a dos atributos: tipo (de sobremesa o formado"; para que sea considerado válido debe llevar la DTD.
de mano) y color; además, el elemento de características dará valor La Definición de tipo de documento (DTD) es un bloque de marcado
a otros dos atributos: CPU y velocidad. 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.
La definición de tipo de documento está delimitada por [ ] y Una declaración de tipo de elemento tiene esta forma:
contiene declaraciones de marcado con diversos propósitos: <!ELEMENT Nombre Especificación>
Declaraciones de tipos de elementos donde Nombre es el nombre del tipo de elemento (etiqueta) y
Declaraciones de listas de atributos Especificación define su contenido, lo que el elemento puede
contener:
Declaraciones de entidades
EMPTY: elemento vacío
Declaraciones de notaciones <!ELEMENT IMAGEN EMPTY>
Instrucciones de procesamiento Serán <IMAGEN></IMAGEN> (o <IMAGEN/>)
Comentarios ANY: cualquier contenido (sin restricciones)
Referencias a entidades de parámetros <!ELEMENT VARIOS ANY>
Se forman mediante secuencias y/o selecciones de otros elementos Los distintos modelos se pueden combinar y anidar, llegando a
y/o #PCDATA (datos de caracteres interpretados; los trataremos especificaciones de contenido muy precisas:
como elementos a efectos de sintaxis); también se contemplan <!ELEMENT A (B*, C, D+)>
repeticiones y ausencias.
<!ELEMENT E (F* | (J, K+))?>
Secuencia: elementos separados por comas y entre paréntesis
Supuesto que los elementos E, F, J y K se declaran como #PCDATA,
<!ELEMENT FECHA (DIA, MES, ANIO)>
para la segunda especificación, las siguientes estructuras serían
Selección: elementos separados por BARRAS y entre paréntesis correctas:
<!ELEMENT CREACION (#PCDATA | FECHA)> <E></E>
Cardinales: se puede indicar si una parte del contenido ha de <E> <E>
estar necesariamente, puede no estar o se puede repetir. <F>...</F> <J>...</J>
? detrás del contenido: una vez o ninguna. <F>...</F> <K>...</K>
+ detrás del contenido: una o más veces. </E> <K>...</K>
* detrás del contenido: una o más veces o ninguna. </E>
Los atributos también deben estar definidos en la DTD para cada Por ejemplo:
elemento que los contemple; se definen mediante una declaración <!ATTLIST Nombre TIPO (uno|dos|tres)>
de lista de atributos (nombres, tipos y posible ausencia):
<!ATTLIST Nombre Definiciones>
El valor predeterminado: un valor concreto o una palabra clave.
El nombre identifica al elemento para el que se define la lista de
atributos y se sigue de una lista de definiciones de atributos: Ejemplo de valor concreto (ha de ir entrecomillado):
<!ATTLIST Nombre TIPO (uno|dos|tres) "uno">
Atributo Tipo Predeterminado
Palabras clave:
Las definiciones se separan por espacios.
#REQUIRED: debe estar necesariamente asignado.
Algunos tipos de atributos:
#IMPLIED: puede tomar valor; si no toma valor queda
CDATA: cadenas de caracteres delimitadas por comillas.
indeterminado.
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 |.
La siguiente podría ser una DTD para este documento: Una entidad puede ser tan pequeña como un carácter individual
<!DOCTYPE CURSO o tan grande como un documento XML completo.
[
<!ELEMENT CURSO (ASIGNATURA)+> <!-- Una o más -->
Simplificando, una entidad consiste en un nombre y un contenido;
<!ELEMENT ASIGNATURA (NOMBRE, CREDITOS, PROFESOR, el contenido son los datos reales almacenados y el nombre se usa
PERIODO, HORARIO)> <!-- Todos y en ese orden --> para referirse a esos datos.
<!ELEMENT NOMBRE (#PCDATA)>
<!ELEMENT CREDITOS (#PCDATA)> Se distinguen dos clases generales de entidades: internas y externas.
<!ELEMENT PROFESOR (#PCDATA)>
<!ELEMENT PERIODO (#PCDATA)>
Una entidad interna es aquella que se define sin necesidad de un
<!ELEMENT HORARIO (#PCDATA)> archivo externo que englobe su contenido, de forma que su
<!ATTLIST PROFESOR CATEGORIA (Catedratico|Titular) contenido forma parte de su declaración (cadena entrecomillada).
#REQUIRED EMAIL CDATA #IMPLIED TELEFONO CDATA
"912345670"> <!-- teléfono de la Secretaría --> 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.
Las entidades se definen en la DTD con una sintaxis similar a la de Entidades externas interpretadas:
declaración de elemento o atributo; se insertan en el documento en <!ENTITY Nombre SYSTEM URL>
el lugar en el que se requieran.
Para referenciar archivos externos que contienen código XML.
Entidades internas:
<!ENTITY Nombre Valor>
Entidades externas no interpretadas:
Una vez definida la entidad en la DTD se puede usar en el
documento precediendo su nombre con & y posponiéndolo con ; <!ENTITY Nombre SYSTEM URL NDATA Tipo>
Las referencias a caracteres toman en XML una forma similar a las XSL es un lenguaje de estilo mucho más sofisticado que CSS,
de HTML: comienzan por &# y acaban en ; habiendo sido diseñado específicamente para la visualización de
Sin embargo, en medio de esos dos símbolos se coloca el código documentos XML; es mucho más potente y ofrece un completo
ASCII del carácter, o en decimal o en hexadecimal (con x delante): 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:
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
También hay unas pocas referencias predefinidas: 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.
Una hoja de estilo XSL, más que incluir reglas de estilo, lo que Una hoja de estilo XSL con una plantilla para visualizar todo el
incluye es una o más plantillas, cada una de las cuales contiene documento sería como la siguiente:
instrucciones para la visualización de una determinada rama de <?xml version="1.0" encoding="UTF-7"?>
elementos del documento XML. <!-- File name: Asignatura.xsl -->
Veamos un ejemplo de plantilla XSL; la aplicaremos al siguiente <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
documento XML (Asignatura.xml):
<H2>Descripción de asignatura</H2>
<?xml version="1.0" encoding="UTF-7"?> <SPAN STYLE="font-style:italic">Profesor: </SPAN>
<!-- File name: Asignatura.xml --> <xsl:value-of select="ASIGNATURA/PROFESOR"/><BR/>
<?xml-stylesheet type="text/xsl" href="Asignatura.xsl"?> <SPAN STYLE="font-style:italic">Asignatura: </SPAN>
<xsl:value-of select="ASIGNATURA/NOMBRE"/><BR/>
<ASIGNATURA> <SPAN STYLE="font-style:italic">Créditos: </SPAN>
<NOMBRE>Introducción a la programación</NOMBRE> <xsl:value-of select="ASIGNATURA/CREDITOS"/><BR/>
<CREDITOS>9</CREDITOS> <SPAN STYLE="font-style:italic">Horario: </SPAN>
<PROFESOR>Luis Hernández</PROFESOR> <xsl:value-of select="ASIGNATURA/HORARIO"/><BR/>
<PERIODO>Anual</PERIODO>
<HORARIO>LMX 16-17</HORARIO>
</ASIGNATURA> (continúa)
El atributo match indica la rama específica del árbol de elementos En cualquier caso, los elementos deben ser elementos XML correctos.
del documento XML para la que se aplica la plantilla. Así, los elementos HTML vacíos no se pueden incluir como se hace
/ indica el documento entero; toda hoja de estilo XSL debe tener una en HTML (por ejemplo, <BR>), sino que deben tener marca de inicio
plantilla que se corresponda con el documento XML entero; y marca de cierre; eso sí, se recurre a la abreviatura de XML para
/ no representa al elemento raíz, sino al documento entero, dentro elementos vacíos:
del cual se encuentra el elemento raíz (ASIGNATURA en este caso). <BR/>
Una plantilla contiene dos tipos de elementos: Igual para los elementos XSL:
Elementos XML que representan marcas HTML; por ejemplo: <xsl:value-of select="ASIGNATURA/PROFESOR"/>
<H2>Descripción de asignatura</H2>
<SPAN STYLE="font-style:italic">Profesor: </SPAN> 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
Elementos XSL; por ejemplo: HTML que el navegador visualiza.
<xsl:value-of select="ASIGNATURA/PROFESOR"/>
Supongamos que el documento XML fuera un poco distinto
Los elementos XSL se distinguen porque todos empiezan por xsl:.
(como se muestra en la siguiente página).
Supongamos que el documento XML fuera un poco distinto: La misma hoja de estilo serviría para mostrar la información.
Se puede ver cómo para PROFESOR se muestra en secuencia la
<?xml version="1.0" encoding="UTF-7"?> información de sus elementos hijos (PILA y APELLIDOS).
<!-- 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>
<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)
(continúa)
(continúa)