« Tutoriel wikidata » : différence entre les versions

De EduTech Wiki
Aller à la navigation Aller à la recherche
 
(32 versions intermédiaires par le même utilisateur non affichées)
Ligne 32 : Ligne 32 :
* Les '''liens de sites''' incluent un URL et un titre et doivent pointer vers des pages provenant de Wikimedia. Pour chaque langue vous pouvez ajouter un lien par type de site et on peut indiquer la qualité (badge).
* Les '''liens de sites''' incluent un URL et un titre et doivent pointer vers des pages provenant de Wikimedia. Pour chaque langue vous pouvez ajouter un lien par type de site et on peut indiquer la qualité (badge).


* Les '''declarations''' (Angl. statements, All. Aussagen) définissent des '''propriétés''' avec '''une ou plusieurs valeurs'''. Il s'agit donc des données structurées que l'on a sur un objet.
* Les '''declarations''' (Angl. '''claims''', All. Aussagen) définissent des '''propriétés''' avec '''une ou plusieurs valeurs'''. Il s'agit donc des données structurées que l'on a sur un objet.
: Exemple de [https://www.wikidata.org/wiki/Q1068473 Educational technology]:
: Exemple de [https://www.wikidata.org/wiki/Q1068473 Educational technology]:
:{| class="wikitable"
:{| class="wikitable"
Ligne 50 : Ligne 50 :
Chaque propriété est un type de données, par exemple industry est un ''item''. En novembre 2016, il y avait 11 types dans la [https://www.wikidata.org/wiki/Special:ListDatatypes liste des types de données]
Chaque propriété est un type de données, par exemple industry est un ''item''. En novembre 2016, il y avait 11 types dans la [https://www.wikidata.org/wiki/Special:ListDatatypes liste des types de données]


Finalement chaque propriété est à son tour décrit par des déclarations (statements).
Finalement chaque propriété est à son tour décrite par des déclarations (statements).


'''Les valeurs'''
'''Les valeurs'''
Ligne 71 : Ligne 71 :
* https://www.wikidata.org/wiki/Property:P452 (industry)
* https://www.wikidata.org/wiki/Property:P452 (industry)
* https://www.wikidata.org/wiki/Property:P31 (instance of)
* https://www.wikidata.org/wiki/Property:P31 (instance of)
Obtenir la liste de toutes les propriétés est possible avec l'API, mais un peu couteux. Il existe des listes ici:
* [https://github.com/maxlath/wikidata-properties-dumper/tree/master/properties maxlath/wikidata-properties-dumper]


== Utilisation de wikidata ==
== Utilisation de wikidata ==
Ligne 85 : Ligne 88 :
Toute entrée Wikidata peut être récupéré en format JSON brut ou en XML, afin de le traiter avec un script. Pour rappel, l'entrée [https://www.wikidata.org/wiki/Q1068473 Q1068473] concerne la technologie éducative.
Toute entrée Wikidata peut être récupéré en format JSON brut ou en XML, afin de le traiter avec un script. Pour rappel, l'entrée [https://www.wikidata.org/wiki/Q1068473 Q1068473] concerne la technologie éducative.


Exemple utilisant des URLs simples
Exemples utilisant des URLs simples pour sortir une entrée avec des formats différents: affichage pour humains, JSON et XML
* https://www.wikidata.org/wiki/Q1068473 (human readable page on Educational technology)
* https://www.wikidata.org/wiki/Q1068473 (human readable page on Educational technology)
* https://www.wikidata.org/wiki/Special:EntityData/Q1068473.json (format JSON)
* https://www.wikidata.org/wiki/Special:EntityData/Q1068473.json (format JSON)
Ligne 91 : Ligne 94 :
* .....
* .....


On peu obtenir la même chose via l'API standarde:
On peut obtenir la même chose via l'API standarde (vues "human readable, JSON et XML)
* https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q1068473
* https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q1068473&format=json
* https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q1068473&format=json
* https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q1068473&format=xml
* https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q1068473&format=xml
On peut obtenir une page plus "human readable" via l'API standarde.
* https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q1068473


Voir des explications plus détaillées sur l'API ci-dessous.
Voir des explications plus détaillées sur l'API ci-dessous.
Ligne 141 : Ligne 142 :
*  https://query.wikidata.org/sparql?query=SPARQL
*  https://query.wikidata.org/sparql?query=SPARQL
Le résultat sera retourné en XML par défaut, en JSON (<code>format=json </code>), etc.
Le résultat sera retourné en XML par défaut, en JSON (<code>format=json </code>), etc.
'''Outils externes'''
Le [https://www.mediawiki.org/wiki/Wikidata_Toolkit Wikidata Toolkit] est une bibliothèque Java qui permet d'implémenter des applications ou encore de faire des requêtes via la ligne de commande.


=== Outils externes ===
=== Outils externes ===
Ligne 155 : Ligne 160 :
Vous pouvez expérienter avec [https://www.wikidata.org/wiki/Special:ApiSandbox API Sandbox] et lire la [https://www.wikidata.org/wiki/mw:API:Main_page API documentation]
Vous pouvez expérienter avec [https://www.wikidata.org/wiki/Special:ApiSandbox API Sandbox] et lire la [https://www.wikidata.org/wiki/mw:API:Main_page API documentation]


Cet API ajoute deux modules à l'[https://en.wikipedia.org/w/api.php API de base] (qui fonctionne par exemple avec ce wiki ou encore wikipedia).
Cet API ajoute plusieurs modules à l'[https://en.wikipedia.org/w/api.php API de base] (qui fonctionne par exemple avec ce wiki ou encore wikipedia). Les plus importants sont probablement:
# webgetentities. Un type de requête qui permet de récupérer des entrées et de filtrer ce qui est retourné
# webgetentities. Un type de requête qui permet de récupérer des entrées et de filtrer ce qui est retourné
# wbsearchentities
# wbsearchentities
La liste globale inclut: [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbavailablebadges wbavailablebadges], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbcreateclaim wbcreateclaim], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbcreateredirect wbcreateredirect], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbeditentity wbeditentity], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbformatvalue wbformatvalue], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbgetclaims wbgetclaims], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbgetentities wbgetentities], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wblinktitles wblinktitles], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbmergeitems wbmergeitems], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbparsevalue wbparsevalue], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbremoveclaims wbremoveclaims], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbremovequalifiers wbremovequalifiers], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbremovereferences wbremovereferences], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbsearchentities wbsearchentities], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbsetaliases wbsetaliases], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbsetclaim wbsetclaim], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbsetclaimvalue wbsetclaimvalue], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbsetdescription wbsetdescription], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbsetlabel wbsetlabel], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbsetqualifier wbsetqualifier], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbsetreference wbsetreference], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbsetsitelink wbsetsitelink], [http://www.wikidata.org/w/api.php?action=help&amp;modules=wbsgetsuggestions wbsgetsuggestions]


=== wbgetentities ===
=== wbgetentities ===


: <code>action=wbsearchentities&.... </code>
: <code>action=wbgetentities&.... </code>


Ce module permet de récupérer plusieurs types d'informations. Ci-dessous nous décrivons rapidement les plus important en donnant quelques exemples.
Ce module permet de récupérer plusieurs types d'informations. Ci-dessous nous décrivons rapidement les plus important en donnant quelques exemples.


Manuel officiel (page API): [https://www.wikidata.org/w/api.php?action=help&modules=wbgetentities MediaWiki API help action=wbgetentities]
'''Manuel officiel (page API)''': [https://www.wikidata.org/w/api.php?action=help&modules=wbgetentities MediaWiki API help action=wbgetentities]


==== Entrées via l'identificateur ====
==== Entrées via l'identificateur ====
Ligne 171 : Ligne 178 :
:<code>ids</code> Les entités à récupérer(entre 1 et 50 autorisés)
:<code>ids</code> Les entités à récupérer(entre 1 et 50 autorisés)


Exemple d'un seul ID
Exemples d'un seul ID
* https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q1068473&format=json
* https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q1068473&format=json
* https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q123190


Plusieurs ID
Plusieurs ID
Ligne 198 : Ligne 206 :
==== Liste de sites et titres Wikimedia ====
==== Liste de sites et titres Wikimedia ====


:<code>titles</code>
:<code>titles=...</code>
:<code>sites</code>
:<code>sites=...</code>


On peut indiquer une liste de titres de pages Wikimedia avec une liste de sites à chercher.
On peut indiquer une liste de titres de pages Wikimedia avec une liste de sites à chercher.
Ligne 217 : Ligne 225 :
Exemple: Chercher "educational technology" via Wikipedia Anglais avec titre normalisé
Exemple: Chercher "educational technology" via Wikipedia Anglais avec titre normalisé
* https://www.wikidata.org/w/api.php/?action=wbgetentities&sites=enwiki&titles=Educational_technology&normalize
* https://www.wikidata.org/w/api.php/?action=wbgetentities&sites=enwiki&titles=Educational_technology&normalize
: "Normaliser" veut dire transformer le nom du titre en qc. qui s'affiche plus joliment, notamment le "_" en " ".


Exemple: Chercher "educational technology" et "Academic conference" dans Wikipedia Anglais
Exemple: Chercher "educational technology" et "Academic conference" dans Wikipedia Anglais
Ligne 222 : Ligne 231 :


==== Propriétés à récupérer ====
==== Propriétés à récupérer ====
: <code>props</code>
: <code>props=...</code>


On peut indiquer les noms des propriétés que l'on peut obtenir. Par défaut on obtient tout, c-a-d:
On peut indiquer les noms des propriétés que l'on peut obtenir. Par défaut on obtient tout, c-a-d:
  info|sitelinks|aliases|labels|descriptions|claims|datatype
  info|sitelinks|aliases|labels|descriptions|claims|datatype


Exemple: Récuper les alais de Educational technology et Academic conference
Exemple: Récupérer les alias de ''Educational technology'' et ''Academic conference''
* https://www.wikidata.org/w/api.php/?action=wbgetentities&sites=enwiki&titles=Educational_technology|Academic_conference&props=aliases
* https://www.wikidata.org/w/api.php/?action=wbgetentities&sites=enwiki&titles=Educational_technology|Academic_conference&props=aliases
: retourne une juste les alias, mais regroupés selon la langue.
: retourne une juste les alias, mais regroupés selon la langue.
Ligne 233 : Ligne 242 :
Exemple: Récupérer les sites qui parlent de Piaget (variantes)
Exemple: Récupérer les sites qui parlent de Piaget (variantes)
* https://www.wikidata.org/w/api.php/?action=wbgetentities&sites=enwiki&titles=Piaget&props=sitelinks
* https://www.wikidata.org/w/api.php/?action=wbgetentities&sites=enwiki&titles=Piaget&props=sitelinks
* https://www.wikidata.org/w/api.php/?action=wbgetentities&sites=enwiki&titles=Jean_Piaget&props=sitelinks
* https://www.wikidata.org/w/api.php/?action=wbgetentities&sites=enwiki&titles=Jean_Piaget&props=siteOn peut obtenir une page plus "human readable" via l'API standarde.links
* https://www.wikidata.org/w/api.php/?action=wbgetentities&ids=Q123190&props=sitelinks
* https://www.wikidata.org/w/api.php/?action=wbgetentities&ids=Q123190&props=sitelinks
: La 3ème solution donne le meilleurs résultat, le premier le moins bien.
: La 3ème solution donne le meilleurs résultat, le premier le moins bien.
Ligne 260 : Ligne 269 :
: '''Ne marche pas''', car il manque la langue
: '''Ne marche pas''', car il manque la langue


=== Type ===
==== Type ====
: <code>type</code>
: <code>type=property</code>
: <code>type=item</code> (default)


Identifie le type (à option). Par défaut une entrée (item), sinon peut choisir ''property''.


=== Langue ===
==== Langue ====
: <code>language</code>
: <code>language</code>


Indique la langue. Ce paramètre est obligatoire.
Indique la langue. Ce paramètre est obligatoire.


Exemple:
Exemples:
* https://www.wikidata.org/w/api.php/?action=wbsearchentities&language=fr&search=Piaget
* https://www.wikidata.org/w/api.php/?action=wbsearchentities&language=fr&search=Piaget


Cette requête produit une structure comme la suivante (donnés amputées):
La requête produit une structure comme la suivante (donnés amputées):
<source lang = JSON>
<source lang = JSON>
{
{
Ligne 338 : Ligne 349 :
     "success": 1
     "success": 1
}
}
</source>


La propriété "match" identifie la cible de la comparaison. Ci-dessus, il s'agit de "industry" qui a été retrouvé dans le "label" en Anglais.
La propriété "match" identifie la cible de la comparaison. Ci-dessus, il s'agit de "industry" (<code>P452</code>) qui a été retrouvé dans le "label" en Anglais.


La comparaison se fait par "string matching", donc si on cherche par exemple "ind" on retrouve toutes les entrées ou propriétés qui quelque part dans une des valeurs ont un mot qui inclut "ind". Par exemple: index, independance, etc.
La comparaison se fait par "string matching", donc si on cherche par exemple "ind" on retrouve toutes les entrées ou propriétés qui quelque part dans une des valeurs ont un mot qui inclut "ind". Par exemple: index, independance, etc.


On peut utiliser des  
Exemple: chercher la propriété pour peintre (en Anglais)
* https://www.wikidata.org/w/api.php?action=wbsearchentities&search=painter&language=en&type=property
: Le résultat montre que cette requête n'est pas très intélligente car il n'existe pas de propriété "painter" pour décrire des gens. Par contre il existe le propriété "creator" utilisée pour caractériser des oeuvres. Pour obtenir une liste de peintres, il faudrait plutôt chercher la catégorie de tous les peintres sur Wikipédia et les entrées qui correspondent. Sinon, il faudrait utiliser l'interface SPARQL.
 
Peut-on utiliser des expressions rationnelles ?
 
=== wbgetclaims ===
 
<code>action=wbgetclaim </code>
 
Manuel: https://www.wikidata.org/w/api.php?action=help&modules=wbgetclaims
 
Permet de récupérer directement un "mainsnak" si on connait l'entrée et la propriété.
 
'''entity'''
 
<code>entity=</code>
* Définit l'entrée
 
'''property'''
 
<code>property=</code>
* Filtre à option qui retourne seulement les claims qui ont un "mainsnak" avec cette propriété


</source>
'''props'''
* Propriétés optionnelles à retourner en plus, par exemple les références.
 
Exemples:
* http://www.wikidata.org/w/api.php?action=wbgetclaims&entity=Q123190&property=P569 (date de naissance de Jean Piaget, 1896-08-09)
** Jean Piaget = https://www.wikidata.org/wiki/Q123190
** Propriété date de naissance = https://www.wikidata.org/wiki/Property:P569
 
* http://www.wikidata.org/w/api.php?action=wbgetclaims&entity=Q123190&property=P569&props=references;


== Modèle de données ==
== Modèle de données ==
Ce chapitre donne une vue un peu plus systématique abordé dans la schéma de données.
Le [https://www.mediawiki.org/wiki/Wikibase/DataModel/Primer Primer] résume le modèle de données de la façon suivante. Il existe trois types d'entrées: les entrées (items), les propriétés et les requêtes
'''Entity''' is one of the following three types of Wikibase pages, each with database content:
# '''Item''', consisting of:
## '''Item identifier''' (number prefixed with ''Q'')
## '''Fingerprint''', consisting of:
### Multilingual '''label'''*
### Multilingual '''description'''*
### Multilingual '''aliases'''
## '''Statements''', each consisting of:
### '''Claim''', consisting of:
#### Property
#### Value
#### Qualifiers (additional property-value pairs)
### '''References''' (each consisting of one or more property-value pairs)
### '''Rank'''
## '''Site links'''
# '''Property''', consisting of
## '''Property identifier''' (number prefixed with ''P'')
## '''Fingerprint''', consisting of:
### Multilingual '''label'''*
### Multilingual '''description'''*
### Multilingual '''aliases'''
## '''Statements''', each consisting of:
### '''Claim''', consisting of:
#### Property
#### Value
#### Qualifiers (additional property-value pairs)
### '''References''' (each consisting of one or more property-value pairs)
### '''Rank'''
## '''Datatype'''
# '''Query'''**


Le modèle de données utilisé est introduit dans [https://www.wikidata.org/wiki/Help:Wikidata_datamodel Help:Wikidata datamodel]. Cette page contient la figure suivante:
Le modèle de données utilisé est introduit dans [https://www.wikidata.org/wiki/Help:Wikidata_datamodel Help:Wikidata datamodel]. Cette page contient la figure suivante:
Ligne 358 : Ligne 434 :
|}
|}


Voici un exemple (un peu amputé !!) pour [https://www.wikidata.org/wiki/Q1068473 educational technology] (Q1068473) d'une entrée sérialisé en JSON. Comme on l'a décrit plus haut, on peut aussi demander moins de données (donc filtrer avec <code>props</code> et <code>languages</code> par exemple).
Une version plus formelle du modèle est introduit sur le site [https://www.mediawiki.org/wiki/Wikibase/ Mediawiki].
 
A côté des formulations plus conceptuelles, il existe des modèles liés à une technologique particulière, dont JSON. Voici un exemple (un peu amputé !!) pour [https://www.wikidata.org/wiki/Q1068473 educational technology] (Q1068473) d'une entrée sérialisé en JSON. Comme on l'a décrit plus haut, on peut aussi demander moins de données (donc filtrer avec <code>props</code> et <code>languages</code> par exemple).


<source lang=JSON>
<source lang=JSON>
Ligne 677 : Ligne 755 :
     });
     });
</source>
</source>
Autres exemples:
* Voir le dossier http://tecfa.unige.ch/guides/wikipedia/
* L'exemple [http://tecfa.unige.ch/guides/wikipedia/rest-wikidata-example-5.html rest-wikidata-example-5.html] montre comment chercher à partir d'une catégorie Wikipédia toutes les entrées Wikidata qui correspondent (solution qui me convainc pas trop ...)


== Liens ==
== Liens ==


; Documentation officielle
; Documentation officielle de la technologie
 
La documentation officielle est relativement éparpillée dans la mesure ou les API sont autodocumentées.
* http://wikiba.se/ (site principal !)
* [https://www.mediawiki.org/wiki/Wikibase Wikibase] Ancien site de documentation remplacé par [http://wikiba.se/ wikiba.se]. Enfin (en date de nov 2016) les pages les plus importantes restent ici.
** [https://www.mediawiki.org/wiki/Wikibase/DataModel/Primer Wikibase/DataModel/Primer]
** [https://www.mediawiki.org/wiki/Wikibase/DataModel Wikibase/DataModel]
** [https://www.mediawiki.org/wiki/Wikibase/API Wikibase/API]
* https://www.wikidata.org/wiki/Help:Contents  
* https://www.wikidata.org/wiki/Help:Contents  


; Documentation officielle en français (qui explique surtout la structure des entrées)
; Documentation officielle de Wikidata en français (qui explique surtout la structure des entrées)
 
La base de données officielle est sur https://www.wikidata.org/. Via cette plateforme, on peut accéder à toutes les pages help qui concerne (1) l'implémentation concrète des concepts ci-dessus et (2) les API implémentés dans ce portail.


* [https://www.wikidata.org/wiki/Help:Items/fr Help:Items/fr]
* [https://www.wikidata.org/wiki/Help:Items/fr Help:Items/fr]
Ligne 691 : Ligne 782 :
* [https://www.wikidata.org/wiki/Help:Ranking/fr Help:Ranking/fr]
* [https://www.wikidata.org/wiki/Help:Ranking/fr Help:Ranking/fr]
* [https://www.wikidata.org/wiki/Help:Qualifiers/fr Help:Qualifiers/fr]
* [https://www.wikidata.org/wiki/Help:Qualifiers/fr Help:Qualifiers/fr]
; Documentation de l'API Mediawiki
* [https://www.wikidata.org/w/api.php api.php] génère dynamiquement la documentation. En tant que consommateur de cette base de données, il faut surtout lire:
** [https://www.wikidata.org/w/api.php?action=help&modules=wbgetentities MediaWiki API help action=wbgetentities]
** [https://www.wikidata.org/w/api.php?action=help&modules=wbsearchentities MediaWiki API help action=wbsearchentities]
Pour s'éviter du travail inutile, il faut ensuite pas négliger de regarder les autres modules. Par exemple, [https://www.wikidata.org/w/api.php?action=help&modules=wbgetclaims wbgetclaims] permet d'extraire plus facilement un ''claim''.
* http://www.wikidata.org/w/api.php?action=wbgetclaims&entity=Q123190&property=P569 (date de naissance de Jean Piaget, 1896-08-09)


; Tutoriels
; Tutoriels
Ligne 700 : Ligne 800 :
* [https://www.mediawiki.org/wiki/Wikidata_query_service Wikidata query service]
* [https://www.mediawiki.org/wiki/Wikidata_query_service Wikidata query service]
* [https://www.mediawiki.org/wiki/Wikidata_query_service/User_Manual#SPARQL_endpoint Wikidata query service/User Manual]
* [https://www.mediawiki.org/wiki/Wikidata_query_service/User_Manual#SPARQL_endpoint Wikidata query service/User Manual]
== Bibliographie ==
* Denny Vrandečić, Markus Krötzsch. Wikidata: A Free Collaborative Knowledgebase. In Communications of the ACM 57:10. ACM 2014. [http://korrekt.org/page/Wikidata:_A_Free_Collaborative_Knowledgebase html] [http://korrekt.org/papers/Wikidata-CACM-2014.pdf PDF]
* Fredo Erxleben, Michael Günther, Markus Krötzsch, Julian Mendez, Denny Vrandečić. Introducing Wikidata to the Linked Data Web. In Proceedings of the 13th International Semantic Web Conference. Springer 2014. [http://korrekt.org/page/Introducing_Wikidata_to_the_Linked_Data_Web view details] [http://korrekt.org/papers/Wikidata-RDF-export-2014.pdf download]

Dernière version du 6 décembre 2016 à 16:34

Cet article est une ébauche à compléter. Une ébauche est une entrée ayant un contenu (très) maigre et qui a donc besoin d'un auteur.

Introduction

«Wikidata est un projet de la Wikimedia Foundation : une base de données libre, collaborative et multilingue, qui collecte des données structurées pour alimenter Wikipédia, Wikimedia Commons, les autres projets Wikimedia et bien plus encore.» ([https://www.wikidata.org/wiki/Wikidata:Introduction/fr Wikidata:Introduction, nov 2016).

Les données structurées de Wikidata sont libres (Creative Commons Transfert dans le Domaine Public (CC0 1.0)) et multilingues. Les données incluent aussi leurs sources et des liens.

Schéma de données

Chaque entrée dans la base de données est appelé élément (français), item (Anglais) et Objekt (Allemamd). Autrement dit, la base de données et composé d'objets structurées que l'on appelle éléments, entrées ou items.

Chaque item a un identifieur unique (débuant avec la lettre Qqui permet de le retrouver. Par exemple:

Chaque item doit être notable (par exemple se retrouver dans une entrée d'un site de Wikimedia comme Wikipedia, Wiktionary, Wikibooks, WikiNews, etc. Chaque item doit être unique (une seule entrée / item). Ces items peuvent être reliés.

Structure des entrées

Un élément (item) est object structuré qui contient les type de composants suivantes:

  • Le libellé (Angl. label, All. Bezeichnung) définit le nom le plus connu de l'objet.
  • La description (Angl. description, All. Beschreibung) donne une définition courte d'une entrée. Cette description comprends quelques mot, ne constitue pas une phrase et suit quelques règles (minuscules, pas de ponctuation, pas d'articles, pas de phrase).
  • Les alias (All. Alternativnamen) donnent des noms alternatives aux libellés.
  • Les liens de sites incluent un URL et un titre et doivent pointer vers des pages provenant de Wikimedia. Pour chaque langue vous pouvez ajouter un lien par type de site et on peut indiquer la qualité (badge).
  • Les declarations (Angl. claims, All. Aussagen) définissent des propriétés avec une ou plusieurs valeurs. Il s'agit donc des données structurées que l'on a sur un objet.
Exemple de Educational technology:
Statements
Propriété Valeur
industry education
subclass of technology

Types de propriétés et valeurs

Les propriétés sont typées, et aussi définies par des entrées dans wikidata. Par exemple industry est définie dans l'entrée P452) avec le libellé (label) industry, la description industry of company or organization et quelques alias comme field of action ou sector.

Chaque propriété est un type de données, par exemple industry est un item. En novembre 2016, il y avait 11 types dans la liste des types de données

Finalement chaque propriété est à son tour décrite par des déclarations (statements).

Les valeurs

  • Une valeur peut être simple ou multiple

les qualificatifs

  • Les qualificatifs (Angl. qualifiers) permettent de modifier la portée d'un élément, indiquer la manière dont une valeur a été obtenue, mettre des restrictions sur la portée d'une valeur ou inclure d'autres détails nécessaires à l'interprétation de la valeur.

Les références

  • indiquent la source

Les rangs

  • Les rang (Angl. ranking) constituent une mécanique permettant d’annoter plusieurs valeurs pour une déclaration, c-a-d indiquer un statut comme preferred, normal ou deprecated

En résumé, la définition d'une propriété ressemble un peu celle des entrées et le mécanisme de stockage et d'édition est similaire:

Exemples de propriétés

Obtenir la liste de toutes les propriétés est possible avec l'API, mais un peu couteux. Il existe des listes ici:

Utilisation de wikidata

Actuellement, tout le monde peut consulter les entrées et on peut électroniquement accéder aux contenus

Recherche simple

Formats structurés

Toute entrée Wikidata peut être récupéré en format JSON brut ou en XML, afin de le traiter avec un script. Pour rappel, l'entrée Q1068473 concerne la technologie éducative.

Exemples utilisant des URLs simples pour sortir une entrée avec des formats différents: affichage pour humains, JSON et XML

On peut obtenir la même chose via l'API standarde (vues "human readable, JSON et XML)

Voir des explications plus détaillées sur l'API ci-dessous.

Requêtes structurées avec SPARQL

Le GUI

Le WikidataQuery Service (WDQS) permet un accès aux données Wikidata via des données. Un implémentation béta existe déjà:

Exemple pour trouver les plus grandes villes qui ont un maire femme:

#Largest cities with female mayor
#added before 2016-10
SELECT DISTINCT ?city ?cityLabel ?mayor ?mayorLabel 
WHERE 
{
	?city wdt:P31/wdt:P279* wd:Q515 .  # find instances of subclasses of city
	?city p:P6 ?statement .            # with a P6 (head of goverment) statement
	?statement ps:P6 ?mayor .          # ... that has the value ?mayor
	?mayor wdt:P21 wd:Q6581072 .       # ... where the ?mayor has P21 (sex or gender) female
	FILTER NOT EXISTS { ?statement pq:P582 ?x }  # ... but the statement has no P582 (end date) qualifier
	 
	# Now select the population value of the ?city
	# (wdt: properties use only statements of "preferred" rank if any, usually meaning "current population")
	?city wdt:P1082 ?population .
	# Optionally, find English labels for city and mayor:
	SERVICE wikibase:label {
		bd:serviceParam wikibase:language "en" .
	}
}
ORDER BY DESC(?population)
LIMIT 10

Les données peuvent être affichées en plusieurs vues, par exemple des tables, des cartes, des bubble chart, des graphes, etc.

SPARQL API

Au lieu de copier/coller les requêtes dans leur formulaire de recherche, on peut utiliser un "EndPoint" avec l'URL Suivant:

Le résultat sera retourné en XML par défaut, en JSON (format=json ), etc.

Outils externes

Le Wikidata Toolkit est une bibliothèque Java qui permet d'implémenter des applications ou encore de faire des requêtes via la ligne de commande.

Outils externes

Il existe pas mal d'outils et exemples externes que l'on peut utiliser (et parfois adapter).

Modules MediaWiki API

Vous pouvez expérienter avec API Sandbox et lire la API documentation

Cet API ajoute plusieurs modules à l'API de base (qui fonctionne par exemple avec ce wiki ou encore wikipedia). Les plus importants sont probablement:

  1. webgetentities. Un type de requête qui permet de récupérer des entrées et de filtrer ce qui est retourné
  2. wbsearchentities

La liste globale inclut: wbavailablebadges, wbcreateclaim, wbcreateredirect, wbeditentity, wbformatvalue, wbgetclaims, wbgetentities, wblinktitles, wbmergeitems, wbparsevalue, wbremoveclaims, wbremovequalifiers, wbremovereferences, wbsearchentities, wbsetaliases, wbsetclaim, wbsetclaimvalue, wbsetdescription, wbsetlabel, wbsetqualifier, wbsetreference, wbsetsitelink, wbsgetsuggestions

wbgetentities

action=wbgetentities&....

Ce module permet de récupérer plusieurs types d'informations. Ci-dessous nous décrivons rapidement les plus important en donnant quelques exemples.

Manuel officiel (page API): MediaWiki API help action=wbgetentities

Entrées via l'identificateur

ids Les entités à récupérer(entre 1 et 50 autorisés)

Exemples d'un seul ID

Plusieurs ID

Le résultat retourne une liste d'entrées. Plus précisément, l'objet JSON, a un propriété "entities" qui contient un objet dont les propriétés sont les ID (donc malheureusement pas une liste).

    "entities": {
        "Q1068473": {
            "pageid": 1017035,
             .............
          },
          "Q2020153": {
            "pageid": 1948226,
             ..............
           }
     }
    "success": 1
}

Liste de sites et titres Wikimedia

titles=...
sites=...

On peut indiquer une liste de titres de pages Wikimedia avec une liste de sites à chercher. Donc, il faut donner deux paramètres (un seul ne marche pas):

  1. un (ou plusieurs) nom(s) de page wikipédia (ou autre site Wikimedia)
  2. un (ou plusiers) noms de sites où chercher

et on récupère l'entrée Wikidata qui correspond.

Mais attention, on peut:

  • Indiquer un seul site pour plusieurs titres
  • Indiquer plusieurs sites pour un seul titre

Exemple: Chercher "educational technology"

... ne marche pas car il manque le site

Exemple: Chercher "educational technology" via Wikipedia Anglais avec titre normalisé

"Normaliser" veut dire transformer le nom du titre en qc. qui s'affiche plus joliment, notamment le "_" en " ".

Exemple: Chercher "educational technology" et "Academic conference" dans Wikipedia Anglais

Propriétés à récupérer

props=...

On peut indiquer les noms des propriétés que l'on peut obtenir. Par défaut on obtient tout, c-a-d:

info|sitelinks|aliases|labels|descriptions|claims|datatype

Exemple: Récupérer les alias de Educational technology et Academic conference

retourne une juste les alias, mais regroupés selon la langue.

Exemple: Récupérer les sites qui parlent de Piaget (variantes)

La 3ème solution donne le meilleurs résultat, le premier le moins bien.

Langues

languages

Par défault, le résultat contient toutes les languages. Vous choisir entre une, une liste et la liste complète (défaut). Exemple: Récupérer les alias en Anglais, Français et Allemand de l'entrée Jean Piaget

wbsearchentities

action=wbsearchentitiess&....

Ce module permet de chercher des entrées avec des libellés (labels) et des alias. Ci-dessous nous décrivons rapidement les plus important en donnant quelques exemples. Le résultat d'un query est un object qui contient des informations sur les entrées qui contiennent ce mot. Voir ci-dessous pour une exemple.

Manuel officiel (page API): MediaWiki API help action=wbsearchentities

Search

search

Exemple:

Ne marche pas, car il manque la langue

Type

type=property
type=item (default)

Identifie le type (à option). Par défaut une entrée (item), sinon peut choisir property.

Langue

language

Indique la langue. Ce paramètre est obligatoire.

Exemples:

La requête produit une structure comme la suivante (donnés amputées):

{
    "searchinfo": {
        "search": "Piaget"
    },
    "search": [
        {
            "id": "Q358583",
            "concepturi": "http://www.wikidata.org/entity/Q358583",
            "url": "//www.wikidata.org/wiki/Q358583",
            "title": "Q358583",
            "pageid": 342019,
            "label": "Piaget",
            "description": "Wikipedia disambiguation page",
            "match": {
                "type": "label",
                "language": "fr",
                "text": "Piaget"
            }
        },
        {
            "id": "Q658961",
            "concepturi": "http://www.wikidata.org/entity/Q658961",
            .....
         },
         ..........
        }
    ],
    "success": 1
}

Type de données

type

On peut chercher soit des entrées (items), soit des propriétés (properties). Permet par exemple de retrouve l'identificateur d'une propriété. Le moteur cherche le string dans les labels (libellés) et dans les alias.

Exemple: Chercher la propriété "industry" en Anglais

Cette requête donne le résultat suivant:

{
    "searchinfo": {
        "search": "industry"
    },
    "search": [
        {
            "id": "P452",
            "concepturi": "http://www.wikidata.org/entity/P452",
            "url": "//www.wikidata.org/wiki/Property:P452",
            "title": "Property:P452",
            "pageid": 12844147,
            "label": "industry",
            "description": "industry of company or organization",
            "match": {
                "type": "label",
                "language": "en",
                "text": "industry"
            }
        }
    ],
    "success": 1
}

La propriété "match" identifie la cible de la comparaison. Ci-dessus, il s'agit de "industry" (P452) qui a été retrouvé dans le "label" en Anglais.

La comparaison se fait par "string matching", donc si on cherche par exemple "ind" on retrouve toutes les entrées ou propriétés qui quelque part dans une des valeurs ont un mot qui inclut "ind". Par exemple: index, independance, etc.

Exemple: chercher la propriété pour peintre (en Anglais)

Le résultat montre que cette requête n'est pas très intélligente car il n'existe pas de propriété "painter" pour décrire des gens. Par contre il existe le propriété "creator" utilisée pour caractériser des oeuvres. Pour obtenir une liste de peintres, il faudrait plutôt chercher la catégorie de tous les peintres sur Wikipédia et les entrées qui correspondent. Sinon, il faudrait utiliser l'interface SPARQL.

Peut-on utiliser des expressions rationnelles ?

wbgetclaims

action=wbgetclaim

Manuel: https://www.wikidata.org/w/api.php?action=help&modules=wbgetclaims

Permet de récupérer directement un "mainsnak" si on connait l'entrée et la propriété.

entity

entity=

  • Définit l'entrée

property

property=

  • Filtre à option qui retourne seulement les claims qui ont un "mainsnak" avec cette propriété

props

  • Propriétés optionnelles à retourner en plus, par exemple les références.

Exemples:

Modèle de données

Ce chapitre donne une vue un peu plus systématique abordé dans la schéma de données.

Le Primer résume le modèle de données de la façon suivante. Il existe trois types d'entrées: les entrées (items), les propriétés et les requêtes Entity is one of the following three types of Wikibase pages, each with database content:

  1. Item, consisting of:
    1. Item identifier (number prefixed with Q)
    2. Fingerprint, consisting of:
      1. Multilingual label*
      2. Multilingual description*
      3. Multilingual aliases
    3. Statements, each consisting of:
      1. Claim, consisting of:
        1. Property
        2. Value
        3. Qualifiers (additional property-value pairs)
      2. References (each consisting of one or more property-value pairs)
      3. Rank
    4. Site links
  2. Property, consisting of
    1. Property identifier (number prefixed with P)
    2. Fingerprint, consisting of:
      1. Multilingual label*
      2. Multilingual description*
      3. Multilingual aliases
    3. Statements, each consisting of:
      1. Claim, consisting of:
        1. Property
        2. Value
        3. Qualifiers (additional property-value pairs)
      2. References (each consisting of one or more property-value pairs)
      3. Rank
    4. Datatype
  3. Query**

Le modèle de données utilisé est introduit dans Help:Wikidata datamodel. Cette page contient la figure suivante:

Data model of Wikidata. Lists id, title, type, labels, aliases, descriptions, claims and sitelinks. Data model of Wikidata. Lists mainsnak (for claims), qualifiers, references and snak.
Data model of Wikidata. Lists datavalue and possible types. Currently wikibase-entityid (item), string (including image and url), time and globecoordinate. Possible future types quantity, multilingualtext, monolingualtext.

Une version plus formelle du modèle est introduit sur le site Mediawiki.

A côté des formulations plus conceptuelles, il existe des modèles liés à une technologique particulière, dont JSON. Voici un exemple (un peu amputé !!) pour educational technology (Q1068473) d'une entrée sérialisé en JSON. Comme on l'a décrit plus haut, on peut aussi demander moins de données (donc filtrer avec props et languages par exemple).

{
    "entities": {
        "Q1068473": {
            "pageid": 1017035,
            "ns": 0,
            "title": "Q1068473",
            "lastrevid": 400333057,
            "modified": "2016-11-03T09:28:37Z",
            "type": "item",
            "id": "Q1068473",
            "labels": {
                    .............................

                "de": {
		    "language": "de",
		    "value": "Bildungstechnologie"
                },
                "fr": {
                    "language": "fr",
                    "value": "technologie \u00e9ducative"
                },
                "nl": {
                    "language": "nl",
                    "value": "onderwijstechnologie"
                }
            },
            "descriptions": {
                "en": {
                    "language": "en",
                    "value": "use of technology in education to improve learning and teaching; not restricted to high technology"
                },
                "es": {
                    "language": "es",
                    "value": "uso de la tecnolog\u00eda en la educaci\u00f3n para mejorar el aprendizaje y la ense\u00f1anza."
                },
                .....................................
                "en": [
                    {
                        "language": "en",
                        "value": "e-learning"
                    },
                    {
                        "language": "en",
                        "value": "instructional technology"
                    },
                    {
                        "language": "en",
                        "value": "information and communication technology (ICT) in education"
                    },
                    {
                        "language": "en",
                        "value": "learning technology"
                    },
                    {
                        "language": "en",
                        "value": "EdTech"
                    },
                    {
                        "language": "en",
                        "value": "multimedia learning"
                    },
                    {
                        "language": "en",
                        "value": "technology-enhanced learning (TEL)"
                    },
                    {
                        "language": "en",
                        "value": "computer-based instruction (CBI)"
                    },
                    {
                        "language": "en",
                        "value": "computer managed instruction"
                    },
                    {
                        "language": "en",
                        "value": "computer-based training (CBT)"
                    },
                    {
                        "language": "en",
                        "value": "computer-assisted instruction"
                    },
                    {
                        "language": "en",
                        "value": "computer-aided instruction (CAI)"
                    },
                    {
                        "language": "en",
                        "value": "internet-based training (IBT)"
                    },
                    {
                        "language": "en",
                        "value": "flexible learning"
                    },
                    {
                        "language": "en",
                        "value": "web-based training (WBT)"
                    },
                    {
                        "language": "en",
                        "value": "online education"
                    },
                    {
                        "language": "en",
                        "value": "virtual education"
                    },
                    {
                        "language": "en",
                        "value": "virtual learning environment (VLE)"
                    },
                    {
                        "language": "en",
                        "value": "learning platforms"
                    },
                    {
                        "language": "en",
                        "value": "m-learning"
                    },
                    {
                        "language": "en",
                        "value": "digital education"
                    },
                    {
                        "language": "en",
                        "value": "ed tech"
                    }
                ],
		"claims": {
                    "P373": [
                    {
                        "mainsnak": {
                            "snaktype": "value",
                            "property": "P373",
                            "datavalue": {
                                "value": "Educational technology",
                                "type": "string"
                            },
                            "datatype": "string"
                        },
                        "type": "statement",
                        "id": "q1068473$2D4F9040-0081-4299-90B7-17FAC89023D1",
                        "rank": "normal"
                    }
                ],
                "P910": [
                    {
                        "mainsnak": {
                            "snaktype": "value",
                            "property": "P910",
                            "datavalue": {
                                "value": {
                                    "entity-type": "item",
                                    "numeric-id": 8408260,
                                    "id": "Q8408260"
                                },
                                "type": "wikibase-entityid"
                            },
                            "datatype": "wikibase-item"
                        },
                        "type": "statement",
                        "id": "Q1068473$9D058A56-6AD6-475A-817D-5CB7B7D939C0",
                        "rank": "normal"
                    }
                ],
                "P349": [
                    {
                        "mainsnak": {
                            "snaktype": "value",
                            "property": "P349",
                            "datavalue": {
                                "value": "00567159",
                                "type": "string"
                            },
                            "datatype": "external-id"
                        },
                        "type": "statement",
                        "id": "Q1068473$FA7B4944-5E99-46EE-90CD-389101AE17F1",
                        "rank": "normal"
                    }
                ],
                "P279": [
                    {
                        "mainsnak": {
                            "snaktype": "value",
                            "property": "P279",
                            "datavalue": {
                                "value": {
                                    "entity-type": "item",
                                    "numeric-id": 11016,
                                    "id": "Q11016"
                                },
                                "type": "wikibase-entityid"
                            },
                            "datatype": "wikibase-item"
                        },
                        "type": "statement",
                        "id": "Q1068473$90358c04-4bc9-bbd3-319d-a5c3472e8406",
                        "rank": "normal"
                    }
                ],
                "P452": [
                    {
                        "mainsnak": {
                            "snaktype": "value",
                            "property": "P452",
                            "datavalue": {
                                "value": {
                                    "entity-type": "item",
                                    "numeric-id": 8434,
                                    "id": "Q8434"
                                },
                                "type": "wikibase-entityid"
                            },
                            "datatype": "wikibase-item"
                        },
                        "type": "statement",
                        "id": "Q1068473$92a3b12e-4de1-0258-4eeb-2b9f4e08c370",
                        "rank": "normal"
                    }
                ],
                "P2167": [
                    {
                        "mainsnak": {
                            "snaktype": "value",
                            "property": "P2167",
                            "datavalue": {
                                "value": "60106214",
                                "type": "string"
                            },
                            "datatype": "external-id"
                        },
                        "type": "statement",
                        "id": "Q1068473$62C2177A-F29A-4967-81EB-28BCC46351C5",
                        "rank": "normal"
                    }
                ],
                "P460": [
                    {
                        "mainsnak": {
                            "snaktype": "value",
                            "property": "P460",
                            "datavalue": {
                                "value": {
                                    "entity-type": "item",
                                    "numeric-id": 4347841,
                                    "id": "Q4347841"
                                },
                                "type": "wikibase-entityid"
                            },
                            "datatype": "wikibase-item"
                        },
                        "type": "statement",
                        "id": "Q1068473$0cbe5ab9-46a8-0720-3446-416dc524eede",
                        "rank": "normal"
                    }
                ]
            },
            "sitelinks": {
                "dewiki": {
                    "site": "dewiki",
                    "title": "Bildungstechnologie",
                    "badges": []
                },
                "enwiki": {
                    "site": "enwiki",
                    "title": "Educational technology",
                    "badges": []
                },
                "eswiki": {
                    "site": "eswiki",
                    "title": "Tecnolog\u00eda educativa",
                    "badges": []
                },
            }
        }
    },
    "success": 1
}

Exemples JavaScript

Récupérer une entrée dont on connaît l'identificateur et afficher qc.

A améliorer (tout le code est dans le fichier html ci-dessous)

Voici le fragment de code JQuery/JavaScript le plus important

  var wd_entry = 'Q1068473';
 // Get request with a REST URL
    $.ajax ({
        url: 'https://www.wikidata.org/w/api.php',
	type: "GET",
	data: {
	    action: 'wbgetentities',
	    format: 'json',
	    ids: wd_entry,
	    origin: "*"
	},
        dataType: 'json',
	crossDomain: true,

	// If we get data, then format these with a function. Results are spliced into the page.
        success: function(result,textStatus,jqXHR) {
            $("#results").append(doDisplay(result));
        },
        error: function(jqXHR,errortype,errormsg) {
	    console.log("HELLO");
            $("#results").append("<p>Error: " + errortype + ". Please also look at the console log. Maybe you just violoate the JavaScript onesite policy</p>");
            $("#results").append("<p>jqXHR summary:" + JSON.stringify(jqXHR) + "</p>");
            console.log(jqXHR);
            console.log(errormsg);
        }
    });

Autres exemples:

Liens

Documentation officielle de la technologie

La documentation officielle est relativement éparpillée dans la mesure ou les API sont autodocumentées.

Documentation officielle de Wikidata en français (qui explique surtout la structure des entrées)

La base de données officielle est sur https://www.wikidata.org/. Via cette plateforme, on peut accéder à toutes les pages help qui concerne (1) l'implémentation concrète des concepts ci-dessus et (2) les API implémentés dans ce portail.

Documentation de l'API Mediawiki

Pour s'éviter du travail inutile, il faut ensuite pas négliger de regarder les autres modules. Par exemple, wbgetclaims permet d'extraire plus facilement un claim.

Tutoriels

Wikidata query service


Bibliographie

  • Denny Vrandečić, Markus Krötzsch. Wikidata: A Free Collaborative Knowledgebase. In Communications of the ACM 57:10. ACM 2014. html PDF
  • Fredo Erxleben, Michael Günther, Markus Krötzsch, Julian Mendez, Denny Vrandečić. Introducing Wikidata to the Linked Data Web. In Proceedings of the 13th International Semantic Web Conference. Springer 2014. view details download