Módulo:Wikidata/unidades
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:
-- Entidad Texto
['Q8805'] = '[[Bit|b]]',
Uso
main()
Para integrar la funcionalidad en otros módulos, se puede seguir el siguiente código de ejemplo:
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
Parámetros
|val=
el identificador de unidad de Wikidata.
numeroUnidad()
Se provee la función auxiliar numeroUnidad()
como una forma conveniente de concatenar el número con su unidad disponible.
local numeroUnidad = require('Módulo:Wikidata/unidades').numeroUnidad
...
local Edad = numeroUnidad(elementoTabla(Entidad, 'claims', 'P6249', 1, 'mainsnak', 'datavalue'))
Parámetros
|objeto=
, el objetodatavalue
|opciones=
, una tabla de opciones, usualmente pasada mediante la función propiedad() presente en varios módulos. Las opciones aceptadas son:
|opciones['izquierda']=
permite colocar la unidad a la izquerda. Por defecto, este va a la derecha.|opciones['separador']=
especificar un separador alternativo (por defecto un espacio duro
).
numeroUnidad()
acepta como parámetro el objeto datavalue
. Si el tipo de dato es amount
, y se ha especificado una unidad válida, dicha unidad será concatenada de acuerdo a los parámetros |opciones['izquierda']=
y |opciones['separador']=
.
Función envoltura propiedad()
La siguiente función envoltura provee una fácil integración de este módulo en módulos de fichas.
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
¿Por qué los datos en un módulo separado?
Véase la función loadData()
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 ' '
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