Una charla sobre XML que se produjo en un chat. Trata temas interesantes que pueden complementar otros contenidos.
Curso
sobre XML por Macoa, en el canal #dtd del IRC-Hispano
09-01-2002
<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