
En esta página:
Empezando a trabajar con XML
A lo largo de los capítulos anteriores ya hemos visto algún ejemplo de documento XML e incluso de DTD, pero sin profundizar en su sintaxis.
A lo largo de este capítulo y los siguientes vamos a estudiar con más detalle la sintaxis y los elementos que forman un documento XML y cómo podremos construirlos y comprobar que son correctos.
El siguiente
código:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE documento [ <!ELEMENT documento (p | imagen | ejemplo)*> <!ELEMENT p (#PCDATA|destacar)*> <!ELEMENT destacar (#PCDATA)> <!ATTLIST destacar importancia CDATA #REQUIRED> <!ELEMENT imagen EMPTY> <!ATTLIST imagen fichero CDATA #REQUIRED> <!ELEMENT ejemplo (#PCDATA)> ]> <!-- Esto es un comentario --> <documento> <p>Mi Primer <destacar importancia="1">documento XML</destacar></p> <p>Comienza con la etiqueta <documento></p> <p>A continuación colocamos un elemento sin contenido</p> <imagen fichero="imagen.gif"/> <p>Y ahora una etiqueta CDATA.</p> <ejemplo> <![CDATA[ Aqui puedo poner lo que quiera. ] ]> </ejemplo> </documento>
es un ejemplo de documento XML con DTD incorporada. Para cualquier persona que esté familiarizada con el HTML esta sintaxis le resultará conocida, aunque a simple vista se pueden observar algunas diferencias importantes:
Utilizo mis propias etiquetas. Y es que en XML no estamos trabajando con etiquetas predefinidas. Nosotros podemos crearnos nuestro propio lenguaje de etiquetas en función de nuestras necesidades.
La sintaxis es estricta. Ya no vale dejar de entrecomillar los atributos o utilizar las mayúsculas y minúsculas sin ningún control. La especificación XML determina claramente una serie de reglas que especifican cuando un documento está bien formado.
La utilización de una DTD. En HTML, a pesar de ser una aplicación SGML, no era obligatorio utilizarlas y aunque para trabajar con XML tampoco será necesario, sí que será recomendable. Posiblemente no acompañen al documento XML en su distribución, pero resultan muy útiles en la elaboración y validación de los documentos.
Los elementos vacíos. Son los elementos del tipo <img>, <hr>, etc. de HTML, en los que no existe etiqueta final al no tener contenido. Ahora, en el XML, la propia etiqueta de inicio llevará una contrabarra al final que los identificará.
A lo largo de este capítulo estudiamos todos estos detalles y muchos más que nos permitirán ir entiendo y trabajando con documentos XML.
Marcado y datos
Un documento XML es simplemente un conjunto de cadenas de carácteres [1], en el que, al igual que en el HTML, podemos diferenciar dos tipos de construcciones: el marcado y los datos de carácter.
El texto incluido entre los carácteres menor que "<" y mayor que ">" o entre los signos "&" y ";" es el marcado. Son exactamente las partes del documento que tiene que entender el procesador de XML.
El marcado entre los signos "<" y ">" se denominan etiqueta.
El resto no son más que datos de carácter, que se corresponde con lo que sería el contenido del documento: es decir, la parte imprimible de éste.
Componentes de un documento XML
Elementos
Como podemos observar, todo documento XML se compone de uno o más elementos, cuyos límites están delimitados por etiquetas de comienzo y etiquetas de fin en el caso de que tengan contenido:
<p>Mi Primer <destacar importancia="1">documento XML</destacar></p>
y por una etiqueta de elemento vacío en el caso de ser elementos sin contenido:
<imagen fichero="imagen.gif"/>
Cada elemento puede contener datos de carácter, elementos, ambas cosas a la vez o puede que estén vacíos.
En nuestro caso:

En el caso de elementos con contenido, las etiquetas de comienzo se componen del símbolo menor que "<", el nombre del tipo de elemento, los atributos si los tiene y el símbolo mayor que ">". Mientras que las etiquetas de fin se componen del símbolo menor que seguido de contrabarra "</", el nombre del tipo del elemento y el símbolo mayor que ">".

En el caso de ser un elemento vacío, sólo hay una etiqueta de elemento vacío que se forma del símbolo menor que "<", el nombre del tipo de elemento, los atributos si los tiene y se cierra con el símbolo "/>". Es importante destacar este tipo de elementos, ya que hasta ahora en el SGML y, por tanto en el HTML entendido como aplicación SGML, los elementos vacíos sólo se representaban con una etiqueta de inicio.
Atributos
Cada elemento puede tener atributos (propiedades) que nos ofrecen información sobre el elemento.
En nuestro ejemplo:
<p>Mi Primer <destacar importancia="1">documento XML</destacar></p> ..... <imagen fichero="imagen.gif"/>
Como podemos observar, la definición de un atributo está formada por el nombre del atributo, seguido del símbolo igual "=" y, entrecomillado, el valor del atributo.
Prólogo
Los documentos XML pueden empezar con un prólogo, en el que esencialmente se define:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE documento [ <!ELEMENT documento (p | imagen | ejemplo)*> <!ELEMENT p (#PCDATA|destacar)*> <!ELEMENT destacar (#PCDATA)> <!ATTLIST destacar importancia CDATA #REQUIRED> <!ELEMENT imagen EMPTY> <!ATTLIST imagen fichero CDATA #REQUIRED> <!ELEMENT ejemplo (#PCDATA)> ]>
En la declaración XML,
<?xml version="1.0" encoding="UTF-8"?>
Indicamos:
En la declaración del tipo de documento,
<!DOCTYPE documento [ <!ELEMENT documento (p | imagen | ejemplo)*> <!ELEMENT p (#PCDATA|destacar)*> <!ELEMENT destacar (#PCDATA)> <!ATTLIST destacar importancia CDATA #REQUIRED> <!ELEMENT imagen EMPTY> <!ATTLIST imagen fichero CDATA #REQUIRED> <!ELEMENT ejemplo (#PCDATA)> ]>
asociamos la DTD respecto de la cual construimos el documento. En nuestro ejemplo va implícita en el propio documento XML, aunque también puede hacerse externa al documento e incluso de una forma mixta. Si la hubiésemos escrito en un fichero "ejemplo.dtd" tendríamos que referenciarla de la siguiente manera:
<!DOCTYPE documento SYSTEM "ejemplo.dtd">
Aunque recordad que a diferencia del SGML, tenemos la posibilidad de no utilizarla.
Ambas partes del prólogo son opcionales, aunque en el caso de incluir ambas la declaración XML tiene que ir antes.
Otras construcciones de marcado.
Hasta aquí hemos visto los componentes más importantes de un documento XML. Aunque si observamos el ejemplo veremos que existen otras componentes que podemos utilizar:
Comentarios
Mediante los cuales podemos proporcionar información que el parser no tendrá en cuenta.
<!-- Esto es un comentario -->
Los comentarios empiezan con los caracteres "<!--" y terminan con "-->" y pueden colocarse en cualquier sitio excepto dentro de las declaraciones, etiquetas y otros comentarios.
CDATA
Permiten integrar texto en un documento en XML que de otra forma sería interpretado como etiquetas. Es decir, estamos introduciendo texto que luego el procesador XML va a mostrar pero no va a procesar como marcado.
<![CDATA[ Aqui puedo poner lo que quiera. ] ]>
Los CDATA empiezan con los caracteres "<![CDATA[" y termina con "]]>".
Dentro de ellos podemos colocar cualquier cosa ya que no va a ser interpretado, con la salvedad de la cadena que indica el final de CDATA, "]]>", ya que el procesador al encontrársela entendería que la sección CDATA ya ha terminado con las nefastas consecuencias que ésto puede tener.
Entidades predefinidas
En XML existen algunos caracteres reservados que no podemos utilizar para evitar problemas con el marcado, lo que no significa que no tengan que salir en nuestros documentos XML.
En nuestro ejemplo, nos aparece el caso cuando intentamos escribir la etiqueta <documento>
<p>Comienza con la etiqueta <documento></p>
Ya hemos visto que una posible solución es la utilización de CDATA, pero sin duda es poco útil cuando simplemente queremos escribir un carácter.
Las entidades predefinidas son marcas XML que se utilizan para representar estos caracteres. El XML especifica cinco entidades predefinidas:
Como podemos observar, se reconocen al ir entre los símbolos "&" y ";".
Documentos bien formados y documentos válidos
Como ya he escrito anteriormente, a diferencia del SGML, no es necesario que un documento XML esté asociado a una DTD.
El documento XML con el que empezábamos el documento, lo podíamos haber escrito de la siguiente manera:
<?xml version="1.0" encoding="UTF-8"?> <!-- Esto es un comentario --> <documento> <p>Mi Primer <destacar importancia="1">documento XML</destacar></p> <p>Comienza con la etiqueta <documento></p> <p>A continuacion colocamos un elemento sin contenido</p> <imagen fichero="imagen.gif"/> <p>Y ahora una etiqueta CDATA.</p> <ejemplo> <![CDATA[ Aqui puedo poner lo que quiera. ] ]> </ejemplo> </documento>
Y si lo pasásemos por un parser de XML no nos daría ningún error.
Por tanto, en función de si lleva asociada una DTD o no, podemos diferenciar dos tipos de documentos XML:
Evidentemente, los documentos válidos son bien formados.
Enlaces Recomendados
Breve Tutorial de XML en castellano.
http://csg.uwaterloo.ca/~dmg/tutorial/xml/
Breve y concisa introducción técnica al XML de la mano de Daniel M. German. En castellano.
Anotaciones:
[1]
Procedentes del conjunto de caracteres Unicode. Es el juego internacional de carácteres estándar y que utiliza códigos de 16 bits. De esta forma es posible disponer de una tabla con 65.535 símbolos disponibles, lo que permite acomodar juegos de carácteres de las diversas lenguas sin mayores problemas.