Módulo:Wikidata/unidades/doc

De borradopedia
Ir a la navegación Ir a la búsqueda

Esta es la página de documentación de 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 objeto datavalue
  • |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.