eXtensible Markup Lenguage (XML)


Autor: F. Javier García Castellano
Web: http://decsai.ugr.es/~fjgc, Mail: fjgc@decsai.ugr.es
Documentos XMLInicioParsers XML

(C) GeNeura Team
Web: http://geneura.ugr.es, Mail: tutti@geneura.ugr.es

1.- Prólogo y declaración de tipo de documento

Aunque no es obligatorio los documentos XML pueden, y deberían, comenzar con una línea que describa la versión de XML, el tipo de documento y otras cosas.

La primera línea del prólogo o "declaración" permite especificar la versión de XML usada, hasta el momento, sólo existe la "1.0" y la codificación de caracter (US-ASCII, UTF-8, BIG5, ISO-8850-7,etc.). En general, para el castellano, usamos UTF-7 (código Unicode del que ASCII es un subconjunto) o ISO-8859-1.

Ejemplo:

<?xml version="1.0" encoding="UTF-7" ?>
<nada> Ejemplo </nada>

La segunda línea, o "declaración de tipo de documento XML", define que tipo de documento estamos creando, es decir, definimos que Declaración de Tipo de Documento (DTD - Document Type Definition) cumple y define los datos que de contiene el documento XML.

Ejemplos:

<?xml version="1.0" encoding="UTF-7" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "DTD/xhtml1-strict.dtd">
<html> 
  <body bgcolor="yellow "> 
    <p> 
      Ejemplo 
    </p> 
  </body> 
</html>
<?xml version="1.0" encoding="UTF-7" ?>
<!DOCTYPE ejemplo SYSTEM "http://www.ejemplos.xml/ejemplo.dtd">
<nada> Ejemplo </nada>

Un documento XML es válido si tiene asociado una DTD y el documento cumple las restricciones que la DTD expresa.

Sólo puede haber un elemento raiz, en el que están contenidos todos los demás, es decir, la jerarquía de elementos XML sólo puede tener un elemento inicial.

2.- Declaración de documento Standalone

En la parte del prólogo dentro de la "declaración" se puede incluir una declaración de documento standalone que controla que componentes de la DTD son necesarios para completar el procesamiento del documento.

Ejemplo:

<?xml version="1.0" standalone='yes'?>
 <nombre>Richal</nombre>

El valor "yes" indica que no existen declaraciones de marcas externas a la entidad documento. El valor "no" indica que existe o que pueden haber dichas declaraciones de marcas. La declaración de un documento standalone sólo denota la presencia de declaraciones externas.

3.- Elementos

Los elementos XML pueden tener contenido (más elementos, caracteres o ambos a la vez), o bien ser elementos vacíos. Un elemento con contenido es, por ejemplo:

Ejemplo:

...
 <nombre>Richal</nombre>
...

Siempre empieza con <etiqueta> que puede contener atributos o no, y termina con </etiqueta> que debe tener el mismo nombre. Al contrario que en HTML, en XML siempre se debe cerrar un elemento.

Hay que tener en cuenta que el símbolo "<" siempre se interpreta como inicio de una etiqueta XML. Si no es el caso, el documento no estará bien-formado. Para usar ciertos símbolos se usarán las entidades predefinidas.

Ejemplo:

...
 <nombre>Fulanito</nombre>
 <aviso tipo="emergencia" gravedad="mortal">Que no cunda el pánico</aviso>
...

HTML permite elementos sin contenido, XML también, pero la etiqueta debe ser de la siguiente forma: <elemento-sin-contenido/>, que puede contener atributos o no, esto es debido que no hay una etiqueta de cierre que delimite el contenido . El los siguientes ejemplos se ve esto:

Ejemplos:

...
 <identificador DNI="23123244"/>
...
<?xml version="1.0" encoding="UTF-7" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "DTD/xhtml1-strict.dtd">
<html> 
  <body bgcolor="yellow "> 
    <hr/> 
    <p> 
      Entre lineas
    </p> 
    <hr/>
  </body> 
</html>

4.- Atributos

Los elementos pueden tener atributos, que son una manera de incorporar características o propiedades a los elementos de un documento.

Ejemplo:

...
 <alumno nota="5 pelón" asistencia="Nula">Richalson</alumno>
...

En una Definición de Tipo de Documento, se especifica los atributos que puede tener cada tipo de elemento, así como sus valores y tipos de valor posible. Los atributos tienen que estar delimitado con comillas dobles ( " ) o comilla simple ( ' ). Cuando se usa uno para delimitar el valor del atributo, el otro se puede usar dentro.

Ejemplo:

...
<noticia titulo="Richal O'Donnel gana el pulitzer" autor='Pepe "Porras"'>
....
</noticia>
...

A veces, un elemento con contenido puede modelarse como un elemento vacío con atributos.

Ejemplo:

...
<gato><nombre>Micifú</nombre><raza>Persa</raza></gato>
....
<gato raza="Persa">Micifú</gato>
....
<gato raza="Persa" nombre="Micifú"/>
....

5.- Comentarios

Los comentarios pueden aparecer en cualquier punto del documento, fuera del resto de las marcas,es decir, fuera de las declaraciones etiquetas u otros comentatios.Tienen el mismo formato que los comentarios de HTML, por lo que comienzan con "<!--" y terminan con "-->". La cadena "--" no puede aparece dentro de un comentario.

Ejemplo:

...
<!-- Que gran gato es Micifú -->
<gato raza="Persa" nombre="Micifú"/>
....

6.-Entidades predefinidas

En XML 1.0 se definen cinco entidades para representar caracteres especiales y que no se interpreten como marcas por el parser XML. Es decir, asi podemos utilizar, por ejemplo, el carácter "<" sin que se interprete como comienzo de una etiqueta XML.
ENTIDAD CARACTER
&amp;&
&lt;<
&gt;>
&apos;'
&quot;"

Ejemplo:

<?xml version="1.0" encoding="UTF-7" standalone='yes'?>
<ejemplos>
<descripcion>Lo siguiente es un ejemplo de HTML.</descripcion>
<ejemplo>
     &lt;HTML&gt;
       &lt;HEAD&gt;
        &lt;TITLE&gt;Rock &amp; Roll&lt;/TITLE&gt;
       &lt;/HEAD&gt;
</ejemplo>
</ejemplos>


7.- Secciones CDATA

Las secciones CDATA también nos van a permitir especificar datos, utilizando cualquier carácter, especial o no, sin que se interprete como una marca XML. La razón es que asi se puede leer más fácilmente el documento XML sin tener que descifrar los códigos de las entidades. Las secciones CDATA empiezan por la cadena "<![CDATA[" y terminan con la cadena "]]>" y sólo ésta última se reconoce como marca. No se pueden anidar secciones CDATA

Ejemplo:

<?xml version="1.0" encoding="UTF-7" standalone='yes'?>
<ejemplos>
<descripcion>Lo siguiente es un ejemplo de HTML.</descripcion>
<ejemplo>
   <![CDATA[
     <HTML>
       <HEAD>
        <TITLE>Rock & Roll</TITLE>
       </HEAD>
   ]]>
</ejemplo>
</ejemplos>


8.- Instrucciones de procesamiento

Las intrucciones de procesamiento permiten a los documentos XML contener instrucciones para las aplicaciones, van entre <? y ?>

Ejemplo:

<?xml version="1.0"?>
<?cocoon-process type="xslt"?>
....

no son parte del documento, pero deben ser pasadas a la aplicación. En el ejemplo, se le dice al cocoon (herramienta para publicar xml en la web) que la página XML es un XSLT (que ya vereis lo que es).

9.- Identificación del lenguaje

En el procesado de documentos puede ser útil la identificación entre el lenguaje natural o el lenguaje formal, en el que está escrito el contenido. Una atributo especial denominado xml:lang puede ser insertado en los documentos para especificar el lenguaje utilizado en los contenidos y los valores de atributo de cualquier elemento en un documento.

Ejemplo:

<?xml version="1.0" encoding="UTF-7" standalone='yes'?>
<ejemplos>
 <p xml:lang="en">The quick brown fox jumps over the lazy dog.</p>
 <p xml:lang="en-GB">What colour is it?</p>
 <p xml:lang="en-US">What color is it?</p>
 <sp who="Faust" desc='leise' xml:lang="de">
   <l>Habe nun, ach! Philosophie,</l>
   <l>Juristerei, und Medizin</l>
   <l>und leider auch Theologie</l>
   <l>durchaus studiert mit heißem Bemüh'n.</l>
 </sp>
 <sp who="yo"  desc='comentario' xml:lang="es">
   <l>No me entero de un pimiento</l>
</sp>
</ejemplos>

Los códigos para cada pais los podeis encontrar en http://www.iana.org/cctld/cctld-whois.htm y más información en http://www.ietf.org/rfc/rfc1766.txt

10. Ejercicios

Todos los ejercicios que se proponen a continuación deben de usar un prólogo y hacer uso de los comentarios:

Ejercicio: Hacer un documento standalone de XML sobre una base de datos de alumnos usando sólo elementos con contenido (por ejemplo, nombre, apellidos, nota, DNI, e-mail). Prueba que esté bien formado en el Internet Explorer o en el Mozilla.

Ejercicio: Pasar el anterior documento XML a elementos sin contenido, usando atributos. Prueba que esté bien formado en el Internet Explorer o en el Mozilla.

Ejercicio: Haz un documento XML que contenga secciones de una página HTML (estamos rizando el rizo), por ejemplo, las etiquetas y contenidos de HEAD (cabecera), la etiqueta P (párrafo) y una lista sin orden (<ul> <li> ...</ul>);. Usa para esto secciones CDATA y entidades predefinidas. Prueba que esté bien formado en el Internet Explorer o en el Mozilla . Si no se ocurre ningún ejemplo, coge una de los descripciones del ejercicio de los hoteles y escribe sus caracteríscas en un listado.Hazlo primero con entidades predefinidas y luego con una sección CDATA.

Ejercicio: Haz un documento XML con un par de elementos cuyo contenido varíe dependiendo del lenguaje. Prueba que esté bien formado en el Internet Explorer o en el Mozilla. Si no se te ocurre ninguno coge el ejercicio de los hoteles y escribe descripciones en un par de idiomas.