XML Básico
Imparte: Carmen Lópen Martínez. Fecha: 18 de Marzo de 2003
| --> Estás hablando ahora en #gcubo | |
| --- Tópico para #gcubo es #gcubo | Usuarios y Desarrolladores de Granada de Software Libre | All your base are belong to us | Hoy, --- charla de XML a las 22:00 --- | |
| --- Tópico para #gcubo fijado por Pummel en Tue Mar 18 18:10:58 | |
| --- ChanServ da estatus de operador de canal a nauj27 | |
| --- malglam da estatus de operador de canal a Pummel | |
| nauj27 | wenas |
|---|---|
| <-- Pummel ha salido ("Terminando cliente") | |
| --> Pummel (~Pummel@185.Red-80-59-237.pooles.rima-tde.net) ha ingresado en #gcubo | |
| --- malglam da estatus de operador de canal a Pummel | |
| --- malglam da estatus de operador de canal a Pummel | |
| nauj27 | está ya esto organizao? |
| malglam | maj o menoj |
| malglam | :) |
| * bitland is back (gone 00:45:43) | |
| nauj27 | ok :) |
| MiguelQuiros | Mientras nadie dice otra cosa: No a la guerra |
| bitland | hola gente |
| Pummel | menuda tardecita que lleva el señor bigotini...su vieja....no lo soporto |
| malglam | es que se pone la ulcera a 100 cada vez que aparece |
| malglam | bueno, chicos... pues cuando querais empezamos |
| MiguelQuiros | Pos venga, que me aburro |
| malglam | pues empiezo... porque como estamos en familia no hacen falta presentaciones :) |
| malglam | pues... |
| malglam | XML significa eXtensible Markup Language |
| malglam | o lo que es lo mismo,Lenguaje Extensible de Etiquetas |
| malglam | Un lenguaje de etiquetas |
| malglam | es un mecanismo para definir estructuras en un documento |
| malglam | y Extensible significa que |
| malglam | proporciona un estandar para añadir marcas a un documento. |
| malglam | En resumen, XML es un lenguaje de marcas |
| malglam | para documentos que contienen información estructurada. |
| malglam | todo claro? |
| malglam | Vamos a empezar con un ejemplo: |
| Pummel | (las preguntas a mi, que se supone que soy el moderador de todo esto) |
| malglam | <?xml version="1.0" encoding="ISO-8859-1"?> |
| malglam | <libro> |
| malglam | <portada> |
| malglam | <titulo>La Cuarta Taifa</titulo> |
| malglam | <autor>Juan Julian Merelo Guervos</autor> |
| malglam | </portada> |
| malglam | <contenido> |
| malglam | <capitulo numero="1" titulo="De como una ciudad se acosto en el siglo XX, y se levanto en el XXI"> |
| malglam | Igual que todo el mundo recuerda dónde estaba y qué hacía |
| malglam | cuando el primer hombre puso el pie en Marte, |
| malglam | os sugiero que miréis a vuestro alrededor, |
| malglam | porque querréis recordar lo mismo cuando escuchéis lo que voy a deciros. |
| malglam | </capitulo> |
| malglam | </libro> |
| malglam | ese es un ejemplo de lo que podría ser un fichero xml |
| malglam | La primera línea del ejemplo sirve para especificar que lo que sigue es XML. |
| malglam | El encoding indica que el texto es Latin-1, o lo que es lo mismo, |
| malglam | podremos escribir ñ y acentos. |
| malglam | Luego nos encontramos unas cuantas etiquetas |
| malglam | que hemos definido para darle estructura al documento. |
| malglam | Por ejemplo <libro>, <portada>, <titulo> son etiquetas. |
| malglam | Las etiquetas tienen un nombre y se escriben entre los símbolos '<' y '>' |
| malglam | Las etiquetas obligatoriamente tienen una marca de principio y otra de fin. |
| malglam | </libro>, por ejemplo, es una marca de fin. |
| malglam | Lo que hay dentro es el contenido de la etiqueta. |
| malglam | Hay etiquetas que no tienen contenido y se les llama "vacias". |
| malglam | Una etiqueta vacia se puede escribir asi <etiqueta/> |
| malglam | <nauj27> pero en algunos casos las hay sin final no? |
| malglam | no entiendo lo de sin final |
| malglam | las etiquetas o son <etiqueta>...</etiqueta> |
| malglam | si tienen contenido |
| malglam | o <etiqueta/> si son vacias |
| malglam | <nauj27> ¿no es por ejemplo html un caso particular de xml? |
| Pummel | <nauj27> ok |
| malglam | si, pero es diferente el HTML estandar |
| malglam | y el que implementan los navegadores... |
| malglam | o el que entienden |
| malglam | Los nombres de las etiquetas no pueden tener los siguientes símbolos: |
| malglam | @,#,$,%,^,(,),+,?,=,/,*,; ni empezar por un número. |
| malglam | Si nos fijamos en la marca <capitulo> vemos que además del nombre de la marca (capitulo) |
| malglam | tiene dos atributos, que son numero y titulo. |
| malglam | Además de estos componentes, en un documento XML podemos encontrar entidades, |
| malglam | que sirven para introducir, en el contenido, los caracteres reservados. |
| malglam | Por ejemplo, "lt" define el caracter '<' |
| malglam | <nauj27> ¿Entonces te referias a que las etiquetas con contenido tienen de principio y de fin, pero no asi las vacias? |
| malglam | una etiqueta vacia es <br/> |
| malglam | pero en HTML no hace falta ponerlo |
| malglam | porque la version HTML compatible con XML es XHTML |
| malglam | que sí sigue el estándar de XML |
| malglam | si una etiqueta no tiene contenido, |
| malglam | como por ejemplo, <br/> se puede abreviar así |
| malglam | aunque también se puede poner <br><br/> |
| malglam | queda claro? |
| malglam | Pues como decíamos... |
| malglam | También podemos definir entidades propias, |
| malglam | por ejemplo, si usamos mucho en un documento |
| malglam | la frase "Organizacion de Naciones Unidas", |
| malglam | podemos definir la entidad 'onu' y |
| malglam | llamarla &onu; dentro del contenido. |
| malglam | La definición de las entidades se hace dentro del DTD. |
| malglam | <bitland> ¿y no se parece todo eso a latex, por ejemplo? |
| malglam | pues se parece en que usa marcas para darle formato al documento |
| malglam | pero sólo sirve para documentos |
| malglam | y xml sirve para más cosas... |
| malglam | por ejemplo, protocolos de comunicación. |
| malglam | Latex tiene un conjunto fijo de marcas |
| malglam | pero con XML se puede definir el lenguaje que quieras |
| malglam | es un metalenguaje |
| --> Brock (alpho@gate7130.ugr.es) ha ingresado en #gcubo | |
| malglam | Seguimos con el DTD |
| malglam | En el DTD (Document Type Definition o Definición del Tipo de Documento) |
| malglam | como su propio nombre indica, |
| malglam | se define el tipo o estructura del documento. |
| malglam | Es decir, se definen las marcas que se usaran y en qué orden, |
| malglam | los atributos y sus tipos y las entidades propias del documento. |
| malglam | Un DTD para el ejemplo anterior |
| malglam | <!ELEMENT libro (portada, contenido)> |
| malglam | <!ELEMENT portada (titulo, autor?)> |
| malglam | <!ELEMENT titulo (#PCDATA)> |
| malglam | <!ELEMENT autor (#PCDATA)> |
| malglam | <!ELEMENT contenido (#PCDATA | capitulo)+> |
| malglam | <!ELEMENT capitulo (#PCDATA)> |
| malglam | <!ATTLIST capitulo numero ID #REQUIRED titulo CDATA #IMPLIED> |
| malglam | <!ENTITY onu "Organizacion de Naciones Unidas"> |
| malglam | ese sería el DTD completo |
| malglam | En un DTD hay tres tipos de marcas: |
| malglam | ELEMENT: define las etiquetas, por ejemplo, |
| --> herzed (herzed@cliente-217217018150.uBRgrb01.supercable.es) ha ingresado en #gcubo | |
| malglam | la etiqueta libro tiene que contener, obligatoriamente, |
| malglam | una etiqueta portada y una contenido. |
| malglam | Una y exactamente una. |
| malglam | Sin embargo, portada tiene que tener una etiqueta titulo |
| malglam | y puede tener una etiqueta autor. Eso nos lo dice el símbolo '?' |
| malglam | Titulo está compuesto de caracteres |
| --- Pummel da estatus de operador de canal a herzed | |
| malglam | El símbolo + nos dice que tiene que ser un elemento o más |
| malglam | y el símbolo * nos dice que tiene que tener cero o más. |
| --- herzed elimina estatus de operador de chanal de bitland | |
| --- herzed elimina estatus de operador de chanal de enlavin | |
| malglam | La coma (,) nos indica secuencia |
| --- herzed elimina estatus de operador de chanal de nauj27 | |
| malglam | y el símbolo '|' nos indica uno y/u otro. |
| malglam | #PCDATA nos indica caracteres. |
| malglam | Resumiendo: |
| malglam | Si queremos tener una lista de elementos, los separamos con ',' |
| malglam | Si queremos que un elemento aparezca cero o una vez, '?' |
| malglam | Si queremos que un elemento aparezca una o más veces, '+' |
| malglam | Si queremos que un elemento aparezca cero o más veces, '*' |
| malglam | Si queremos que un elemento aparezca cero o más veces, '*' |
| malglam | Si queremos que un elemento sea vacio pondremos EMPTY |
| malglam | es fácil no? |
| --- herzed elimina estatus de operador de chanal de Crg | |
| --- herzed elimina estatus de operador de chanal de herzed | |
| malglam | Otra marca que aparece en el DTD es |
| malglam | ATTLIST: Define la lista de atributos de una etiqueta. |
| malglam | En este caso, la etiqueta 'capitulo' tiene dos atributos: |
| malglam | numero que es de tipo ID, |
| malglam | que nos dice que debe ser único para el documento, |
| malglam | y además es obligatorio, lo cual nos lo indica el #REQUIRED |
| malglam | titulo, es de tipo CDATA, es decir, texto. |
| malglam | En este caso, el atributo no es obligatorio, |
| malglam | lo cual nos lo indica el #IMPLIED. |
| malglam | Los tipos de los atributos pueden ser: |
| --- Pummel retira voz de MiguelQuiros | |
| malglam | ID el contenido es único para el documento. |
| malglam | CDATA el contenido es texto |
| malglam | hay más tipos de atributos, pero estos son los más usados |
| --> chafardix (~chafar@213-98-71-184.uc.nombres.ttd.es) ha ingresado en #gcubo | |
| malglam | La otra marca que nos queda es |
| malglam | ENTITY: Define una entidad, |
| malglam | en el ejemplo la entidad se llama 'onu' |
| malglam | y el contenido es "Organización de Naciones Unidas.". |
| malglam | En el documento XML la referenciaremos como &onu; |
| Pummel | ¿el DTD se define en el propio documento xml o en un fichero/URL aparte? |
| malglam | se puede hacer de las dos formas |
| malglam | ahora lo iba a contar ;) |
| malglam | Para decirle a un documento cual es su DTD asociado hay dos formas: |
| malglam | - Incluir en el fichero XML la siguiente línea: |
| malglam | <!DOCTYPE libro SYSTEM "fichero.dtd"> |
| malglam | De esta forma le indicamos que busque en el fichero "fichero.dtd" |
| malglam | la definición del documento. |
| malglam | - Incluir en el mismo fichero XML el DTD completo: |
| malglam | <!DOCTYPE libro [.....]> |
| malglam | Entre los corchetes iría todo la definición del DTD. |
| malglam | Un documento XML puede ser válido o bien formado. |
| malglam | Un documento es "bien formado" si sigue la sintaxis de XML. |
| malglam | Por definición, todo documento XML es bien formado, si no, no sería XML. |
| malglam | por ejemplo esto |
| malglam | <etiqueta1><etiqueta2></etiqueta1></etiqueta2> |
| malglam | no podría estar en un documento XML bien formado |
| malglam | es decir, las marcas tienen que estar correctamente anidadas |
| malglam | Un documento es "válido" si contiene un DTD |
| malglam | y además cumple las reglas que se especifican en ese DTD. |
| malglam | el ejemplo de arriba sería valido |
| malglam | porque cumple las reglas del DTD que hemos diseñado |
| malglam | alguna duda? |
| malglam | no? pues sigo |
| malglam | Una vez que tenemos el documento escrito,+ |
| malglam | vamos a ver la forma de acceder a esos datos desde un programa. |
| malglam | <bitland> ¿existe algún editor para XML? |
| malglam | existen muchos |
| malglam | basta buscar en google |
| malglam | vi y emacs tienen modos de sintaxis para xml |
| malglam | <herzed> si, una duda. El DTD es XML? |
| malglam | el DTD no es un documento XML |
| malglam | es un documento DTD |
| malglam | es una forma estandar de estructurar los documentos |
| malglam | La forma de acceder a los datos de XML desde un programa |
| malglam | es mediante las APIS |
| malglam | Existen básicamente dos tipos de APIs para leer los datos en XML |
| malglam | El API tipo SAX y el API tipo DOM. |
| malglam | La API DOM (Document Object Model -> Modelo de Objetos del Documento) |
| malglam | crea una estructura en árbol que representa al documento XML |
| malglam | y permite a la aplicación moverse por el árbol. |
| malglam | La API SAX (Simple API for XML -> API Simple para XML) |
| malglam | está basada en eventos, |
| malglam | es decir, te avisa cuando encuentra una marca determinada. |
| malglam | En general, este modelo no construye el árbol. |
| malglam | Las ventajas que tiene SAX sobre DOM es que consume menos recursos, |
| malglam | y puedes empezar a analizar el documento sin necesidad de tenerlo completo |
| malglam | Por eso se usa mucho en protocolos de comunicaciones, por ejemplo, en Jabber. |
| malglam | sin embargo, hay ocasiones en que es necesario usar una API de tipo DOM. |
| --> herzed_ (herzed@cliente-217217018150.uBRgrb01.supercable.es) ha ingresado en #gcubo | |
| malglam | Implementaciones de estas APIs son: |
| malglam | Para Python: http://pyxml.sourceforge.net/ |
| malglam | Implementa el modelo DOM y el SAX |
| malglam | Para Java: http://xml.apache.org/xerces2-j/index.html |
| malglam | También implementa las dos APIs y además hay versión para C++ |
| malglam | http://xml.apache.org/xerces-c/index.html |
| malglam | Y para C, una implementación muy usada del modelo SAX |
| malglam | http://expat.sourceforge.net/ |
| malglam | Para que veais que el XML se usa en la vida real, |
| malglam | <Pummel> ¿y puedes empezar a analizar el documento sin necesidad de tenerlo completo |
| <-- herzed_ (herzed@cliente-217217018150.uBRgrb01.supercable.es) ha salido de #gcubo | |
| malglam | con SAX si se puede empezar a analizar el documento antes de tenerlo completo |
| --> jaime (herzed@cliente-217217018150.uBRgrb01.supercable.es) ha ingresado en #gcubo | |
| --- ChanServ da estatus de operador de canal a jaime | |
| --- jaime elimina estatus de operador de chanal de jaime | |
| malglam | en sax la estructura del documento la has de mantener tu |
| malglam | al contrario que en dom |
| malglam | que se crea una estructura completa del documento en memoria |
| malglam | entendido? |
| Pummel | ok |
| malglam | pues seguimos con los ejemplos de la vida real: |
| malglam | - Galeon: usa un fichero XML para guardar los bookmarks. |
| malglam | - Trillian: (mensajeria en windows) -> Guarda los contactos en formato XML. |
| malglam | - Dia: Guarda la definición del diagrama o esquema usando XML |
| malglam | - Glade: Guarda la definición de la interfaz de usuario en XML |
| malglam | - Gnumeric: Guarda las hojas de cálculo en XML. |
| malglam | - Borland C++ y Delphi: Almacena los proyectos en XML |
| malglam | y así podríamos seguir toda la noche, pero por hoy, ya vale |
| malglam | como veis, a diferencia de latex, se usa para muchas cosas más |
| malglam | no sólo documentos |
| malglam | Para ampliar todo esto, lo mejor es irse a la página |
| malglam | http://www.xml.com |
| malglam | o a la página del w3c, |
| malglam | http://www.w3c.org/XML |
| malglam | También en gnome hispano hay una charla sobre esto: |
| malglam | http://www.es.gnome.org/eventos/charlairc-20011125-xml.php |
| malglam | Un tutorial en español |
| malglam | http://www.dat.etsit.upm.es/~abarbero/curso/xml/xmltutorial.html |
| malglam | y por supuesto, nuestro amigo google ;) |
| malglam | <MiguelQuiros> El formato nativo de OpenOffice es algo así como un XML comprimido, creo ¿no? |
| malglam | si |
| malglam | se basa en el formato de documento de StarOffice |
| malglam | pero en XML |
| malglam | Dia guarda los ficheros en XML comprido con gzip |
| malglam | <nauj27> Si yo quiero usar xml en mi aplicación ¿tengo que seguir la documentación de la api concreta que use para saber como hacerlo? |
| malglam | claro |
| malglam | a ver... |
| malglam | por ejemplo, usando un API de tipo SAX |
| malglam | la libreria implementa el parser de marcas XML |
| malglam | y notifica a la aplicación cuando aparece un evento |
| malglam | por ejemplo, marca que se abre o una marca que se cierra |
| malglam | y es la aplicación la que hace el trabajo sucio |
| malglam | <bitland> o sea, ¿que se ha convertido en un standar de facto en el software libre? |
| malglam | casi que si, porque es muy cómodo usar XML porque se puede editar con un simple editor de textos |
| malglam | <nauj27> ¿y el api que hace? lee el dtd y tiene unas instrucciones para acceder a los datos o algo asi? |
| malglam | hay APIs que ni usan el DTD |
| malglam | la librería notifica a la aplicación (es decir lo que tú estás programando) de los eventos que van apareciendo |
| malglam | en caso de SAX |
| malglam | si es DOM, se construye un árbol en memoria |
| malglam | y tienes una serie de funciones para navegar por las etiquetas |
| malglam | y por los atributos |
| malglam | se ha entendido así? |
| malglam | me apuntan por aquí que también sirve para guardar trozos de programas (serializados) |
| malglam | <bitland> ¿cada aplicación que usa XML usa su propio DTD, está ahí la diferencia entre un bookmark de galeon y un documento de texto de openoffice, por ejemplo? |
| malglam | pues cada uno puede definir su propio DTD según le convenga |
| malglam | pero luego hay DTDs estandar |
| malglam | por ejemplo XHTML, XMATH |
| malglam | SVG |
| malglam | no es XMATH, perdón, es MATHML |
| malglam | podemos ver el DTD como los planos para construir un edificio |
| malglam | y el XML es un edificio construido con esos planos |
| malglam | alguna pregunta más? |
| malglam | <bitland> ¿es una forma de escribir código para cualquier tipo de documento de cualquier aplicación? |
| malglam | es una forma para definir documentos estructurados |
| malglam | cómo los uses luego depende de tu imaginación |
| malglam | y tus necesidades |
| malglam | por ejemplo, lo puedes usar como fichero de configuración de aplicaciones |
| malglam | como base para construir textos |
| malglam | con un formato |
| malglam | <MiguelQuiros> Los programas propietarios (Word, para entendernos) saben algo de XML? ¿Pueden leer o escribir en alguna de sus variantes? |
| malglam | en las versiones nuevas sí lee XML |
| malglam | pero usa un DTD especial de Microsoft |
| malglam | por lo cual no lee cualquier XML |
| malglam | sólo el que sea valido para su DTD |
| malglam | <bitland> ¿el formato que adopte en aplicaciones wysiwyg depende de las etiquetas, del DTD o del programa? |
| malglam | a ver el formato que adopte en cualquier aplicacion |
| malglam | depende del DTD |
| malglam | que depende de lo que haya querido hacer el que lo haya diseñado |
| malglam | <MiguelQuiros> O sea, para que XML se pueda considerar un estandar debe utilizar un DTD estandar |
| malglam | XML es un estandar por sí mismo |
| malglam | y los lenguajes que yo he nombrado |
| malglam | son aplicaciones de XML |
| malglam | en el sentido genérico |
| malglam | XML solamente define cómo se escriben las marcas y se definen los diferentes elementos |
| malglam | para cada aplicación especifica de XML |
| malglam | (XHTML, RDF, MATHML, SVG, DIA...) |
| malglam | hay que definir un DTD donde se especifica las marcas válidas |
| malglam | y como se relacionan entre ellas |
| malglam | y además es necesario hacer un programa que gestione ese documento |
| malglam | más cosas |
| Pummel | alguna pregunta mas? |
| Pummel | o comentario? |
| <-- Brock (alpho@gate7130.ugr.es) ha salido de #gcubo | |
| malglam | pues eso es todo |
| Pummel | esta bien, pues, malglam, muchas gracias por la charla de esta noche, que a mas de uno seguro que nos ha aclarado muchas cosas :D |
| --- Pummel da voz a bitland | |
| --- Pummel da voz a chafardix | |
| --- Pummel da voz a Crg | |
| --- Pummel da voz a enlavin | |
| --- Pummel da voz a herzed | |
| --- Pummel da voz a jaime | |
| --- Pummel da voz a MiguelQuiros | |
| --- Pummel da voz a nauj27 | |
| malglam | ha sido un placer :) |
| nauj27 | plas plas plas plas :) |
| enlavin | plas plas plasplasplas |
| MiguelQuiros | Plas plas plas plas. Gracias y buenas noches |
| bitland | plasplasplasplasplasplas :9 |
| Pummel | plas plas plas plas plas plas |
| <-- MiguelQuiros ha salido ("Aplicación Saliendo") | |
| enlavin | mu shula la conferencia |
| Pummel | posi posi |
| nauj27 | muy bien malglam, ma gustao |
| malglam | jejeje pelotas :) |
| <-- chafardix ha salido ("[x]chat") | |
| enlavin | O : -) |
| malglam | espero que os haya servido de algo |
| Pummel | ahora ya me puedo enfrentar al SCORM : http://xml.coverpages.org/scorm.html, que me han encargao un seminario en el currele .... |
| Pummel | para definir "learning objects" |
| Pummel | mooola XD |





