« Tutoriel wikidata » : différence entre les versions
m (→Type) |
m (→Langue) |
||
Ligne 267 : | Ligne 267 : | ||
Identifie le type (à option). Par défaut une entrée (item), sinon peut choisir ''property''. | Identifie le type (à option). Par défaut une entrée (item), sinon peut choisir ''property''. | ||
=== Langue === | ==== Langue ==== | ||
: <code>language</code> | : <code>language</code> | ||
Version du 8 novembre 2016 à 14:05
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 Q
qui permet de le retrouver. Par exemple:
- Q1068473: educational technology (le domaine)
- Q6019327: Educational Technology Research and Development (une revue de l'AECT)
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. 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.
- 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écrit 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
- https://www.wikidata.org/wiki/Property:P106 (occupation)
- https://www.wikidata.org/wiki/Property:P39 (position held)
- https://www.wikidata.org/wiki/Property:P452 (industry)
- https://www.wikidata.org/wiki/Property:P31 (instance of)
Utilisation de wikidata
Actuellement, tout le monde peut consulter les entrées et on peut électroniquement accéder aux contenus
Recherche simple
- Special:Search (Recherche globale avec un string)
- Special:ItemByTitle (recherche d'un élément selon un site/une page Wikimédia
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.
Exemple utilisant des URLs simples
- 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.ttl (format XML/RDF)
- .....
On peu obtenir la même chose via l'API standarde:
- 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
On peut obtenir une page plus "human readable" via l'API standarde.
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
Il existe pas mal d'outils et exemples externes que l'on peut utiliser (et parfois adapter).
- Crotos moteur de recherche et d'affichage d'œuvres d'art s'appuyant sur Wikidata et Wikimedia Commons
- SQID A fresh look at Wikidata
- Visualisation de morts
Modules MediaWiki API
Vous pouvez expérienter avec API Sandbox et lire la API documentation
Cet API ajoute deux modules à l'API de base (qui fonctionne par exemple avec ce wiki ou encore wikipedia).
- webgetentities. Un type de requête qui permet de récupérer des entrées et de filtrer ce qui est retourné
- wbsearchentities
wbgetentities
action=wbsearchentities&....
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)
Exemple d'un seul ID
Plusieurs ID
- https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q1068473%7CQ2020153
- https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q1068473%7CQ2020153&format=json
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):
- un (ou plusieurs) nom(s) de page wikipédia (ou autre site Wikimedia)
- 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écuper les alais 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)
- 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&ids=Q123190&props=sitelinks
- 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.
Exemple:
Cette 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
- https://www.wikidata.org/w/api.php?action=wbsearchentities&search=industry&language=en&type=property
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" 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.
On peut utiliser des
Modèle de données
Le modèle de données utilisé est introduit dans Help:Wikidata datamodel. Cette page contient la figure suivante:
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);
}
});
Liens
- Documentation officielle
- Documentation officielle en français (qui explique surtout la structure des entrées)
- Help:Items/fr
- Help:Label/fr
- Help:Description/fr
- Help:Statements/fr
- Help:Ranking/fr
- Help:Qualifiers/fr
- Tutoriels
- Wikidata Tours. Interactive tutorials