Anuncios Gratis    │   Como publicar aquí   │   Contacto

 

 

 

breve curso de xml

 
QUE ES 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 de 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 publicación, de basado en el programa a 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. Como alternativas de pago (y bien pagadas) están el Bea Weblogic, y el IBM 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 de SOAP.

Dentro de estos entornos de desarrollo, 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 transformaciones fáciles para presentarlo. 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. 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:

  • si no se utiliza DTD, el documento debe comenzar con un Declaración de Documento Standalone, tal como la que se pone en la primera línea.
  • todas las etiquetas deben estar equilibradas: esto es, todos los elementos que contengan datos de tipo carácter deben tener etiquetas de principio y fin
  • todos los valores de los atributos deben ir entrecomillados (el carácter comilla simple [el apóstrofe] puede utilizarse si el valor contiene caracteres comillas dobles, y viceversa): si necesitas ambos, utiliza &apos; y &quot;. Así es como se hace en el elemento habitacion
  • cualquier elemento VACÍO (p.e. aquellos que no tienen etiqueta final como <IMG>, <HR>, y <BR> y otros de HTML) deben terminar con '/>' o debes hacerlos no VACÍOS añadiéndoles una etiqueta de fin, tal como se ve en el elemento puerta.
  • no debe haber etiquetas aisladas (< ó &) en el texto (p.e. debe darse como &lt; y &amp;), y la secuencia ]]> debe darse como ]]&gt; si no ocurre esto como final de una sección marcada como CDATA;
  • los elementos deben anidar dentro de sí sus propiedades (no se deben sobreponer etiquetas, como en el resto de SGML);
  • Los ficheros bien-formados sin-DTD pueden utilizar atributos en sus elementos, pero éstos deben ser todos del tipo CDATA, por defecto. El tipo CDATA (character DATA) son caracteres..
  • Los nombres de las etiquetas pueden ser alfanuméricos, comenzando con una letra, e incluyendo los caracteres - y :, aunque este último tiene un significado especial.
á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 :: <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 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 muebles, y cada uno lo usamos para una cosa diferente. Incluso un atributo, id, se usa sin espacio de nombres.

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:

6lt;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.

Mas recursos gratuitos para Webmasters aqui

Ver historial de noticias

 

 

 

Pagina principal   |   Como incluir un anuncio aquí   |   Publicidad   |   Noticias & Actualidad   |   Anuncios gratis    |   ¡TV en vivo!
Casinos online  -  Bingo online  -  Juegos de casino gratis  -  Loterías Mundiales
© Copyright 2003 - 2015 SitiosEspana.com - Permitido el uso del contenido citando la fuente