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 15 août 2015 à 15:08 et modifiée en dernier par TomT0m (discuter | contributions) (refactoring, moving utility functions out of the module). 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 ...
	mw.log(statement.mainsnak.datavalue.value["numeric-id"])
	return "Q" .. tostring(statement.mainsnak.datavalue.value["numeric-id"]) 
end


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
		
		if props:is_in(instance) then
			stmts = entite:getBestStatements(instance)
			autodesc = ""
			if tablelength(stmts) > 0 then 
				ids = util.map (mainValueEntityId, stmts)
				lbls = util.map (mw.wikibase.label, ids)
				autodesc = util.formatTableWithLastSep(lbls, ", ", "et ")
			end
		end
	end
	
	return autodesc
end

function p.decrireEntite(id)
	entite = mw.wikibase.getEntity(id)
	
	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
end

p.PropClass = PropClass

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

return p