XML Bien Formado

Hasta ahora hemos visto por qué XML tiene sentido para la comunicación de datos. Ahora vamos a ver como crear nuestros propios documentos XML. Para crear un documento XML, debemos conocer las reglas sintácticas que establece la recomendación de XML (en este caso la 1.0). Llamamos documento bien formado a un documento XML que cumple las reglas sintácticas de la recomendación de XML.

La primera regla, que ya conocemos de HTML y XHTML es la estructura de una etiqueta:

Están las etiquetas de inicio ( <etiqueta atrib1="val1" ... atribn="valn"> ), de cierre ( </etiqueta> ) y las vacías ( <etiqueta atrib1="val1" ... atribn="valn"/> ) que incluyen la barra de cierre al final.

Un elemento está formado por todo el código desde la etiqueta de inicio hasta la etiqueta de cierre. Por ejemplo, un elemento puede ser el siguiente:

<nombre> José </nombre>

y también puede ser un elemento el siguiente:

<persona> <nombre> José </nombre> <apellido> Pérez </apellido> </persona>

La única diferencia es que en el primer elemento, solo hay datos entre la etiqueta de inicio y la de cierre, y el segundo elemento tiene a su vez otros elementos en su interior.

El texto entre la etiqueta de inicio y de cierre de un elemento es llamado "contenido del elemento".

A menudo, el contenido entre las etiquetas son sólamente datos. Nos referimos a ellos como PCDATA (Parsed Character Data, o sea, Datos tipo Carácter Analizados Sintácticamente). Es un término extraño, heredado de SGML (si leiste la historia de XML, sabrás lo que es SGML).

Al escribir una etiqueta, es posible incluir espacios en blanco en su interior, salvo en un sitio: en la etiqueta de cierre, entre el símbolo "<" y el símbolo "/". Por ejemplo son correctas las siguientes etiquetas:

<nombre > </nombre > < nombre >

Sin embargo, es incorrecta la etiqueta siguiente:

< /nombre >

Otras reglas básicas de sintaxis XML son las siguientes:

Las etiquetas tienen que estar correctamente anidadas, es decir, abiertas y cerradas en el orden correcto unas dentro de otras. Por ejemplo, el siguiente anidamiento es incorrecto:

<p> Un texto <strong> resaltado <em> en cursiva </strong> </em> mal anidado </p>

Su correspondiente correcto sería:

<p> Un texto <strong> resaltado <em> en cursiva </em> </strong> bien anidado </p>

Los documentos XML solo tienen un elemento raíz. Por ejemplo el siguiente documento XML es incorrecto:

<nombre> Juan </nombre> <nombre> María </nombre>

En cambio el siguiente sí sería correcto:

<nombres> <nombre> Juan </nombre> <nombre> María </nombre> </nombres>

Los elementos deben seguir las convenciones de nombres de XML. Estas convenciones, son las siguientes:

  • Los nombres pueden empezar con letras o guión, pero no con números u otros símbolos de puntuación.
  • Tras un primer carácter, se pueden añadir números, guiones y puntos.
  • Los nombres no pueden tener espacios.
  • Los nombres no pueden contener el símbolo ":", ya que está reservado para ciertas funciones.
  • Los nombres no pueden empezar con la cadena "xml" en minúscula, mayúscula o mezcla de ellas.
  • Es muy conveniente evitar espacios innecesarios en el interior de la etiqueta.

Estos son algunos ejemplos de etiquetas mal construidas, por no seguir las recomendaciones anteriores:

<xml-tag> <123> <mola=xml> <mi etiqueta>

XML es sensible a las mayúsculas. Esto quiere decir que <nombre>, <Nombre> y <NOMBRE> son etiquetas diferentes. ¿Qué sentido tendría utilizar las mayúsculas en XML? En ocasiones el nombre de una etiqueta está formada por más de una palabra. Hay diferentes convenciones para facilitar la lectura, como separar por ".", por "-" e incluso utilizar una mayúscula al principio de cada palabra. Por ejemplo: <tipoSuscripción>. Lo importante es seguir siempre el mismo mecanismo a lo largo de todo el código.

XML mantiene los espacios en blanco en PCDATA. A diferencia de HTML donde hay que utilizar etiquetas específicas para respetar los espacios en blanco, en XML los espacios en blanco y los retornos de carro se respetan. Por ejemplo, para el elemento siguiente:

<etiqueta> Esto es un párrafo. Tiene muchos espacios en blanco. </etiqueta>

el PCDATA es:

"Esto es un párrafo. Tiene muchos espacios en blanco. "

Hay ciertos espacios en blanco (tipo sangría) para estructurar el código, que no son respetados como espacios en blanco por los analizadores sintácticos. Sólo son respetados los espacios en blanco de los PCDATA.

Atributos

Los atributos en XML funcionan de modo similar a los atributos de XHTML. Por ejemplo en la etiqueta <nombre apodo="ale"> está el atributo apodo. Siempre tienen esa estructura:

nombre-atributo="valor-atributo"

Sólo se pueden utilizar las comillas dobles ", puesto que otro símbolo dará error.

Los espacios en blanco repetidos y los retornos de carro son eliminados. De modo que en la siguiente etiqueta:

<test miatrib="ciertos datos van aquí">

el analizador sintático asignará al atributo "miatrib" el valor "ciertos datos van aquí". Hay que tener en cuenta que el valor del atributo no es PCDATA.

Si se siguen estas reglas, cualquier analizador sintáctico será capaz de recuperar los datos.

Vamos a realizar unos ejercicios con xml. Antes de empezar, observa un ejemplo de código XML sobre un catálog de CDs.

<catalog> <cd format="mp3"> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> <country>USA</country> <company>Columbia</company> <price>10.90</price> <year>1985</year> </cd> <cd format="disk"> <title>Hide your heart</title> <artist>Bonnie Tyler</artist> <country>UK</country> <company>CBS Records</company> <price>9.90</price> <year>1988</year> </cd> </catalog>

Ejemplo obtenido de www.w3schools.com.

Práctica 5 (fácil). En el análisis de imágenes de satélite, se utiliza un concepto llamado "Punto de interés" (pdi). Se refiere a una zona o punto de la imagen que es importante para un objetivo concreto durante su procesamiento. Supongamos que se necesita registrar la posición de ciertos elementos geométricos en imágenes de satélite. En concreto, estos elementos son círculos y cuadrados. Para cada uno de estos elementos, se debe conocer su posición y tamaño. En la siguiente imagen, se describe el árbol de la estructura jerárquica de los datos.

Observa que las cajas con borde doble pueden albergar varias repeticiones de elementos del mismo tipo. Por ejemplo, el elemento "pdi" puede albergar varios elementos de tipo "imagen" y el elemento "objetos" puede albergar varios elementos de tipo "objeto".

Crea un documento XML que facilite los siguientes datos:

  • La imagen "malaga-030111.raw", de tamaño 1000x1000, contiene los siguientes objetos:
    • Cuadrado con posición x="50", y="110", y lado de 10 píxeles.
    • Círculo con posición x="100", y="300", y radio de 43 píxeles.
  • La imagen "marbella-050111.raw", de tamaño 2000x2000, contiene los siguientes objetos:
    • Cuadrado con posición x="30", y="300", y lado de 20 píxeles.
    • Cuadrado con posición x="80", y="400", y lado de 60 píxeles.
    • Círculo con posición x="90", y="50", y radio de 30 píxeles.

El elemento "imagen" contiene un atributo llamado "nombre" que identifica el nombre de la imagen de satélite.

El elemento "objeto" contiene un atributo llamado "forma" que identifica el tipo de figura geométrica descrita (que puede ser "cuadrado" o "círculo").

Anteriormente se habló del formato SVG para gráficos vectoriales, basado en XML. La imagen anterior (árbol jerárquico) se ha realizado usando el formato SVG. Para ver el contenido de dicho documento, haz clic aquí.

Si te ha parecido fácil el ejercicio anterior, vamos a probar con otro un poco más complicado.

Práctica 5 (avanzado). Supongamos que dos empresas A y B proporcionan de un servicio conjunto de música y películas que actualiza las listas de contenidos disponibles en los dispositivos que los clientes les han comprado. La empresa A vende dispositivos móviles y la empresa B actualiza los contenidos. En la web de A, los clientes hacen sus encargos, generando datos que se almacenan en el backend del servidor. Diariamente, estos datos son enviados a B para dar de alta al usuario en el servicio de música. Puesto que cada empresa tiene su propia base de datos, con estructuras completamente diferentes, el paso de datos se hace mediante un fichero XML. El fichero XML contiene la siguiente estructura arbórea:

Observa que las cajas con borde doble pueden albergar varias repeticiones de elementos del mismo tipo.

Crea un documento XML que facilite los siguientes datos:

  • El 1 de enero de 2015, Juan García ha hecho una adquisición de tpo N (nuevo). Se trata de la adquisición con número 64321 con ID n021151230-c. Ha comprado un HTC X9 a 129,95 euros (con identificador x9000059). Se ha suscrito al servicio de música online de B por 12 meses. Su dirección es C/Lamentos n° 32, 3°B, Ciudad-Intermedia, código postal 24321. Su número de tarjeta de cŕedito es 1111111111111111, que expira en 11/15. Su email es desconocido.
  • El 2 de enero de 2015, Pedro Pérez ha hecho una adquisición de tipo U (usado). Se trata de la adquisición con número 66533 con ID u0201151530-x. Ha comprado un HTC X10 a 299,95 euros (con identificador x910059). También ha comprado un HTC X11 a 349,95 euros (con identificador x910060). Se ha suscrito al servicio de música de B por 12 meses. Su dirección es C/Suspiros n° 2, 2°B, Ciudad-Blanca, código postal 32010. Su número de tarjeta de crédito es 2222222222222222, que expira en 10/15. Su email es pperez@hotmail.com.

la etiqueta "adquisiciones" tiene un atributo que indica el número de adquisiciones, en este caso 2.

la etiqueta "productos" también tiene un atributo que indica el número de productos comprados encargados en la adquisición.

Una vez que termines, abre la solución con un explorador de Internet.

Entrega la actividad en un archivo llamado "Tu_nombre_Act5.xml"

Saludos.