Wikidata:MOOC/Course outline/Initiation aux requêtes

Prérequis edit

Avoir suivi le cours d'initiation aux bases de données, ou bien savoir ce qu'est une donnée (data), une base de données (database), un jeu de données (dataset) et un identifiant unique.

Durée estimée edit

Environ 30 minutes.

Avec ce cours, vous saurez edit

  • Pourquoi et comment interroger une base de données ou bien une base de connaissances comme Wikidata. Comprendre et interpréter les résultats de cette interrogation.

Interroger une base de données, à quoi ça sert ? edit

Vous connaissez certainement déjà Wikipédia et les articles encyclopédiques qu'elle contient. Vous avez peut-être même déjà consulté ces articles pour trouver des réponses aux questions que vous vous posez. Par exemples, des questions du type :

  • « Quand est né le roi Louis XIV ? »
  • « Qui a écrit Les Hirondelles de Kaboul ? »
  • « Dans quelle ville se trouve le Musée national des beaux-arts du Québec ? »

Ces questions ont un point commun : elles n'ont qu'une seule réponse juste, ou bien, qu'un nombre réduit de réponses justes possibles. La réponse se trouve facilement en cherchant « Louis XIV », « Les Hirondelles de Kaboul » et « Musée national des beaux-arts du Québec » dans un moteur de recherche sur internet, ou bien dans le moteur de recherche de Wikipédia, et en lisant les réponses écrites que le moteur de recherche affiche.

Par contre, les moteurs de recherche sur internet et le moteur de recherche de Wikipédia auront beaucoup de mal à fournir une réponse à vos interrogations si vous leur posez des questions de ce type :

  • « Quand sont nés les chats célèbres dont le nom est connu grâce à internet ? »
  • « Comment s'appellent les écrivaines nées en Tunisie dans les années 1960 ? »
  • « Dans quelles villes sont situées les rues qui portent le nom d'une personnalité ? »

Ces questions ont aussi un point commun : leur réponse n'est pas unique, elle demande de créer une liste. Et pour créer la bonne liste de réponses, quoi de mieux que d'interroger une base de données, ou une base de connaissances comme Wikidata ? Les bases de données, et les bases de connaissances qui en sont très proches, contiennent et organisent des millions, voire des milliards d'informations. Voilà le genre de liste que vous pouvez obtenir après avoir interrogé Wikidata :

 
Une partie de la réponse à la question « Dans quelles villes sont situées les rues qui portent le nom d'une personne célèbre ? ». La liste est beaucoup plus longue, vous n'en voyez ici qu'une partie.

En fonction de la base que vous interrogez et de la manière dont la liste de réponses est obtenue, ces listes ont plus ou moins d'options permettant de les organiser. Celle de l'exemple ci-dessus, tirée de Wikidata, permet d'ordonner les résultats par ordre croissant ou décroissant dans chaque colonne. Vous pouvez, par exemple, ordonner cette liste par nom de ville, ou bien par nom de rue. Exactement comme dans une feuille de tableur.

Reste à savoir comment obtenir ces listes de réponses ! Pour cela, il faut effectuer une requête auprès de la base de données ou de la base de connaissances.

Requête : kesaco ? edit

Le mot requête, vous le connaissez sans doutes déjà. Par exemple, dans certains films historiques et certaines séries, un sujet peut s’adresser à son roi ou à sa reine en lui formulant une requête sous la forme : « mon roi / ma reine je voudrais... ». Et les souverains ainsi sollicités accéderont, ou non, à la requête de leur sujet.


Bonne nouvelle : formuler une requête auprès d'une base de données est beaucoup, beaucoup moins risqué que de la formuler à des souverains !

La principale différence, c'est que lorsque vous demandez quelque chose à une base de données, il ne faut pas le lui demander dans votre langue habituelle. La base ne vous répondra pas non plus sous la forme de phrases prononcées ou écrites dans votre langue. Elle vous répondra sous la forme d'une liste de données organisées et structurées. Elle vous donnera un jeu de données organisé dans un tableau.

Une base de données ou une base de connaissances vous répondra toujours avec exactitude, et surtout elle vous donnera toujours ce que vous lui avez demandé, à la seule condition que vous ayez correctement formulé votre demande en rédigeant votre requête.

Qu'est-ce qu'un langage de requête ? edit

Pour formuler correctement votre demande à une base de données ou à une base de connaissances comme Wikidata, vous aurez besoin d'un langage créé spécifiquement pour cela. On appelle ce type de langage un langage de requête. En général, en informatique, un langage de requête est défini par opposition à un langage de programmation. Un langage de requête sert à interroger des bases de données ou des bases de connaissances, et un langage de programmation sert, entre autres, à créer et à structurer des sites web ou bien des jeux vidéo. Nous ne verrons pas les langages de programmation durant ce MOOC, mais uniquement le langage de requête qui permet d'interroger Wikidata.

Interroger une base de données ou une base de connaissances comme Wikidata implique toujours de savoir rédiger votre requête dans ce langage spécifique. On reconnaît un langage de requête car il comporte souvent les lettres QL dans son nom (QL est l'acronyme de Query Language en anglais, qui se traduit par « langage de requête » en français) : par exemple, vous trouvez ces lettres dans les noms SQL et SPARQL (pour consulter une liste de langages de requête plus complète, voyez w:fr:Catégorie:Langage de requête).

La syntaxe du langage de requête qui sert à interroger Wikidata, le SPARQL, sera abordée un peu plus tard. Voyons d'abord comment fonctionne un langage de requête !

Vidéo explicative edit

Durée : 5 min. Florian 'Poslovitch' Cuny7

  • Ne pas donner de détails relatifs à la syntaxe d'une requête à ce stade, juste détailler les étapes du requêtage : définir la question à poser à la BDD, la transcrire dans un langage de requête, interroger la base de données grâce à cette "traduction" dans le langage de requête, visualiser le résultat arrivant sous forme de tableau, interpréter ce résultat.
Texte de la légende
Séquence Contenu Effets Audio Temps
Ré-introduction Florian Face caméra, ton dynamique Sous-titrage fr. Bonjour à tous et toutes, c'est Florian. Vous savez maintenant ce qu'est une base de données et à quoi elle sert. Il est temps d'explorer les requêtes ! à définir
Séquence Face caméra Sous-titrage fr. Incrustation d'image de BDD et de la question posée à la BDD Les requêtes servent à poser des questions. Si vous demandez à une base de données, ou bien à une base de connaissance comme Wikidata, "donne-moi la liste de [...]", elle ne vous répondra pas. Même si vous lui demandez très poliment. Wikidata ne comprend pas votre langue, mais elle comprend le langage de requête. Autrement dit, un langage informatique spécialement conçu pour poser des questions aux bases de données oiu aux bases de connaissances. Un langage de requête est à bien différencier, en informatique, d'un langage de programmation. Rassurez-vous, durant ce MOOC, nous ne vous parlerons que de langage de requête. à définir
Séquence Face caméra avec intégration d'images en arrière-plan Incrustation texte Poser une question à une base de données, c'est proche d'une question posée par écrit, par exemple dans un e-mail. La requête peut être découpée en trois étapes. D'abord, définir votre question. Puis, écrire votre question dans un langage que votre interlocuteur comprend. Enfin, lancer votre requête, c'est un peu comme envoyer un e-mail avec votre question. Si vous avez correctement rédigé la question dans votre e-mail, l'interlocuteur va comprendre, et vous répondre ce que vous attendiez par écrit. Si vous avez correctement rédigé votre requête à la base de données, elle va vous répondre aussi... sous forme de données structurées. temps à définir
Exemple d'interrogation de Wikidata en SPARQL Contenu Capture écran vidéo Passons à la pratique ! Nous allons interroger Wikidata pour lui demander la liste de (*trouver un exemple amusant tant que c'est du livre ou du patrimoine*). Je rédige ma requête dans un langage que Wikidata comprend, le SPARQL. C'est un langage spécifique, mais comme tous les langages de requête, il contient un SELECT et un WHERE à définir
Visualisation des résultats de la requête Sous-titrage Sous-titrage fr. Wikidata fourni une liste de données structurées en réponse à ma requête. Comme vous pouvez le voir, c'est un tableau ordonné. Exactement le même genre de tableau que celui d'un tableur. temps à définir
Séquence Contenu Effets Audio à définir temps à définir
Final motivationnel Contenu Effets En apprenant les langages de requête, vous pourrez interroger des bases de données et des bases de connaissance sur tous les sujets que vous voulez, même les plus improbables et les plus complexes ! Temps à définir

Introduction aux commandes edit

De même qu'il existe plusieurs façons correctes d'exprimer une demande en français (par exemple : « Puis-je avoir la liste de tous les livres édités en 1996 » et « y a t'il une liste datée de 1996 contenant tous les livres édités cette année-là »), il existe plusieurs manières correctes de rédiger une même demande dans un langage de requête... tant que vous utilisez des commandes qui fonctionnent.

Commandes ? edit

Une commande, c'est une suite de mots-clefs reconnus par un système, formant alors une instruction et permettant de dialoguer avec lui. Pour le dire autrement, ces mots-clefs sont une portion essentielle dans un langage de requête, qui permet de faire fonctionner votre requête. Tenter d'envoyer une requête à votre base de données sans utiliser les bonnes commandes qui enverront ensuite les bonnes instructions, ce serait comme tenter de commander un repas en ligne sans formuler vos instructions au vendeur. Par exemple, si vous souhaitez commander une pizza aux 4 fromages sans fromage de chèvre, cela reviendrait à dire à votre vendeur :

  • 4 fromages pizza chèvre

(imaginons le visage de la personne qui tenterait de prendre une telle commande de pizza !)

à la place de :

  • Je voudrais vous commander une pizza aux quatre fromages, mais sans fromage de chèvre dessus, car je n'aime pas le fromage de chèvre. Est-ce possible s'il vous plaît ?

Les commandes SELECT et WHERE edit

Nous n'allons pas entrer ici dans le détail de la syntaxe des langages de requête, nous allons uniquement vous présenter les commandes SELECT et WHERE. Au passage, vous avez sans doute remarqué que les langages de requête utilisent des mots en anglais !

De même qu'une phrase écrite en langue française doit toujours comporter un sujet, un verbe et un complément pour être considérée comme correcte, une requête doit toujours comporter ce SELECT et ce WHERE pour fonctionner. Lorsque vous écrivez ces mots dans votre requête, et que vous lancez ensuite votre requête, la base de données comprend que vous lui envoyez une instruction bien précise.

  • Le SELECT (en français : « sélectionner ») correspond à l' étiquette des informations que vous lui demandez d'afficher
  • Le WHERE (en français : « où ») correspond aux spécificités des informations que vous lui demandez d'afficher.

Si l'on prend les exemples des questions posées au début du cours, pour traduire la question « Comment s'appellent les écrivaines nées en Tunisie dans les années 1960 ? » dans un langage que Wikidata comprend, il faudra lui écrire quelque chose de ce genre :

  • SELECT [nom et prénom] WHERE [êtres humains féminins dont le métier est "écrivain", dont la nationalité est "tunisienne", dont l'année de naissance est comprise entre "1960" et "1969"]

Si l'on reprend l'exemple de la feuille de tableur, le SELECT servirait à choisir la colonne de la feuille de tableur que vous souhaitez afficher. Et le WHERE correspondrait au choix des lignes à afficher, lorsqu'elles respectent les conditions que vous demandez. Par exemple, dans ce tableau, on veut afficher uniquement les colonnes de Nom et de Prénom, et uniquement quand les lignes comportent aussi une date de naissance située entre 1960 et 1969 :

Liste de personnes
Nom Prénom Sexe ou genre Pays de nationalité Date de naissance métier
Castor Paul Masculin France 1962 Cinéaste
Mbemgue Bintou Féminin Mali 1998 Écrivaine
Ali Hassen Masculin Tunisie 1967 Écrivain
Tremblay Charles Masculin Canada 1961 Écrivain
Gharbi Amina Féminin Tunisie 1968 Écrivaine
Jeanneret Capucine Femme trans Suisse 1990 Vétérinaire
Kone Kouassi Homme Côte d'Ivoire 2001 Écrivain
Mahjoub Warda Femme Tunisie 1964 Pharmacienne
Oumarou Inaya Femme Cameroun 1963 Écrivaine

Si l'on exécute la requête, il ne restera qu'une seul ligne dans ce tableau qui correspondra aux spécificités demandées par la requête : celle d'Amina Gharbi, qui est une femme de nationalité tunisienne née en 1968 et exerçant la profession d'écrivaine. Aucune des autres lignes de ce tableau ne correspond, soit parce que la nationalité n'est pas tunisienne, soit parce que le sexe ou genre n'est pas féminin, soit parce que la date de naissance n'est pas située entre 1960 et 1969, soit parce que le métier n'est pas écrivaine.

Et puisqu'on a demandé, avec notre SELECT, uniquement les colonnes Nom et Prénom, voilà ce qui apparaît en réponse à notre requête :

Liste de femmes tunisiennes nées entre 1960 et 1969 et exerçant la profession d'écrivaine
Nom Prénom
Gharbi Amina

Un autre exemple ? Pour traduire la question « Dans quelles villes sont situées les rues nommées d'après une personne célèbre » dans un langage que Wikidata comprend, il faudra écrire quelque chose de ce genre :

  • SELECT [nom de la ville] WHERE ["nom de la rue" est nommé d'après "un être humain"]


Dans ces exemples, la portion de texte que nous avons mis entre crochet ne fonctionne pas pour poser une question à Wikidata : il faudra utiliser à la place des identifiants uniques que Wikidata comprend. Dans ces exemples, il faudra utiliser les identifiants uniques correspondant, entre autres, aux éléments « être humain », « féminin », « écrivain », « nationalité », « chat », « rue » et « ville ». Nous verrons cela en détail un peu plus tard, car nous ne vous avons pas encore parlé des éléments dans Wikidata. Pour le moment, il est juste important de se souvenir que le SELECT permet de sélectionner un type d'informations à afficher correspondant à des colonnes dans un tableau, et que le WHERE permet de spécifier quelles informations vous recherchez précisément, comme si vous excluiez des lignes d'une feuille de tableur si elles ne répondent pas aux critères que vous demandez.

Voyons comment fonctionne une requête lorsqu'elle est entièrement écrite dans un langage que Wikidata comprend.

À vous de jouer : test de requêtes avec l'outil Query edit

Voilà quelques exemples de requêtes déjà rédigées en SPARQL, que vous pouvez tester.

Ne vous inquiétez pas devant les mots de code nouveaux et les symboles typographiques bizarres, cet exercice demande uniquement de tester des requêtes déjà rédigées en SPARQL. Nous vous proposons de voir la manière dont ces requêtes sont structurées, puis d'en lancer quelques-unes sur Query, l'outil d'interrogation de Wikidata, et de consulter les résultats qui s'affichent.

L'outil Query peut vous fournir une liste de tout ce que vous voulez : une liste de chats célèbres, une liste de groupes de rock dont le nom commence par « M », ou encore une liste des musées situés dans une grande ville ! L'outil Query peut même vous permettre d'afficher des lieux géolocalisés sur une carte : nous verrons cela en détail plus tard, pendant le cours consacré à la visualisation des données (ou datavisualisation).

Vous n'avez pas besoin d'avoir créé de compte personnel sur Wikidata pour utiliser Query, vous pouvez même tester ces requêtes sur votre téléphone portable, de préférence s'il dispose d'une connexion illimitée à Internet (réaliser cet exercice sur téléphone risque de consommer beaucoup de données sans connexion à un wifi illimité).

Pour tester la requête, cliquez sur le lien fourni dans chaque exemple, puis sur la flèche bleue située au bas et à gauche de votre écran :

 
Vous pouvez aussi utiliser le raccourci clavier CTRL + ENTRÉE.

N'hésitez pas à cliquer sur les liens fournis dans les données structurées affichées en réponse à ces requêtes : ils vous renverront vers les pages correspondantes dans Wikidata.

Liste de chats individuels edit

Voici la structure de la requête permettant de demander à Wikidata d'afficher une liste de chats connus.

SELECT ?item ?itemLabel 
WHERE 
{
 ?item wdt:P31 wd:Q146.
 SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
  • Vous trouverez cette requête directement rédigée ici : https://w.wiki/3i8 ; cliquez sur la flèche bleue pour la tester.

Liste des groupes de rock dont le nom commence par "M" edit

Voici la requête permettant d'afficher tous les groupes de musique rock dont le nom commence par "M"

SELECT DISTINCT ?band ?bandLabel
WHERE
{
 ?band  wdt:P31 wd:Q5741069 .
       ?band rdfs:label ?bandLabel .
 FILTER(STRSTARTS(?bandLabel, 'M')) .
}
  • Vous trouverez cette requête directement rédigée ici : https://w.wiki/3f9j ; cliquez sur la flèche bleue pour la tester.

Localisation des musées de la ville de Liège edit

Une requête peut même vous afficher des lieux géolocalisés au préalable dans la base de données. Voici la requête permettant d'afficher la localisation des musées de la ville de Liège, en Belgique francophone.

#defaultView:Map
SELECT ?item ?itemLabel ?coordinates
WHERE
{
?item wdt:P31/wdt:P279* wd:Q33506 ;
      wdt:P131 wd:Q3992 ;
      wdt:P625 ?coordinates .
SERVICE wikibase:label { bd:serviceParam wikibase:language "nl, fr" }
}
  • Vous trouverez cette requête directement rédigée ici : https://w.wiki/3haJ ; cliquez sur la flèche bleue pour la tester.

La coloration syntaxique edit

Vous avez certainement remarqué que, dans l'outil Query, les mots des requêtes sont écrits avec différentes couleurs. Ce procédé très courant pour rédiger dans des langages informatiques s'appelle la coloration syntaxique (https://fr.wikipedia.org/wiki/Coloration_syntaxique). Il permet de distinguer plus facilement le rôle de chaque mot utilisé dans notre langage de requête. Cette coloration syntaxique pourra vous aider lorsque vous rédigerez vos propres requêtes en SPARQL.

 
La requête demandant les chats célèbres, avec sa coloration syntaxique

Dans l'exemple ci-dessus, certains mots sont en rouge, d'autres en bleu, et d'autres encore sont en vert, en jaune ou en gris : chacune de ces couleurs est associé à un rôle bien précis. Les commandes telles que SELECT et WHERE s'affichent en rouge et en lettres capitales.

Récapitulatif des points de vocabulaire edit

  • Requête : interrogation d'une base de données (ou d'une base de connaissance comme Wikidata)
  • Langage de requête : langage permettant d'interroger une base de données (ou une base de connaissance comme Wikidata)
  • SQL, SPARQL : deux exemples de langages de requête
  • Query : l'outil qui permet d'interroger Wikidata en utilisant le langage de requête SPARQL. Il est hébergé ici : https://query.wikidata.org/
  • Commande : suite de mots clefs reconnus par un système, formant alors une instruction et permettant de dialoguer avec lui
  • SELECT : dans un langage de requête, cette commande sert à sélectionner l'information dont vous avez besoin
  • WHERE : dans un langage de requête, cette commande sert à indiquer où se trouve l'information dont vous avez besoin
  • Coloration syntaxique : utilisation de différentes couleurs dans l'interface de rédaction d'un langage informatique, permettant de mieux identifier la fonction de chaque mot qui est écrit.

Synthèse du cours edit

Nous avons vu :

  • que formuler une requête à une base de données ou à une base de connaissances permet d'obtenir des listes de réponses sous forme de données structurées.
  • qu'une requête doit toujours être rédigée dans un langage de requête (par exemple, le SQL, le SPARQL...) pour être correctement interprétée par la base de données ou la base de connaissances
  • qu'il existe plusieurs manière de rédiger une requête correcte pour répondre à une question donnée, mais que toute requête doit systématiquement comporter des commandes fonctionnelles, et en particulier les commandes SELECT et WHERE
  • que l'outil Query permet d'interroger Wikidata via des requêtes rédigées en SPARQL et d'afficher les résultats sous forme de tableaux
  • que la coloration syntaxique peut aider à rédiger ses propres requêtes, en repérant plus efficacement le rôle de chaque mot écrit dans la requête, grâce à des couleurs et des typographies différentes