Aller au contenu

Module:Wikidata/Nommage

Cette page fait l’objet d’une mesure de semi-protection étendue.
Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 27 octobre 2018 à 13:36 et modifiée en dernier par TomT0m (discuter | contributions) (corrections for the template interface call). 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 :

  • nameForItem(frame) – interface du modèle permettant de trouver le nommage d’un élément en fonction de la date-valeur d’une propriété d’un autre élément.
  • NameAtPropValue(toNameEntity, AtDateProperty, forItem) – retourne le nom de l’entité à nommer à la date donnée par la valeur de propriété pour l’élément (optionnel, par défaut l’élément associé à la page)
    toNameEntity : identifiant Wikidata d’un élément (ex: «Q1»)
    AtDateProperty: identifiant d’une propriété Wikidata de type de donnée date (ex: «P1448», date de naissance)
  • NameAtDate(toNameEntity, date) – fonction retournant le nom d’une entité à une certaine date, si trouvé, ou nil sinon

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 :

  • Module:Wikidata – pour l’extraction des données Wikidata

Exemples

Évry-Petit-Bourg

-- Module Wikidata d’aide à la gestion du nommage des entités, en particulier le nommage des entités à une date donnée
-- Work In Progress version « marche pas »

local wikidata = require "Module:Wikidata"
local modules = {}
modules.formatDate = require "Module:Date complexe"
local fun = require "Module:Luafun"

local PofficialName = "P1448"
local PDateNaissance = "P569"

local p = {}


-------------------------------------------------------------
-- copied from Module:Wikidata as these are not local functions for now
local function timeFromSnak(snak)
	if snak and snak.snaktype == "value" then
		return snak.datavalue.value.time
	end
end

local function timeFromQualifs(claim, qualifs)
	local claimqualifs = claim.qualifiers
	if not claimqualifs then
		return nil
	end
	for i, qualif in pairs(qualifs or timequalifiers) do
		local vals = claimqualifs[qualif] or {}
		local cand = timeFromSnak(vals[1])
		if cand then return cand end
	end
end

local function atDate(claim, mydate)
	if mydate == "today" then
		mydate = os.date("!%Y-%m-%dT%TZ")
	end	
	mw.log("testdate")
	local newclaims = {}
	local mindate = timeFromQualifs(claim, {'P580'}) 
	local maxdate = timeFromQualifs(claim, {'P582'})
	mw.logObject(mydate)
	if modules.formatDate.before(mydate, mindate) and  modules.formatDate.before(maxdate, mydate) then
		return true
	end
end
-------------------------------------------------------------------------------------------

local function stmtMeetsOneTrueIn(condition, values)
	return function(stmt)
		return values:any(
			function(date) return condition(stmt, date) end
		)
	end
end

local function mainSnak(stmt)
	return stmt.mainsnak
end

p.nameAtDate = function (place_qid, date_claims)
	local names = mw.wikibase.getAllStatements(place_qid, "P1448")
	mw.log(#date_claims)
	local date_vals = fun.iter(date_claims):map(mainSnak):map(timeFromSnak)
	date_vals:each(mw.log)
	
	local atOneOfTheDates = stmtMeetsOneTrueIn(atDate, date_vals)
	
	names = wikidata.filterClaims(
		names, 
		{
			['condition'] = atOneOfTheDates, 
			['isinlang'] = 'fr', 
			['rank'] = 'valid'
		}
	)
	
	return names
end

-- =p.nameAtPropValue("Q192393", "P569" ,"Q2977199")
p.nameAtPropValue = function(toNameEntity, AtDateProperty, forItem)
	local dates = mw.wikibase.getBestStatements(forItem, AtDateProperty)
	names = p.nameAtDate(toNameEntity, dates)
	return names
end

-- interface for a test template
p.nameForItem = function(frame)
	local item = frame.args["item"]
	local atDateProperty = frame.args["atDateProperty"]
	local toNameEntity = frame.args["toNameEntity"]
	res = p.nameAtPropValue(toNameEntity, atDateProperty, item)
	return wikidata.formatStatements{
		claims=res, conj="ou"
	}
end

return p