Module:Essai
Apparence
La documentation de ce module est générée par le modèle {{Documentation module}}.
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.
--[[
test de fonctionnalités. J'effacerai moi-même lorsque ce sera
terminé
--]]
local p = {}
local wd = require 'Module:Wikidata'
--[[ table des métiers (WD) que l'on veut gérer
cette table est indexée par le code WD de l'élément recherché, et
contient une table avec (à faire évoluer) :
'catégorie' (la catégorie à associer)
'infobox' (l'infobox dédiée)
'texte' (un libélé utilisable)
]]--
p.association = {
["Q483501"] = { ["catégorie"] = "Artiste", ["infobox"] = "Infobox Artiste", ["texte"] = "[[artiste]]" },
["Q2066131"] = { ["catégorie"] = "Sportif", ["infobox"] = "Infobox Sportif", ["texte"] = "[[sportif]]" },
["Q82955"] = { ["catégorie"] = "Personnalité politique", ["infobox"] = "Infobox Politique", ["texte"] = "[[homme politique]]" },
["Q47064"] = { ["catégorie"] = "Militaire", ["infobox"] = "Infobox Militaire", ["texte"] = "[[militaire]]" },
}
--[[
fonction parcourant les "parents" de l'élément indiqué et retournant
le premier élément présent dans la table 'association' durant ce processus
(ou référencé par un 'identique à').
Fait au maximum 'prof' itérations.
Retourne 'nil' si rien n'est trouvé.
]]--
function p.cherche_parents(el, prof)
if (prof <= 0) then
return nil -- fin de récursion
end
-- si l'élément courant est dans la table on le retourne (récursion)
if (p.association[el] ~= nil) then
return el
end
-- on récupère les P460 (réputé identique à) au cas où
local args = { ["property"] = "P460", ["entity"] = el, link = "-", displayformat = "raw" }
local id = wd.stringTable(args)
if (id ~= nil) then
-- correspond ?
for k, v in pairs(id) do
if (p.association[v] ~= nil) then
return v -- trouvé, on quitte
end
end
end
-- si on arrive ici c'est qu'il n'a pas d'équivalence. On parcours
-- les "sous-classe de" (P279) récursivement
args = { ["property"] = "P279", ["entity"] = el, link = "-", displayformat = "raw" }
id = wd.stringTable(args)
if (id ~= nil) then
-- pour chaque "sur-classe" on se ré-appelle
local ret
for k, v in pairs(id) do
ret = p.cherche_parents(v, prof-1)
if (ret ~= nil) then
return ret
end
end
end
-- ici on n'a rien trouvé → nil
return nil
end
--[[
fonction retournant une liste des éléments de la table 'p.association'
trouvés à partir de la propriété 'property' pour l'entité 'entity' (ou l'article
courant si 'entity' vaut 'nil')
si une propriété présente n'est pas référencée ???
]]--
function p.propriete_parente(property, entity)
local args = { ["property"] = property, link = "-", displayformat = "raw" }
local out = {} -- table des résultats
if (entity ~= nil) then
args["entity"] = entity
end
local res = wd.stringTable(args)
-- si aucun résultat on retourne nil
if (type(res) ~= "table") then
return nil
end
-- on parcours tous les résultats à la recherche de ceux qui sont dans la
-- liste 'association' ou ayant un élément fils de l'un d'entre eux
for k, v in pairs(res) do
-- si l'élément est présent on l'insert directement
if (p.association[v] ~= nil) then
table.insert(out, v)
else
-- on cherche "récursivement" chez les parents
-- la valeur numérique est la profondeur max de recherche
local d = p.cherche_parents(v, 3)
if (d ~= nil) then
table.insert(out, v)
end
end
end
return nil
end
--[[
fonction retournant true si la valeur 'value' est présente dans la liste des
propriétés 'property' pour l'entité 'entity' (ou l'article courant si 'entity'
vaut 'nil')
retourne false sinon
]]--
function p.presence_propriete(property, value, entity)
local args = { ["property"] = property, link = "-", displayformat = "raw" }
if (entity ~= nil) then
args["entity"] = entity
end
local res = wd.stringTable(args)
-- pas de résultat, cette propriété WD est absente je présume
if (res == nil) then
return false
end
-- on parcours les résultats pour voir si celle qu'on veut est là
for k, v in pairs(res) do
if (v == value) then
return true -- trouvé
end
end
return false -- pas trouvé
end
--[[
fonction qui retourne true si un élément wikidata existe pour l'article
courant (ou l'élément 'entity' si différent de 'nil') et false sinon
Note : le paramètre 'entity' n'a pas de sens, c'est juste pour du test. En
effet si on a une 'entity' c'est que ça existe…
]]--
function p.a_wikidata(entity)
if (entity == nil) then
if (mw.wikibase.getEntity() ~= nil) then
return true
else
return false
end
else -- cette partie disparaitra
if (mw.wikibase.getEntity(entity) ~= nil) then
return true
else
return false
end
end
end
function p.traite(entity, nom)
local ret = "Pour " .. nom .. ":<br/>"
local t1 = p.a_wikidata(entity)
if (t1) then
ret = ret .. "possède une entrée WD<br/>"
local t2 = p.presence_propriete("P31", "Q5", entity)
if (t2) then
ret = ret .. "c'est un être humain<br/>"
-- suite : les métiers
local t3 = p.propriete_parente("P106", entity)
if (t3) then
ret = ret .. "métier(s) (P106) trouvés : "
ret = ret .. table.concat(t3, " / ")
else
ret = ret .. "pas de métiers (P106) trouvé dans la liste"
end
else
ret = ret .. "ce n'est pas un être humain<br/>"
end
else
ret = ret .. "n'a pas d'entrée WD<br/>"
end
ret = ret .. "fin test pour " .. nom .. ".<br/>"
return ret
end
function p.essai(frame)
local ret = ""
-- test sur l'article en cours (page de discussion)
ret = ret .. p.traite(nil, "[[Discussion module:Essai]]") -- traite la page en cours
ret = ret .. p.traite("Q392", "[[Bob Dylan]]") -- traite Bob Dylan
return ret
end
return p