Introducción al lenguaje XML

Curso de Microsoft .NET
Servicios Web y .Net
XSLT, hojas de estilo
Página principal del grupo GeNeura

¿Qué es eso del XML?

XML significa eXtensible markup language, o lenguaje de anotación extensible. Ya conocemos el lenguaje HTML (hypertext markup language), lenguaje de anotación para página webs que permite navegación tipo hipertexto; sin embargo, XML no es sólo un lenguaje, es una forma de especificar lenguajes, de ahí lo de extensible. Todo lenguaje que se exprese de una forma determinada puede ser XML. Por lo tanto, XML no es un lenguaje para hacer mejores páginas web, sino un lenguaje para información auto-descrita, o al menos, auto-descrita si las etiquetas están bien puestas.

XML se inició como un subconjunto de SGML (structured generalized markup language), un standard ISO para documentos estructurados que es sumamente complejo para poder servir documentos en la web. XML es algo así como SGML simplificado, de forma que una aplicación no necesita comprender SGML completo para interpretar un documento, sino sólo el subconjunto que se defina. Los editores SGML, sin embargo, pueden comprender XML.

Por tanto, no debe uno pensarse que XML es para crear páginas web, o algo parecido a las página web. XML es un lenguaje que cambia el paradigma de programación: de basada en el funciones u objetos a la programación basada en el documento. XML se puede usar para cambiar totalmente el paradigma de publicación; de un programa que recibe unas entradas y produce unas salidas, se pasa a un documento que genera otro documento, o bien programas que toman documentos y producen otros documentos. Por eso, también, y, en general, salvo en entornos de servicios web, lo normal es que el XML se use en el servidor, y se sirva otro tipo de documentos, HTML, por ejemplo, que se obtienen a base de una serie de transformaciones. Precisamente, esto hace que los documentos XML se usen dentro de entornos de aplicaciones. Este entorno de aplicaciones permite publicar documentos XML, que, antes de ser enviados al cliente, sufrirán una serie de transformaciones para adaptarlo a los requisitos del mismo. Algunos ejemplos de entorno de aplicaciones son el Cocoon, un entorno basado en Java, libre, que permite no sólo publicar páginas XML, sino también incluir programas dentro de las páginas (XSP). No se caracteriza por su velocidad ni amigabilidad, pero es excelente como entorno de desarrollo (y el precio es inmejorable). Otra alternativa gratuita es el AxKit, escrito en Perl. Como alternativas de pago (y bien pagadas) están el Bea Weblogic (del que puedes leer una introducción en programacion.com, y el IBM WebSphere Transcoding Publisher. Sobre todos estos y muchos más se trata en esta discusión en barrapunto, en la cual se menciona, por ejemplo Krysalis, un entorno de publicación basado en PHP, que incluye facilidades para ser usado a través del protocolo SOAP, un protocolo de acceso remoto a documentos basado en XML.

Dentro de estos entornos de desarrollo y/o publicación, o usándolo de cualquier otra forma, XML tiene gran número de aplicaciones. La mayor parte de los portales y sitios de noticias ya están basados en XML, porque permite estructurar la información y luego aplicarle fácilmente transformaciones para su presentación. Lo más normal es que la información esté almacenada en una base de datos, se convierta a XML y luego se transforme para servirlo al cliente. Otro ejemplo de aplicación basada en XML es la base de datos discográfica de Siniestro Total está también basada en XML, y además el código es libre. Muchos weblogs, tales como barrapunto y Slashdot, sirven sus titulares en XML (y RDF), lo cual permite procesarlo fácilmente para, por ejemplo, incluirlos en la página personal de uno (ver la barra de la derecha). Todos los sitios que sirven, o servían, páginas WAP también usan, sin otro remedio, XML. Google ofrece un interfaz de programación para acceder a sus servicios usando SOAP, un interfaz de acceso remoto que usa XML. Y se puede usar en cualquier aplicación web donde haga falta programación estructurada.

Contenido de esta sección
  • Cómo editar XML
  • Qué hacer con el XML editado

¿Cómo se usa XML?

Para editar documentos XML, al igual que para hacerlo con HTML, se puede hace de dos formas: editándolos como cualquier otro fichero ASCII, usando, si acaso, un editor estructurado como el XEmacs, o bien usar un editor específico para XML, que entiende las particularidades del lenguaje, lo indenta como está mandado, y te cierra solito las etiquetas.

Para hacer esto hay muchas opciones, tanto en Windows como en Linux, aunque la mayoría son de pago. Por ejemplo, XMLSpy tiene un buen entorno, funciona solo para Windows, paro es relativamente inestable (al menos las versiones probadas). eXcelon Stylus permite además aplicar transformaciones, en un entorno de tres paneles bastante pijo. También es relativamente caro. <oXygen/> es bastante económico para uso personal o académico, y tiene una versión de prueba de treinta días. Está basado en Java, y funciona tanto en Windows como en Linux. Te completa las etiquetas, y es aceptablemente rápido. Se basa también en bastantes herramientas libres, tales como Batik y FOP de Apache. Otra opción, bastante simple, es XMLShell, que permite también hacer transformaciones XSLT simples.

Una lista extensa, pero sin ningún tipo de comentario, está en Userland software. También suele haber una buena lista en XMLsoftware, pero en julio 2002 está caido. Habrá que esperar a que vuelva. En freshmeat se listan hasta 15 herramientas, algunas de las cuales son editores.

[Imagen del editor oXygen en
     Linux

Los mismos entornos incluyen facilidades para validar el código XML resultante, pero esto se puede hacer también usando analizadores XML, de los cuales hay muchos, de bastante buena calidad, y la mayor parte de ellos gratuitos. Uno de los más conocidos y usados es el Xerces, del cual hay versiones en Java, en Perl y en C++. Es adecuadamente rápido, y además incorpora todos los últimos estándares del W3. Otra opción, que además se puede usar desde Internet, es el XParse de Jeremie, que te analiza directamente el documento y te lo presenta en forma de árbol.

La mayor parte de los validadores pueden trabajar de dos formas: de forma independiente, y usándolos como librerías desde el lenguaje de programación de la elección de uno; por ejemplo, Xerces se puede usar stand-alone, o bien como una librería xerces.jar, cuyos objetos se pueden instanciar o usar desde el programa de uno.

En muchos casos, como en el caso de C#, el XML se puede generar automáticamente a partir de la definición de una clase, o bien, al revés, una clase o un objeto de una clase se puede generar automáticamente a partir de XML a partir de un fichero, de esta forma:

csc /doc:doc.xml mylangdoc.cs

De la misma forma, usando la herramienta xsd permite convertir definiciones de clase en definiciones de tipos de datos en XML y viceversa, usándolo de esta forma:

xsd.exe /c car.xsd

convierte una definición de clase en código C#, o, de forma análoga, pero al contrario:

xsd.exe car.exe

que convierte un ensamblaje en una definición de tipo de datos en XML

La mayoría de los navegadores actuales son capaces de entender XML. Por ejemplo, el Internet Explorer lee los ficheros XML y los trata de una forma especial, pudiendo presentar la jerarquía a diferentes niveles. Otros navegadores, como el Mozilla o el Netscape, también entienden XML, aunque no permiten editarlo de forma adecuada ni de presentarlo de forma jerárquica como el IE. En algunos casos, son capaces también de aplicar transformaciones tales como XSLT o CSS (cascading style sheets).

Contenido de esta sección
  • XML bien formado
  • Primer documento XML
  • Constituyentes adicionales de un documento XML

XML bien formado

Como lenguaje de anotación, las sentencias en XML consisten en una serie de etiquetas (llamadas elementos) con una serie de modificadores (llamados atributos). Las etiquetas pueden estar anidadas unas dentro de otras, pero toda etiqueta que se abra se tiene que cerrar, y siempre en el mismo orden. En caso de que un elemento no tenga pareja (por no tener ningún contenido dentro), se le denomina elemento vacío y se indica con un / al final. Los elementos se agrupan en documentos, tales como el siguiente ( ej1.xml):

<?xml version="1.0" encoding='iso-8859-1' ?> <micasa> <habitacion id='comedor'> <mueble>aparador</mueble> <mueble>sofá</mueble> <puerta a='balcón' /> </habitacion> </micasa>

Todos los documentos XML deben estar bien formados, y este es el requisito mínimo que deben cumplir los documentos. Eso que significa que se debe cumplir lo siguiente:

árbol xml del fichero
	 ej1.xml

En este caso usamos un documento XML para describir las estancias de una casa. Con él podemos hacer poca cosa, salvo analizarlo a ver si es correcto. Lo podemos hacer usando el parser XML de Jeremie, que nos dará un resultado tal como el de la imagen.

Lo que ocurre con el parser este es que se lo traga todo, y ya puede uno meter los errores que sean, que no da ninguno. Por eso, merece la pena usar un parser tal como el Xerces, que te puedes bajar directamente de aquí. Para usarlo, tenemos que dar las órdenes siguientes (en Windows)

: set PATH=%PATH%;c:\jdk1.1.8\bin set CLASSPATH=%CLASSPATH%;c:\xerces-1_4_4\xerces.jar;c:\xerces-1_4_4\xercesSamples.jar cd c:\xerces-1_4_4 java dom.DOMWriter fichero.xml

Habrá que dar, en cada caso, el camino a donde esté instalado, de forma efectiva, el Xerces y la máquina virtual Java. En caso de tratarse de Linux, las órdenes serán así:

set PATH=$PATH:/usr/jdk1.1.8/bin set CLASSPATH=$CLASSPATH:/usr/local/xerces-1_4_4/xerces.jar:/usr/local/xerces-1_4_4/xercesSamples.jar cd /usr/local/xerces-1_4_4 java dom.DOMWriter fichero.xml

Por ejemplo, en el caso del fichero anterior, el resultado sería algo así:

mellizo:~$ java -cp /home/jmerelo/soft/xerces-1_4_4/xerces.jar:/home/jmerelo/soft/xerces-1_4_4/xercesSamples.jar dom.DOMWriter public_html/xml/ej1.xml public_html/xml/ej1.xml: <?xml version="1.0" encoding="UTF-8"?> <micasa> <habitacion id="comedor"> <mueble>aparador</mueble> <mueble>sofá</mueble> </habitacion> </micasa>

Que es muy parecido al original, salvo que la codificación ha sido cambiada a UTF-8 (un método de codificar caracteres UNICODE), y por eso los acentos aparecen de forma extraña. En este caso, la clase dom.Domwriter lo que hace es leer el fichero de entrada, validarlo, y escribirlo en la salida con indentaciones. En caso de que hubiéramos introducido un error, por ejemplo, el fichero siguiente:

<?xml version="1.0" encoding="iso-8859-1"?> <micasa> <habitacion id="comedor"> <mueble>aparador</mueble> <mueble>sofá</mueble> </habitacion> <aqui-peta> </micasa>

Nos daría un error de este estilo:

public_html/xml/ej2-peta.xml: [Fatal Error] ej2-peta.xml:8:9: The element type "aqui-peta" must be terminated by the matching end-tag "".

Que indica que, efectivamente, el elemento tipo aqui-peta debe de estar emparejado con su anti-elemento correspondiente.

ENTIDAD CARACTER
&amp;&
&lt;<
&gt;>
&apos;'
&quot;"

En un documento XML, aparte de elementos y atributos, puede haber otras cosas: entidades, que representan símbolos "atómicos", que habitualmente deben ser entendidos por el navegador, y que se muestran en la tabla adjunta; como se ve, las entidades van encerradas entre los símbolos & y ;; comentarios, que se procesan de forma diferente al texto, y que, tal como en HTML, van precedidos por <!-- y acaban con -->; secciones CDATA, que sirven para extraer del documento XML una sección, que va a ser interpretada tal cual, sin hacer ninguna modificación. Puede servir, por ejemplo, para meter HTML "mal-formado" dentro de un documento XML. Por ejemplo, el documento siguiente incluiría todas los elementos anteriores (ej3.xml):

<?xml version="1.0" encoding="iso-8859-1"?> <!-- Descripción de los elementos de una casa soñada --> <micasa> <habitacion id="comedor"> <mueble>aparador</mueble> <mueble>sofá "de época"</mueble> </habitacion> <habitacion id="cocina"> <mueble><![CDATA[ <p>En la pared de la derecha hay un frigorífico <p>Y en la de la izquierda, sólo mugre ]]></mueble> <mueble>fregadero</mueble> </habitacion> </micasa>

En este caso, al procesarlo con Xerces, la salida dejará fuera los comentarios, que no forman parte del documento, a no ser que se quieran usar de verdad.

Ejercicios 1. Crear un documento XML, que contenga la descripción de un equipo de la liga (jugadores, nombre, entrenador). Procesarlo en el parser JavaScript, y con el Xerces. Usar alternativamente un editor para Windows. Comprobar que es XML válido.
2. Crear un documento XML que describa varios libros de una biblioteca o librería, con título, autores, resumen, editorial y los datos que se quieran incluir.

Contenido de esta sección
  • Espacios de nombres

Cada cosa en su sitio: XML namespaces

Si todo el mundo fuera definiendo etiquetas por ahí, un documento acabaría siendo un caos de diferentes etiquetas procedentes de diferentes sitios, y, lo que es peor, de etiquetas con el mismo nombre que, en realidad, significan cosas diferentes. El concepto de espacios de nombres (namespaces) permite particionar el conjunto de todos los nombres posibles, de forma que se pueda definir a qué zona de ese espacio corresponde una etiqueta. De esta forma, etiquetas con el mismo nombre, pero definidas por dos autores diferentes, pueden diferenciarse en el espacio de nombres. El espacio de nombres no es esencial en todos los documentos, pero resulta útil cuando se usan etiquetas procedentes de diferentes procedencias (por ejemplo, etiquetas nuevas dentro de un documento XML), o etiquetas que se quieren procesar de forma diferente. El especio de nombres de una etiqueta se indica con un prefijo y :, como en este caso: <namespace:etiqueta>. Por ejemplo, se usan espacios de nombres en el documento siguiente (ej4.xml): <mc:micasa xmlns:mc='http://www.geneura.org/micasa'> <mc:habitacion mc:id="comedor"> <mc:mueble>aparador</mc:mueble> <mc:mueble>sofá "de época"</mc:mueble> </mc:habitacion> </mc:micasa>

En caso de que no se especifique ningún prefijo, se puede también especificar qué espacio de nombres sigue, por defecto, el documento:

<micasa xmlns='http://www.geneura.org/micasa'> <habitacion id="comedor"> <mueble>aparador</mueble> <mueble>sofá "de época"</mueble> </habitacion> </micasa>

Conviene recordar que el prefijo de un espacio de nombres es totalmente arbitrario; lo que define un espacio de nombres es, en realidad, el URI.

En este documento, donde hemos suprimido elementos que ya se han explicado, se usa la primera línea para declarar el prefijo del espacio de nombres mediante el atributo xmlns (XML namespace). En este caso, hemos elegido el prefijo mc. A la vez, el espacio de nombres tiene que tener asignado un URI (Universal Resource Identification), que es básicamente algo que parece una dirección web, pero que no lo es. Lo único que se requiere de este URI es que sea único en el documento; además, es aconsejable que sea siempre el mismo cuando se use el mismo namespace, aunque no es estrictamente necesario, ni se puede comprobar. El que sea un URI significa, entre otras cosas, que si uno se mete en esa dirección no tiene porqué haber nada. Se trata simplemente de asignar un identificador único.

En el resto de los elementos se sigue usando el espacio de nombres. Incluso se puede usar en los atributos, si pertenecen al mismo espacio de nombres.

Un documento XML puede tener tantos espacios de nombres como se quieran declarar, y se pueden mezclar elementos de diferentes espacios de nombres, e incluso sin ningún espacio, tal como se hace en el siguiente ejemplo (ej5.xml):

<mc:micasa xmlns:mc='http://www.geneura.org/micasa' xmlns:mueble='http://www.geneura.org/mueble'> <mc:habitacion id="comedor"> <mc:mueble>aparador</mc:mueble> <mc:mueble><mueble:nombre>Sofá</mueble:nombre> <mueble:descripcion>Peludo</mueble:descripcion> <mueble:tamano>Inconmensurable</mueble:tamano> </mc:mueble> </mc:habitacion> </mc:micasa>

En este caso, hemos declarado dos espacios de nombres, mc y mueble, y cada uno lo usamos para una cosa diferente. Incluso un atributo, id, se usa sin espacio de nombres.

Conviene usar los espacios de nombres cuando no hay otro remedio, o cuando hay que combinar conjuntos de etiquetas XML procedentes de difefentes procedencias. En todo caso, en la documentación de un conjunto de etiquetas conviene especificar un espacio de nombres, para que se las pueda identificar fácilmente cuando aparezcan en un documento. Más adelante, cuando se vean los DTDs, los espacios de nombres servirán para especificar qué diccionario de datos usar en cada momento; un URI también identifica un diccionario de datos.

Ejercicios
1. Con los equipos de la liga anteriores, usar diferentes espacio de nombres para el equipo en sí y para sus componentes. Por ejemplo, los elementos que se incluyan dentro de un jugador pueden tener un espacio de nombres, mientras que la descripción de un equipo puede tener otro diferente

Contenido de esta sección
  • XSchema y DTDs
  • Validando XML

XML y diccionarios de datos

En algunos casos, es necesario validaar que un documento XML es correcto, es decir, que las etiquetas que se usan son correctas y que están anidadas de la forma adecuada. Por ejemplo, en el caso anterior, es conveniente comprobar que la etiqueta raíz es siempre micasa, que la casa está compuesta de habitaciones, y las habitaciones tienen muebles y puertas a otros sitios. Incluso se podría intentar que las puertas fueran a otras habitaciones válidas, aunque es mucho pedir.

Para ello se pueden usar dos herramientas: DTD, o data type dictionnary, o bien XSchema, el equivalente en XML. Un XSchema describe la sintaxis correcta de un documento XML. En el caso de los documentos que hemos visto hasta este momento, hay que seguir una serie de pasos para crear un XML Schema. La forma más fácil de hacerlo es usando alguna utilidad generadora, tal como DTDGenerator, que crea un DTD tal como el siguiente (ligeramente retocado):<!ELEMENT habitacion ( mueble+, puerta+ ) > <!ATTLIST habitacion id NMTOKEN #REQUIRED > <!ELEMENT micasa ( habitacion+ ) > <!ELEMENT mueble ( #PCDATA ) > <!ELEMENT puerta EMPTY > <!ATTLIST puerta a NMTOKEN #REQUIRED >

Este DTD se puede usar para validar los ficheros XML anteriores, aunque usaremos XSchema más adelante. Lo que indica es que una habitacion tiene uno o varios muebles, y una o varias puertas (que se indica con +); a su vez, micasa puede tener una o más habitaciones, y cada uno de los elementos pueden tener los atributos que se indican con la sentencia ATTLIST. Como se puede ver, no se trata de XML, aunque se le parezca. Por eso, usando una pequeña utilidad escrita en Perl llamada dtd2xsd.pl se puede convertir a XSchema (el resultado está en micasa.xsd, aunque, como en el caso anterior hemos tenido que retocar alguna cosilla):

<schema xmlns='http://www.w3.org/2000/10/XMLSchema' targetNamespace='http://www.w3.org/namespace/' xmlns:t='http://www.w3.org/namespace/'> <element name='habitacion'> <complexType> <sequence> <element ref='t:mueble' maxOccurs='unbounded'/> <element ref='t:puerta' maxOccurs='unbounded'/> </sequence> <attribute name='id' type='NMTOKEN' use='required'/> </complexType> </element> <element name='micasa'> <complexType> <sequence> <element ref='t:habitacion' maxOccurs='unbounded'/> </sequence> </complexType> </element> <element name='mueble' type="string" /> <element name='puerta'> <complexType> <attribute name='a' type='NMTOKEN' use='required'/> </complexType> </element> </schema>

Este documento declara un espacio de nombres por defecto en la primera línea, que es el que corresponde a los XML Schemas; eso quiere decir que, si no se usa ningún prefijo, los elementos pertenecerán a ese espacio de nombres. También declara un espacio de nombres "objetivo" (targetNamespace), que será el que se está validando, y un prefijo para el mismo, t.

A continuación, se declaran todos los elementos, usando, como es natural, element. Los elementos pueden ser tipos simples (tal como en este caso lo es mueble), o complejos (todos los demás). En el caso del elemento simple, basta declarar el tipo, en este caso, una cadena o string.

Los elementos complejos son los que incluyen diferentes elementos anidados (que se declaran con sequence), atributos (attribute). Para cada elemento que puede aparecer dentro de un elemento complejo, se declara el número mínimo y máximo de veces que debe o puede aparecer ((min|max)Occurs). Por ejemplo, si queremos que en cada habitació haya al menos una puerta (porque si no, a ver cómo vas a entrar, listo), se puede indicar así: <element ref='t:puerta' minOccurs='1' maxOccurs='unbounded'/> , y, evidentemente, a qué elemento se refiere; como son elementos del espacio "target", se usa el prefijo t. Para los atributos, se indica si son obligatorios mediante el atributo use, y de qué tipo son.

Sin embargo, este Schema, como está generado automáticamente, puede simplificarse. Especialmente, se pueden sustituir referencias (indicadas con el atributo ref) a otros elementos con los elementos en sí. El código quedaría de esta forma:

<schema xmlns='http://www.w3.org/2001/XMLSchema'> <element name='micasa'> <complexType> <sequence> <element name='habitacion' minOccurs='1' maxOccurs='unbounded' > <complexType> <sequence> <element name='mueble' type='string' maxOccurs='unbounded'/> <element name='puerta' maxOccurs='unbounded'> <complexType> <attribute name='a' type='NMTOKEN' use='required'/> </complexType> </element> </sequence> <attribute name='id' type='NMTOKEN' use='required'/> </complexType> </element> </sequence> </complexType> </element> </schema>

Este Schema ejemplo se puede usar, evidentemente, para validar los ejemplso anteriores. Para ello, dentro del mismo ejemplo, basta con indicar qué XSchema o DTD es el que siguen. Por ejemplo, se puede añadir lo siguiente al principio <!DOCTYPE micasa PUBLIC "MI CASA" "micasa.dtd"> (tal como se muestra en el fichero ej6.xml, justo después de la declaración de XML, para que use ese DTD para validar. Si se quiere usar un XSchema, hay algunas formas no estándar (que se suelen usar con los XSchemata de Microsoft), pero la forma estándar es incluir una serie de atributos en la etiqueta raíz, de esta forma:

<micasa xmlns:xsi='http://www.geneura.org/micasa' xsi:noNamespaceSchemaLocation='micasa.xsd'>

Para analizar el documento y validarlo a la vez, hay que irse a la última versión de Xerces, la 2; la primera no le hace mucho caso a los XSchemas:

java dom.Writer /donde/sea/xerces-2_0_2/xercesImpl.jar: /donde/sea/xerces-2_0_2/xercesSamples.jar: /donde/sea/xerces-2_0_2/xmlParserAPIs.jar dom.Writer -v -s ej7.xml

En caso de que haya algún error en el Schema o en el XML, el analizador lo indicaría.

Para terminar, se puede echar un vistazo a xml.com, donde hay un excelente tutorial sobre cómo comenzar a usar los XML Schemas.

Ejercicios
1. Diseñar un XSchema para un documento XML que describa una quiniela, incluyendo resultados. Tener en cuenta que una quiniela tiene 15 partidos sólo. Hacer un documento XML que siga ese XML Schema, y validarlo usando Xerces2 o algún otro parser con validación.

Bibliografía y enlaces relacionados con XML

Libros relacionados con XML

Para empezar, y como casi siempre, un libro de O'Reilly: Learning XML by Erik T. Ray (2nd Edition), un libro introductorio, de 350 páginas, que incluye los conceptos básicos: etiquetas, enlaces, modelos de documento, y transformaciones, incluyendo un poco de programación. Útil para quien no ha tenido suficiente con este tutorial, y quiere ir un poco más allá.
XML Bible (2nd Edition) de Elliotte Rusty Harold, la Biblia de XML, ya en su segunda edición, es un libro mucho más extenso, con muchas más páginas, que describe con más profundidad cada uno de los reinos del mundo XML: DTDs, RDF, XSLT, CSS, y algunas aplicaciones de XML como VML y XHTML. Recomendable si el libro anterior se queda pequeño, o como libro de referencia en XML.
Si trabajas en Perl, acaba de publicarse Perl & XML (O'Reilly Perl) by Erik T. Ray, Jason McIntosh, también de O'Reilly. Trata de todos los módulos que se usan para trabajar con XML en Perl, poniendo un poco de orden en el tema. También incluye módulos un poco más avanzados, como SOAP::Lite.
Si trabajas en Java, un libro excelente es Java & XML, 2nd Edition: Solutions to Real-World Problems, de Brett McLaughlin, también de O'Reilly. Trata de todo tipo de librerías para trabajar con Java y XML, y acaba de actualizarse a su segunda edición. Incluso aunque no sepas Java, puede servir de introducción a ambos. También habla de como tratar con XML desde JSPs o servlets, y de cómo usar hojas de estilo XSLT.

Una serie de tutoriales en castellano de XML: el tutorial de Javi García Castellano, una excelente introducción, que cubre XML sin validar, DTDs, espacios de nombres y el modelo de objectos de documento. También dentro de nuestro servidor, Maribel García hace una introducción a los conceptos generales de XML. En otro sitio, podemos encontrar un breve tutorial de Alfredo Reino, que incide en la creación de documentos XML, y, finalmente, una traducción al castellano de la especificación de XML. Programacion.net aloja también un tutorial de XML.

En la universidad Carlos III de Madrid se aloja XML-ES, que contiene información diversa, proyectos basados en XML, y diversos tutoriales. Son casi unos históricos, con más de 2 años. Finalmente, si necesitas ayuda, podéis acudir a la lista de correo xml-es de informaticos.biz.


Juan Julian Merelo Guervos
Last modified: Wed Nov 10 10:43:15 CET 2004