Modulo per leggere da Wikidata la data e il VEI dell'ultima eruzione di un vulcano.

Su Wikidata le singole eruzioni di un vulcano sono elencate come elementi della proprietà evento chiave (P793). Il modulo utilizza perciò la funzionalità dell'accesso arbitrario per leggere l'indice di esplosività vulcanica e data di inizio di ciascuna eruzione, stabilendo al contempo qual'è la più recente.

Funzioni

La funzioni accettano un unico parametro posizionale facoltativo, per specificare l'id dell'elemento wikidata relativo al vulcano. Se non inserito, verrà utilizzato l'elemento collegato alla pagina in cui è usato il modulo.

data

Questa funzione ritorna la data della eruzione più recente.

Per esempio con {{#invoke:Eruzione|data|Q1451}} (Q1451 è il Pinatubo) si otterrà → febbràre 1993

VEI

Questa funzione ritorna il VEI della eruzione più recente. Su Wikidata il VEI accetta valori di tipo elemento (otto, uno per ogni valore da 0 a 8), e questa funzione ne ritorna il relativo id.

Per esempio con {{#invoke:Eruzione|VEI|Q1451}} si otterrà → Q19988064.


--[[
* Modulo che ritorna le informazioni presenti su Wikidata riguardo alla eruzione
* più recente di un vulcano, come l'indice VEI o la data di inizio dell'eruzione.
]]

require('strict')

local mWikidata = require('Modulo:Wikidata')

-- Q-number validi come "istanza di" per un vulcano
local volcanoIds = { 'Q8072', 'Q159954', 'Q169358', 'Q190869', 'Q212057', 'Q332614',
					 'Q674775', 'Q1197120', 'Q1200524', 'Q1491559', 'Q17171019' }
-- Q-number validi come "istanza di" per una eruzione
local eruptionIds = { 'Q7692360', 'Q611880', 'Q747501', 'Q1060842', 'Q1199175',
					  'Q1639789', 'Q2546109', 'Q2703194', 'Q5943937' }
-- Item da correggere su Wikidata
local trackingCategory = '[[Categoria:Vulcani con proprietà P793 errata su Wikidata]]'
-- Numero massimo di item da analizzare per evento chiave (P793)
local maxItemsP793 = 50

local p = {}

local function getLatestEruption(from)
	local latestEruption, ids, cat
	
	volcanoIds.from = from
	if not mWikidata._instanceOf(volcanoIds) then
		return nil
	end

	ids = mWikidata._getProperty( { 'P793', formatting = 'raw', from = from }, true ) or {}
	if #ids > maxItemsP793 then
		return nil
	end
	
	for _, entityId in ipairs(ids) do
		if entityId == 'Q7692360' then
			cat = trackingCategory
		else
			eruptionIds.from = entityId
			if mWikidata._instanceOf(eruptionIds) then
				local eruption = {
					rawStart = mWikidata._getProperty( { 'P580', n = 1, formatting = 'raw', from = entityId } ),
					start = mWikidata._getProperty( { 'P580', n = 1, from = entityId } ),
					VEI = mWikidata._getProperty( { 'P1903', n = 1, formatting = 'raw', from = entityId } )
				}
				if eruption.rawStart and (not latestEruption or eruption.rawStart > latestEruption.rawStart) then
					latestEruption = eruption
				end
			end
		end
	end

	return latestEruption, cat
end

function p.data(frame)
	local latestEruption, cat = getLatestEruption(frame.args[1])
	return (latestEruption and latestEruption.start or '') .. (cat or '')
end

function p.VEI(frame)
	local latestEruption, cat = getLatestEruption(frame.args[1])
	return ((latestEruption and latestEruption.VEI) and latestEruption.VEI or '') .. (cat or '')
end

return p