| Contenidos de Wikipedia en español bajo licencia CC BY-SA 4.0 ⇔ Mapas de OpenStreetMap bajo licencia ODbL |
Diferencia entre revisiones de «Módulo:Wikidata/Formato lugar»
De Hispanopedia
Página creada con «local p = {} function p.formatoLugar(valor, opciones, frame, calificativos) -- Función que devuelve algo de la forma Lugar, entidad territorial administrativa, país…» |
mejor usar la frame en vez de las opciones |
||
| Línea 13: | Línea 13: | ||
end | end | ||
if not | if not frame then | ||
return require(pModulo)[pFuncion] | return require(pModulo)[pFuncion] | ||
end | end | ||
modulos = | modulos = frame['módulos'] | ||
if not modulos then | if not modulos then | ||
modulos = {} | modulos = {} | ||
frame['módulos'] = modulos | |||
end | end | ||
| Línea 28: | Línea 28: | ||
modulo = require(pModulo) | modulo = require(pModulo) | ||
modulos[pModulo] = modulo | modulos[pModulo] = modulo | ||
end | end | ||
return modulo[pFuncion] | return modulo[pFuncion] | ||
Revisión del 20:38 5 mar 2018
La documentación para este módulo puede ser creada en Módulo:Wikidata/Formato lugar/doc
local p = {}
function p.formatoLugar(valor, opciones, frame, calificativos)
-- Función que devuelve algo de la forma Lugar, entidad territorial administrativa, país
-- Guardamos en las opciones una tabla con los módulos utilizados para hacer menos accesos.
--
function funcion(pModulo, pFuncion)
local modulos, modulo
if not pModulo or not pFuncion then
return
end
if not frame then
return require(pModulo)[pFuncion]
end
modulos = frame['módulos']
if not modulos then
modulos = {}
frame['módulos'] = modulos
end
modulo = modulos[pModulo]
if not modulo then
modulo = require(pModulo)
modulos[pModulo] = modulo
end
return modulo[pFuncion]
end
local idLugar, enlaceLugar, etiquetaLugar, lugarEnlazado
local entidadTerritorialAdministrativaEnlazada
local idPais, enlacePais, etiquetaPais, paisEnlazado
-- Validar que está informado el id del lugar.
if not valor or not valor['numeric-id'] then
return
end
local elementoTabla = funcion('Módulo:Tablas' , 'elemento')
local enlazar = funcion('Módulo:Wikidata/Formatos', 'enlazar')
local obtenerDatos = funcion('Módulo:Wikidata/Formatos', 'obtenerDatos')
-- Obtener primero la entidad territorial administrativa y el país de los calificativos si es posible
-- No se obtiene primero el lugar, que sería lo más lógico, porque se obtendrá de forma diferente según
-- estén o no informados los calificativos
if calificativos then
entidadTerritorialAdministrativaEnlazada = enlazar(obtenerDatos(elementoTabla(calificativos,'P131',1,'datavalue','value')))
enlacePais, etiquetaPais, idPais = obtenerDatos(elementoTabla(calificativos,'P17',1,'datavalue','value'))
paisEnlazado = enlazar(enlacePais, etiquetaPais, idPais)
end
if paisEnlazado then
enlaceLugar, etiquetaLugar, idLugar = obtenerDatos(valor)
lugarEnlazado = enlazar(enlaceLugar, etiquetaLugar, idLugar)
else
-- Si el lugar no tiene el calificativo de país obtenerlo de la propiedad país de la
-- entidad de Wikidata del lugar.
-- De momento no se obtiene la entidad administrativa (tiene unas barbaridades...)
local entidad
idLugar = 'Q' .. valor['numeric-id']
entidad = mw.wikibase.getEntityObject(idLugar)
if not entidad then
return
end
enlaceLugar = elementoTabla(entidad,'sitelinks','eswiki','title')
etiquetaLugar = elementoTabla(entidad,'labels','es','value')
lugarEnlazado = enlazar(enlaceLugar, etiquetaLugar, idLugar, opciones)
enlacePais, etiquetaPais, idPais = obtenerDatos(elementoTabla(entidad,'claims','P17',1,'mainsnak','datavalue','value'))
paisEnlazado = enlazar(enlacePais, etiquetaPais, idPais)
end
if idLugar == idPais then -- Si el lugar es un país, por ejemplo, estados Unidos, en Wikidata tiene la propiedad país informada con Estados Unidos.
return lugarEnlazado
else
local separadosPorComa = funcion('Módulo:Formato texto', 'separadosPorComa')
return separadosPorComa({lugarEnlazado, entidadTerritorialAdministrativaEnlazada, paisEnlazado})
end
end
--*****************************************************************************
-- Alias de formatos para utilizar en la plantilla propiedad
--*****************************************************************************
p['lugar'] = p['formatoLugar']
return p