> Manuales > Introducción a XML

Una charla sobre XML que se produjo en un chat. Trata temas interesantes que pueden complementar otros contenidos.

El Miercoles por la noche en el canal #dtd del irc-hispano tuvimos la suerte de asistir a una magnifica charla de explicacion sobre el formato XML. Macoa nos deleito con su sapiencia y los asistentes pudieron aclarar sus dudas sobre el tema, menos mal que logramos rescatar el log del evento en cuestion.

Curso sobre XML por Macoa, en el canal #dtd del IRC-Hispano
09-01-2002

Patrocinado por
Macoa: http://dardhal.tiopaco.net y
Trukulo: http://trukulo.cjb.net


<Macoa> Que es XML?

<Macoa> XML es un acrónimo que significa Lenguaje eXtensible de Marcas (en sajón)

<Macoa> el cual posee unas ciertas características bastante curiosas

<trukulo> ( Xtensible Markup Language <- esto es sajón )

<Macoa> bien

<Macoa> A todos os sonará el lenguaje de Marcas por excelencia , HTML

<trukulo> ( html - Hipertext Marking Language )

<Macoa> con ese lenguaje descriptivo, se crean páginas hipertextuales (que no páginas web)

<Macoa> las cuales intentan, mediante una codificación sencilla y comprensible por el ser humano, formatear una información dada, de manera visual

<trukulo> macoa, una duda

<Macoa> precisamente, el éxito que HTML posee viene de aqui: al ser una sintaxis 'legible' y en cierto modo 'aprehensible' sin manual de instrucciones

<trukulo> interesante q viene al caso

<Macoa> dime

<trukulo> <Magaly_> se crean páginas hipertextuales (que no páginas web)......................cual es la diferencia? ¿?¿?¿

<Macoa> Magaly_: el origen de las páginas hipertextuales era aprovechar de alguna manera la comunicacion entre redes, para compartir información

<Macoa> o sea, dicho en plata

<Macoa> Una pagina web no es HTML, pero HTML crea páginas web

<trukulo> con permiso

<trukulo> html es simplemente un formato de documento

<Macoa> trukulo: eso hay que matizarlo (ahora mismo)

<trukulo> una pagina web es la interpretacion de un documento por un parser (navegador)

<trukulo> matiza pues

<Macoa> lo que venia a decir: HTML es un 'formateador' de textos

<Macoa> ahora bien, un agente computacional, solo es capaz de, como mucho, traducir esas marcas para formatear el texto

<Macoa> nunca puede, a priori, extraer el significado del texto.

<Macoa> pongo un ejemplo:

<Macoa> en un documento HTML encontramos:

<Macoa> <H1> Titulares </H1>

<Macoa> y en otro cualquiera podemos encontrar

<Macoa> <H1> Trukulo, a que huelen las nubes </H1>

<trukulo> <i>a coño</i>

<Macoa> el computador sólo sera capaz de 'formatear' el texto

<trukulo> preguntan por aqui q es un agente computacional

<Macoa> un ordenador con un programa determinado y que usa estructuras de datos

<Macoa> ahora bien

<Macoa> vamos a hacer un pequeño análisis que nos acerca a la filosofía de XML

<Macoa> tomamos 3 portales

<Macoa> por ejemplo www.terra.es www.wanadoo.es y www.ya.com

<Macoa> si analizamos la estructura de los documentos, sin hacer caso del formato (negrita, cursiva, alineacion, parrafos)

<Macoa> obtenemos una estructura 'semántica' del portal

<Macoa> por ejemplo, podemos observar:

<Macoa> un portal tiene cuatro partes principales

<Macoa> la primera es el anagrama/logotipo y la imagen de empresa

<Macoa> otra parte es el menú de contenidos

<Macoa> otra es la tabla de contenidos importantes/novedades

<Macoa> y por último créditos y disclaimers

<Macoa> a su vez, podemos ir descomponiendo cada parte en más subpartes

<Macoa> hasta llegar a un nivel en que se obtengan conceptos como 'valor de'

<Macoa> por ejemplo : el valor de una entrada del menu del portal es 'Economía'

<Macoa> Si os fijais... TODOS los portales tienen la misma estructura semántica (que no formato)

--> sibannac (Druida@D8yplk.DWYC79.virtual) has joined #dtd

<-- slack has quit (Signed off)

<Macoa> justamente es aqui donde aparece el concepto de XML como contrapartida a HTML

<Macoa> HTML describe formatos. XML describe estructuras de información (a partir de ahora semántica)

<Macoa> ¿Cómo se consigue esto?

<Macoa> para ello voy a hacer una pequeña comparación estilo Pimpinela entre HTML y XML

<Macoa> HTML es un lenguaje de marcas. XML también lo es

<Macoa> las marcas tienen la misma gramática de formación: <elemento> </elemento>

<Macoa> sin embargo, en XML estricto, no se permiten mayúsculas

<Macoa> HTML posee un conjunto de vocablos que describen el formato: td table br input form etc....

<Macoa> XML deja al usuario la creación de dicho vocabulario (!)

<Macoa> por ejemplo

<Macoa> nuestro portal se vería así

<Macoa> <portal>

<Macoa> <anagrama> blah blah blah </anagrama>

<Macoa> <menu> blah blah blah </menu>

<Macoa> <novedades> blah blah blah </novedades>

--- trukulo has changed the topic to: Curso de XML por Macoa y patrocinado por http://dardhal.tiopaco.net (dudas a trukulo en privado)

<Macoa> <creditos> blah blah blah </creditos>

<Macoa> </portal>

<Macoa> si os fijais, no aparece NADA de información de formato.. pero queda totalmente descrito nuestro portal

<Macoa> otra característica importante que difiere entre HTML y XML son las etiquetas de cierre

<Macoa> HTML permite 'omitir' ciertas etiquetas (por ejemplo </html> </tr>).....

<Macoa> XML NUNCA admite esta licencia

<trukulo> Macoa: una duda de regeWork

<Macoa> si

<trukulo> rege pregunta: dentro de las marcas XML que lenguaje usa?

<Macoa> (descasito uf.... sponsored by http://dardhal.tiopaco.net)

<Macoa> regeWork: se crea por el usuario. Tú mismo decides el nombre de las marcas

<Macoa> de ahi la potencia. Nos sirve para crear descripciones de portales, de una agenda, de un acta notarial, etc....

<Macoa> justamente en eso entraremos ahora

<Macoa> resuelto?

<trukulo> no

<trukulo> espera

--- Macoa gives voice to regeWork

<Macoa> regeWork: habla

<regeWork> thx

<regeWork> aver lo de las marcas lo tengo claro

<Macoa> si

<regeWork> yo me referia a que ba dentro de las marcas

<Macoa> ok

<Macoa> pondré un ejemplo más clarificador:

<Macoa> <tarjetavisita>

<regeWork> o xml solo aze estrukturas por llamarlo asi?

<Macoa> <nombre>Macoa</nombre>

<Macoa> <apellidos>Jan</apellidos>

<Macoa> <url>http://dardhal.tiopaco.net</url>

<Macoa> </tarjetavisita>

<Macoa> quedó claro?

<regeWork> oks

<regeWork> si

<Macoa> vale

<Macoa> continuamos

<trukulo> Macoa: las etiquetas las explicas luego no ?

--- Macoa removes voice from regeWork

<Macoa> trukulo: ahora mismo.. un inciso antes

<trukulo> el q tu quieras

<Macoa> como observais, no se describe formato... Esto no quiere decir que el documento XML final no tenga formato, todo lo contrario. Más adelante veremos como obtiene formato un XML

<Macoa> ahora vamos a pasar al tema de las marcas

<Macoa> al hilo de la cuestión anterior, todo el mundo podría hacerse sus marcas

<Macoa> imagínense que desbarajuste

<Macoa> vamos a poner otro ejemplo

<Macoa> imaginemos que un servidor web tiene 100 documentos XML 'tarjetavisita' como el anterior

<Macoa> con 100 contactos de empresa

<Macoa> ahora desarrollamos un programa cliente que obtiene esos 100 documentos

<Macoa> y busca por ejemplo la url de todos para despues procesarla

<Macoa> como observais, cliente y servidor tienen que ponerse de acuerdo en una sola cosa

<Macoa> en el nombre de las marcas y en que significa cada una

<Macoa> De ahí que exista una necesidad de 'normalizar' u obligar a un programa que utilice tecnología XML a utilizar un lenguaje determinado

<Macoa> 1 seg

<Macoa> ya

<Macoa> o sea: el cliente ha de ver si lo que ha recibido es 'correcto'

<Macoa> y se ajusta a las etiquetas que el conoce

<Macoa> para ello están las DTD

<Macoa> Document Type Definition

<Macoa> Definicion de Tipo de Documento

<Macoa> son unos documentos que definen, de manera inequívoca las marcas que se utilizarán.

<Macoa> por ejemplo, en lenguaje natural, el DTD de nuestra tarjeta de visita sería el siguiente:

<Macoa> Tenemos un documento llamado tarjetavisita. Este se compone de tres elemenos, los cuales aparecen uno detras de otro

<Macoa> Estos elementos son: nombre, apellidos y url

<trukulo> un inciso

<Macoa> a su vez, cada elemento, en su interior, no posee ninguna marca

<trukulo> esto para el q sepa C , es una estructura

<Macoa> sino el texto que representa

<Macoa> correcto, pero prefiero no comparar con estructuras de programacion

<trukulo> es para hacerlo mas visual, perdona

<Macoa> una primera aproximación formal sería:

<Macoa> Documento tarjetavisita -> nombre, apellidos, url

<Macoa> nombre -> texto_plano

<Macoa> apellidos -> texto_plano

<Macoa> url -> texto_plano

<trukulo> es como definir una tabla de una base de datos, no ?

<Macoa> Si ambos elementos (cliente y servidor) manejan la misma especificación, sabrán en cada momento que significa cada cosa, y podrán detectar errores

<Macoa> trukulo: tambien es una aproximacion matizable

<Macoa> eso es el ultimo punto

<Macoa> hay que tener en cuenta que XML no pone límite a la profundidad de marcas

<Macoa> o sea, que podemos definir el lenguaje que nos venga en gana

<Macoa> La sintaxis de la DTD sería la siguiente:

<Macoa> <!ELEMENT tarjetavisita (nombre,apellido,url)>

<Macoa> <!ELEMENT nombre #PCDATA>

<Macoa> <!ELEMENT apellido #PCDATA>

<Macoa> <!ELEMENT url #PCDATA>

<Macoa> con esas lineas, se define el vocabulario

<Macoa> ahora bien

<Macoa> Quién lee esa definición y qué software/librerías existen para manejar XML?

<Macoa> La respuesta es 'el parser'

<Macoa> El parser XML es un pequeño programa/libreria/modulo que se encarga de toda la validación y análisis de XML de forma transparente al usuario

<Macoa> normalmente está incluido en los navegadores de hoy en día y como librerías separadas

<Macoa> bueno

<Macoa> antes de entrar en el parser

<Macoa> descansito y dudas

<trukulo> alguien tiene alguna duda ?

<Macoa> hay alguna duda trukulo?

<trukulo> bueno, yo queria decir algo de todas formas

<trukulo> el XML es un estandar adoptado por la w3c

<trukulo> asi q sera el estandar de facto

<trukulo> hay una duda de fale

--- Macoa gives voice to ^fale

<Macoa> habla ^fale

<trukulo> <^fale> duda:el xml pa k vale?

<^fale> joder truku

<^fale> no se te pue haser una broma

<Macoa> xDDD

<^fale> ehh, io.... gora vallekas!

--- Macoa removes voice from ^fale

<trukulo> es q esa duda es interesante

<Macoa> bueno

<trukulo> en serio

<Macoa> entonces entramos en el parser, y así encajo con ^fale

<trukulo> vale, un seg

<trukulo> antes rege

<Macoa> venga

--- trukulo gives voice to regeWork

<regeWork> aver

<regeWork> el server tb necesita un modulo para manejar XML?

<trukulo> umm, a ver

<Macoa> regeWork: en principio no. el parser lo necesita aquel que tenga que extraer informacion del documento

<regeWork> osea el navegadr

<Macoa> en este caso

<regeWork> navegador

<regeWork> ok

<Macoa> a veces el server tambien necesita manejar info

<Macoa> todo eso viene ahora ;)

<Macoa> continuo

--- Macoa removes voice from regeWork

<Macoa> cualquiera que haya mantenido una página web sabrá lo costoso que es mantenerla de forma eficaz

<trukulo> estatica, se refiere

<Macoa> imaginense la página frontal de terra actualizarla a pelo en HTML

<Macoa> claro

<Macoa> sería un lío

<Macoa> sin embargo, volviendo al portal

<Macoa> manipular documentos XML es mas sencillo

<Macoa> ya que no estamos viendo <TD> <FONT> etc...

<Macoa> sino <noticia> <titular> <menu> <creditos>

<Macoa> ahora bien

<Macoa> hemos dicho que XML no tiene formato

<Macoa> pero nosotros podemos (y vamos) a agregárselo

<Macoa> de que modo?

<Macoa> utilizando un 'transformador'

<Macoa> llamado XSLT

<Macoa> este transformador, tomará como entrada un documento XML con su DTD, y nos dará una salida HTML

<Macoa> para ello, tomará como datos, también, una serie de reglas de transformación

<Macoa> no entraré en la sintaxis, pero sí en la idea básica:

<Macoa> vamos a imaginar las tarjetas de visita

<Macoa> recordemos:

<Macoa> [00:46:10] <Macoa> <tarjetavisita>

<Macoa> [00:46:18] <Macoa> <nombre>Macoa</nombre>

<Macoa> [00:46:31] <Macoa> <apellidos>Jan</apellidos>

<Macoa> [00:46:49] <Macoa> <url>http://dardhal.tiopaco.net</url>

<Macoa> [00:46:53] <Macoa> </tarjetavisita>

<Macoa> ahora la DTD

<Macoa> [00:59:34] <Macoa> <!ELEMENT tarjetavisita (nombre,apellido,url)>

<Macoa> [00:59:42] <Macoa> <!ELEMENT nombre #PCDATA>

<Macoa> [00:59:52] <Macoa> <!ELEMENT apellido #PCDATA>

<Macoa> [00:59:59] <Macoa> <!ELEMENT url #PCDATA>

<Macoa> y ahora las reglas de transformacion

<Macoa> elemento tarjetavisita=><TABLE BGCOLOR=............>

<Macoa> elemento nombre=><TR><TD>Nombre:</TD><TD>$valordenombre

<Macoa> </td></tr> (se me olvidó

<Macoa> elemento apellido=><TR><TD>Apellido:</TD><TD>$valordeapellido>/TD></TR>

<Macoa> elemento url=><TR><TD>Url:</TD><TD><a href=$valordeapellido>$valor de apellido</a>/TD></TR>

<trukulo> convierte los elementos a html, vamos, con tablas, formatos, fuentes, etc...

<Macoa> justamente

<Macoa> obtendríamos un bonito código HTML

<Macoa> estas transformaciones que puedan ser triviales en el ejemplo

<Macoa> a la hora del proceso de un archivo de unos 50 KB con unas 20 etiquetas, son más que poderosas

<Macoa> una actualización en HTML sería costosa, mientras que en XML solo consiste en cambiar el valor actualizado, encontrandose el documento perfectamente organizado

<Macoa> este es uno de los muchos usos de XML

<Macoa> otro uso: imaginense una BBDD remota

<Macoa> se pide una informacion determinada, y se devuelven estas 'tarjetasvisita'

<Macoa> el programa cliente, con ayuda del parser, es capaz, mediante unas funciones básicas de acceso al documento, obtener la informacion

<Macoa> independientemente sea la BBDD origen de un tipo u otro (SO, etc..) y el cliente del mismo modo

<Macoa> Estas funciones están definidas desde dos puntos de vista, los cuales difieren de la implementación

<Macoa> estos son DOM y SAX (las interfaces o conjunto de funciones)

<trukulo> esto se ve perfectamente con programas como Kougar )

<trukulo> q es un parser cliente de XML para KDE )

<Macoa> por ejemplo. un programador puede acceder a la tarjeta de visita de la siguiente forma

<trukulo> perdon, kugar

<Macoa> print etiqueta-tarjeta->nombre

<Macoa> de forma transparente

<Macoa> descanso

<Macoa> alguna duda?

<trukulo> yo tengo un inciso q hacer

<trukulo> respecto a la generacion de webs com xml

<Macoa> adelante

<trukulo> que ventajas tiene eso contra un php+mysql o un asp+sql server ? bien, es sencillo

<trukulo> el codigo html siempre es mucho menos costoso para un servidor que un codigo dinamico

<trukulo> por lo cual, una vez generado los html con el xml tenemos las ventajas de los dos sistemas, y el inconveniente de ninguno

<trukulo> velocidad y facilidad de creacion de contenido

<trukulo> esto es para grandes portales que tienen muchas visitas diarias

<Macoa> hay un pequeño problema trukulo, pero que no suele darse

<trukulo> o para servidores con poca potencia

<trukulo> cual?

<Macoa> y es cuando el origen de datos XML es un documento extenso (20-40 megas)

<Macoa> pero no suele ser el caso común

<Macoa> así que no tocaremos eso XD

<Macoa> bueno

<Macoa> continuamos

<trukulo> espera

<Macoa> si

--- trukulo gives voice to regeWork

<regeWork> lestaba diciendo a truku

<regeWork> k en asp por ej

<Macoa> si

<regeWork> el k interpereta es el server

<regeWork> pero en XML si interpreta el cliente

<trukulo> veamos

<Macoa> a ver

<trukulo> no exactamente

<Macoa> regeWork:

<regeWork> pasas la karga de procesamiento a este no?

<Macoa> regeWork: en XML existen las dos posibilidades

<trukulo> el xml ya se ha pasado a html

<Macoa> regeWork: tú explicitamente puedes

<trukulo> asi q no haria falta ningun proceso , ni en cliente, ni en servidor

<Macoa> a) indicar al servidor que transforme a XML

<Macoa> b) enviar el XML y las reglas de transformacion al cliente y que se las apañe el

<Macoa> incluso ...

<Macoa> c) Hacer las transformaciones en la linea de ordenes, y salvar los HTML

<trukulo> a esa ultima me referia yo

<trukulo> para grandes servidores web

<regeWork> aja

<trukulo> pero macoa lo explica mejor

<trukulo> ;)

<regeWork> cual es el metodo ams usado para por ej, hacer un portal?

<Macoa> bueno

<regeWork> mas*

<Macoa> regeWork: la transformacion en el servidor

<Macoa> terra esta hecho así

<trukulo> Macoa: depende del portal

<regeWork> ok

<trukulo> elpais por ejemplo

<trukulo> produce html a partir de paginas dinamicas con php+mysql

<Macoa> ColdFusion utiliza un lenguaje propio XML (CFM => ColdFusion Markup Language)

<trukulo> es un caso raro, pero aumenta muchisimo la productividad

<Macoa> no es sino un XML con sus palabras definidas

<regeWork> truku puedes esplikar un poko eso?

<trukulo> si

<Macoa> (y algunas cosas mas ;) )

<trukulo> a ver

<trukulo> las webs dinamicas generan en tiempo real html para el cliente

<trukulo> sin embargo, hay un pequeño truco

<regeWork> si php por ej

<trukulo> generar el html y guardarlo en el servidor

<trukulo> asi accedes no a php, sino a htm

<Macoa> regeWork: consiste en 'pre' procesar las transformaciones y alojarlas

<Macoa> un php-caching

<regeWork> aja

<trukulo> eso

<Macoa> bueno

<Macoa> que nos salimos XD

<trukulo> si, sigamos

<regeWork> venga xD

--- Macoa removes voice from regeWork

<Macoa> a ver por donde iba

<trukulo> un seg

<Macoa> si

<trukulo> 2<siette> el caso a) no requiere de un navegador con soporte xml y el resto si, no?

<Macoa> siette: IE 4.0 con Service Pack de ese ya soporta XML

<Macoa> Netscape 6 /mozilla también

<Macoa> opera también

<Macoa> solo los pequeñines no ;)

<trukulo> y en todo caso, serian los casos a y c los soportados por cualquier navegador html

<Macoa> siette: de ahi que mayormente se preprocese en el servidor

<Macoa> de modo que el cliente solo vea XML

<Macoa> perdon HTML

<Macoa> xD

<Macoa> bueno

<Macoa> continuamos

<Macoa> esta charla se ha orientado mayormente a XML como soporte de información transformable a HTML

<Macoa> pero no solo se puede transformar a HTML

<Macoa> con las reglas adecuadas, hasta podemos obtener un PS!

<trukulo> y pdf

<Macoa> otro punto importante es el sistema de almacenamiento

<Macoa> Son altamente conocidos los SGBD (BBDD) relacionales, tipo mysql, postgresql, oracle rdbms

<Macoa> sin embargo, con XML, como podemos ver, las estructuras no tienen una forma tabular

<Macoa> las estructuras tabulares son un caso particular de XML

<Macoa> ejemplo:

<Macoa> <row 1>

<Macoa> perdon

<Macoa> <row id=1>

<Macoa> <col id='nombre'>macoa</col>

<Macoa> <col id='apellidos'>jan</col>

<Macoa> <col id='url'>dardhal.tiopaco.net</col>

<Macoa> </row>

<Macoa> seria como hacer un SELECT * from fichas , donde devuelve la fila citada

<Macoa> pero como vemos, XML puede anidar etiquetas

<Macoa> formando Objetos

<Macoa> <object id=casa>

<Macoa> <element id=habitacion>camas</element>

<Macoa> <element id=salon>

<Macoa> <part id=electrodomesticos>

<Macoa> etc....

<trukulo> umm

<trukulo> digamos tiene una estructura de arbol ?

<Macoa> esto, a aquellos que conozcan sistemas de gestion de base de datos orientadas a objetos les será familiar

<Macoa> justamente. XML ES un ARBOL

<Macoa> que tiene una hoja final cuyo valor es el texto a buscar

<trukulo> es q recuerda sobremanera a un directorio Novell

<Macoa> como antes dije, DOM permite recorrer ese arbol de nodos

<Macoa> hasta encontrrar un nodo determinado

<Macoa> y obtener informacion de el

<Macoa> (esto para los programadores)

<Macoa> bueno

<Macoa> creo que ya he acabado con la vision general de XML que pretendía dar. Sobre esto hay muchas muchas cosas

<Macoa> cosas más modernas. Por ejemplo, la DTD que antes nombré no se utiliza ya.

<Macoa> ahora se utiliza otro tipo de definicion de lenguaje llamado XML Schema

<Macoa> pero la idea básica es la misma

<trukulo> es similar a las CSS

<trukulo> cascade style sheets del html

<Macoa> hay que decir que XML crece dia a dia de manera agigantada

<Macoa> y que se está convirtiendo en el estandar de facto en la intercomunicacion de aplicaciones

<Macoa> ejemplos son XML-RPC

<Macoa> llamadas RPC utilizando como flujo de datos documentos XML (KDE utiliza esto para intercomunicarse)

<Macoa> la mayoria de sistemas de mensajería están adoptando este tipo de documento

<trukulo> rpc : remote procedure call )

<Macoa> de este modo se obtiene mayor independencia con SO, aplicaciones, etc...

<trukulo> llamada de procedimiento remoto )

<Macoa> bueno

<trukulo> de hecho

<Macoa> ya esta ;)

<trukulo> una cosa a comentar sobre las ventajas de xml

<Macoa> venga

<trukulo> es q aparte de poder ser multiplataforma facilmente

<trukulo> es multiaplicacion

<Macoa> claro

<trukulo> lo mismo da que se use Lyx, que Openoffice, q Wordf

<Macoa> por ejemplo

<trukulo> si leen XML los documentos son todos compatibles entre si

<Macoa> Word > 97 utiliza XML para generar las Tablas de contenidos

<Macoa> HP utiliza XML para definir el contenido de los archivos cab/zip de sus drivers

<trukulo> el docbook de linux se esta pasando ahora de sgml a xml

<Macoa> dmoz.org open directory utiliza XML para 'toda' la información

<Macoa> de hecho es descargable el documento

<Macoa> para bajarte el buscador a casa XD

<trukulo> y no solo eso

<trukulo> sino que MacOS X lo utiliza para TODAS (q yo sepa) sus configuraciones

<Macoa> se pueden definir lenguajes en XML que describen interfaces (qt-designer, mozilla, etc...)

<Macoa> bueno

<Macoa> trukulo:

<Macoa> creo que ya esta bien ;)

<trukulo> si, creo que por hoy es bastante

<Macoa> [00:22:23] <Macoa> Buenas noches tengan vds.

<Macoa> Me falta decir que los atributos XML van SIEMPRE “entrecomillados”

Trukulo

Manual