Modifications

Sauter à la navigation Sauter à la recherche
2 832 octets ajoutés ,  15 juillet 2017 à 17:52
aucun résumé de modification
local wd = require("Module:Wikidata")
local util = require("Module:Utilitaire")
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

local function extract_lbls(entite, prop_id)
local stmts = entite:getBestStatements(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)
if not id or id == '' then
return
end
if (includelabel == nil) then includelabel = true end

if tonumber(id) then
id = 'Q' .. id
end
local entite = mw.wikibase.getEntity(id)

if entite then
local description = mw.wikibase.description(id)
local label = entite:getLabel()

local desc = description or ""

if includelabel then
desc = descriptionManuelle(label, description)
end

local autodesc = descriptionAuto(entite)
local sep = ""

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

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
Utilisateur anonyme

Menu de navigation