Module:Utilitaire Wikidata : Différence entre versions
m (Dépréqués) |
(gestion de la mise en forme des dates par Module:Date complexe) |
||
Ligne 3 : | Ligne 3 : | ||
local wikidata = require "Module:Wikidata" | local wikidata = require "Module:Wikidata" | ||
local linguistic = require "Module:Linguistique" | local linguistic = require "Module:Linguistique" | ||
+ | local formatDate = require "Module:Date complexe" | ||
+ | |||
local function keydate (event) | local function keydate (event) | ||
if type(event) ~= 'string' then | if type(event) ~= 'string' then | ||
Ligne 30 : | Ligne 32 : | ||
-- puis limite intérieur / supérieur | -- puis limite intérieur / supérieur | ||
if not v then | if not v then | ||
− | local start = wikidata. | + | local start, ending = wikidata.getQualifiers(val, {'P1319'}), wikidata.getQualifiers(val, {'P1326'}) |
− | |||
if start then | if start then | ||
− | + | start = wikidata.dateobject(start[1].datavalue.value) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | + | if ending then | |
− | + | ending = wikidata.dateobject(ending[1].datavalue.value) | |
− | + | end | |
− | + | return formatDate.between(start, ending) | |
− | |||
− | |||
− | |||
end | end | ||
Ligne 63 : | Ligne 53 : | ||
-- ajouter le qualificatifs "environ" | -- ajouter le qualificatifs "environ" | ||
if v and val.qualifiers and val.qualifiers.P1480 then | if v and val.qualifiers and val.qualifiers.P1480 then | ||
− | + | v = formatDate.fuzzydate(v) | |
− | |||
− | |||
− | |||
end | end | ||
if v then | if v then |
Version du 20 mars 2016 à 21:04
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 formatDate = require "Module:Date complexe" 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, ending = wikidata.getQualifiers(val, {'P1319'}), wikidata.getQualifiers(val, {'P1326'}) if start then start = wikidata.dateobject(start[1].datavalue.value) end if ending then ending = wikidata.dateobject(ending[1].datavalue.value) end return formatDate.between(start, ending) 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 v = formatDate.fuzzydate(v) end if v then table.insert(newvals, v) end end local str = linguistic.conj(newvals, 'or') if str then if options.addcat ~= '-' then str = str .. wikidata.addtrackingcat(prop) end if options.linkback ~= '-' 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.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 return p