el trabajo de xml

http://zerhoexml.blogdiario.com/img/tareadexlm.doc

tarea xml

IntroducciŽon al XML

Jaime E. Villate.

Universidad de Oporto

villate@fe.up.pt

5 de mayo de 2001

Resumen

Estas notas han sido preparadas para el Seminario sobre ProgramaciŽon en entorno GNU/

Linux, en la universidad Rey Juan Carlos, Madrid, Espa˜na. El estŽandar XML ha ganado

mucha popularidad recientemente, debido a su gran utilidad para estructurar informaciŽon y

por ser un estŽandar abierto y bastante difundido.

Copyright c 2001, Jaime E. Villate. Este artŽęculo puede ser copiado y distribuido por

cualquier medio, siempre y cuando se mantenga esta nota.

1 IntroducciŽon

XML significa lenguaje de marcas generalizado (Extensible Markup Language). Es un lenguaje

usado para estructurar informaciŽon en un documento o en general en cualquier fichero que contenga

texto, como por ejemplo ficheros de configuraciŽon de un programa o una tabla de datos.

Ha ganado muchŽęsima popularidad en los Žultimos a˜nos debido a ser un estŽandar abierto y libre,

creado por el ConsŽorcio World Wide Web, W3C (los creadores de la www), en colaboraciŽon con

un panel que incluye representantes de las principales compa˜nŽęas productoras de software.

El XML fue propuesto en 1996, y la primera especificaciŽon apareciŽo en 1998. Desde entonces

su uso ha tenido un crecimiento acelerado, que se espera que continŽue durante los prŽoximos a˜nos;

hoy en dŽęa parece que de repente todo el mundo estŽa usando, o quiere usar, XML.

1.1 Ventajas del XML

Antes de ser lanzado el XML, ya existŽęan otros lenguajes de marcas, como por ejemplo el HTML,

basados en el lenguaje generalizado de marcas (SGML). El problema con el SGML es que por

ser muy flexible y muy general, se torna difŽęcil el anŽalisis sintŽactico de un documento y la especificaci

Žon de la estructura (que como veremos mas adelante se incluye en otro documento llamado

DTD). XML es mŽas exigente que SGML en la sintaxis, lo que hace mŽas fŽacil la construcciŽon de

librerŽęas para procesarlo.

Comparado con otros sistemas usados para crear documentos, el XML tiene la ventaja de poder

ser mas exigente en cuanto a la organizaciŽon del documento, lo cual resulta en documentos

Introducci Žon al XML 2

mejor estructurados. Por ejemplo en LaTeX existen tambiŽen “marcas” que permiten estructurar

un documento, por ejemplo identificando el nombre del autor y el tŽętulo del documento – los comandos

nauthor y ntitle – sin embargo no existe forma de obligar a los autores de documentos

a que usen estas marcas y algunos de ellos pueden introducir el tŽętulo de forma que aparezca

visualmente igual a lo que se obtiene cuando se usa nauthor y nmaketitle, sin usar esos comandos;

esto conlleva a problemas cuando queremos extraer de forma automŽatica el tŽętulo de varios

documentos.

Por ser posible exigir la estructura que deben tener un tipo determinado de documentos, se

vuelve posible extraer informaciŽon de varios documentos automŽaticamente, por ejemplo para

crear bases de datos o listados con informaciŽon sobre todos los documentos.

2 Conceptos bŽasicos

Los ficheros XML son ficheros de texto, que en principio estŽa en cŽodigo Unicode, pero se pueden

usar otros alfabetos como el latin-1. Existen cinco caracteres especiales en XML: los sŽęmbolos

menor que, <, mayor que, >, las comillas dobles, ”, el apŽostrofe ’ y el caracter &. Los sŽęmbolos

mayor que y menor que se usan para delimitar las marcas que dan la estructura al documento.

Cada marca tiene un nombre; veamos un ejemplo: la marca <figura>, que puede tener uno o mŽas

atributos: <figura fichero=”foto1.jpg”tipo=”jpeg”> tiene dos atributos, “fichero” y “tipo”. Los

atributos toman valores que tienen que estar entre comillas o entre apŽostrofes.

Cuando sea necesario usar uno de los 5 caracteres especiales en el texto, para evitar que sean

interpretados de forma especial se usan las siguientes entidades: &lt;, &gt;, &quot;, &apos;,

&amp;, para <, >, ”, ’ y &, respectivamente. Esto explica tambiŽen porque & es un caracter

especial: se usa para representar entidades; una entidad es un caracter adicional que no hace

parte del alfabeto usado por defecto en el texto (los caracteres especiales obviamente quedan

excluidos del alfabeto usado para el texto) comienza por &, seguido del nombre de la entidad e

inmediatamente un punto y coma1.

Una diferencia importante con SGML, y en particular HTML, es que los nombres de las marcas

y de sus atributos distinguen entre mayŽusculas y minŽusculas; <a> y <A> serian dos marcas

diferentes. Normalmente se suelen usar Žunicamente minŽusculas para los nombres de las marcas y

de sus atributos. Otra diferencia sobresaliente con SGML es que en XML ninguna marca se puede

dejar abierta; o sea, por cada marca, por ejemplo <p> deberŽa existir una marca correspondiente

</p> que indica donde termina el contenido de la marca. En el siguiente ejemplo:

<refrŽan>El que mucho abarca, poco aprieta</refrŽan>

El contenido de la marca “refrŽan” esta claramente delimitado entre <refrŽan> y </refrŽan>. Si

una marca cualquiera no contiene ningŽun texto, por ejemplo <hr></hr>, se puede abreviar de la

siguiente forma: <hr/>, pero nŽotese que la primera forma tambiŽen es vŽalida, en cambio escribir

Žunicamente <hr> o <hr> darŽęa un error.

1 Ya veremos mŽas adelante que realmente existen otros tipos de entidades.

2.1 DefiniciŽon del tipo de documento (DTD) 3

2.1 DefiniciŽon del tipo de documento (DTD)

Las posibles marcas que pueden aparecer en un documento XML y los atributos que estas pueden

tener, son definidos en un fichero llamado “DefiniciŽon del Tipo de Documento” (en inglŽes “Document

Type Definition”) o simplemente DTD. Cada documento XML debe indicar al comienzo

el DTD usado por medio de una marca <!DOCTYPE>; por ejemplo

<!DOCTYPE xbel

PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML"

"http://www.python.org/topics/xml/dtds/xbel-1.0.dtd">

Esta marca indica que lo que viene a continuaciŽon en el fichero es una marca “xbel” (con

todas sus posibles sub-marcas), que ha sido definida en un DTD que se llama “XML Bookmark

Exchange Language 1.0”. La palabra clave PUBLIC precede al nombre oficial que se le ha dado

al DTD respectivo; en este caso esa indicaciŽon nos da alguna indicaciŽon adicional al nombre del

DTD: el sŽęmbolo + indica que es un DTD reconocido por alguna entidad oficial, en este caso

python.org como lo indica la palabra clave IDN, el lenguaje usado en el DTD es el inglŽes (EN)

y la sintaxis usada es sintaxis XML. Realmente el nombre que viene entre comillas despuŽes de

PUBLIC es algo arbitrario, pero como en cada sistema existe un catŽalogo SGML que identifica

los DTD disponibles en el sistema, lo importante es usar exactamente el nombre que aparezca

en el catŽalogo. Y para que documentos que usen el mismo DTD puedan ser transportables entre

sistemas convienen usar la identificaciŽon exacta sugerida por el autor del DTD.

DespuŽes del identificador pŽublico (lo que estŽa entre comillas despuŽes de PUBLIC) puede

venir un identificador del sistema que indica el camino y nombre del fichero donde se encuentra

el DTD; en el ejemplo anterior el identificador del sistema es una URL que indica donde se puede

encontrar el DTD usado.

Un fichero DTD define siempre una o mŽas estructuras jerŽarquicas, con una marca principal,

o padre, compuesta por otras marcas, o hijos. La figura 1 muestra la estructura de un DTD

simple, con un elemento principal <article>. Dentro del elemento principal pueden aparecer

otros elementos: <artheader>, <sect1> y <index>, y estos a su vez se componen de otros

elementos.

El DTD puede ser dise˜nado de forma a hacer obligatorio el uso de algunos sub-elementos y

limitar el nŽumero de veces que un elemento puede aparecer y el orden de los elementos. De esta

forma el DTD puede ser bastante flexible o tan exigente como se desee, para forzar a los autores

a ce˜nirse a un determinado estilo.

Un documento XML que especifique el DTD usado y siga las reglas en Žel definidas, se dice que

es un documento XML vŽalido. Se pueden tambiŽen crear documentos que no especifiquen ningŽun

DTD pero que sigan las reglas mŽęnimas del XML; en este caso el documento XML se denomina

“conforme” (en inglŽes conforming); existen programas para comprobar si un documento es vŽalido

(comprobar que el DTD existe y que la estructura del documento respeta las reglas definidas por

el DTD).

2.2 Entidades 4

Figura 1: Estructura jerŽarquica de un DTD.

2.2 Entidades

En la secciŽon anterior ya hablamos de un tipo de entidades que se usan para representar caracteres

adicionales al alfabeto usado. La Žunicas entidades de ese tipo que estŽan pre-definidas en XML son

las cinco que ya mencionamos: &lt;, &gt;, &quot;, &amp;, ’. Cualquier otra entidad adicional que

queramos usar tendrŽa que estar definida previamente en el DTD usado. Por ejemplo, si estamos

usando el alfabeto latin-1, que incluye el caracter c, pero no sabemos como obtenerlo con el

teclado, podremos definir una entidad &copy;. La definiciŽon se hace usando la marca ENTITY,

de la siguiente forma

<!ENTITY copy "&#169;">

El nŽumero decimal 169 es el cŽodigo que le corresponde al caracter c en el alfabeto latin-

1; tambiŽen podrŽęamos haber usado la representaciŽon hexadecimal #xA9;. La definiciŽon de una

entidad como la anterior puede ya formar parte del DTD, o puede ser adicionada por el autor

del documento XML, dentro de la propia declaraciŽon del DTD del documento. Por ejemplo la

fuente de este manual que estŽa leyendo es un fichero XML con la siguiente definiciŽon de tipo de

documento

<!DOCTYPE article PUBLIC "-//laespiral.org//DTD LE-document 1.1//EN"

"LE-document-1.1.dtd" [<!ENTITY copy "&#169;">] >

Entre los parŽentesis cuadrados pueden ir varias definiciones de entidades.

El valor de una entidad no estŽa limitado a ser un caracter, sino que puede ser cualquier texto.

Por ejemplo si definimos la entidad &qed; de la siguiente manera

<!ENTITY qed "Que es lo que querŽęamos demostrar">

2.3 Ficheros XML 5

Cada vez que en el documento se escriba &qed;, serŽa substituido por el texto Que es lo que

querŽęamos demostrar.

Una entidad se puede usar tambiŽen para insertar el contenido completo de un fichero en un

punto del documento, si se define de la siguiente forma

<!ENTITY nombre SYSTEM "fichero.txt">

El fichero puede incluir hasta marcas y cualquier otro texto que sea vŽalido en el punto donde

aparezca &nombre;.

Existen otro tipo de entidades internas, que no pueden ser usadas en un documento XML sino

Žunicamente dentro de un DTD. Estas comienzan por el caracter especial % en vez de & en la

secciŽon sobre construcciŽon de DTDs hablaremos mŽas sobre ellas.

2.3 Ficheros XML

a los ficheros XML se les suele dar un nombre terminado en .xml para identificarlos como xml.

Esto es simplemente una convenciŽon para los usuarios; el estŽandar XML 1.0 indica que para

identificar un fichero como XML es necesario que la primera lŽęnea tenga el siguiente contenido

<?xml version="1.0" ?>

Dentro de esta marca puede ir otra informaciŽon adicional. El alfabeto usado por defecto en los

ficheros XML es el Unicode; para documentos en espa˜nol serŽa mas conveniente usar el alfabeto

latin-1, lo cual se logra usando el atributo encoding de la marca xml

<?xml version="1.0" encoding="iso-8859-1" ?>

3 ConstrucciŽon de DTD’s

El DTD suele estar dentro de un fichero con extensiŽon dtd, pero puede incluso ser definido dentro

de la propia marca DOCTYPE en el documento XML. Veamos un ejemplo muy simple de un

fichero XML que incluye tambiŽen el DTD

<?xml version="1.0" encoding="iso-8859-1" ?>

<!DOCTYPE cd[

<!ELEMENT cd (titulo, artista, pista+)>

<!ATTLIST cd fecha CDATA #IMPLIED>

<!ELEMENT titulo (#PCDATA)>

<!ELEMENT artista (#PCDATA)>

<!ELEMENT pista (#PCDATA)>

]>

<cd fecha="2001">

<titulo>Los poyitos dicen</titulo>

Introducci Žon al XML 6

<artista>Los ni˜nos cantores del Tirol</artista>

<pista>Pio, Pio, Pio.</pista>

<pista>Pio, Pio, Pio (versiŽon instrumental).</pista>

<pista>Pio, Pio, Pio (versiŽon extendida).</pista>

</cd>

El elemento principal definido en el DTD es cd, el cual tiene que tener inicialmente una marca

titulo, seguida de una marca artista y finalmente seguida de una o mas marcas pista; el sŽęmbolo

mŽas al lado de la marca pista, en la definiciŽon del elemento cd, indica que tiene que aparecer

por lo menos una vez. Otros modificares usados son *, que significa cualquier nŽumero de veces

incluyendo cero, y ? que indica que puede no aparecer o aparecer a lo sumo una vez; si no aparece

ningŽun modificador, la marca respectiva debe aparecer exactamente una vez.

Si queremos que el orden de los sub-elementos tŽętulo y artista de cd pueda ser arbitrario

podemos usar la siguiente construcciŽon

<!ELEMENT cd ((titulo | artista)*, pista+)>

Pero en este caso estarŽęamos permitiendo que aparezca mŽas de un tŽętulo o autor (o ninguno).

El elemento cd acepta un atributo llamado fecha. Para indicar que el contenido de un atributo

o elemento puede ser una combinaciŽon de caracteres del alfabeto usado, empleamos la palabra

clave CDATA, en el caso de los atributos, y #PCDATA en el caso de los elementos; otras posibilidades

para el tipo de datos de los atributos son NMTOKEN, cuando solo puedan tener valores

numŽericos, ID cuando sea un cŽodigo de identificaciŽon que tenga un valor Žunico, e IDREF cuando

tenga que ser una referencia a un cŽodigo de identificaciŽon ya existente. Los elementos tambiŽen

pueden incluir la palabra clave EMPTY cuando se trate de elementos que no pueden tener ningŽun

contenido.

La palabra clave #IMPLIED indica que el atributo es opcional; si fuera obligatorio se usarŽęa

en vez #REQUIRED, y si quisiŽeramos especificar una lista de posibles valores, se pondrŽęan entre

parŽentesis, separados por barras verticales, y despuŽes de los parŽentesis se escribirŽęa el valor por

defecto.

Como normalmente estaremos interesados en crear varios documentos con estructura semejante,

es mejor colocar el DTD en un fichero separado. El DTD del ejemplo anterior, dentro de un

fichero aparte, quedarŽęa asŽę:

<?xml version="1.0" encoding="iso-8859-1" ?>

<!ELEMENT cd (titulo, artista, pista+)>

<!ATTLIST cd fecha CDATA #IMPLIED>

<!ELEMENT titulo (#PCDATA)>

<!ELEMENT artista (#PCDATA)>

<!ELEMENT pista (#PCDATA)>

Introducci Žon al XML 7

Dentro del fichero del DTD se pueden usar entidades para simplificar su escritura. Por ejemplo,

una secciŽon del DTD LE-document-1.1.dtd es la siguiente

<!ENTITY % listtype " itemizedlist | orderedlist | variablelist |

simplelist | programlisting | figure | form | table " >

<!ELEMENT article (artheader, (para | sect1 | %listtype;)*, bibliography?) >

<!ATTLIST article lang CDATA #IMPLIED

xreflabel CDATA #IMPLIED

id ID #IMPLIED

parentbook IDREF #IMPLIED>

El DTD completo se puede ver en http://www.laespiral.org/xml/styles/LE-document-1.1.dtd

4 DTDs disponibles

La creaciŽon de un DTD es una tarea complicada, no por la parte del cŽodigo que se tiene que escribir,

sino porque el dise˜no de la estructura jerŽarquica y las marcas usadas es crucial en el Žexito de

un DTD. en algunas aplicaciones se necesita mucha experiencia para tomar las decisiones acertadas

sobre el dise˜no del DTD. Afortunadamente existen muchos grupos de expertos trabajando en

la creaciŽon de DTDs pŽublicos que pueden ser usados y libremente.

Un lŽęder en el campo de creaciŽon de DTDs es el propio consorcio W3C, que ya tiene varios

DTDs disponibles. Algunos de ellos son: SVG para grŽaficos vectoriales, MathML para ecuaciones

matemŽaticas y XHTML que es una versiŽon XML del DTD de HTML. Otros DTDs importantes

creados por otros grupos son DocBook (originalmente en SGML, pero ya en versiŽon XML) para

escribir libros, especialmente manuales de software, BioML y BSML para biologŽęa, CML para

quŽęmica, AML y AIML para astronomŽęa y TMX para traducciones.

5 Lenguajes de pŽaginas de estilo

Un elemento importante para poder estructurar la informaciŽon de un documento es separar el

contenido del documento de su formataciŽon. Quien estŽe familiarizado con LaTeX sabrŽa que una de

sus principales ventajas es que permite a los autores concentrarse en el contenido del documento,

sin tener que preocuparse mucho con la forma como serŽa presentado. El formato que se usa para

presentar el contenido estŽa definido en otro fichero, que define la documentclass, que ha sido

preparado por un experto, de manera que cualquier autor puede producir documentos de elevada

calidad tipogrŽafica sin mucho esfuerzo.

En HTML y XML ha habido tambiŽen un esfuerzo por separar el contenido de la formataciŽon

y dar la posibilidad de reutilizar un formato pre-definido. El formato usado lo define otro fichero

llamado una hoja de estilo (en inglŽes Style Sheet) usando un lenguaje propio para pŽaginas de

estilo.

5.1 CSSL 8

5.1 CSSL

CSSL significa Cascading Style Sheet Language, y es el lenguaje para pŽaginas de estilo desarrollado

por el consorcio W3 para ser usado en pŽaginas HTML. Un documento XML puede tambiŽen

hacer uso de una pŽagina de estilo CSS, en forma semejante a como se hace en una pŽagina HTML.

Pero no entraremos en detalles aquŽę, para concentrarnos en otro estŽandar mas reciente para pŽaginas

de estilo (XSL).

5.2 XSL

El lenguaje de pŽaginas de estilo que ha sido desarrollado por el consorcio W3C, para dar formato

a los documentos XML, se llama XSL, que es el acrŽonimo de Extensible Style-sheet Language.

Una pŽagina de estilo XSL permite modificar un documento XML, produciendo varios un resultado

que puede estar en varios formatos diferentes incluyendo el propio XML y HTML.

Una pŽagina de estilo XSL es tambiŽen un documento XML que usa el DTD xsl:stylesheet. El

comienzo de una pŽagina usada para producir HTML podrŽęa tener el siguiente contenido

<?xml version="1.0" encoding="iso-8859-1" ?>

<!DOCTYPE xsl:stylesheet [<!ENTITY nbsp "&#160;">]>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" encoding="iso-8859-1"

doctype-public="//w3c//dtd html 4.0 transitional//en"/>

En este caso se ha definido una entidad adicional que serŽa usada en el HTML producido, y

se ha especificado la informaciŽon que deberŽa aparecer en la marca DOCTYPE del fichero HTML

que se genere. El espacio de nombres usado; o sea la especificaciŽon de marcas usadas en XSL, se

ha definido con el atributo xmlns:xsl.

Todas las marcas de XSL comienzan con la secuencia xsl:. La marca bŽasica que realiza el

procesamiento del fichero XML, es la marca <xsl:template> que define la plantilla que se debe

usar para producir la salida de datos. Veamos un ejemplo

<xsl:template match="itemizedlist">

<ul>

<xsl:apply-templates/>

</ul>

</xsl:template>

Esta plantilla serŽa aplicada cada vez que aparezca una marca <itemizelist> en el documento

XML; al texto que aparezca entre <itemizelist> y la correspondiente </itemizelist>. En este caso

se usarŽa la marca que crea listas de items en HTML: <ul>. La marca <xsl:apply-templates/>

hace que el procesamiento continŽue, aplicando todas las otras plantillas que sean relevantes al

texto que se ha seleccionado (el contenido de <itemizelist>). Algo importante que se debe tener

en cuenta es que aunque queramos que en el fichero HTML de salida aparezca una marca vacŽęa

Introducci Žon al XML 9

como por ejemplo <br>, en la plantilla se debe escribir <br/>, pues la plantilla hace parte de un

documento XML; en la salida aparecerŽa <br> pues el resultado se presenta en HTML.

Si la pŽagina de estilo tuviera que producir LaTeX en vez de HTML, la plantilla correspondiente

a la anterior serŽęa

<xsl:template match="itemizedlist">

\begin{itemize}

<xsl:apply-templates/>

\end{itemize}

</xsl:template>

Las pŽaginas XSL usadas para producir las versiones LaTeX y HTML de este documento

pueden ser obtenidas en http://www.laespiral.org/xml/styles/

6 Herramientas GNU/Linux para XML

Existen varias herramientas disponibles en GNU/Linux para trabajar con ficheros XML. Muchos

programas ya usan XML tambiŽen como un medio de intercambiar informaciŽon o como especificaci

Žon para escribir los ficheros de configuraciŽon.

6.1 Catalogo SGML

En un sistema en el que se use XML para crear documentos, conviene que exista un catŽalogo de los

DTD disponibles y la informaciŽon de donde encontrarlos en el sistema. En Debian GNU/Linux,

las herramientas para crear y mantener el catŽalogo vienen dentro del paquete sgml-base; este

paquete incluye el programa install-sgmlcatalog que serŽa usado por otros paquetes que instalen

DTDs, para actualizar el catŽalogo, que se encuentra localizado en /etc/sgml.catalog.

Si por ejemplo quisiŽeramos instalar el DTD contenido en el fichero LE-document-1.1.dtd,

usarŽęamos el comando

install-sgmlcatalog --install catalogo le-document

Donde el fichero catalogo contendrŽęa la siguiente informaciŽon

-- SGML catalog for LE-document --

PUBLIC "-//laespiral.org//DTD LE-document 1.1//EN" "dtd/LE-document-1.1.dtd"

la Žultima parte en el comando install-sgmlcatalog, le-document, es un identificador que nos

permitirŽa despuŽes desinstalar el DTD por medio del comando

install-sgmlcatalog --remove le-document

Con la informaciŽon anterior introducida en el catŽalogo, tendrŽęamos que copiar el fichero LEdocument-

1.1.dtd en /usr/lib/sgml/dtd/, que es donde suelen estar los otros DTDs. Otro paquete

importante en Debian es el paquete sgml-data que instala varios DTDs conocidos.

6.2 Edici Žon de ficheros XML con Emacs 10

Figura 2: Comienzo de un documento XML usando LE-document.dtd.

6.2 EdiciŽon de ficheros XML con Emacs

Existe un paquete psgml que define un modo XML para el editor Emacs. Emacs junto con psgml

es bastante Žutil para editar ficheros XML. Para comenzar a escribir un documento, el primer paso

es crear un fichero con extensiŽon xml y con el siguiente contenido en las dos primeras lŽęneas:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE article PUBLIC "-//laespiral.org//DTD LE-document 1.1//EN"

"http://www.laespiral.org/xml/styles/LE-document-1.1.dtd">

En este caso vamos a usar el DTD “LE-document”, y vamos a utilizar caracteres latin-1. El

elemento principal en el documento serŽa <article>.

Si se abre con emacs un fichero con extensiŽon xml que tenga las dos lŽęneas anteriores, el

resultado serŽa como el de la figura 2

La extensiŽon xml del nombre del fichero ha hecho que emacs entre en el modo XML de psgml,

como se puede ver en el centro de la lŽęnea de estado (la lŽęnea negra en la parte inferior) y por la

apariciŽon de varios menŽus adicionales para trabajar con XML. El modo XML se ha encargado

tambiŽen de leer la lŽęnea que define el DTD y ha cargado el fichero LE-document-1.1.dtd (si

existe una copia local del DTD, se puede substituir la URL por el camino completo de esa copia).

En la lŽęnea de estado en la figura 2 se puede ver que el DTD ya ha sido leŽędo y analizado, pues

ya ha sido identificado el elemento principal del documento: “article”; tambiŽen puede ver alguna

6.2 Edici Žon de ficheros XML con Emacs 11

Figura 3: La estructura mŽęnima de un artŽęculo en LE-document.dtd.

informaciŽon sobre el DTD y los elementos que define, en el menŽu DTD que presenta psgml en

Emacs. Si no aparece esa informaciŽon, por ejemplo si comenzŽo a escribir las dos primeras lŽęneas

en un fichero vacŽęo, tendrŽa primero que asegurarse de que estŽa usando el modo XML, con el

comando “M-x xml-mode”, y despuŽes seleccionar la opciŽon “Parse DTD” en el menŽu DTD (o si

prefiere puede usar la secuencia “C-c C-p”).

DespuŽes de estar en modo XML y de haber seleccionado un DTD, se puede usar una opciŽon

de menŽu muy Žutil que nos permite escribir el documento rŽapidamente; se trata de la opciŽon Insert

Element, en el menŽu “Markup”. Esta opciŽon nos muestra una lista de los elementos que

son permitidos en el punto donde se encuentra el cursor; escogiendo un elemento en la lista,

son introducidas las etiquetas exigidas por ese elemento y si existe alguna informaciŽon adicional

obligatoria, serŽa pedida en el mini-bŽufer (la Žultima lŽęnea en la pantalla).

Otras formas de seleccionar estŽa opciŽon a partir del teclado es por medio de la secuencia

“C-c C-e” (TAB mostrarŽa la lista de posibilidades), o oprimiendo simultŽaneamente la tecla de

mayŽusculass y el botŽon derecho del ratŽon: aparece un cuadro con la lista de elementos vŽalidos;

por ejemplo en la figura 2 se acabŽo de pulsar “MayŽusculas+botŽon derecho” y ha aparecido una lista

con un Žunico elemento, article, que es el Žunico elemento que se puede seleccionar inicialmente.

Seleccionando este elemento, aparece toda la informaciŽon que se muestra en la figura 3.

El contenido de la figura 3 es la estructura mŽęnima que debe tener un artŽęculo que use el

DTD LE-document-1.1. El cursor ha sido desplazado al primer lugar donde se puede comenzar

a escribir texto: el tŽętulo del artŽęculo. DespuŽes de escribir el tŽętulo del artŽęculo, se puede usar la

6.3 Analizadores sint Ž acticos de XML/XSL 12

opciŽon Next data field, en el menŽu Move (o con el teclado: “C-c C-d”), para desplazarnos al

prŽoximo campo que debe ser rellenado.

6.3 Analizadores sintŽacticos de XML/XSL

Existen varios analizadores sintŽacticos de XML que permiten determinar si un documento XML

es vŽalido. Algunos ejemplos son nsgmls y rx. TambiŽen existen programas que aplican pŽaginas

de estilo XSL para transformar documentos XML en otros formatos como por ejemplo HTML;

tres ejemplos son Sablotron, Xalan y Libxslt. Por ejemplo, Sablotron ha sido usado para producir

versiones LaTeX y HTML de este documento:

sabcmd LE-document.xsl curso.xml >curso.html

sabcmd LE-document-latex.xsl curso.xml >curso.tex

Usando dos pŽaginas de estilo que se encuentran disponibles en http://www.laespiral.org/xml/styles/2.

La librerŽęa libxsltk, trae el programa xsltproc que tiene bŽasicamente las mismas funcionalidades

de sabcmd.

6.4 Cocoon

El proyecto Apache tiene un grupo dedicado exclusivamente al desarrollo de herramientas XML.

Ya han desarrollado programas Java para analizar y transformar XML (Xerces y Xalan) y un servlet

llamado Cocoon, que procesa documentos XML y les aplica las transformaciones indicadas

por una hoja de estilo XSL para producir HTML. De esta forma se puede configurar el servidor

http de Apache para que genere cŽodigo HTML dinŽamicamente, a partir de ficheros fuente XML.

6.5 DOM y SAX

Han sido desarrollados dos mŽetodos de analizar sintŽacticamente un documento XML. En el primer

mŽetodo, DOM (Document Object Model), se lee el documento completo y se identifica su

estructura jerŽarquica. El segundo mŽetodo, SAX (Standard API for XML), consiste en ir identificando

las marcas a medida que se va leyendo el documento. El segundo mŽetodo es obviamente

mŽas rŽapido y consume menos recursos, pero tiene la desventaja de que cada vez que aparece una

marca se debe decidir que hacer con ella, y no se puede regresar para atrŽas en el documento.

SAX ha sido desarrollado con aplicaciones de servidor en mente; el servidor debe suministrar

rŽapidamente el resultado de transformar un documento XML. DOM fue desarrollado con aplicaciones

de cliente en mente; por ejemplo un editor de XML necesita poder navegar en cualquier

direcciŽon la estructura del documento; en este caso el mŽetodo SAX no serŽęa muy Žutil.

Existen varias librerŽęas disponibles que implementan un u otro mŽetodo en varios lenguajes de

programaciŽon diferentes. Veamos un ejemplo de un programa perl que usa el mŽodulo XML::Dom

para sacar informaciŽon de un fichero XML:

2 Realmente se ha usado un script le2html que modifica algunos caracteres especiales de LaTeX, antes de aplicar la

pŽagina de estilo XSL usando sabcmd.

Introducci Žon al XML 13

#! /usr/bin/perl

use XML::DOM;

my $fichero = ’fichero.xml’;

my $parser = new XML::DOM::Parser;

my $doc = $parser->parsefile ($fichero);

my $titulo = &extraer($doc->getElementsByTagName ("titulo"));

my $autor = &extraer($doc->getElementsByTagName ("autor"));

sub extraer

{

my (@elementos) = @_;

my $elemento = $elementos[0]->toString;

$elemento =˜ s/ˆ[ˆ>]*>\n?//;

$elemento =˜ s/\n?\s*<[ˆ<]*$//;

return $elemento;

}

Este programa lee fichero.xml y extrae la informaciŽon de las marcas titulo y autor. La

subrutina extraer elimina las marcas que delimitan cada elemento.

7 Algunas aplicaciones

Son muchŽęsimas las aplicaciones del XML; y con la existencia de librerŽęas para producir, analizar

y transformar XML, disponibles para varios lenguajes de programaciŽon, cada dŽęa se usa mŽas el

XML en varios campos muy diversos. En esta secciŽon veremos algunas aplicaciones

7.1 PreparaciŽon de documentos

El XML es un sistema muy Žutil para preparar documentos. Como ya se ha dicho en secciones anteriores,

este manual ha sido escrito en XML, al cual se le ha aplicado una hoja de estilo XSL para

generar un fichero LaTeX. Existen varias ventajas de usar XML en vez de producir directamente

un fichero LaTeX.

 El DTD orienta al autor en los pasos que debe seguir. Como vimos en la secciŽon en que

hablamos del uso de Emacs para editar ficheros XML, al introducir el elemento inicial, nos

aparece la estructura mŽęnima que debe tener el documento; y en cada parte del documento

podemos consultar una lista de las posibles marcas que se pueden usar en esa secciŽon.

 El XML permite ser mas exigente respecto a la estructura del documento, lo que permite

una mayor uniformidad entre diferentes documentos.

 Existen programas que permiten revisar un documento XML rŽapidamente y descubrir errores

de sintaxis o de la estructura del documento. en LaTeX se puede revisar la sintaxis,

pero descubrir fallas en la estructura es mŽas difŽęcil. Si por ejemplo el autor definiŽo una

sub-secciŽon antes de haber definido alguna secciŽon, o si repitiŽo el tŽętulo en el medio del

7.2 CreaciŽon de pŽaginas web 14

documento, el resultado continua siendo un fichero LaTeX vŽalido y ese tipo de errores son

difŽęciles de descubrir de forma automŽatica.

 XML es mŽas fŽacil de transformar en otros formatos. Por ejemplo, pasar de XML a HTML

puede ser hecho fŽacilmente con una pŽagina de estilo XSL.

Sin embargo cuando se trata de documentos con bastante contenido matemŽatico, aŽun no existe

ningŽun DTD que permita escribir ecuaciones con la facilidad y el poder disponibles en LaTeX y

TeX.

7.2 CreaciŽon de pŽaginas web

Escribir una pŽagina HTML es una tarea fŽacil. Pero cuando queremos construir un site completo,

la labor es mucho mas ardua porque es necesario tener un buen sistema de navegaciŽon entre las

pŽaginas y tentar crear una imagen de marca que sea consistente en todas las pŽaginas. A medida

que el site crece, se va volviendo mas complicado su mantenimiento, y un peque˜no cambio puede

implicar tener que actualizar varias pŽaginas.

Algunas soluciones adoptadas frecuentemente son php o SSI para introducir informaciŽon de

forma dinŽamica en las pŽaginas. De esta forma si hay informaciŽon que es actualizada frecuentemente,

esta puede entrar en forma automŽatica en las pŽaginas. Sin embargo, no es muy conveniente

convertir todas las pŽaginas en dinŽamicas, pues cuando el site puede llegar a tornarse muy lento

debido a una sobrecarga del servidor. Las pŽaginas dinŽamicas tambiŽen pueden ser difŽęciles de

modificar porque pueden ser autŽenticos programas que quien no estŽe muy familiarizado con su

funcionamiento no los podrŽa modificar fŽacilmente.

El XML puede ayudar a resolver estos problemas. Separando el contenido de la presentaciŽon,

se puede mantener la informaciŽon mŽęnima en necesaria en las pŽaginas, convirtiŽendolas mas fŽaciles

de modificar y actualizar. La presentaciŽon y las barras de navegaciŽon puede estar toda contenida

en una pŽagina de estilo general. Con un simple comando make se pueden generar pŽaginas estŽaticas

HTML a partir de las fuentes XML, cada vez que existan cambios.

La dificultad de este mŽetodo estŽa en la construcciŽon de un DTD adecuado para pŽaginas web,

mas por suerte el trabajo ya estŽa hecho: se trata de XHTML, que es un DTD XML que describe

bŽasicamente todas las mismas funcionalidades del lenguaje HTML 4.0, pero con sintaxis XML.

Quien estŽe acostumbrado a trabajar con HTML, solo tendrŽa que tener en cuenta unas pocas reglas

para hacer la transferencia a XHTML:

 Nunca usar mayŽusculas en los nombres de las marca

 No dejar ninguna marca abierta; es necesario cerrarlas con la respectiva marca </...>, o si

se trata de una marca vacŽęa, se puede usar por ejemplo <br/>

 Usar siempre comillas para delimitar el valor de los atributos

Un ejemplo de un site donde hemos usado este mŽetodo, son las pŽaginas de la Free Software

Foundation Europe (http://www.fsfeurope.org). La figura 4 muestra la pŽagina principal; el fichero

7.3 OrganizaciŽon de informaciŽon usando RDF 15

Figura 4: PŽagina principal de la FSF Europe.

fuente incluŽęa Žunicamente la informaciŽon encerrada en el cuadro blanco principal; todo el resto

fue agregado pro la pŽagina de estilo XSL. La propia pŽagina tiene un par de enlaces, abajo y al lado

izquierdo, que permiten ver la fuente XHTML y la pŽagina de estilo usada.

7.3 OrganizaciŽon de informaciŽon usando RDF

RDF es un DTD orientado a la descripciŽon de recursos. Con el rŽapido crecimiento de la www,

la cantidad de informaciŽon disponible en campos muy variados es bastante amplia. Un problema

complicado es como clasificar al informaciŽon disponible para poder encontrarla cuando se

necesaria.

Han existido intentos de crear meta-catŽalogos de documentos disponibles en la web, pero

han resultado ser una tarea muy complicada ya que las pŽaginas web aparecen y desaparecen con

mucha facilidad. Otro enfoque han sido los motores de bŽusqueda que recorren la web clasificando

informaciŽon de forma automŽatica. La dificultad existente es que sin un buen resumen de lo que

contiene un documento, una bŽusqueda automŽatica puede no ser muy Žutil. Han habido intentos

de facilitar la labor de clasificaciŽon de los robots, usando por ejemplo las marcas META en el

encabezado de las pŽaginas web.

El RDF ha sido concebido con este tipo de problemas en mente. Su objetivo es la descripciŽon

7.4 Ficheros de configuraci Žon 16

de recursos disponibles; y normalmente se destina a al intercambio de informaciŽon entre sistemas,

mŽas que a suministrar contenido. Un ejemplo de aplicaciŽon es en los servidores de noticias, como

por ejemplo Slashdot y Barrapunto. El listado siguiente muestra lo que se obtiene si seleccionamos

una secciŽon de Barrapunto, en este caso la secciŽon “La Espiral” y accedemos a la URL

http://barrapunto.com/laespiral.rdf (solo mostraremos la parte inicial del listado, apenas para dar

una idea de como es)

<?xml version="1.0" encoding="ISO-8859-1"?>

<rdf:RDF

xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

xmlns="http://my.netscape.com/rdf/simple/0.9/">

<channel>

<title>Barrapunto: La Espiral</title>

<link>http://barrapunto.com/index.pl?section=laespiral</link>

<description><La informaciŽon que te interesa!</description>

</channel>

<image>

<title>Barrapunto</title>

<url>http://barrapunto.com/images/topics/topicslash.gif</url>

<link>http://barrapunto.com</link>

</image>

<item>

<title><Woody se congela!</title>

<link>http://barrapunto.com/article.pl?sid=01/02/17/094222</link>

</item>

<item>

<title>Entrevista a Wichert Akkerman en Debian Planet</title>

<link>http://barrapunto.com/article.pl?sid=01/02/16/179236</link>

</item>

Como se puede ver, el resultado es un documento XML que usa el DTD RDF; realmente es

una peque˜na implementaciŽon de RDF, llamada RSS (RDF Site Summary), pues RDF puede ser

mucho mas complexo. Este fichero RDF serŽa muy fŽacil de manipular con los procesadores de

XML/XSL y podrŽa ser usado para extraer por ejemplo los titulares de las noticias en la secciŽon.

Existen varios programas que ayudan a crear o procesar RSS. En Debian el paquete libxmlrss-

perl trae un mŽodulo perl que puede ser usado para ese propŽosito.

7.4 Ficheros de configuraciŽon

XML es una muy buena opciŽon para escribir ficheros de configuraciŽon de programas. La existencia

de librerŽęas optimizadas para extraer informaciŽon y modificar documentos XML facilita la

tarea del programador.

7.5 Bases de datos 17

Un ejemplo tŽępico son los ficheros de configuraciŽon usados en Glade. Glade es un programa

para construir interfaces grŽaficas de usuario (GUI) que usen las librerŽęas grŽaficas GTK+. Glade

tiene una interfaz grŽafica fŽacil de usar, donde se pueden definir las ventanas que usarŽa el programa

que se va a construir y se le pueden ir colocando diferentes “widgets”. El resultado despuŽes de

definir el GUI del programa se resume en un fichero XML con el nombre del programa y con

extensiŽon .glade. Si mas tarde se quiere modificar la interfaz grŽafica del programa, glade leerŽa

ese fichero y analizŽandolo recuperarŽa toda la informaciŽon que necesita para volver a representar

la interfaz grŽafica del programa.

Veamos un ejemplo. Glade trae un ejemplo que consiste en un editor de texto. Las primeras

lŽęneas del fichero editor.glade son asŽę:

<?xml version="1.0"?>

<GTK-Interface>

<project>

<name>Glade Text Editor</name>

<program_name>glade-editor</program_name>

<directory></directory>

<source_directory>src</source_directory>

<pixmaps_directory>pixmaps</pixmaps_directory>

<language>C</language>

<gnome_support>False</gnome_support>

<gettext_support>True</gettext_support>

NŽotese que no ha sido usado ningŽun DTD. Cuando el fichero XML es creado y modificado

por un programa, normalmente no es necesario validarlo contra un DTD, pues si el programa ya

ha sido depurado los ficheros producidos tendrŽan siempre la estructura esperada.

7.5 Bases de datos

Los documentos XML son una buena interfaz para proporcionar datos a una base de datos, o para

almacenar copias de partes del contenido de la base de datos, en ficheros de texto. Cada campo

en una tabla de la base de datos se puede hacer corresponder al contenido de alguna marca XML.

Veamos un ejemplo de una subrutina perl en la que se usa DOM para extraer informaciŽon de un

fichero XML para actualizar una base de datos SQL:

sub actualizarbd

{

use DBI;

use XML::DOM;

my ($id,$fichero) = @_;

my $bd = ’laespiral’;

my $dbmaster = ’villate’;

my $mibd = DBI->connect("dbi:Pg:dbname=$bd",$dbmaster,’’)

or return "Base de datos inaccesible\n$DBI::errstr\n";

my $sql = $mibd->prepare(q{update recetas set titulo=?, autor=?, }

7.6 Procesamiento distribuido usando SOAP 18

. q{fecha=?, contenido=? where id=?});

my $parser = new XML::DOM::Parser;

my $doc = $parser->parsefile ($fichero);

my $titulo = &extraer($doc->getElementsByTagName ("titulo"));

my $autor = &extraer($doc->getElementsByTagName ("autor"));

my $fecha = &extraer($doc->getElementsByTagName ("fecha"));

my $contenido = &extraer($doc->getElementsByTagName ("contenido"));

$sql->execute($titulo,$autor,$fecha,$contenido,$id)

or return "recetas::actualizar: Error actualizando receta $id\n"

. "$DBI::errstr\n";

$mibd->disconnect;

return "La base de datos de recetas ha sido actualizada.\n";

}

sub extraer

{

my (@elementos) = @_;

my $elemento = $elementos[0]->toString;

$elemento =˜ s/ˆ[ˆ>]*>\n?//;

$elemento =˜ s/\n?\s*<[ˆ<]*$//;

return $elemento;

}

7.6 Procesamiento distribuido usando SOAP

SOAP es el acrŽonimo de Simple Object Access Protocol. Es un protocolo usado para ejecutar

comandos en servidores remotos. La informaciŽon enviada al servidor remoto y el resultado de la

ejecuciŽon del comando se envŽęan en ficheros XML.

8 BibliografŽęa

1. The World Wide Web Consortium (W3C), http://www.w3.org/ . Los creadores de los est

Žandares HTML, XML, XSL, XHTML y muchos otros; en esta pŽagina se encuentran las

versiones mas recientes de los estŽandares asŽę como informaciŽon adicional y enlaces a otras

fuentes de informaciŽon.

2. Apache XML Project, http://xml.apache.org/ . Este proyecto actualmente se subdivide en

siete grupos muy importantes: Xerces, Xalan, Coccon, FOP, Xang, SOAP, Batik y Crimson,

con el objetivo de producir una soluciŽon livre y completa basada en XML y el servidor http

de Apache.

3. The XML C library for Gnome, http://www.xmlsoft.org/ . La pŽagina de las librerŽęas XML

creadas por el proyecto Gnome; incluye el procesador de XML/XSL xslt.

4. Sablotron 0.52, http://www.gingerall.cz/ga/Sablot-0-52.html . Manual de Sablotron 0.52,

un procesador de XML+XSL programado en C++.

Introducci Žon al XML 19

5. ProgramaciŽon en XML: el nuevo lenguaje de Internet. Los apuntes de un curso bastante

completo sobre XML, realizado en Granada,

http://geneura.ugr.es/cursos/xml/programa.shtml .

6. xml.com, http://www.xml.com . La pŽagina de O’Reilly dedicada al XML; allŽę se encuentra

mucha informaciŽon sobre XML y XSL.

7. The XML Cover Pages, http://www.oasis-open.org/cover/sgml-xml.html . Un servidor del

grupo OASIS, lleno de informaciŽon Žutil sobre XML/XSL y software.

8. PŽagina personal de Norman Walsh, http://www.nwalsh.com . Una fuente muy buena de

informaciŽon; bastante Žutiles especialmente las transparencias sobre XSL.

9. St. Lauren, S. y Biggar, R.. Inside XML DTD’s, McGraw-Hill, 1999, ISBN: 0-07-134621-

X.

10. Navarro, A., White,W. y Burman, L. Mastering XML, SYBEX, 2000, ISBN: 0-7821-2266-

3.

11. Walsh, N. y L. Muellner. DocBook: The Definitive Guide, 1a edic., O’Reilly & Associates,

Inc. octubre de 1999, ISBN: 156592-580-7. (disponible en http://www.docbook.org)

12. Villate, J. E.. CreaciŽon de artŽęculos y pŽaginas web usando XML en Linux,

http://www.laespiral.org/documentacion/articulos/articulos-COMO/ La Espiral, 22 de noviembre

de 2000.

Manual de le-docxml, el sistema XML/XSL usado para producir este documento.

13. Lerner, R. M.. Introducing SOAP, The Linux Journal, 83, marzo de 2001.

14. TMX Format, http://www.lisa.unige.ch/tmx/tmx.htm . PŽagina del DTD Translation Memory

Exchange, para ayudar en la traducciŽon de documentos.

Acerca de zerhoexml

Blog de rigo

Archivo

Enlaces


la tarea

Suscríbete

RSS | Atom

Contacto

Contactar

Albergado en:blogdiario.com

Noticias: Noticias