Atributos, CDATA y errores en XML

¿Cuándo usar atributos?

No hay una regla fija para saber cuando añadir atributos o insertar los datos como un atributo. Pero en general, una regla válida es pensar en qué datos son los reales y cuales son metadatos (obtenidos a partir de los primeros, o que los describen). También puede ser un criterio discernir entre diferentes tipos de datos; utilizar atributos permite serpararlos.

En realidad, no existe diferencia práctica entre los siguientes elementos:

<nombre apodo="ale"> Alejando Manuel </nombre> <nombre> Alejandro<apodo> Ale </apodo> Manuel </nombre>

XML se gestó para conseguir que SGML fuese fácil de usar. Por ello, hay programadores que no utilizan atributos, para evitar complejidades innecesarias. En cambio, otros programadores los prefieren puesto que tienen un uso sencillo (no es preciso respetar anidamientos, por ejemplo).

Por tanto, no se puede decir CUÁNDO USAR ATRIBUTOS. Solo se puede decir que si se utilizan, se siga siempre el mismo criterio.

Comentarios

Un código con malos comentarios, tiene peor calidad que otro con buenos comentarios. Los comentarios se crean igual que en HTML:

<!-- Comentario aquí -->

Pero no se pueden colocar dentro de una etiqueta, ni utilizar el símbolo "--" dentro de ellos.

Declaraciones xml

XML proporciona una etiqueta para crear declaraciones que identifiquen las características del fichero, y así evitar problemas relacionados con codificación de caracteres, versión de xml, etc.

<?xml version="1.0" encoding="UTF-16" standalone="yes"?>

version puede ser 1.0 o 1.1. Actualmente sigue predominando 1.0.

encoding incluye la codificación de caracteres. Habitualmente, ISO-8859-1, UTF-8 o UTF-16.

standalone puede ser "yes" (especifica que el documento no depende de otros ficheros) o "no" (indicando que el documento depende de otros ficheros, como una DTD, que más adelante veremos).

Ejercicio 6. Trabajando sobre el ejercicio anterior, modifica el código para cubrir los siguientes puntos:

  • Inserta comentarios.
  • Las etiquetas vacías, transfórmalas en una sola con la notación <etiqueta/>
  • Declara tu documento con la etiqueta <?xml?>
  • Entrega la actividad con el nombre act6.xml.

Caracteres PCDATA ilegales

Hay caracteres reservados que no se pueden incluir en la PCDATA debido a que son usados en la sintaxis XML: los caracteres <, >, ", ' y &.

En vez de ellos, se deben usar los símbolos especiales siguientes:

&lt; equivale a < &gt; equivale a > &amp; equivale a & &quot; equivale a "

Secciones CDATA

Cuando hay fragmentos de texto llenos de símbolos "<", "&", etc, puede llegar a ser ilegible con símbolos especiales. Por ejemplo, la cadena "6 es < 7 & 7 es > 6", se escribiría así:

6 es &lt; 7 &amp; 7 &gt; 6

Para ellos podemos utilizar secciones CDATA (término heredado de SGML) del siguiente modo:

<![CDATA[6 es < 7 & 7 > 6]]>

La cadena ]]> está prohibida salvo que > pertenezca a una sección CDATA. Si es necesario escribirla, habrá que hacerlo como ]]&gt;

Ejercicio 7. Visualiza en un navegador el siguiente código XML:

<script language="JavaScript"><![CDATA[ function myFunc() { if (0 < 1 && 1 < 2) alert("Hola"); } ]]></script>

Ejercicio 8. Observa el siguiente código, que describe alqunas etiquetas de HTML, y emplea secciones CDATA cada vez que puedas, cambiando los símbolos &lt; y &gt; por < y >.

<HTML-Doc> <tag> <tag-name>p</tag-name> <description>Paragraph</description> <example> &lt;p&gt;Paragraphs can contain &lt;em&gt;other&lt;/em&gt; tags.&lt;/p&gt; </example> </tag> <tag> <tag-name>html</tag-name> <description>HTML root element</description> <example> &lt;html&gt; &lt;head&gt;&lt;title&gt;Sample HTML&lt;/title&gt;&lt;head&gt; &lt;body&gt; &lt;p&gt;Stuff goes here&lt;/p&gt; &lt;/body&gt;&lt;/html&gt; </example> </tag> <!--more tags to follow...--> </HTML-Doc>
Finalmente abre el documento con un explorador.

Entrega la actividad como act8.xml

Errores en xml

La especificación de XML define dos tipos de errores: errores y errores fatales.

Un error es símplemente una violación de las reglas de las recomendaciones, donde los resultados están indefinidos. Los analizadores sintáticos están preparados para corregir estos errores y seguir procesando.

Un error fatal es más serio. De acuerdo con la recomendación, un analizador sintáctico no puede continuar normalmente cuando encuentra un error fatal. Sin embargo, sí puede seguir buscando más errores. Cualquier error que causa que un documento XML no esté BIEN FORMADO, es un error fatal.

La razón es obvia. Escribir un documento XML bien formado es sencillo, mientras para un analizador sintáctico puede ser muy complejo corregir un documento mal formado. Además, dejar que un analizador recuperase por si mismo errores, podría llevar a malentendidos muy difíciles de detectar y de consecuencias impredecibles.

Los navegadores de Internet son muy laxos a este respecto, y tratan de averiguar lo que el programador quería hacer. Es por esto que los navegadores son a menudo incompatibles entre sí. Estas incompatibilidades son las que XML desea evitar.

Ejercicio 9. Crea un documento mal formado. Por ejemplo, ejecuta mal un anidamiento. Luego ábrelo con un navegador y comprueba el error.

Ejercicio 10. La aplicación que recibe el fichero XML del ejercicio 5 requiere una descripción estricta de la dirección, por razones relacionadas con la estructura de la base de datos de la empresa B. Modifica el ejercicio 5 para que las direcciones se presenten estructuradas mediante etiquetas separadas para el número de calle, nombre de la calle, ciudad, código postal, e información adicional.

Entrega el archivo con el nombre act10.xml.

Ejercicio 11. El siguiente código fuente incluye errores sintácticos que lo definen como mal formado. Revisa mediante un analizador sintático (como un explorador web) los errores, y corrígelos.

<?xml version="1"?> <document> <--There are a couple of problems with this document.--> <Information>This document contains some <bold>information</bold>. Once it's corrected, it can be read by a parser.</Information> </Document>

Saludos.