SPARQL
Guide des données liées à CORDIS
Qu’est-ce que les données liées?
Les données liées (LOD pour «Linked Open Data») sont une combinaison de données liées et de données ouvertes. Les données liées font référence à des données lisibles par machine et partagées sur le web, tandis que les données ouvertes permettent d’utiliser et de distribuer librement les données.
Les données liées sont une méthode d’accès au web décentralisé de manière centralisée. Elles fournissent aux utilisateurs les moyens et les services nécessaires pour découvrir les informations les plus pertinentes et les plus exactes. En combinant les principes de conception des données liées avec des données structurées lisibles par machine, les LOD peuvent offrir des informations plus utiles, reliées à d’autres données pour une découverte plus approfondie.
Les principes FAIR (trouvable, accessible, interopérable, réutilisable) et le schéma de déploiement 5 étoiles pour les données ouvertes, tel que décrit par Tim Berners-Lee, garantissent que les données peuvent être librement partagées et distribuées sur le web.
Dans le cadre de Linked Open Data initiative, le format de description des ressources (FDR) est le principal langage et la principale technologie permettant d’exprimer et de publier des informations sur les données, ainsi que de les relier entre elles sur le web. Le FDR permet de structurer les données sous forme de triples sujet-prédicat-objet
Graphe de connaissances de l’EURIO
Un graphe de connaissances représente des entités du monde réel (par exemple, des projets, des organisations, des résultats de projets tels que des délivrables) ainsi que leurs relations (par exemple, la participation d’une organisation à un projet) et leurs attributs (par exemple, la date de lancement d’un projet ou le numéro de TVA d’une organisation) sous la forme d’un réseau interconnecté composé de nœuds et d’arêtes.
Les graphes de connaissances fournissent une représentation structurée et lisible par une machine des données, favorisant l’intégration, la liaison et la réutilisation des connaissances. Le graphe de connaissances EURIO utilise le paradigme de représentation des graphes de connaissances pour transformer les données CORDIS en données interconnectées lisibles par une machine.
Les données sont publiées sous la forme de triples format de description des ressources (FDR), conformément aux principes des données liées. La signification des entités décrites est formellement définie par l’ontologie européenne de recherche d’information (EURIO). Le graphe de connaissances EURIO qui en résulte est un réseau de triples FDR interconnectés qui encodent les données CORDIS d’origine. Il peut être interrogé à l’aide de SPARQL, le langage standardisé pour l’extraction et la manipulation de données au format FDR.
L’ontologie EURIO
Afin d’améliorer la visibilité, la réutilisation et l’accessibilité du contenu de CORDIS et de renforcer son interopérabilité sémantique, l’Office des publications de la Commission européenne a développé l’ontologie européenne de recherche d’information (EURIO). EURIO est un modèle conceptuel de données qui s’appuie sur un réseau d’ontologies existantes (par exemple, schema.org, DINGO, etc.) et de données de référence (par exemple, la taxonomie EuroSciVoc, la liste des codes NUTS, etc.). Elle permet de décrire, entre autres, les informations administratives associées aux projets de recherche et à leurs subventions, telles que les dates de lancement et de fin, le coût total et le financement reçu, les informations sur les organisations et les personnes impliquées, ainsi que les résultats produits par le projet, tels que la liste des auteurs, le titre et les informations sur la revue d’une publication.
EURIO utilise le langage d’ontologies web OWL 2 pour définir formellement la signification des termes du domaine utilisés pour décrire les entités CORDIS (par exemple, les projets, les organisations, etc.), leurs attributs (par exemple, le titre, l’acronyme, le nom légal, etc.) et les interrelations (par exemple, la relation entre un projet et les organisations participantes, etc.).
L’ontologie EURIO et sa documentation sont accessibles sur le site web des Vocabulaires de l’UE.
Utilisation de SPARQL pour interroger le graphe de connaissances EURIO
SPARQL est un langage de requête standard permettant d’extraire et de manipuler des données stockées au format FDR. Son développement et son évolution sont supervisés par le groupe de travail SPARQL au sein du W3C et il est entièrement documenté et accessible au public.
Les requêtes SPARQL sont basées sur la correspondance de motifs de graphes, c’est-à-dire la correspondance d’ensembles de motifs triples formant des conditions conjonctives (AND) ou disjonctives (OR). Les motifs triples sont semblables aux triples FDR, à ceci près que le sujet, le prédicat et l’objet peuvent être des variables. Un modèle de graphe de requête SPARQL donné correspond à un sous-graphe des données FDR interrogées lorsque des termes FDR de ce sous-graphe peuvent être substitués aux variables.
Les exemples ci-dessous visent à démontrer comment les requêtes SPARQL peuvent être construites pour rechercher et récupérer des informations dans le graphe de connaissances EURIO.
Prenons cet exemple simple pour commencer à obtenir des informations plus spécifiques:
Trouver tous les titres de projets
Le mot-clé PREFIX associe une étiquette à l’IRI de l’espace de noms où les entités sont définies; dans l’exemple en cours, nous utilisons les termes «Project» et «title» qui sont définis dans l’ontologie EURIO dont l’IRI est http://data.europa.eu/s66#.
La requête se compose de deux parties:
- la clause SELECT définit les variables devant apparaître dans les résultats de la requête. Dans notre exemple, ?project_title contient la valeur des titres des projets demandés (le nom des variables est laissé au choix de l’utilisateur).
- la clause WHERE fournit le modèle de graphe à comparer au graphe de connaissances EURIO. Notre exemple consiste en deux modèles de triplets conjonctifs, c’est-à-dire deux modèles qui doivent être appariés:
- un modèle de triplet avec la variable ?project utilisée pour exprimer que les entités de projet demandées doivent appartenir à la classe eurio:Project.
- un modèle de triplet qui commence par la variable ?project où la variable ?title doit contenir les titres de ces projets
Nous classons les résultats par titre à l’aide de la clause ORDER BY, qui doit être placée après la clause WHERE.
Comme nous nous attendons à ce que la liste obtenue soit longue, nous utilisons la clause LIMIT pour n’afficher que 100 résultats. En outre, à des fins de démonstration, nous ignorons les 1 000 premiers résultats à l’aide de la clause OFFSET.
La requête complète est la suivante:
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
En utilisant le titre d’un projet, nous pourrions être intéressés par les informations suivantes:
Trouver les dates de début et de fin du projet «taRgeted thErapy for adVanced colorEctal canceR paTients»
À cette fin, nous spécifions ces conditions dans la clause WHERE:
- Nous avons défini le titre du projet (eurio:title) comme étant la chaîne de caractères «taRgeted thErapy for adVanced colorEctal canceR paTients».
- La date de début du projet est stockée dans la variable ?project_start_date.
- La date de fin du projet est stockée dans la variable ?project_end_date.
La requête est la suivante:
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 .
}
Nous pouvons examiner plus attentivement le projet de la requête précédente avec celle-ci:
Trouver les participants du projet «taRgeted thErapy for adVanced colorEctal canceR paTients» et leur rôle dans le cadre du projet
Compte tenu des informations que nous voulons obtenir, nous spécifions ces conditions dans la clause WHERE:
- Nous avons défini le titre du projet (eurio:title) comme étant la chaîne de caractères «taRgeted thErapy for adVanced colorEctal canceR paTients».
- Les rôles des organisations impliquées dans le projet sont stockés dans la variable ?organisation_role.
- L’étiquette du rôle de l’organisation est stockée dans la variable ?role_label.
- La variable ?organisation fait référence aux participants associés.
- La variable ?organisation_name contient les noms légaux des organisations.
- De plus, le résultat est trié par ordre alphabétique sur la base de la variable ?organisation_name en utilisant 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)
Étant donné que CORDIS contient des informations sur la recherche, nous pourrions également exploiter la taxonomie EuroSciVoc pour filtrer nos résultats. EuroSciVoc est une taxonomie multilingue qui représente tous les principaux domaines scientifiques couverts par CORDIS et qui est utilisée pour classer les données. Elle contient plus de 1 000 catégories en six langues (anglais, français, allemand, italien, polonais et espagnol), et chaque catégorie est enrichie de mots-clés pertinents extraits de la description textuelle des projets CORDIS.
Les deux requêtes suivantes montrent comment combiner les informations obtenues et utiliser EuroSciVoc pour restreindre les résultats au domaine scientifique de l’intelligence artificielle.
Retrouver le titre et les dates de début et de fin de tous les projets ayant des participants en Grèce dans le domaine de l’intelligence artificielle
Compte tenu des informations que nous voulons obtenir, nous spécifions ces conditions dans la clause WHERE:
- Les projets doivent être classés dans la catégorie «intelligence artificielle» d’EuroSciVoc. Nous les trouvons grâce à l’étiquette du concept EuroSciVoc (?euroSciVoc_label_value), que nous avons définie comme étant «artificial intelligence». Nous ajoutons également «@en» pour nous assurer de trouver l’étiquette anglaise du concept d’intelligence artificielle.
- Pour trouver les projets en Grèce, nous devons trouver les organisations impliquées (stockées dans la variable ?organisation) et retrouver leur pays en recherchant l’entité eurio:Country dont l’eurio:name est «Greece».
- Le titre du projet est stocké dans la variable *?project_title_.
- La date de début du projet est stockée dans la variable ?project_start_date.
- La date de fin du projet est stockée dans la variable ?project_end_date.
La requête SPARQL qui en résulte est la suivante:
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' .
}
Retrouver les noms des participants et leur rôle pour tous les projets ayant des participants en Grèce dans le domaine de l’intelligence artificielle
Compte tenu des informations que nous voulons obtenir, la requête est identique à la précédente, avec les conditions suivantes dans la clause WHERE:
- Les projets doivent être classés dans la catégorie «intelligence artificielle» d’EuroSciVoc. Nous les trouvons grâce à l’étiquette du concept EuroSciVoc (?euroSciVoc_label_value), que nous avons définie comme étant «artificial intelligence». Nous ajoutons également «@en» pour nous assurer de trouver l’étiquette anglaise du concept d’intelligence artificielle.
- Pour trouver les projets en Grèce, nous devons trouver les organisations impliquées (stockées dans la variable ?organisation) et retrouver leur pays en recherchant l’entité eurio:Country dont l’eurio:name est «Greece».
- L’eurio:hasInvolvedParty de la variable ?project est stocké dans la variable ?organisation_role
- L’eurio:roleLabel de la variable ?organisation_role est stocké dans la variable ?role
- L’eurio:isRoleOf de la variable ?organisation_role est stocké dans la variable ?organisation
- L’eurio:legalName de la variable ?organisation est stocké dans 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)
En examinant l’impact du domaine de l’intelligence artificielle en Grèce, il faut savoir que CORDIS contient également des informations sur les publications scientifiques des projets, ce qui nous permet d’étendre la requête précédente:
À partir d’une organisation, trouver les projets connexes dans le domaine de l’intelligence artificielle et leurs publications
Compte tenu des informations que nous voulons obtenir, nous spécifions ces conditions dans la clause WHERE:
- Les projets doivent être classés dans la catégorie «intelligence artificielle» d’EuroSciVoc. Nous les trouvons grâce à l’étiquette du concept EuroSciVoc (?euroSciVoc_label_value), que nous avons définie comme étant «artificial intelligence». Nous ajoutons également «@en» pour nous assurer de trouver l’étiquette anglaise du concept d’intelligence artificielle.
- Afin de trouver l’organisation attendue, nous récupérons les noms légaux des organisations et les stockons dans la variable ?organisation_name. Ensuite, nous spécifions l’organisation à l’aide d’un filtre: FILTER(str(?organisation_name) = 'ETHNIKO KENTRO EREVNAS KAI TECHNOLOGIKIS ANAPTYXIS').
- La requête stocke tous les projets liés au domaine scientifique de l’intelligence artificielle dans la variable ?project.
- Ensuite, elle trouve tous les rôles associés de l’organisation (les rôles sont stockés dans la variable ?role).
- Parallèlement, elle vérifie quels rôles de l’organisation sont associés à l’organisation indiquée comme entrée dans la variable ?organisation.
- Sur la base de ces vérifications, elle déduit les projets qui sont associés à l’organisation d’entrée, et elle stocke les publications des projets. Les publications sont stockées dans la variable ?result.
- La requête renvoie: (i) le titre du projet auquel elle participe (?project_title), (ii) le titre de la publication (?publication_title), (iii) son ou ses auteurs (?authors), (iv) son DOI (?doi), et (v) son éditeur (?publisher). Les résultats sont classés par publication et par titre de projet en utilisant 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
Jusqu’à présent, nous avons parlé de projets d’intelligence artificielle en Grèce. Nous pourrions donc nous intéresser au nombre de recherches menées sur ce sujet au niveau européen avec la requête suivante:
Énumérer les dix premiers pays par nombre de projets dans le domaine de l’intelligence artificielle
Nous spécifions les conditions dans la clause WHERE:
- Les projets doivent être classés dans la catégorie «intelligence artificielle» d’EuroSciVoc. Nous les trouvons grâce à l’étiquette du concept EuroSciVoc (?euroSciVoc_label_value), que nous avons définie comme étant «artificial intelligence». Nous ajoutons également «@en» pour nous assurer de trouver l’étiquette anglaise du concept d’intelligence artificielle.
- La requête stocke tous les projets liés au domaine scientifique de l’intelligence artificielle dans la variable ?project.
- Ensuite, elle recherche tous les rôles de l’organisation qui sont associés aux projets (les rôles sont stockés dans la variable ?role).
- Ensuite, elle recherche les organisations liées aux rôles de l’organisation et les stocke dans la variable ?organisation. Enfin, la requête recherche les pays dans lesquels les organisations sont situées et stocke leurs noms dans la variable ?country_name.
- Les résultats sont triés par nombre de projets dans un ordre décroissant avec ORDER BY DESC (?total_projects_in_country) et LIMIT 10 pour afficher les dix premiers pays.
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
Les requêtes SELECT décrites ci-dessus comprennent l’une des formes de requête définies par SPARQL et qui permettent de spécifier et d’utiliser les solutions issues de la recherche de motifs pour former des ensembles de résultats ou des graphes FDR. Il s’agit de:
- SELECT, qui, comme indiqué ci-dessus, renvoie toutes les variables ou un sous-ensemble de variables liées à un modèle de requête.
- CONSTRUCT, qui renvoie un graphe FDR construit en substituant des variables dans un ensemble de modèles triples.
- ASK, qui renvoie une valeur booléenne indiquant si un modèle de requête correspond ou non.
- DESCRIBE, qui renvoie un graphe FDR décrivant les ressources trouvées.
Pour de plus amples informations sur l’utilisation des différents formulaires de requête, ainsi que pour obtenir une description complète des caractéristiques générales du langage de requête SPARQL, consultez la documentation officielle sur le langage de requête SPARQL 1.1.
Comment déclencher des requêtes fédérées?
Dans tous les exemples présentés ci-dessus, les requêtes ont été exécutées sur les données contenues dans le graphe de connaissances EURIO.
Cependant, avec le nombre croissant de services d’interrogation SPARQL (points de terminaison SPARQL) proposés par divers fournisseurs de données via la publication de leurs données en tant que données liées, la possibilité d’interroger conjointement ces ensembles de données distribuées LOD apparaît.
Pour ce faire, SPARQL utilise l’extension SERVICE. Cette extension permet d’acheminer une partie d’une requête vers un point de terminaison SPARQL particulier et de combiner les résultats renvoyés avec les résultats du reste de la requête.
La requête suivante combine les informations d’EURIO et de l’EU Knowledge Graph, qui contient, entre autres, les projets de Kohesio, qui sont des projets financés par l’Union européenne dans le cadre de la politique de cohésion pour la période de programmation 2014–2020. Kohesio couvre les projets développés dans le cadre des programmes opérationnels nationaux et régionaux cofinancés par le Fonds européen de développement régional (FEDER), le Fonds de cohésion (FC) et le Fonds social européen (FSE), y compris, le cas échéant, l’Initiative pour l’emploi des jeunes. Kohesio comprend également les projets des programmes de coopération territoriale européenne (également connus sous le nom d’INTERREG).
Cette requête permet à l’utilisateur de:
Identifier dans CORDIS et KOHESIO le nombre de projets auxquels une organisation donnée participe, ainsi que leur financement
Nous spécifions les conditions dans la clause WHERE:
- Nous spécifions que la valeur de la variable ?organisation_name est 'UNIVERSIDAD CARLOS III DE MADRID'.
- Elle recherche ensuite tous les rôles de l’organisation liés aux projets (stockés dans la variable ?role), ainsi que les informations relatives au montant maximal de la subvention (stockées dans ?grant_amount), et s’assure également qu’il s’agit bien de ceux de l’'UNIVERSIDAD CARLOS III DE MADRID' au moyen de la variable ?organisation.
- À partir de ?grant_payment, la requête parcourt les propriétés pour atteindre le montant du financement, que nous stockons dans la variable ?funding_amount.
- La requête demande ensuite au point de terminaison de Kohesio, sur la base du nom de l’organisation d’entrée dans le graphe de connaissances EURIO:
- le coût total pour chaque projet (stocké dans la variable ?total_budget)
- la contribution de l’UE (stockée dans la variable ?eu_contribution).
- La requête renvoie: (i) le nombre total de projets dans CORDIS (?total_projects_cordis), (ii) le nombre total de projets dans Kohesio (?total_projects_kohesio), (iii) le coût total pour chaque projet (via ?total_budget), et (iv) la contribution de l’UE (?eu_contribution) pour l’organisation donnée. Pour obtenir les valeurs, nous utilisons la fonction SUM, qui additionne les valeurs de l’expression spécifiée.
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 .
}
}
SPARQL CORDIS
La requête suivante est basée sur la notion de «petite université», que le Times Higher Education, un magazine britannique responsable du classement annuel des universités du monde (Times Higher Education–QS World University Ranking) définit comme une université comptant moins de 5 000 étudiants. Ces informations n’étant pas présentes dans CORDIS, nous nous appuyons sur Wikidata, qui est une base de connaissances secondaire, libre, collaborative et multilingue, collectant des données structurées pour soutenir Wikipédia, Wikimedia Commons, les autres wikis du mouvement Wikimedia, et toute autre personne dans le monde.
Cette requête permet à l’utilisateur de:
Trouver toutes les petites universités et leur pays, ainsi que le titre et l’identifiant des projets auxquels elles participent dans le domaine de la sécurité des médicaments
Nous spécifions les conditions dans la clause WHERE:
- Les projets doivent être classés dans la catégorie «sécurité des médicaments» d’EuroSciVoc. Nous les trouvons grâce à l’étiquette du concept EuroSciVoc (?euroSciVoc_label_value), que nous définissons comme «drug safety». Enfin, nous ajoutons «@en» pour nous assurer de trouver l’étiquette anglaise du concept de sécurité des médicaments.
- La requête stocke tous les projets liés au domaine scientifique de la sécurité des médicaments, leur titre et leur identifiant de convention de subvention dans la variable ?project.
- Ensuite, elle recherche tous les rôles de l’organisation qui sont associés aux projets (les rôles sont stockés dans la variable ?role).
- Les noms des universités sont stockés dans la variable ?organisation_name et le numéro de TVA dans la variable ?vat_number. Nous utilisons le numéro de TVA des universités pour les faire correspondre à leurs homologues de Wikidata (puisqu’il peut être considéré comme une valeur d’identification unique)
- Enfin, la requête recherche les pays dans lesquels les organisations sont situées et les stocke dans la variable ?country_name.
- Outre la recherche des universités, nous utilisons la ?statement Wikidata, qui contient à la fois l’information sur le nombre d’étudiants (?students) et la date à laquelle ce nombre a été calculé (?time, qui est une autre ?statement contenant la date réelle dans la variable ?date).
- Comme nous avons besoin d’ensembles d’informations spécifiques, nous utilisons deux fonctions FILTER:
- La première filtre toutes les universités comptant moins de 5 000 étudiants
- La seconde utilise la fonction YEAR sur la variable ?date pour la transformer en année, par exemple du «1er janvier 2022» à «2022», ce qui permet d’unifier la représentation de la date. Ce filtre est fixé à partir de 2020 pour tenir compte des informations récentes sur la population étudiante.
- La requête renvoie: (i) le nom de l’université (?organisation_name), (ii) le titre du projet auquel elle participe (?project_title), et (iii) son identifiant de convention de subvention (?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 requête fédérée suivante étend la recherche avec les données de CELLAR. Cellar est le référentiel de données commun de l’Office des publications de l’Union européenne. Les publications numériques et les métadonnées sont stockées et diffusées via Cellar, afin d’être utilisées par les humains et les machines. Destiné à servir les utilisateurs de manière transparente, Cellar stocke des publications et des métadonnées multilingues, il est ouvert à tous les citoyens de l’UE et fournit des données lisibles par machine.
En tant que référentiel officiel de l’Office des publications de l’Union européenne, CELLAR contient plusieurs tables d’autorité, l’une d’entre elles étant les pays et territoires, qui comprend des informations géopolitiques supplémentaires qui sont absentes de CORDIS.
Les trois requêtes suivantes vous montrent comment extraire trois informations en faisant correspondre les pays et territoires de CELLAR avec les pays de CORDIS via les codes ISO 3166-1 alpha-2. Ces informations sont les suivantes:
- Continents: la requête utilise la notion de continent pour trouver tous les participants africains à des projets, ainsi que leur identifiant et leur titre.
- Régions géographiques: la requête utilise le schéma géographique des Nations unies, qui est un regroupement régional de pays et de territoires selon le système du schéma géographique des Nations unies, pour trouver tous les participants à des projets, ainsi que leur identifiant et leur titre, dans la région géographique de l’Afrique de l’Ouest.
- Partenariats internationaux: la requête utilise les partenariats internationaux tels que le voisinage méridional pour trouver tous les participants aux projets, ainsi que leur identifiant et leur titre, appartenant à ce partenariat spécifique, qui comprend dix pays partenaires: l’Algérie, l’Égypte, Israël, la Jordanie, le Liban, la Libye, le Maroc, la Palestine, la Syrie et la Tunisie.
Trouver des projets dont les participants se trouvent en Afrique
Nous spécifions les conditions dans la clause WHERE:
- Nous commençons par interroger la base de données CELLAR, en spécifiant le graphe http://publications.europa.eu/resource/authority/country pour retrouver tous les pays, identifiés par leur skos:notation. Elle filtre le ?cellar_code pour s’assurer qu’il respecte le type de données ISO 3166-1 alpha-2.
- Dans le bloc SERVICE, elle recherche les pays d’Afrique, en utilisant la propriété ogcgs:sfWithin pour relier des pays spécifiques à l’URI du continent africain (http://publications.europa.eu/resource/authority/continent/AFRICA), qui provient de la table d’autorité pour les continents.
- Pour chaque projet, la requête récupère le titre du projet (stocké dans ?project_title), son identifiant de convention de subvention (stocké dans ?id) et le nom légal de l’organisation associée (stocké dans ?organisation_name). Elle recueille également des informations sur la situation géographique du site de l’organisation, y compris le nom du pays (stocké dans ?country_name).
- En outre, la requête lie la représentation sous forme de chaîne du code de Cellar à ?cordis_code pour identifier le pays dans l’adresse de l’organisation à partir de CORDIS.
- La requête renvoie: (i) le titre du projet auquel elle participe (?project_title), (ii) son identifiant de convention de subvention (?id), (iii) le nom de l’organisation (?organisation_name), et (iv) le pays de l’organisation (?country_name). En utilisant ORDER BY ASC (?country_name), nous classons les résultats par ordre alphabétique croissant sur la base du nom du pays.
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)
Trouver des projets dont les participants se trouvent en Afrique de l’Ouest
Cette requête est identique à la requête précédente, la seule différence se trouvant dans la spécification du filtre géographique dans le bloc SERVICE, étant donné qu’il vérifie les pays appartenant à la région géographique de l’Afrique de l’Ouest. Pour ce faire, la requête stocke le nom de la région dans la variable ?unsd_geoscheme et la trouve en appliquant deux fonctions FILTER:
- Le premier filtre restreint la recherche sur l’attribut skos:notation à celui dont le type de données est http://publications.europa.eu/ontology/euvoc#UNSD_GEOSCHEME
- Le deuxième filtre recherche uniquement les valeurs dans la variable ?unsd_geoscheme qui correspondent à la chaîne «Western Africa» à l’aide de la fonction CONTAINS, qui vérifie si la variable contient la chaîne spécifiée.
Par souci d’exhaustivité, vous trouverez ci-dessous la requête complète:
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)
Trouver des projets dont les participants se trouvent dans le voisinage méridional
Cette requête est identique à la requête précédente, la seule différence se trouvant dans la spécification du filtre géographique dans le bloc SERVICE, étant donné qu’il vérifie les pays appartenant au partenariat du voisinage méridional. Pour ce faire, elle stocke la relation entre le pays et le voisinage méridional via la propriété org:hasMembership, qui mène à l’URI du partenariat auquel le pays appartient, c’est-à-dire http://publications.europa.eu/resource/authority/corporate-body/ENP-SOUTH.
Par souci d’exhaustivité, vous trouverez ci-dessous la requête complète:
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)
Il convient de noter que les requêtes fédérées doivent être utilisées avec prudence afin d’éviter les requêtes excessives vers des points de terminaison SPARQL distants ainsi que les modèles de requête inefficaces, car ces deux éléments peuvent avoir un impact important sur le temps d’exécution de la requête, conduisant souvent à des interruptions de la requête et à l’impossibilité d’extraire un quelconque résultat. Compte tenu de cette situation et du fait qu’aucune garantie ne peut être fournie quant à la stabilité, la disponibilité et les performances des points de terminaison SPARQL externes, il est fortement recommandé d’opter pour des vidages de données locaux des graphes de connaissances (ou de leurs sous-graphes) d’intérêt et de s’appuyer sur des déploiements de requêtes fédérées basés localement.
Pour obtenir une vue d’ensemble des caractéristiques et des spécifications relatives à la prise en charge par SPARQL des requêtes fédérées, consultez la documentation Requête fédérée SPARQL 1.1.
Vidage de données
Le dernier vidage du graphe de connaissances EURIO peut être téléchargé à partir du portail européen de données, où vous pouvez également trouver des sous-graphes du graphe de connaissances EURIO. Ces sous-graphes donnent un aperçu des relations et des attributs les plus pertinents pour chacun des principaux types d’entités du graphe de connaissances EURIO et permettent un accès plus fin à son contenu. Les sous-graphes sont publiés en tant que graphes nommés distincts, c’est-à-dire en tant que sous-ensembles du graphe de connaissances EURIO, chacun ayant sa propre étiquette.