Módulo:Zona de pruebas/Miguillen/Wikidata/Declaración
Apariencia
Este módulo no tiene página de documentación[crear]
local p = {}
local es = mw.language.new('es') -- Configuración de idioma español
local elemento = mw.wikibase.getEntityObject() --Tabla con todos los datos de Wikidata
--[[
====================================================================
Para valor de Wikidata: Itera los valores que tiene una propiedad
====================================================================
]]
function p.iterar(tabla,salto,clave, enlazar)
local tablaOrdenada = {}
local declaracion = {}
-- == Propiedades que solo deben devolver un valor ==
local propUnValor = {'P41','P18','P94','P242','P6','P1082','P163','P237','P625'}
for k,v in pairs(propUnValor) do -- Se comprueba si coincide propiedad
if clave == v then
return valorDato(tabla[1], enlazar) -- Si coincide devuelve el primer índice de la tabla
end
end -- Si no coincide continua el proceso
-- == Iteramos los valores de la tabla creando una cadena de texto con ellos ==
if tabla ~= nil then
for k,v in pairs(tabla) do
table.insert(declaracion,valorDato(v,enlazar))
end
if salto and salto ~= 'línea' then
return table.concat(declaracion,'<br>') -- Se concatenan los valores de la tabla con un salto de línea entre ellos
elseif salto == 'línea' then
return mw.text.listToText(declaracion) -- Se concatena los valores de la tabla con coma de separador y de conjunción para el último valor
else
return table.concat(declaracion) -- Se concatenan los valores de la tabla sin separador
end
else
return'<span class="error">No tiene ninguna propiedad en Wikidata</span>'
end
end
--[[
====================================================================
Para valor de Wikidata: Seleciona el formato del valor
en función del tipo de dato
====================================================================
]]
function p.valorDato(declaracion, enlazar)
local tipoValor = {}
local valorDato = {}
local valor = {}
local correcto = {}
-- == Comprobamos que tiene valor asignado ==
if declaracion['mainsnak']['snaktype'] == 'somevalue' then
return 'Valor desconocido'
elseif declaracion['mainsnak']['snaktype'] == 'novalue' then
return 'Sin valor'
elseif declaracion['mainsnak']['snaktype'] == 'value' then
correcto = true
else
return 'Valor desconocido'
end
-- == ==
if not correcto then return end
tipoValor = declaracion['mainsnak']['datavalue']['type']
valorDato = declaracion['mainsnak']['datavalue']['value']
if tipoValor == 'wikibase-entityid' then -- Cuando devuelve un identificador
valor = formatoEnlace(valorDato['numeric-id'], enlazar)
elseif tipoValor == 'string' then -- Cuando devuelve una cadena de texto
valor = valorDato
elseif tipoValor == 'quantity' then -- Cuando devuelve un valor numérico
valor = es:formatNum(tonumber(valorDato['amount']))
elseif tipoValor == 'time' then -- Cuando devuelve una fecha
--valor = formatoFecha(valorDato)
valor = require('Módulo:Wikidata/Fecha').FormateaFechaHora(valorDato,{['enlace'] = 'sí'})
elseif tipoValor == 'globecoordinate' then -- Cuando devuelve coordenas
local globo = require('Módulo:Wikidata/Globos')[valorDato.globe]
if globo ~= 'earth' then
return marco:preprocess('{{coord|' .. valorDato['latitude'] .. '|' ..
valorDato['longitude'] .. '|globe:' .. globo .. '|display=inline,title|formato=dms}}')
else
return marco:preprocess('{{coord|' .. valorDato['latitude'] .. '|' ..
valorDato['longitude'] .. '|type:city|display=inline,title|formato=dms}}')
end
else -- Mensaje de error
valor = '<span class="error"> Valor de dato desconocido</span>'
end
return valor
end
--[[
====================================================================
Para valor de Wikidata: Genera el wikinlace
====================================================================
]]
function p.formatoEnlace(idEntidad, enlazar)
local etiqueta = mw.wikibase.label( 'q' .. idEntidad )
local enlace = mw.wikibase.sitelink( 'q' .. idEntidad )
-- == Casos en los que existe enlace y no se da el valor no al parámetro enlace ==
if enlazar == false then
return require( 'Módulo:Wikidata/Formatos').formatBandera({['numeric-id'] = idEntidad },{''},marco)
end
if enlace then -- Si existe el enlace
enlace = es:ucfirst( enlace )
if etiqueta then -- Si en Wikidata está definida una etiqueta para el idioma español
etiqueta = es:ucfirst( etiqueta )
return '[[' .. enlace .. '|' .. etiqueta .. ']]' -- Devuelve la etiqueta como título del enlace
else
return '[[' .. enlace .. ']]' -- Devuelve solo el enlace
end
-- == Casos en los que no existe enlace o se omita ==
elseif etiqueta then -- Si en Wikidata está definida una etiqueta para el idioma español
etiqueta = es:ucfirst( etiqueta )
return etiqueta -- Devuelve solo la etiqueta
end
end
return p