Module:Description
[voir] [modifier] [historique] [purger]
Utilisation modifier
Fonctions exportables :
description(frame)
– calcule une description textuelle d'une entité Wikidata (paramètre 1=identifiant de l'entité) à partir des déclaration génériques (nature, sous-classe, …) et de la description Wikidata.description_par_prio(frame)
– calcule une description textuelle d'une entité Wikidata. Si une description Wikidata est présente, l’afficher, sinon calculer la description auto.
Exemples modifier
Pour des exemples, voir la page de test permettant de tester diverses modifications apportées.
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
local wd = require("Module:Wikidata")
local util = require("Module:Utilitaire")
local qid = require("Module:Numéro Q")
local p= {}
local proprietes = {instance_de= "P31", sous_classe_de = "P279" }
local function descriptionManuelle(label, description)
local res = nil
if label ~= nil and description ~= nil then
res = label .. ": " .. description
elseif label ~= nil then
res = label
elseif description ~= nil then
res = description
else
res = "" -- label manquant
end
return res
end
function mainValueEntityId(statement)
-- TODO check the snak type : property, novalue, somevalue ...
return "Q" .. tostring(statement.mainsnak.datavalue.value["numeric-id"])
end
-- get the labels of the values of statements for property "prop_id" on "entite"
local function extract_lbls(entite, prop_id)
local stmts = mw.wikibase.getBestStatements(entite, prop_id)
if util.tablelength(stmts) > 0 then
local ids = util.map (mainValueEntityId, stmts)
local lbls = util.map (mw.wikibase.label, ids)
return lbls
end
return {}
end
-- test avec = p.decrireEntite("Q8183")
local function descriptionAuto(entite)
local autodesc = nil
local props = util.Set:new(entite:getProperties())
local instance = proprietes["instance_de"]
local sousclasse = proprietes["sous_classe_de"]
if props:is_in(instance) or
props:is_in(sousclasse) then
-- instance de
if props:is_in(instance) then
local lbls = extract_lbls(entite, instance)
autodesc = ""
if util.tablelength(lbls) > 0 then
autodesc = util.formatTableWithLastSep(lbls, ", ", " et ")
end
end
-- sous classe de
if props:is_in(sousclasse) then
local lbls = extract_lbls(entite, sousclasse)
if util.tablelength(lbls) > 0 then
if autodesc ~= nil then
autodesc = autodesc .. " ; "
else
autodesc = ""
end
autodesc = autodesc .. "type de " .. util.formatTableWithLastSep(lbls, ", type de ", " et type de ")
end
end
end
return autodesc
end
function p.decrireEntite(id, includelabel, mode)
if not id or id == '' then
return
end
if (includelabel == nil) then includelabel = true end
if tonumber(id) then
id = 'Q' .. id
end
-- supprime une éventuelle ancre vers une propriété (ex. Q1#P580)
id = id:gsub('#.+$', '')
-- local entite = mw.wikibase.getEntity(id)
if entite then
local description = mw.wikibase.description(id)
local label = mw.wikibase.label(id)
local desc = description or ""
if includelabel then
desc = descriptionManuelle(label, description)
end
if (not(mode=="manuel_seul")) then
local autodesc = descriptionAuto(id)
local sep = ""
end
if description ~= nil then
sep = " ; "
elseif includelabel then
sep = ": "
end
if autodesc ~= nil then
desc = desc .. sep .. autodesc
else
end
return desc
else
return '<span class="error">identifiant wikidata inconnu</span>'
end
end
p.PropClass = PropClass
-- Affiche, sans libellé, la description manuelle si elle existe sinon une description auto
function p.description_par_prio(frame)
local id = qid._numero(frame.args[1], frame.args[2], frame.args[3])
if not id then return end
local description = mw.wikibase.description(id)
if description and description ~= "" then
return description
end
return descriptionAuto(id)
end
function p.description(frame)
if frame.args["nolabel"] then
return p.decrireEntite(frame.args[1], false)
end
return p.decrireEntite(frame.args[1])
end
return p