Skip to main content
European Commission logo print header

SPARQL

Guía sobre los datos abiertos enlazados de CORDIS

¿Qué son los datos abiertos enlazados?

Los datos abiertos enlazados (LOD, por sus siglas en inglés) son una combinación de datos enlazados y datos abiertos. Los datos enlazados se refieren a los datos legibles por máquina que se comparten en la web, mientras que los datos abiertos permiten que los datos se utilicen y distribuyan libremente.

Los datos abiertos enlazados representan un método de acceso centralizado a la web descentralizada. Proporcionan a los usuarios los medios y servicios para descubrir la información más relevante y precisa. Al combinar los principios de diseño de datos enlazados con datos estructurados legibles por máquina, los LOD pueden ofrecer información más útil, interconectada con otros datos para más descubrimientos.

Los principios FAIR (localizables, accesibles, interoperables y reutilizables) y el esquema de desarrollo de cinco estrellas para datos abiertos descrito por Tim Berners-Lee garantizan que los datos puedan compartirse y distribuirse libremente en la web.

En el marco de la iniciativa sobre datos abiertos enlazados, el sistema de descripción de recursos (RDF, por sus siglas en inglés) es el principal lenguaje y tecnología para expresar y publicar información sobre datos, así como para interconectarlos en la web. El RDF permite estructurar los datos como triples sujeto-predicado-objeto.

El grafo de conocimiento de EURIO

Un grafo de conocimiento representa las entidades del mundo real (los proyectos, las organizaciones, los resultados de proyectos como los entregables, etc.) junto con sus relaciones (la participación de una organización en un proyecto, etc.) y los atributos (la fecha de inicio de un proyecto o el número de identificación a efectos del IVA de una organización, etc.) como una red interconectada que comprende nodos y aristas.

Los grafos de conocimiento ofrecen una representación de los datos estructurada y legible por máquina, lo que favorece la integración, vinculación y reutilización del conocimiento. El grafo de conocimiento de EURIO aprovecha el paradigma de representación de los grafos de conocimiento para transformar los datos de CORDIS en datos interrelacionados legibles por máquina.

Los datos se publican en forma de triples del sistema de descripción de recursos (RDF), siguiendo los principios de los datos abiertos enlazados. El significado de las entidades descritas está definido formalmente por la Ontología Europea de Investigación de la Información (EURIO). El grafo de conocimiento de EURIO obtenido es una red de triples de RDF interconectados que codifican los datos de CORDIS originales, y puede consultarse mediante SPARQL, que es el lenguaje normalizado para recuperar y manipular datos en formato RDF.

La ontología de EURIO

Para mejorar la visibilidad, reutilización y accesibilidad de los contenidos de CORDIS y potenciar su interoperabilidad semántica, la Oficina de Publicaciones de la Comisión Europea ha desarrollado la Ontología Europea de Investigación de la Información (EURIO). EURIO es un modelo conceptual de datos que se basa en una red de ontologías existentes (schema.org, DINGO, etc.) y datos de referencia (la taxonomía de EuroSciVoc, la lista de códigos de NUTS, etc.). Proporciona los medios para describir, entre otras cosas, la información administrativa asociada a los proyectos de investigación y sus subvenciones, como las fechas de inicio y finalización, el coste total y la financiación recibida, la información sobre las organizaciones y personas implicadas, así como los resultados obtenidos en el proyecto, como la lista de autores, el título y la información de la revista de una publicación.

En EURIO se utiliza el lenguaje de ontología web OWL 2 para definir formalmente el significado de los términos de dominio utilizados para describir las entidades de CORDIS (los proyectos, las organizaciones, etc.), sus atributos (el título, el acrónimo, el nombre legal, etc.) y sus interrelaciones (la relación entre un proyecto y las organizaciones participantes, etc.).

La ontología de EURIO y su documentación pueden consultarse en el sitio web de Vocabularios de la UE.

Utilizar SPARQL para consultar el grafo de conocimiento de EURIO

SPARQL es un lenguaje de consulta estándar para recuperar y manipular datos almacenados en formato RDF. Su desarrollo y evolución están supervisados por el grupo de trabajo de SPARQL del W3C y está totalmente documentado y a disposición del público.

Las consultas con SPARQL se basan en la correspondencia de patrones de grafos, es decir, la correspondencia de conjuntos de patrones triples que forman condiciones conjuntivas «(AND)» o disyuntivas «(OR)». Los patrones triples son como los triples en RDF, salvo que cada uno de los sujetos, predicados y objetos puede ser una variable. Un patrón de grafos de consulta SPARQL determinado coincide con un subgrafo de datos RDF consultados cuando los términos RDF de ese subgrafo pueden sustituirse por las variables.

Por ejemplo, la consulta con SPARQL para encontrar la fecha de inicio del proyecto H2020 «Knowledge-Based Information Agent with Social Competence and Human Interaction Capabilities» dado el grafo de conocimiento de EURIO sería:

PREFIX eurio:<http://data.europa.eu/s66#>
SELECT DISTINCT ?startDate
WHERE
{
  ?project a eurio:Project.
  ?project eurio:title "Knowledge-Based Information Agent with Social Competence and Human Interaction Capabilities" . 
  ?project eurio:startDate ?startDate .
}

Como se muestra, ejecutando esta consulta, utilizando en nuestro ejemplo la interfaz Virtuoso SPARQL, obtenemos la fecha de inicio del proyecto en cuestión, es decir, el 1 de marzo de 2015.

SPARQL Example One

La palabra clave «PREFIX» se utiliza para designar una etiqueta de prefijo (es decir, una abreviatura) a un IRI que denota ese espacio de nombres de los términos utilizados en la consulta; en el ejemplo en curso, utilizamos los términos «Project», «title» y «startDate», todos ellos definidos en la ontología EURIO cuyo IRI es http://data.europa.eu/s66#.

La consulta consta de dos partes:

  • la cláusula «SELECT» que identifica las variables que aparecerán en los resultados de la consulta, y que en nuestro ejemplo es la variable «(?startDate)» que representa el valor de la fecha de inicio solicitada;
  • la cláusula «WHERE» que proporciona el patrón gráfico que debe compararse con el grafo de conocimiento de EURIO, y que en nuestro ejemplo consiste en tres patrones triples conjuntivos, es decir, tres patrones que deben coincidir, a saber:
    • un patrón triple con la variable «(?project)» utilizada para expresar el proyecto referenciado,
    • un patrón triple que indica la información del título del proyecto referenciado,
    • un patrón triple que con la variable «(?startDate)» en la posición del objeto.

Además de expresar patrones triples, SPARQL proporciona varios operadores y construcciones que permiten, entre otras cosas, expresar patrones opcionales, filtrar los patrones triples coincidentes según alguna condición y agregar u ordenar los resultados recuperados.

Consideremos otra consulta sencilla, en la que esta vez queremos todos los proyectos contenidos en el grafo de conocimiento de EURIO junto con sus títulos. Así, utilizando la cláusula «SELECT», lo expresaremos de la siguiente manera: «SELECT ?project ?title», y utilizaremos la cláusula «WHERE» para especificar las condiciones que deben cumplirse, a saber, que la variable «(?project)» utilizada para denotar las entidades de proyecto solicitadas debe pertenecer a la clase eurio: el proyecto y que la variable «(?title)» debe denotar el valor del título de estas entidades de proyecto. La consulta resultante sería:

PREFIX eurio:<http://data.europa.eu/s66#>
SELECT ?project ?title
WHERE
{
  ?project a eurio:Project.
  ?project eurio:title ?title. 
}
ORDER BY ?title
LIMIT 100

El uso de la cláusula «ORDER BY» nos permite ordenar adicionalmente los resultados recuperados en función del orden alfabético de sus títulos.

La secuencia ascendente puede indicarse mediante el modificador «ASC()» o sin modificador, mientras que la descendente puede indicarse mediante el modificador «DESC()».

La consulta de ejemplo muestra también el uso de la cláusula «LIMIT», que nos permite establecer un límite superior en el número de resultados obtenidos; en este caso sólo se mostrarán los cien pares de proyectos y sus respectivos títulos.

Para demostrar el uso de otro operador común, «FILTER», continuemos con el ejemplo, suponiendo que estamos interesados en recuperar sólo aquellos proyectos cuya fecha de inicio esté comprendida entre 2021 y 2022 junto con sus respectivos títulos. La cláusula «SELECT» sigue siendo la misma que antes, ya que seguimos solicitando la misma información, es decir, los proyectos y sus títulos, pero hay que actualizar la cláusula «WHERE» con más patrones triples que reflejen la condición sobre su fecha de inicio. La consulta ampliada sería la siguiente.

PREFIX eurio:<http://data.europa.eu/s66#>
PREFIX xsd:<http://www.w3.org/2001/XMLSchema#>
<br />
SELECT ?project ?title ?startDate
WHERE
{
  ?project a eurio:Project.
  ?project eurio:title ?title. 
  ?project eurio:startDate ?startDate .
  FILTER ((?startDate >= "2021-01-01"^^xsd:date) && (?startDate<="2023-12-31"^^xsd:date))
}

Como se ilustra, con el operador «FILTER», podemos expresar la condición que debe cumplir la variable «(?startDate)», a saber, que debe ser posterior al «01-01-2021» y anterior al «31-12-2023», con los dos valores límite incluidos.

Las consultas «SELECT» descritas anteriormente comprenden una de las formas de consulta definidas por SPARQL y que permiten especificar y utilizar las soluciones de la concordancia de patrones para formar conjuntos de resultados o grafos RDF. Estos son:

  • SELECT, que, como se ha presentado anteriormente, devuelve todas, o un subconjunto de, las variables vinculadas en una coincidencia de patrón de consulta.
  • CONSTRUCT, que devuelve un grafo RDF construido mediante la sustitución de variables en un conjunto de plantillas de triples.
  • ASK, que devuelve un booleano que indica si un patrón de consulta coincide o no.
  • DESCRIBE, que devuelve un grafo RDF que describe los recursos encontrados.

Para más información sobre el uso de las diferentes formas de consulta, así como una descripción completa de las características generales del lenguaje de consulta SPARQL, se debe leer la documentación oficial del Lenguaje de consulta SPARQL 1.1.

¿Cómo activar las consultas federadas?

En todos los ejemplos presentados anteriormente, las consultas se ejecutaron sobre los datos contenidos en el grafo de conocimiento de EURIO.

Sin embargo, con el creciente número de servicios de consulta de SPARQL (puntos finales de SPARQL) por parte de varios proveedores de datos mediante la publicación de sus datos como datos abiertos enlazados, surge la oportunidad de consultar conjuntamente estos conjuntos de LOD distribuidos.

Para permitirlo, en SPARQL se utiliza la extensión «SERVICE». Esta extensión permite dirigir una parte de una consulta a un punto final de SPARQL concreto y combinar los resultados devueltos con los del resto de la consulta.

La siguiente consulta muestra un ejemplo de la sintaxis de consulta federada de SPARQL, en la que buscamos el índice de desarrollo humano (IDH) del país en el que se encuentra la organización «UNIVERSIDAD POMPEU FABRA», una de las organizaciones participantes en los proyectos financiados por la UE contenidos en el grafo de conocimiento de EURIO . Para obtener la información del IDH, necesitamos consultar conjuntamente el grafo de conocimiento de EURIO que contiene información sobre el país en el que se encuentra la organización dada, así como el grafo de conocimiento externo de DBpedia que contiene, entre otros, información relativa al IDH de un país.

PREFIX eurio:<http://data.europa.eu/s66#> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
<br />
SELECT  ?country ?name ?hdi
WHERE {  
   ?org a eurio:Organisation . 
   ?org eurio:legalName "UNIVERSIDAD POMPEU FABRA" . 
   ?org eurio:hasSite ?site .
   ?site eurio:hasGeographicalLocation ?location .
   ?location a eurio:Country .
   ?location eurio:name ?name . 
   SERVICE <http://dbpedia.org/sparql> {
        ?dbpedia_country a dbo:Country .
        ?dbpedia_country dbp:commonName ?dbname . 
        ?dbpedia_country dbp:hdi ?hdi. 
        FILTER (lang(?dbname) = "en") 
        FILTER (STR(?name) = STR(?dbname))
   } 
}

Como se ilustra, para ejecutar esta consulta debemos insertar una cláusula «SERVICE» dentro de la cláusula «WHERE» de nuestra consulta, seguida del IRI del punto final externo (http://dbpedia.org/sparql) y luego especificar los patrones triples aplicables, es decir, que estamos buscando un país en el grafo de conocimiento de DBpedia (la variable «?dbpedia_country») que tenga el mismo nombre que el país de la organización «UNIVERSIDAD POMPEU FABRA» del grafo de conocimiento de EURIO (es decir, que las variables «?name» y «?dbname» tengan el mismo valor), y para qué país, solicitamos su valor IDH haciendo uso de la respectiva propiedad de DBpedia («dbp:hdi»).

Cabe señalar que las consultas federadas se deben utilizar con precaución para evitar consultas excesivas a los puntos finales de SPARQL remotos, así como patrones de consulta ineficientes, ya que ambos pueden afectar gravemente el tiempo de ejecución de la consulta, lo que a menudo conduce a tiempos de espera de la consulta y a la imposibilidad de recuperar cualquier resultado. Ante esta situación, y dado que, además, no se puede ofrecer ninguna garantía sobre la estabilidad, disponibilidad y rendimiento de los puntos finales de SPARQL externos, se recomienda encarecidamente optar en su lugar por volcados de datos locales de los grafos de conocimiento (o sus subgrafos) de interés y confiar en despliegues de consultas federadas locales.

Para una descripción completa de las características y especificaciones pertinentes al soporte de consultas federadas de SPARQL, se debe consultar la documentación Consultas federadas de SPARQL 1.1.

Volcado de datos

El último volcado del grafo de conocimiento de EURIO puede descargarse del Portal europeo de datos, donde también encontrará subgrafos del grafo de conocimiento de EURIO. Estos subgrafos comprenden una instantánea más relevante y autocontenida de las relaciones y atributos pertinentes para cada uno de los principales tipos de entidades del grafo de conocimiento de EURIO y permiten un acceso más detallado a los contenidos del grafo de conocimiento de EURIO. Los subgrafos se publican como grafos con nombre distintos, es decir, como subconjuntos del grafo de conocimiento de EURIO, cada uno con su propia etiqueta distintiva.