Fundación CTIC

Archivo categoría Técnica

Cómo publicar Linked Data

Cuando nuestra administración ya ha decidido que quiere publicar sus datos de forma abierta y semántica surge la pregunta: ¿Cómo publicamos Linked Data? Recordamos ahora brevemente los principios que deben cumplir nuestros datos para ser considerados Linked Data:

  • Nuestros recursos deben ser unívocamente identificables a través de su URI. Las URIs deben estar basadas en el esquema HTTP para hacer su gestión descentralizada y para hacer su acceso ubicuo a través de la web.
  • Los recursos deben ser descritos mediante RDF que es el modelo de datos de la web semántica. De entre las diferentes representaciones RDF, al menos la serialización oficial en XML, RDF/XML, debe estar disponible para cada recurso.
  • Para crear una auténtica web de datos es necesario que los datos estén enlazados. Nuestros recursos deben incluir referencias en forma de enlaces RDF a otras fuentes de datos y, en la medida de lo posible, deberían ser referenciados desde recursos externos.

En realidad,  los principios de la web de datos son muy parecidos a los de la web tradicional de páginas. Cuando a través de una URL devolvemos descripciones de recursos en RDF ya estamos publicando linked data.

Formas de publicación RDF

A la hora de crear las descripciones en RDF de nuestros recursos tenemos varias posibilidades dependiendo de las circunstancias.

Cuando los datos a publicar son pocos y se espera que no cambien mucho con el tiempo, la forma más práctica de generarlos es mediante un recurso o fichero estático. Un ejemplo típico de esta estrategia son los recursos FOAF (“foaf.rdf”) que son colgados en los sitios web.

Otra forma de realizar las descripciones es obtenerlas de documentos ya existentes no RDF. RDFa es el estándar del W3C que permite embeber RDF en páginas web. Mediante la especificación GRDDL es posible extraer información semántica de documentos XML mediante transformaciones XSL. Existen también otras utilidades “RDF-ificadoras” que transforman en semánticos datos disponibles en otros formatos como hojas excel.

Cuando el volumen de nuestros recursos es elevado no es útil mantener una serie de ficheros descriptores estáticos para cada uno. La forma de publicación más utilizada es generar los documentos RDF de forma dinámica cuando llega una petición para una URI concreta. El W3C ha creado la especificación SPARQL, que define un lenguaje de consultas para RDF. Típicamente, un servidor semántico hará público este punto de consultas a traves del protocolo HTTP. Cuando el servidor recibe una petición para la URI de un recurso concreto esta petición es transformada en una consulta SPARQL sobre los datos de ese recurso, que son devueltos al cliente serializados en RDF/XML.

Plataformas para la publicación

Una vez que hemos definido las descripciones de nuestros recursos, ¿cómo y dónde las colgamos? De nuevo las opciones son similares a cuando publicamos en la web tradicional.

Si tenemos entre manos un proyecto grande de publicación de recursos semánticos, por cuestiones de almacenamiento y escalabilidad la mejor opción pudiera ser recurrir a plataformas especializadas que ofrezcan este tipo de servicios. Sin duda en el futuro proliferarán este tipo de soluciones aunque en la actualidad organizaciones como Talis ya ofrecen una plataforma de esta naturaleza.

Si optamos por publicar y mantener nuestros datos en nuestro propio servidor también disponemos de otras tecnologías, a menudo open source. Dos diferentes opciones son almacenar nuestros datos en un formato nativo de tripletas RDF o bien generarlos dinámicamente en base a otros formatos. Por ejemplo, Virtuoso, que es un completo servidor con soporte para almacenar modelos RDF y publicación mediante protocolo SPARQL; D2R, utilidad que mapea y publica de forma semántica los datos de bases de datos relacionales existentes; o Pubby, herramienta que genera y gestiona las URIs de nuestros recursos cuando ya se dispone de un punto SPARQL con datos publicados.

Acciones a seguir

Una vez que nuestros recursos son deferenciables (accesibles) desde la web la “visibilidad” de nuestros datos dependerá del número de recursos externos que los referencien. Para ayudar a que nuestros recursos sean más fácilmente descubiertos existen, igual que en la web tradicional, servicios de registro de datos semánticos. Uno de ellos es Ping the Semantic Web. También es buena idea apuntar nuestros recursos en páginas web que actúan como directorios para humanos, como esta lista de servicios semánticos .

Próximamente en entradas de este blog ahondaremos en algunas de las cuestiones técnicas mencionadas con algunos ejemplos y casos de uso.

, , ,

1 Comentario

Publicamos los primeros datasets del sector público: la oferta de formación ocupacional

En Open Data @ CTIC hemos ido contando en las semanas anteriores algunas de las razones estratégicas para embarcarse en un proyecto de reutilización de datos del sector público, así como varios aspectos técnicos y no técnicos del camino a seguir que proponemos como el más adecuado. Hemos ofrecido una prueba de concepto de todo lo expuesto utilizando como modelo los catálogos de datos abiertos que varias administraciones han publicado a nivel mundial. Como os habréis podido imaginar, hay mucho más en lo que hemos estado trabajando, y por fin ha llegado el momento de hablar de ello.

Hemos modelado la oferta de formación ocupacional del Servicio Público de Empleo del Principado de Asturias. Se resume en tres datasets: las acciones formativas (o cursos), los centros donde se imparten dichos cursos, y las organizaciones que imparten dichos cursos. Éstos a su vez constituyen un super-dataset.

los tres datasets de la formacion ocupacional en el cubo de la web semántica

Hemos trabajado con una foto de los datos que tomamos en Julio de 2009. Te puedes descargar todos los datos en RDF/XML en bruto (como pedía Tim Berners-Lee con su Raw Data Now!). Pero hay más formatos, o como parece ser el estándar de facto:

Nombre Área Última Actualización Formatos
Formación Ocupacional 2009 Servicio Público de Empleo, Principado de Asturias 2009-07-24 RDF/XML
XML
HTML
JSON
Excel

Por supuesto, también tienes nuestro SPARQL endpoint para filtrar los datos a tu antojo y, si te preguntas como interpretarlos, está también disponible el vocabulario que hemos utilizado para modelar toda la oferta formativa.

Para acabar, por ahora, también hemos creado algunas visualizaciones de ejemplo, en las que puedes filtrar los datos visualmente y ver los resultados en un mapa, una línea de tiempo e incluso descargarte los cursos que te interesen a tu calendario (en formato iCal).

visualizaciones de los datos en mapa, línea de tiempo y calendario

visualizaciones de los datos en mapa, línea de tiempo y calendario

¿Quién da más? Nosotros. Hay mucho, mucho más que contar sobre estos datasets, y muchas más cosas en las que estamos trabajando intensivamente. Atentos a los próximos artículos.

, , , , ,

7 Comentarios

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

, , , ,

No hay Comentarios

Disponibles los catálogos de datasets del sector público en RDF

Ya se pueden consultar los catálogos de conjuntos de datos del sector público accesibles desde nuestro SPARQL endpoint. Todos los catálogos están definidos a través de vocabularios estándar como Dublin Core o FOAF y para la representación concreta de cada uno de ellos se utiliza una instancia de la clase http://data.fundacionctic.org/vocab/catalog/datasets#Catalog.

Para más información, consulta el esquema RDF del Vocabulario de Catálogos de Datasets.

Ejemplo de consulta SPARQL

Para visualizar las tripletas RDF de todos los catálogos disponibles, puede hacerse la siguiente llamada sobre el SPARQL endpoint:


prefix cat:<http://data.fundacionctic.org/vocab/catalog/datasets#>
select *
from <http://data.fundacionctic.org/dataset-catalog>
where
{
  ?sujeto a cat:Catalog;
        ?predicado ?objeto.
}

Tras hacer la consulta en el SPARQL endpoint, se obtendrían las tripletas de cada uno de los catálogos (en HTML).

Visualización de los catálogos

Estos resultados pueden ser tratados por cualquier aplicación para construir el catálogo según las necesidades específicas. Hemos construido un simple ejemplo donde se muestra un listado de todos los catálogos de datasets del sector público (en inglés) almacenados. Nótese que se genera instantáneamente haciendo llamadas a Geonames para enriquecer los resultados, por lo que tiene cierto tiempo de carga.

Si tienes constancia de algún catálogo de datasets de información del sector público que no esté incluido, envíanos un correo a opendata@fundacionctic.org y lo incluiremos en la base de datos.

, , , ,

No hay Comentarios

Catálogos de Datasets RISP en RDF

Un conjunto de datos o dataset es una colección de datos publicados, que están disponibles en formatos abiertos en la Web. Para que estos datasets puedan conectarse con otros, deberían tener sus datos identificados por direcciones Web únicas (URIs). Uno de los principales problemas en la reutilización de datos en formatos abiertos es la dificultad de encontrar esos datos que están publicados en algún lugar de la Web debido a la carencia de repositorios homogéneos de los conjuntos de datos (datasets) y la falta de actualización de los mismos.

Con un poco de experiencia es fácil llegar a los conjuntos de datos que se necesita, por ejemplo, navegando por los datasets de la nube de Linked Open Data, o explorando catálogos como el del wiki de SWEO del W3C.

Los índices de conjuntos de datos que expresan sus conjuntos de forma tabular (tipo data.gov) pueden considerarse la primera versión de presentación de esta información. Una versión 2.0 debería ser la publicación del propio catálogo mediante XML o RDF en un fichero descargable o, que se pudiesen consultar automáticamente, a través de interfaces tipo SPARQL endpoints, como se detalla en este post y posteriores.

Descripción de los catálogos en RDF

El descubrimiento y la utilización de los datasets existentes es bastante sencillo si se conoce donde buscarlos, pero ésto se complica si se pretende hacer de forma automática. Una solución a la automatización podría ser la definición de catálogos y de los conjuntos de datos en sí mediante tecnologías de la Web Semántica. Para ello se necesitaría modelar un vocabulario con RDF-Schema o en OWL y, posteriormente, describir los catálogos y sus detalles. Finalmente, tanto el vocabulario como las descripciones deberían ser publicadas para que cualquiera pudiera reutilizarlas o enriquecerlas.

El Vocabulario para conjuntos de datos enlazados (voID) es un vocabulario y conjunto de recomendaciones que facilita el descubrir y reutilizar conjuntos de datos de forma automática. Este vocabulario especifican clases como Dataset o propiedades, como numberOfTriples (número de tripletas especificadas en el dataset).

Para describir los catálogos se utilizan los vocabularios estándar (Dublin Core, FOAF, etc.), además de usar un vocabulario propio que, entre otros términos, contiene la clase Catalog, para representar a los Catálogos de conjuntos de datos. Para indicar que ciertos conjuntos de datos (void:Dataset) pertenecen al catálogo se puede especificar de la siguiente forma:

<Dataset> memberOf <Catalog>

Ejemplo de descripción de un Catálogo

Cada catálogo de datasets tiene una serie de información básica, como es su nombre, descripción, licencia o términos de uso de los datos, fecha de primera publicación, o la página de entrada donde se encuentra el índice de los datasets (o el endpoint de los servicios de sus APIs). A continuación se declara en notación N3 la definición del catálogo de San Francisco, EEUU.

Se declaran los espacios de nombres para que la representación sea más legible:


@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
@prefix dcterms: <http://purl.org/dc/terms/>.
@prefix cat: <http://data.fundacionctic.org/vocab/catalog/datasets#>.

Se describe el catálogo en sí:


<http://data.fundacionctic.org/dataset-catalog/datasf.org> a cat:Catalog ;
         dcterms:identifier "datasf.org" ;
         foaf:homepage <http://datasf.org> ;
         rdfs:label "Catálogo de la Ciudad y del Condado de San Francisco (EEUU)" ;
         dcterms:title "Catálogo de la Ciudad y del Condado de San Francisco (EEUU)" ;
         dcterms:description "Repositorio de datasets de la Ciudad y del Condado de San Francisco" ;
         dcterms:language "en" ;
         dcterms:issued "2009-08-19" ^^http://www.w3.org/2001/XMLSchema#date ;
         dcterms:license <http://datasf.org/page.php?page=TOU> ;
         dcterms:spatial <http://sws.geonames.org/5391997/> .

En breve publicaremos el listado de los catálogos de datasets, modelado en RDF y con su correspondiente endpoint SPARQL.

,

No hay Comentarios