manual xml

41
introducción a ¡ -XHTML ! páginas web estándar ~ W3C nuevos estándares, nuevas reglas -XSL DTD validación de XML transformaciones de XML en HTML 4.50 EUR Número 8: Introducción a XML

Upload: caoxman

Post on 13-Jun-2015

4.063 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Manual xml

introducción a

¡ -XHTML! páginas web estándar~

W3Cnuevos estándares,nuevas reglas -XSLDTD

validación de XML

transformaciones de XML en HTML

4.50 EURNúmero 8: Introducción a XML

Page 2: Manual xml

, I1,

¡11,iI

J'(

I

, ,

~I !'1 I11 ,

IntroducciónQ

Prefacio: Bienvenido al curso sobre XML .•••••••.•••3

Asr empezó todo: SGML como lenguaJe dedescripción de documentos •..•••.••..•..•.•..........•.4

'fTML como lenguaJe de descripción de páginaspara el Web ••••.••.••••••.••.•••••••..•.•...•..•...•..•..•••••...•5

Caracterlstlcas de XML como Idioma del futuro •.7

EJemplos de aplicación: XML en la práctica 11

Resumen: caracterrstlcas de XML •.......••..•....•••.•.16

SECCIÓNPRÁCTlCAA:preguntas generales sobre laIntroducción ......••.•..•.••...••.•........•...••...••••••.•..••17

lección 1: IBlenvenldo XMLI Primeros Intentosprácticos •..••••••..•••.•.•••.•.•...••••••.•.....•.................18

Uso de caracteres especiales y entidades 20

lección 2: estructura arbórea de XML con unalista de tftulos .•••••.........••.••..•..•••..•..••............•..22

lección 3: crear una DTO para la lista de Ululos 24

lección 4: comprobar la validez de un documentoXML •••......•...•..••.•..•...•.....•...................•..•.......... 29.

SeccIÓNPRÁCTICAB: primeros eJercicios con XML32

lección 5: definir las etiquetas con atrlbutos .••..33

lección 6: Más sobre los atributos ........•...•.....•.. 38

lección 7: utilizar entidades como "comodlnes"41

SeccIÓNPRÁCTICAC: atributos, DTO y entidades ...44

Lección 8: anldaclón y Juegos con paréntesis enla DTD ••.•••.•.••••••••••••••••.•••.••..•..•...••.•..••.••..••..•..45

XMLlección 9: sobre espacios de nombres e Islas de

datos •......•....•.•...•.•......•...•..•.••...•.........•..•...•..••. 47

lección 10: HTML vive: XHTML como nuevaversión de HTML ••.•.••.•.•...•••••.•••••.•••.••.•••.••••••••51

SECCiÓNPRÁCTICAD: paréntesis, espacios denombres, XHTML ....••..••.•..•••...•.•.•••.•••••••••.•...•55

lección 11: dar formato a archivos XML:Introducción a CSS ....•......•......•.••...•...•••..••.••.• 56

Lección 12: crear una lista de productos con CSS59

Lección 13: más posibilidades con XSL o XSLT 61

Lección 14: XSLT para profesionales: organizar yclasificar ...................................•.........•..•.••..••.. 65

SeCCióNPRÁCTICAE: eJercicios sobre CSS y XSLT 68

lección 15: Introducción al concepto de esquemaXML •..•.•.•.....•..•••.••.....•..•...•..•..•......••.•...••••..•.•..69

lección 16: hlpervrnculos con XUnk .••....••..•••••.•73

Informarse, aprender, consultar: recursos sobreXML •.............•..•...••.....................•..........•.••...•.• 74

SeCCIÓNPRÁCTICAF: eJercicios sobre el esquema ylos hlpervrnculos •.••..•..•••.•..•••••.•••..•....•.•.••..•..•75

Los manuales de PC Cuadernos ....•...•.....•...•...... 76

Venta al número .................•..•..••.•.... ~.•..•.....•.•.....• 77

índice de palabras clave ...••..•..•..••••••..••.•..•..••••.•••78

ISBN 2-914944-08-X

~11~~IIIUIIII~9 782914 944083

---~----.--------~~~------------------------------------------------~

Page 3: Manual xml

2 PCCuademos

IntroducciónQ XML

Johann-Christian Hanke© Copyright, Johann-Christian Hanke

y KnowWare EURLTraducción: Mareotis Llenguatges S.L.

PC Cuadernos - Técnicoswww.pc-cuadernos.com

Sociedad editora:KnowWare E.U.R.L.

70, rue Georges VilletteF-77250 Ecuelles

FranciaDirector:

Mikkel FranckDirección electrónica:

[email protected]

ISSN : en cursoDepósito legal: en curso

ISBN 2-914944-08-X

Imprenta:OTM, Ikast, Dinamarca

Distribución quioscos:Coedis S.L.

Avda. de Barcelona, 225Molinsde Rei

BarcelonaVenta por números:

Después de su aparición, los númerosde esta colección pueden pedirse por

correo.(consulte la página 77)

Septiembre de 2002

PC Cuadernos - BásicosComo su propio nombre indica, está es-pecialmente dirigido a usuarios noveles.

PC Cuadernos - TécnicosCubre temas pensados, por lo general,para un público con más conocimientos,aunque también incluye la continuacióno el nivel superior de algunas de lasaplicaciones tratadas en PC Cuadernos- Básicos.

Formato prácticoLa presentación en forma de cuadernoes muy práctica, ya que permite dispo-ner de mucha información en poco es-pacio.Nuestros manuales de entre 64 y 80páginas equivalen a libros de 200 pági-nas en lo que se refiere a información;pero tienen un volumen dos ,veces in!e-rior. .. ¡y un precio mucho mas asequi-ble!Además, un cuaderno puede mantener-se abierto más fácilmente al lado delordenador. Es una verdadera herra-mienta de trabajo.

Enfoque realistaSiempre que el tema lo permita, encon-trará ejercicios o ejemplos concretos.Este enfoque práctico facilita su uso pa-ra la información y la formación autodi-dacta y permite un aprendizaje acelera-do.

Mikkel Franck, [email protected]

Todos los productos citados en este manual sonmarcas registradas o marcas comercial~~. El

autor y el editor declinan toda responsabilIdadque pueda surgir de la utilización de los dat~ o

programas que aparecen en este libro.

Prefacio 3

Prefacio: Bienvenido al curso sobre XML¿Qué aprenderá?Le presentaré paso a paso las características yventajas del nuevo lenguaje de descripción depáginas (del que he quedado francamente con-vencido). El cuaderno está pensado como uncurso, centrado en ejemplos y ejercicios paraponer en práctica la teoría.En esta lista le detallo los temas que trataremos:

• Los antecesores de XML: SGML y HTML• XML versus HTML• Ventajas de XML como lenguaje del futuro• Ya existe XML: WML, WSF y más• XHTML como reformulación de HTML• Práctica de XML: documentos bien formados• Introducción al concepto de las DTD• Validar los archivos XML• El nuevo estándar: esquema XML• Pruebas mediante parsers de validación• Dar forma a documentos XML con CSS• Más posibilidades con XSLT

Atención: puede descargar todos los archivosde los ejemplos directamente del Web. Los en-contrará en la sección de suplementos del Webde PC Cuadernos:http://www.pc-cuadernos.com.

XML todavía se encuentraen desarrolloNo me gusta pensar en mi primer curso sobreXM:L,porque le habría decepcionado. Hastaahora los lectores seguían mis cuadernos fiel-mente: les había hablado de cómo dar los pri-meros pasos para crear una página Web, cómodominar HTML y...siempre volvían.Volvían porque esperaban más de XML. Si todoel mundo habla de ello, algo tiene que tener deespecial. Buscaban la última tecnología para sussitios Web, pero pronto se dieron cuenta de que:• XML no-estaba pensado prioritariamente pa-

ra el diseño de sitios Web y por lo tanto nosustituiría el lenguaje HTML (por lo menos,no en los próximos años).

• XML, a diferencia de HTML, todavía se e n-cuentra en desarrollo. Muchas de las cosasque son naturales desde hace años en el casodel HTML no funcionan con XML. Porejemplo, ni siquiera los vínculos más senci-llos funcionaban con Internet Explorer 5.5.

• XML no representa datos por sí mismo, s o-lamente organiza la estructura.

• XML solamente está soportado en los últi-mos navegadores y no estaba indicado úni-camente para el Web.

Pero no servía de nada tener miedo. Despuésdel primer susto, los lectores empezaron a ad-quirir espíritu de pioneros.Trabajar con una nueva tecnología tambiénpuede ser divertido y ameno. Sobre todo, conuna tecnología que en los próximos años estarámás que asentada. Una tecnología de la que to-davía no se puede decir "esto es así", sino quehay que decir "esto será así" o, aún peor,"podría ser así".

Algunas de las cosas que se han escrito en estemanual son recomendaciones, y no un estándarconsolidado.¡Puede haber modificaciones!

Tu "tutor XML", Johann-Christian Hanke,Septiembre de 2002

Page 4: Manual xml

4 SGML como lenguaje de descripción de documentos

Así empezó todo: SGML como lenguaje de descripción de do-cumentos¡La diversidad es matadora! Quizás al lectortambién le suene familiar: alguien le envía untexto y... no puede abrirlo. El motivo es que esealguien utiliza un procesador de textos distintoy no existe ningún filtro.Sin embargo, incluso cuando se utiliza el mismoprograma de procesamiento de textos el éxitono está garantizado. Supongamos que su cono-cido utiliza una versión más reciente: será muydifícil que usted pueda abrir el documento,porque su programa no conocerá el formato dela nueva versión.

La torre de BabelEn realidad, en el mundo informático a vecespodríamos hablar de una "torre de Babel". Ca-da fabricante utiliza un formato propio para susprogramas, y aproximadamente cada dos añoseste formato cambia. Ni siquiera los filtros másavanzados consiguen transferir siempre todaslas características de un formato a otro sin pér-didas.¿Qué hará cuando quiera ver dentro de diezaños los documentos que haya creado hoy?¿Podrá abrirlos sin más? De acuerdo, quizás enel caso de la correspondencia privada no su-ponga un gran drama, pero ¿qué ocurrirá conlos documentos importantes de los organísmose instituciones oficiales?Este problema no es nada nuevo; hace décadasque se conoce. Por ello, en los años sesenta el Sr.Charles F. Goldfab se ocupó por encargo demM de la descripción de documentos. Fruto desu trabajo apareció el lenguaje GML, Generali-zed Markup Language.

El objetivo de GML era describir los docume n-tos de forma que el resultado no dependiese deuna determinada plataforma ni de una aplica-ción específica. No se trataba de la aparienciadel documento, sino de la estructura lógica delmismo, como la subdivísión en títulos, capítu-los, páginas y párrafos.

SGML se convierte en el estándar ISOGML fue evolucionando a lo largo de los años,y finalmente apareció SGML. SGML son las si-glas correspondientes a Standardized Generali-zed Markup Language, que en español significa"lenguaje general y estandarizado de marcado".El desarrollo del lenguaje iba tan rápido que en1986 se reconoció el lenguaje SGML como el es-tándar internacional ISO 8879.

En realidad, el objetivo de SGML era poderasegurar electrónicamente que los documentosimportantes fuesen independientes de los for-matos de archivo binario en constante cambio(Word, WordPerfect) o de los sistemas operati-vos (Windows, Mac-OS, Unix, etc.).Organísmos oficiales, empresas, organizacioneseducativas e instituciones guardan documentosen SGML. Un conocido mío que trabajaba comoasistente en una universidad de Berlín haceaños que se moría porque los trabajos científicosse guardasen en SGML.Sin embargo, por ese entonces él debía ser unode los pocos que cantaba las excelencias deSGML. Este lenguaje era desconocido para lamayoría de nosotros, a pesar de sus claras ve n-tajas.

SGML es complicadoSGML tenia una imperfección decisiva: era de-masiado complicado. En su desarrollo se habíatrabajado con la administración y las autorida-des en mente, no pensando en el usuario medio.En consecuencia, las herramientas de softwarepara la creación de SGML eran caras y no tuvíe-ron gran aceptación.Por ese motivo, no es de extrañar que el le n-guaje SGML no tuviese mayor difusión fuera delas aplicaciones ya mencionadas. Sin embargo,entonces llegó el World Wide Web y todo cam-bió ...

HTML como lenguaje de descripción para el Web 5

HTML como lenguaje de descripción de páginas para el Web¿Qué ocurrió en 1989/90? Efectivamente, cayóel muro de Berlín, pero no el¡a eso a lo que merefiero. En ese año se creó el World Wide Web.y el creador de esa gran telaraña fue ni más nimenos que Tim Berners-Lee, y lo hizo en Suiza.Berners-Lee trabajaba como informático en uncentro de investigación nuclear en Zurich.

Una "homepage" o, mejor dicho, una "páginaWeb", no es otra cosa que un documento contexto, vínculos y gráficos. Este documento oconjunto de documentos se encuentran en losservidores Web repartidos por el World WideWeb. Para vísualizar las páginas se necesita unbrowser o navegador. Se trata de un programaque se instala en el ordenador diente.

Para el transporte de los datos del servidor Webal navegador se utiliza un protocolo llamadoH1TP, Hypertext Transfer Protocol (Protocolode Transferencia de Hipertexto). De ahí viene elhttp:// antes de cualquier dirección Web.

El Warld Wide Web se puede considerar una es-pecie de "interfaz gráfica" para Internet. Todose puede realizar intuitivamente con el ratón.

WWW: Internet adquiere una di-mensión gráficaLo que la mayoría suele olvidar es que Internetya exístía hace tiempo. Los orígenes de la red seremontan a los años sesenta. Los primeros men-sajes de correo electrónico se enviaron en 1971en EE.UU., y además del e-mail también se uti-lizaban servicios como Usenet (foros de discu-sión), la descarga de archivos a través de FTP,la búsqueda de archivos con Archie o la bús-queda de bases de datos con WAIS.Sin embargo, moverse por las intrincadas ramasde esa t'élaraña era un auténtico suplicio: se tr a-taba de una unión elitista dirigida a militares,científicos y trabajadores de universidades, eincluso estos últimos no siempre sabían cómoutilizarlo.Para solicitar información, era necesario apren-der antes varios comandos crípticos y dejarselos dedos en el teclado. Si el lector conoce DOSo ha tenido que vérselas alguna vez con orde-nadores Unix, sabrá a lo que me refiero. En esemomento no exístía una interfaz de usuario grá-fica.

Así pues, no había nada para el usuario medio,sin tener en cuenta que por aquel entonces ni ellector ni yo habríamos tenido acceso a la red.Creo que no sería nada exagerado afirmar quela mayoría apenas conocía la exístencia de In-ternet.

HTML como lenguaje para sitiosWebHemos estado hablando todo el rato de estosdocumentos, pero lo verdaderamente interesan-te es el lenguaje en el que están escritos. A con-tinuación le hablaré de HTML, Hypertext Ma-rkup Language.Lee no era tonto y sabía que no había descubier-to la rueda. Se basó en estándares ya exístentes.Los sitios Web en formato HTML son una com-binación de:• ASCII• ySGML.

Seguro que conocerá las siglas ASCn, que co-rresponden a American Standard Code for In-formation Interchange (Código Estándar Ame-ricano para el Intercambio de Información). Setrata de un formato de texto puro estandariza-do. Se podría decir que ASCII es el "mínimocomún denominador" en la transferencia de da-tos entre ordenadores. Cualquier procesador detextos sencillo puede almacenar y leer archivosen formato ASCII.Los perros viejos de la informática seguramenteconocerán el formato ASCII como texto MS-DOS.

Todo esto cambió con el invento de Tim-BernersLee, que se llamaba World Wide Web. Y estaWeb o telaraña se basaba en un lenguaje de des-cripción de documentos llamado HTML.Con el World Wide Web aparecieron por pri-mera vez las páginas de colores en las que unopodia hacer dic. Apareció, al fin Yal cabo, loque hoy llamamos homepage o página Web.

Page 5: Manual xml

6 HTML como lenguaje de descripción para el Web

Las etiquetas o tagsSin embargo, con ASCII no es posible resaltarde ninguna forma los títulos ni aplicar negrita,cursiva o subrayado.Aquí es donde Lee recurrió a SGML. En SGML,las opciones de formato como "esto es un títu-lo", "este texto forma parte de una lista", etc. serepresentan por medio de las llamadas etique-tas o tags. Estas "marcas" se incluyen entre lossignos de menor y mayor que (c»),

Si desea dar formato a un texto como un títulode primer orden, deberemos escribir:<hl>Titulo de primer orden</hl>H1 es la abreviatura de Heading 1, o título deprimer orden. Uno de segundo orden sería H2,y así podríamos seguir. También exísten etique-tas para listas, definiciones, negrita, cursiva, etc.

El gran mérito de Lee fue la incorporación deun grupo limitado de etiquetas de SGML. Utili-zó únicamente las instrucciones que eran abso-lutamente indispensables. De esta forma,HTML se convirtió en una versión simplificaday mucho más comprensible de SGML. Muypronto aparecieron los primeros programas ca-paces de visualizar HTML, como el navegadorMosaic o el primer Netscape Navigator.

Por lo general, se suele decir que ni SGML niH1ML se ocupan del diseño. Al contrario, bás i-camente tratan la estructura.Los primeros navegadores obtenían los mismosresultados al interpretar el lenguaje HTML, in-dependientemente de si se trataba de texto, tí-tulos o listas. Por ese motivo, no podemos dejarde admitir que las etiquetas de HTML sí estánrelacionadas con el diseño.Además, naturalmente exísten instrucciones pa-ra asignar el tipo de letra, el tamaño de letra yel color, por ejemplo. Detrás de estas instru e-ciones se esconde el lenguaje llamado CSS, Cas-cading Style Sheets (Hojas de Estilo en Casca-da), que complementa perfectamente el lenguajeHTML.

No olvidemos los hipervínculosCasi nos habíamos olvidado de los vínculos, es-tas "puertas de salto" a otras páginas. Los vín-culos o enlaces forman parte indisoluble delWeb.Para ellos, Lee inventó una notación que empie-za con la etiqueta Anchor (de ancla). Este es elaspecto de un vínculo cualquiera:<a href:nhttp://www.pc-cuadernos.com">Este vinculo lellevará a PC Cuadernos</a>En el navegador, solamente aparecerá el textoEste vínculo le llevará a PC Cuadernos (y casisiempre aparecerá subrayado).

Ahora ya habrá comprendido el significado delas siglas HTML. Hypertext Markup Languagehace referencia a un lenguaje de descripción pa-ra "documentos de hipertexto", es decir, parasitios Web con hipervínculos.

La popularidad de HTMLHTML es tan fácil de comprender que el le n-guaje rápidamente tuvo una gran aceptación. ElWorld Wide Web y las páginas HTML dieron aInternet la popularidad que tiene actualmente.

El responsable del desarrollo de los lenguajes yestándares para el Web es una asociación lla-mada World Wide Web Consortíum, abreviadacomo W3C. Lo que propone la gente del W3Cse convierte unos pocos años después en están-dar del sector. El W3C cuenta con distintosgrupos de interés, además de con la participa-ción de empresas como Microsoft, IBM, Adobeo Sun. El director del W3C es Tim Berners-Lee,y su sitio Web lo encontrará en www.w3.org.

La versión actual de HTML es la 4.x. El lenguajeha madurado. Si desea más información, la en-contrará en mis cuadernos "Cree su página Web(D" y "Cree su página Web (ID", o tambiénpuede echar un vistazo a www.selfthtrnl.org.Para comprender XML le ayudará tener cono-cimientos de HTML, aunque no son un requisi-to indispensable.

Caracterrsticas de XML como idioma del futuro 7

Características de XML como idioma del futuroLo que SGML no pudo conseguir lo hizoHTML: el lenguaje se convirtió en un bestselIer.Empresas, instituciones y el ámbito privadoutilizan HTML para poner su contenido en elWeb.Los navegadores para poder visualizar páginasHTML son cada vez mejores, al igual que lasherramientas de software. Aunque los profesio-nales siempre prefieren el trabajo manual, cadavez es más sencillo almacenar documentosgrandes como un archivo HTML ..

Estoy convencido incluso de que HTML o lan~ev~ "Variante?e HTML", el XH1ML, segui-ran SIendo el estándar durante varios años en loque se refiere a diseño Web. XML se va ase n-tando en el Web lentamente, ya que el soportedel lenguaje se encuentra en sus primeras fases.

Extensible Markup Lang~age (XML)~~~~~~~

I ~~~~~--=~~~~,~;~w.I)XIfUI: ~ • .lInWThe~~IlIiIMW3C"I..or1t(lnr'llSlOpicinmore~For"*-d

rw..tIy~~~.}!lj,*:g>po!! •• )(MAm~E!l::fIdli2!S.2!líll!LMII!M....S& sm}M Skn'll'l'IkldC!rprjg!ttmoo

Wortlng Draft.

; ::::::~~-::"'for••~-=-:.....s<hll~::.~~:-~.e'ldXM.u<wng'A'G'J n..xKk!dy2Jl"f.I2!'Jns:Wt!u.tc.. •••••••.••••••• 1._DI1

:~~~ t'.'-IIeá("'"""H'iv,.........."...~~~=--1O~a1 ~• ~"""""'"m,rmw·(rml'!O!!!$ ~

y si resulta que HTML es magnífico, ¿por quéno dejamos que ocupe el trono para siempre?

¿Qué es XML?¿Qué razón nos llevó a inventar algo nuevo?¿Por qué después de SGML y HTML irrumpióXML? ¿Qué significa XML?

Las siglas XML corresponden a eXtensible Ma-rkup Language, o Lenguaje de Marcado Exten-sible. El World Wide Web Consortium (W3C)presentó XML en 1998, aunque las primeras in-vestigaciones empezaron en 1996.

Working Drafts en el W3C: XML todavía se encuentra endesarrollo

Antes de adentramos en las características deXML, intentaremos responder a la pregunta depor qué era necesario otro lenguaje de descri p-ción de documentos.

Mitos y hechos sobre XMLExísten varios mitos y falsas asunciones sobre ellenguaje XML en la comunidad de Internet.Lo cierto es que XML es un lenguaje de descri p-ción de documentos, un factor que tiene en co-mún con HTML o SGML. También es cierto esXML permite definir tags (etiquetas) propios.Efectivamente: con XML el autor es quien do-mina la estructura del documento.Sin embargo, no es verdad que XML sea la úl-tima novedad para crear fantásticos sitios Webinteractivos. XML no es el sucesor directo déHTML ni tampoco un lenguaje de diseño ensentido estricto.

Desventajas de HTMLPara comprenderlo, es necesario conocer lasdesventajas de HTML. Y es que con el tiempo sehizo patente que HTML no era perfecto.

• HTML estaba pensado para mostrarse en unnavegador Web, pero no está tan indicadopara la impresión o para tareas de diseño.¿Márgenes de página? ¿Formato de papel?¿Párrafos? ¿Encabezado y pie de página?¿Índices, tablas, referencias cruzadas? Inclu-so ayudándonos de CSS, poco se puede ha-cer para acomodar estos elementos conHTML.

• Las etiquetas existentes son limitadas, demodo que el lenguaje no es demasiado flexi-ble. ¿Qué hacer cuando, por ejemplo, unonecesita incluir gráficos vectoriales u hojasde cálculo en un proyecto? Con HTML nohay forma.

Page 6: Manual xml

8 Características de XML como idioma del futuro

• HTML no puede mostrar contenido dinámi-co, y este hecho es especialmente importante:supongamos que necesita mostrar determi-nados productos de una base de datos depedidos; es imposible. La representación delos datos en tablas HTML es estática y sola-mente se pueden realizar consultas a basesde datos con ayuda de lenguajes de secuen-cias de comandos (Perl, PHP, etc.) y creardocumentos H1ML nuevos en función de laconsulta.

• La estructura y el diseño están mezclados.

El último inconveniente es precisamente el deci-sivo. ¿Qué tiene de malo?

Mezcla: estructura y diseñoAntes he afirmado que el lenguaje HTML seocupa principalmente de la estructura y menosdel diseño. Eso es cierto, aunque solo en parte.Como hemos mencionado, en HTML cada eti-queta tiene una característica incorporada. Untítulo de primer orden <h1></hl> tendrá un ta-maño mayor que <h2></h2>. Los títulos y pá-rrafos «p></p» tienen asignada además unadeterminada distancia.Un párrafo formateado con las etiquetas<b><fb> (b de bold) aparecerá en negrita y la eti-queta «hr» creará, en función del navegador,una bonita línea en pantalla. Así podríamos se-guir nombrando las distintas etiquetas, y ve-ríamos que HTML también asume cuestionesrelativas al diseño o disposición.

~·Er{8i!MLl¡'.la~esfrUCtlmG"él1,irseñ(i esfán'1ñezl:';~ -<~:.~,.i.: ".~'~ '¡ct~9Q~'-~~~..¡o,' "!~-'~ ~~:

Sin embargo, HIML no es perfecto en ningunode los dos ámbitos. En lo que se refiere al dis e-ño, HTML no funciona de forma óptima debidoa sus posibilidades limitadas. Por ese motivo,los diseñadores Web tienen que recurrir a dis-tintos trucos o utilizar un lenguaje adicionalcomo las hojas de estilo en cascada (CSS).Ya hemos hablado de los inconvenientes estruc-turales: la existencia de un grupo limitado deetiquetas no es suficiente y la administración dedatos con tablas HTML es casi impracticable.HTML no está indicado para tareas del futuro.

Limitación al WebSin embargo, hoy en dia HTML es inflexible consu limitación para su uso en el Web.

Si uno desea utilizar la información existente enun sitio Web con otros fines (catálogo impreso,audio, etc.), antes es necesario convertirla a unformato adecuado.

Lo mismo ocurre con el proceso inverso: los d a-tos procedentes del procesamiento de textos, e a-tálogos o bases de datos deben convertirse aHTML para poder visualizarlos en el Web. ¿Nosería increíble que existiese un formato de basepara todo ello?Pues bien, este formato de base ya existe.

XML como lenguaje únicamentepara estructurasXML es, a diferencia de HTML, un lenguaje pu-ramente estructural, que no incluye ninguna in-formación relativa al diseño. De ello se deduceque XML en su forma pura no está indicado pa-ra la representación (visualización) de datos. Sinembargo, se encarga de fijar la estructura de losdocumentos.

XML almacena solamente los datos, la estructu-ra. Para dar un formato adecuado a dichos d a-tos para cada finalidad se debe utilizar un len-guaje de diseño.

XML está especialmente indicado para datosque deban estar estructurados desde el princi-pio. Estoy pensando, por ejemplo, en listas dedirecciones u otros datos que se administren enforma de tabla, como bases de datos, trabajoscientíficos, etc.Sin embargo, también es posible crear una es-tructura para documentos convencionales parapoder utilizar XML para la notación de la in-formación.

La invención de una estructura es, sin duda,más complicado que la sencilla creación de do-cumentos HTML con un editor gráfico.

Características de XML como idioma del futuro 9

Principales características de XMLAlgunas de las características de XML sonrealmente tentadoras y van mucho más allá delas posibilidades de HTML:• Es posible definir tags propias.• También se pueden asignar atributos a las

etiquetas.• Las etiquetas y atributos se definen de forma

exacta mediante un esquema. Dicho esque-ma se llama definición de tipo de documen-to, abreviado como DTD.

• La estructura y el diseño están totalmenteseparados.

Otras características de XMLXML tiene otras características que le auguranmucho futuro:

XML como estándar abierto no sujetoa licenciasEmpecemos con la sensación: XML es un están-dar abierto y no requiere una licencia. Cual-quiera puede utilizar este formato de datos,cualquiera lo puede comprender y, con un pocode paciencia, también leer. Y esto es un hecho.

Por lo tanto, ya no es necesario que los progr a-madores "desarrollen" sus propios formatos dearchivos binarios incompatibles con los de lacompetencia. No importa si se trata de proc e-samiento de texto, hojas de cálculo o un pro-grama de presentaciones: en todos los casos sepodría utilizar un esquema que los fabricantesutilizarían como formato general.

Todavía está por ver si los fabricantes realmentedesean algo así. Sun ya utiliza en su nuevo pa-quete ofimático StarOffice 6 (Open Office 1.0) elformato XML como "formato interno" . Másadelante le daré más información.

Si bien es cierto que la familia Microsoft Officetambién trabaja con el formato XML desde 1999,no tiene mucho que ver con el "verdadero es-tándar": Microsoft utiliza en la conversión aH1ML las llamadas islas de datos XML, que seincrustan dentro de HTML. En ellas, el fabrican-te incluye informaciones específicas de Word oExcel que deben garantizar una buena reimpor-tación en Office.El formato estándar binario real no ha sido re-emplazado por XML, y en la nueva versión XPde Office tampoco ha cambiado nada en estesentido.

XML es internacionalizableXML es internacionalizable, trabaja con cual-quier conjunto de caracteres. Sin embargo, eneste cuaderno nos ceñiremos a 150-8859-1, elconjunto de caracteres de Europa occidental.

XML está basado en texto puroEl estándar XML está basado únicamente entexto y no utiliza el formato binario. ¿Y que tie-ne esto de bueno?¿Ha intentado divertirse algún dia abriendo unarchivo de Word o Excel en un sencillo editorde texto?

Interesante: formato binarlo de Word en el Bloc de notas

La imagen ilustra lo que intento mostrarle. Se lepresentará un conjunto de caracteres ininteligi-bles, cuyo significado posiblemente sea un se-creto reservado a Microsoft.Por el contrario, los archivos de texto se puedenleer y comprender fácilmente.

Page 7: Manual xml

10 Caracteristicas de XML como idioma del futuro

Debo admitir que el formato de texto tiene uninconveniente: requiere mayor espacio de alma-cenamiento. Pero este espacio es cada vez másbarato. Por ese motivo, este argumento cada díapierde importancia, y las ventajas del formatode texto superan los inconvenientes.

Además, hace tiempo que existen eficaces for-matos de compresión como ZIP o ARJ que per-miten "encoger" el tamaño de los archivosXML.

Ideal para conservar datos a largoplazoXML está indicado, al igual que SGML, para elarchivo de datos a largo plazo. Y además, otraventaja que ya habíamos mencionado: XML sepuede convertir fácilmente a otro formato.

XML es modular, ampliableLa construcción modular se aplica constante-mente: en muebles de Ikea, en piezas de Lego,en ordenadores personales o en XML.y eso nos lleva a la siguiente cuestión: XMLtambién se puede ampliar. Al fin Y al cabo, poralgo se llama Extensible Markup Language, len-guaje de marcado extensible.

,.-,t EiS"lln:t1lát~leñgu?leap~iairJ:re1}:uar 1~gM~~r~r~ti~J~rigJÍl.¡ijªª .~~\ .•..~;2:.

Incluso es posible crear lenguajes propios basa-dos en el código de XML. Pero no vayamos tanlejos todavía. Volvamos a los "módulos".

Lenguajes basados en XMLMuchos de estos módulos o lenguajes basadosen XML ya existen o se encuentran en fase dedesarrollo.MathML (Mathematical Markup Language) esun lenguaje de descripción pensado especial-mente para crear fórmulas matemáticas.¿Necesita un par de hipervínculos en XML?Solamente con XML no lo conseguirá. Pero loslenguajes XLink y XPointer se ocupan de enla-zar con otros documentos. Las posibilidades deenlazar actualmente superan ampliamente elconcepto de hipervínculos de HfML, ya que en-tre otras cosas es posible enlazar a secciones e n-teras de páginas.Si desea incorporar un toque multimedia a suspáginas XML, utilice el módulo "SMIL". SMIL(Synchronized Multimedia Integration Langua-ge) se aplica para incorporar multimedia (TV,video).Para crear gráficos vectoriales existe SVG(Scalable Vector Graphics). Se trata del futuroestándar para la creación de gráficos vectorialesescalables.

Las páginas Web pensadas para móviles conWAP ya se están creando en WML. WML tam-bién es una "aplicación práctica de XML".

y aquí dejaremos nuestros augurios de futuro.¿Es el lenguaje XML ya algo más que un sueñoy un enorme terreno en obras?Por desgracia, "obras" es el término adecuadopara describirlo. Pero algunas partes ya estánterminadas, tal como le mostraré en las páginassiguientes.

Algunos ejemplos: XML en la práctica 11

Ejemplos de aplicación: XML en la prácticaEl concepto modular ya mencionado dellen-guaje HfML conllevará qUE:XML se consolidecomo formato de documento universal, inde-pendiente de cualquier plataforma y programa.Ya existen varias aplicaciones prácticas muyvalientes y prometedoras. No importa si es unabase de datos o una aplicación ofimática: XMLno se limita únicamente al World Wide Web.

FileMaker utiliza el formato XMLAsí, por ejemplo, el fabricante FileMaker ya uti-liza el estándar XML en su conocida base de da-tos FileMaker Pro. De este modo, FileMaker sepuede concentrar en las tareas propias de unabase de datos: en guardar, buscar y ordenar d a-tos.La presentación de los datos XML y su conver-sión a HfML es responsabilidad de cualquiernavegador.

.l!l!lOl!!llCl:::~r;;..-·-fI'Ml'lI!nloo:e~ ._..._.¡,p; ••• I••.••••••· ~¡.~...,"'"""I_.ru,,", ,.~~;-.._ ~ •..••" .••.\IoO':Óo

FII.M ••• r XML c.ntral FiI~

=::===;::.-==;::::~ ~J----_._ ....._---- - ~ ._ .. 'e.o_.ooo •• _~=--_._.._--_-.,

PretMntaclón de FlleMaker y XML.-~tm&J. 'f.!,. ...;ít¡;=:;-..::::.-:::-...:...- ...•o.;~ ••...:...-=.::=== •.~.;o..:~=~.:..""=::.::::=_. =~OO::W'b

La base de datos FileMaker se basa totalmente en XML

En el sitio Web de FileMaker esta ventaja estámuy bien documentada. Le recomiendo que vi-site www2.filemaker.fr/spain/ (.com) y busquela palabra clave xm1. .

WAP es una aplicación XMLNo importa si es una palabra mágica o un fraca-so del siglo XX: las páginas Web para teléfonosmóviles con WAP ya se creaban en WML. YWML también es un "dialecto de XML".

Navegador WAP

In.trucdonn:Introduzca la dirección de unsitio WI>P en si campo de textoque hay debajo delnavegadorWI>P y haga clic en "Ver sitioW/IP- para ver la página.Advertencia:Puede ser que algunos sitiosWAP no se vean correctamenteen el navegador WNJ deYahool.J Qué pyedo hacer con elnavegadQcWAP?

WAP es una especie de "Mlni-HTML" basado en XML

En este sentido, WAP hace uso de algunas eti-quetas conocidas de H1ML, aunque la sintaxisestá sujeta al estricto estándar de XML.

El nuevo vestido de HTML: XHTMLHablando de estándares estrictos: el World W i-de Web Consortium también "dio nueva vida"al clásico lenguaje HIML en forma de XHfML.XHTML no es otra cosa que una reformulacióndel estándar HTML aprovechando las estrictasreglas de XML. Encontrará más información enla página 51.

Medias tintas: Microsoft OfficeComo ya hemos dicho, Microsoft-Office tam-bién utiliza el formato XML desde 1999, aunqueno lo hace de forma estricta: al convertir archi-vos a HfML, MS Office trabaja con las llamadasislas de datos XML que se insertan en H1ML.En estas islas, Microsoft incluye informaciónespecífica de Word o Excel con el fin de gara n-tizar la reimportación de los datos sin pérdidade información. Puesto que el formato estándarbinario de Office no ha sido sustituido porXML, esta sol ución se queda a medio camino.

Page 8: Manual xml

12 Algunos ejemplos: XML en la práctica

Wlndows Scripting HostWindows Scripting Host (WSH), la conocida in-terfaz para programadores de Windows, trabajadesde la versión 2.0 con WSF, el formato de se-cuencias de comandos de Windows. Detrás deeste formato también se esconde XML.

El culpable de la mala reputación de ScriptingHost son los gusanos del correo electrónico.Muchos virus de este tipo se activan gracias aque en el ordenador está instalado WSH.

Channel Definition FormatMicrosoft parece adorar XML, ya que inclusolos desdichados canales que aparecían en el an-tiguo Internet Explorer 4 ya se escribían en ellenguaje "adaptado a XML" CDF, el ChannelDefinition Format.

XML en StarOffice/OpenOfficeEn el momento de redactar este cuaderno, en el ,sector de la informática se está produciendouna revolución: en mayo de 2002 apareció laprimera suite de ofimática basada totalmente enel formato estándar XML. Se trata del programaStarOffice de Sun.

La versión comercial de StarOffice cuesta alre-dedor de 79 euros y se puede pedir a través dewww.amazon.com. por ejemplo. La versióngratuita y con algo menos de funcionalidad sellama OpenOffíce y se puede descargar desdewww.openoffice.org.

StarOffice realmente guarda todos los docu-mentos en formato XML. Así, cualquiera puedevisualizar y modificar la información.

Entre bastidores¿Ha instalado este programa ofimático en sudisco duro? Intente crear un archivo de texto.

Un documento de prueba en OpenOffice Writer 10.1

Todos los documentos de Office se comprimensiguiendo el proceso ZIP. De este modo, los po-drá extraer con cualquier programa compatible,por ejemplo WinZip o el programa descompre-sor integrado en Windows XP. Solamente es ne-cesario sustituir la extensión propia del pro-grama sxw por zip y ya tendrá acceso al conte-nido del archivo.

Doo.mentoXM.DocunentoXM.DoarnenI:o XM.Doo.mento XMI.Doo.mentoXM.

De un sxwtenemos un z/p: el nacimiento de un archivo

El contenido de texto del documento se encuen-tra en el archivo content.xml. Es posible abrir elarchivo con cualquier editor de texto o, despuésde eliminar el vínculo a la DTD, observarlo enel navegador:

c!ta_t:wquef>C.....oocb><tut:" 1.~t:sti·Ie·".". •••.•• oding 1" Itltt:lilv ••• ·l·::>OoC:umentO de

pnI..bIl</t •• t:h>.:::e:d:ptext:sry,.-n_."8tonct.td"l>d."t:p teKl :st\lle·.,_."Stano;a..nS":>E5tOV prDbando pora ver c6mo

funciono" .dItlM' de texto de OpenOlftce.c/tlld:lI>

</offiu:body><loffic.: cklcunent -canten!:>

Estructura clara: extracto de content.xml

En el archivo meia.xml se incluyen la llamadameta-información sobre el documento, es decirlas "propiedades del archivo".En el archivo settings.xml encontrará informa-ción sobre la configuración para la impresión. Elarchivo styles.xml incluye los estilos y formatosdefinidos para el documento.

Algunos ejemplos: XML en la práctica 13

El archivo meta-inf/manifest.xml describe la es-tructura del archivo XML.

OpenOffice también guarda la definición del ti-po de documento (hablaremos de ella más ade-lante) abiertamente en el disco duro.

De este modo, cualquiera puede acceder a estainformación. Ocurre lo mismo que en el caso deHTML: el que tenga buenos "conocimientos delcódigo fuente" podria crear documentos deOffice sin prácticamente necesitar el programaOffice.Al igual que para crear HTML basta con un ed i-tor de texto sencillo, cualquier aficionado a la.informática pueda crear archivos de Office conel Bloc de notas. En el futuro la gente elegirá suproducto ofimático, no tanto en función delformato de archivo (¿puede leer documentos deWord 2000?), sino basándose en la comodidadde uso. En el fondo, todos los programas cre a-rán (esperemos) XML puro.

Las interfaces XML son abiertas y están biendocumentadas.

¿Cuáles son los inconvenientes deXML?Hablemos de sus inconvenientes. Una claradesventaja de XML es la gran necesidad de e s-pacio de disco del formato de texto (de la queya hemos hablado) en comparación con los da-tos binarios. Pero esta desventaja queda com-pensada porque el espacio de disco cada vez esmás barato.Además, existen formatos de compresión muyeficaces como ZIP o ARJ, que se pueden utilizarpara ahorrar espacio en los archivos XML.

Los desarrolladores de StarOffice han integradouna rutina de compresión en el programa.

Una estructura, muchos diseñosSi la estructura y el diseño están separados,¿cómo se debe mostrar el contenido XML? De-penderá del uso que se quiera dar a la informa-ción, o incluso de si se desea visualizar de algu-na forma.

I

I1

En el caso de las aplicaciones XML especiales,no hace falta representar o visualizar el conteni-do. La aplicación correspondiente se encargaráde interpretarlo. El formato WSF, por ejemplo,solamente funciona en Windows Scripting Hosta partir de la versión 2.0. Se trata de la ejecuciónde comandos de programación partiendo de unconjunto de comandos establecido.También WML, el lenguaje para páginas WAP,se basa (paradójicamente) en un conjunto decomandos predeterminado. Utiliza las conoci-das etiquetas de HTML para representar los d a-tos -en el móvil.y los archivos XML de StarOffice u OpenOfficesolamente tienen sentido (hasta ahora) en losprogramas correspondientes.

XML puroPero observemos al "XML puro" en la forma enla que deseo presentárselo. Pensemos primeroen la representación en Internet. Para ello debe-rá recordar un lenguaje de diseño como CSS oXSLAunque CSS sigue siendo la elección habitualpara mostrar los datos en el navegador Web, ellenguaje XSL, que todavía se encuentra en fasede desarrollo, también se podrá utilizar paraotros propósitos.Modifique los datos de forma que estén indic a-dos para la impresión de un catálogo de alta ca-lidad. Para ello necesitará un lenguaje de des-cripción para la impresión, como Postscript o elestándar de Adobe, PDF (Formato de Doc u-mento Portable).Transforme su información basada en XML enun documento de Word o en una hoja de cál-culo.Prepare los datos para que un software telefóni-co se los pueda leer al cliente.La forma en la que se solucionan todos estosaspectos depende de cada programa. Recuerdeesto:

,'';' 'estructuraséguirá siendólamlsma;'sofia',:j:':'merÍt~ se pued~:alusti!lrl~ repré~nta.d9!1~;~·:~

Pero volvamos a la realidad de nuestro cuader-no. A continuación hablaremos de navegadoresWeb e Internet.

Page 9: Manual xml

14 Algunos ejemplos: XML en la práctica

XML no siempre está a la vistaEn Internet también se hace un uso extensivo deXML. En ese caso, este formato suele trabajar"entre bastidores".Un buen ejemplo sería un carrito de la compra.Se preguntará qué tiene que ver un carrito de lacompra con XML; pues bien, las páginas se ba-san en HTML, pero se crean dinámicamente conun lenguaje como PHP. En ese caso, PHP recu-rriría a una base de datos que utilice XML, porejemplo.Un ejemplo como este no tiene nada de extraño;de hecho, cada vez se pueden encontrar más si-tios Web que están totalmente escritos en XML.Pero como usuario muy pocas veces se darácuenta de ello, ya que XML trabaja, digámosloasí, en segundo plano.

¿Mostrar XML directamente en elnavegador?Seguro que se preguntará si realmente tienesentido publicar páginas Web exclusivamenteen XML. Supuestamente, con ayuda de lengua-jes como CSS y XSL se podría conseguir un d i-seña exacto. Pero he dicho supuestamente.

Ejemplo prácticoObserve, como ejemplo práctico, un archivo dela página de w3schools.org (donde podrá en-contrar numerosos tutoriales y ejemplos sobrelos estándares promovidos por el W3C).

My CD CollectioD

TIle:E~cB •.•!c,q.~• ~!:'''',l·f.t.:..

: TÓC:(irn!.:r(Eu, Ar1Ut; i :-.:,-;'",!. ~

TllllrStili~~fl;,e¡'_"=Anjsr':"w.'/ t.!~'·il

TIIIe:Eto.o! Artist:'_:c.kl,;.,-.:-;.:rJ

Internet Explorer: todo en orden

En la última versión de Internet Explorer, la pá-gina se ve perfectamente y no la distinguiríamosde una página Web normal. El diseño es correc-to.

Un resultado muy diferente en Netscape 6 Y 7

Pero en el navegador Netscape 6 (imagen de laizquierda) el diseño no tiene nada que ver, porno decir que no hay diseño alguno. Por suerte,parece que la versión 7 (derecha) ha mejoradomucho en este aspecto, y el resultado es el mis-mo que en IE6.

El ejemplo práctico no pasala pruebaLo admito, el hecho de utilizar XSL como len-guaje de formato limita las posibilidades de quese vea bien en todos los navegadores, ya que eluso de este lenguaje no está tan generalizadocomo el de CSS.Sin embargo, en mis experimentos con CSS hecomprobado que también existen diferenciasnotables en el diseño.

En consecuencia: el lenguaje XML puro actual-mente está indicado para mostrarlo en el Websolamente bajo determinadas condiciones.

XML solo "entre bastidores"A pesar de lo que acabamos de exponer, XMLse utiliza cada vez más para publicar informa-ción en el Web. Para la empresas supone las si-guientes ventajas:Todos los datos se almacenan en formato XML.Se introducen y gestionan en formato XML. Deesta manera, se consigue crear una estructuramultipropósito que se puede adaptar a distintosdiseños. Y este es el punto clave: distintos dise-ños.Porque los datos se visualizan en el Web a par-tir de HTML o XHTML.

15Algunos ejemplos: XML en la práctica

La solución: transformarLas datos se transforman sencillamente de XMLa· irrMLl..ó XHTML. ¿Cómo? Si desea pisar te-meno seguro, lo mejor es utilizar lenguajes de

. secuencias de comandos (scripts), que permitencrear HTML "clásico" a partir de los datos enXML. Bstoy pensando, por ejemplo, en PHP,Perl q yas o JavaScript, que funcionan con ASP.

Esta es la única forma de mostrar el documentocorrectamente en el navegador, especialmente siel prógrama todavía no es totalmente compati-bleconXML.

I XML (estructura) IT\~OO

I (X)IITML (navegador) 1Sobre seguro: transformar XML en HTML

El gráfico muestra el principio: inicialmente, to-dos los datos están en formato XML. Sin em-.bargo, el servidor muestra al usuario una pági-naHIML. De esta forma, el navegador no tieneque ser compatible con XML.

La conversión de XML a HTML a través de unlenguaje de secuencias de comandos es un temamuy amplio para el que se necesitan conoci-mientos de programación. No hablaremos deello en este cuaderno .

Si desea adquirir más conocimientos sobre len-guajes de programación, en PC Cuadernos sehan publicado números dedicados a PHP o Ja-vaScript.

Transformación por XSLVolvamos a XML. En este caso también existeun "lenguaje de diseño y transformación" quese escribió directamente en XML y que estápensado para XML. Estoy hablando de XSL, eX-tended Stylesheet Language. Se trata de un len-guaje especial de "transformación" que puedeconvertir XML a otros formatos.Cuando nos ocupemos de XSL a partir de la pá-gina 61 comprobará que también se podría ha-blar de una especie de "programación". ¿El in-conveniente de XML para el Web? XSL todavíano recibe el soporte necesario (consulte las imá-genes de la página anterior). Pero seamos opti-mistas.

o.

Page 10: Manual xml

16 Resumen: principales características de XML

Resumen: características de XMLDescripción mediante una OTOSi lo desea, puede describir con todo detalle es-tas etiquetas y atributos (puede hacerlo, pero notiene que hacerlo).Es decir, es posible crear previamente una espe-cie de instrucción en la que definirá las etique-tas, sus nombres, su orden, su jerarquía, etc.Es posible determinar qué atributos están ~er-mitidos y qué valores son aceptables. Por eJ~m-plo, puede describir si el uso de una determina-da etiqueta o atributo es obligatorio u optativo.Este complicado código se puede encontrar endos "versiones". La que se presentó inicialmen-te se llama DTO (definición de tipo de docu-mento). Crearemos la primera DTO a partir dela página 24. La versión nueva y más complica-da se llama esquema (en inglés, schema). Dare-mos los primeros "pasos esquemáticos" a partirde la página 69.

Recuerde que solo XML todavía no está indica-do para la publicación en el Web. De hecho, noes nada recomendable. Además, recordaremostambién que XML es ideal para tratar datos quese deban incorporar dentro de una estructura.A primera vista no parece demasiado atractivo,pero hay un par de características destacadasque superan ampliamente las cualidades deHTML. .

Definición de etiquetas propiasLa primera característica es una auténtica nove-dad: uno puede definir sus propias etiquetas.Lo ha leído bien, no importa si escribe:<Encabezadol> ...</Encabezadol><parrafo> </parrafo><Pastel> </Pastel>Todo está permitido. A lo que realmente se re-fiera el par de etiquetas en cuestión es respon-sabilidad del autor. A diferencia de HTML(todas las etiquetas están predefinidas) en XMLnadie le dirá que etiquetas tiene que utilizar.

Antes de escribir un documento XML, deberíapensar también en las etiquetas que utilizará ysu significado.

y aquí es donde empiezan los problemas: estetrabajo previo es casi tan complejo como la pla-nificación de una base de datos.Una vez hecho esto, también deberá ocuparsede la apariencia de las etiquetas, ya que ésta noestá definida.

Definición de atributos propiosPor si eso fuera poco, también es posible definiratributos para las distintas etiquetas. He aquídos ejemplos:<parrafo tipO="cuadro"> ...<pastel bueno="no"> ...Aquí también se pondrá a prueba su ~ento ,como estratega. ¿Qué atributos necesita? ¿Quevalores están permitidos? ¿Sería posible expre-sar también estas cualidades de forma indivi-dual en forma de etiquetas?

Solamente se pueden validar documentos XMLcon DTO / esquema. Si se omite la DTO o el e s-quema, el documento solamente estará bienformado (well-formed).

Separación de estructura y diseñoEn el lenguaje XML, la estructura y el diseño es-tán totalmente separados. Este punto es tan im-portante que no me cansaré de repetirlo.Cuando uno crea un documento XML, no sabecómo se representarán los datos. El principio escomparable (como ya hemos dicho antes) al deuna base de datos.El usuario es quien decide si desea imprimiruna lista de direcciones como una tabla o comotarjetas para pega tinas. Los datos "puros"siempre estarán allí, lo único que variará es laforma de mostrarlos.

Sección práctica A: preguntas generales 17

En este capítulo hemos visto:

• SQL YHTML, los predecesores de XML• Ventajas e inconvenientes de XML• Características principales de XML• Aplicaciones que utilizan XML

Preguntas sobre XMLResponda a las siguientes preguntas. Puede haber una o más respuestas posibles. Encontrará las so-luciones en el suplemento online de PC cuadernos.

1. ¿Cuáles son las características principales de 2. ¿En qué lenguajes se basa HTl\1l?SGI\IL y XI\Il?[a] guarda el formato, como negrita, cursiva, etc, [a] ASCII[b] guarda la estructura lógica de los documentos [b]SGML[e] guarda los documentos en el formato universal [e] XMLWord[d] guarda los documentos independientemente de [d]CDFla plataforma

3. ¿Cuándo se convirtió SGML en el estándar ISO? 4. ¿Quién creó HTML?[a] 1971 [a] Microsoft[b]1986 [b] Tim Berners-Lee[e] 1989/90 [e] Adobe y Sun[d] 1996 [d] FileMaker

5. ¿Qué significan las siglas HTML? 6. ¿Cuáles son las características de XML?[a] Hyper Tool Mouseloader [a] guarda solo los datos, solo la estructura[b] Hypertext Multi Language [b] no es prioritario para su aplicación en el

Web[e] Hypertext Markup Language [c] formato basado en texto puro[d] Hyperlink Extended Markup Language [e] estándar de licencia libre

7. ¿Cuáles de estos formatos no tienen nada que ver 8. ¿Quién es el responsable del desarrollocon XML? de lenguajes como XML?[a] SMlL [a] WAP (Wireless Application Protocol)[b]WAP [b] USB (Universal Seri~l Bus)[e]XH1ML [c] W3C (World Wide Web Consortium)[d]SQL [d] Adobe

Page 11: Manual xml

18Lección 1: primeros intentos prácticos con XML

Lección 1: ¡Bienvenido XML! Primeros intentos prácticosAquí se acaba la teoría. Vamos a empezar con los primeros ejercicios prácticos, que le permitirán a d-

quírír estos conocimientos:• Creación de un documento XML sencillo con el Bloc de notas• Creación del prólogo, las etiquetas y el elemento raíz• peculiaridades de visualización en distintos navegadores• Utilización de caracteres especiales y entidades

Consejo: le recomiendo que cree una c~~ llamada cursoxml en el disco c:\. Guarde en ella y enlas subcarpetas que iremos creando los distintos documentos del curso.

P XML necesitará un editor de texto. Windows incluye el Bloc de notas, un editor sencillo. .ara crear . [ENTRARlA arecerá el Bloc de notas Escr ¡-

Seleccione INlClo/EJEClITARy escriba notepad. Presione . P .ba el siguiente código, que es la base fundamental de cualquier documento XML.

<?xml version="l.O" encoding="iso-8859-1"?><documento>

<pregunta>Hola<respuesta>XML

</documento>

XML, ¿estás aqui?</pregunta>es el formato de archivo del futuro!</respuesta>

Guarde el documento con la extensión .xml Yllámelo, por ejemplo, hola.xml, Guárdelo dentro de la

carpeta cursoxml......'''. '''f''' -ro '" d" te"r""m'I';'adaexten~SI'-6n?A v'eees pueden surgir compÜcaéiones;'por lo~que le"fa':;., Desea orza una e" . ". .' • 1 1" ..

':¿" '_., . '. d 'q'"ueescriba el' nombre' de archivo sntre cOlTllllas: .ho a.xm.. "',.-- - .•,..•, , -com!en o .._~ .- .

Mostrar el resultado en Internet ExplorerAbra el documento en Internet Explorer. Tendrá este aspecto:

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

- <documento><pregunta>Hola XML, ¿estás aquí?</pregunta><respuesta>XML es el fonnato de archivo del futuro!</respuesta>

<¡documento>

IHola XMU Internet Explorer muestra los documentos XML en una estructura jerárquica

Por lo tanto utilizaremos Internet Explorer porque este navegador tiene algunas características i m-, . d fin . gún diseño todos los documentos

portantes que otros no pueden ofrecer. ~entra5 no e amos ron ,XML se mostrarán en su estructura arbórea.Observemos qué se esconde detrás de cada elemento.

• I

Lección 1: primeros intentos prácticos con XML 19

El prólogoLa primera fila introduce el documento XML, de ahí que se le llame prólogo. En nuestro caso, elprólogo consta únicamente de la etiqueta «ixm ...?l>:<?xml version="l.O" encoding="iso-8859-1"?>El signo de interrogación del principio y el final es típico de esta etiqueta. Con el atributo ve r-sion="l.O" se define la versión de XML -actualmente es la versión 1.0.La instrucción ericod.i.nqe " iso-8859-1" no significa otra cosa que el hecho de que se utiliza elconjunto de caractere~ iso-8859-1 (Latin 1). Este conjunto de caracteres permite representar acentos ydiérésis.

Muy importante: con esta etiqueta y su atributo (no los valores) es obligatorio el uso de minúsculas.Por lo tanto, no escriba <?XML ... sino «ixm! ...

El elemento raízA continuación aparece el elemento raíz. En nuestro ejemplo se llama documento. El elemento raíz esobligatorio y presenta el documento,

En las siguientes líneas tenemos, pues, el contenido real. De ello se ocupan las etiquetas creadas e s-pecialmente para la ocasión «preguntas-qpregunta» y -crespuestas-cirespuesta». Finalmente, se cierra elelemento raíz con la etiqueta <ldocumenio>, En proyectos de "gran envergadura" deberá inventarmás etiquetas y más complejas.Lo bonito del asunto: a diferencia de lo que ocurre en HIML, aquí ya no se necesitan más etiquetas.No es necesario cerrar la etiqueta <?xml ..,> del principio, Únicamente el elemento raíz«documentcc-cldocumento» forma un "corchete",

Recuerde que: el documento XMLbásico consta de un prólogo, un "elemento raíz" y varias etiquetasdefinidas por el autor.

No utilice diéresis, acentos, signos especiales, espacios en blanco y dos puntos en los nombres de lasetiquetas. No empiece con un número, Y recuerde que se distingue entre mayúsculas y minúsculas.Por lo tanto, <Respuesta> y <respuesta> son etiquetas distintas.

Visualización en NetscapeSi lo desea, puede visualizar el ejemplo en otro navegador. Utilice, por ejemplo, Netscape 7, Mozillau Opera. Abra la carpeta cursoxml y arrastre el archivo hola.xml hasta la ventana del navegador man-teniendo pulsado el botón izquierdo del ratón.

Navegadores corno Netscape 6x Ó 7 muestran únicamente el texto

Comprobará que la mayoría de navegadores solamente muestran el texto seguido.

Page 12: Manual xml

20 Lección 1: uso de caracteres especiales y entidades

Uso de caracteres especiales y entidadesA continuación, hablaremos de qué caracterespuede utilizar y cuáles no.

USO de acentosYa le he adelantado la buena noticia: puede tra-bajar en sus archivos XML (pero no en las etique-tas) tranquilamente con acentos, diéresis o ca-racteres especiales como "t;', Por lo tanto, undocumento XML como este:<?xm1 version="l.O" ~ncoding="iso-8859-1"?><participantes>

<nombre>Ma1aquias</nombre><ape11idos>Gonzá1ez

pingüino</ape11idos></participantes>es perfectamente correcto. Al fin Yal cabo, poralgo hemos incluido después del atributo enco-ding el valor iso-8859-1.

iso-8859-1 significa Latin 1, Ycorresponde alconjunto de caracteres de Europa occidental,que también permite el uso de diéresis y acen-tos. De este modo quedan cubiertos todos loscaracteres especiales del español, el francés, elitaliano y el alemán, por ejemplo.

-ctxml version==-1.0· encoding=·iso-8859-1- 7>_ <participantes:=.

<nombre>Mallllqu(lIIs</nombre><apellidos>Gonz6Iez Plngülno</apellidos>

</participantes>

'.~'

Latln 1 permite mostrar acentos

Nos quedaremos con este juego de caracterespara olvidamos de problemas. En la tabla a con-tinuación encontrará los principales estándaresISO.

Escriba el código del documento de arriba yguárdelo con el nombre participantes.xml. (El sal-to de línea después de encoding solamente sedebe a la anchura de la columna del cuaderno).

Los códigos de país más importantesA continuación le presento los códigos de paísmás importantes. Puede escribir ISO tanto enmayúsculas como en minúsculas.

.. • • •••• - l •

UTF-8 (Unicode) Conjunto de caracteres uniwrsal

ISQ-8859-1 (LatIn-1) Europa occidental. Latinoamérica

150-8859-2 (Latin-2) Europa central y oriental

150-8859-3 (Latin-3) sudoeste de Europa

150-8859-4 (Latin-4) Paises Escandinavos. 8á1ticos

150-8859-5 Cirflico

150-8859-6 IAraba

150-8859-7 Griego

150-8859-8 Hebreo

150-8859-9 Turco

150-8859-10 Lapón. nórdico. esquimal

EUC-JP oder 5hift JI5 Japonés

¿Juego de caracteres equivocado?¡Mensaje de error!Diviértase un poco y cambie el conjunto de ca-racteres. En lugar de 8859-1, escriba iso-8859-3(Sudoeste de Europa) o iso-8859-5 (Cirílico).Pueden ocurrir dos cosas: o bien Internet Explo-rer le devuelve un mensaje de error o bien mos-trará el texto con caracteres extraños.

No se puede mostrar la página XML

No se puede ver la entrada XMl con la hoja de estile. ccrrüe elerro,. ., haga die en el botón ~, o int6ntelo de nuevo más

tarde.

El .Inema no e. comp .•tlble con 1..•codlflc ..•clón e.peclflc ..•d ..•.

Error al proce •..•r el recursoftle:///C:/kw/e.¡XML/xmCexampleFolder/lecclonl/particlpante •. Mml. Únea t. poslcl6n .•.•

<1x:ml ver:llion."1.0" encodinq-"1~o-88S9-3"?>

Mensaje de error: el navegador se no muestra el archivo

Si no incluimos el atributo encoding tambiénaparecerá un mensaje de error, porque el nave-gador partirá de Unicode (utf-8) y exigirá una~máscara para las diéresis".

Lección 1: uso de caracteres especiales y entidades 21

Cambiar los signos prohibidosE~t~n algunos signos que no debe utilizar bajorungun concepto:

• <• >•&Los signos de mayor y menor que se utilizanpara definir las etiquetas y provocarían inter-pretaciones equivocadas.Las comillas dobles (n) y simples (') también sonproblemáticas.

Todos estos signos se deben cambiar; en estecontexto, se habla de "enmascarar".

Las entidades se podrían considerar caracteres"comodín". Una entidad empieza por & ysiempre termina con un punto y coma ;. En estecaso, los cambios recurren a los códigos de lastablas ISO correspondientes.s:e.~be &#~;, donde NR se sustituye por elcódigo en cuestión. Por ejemplo, el símbolo <tiene el código 60 y se escribe cifrado como&#60;. También es posible utilizar el nombremás sencillo &1t; para este símbolo; 1t signifi-ca louier ihan, menor que («),

Nombres más sencillos para entida-desLos siguientes cinco nombres se suelen llamarentidades predefinidas:

Carácter Entidad

< &It;

> &91:& &amp;. &quot;. (Apostroph) &apos;

L

Desgraciadamente, las demás entidades prede-finidas conocidas de HTML como &aum/; o&oum/; etc. no están permitidas. Para ello debrá utilizar los "códigos". e-

Códigos para caracteres especialesLa siguiente tabla contiene los principales carac-teres especiales y la entidad correspondiente.

Carácter Código. &#187;. &#171;

© &#169;

® &#174;

¡: &#163;

Series de las normas ISO 88591Ddócr.1~ s :!-. l· 2.. 1 ~ 2·· lQ 11

JSO..88S9-1I • ( M l¡I : , • , ' I ~ - , -

t •• ~, .'. t .11 X X ¿

A ,/¡ .ti A ¡¡ A 1( e ~ É f f 1 i i io ¡¡ ó ó ó o o •• i1 ü Ú Ü Ü V 1> 8

i i i i i i, e i! e e e l I ¡ I11 i'i (\ á 6 ¡¡ 5 + • u u iI ü ~ 1> ~

Tocio a la vista: un resumen de los conjuntos de caracte-res

En esta sección le he mostrado cómo reempla-zar caracteres especiales con entidades. Sin em-bargo, las entidades también se pueden utilizarcomo comodín o abreviatura (para programa-dores: una especie de "variable") para varioscaracteres. Hablaremos de ello en la página 41.

Page 13: Manual xml

3

22Lección 2: estructura de árbol de XML mediante una lista de titules

Lección 2: estructura arbórea de XML con una lista de títulos .lista con algunos títulos de las publ i-

Vamos a crear un pequeño proyecto en el que mostrare,mos unacaciones de PC Cuadernos. Con este ejemplo aprendera a: .• Ordenar datos basándose en una sencilla lista de títulos• Crear un nodo adicional en XML• Reconocer la estructura de árbol de XML• Repasar el concepto de well-formed (bien formado)

En primer lugar planificaremos la lista de títulos . , ., d s .Y qué es una lista de títulos SIDO una

XML está especialmente indicado parlis~~~s :=~ap~ C~adernos nos interesa incluir la siguientemaravillosa estructura? Para nuestra einformación sobre cada cuaderno

1. Autor2. Editorial3. Descripción (si la conozco)

4. Precio .' d t XML Yola he llamado titulos.xml y se encuentra en la carpeta leccion2~~~~:~e:~:;:nsada 'para estructurar mejor el código a nivel visual:

<?xml version="l.O" encoding="ISO-8859-l"?><listatitulos>

<cuaderno><titulo>Photoshop 5.S</titulo><autor>Michael Karbo</autor><autor>Peter G. Christiansen</autor><editorial>PC cuadernos</editorial><precio>4</precio>

</cuaderno><cuaderno> .

<titulo>Cree su página Web (I)</t~tulo><autor>Johann-Christian Hanke</autor><editorial>PC Cuadernos</editorial> "<descripcion>Introducción a HTML</descr~pc~on><precio>4</precio>

</cuaderno><cuaderno>

<titulo>El registro de windows</titulo><autor>David Bosman</autor><editorial>PC Cuadernos</editorial> , .<descripcion>Trucos para editar el registro</descr~pc~on>

<precio>4</precio></cuaderno>

</listatitulos>

. de ;~~el código? Encontrará los dOCumentosde ejemplo en subcarpetas ordenadas.No tiene ganas copiar . ad mpor lecciones. Puede descargarlo todo como suplemento desde:www.oc-cuemos.co .

~--------~---------------~-----------------------------------------

Lección 2: estructura de árbol de XML mediante una lista de títulos 23

Junto al elemento raíz hay más nodosAbra el documento en Internet Explorer. Esta lista de títulos incluye el prólogo obligatorio y natu-ralmente el elemento raíz. En nuestro caso, éste se llama <listatitulos></listatitulos>.

, il C:I""\es\XM.\XITC.~ FoIder\locdon2\_,xn1

<?xml versian=-l. o· encoding=·ISQ-88S9-1- 1>- <list atitulos>

- <cuaderno><titulo>Photoshop 5.5</titulo><autoDMldtael Karbo</autar><:autar>Peter G. chrtstíensenc/autcr»<editorial>PC Cuademos</editorial>cprecicc-e-c/preclo»

</cuaderno>- <cuaderno>

<titulo>Cres su página Wsb (I)</titulo>-ceutorxrohenn-christlen HlInke</autor>cedítoríeb-pc Cuedemos</editarial><descripcion>Introducd6n a HTML<ldescripcion>cprecioc-s-c/precio»

</cuaderno>- <cuaderno>

<titulo>EI registro de Wlndows</titulo>-ceutcrc-üevtd aosmen-c/sutco-<editoriabPC CUlIdemos</editorial>coescnpcioro Trucos pere edltin el reglstro</descripcion:><precio>4</precio>

</cuaderno></hstatitulos>

Fácil de reconocer: mediante varios nados se crea una estructura arbórsa

Resulta interesante ver que existe otra rama, es decir otro nodo. Compruébelo:1. Haga dic antes de <lista titulas>, es decir antes del elemento raíz. De esta forma lo contraerá o a m-

pliará todo.2. Haga dic antes de la etiqueta <cuaderno>. De esta forma contraerá o ampliará el título en cuestión.Se parece al sistema que utiliza el Explorador de Windows. Un signo menos (-) significa que está e x-pandido. Un signo más (+) significa que todavía hay una rama "replegada". Como puede ver, XMLsolamente le ofrece la estructura para mostrar datos. El prólogo, el elemento raíz y las etiquetas losaccesorios necesarios.

El navegador como parser: ¿qué es un parser?El navegador le muestra la estructura: lee el documento XML. En la jerga especializada se habla deque el navegador "parsea" o analiza el documento.

En la práctica existen muchos otros parsers. En el caso de StaIOffice, el programa de procesamientode textos o de hojas de cálculo analiza el documento XML y lo muestra en pantalla para poder ed i-tarlo. En el caso de Windows Scripting Host (la interfaz de programación de Windows), Windowsanaliza o "parsea" la secuencia de comandos;

En este cuaderno utilizamos el navegador Internet Explorer en su versión más reciente porque lo te-nemos a mano y porque queremos mostrar los datos de alguna forma. No consideramos el navegadorcomo "la herramienta para un diseño Web fantástico", porque realmente no sirve para eso. Se tra tamás bien de una "herramienta de visualización". No olvide nunca que nuestros experimentos tienencomo fin aprender la estructura de XML (aunque más adelante les daremos forma con CSSy XSL).

La lista de títulos como un documento bien formadoPor cierto: hasta ahora hemos estado trabajando con un "documento bien formado" (well-formed) .No tiene ninguna definición del tipo de documento (DTD), es decir no tiene ningún conjunto de re-glas para las etiquetas.

Page 14: Manual xml

24 Lección 3: crear una OTO para la lista de títulos

Lección 3: crear una OTO para la lista de títulosPlanificación de la OTO¿Qué hay que saber para crear la OTO?• El elemento raíz se llama listatítulos.• En este elemento raíz se encuentran n elemen-

tos (varios elementos) llamados cuaderno. .• Cada cuaderno tiene un título (elemento ti-

tulo).• Cada cuaderno tiene uno o más autores

(autor).• Cada cuaderno tiene una editorial (editorial)

que siempre es la misma -al ser una lista dePC Cuadernos ...

• La descripción no siempre es~ presente p~acada título, de modo que la etiqueta descnp-cion es opcional.

Hasta aquí las consideraciones previas.

A continuación crearemos un conjun~o~~,reglaspara la lista de títulos, es decir, la definición ~eltipo de documento. En esta sección aprendera a:• Planificar una definición de tipo de docu-

mento (OTO)• Repasar el concepto valid (válido)• Escribir una OTO• Concepto PCOATA• Claves e indicadores de la DTD• Establecer un vinculo a la OTO

Dediquémonos primero a la definición del tipode documento o OTO.

Definición del tipo de documentoSi ha leído el apartado introductorio ya sabráque un archivo XML puede tener asignada unadefinición de tipo de documento (aunque no esobligatorio).

Como recordatorio: la OTO es un conjunto dereglas que define las etiquetas, sus nombres, suorden, su jerarquía, etc. En la O,!,? podrá est a-blecer qué atributos están pemutidos y sus va-lores correspondientes. También seyuede des-cribir si el uso de una etiqueta o atributo es op-cional u obligatorio.

El objetivo es, naturalmente, definir antes ~l .conjunto de reglas. Sin embargo, en este eJerCI-cio crearemos la OTO posteriormente porque e.smás sencillo, ya que la estructura XML ya es Vi-sible y podemos imaginamos algo sobre ella.

¿Válido O bien formado? .Un documento sin OTO está well-formed (bienformado). Si, además, tiene una DTD y se ~ es-crito correctamente, entonces será valid (válido).En el siguiente ejemplo transformaremos nues-tro archivo bien formado lista.xml en un docu-mento XML válido.

Crear la OTONos interesa aprender a trabatar co~.I?TO ex-ternas. De esta forma mejorara la vision generaldel proyecto, ya que el documento XML YlaOTO estarán separados.

.~

JtCree un documento de texto llamado títulos.dtd.

Nuevo Documento de m.to..bIt"""""""do..,..F«::hodomodfltad6n:IMrtCS,10desoptbTIbrodcl2002,9:29

Una OTO no es nada más que otro archivo de texto

Consejo: puede crear archivos de tex~osirnen-do el procedimiento "orientado a objetos". Abrala carpeta deseada, haga clic con el botón der:-cho y seleccione Nuevo/Archivo de texto. Cambieel nombre predeterminado por tttulos.dtd.

Lección 3: crear una OTO para la lista de títulos 25

Código fuente del archivo titulos.dtdA continuación reproduzco el código fuente completo del archivo titulos.dtd. Copie mi ejemplo y noolvide guardar los datos.<!ELEMENT listatitulós (cuaderno+»<!ELEMENTcuaderno (titulo,autor+,editorial,descripcion?,precio+»<!ELEMENT titulo (#PCDATA»<!ELEMENTautor (#PCDATA»<!ELEMENTeditorial (#PCDATA»<!ELEMENTdescripcion (#PCDATA»<!ELEMENTprecio (#PCDATA»

El significado de cada líneaVaya, esto parece bastante complicado. Le explico por qué: las OTO se escriben en el lenguaje SGML,y este lenguaje tiene una sintaxis algo complicada. Por eso propongo que observemos de cerca lo quesignifica cada una de las líneas, paso a paso.

1. En la primera línea se define la etiqueta listatitulos. Es nuestro elemento raíz. Las definicio-nes de elementos empiezan con <!ELEMENT ...• en mayúsculas. Puesto que el elemento lista-titulos solamente aparece una vez. no especificaremos nada más. ¿Pero qué significa esto decuedemo« que hemos escrito entre paréntesis? Muy sencillo: dentro de<Iistatitulos><llistatitulos> se encuentran varios pares de «cuedemos-acusdemo». El signo desuma detrás de la etiqueta significa que puede haber más de un elemento. Si no incluyéramos elsigno de suma. -ccuedemos-c/cusdemo» solo podría aparecer una vez.

<!ELEMENT listatitulos (cuaderno+»

También es posible colocar el signo de suma después de los paréntesis: (cuaderno) +. En ese casoafectará al "grupo", ya que los paréntesis identifican a un grupo. Puesto que cuaderno es el único ele-mento del grupo, la posición del operador es totalmente indiferente.

2. El elemento cuaderno contiene más elementos. que se deben incluir entre paréntesis paraformar un grupo. Estos elementos se ordenan y se separan mediante comas. Puesto que la co-ma actúa como separador, no es necesario dejar espacios en blanco entre los elementos. aun-que se puede hacer.

<!ELEMENTcuaderno (titulo,autor+,editorial,descripcion?,precio+»

y /0: con esta coma como separador crearemos un orden estricto. Eso significa que las etiquetas s o-lamente se pueden y deben emplear en este orden. A esto también se le llama la partícula y (indicasecuencialidad); titulo y autor y editorial ... Por el contrario, si desea especificar una opción o part í-cula o, deberá utilizar una barra vertical I (para escribiría, pulse [AltGr] + "1") Ydespués del parén-tesis de cierre incluir un signo de suma. Hablaremos de ello en detalle a partir de la página 45.

3. Los elementos titulo y editorial solamente aparecen una vez dentro de«cuedemos-e/cuedemo». Por ese motivo, no es necesario especificar ninguna otra peculiaridad.Volverá a encontrar el operador de suma en los elementos eutor« y precio+. La explicación estámuy clara: este operador indica que el elemento tiene que aparecer como mínimo una vez y sepuede repetir tantas veces como se desee. En este contexto, se habla de un indicador de fre-cuencia.

<!ELEMENTcuaderno (titulo,autor+,editorial,descripcion?,precio+»

t

Page 15: Manual xml

E.

26Lección 3: crear una OTO para la lista de títulos

4. ¿Pero qué significa el interrogante detrás del elemento descripcion? Este "indicador de fre-cuencia" indica que este elemento es opcional (voluntario). Por lo tanto, indica que es posible,

pero no obligatorio, incluir una descripción.<lELEMENTcuaderno (titulo,autor+,editorial,descripcion?precio+»

5. Ya hemos definido el orden de cada elemento. En las siguientes cinco IIneas se definen loselementos en función del orden. Para ello, escribiremos después de dELEMENT simplementeel nombre de la etiqueta, por ejemplo titulo. Entre paréntesis deberemos incluir el extraño código

(#PCDATA).

<lELEMENT titulo (#PCDATA»<lELEMENT autor (#PCDATA»<lELEMENT editorial (#PCDATA»<lELEMENT descripcion (#PCDATA»<lELEMENTprecio (#PCDATA»

¿Qué significa PCDATA?PCDATA significa que este elemento puede contener character data, es decir datos de carácter, y nográficos o elementos multimedia. P significa parsed, es decir, "analizado". En conjunto, PCDATA es la

abreviatura de parsed character data.Como habrá visto, la sintaxis de una DTD es ligeramente complicada. y todavía no le he mostrado

todas las claves e indicadores.

Más claves e indicadoresLa siguiente tabla muestra otros símbolos, claves e indicadores importantes para las DTD:

.. . . . . .() Los paréntesis sencillos agrupan subetique- dELEMENT listatitulos

tas, contienen valores de atributo v claves. (titulo,autor +,editorial»

, Partícula y: la coma indica la ordenación (titulo,autor,editorial)

exacta de los elementos en el orden estable-cido.

I Partícula o: la barra vertical significa que (titulolautorleditorial)

solamente se puede utilizar uno de los ele-mentos oroouestos.

Sin Si no se incluye ninguna notación, el ele- (titulo,autor,editorial)

mento debe aoarecer una sola vez.

+El signo de suma indica que el elemento autor+

aparece como mínimo una vez o varias ve-ces.

? El signo de interrogación indica que el ele- descripcion?

mento es opcional; no es necesario utilizarlo.Si se utiliza, solamente puede emplearse unavez.

o Con el asterisco se indica que el elemento se claves'

puede utilizar tantas veces como se desee,pero su uso no es obüoatorio.

#PCOATA Este código significa parsed character data, dELEMENT autor (#PCOATA»

es decir que el elemento puede contenerconjuntos de caracteres pero no contenidomultimedia.

, I

Lección 3: crear una OTO para la lista de tftulos 27

Establecer un enlace a la DTDYa hemos terminado con la DTD, pero todavía nos queda un aspecto importante: enlazar a ella.

fi:"'~~tilIf~_lSili§'ll~_~~ºil)efiOh;.""lli~~';{!E'Hr.1"'1B¡'"lIlíl\~tI<\':t"~ r -"h.,,", .--"" 'o,.", •••~~USHI ...U,Uft:J!Sfi~~ji!~,t~~

1 . Abra nuevamente el documento XML l ei~~e~:~te.Consejo: ¿ha abierto el archi;Oe;neln~~:!I~:~:~O;~ ::/~::a~~~i~:~e~/~~;~r;lc~:~C~ns:s::~~~olocar debajo del prólogo y antes del elemento raíz. Presione [ENTRAR)

3. A continuación, escriba:

<lDOCTYPE listatitulos SYSTEM"titulos.dtd">

Crear la declaración de tipo de documento¿Qué significa la línea <lDOCTYPE listatitulos SYSTEM"titulos. dtd" ?

• La declaración DT se debe iniciar con <IDOCTYPE . >.• Detrás de DOCTYP ' . .' , y Siempre en mayúsculas.so es listatiiulas, E debera incluir el nombre del elemento raiz del documento XML. En nuestro ea-

• A continuación aparece la clave SYSTEM Signifi , .sistema" . Es válida úni t . c~ que la DTD es válida localmente, "en nuestrocamen e para nuestros archivos XML y no es pública.

Nota al margen: de forma muy distint 1 dblica. Dicha DTD se encuentra en los s~ e~ os ocumentos ~ se hace referencia a una DTD p ú-

HTML PUBUC > Yal final . cl rvídores del W3C. La línea suele empezar con <fDOCTYPE... se ID uye el enlace al servidor del W3C.

• Por último, pero no por ello menos importante debe ,. cl . .el que se encuentra la DTD Puesto ,ra ID ~ entre comillas la ruta al archivo enllamente "tituloe.dtd" .' que se encuentra en el mismo ordenador, escribiremos senc i-

Si todo ha ido bien, al abrir el archivo en Internet Explorer debería ver esto:

~ C:\kw\es\XK\arsoxnl\lecciorl2\titOOs.xmI-

<?xml version=lIl.O· encoding=IIISQ-8859-1· ?::.<IDOCTYPE listatitulos (View Source for full docty )

- -distatituíoso • pe ... >

- -ccuaderno»<titulo>Photoshop 5.5</titulo><autoDMict ••,el K••rbn-c/autoro

El navegador Indica que se ha reconocido la OTO

~.

Page 16: Manual xml

28 Lección 3: crear una OTO para la lista de títulos

Conocimiento adicional: OTO internas Y externasSi ha leído alguno de mis cuadernos anteriores, sabrá que siempre suelo dar dos variantes posibles.En el caso de CSSo JavaScript, por ejemplo, suelo indicarle como guardar el código a nivel interno(es decir en el documento HTML). y lo solemos hacer por comodidad o por motivos pedagógicos.Después le muestro la variante externa.

En este cuaderno le he indicado que guardase directamente la OTO de forma externa. Las ventajasde hacerlo son claras: cuando haya creado una OTO, podrá utilizarla para tantos archivos XMLcomodesee. Es como utilizar un patrón para muchos archivos XML.Sin embargo, para no dejamos nada también quiero enseñarle cómo escribir una OTO interna. Est u-diaremos la sintaxis basándonos en el ejemplo de la lista de títulos.

Sintaxis para una OTO internaLa sintaxis para crear la OTO interna es muy sencilla. En primer lugar, le mostraré el enlace a la OTO

externa, de forma esquemática, para comparar:<?xm1 version="l.O" encoding="ISO-8859-1"?><!DOCTYPEelementoraiz SYSTEM"nombre.dtd"><elementoraiz>Si desea incorporar la OTO (en el ejemplo, nombre.dtd) a nivel interno, deberá escribir:

<?xml version="l.O" encoding="ISO-8859-1"?><!DOCTYPEelementoraiz [ .'.Instruc'ciones]><e1ementoraiz>

</elementoraiz>La parte inicial de la lista de títulos tendrá este aspecto. Encontrará el ejemplo titulosinterno.xml en la

carpeta leccion3.<?xml version="l.O" encoding="ISO-8859-1"?><IDOCTYPElistatitulos [<!ELEMENTlistatitulos (cuaderno+»< !ELEMENT,cuaderno .(ti tulo, aut.or+, edi torial, desc:r:ipc:lon? r preéio+ 1 >

<!ELEMENTtitulo (#PCDATA»<!ELEMENTautor (#PCDATA»<!ELEMENTeditorial (#PCDATA»<!ELEMENTdescripcion (#PCDATA»<!ELEMENTprecio (#PCDATA»]><listatitu1os>

<cuaderno><titulo>Photoshop 5.5</titulo><autor>Michae1 Karbo</autor><autor>Peter G. Christiansen</autor><editorial>PC Cuadernos</editorial><precio>4</precio>

</cuaderno>

</listatitu1os>

Lección 4: comprobar la validez de un documento XML 29

Lección 4: comprobar la validez de un documento XMLEn esta lección aprenderá lo siguiente:

• Por qué una OTO tiene sentido• Diferencia entre parsers validadores y no

validadores• Práctica: validación de un documento

Sentido y sinsentido de la OTOHasta ahora hemos creado el documento XMLla OTO correspondiente. ¿Pero por qué neces i-ytamos la OTO? ¿No podríamos obviarla?Naturalmente. De esta forma obtendríamos(siempre que no nos equivocáramos al escribir)un documento bien formado.Sin embargo, debe intentar entender la OTOcomo.un plan que se prepara previamente, unaespeae de patrón. Y es importante actuar con-forme al plan trazado.Tomemos por ejemplo la lista de títulos. Supon-gam~s que v~as personas están trabajando en~ta lista y mas tarde reúnen los distintos con-¡untos de datos.

• <~l)ad.mo>ctitulo::.EI registro el. Wlndows</titulo><autcor>Oavid Bo~on</;aulor><~itori~>PC Cu.odernosc/editorial:>~::~,:~~~~=Jp ••. e editor" •.•••• stro</d.scripcicJn>

</cuademo>-<libro>

<titulo>l~dlgltol</tltulo><auloros>MIcha.1 KerOo</..ulo,,,"s:>odltori~>PC Cuodemos<.ladltoriiJI:>:;::~~~~::o:.somI~nesV blts<.ldascripclQn:>

<;1itoro></tlft~t;tulcs:>

Sin un concepto unitario, reinará el caos

Pero una de esas personas, en lugar de escribir<autor></autor>, escribe «autoress-clautores», Yen lugar de <cuaderno></cuaderno> los títulosse llaman «lihroz-cilibro>,Na~almente, podremos seguir visualizando elarchivo. Aparentemente todo está ordenadoper~ sin un concepto unificador solamente r~i-nara el caos. .?Quién podrá saber después dónde encontrar lainformación que busca en un mar lleno de eti-quetas distintas?

¿Quién comprueba el código?Como acabamos de ver, utilizar una OTO (o unesquema) vale realmente la pena.Utilicemos la OTO. Todos los datos que intro-duzcamos deberán ajustarse a este conjunto dereglas. Pero ... ¿a qué nos referimos con"ajustarse"? ¿Quién comprueba si toda la in-formación se corresponde con el patrón de laOTO?Vamos a verlo. Escriba otro conjunto de datosen e~?-~~nto titulos.xml, en el que la infor-macion sera Incorrecta a propósito.

Guarde el archivo con otro nombre, por ejemplotituloscaos.xml,

He aquí mi propuesta, que está bien formadapero no es válida:

<libro>. . <titu1o>Imagen

dlglta1</titu1o><autores>Michae1

Karbo</autores><editoria1>PC

Cuadernos</editoria1>. _ <descripcion>Todo sobrelmagenes y bits</descripcion>

<precio>4</precio></libro>

Abrir el documentoen Internet ExplorerAbra el documento en Internet Explorer. ¿Quéocurre? No pasa ... absolutamente nada. El na-vegador comprueba si existe el vínculo a unaOTO.~ero, por lo demás, a Internet Explorer le daIgual lo que hayamos escrito en la OTO. No im-portan las etiquetas, el orden ... en general seIgnora.

Los parsers no validadores no comprueban na-da.

Quizás este pensando otra vez que podría ha-berse ahorrado la molestia de crear la OTO. P e-ro ...

Page 17: Manual xml

30 Lección 4: comprobar la validez de un documento XML

Pensemos en el futuroCon XML uno tiene que tener siempre la vistapuesta en el futuro. Como ya hemos dicho,nuestro "romance con Internet Explorer" essencillamente una solución de emergencia paraeste curso acelerado.Los programas futuros podrán comprobar per-fectamente si el código es correcto. En realidad,deberán hacerla, porque la introducción de da-tos (por ejemplo en una base de datos) solamen-te tendrá sentido si nos ajustamos al conjuntode reglas (creado por nosotros mismos).

El programa de validación XMLlNTEntonces, ¿cómo podemos saber si nuestro có-digo es correcto? Deberá utilizar programas devalidación, herramientas especializadas encomprobar errores. y le aseguro que hay bas-tantes ...Para este cuaderno he elegido la herramientaxmlint.exe, que se caracteriza por ser muy senci-lla y ocupar muy poco.

_..~ ~_~?~~,.g9!.~!.df.-':._~.!.~,::!!!_1.2_P.T!~:..~,!~.!!:!!~'_Y!.~!I.. .__..__'o _.r~

Esta herramienta es gratuita y funcional

El programa XMLINT es de Microsoft. Visitehttp://msdn.microsoft.com/ downloads y bus-que xmlint. Descargue el archivo ZIP de tansolo 23 kB Ydescomprímalo en su ordenador.

Validación con XMLlNT¿Ya ha descomprimido los archivos, con Win-dows XP por ejemplo? ¿Con WinZip? ¿O conFreeZip, que es gratuito?members.ozemail.com.au/-nulifetv /freezipEn ese caso, dispondrá de varios archivos. Elque más nos interesa es xmlint.exe. Se trata deun programa basado en comandos de DOS. Sigamis instrucciones para poder trabajar con elprograma:

1. Copie el archivo xm/int.exe y los que loacompañan en la misma carpeta en la quese encuentre el archivo XMLque deseevalidar.

2. Abra una ventana de DOS. Para ello,seleccione Inicio/Ejecutar. Aparecerá elcuadro de diálogo Ejecutar en el que puedeescribir comandos. Si utiliza Windows95/9B/Me, escriba command. En Windows2000/XP, escriba crnd. Presione [ENTRAR].iVa tenemos una ventana de DOS!

3. Desplácese a la carpeta deseada utili-zando comandos de DOS. Por seguridad,primero escriba

cd \

Y presione [ENTRAR].Esto le llevará a lacarpeta raíz.

4. Utilizando el comando cd nombredecar-peta podrá navegar hasta la carpeta de-seada. Si ha seguido mis consejos, los ar-chivos que queremos validar deberían en-contrarse en C:\cursoxml. Escriba:

cd cursoxml

5. A continuación, escriba un comando ba-sándose en xm/int nombredearchivo. Debe-rá sustituir nombredearchivo por el nombredel archivo XMLque desee comprobar(tituloscaos.xm~. Por lo tanto:

xmlint titu1oscaos.xml

y presione [Entrar].

Lección 4: comprobar la validez de un documento XML 31

¿Tiene errores el documento?Si el documento no tienen ningún problema, nodebería ocurrir nada. Pero nuestro documentocontiene errores. El uso de <libroz-cllibro» en lu-gar de <título> <ltitulo> no se corresponde conlas reglas de la DTD.

El parser encuentra el error

Para cualquier problema que se encuentre apa-rece un mensaje de error con una indicación delpunto donde se ha encontrado el error.Tenga en cuenta que solamente se mostrará elprimer error encontrado. Si cambia<libro></libro> por <cuaderno></ cuaderno>comprobará que XMLlNT se queja entonces de<autores></ autores>.

Validación en Internet ExplorerSi lo desea, también puede validar documentosde una forma más cómoda, y directamente des-de Internet Explorer. Para ello, deberá descar-gar el segundo programa que le propongo, lasInternet Explorer Tools far Validation XML andviewing XSLT Output,La instalación es algo más complicada. Abranuevamente la páginahttp://msdn.microsoft.com/ downloadsy busque:validation xm1 internet exp10rer

tllI.WI...tWll'",~ •. W.bp.",lgpro.ot •. ~ <¡;

Internet Explorer Tools for Validating XML andViewing XSLT Output .C~mlntly, wllen bro,",siOQ XML files usí"'iI Sb. (byte.):,', ,:nO,OOOf'hcrosoft8 Intem8t fxplorn, !:he XMI.. docomellts '.". ".";• ..,. not yolid.ted. Ir¡ "ddition, "fhe" "¡.";110 tIl. ~ Ulld.tlte,; . 01/15/2001sourcoofthedocument,onlytheXMLisfllrtumed fkippctrtecl!andthereisoo"lIytoviewthlloutputfromttu,XSL01'"XSlTstylesheC'tthetme,hll .••e been used é~to b'lInsfonn th.t XML documento ~ PlUM" lO NO."utoup.

.,e,

Th.I~metbplo •.•rtoof$ for ••••lid.tinQ XML..,o1vÍ1lwin", XSlTOlItputwil."eble IIsheH option..n.nv¡ ••.• inqXMLfi/.sto s •• th. pl"OC8u.d XSL

ouq:,l/t.ln&ddition.Jou...".lsov.~dmXML'o.inrt en emb.dd,d set._me when load ••.•1I XMLv¡.th.¡I'Ite",.tExpla.re •..MIMEvi ••••er.T'hisl;.lnb.

!k,f.M:~l·~:;¡~~"íi1~m

Descargue el archivo lexmltls.exe a su ordenador

¿Lo ha encontrado? Haga clic en Download,confirme el contrato de licencia y descargue elarchivo iexmltls.exe.

Instalación del validador¿En qué carpeta ha guardado el archivo? Yosiempre lo guardo todo en la carpeta download.Haga doble clic en el archivo iexmltls.exe. Sigalos pasos del "installation wizard".Por defecto, se creará la carpeta iexmltls en eldisco duro, directamente bajo C:\.

Instale los dos archivos con la extensión Inf

Nos interesan los dos archivos con la extensióninf. Son:

• msxmlval.inf• mxcmlvw.inf

Haga clic en ambos archivos con el botón dere-cho del ratón y, en el menú contextual, seleccio-ne Instalar. Espere un momento. Para que loscambios tengan efecto, deberá cerrar y volver aabrir Internet Explorer.

Validación mediante el menú contex-tualA partir de ese momento, en el menú contextualde Internet Explorar encontrará dos nuevoscomandos, aunque a nosotros solamente nos in-teresa:

• Validate XML

Abra el archivo XML que desee validar con elnavega dar. Haga clic con el botón derecho en eldocumento y seleccione Validate XML.

El mismo error, pero esta vez como cuadro de diálogo

.•.

Page 18: Manual xml

32 Sección práctica B: primeros ejercicios con XML

A estas alturas ya sabrá cómo:

• Crear documentos XML bien formados• Crear el prólogo, las etiquetas y el elemento raíz• Escribir una DTD y crear XML válido• Validar archivos XML

En estos ejercicios, repasaremos y reforzaremos los conocimientos de las primeras cuatro lecciones.Encontrará todas las respuestas en el suplemento online de PC Cuadernos.

Ejercicio 81: cuestionario: crear un documento XML sencilloCree el siguiente documento sencillo en XML: el elemento raíz debe ser ~cuestiona~o>. Den~o de esteelemento deberá incluir las etiquetas <pregunta> y <respuesta>. El conterudo es de libre elección.Guarde el documento como preguntas.xml.

<111ml vsrsion.·l.o- encoding-"ISO-9859-1" 7><IDQCTVPE listadlreccionas (View Source for fuN doctype .. »

- <listadirecClones>- cdiraccicro

<nombra>Pedro<lnombre><.pe4~dO>PI~plltd,.a</apeMido><calls:>Avenlda Roa 7</calle><CP:>12345</CP,.<poblacion:>Rocadura</poblacicn><teb398409B3</teb<teb649090934</tal>

</direccion>- <diraccion>

<nombr8:>Wllma</nombro><apollido>Plcapladra</apellido><calle>Avenlda Rou 9</calle><CP>204S0</CP><poblacion>Ro~ura<lpoblacion><tel>017017487623<)leb<email>wllmeeplcapledra.com</emaib<www>w"' ••••.wllmeplc.!lpledra.com</www>

</direcclon>',u1t:tl' , ;¡ "".] •.. J .~,~ ~.. rmlJll51!L~-(.

Ejercicio 83: crear un documento XMLEscriba un documento XML en el que incluirá tres direcciones de prueba. Piense en las direcciones.Escriba también números de fax, correo electrónico y sitio Web, por ejemplo. Una de las tres pers o-nas debería tener dos números de teléfono.Guarde el documento como listadirecciones.xml,Establezca un enlace a la DTD que ha creado en el ejercicio anterior.

Ejercicio 84: comprobar la validez de un documentoCompruebe la validez del documento listadireccionee.xml.

I!,'

, I

Lección 5: definir las etiquetas con atributos 33

Lección 5: definir las etiquetas con atributosEn esta lección aprenderá a:

• Planificar la estructura con un esquema• Crear subnodos• Definir mejor las etiquetas con la ayuda de

atributos• Incluir atributos en la DTD y el documento

XML

En esta lección practicaremos con un segundoproyecto. Esta vez, la estructura tendrá aún másramificaciones.

También le mostraré lo útil que puede llegar aser un esquema previo.

Ejercicio 82: crear una OTO para una lista de direccionesPlanifique un proyecto extenso, una lista de direcciones. E~.IJ!~~e.~~_~_D2l?.:.... . _Cree primero la definición del tipo de documento(DTD) para una lista de direcciones en XML. Elelemento raíz debe llamarse listadirecciones.Los conjuntos de datos correspondientes a unadirección se incluirán dentro de<.direccion></direccion>.La estructura tiene que tener este aspecto y seguireste orden: nombre - apellido - calle - CP - po-blacion - tel - fax - email - wwwGuarde el documento como direcciones.dtd. Tengaen cuenta que el número de teléfono puede apa-recer varias veces. Tenga en cuenta, además, queno todo el mundo tendrá fax, correo electrónico opágina Web.

Planifiquemos un base de datosde productosComo hemos dicho, XML está especialmenteindicado para datos bien estructurados. Estavez tomaremos como ejemplo una base de datosde productos. Queremos incluir la siguiente in-formación:

• Nombre del producto• Referencia del producto• Fabricante• Precio

Además, queremos identificar al fabricante por:• Empresa• Localidad

Sin embargo, no siempre conoceremos la locali-dad del fabricante. No es obligatorio incluirla.El precio también tiene una particularidad. Setrata de una etiqueta pero tiene dos"vertientes". Queremos reflejar dos precios dis-tintos:

• Precio de venta al público (precio final)• Precio de venta al distribuidor (60% del pre-

cio final)

Para ello, disponemos de los atributos. A conti-nuación, pensaremos los nombres de los cam-pos.

--~--- -~-- ---------

Elementos XML y nombres de cam-posLo sabía. Ya ha aparecido por primera vez lapalabra nombre de campo.

Esto le demuestra la estrecha relación que existee~tr~ la planificación de estructuras XML y eldiseno de bases de datos. Porque precisamenteal definir una base de datos es necesario esta-blecer previamente los campos que se utiliza-rán. Y ~n ~osarchivos XML es importante pen-sar que etiquetas (o elementos) serán necesarios.¿Cómo llamaremos a nuestros elementos?El elemento raíz se llamará

• productos

Sin embargo, tenemos varias "partidas", es de-cir varios productos. Por eso acotaremos cadaelemento con

• partidas

Cada "partida" (cada producto) incluirá los si-guientes campos:

• nombre (el nombre del producto)• num (la referencia del producto)• fabricante (el fabricante del producto)• precio (subdividido mediante atributos)

Dado que tenemos que subdividir el campo fa-bricante, también tendremos los subcampos:

• empresa (nombre de la empresa)• localidad (sede de la empresa, no siempre

disponible)

Planificación previa de la OTOCon todo esto ya casi podemos dedicamos aplanificar la DTD. Esta vez lo haremos asícreando primero la DTD. Para que le resuÍtemás fácil de entender, abajo he incluido un es-quema visuaL

Page 19: Manual xml

34Lección 5: definir las etiquetas con atributos

Visión general mediante una representación gráfica .,. En él h clarificado visualmente la ordenaoon de los elementos.

Observe atentamente nu esquema. e. dientes Los círculos simbolizanAdemás, he incluido (siempre que hagan falta) los SIgnOScorresponcieco=- .las ramificaciones o nodos.

precio+ (cllente= "final" o "distribuido"")

La estructura del documento XM L se puede reconocer fácilmente en este esquema

, d la' 'Le siguen las pártidas. El signo deEl elemento raíz productos ~tá. en el nivlellmasaltto e ~:a;;pe~ y que debe aparecer como mín i-suma después de partidas indica que e e emen o se pu "tidmo una vez. Una base de datos con un solo producto no tendría ningún sen o'. . .. 1

. , . d interro ación: este indicador de frecuenoa SIgnificaque eSeguro que también le suena el SIgnO e ibl . duya la localidad pero no es obligatorioelemento es opcional. En otras palabras: es poSI e que se m ' .

hacerlo. 1 d lar' 1 etos., pod , adelante una DTD. Pero antes e esve e os secrCon estos conOClIDlentos emos crear masde los atributos.

Definir más detalladamente las etiquetas con atributos ..,. . tas Se o que ya conoce el prmoplO de HfML .Los atributos sirven para definir mejor las etíque . gur

árraf HfML Un párrafo normal comienza con la etiquetaSupongamos que d~ea em~ un ~~er= escribiremos <p align= "right ">, mientras que para<p>. Si deseamos ~ear el párrafo a a l' _ "1 ' "» Hemos definido más detalladamente la etiquetaalinearlo a la izquierda ~ndremos <p a Ign- eft. ht left ( ,·ustify). En este ejemplo el uso del atribu-con ayuda del atributo allgn, cuyos valores son ng o oto es opcional, no obligatorio. .

., sible definir eti uetas utilizando atributos. Siguiendo el ejemplo que no~ ocu-En XMLtambién es ~ drá d '1-bl" ertientes" Para representarlo he inventado el atributopa, la etiqueta «precio> ten os poSl es v. .cliente, que podrá tener uno de estos dos valores.

• final• distribuidor , di

. . . es se escribirá así: <precio cliente= "final ">. Si el producto se envía a un s-El preoo para clientes final . l' t "d' triúuidor"> Además nos interesa vemos forzadostribuidor, lo definiremos como: «precto e ¡en e= IS • r

a utilizar este atributo.

Lección 5: definir las etiquetas con atributos 35

Definir atributos en la OTOYa hemos visto el aspecto que tienen las etiquetas con atributos, pero ¿cómo definimos estos atrib u-tos en la DTD? Deberá utilizar esta sintaxis :<!ATTLIST nombreetiqueta nombreatributo tipo #OPTION>La palabra ATTLIST es la abreviatura de Atribute list (lista de atributos). Detrás deberemos incluir losnombres de etiquetas y atributos, separados por un espacio en blanco. La palabra tipo indica el tipodel atributo. En el siguiente ejemplo, el atributo tiene que construirse conforme a este "patrón de ti-po":• (Valorl \valor2\ etc . )

¿Qué quiero decir con "patrón de tipo"? Vamos a establecer los valores del atributo. Entre paréntesisdeberá escribir una lista de los valores que desee asignar al atributo; no hay límite de número. Puedeelegir dos, como en el ejemplo, o cientos. No utilice la coma como separador, sino la barra vertical.En este caso no depende de un orden concreto.¿Pero qué significa #OPTION? La palabra es un comodín para una opción, por ejemplo#REQUIRED.Required significa "necesario", y quiere decir que el atributo es obligatorio; es decir:hay que utilizarlo.

:sTer.~

Volvamos a nuestro ejemplo. La etiqueta precio tiene que contener el atributo cliente. Los valores po-sibles son final y distribuidor. El atributo es obligatorio, es decir "required". Deberá escribirlo así:<!ATTLIST precio cliente (distribuidor\final) #REQUIRED>

Este es el aspecto de la OTO:Hablaremos en detalle de otras opciones de los atributos en la siguiente lección. Ahora ya hemosacumulado suficiente información para escribir correctamente la DTD. Copie las siguiente líneas yguárdelas como productos.dtd. He resaltado en gris la línea con la definición de atributos:

<!ELEMENTproductos (partidas+»<!ELEMENTpartidas (nombre,num,fabricante,precio+»<!ELEMENTnombre (#PCDATA»<!ELEMENTnum (#PCDATA»<!ELEMENTfabricante (empresa,localidad?»<!ELEMENTempresa (#PCDATA»<!ELEMENTlocalidad (#PCDATA»<!ELEMENTprecio (#PCDATA»<: !ATTLIST precío _cl.i.ente· (dis~ribui~or If í.ria.L) #REQUlRED>

Visión general de las instrucciones de la OTOQuizás vale la pena que repasemos una vez más las distintas instrucciones de la DTD. De esta formareforzará los conocimientos adquiridos hasta ahora.

1. La primera Hnea define el elemento rafz, en nuestro caso productos. Este elemento contienevarias partidas, y lo indicamos mediante el operador de suma, que en este caso también po-drfamos colocar después del paréntesis de cierre.

<IELEMENTproductos (partidas+»

Page 20: Manual xml

36 Lección 5: definir las etiquetas con atributos

2. Las partidas contienen las etiquetas nombre, num, fabricante y precio. El precio tiene queaparecer como mínimo dos veces. Todas las demás etiquetas aparecerán solamente una vez enrelación con partidas. La coma indica el orden exacto y la secuencialidad de los elementos.

<!ELEMENT partidas (nombre,num,fabricante,precio+»

3. Los dos elementos aseguran que las etiquetas pueden contener caracteres -de ello se ocupala instrucción #PCDATA.

<!ELEMENT nombre (#PCDATA»<!ELEMENT num (#PCDATA»

4. Una fila más abajo se establece la jerarquía de anidación: la etiqueta fabricante debe incluirla etiqueta empresa y posiblemente también localidad.

<!ELEMENT fabricante (empresa,localidad?»<!ELEMENT empresa (#PCDATA»<!ELEMENT localidad (#PCDATA»

5. Las dos líneas siguientes se ocupan de definir los atributos para la etiqueta precio. En primerlugar asignaremos al elemento la clave #PCDA TA.

<!ELEMENT precio (#PCDATA»

6. En la fila siguiente definiremos el atributo. El atributo cliente puede tener los valores distribUirdoro final. Mediante la clave #REQUlRED indicamos que los atributos son obligatorios.

<!ATTLIST precio cliente (distribuidor I final) #REQUIRED>

El documento XMLLa DTO está terminada, y ahora solo nos falta el archivo XML. En la página siguiente le mostraré t o-do el documento.Después de copiar el código, no se olvide de valídarlo, ya que es la única forma en que podrá estarseguro de no haber cometido ningún error.

<?xml version="l,O· encoding="Iso-88S9-1· ?-:><!DOCTYPE productos (View soorc .1<>,,_.6.1I1.""""'tu.""' .b . .__

- <productos>- <partidas>

<nombre>Muñec~ de trepo-e/<num>32945-38</num>

- <fabricante> ::::f:cempresac-jueqotendíe SA ::~<localidad>Valladolid</loca :-;;,

c/fabricanteo .~.;,',<precio cliente=-.=inal">60</precio> ~.-<<precio cliente='distribuldor'>4tl</precio> !'.;

</partidas> ~:'_._._:::_5P~i'!.a..s.::_"__.__. .. .. .__._.__.__._~---.._---~_.--c----------------.------- '

Compruebe la validez del documento. En este caso, hemos utilizado el comando Valfdate XML en Internet Explorer

• I

Lección 5: definir las etiquetas con atributos 37

Visión general del documento XML~blaaDTDelcódigo fuente y guárdelo con el nombre productos.xml. No se olvide de incl . eera a que hemos creado antes (resaltada en gris). uir una rereren-

<?xml version="l.O" encoding="ISO-8859_1"?>-;:·.IPOCTIPEproductos SYSTEM' "prodüéto's",'dtd,";'.:,_:..,;~~.'/""""""'-<productos>· . -

<partidas><nombre>Muñeca de trapo</nombre><num>32945-38</num><fabricante>

<empresa>Juegolandia SA</empresa><localidad>Valladolid</localidad>

</fabricante><precio cliente="final">60</precio><precio cliente="distribuidor">40</precio>

</partidas><partidas>

<nombre>Caballito de madera</nombre><num>32945-41</num><fabricante>

<empresa>Juegolandia SA</empresa><localidad>Valladolid</localidad>

</fabricante><precio cliente="final">18</precio><pre.cio cliente=" distribuidor" >12</precio>

</partl.das><partidas>

<nombre>Tren madera básico</nombre><num>32945-41</num><fabricante>

<empresa>Natura SL</empresa></fabricante><precio cliente="final">80</precio><precio cliente="distribuidor">60</precio>

</partidas></productos>Retornaremos este ejemplo más adelante. A' artir de la ' . , ,archivo XML utilizando CSS y 1 P . pagma 56 le mostrare como dar formato a un

. veremos as ventajas de XSL a partir de la pág ina 61.

Page 21: Manual xml

38Lección 6: más información sobre los atributos

Lección 6: Más sobre los atributosEn esta lección aprenderá a:• 1. Definir atributos sin preestablecer valores• 2. Definir atributos con valor opcional• 3. Predeterminar el valor del atributo• 4. Fijar el valor preestablecido

En este punto ya tendrá cierto dominio de losatributos. A continuación, veremos más opcio-nes.

Los archivos de ejemplo de esta lección se en-cuentran en la carpeta leccion6: www.pc-cuadernos.com / suplementos.

1. CDATA: no preestablecer nin-gún valor¿Qué ha aprendido hasta ahora sobre los atribu-tos? Es posible establecer previamente los valo-res. Asegúrese de que sean obligatorios(#REQUIRED) o se puedan emplear de formaopcional (#IMPLIED). El truco: hasta ahorasiempre hemos indicado solo un atributo y ensegundo lugar hemos predefinido el valor ovalores del atributo.

Ejemplo: etiqueta para "describirimágenes"Tomemos un ejemplo del ámbito gráfico. Su-pongamos que para una determinada aplicaciónXML necesitará una etiqueta que almacene elnombre de una imagen. En nuestro ejemplo setrata de la imagen (imaginaria) rosatii. Dichaetiqueta debe contener atributos que indiquenla anchura y la altura de la imagen.Este es el aspecto de la supuesta etiqueta:<imagen anchura="lOO" altura="60">rosa.tif</bild>Tenga en cuenta que el nombre del atributo nopuede contener caracteres especiales.• Indicamos dos atributos, que en el ejemplo

son anchura y altura.• No preestablecemos ningún valor.

Piense en el tamaño de los gráficos; tienen unaanchura y una altura determinada. Pero no tie-ne sentido indicar todos los valores posibles, yaque podría haber valores desde 1 píxel hasta600, 800 o incluso 1.024.

<?xml verstcn=r r.n" encoding="iso-8859-1" 1><IOOCTYPE qrañco (View Source for fui! doctype . .»

_ cqrafico><imagen anchura="100·

altura="60">rosa.ttf<!imagen></grafica>

La etiqueta contiene los atributos altura y anchura

Si lo desea, puede copiar el ejemplo y guardarlocon el nombre grafico.xml. Establezca además unenlace (en gris) a la DTD que todavía no hemoscreado, llamada grafico.dtd:<?xml version="l.O" encoding="iso-8859-1"?><!DOCTYPEgrafico SYSTEM"grafico:dtd">

<grafico><imagen anchura="lOO" altu-

ra="60">rosa.tif</imagen>

</grafico>

La OTO para definir los atributosObservemos la OTD correspondiente. Escriba elejemplo y guárdelo como grafico.dld.<!ELEMENT grafico (imagen»<!ELEMENT imagen (#PCDATA»<!ATTLIST imagenanchura CDATA#REQUlREDaltura CDATA #REQUIRED>

Nos interesan especialmente las tres últimas lí-neas, ya que en realidad son una sola fila.• Por motivos de visibilidad he forzado los

saltos de línea: por lo tanto, la definición deatributos se realiza en una sola línea.

• Después de !ATTUST se escribe el nombrede la etiqueta, en este caso imagen.

• En lugar de los paréntesis que utilizábamosen valores predefinidos escribiremos única-mente CDATA, la abreviatura de characterdata.

:0DAi~'SifihifiCá:'ql.l~'etÍ¡áíbt pUeoi:l"~\~,i;¿;,¿jg(~~,/(J~liª;~~;~~r~&'~I:~SPL!W~il\·Elimine un atributo de la etiqueta <imagen> ejntente validar el documento. Puesto que ambosatributos son "required", aparecerá un mensajede error.

(

Lección 6: más información sobre los atributos 39

Ventajas e inconvenientes de COATAHablemos un poco de la instrucción CDATALa hemos utilizado para crear un atributo quepuede tomar cualquier valor. Esto supone unaventaja.También podemos rellenarlo con espacios enblanco o caracteres especiales.

1

- <qrañco></~~~~~~:altura="60· anchura=-.; Ü·>ros4I.tlf<jlmagen>

Vaya tontaría -pero es válido

Como puede ver, este valor inútil del atributose acepta sin rechistar, e incluso pasa la valida-ción.

Clave NMTOKENSi desea excluir los espacios en blanco y los ca-racteres especiales, deberá recurrir a la claveNMTOKEN. En lugar deanchura CDATA #REQUlREDescriba:anchura NMTOKEN#REQUlREDDe esta forma, estarán permitidos únicamentelos siguientes caracteres:

• Letras• Cifras• Punto (), dos puntos (:)• Guión (-), guión bajo UPor desgracia, no existe ninguna forma"elegante" de limítarlo únicamente a letras onúmeros entre 10 y 260, por ejemplo. En ese ca-so debería indicar todos los valores aceptadosentre paréntesis.

Uegados a este punto, podemos ver los incon-venientes del uso del concepto de DTD como"plantilla de muestra". Porque las DTD todavíaprovienen de los "viejos tiempos de SGML" .Por ese motivo, en el año 2001 se introdujo unnuevo principio más complejo llamado schema(esquema). Hablaremos de ello a partir de lapágina 69.

Mientras tanto, nos dedicaremos un rato más alas DTD, ya que siguen siendo la opción máshabitual.

2. #IMPLIED: el atributo es opcio-nalAmpliemos un poco nuestra DTD. Incluiré otroa~buto ll~.do lzw (es un proceso de compre-sion para gráficos TIF). El atributo podrá acep-tar los valores yes o no, en función de si el gráfi-co está comprimido o no.Con este ejemplo le mostraré cómo conseguirpor medio de la clave #IMPLIED, que el atrib~-to sea opcional. He marcado la línea afectada decolor gris.<!ELEMENT grafico (imagen»<!ELEMENT imagen (#PCDATA»<!ATTLIST imagenanchura CDATA #REQUlREDaltura CDATA #REQUlREDl~w '(YE!sJÍlO} #lMPL1ED>;

La práctica hace al maestro

P:egunta: ~El ar~vo XML actual (véase la pá-gma anterior) slgue correspondiéndose con el"patrón" de la DTD? Si es así, ¿por qué? Valideel archivo.

P~egunta: Pero ¿qué ocurre si en la etiqueta<Imagen> yo pongo el par atributo-valorlzw="sin "? Pruébelo. Valide el archivo.¿Por qué aparece un mensaje de error?:~ c:I,bto\M\XM.1,o.noxrQ\.IIKx\2~.~

<?:lCmlversion="1.0" encoding='iso-8859-¡' 1><!OOCT'I'PE grafico (Vi6w soorce fbr fun doctyp8 .. .»

- <grafico><I~j~~~~: anchura='100' altura="60' 12 .•••.=·sln·>rosa.tlf<!imagan>

El atributo es opcional, pero el valor no

Respuestas: en el primer caso, el archivo XMLtodavía se corresponde con el "patrón" de laDTD. El atributo solo era "implied", opcional.E.n-el segundo caso, el archivo XML ya no seajusta a la DTD porque el atributo contiene unvalor erróneo.

Page 22: Manual xml

40 Lección 6: más información sobre los atributos

3. Predefinir un valorVolvamos a los atributos. Ya sabe cómo hacerque los atributos sean obligatorios u optativos,cómo establecer los valores deseados o dejarlo"todo abierto" con CDATA.Sin embargo, todavía no sabe cómo predefinirun atributo con un valor. A continuación, que-remos cambiar el ejemplo del gráfico para pre-establecer el par atributo-valor lzw= "yes ",Para ello, modifique la línealzw (yeslno) #IMPLIED>

de la siguiente forma:lzw (yeslno) "yes">Escriba el valor predefinido (preestablecido) enlugar de #IMPLIEO o #REQUIREO. Si trabajacon un valor predefinido, no podrá utilizar másestas claves.

¿Qué ocurre? iPruébelo! Borre el atributo lzw enel archivo XML.

<7)(11'1Iversion::'l.O· encoding='iso-88S9-1' 1> ~<!OQCTVPE grafico (View Source for tu. doctyfJ6 ... » ;:~"

- <g~:~::n anch •.•.a=·lÓO· Oiltura="fjO' IlW=·YBs·>rosa.tJf~gen> ~:.

</9'.'<0> l' ~El navegador establece el atributo y el valor automática-

mente

Internet Explorer inserta el atributo junto con elvalor predefinido de forma automática.¿Pero qué ocurre cuando, en lugar de yes, le in-terese que sea el valor no? Escriba sencillamenteIzw="no".

4. FIXED: fijar el valor preestable-cidoSin embargo, es posible "fijar" el valor preesta-blecido. Para ello, deberá escribir después delvalor o valores del atributo la clave

• #FIXED

y detrás de ella el valor predefinido entre-comi-llas. Aplicándolo a nuestro ejemplo, esta sería lamodificación necesaria:lzw (yeslno) #FlXED "yes">Pero deténgase un momento a pensar. ¿Tienesentido poner yes y no como elección y despuésasignar como valor "fijo" yes solamente?Aún es más clara la siguiente línea.lzw CDATA#FIXED "yes">La OTO completa de nuestro ejemplo tendrá es-te aspecto:<!ELEMENTgrafico (imagen»<!ELEMENT imagen (#PCDATA»<!ATTLIST imagenanchura CDATA#REQUlREDaltura CDATA#REQUlREDlzw CDATA#FIXED "yes">Compruebe nuevamente que la validación seacorrecta.

Lección 7: entidades como "comodines' 41

Lección 7: utilizar entidades como "comodines"En esta lección aprenderá lo siguiente:• Utilizar entidades como comodines internos• Incorporar archivos externos a través de en-

tidades• "Parameter-Entities" para la OTO

¿Se acuerda de nuestra disertación sobre las en-tidades? En la página 21 le he presentado las en-tidades como una especie de "comodines" paracaracteres especiales.A continuación, le mostraré cómo se puedenutilizar estas "entities" como comodines paratexto. En primer lugar hablaremos de"entidades internas", que actúan dentro del ar-chivo XML. Después hablaremos de las entida-des que solamente se utilizan en la OTO.

(1. Más comodidad: entidades in-ternas¿Con qué podríamos comparar las entidades?Quizás con el principio de la impresión en serie(en Word se llama "combinar corresponden-cia"). Disponemos de una "plantilla de carta"válida para cientos de destinatarios. Los ea m-pos de combinar correspondencia sirven parainsertar, por ejemplo, los nombres de cada unode los destinatarios.

Crear la OTO para la cartaA continuación, crearemos la OTO carla.dtd. In-tente hacerlo usted mismo y después compare:<!ELEMENT carta (para,asunto,texto»<!ELEMENTpara (#PCDATA»<!ELEMENT asunto (#PCDATA»<!ELEMENT texto (#PCDATA»¿Dónde está la entidad? Enseguida la inserta-remos.

Insertar una entidadEn el ejemplo trabajaremos con una entidadllamada &nombre; . En los puntos en los quedeseamos insertar el nombre Pedro colocaremosla entidad &nombre; . Esta es la única manerade que el archivo XML actúe como plantilla pa-ra miles de cartas dirigidas a miles de destinat a-rios.

Tranquilizador: Valldatlon Successful

Los programadores conocen un concepto simi-lar llamado variable. Una variable es una espe-cie de comodín para una determinada cadenade caracteres. Las variables solamente se decl a-ran una vez, y su contenido puede cambiar.

Archivo XML para una cartaComo ejemplo, escribiremos un archivo XMLpara una carta. La llamaremos caria.xml y des-pués crearemos la OTO correspondiente car-ta.dtd.<?xml version="l.O" encoding="iso-8859-1"?><!DOCTYPE carta SYSTEM "carta.dtd"><carta>

<para>Pedro</para><asunto>Concierto</asunto>

<texto>Hola Pedro, ¿cuándo nosvemos?</texto>

</carta>Con este ejemplo vamos a hacer que el destina-tario Pedro se repita continuamente.

Cuando haya modificado el archivo XML, so-lamente obtendrá un mensaje de error. InternetExplorer se quejará de una "referencia a la enti-dad no definida 'nombre:".

Definir una entidadLas entidades se deben definir en la OTO. Estaes la sintaxis correspondiente:<!ENTITY nombreentidad "contenido">El comodín nombreeniidad se debe sustituir porel nombre de la entidad en cuestión. Pero aquíno debe incluir & Yi

Escriba esta línea al final de la OTO:<!ENTITY nombre "Pedro">

<?)(ml versicne'ü.ü' encoding="iso-8859-1" 1><!OOCTYPE carta (View Source for fuJ/ ooctvpe. .. )>

- <carta><para>Pedro<!para><:asunto>Condelto</asunto>de)(to>Hola Pedro, Lcuo1§ndonos vemos?</texto>

</carta>

Abracadabra: en lugar del comodín aparece el texto

Page 23: Manual xml

42 Lección 7: entidades como "cornodines"

Los trucos de la práctica: ¿acentos?No está nada mal, este concepto de las entida-des. Pero, en la práctica, el navegador tiene al-gunos problemas. Si intenta incluir acentos o ca-racteres especiales en el contenido de una enti-dad, las cosas se torcerán.En pocas palabras: un nombre como González nose podría mostrar. Aparecería un mensaje deerror.

Se enc:entr6 un c.r4cter no .¡lid. en e conlenl". del text.. EfTGrel pNCI!I'"flle:/IIC:/kw/e./XMljcursolCmIJlecclon7/1_enttUe._lnttlm •• /problemeen,

Un•• 6, Po.ld"" ZZ '"

c t !:NTITY nombre "Conz:

Adiós a la "discriminación de los acentos"

La solución: al principio de la DTD Yde formaexcepcional, escriba un prólogo XML estable-ciendo el conjunto de caracteres Latin-l conencoding=" iso-8859-1".

2. Otra opción: archivos externosCon estas fantásticas entidades también es posi-ble vincular archivos (XML)externos. Esta seríala sintaxis:<!ENTITY nombreentidad SYSTEM"archivo.endll>

nombreentidad se sustituirá por el nombre de laentidad. Después deberemos escribir un espacioen blanco y la clave SYSTEM.A continuación,otro espacio en blanco y el nombre con la exten-sión (y si hace falta,la ruta de acceso) del archi-vo en cuestión, siempre entre comillas.

Puede tratarse de un archivo XML o de un a r-chivo de texto.

Visión general de la OTOVamos a probarlo. En este ejemplo trabajaremoscon un archivo de texto.• El archivo XML no se modificará• El nombre se almacenará en el archivo de

texto nombre.txt

Para ello deberemos modificar únicamente laDTD.

~

carta.dtd~ Archiva OTOWlI 1 K8

I

Guarde el nombre en un archivo de texto externo

Este es el código fuente de la DTD:<!ELEMENT carta (para,asunto,texto»<!ELEMENTpara (#PCDATA»<!ELEMENTasunto (#PCDATA»<!ELEMENTtexto (#PCDATA»-c!ENTITY nombze SYSTEM~IIÍlombre_txt'-;

. ., ¡~.'"

Compárelo con los archivos de las carpetas queencontrará en leccion7. (www.pc-cuadernos.com)Volverá a tener el problema con los acentos, pe-ro este tipo de "entidades externas" tambiénpueden plantear otros problemas.

3. Entidades parámetro en la OTOFinalmente le mostraré la tercera forma quepueden adquirir las entidades. También se pue-de trabajar con comodines dentro de una DTD.

Las llamadas "parameter-entities" o entidadesparámetro son adecuadas cuando se trabaja conDTD muy largas y se desea ahorrar tener quevolver a escribir párrafos repetitivos.

Ejemplo con un inventarioPara darle un ejemplo he pensado en crear uninventario. En un documento vamos a mostrarla cantidad de distintos muebles de oficina. Paraello utilizaré los elementos

• mesa• silla• armario, etc.

Cada etiqueta deberá tener el atributo marca,que asignará diversas marcas predefinidas co-mo valor. Y he aquí cómo se simplifican las co-sas ...

Lección 7: entidades como "comodines" 43

La lista del inventario en XMLEn primer lugar le mostraré el inventario en XML. Como puede ver, la lista es muy sencilla:<?xml version="l.O" encoding="iso-8859-1"?><!DOCTYPE inventario SYSTEM "inventario.dtd"><inventario>

<mesa marca="Desktop">2</mesa><silla marca="Orco">3</silla><armario marca="Troll">l</armario><armario marca="Orco">l</armario><estanteria marca="Ikea">3</estanteria>

</inventario>La DTD se vuelve realmente interesante. En ella establezco que las cuatro etiquetas se pueden util i-zar en cualquier orden (opción). Pueden aparecer tantas veces como se desee (quién sabe cuántosarmarios hay en su oficina), pero no deben aparecer obligatoriamente. Para ello, deberá utilizar unasterisco. Observe la DTD de abajo, en la segunda línea: he utilizado el asterisco fuera de los parént e-sis para que actúe sobre todo el grupo.

Sintaxis de las entidades parámetroUtilicemos finalmente las ventajas de las entidades parámetro. Antes deberemos hablar de la si ntaxis.

~Una eii!i!'lad p'áráiñ~ro no se rQde~ coij:los'cara~eres ~.; si(1oconc°;'¡-:;.:'A<jemásfeStaéritiaá'd deti9,. 'u '. .~~~)im!!!:~E!ral.~[lCip.lo~e tooq de la DJ!i~:,. '1 ~:f:1.':' •. ;~''';:''-~fi.i

Una entidad parámetro debe utilizar la siguiente sintaxis: < !ENTITY % nombreentidad"contenido" >.Observe que hay un espacio en blanco entre el signo de porcentaje, el nombre de laentidad y el contenido propiamente dicho. Puede acceder al contenido de la entidad mediante%nombreentidad; en este caso el signo de porcentaje y el punto y coma del final se deben juntar alnombre sin espacios en blanco.

La OTO del ejemplo

En nuestro ejemplo, la entidad se va a llamar atributo. El contenido consta del nombre de atributomarca con los valores Desktop, Orco, Troll, Ikea. Todos tienen que ser "required". Por lo tanto, comocontenido escribo esta línea: marca (Deskiop IOrko ITrolll Ikea) #REQUIRED. Tenga en cuenta que elcontenido tiene que estar escrito siempre entre comillas.

A continuación le muestro la secuencia de comandos del archivo inueniario.dtd. He resaltado en grisla línea con la definición de la entidad, y las entidades aparecen en negrita:

<!ENTITY % atributo "marca (DesktoplOrcolTrollI Ikea) #REQUlRED"><!ELEMENT inventario (mesalsillalarmariolestanterial*><!ELEMENTmesa (#PCDATA»<!ATTLIST mesa %atributo;><!ELEMENTsilla (#PCDATA»<!ATTLIST silla %atributo;><!ELEMENTarmario (#PCDATA»<!ATTLIST armario %atributo;><!ELEMENTestanteria (#PCDATA»<!ATTLIST estanteria %atributo;>Este ejemplo muestra que con las entidades parámetro es posible ahorrarse trabajo de escritura rep e-titiva. Compárelo con los archivos de la subcarpeta leccion7 del suplemento.

Page 24: Manual xml

44 Sección práctica C: atributos, OTOy entidades

Ahora ya sabe cómo:• Utilizar Ydefinir atributos en la OTO• Predefinir y fijar valores de atributos• Utilizar entidades como comodines

¿Qué le parecería hacer un poco de gimnasia cerebral? Vamos a intentarlo con un poco de XML.

Ejercicio C1: documento XML con atributosCopie el siguiente código XML y guárdelo en un archivo con el nombre ooras.xml.<?xml version="l.O" encoding="ISO-8859-1"?><obras>

<obra estilo="Gotico">Catedral de Burgos</obra><obra estilo="Romanico">Iglesia de Santa María de Taüll</obra><obra estilo="Plateresco">Universidad de Salamanca<lobra><obra>Monasterio del Escorial<lobra><obra estilo="Modernismo">Sagrada Familia<lobra>

<Iobras>Ejercicio C2: escribir la definición del tipo de documentoPara este documento XML, cree su definición de tipo de documento, y llámela obras.dtd. Tenga encuenta los atributos; el orden no importa. Piense si estos atributos son siempre obligatorios y téngaloen cuenta en la DTO. No se olvide de incluir el vytculo a la OTO.

Ejercicio C3: predefinir valores de atributosCree la lista de teléfonos que puede ver a la : ~:Il!lc,\I<w\"~"""'"",,,_\lstateW"""'.'"'derecha y llámela listatelefonos.xml. Cree la r I

<1xml verslcne'ü.ü' encoding="ISO-8859-r 1> .OTO correspondiente, que deberá tener e s- <IOOCTYPE ñstatelefonos (View Source for (un doctype .. .» .-'1tas características: - cllstetelefonos> _

- <entrada>La etiqueta nombre puede aparecer una o <nombre tipce'tnemb •.•·'luGn</nombr.>

<nombre tipo="lIpellldos""C8rdo50<!nombre>varias veces, pero la etiqueta telefono solo ctelefono tipo='trGbGjo"931234567</telefono, Iaparecerá una vez. </entrada, ....:

- <entrada>La etiqueta nombre tiene que tener obligato- <nombre tipo=·nomb •.•·'M.rf.</nombr.>

<nombre tipo="epellldos">Rem(rez</nombre> •riamente el atributo tipo= "apellidos" o ti- ctelefono tipo=·priv.do·,93-7654321</telefono, ,-~

po= "nombre ". La etiqueta telefono tiene que e/entrada> ¡c/listetelefonoso I

tener el atributo tipo= "trabajo" o ti- iilpo= "privado ': El valor tipo="trabajo" será el, i""~l~'~¡;¡;~~~-.~-~"~'~'~~'~~;;1~~'1lI~,~\.""'~f!!'llf'·!I~~~~~~:.t~predeterminado, pero se podrá sobreescri-bir.

Ejercicio C4: insertar entidadesCree el siguiente archivo entidad.xml juntoa la OTO entidad.dtd. La entidad&comentario; se ocupará del contenido dela etiqueta comentario. Defina la entidaden la OTO e insértela en el archivo XML.

<?xml version=-1.0- encoding=-iso-8859-1· 1><!OOCTYPE entidad {View Source for full doctype ... }>

- <entidad>ccomentanoc-comenteríc de pruebl!</comentario:>

</entidad>

~.'="'="'~~" •.7.,-.~~~__~.~=~~.~.~~ .•~~~==,~~~~,j

Lección 8: anidación y uso del paréntesis en la OTO 45

Lección 8: anidación y juegos con paréntesis en la OTOEn esta lección aprenderá a:• Utilizar correctamente los indicadores de

frecuencia• Comprender la relación entre el orden de los

elementos y la agrupación

En primer lugar, nos ocuparemos de aclarar yconsolidar los conocimientos adquiridos. Estecapítulo tiene nuevamente carácter de tallerpráctico: ¡participe!

Elaborar la estructura de un do-cumentoVamos a hacer un experimento. Copie el ejem-plo que le presento y guárdelo como documen-to.xml. Se trata de la estructura básica de un d o-cumento, por ejemplo de un sitio Web. Dividi-remos el texto en dos títulos, un párrafo Y unmarco.

Grupos y operadoresCuando valide el documento comprobará quetodo está perfecto. El documento XML es válidoy el orden es el correcto; ahora compárelo coneste fragmento:(titulol,titulo2,parrafo,marco)

Tenemos un elemento llamado titulol, otro ti-tu102, parrafo y marco. Se ha mantenido el ordenestablecido. Recuerde: se trata de una unión detipo consecutiva (y).

Indicador de opción¿Qué ocurre si desea dejar libre el orden de lasetiquetas del documento XML? No hay proble-ma. Sustituya la coma por una barra vertical.Este signo indica que se trata de una opción (o).Pruebe esto:(titulol Ititulo2 Iparrafo Imarco)

Una unión de tipo opcional significa que sepuede utilizar un valor o bien el otro.

Hasta ahora, la lectura de la instrucción sería es-ta:

• Elige el elemento titulol• o tituloz o parrafo o marco

El truco: de esta forma solamente se puede uti-lizar un único elemento. Si validamos el docu-mento XML con la OTO modificada, obtendre-mos un mensaje de error.

Indicador de frecuencia (+)Observe el indicador de frecuencia colocadofuera del paréntesis de cierre.(titulolltitulo2Iparrafolmarco)+Este signo está actuando sobre todo el grupo. Elsigno de suma significa que el elemento debeaparecer (como mínimo) una vez o varias veces.y con elemento me refiero en este caso a todo elgrupo.• Uno de los cuatro elementos tiene que apa-

recer, sin importar cuál.• Puede aparecer un número ilimitado de

otros elementos.

<1xml versione'u.ü" encoding="¡so-8859-1" 1><!OOCTYPEdocumento (VWJw Source for fuI! doctype .•. )>

- <documento>- <fragmento>

<titulol>Tftulo Inferior</tituIOl>ctitulozo Tftulo principal</titulo2>cparrafo» 'rextoc/parrafoo<marco> Texto con marco</marco>

c/rreqmentcc-</documento>

~---~-._----~-_._~-----. '.. ' 11. - .

No se olvide de enlazar a la OTO

Escriba también un enlace a la OTO documen-to.did que todavía no hemos creado.

La OTOdocumento.dtdCopie la OTO; en este ejemplo vamos a experi-mentar.<!ELEMENT documento (parrafo+)><!ELEMENT fragmento(titulól, titÍllo2,parrafo, maxco)-»dELEMIDIT titulol .(#PCDATA) ~ .....<!ELEMENT titulo2 (#PCDATA»<!ELEMENT parrafo (#PCDATA»<!ELEMENT marco (#PCDATA»Observe con detenimiento la zona que he mar-cado en gris (una línea). Entre los paréntesis sedefine, en primer lugar, un grupo, y en segundolugar, el orden exacto.

Page 25: Manual xml

46 Lección 8: anidación y uso del paréntesis

Ahora ya podría incluir en el documento XMLun parraio, después un titultü, un titulol, etc. Ypuede hacerlo en el orden y con la frecuenciaque desee. Compárelo con el ejemplo documen-t02.xml y su respectiva DTO documenial.did,donde he hecho exactamente eso.Sin embargo, también podría renunciar a todoslos elementos excepto uno. Como mínimo unotiene que aparecer.

El asterisco (*)¿Desea tener realmente vía libre? ¿Quiere poderutilizar sin limitación alguna las distintas eti-quetas, e incluso poder no utilizar ninguna deellas? En ese caso, utilice el asterisco:(titulolltitul02 Iparrafolmarco) *Encontrará este ejemplo en la carpeta como do-cumenioá.xml,

ctxrnl version=-1.0· encoding=-iso-8859-1- 1><!OOCTYPE documento (View ecarce for tull doctype ..»

- <documento><fragmento

</documento:>

La validación es positiva aunque hemos omitido todas lasetiquetas

Indicador de unión consecutiva ygruposSigamos experimentando. ¿Qué conseguiríamosescribiendo esta instrucción?(titulol,titulo2,parrafo,marco) +

¿Podría ordenar las etiquetas a su gusto? ¡No!Tienen que aparecer necesariamente en este or-den:• titulol - titul02 - parrafo - marco

Puede repetirlo tantas veces como desee, perosiempre en este orden.

cvxrnt versic<IDOCTYPE

- <documento- cfraqment

<titulo 1>Tltulo Inferlor</titula 1>ctítutozo TItulo prlndpal</titulo2>cparrefoo TeKt:o<!parrafo><marco> Texto con merece/maree><:titulol>Tftulo Infarlor</titulol><titulo2>Tftulo prlndpak/titulo2>cparrefoo TeKt:o<!parrafo>cmercoo'raxtc con merece/marco>

</fragmento></documento>

El indicador de unión consecutiva fija el orden

El ejemplo se llama document04.xml.

Crear subgruposPodemos seguir adelante con el juego. Es posi-ble incluso crear subgrupos. Estudie esta op-ció~(titulol, (titulo2Iparrafo) ,marco) +¿Qué conseguiremos con eso? Después de titu-/01 tiene que aparecer titulo2 o parrafo. Y des-pués debe aparecer obligatoriamente marco. yeste orden preciso se puede repetir tantas vecescomo se desee.

<1)1<ID

- <da- <fragmento>

<titulol:>Tftulo Inferlor</titulal><parrafo>TeKto</parrafo><marca> Texto con merec-e/merco>

</fragmento>cydocumento>

Opte por tltulo2 o por parrafo

El ejemplo se llama documentoS.xml con su OTOcorrespondiente.

Lección 9: sobre espacios de nombres e islas de datos 47

Lección 9: sobre espacios de nombres e islas de datosEn esta lección aprenderá a:• Comprender los espacios de nombres, defi-

nirlos y declararlos• Incluir etiquetas HfML en XML• Islas de datos XML en HTML

El concepto de espacios de nombres es funda-mental para comprender muchos de los len-guajes basados en XML.

Espacio para las etiquetas:name spaces¿Qué le he dicho al principio del cuaderno? EnXML es posible inventarse sus propias etique-tas. Y así es, en efecto.

Problema del doble sentido¿Pero qué ocurrirá si desea juntar dos doc u-mentos XML de dos autores distintos? ¿Y si e s-tos autores no se han puesto de acuerdo?Supongamos que un fabricante utiliza una eti-queta <producto></producto> y con ella se refierea la cantidad del producto. Sin embargo, el dis-tribuidor utiliza la misma etiqueta y la entiendecomo la descripción del producto.

Arreglar los dobles sentidosEn la vida real es posible reparar fácilmente es-tas "ambigüedades". Tomemos como ejemplodos personas con el mismo nombre. Seguro quedistingue perfectamente entre Enrique del de-partamento de ventas y el pesado de Enrique decontabilidad.Pues algo parecido podemos hacer con los pro-ductos. El lector entenderá, por el contenido dela etiqueta <producto>, que en unos casos se re-fiere a la cantidad y en otros a la descripción.

Sin embargo, XML es un lenguaje que leen prin-cipalmente las máquinas, y las máquinas no sontan inteligentes.

Hay que aclarar las cosas.

Los espacios de nombres como"espacio para nombres"El equipo del World Wide Web Consortium sedio cuenta del problema rápidamente y en 1999propuso como solución los espacios de nom-bres.

Los espacios de nombres son, tal como su no m-bre indica, "espacios para nombres". Debere-mos asignar a cada uno de los documentosXML un espacio propio, y utilizar un "Enrique"en el "contexto" de ventas, y el otro para refe-rimos a contabilidad. Para este contexto ten-dremos que pensar en una "abreviatura". Al deventas lo describiremos así:<venta:nombre>Enrique</venta:nombre>Mientras que al compañero de contabilidad ledescribiremos así:<contab:nombre>Enrique</contab:nombre>De la misma forma podemos distinguir la eti-queta <producto> utilizando distintos espaciosde nombres. Una etiqueta:<fab:producto>2</fab:producto>y la segunda:<dist:producto>Stuhl</dist:producto>

El prefijo del espacio de nombres: lasintaxis de las etiquetasAcaba de aprender la sencilla sintaxis para de-finir espacios de nombres.

Puede definir el prefijo con total libertad, siem-pre que no utilice espacios en blanco ni caracte-res especiales y no empiece con una cifra.

En el ejemplo de Enrique, los dos espacios denombres se llaman venta y contab, mientras queen el ejemplo del producto los hemos llamadofab y disto El truco está en abrevíar los prefijos,de esta manera nos ahorraremos tiempo escri-biendo.Después del prefijo vienen los dos puntos Ylaetiqueta. Y ahora que ya sabemos esto, ¿cómo sedeclara un espacio de nombres?

Page 26: Manual xml

48 Lección 9: sobre espacios den nombres e islas de datos

Declaración de un espacio de nombresYa sabe qué son los espacios de nombres y cómo "poner en su sitio" a las etiquetas mediante prefijosy dos puntos. ¿Pero cómo se crean los espacios?

<?xml version=·1.0· encoding=-iso-8859-!1f 7>- <empresa xmlns: venta=.http://www.pc-cuadernos.com/venta.

xmlns: contab=.http://www.pc-cuadernos.com/contab.:>- <personas:>

<venta: nombre:>Enrique</venta: nombre:>ccontab: nombre:>Enrlque<lcontab: nombre:>

e/personas»c/empreseo

"

Enrlques por todas partes: hay distintas personas en "distlntOSJlspeclos"

Lo haremos utilizando una "etiqueta madre"; tornemos el elemento raíz. Cree una declaración en elelemento raíz en el que se declaren los prefijos del espacio de nombres. En el ejemplo de los dos E n-riques, declararemos dos espacios de nombres de una sola vez:<?xml version="l.O" encoding="iso-8859-l"?><empresa xmlns:venta="http://www.pc-cuade=os.com/venta ••

xnÍlns:cont.ab«••http://www.pc-cuade=os.com/contab ••><personas>

<venta:nombre>Hans</venta:nombre><contab:nombre>Hans</contab:nombre>

</personas></empresa>Encontrará el ejemplo en la carpeta leccion9, archivo espacionombres.xml.

El atributo xmlns y el URIObserve la línea resaltada del ejemplo de arriba: en ella se declara el espacio de nombres. El atributoxmlns se ocupa de la referencia al espacio de nombres. En el ejemplo, el atributo aparece dos vecesporque tenemos dos espacios de nombres. (En la práctica suele haber solo uno).

Ixrn1ns es la abreviatura de XML name space.

En el ejemplo, se hace "referencia" al verdadero espacio de nombres a través de una dirección Web.¿Pero qué significa esta dirección? Qué significa esta URI, tal corno se suele llamar en la jerga infor-mática, el Uniform Ressource Identifier?

La misteriosa dirección WebDetengámonos un momento. No tiene que escribir la dirección en el navegador porque no encontraránada. Y no se preocupe, si abre el archivo tampoco se conectará automáticamente a Internet. Esta d i-rección Web o URI sirve simplemente como identificador único mundial. Puesto que una direcciónWeb solamente puede existir una vez, utilizamos una dirección Web. En este ejemplo, puede inven-tarse usted mismo el URI y ser consecuente con la denominación.

En el caso de los espacios de nombres ya definidos (por ejemplo, para representar etiquetas HfMLen XML), esta dirección ya viene preestablecida. Entonces deberá utilizar la URI predef inida.

No sufra, no vamos a reunir más.documentos XML. Los ejemplos nos han servido corno muestra p a-ra la declaración de espacios de nombres y corno aprendizaje para comprender los espacios de no m-bres ya definidos. Y son precisamente éstos los que nos interesarán a partir de ahora.

Lección 9: sobre espacios den nombres e islas de datos 49

Incrustar un archivo HTML en XMLVamos a hablar de un ejemplo de espacios de nombres predefinidos: incluya un archivo H1ML den-tro de XML. ¿Cómo? Con un name space, un "espacio propio" para las etiquetas ajenas de H1ML.

~. :,'. ~

La etiqueta con la definición del espacio de nombres (suele ser el elemento raíz) tiene que tener esteaspecto:<Tag xmlns:html=''http://www.w3.org/TR/REC-htm140''>La indicación de la dirección Web tiene que hacerse entre comillas. Puesto que el "espacio" fue defi-nido por el W3C, solamente funcionará si utiliza exactamente esta dirección. He aquí un ejemplo se n-cillo:<?xml version="l.O" encoding="iso-8859-l"?>"<pagina xmf ns ;html~'!http: l/www.w3 ..org/TR/REC-htm14.o":>

<xmltag>Todavia no estoy asignado a ningún espacio de nombres.</xmltag><html:hl>iAhoi HTML!</html:hl><html:h2>iUn verdadero titulo 21</html:h2><html:marquee>i1ncreible, incluso texto movedizo!</html:marquee><html:p>Soy una frase en un párrafo HTML.</html:p><html:hr/>

</pagina>Corno puede ver, de esta manera es posible mezclar XML con HfML. Utilice todas las etiquetas deHfML. Incluso la conocida etiqueta <marqueez-clmarquee» se muestra correctamente, por lo menos enInternet Explorer. Sin embargo, deberá atenerse a las estrictas reglas de XML. Todas las etiquetas n e-cesitan una etiqueta de cierre.

Cerrar la línea internamente¿Se está preguntando por la línea horizontal? ¿Porqué escribo «htmlhr]» en lugar de <himlthr»? Por-que en XML no se pueden poner etiquetas vacías.Sin embargo, en H1ML sí que existen =piense en<hr>, <img>, <input>, etc. Para que no haya pro-blemas, es necesario cerrar estas etiquetas a nivelinterno. Para hacerlo, se coloca una barra diagonal(/) al final de la etiqueta.

Vista previa en el navegadorAbra el documento en Netscape u Opera. Verá laestructura H1ML. Aparece todo, incluso la etiqu e-ta XML de encima de la "sección HTML" -aunquesin formato alguno.

Hablemos de Internet Explorer. ¿Solamente puede ver la estructura de árbol del documento? La úni-ca forma de "engañar" a Internet Explorer para que muestre el documento HfML es con un pequeñotruco. Deberá insertar un enlace a un archivo de diseño, por ejemplo un archivo CSS. Coloque estalínea en segunda posición, debajo del prólogo y encima del elemento raíz:<?xml-stylesheet href="durruny.css" type="text/css"?>

¡AhoiHTML!¡Unverdadero título 2!

IIncreíble. incluso texto movedizol

Soy una frase en un párrafo BTML.

~¡jr~-;:;;-;-:{ --~¡i¿i~r:ríl~".i~--~;;~,-;-~e~.~

Solamente Internet Explorer muestra la marquesina

La clave es que, en realidad, el archivo de diseño ni siquiera tiene que existir. Observe el archivohtmlincss.xml de la carpeta leccion9. A partir de la página 56 hablaremos de cómo crear documentosXML haciendo uso de CSS.

Page 27: Manual xml

50 Lección 9: sobre espacios den nombres e islas de datos

Demos la vuelta a la tortilla: islas de datos en HTMLPara que mi explicación sea lo más completa posible, a continuación le mostraré el camino inverso: esposible incluir código XML dentro de documentos HTML. Y para ello se utilizan las llamadas islasde datos.

El atributo id significa identifier, y nos permite dar una identificación unívoca. En el ejemplo he utili-zado el id islaxml.

:Insertar un documento XML en HTML, PC Cuadernos 4

I IDe vuelta a HTMLI

its:m.~'.

He aquí un ejemplo:<html><head>

<title>Isla de datos</title></head><body>

<hl>Insertar un documento XML en HTML</hl><xml id="islaxml">

<partida><nombre>PC Cuadernos</nombre><precio>4</precio>

</partida></xml>

<p>iDe vuelta a HTMLl</p></body></html>Netscape 7 es capaz de mostrar los datos XML sin necesidad de recibir instrucciones sobre el diseño(archivo CSS). Si abre este ejemplo en Internet Explorer, la parte XML quedará oculta, aunque en elfondo está ahí. ¡Pruébelo!Mi documento de muestra se llama islasdatos.html y se encuentra en la carpeta 1eccion9.

Lección 10: XHTML como "aplicación HTML" 51

Lección 10: HTML vive: XHTML como nueva versión de HTMLEn esta lección, podrá aprender:

• Las características de XHTML• Cómo se crea un documento XHTML• DTD de XHTML• XHTML en la práctica

XHTML como nueva versión deHTMLHasta ahora hemos podido comprobar que ac-tualmente XML no está indicado para el Web.El estándar prevaleciente sigue siendo HTML.

Puesto que XML existe desde 1998, el WorldWeb Consortium decidió "reformular" tambiénHTML 4 (presentado en 1997). Y la palabra"reformular" da en el clavo, ya que se trataprincipalmente de algo "formal".HTML ha sido modificado para adaptarse a lasestrictas reglas XML, y como resultado hemosobtenido XHTML. XHTML 1.0 "salió a la luz"en el año 2000.

Las estrictas reglas de XML¿Tiene experiencia con el lenguaje HTML clási-co? En ese caso, entender las novedades no lecostará demasiado. Lo único que tiene que ha-cer es tener en cuenta las siguientes "reglasXML":

Utilice siempre minúsculasEn HTML no importaba si se utilizaban mayús-culas o minúsculas. In XHTML, las etiquetas ylos nombres de atributos (no los valores) sola-mente se pueden escribir en minúsculas. Estaregla va más allá de XML, ya que XML tambiénpermite utilizar las mayúsculas para las etique-tas.

Todas las etiquetas necesitan una eti-queta de cierreMientras que en HTML se podía ser bastantechapucero, en XHTML todas las etiquetas nece-sitan una etiqueta de cierre. Está totalmenteprohibido dejarse «lp» o «lli», etc. Deberá es-cribir:

<p>Esto es un párrafo</p>

Cerrar a nivel interno etiquetas sin eti-queta finalEn XML se cierran todas las etiquetas. Cuandouna etiqueta se deja en blanco, es necesario ce-rrarla internamente, por ejemplo:<dirección/>

Esto es automático. Pruébelo: abra un documen-to XML y borre el contenido de una etiqueta.Visualice el resultado en Internet Explorer. Elnavegador mostrará una etiqueta cerrada inter-namente.

Volvamos a XHTML: es necesario cerrar todaslas etiquetas, aunque no tengan una etiqueta decierre. Antes, una línea se dibujaba así: <HR>.En el caso de XHTML, es necesario escribirloasí: -ehr />Para cerrar la etiqueta, se debe dejar un espacioen blanco y después una barra (/). ¿Por qué unespacio en blanco? El espacio en blanco es nece-sario para que los navegadores antiguos (porejemplo Netscape 4.x) no se "extrañen" al ver labarra.

Sin embargo, conforme a XHTML sería más co-rrecto escribir una línea así, por ejemplo: -eh.r/ >

Valores de atributos entre comillasSi en XML es algo que se da por supuesto, lomismo ocurre en XHTML. Todos los valores deatributos se deben escribir entre comillas, porejemplo: -et ab l,e border=" 1" >

Anidación correctaPuesto que utilizar correctamente la anidaciónya era obligatorio en HTML 4, así lo sigue sien-do en X(HT)ML: una etiqueta subordinadasiempre debe colocarse correctamente.

Incorrecto: <p><i></p></ i>Correcto: <p><i></i></p>

Page 28: Manual xml

52 Lección 10: XHTML como "aplicación HTML"

Evite las abreviaturas de atributosEn muchas etiquetas de HTML, en lugar delvalor completo del atributo se utilizaba unaforma abreviada.Con dable border» se determinaban líneas deborde, con «hr noshade» se podía evitar el som-breado de una línea y<option value="pagina1.htrn"selected>Página l</option>se ocupaba de que se seleccionase un campo deopción.Las formas abreviadas están prohibidas: a partirde ahora deberá escribir el valor completo delatributo. En nuestros ejemplos anteriores, debe-ríamos poner: <table border=" 1" > o<hr noshade="noshade"> o<option value="paginal.htm"selected="selected">página l</option>

El atributo name se sustituye por id¿Conoce el atributo name en HTML? Sirve paradar nombre a anclas, formularios, etc. Ahora hasido sustituido por el atributo id (identifier).

Oesgraciadamente, los navegadores antiguos nocomprenden id. Por ello, lo mejor es poner am-bos atributos y asignarles el mismo valor (uomitir id).

Supongamos que desea dar nombre a un for-mulario. Lo haría de esta manera:<forro narne="pregunta" id="pregunta">... Contenido del forroulario</form>

"Envolver" scripts y CSS en SGMLOtra novedad es que todas las secuencias decomandos (scripts) y CSS tienen que quedar"envueltos" en instrucciones CSS, por ejemplo:<script language="JavaScript"type="text/j avascript "><! [CDATA[aquí está el verdadero scriptll></script>

La causa de este cambio es que los caracteresespeciales, como & o »,podrían confundir a losnavegadores compatibles con XML.Sin embargo, en la práctica no se lo recomiendo,ya que por lo que he podido comprobar nohayningún navegador que realmente se confunda.

El W3C ha estandarizado tanto la normativa deHTML como la de XHTML en tres definicionesde tipo de documento. La OTO define (como yaha comprobado) las instrucciones sobre la es-tructura del documento. Una OTO se crea en ellenguaje SGML.

Las tres versiones de la OTOXHTML no permite que el usuario cree OTO.La gente del W3C ya se han ocupado de alma-cenar una gran cantidad de trabajo en sus pro-pias y monstruosas OTO.Existen tres versiones admitidas para XHTML(y también para HTML). De un lado, tenemosuna versión estricta, y del otro una versión"moderada". La versión estricta (strict DTD) de-fine solamente los elementos que actualmenteson válidos y no anticuados.La OTO moderada o de transición ( transitionalDTD) acepta los comandos XHTML (o HTML)que se utilizan más comúnmente.Además, existe también una OTO para fram e-sets.

Lección 10: XHTML como "aplicación HTML" 53

Las tres OTO para XHTMLEl vínculo a la "strict OTO", la variante estricta, para XHTML tiene este aspecto:<!DOCTYPEhtrnl PUBLIC "-//W3C//DTD XHTML1.0 Strict//EN"''http://www.w3.org/TR/xhtrnl1/DTD/xhtrnl1-strict.dtd''>

Esta OTO incluye restricciones muy duras: por ejemplo, ya no es posible colocar texto suelto, sinoque siempre debe estar dentro de elementos llamados de bloque, como párrafos o etiquetas «dio».Si opta por la OTO moderada, deberá escribir la siguiente declaración de tipo de documento:<!DOCTYPE htrnl PUBLIC "-//W3C//DTD XHTML1.0 Transitional//EN"''http://www.w3.org/TR/xhtrnl1/DTD/xhtrnl1-transitional.dtd''>También existe una OTO para framesets (las reglas para dividir páginas en marcos). Para sus"definiciones de marcos XHTML" utilice la siguiente declaración de tipo de documento:<!DOCTYPEhtrnl PUBLIC "-//W3C//DTD XHTML1.0 Frarneset//EN"''http://www.w3.org/TR/xhtrnl1/DTD/xhtrnl1-frarneset.dtd''>

La OTO de transiciónHemos visto las distintas declaraciones de ti-po de documento. ¿Pero dónde están real-mente las OTO, las definiciones propiamentedichas? ¿Oónde está, por ejemplo, "la versiónde transición"?Abra la página''http://WUlW.w3.org{fR/rhtml1/DTD/rhtmll-transitional.dtd". Escriba esta dirección en elnavegador y podrá ver el código SGML de laOTO.El navegador puede deducir a partir de estedocumento las etiquetas y atributos admiti-dos y el orden en que éstos deben aparecer.Pero nosotros vamos a renunciar a ello.

<!--I!:xl:l!lUIlble lIT1IL vec,lon 1.D Tranalt.loftal DTD

Tb1:J la tb.e s_ a.s lJT1lL "1 T.r;ansltton.l eeceee tal:chaDge:l!I due 1:0 tbl!: d.1Uereaecll J:M:t.-.eea nn. aod. SGIIL.

Na.e:Jp-=e •• bttp:// •.••• .-l.or::g/l999/xhe..l

Tor:: :fur::tb.er:: 1I11o~t1oll, .e.: tlttp:/I __ .103 .or::g/T1Vxhta.ll

Cop.,-r::igbt (el 1998-2002 V3C ¡UT, DrRIJ., !teiol,.111 Rigbt:l aeeeevee .

Thu. DTD lIIOduie 1:1 1deotl:tled by tbe PUel.le aQ.d. :5T3nll !deotl:fler:l:

PUlILIC "-I/W3CI/DTD nrnn. 1.0 Tran:Jltlonall/DI":5T5Tl:l'I "b.ttp:// . .-l.or::O/TJVxb.tlaU/DTD/xb.ea11-tr::an:Jlt!ooe.1.dtd-

UI.evi:lion: 1.2 4fDate: 2002108/01 18:37:55 ,

¡ -->

La OTO de la ·versión moderada" de XTHML

El modo de compatibilidad (modo quirks)Hasta hace poco, se podía afirmar que el navegador "veía" el enlace a la OTO pero lo ignoraba. To-davía no se preocupa de validar el documento. Al igual que en XML, al navegador le daba/le daigual lo que haya escrito en la OTO, a menos que se valide el documento a mano.Sin embargo, los últimos navegadores (versiones 6 y 7) reconocen las instrucciones de la declaracióndel tipo de documento y en parte se rigen por ella. (Todavía) no validan el documento basándose enla OTO correspondiente, pero si se infringen las reglas pueden aparecer mensajes de error, especia 1-mente con el estricto navegador Netscape 6/7. Estoy pensando, por ejemplo, en las instrucciones dealtura y anchura en CSS. El navegador sabe internamente que el usuario utiliza la versión estricta deXHIML, y por lo tanto no le va a dejar pasar ni un solo error.Si no incluye el enlace al DOCTYPE, el navegador pasará a un modo. de "compatibilidad" llamado"quírks mode". En ese caso, el navegador simula el "comportamiento tolerante con los errores" delos navegadores antiguos e intenta mostrarle lo que es posible.

Si es suficientemente aventurero, puede agrupar las primeras líneas dentro de la etiqueta «html», Noes un procedimiento estándar, pero si tiene diseños complejos podría ayudarle a obtener un result a-do correcto.

Naturalmente, también puede comprobar el documento XHTML para evitar errores desde buenprincipio o simplemente para poder detectarlos. Valide el XHTML. Existen varios métodos para h a-cerlo.

Page 29: Manual xml

54 Lección 10: XHTML como .aplicaciL HTML"

Validación: W3C-Validation Service y TIOYAcceda al estricto HfML Validation Service de validator.w3.org. Aquí puede indicar una direcciónWeb o cargar un archivo HfML/XML para su validación. Otra herramienta muy adecuada paracomprobar documentos es HfML-Kit. En este editor HfML se ha incluido el progra.ma de va1!d~~ónTIDY del W3C. El programa gratuito HfML-Kit se puede descargar de www.chanu.com/htm1-kit.

Un documento de muestra en XHTMLA continuación le muestro un "documento HfML" sencillo en la versión XHfML "moderada":<?xml version="l.O" encoding="iso-8859-l"?><: lÓOCTYPE.html'PUBLIC ".-I/W3C//DTIÍ'~ ',1: o,;T:r::anfiit:ional/!EN,~\:"~ht;:tp:/{wyvw ,·w3.ol;9/TR/x,html1}IlTDí~tmli,7traD.:s'it;:ibnál::dtd"><html xmlns="http://www.w3,org/1999/xhtml''><head>

<title>Títulos de PC Cuadernos</title></head><body>

<h2>Imagen Digital</h2><ul>

<li>Autor: Michael Karbo</li><li>Editorial: PC Cuadernos</li><li>Descripción: teoría y práctica sobre las imágenes digitales</li><li>Precio 4,50 euros</li>

</ul>-chz' 1>.<img src="imagendigital, jpg" width="205" ,height="275"

",all;.="11IIagén digi tal" /></body></html>Explicación del código fuenteEl documento empieza con la línea «Lxml ver-sion="1.0" encoding="ISO-8859-1 "?», Se trata del pró-logo XML. En el caso de XHfML no es obligatorio,pero es muy recomendable.La segunda línea (resaltada en gris) enlaza con la defi-nición de tipo de documento (DTD). En este caso lerecomiendo la versión "de transición". En la terceralínea forzamos la inclusión de la etiqueta «himl> me-diante el "atributo de espacio de nombres" xmlns,consulte la página 47,

La línea xmlns» ''http://www.w3.org/1999/xhtml'' indicaque este documento HfML se rige por la especifica-ción XHfML (normalmente, aquí no se suele incluirun prefijo).Por lo demás, he incluido un título, una lista sin orde-nar, una línea y una imagen.No se olvide la barra diagonal de cierre interno de la 'línea y la imagen. He resaltado las etiquetas afectadascon un fondo gris.

Imagen Digital

• Autor: Micbael Katbo• Editorial: PC Cuadernos• Descr1pci6n" teoría y práctica sobre las imágenes digjtal.es• Precio 4,50 euros

La presentación en el navegador no cambia

, !

"

Sección práctica D: paréntesis, espacios de nombres y XHTML 55

Ahora ya sabe cómo:

• Agrupar elementos correctamente en la DTD• Colocar espacios de nombres e islas de datos• Redactar archivos XHfML

Ejercicio 01: agrupación e indicadores de frecuenciaVuelva a nuestra práctica de la página 45. Copie los archivos documento.xml y documento.dtd en lacarpeta ejercicios y modifique la segunda línea de la DTD de esta manera:<!ELEMENT fragmento (titulol?,titul02, (parrafolmarco)*)+>¿Sigue siendo válida la versión original de documento.xml? Encuentre otras variantes para el XML.

Ejercicio 02: crear un espacio de nombres para HTML en XMLIncruste el siguiente fragmento de código HTML como espacio de nombres en un documento XMLllamado londres.xml. Llame al elemento raíz texto e inserte en él la declaración del espacio de nom-bres. ¡No utilice etiquetas vacías!<hl>Londres y Berlín frente a frente</hl><h2>La evolución de la ciudad de Berlín</h2><p>Cuando se pretende abarcar la evolución de la ciudad de Berlín, uno seenfrenta al problema de los bloques de pisos. Estos temas son de interés:</p><01>

<li>Estructura social</li><li>Arquitectura</li><li>Gobierno</li>

</01><hr>

Ejercicio 03: crear una isla de datos XML en HTMLCree un documento HfML sencillo con el siguiente "H'l": Obras de Gaudí y guárdelo con el nombregaudi.html. Incruste la siguiente estructura XML como isla de datos y asígnele el id isla.<gaudi>

<obra>Park Güell</obra><obra>Sagrada Família</obra><obra>Casa Batlló</obra>

</gaudi>

Ejercicio 04: transformar un documento HTML a XHTMLTransforme este documento HfML a XHfML. Utilice la "DTD moderada" y guarde el resultado co-mo formulario.html. Tenga en cuenta que es necesario cerrar la etiqueta <input>.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><title>Un formulario</title></head><body><hl>Indique su nombre</hl><form><input type="text"><input type="submit"></form><hr></body></html>

Page 30: Manual xml

56 Lección 11: introducción a CSS

/

Lección 11: dar formato a archivos XML: introducción a CSSCrear un archivo CSSLas instrucciones sobre el formato se almacena-rán en un archivo CSS. Ya habrá sospechadoque no es otra cosa que un archivo de texto e x-temo con la extensión css.

En esta lección le mostraré:• Introducción rápida a los fundamentos de

css• Establecer un enlace a un archivo CSS• Visión general de los principales atributos y

valores de CSS

llegados a este punto, ya tendrá muy claro que:XML asegura la estructura lógica. La informa-ción está ordenada jerárquicamente en forma deárbol. Internet Explorer muestra esta estructuraarbórea.Pero antes de que "deje de ver el bosque porhaber demasiados árboles", tendrá que apren-der a dar formato a los archivos XML; es decir,adaptarlos para su visualización en el navega-doro Y para ello deberemos utilizar un lenguajeespecial de formato y diseño, y el más conocidode ellos es CSS.En esta lección le haré una introducción rápidaa CSS y le mostraré lo sencillo que es dar form a-to a documentos XML.

Mini-taller de introducciónVolvamos a nuestro primerísimo documento,hola.xml, Si no lo tiene a mano, vuélvalo a co-piar:

<?xml versian=-l.O· encoding=·iso-8S59-1· 1>- <documento>

<pregunta>Hollt XML, aestés aquf7</pregunta>

<respuesta>XML es el fonnllto de llrchivo delfuturol </respuesta>

</documento>

Este documento solamente tiene tres etiquetas

El documento tiene tres etiquetas: el elementoraíz documento es el que está más alto en la je-rarquía, y contiene pregunta y respuesta.

Para este pequeño taller práctico, le recomiendoque cree una carpeta adicional en cursoxmllla-mada css. Copie el archivo hola.xml a dicha car-peta. Pero encontrará mis ejemplos en leccionll.

Queremos asignar al documento la letra Arial ycomo alternativa Helvetica.

1. Escriba primero el nombre del elemen-to, en nuestro caso documento. A esto sele llama selector. Después escriba un parde llaves, entre las que escribiremos lascaracterlsticas.

documento

2. Para asignar un tipo de fuente, escribala clave font-family y después dos puntos.

documento {font-family:}

3. A continuación, escriba el nombre de lafuente, en nuestro caso Aria/. Como puedever, las verdaderas instrucciones se en-cuentran dentro de las llaves.

documento {font-family: Arial

4. Puesto que no sabe con seguridad si elsistema del usuario tendrá la fuente Arial,escribiremos después de una coma unafuente alternativa; el tipo más común essans-serif.

documento {font-family: Arial, sans-serif;

Cierre esta "línea" con un punto y coma. Acabade terminar su primera regla CSS.

Lección 11: introducción a CSS 57

Establecer un enlace al archivo CSSVamos a enlazar el archivo CSS. Puede deducir la sintaxis del ejemplo: le muestro el código de todoel documento resaltando el enlace al archivo css:<?xml version="l.O" encoding="iso-8859-1"?>:<?xml'::"stylespéet;href="hóLi.-cssnv, type=lrtext./css'''?>-cdocumerrt.o» . .

<pregunta>Hola XML, ¿estás aquí?</pregunta><respuesta>XML es el formato de archivo del futuro!</respuesta>

</documento>Guarde el documento XML y actualice la vista en el navegador.

Tipo de fuente Arlal: este es el aspecto del archivo visto en Internet Explorer

El de más abajo gana: el principio de la cascadaHemos asignado el tipo de fuente al elemento raíz, que es el elemento más alto de la jerarquía. Poreso, todos los elementos contenidos dentro de la raíz heredan el mismo formato.

A este principio se le llama (el nombre de hojas de estilo en cascada ya lo dice) el principio de la ea s-cada. Como si de una cascada se tratase, las características del elemento más alto de la jerarquía setransmiten a los elementos inferiores. Sin embargo, es posible asignar otras características a eleme n-tos inferiores, que sobrescribirán las características que se hereden "de arriba".

Pruébelo: vamos a asignar al elemento respuesta el tipo de letra Courier New o monotype (donde mono-type es un tipo de letra general). Además, el contenido de la etiqueta tiene que aparecer en negritagracias a fvnt-weight: boldo Por lo tanto, copie las siguientes reglas en el archivo hola.css.respuesta {font-family: 'Courier New', monotype;font-weight: bold;}Guarde nuevamente el archivo ho/a.css y actualice la vista del archivo XML en el navegador.

C:\kw\es\XM.\arsoxrnl\lecdonll\)lola,xm1

111-Iola)<(ML_,¿estásaqu¡?XKL es el foraato de archivo del futuro I

Las cualidades Cour/er New y bold son más fuertes que las del elemento raíz

¿~or q~é. he escri~o el tipo de letra Courier New entre comillas? En realidad, normalmente está prohi-bído utilizar comillas en CSS. El motivo es que necesitamos las comillas porque el nombre de la fue n-te está compuesto por dos palabras separadas por un espacio en blanco, y si no lo hiciéramos no seinterpretaría correctamente.

Page 31: Manual xml

58 Lección 11: introducción a CSS

Fundamentos de CSSCon CSSes posible asignar el tipo y el tamaño de la fuente, activar negrita o cursiva, asignar coloresde primer plano o de fondo y definir bordes y marcos.La sintaxis de las hojas de estilo procede de lenguajes de programación como C, C++, Java y [ava-Script. Al igual que en estos lenguajes, en CSStodas las instrucciones relacionadas se colocan entreun par de llaves, creando así un bloque. Además, en CSSlas líneas se cierran con un punto y coma(;).

SelectoresLas etiquetas a las que se asigna un formato se lla-man "selectores". Todos los atributos y valores (porejemplo font-family: Aria/) forman parte del par dellaves. Si desea asignar el color azul a la fuente, de-berá utilizar el atributo color y asignarle uno de losnombres de color permitidos en inglés, como red,blue, yeIlow etc. iPruébelo! Ponga el elemento raíz decolor azul: color: blue; Esta instrucción afectaráa todos los elementos.Si desea asignar la misma instrucción a dos etiquetas simultáneamente, colóquelas juntas separadaspor una coma, por ejemplo: pregunta, respuesta { instrucciones; }

documento {font-family: Arial,'}olo", blue; -s-,respuesta {font-family: 'Cour;er New', monotype;font-weight: bold;¡}

color: blue vuelve todo eltexlo de color azul

Los principales atributos y características de CSSEl orden de los atributos es irrelevante. Es posible indicar primero el color y después la fuente. Acontinuación se indican los principales atributos de CSS:

Atributo Responsable de Valores posibles (selección) Ejemplo de códigolont·family Nombre de la fuente Nombre de la fuente foot-Iamily: Arial, sans-serif;font-size Tamaño de la fuente Puntos (pt), pixeles (px) foot-size: 14pt;color Color Nombre del color en inglés o valor hexa- color: red; oder color: #ffOOOO;

decimalbackground-color Color de foodo Nombre del color en inglés o valor hexa- background-color: silll'8f;

decimalfoot-weight ·Peso de la fuente", boId, light, normal, etc. foot-weight: boId;

como negritafont-variant Variación de la fuente small-caps font-variant: small-caps;

(versales)font-slyle Estilo de la fuente itaJic foot-slyle: itaJic;

(p.ej. cursiva)line-height Altura de la Ifnea 1 61.2 (uno punto dos) line-height: 1.2;margin Margen (espacio exte- Píxeles (px), centrmetros (cm) margin: 10px;

rior)padding Margen lnterior Píxeles (px), centímetros (cm) padding: 20px;width Anchura Píxeles (px), centímetros (cm) width: 400px;border-slyle Estilo del borde p.ej. solid border-slyle: salid;border-width Anchura del borde Píxeles (px), centímetros (cm) border-width: 120px;

Si desea entrar a fondo en el tema del lenguaje CSS,le recomiendo el cuaderno "CSS:Webs con esti-lo" de [ohn Maxwell, publicado también en PC Cuadernos. Es una introducción al tema muy compl e-ta que le permitirá dominar CSSal máximo.

Referencia sobre HTML y CSS: en las hojas centrales de mi cuaderno "Cree su página Web (ID" en-contrará una lista detallada con las principales etiquetas y atributos de HfML y CSS.

Lección 12: crear una lista de productos con CSS59

Lección 12: crear una lista de productos con CSS.En esta lección aprenderá a:

• Asignar formatos complejos con CSS• Controlar la disposición con display: block

Organización atractiva con CSSA continuación, veremos un ejemplo complejo.Queremos dar un poco de atractivo visual a la li s-ta de productos de la lección 5. Le recomiendoq~e vuelva a ~aspáginas 34 Y 37, para recordarcomo construimos el ejemplo.Observe la imagen de la derecha: este es el aspec-to que queremos conseguir. Internet Explorer 6 yNetscape 6/7 nos dan el mismo resultado en estecaso.

¡Participe! Copie primero el archivo productos.xmlen su carpeta separada css.

El atractivo se consigue con cOfores, bordes y sombread08

(Supongo que habrá creado esta carpeta dentro de la carpeta del proyecto cursoxml.i

Crear el archivo CSS

~rt: :q~~;~e :~~v~ produclt0nls.css que todavía no hemos creado. Si el documento ya tiene una, ra co ocar e e ace a CSSdebajo del enlace a la DTO

<?xml version="l.O" encoding="ISO-8859_1"?> .< !DOCTYPEproductos SYSTEM"productos odtd:' ><?xml-:.~tyl~s~~é.t href':."p.:roducto~¡~ c:.ss" type="text/css"?><productos> o

<partidas><nombre>Muñeca de trapo</nombre>

</partidas></productos>

Crearemos el archivo CSS de forma compacta~r~ el archivo productos.css. En primer lugar le mostraré el código fu ti"~=:..:~~~~~o: ~:~~:::~oc::e~~e~:lp~:;:t~~::!u:: lín~e;~r~o:~i:~~k:a~ :~1 d { ea.

iI~e~~~~:ht~o~~;~a}ilY: Verdana, sans-serif; font-size: 12pt;

2 pp:~~~das 8{disp~ay: block; ba~kground-color: sil ver' margino1ng: pX; w1dth: 400px; } 'o lOpx;

3 nombre {,display: block; background-color: white,'b d d border-style: solid;or ~r-w1 th: lpx; width: 300px; }4 fabr1cante { display: block; font-style: italic; }5 num, precio { color: red; }

Consejo: esta vez he escrito el archivo CSSd fotro, los bloques entre llaves están 1 d e orma c~mpacta. En I~gar de colocarlos uno debajo de

co oca os secuencíalmenrs, en línea. Así ahorramos espacio.

Page 32: Manual xml

60 Lección 12: crear una lista de productos con CSS

El archivo CSS paso a pasoAnalicemos cada una de las líneas, paso a paso.

1. Copie la primera IInea. En ella ~ defi-nen las cualidades del elemento raíz pro-ductos. Le hemos asignado la fuente ~er-dana junto a un tipo de fuente alternativaestándar, con un tamaño de 12 puntos y uninterlineado de 1,2. Todas las etiquetas su-bordinadas heredarán estas características.Guarde el documento Y observe la vistaprevia en el navegador.

¿Y bien? El texto aparece todo seguido; sola-mente se produce un salto de línea en el margenderecho de la ventana del navegador.

eC8 d'; ;apo'~2;M5-~ )uegolandla SA Valladolid 60 40

1,caballlto de madera 32945-41 Juegolandla SA vallado. lid 18!12 Tren madera básíco 32945-41 Natura SL,!? .6?, . Q

"91\!l - ~ .,..~., .... ' .

El texto aparece todo seguido sin saltos de línea

Este es uno de los principales estorbos de XML:no existe una etiqueta con la que se p~edan .crear párrafos o saltos de línea. No existen et 1-

quetas "al nivel de los bloques.", c~mo enHTML. No hay <p>, ni <lJT>ID <dIV>.

:".(¡iu~~~m~~l1:U.~~gU>.(t¡[iIüCQ::S~

Salto de línea con display: blockVamos a crear un salto de línea con CSS. De ellose ocupa la instrucción display. Puede ac~ptarlos atributos inline y block. Inline es el atribut~predeterminado, de forma que no es necesarIOescribirlo. Condisplay: block;nos aseguraremos de que el fragmento de textorealmente se muestre como un bloque, como un"párrafo".

El elemento se convierte en un "elemento de ,bloque". Antes y después se crea un salto de 11-nea.

2. iVamos a por la segunda IInea! Cada."partida" tiene que tener solamente un blo-que. Estableceremos como color d~ fondosi/ver (gris claro). El margen (margm) ten-drá 10 píxeles, y el margen interior "(padding) 8 píxeles. Toda la estructu~a ten-drá una longitud de 400 píxeles. Copie laIInea y observe el resultado en el navega-doro

3. La siguiente IInea es la más larga: elelemento nombre también tiene que con-vertirse en un bloque. Esta vez, el color defondo será blanco. Además, con border-style: solid; crearemos un borde alque asignaremos un grosor de un píxel conborder-width: lpx;. Con una anchurade 300 píxeles, este bloque será 100 píxa-les más corto que el bloque gris.

4. La cuarta IInea no necesita explicación:asignamos cursiva al "fabricante" y lo con-vertimos en bloque.

5. ¿Qué ocurre en la IInea 5? Aquí asignoa las etiquetas num Y precio slmu~~neamente el color rojo. Para ello utilizouna coma como separación.

.Por qué no he utilizado aquí display: block;?~¿Aún así, num se muestra como un bloque?! Deello se ocupan las etiquetas adyacentes que hansido formateadas como bloque. Además, losdos precios (precio) no tienen que aparecer unodebajo de otro, sino uno junto a otro.

XML-ES

Lección 13: más posibilidades con XSLT 61

Lección 13: más posibilidades con XSL o XSLTEn esta lección aprenderá lo siguiente:

• Fundamentos de XSL o XSLT• Transformar XML con XSLT a HTML

Ene esta lección pretendo hacer una primera introducci6n al complicado lenguaje de estilo XSL. Si tra-baja con Internet Explorer, le recomiendo que utilice la versión 6, o que instale MSXML 4 (consulte lapágina 72). Los ejemplos también funcionan con Netscape 7.

Introducción a XSL y XSL TAhora ya conoce CSS y sabe cómo dar un bonito aspecto a sus archivos XML. Pero incluso CSS no dala talla debido a sus posibilidades limitadas. No estoy hablando solamente del problema del salto delínea que hemos resuelto chapuceramente con display: block. Hay otras "carencias" más graves: ¿cómopodemos crear tablas? ¿Cómo se insertan hipervínculos en el documento? ¿Y qué ocurre con los gr á-

ficos y archivos de medios?

Se le exige demasiado a CSS en este caso. El formato por excelencia de los navegadores es, y seguirásiendo, HTML. Porque solamente con las etiquetas HTML es posible organizar los documentos paraque se vean en el navegador como uno quiere. Por eso, el lenguaje CSS se considera un refuerzo: el"dreamteam" compuesto por CSS y HTML rompe barreras.

XSL T como transformaciónPara poder enlazar CSS y HTML, necesitamos el nuevo estándar XSL (Extensible Style Sheet Langua-ge, lenguaje de hojas de estilo extensibles). XSL es desde octubre de 2001 la recomendación oficial delWorld Wide Web Consortiums. Existen varias versiones o vertientes de XSL. A continuación, habl a-remos de la subespecificación XSLT, ya que es la que más nos interesa.

La T significa Transformations. Este conjunto de reglas se encarga de transformar XML en HTML, enWML (el lenguaje para móviles con WAP), en SVG (Scalable Vector Graphics) y, gracias al"subestándar" XSL-FO, también en RTF y PDF.

Que no cunda el pánico, no llegaremos tan lejos. Daremos nuestros primeros pasos convirtiendoXMLenHTML.

Paso a paso: primer ejemplo¿Se acuerda del primer documento XML de la lección 1? Vamos a transformarlo en una estructuraHrML. Primero trabajaremos con los títulos, después con tablas e imágenes.

Copie el documento en una carpeta separada llamada xslt para no confundirse.

Este es el aspecto del archivo modificado hola.xml. He insertado el enlace al archivo de hoja de estiloXSLhola.xsl (resaltado en gris). .<?xml version;"l.O" encoding;"iso-8859-l"?><?Xmi-stYleáheettyp~;I¡text/xsl"firef; .."hóla,:xsl"?> .'<documento>

<pregunta>Hola XML, ¿estás aqui?</pregunta><respuesta>XML es el formato de archivo del futuro!</respuesta>

</documento>Vamos a crear juntos nuestro primer archivo XSL para crear un completo entramado HTML a partirde XML. La etiqueta <pregunta> se mostrará como H1 y la etiqueta <respuesta> como H2.

Page 33: Manual xml

62 Lección 13: más posibilidades con XSL T

Este es el aspecto de XSL: hola.xslEl primero contacto con XSLle parecerá cualquier cosamenos lógico y comprensible. La clave es que los documen- XML es el formato d. archivo del futuroltos XML también se escriben en lenguaje XML.En primer lugar le mostraré el archivo XSLcompleto.<?xml version="l.O" encoding="iso-8859-1"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsL/Transform"version="l.O"><xsl:template match="/"> .

<html><head><title>Hola XML</title></head><body>

,;/~:~'~:'xf¡t':value-ó~; s:e1ect:d,;·docuníentoli>r.t;¡91ID~an:?~¡T;¡>~'::·';~f~,}H:;t~'::~:YJ~(¡J~~::f;:~~~iDíi;~3;;;(':E::!fi~~~</hl>

<~~~'s1 :value.:-Of si:lrect';"docuníeri~p{rE!sp1;1e'sta~I>*;,; ..;);:;\;:;~:·:j.;;;1;;i;'1~1'.'1~¡n~:;:;·~7:~!5j;{.i.kj¡1</h2></body></html>

</xsl:template></xsl:stylesheet>

!~~========:::::lli~1

Hola XML, ¿estás aqui?

El efecto final es el de un archivo KTML

<?xml versione'u.ü" encoding="iso-B8S9-1" 1>_ <)(51: stylesheet xmlns: xsl="http://www.W3.org/1999/XSL/Transform" version="l.O">

- <)(51:tamplate match=" r>- ehtml>

_ cheedc-<title>Hola XML<ltitle>

</head>- -ctrcdv>

- ch io<)(51: value-of select="documento/pregunta" />

</h1>- c:h2>

El archivo XSL también es un documento XML

Copie el documento y visualice el resultado en el navegador. A continuación le explicaré el significa-do del código.

El código fuente, paso a paso1. La primera línea alberga el prólogo obligatorio de XML.

<?xml version="l.O" encoding="iso-8859-1"?>

2. La línea siguiente empieza con <?xs/:sty/esheet ... Es el elemento raíz de este archivo. Ob-serve que en la línea se vuelve a cerrar con <lxs/:sty/esheet>. Com~ atributo en el elemento raízsigue xmlns:xsl. La clave xm/ns hace ref~rencia a ~no d~ los e~aclos de ."~mbr~s ~e los qu~ yahemos hablado. El prefijo xs/ es obligatono. A contínuacíón, se Incluye la dirección establecidadel espacio de nombre y la identificación de la versión de XSL. Esto es obligatorio y es necesa-

rio aprendérselo (o copiarlo).<xsl:stylesheet xmlns:xsl="http://www.w3.or~/1999/xsL/Transforrn" version="l.O">

Lección 13: más posibilidades con XSL T 63

El elemento xsl:template y sintaxis de X-Path

3. A continuación aparece el elemento xs/:temp/ate. La palabra template significa plantilla. Eneste punto, en realidad se crea una plantilla para la transformación. Para nosotros no es impor-tante, porque hacemos referencia con el par atributo-valor rnatche?" al elemento raíz de nuestroarchivo XML. Esta es, en realidad, nuestra plantilla, y así es como la enlazamos.

<xsl:template match="/">

Detrás de esta indicación de ruta se esconde otro lenguaje llamado X-Path. La barra (f) hace referen-cia al elemento raíz. Tenga en cuenta que es necesario cerrar el elemento templa te al final.

4. Las siguientes líneas son especialmente interesantes. En primer lugar se crea el esqueletoHTML con el típico encabezado HTML. Con <h1><lh1> establecemos que el elemento XMLpregunta debe ser un título de primer orden. [Este elemento se encuentra entre <h1><lh1>!

<hl><xsl:value-of select="documento/pregunta"/>

</hl>

Sintaxis de X-Path: con <xsl:value-of seleci» "documento/pregunta "]> ponemos el "foco" en documen-to/pregunta. Por lo tanto, indicamos la ruta al elemento pregunta. Empezamos con la etiqueta superiordocumento y llegamos hasta pregunta. Cierre la etiqueta internamente con una barra.

5. De la misma forma "lIegamos2 al elemento respuesta. De ello se ocupan las siguientes tresfilas. Con documento/respuesta ponemos el foco a la etiqueta en cuestión:

<h2><xsl:value-of select="documento/respuesta"/>

</h2>

6. No olvide cerrar la "etiqueta template" y el elemento raíz al final del documento.

</xsl:template></xsl:stylesheet>¿Qué hemos aprendido en este ejemplo? Que XSLTes bastante complicado. Pero eso solo ha sido elcomienzo.

Establecer una estructura de tablasAntes he mencionado que XMLse transforma conXSLT, y se transforma en HTML: vamos a crear undocumento HfML completo con tablas y gráficos al-rededor de los elementos. ¿Ya sabe HTML?¡Perfecto!Para este ejemplo, he renombrado todoslos archivos de hola a holla. Este es el código fuentedel archivo XSLholla.xsl:

¿Estructura de tablas o Imágenes? Sí

rd

Page 34: Manual xml

64Lección 13: más posibilidades con XSLT

<?xml version="l.O" encoding="iso-8859-1"?> "<~sl:stylesheet xmlns:xsl="http://www.W3.org/1999/XSL/Transformversion="l.O"><xsl:template match="/">

<html><head><title>Tabla</title></head><body><table border="l"> /<tr><th><xsl:value-of select="dOcumento/pregunta"/></th>< tr>

<tr><td><xsl:value-of sele~:="doc:um;Ilt:~~~e~~~;sta"/></td></tr><tr><td>'<:itng'::'flI::C;';",l!ghthouse.gif"!~,<jtd.><l;tr>:·?,;':S ~,>;,,~,;,.):\:;':'

</table></body></html>

</xsl:template></xsl:stylesheet>

Incluso •• posible Incluir un vinculo

. ivel i t porque XML exige que se cierrenAsegúrese de cerrar las "etiquetas vacías" como Img a rove ID erno,las etiquetas.

. . .imero ilimiitado de elementos HIML. Haga que se pueda hacerE· ". XSLT pernute insertar un numero¡eraclO. , II la ázi de PC Cuadernos y guarde el doc u-clic en la imagen: cree un vmculo HIML que eve a p gma .mento XML y XSL como he/lo. Encontrará todos los ejemplos en la carpeta /ecclOn13.

Lección 14: organizar y clasificar 65

Lección 14: XSLT para profesionales: organizar y clasificarEn esta lección aprenderá a:• Crear plantillas XSTL complejas• Ordenar documentos XML con XSLT

Nuestro ejemplo de XSLT de la lección anteriortiene un problema: es demasiado sencillo. Cadaelemento solamente puede aparecer una solavez. Si aparece más veces, value-of select no nosservirá.

Ejemplo de la lista de títulos(titulos.xml)Tomemos un ejemplo práctico. ¿Se acuerda dela lista de títulos del principio del cuaderno?Compárela con el capítulo 2 y 3 a partir de lapágina 22: Estamos hablando del archivo titu-los.xml, que se puede utilizar junto con el archi-vo DTD correspondiente titulos.dtd. Copie am-bos archivos en una carpeta separada llamadaxslt. En titulos.xml, inserte debajo del enlace a laDTD un enlace al archivo XSL que crearemos acontinuación, titulos.xsl.<?xml-stylesheet href="titulos.xsl"type="text/xsl"?>Formato con CSSPara el formato recurriremos a un archivo CSSexterno llamado tiiulos.css, al que haremos refe-rencia en la estructura HTML de titulos.xsl, con-sulte la línea 8.Si ya tiene experiencia con HTML y CSS, estasintaxis no le resultará difícil de comprender.

Bucle for-eachAnalicemos la estructura HTML.La cosa se pone interesante a partir de la línea10. Nos centraremos en listatitulos/cuademo ytrabajaremos todas las etiquetas de esta"subrama". ¿Pero cómo? Al fin Yal cabo tene-mos que tener en cuenta que los elementos serepiten. Atención programadores: utilizaremosun bucle.

La clave xsl:for-each indica que se trata de unbucle. Detrás del atributo select se incluye la ru-ta X-Path listatituloslcuaderno.

Con esto conseguimos que todos los elementosde esta ruta estén afectados. Se repetirá el pro-cesamiento hasta haber terminado todos los da-tos del archivo XML.¡El bucle termina en la fila 30!

Incluir elementosA continuación se incluyen los elementos titulo,autor, editorial, descripcion y precio, utilizando laclave value-of selectoPuesto que ya estamos en la "ruta" correcta(listatitulos/cuademo) solamente tenemos que in-dicar el nombre de la etiqueta. Queda muy cla-ro, por ejemplo, para el título en la línea 13, alque hemos "rodeado" con la etiqueta de títuloHTML <h3></h3>. Cierre la etiqueta interna-mente.

El elemento aparece varias veces¿Se acuerda todavía de lo que le explicaba alprincipio? El elemento autor puede aparecer unao varias veces.Para "acceder" al autor/autores se utiliza nue-vamente un bucle for-each, que empieza en la lí-nea 15 y se cierra en la 20.

La lectura del contenido de la etiqueta (línea 17)se realiza a través de otro elemento de la sint a-xis de X-Path, el punto (.). Este punto actúa co-mo comodín de un número ilimitado de ele-mentos.

¡Sin este bucle solamente se mostraría una ocu- .rrencia de autor!

Ordenar datosPara terminar, le mostraré cómo ordenar los da-tos. En nuestro ejemplo, queremos ordenar loscuadernos por el título. Utilice la instrucciónxsl:sorl. Escriba además la siguiente línea adi-cional después del primer bucle xsl:for-each -observe la línea 11:<xsl:sort select="titulo"/>El orden de clasificación predeterminado es as-cending, es decir ascendente. Para ordenar losdatos de forma descendente, deberá indicar or-der= "descending":<xsl:sort select="titulo"order="descending"/>

Page 35: Manual xml

66Lección 14: organizar y clasificar

Código fuente del archivo titulo.xsl d dI' la'd' lt d n negrita y en un fon o eco or gns sHe intentado facilitar la comprensión del co 19O resa an o epartes más importantes.

. "1 O" encoding="iso-8859-1"?>1 ,,?xm1 .vers~on= . //WWW w3 org/1999/XSL/Transform"2 "xs1:stylesheet xm1ns:xs1="http: .'

version="l. O" >"xs1:template match="/">"html>"head>"title>Títulos de PC Cuadernos,,/title>,,/head> .... n'" . / " href=lf"t1t:ulciS.CsS,u!p;<T~llkrel=" stylesheet" type= text ess"body> "1.for-each select="listatitulos/cuaderno ><xs . '."xá;L:s6:í:t select="titulo"/>"h3><xs1:value-of se1ect="titulo"/>

3

4

5

6

7

89

10"ti12131415161718192021222324

25

2627282930313233

34

,,/h3><xs1:for-each se1ect="autor"><i><xs1:va1ue-of se1ect="."!>,,/i>"br/></xsl:for-each>"div>exsl:value-of select="editorial"/>,,/div><i><xsl:value-of select="descripcion"/>,,/i>"div><xsl:value-of select=,lpreciot,/>,,/div></xsl:for-each>,,/body>,,/htm1>,,/xs1:temp1ate>,,/xs1:sty1esheet>

Cree su página Web (1)

Johann-Chrlstian HankePCCuademosIntroducción a HTML4

El registro de Windows

Oavid BosrnanPC CuadernosTrucos para editar el registro

" 4Photoshop 5.5

Michael KarooPeter G. ChrlstiansenPC Cuademos4

Clasificación alfabétlca gracias a xsl:sort

Lección 14: organizar y clasificar 67

Código fuente del archivo titulos.css :" .J j :-1;::~A continuación muestro el breve código fuente del archivo CSS externo titulos.css. Puede ampliar lasinstrucciones sobre el formato si lo desea, para darle un toque más atractivo. ,., ..•body { font-family: Aria1, Helvetica; }h3 { font-size: 14pt; color: blue; }

Aquí termina nuestra corta introducción a XSLT.Este lenguaje es tan amplio y potente que se podríaescribir todo un cuaderno dedicado a XSLT.Muchas de sus características están enfocadas al ámbitode la programación. Pero por experiencia, diría que la gente no está interesada en estos temas, ¿o meequivoco? En ese caso, no dude en hacer llegar su propuesta a [email protected] y lo tendr e-mos en cuenta para dedicar un futuro cuaderno a este tema.

Page 36: Manual xml

68 Sección práctica E: ejercicios sobre CSS y XSLT

Ahora ya sabe cómo:• Dar forma a archivos con CSS• Crear saltos de línea en CSS• Transformar archivos XML con XSTLa HTML

Ejercicio E1: dar formato a un documento XML con CSSCopie el siguiente documento y guárdelocon el nombre city.xml. Cree un archivoCSS llamado city.css.Todas las ciudades tienen que aparecercon la fuente Arial, a un tamaño de 14puntos, y de color gris (gray). Piensetambién en incluir un tipo de fuente ge-neral alternativa.

<?xml version::;·1.0· encoding::;-iso-8859-1· 7><!OOCTYPE city (View Source for fu/l doctype . .»

- <citv><ciudadl>8arcelona</ciudadl><ciudad2>Yalladolld</ciudad2><ciudad3>Madrid</ciudad3><ciudad4>Ztlrl!lgoz~</ciudad4>

</cilv>

Un documento XML sencillo

Ejercicio E2: colocar las ciudades una debajo de la otraColoque las ciudades de modo que aparezcan una debajo de la otra, y no una junto a la otra. Inserteademás un margen de 10 píxeles entre cada ciudad.

Ejercicio E3: vincular el enlace al archivo CSS con el enlace a la OTOCree una DTO para el archivo city.xm/ y nómbrela city.dtd. Enlace esta DTO con un vínculo y tengaen cuenta el orden de los enlaces.

Ejercicio E4: Incluir comentarios: comprobar la validez del documentoCompruebe la validez del documento. ¿Aparece el mensaje de error Not XML Document? En ese casodeberá "comentar" el enlace al archivo CSS.Utilice para ello la misma sintaxis de comentario que yaconoce de HTML, de forma abreviada:<!-Coloque aquí los fragmentos comentados -->Cuando termine, vuelva a eliminar el comentario.

Ejercicio ES: dar formato a un documento con XSL TCree una copia del documento a la que deberá llamar city2.xml. Formatee el documento utilizandoXSLT.Para ello, cree un archivo XSLllamado city.xs/: Las ciudades deberán estar resaltadas únic a-mente mediante un párrafo propio, no deberá darle más formato.

Ejercicio E6: abordar varias etiquetas con el mismo nombre mediante unbucle- ccitv»

<ciudad>Bercelom.</ciudad>cciudadc-vlene-c/ciudad»<ciudad>Pañs</ciudad>

</city>

Modifique el archivo XML. Primero deberá guardar el archivo or i-ginal city.xm/ con el nombre citynuevo.xml. A continuación, modifi-que las etiquetas ciudadl , ciudad2 y ciudadJ por ciudad. Cree un ar-chivo XSLllamado citynuevo.xsl. ¿Cómo puede conseguir que todaslas etiquetas XM!-aparezcan en un párrafo separado?

Ejercicio E7: vincular la OTO citynuevo.dtd¿Cómo tiene que ser la DTO correspondiente al archivo citynuevo.xm/? Cree el archivo citynuevo.dtd yenlácelo.

Lección 15: introducción al concepto de esquema XML 69Lección 15: Introducción al concepto de esquema XMLEn esta lección aprenderá lo siguiente:

• ¿Por qué un esquema en lugar de una DTO?• Crear una referencia al archivo del esquema• Crear un esquema sencillo• Validar el esquema

A continuación, vamos a adentrarnos en un te-ma (demasiado?) nuevo.

¿Por qué un esquema en lugar deuna OTO?Seguro que estará pensando que ahora que yahabía aprendido cómo crear una DTO 'tid ti ' que se n-

o ene ponerse ahora con los esquemas. Nose pr~pe, ~o es tan terrible como parece. LasDTO siguen SIendo el estándar del sector. Elconcepto de esquema ha sido muy criticado, ya~aImente se está trabajando en una versiónmejorada que elimine los errores conocidos laversión 1.1. '

.f:':í!~rénítasque rasDTD~'~":""..~"'..~~ ••::¡ ., •'.0' '.' ., ~1~~Y¡:l ,;,~aua~que 'E'.. , f3l!!m~!1l;" eLIi1§QY.fIDiIª§e,(;l!;ll§8ht~:ef!..gºQ:1~.~J

¿Pero para qué necesitamos algo nuevo? Preci-samente por las limitaciones de las DTO:

Cu~do se e~be una DTO no es posible de-te~ar que tipo de datos serán los caracteres.A la ~trucción #PCDATA "no le importa" si~~aJa con letras o con números. No es posible~tarlo a los números, al formato de moneda oincluso a números enteros (ínteger).

Los~dic~dores de frecuencia +, • o ? tienen unafun~onalidad limitada. ¿Qué pasa si el elemen-to ti~ne que aparecer solamente tres veces o en-tre anca y diez veces?

Además, sería deseable que las "plantillas" paraXMLtambién se creen en XML, y no en SGMLcomo es el caso de las DTO.

El ejemplo de la lista de títulosCom~ya es habitual, retornaremos un ejemploantenor. Para que pueda comparar utilizare-~os ~ lista de título de las leccion~s 2 y 3. Peroe adVIerto,desde e~principio que un esquema~ es mas complicado y requiere más expli-caCIonesque una DTO clásica.

A modo de r~~rdatorio, le recomiendo quevuelva a la pagina 22. Aquí reproduzco unfragmento del archivo XML:<?xml version;"1,O" encoding;"180-8859-1"?><listatitulos>

<cuaderno><titulo>Photoshop 5.5</titulo><autor>Michael Karbo</autor><autor>Peter G.

Christiansen</autor><editorial>pc

Cuadernos</editorial><precio>4</precio>

</cuaderno>

</listatitulos>

Para el siguiente ejemplo, deberá crear dentrode la carpeta del proyecto cursoxml una subcar-peta. llamada esquema. Copie la versión originalde litulos.xml en dicha carpeta.

El trabajo que hemos hecho en el capítulo 3 conla DTO lo trasladaremos al esquema.

Incluir una referencia al archivo delesquemaVamos a crear el archivo del esquema.

, ºRªf~!Y.9~.(I~~~9.é/:l)"ª-J:elJéiosreX!~n§}~ji(f.~Llamaremos al archivo del esquema titulos.xsd.Pero.antes deberá incluir en titulos.xml una refe-rencia a este archivo que todavía no hemoscreado. Por 10 tanto, modifique el archivo titu-los.xml.

¿Qu~ ocurría en el caso de las DTO? Se colocabase~cillamente, un enlace a la DTO debajo delpr~logo. Aquí esto no funciona. Deberemos in-cluír una referencia al archivo del esquema di-rectamente en el elemento raíz.

La re~~rencia "o~cial'~ es complicada. En lugar~e utilizar una sintaxis sencilla, se ha inventadotodo un lenguaje" para referenciar al esquema

donde todos los pares atributo-valor se presen-tan y se identifican. Para que no cunda el páni-co, tomaremos un atajo. ¡Pase la página!

Page 37: Manual xml

70 Lección 15: introducción al concepto de esquema XML

La variante sencillaEsto es lo que tiene que escribir para "referenciar" el archivo del esquema en XML:<?xm1 version="1.0" encoding="ISO-8859-1"?>'~H'staf;~iilós;Xrnli1si'X:~í';nhttp://www .:w3 ..ofg/20·011XMLsch~ma'~ iiHit,¡incé;'~ift~xáij#o~~m~a;¡p~cé.scheÍrtaLi?'ciit:ién:;l'ti~U10E!"X!ld",>..'':' '-'>, ,

<cuaderno>

</cuaderno></listatitu1os>¿Qué es lo que ocurre exactamente en la "línea de referencia" que he marcado en gris? En primer lu-gar, creo el espacio de nombres predefinido para un prefijo llamado xsi. xsi es la abreviatura de XMLschema ínstance. Dentro se incluye un atributo, cuyo nombre no debería preocuparle demasiado, Loimportante es que escribamos siempre entre comillas el nombre (y eventualmente) la ruta de accesoal archivo del esquema, En nuestro caso es uuüoe.xsá.

El archivo del esquema titulos.xsdAntes de nada le mostraré una visión general del archivo. El código fuente parece complicado a pr i-mer vista, Cópielo y lea a continuación mis explicaciones,

1 <?xm1 version=11.0" encoding="iso-8859-1"?>2 <xsd: schema xm1ns :XSd="http://www . w3. org/2001/XMLSchema" >3 :.<xá·~:éíel!Jent';paffi'e;II.1¡i!3taHtúl0S"'>.4 <xsd:comp1exType>5 <xsd:sequence>6 ,úad; e1e¡n~IÚ:',iiame,:,~,cuaderno" ~occurs= "uriboUnded" >7 <xsd:comp1exType>8 <xsd:sequence>9 <xsd:e1ement name=ltitu1o" type="xsd:string"/>10 <xsd:e1ement name="autor" type="xsd:string" maxOccurs="2"/>11 <xsd:e1ement name=leditoria1" type="xsd:string"/>12 <xsd:e1ement name="descripcion" type="xsd:string" minOccurs="O"/>13 <xsd:e1ement name="precio" type="xsd:decimal"/>14 </xsd:sequence>15 </xsd:comp1exType>16 ,</xsd: ~!em~nt>"17 </xsd: sequence>18 </xsd:comp1exType>19 </xsd::element>20 </xsd: schema>

, -~ .

XSD es XML: prólogo y espacio de nombresBien, vamos a examinarlo en detalle. En la línea 1 se alegrará de volver a encontrar un elemento e o-nocido: el prólogo. Esta quizás sea la mejor prueba de que el archivo XSD es un verdadero archivo

XML.Abra el archivo en Internet Exploren enseguida verá la estructura XML (si no puede abrirlo haciendodoble clic, arrastre el archivo manteniendo pulsada l~ tecla izquierda en Internet Explorer),

La línea 2 establece el espacio de nombres de nuestro esquema. Éste tiene exactamente este aspecto(para la variante del esquema actual) y no se puede modificar. Es el elemento raíz del archivo del e s-quema XML, y se vuelve a cerrar en la línea 20.

Lección 15: introducción al concepto de esquema XML 71

Definición de etiquetas conxsd:elementEn la línea siguiente se define el primer elemen-to del archivo XML. Se trata del elemento listati-tulos, el elemento raíz del archivo XML.

El atributo name hace referencia al elementoque se define. En este punto (todavía) no sonnecesarios más atributos. Se volverá más intere-sante en los elementos subordinados,

El elemento listatitulos se vuelve a cerrar en lalínea 19. Todo lo que está en medio está"contenido" en esta etiqueta. Para facilitarle lacomprensión del código, he resaltado esta eti-queta con el fondo en gris.

Bajar un nivelA continuación, observe la línea 4 y la línea 5.<xsd:complexType>

<xsd:sequence>¿Qué significan estas etiquetas tan extrañas?Recuerde esto: con <xsd:complexType> descen-derá un nivel en la jerarquía. Por el contrario,con «xsdisequence» se introduce la "secuencia"de las definiciones de elementos de ese nivel.

llf~~':"~~~~imPf.l.tQm§T~l!~l~íiiLas etiquetas se cierran en las líneas 17 y 18.

Frecuencia de aparicióny lleg~os a la línea 6, donde por primera vez~ define .elelemento cuaderno. ¿Pero qué signi-fica el atributo adicional maxüccure con el valorunbounded? Con él podemos fijar el numero má-XImOde ocurrencias permitidas de cuaderno' un-bounded significa i1irnitado. Bueno, finalmen'tepodremos hacer que aparezcan tantos cuader-nos como deseemos en nuestra lista de títulos.

También es posible especificar un número: ma-xOccuTs="10" permitiría solamente 10 aparícío-:n~ de cuaderno. El contrario de maxOCCUTSesmmOccurs.

También es necesario cerrar el elemento cuader-no, lo que se produce en la línea 16. Este ele-mento abarca también subelementos, por eso lohe resaltado visualmente en gris.

~~é~e y compare el archivo con la DTD deb pa~ 25. Pa;a lo que en la página 25 ocupa-a una simple línea, aquí necesitamos seis.

Definir el tipo de datosEn la línea 7 y 8 volvemos a bajar un nivel m'e la' 'A asn, JerarqUIa. quí es donde fijamos los de-mas elementos.Estas definiciones se cierran a nivel interno, demodo que no olvide la barra al final. ¿Por qué?Porque nos encontramos "al final del túnel" dela jerarquía y no hay más subelementos quetengan que ser abarcados.¿Pero qué significa el atributo type? Nos permitedefinir el tipo de documento. Contype="xsd:string" vamos a lo seguro y permiti-mos una secuencia i1irnitada de "caracteresaceptables en XML".Además, e~ten innumerables tipos de datos,desde xsd.integer hasta xsd:boolean. Los lectoresque "hablen" un "lenguaje de programación entoda regla" como C ó C+ reconocerán con ale-~a todos estos "tipos", mientras que un usua-no novel se asustará. Además de xsd:integer te-nemos, por ejemplo:• xsd:decimal (números enteros o decimales

como -1, 2,5 o 22)• xsd:integer (números enteros positivos o ne-

gativos, como -225 o 7)• xsd:date (fechas como 2002--09-10, es decir

año-mes-día) .• xsd:boolean (valor de veracidad, como true o

false,lóO)

Repetitio est mater studiorumSí, sí, el latín. ,. Hasta ahora, todo concuerdacon la DTD de la página 25. Ya nos encontra-mos en la línea 10 del esquema XML.En ~s~~punto superaremos con el esquema lasposíbílidades de una DTD. La línea 10 determi-na que el autor debe aparecer como mínimo unavez, pero no más de dos veces: todavía no haycuadernos de PC Cuadernos con más de dos a u-tores. Con una DTD no podríamos hacer esto.

maxOccurs y minOccursPara definir las ocurrencias tenemos el atributomaxOccurs, al que he asignado el valor 2.. Pero

, . 'por que me Jacto de haber usado el atributo eneste punto?

Si omite maxOccurs o minOccurs, se aplicará elvalor predeterminado 1. Si el elemento sola-mente tiene que aparecer una vez, puede olvi-darse del atributo .

...---.',.=----------~

Page 38: Manual xml

72Lección 15: introducción al concepto de esquema XML

Sabiendo esto, podemos llegar a int~resantesconclusiones: si solamente indica miniJc- , .curs=í'I) ", maxOccurs se establecerá automatica-mente en 1. y esto se corresponde ~xact~entecon nuestro indicador de frecuenaa, el signo deinterrogación de la DTO.

. . ?Compare la línea 12 y el elemento descnpclOn.de la DTO de la página 25.

type="xsd:decimal"La siguiente pequeña "mejora2 de l~ ~TO seoculta en la línea 13. Con la instrucaon. .type= "xsd:decimal" establezco q~e el preao tieneque ser un número entero o deamal.

¡NOse olvide de validar!Después de crear su primer esquema, seguroque querrá comprobar si lo ha hecho todo e o-rrectamente.Dicho y hecho: hago dic con el botón der~oen el archivo, comando Validate XML - Valida-tion successful. Dios mío, qué bueno ~~e soy.Ahora introduzco algún error a proposito en elesquema y ... Validation successful. Algo no vabien.

ITodo es mentlral El esquema XML no se valida

Ahora resulta que ni XMLINT ni Internet Ex-plorer 6 son capaces de validar por sí solos unarchivo XML contra el esquema XML. (A se p-tiembre de 2002).

Pero sí que se puede ...Siga mis instrucciones: .• Descargue la herramienta MSXML Version

4.0 (actual). Es una herramienta que"moderniza" las capacidades XML de Inter-net Explorer.

• Instale Schematron, una herramienta capazde validar conjuntamente con MSXML unarchivo contra un esquema:www.topologi.com .

C 'ctese a http://msdn.microsoft.com/xm1 yone , 'al Inf")

ha dic en el enlace (sección 'Essenti aga XML ., 4 laMSXML 4.0. Descargue MS verslOn '.

última versión es la que viene con el "~rvlcePack 1". Esta versión requiere tener ~l instala-dor 2.0, que se incluye a partir de Wmdows XP.Si al instalar aparecer un mensaje de error, de-berá descargar la última versió~ del instaladorde Microsoft, el archivo Instmsl.exe. Puede bus-carlo en http://msdn.microsoft.com.Descargue de www.topologi.com la herr~en-ta Schematron, que se puede descargar ~atui-tamente después de registrarse. ~l archivo qu:descargue se llamará TSV USW.ZI~. Descompn.-malo y haga doble clic en el archivo Exe o MSipara instalarlo.

Inicie el programa median~e Inicio/Programas/Topologi/Schematron Vahdator

Al hacer cllc en Run se Inicia la validación

En la parte izquierda deberá indicar el archivoXML, y en el panel derecho el esquema.El hecho de que el fabricante de Schematron en ,realidad "propague" una variante dis~ta delesquema llamada Schematron se menaona so-lamente de pasada. Cuando hablamos de es-quemas, lo más común es que reinen el descon-cierto y el caos.

Lección 16: hipervínculos con XUnk 73

Lección 16: hipervínculos con XLinkEn esta lección aprenderá a:• Crear hipervínculos sencillos con XLink

y en último lugar, pero no por ello menos im-portante, vamos a estudiar cómo insertar vín-culos en XML. No nos importa que esta funcio-nalidad solamente sea operativa en Netscape6.x/7.

~lliJ)s;¡¡í~~til~@lUJg~sf~.l¡¡ií!QTdl~P.:fi~

Hipervínculos en HTML y XMLEn el ejemplo de abajo aparece un hipervínculosencillo. ¿Le suena la muestra en HTML?<a href="http://www.pc-cuadernos.com" title="Editorial FCCuadernos" target=" blank">FCCuadernos</a> -El enlace nos lleva a la página de PC Cuader-nos, en los navegadores más modernos está de-corado con el título Editorial PC Cuadernos y seabre en una ventana nueva del navegador. Aho-ra vamos a convertido a XLink.

El ejemplo en XLinkCopie las siguientes líneas y guarde el docu-mento con el nombre hyper.xml.<?xml version="1.0" encoding="IS0-8859-1"?><link xmlns:xlink="http://www.w3.org/1999/xlink''><vinculo xlink:type="simple"

xlink:href=''http://www.pc-cuadernOB.com"

xlink:title="Editorial PCCuadernos 11

xlink:show="new">PC Cuadernos

</vinculo></link>Tenga en cuenta que el salto de línea lo ha iot-zado el tamaño de la columna del cuaderno.Puede copiarla tal cual, sin estropear nada.

Sinembargo, el hecho de que los atributos delelemento vinculo aparezcan uno debajo del otroes intencionado.

¿Quiere probar el ejemplo? Si enlaza a un archi-Vo CSS externo tampoco obtendrá ningún resul-tado en Internet Explorer.

Solamente Netscape 6.x17 Interpreta el enlace

Sobre el código fuente: como puede ver, se tratade un archivo XML muy, pero que muy senci-llo. Solamente he tenido que dar nombre a lasetiquetas link (elemento raíz) y vinculo (para unvínculo de prueba).

Definir espacios de nombresEn el elemento link defino el espacio de nom-bres. El prefijo obligatorio del espacio de nom-bres se llama xlink. Esta línea es obligatoria, y elespacio de nombres está predefinido.Consejo: encontrará más información sobre losespacios de nombres a partir de la página 47.

Atributo xlink:typeEl atributo x/ink:type describe el tipo de híper-vínculo. Con el valor simple definimos un enlacesencillo.

Atributos xlink:href y xlink:titleEl atributo xlink:href es muy explicativo. En élincluimos (al igual que hacíamos en HTML) laruta de acceso a la página Web a la que quere-mos enlazar.Seguro que tampoco tiene problemas para en-tender el significado de xlink:title. Este atributonos permite incluir el "título" del que hablába-mos arriba al hipervínculo. Netscape muestraun pequeño bocadillo amarillo informativo (veala imagen de arriba).

Atributo xlink:showEl atributo xlink:show puede aceptar los valoresnew y replace. Con new nos aseguramos de que el"resultado del vínculo" se abra en una nuevaventana del navegador. Con replace, se reempla-zará el contenido de la página que se esté mos-trando.

j

Page 39: Manual xml

3 )Informarse. aprender. consultar: recursos sobre XML

T••••••.•.••••••• ~·~

•• N."espaces 1.1 Last Can Publlsllod

~~~~N-:'-;::X;II.WIoIIiWta,II.I~·~.""""~••••••• _;.JtWL~.V~1.1~;:.~.:=--::;;=.....~ ..~~•• XKfML 1.0 iD XML Scbema Nol.8Publlshed

Js.-w1OOl:ThoHNL Workiac<hoop .•• .--d

, rá toda la Información posible eobre losAqUI encontra nuevOS Ienguates

Acceda a www.w3.org y haga clic en el tema, le m'teresa La calidad de los documen-quemas· .

tos oscila entre complicada y totalmente m~?m-prensible. Si tiene suerte y pacie~cia, tamble~ _encontrará traducciones al espanol d~ las pnncipales especificacione:' de los lenguajes. ¡Notenga miedo, adelante.

Aprender: W3Schools y cía. . .. 1 d información técnica prefiere reci-

SI en ugar e tilizarbir instrucciones paso a paso, puede u .'

cillamente un buscador como Google e indi-sen 1 . tcar las palabras clave sobre el tema que e m e-resa, por ejemplo:xml-schema tutorialsi lo que desea es encontrar información sobreesquemas XML.

r~...,_W •••••••••••lUt""""'l'=.::::t'~='~:=:::::=~"~~...=:"'-__ ••••••••_ •••••••••••••_IofI_

ny-It-V """"'"

•••••~_ •••find-...~ ••••.-...- ••~·

.¡,¡, __ ••• om-. ••••• ".. __ .t... ••••••••• -.-- •.••• "'-".•...•...Introducción paso a paso

na1m t me gustan mucho los tutorialesPerso en e, 1 .lín d W3Schools entre otros los re atívoseneae ' ,

a OTD, OOM, WAP, X-Path o el es~dar paraformularios X-FormoNuevament~, pl~nse queestas páginas están solamente en ínglés:www.w3schools.com

Consultar: Usegroups sobre XMLSi lo que desea es una buena introduc~~n altema le recomiendo los grupos de notícías. Enellos' los interesados en XML se ayudan mu-tua~ente y se resuelven dudas. Es especialmen-te interesante el grupo• cotrrp , text .xmlAcceda a www.google.com. haga clic en la pes-taña Groups y escriba el nombre del ~po de-seado. Desde aquí podrá leer y publicar men-sajes cómodamente.

. . gularmente enSi está interesado en partícípar re , .un grupo, sería recomendable que utilizase unlector de noticias, como Outlook Express,Otra opción son los .~pos de ~~oo.com, cuyainterfaz existe tamblen en espanol. tilizarhttp://es.groups.yahoo.com/ . Se 'p~ede u

tr ' del Web o bien puede recibir los men- .a aves ,. hablsajes en su programa de correo electromco -tual.

Sección práctica F: ejercicios sobre el esquema Y los hlpervfnculos 75

Ahora ya sabe cómo:• Escribir archivos de esquema XML• Incluir una referencia al esquema en el documento XML• Validar archivos XML contra un esquema• Incluir hipervínculos en XML

Ejercicio F1: crear un archivo XML para un artículo de periódicoSupongamos que una revista se pasa aXML, y todos los redactores deben escr i-bir sus artículos en el nuevo formato. Elredactor jefe pone a su disposición esta"plantilla de artículo". Copie el documen-to y guárdelo con el nombre paper.xml.Atención: la etiqueta article puede apare-cer un número ilimitado de veces. Loselementos head y /ead solamente puedenaparecer una vez, y el elemento paragraphdiez veces (los autores no pueden escribirmás párrafos). El orden es head - /ead - pa-ragraph.

<?xml version="1.0" encoding='iso-8859-¡" ?>- <papel">

- carticleo-chead» T1tull,r<!head><lead>lntroducdón<!lead><paragraph>Párrafo de texto</paragraph>

-c/articlec-</paper>

74

Informarse aprender, consultar: recursos sobre XML ,, a- TeJlga en cuenta que siempre encontrar!"'mucha

Prácticamente hemos llegado al final del ~ más información en inglés que en espanoL ,d Y digo del cuaderno porque todavta .erno.queda mucho por decir sobre XML., .Pero, ante todo, le recomiendo que mv~~gue aen Internet. Encontrará mucha informaaon gr -tuita.

Informarse: páginas del W3CSibusca información de primera mano Y ~tar aal día sobre los últimos avances de los estánd a-

. de i 1') le(y tiene buenos conocimientos e mg es ,~:omiendo que visite las páginas del W3C. Sonun punto de partida perfecto.

Este es el aspecto de la estructura del artículo

Ejercicio F2: crear una OTO¿Ha creado el archivo paper.xm/? Guarde una copia del archivo con el nombre paperl.xml. Intenteplasmar los requisitos mencionados arriba en una OTO clásica (paper.dtd). ¿Qué no será posible? Va-lide el documento.

Ejercicio F3: fijar una referencia al archivo del esquemaCree una segunda versión del archivo original y guárdela como paper2.xmI. Inserte una referencia alarchivo del esquema (que todavía no ha creado) paper.xsd.

Ejercicio F4: escribir el esquemaCree el archivo del esquema paper.xsd. Intente transformar los requisitos del ejercicio Fl.

Ejercicio F5: validar un archivo XML contra el esquemaValide el archivo XML contra el esquema que ha creado usted mismo.

Ejercicio F6: insertar hipervíncuLos internos:r'1 Cree dos archivos XML sencillos (~1> misma carpeta), El primero: deberá llamarse paginal.xmI, yel segundo pagina2.xml. Cree en cadai &- aquí seya a la~ 1~ página un hipervínculo que lleve a la otra página. La descripción del.WIFHm-•• enlace (el texto legible) tiene que ser Página 1 y Página 2. Como

. . lA '. ,.. '.c ' •• "título" escriba, por ejemplo, Por aqui se va a la página 1, etc.

Asegúrese de que no se abra una ventana nueva del navegador, sino que el contenido aparezca en laVentanaactual. Compruebe los vínculos en Netscape (si es posible).

~~-,~---~,--------------

Page 40: Manual xml

76 Los manuales de PC Cuadernos

Los manuales de PC Cuadernos\

Titu!o Publicado en Tipo Referencia Precio

457 4.5ÓÉUR

I1,!I, ,

,Iil"'111

11'

/1:'irII

;1

"I1,

'1I

4408 4.50EUR

Venta al númeron

Venta al número¿Quiere conseguir un 'En numero atrasado, o que ya no está a la venta?

ese caso,podemos mandárseIo por correo. .

Loúnico que tiene que hacer es diri . . .Allí guse a nuestro sitio web en www d

encontrará una lista completa di' . ·pc-cua emos.com.contenidos, suplementos gratuitos yer:::::t~ pU,blicados,además de un breve resumen de losfecha de publicación, etc. e mteres sobre los autores, comentarios de los lectores,

Desde el sitio web podrá enviamos su solici .. ,forma sencillay rápida. tud para recibir numeros atrasados por correo, de una

CM

Page 41: Manual xml

índice de palabras clave78

índice de palabras clave

Aplicación práctica deXMLll

ASCll5Asterisco 26Atributos

definir en OTO 35definir mejor las etiquetas

34definir propios con XML

16en HfML 34fijar valor 40implied versus required

35no definir ningún valor 38predefinir un valor 40son opcionales 39

ATILIST35Base de datos de

productos 33bien formado 16; 23Boolean71Caracteres especiales 20Carrito de la compra 14CDATA38CDATA y NMfOKEN 39CDF12cirí1ico 20Comentarios para XML

68Compresión de XML 13Comprobar 29

con parsers validadores29

Conjunto de caracteresincorrecto 20iso-8859-1 20visión general 20

Crear archivo delesquema 70

CSScomo archivo externo 56como lenguaje de diseño

13diseño atractivo 59escritura compacta 59forzar salto de línea 60fundamentos 56; 58principales atributos y

características 58referencia 58selectores 58

Date 71Declaración del tipo de

documento 27Descarga

breve referencia de CSS 58de los ejemplos 3

-\

Entidades predefuúdas 21ENTITY41Espacio de nombres

declarar 48explicación 47

Espacios de nombresdefinir 47

Esquema 69como aplicación XML 70como conjunto de reglas

16como nuevo estándar 69definir etiquetas 71frecuencia de aparición 71insertar referencia al

archivo del esquema69

tipos de datos 71Esquema de la estructura

de árbol 34Etiquetas

definir propias con XML16

en SGML 6Europa suroriental20FileMaker 11FIXED40fQr-each 65formas abreviadas de

atributos 52Formato binario 9Formato con CSS 56Formato de texto versus

formato binario 9Formato de texto,

inconvenientes 10FormatoZIP

en staIOffice 12para comprimir XML 13

Funcionamiento modulardeXML 10

GML4Gráficos en XML 63Guardar documentos,

largo plazo 10Gusanos 12Hipervínculos con XLink

73homepage5HTML

etiquetas 6inconvenientes 7; 8

inicio 5se populariza 6transformar de XML a

HfML62versus XHTML 51

HTML-Kit54

MSXML72programas de validación

paraXML30Schematron 72

Dibujar la estructura deárbol 34

display 60DOCTYPE 27; 53DTD

¿por qué es importante?29

como conjunto de reglas16

crear 24definir atributos 35DTD externa 24establecer un enlace 27explicación paso a paso

25incluir 27inconvenientes del

concepto 39interna 28planificar 24pública 27referencia en XHTML 52validar 29versión de transición 53versus esquema 39; 69

Editor 18Ejemplo

artículo de periódico 75base de datos de

productos 33carta 41enXHfML54inventario 42lista de direcciones 32lista de productos con

CSS59lista de teléfonos 44lista de títulos 22obras 44

Elemento raíz 19Encontrar errores con

Schematron 72Encontrar errores

mediante la validación31

Entidadescomo comodines 41entidades predefinidas 21escribir acentos 20explicación 21extemas42internas 41para caracteres especiales

20parameter-<!rttities 42

Entidades parámetro 42

HTTP5id 521EXMLTLS, instalar 31IMPLIED 35; 39Inconvenientes

de HfML 7deXML 13

indicador de opción (O)25

indicador desecuencialidad (Y) 25

Indicadores de' frecuencia26

Integer71Internet Explorer

domina XML 14muestra la estructura de

árbol 23representar XML 18

Introducción 3Islas de datos 50iso-8859-1 20Latin-120Lee, Tim-Berners 5Lenguaje base XML 8Lista de direcciones 32Lista de teléfonos 44Lista de títulos 22MathML 10maxOccurs 71Mensaje de error

con acentos 20; 42entidad no definida 41evitar con comentario 68valor no válido de

atributo 39versión antigua del

instalador 72Metalenguaje 10Microsoft Office

formato binario 9formato binario versus

formato de texto 9formato XML 11

Microsoft, Channels 12minOccurs 71Modo quirks 53Mozi1\a5MSXML72narne52name space 47navegador5

como parser 23Internet Explorer 18modo quirk 53Netscape 19representación de XML 14

índice de palabras clave 79Netscape 19NMTOKEN39Nodos23Nombres de campo 33OpenOffice 9OpenOffice, soporte de

XML12Opera 5ordenar con XSLT 65parser

¿qué es? 23Internet Explorer como

parser23no validador 29validador 29

PCDATA26Planificación

estructura en XML 8planificar

documento XML 22la DTD24

planificar una estructura22

Prefacio 3Prefijo para espacios de

nombres 47Principio de \as variables

en las entidades 41Probar 54Problemas con los

acentos y \as entidades42

Problemas con sitios WebconXML 14

Prólogo 19PUBUC2.7referencia a la DTD 27REQUIRED35Schema69Schematron 72Script-Host 12Sección práctica A,

preguntas generales 17Sección práctica B,

primeros ejercicios enXML32

Sección práctica C,atributos, DTDentidades 44 '

Sección práctica D,paréntesis, espacios denombres y XHfML 55

Sección práctica E,ejercicios sobre CSS yXSLT68

Sección práctica F,ejercicios sobre elesquema y loshipervínculos 75

Selector58Separación de estructura

Y diseño 16SGML

etiquetas 6SGML

características 4como base para H1ML 5inicio 4se convierte en estándar

JS04Signo de interrogación 26Signo de suma 26Sintaxis de X-Path 63SMIL 10StarOffice 9StarOffice, soporte de

XML12String 71SVG61Tablas en XML 63template63TIDY54Tim Berners-Lee 5Tipo de datos para el

esquema 71Transformar XML 15Tutoriales sobre XML 74URI48valid 16; 23Validar

código XML 29con TIDY 54

con XMLINT 30instalar un validador 31W3C-Validator 54XML contra el esquema

72válido 16; 23value-of seiect 63Virus 12Virus por e-mai112W3C6;9W3Schools 74WAPllWebpublishing

problemas 14soluciones 14

we\l-formed 16; 23Windows Scripting Host

12WML 10;61World Wide Web

Consortium VéaseW3C

WSF12XHfMLll

¿qué es? 51diferencias con H1ML 51reglas estrictas 51

XUnk 10; 73XML

¿dinecto en el navegador?14

¿por qué XML? 7Atributos 34bien formado 16; 23características principales

9; 16como base de datos 33como lenguaje modular

10como lenguaje para

estructuras 8crear el primer documento

18definir etiquetas propias

16descripción porOTO 16elemento raíz 19en la práctica 11en StarOffice 12

entorno de desarrollo 18estándar basado en texto

9guardar documentos a

largo plazo 10incluir en archivo H1ML

50inconvenientes 13insertar comentarios 68insertar imagen 63introducción 7lenguajes basados en

XMLI0lo que no es 7posibilidades de

disposicion 13presentación en el Web 13prólogo 19representación gráfica 34resultado en Internet

Explorer 18rsultado en el navegador

Netscape 19transformar 15transformar a (X)H1ML

15transformar con XSL 15tutoriaIes 74validar 29válido 16; 23

XML Schema VéaseSchema

XMUNT30xmIns48XPointer 10xsd 70; 71XSL

como lenguaje de diseño13

para transformar XML 15XSLyXSLT61XSL-FO 61XSLT

bucle 65ejemplo 66introducción 61ordenar 65sintaxis 62