Module:Utilitaire Wikidata
Révision datée du 4 février 2016 à 03:40 par Zebulon84 (discussion) (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)
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 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