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.
Los siguientes ejemplos tienen por objeto demostrar cómo se pueden crear consultas SPARQL para buscar y recuperar información del grafo de conocimiento EURIO.
Empecemos con este sencillo ejemplo para obtener información más específica:
Buscar todos los títulos de proyectos
La palabra clave «PREFIX» asocia una etiqueta con el IRI que denota el espacio de nombres en el que se definen las entidades; en el ejemplo en curso, utilizamos los términos «Proyecto» y «título» que se definen en la ontología EURIO cuyo IRI es http://data.europa.eu/s66#.
La consulta consta de dos partes:
- la cláusula «SELECT» establece las variables que aparecerán en los resultados de la consulta. En nuestro ejemplo, «?project_title» contiene el valor del título de los proyectos solicitados (el nombre de las variables queda a elección del usuario).
- la cláusula «WHERE» proporciona el patrón del grafo que se comparará con el grafo de conocimiento EURIO. Nuestro ejemplo consta de dos patrones triples conjuntivos, es decir, dos patrones que deben coincidir, a saber:
- un patrón triple con la variable «?project», que se emplea para expresar que las entidades de proyecto solicitadas deben pertenecer a la clase «eurio:Project».
- un patrón triple que comienza con la variable «?project», donde la variable «?title» debe contener los títulos de estos proyectos
Ordenamos los resultados por título con la cláusula «ORDER BY», que debe colocarse después de la cláusula «WHERE».
Como esperamos que la lista resultante sea larga, utilizamos la cláusula «LIMIT» para mostrar solo cien resultados. Además, a efectos de demostración, omitimos los mil primeros resultados con la cláusula «OFFSET».
La consulta completa sería la siguiente:
PREFIX eurio: <http://data.europa.eu/s66#>
SELECT ?project_title
WHERE {
?project a eurio:Project .
?project eurio:title ?project_title .
}
ORDER BY ?project_title
LIMIT 100
OFFSET 1000
A partir del título de un proyecto, podríamos estar interesados en encontrar la siguiente información:
Buscar las fechas de inicio y finalización del proyecto «taRgeted thErapy for adVanced colorEctal canceR paTients»
Para ello, especificamos estas condiciones en la cláusula «WHERE»:
- Establecemos el valor del título del proyecto («eurio:title») para que sea la cadena de texto «taRgeted thErapy for adVanced colorEctal canceR paTients».
- La fecha de inicio del proyecto se almacena en la variable «?project_start_date».
- La fecha de finalización del proyecto se almacena en la variable «?project_end_date».
La consulta sería la siguiente:
PREFIX eurio: <http://data.europa.eu/s66#>
SELECT ?project_start_date ?project_end_date
WHERE {
?project eurio:title 'taRgeted thErapy for adVanced colorEctal canceR paTients'.
?project eurio:startDate ?project_start_date .
?project eurio:endDate ?project_end_date .
}
Podemos conocer más detalles del proyecto a partir de la consulta anterior con la siguiente:
Encontrar los participantes en el proyecto «taRgeted thErapy for adVanced colorEctal canceR paTients» y su función en el proyecto
Teniendo en cuenta la información que queremos obtener con la consulta, especificamos estas condiciones en la cláusula «WHERE»:
- Establecemos el valor del título del proyecto («eurio:title») para que sea la cadena de texto «taRgeted thErapy for adVanced colorEctal canceR paTients».
- La función de las organizaciones participantes en el proyecto se almacenan en la variable «?organisation_role».
- La etiqueta de la función de la organización se almacena en la variable «?role_label».
- La variable «?organisation» se refiere a los participantes asociados.
- La variable «?organisation_name» contiene la razón social de la organización.
- Además, el resultado se ordena alfabéticamente en función de «?organisation_name» con «ORDER BY DESC(?organisation_name)».
PREFIX eurio: <http://data.europa.eu/s66#>
SELECT ?organisation_name ?role_label
WHERE {
?project eurio:title 'taRgeted thErapy for adVanced colorEctal canceR paTients' .
?project eurio:hasInvolvedParty ?organisation_role .
?organisation_role eurio:roleLabel ?role_label .
?organisation_role eurio:isRoleOf ?organisation .
?organisation eurio:legalName ?organisation_name .
}
ORDER BY DESC(?organisation_name)
Dado que CORDIS contiene información sobre investigación, también podríamos aprovechar la taxonomía EuroSciVoc para filtrar nuestros resultados. EuroSciVoc es una taxonomía plurilingüe que representa los principales campos científicos de CORDIS y se utiliza para clasificar los datos. Contiene más de mil categorías en seis lenguas (alemán, español, francés, inglés, italiano y polaco) y cada categoría se enriquece con palabras clave relevantes extraídas de la descripción textual de los proyectos que aparecen en CORDIS.
Las dos consultas siguientes muestran cómo combinar la información obtenida a partir de ellas y utilizar EuroSciVoc para restringir los resultados al campo científico de la inteligencia artificial.
Obtener el título y las fechas de inicio y fin de todos los proyectos con organismos participantes de Grecia en el ámbito de la inteligencia artificial
Teniendo en cuenta la información que queremos obtener con la consulta, especificamos estas condiciones en la cláusula «WHERE»:
- Los proyectos deben clasificarse como «inteligencia artificial» en EuroSciVoc. Los encontramos a través de la etiqueta del término de EuroSciVoc («?euroSciVoc_label_value»), que establecemos como «artificial intelligence». También añadimos «@en» para asegurarnos de encontrar la etiqueta en inglés del término «inteligencia artificial».
- Para encontrar los proyectos en Grecia tenemos que encontrar las organizaciones implicadas (almacenadas en la variable «?organisation») y recuperar su país buscando la entidad «eurio:Country» cuyo «eurio:name» sea «Greece».
- El título del proyecto se almacena en la variable «?project_title».
- La fecha de inicio del proyecto se almacena en la variable «?project_start_date».
- La fecha de finalización del proyecto se almacena en la variable «?project_end_date».
La consulta SPARQL resultante sería la siguiente:
PREFIX eurio: <http://data.europa.eu/s66#>
PREFIX skos-xl: <http://www.w3.org/2008/05/skos-xl#>
SELECT DISTINCT ?project_title ?project_start_date ?project_end_date
WHERE {
?project eurio:title ?project_title .
?project eurio:startDate ?project_start_date .
?project eurio:endDate ?project_end_date .
?project eurio:hasEuroSciVocClassification ?euroSciVoc.
?euroSciVoc skos-xl:prefLabel ?euroSciVoc_label .
?euroSciVoc_label skos-xl:literalForm 'artificial intelligence'@en.
?role eurio:isInvolvedIn ?project .
?role eurio:isRoleOf ?organisation .
?organisation eurio:hasSite ?site .
?site eurio:hasGeographicalLocation ?country .
?country a eurio:Country;
eurio:name 'Greece' .
}
Recuperar los nombres de los participantes y su función para todos los proyectos con participantes de Grecia en el ámbito de la inteligencia artificial en Grecia
Teniendo en cuenta la información que queremos que nos devuelva, la consulta sería como la anterior, con las siguientes condiciones en la cláusula «WHERE»:
- Los proyectos deben clasificarse como «inteligencia artificial» en EuroSciVoc. Los encontramos a través de la etiqueta del término de EuroSciVoc («?euroSciVoc_label_value»), que establecemos como «artificial intelligence». También añadimos «@en» para asegurarnos de encontrar la etiqueta en inglés del término «inteligencia artificial».
- Para encontrar los proyectos en Grecia tenemos que encontrar las organizaciones implicadas (almacenadas en la variable «?organisation») y recuperar su país buscando la entidad «eurio:Country» cuyo «eurio:name» sea «Greece».
- El «eurio:hasInvolvedParty» del «?project» se almacena en la variable «?organisation_role».
- La «eurio:roleLabel» de la «?organisation_role» se almacena en la variable «?role».
- El «eurio:isRoleOf» de la «?organisation_role» se almacena en la variable «?organisation».
- El «eurio:legalName» de la «?organisation» se almacena en la variable «?organisation_name».
PREFIX eurio: <http://data.europa.eu/s66#>
PREFIX skos-xl: <http://www.w3.org/2008/05/skos-xl#>
SELECT ?project_title ?role ?organisation_name
WHERE {
?project eurio:hasEuroSciVocClassification ?euroSciVoc.
?euroSciVoc skos-xl:prefLabel ?euroSciVoc_label .
?euroSciVoc_label skos-xl:literalForm 'artificial intelligence'@en .
?project eurio:title ?project_title .
?project eurio:hasInvolvedParty ?organisation_role .
?organisation_role eurio:roleLabel ?role .
?organisation_role eurio:isRoleOf ?organisation .
?organisation eurio:legalName ?organisation_name .
?organisation eurio:hasSite ?site .
?site eurio:hasGeographicalLocation ?country .
?country a eurio:Country;
eurio:name 'Greece' .
}
ORDER BY DESC(?project_title)
Al examinar la repercusión del campo de la inteligencia artificial en Grecia, hay que tener en cuenta que CORDIS también contiene información sobre las publicaciones científicas de los proyectos, por lo que podríamos ampliar la consulta anterior:
Dada una organización, encontrar los proyectos relacionados en el campo de la inteligencia artificial y sus publicaciones
Teniendo en cuenta la información que queremos obtener con la consulta, especificamos estas condiciones en la cláusula «WHERE»:
- Los proyectos deben clasificarse como «inteligencia artificial» en EuroSciVoc. Los encontramos a través de la etiqueta del término de EuroSciVoc («?euroSciVoc_label_value»), que establecemos como «artificial intelligence». También añadimos «@en» para asegurarnos de encontrar la etiqueta en inglés del término «inteligencia artificial».
- Para encontrar la organización esperada, recuperamos la razón social de las organizaciones y la almacenamos en la variable «?organisation_name». A continuación, especificamos la organización con un filtro: «FILTER(str(?organisation_name) = “ETHNIKO KENTRO EREVNAS KAI TECHNOLOGIKIS ANAPTYXIS”)».
- La consulta almacena todos los proyectos relacionados con el campo científico de la inteligencia artificial en la variable «?project».
- A continuación, busca todas las funciones de la organización (las funciones se almacenan en la variable «?role»).
- Al mismo tiempo, comprueba cuáles de las funciones de la organización están asociadas a la organización introducida en la variable «?organisation».
- A partir de estas comprobaciones, infiere los proyectos asociados a la organización de entrada y almacena las publicaciones de los proyectos. Las publicaciones se almacenan en la variable «?result».
- La consulta devuelve: (i) el título del proyecto en el que participan («?project_title»), (ii) el título de la publicación («?publication_title»), (iii) sus autores («?authors»), (iv) su DOI («?doi»), y (v) su editor («?publisher»). Los resultados se ordenan por publicación y título del proyecto con «ORDER BY» «?publication ?project_title»
PREFIX eurio: <http://data.europa.eu/s66#>
PREFIX skos-xl: <http://www.w3.org/2008/05/skos-xl#>
SELECT ?project_title ?publication ?authors ?doi ?publisher
WHERE {
?organisation eurio:legalName ?organisation_name .
?role eurio:isRoleOf ?organisation .
?role eurio:isInvolvedIn ?project .
?project eurio:hasEuroSciVocClassification ?euroSciVoc .
?project eurio:title ?project_title .
?project eurio:hasResult ?result .
?result a eurio:ProjectPublication .
?euroSciVoc skos-xl:prefLabel ?euroSciVoc_label .
?euroSciVoc_label skos-xl:literalForm 'artificial intelligence'@en .
OPTIONAL { ?result eurio:title ?publication }
OPTIONAL { ?result eurio:doi ?doi }
OPTIONAL { ?result eurio:author ?authors }
OPTIONAL { ?result eurio:publisher ?publisher }
FILTER(str(?organisation_name) = 'ETHNIKO KENTRO EREVNAS KAI TECHNOLOGIKIS ANAPTYXIS')
}
ORDER BY ?publication ?project_title
Hasta ahora, hemos hablado de proyectos de inteligencia artificial en Grecia, pero podríamos estar interesados en saber cuánto se investiga sobre este tema a nivel europeo con la siguiente consulta:
Enumerar los diez primeros países por número de proyectos en el campo de la inteligencia artificial
Especificamos las condiciones en la cláusula «WHERE»:
- Los proyectos deben clasificarse como «inteligencia artificial» en EuroSciVoc. Los encontramos a través de la etiqueta del término de EuroSciVoc («?euroSciVoc_label_value»), que establecemos que sea «artificial intelligence». También añadimos «@en» para asegurarnos de encontrar la etiqueta en inglés del término «inteligencia artificial».
- La consulta almacena todos los proyectos relacionados con el campo científico de la inteligencia artificial en la variable «?project».
- A continuación, busca todos las funciones de la organización asociadas a los proyectos (las funciones se almacenan en la variable «?role»).
- Después, busca la organización asociada a las funciones de organización y los almacena en la variable «?organisation». Por último, la consulta busca los países en los que se encuentran las organizaciones y almacena sus nombres en la variable «?country_name».
- Los resultados se ordenan por número de proyectos en orden descendente con «ORDER BY DESC» («?total_projects_in_country») y «LIMIT» 10 para mostrar los diez primeros países.
PREFIX eurio: <http://data.europa.eu/s66#>
PREFIX skos-xl: <http://www.w3.org/2008/05/skos-xl#>
SELECT ?country_name (COUNT(?project) AS ?total_projects_in_country)
WHERE {
?project eurio:hasEuroSciVocClassification ?euroSciVoc.
?euroSciVoc skos-xl:prefLabel ?euroSciVoc_label .
?euroSciVoc_label skos-xl:literalForm 'artificial intelligence'@en .
?role eurio:isInvolvedIn ?project .
?role eurio:isRoleOf ?organisation .
?organisation eurio:hasSite ?site .
?site eurio:hasGeographicalLocation ?country .
?country a eurio:Country .
?country eurio:name ?country_name .
}
GROUP BY ?country_name
ORDER BY DESC (?total_projects_in_country)
LIMIT 10
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 combina información de EURIO y del EU Knowledge Graph, que contiene, entre otros, los proyectos Kohesio, que son proyectos financiados por la Unión Europea en el marco de la Política de Cohesión para el periodo de programación 2014-2020. Kohesio abarca los proyectos desarrollados en el marco de los programas operativos nacionales y regionales cofinanciados por el Fondo Europeo de Desarrollo Regional (FEDER), el Fondo de Cohesión (FC) y el Fondo Social Europeo (FSE), incluida, en su caso, la Iniciativa de Empleo Juvenil. Kohesio también incluye los proyectos de los programas de Cooperación Territorial Europea (también conocida como INTERREG).
Esta consulta permite al usuario:
Identificar tanto en CORDIS como en KOHESIO el número de proyectos, y su financiación, en los que participa una organización determinada
Especificamos las condiciones en la cláusula «WHERE»:
- Especificamos que el valor de la variable «?organisation_name» sea «UNIVERSIDAD CARLOS III DE MADRID».
- A continuación, busca todas las funciones de la organización relacionadas con los proyectos (almacenados en la variable «?role»), junto con la información sobre el importe máximo de la subvención (almacenada en «?grant_amount»), y también se asegura de que sean las de la «UNIVERSIDAD CARLOS III DE MADRID» con la variable «?organisation».
- Con «?grant_payment», la consulta examina las propiedades para llegar al importe de financiación, que se almacena en la variable «?funding_amount».
- A continuación, la consulta se realiza desde el punto final de Kohesio, basándose en el nombre de la organización de entrada del grafo de conocimiento de EURIO:
- el coste total de cada proyecto (almacenado en la variable «?total_budget»)
- la contribución de la UE (almacenada en «?eu_contribution»).
- La consulta devuelve: (i) el número total de proyectos en CORDIS («?_total_projects_cordis*»), (ii) el número total de proyectos en Kohesio («?_total_projects_kohesio*»), (iii) el coste total de cada proyecto (a través de «?total_budget»), y (iv) la contribución de la UE («?eu_contribution») para la organización dada. Para obtener los valores, utilizamos la función «SUM», que suma los valores de la expresión especificada.
PREFIX eurio:<http://data.europa.eu/s66#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX kohesio: <https://linkedopendata.eu/prop/direct/>
SELECT (COUNT(DISTINCT ?project_cordis) AS ?total_projects_cordis) (SUM(?funding_amount) AS ?total_funding_cordis)
(COUNT(DISTINCT ?project_kohesio) AS ?total_projects_kohesio) (SUM(?budget) AS ?total_budget_kohesio) (SUM(?eu_contribution) AS ?total_eu_contribution_kohesio)
WHERE {
?organisation eurio:legalName 'UNIVERSIDAD CARLOS III DE MADRID'.
?role eurio:isRoleOf ?organisation ;
eurio:isInvolvedIn ?project_cordis ;
eurio:isRecipientOf ?grant_amount .
?grant_amount eurio:hasPaymentAmount ?monetary_amount .
?monetary_amount eurio:value ?funding_amount .
SERVICE <https://query.linkedopendata.eu/sparql> {
?project_kohesio kohesio:P841 'UNIVERSIDAD CARLOS III DE MADRID' ;
kohesio:P474 ?budget ;
kohesio:P835 ?eu_contribution .
}
}
La siguiente consulta se basa en el concepto de «universidad pequeña», que la revista británica Times Higher Education, responsable de la clasificación anual Times Higher Education-QS World University Ranking define como «cualquier universidad con menos de cinco mil estudiantes». Dado que esta información no está en CORDIS, nos basamos en Wikidata, que es una base de conocimientos secundaria, de acceso abierto, colaborativa y plurilingüe, que recopila datos estructurados para proporcionar apoyo a Wikipedia, Wikimedia Commons, las demás wikis del movimiento Wikimedia y a cualquier persona del mundo.
Esta consulta permite al usuario:
ncontrar todas las universidades pequeñas y sus países, además del título e identificador de los proyectos en los que participan en el campo de la seguridad de los medicamentos
Especificamos las condiciones en la cláusula «WHERE»:
- Los proyectos deben clasificarse como «seguridad de los medicamentos» en EuroSciVoc. Los encontramos a través de la etiqueta del término de EuroSciVoc («?euroSciVoc_label_value»), que establecemos como «drug safety». Por último, añadimos «@en» para asegurarnos de encontrar la etiqueta en inglés del término «seguridad de los medicamentos».
- La consulta almacena todos los proyectos relacionados con el campo científico de la seguridad de los medicamentos, su título y sus identificadores de convenio de subvención en la variable «?project».
- A continuación, busca todos las funciones de la organización asociadas a los proyectos (las funciones se almacenan en la variable «?role»).
- Los nombres de las universidades se almacenan en la variable «?organisation_name», y el número de identificación a efectos del IVA en «?vat_number». Utilizamos el número de identificación a efectos del IVA de las universidades para que coincida con sus homólogos de Wikidata (ya que puede considerarse un valor de identificación único)
- Por último, la consulta busca los países en los que se encuentran las organizaciones y los almacena en la variable «?country_name».
- Además de encontrar las universidades, utilizamos el «?statement» Wikidata, que contiene tanto la información sobre el número de estudiantes («?students») como la fecha en la que se calculó este número («?time», que es otro «?statement» que contiene la fecha real en la variable «?date»).
- Dado que necesitamos conjuntos específicos de información, utilizamos dos funciones «FILTER»:
- La primera filtra todas las universidades con menos de cinco mil estudiantes
- La segunda utiliza la función «YEAR» sobre la variable «?date» para transformarla en un año, por ejemplo, de «1 de enero de 2022» a «2022», lo que unifica la forma de representar la fecha. Este filtro se establece a partir de 2020 para tener en cuenta la información reciente sobre la población estudiantil.
- La consulta devuelve: (i) el nombre de la universidad («?organisation_name»), (ii) el título del proyecto en los que participa («?project_title»), y (iii) su ID de acuerdo de subvención («?id»)
PREFIX eurio:<http://data.europa.eu/s66#>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX skos-xl: <http://www.w3.org/2008/05/skos-xl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX p: <http://www.wikidata.org/prop/>
PREFIX pqv: <http://www.wikidata.org/prop/qualifier/value/>
PREFIX ps: <http://www.wikidata.org/prop/statement/>
PREFIX wikibase: <http://wikiba.se/ontology#>
SELECT DISTINCT ?organisation_name ?project_title ?id
WHERE {
?role eurio:isRoleOf ?organisation .
?role eurio:isInvolvedIn ?project .
?project eurio:title ?project_title .
?project eurio:identifier ?id .
?project eurio:hasEuroSciVocClassification ?euroSciVoc.
?euroSciVoc skos-xl:prefLabel ?euroSciVoc_label .
?euroSciVoc_label skos-xl:literalForm 'drug safety'@en .
?organisation eurio:legalName ?organisation_name .
?organisation eurio:vatNumber ?vat_number.
?organisation eurio:hasSite ?site .
?site eurio:hasGeographicalLocation ?country .
?country a eurio:Country .
?country eurio:name ?country_name .
SERVICE <https://query.wikidata.org/sparql> {
?wikidata_org wdt:P3608 ?vat_number .
?wikidata_org p:P2196 ?statement.
?statement pqv:P585 ?time .
?statement ps:P2196 ?students .
?time wikibase:timeValue ?date .
FILTER (YEAR(?date) >= 2020)
FILTER(?students < 5000)
}
}
La siguiente consulta federada amplía la búsqueda con datos CELLAR. Cellar es el repositorio común de datos de la Oficina de Publicaciones de la Unión Europea. Las publicaciones digitales y los metadatos se almacenan y difunden a través de Cellar para su utilización por parte de personas y ordenadores. Con el objetivo de prestar un servicio transparente a los usuarios, Cellar almacena publicaciones y metadatos plurilingües. Todos los ciudadanos europeos pueden acceder a él y proporciona datos de lectura mecanizada.
Al ser el repositorio oficial de la Oficina de Publicaciones de la Unión Europea, CELLAR contiene varias tablas de autoridades, una de ellas es la de «países y territorios», que incluye información geopolítica adicional que no aparece en CORDIS.
Las tres consultas siguientes muestran cómo extraer tres informaciones cotejando los países y territorios de CELLAR con los países que aparecen en CORDIS mediante los códigos ISO 3166-1 alfa-2. Estos datos son:
- Continentes: la consulta utiliza el término «continente» para encontrar todos los participantes africanos en los proyectos, junto con el identificador y título de los mismos.
- Regiones geográficas: la consulta utiliza el geoesquema de las Naciones Unidas, que es una agrupación regional de países y territorios según el geoesquema de las Naciones Unidas, para encontrar todos los participantes en proyectos, así como la identificación y el título de estos, de la región geográfica de África occidental.
- Asociaciones internacionales: la consulta utiliza asociaciones internacionales como la «vecindad meridional» para encontrar a todos los participantes en proyectos, así como la identificación y el título de estos, pertenecientes a esta asociación concreta, que incluye a diez países socios: Argelia, Egipto, Israel, Jordania, Líbano, Libia, Marruecos, Palestina, Siria y Túnez.
Buscar proyectos con participantes de África
Especificamos las condiciones en la cláusula «WHERE»:
- Empezamos consultando la base de datos CELLAR, especificando el grafo http://publications.europa.eu/resource/authority/country para recuperar todos los países, que se identifican por su «skos:notation». Filtra el «?cellar_code» para garantizar que se ajusta al tipo de datos «ISO 3166-1 alpha-2».
- Dentro del bloque «SERVICE», comprueba si hay países de África, utilizando la propiedad «ogcgs:sfWithin» para vincular países específicos al «URI» del continente africano (http://publications.europa.eu/resource/authority/continent/AFRICA) que procede de la tabla de autoridades para «continentes».
- Para cada proyecto, la consulta recupera el título del proyecto (almacenado en «?project_title»), su identificador de acuerdo de subvención (almacenado en «?id») y la razón social de la organización asociada (almacenado en «?organisation_name»). También recopila información sobre la ubicación geográfica del sitio de la organización, que incluye el nombre del país (almacenado en «?country_name»).
- Además, la consulta vincula la representación de la cadena de código de Cellar con «?cordis_code» para identificar el país en la «dirección de la organización» que aparece en CORDIS.
- La consulta devuelve: (i) el título del proyecto en el que participan («?project_title»), (ii) su identificador de acuerdo de subvención («?id»), (iii) el nombre de la organización («?organisation_name»), y (iv) el país de la organización («?country_name»). Con «ORDER BY ASC (?country_name)», ordenamos el resultado alfabéticamente en orden ascendente en función del nombre del país.
PREFIX eurio:<http://data.europa.eu/s66#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX ogcgs: <http://www.opengis.net/ont/geosparql#>
SELECT ?project_title ?id ?organisation_name ?country_name
WHERE {
SERVICE <https://publications.europa.eu/webapi/rdf/sparql>
{GRAPH <http://publications.europa.eu/resource/authority/country>{
?s skos:notation ?cellar_code.
FILTER(datatype(?cellar_code)=<http://publications.europa.eu/ontology/euvoc#ISO_3166_1_ALPHA_2>)
?s ogcgs:sfWithin <http://publications.europa.eu/resource/authority/continent/AFRICA>
}
}
BIND(STR(?cellar_code) as ?cordis_code)
?project eurio:title ?project_title .
?project eurio:identifier ?id .
?project eurio:hasInvolvedParty ?participant .
?participant eurio:isRoleOf ?organisation .
?organisation eurio:legalName ?organisation_name .
?organisation eurio:hasSite ?site .
?site eurio:hasAddress ?address .
?address eurio:addressCountry ?cordis_code .
?site eurio:hasGeographicalLocation ?country .
?country a eurio:Country.
?country eurio:name ?country_name .
}
ORDER BY ASC(?country_name)
Buscar proyectos con participantes de África occidental
Esta consulta es la misma que la consulta anterior, con la única diferencia de la especificación del filtro geográfico en el bloque «SERVICE», ya que comprueba los países pertenecientes a la región geográfica de África occidental. Para ello, la consulta almacena el nombre de la región en la variable «?unsd_geoscheme» y la encuentra aplicando dos funciones «FILTER»:
- El primer filtro restringe la búsqueda al atributo «skos:notation» con datos de <http://publications.europa.eu/ontology/euvoc#UNSD_GEOSCHEME>
- El segundo filtro busca solo valores en la variable «?unsd_geoscheme» que coincidan con la cadena «Western Africa» utilizando la función «CONTAINS», que comprueba si la variable contiene la cadena especificada.
A continuación, encontrará la consulta completa:
PREFIX eurio:<http://data.europa.eu/s66#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?project_title ?id ?organisation_name ?country_name
WHERE {
SERVICE <https://publications.europa.eu/webapi/rdf/sparql> {
GRAPH <http://publications.europa.eu/resource/authority/country>{
?s skos:notation ?cellar_code.
FILTER(datatype(?cellar_code)=<http://publications.europa.eu/ontology/euvoc#ISO_3166_1_ALPHA_2>)
?s skos:notation ?unsd_geoscheme .
FILTER(datatype(?unsd_geoscheme)=<http://publications.europa.eu/ontology/euvoc#UNSD_GEOSCHEME>)
FILTER(CONTAINS(?unsd_geoscheme,'Western Africa'))
}
}
BIND(STR(?cellar_code) as ?cordis_code)
?project eurio:title ?project_title .
?project eurio:identifier ?id .
?project eurio:hasInvolvedParty ?participant .
?participant eurio:isRoleOf ?organisation .
?organisation eurio:hasSite ?site .
?organisation eurio:legalName ?organisation_name .
?site eurio:hasGeographicalLocation ?country .
?country a eurio:Country .
?country eurio:name ?country_name .
?site eurio:hasAddress ?address .
?address eurio:addressCountry ?cordis_code .
}
ORDER BY ASC(?country_name)
a name="european-neighbourhood-participants"> Encontrar proyectos que cuenten con participantes de países incluidos en la política europea de vecindad (zona meridional)
Esta consulta es idéntica a la anterior, con la única diferencia de la especificación del filtro geográfico en el bloque «SERVICE», ya que comprueba los países que pertenecen a la asociación de la vecindad meriodional. Para ello, almacena la relación entre el país y la vecindad meridional a través de la propiedad «org:hasMembership», que conduce al «URI» de la asociación a la que pertenece el país, es decir,http://publications.europa.eu/resource/authority/corporate-body/ENP-SOUTH.
A continuación, encontrará la consulta completa:
PREFIX eurio:<http://data.europa.eu/s66#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX org: <http://www.w3.org/ns/org#>
SELECT ?project_title ?id ?organisation_name ?country_name
WHERE {
SERVICE <https://publications.europa.eu/webapi/rdf/sparql> {
GRAPH <http://publications.europa.eu/resource/authority/country>{
?s skos:notation ?cellar_code.
FILTER(datatype(?cellar_code)=<http://publications.europa.eu/ontology/euvoc#ISO_3166_1_ALPHA_2>)
?s org:hasMembership ?international_partnership .
?international_partnership org:organization <http://publications.europa.eu/resource/authority/corporate-body/ENP-SOUTH>}
}
BIND(STR(?cellar_code) as ?cordis_code)
?project eurio:title ?project_title .
?project eurio:identifier ?id .
?project eurio:hasInvolvedParty ?participant .
?participant eurio:isRoleOf ?organisation .
?organisation eurio:legalName ?organisation_name .
?organisation eurio:hasSite ?site .
?site eurio:hasGeographicalLocation ?country .
?country a eurio:Country .
?country eurio:name ?country_name .
?site eurio:hasAddress ?address .
?address eurio:addressCountry ?cordis_code .
}
ORDER BY ASC(?country_name)
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.