Modulis:Utilitaire Wikidata
Moduļa dokumentācija[izveidot]
Iespējams, vēlies izveidot dokumentāciju šim modulim Vari eksperimentēt šī moduļa smilšu kastes (izveidot | spoguļversija) un testu (izveidot) lapā Lūdzu, kategorijas pievieno dokumentācijas apakšlapā. Moduļa apakšlapas. |
-- Module de requêtes Wikidata de plus haut niveau que Module:Wikidata
local p = {}
local wikidata = require "Module:Wikidata/fr"
local linguistic = require "Module:Valodas rīki"
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
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