|
Curso de Microsoft .NET Servicios Web y .Net XSLT, hojas de estilo Página principal del grupo GeNeura |
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 |
|---|
|
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.
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 |
|---|
|
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:
habitacion puerta.
- y
:, aunque este último tiene un significado especial.
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 |
|---|---|
| & | & |
| < | < |
| > | > |
| ' | ' |
| " | " |
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 |
|---|
|
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 |
|---|
|
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.
| 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.