Mòdul:Itemgroup

De Viquipèdia
Salta a la navegació Salta a la cerca
Icona de documentació de mòdul Documentació del mòdul [ mostra ] [ modifica el codi ] [ mostra l'historial ] [ refresca ]

Mòdul Itemgroup (codi · ús · discussió · proves · tests · casos prova | subpàgines · enllaços)

A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]


Mòdul auxiliar per agrupar ítems de Wikidata. Serveix d'ajuda per definir grups d'ítems de forma flexible a usar en infotaules generades de Wikidata, especialment amb el Mòdul:Wikidades.

Funcions[modifica]

Existeixen tres funcions:

  • {{#invoke:itemgroup|parent|<taula>|p=<Pid>|item=<Qid>}}
    Cerca si alguns dels valors de la property <Pid>, o superiors obtinguts de forma iterativa, coincideix amb algun del <valors> d'una <taula>, i retorna el <grup> al qual pertany el valor trobat. Les dades són a Mòdul:Itemgroup/parent.
  • {{#invoke:itemgroup|group|<taula>|item=<Qid>}}
    Donat un <Qid>, obté el grup on està definit dins d'una <taula>. Les dades són a Mòdul:Itemgroup/groups.
  • {{#invoke:itemgroup|list|<taula>|<grup>}}
    Llista els valors definits en un <grup> d'una <taula> separats per una coma. Les dades són a Mòdul:Itemgroup/list.

parent[modifica]

Obté el grup dins d'una <taula> a que pertany els valors superiors de <Pid> obtinguts de forma iterativa.

Paràmetres:

  • <taula> (requerit). Primer paràmetre posicional, indica quina taula usar de les definides a Mòdul:Itemgroup/parent.
  • p=<Pid> (requerit). Identificador de la propietat on cercar els valors superiors. En la primera iteració, si no existeix la propietat pren com alternativa Instància de (P31).
  • item=<Qid> (opcional). Identificador de l'ítem, si és diferent a l'associat a la pàgina.

Les iteracions estan limitades a 10. Cerca els valors superiors a partir del millor valor obtingut. Descarta la resta de valors no fent iteracions en arbre.

Pot ser útil per fer tractament diferents en infotaules, per exemple segons Subclasse de (P279) o classificacions geogràfiques segons Localitzat a l'entitat territorial administrativa (P131).

El format de les dades a Mòdul:Itemgroup/parent, és:

esquema:
["<taula>"] = {
["<grup>"] = {'<valor1>', '<valor2>', ..... '<valorn>'}
}
dades reals:
["infobox name"] = {
["arte"] = {'Q17537576', 'Q8205328', 'Q4989906', 'Q15709879'},
["geopol"] = {'Q618123', 'Q7275'},
["Q349"] = {'Q847017','Q4438121'}
}


group[modifica]

Donat un <Qid>, obté el grup on està definit dins d'una <taula>.

Paràmetres:

  • <taula> (requerit). Primer paràmetre posicional, indica quina taula usar de les definides a Mòdul:Itemgroup/groups.
  • item=<Qid> (opcional). Identificador de l'ítem a cercar a quin grup pertany, si és diferent a l'associat a la pàgina.

list[modifica]

Llista els valors definits en un <grup> d'una <taula> separats per una coma.

Paràmetres:

  • <taula> (requerit). Primer paràmetre posicional, indica quina taula usar de les definides a Mòdul:Itemgroup/list.
  • <grup> (requerit). Segon paràmetre posicional, indica quin grup llistar de la taula indicada.

Pot ser útil per configurar llistes d'ítems sense modificar una infotaula, per exemple pels paràmetres blacklist o whitelist.

Veure també[modifica]

local p = {}

-- Argument is 'set' when it exists (not nil) or when it is not an empty string.
local function isSet(var)
	return not (var == nil or (type(var) == 'string' and mw.text.trim(var) == ''))
end

local function getEntityId(frame)
	local id = frame.args.item
	if not isSet(id) then
		id = frame:getParent().args.item
	end
	if not isSet(id) then
		id = mw.wikibase.getEntityIdForCurrentPage()
	end
	return id
end

-- get safely a serialized snak
local function getSnak(statement, snaks)
	local ret = statement
	for i, v in ipairs(snaks) do
		if not ret then return end
		ret = ret[v]
	end
	return ret
end

local function getPropId(id, prop)
	return getSnak(mw.wikibase.getBestStatements(id, prop), {1, "mainsnak", "datavalue", "value", "id"})
end

local function tableQidKey(data_in) -- fill a table qid = key
	local data_out = {}
	for k, t in pairs(data_in) do
		for i, v in ipairs(t) do
			data_out[v] = k
		end
	end
	return data_out
end

function p.parent(frame)
	local qid = getEntityId(frame)
	local prop = frame.args.p
	local data_def = require("Module:Itemgroup/parent")[frame.args[1]]
	if not (qid and prop and data_def) then return end
	local data = tableQidKey(data_def)
	
	local id_class, id_parent_class
	id_class = getPropId(qid, prop)
	if id_class == nil then
		id_class = getPropId(qid, 'P31')
	end
	if id_class == nil then
		return
	elseif data[id_class] then
		return data[id_class]
	end
	
	for iter = 1, 10 do
		id_parent_class = getPropId(id_class, prop)
		if id_parent_class == nil then
			return
		elseif data[id_parent_class] then
			return data[id_parent_class]
		else
			id_class = id_parent_class
		end
	end
	
	return
end

function p.group(frame)
	local qid = getEntityId(frame)
	local data_def = require("Module:Itemgroup/groups")[frame.args[1]]
	if not (qid and data_def) then return end
	local data = tableQidKey(data_def)
	
	return data[qid]
end

function p.list(frame)
	local data_def = require("Module:Itemgroup/list")[frame.args[1]]
	if data_def and data_def[frame.args[2]] then
		return table.concat(data_def[frame.args[2]], ',')
	end
	return
end

return p