Fundación CTIC

Reutilización de datos desde una aplicación Java


El uso de estándares abiertos para la publicación de datos permite que, sea cual sea la tecnología utilizada, se puedan crear de forma sencilla aplicaciones o mashups que aprovechen y combinen la información disponible. En posts anteriores hemos comentado los pasos a seguir para desarrollar una aplicación que se alimente de datos públicos, hoy vamos a ver como realizar esto utilizando la tecnología Java.

Descripción del ejemplo

Desarrollo de una aplicación web Java que liste los catálogos de datos públicos disponibles y genere un mapa señalando su localización. El listado de catálogos se obtendrá realizando una consulta a un SPARQL endpoint.

Tecnologías necesarias

  • Jena: Ofrece una API que permite trabajar y realizar consultas sobre modelos o grafos RDF.
  • ARQ: Entre otras cosas, su API permite realizar consultas a servicios SPARQL remotos.

Implementación

Paso 1: Se define la consulta SPARQL que devuelve el conjunto de datos que necesitamos y se ejecuta contra el SPARQL endpoint:


QueryExecution qe = QueryExecutionFactory.sparqlService(sparql_enpoint_uri, query);
ResultSet rs= qe.execSelect();

La consulta que se ha ejecutado es:

prefix ds: <http://data.fundacionctic.org/vocab/catalog/datasets#>
prefix  dcterms: <http://purl.org/dc/terms/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix foaf: <http://xmlns.com/foaf/0.1/>  
SELECT * FROM <http://data.fundacionctic.org/dataset-catalog>
WHERE {
 ?catalog a ds:Catalog;
 dcterms:spatial ?uriGeonames;
 dcterms:description ?description;
 rdfs:label ?name;
 foaf:homepage ?homepage.
 FILTER langMatches( lang(?name), 'es' )
 FILTER langMatches( lang(?description), 'es' )
}

Este es el SPARQL endpoint sobre el que se ha ejecutado la consulta.

Paso 2: Una vez obtenidos los datos se recorre el conjunto de resultados y para cada uno de ellos se recupera su nombre, descripción, URL de su homepage y el identificador del recurso de Geonames que indica su localización.

A continuación se obtienen los datos del recurso de Geonames para obtener los valores necesarios para la geolocalización:


Model m = ModelFactory.createDefaultModel();
m.read(uri_geonames_resource);
// creación de las propiedades para obtener la latitud y la longitud
Property lat = m.createProperty("http://www.w3.org/2003/01/geo/wgs84_pos#", "lat");
Property lon = m.createProperty("http://www.w3.org/2003/01/geo/wgs84_pos#", "long");
// obtención del valor de las propiedades
Resource geoName = m.getResource(uriResource);
lat= geoName.getProperty(lat);
lon= geoName.getProperty(lon);

Paso 3: Se muestra el listado de catálogos y se crea un mapa utilizando la API Javascript de GoogleMaps en el que se muestra su localización.


var map = new GMap2(document.getElementById("map"));
map.setCenter( new GLatLng(0,0), 1);
// para cada punto se genera un "marker"
var point= new GLatLng( lat, lon );
map.addOverlay(marker);

En estos tres sencillos pasos se ha implementado una aplicación que combina recursos remotos para obtener datos y genera una visualización en un mapa. Este es el resultado obtenido

, , , ,

Los Comentarios están cerrados