Módulo:Wikidata/unidades

De Enciclopedia de conocimiento de la Iglesia de Dios
Ir a la navegación Ir a la búsqueda

Este módulo implementa desde cero una forma de obtener las unidades, en base a la entidad de Wikidata asociada a dicha unidad. Toda actualización debe hacerse en Módulo:Wikidata/unidades/datos, siguiendo este formato:

<syntaxhighlight lang="lua"> -- Entidad Texto

   ['Q8805'] = 'b',

</syntaxhighlight>

Uso

Plantilla:Code

Para integrar la funcionalidad en otros módulos, se puede seguir el siguiente código de ejemplo: <syntaxhighlight lang="lua"> local getUnit = require('Módulo:Wikidata/unidades').main local elementoTabla = require('Módulo:Tablas').elemento

local Dato = elementoTabla(Entidad, 'claims', idPropiedad, 'mainsnak', 'datavalue') local Valor = elementoTabla(Dato, 'value') local Tipo = elementoTabla(Dato, 'type')

if Tipo == 'quantity' then

   Unidad      = elementoTabla(Valor, 'unit')
   Valor       = string.sub(elementoTabla(Valor, 'amount'), 2)
   if Unidad then Valor = Valor .. getUnit(Unidad) end -- La posición y espaciado de la unidad depende del valor

end </syntaxhighlight>

Parámetros

Plantilla:Code

Se provee la función auxiliar Plantilla:Code como una forma conveniente de concatenar el número con su unidad disponible. <syntaxhighlight lang="lua"> local numeroUnidad = require('Módulo:Wikidata/unidades').numeroUnidad ... local Edad = numeroUnidad(elementoTabla(Entidad, 'claims', 'P6249', 1, 'mainsnak', 'datavalue')) </syntaxhighlight>

Parámetros

Plantilla:Code acepta como parámetro el objeto Plantilla:Code. Si el tipo de dato es Plantilla:Code, y se ha especificado una unidad válida, dicha unidad será concatenada de acuerdo a los parámetros Plantilla:Param y Plantilla:Param.

Función envoltura Plantilla:Code

La siguiente función envoltura provee una fácil integración de este módulo en módulos de fichas. <syntaxhighlight lang=lua> function propiedad(idPropiedad, opciones, entidad) if not entidad then entidad = Entidad end

if entidad and entidad.claims and entidad.claims[idPropiedad] then if not opciones then opciones = {['linkback']='sí'} end

-- Valores cuya unidad deba ir a la derecha, separada de un espacio if opciones['unidad'] then if elementoTabla(Entidad, 'claims', idPropiedad, 2, 'mainsnak', 'datavalue') then return formatoNumero(elementoTabla(Entidad, 'claims', idPropiedad, 1, 'mainsnak', 'datavalue', 'value', 'amount')) .. ' - ' .. numeroUnidad(elementoTabla(Entidad, 'claims', idPropiedad, 2, 'mainsnak', 'datavalue')) else return numeroUnidad(elementoTabla(Entidad, 'claims', idPropiedad, 1, 'mainsnak', 'datavalue')) end

-- Valores cuya unidad deba ir a la izquierda (ej, las monedas o divisas) elseif opciones['precio'] then if elementoTabla(Entidad, 'claims', idPropiedad, 2, 'mainsnak', 'datavalue') then return numeroUnidad(elementoTabla(Entidad, 'claims', idPropiedad, 1, 'mainsnak', 'datavalue'), false) .. ' - ' .. numeroUnidad(elementoTabla(Entidad, 'claims', idPropiedad, 2, 'mainsnak', 'datavalue'), false) else return numeroUnidad(elementoTabla(Entidad, 'claims', idPropiedad, 1, 'mainsnak', 'datavalue'), false) end end

opciones.entityId = entidad.id opciones.propiedad = idPropiedad return ModuloWikidata.getPropiedad(opciones,entidad.claims[idPropiedad]) end end </syntaxhighlight>

¿Por qué los datos en un módulo separado?

Véase la función [[mw:Extension:Scribunto/Lua_reference_manual/es#mw.loadData|Plantilla:Code]] de la extensión Scribunto para más información.

¿Qué hay de los módulos auxiliares de Módulo:Wikidata?

Este módulo no pretende ser un reemplazo para los módulos auxiliares de formato del Módulo:Wikidata, sino que una alternativa para ser usada en módulos con un nuevo código, mucho más limpio. Aunque, tarde o temprano, este código terminará integrándose dentro del módulo principal.


local p = {}
local ModuloWikidata	= require('Módulo:Wikidata')
local ModuloFormatos	= require('Módulo:Wikidata/Formatos')
local elementoTabla		= require('Módulo:Tablas').elemento

-- Obtener el wikitexto de la unidad como entidad de Wikidata
-- @param string val el valor a buscar
function p.main(val)
	local vals				= mw.loadData('Módulo:Wikidata/unidades/datos')
    q = string.sub(val, 32)
    return	vals[q]--[[ or (function()
    	if q then
	    	local entidad = mw.wikibase.getEntity(q:gsub("-plural", ""))
	    	if entidad then
	    		return ModuloWikidata.propiedad(entidad, 'P5061', {['idioma'] = 'es'})
	    		or ModuloFormatos.enlazar(ModuloWikidata.obtenerEtiquetaWikidata(entidad))
	    	end
	    end
    end)()--]]
end

-- Función para formatear un valor numérico con su unidad.
-- @param table objecto El objeto 'datavalue'
-- @param bool right Dónde colocar la unidad
-- (a la derecha por defecto; 'false' para colocarla a la izquierda)
-- @param string separador Un separador ('' (string vacío) por defecto)
-- @param bool plural Agregar '-plural' al string correspondiente al item de
-- Wikidata a buscar entre la lista de unidades, y devolver su variante plural.
-- @return string Si el tipo de valor 'datavalue.type' es 'quantity', devuelve el valor 
-- 'datavalue.value.amount' concatenado con 'datavalue.value.unit', de estar este disponible.
-- Si el tipo de valor 'datavalue.type' es diferente de 'quantity',
-- simplemente devuelve 'datavalue.value'
function p.numeroUnidad(objecto, opciones)
	local Valor	= elementoTabla(objecto, 'value')
	local Tipo	= elementoTabla(objecto, 'type')

	if Tipo == 'quantity' then
		if not opciones then opciones = {} end

		local Separador 	= opciones['separador'] or '&nbsp;'
		local Izquierda		= opciones['izquierda']
		local Unidad = (function()
			local Unidad = elementoTabla(Valor, 'unit')
			if Unidad then return p.main(Unidad .. '-plural') or p.main(Unidad) end
		end)()

		if Unidad then
			Valor	= ModuloFormatos.formatoNumero2(string.sub(elementoTabla(Valor, 'amount'), 2))
			if Izquierda then return Unidad .. Separador .. Valor end
			return Valor .. Separador .. Unidad
		end
	end
	return Valor
end

return p