Premio OKFN 2015
Archivo del sitio

Cursos y seminarios en los que participa OpenKratio

El Periodismo de Datos, aprovechando las oportunidades de la red

El grupo OpenKratio, en colaboración con EOI, celebra los días 9, 10 y 11 de Mayo un curso certificado de Periodismo de Datos, en la sede de EOI. Este proyecto pionero en Andalucía está dirigido a periodistas, investigadores de mercado,

Publicado en: Formación, Noticias Etiquetado con: , ,

¿cómo se puede incrementar la transparencia y la participación en los Ayuntamientos?

Como anunciaba hace unos días, el próximo miércoles participaré en la mesa redonda sobre “diferentes perspectivas de la transparencia y el oGov” de las “Jornadas Gobiernos Abiertos, herramientas para la transparencia y la participación” organizadas por la Diputación Provincial de … Sigue leyendo

Publicado en: Divulgación, Formación, Noticias Etiquetado con: , , , , , , , ,

Consumiendo #opendata y generando valor

Como se comento con anterioridad, la verdadera riqueza de introducir soluciones #opendata dentro de una organización consiste en la posibilidad de que los datos que se liberan pueden ser no solo consultados por los ciudadanos a través de la plataforma sobre la que se exponen, sino también consumidos desde otras plataformas o sistemas y pueden emplearse para generar valor añadido a la información que se expone desde el origen de los mismos.
En este caso vamos a ver como, a partir de los datos que hemos extraido y expuesto, desarrollar una solución de consumo de dichos datos. Para ello me he permitido reconfigurar la extracción de los datos que tenia previamente y he añadido una nueva consulta para obtener al conjunto de usuarios de yourtask (nuestro pequeño cajón desastre para cacharreo) que han informado sus datos de contacto. Concretamente:

1
2
3
4
5
6
7
$triplify[‘queries’]=array(
 ‘users’=>array(“SELECT p.id AS id, p.usuario AS ‘foaf:name’,
  CONCAT(m.direccion,’ ‘,m.codigopostal,’ ‘, m.localidad)
  as ‘foaf:based_near’ FROM usuarios p
  INNER JOIN miscelanea m ON (p.id=m.idusuario)”,
  “SELECT u.id AS id, u.usuario AS ‘foaf:name’ FROM usuarios u”,),
 );

Una vez hemos configurado esta extracción y comprobamos que efectivamente se esta exponiendo de forma correcta, pasamos a definir una pequeña aplicación que consume estos datos y genere valor añadido a los mismos. Concrétamente a modo de ejemplo supongamos que somos un proveedor que tenemos que realizar una ronda de visitas a nuestros clientes, y que nuestros clientes han publicado en su plataforma #opendata sus datos de contacto donde se incluye su dirección. Dada la ubicación de uno de mis clientes necesito una aplicación web que pueda consumir por ejemplo en mi dispositivo móvil que me proporcione una ruta a través de Google Maps para ir a ver a mi siguiente cliente. Vamos a suponer que la identificación de ambos clientes es un parametro que se proporciona a traves de la URL de acceso al servicio.
Planteado este supuesto, y suponiendo que la plataforma #opendata de mi cliente es yourtask, hemos decidido consumir los datos expuestos en formato JSON, de tal forma que hemos desarrollado la siguiente aplicación en PHP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
// Punto de acceso a los datos expuestos en JSON
$url = “http://yourtask.webcindario.com/yourtask/opendata/triplify/?t-output=json”;

// Accedemos al contenido del fichero JSON con los datos
$file = fopen($url, “r”);
$text = “”;
while ($t = fgets($file, 1024)){
$text .= $t;
}

// Procesamos el contenido
$finaltext1 = str_replace(‘http://yourtask.webcindario.com/yourtask/opendata/triplify/users/’,’users’,$text);
$finaltext2 = str_replace(‘http://xmlns.com/foaf/0.1/name’,’name’,$finaltext1);
$finaltext3 = str_replace(‘http://xmlns.com/foaf/0.1/based_near’,’based_near’,$finaltext2);

// Decodificamos el fichero JSON
$json = json_decode($finaltext3);

// Comprobamos que los parametros de URL se han introducido
if(isset($_GET[‘idorigen’]) && isset($_GET[‘iddestino’])){

// Obtenemos la direccion origen y destino
$origen = $json->$_GET[‘idorigen’]->based_near->value;
$destino = $json->$_GET[‘iddestino’]->based_near->value;

// Redireccion a Google Maps con los parametros deseados
echo “<body onload=”location.href= ‘http://maps.google.es/maps?f=d&source=s_d&saddr=”.$origen.”&daddr=”.$destino.”‘”></body>”;

}else{
echo ‘Error! no se han proporcionado origen y/o destino’;
exit;
}
?>

Como podemos observar, hemos accedido al punto de acceso de la información que queremos consumir a traves de la URL semantificada de la plataforma #opendata, he solicitado que la quiero consumir en formato JSON y he pasado a procesarlo a traves de las funciones JSON de PHP. Tras acceder al servicio vemos que el resultado es el deseado:

Podéis acceder a una demo de este servicio y comprobar que efectivamente los datos de origen y destino son correctos a traves de la siguiente consulta SPARQL
Como vemos, esto es solo un ejemplo de juguete, donde hemos podido ver como la semantificación de contenidos y apertura de los mismos posibilita el desarrollo de soluciones de terceros que generan valor añadido a los datos que se publican. Para ver más aplicaciones os recomiendo daros una vuelta por Desafio AbreDatos . Esta iniciativa fue celebrada en Abril del pasado año 2010 donde durante dos días se celebro un concurso de desarrollo de soluciones de consumo de datos públicos, algunas de ellas muy interesantes como infocarretera, para conocer el estado de las carreteras del Pais Vasco, o LosPresusDe, para ver la como se ha repartido la partida presupuestaria en un determinado municipio, o Sena2Info, para conocer un ranking de intervenciones en el senado. El listado completo de proyectos aqui.

Publicado en: Divulgación, Formación, Noticias Etiquetado con: , ,

Exponiendo datos

Tal y como comentaba en el anterior post, a la hora de decidir como exponer datos en un website corporativo suelen existir muchas alternativas: mostrar estos datos directamente en el propio sitio web en HTML estático o generado a través de una o varias consultas a una base de datos, subir documentos presentando esos datos estáticos disponibles para su descarga en distintos formatos, tanto propietarios como libres en el mejor de los casos, autogenerar estos documentos mediante herramientas de reporting, etc. Siguiendo con esas pautas, tu posición dentro del ranking The five-stars of Open Linked Data, sería como mucho de tres estrellas, lo que determina que publicas datos en tu website corporativo de forma estructurada y disponible en formatos abiertos.   
Para llegar a las cinco estrellas, necesitas introducir herramientas que te permitan la semantificación de tus contenidos. Es decir, aquellos que puedes identificar mediante URLs y que pueden enlazarse, consumirse, exponerse con otros datos y otras plataformas. Aqui Triplify vuelve a ayudarnos, ya que tal y como vimos, nos posibilita que la información extraida se pueda disponer en formatos RDF/n3 y JSON entre otros. 
Ahora hay que decidir como exponer estos datos. Al margen del diseño de la solución final, de como vaya a presentarse el catalogo de datos de una entidad, y del conjunto de datos que conforman ese catalogo, hay que proporcionar el listado de formatos disponible para cada uno de estos datos. Así pues vamos a volver a realizar un ejercicio práctico. En esta ocasión me he decidido a extraer y exponer el listado de usuarios activos de una aplicación propia de gestión de tareas denominada yourtask (uno de mis primeros proyectos web donde suelo cacharrear). Para ello he definido la siguiente configuración para extraer dichos datos:

1
2
3
4
$triplify[‘queries’]=array(
 ‘users’=>”SELECT u.id AS id, u.usuario AS ‘foaf:name’
   FROM usuarios u”,
);

Con esto como sabemos es suficiente para definir como se llevará a cabo la extracción de los datos deseados. Ahora vamos a definir en esta misma configuración como se expondrán dichos datos, para ello fundamentalmente nos pararemos en dos: LinkedDataDepth y license
LinkedDataDepth: Con este parámetro configuramos el nivel de la URL donde expondremos los datos, con tres posibles valores: 0 que identifica que la exposición vendra dada cuando se acceda a triplify/ en el servidor; 1 que identifica que la exposición vendra dada por un nivel más de profundidad sobre la URL anterior, en este caso para consultar usuarios triplify/users/; y 2 para acceder a una instancia concreta a traves de su URL, por ejemplo triplify/users/1/. Para nuestro ejemplo hemos decidido exponer todos los usuarios con el nivel de profundidad que se determina por defecto (0)

1
$triplify[‘LinkedDataDepth’]=’0′;

license:con este parametro especificamos con que licencia vamos a exponer nuestros datos en la web. Hay que decidir con el cliente que licencia desea. Para este ejemplo usare Creative Commons Attribution.

1
$triplify[‘license’]=’http://creativecommons.org/licenses/by/3.0/us/’;

Tras esto, ya solo nos falta decidir si queremos publicar nuestros datos en algún otro formato, por ejemplo: un listado de los usuarios que se proporcione en un fichero .csv y en pdf. Explicar cómo autogenerar estos listados esta fuera del proposito de este post, ya que no requiere de semantificación de contenidos y es algo habitual en las soluciones que existen hoy dia.
Finalmente, publicamos nuestro catalogo en una URL determinada. A continuación vamos a hacer uso de la plataforma de exposición de datos semánticos de Triplify para ver si efectivamente nuestros datos estan expuestos mediante la identificación de los mismos bajo una URL, requisito indispensable para disponer de las cinco estrellas.
En este caso hemos publicado nuestro catalogo de datos para yourtask, de tal forma que el listado de usuarios esta disponible en RDF/N3 y JSON. Vamos a ver si efectivamente hemos expuesto nuestros datos de forma semantica mediante la plataforma de exposición de Triplify. Para esto accedemos a la siguiente URL:
Una vez procesado el RDF vemos que efectivamente se muestran los datos de los usuarios de la plataforma. Para ver si estos datos son validos vamos a exponer consultas SPARQL sobre los mismos que probaremos mediante Rasqal. En este caso construimos la siguiente consulta SPARQL:

1
2
3
4
5
6
7
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT ?name
WHERE {
?x foaf:name ?name
}
ORDER BY ?name

Dándonos el resultado deseado. Con esto hemos concluido nuestra exposición de datos y hemos demostrado que efectivamente nuestra solución esta completamente preparada para poder ser consumida por terceros. Esto lo veremos en un próximo post.

Publicado en: Divulgación, Formación, Noticias Etiquetado con: , , , ,

¿Quieres participar?

En Facebook

En Twitter

En la lista de correo