« Module:Utilitaire Wikidata » : différence entre les versions

De Lagny-sur-Marne Wiki
Aller à la navigation Aller à la recherche
0x010D (discussion | contributions)
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
0x010D (discussion | contributions)
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

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