Module:Description

De Wikonsult
Révision datée du 5 mai 2020 à 17:02 par Yves.bertin (discussion | contributions) (1 révision importée)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à la recherche

Utilisation

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.

Autres fonctions :

  • fonction() – description2 (courte description de fonction() et autres informations pertinentes).

Modules externes et autres éléments dont ce module a besoin pour fonctionner :

  • mw.title – description (courte description expliquant la dépendance de ce module externe).

Exemples

Pour des exemples, voir la page de test permettant de tester diverses modifications apportées.


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