Aller au contenu

Module:Description

Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 16 décembre 2015 à 20:29 et modifiée en dernier par Zebulon84 (discuter | contributions) (inutile de renvoyer un message d'erreur s'il n'y a même pas de paramètre.). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

 Documentation[voir] [modifier] [historique] [purger]

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.
  • 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

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
	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)
	if not id or id:match('%s*') then
		return
	end
	
	local entite = mw.wikibase.getEntity(id)
	if entite then
		local description = mw.wikibase.description(id)
		
		local desc = descriptionManuelle(entite:getLabel(), description)
		local autodesc = descriptionAuto(entite)
		if autodesc ~= nil then 
			desc = desc .. " ; " .. autodesc
		end
		return desc
	else
		return '<span class="error">identifiant wikidata inconnu</span>'
	end
end

p.PropClass = PropClass

function p.description(frame)
	return p.decrireEntite(frame.args[1])
end

return p