XML: un estándar para la descripción, intercambio de la información.

Page 1

Titulo Largo

Artículo 1.8 XML: un estándar para la descripción, intercambio de la información

Titulo Corto

Artículo 1.8

Autor

Rafael Pedraza

Palabras clave

XML, Lenguaje de Marcado eXtensibles, lenguajes de etiquetado, metadatos, estándares W3C

Descripcion

Se estudia de forma práctica la anatomía de un documento XML. Se analizan sus principales elementos de marcado y se aprende a declararlos. Por último, se hace una revisión de las principales tecnologías XML existentes.

Objetivos Contenidos Actividades Evaluacion

Resumen En este artículo se realiza una introducción al lenguaje de marcado extensible XML desde un punto de vista práctico. Se analiza la anatomía de este tipo de documentos, haciendo especial énfasis en el estudio de su marcado y en el aprendizaje de su declaración, todo ello con el objeto de que el alumno esté capacitado para crear su propio lenguaje XML una vez termine la unidad. Por último, se hace una breve revisión de las tecnologías XML más importantes.

Introducción Es relativamente fácil encontrar artículos que hablen de XML desde un punto de vista teórico, mencionando el potencial y las posibles aplicaciones de aquellas recomendaciones o lenguajes que se han construido en base a él. No obstante, estos trabajos, a pesar de ser muy útiles para conocer el estado de la cuestión en relación con esta tecnología, presentan el inconveniente de que no capacitan a sus lectores para enfrentarse directamente a dichos lenguajes y recomendaciones y comprenderlas. El objetivo de esta unidad será por tanto hacer una introducción práctica a XML, utilizando en todo momento ejemplos que ayuden al alumno a comprender sus principales conceptos. A continuación, estudiaremos las partes más sencillas, pero también más útiles, de este lenguaje, evitando en todo momento entrar en cuestiones de complejidad que puedan carecer de interés. El principal objetivo de esta unidad es facilitar al alumno el conocimiento necesario para aproximarse e iniciarse de manera autónoma en cuestiones más complejas relacionadas con XML, como podría ser el uso de una recomendación del W3C, si así lo desea.

¿Qué es XML? XML es una especificación creada por el World Wide Web Consortium (W3C) en 1996. Nace con la intención de conjugar el potencial de SGML (Standard Generalized Markup Language), un potente pero complejo metalenguage de marcado, con la sencillez de HTML (HyperText Markup Language), un lenguaje de marcado (creado con SGML) para la creación de páginas web. Algunos de los objetivos más destacables que perseguía el W3C al crear XML eran:


-

Será apto para internet. Será compatible con SGML. Los documentos XML serán legibles en lenguaje humano. Los documentos XML serán de creación sencilla. XML debe ser soportado por una amplia variedad de aplicaciones.

Pero ¿qué signiifica XML? XML es el acronimo de “eXtensible Markup Language”, es decir, es el Lenguaje de Marcado eXtensible, entendiendo por lenguaje de marcado a aquel que permite estructurar y describir un documento mediante el uso de etiquetas. Por otro lado, denominamos lenguaje extensible, o metalenguaje, a aquel que nos permite crear nuestros propios lenguajes de marcado, especificando la sintaxis y los requisitos que deben cumplir los lenguajes creados con él, y que permitirán organizar el contenido de nuestros documentos. Los documentos generados o enriquecidos con XML permitirán: 1. 2. 3. 4.

Realizar búsquedas más precisas sobre los documentos. Personalizar la información. Elaborar filtros para encontrar la información que deseamos. Permite a una persona o institución crear y compartir su propia información, marcándola del modo más apropiado para ella. 5. Proporciona un medio sencillo para que aplicaciones distintas se comuniquen mutuamente: si una aplicación puede analizar la sintaxis XML, entonces podrá enviar o recibir cualquier clase de información de cualquier otra aplicación que entienda XML. 6. etc. A continuación (figura 1) se muestra como ejemplo un documento XML que describe una colección de fotografías (los documentos XML se nombran con la extensión .xml, así este documento podría llamarse “misFotos.xml”): <?xml version=“1.0” encoding=”ISO-8859-1” standalone=”no” ?> <!DOCTYPE COLECCION_FOTOGRAFIAS SYSTEM “coleccionFotografias.dtd”> <!-- Documento XML definido para una colección de fotografías --> <COLECCION_FOTOGRAFIAS creador=”Pedro Guzmán”> <FOTOGRAFIA identificador= “_001” formato=“png” tamanoBytes=“21272”> <AUTOR>Saúl Colban</AUTOR> <TITULO>A mil años luz</TITULO> <FECHA>23-07-2006</FECHA> <DESCRIPCION>Cabeza de una estatua…</DESCRIPCION> <FUENTE nombre=“Bluethinking” uri=“ http://www.bluethinking.com/evam ” otrasFotos=”_015, _137” /> </FOTOGRAFIA> <FOTOGRAFIA id=”_002” formato=”jpg” tamanoBytes=”1374”> ... </FOTOGRAFIA> ... </COLECCION_FOTOGRAFIAS> Figura 1: Ejemplo de documento XML Aunque no tengamos idea alguna de XML, a partir de la lectura de este documento podemos deducir en gran medida cuál es su estructura y su significado. En adelante, utilizaremos este


ejemplo para aprender la anatomía de este tipo de documentos y sus principales componentes. Comencemos...

Anatomía de un documento XML Un documento XML consta de dos partes: un “prólogo” y un “ejemplar”. El prólogo puede dividirse a su vez en dos partes: 1. La declaración XML, y 2. La declaración del tipo de documento.

Prólogo de un documento XML Declaración XML La declaración XML es la primera línea que aparece en un documento XML. En el ejemplo de la figura 1: <?xml version=“1.0” encoding=”ISO-8859-1” standalone=”yes” ?> Su función es declarar el documento como un texto XML , aportando a la vez información sobre la versión de la norma W3C utilizada para elaborar el documento (version=“1.0”), el tipo de codificación utilizada para representar los caracteres (encoding=”ISO-8859-1”) (la codificación utilizada en el ejemplo, la ISO-8859-1 es la que permite reconocer los caracteres de los diferentes alfabetos europeos), y por último indicar si este documento requiere de algún otro para su interpretación, es lo que se conoce como la declaración de documento autónomo , en el ejemplo anterior hemos indicado que el documento no es autónomo (standalone=”no”), y por tanto requerirá un documento externo para poder ser interpretado por las aplicaciones. Se considera que un documento es autónomo cuando contiene todo la información relevante para su interpretación.

Declaración del Tipo de Documento La declaración del tipo de documento sirve para nombrar el tipo de estructura que sigue un documento XML. En el ejemplo de la figura 1 esta declaración sería: <!DOCTYPE COLECCION_FOTOGRAFIAS SYSTEM “coleccionFotografias.dtd”> En ella se nos indica que el documento XML que vemos sigue la estructura (es decir, es del tipo) denominada “COLECCION_FOTOGRAFIAS” y cuya sintaxis y restricciones están especificadas en un archivo externo denominado “coleccionFotografias.dtd”.

Ejemplar de un documento XML Es la parte del documento que contiene la información propiamente dicha, es decir, los datos a los que se les ha añadido el marcado. Como acabamos de ver se pueden declarar tanto tipos de documentos como deseemos, un documento que sigue uno de esos tipos se denomina ejemplar del mismo. De este modo, si tenemos un tipo denominado “COLECCION_FOTOGRAFIAS”, denominares ejemplares a todos aquellos documentos XML que cumplan con él. En el ejemplo de la figura 1 constituyen el ejemplar toda la información que aparece entre las etiquetas (o marcas) <COLECCION_FOTOGRAFIAS> y </COLECCION_FOTOGRAFIAS>.


Elementos En XML estas etiquetas o marcas son conocidas como elementos, y son las piezas de información en las que podemos dividir un documento. Los elementos constan normalmente de tres partes: una etiqueta de inicio, como por ejemplo “<TITULO>”; un contenido, como por ejemplo “A mil años luz”; y una etiqueta de finalización, para este ejemplo, “</TITULO>”. <TITULO>A mil años luz</TITULO> Existen distintos tipos de elementos. En función de la relación que mantienen entre sí dentro de la estructura o jerarquía de un documento podemos distinguir: -

-

-

-

Elemento raíz : todos los documentos XML tienen un único elemento raíz, que también suele denominarse “ elemento documento ” porque contiene todo el contenido del documento. En el caso de la figura 1 el elemento raíz es “<COLECCION_FOTOGRAFIAS>...</COLECCION_FOTOGRAFIAS>”. Elementos padre: decimos que un elemento es padre de otros cuando estos otros forman parte de su contenido, así en el ejemplo de la figura 1 podemos decir que el elemento <FOTOGRAFIA> es padre de los elementos: <AUTOR>, <TITULO>, <FECHA>, <DESCRIPCION> y <FUENTE>. Elementos hermanos: se consideran elementos hermanos a aquellos que comparten un mismo padre. Por tanto, podemos decir que <AUTOR>, <TITULO>, <FECHA>, <descripcion>, y <fuente> son elementos hermanos. Elementos hijo: son aquellos que se incluyen entre las etiquetas de un elemento padre. Los elementos <AUTOR>, <TITULO>, <FECHA>, <DESCRIPCION>, y <FUENTE> son elementos hijo del elemento <FOTOGRAFIA>.

Otra consideración importante a tener en cuenta son los nombres de los elementos , que deben cumplir ciertas normas para ser aceptados por los procesadores XML. Concretamente, los nombres de un elemento siempre deben empezar con una “letra”, con un guión bajo “_”, o con dos puntos “:”, seguido de cualquier número de letras, números, guiones bajos, guiones, dos puntos y comas que se desee. Además distinguen entre mayúsculas y minúsculas. No podrán formar parte del nombre de un elemento los “espacios en blanco” y los caracteres: ,!; En relación con el contenido de un elemento , no ya con el nombre que aparece en la etiqueta, también hemos de tener en cuenta que no es posible utilizar los caracteres: < > & ]]> “ ' Su uso confundiría al procesador XML, ya que tienen asociada una sintaxis especial dentro del lenguaje XML. Si deseamos utilizar estos caracteres como parte de nuestro contenido tendremos que sustituirlos por los siguientes códigos que los representan: <=< >=> ]]> = ]]> &=& “ = " ‘ = '


De este modo, si tuvieramos un documento XML, con un elemento <formula> en el necesitaramos introducir el operador “menor que” (<) como parte del contenido, tendríamos que hacerlo de la siguiente manera: <formula> 5 < 7 </formula> El uso del símbolo < directamente confundiría al procesador XML (pensaría que se trata del comienzo de una nueva etiqueta) y generaría un error: <formula> 5 < 7 </formula> (éste es un uso que daría error) Por último, hay que señalar que podemos encontrar elementos sin contenido en un documento XML, sería el caso del elemento <fuente /> en el ejemplo de la figura 1, y se denominan elementos vacíos : <FUENTE nombre=“Bluethinking”uri=“ http://www.bluethinking.com/evam ” otrasFotos=”_015, _137” /> Estos elementos pueden aparecer expresados de dos maneras distintas: 1. Mediante dos etiquetas, una de inicio y otra de fin:<fuente></fuente> 2. Mediante la etiqueta especial de elemento vacío:<fuente /> Este tipo de elementos se utiliza cuando no es necesario una etiqueta que contenga un contenido, pero sí una serie de atributos que faciliten información sobre la misma. En el ejemplo anterior el “nombre”, el “uri”, y “otrasFotos” son atributos del elemento <fuente />.

Atributos Los atributos son piezas de información que se añaden a un elemento para completar su información. En el ejemplo de la figura 1, el elemento FOTOGRAFIA posee tres atibutos: el primero es identificador , es decir el identificador de la fotografía; el segundo formato , en el que informamos del formato de la fotografía que está siendo descrita; por último tenemos el atributo tamanoBytes , que nos dice cual es el tamaño de esta imagen. <FOTOGRAFIA identificador= “_001” formato=“png” tamanoBytes=“21272”> Como podemos ver, los atributos de un elemento aparecen en la etiqueta de inicio del mismo, separados de su nombre por, al menos, un espacio. El nombre de los atributos cumple las mismas restricciones que el nombre de los elementos. Van seguidos del signo igual, y a continuación entre comillas su valor. Estas piezas de información tienen una restricción, y es que un mismo atributo no puede aparecer más de una vez en un elemento.

Entidades y Notaciones Las entidades y notaciones son dos tipos de marcado especial que no serán objeto de estudio en esta unidad debido a su complejidad. Todos aquellos alumnos interesados en su estudio pueden acudir a fuentes como XML 1.1 Bible (ver bibliiografía) donde encontrarán una explicación detallada sobre su uso. De manera muy general, y con el fin de comprender ambos conceptos, diremos que estos marcados permiten la inclusión de objetos (piezas de texto, archivos de diferentes formatos, etc.) en un documento XML, como podrían ser imágenes, videos, etc. Una entidad es un tipo de marcado que identifica el nombre del archivo que queremos añadir a nuestro documento XML (es decir, por ejemplo el nombre de una imagen), mientras que una notación es un tipo de marcado que establece


la aplicación que procesa ese archivo (es decir, en el caso del ejemplo anterior una aplicación capaz de mostrar por pantalla la imagen).

Comentarios Los comentarios son anotaciones que pueden realizarse en un documento XML con distintos propósitos, por ejemplo, para informar a un usuario de alguna cuestión relevante relacionada con la estructura del documento, para indicar la aplicación que se ha utilizado a la hora de desarrollar el documento, para incluir una nota de utilidad a aquellos usuarios que tengan que utilizar o modificar el documento, etc. Es decir, sirve para hacer cualquier anotación que deseemos. En el documento de la figura 1 tenemos el siguiente comentario: <!-- Documento XML definido para una colección de fotografías --> Como podemos ver, los comentarios se hacen entre las cadenas de caracteres <!-- y --> . Los comentarios no son procesados por el procesador XML, y normalmente no se muestran en pantalla.

Creación de documentos XML La creación de un documento XML pasa por tres etapas: -

El diseño del documento, La definición (o declaración) de su estructura, y por último el Marcado de los documentos.

A continuación analizaremos en detalle las dos primeras. El marcado de los documentos se aprenderá mediante los ejemplos utilizados en la unidad.

Diseño de un documento XML En esta fase tendremos que identificar qué información vamos a incluir en un documento XML y cómo vamos a hacerlo, es decir, cómo vamos a estructurar el contenido del documento, qué marcas vamos a crear y cuáles van a ser sus nombres, que relación va a haber entre las distintas marcas del documento, etc. Los pasos que seguiremos son: (1) Decidir qué información es necesario incluir en nuestro documento/lenguaje XML : en este primer momento no hemos de pensar en elementos o atributos, sino en la información que queremos que contenga y contemple nuestro documento, es decir, debemos pensar qué es lo que esperamos que haga nuestro documento, y decidir el conjunto de marcas que es necesario crear para ello. Si al desarrollar esta tarea tenemos dudas sobre la inclusión de una pieza de información o marca, lo más aconsejable es añadirla, ya que siempre es más fácil ignorar información que tener que incorporar nuevas marcas posteriormente. El resultado de este proceso debería ser similar al siguiente ejemplo: “ he decidido crear un documento XML que me permita describir todas las fotografías e imágenes de que dispongo. ¿Qué información quiero almacenar de cada una de ellas? A priori, en mi colección de fotografías quiero tener registrado: -

el título de cada fotografía, su autor, un identificador que la reconozca de manera única, la fecha en que fue realizada, si la foto no es mía, quiero registrar la fuente que me permitió acceder a ella, también quiero almacenar el tamaño que ocupa y su formato,


-

así como una descripción de la misma. ”

(2) Relacionar y agrupar las piezas de información elegidas : una vez conozcamos las piezas de información que queremos almacenar buscaremos las relaciones existentes entre ellas. Un buen modo de hacerlo es realizar un árbol que nos ayude a estructurar los datos y nos permita descubrir estas relaciones. En el caso de las piezas de información señaladas en el apartado anterior, se haría de la siguiente manera:

1. Figura 2: Árbol con las piezas de información de nuestro lenguaje XML Al témino de esta fase tendremos definida en gran medida la estructura de nuestro documento/lenguaje XML. Por ello, hemos de comprobar que tanto las marcas como la estructura que hemos generado es coherente, de manera que sea legible para un lector humano. También hemos de cuidar que la estructura que hemos definido no sea demasiado sencilla ni demasiado compleja. Una estructura muy compleja implicaría que el procesador XML tendría que navegar a través de muchas marcas hasta alcanzar la informaición que busca, lo que retarda el proceso de acceso a la misma. Por el contrario, una estructura excesivamente sencilla puede complicar e incluso imposibilitar la búsqueda de información en nuestro documento, ya que la información que deseamos podría aparecer junto con otra agrupada bajo una misma marca. (3) Discernir qué datos deben ser elementos y cuáles atributos : se descartarán como atributos todas aquellas piezas de información (o datos) que puedan contener a su vez otras piezas de información, así como aquellas cuyo contenido (texto) tenga una extensión superior a tres o cuatro palabras. Por último, si para nosotros es muy importante una información concreta podemos declararla directamente como elemento (aunque también pudiera hacerse como atributo). En esta fase, es conveniente prestar atención a los nombres con los que hemos identificado nuestras piezas de información o marcas, y si alguno de ellos no fuera descriptivo de su contenido deberá modificarse de modo que a un usuario humano le baste leer el nombre de esa marca (sea elemento o atributo) para intuir su contenido. Así mismo, es muy recomendable establecer una política uniforme a seguir con los nombres, que facilite su reconocimiento en el documento y permita recordarlos (por ejemplo, declarando los elementos en mayúsculas y los atributos en minúscula). Siguiendo con el ejemplo anterior, y aplicando estas pautas obtendríamos lo siguiente: Pieza de información

Tipo de marca

Nombre XML

Colección de fotografías

Elemento (pues contiene otras piezas de información)

COLECCION_FOTOGRAFIA S (nombre de elemento normalizado a mayúsculas)

Fotografía

Elemento (pues contiene otras piezas de información)

FOTOGRAFIA

Título

Elemento (puede ser extenso)

TITULO

Autor

Elemento (se estima que ésta es AUTOR una información muy importante y preferimos ponerla


como elemento) Identificador

Atributo del elemento FOTOGRAFIA (información muy breve que completa información del elemento )

identificador (nombre del atributo normalizado mediante el uso de minúsculas)

Fecha

Elemento (se estima que ésta es FECHA una información importante y preferimos ponerla como elemento, aunque también podría declararse como atributo de FOTOGRAFIA)

Fuente

Elemento (pues contiene otras piezas de información)

FUENTE

Nombre

Atributo del elemento FUENTE, (que identifica el nombre de la fuente donde encontramos la fotografía)

nombre

Uri

Atributo del elemento FUENTE uri (identica el lugar donde se encuentra alojada la fotografía)

Tamaño

Atributo del elemento FOTOGRAFÍA (información muy breve que completa información del elemento )

tamaño

Formato

Atributo del elemento FOTOGRAFIA (información muy breve que completa información del elemento )

formato

Descripción

Elemento (pues contendrá normalmente información extensa)

DESCRIPCION

De este modo, hemos aprendido a identifcar cada una de las partes importantes de un documento XML, a definir su estructura lógica, y a determinar el modo en que éstas deben presentarse (como elementos o atributos). A continuación estudiaremos como se declaran estas marcas formalmente y obtendremos por fin nuestro propio lenguaje XML.

Declaración del documento XML Para que la estructura lógica que hemos diseñado pueda ser comprendida por un procesador XML es necesario formalizarla mediante una “ declaración del tipo de documento ”. La declaración del tipo de documento especifica qué contenidos pueden tener los elementos y atributos de un tipo concreto, es decir, sirve para especificar las sintaxis de un tipo de documento XML y las restricciones a su uso. Consta de dos partes: 1. La declaración del tipo de documento propiamente dicha. 2. La Definición del Tipo de Documento (DTD).


Declaración del tipo de documento Esta declaración sirve para especificar el nombre del tipo que seguirá un documento XML. En realidad no es más que una especie de enlace que se realiza en cada documento a través de su elemento raíz, teniendo éste que tener forzosamente el mismo nombre que el tipo. En el ejemplo de la figura 1 sería: <!DOCTYPE COLECCION_FOTOGRAFIAS SYSTEM “coleccionFotografias.dtd”> Hacemos una declaración del tipo de documento utilizando en primer lugar el código <! DOCTYPE , seguido a continuación del nombre del tipo que es COLECCION_FOTOGRAFIAS , y especificando por último el archivo donde se ha almacenado la sintaxis que deben seguir los documentos con este tipo, en el ejemplo sería el archivo coleccionFotografias.dtd . Si prestamos atención al elemento raíz (recordemos que es el primer elemento que aparece) de nuestro documento comprobamos que efectivamente coincide con el nombre del tipo: <COLECCION_FOTOGRAFIAS> . La declaracón del tipo documento se complementa con una definción del tipo de documento (o DTD), que asocia al tipo la cualidades que posee. Por tanto, la declaración del tipo de documento será la que designe el nombre del tipo, mientras que la definición del tipo de documento será la que contenga la información sobre la sintaxis y las restricciones que deben cumplir los documentos que quieran seguir ese tipo (en el ejemplo que hemos puesto, la definición del tipo de documento se hace en el archivo que enlazamos desde la declaración: coleccionFotografias.dtd ).

Definición del tipo de documento La definición del tipo de documento o DTD especifica los tipos de elementos, atributos, entidades y notaciones que se podrán utilizar en un documento, así como sus restricciones estructurales y de contenido, valores por defecto, etc. Para ello se utilizan las declaraciones de marcado , que pueden ser: -

Declaraciones de tipos de elementos Declaraciones de listas de atributos Declaraciones de entidades Declaraciones de notaciones

Estas declaraciones pueden realizarse en un archivo distinto al documento XML (como en el caso del ejemplo), en cuyo caso reciben el nombre de declaraciones externas, o dentro del mismo documento, en cuyo caso reciben el nombre de declaraciones internas. Declaraciones de tipo de elementos Las declaraciones de tipo de elementos indican al procesador XML qué elementos están permitidos y cuál es su contenido. Facilitan así la detección de ciertos errores, como son la inclusión de elementos no declarados, la especificación de contenidos no validos dentro de un elemento, etc. Esta declaración se compone de la cadena de caracteres: <!ELEMENT Nombre_XML_del_elemento contenido> El contenido de un documento puede ser de los siguientes tipos (veremos ejemplos reales de cada uno de ellos más abajo): -

EMPTY : son los elementos de tipo vacío (como el elemento FUENTE de nuestro ejemplo).


-

-

-

Se caracterizan por no poder contener contenido, aunque sí atributos. Su declaración se realiza del siguiente modo: <!ELEMENT Nombre_XML_del_elemento EMPTY> ANY : son aquellos elementos que pueden contener tanto caracteres (es decir, cualquier contenido que incluya letras, dígitos y signos) como elementos, además combinándolos sin ningún tipo de restricción. Este tipo de elementos no suelen utilizarse (propician la generación de estructuras lógicas muy caóticas). Se declaran del siguiente modo: <!ELEMENT NombreXML_del_elemento ANY> Mixed : contienen bien caracteres (sería el caso de la primera línea que sirve como ejemplo), bien una combinación de caracteres y elementos, pero con restricciones bien definidas (caso de la segunda línea de las que aparecen a continuación). Se declaran de la siguiente manera: <!ELEMENT NombreXML_del_elemento (#PCDATA)> <!ELEMENT Nombre_XML_del_elemento (#PCDATA | Elemento1* | Elemento2?)> Children : son elementos que sólo pueden contener otros elementos y que no pueden contener caracteres. Se utilizan para organizar los contenidos en una estructura lógica. Se pueden declarar de las siguientes maneras: Secuencia de elementos: se especifica el orden en el que necesariamente han de presentarse los elementos en el documento (es decir, primero el elemento 1, después el elemento 2, etc.). Se especifica incluyendo los elementos entre paréntesis y separados por una coma: <!ELEMENT NombreXML_del_elemento (elemento1, elemento2, … , elementoX)> Alternativa de elementos: indica que puede aparecer uno u otro elemento, es decir, podemos encontrar primero el elemento 2, después el elemento 1, despúes el elemento X, etc. La alternativa de elementos se declara poniendo a estos entre paréntesis y separados por una barra: <!ELEMENT NombreXML_del_elemento (elemento1 | elemento2 | … | elementoX)> Combinación de ambas (secuencia y alternativa): combina las dos opciones anteriores, de esta manera siguiendo la sintaxis del ejemplo que se muestra a continuación podríamos poner los elementos 2 y 3 (por este orden) seguidos del elemento 1, o si lo preferimos poner el elemento 1 y a continuación los elementos 2 y 3: <!ELEMENT NombreXML_del_elemento (elemento1 | (elemento2, elemento 3))>

Además podemos indicar la frecuencia de repetición de un elemento mediante el uso de uno de los siguientes caracteres (cuando no se utilizan estos caracteres acompañando a un elemento entendemos que su frecuencia de aparición es necesariamente una y sólo una): ? : indica opción, el elemento se puede repetir cero o una vez. + : indica una o más, asegura una ocurrencia como mínimo. * : indica cero o más repeticiones. Siguiendo estas pautas, la declaración de los elementos de nuestro ejemplo se realizarían de la siguiente manera: <!ELEMENT COLECCION_FOTOGRAFIAS (FOTOGRAFIA)*> Declaramos COLECCION_FOTOGRAFIAS como un elemento de tipo Children cuyo contenido será cero o más elementos FOTOGRAFIA (fijémonos en que la frecuencia viene dada por el *, que indica cero o más repeteciones del elemento al que acompaña). <!ELEMENT FOTOGRAFIA (AUTOR+, TITULO, FECHA, DESCRIPCION, FUENTE?)> Declaramos FOTOGRAFIA como un elemento de tipo Children cuyo contenido debe ser al menos un elemento AUTOR (aunque podrían ser más), seguido forzosamente de un elemento (y sólo uno) TITULO, seguido forzosamente de un elemento (y sólo uno) FECHA, seguido fozosamente de un


elemento (y sólo uno) DESCRIPCION, seguido opcionalmente de un elemento (y sólo uno) FUENTE (por tanto éste último puede o no aparecer, esto será útil, por ejemplo, si sólo quiero registrar esta información para aquellas fotografías que no sean mías). <!ELEMENT AUTOR (#PCDATA)> Declaramos AUTOR como un elemento de tipo Mixed que contendrá una seriede caracteres (presumiblemente los que componen el nombre del autor). <!ELEMENT TITULO (#PCDATA)> Declaramos TITULO como un elemento de tipo Mixed que contiene sólo caracteres. <!ELEMENT FECHA (#PCDATA)> Declaramos FECHA como un elemento de tipo Mixed que contiene sólo caracteres. <!ELEMENT DESCRIPCION (#PCDATA)> Declaramos DESCRIPCION como un elemento de tipo Mixed que contiene sólo caracteres. <!ELEMENT FUENTE EMPTY)> Declaramos FUENTE como un elemento de tipo vacío, ya que su contenido se restringe al que aportarán posteriormente sus atributos. Declaraciones de listas de atributos Las declaraciones de listas de atributos sirven para definir el conjunto de atributos que posee cada elemento, y los tipos de contenidos que cada atributo puede contener. Hemos de ser conscientes de que la creación de un atributo implica tantas elecciones como la creación de un elemento. Durante el proceso de creación del atributo tendremos que responder a las siguientes preguntas: ¿es opcional?, ¿tiene un valor predefinido?, ¿puede tener cualquier valor o hay restricciones?. A continuación veremos como vamos respondiendo paso a paso estas preguntas. Todas las declaraciones de listas de atributos empiezan con la cadena de caracteres <!ATTLIST , a continuación, y separados al menos por un espacio, el nombre del elemento al que pertenece el atributo. Seguidamente el nombre del atributo que se está declarando, espacio, el tipo del atributo , espacio, y su declaración por defecto (véanse las lineas que lo ejemplifican a continuación). Es posible declarar uno o varios atributos para un elemento. La declaración de un único atributo se realiza del siguiente modo: <!ATTLIST nombre_elemento nombre_atributo tipo_atributo declaración_por_defecto> En cambio la declaración de varios atributos puede hacerse de dos formas distintas. La primera es hacerlo repitiendo el proceso anterior tantas veces como atributos posea el elemento, o bien realizando una única declaración para todas ellas. Esto último se haría así: <!ATTLIST nombre_elemento nombre_atributo tipo_atributo declaración_por_defecto nombre_atributo tipo_atributo declaración_por_defecto nombre_atributo tipo_atributo declaración_por_defecto> Podremos dar cualquier nombre a un atributo siempre que cumpla con las restricciones indicadas para los nombres XML (vistas anteriormente). Por otro lado, la declaración por defecto sirve para determinar si el atributo deberá aparecer obligatoriamente u opcionalmente, y si aparece, si éste toma algún valor por defecto. Como acabamos de ver esta información se especifica en la última parte de la declaración de un atributo. Sus posible valores son:


-

-

#REQUIRED : si un atributo se declara como #REQUIRED, en el ejemplar del documento se debe dar un valor a todos los atributos de este tipo. No hay valor por defecto. #IMPLIED : la especificación del contenido de este tipo de atributos es opcional. “ valor por defecto ” : los atributos pueden incluir en su declaración valores por defecto, de forma que el atributo queda inicializado a ese valor. Para ello ese valor se especifica entre comillas “ valor por defecto del atributo ” . #FIXED “ valor del atributo ” : los atributos #FIXED nunca cambian su valor, se les asigna en su declaración y así permanecen en cada documento en el que aparecen.

Por último, el tipo de atributo especifica cómo puede ser el contenido del atributo, limitando los valores que éste puede tomar. Los tipos están predefinidos y son los siguientes: Tipo cadena o CDATA : estos atributos tienen como valor cadenas de caracteres. Ejemplos de este tipo serían el atributo tamanoByte del elemento FOTOGRAFIA, o los atributos nombre y uri del elemento FUENTE . Su declaración se realiza del siguiente modo: <!ATTLIST FOTOGRAFIA tamanoByte CDATA #REQUIRED> Ésta sería la declaración del atributo tamanoByte que podrá contener un conjunto de caracteres como valor y que tendrá que estar especificado necesariamente siempre que aparezca un elemento FOTOGRAFIA. <!ATTLIST FUENTE nombre CDATA “Bluetihinking” uri CDATA “ http://www.bluethinking.com/evam ”> En este caso, hemos declarado a la vez dos atributos, nombre y uri, para el elemento FUENTE. En ambos casos podremos especificar el valor que deseemos, pero si no lo hacemos se les asignará a ambos atributos por defecto los valores que aparecen entrecomillados. <!ATTLIST COLECCION_FOTOGRAFIAS creador CDATA #FIXED “Pedro Guzmán”> En este caso el atributo creador del elemento COLECCION_FOTOGRAFIAS está fijo, es decir, aparecerá siempre acompañando a este elemento, y siempre con el mismo valor (el creador de la colección de fotografías será siempre el mismo, por eso se declara como un atributo de vajor fijo). Tipo enumerado : define una lista predeterminada de valores permitidos para el atributo. El atributo formato del elemento FOTOGRAFIA sería de este tipo: <!ATTLIST FOTOGRAFIA formato (tiff | png | jpg) #IMPLIED> Con esta declaración decimos que el atributo formato puede o no aparecer acompañando al elemento FOTOGRAFIA, pero si aparece, su valor debe ser necesariamente uno de los tres especificados: tiff ó png ó jpg (cualquier otro valor sería erróneo). Tipo ID : se utiliza para identificar de manera única un elemento. El contenido de un atributo ID debe cumplir necesariamente con las restricciones de los nombres XML (en el ejemplo de la figura 1, el atributo identificador del elemento FOTOGRAFIA es de este tipo, por ello su valor inicial es un guión bajo, ya que los dígitos no están permitidos como primer carácter de un nombre XML). Además, el valor del atributo deberá ser único dentro del documento XML, es decir, no podrá haber otro elemento con un atributo de tipo ID que posea el mismo valor. Cualquier elemento podrá tener un único atributo de tipo ID.


<!ATTLIST FOTOGRAFIA identificador ID #REQUIRED> Esta declaración nos dice que el elemento FOTOGRAFIA tiene un atributo llamado identificador de tipo ID que debe aparecer forzosamente acompañando a este elemento. Tipos IDREF e IDREFS : son atributos cuyo valor es/son otro/s atributo/s ID al/a_los que se está haciendo referencia. Por ejemplo, en la figura 1 el elemento FUENTE contiene el atributo otrasFotos de tipo IDREFS, y cuyo valor son los identificadores de aquellas fotografías que proceden de la misma fuente. Su declaración se realiza de la siguiente manera: <!ATTLIST FUENTE otrasFotos IDREFS #IMPLIED> Acabamos de declarar otrasFotos como un atributo de tipo IDREFS (ya que como valor puede tomar más de una ID), que puede aparecer o no opcionalmente en el elemento FUENTE. Tipo ENTITY y ENTITIES : el estudio de este tipo de atributos escapa a los objetivos de esta unidad. Sólo diremos que este tipo de atributos contribuyen con las entidades y notaciones a la inclusión de objetos (imágenes, etc.) en el documento XML. Tipo NMTOKEN y NMTOKENS : funciona exactamente igual que un atributo CDATA, con la diferencia de que su valor debe cumplir las restricciones de los nombres XML. Este tipo de atributos ha demostrado carecer de interés y casi no se utiliza. La declaración de este tipo de atributos se hará de la siguiente manera: <!ATTLIST NOMBRE_ELEMENTO nombre_atributo NMTOKEN> Llegados a este punto sólo nos faltaría aprender como se declaran las entidades y notaciones en XML, no obstante, y como se mencionó anteriormente su complejidad hace que su estudio sea inabarcable en este artículo. Sí estamos en condiciones de escribir, no obstante, la Definición del Tipo de Documento (o DTD ) del documento XML que nos ha servido como ejemplo a lo largo de todo el artículo. Recordemos que dijimos que esta DTD podía declararse de manera externa (en un archivo distinto al documento XML al que se enlazaba/llamaba desde la Declaración del tipo de documento), o de manera interna (incluyéndola en el mismo documento XML). Veámos como se harían ambas cosas: DTD externa : el documento XML que aparece en la figura 1 tendría la siguiente DTD externa asociada, que denominaríamos, tal y como aparece en el documento misFotos.xml, “coleccionFotografias.dtd”: <?xml version=”1.0” encoding=”iso-8859-1” ?> <!ELEMENT COLECCION_FOTOGRAFIAS (FOTOGRAFIA)*> <!ELEMENT FOTOGRAFIA (AUTOR+, TITULO, FECHA, DESCRIPCION, FUENTE?)> <!ELEMENT AUTOR (#PCDATA)> <!ELEMENT TITULO (#PCDATA)> <!ELEMENT FECHA (#PCDATA)> <!ELEMENT DESCRIPCION (#PCDATA)> <!ELEMENT FUENTE EMPTY)>


<!ATTLIST COLECCION_FOTOGRAFIAS creador CDATA #FIXED “Pedro Guzmán”> <!ATTLIST FOTOGRAFIA identificador ID #REQUIRED formato (tiff | png | jpg) #IMPLIED tamanoByte CDATA #REQUIRED> <!ATTLIST FUENTE nombre CDATA “Bluetihinking” uri CDATA “ http://www.bluethinking.com/evam ” otrasFotos IDREFS #IMPLIED > DTD interna : este tipo de declaración implica que toda la información anterior estaría incluida en nuestro documento .xml. Se haría del siguiente modo: <?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?> <!DOCTYPE COLECCION_FOTOGRAFIAS [ <!ELEMENT COLECCION_FOTOGRAFIAS (FOTOGRAFIA)*> <!ELEMENT FOTOGRAFIA (AUTOR+, TITULO, FECHA, DESCRIPCION, FUENTE?)> <!ELEMENT AUTOR (#PCDATA)> <!ELEMENT TITULO (#PCDATA)> <!ELEMENT FECHA (#PCDATA)> <!ELEMENT DESCRIPCION (#PCDATA)> <!ELEMENT FUENTE EMPTY> <!ATTLIST COLECCION_FOTOGRAFIAS creador CDATA #FIXED "Pedro Guzmán"> <!ATTLIST FOTOGRAFIA identificador ID #REQUIRED formato (tiff | png | jpg) #IMPLIED tamanoByte CDATA #REQUIRED> <!ATTLIST FUENTE nombre CDATA "Bluetihinking" uri CDATA "http://www.bluethinking.com/evam" otrasFotos IDREFS #IMPLIED> ]> <!-- Documento XML definido para una colección de fotografías --> <COLECCION_FOTOGRAFIAS creador="Pedro Guzmán"> <FOTOGRAFIA identificador= "_001" formato="png" tamanoBytes="21272"> <AUTOR>Saúl Blanco</AUTOR> <TITULO>A mil años luz</TITULO> <FECHA>23-07-2006</FECHA>


<DESCRIPCION>Cabeza de una estatua…</DESCRIPCION> <FUENTE nombre="Bluethinking" uri="http://www.bluethinking.com/evam" otrasFotos="_015, _137" /> </FOTOGRAFIA> </COLECCION_FOTOGRAFIAS> Nota : se anima al alumno a copiar este último fragmento de código en el bloc de notas y guardarlo como misFotos.xml. Para comprobar si está correcto abrir el documento con la versión más actualizada que se posea del navegador Internet Explorer. Con lo aprendido hasta aquí deberíamos poder empezar a crear nuestros primeros lenguajes XML para la descripción de documentos (el lenguaje que hemos creado en el ejemplo (concretamente en la DTD) nos permite desarrollar documentos .xml que describen fotografias). Utilizar al comienzo un validador como el que incorpora Internet Explorer nos será de gran utilidad para coger soltura en la creación de nuestros documentos XML. Los documentos que tienen un tipo asociado y cumplen con él se denominan validos o de tipo valido . Por tanto, nuestro documento misFotos.xml sería un documento valido para el tipo COLECCION_FOTOGRAFIAS.

Conclusiones y otras tecnologías XML Los conocimientos adquiridos nos permitirán comprender y utilizar gran parte de los lenguajes de marcado construidos sobre XML, como son muchas de las especificaciones del World Wide Web Consortium (W3C), o los metadatos Dublin Core, que definen un lenguaje con un reducido conjunto de elementos (15 en total) para la descripción de cualquier recurso de información. No obstante, ésta es sólo una primera aproximación a las tecnologías XML, que no han dejado de evolucionar y de crecer desde su aparición. Aquellos que quieran alcanzar un grado de conocimiento elevado en esta materia deberán mantenerse al tanto de todas las noticias e iniciativas impulsadas por el W3C, así como conocer, al menos en cierta medida, la existencia de las principales tecnologías XML. A continuación se hará sólo una breve descripción de las mismas, ya que la profundización en ellas es inabarcable (el alumno interesado en alguna de ellas puede consultar la web del W3C y estudiar su versión más actualizada): Espacios de nombre (Namespaces): se utiliza este nombre para designar a la tecnología XML que nos permite definir un prefijo para renombrar nuestro marcado. Esto puede ser muy útil cuando dos personas o instituciones desean compartir sus recursos y algunas de sus marcas coinciden, siendo importante la diferenciación de dicho marcado. Imaginemos por ejemplo que dos canales de televisión, RTVE y Canal Sur de Andalucía, decidieran crear una colección conjunta de fotografías tomadas por sus reporteros, y que ambos canales de televisión ya poseyeran sus propios lenguajes con algunos de sus elementos en común (supongamos que en ambos se repite el elemento FOTOGRAFIA), ¿cómo podríamos diferenciar qué elemento pertenece a cada institución? Es tan sencillo como utilizar espacios de nombre que añaden un prefijo al nombre de nuestras marcas, que en el caso concreto de nuestro ejemplo podrían ser: <rtve:FOTOGRAFIA> y <csa:FOTOGRAFIA> Esquema XML (XML Schema): es un lenguaje con idéntica función a las DTDs, es decir, ofrece una alternativa a las DTDs para el diseño de lenguajes de marcado. Los esquemas XML son una


tecnología muy utilizada, ya que ofrecen la posibilidad de definir más exactamente qué datos contendrá un documento XML. Sus principales inconvenientes son: 1. La definición de esquemas es mucho más compleja que la definición de DTDs; 2. Los esquemas XML son difícilmente comprensibles para un humano, a no ser que se trate de un experto en esta tecnología (el código para la definición de un esquema está muy próximo al código de un lenguaje de programación). XLink : es la tecnología que permite crear enlaces entre distintos documentos XML. XHTML : es un lenguaje para el diseño de páginas web muy parecido a HTML. De hecho, puede decirse que es el resultado de la reformulación del lenguaje de marcas HTML aplicando las restricciones de XML para hacer más correcta su formulación. XPath : es la tecnología XML que permite localizar con precisión un elemento o atributo determinado en un documento XML para llevar a cabo alguna acción concreta con su contenido. XSLT (eXtensible Stylesheet Language Transformation): es un lenguaje que nos permite transformar un documento XML en otro documento XML, XHTML, PDF, etc. XPointer : es una extensión de XLink que permite enlazar desde un recurso, no ya a otro recurso como hace XLink, sino a cualquier posición, cadena de texto o marca de otro documento XML.

Bibliografía Livingston, Dan. Guía esencial XML . Prentice Hall, 2002. Gutiérrez, Abraham, y Martínez Raúl. XML a través de ejemplos . Ra-Ma,2001. Elliotte Rusty Harold. XML 1.1 Bible. 3ª ed. Wiley, 2004. World Wide Web Consortium (W3C). Extensible Markup Language (XML): ( http://www.w3.org/XML/ ). World Wide Web Consortium (W3C). Extensible Markup Language (XML) 1.1 . W3C Recommendation 04 February 2004, edited in place 15 April 2004 ( http://www.w3.org/TR/2004/REC-xml11-20040204/ ). xml.com ( http://www.xml.com/ ). xmlfiles.com ( http://www.xmlfiles.com/ ).


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.