Module:Utilitaire Wikidata : Différence entre versions

De Lagny-sur-Marne Wiki
Aller à : navigation, rechercher
(wikidatadate : formatStatements ne fait rien si value est fourni. Modification en fonction de ce que je comprend du but de cette dernière ligne. (permet le retour de l'age dans les infobox)
(remplacer les 'au plus tôt' et 'au plus tard' par 'avant', 'après' et 'entre', plus naturel)
Ligne 33 : Ligne 33 :
 
local ending = wikidata.getFormattedQualifiers(val, {'P1326'})
 
local ending = wikidata.getFormattedQualifiers(val, {'P1326'})
 
if start then
 
if start then
start = start .. ', au plus tôt'
+
if ending then
 +
v = 'entre ' .. start .. ' et ' .. ending
 +
else
 +
v = 'après ' .. start
 +
end
 +
else
 +
if ending then
 +
v = 'avant ' .. ending
 +
else
 +
v = ''
 +
end
 
end
 
end
if ending then
+
--if start then
ending = ending .. ', au plus tard'
+
-- start = start .. ', au plus tôt'
end
+
--end
v = linguistic.conj({start, ending}, 'comma')
+
--if ending then
 +
-- ending = ending .. ', au plus tard'
 +
--end
 +
--v = linguistic.conj({start, ending}, 'comma')
 
end
 
end
 
 

Version du 29 février 2016 à 09:02

La documentation pour ce module peut être créée à Module:Utilitaire Wikidata/doc

-- Module de requêtes Wikidata de plus haut niveau que Module:Wikidata
local p = {}
local wikidata = require "Module:Wikidata"
local linguistic = require "Module:Linguistique"
local function keydate (event)
	if type(event) ~= 'string' then
		return error('event should be a string starting with a P or S, datatype is ' .. type(event))
	end
	if string.sub(event, 1, 1) == 'Q' then -- on demande un élément utilisé dans P:P793 (événement clé)
		return  wikidata.getTheDate{property = 'P793', targetvalue = event, addcat = true, entity = item}
	elseif string.sub(event, 1, 1) == 'P'  then -- on demande une propriété
		return wikidata.formatAndCat{property = event, entity = item}
	else
		return error('event string should start with P or S, is "' .. event .. '"')
	end
end

function p.wikidatadate(prop, item, options) 	-- formate un statmement de type date en prenant en compte certains qualificatifs
	options = options or {}
	local vals = wikidata.getClaims{entity = item, property = prop}
	if not vals then
		return nil
	end
	local newvals = {}
	for i, val in pairs(vals) do
		
		--cherche la date avec les qualifs P580/P582
		local v = wikidata.getFormattedDate(val, options) 
		
		-- puis limite intérieur / supérieur
		if not v then
			local start = wikidata.getFormattedQualifiers(val, {'P1319'}) 
			local ending = wikidata.getFormattedQualifiers(val, {'P1326'})
			if start then
				if ending then
					v = 'entre ' .. start .. ' et ' .. ending
				else
					v = 'après ' .. start
				end
			else
				if ending then
					v = 'avant ' .. ending
				else
					v = ''
				end
			end
			--if start then
			--	start = start .. ', au plus tôt'
			--end
			--if ending then
			--	ending = ending .. ', au plus tard'
			--end
			--v = linguistic.conj({start, ending}, 'comma')
		end
		
		 -- sinon, le mainsnak
		if not v then
			if val.mainsnak.snaktype ~= 'value' then
				v = wikidata.formatStatement(val, options)
			elseif val.mainsnak.datavalue.value.precision > 7 then
				v = wikidata.formatStatement(val, options)
			end
		end
		
		-- ajouter le qualificatifs "environ"
		if v and val.qualifiers and val.qualifiers.P1480 then
			local q = wikidata.getid( val.qualifiers.P1480[1]) 
			if q == 'Q5727902' then
				v = 'vers ' .. v
			end
		end
		if v then
			table.insert(newvals, v)
		end
	end
	local str = linguistic.conj(newvals, 'or')
	if str then
		if options.addcat or true then
			wikidata.addtrackingcat(prop)
		end
		if options.linkback or true then
			str = wikidata.addLinkback(str, item, prop)
		end
		return str
	end
end

function p.maindate(entity) -- à améliorer en utilisant module:Date complexe comme pour wikidata.getDate
	
	-- essaye P580/P582
	local startpoint = p.wikidatadate('P580', entity, {linkback = "-"})
	local endpoint = p.wikidatadate('P582', entity, {linkback = "-"})
	local str
	if startpoint or endpoint then
		str = (startpoint or '') .. ' - ' .. (endpoint or '')
		str = wikidata.addLinkback(str, entity, 'P582')
	end

	if str then
		return str
	end
	-- défaut : P585
	return p.wikidatadate('P585', entity)
end

function p.addLinkback(str, entity, property)
	return wikidata.addLinkback(str, entity, property)
end

function p.addtrackingcat(prop, cat)
	return wikidata.addtrackingcat(prop, cat)
end

function p.keydate(events)
	if type(events) == 'nil' then
		return nil
	end
	if type(events) == 'string' then
		return keydate(events)
	elseif type(events) == 'table' then
		for i, j in pairs(events) do
			local val = keydate(j)
			if val then
				return val
			end
		end
	end
end
function p.getClaims(args) 
	return wikidata.getClaims(args)
end
function p._formatStatements(args)
	return wikidata._formatStatements(args)
end
function p.formatAndCat(args)
	return wikidata.formatAndCat(args)
end

return p