18 de abril de 2010

XML. Ese gran desconocido.

Hace tiempo que estoy pensando en escribir algunos comentarios sobre ficheros con formatos XML. Nuestras rutas, la configuración del dispositivo, nuestro perfil, .... mucha de la información que gestionamos con nuestros GPS´s se escribe en XML. Siempre me frenaba el que es un tema que puede resultar árido, pero, por otra parte, conocer un poco sobre XML da la posibilidad de ver directamente los datos de las actividades que hacemos, sin que te los filtre ningún programa. Y esto abre nuevas posibilidades que pueden venir bien. Voy a intentarlo. Prometo hacerlo sin entrar en excesivos detalles. Primero con este comentario general. Luego en algún otro sobre los ficheros GPX y TCX. Vamos allá.

El origen: un problema que hay que solucionar.

Uno de los grandes problemas que surgen al intercambiar información, es que los distintos interlocutores que la consumen deben ser capaces de interpretar su contenido. Dicho en otras palabras, deben saber en que lenguaje está escrita esa información y ser capaces de entender ese lenguaje.

Habitualmente, los proveedores de programas y dispositivos utilizan lenguajes distintos para sus productos. Cada uno el suyo. Generando lo que se llama información "propietaria". Es decir, información que sólo ellos son capaces de entender y tratar. Esto, les protege frente al uso de sus productos por parte de otros, pero complica enormemente la vida a los usuarios, ya que no pueden intercambiar información generada por unos programas o dispositivos, con otros programas o dispositivos diferentes.

Para evitar esto, ya hace muchos años apareció algo llamado SGML (1986, Estandar ISO 8879). SGML significa "Standard Generalized Markup Language" y es un estándar que dice cómo hay que definir lenguajes para escribir documentos. La definición se hace en base a "etiquetas" ("marcas"), de forma que cuando alguien quiere escribir un documento de acuerdo a un lenguaje definido, va "etiquetando" el contenido con "etiquetas" conocidas que es capaz de interpretar cualquiera que conozca el significado de esas "etiquetas"".

De esta forma, si alguien genera información y quiere que la pueda consumir cualquiera, sólo tiene que definirse un lenguaje, publicarlo y escribir la información a compartir usando ese lenguaje.

Con esto, problema solucionado. La información ha pasado de ser "propietaria" a ser "pública" y de uso generalizado. Han nacido los estándares. Por ejemplo, el GPX.

Esto no hay quien lo entienda. ¿Puedes poner algún ejemplo conocido?

Bueno, no es corporativismo (yo soy fisiquillo), pero la implementación que con toda seguridad más repercusión ha tenido de definición de un lenguaje a partir de SGML se produjo en el CERN de Ginebra ("Organización Europea para la Investigación Nuclear") a finales de los 80. Fue Tim Berners-Lee, un físico contratado a principios de los 80 en el CERN, el que junto a su equipo diseñó e implementó en1989 un mecanismo para compartir facilmente información entre todos los que estaban allí currando.

El lenguaje se llamó HTML (HyperText Markup Language). También crearon el protocolo HTTP (HyperText Transfer Protocol), el sistema de localización de objetos en la web URL (Uniform Resource Locator) y, en definitiva, todo lo que luego se conoció como "World Wide Web"  o "WWW"(¿os suena?)

---------------------------------------------------
Nota: el CERN es un laboratorio europeo en el que trabajan muchos físicos españoles junto a sus colegas de otos paises. En él está ubicado uno de los mayores aceleradores de partículas del mundo. Cuenta con grandes éxitos como el descubrimiento de algunas de las partículas elementales. Su último hito (30 de marzo pasado) fue la colisión de haces de protones en el Gran Colisionador de Hadrones (LHC) a una energía de 7 TeV (teraelectronvoltios). Una energía sin precedentes en un acelerador de partículas, que recreó una situación similar a los instantes posteriores al Big Bang (teoría del origen del universo). Yo estaba un poco acongojado por si la recreaban de verdad y nos freían (al cabo de un centésimo de segundo aproximadamente tras la gran explosión que dio origen al Universo, que es el momento más primitivo del que podemos hablar con cierta seguridad, la temperatura era de unos cien mil millones de grados centígrados). Pero bueno, todo acabó bien.
----------------------------------------------------

Cuando alguien escribe en HTML, introduce una serie de "Etiquetas" ("Tags" en inglés) para indicar qué hay que hacer con el texto que se escribe y, de esta forma, que los consumidores del mismo sepan interpretarlo y tratarlo. Los principales consumidores de este tipo ed información, como no se os escapa, son los navegadores (Internet Explorer, Safari, Fire Fox, Chrome, ...). Yodos conocen las reglas con que se escribe HTML y son capaces de interpretar lo escrito de acuerdo a estas reglas para enseñarnos lo que vemos cuando nos conectamos a Internet.

Ejemplos:
  • Si quieres que un texto esté en "negrita", al inicio de la frase se usa la etiqueta "b" (las etiquetas se ponen siempre entre "<" y ">") y, al final de la frase, se indica con "/b" que debe dejarse ya de escribir en "negrita" (para los puristas del HTML ahora es recomedado usar "strong" y "/strong", pero, para un ejemplo, da igual)
  • Si quieres que desde un texto se navegue a otro, indicarás el inicio de ese texto con "a href=" y para indicar que se acaba el trozo desde el que se navega, lo indicarás con "/a"

las etiquetas "b", "/b", "a href =" y "/a"  forman parte del lenguaje conocido y cualquier programa (como los navegadores que ya dijimos) sabe interpretarlas y qué hacer con ellas.
 
¿Y XML?
 
XML es una simplificación de SGML es decir, no es realmente un lenguaje en particular, sino una manera de definir lenguajes para diferentes necesidades. Fundamentalmente está pensado como un definidor de lenguajes para el intercambio de información estructurada.
 
¿Y que tiene que ver esto con el GPS que yo uso?

La mayoría de los ficheros que usas con tu GPS están escritos usando un lenguaje definido con XML.

En ellos, las etiquetas indican cómo se llama una ruta, con qué programa se creó, cuando empiezan y acaban los datos de un punto de track, qué datos son (longitud, latitud, elevación, hora), ... Todo esto está "etiquetado" en el fichero, y es de ahí de donde toman la información los programas (SporTracks, Garmin Training Center, Mapsource, ...) para tratar tus actividades.

Ejemplo de parte de un fichero GPX

Acontinuación puedes ver los datos de un punto de track de un fichero GPX (he cambiado las "<" y ">" por "[" y "]" porque si no lo hiciera, como estás viendo este texto en un navegador, interpretaría el texto como marcas html y no lo verías bien):

[trkpt lat="39.4752883911133" lon="-0.366190165281296"]

[ele]17.441162109375[/ele]
[time]2010-01-10T09:02:06Z[/time]
[/trkpt]

Es el primer punto que grabó mi Forerrunner cuando corrí los 10K de Valencia el 10 de enero de este año.

Como podéis, ver se indica cuando comienzan los datos de 1 punto con su latitud y longitud  ([trkpt lat="39.4752883911133" lon="-0.366190165281296"]), la elevación ([ele]17.441162109375[/ele]), la fecha y hora en que se grabó ( [time]2010-01-10T09:02:06Z[/time] , y la marca de que se acaba la toma de datos para ese punto ( [/trkpt] ).

Ya acabo

Bueno, espero no haberme enrrollado mucho más allá de lo necesario. Espero también que, para los nuevos en estos temas, ahora sea más fácil  entender cómo se guardan los datos que graba su GPS.

En próximos artículos, aprovechando lo dicho aquí, comentaré cuestiones alrededor de los ficheros GPX y TCX. Empezaré por uno sencillito, sobre los "nombres de rutas".