XML de escoitar.org )))

Domingo 8 de abril de 2007, por Horacio González Diéguez.

Citar

González Diéguez, Horacio. XML de escoitar.org ))) [online]. Santiago de Compostela, España, VHPlab, abril de 2007 [versión de agosto de 2019] [Consultado el ]. Disponible en Internet: https://www.vhplab.net/spip.php?article4

Uno de los objetivos que nos hemos propuesto para el desarollo del plugin spipGis y de escoitar.org ))), es encontrar y utilizar un standard rss que permita contener la información necesaria para crear los marcadores en los mapas. La idea es establecer un sistema que permita compartir e intercambiar informacion en red de modo que los marcadores de un sitio se puedan leer en otro.

En una primera fase del desarrollo de escoitar.org ))) se partio del sistema para cargar marcadores de un documento xml externo, que proponia google en la documentación sobre su api y de un ejemplo sacado de Google Maps API Tutorial.

- Loading the data from an XML file (copia local)
- original XML marker structure (copia local)

// Read the data from example.xml
     var request = GXmlHttp.create();
     request.open("GET", "example.xml", true);
     request.onreadystatechange = function() {
       if (request.readyState == 4) {
         var xmlDoc = request.responseXML;
         // obtain the array of markers and loop through it
         var markers = xmlDoc.documentElement.getElementsByTagName("marker");
         
         for (var i = 0; i < markers.length; i++) {
           // obtain the attribues of each marker
           var lat = parseFloat(markers[i].getAttribute("lat"));
           var lng = parseFloat(markers[i].getAttribute("lng"));
           var point = new GLatLng(lat,lng);
           var html = markers[i].getAttribute("html");
           var label = markers[i].getAttribute("label");
           // create the marker
           var marker = createMarker(point,label,html);
           map.addOverlay(marker);
         }
         // put the assembled side_bar_html contents into the side_bar div
         document.getElementById("side_bar").innerHTML = side_bar_html;
       }
     }
     request.send(null);

*Este ejemplo se utilizó como referencia para crear la función myclick(), que sirve par abrir marcadores desde enlaces externos al mapa. Muestra el sistema que originalmente proponía google para cargar marcadores y el estandar que empleaba en los documentos xml.
Como se puede ver, google al principio proponía el uso de xmlhttprequest directamente par hacer la lectura del xml, almenos hasta la versión 2.6. Más tarde añadió una función propia como GDownloadUrl(); para hacerlo.

Durante esa primera fase del proyecto se trabajó con loudblog como base para crear la web. Nuestra intención era crear un plugin para loudblog que implementase las funciones del podcast permitiendo introducir en cada comentario que hieran los usuarios, datos geográficos (latitud, longitud).

Para generar el googleMap se definio una estructura xml que permitiera albergar la informacion necesaria para crear los marcadores del mapa. Se trató de utilizar el modelo fuera mas sencillo y mejor resolviera nuestras necesidades prescindiendo de usar un modelo estandarizado. Al principio se intentó introducir el contenido html de la ventana de cada marcador dento de una cadena CDATA pero no dió buen resultado. También se tomó como referencia la estructura de los documentos xml de Freesound Project Geotagging pero finalmente se optó por una estructura basada en los atributos de cada marcador para prescindir del uso de chilnodes (sonsGZ.xml).

Finalmente quedó así:
- xml de escoitar

errorXML

Sobretodo se encontaron dificultades con los acentos y caracteres especiales. Para contener el html de la ventana de cada marcador se creó un atributo llamado html dentro de la etiqueta <marker></marker> del documento xml. El problema fué, que al tratarse de un atributo, no podía contener dobles comillas, ni <, ni >, ni tampòco otros caracteres especiales como los acentos.

marker

Aun cuando loudblog se encargaba de convertir en html el contenido del atributo html mediante la función propia change_entities(), fué necesario utilizar la función php htmlspecialchars(), para sustituir < y > por &lt; y &gt;, o los &acute; por &acute;.

change_entities