Aprendiendo XML.pdf

12
Suplemento técnico del número 126 de NEWS/400 46 Septiembre 2002 VoyaaprenderXML¿meacompañas? Si como profesional tenías pensado profundizar en alguna nueva tecnología, ésta debe ser, sin más demora, XML. Aunque en estos momentos no tenga muy claro cuál es el camino a seguir, si me acompañas, lo recorreremos juntos. Por Carlos Bell A parte de lo que había ido leyendo por Internet, la primera vez que pensé seriamente que el aprender XML podía ser muy interesante desde el punto de vista de cualquier profesional de las Tecnologías de la Informa- ción fue cuando leí el artículo “XML cruza fronteras” de Sharon L. Hoffman, publicado en el número 107 de NEWS/400. Convencido de ello, me hice el firme propósito de destinar algo de tiempo a indagar en los fundamentos de esa nue- va panacea que prometía ser el XML (eXtensible Markup Language). Pero ya se sabe, cuando uno es algo perezoso y falto de voluntad, cualquier excusa es bue- na para posponer un buen propósito. Sin duda, para hacerme sentir culpable, en NEWS/400 volvieron a la carga, esta vez con un artículo divulgativo (francamente bueno) en donde Eduardo Ross (vicepresidente y director de investigación y desarrollo en ASNA desde 1987) nos exponía, bajo el sujestivo título de “XML: lenguaje para negocios electrónicos” (publicado en el número 111) los principios y posibilidades del XML de una forma clara y sencilla. Esta vez sí. Realmente estaba decidido: aprenderé XML sea como sea, me dije. Empecé a visitar páginas web específicas y a seleccionar y copiar parte de su contenido. Megas y megas de información acumulándose en carpetas y subcarpetas en el disco duro de mi PC esperando, vanamente, que “alguien” les diera una segunda oportunidad... Y al final, así ha sido. NEWS/400 tenía planificado para este número que los temas de portada se centraran en la utilización de XML en nuestra plataforma. ¿Qué mejor ocasión para comprometerme públicamente a destinar algo de mi tiempo personal para aprender XML como si fuera un juego? Al fin y al cabo, para dar los primeros pasos, con un simple editor de textos (como el Notepad de Microsoft), una versión actualizada de su navegador y los cientos de artículos que podemos encontrar en Internet, es suficiente. Si como profesional te habías planteado profundizar “un día de esos” en algu- na nueva tecnología, ésta debe ser, sin lugar a dudas, XML. Son tantas sus posibilidades y tantos los esfuerzos que realiza la industria para que el XML se generalice que hasta NOVATICA, la más decana y académica de las revistas informáticas españolas, le dedicará su próxima monografía. Y este mes de Sep- tiembre, en que de forma alegórica iniciamos un nuevo curso, es el mejor mo- mento para hacerlo. ¿Me acompañas? SUMARIO 1 Voy a aprender XML ¿me acompañas? 4 Estructura de un documento XML 8 DTD: Document Type Definitions

Transcript of Aprendiendo XML.pdf

Page 1: Aprendiendo XML.pdf

NÚMERO 46 HELP400 Suplemento Técnico 1

Suplemento técnico del número 126 de NEWS/400 46Septiembre 2002

Voy a aprender XML ¿me acompañas?Si como profesional tenías pensado profundizar en alguna nueva tecnología,ésta debe ser, sin más demora, XML. Aunque en estos momentos no tenga muyclaro cuál es el camino a seguir, si me acompañas, lo recorreremos juntos.

Por Carlos Bell

Aparte de lo que había ido leyendo por Internet, la primera vez que penséseriamente que el aprender XML podía ser muy interesante desde elpunto de vista de cualquier profesional de las Tecnologías de la Informa-

ción fue cuando leí el artículo “XML cruza fronteras” de Sharon L. Hoffman,publicado en el número 107 de NEWS/400. Convencido de ello, me hice el firmepropósito de destinar algo de tiempo a indagar en los fundamentos de esa nue-va panacea que prometía ser el XML (eXtensible Markup Language). Pero ya sesabe, cuando uno es algo perezoso y falto de voluntad, cualquier excusa es bue-na para posponer un buen propósito.

Sin duda, para hacerme sentir culpable, en NEWS/400 volvieron a la carga,esta vez con un artículo divulgativo (francamente bueno) en donde EduardoRoss (vicepresidente y director de investigación y desarrollo en ASNA desde1987) nos exponía, bajo el sujestivo título de “XML: lenguaje para negocioselectrónicos” (publicado en el número 111) los principios y posibilidades delXML de una forma clara y sencilla.

Esta vez sí. Realmente estaba decidido: aprenderé XML sea como sea, medije. Empecé a visitar páginas web específicas y a seleccionar y copiar parte desu contenido. Megas y megas de información acumulándose en carpetas ysubcarpetas en el disco duro de mi PC esperando, vanamente, que “alguien” lesdiera una segunda oportunidad...

Y al final, así ha sido. NEWS/400 tenía planificado para este número que lostemas de portada se centraran en la utilización de XML en nuestra plataforma.¿Qué mejor ocasión para comprometerme públicamente a destinar algo de mitiempo personal para aprender XML como si fuera un juego? Al fin y al cabo,para dar los primeros pasos, con un simple editor de textos (como el Notepad deMicrosoft), una versión actualizada de su navegador y los cientos de artículosque podemos encontrar en Internet, es suficiente.

Si como profesional te habías planteado profundizar “un día de esos” en algu-na nueva tecnología, ésta debe ser, sin lugar a dudas, XML. Son tantas susposibilidades y tantos los esfuerzos que realiza la industria para que el XML segeneralice que hasta NOVATICA, la más decana y académica de las revistasinformáticas españolas, le dedicará su próxima monografía. Y este mes de Sep-tiembre, en que de forma alegórica iniciamos un nuevo curso, es el mejor mo-mento para hacerlo. ¿Me acompañas?

SUMARIO

1 Voy a aprender XML¿me acompañas?

4 Estructura de undocumento XML

8 DTD: Document TypeDefinitions

Page 2: Aprendiendo XML.pdf

2 HELP400 Suplemento Técnico

Suplemento Técnico de NEWS/400Director General

Alberto C. Blanch [email protected]

DirectorAntonio Montía

[email protected]

CoordinaciónCarlos Bell

Jaime Gustavo Estany

Maquetación y ProducciónComplay, S.L.

[email protected]

ImpresiónPolicrom, S.A.

EDITAPublicaciones HELP400, S.L.

APTDO. DE CORREOS 8003 - 08080 BarcelonaGran Vía C. Catalanes, 715, Entlo. 3ª

08013 - BarcelonaTel. :93.231.00.49 Fax :93.231.03.09E-mail: [email protected]

Web: http://www.help400.com

Deposito legal: B-2757-90 I.S.S.N. 1133-8067

Suscripción: Anual (10 números al año). España: 96 • .Se distribuye conjuntamente con el ejemplar de NEWS/400, sin cargo para sus suscriptores.© Publicaciones HELP400, S.L. Se prohibe la repro-ducción total o parcial del contenido sin autorización previay por escrito de la empresa editora, titular del Copyright.Todos los derechos reservados en cualquier idioma.De las ideas expuestas en los artículos firmados son respon-sables sus autores. Corresponde al lector el asegurar quelas noticias, técnicas y procedimientos descritos son ade-cuados para su instalación. Publicaciones HELP400 S.L.no asume ninguna garantía ni implícita ni explicitamente.

IBM y AS/400 son marcas registradas por International Business Machines.

El movimiento se demuestra andandoConste que os he tendido una trampa. En el momento de redactar estas líneas,aparte del firme propósito de seguir adelante, no tengo muy claro cuál es elcamino a seguir ni los pasos que vamos a dar. Lo que si está claro es que lamejor forma de aprender a programar (una vez conocidos los fundamentos deun determinado lenguaje), es programando. Y aunque XML no sea un lenguajede programación propiamente dicho sino un meta-lenguaje de marcado que per-mite describir secuencias de datos, sólo practicándolo lograremos familiarizar-nos con él y con las tecnologías a él asociadas.

Dicho esto, recomendarte un poco de constancia y de paciencia. El “curso”acaba de comenzar y durante varios meses (XML da para eso y mucho más), através de HELP400 y de la información disponible en Internet, vamos a sercompañeros, y de paso, vamos a aprender un buen número de siglas y de nuevosconceptos. Eso sí: también deberías estar algo familiarizado con el desarrollo depáginas web (HTML y CSS) y algo de JavaScript y/o VisualScript porque mepropongo, partiendo de asimilar las principales caracteristicas y posibilidadesdel XML, llegar hasta el desarrollo de una aplicación gráfica (para el InternetExplorer) que nos permita jugar con diferentes formatos XML aceptados comoestándares, como puedan ser SVG (Scalable Vector Graphics) que permite crearpáginas web con grafismos y textos vectorizados o RDF (Resource DescriptionFramework) un modelo de datos en XML que permite describir recursos y surelación entre ellos

¿Por qué XML?Desarrollado a partir de 1996 como un subconjunto de SGML(Standard Generalized Markup Language), en 1998 XML fueadoptado como estándar por el W3C (World Wide Web Consor-tium). Desde entonces se ha convertido en un estándar interna-cionalmente reconocido que no pertenece a ninguna compañía ycuya libre utilización y versatilidad (figura 1) facilitará el usoefectivo de Internet en diferentes alfabetos, por personas conminusvalías físicas y en diferente hardware (teléfonos celula-res, PDAs, terminales Braille, etc.).

Al ser fácilmente procesable tanto por humanos como por soft-ware y separar radicalmente la información o contenido de supresentación o formato, un documento XML puede tener mu-chas formas de presentación (HTML, PDF, SVG, VML...) facili-tando a los diseñadores de páginas web hacer cambios de estilode manera sistemática. De hecho XML es, además, el formatoideal para transacciones B2B, permitiendo poderosas técnicasde extracción y de data-mining.

Los programadores también consideran que XML es un for-mato adecuado para intercambiar estructuras complejas comoparámetros. Un ejemplo sería el Lenguaje de marcas de llama-das a programas (PCML) que utiliza IBM en su “Toolbox paraJava” para hacer llamadas a programas. También pueden en-contrarse ejemplos de XML siendo utilizado para implementarinterfaces con objetos remotos para evitar la actividad generalasociada a RMI (Remote Method Invocation) y a CORBA(Common Object Request Broker Architecture). XML se está con-virtiendo en una herramienta imprescindible en la caja de he-rramientas de cualquier programador.

Como se trata de una herramienta excelente para el inter-cambio de datos entre distintas aplicaciones, sistemas y empre-sas, XML está sustituyendo rápidamente a las tradicionales

Page 3: Aprendiendo XML.pdf

NÚMERO 46 HELP400 Suplemento Técnico 3

corrientes de datos EDI (como X.12) como sistema de intercambio de documen-tos entre empresas. Muchas industrias, empresas de servicios (compañías deseguros y bancos) y del ámbito de la distribución están definiendo diferentesDTD (Definición de Tipo de Documento) para los documentos clave que necesi-tan transmitirse entre sus miembros.

El uso más ambicioso y prometedor de XML está en los servicios web (WebServices). Esta tecnología emergente se basa en localizar servicios, tanto si es-tán en Internet como en una intranet, y en ejecutarlos se encuentren donde seencuentren y sea cual sea su plataforma. XML es un puntal fundamental parala comunicación de componentes, claves del modelo de servicios web. Es de des-tacar que Microsoft está adoptando en su iniciativa .NET los servicios web yXML, lo que sienta las bases para la intercomunicación entre los sistemas .NETy J2EE.

Esta increíble gama de posibilidades es la que confiere a XML su potencia. Elsencillo concepto en que se basa (datos que se describen a sí mismos) está te-niendo un profundo impacto. Ha llegado la hora de averiguar en qué puedeayudarnos.

Créditos y reconocimientosComo para elaborar estos “apuntes” recurriré a textos, artículos y ejemplos re-cuperados de Internet (sí, esos que dormían en el disco duro de mi PC o losnuevos que se van publicando), en modo alguno quisiera atribuirme su autoría.Y puesto que de forma consciente pretendo dar una hogeneidad al conjunto, enmuchos casos me veré obligado a entremezclar contenidos de distinta proceden-cia (intentando respetar al máximo el original) de la que, en la medida de loposible, indicaré sus referencias.

Para establecer un primer contacto, he utilizado tres artículos: el primero,“Introducción a XML en castellano - Versión 2.0”, original de Alfredo Reino(www.ibium.com/alf/xml/index.asp ) preparado para el “IV Simpósium Interna-cional de Telemática”, de la Universidad de Colima (México) en Mayo de 2000(texto parcialmente utilizado en este número).

El segundo, “Introducción al XML - Versión 2 - 18/7/2001” original de Jai-me E. Villate (http://www.laespiral.org/xml/ ) de la Universidad de Oporto, pre-parado para un Seminario sobre Programa-ción en entorno GNU/Linux, celebrado en launiversidad Rey Juan Carlos (Madrid, Es-paña).

El tercero, del que me hubiera gustado in-cluir varios fragmentos, es el artículo de Ra-món Montero, titulado “XML, el lenguajeuniversal”, que puedes hallar en sus pági-nas web (http://www.ramon.org/xml/articulos/intro_xml-html.htm ).

Te recomiendo la lectura de los tres, casicasi de forma inmediata.

Como podrás compobar, los fundamentosde XML son muy sencillos. En las siguientespáginas veremos cómo crear documentosXML bien-formados, y que sean válidos, esdecir, que estén conformes a una determina-da DTD (Document Type Definition).

Próximamente veremos la creación y usode hojas de estilo (XSL) para la presentaciónde los datos, así como diferentes aplicacio-nes actuales de XML. ●

FIGURA 1Versatilidad del contenido XML

Page 4: Aprendiendo XML.pdf

4 HELP400 Suplemento Técnico

Estructura de un documento XMLXML (eXtensible Markup Language) no es, como su nombre podría sugerirnos,un lenguaje de marcado. XML es un meta-lenguaje que nos permite definirdatos y lenguajes de marcado, adecuados a usos determinados.

Por Alfredo Reino

Aunque a primera vista un documento XML puede parecer similar a HTML,hay una diferencia sustancial. Un documento XML contiene, exclusiva-mente, datos que se autodefinen. Un documento HTML contiene datos

mal definidos, mezclados con elementos de formato. En XML se separa el conte-nido de la presentación de forma total.

A un nivel muy básico, los documentos XML son ficheros de texto plano enlos que sólo existen cinco caracteres especiales o reservados (los símbolos me-nor que “ < ”, mayor que “ > ”, las comillas dobles “ " ”, el apóstrofo [o comillasimple] “ ' ” y el caracter “ &”) que nos permiten crear las marcas (o etiquetas)que dan estructura al documento XML. Cada marca tiene un nombre que, a suvez, puede contener uno o más atributos.

Como veremos, cuando en el texto de los datos es necesario utilizar uno de los5 caracteres especiales, para evitar que sea interpretado como un marcador se

sustituye por una “entidad” (&lt;, &gt;, &quot;,&apos;, &amp;).

Una forma de entender rápidamente la es-tructura de un documento XML, es analizandoel pequeño ejemplo incluido en la figura 1. Estemismo documento, para comprender mejor suestructura, podría ser representado gráficamen-te como en la figura 2.

Documentos XML bien-formadosExisten un número de diferencias entre la sin-taxis de HTML y XML. Es útil, para aquellosque saben HTML y quieren usar XML, cono-cerlas perfectamente, para poder crear docu-mentos XML bien-formados.

Estructura jerárquica de elementos. Los do-cumentos XML deben seguir una estructura es-trictamente jerárquica con lo que respecta a lasetiquetas que delimitan sus elementos. Una eti-queta debe estar correctamente incluida enotra. Además, los elementos con contenido, de-ben estar correctamente cerrados. En el siguien-te ejemplo, la primera línea <LI> sería incorrec-ta en XML, no así la segunda:

<LI>HTML <B>permite <I>esto</B></I>.

<LI>En XML la <B>estructura <I>es</I> jerár-

quica</B>.</LI>

Etiquetas vacías. HTML permiten elementossin contenido. Como ya veremos, XML también,

FIGURA 2Representación gráfica del ejemplo anterior

nombre: Alfredo Reino

email: [email protected]

nombre: Bill Clinton

emial: [email protected]

parrafo: ¿Hola qué tal?...

...

remite

destinatario

asunto: Hola Bill

texto

mensaje

FIGURA 1Documento XML: un pequeño ejemplo

<?xml version=»1.0"?><!DOCTYPE MENSAJE SYSTEM "mensaje.dtd"><mensaje> <remite> <nombre>Alfredo Reino</nombre> <email>[email protected]</email> </remite> <destinatario> <nombre>Bill Clinton</nombre> <email>[email protected]</email> </destinatario> <asunto>Hola Bill</asunto> <texto> <parrafo>¿Hola qué tal? Hace <enfasis>mucho</enfasis> que no escribes. A ver si llamas y quedamos para tomar algo. </parrafo> </texto></mensaje>

Page 5: Aprendiendo XML.pdf

NÚMERO 46 HELP400 Suplemento Técnico 5

pero la etiqueta debe ser <elemento-sin-contenido/> En el siguiente ejemplo, laprimera línea sería incorrecta en XML, no así la segunda:

<LI>Esto es HTML<BR>en el que casi todo está permitido</LI>

<LI>El XML, es<BR/> más restrictivos.</LI>

Un solo elemento raiz. Los documentos XML sólo permiten un elemento raiz,del que todos los demás son parte. Es decir, la jerarquía de elementos de undocumento XML bien-formado sólo puede tener un elemento inicial.

Valores de atributos. Los valores de atributos en XML, al contrario de HTML,siempre deben estar encerrados entre comillas simples o dobles. En el siguienteejemplo, la primera línea sería incorrecta en XML:

<A HREF=http://www.disney.com/>

<A HREF="http://www.developer.com/">

Tipo de letra, espacios en blanco. El XML es sensible al tipo de letra utiliza-do, es decir, trata las mayúsculas y minúsculas como caracteres diferentes. Siun elemento de XML está definido como “ELEMENTO”, no podemos usar “ele-mento”, ni “Elemento” para referirnos a él.

Existe un conjunto de caracteres denominados “espacios en blanco” que losprocesadores XML tratan de forma diferente en el marcado XML. Estos carac-teres son los “espacios” (Unicode/ASCII 32), tabuladores (Unicode/ASCII 9),retornos de carro (Unicode/ASCII 13) y los saltos de línea (Unicode/ASCII 10).

La especificación XML 1.0 permite su utilización para hacer más legible elcódigo, y en general son ignorados por los procesadores XML. En otros casos, sinembargo, resultan muy significativos, por ejemplo, para separar las palabrasen un texto, o para separar lineas de párrafos diferentes.

Nombrando cosas. Al utilizar XML, es necesario asignar nombres a las es-tructuras, tipos de elementos, entidades, elementos particulares, etc. En XMLlos nombres tienen algunas características en común.

Según la especificación XML 1.0: “Un nombre [empieza] con una letra o uno omás signos de puntuación, y [continúa] con letras, dígitos, guiones, rayas, dospuntos o puntos, denominados de forma global como caracteres de nombre. Losnombres que empiezan con la cadena "xml", se reservan para la estandarizaciónde ésta o de futuras versiones de esta especificación”

Resumiendo, no se pueden crear nombres que empiecen con la cadena “xml”,“XML” o cualquier otra variante. Las letras y rayas se pueden usar en cual-quier parte del nombre. Se pueden incluir dígitos, guiones y caracteres de puntua-ción, pero no se puede empezar por ninguno de ellos. El resto de caracteres,como algunos símbolos, y espacios en blanco, no se pueden usar.

Marcado y datos. Las construcciones como etiquetas, referencias de entidad ydeclaraciones se denominan “marcas”. Éstas son las partes del documento queel procesador XML espera entender. El resto del documento que se encuentraentre las marcas, contiene los datos entendibles por las personas.

Es sencillo reconocer las marcas en un documento XML. Son aquellas porcio-nes que empiezan con “<” y acaban con “>”, o bien, en el caso de las referenciasde entidad, empiezan por “&”y acaban con “ ; ”.

El prólogoAunque no es obligatorio, los documentos XML pueden empezar con unas líneaque describen la versión de XML, el tipo de documento, y otras cosas.

Page 6: Aprendiendo XML.pdf

6 HELP400 Suplemento Técnico

La primera, o “declaración XML”, define la versión de XML utilizada. Hastaahora sólo hay una, la “1.0”. Además, en la “declaración XML” especificamos lacodificación del documento, que puede ser, por ejemplo, US-ASCII (7 bits) o UTF-8 (código Unicode del que el ASCII es un subconjunto), UCS-2, EUC-JP, Shift_JIS,Big5, ISO-8859-1 hasta ISO-8859-7. En general, y para uso con lenguajes euro-peos (incluyendo el juego de caracteres especiales del castellano, utilizaremosUTF-7 o ISO-8859-1)

Además, se puede incluir una declaración de documento autónomo (stand-alone), que controla qué componentes de la DTD (Definición de Tipo de Docu-mento) son necesarios para completar el procesado del documento.

<?xml version="1.0" encoding="UTF-7" standalone="yes"?>

La segunda, o “declaración de tipo de documento”, define qué tipo de docu-mento estamos creando para ser procesado correctamente. Es decir, definimosqué declaración de Tipo de Documento DTD valida y define los datos que con-tiene nuestro documento XML.

En ella se define el tipo de documento, y dónde encontrar la informaciónsobre su “Definición de Tipo de Documento”, mediante un identificador público(PUBLIC) que hace referencia a dicha DTD, o mediante un Identificador Uni-versal de Recursos (URI) precedido por la palabra SYSTEM. Ejemplos:

<!DOCTYPE MENSAJE SYSTEM "mensaje.dtd">

<!DOCTYPE HTML PUBLIC "-/ /W3C/ /DTD HTML 3.2 Final/ /EN">

<!DOCTYPE LABEL SYSTEM "http://www.empresa.com/dtds/label.dtd">

ElementosLos elementos XML pueden tener contenido (más elementos, caracteres, o am-bos a la vez), o bien ser elementos vacíos. Un elemento con contenido es, porejemplo:

<nombre>Fulano Mengánez</nombre>

<aviso tipo="emergencia" gravedad="mortal">Que no cunda el pánico</aviso>

Siempre empieza con una <etiqueta> que puede contener atributos o no, ytermina con una </etiqueta> que debe tener el mismo nombre. Al contrario queHTML, en XML siempre se debe cerrar un elemento.

Hay que tener en cuenta que el símbolo “ < ” siempre se interpreta comoinicio de una etiqueta XML. Si no es el caso, el documento no estará bien-for-mado. Para ciertos símbolos se utilizan las entidades predefinidas, que se expli-can más adelante.

Un elemento vacío, es, como su nombre indica, el que no tiene contenido; porejemplo:

<identificador DNI="23123244"/> o <linea-horizontal/>

Al no tener una etiqueta de “cierre” que delimite un contenido, se utiliza laforma <etiqueta/> , que puede contener atributos o no. La sintaxis de HTMLpermite etiquetas vacías tipo <hr> , <br> o <img src="...">. En HTMLreformulado para que sea un documento XML bien-formado, se debería utilizar<hr/>. <br/> o <img sec="..."/>

AtributosComo ya se ha mencionado, los elementos pueden tener atributos, una manerade incorporar características o propiedades a los elementos de un documento.

Page 7: Aprendiendo XML.pdf

NÚMERO 46 HELP400 Suplemento Técnico 7

Por ejemplo, un elemento “chiste” puede tener un atributo “tipo” y un atributo“calidad”, con valores como “vascos” y “bueno”, respectivamente.

<chiste tipo="vascos" calidad="bueno">

Esto es un dia que Patxi y Josu van paseando…</chiste>

En el DTD se especifican los atributos que puede tener cada tipo de elemen-to, así como sus posibles valores y tipos. Al igual que en otras cadenas literalesde XML, pueden estar marcados entre comillas simples o dobles. Cuando unodelimita el valor del atributo, el otro se puede utilizar dentro.

<verdura clase="zanahoria" longitud=’15" y media’>

<cita texto="’Hola buenos dias’, dijo él">

A veces, un elemento con contenido, puede modelarse como un elemento va-cío con atributos. Un concepto se puede representar de muy diversas formas,pero una vez elegida una, es aconsejable fijarla en el DTD, y usar siempre lamisma consistentemente dentro de un documento XML.

<gato><nombre>Micifú</nombre><raza>Persa</raza></gato>

<gato raza="Persa">Micifú</gato>

<gato raza="Persa" nombre="Micifú"/>

EntidadesEn XML 1.0 existen cinco entidades predefinidas (&lt;, &gt;, &quot;, &apos;,&amp;). para representar los caracteres especiales menor que “ < ”, mayor que“ > ”, las comillas dobles “ " ”, el apóstrofo y el caracter “ & ” para que éstos nosean interpretados por el procesador XML como un marcado.

Secciones CDATAExiste otra construcción en XML que permite especificar datos, utilizando cual-quier carácter (especial o no) sin que se interprete como marcado XML. Estaconstrucción, llamada CDATA (Character Data) a ve-ces es necesaria para que los autores de documentosXML, puedan leerlo facilmente sin tener que descifrarlos códigos de entidades.

La figura 3 muestra un ejemplo, primero usandoentidades predefinidas, y luego con un bloque CDATA.Como vemos, dentro de una sección CDATA podemosponer cualquier cosa, que no será interpretada comoalgo que no es. Existe una excepción, la cadena “]]>”con la que finaliza el bloque CDATA y que no puedeutilizarse dentro de una sección CDATA.

ComentariosA veces es conveniente insertar comentarios en el do-cumento XML, que sean ignorados por el procesado dela información y las reproducciones del documento. Loscomentarios tienen el mismo formato que los comen-tarios de HTML. Es decir, comienzan por la cadena“<!--” y terminan con “-->”.

Como vemos en la figura 4, se pueden introducircomentarios en cualquier lugar de la instancia o delprólogo, pero nunca dentro de las declaraciones, eti-quetas, u otros comentarios. ●

FIGURA 3Secciones CDATA

<ejemplo>&lt;HTML>&lt;HEAD>&lt;TITLE>Rock &amp; Roll&lt;/TITLE>&lt;/HEAD></ejemplo>

<ejemplo><![CDATA[<HTML><HEAD><TITLE>Rock & Roll</TITLE></HEAD>]]></ejemplo>

FIGURA 4Comentarios

<?xml version="1.0"?><!— Aquí va el tipo de documento —><!DOCTYPE EJEMPLO [<!— Esto es un comentario —><!ELEMENTO EJEMPLO (#PCDATA)><!— ¡Eso es todo por ahora! —>]><EJEMPLO>texto texto texto bla bla bla<!— Otro comentario —></EJEMPLO><!— Ya acabamos —>

Page 8: Aprendiendo XML.pdf

8 HELP400 Suplemento Técnico

DOCUMENT TYPE DEFINITIONS (DTDs)Las posibles marcas o etiquetas que pueden aparecer en un documento XML ylos atributos que éstas pueden tener, son definidas en un fichero llamado“Definición del Tipo de Documento” (en inglés “Document Type Definition” ) osimplemente DTD. Cada documento XML debe indicar al comienzo el DTDusado por medio de una marca <!DOCTYPE>

Por Alfredo Reino

Crear una definición del tipo de documento (DTD) es como crear nuestropropio lenguaje de marcado, para una aplicación específica. Por ejem-plo, podríamos crear un DTD que defina una tarjeta de visita. A partir

de ese DTD, tendríamos una serie de elementos XML que nos permitirían defi-nir tarjetas de visita.

La DTD define los tipos de elementos, atributos y entidades permitidas, ypuede expresar algunas limitaciones para combinarlos. Los documentos XMLque se ajustan a su DTD, se denominan “válidos”. El concepto de “validez” notiene nada que ver con el de estar “bien-formado”. Un documento XML “bien-fomado” (o “conformado” según la terminología inglesa) simplemente respeta laestructura y sintaxis definidas por la especificación de XML. Un documento“bien-formado” puede, además, ser “válido” si cumple las reglas de una determi-nada DTD. También existen documentos XML sin una DTD asociada, en esecaso aunque no son “válidos”, tampoco son “inválidos”… simplemente están“bien-formados” (… o no).

Dónde reside una DTDLa DTD puede residir en un fichero externo que quizá esté compartido por va-rios (puede que miles) de documentos. O bien, como hemos visto en el Prólogo de

un documento XML, puede estar contenida en elpropio documento XML, como parte de su declara-ción de tipo de documento (figura 1).

En el ejemplo de la figura, a declaración del tipode documento comienza en la primera línea y ter-mina con “]> ”. Las declaraciones DTD son las lí-neas que empiezan con <!ELEMENT y se denominandeclaraciones de tipo elemento. También se pue-den declarar atributos, entidades y anotacionespara una DTD.

En el ejemplo anterior, todas las declaracionesDTD que definen “etiqueta” residen dentro del pro-pio documento. Sin embargo, la DTD se puede de-finir parcial o completamente en otro lugar (comoen el ejemplo de la figura 2).

Declaraciones tipo ElementoLos elementos son la base de las marcas XML, ydeben ajustarse a un tipo de documento declaradoen una DTD para que el documento XML sea con-siderado válido.

Las declaraciones de tipo de elemento debenempezar con <!ELEMENT seguidas por el identifica-dor genérico del elemento que se declara. A

FIGURA 1DTD como parte del documento XML

<!DOCTYPE etiqueta[<!ELEMENT etiqueta (nombre, calle, ciudad, pais, codigo)><!ELEMENT nombre (#PCDATA)><!ELEMENT calle (#PCDATA)><!ELEMENT ciudad (#PCDATA)><!ELEMENT pais (#PCDATA)><!ELEMENT codigo (#PCDATA)>]>

<etiqueta><nombre>Fulano Mengánez</nombre><calle>c/ Mayor, 27</calle><ciudad>Valderredible</ciudad><pais>España</pais><codigo>39343</codigo></etiqueta>

<?xml version=»1.0"?><!DOCTYPE coche SYSTEM «http://www.sitio.com/dtd/coche.dtd»><coche><modelo>...</modelo>...</coche>

FIGURA 2DTD externa

Page 9: Aprendiendo XML.pdf

NÚMERO 46 HELP400 Suplemento Técnico 9

continuación tienen una especificación de contenido. En los ejemplos incluidosen la figura 3 el elemento <receta> puede contener dentro elementos <titulo> ,<ingredientes> y <procedimiento> , que, a su vez, estarán definidos también enla DTD y podrán contener más elementos. Siguiendo la definición de este ele-mento, el primer ejemplo XML de la figura 3 sería válido, pero no así en elsegundo.

La especificación de contenido puede ser de cuatro tipos:EMPTY - Puede no tener contenido. Suele usarse para los atributos.ANY - Puede tener cualquier contenido. No se suele utilizar, ya que es conve-

niente estructurar adecuadamente nuestros documentos XML.Mixed - Puede tener caracteres de tipo datos o una mezcla de caracteres y

sub-elementos especificados en la especificación de contenido mixto. Según losejemplos de la figura 4, el elemento definido como <enfasis> puede contenerdatos de carácter (#PCDATA). Y el definido como <parrafo> puede contener tan-to datos de carácter (#PCDATA) como sub-elementos de tipo <enfasis> .

Element - Sólo puede contener sub-elementos especificados en la especifica-ción de contenido.

Para declarar que un tipo de elemento tenga contenido de elementos se especi-fica un modelo de contenido en lugar de una especificación de contenido mixto ouna de las claves ya descritas.

Modelos de contenidoUn modelo de contenido es un patrón que establece los sub-elementos acepta-dos, y el orden en que se aceptan. Un modelo sencillo puede tener un solo tipo desub-elemento; uno complejo, puede llegar a reque-rir indicadores de frecuencia. Analicemos algunosejemplos:

<!ELEMENT aviso (parrafo)> nos indica que <aviso>sólo puede contener un solo <parrafo>.

<!ELEMENT aviso (titulo, parrafo)> En este casola coma denota una secuencia. Es decir, el elemen-to <aviso> debe contener un <titulo> seguido de un<parrafo>.

<!ELEMENT aviso (parrafo | grafico)> La barravertical “|” indica una opción. Es decir, <aviso>puede contener o bien un <parrafo> o bien un<grafico>. El número de opciones no está limitadoa dos, y se pueden agrupar usando paréntesis.

<!ELEMENT aviso (titulo, (parrafo | grafico))>En ese caso, <aviso> debe contener un <titulo> se-guido de un <parrafo> o de un <grafico>.

Cada partícula de contenido puede llevar un indi-cador de frecuencia (figura 5), que siguen directa-mente a un identificador general, una secuencia o unaopción, y no pueden ir precedidos por espacios en blan-co. Para entenderlo, comentemos el último ejemploincuido en la figura 4. En este caso, <aviso> puedetener <titulo>, o no (pero sólo uno), y puede tener ceroo más conjuntos <parrafo><grafico>, <parrafo><parrafo><grafico>, etc.

FIGURA 3Declaración de tipo de elemento

<!ELEMENT receta (titulo, ingredientes, procedimiento)>

--- Ejemplo XML correcto ---<receta><titulo>...</titulo><ingredientes>...</ingredientes><procedimiento>...</procedimiento></receta>

--- Ejemplo XML incorrecto ---<receta><parrafo>Esto es un párrafo</parrafo><titulo>...</titulo><ingredientes>...</ingredientes><procedimiento>...</procedimiento></receta>

FIGURA 4Ejemplos de especificación de contenidos

<!ELEMENT salto-de-pagina EMPTY><!ELEMENT batiburrillo ANY><!ELEMENT enfasis (#PCDATA)><!ELEMENT parrafo (#PCDATA|enfasis)*><!ELEMENT mensaje (remite, destinatario, texto)><!ELEMENT aviso (titulo?, (parrafo+, grafico)*)>

FIGURA 5Indicadores de frecuencia

? Opcional (0 o 1 vez)* Opcional y repetible (0 o más veces)+ Necesario y repetible (1 o más veces)

Page 10: Aprendiendo XML.pdf

10 HELP400 Suplemento Técnico

Declaraciones de Lista de AtributosLos atributos permiten añadir información adicional a los elementos de un do-cumento. La principal diferencia entre los elementos y los atributos, es que losatributos no pueden contener sub-atributos. Se usan para añadir informacióncorta, sencilla y desestructurada.

Otra diferencia entre los atributos y los elementos, es que cada uno de losatributos sólo se puede especificar una vez, y en cualquier orden.

La figura 6 muestra un ejemplo XML y la lista de los elementos <mensaje>y <texto> de dicho ejemplo. Las declaraciones de los atributos empiezan con<!ATTLIST seguido del identificador del elemento al que se aplica el atributo. Lesiguen el nombre del atributo, su tipo y su valor por defecto. En el ejemplo, elatributo “prioridad” puede estar en el elemento <mensaje> y puede tener elvalor “normal” o “urgente”, siendo “normal” el valor por defecto si no especifica-mos el atributo.

El atributo “idioma”, pertenece al elemento texto, y puede contener datos decarácter (CDATA). Es más, #REQUIRED significa que no tiene valor por defecto, yaque es obligatorio especificar este atributo.

A menudo interesa que se pueda omitir un atributo, sin que se adopteautomáticamente un valor por defecto. Para esto se usa la condición #IMPLIED .Por ejemplo, en una supuesta DTD que defina la etiqueta <IMG> de HTML:

<!ATTLIST IMG URL CDATA #REQUIRED ALT CDATE #IMPLIED>

es decir, el atributo “URL” es obligatorio, mientras que el “ALT” es opcional (y sise omite, no toma ningún valor por defecto).

Tipos de atributosAtributos CDATA y NMTOKEN. Los atributos CDATA (character data) sonlos más sencillos, y pueden contener casi cualquier cosa. Los atributosNMTOKEN (name token) son parecidos, pero sólo aceptan los caracteres váli-dos para nombrar cosas (letras, números, puntos, guiones, subrayados y los dospuntos).

<!ATTLIST mensaje fecha CDATA #REQUIRED>

<mensaje fecha="15 de Julio de 1999">

<!ATTLIST mensaje fecha NMTOKEN #REQUIRED>

<mensaje fecha="15-7-1999">

Atributos enumerados y notaciones. Los atributos enumerados son aquellosque sólo pueden contener un valor de entre un número reducido de opciones.

<!ATTLIST mensaje prioridad (normal | urgente)

normal>

Existe otro tipo de atributo parecido, llamado denotación (NOTATION). Este tipo permite al autordeclarar que su valor se ajusta a una notación decla-rada.

<!ATTLIST mensaje fecha NOTATION (ISO-DATE |

EUROPEAN-DATE) #REQUIRED>

Para declarar las notaciones, se utiliza <!NOTATIONcon una definición externa de la notación. La

FIGURA 6Ejemplo que ilustra la Lista de Atributos

<mensaje prioridad="urgente"><de>Alfredo Reino</de><a>Hans van Parijs</a><texto idioma="holandés">Hallo Hans, hoe gaat het?...</texto></mensaje>

<!ELEMENT mensaje (de, a, texto)><!ATTLIST mensaje prioridad (normal | urgente) normal><!ELEMENT texto(#PCDATA)><!ATTLIST texto idioma CDATA #REQUIRED>

Page 11: Aprendiendo XML.pdf

NÚMERO 46 HELP400 Suplemento Técnico 11

definición externa puede ser pública o un identificador del sistema para ladocumentación de la notación, una especificación formal o un asistente de laaplicación que contenga objetos representados en la notación.

<!NOTATION HTML SYSTEM "http://www.w3.org/Markup">

<!NOTATION HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

Atributos ID e IDREF. El tipo ID permite que un atributo determinado tengaun nombre único que podrá ser referenciado por un atributo de otro elementoque sea de tipo IDREF. Por ejemplo, para implementar un sencillo sistema dehipervínculos en un documento:

<!ELEMENT enlace EMPTY>

<!ATTLIST enlace destino IDREF #REQUIRED>

<!ELEMENT capitulo (parrafo)*>

<!ATTLIST capitulo referencia ID #IMPLIED>

En este caso, una etiqueta <enlace destino="seccion-3"> haría referencia aun <capitulo referencia="seccion-3">, de forma que el procesador XML lo podríaconvertir en un hipervínculo, u otra cosa.

Declaración de entidadesMediante el uso de entidades, XML hace referencia a objetos (ficheros, páginasweb, imágenes, etc) que no deben ser analizados sintácticamente según las re-glas de XML. Se declaran en la DTD mediante el uso de <!ENTITY

Una entidad puede no ser más que una abreviatura que se utiliza como unaforma corta de algunos textos. Al usar una referencia a esta entidad, el analiza-dor sintáctico reemplaza la referencia con su contenido. En otras ocasiones esuna referencia a un objeto externo o local.

Las entidades pueden ser: Internas o Externas, Analizadas o No analizadas,y Generales o Parámetro.

Entidades generales internas. Son las más sencillas y básicamente son abre-viaturas definidas en la sección de la DTD del documento XML. Son siempreentidades analizadas, es decir, una vez reemplazada la referencia a la entidadpor su contenido, pasa a ser parte del documento XML y como tal, es analizadapor el procesador XML.

<!DOCTYPE texto[

<!ENTITY alf "Alien Life Form">

]>

<texto><titulo>Un día en la vida de un &alf;</titulo></texto>

Entidades generales externas analizadas. Las entidades externas obtie-nen su contenido en cualquier otro sitio del sistema, ya sea otro archivo deldisco duro, una página web o un objeto de una base de datos. Se hace referenciaal contenido de una entidad así mediante la palabra SYSTEM seguida de unURI (Universal Resource Identifier)

<!ENTITY intro SYSTEM "http://www.miservidor.com/intro.xml">

Entidades no analizadas. Evidentemente, si el contenido de la entidad co-rresponde a un archivo MPEG, una imagen GIF o un fichero ejecutable EXE(por ejemplo), el procesador XML no debería intentar interpretarlo como si fue-ra texto XML.

Page 12: Aprendiendo XML.pdf

12 HELP400 Suplemento Técnico

Este tipo de entidades siempre son generales y externas.<!ENTITY logo SYSTEM "http://www.miservidor.com/logo.gif">

Entidades parámetro internas y externas. Se denominan entidadesparámetro a aquellas que sólo pueden utilizarse en la DTD, y no en el documen-to XML. Se pueden utilizar para agrupar ciertos elementos del DTD que serepitan mucho. Se diferencian las entidades parámetro de las generales, en quepara hacer referencia a ellas, se usa el símbolo “ % ” en lugar de “ & ” tanto comopara declararlas como para usarlas.

<!DOCTYPE texto[

<!ENTITY % elemento-alf "<!ELEMENT ALF (#PCDATA)>">

...

%elemento-alf;

]>

Tambien puede ser externa:<!DOCTYPE texto[

<!ENTITY % elemento-alf SYSTEM «alf.ent»>

...

%elemento-alf;

]>

Ejemplo de DTDUn ejemplo de DTD que puede servir para resumir todo lo visto hasta ahorapodría definrnos un lenguaje de marcado para una base de datos de personascon direcciones e-mail. El fichero LISTIN.DTD podría ser algo así:

<?xml encoding="UTF-8"?>

<!ELEMENT listin (persona)+>

<!ELEMENT persona (nombre, email*, relacion?)>

<!ATTLIST persona id ID #REQUIRED>

<!ATTLIST persona sexo (hombre | mujer) #IMPLIED>

<!ELEMENT nombre (#PCDATA)>

<!ELEMENT email (#PCDATA)>

<!ELEMENT relacion EMPTY>

<!ATTLIST relacion amigo-de IDREFS #IMPLIED enemigo-de IDREFS #IMPLIED>

Par finalizar, y basándonos en este DTD, podríamos escribir nuestro primerlistín en XML:<?xml version="1.0"?>

<!DOCTYPE listin SYSTEM "LISTIN.DTD">

<listin>

<persona sexo="hombre" id="ricky">

<nombre>Ricky Martin</nombre>

<email>[email protected]</email>

<relacion amigo-de="laetitia"/>

</persona>

<persona sexo="mujer" id="laetitia">

<nombre>Laetitia Casta</nombre>

<email>[email protected]</email>

</persona>

</listin> ●

Alfredo Reino es informático profesional y posee las certificaciones MCSE y MCSA de Microsoft y CCNA de Cisco.Su página web la hallarás en http://www.areino.com