Módulo:Wikidata/Formato lugar
Uso
En este módulo se definen algunos de los tipos de datos de la plantilla {{propiedad}}
o equivalentemente de las funciones permitidas para el parámetro valor-función del módulo:Wikidata.
lugar
- uso desde la plantilla propiedad
{{Propiedad|id. de la propiedad|tipo de dato=lugar|parámetros opcionales}}
Tipo de dato para propiedades de lugares, por ejemplo «lugar de nacimiento (P19)» y «lugar de fallecimiento (P20)». Se muestra el lugar junto a la entidad territorial administrativa y el país separados por comas. Para ello se utilizan los calificativos:
- situado en la entidad territorial administrativa (P131)
- país (P17). Si no se especifica el país se intentará obtener del lugar tomando el país en la
fecha
dada o si no el más reciente (aquel con rango preferente) y si no el primero definido en Wikidata. - fecha de fin (P582)
Los parámetros posibles son:
enlace
: si toma el valor de "no" no se enlaza al artículo de la Wikipedia con el lugar, la entidad territorial administrativa o el país.fecha
: fecha utilizada para obtener el país del lugar como timestamp, por ejemplo, +1901-00-00T00:00:00Z.fin
: si se informa con "no" no se mostrarán los lugares que tengan fecha de fin.
Para el resto de los parámetros posibles véase la plantilla {{propiedad}}
o el módulo:Wikidata si se accede desde un módulo Lua.
Pueden verse ejemplos de utilización en la página de pruebas del módulo.
local p = {}
local separadosPorComa = require('Módulo:Formato texto').separadosPorComa
local moduloTablas = require('Módulo:Tablas')
local elementoTabla = moduloTablas.elemento
local moduloWikidataFormatos = require('Módulo:Wikidata/Formatos')
local enlazar = moduloWikidataFormatos.enlazar
local obtenerDatos = moduloWikidataFormatos.obtenerDatos
local Date = require('Módulo:Date')._Date
function p.formatoLugar(valor, opciones, frame, calificativos)
-- Función que devuelve algo de la forma Lugar, entidad territorial administrativa, país
function obtenerOcurrenciaAFecha(tabla, fecha)
if not tabla or not fecha then
return
end
local fechaInicio, fechaFin
fecha = Date(fecha)
--if true then return require('Módulo:Tablas').tostring(tabla) end
--
for k,v in pairs(tabla) do
fechaInicio = elementoTabla(v,'qualifiers','P580',1,'datavalue','value','time')
fechaFin = elementoTabla(v,'qualifiers','P582',1,'datavalue','value','time')
fechaInicio = Date(fechaInicio)
fechaFin = Date(fechaFin)
if fechaInicio and fechaFin then
if fecha >= fechaInicio and
fecha <= fechaFin then
return k
end
elseif fechaInicio then
if fecha >= fechaInicio then
return k
end
elseif fechaFin then
if fecha <= fechaFin then
return k
end
end
end
end
function obtenerOcurrenciaRangoPreferente(tabla)
if not tabla then
return
end
for k,v in pairs(tabla) do
if v.rank == 'preferred' then
return k
end
end
end
local idLugar, enlaceLugar, etiquetaLugar, lugarEnlazado
local entidadTerritorialAdministrativaEnlazada
local idPais, enlacePais, etiquetaPais, paisEnlazado
local fecha
-- Validar que está informado el id del lugar.
if not valor or not valor['numeric-id'] then
return
end
if opciones then
fecha = opciones.fecha
end
-- 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)
--
-- Obtener el país del lugar.
--
local paisesLugar = elementoTabla(entidad,'claims','P17')
if paisesLugar then
-- Primero se intenta con el país en la fecha de las opciones, luego
-- el país con rango máximo (el actual) y luego el primer país.
local ocurrenciaPais = obtenerOcurrenciaAFecha(paisesLugar, fecha) or
obtenerOcurrenciaRangoPreferente(paisesLugar) or
1
enlacePais, etiquetaPais, idPais = obtenerDatos(elementoTabla(paisesLugar,ocurrenciaPais,'mainsnak','datavalue','value'))
paisEnlazado = enlazar(enlacePais, etiquetaPais, idPais)
end
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
elseif lugarEnlazado and entidadTerritorialAdministrativaEnlazada and paisEnlazado then
return lugarEnlazado .. ' (' .. entidadTerritorialAdministrativaEnlazada .. ', ' .. paisEnlazado .. ')'
elseif lugarEnlazado and entidadTerritorialAdministrativaEnlazada then
return lugarEnlazado .. ' (' .. entidadTerritorialAdministrativaEnlazada .. ')'
elseif lugarEnlazado and paisEnlazado then
return lugarEnlazado .. ' (' .. paisEnlazado .. ')'
elseif entidadTerritorialAdministrativaEnlazada and paisEnlazado then
return entidadTerritorialAdministrativaEnlazada .. ' (' .. paisEnlazado .. ')'
else
return lugarEnlazado or entidadTerritorialAdministrativaEnlazada or paisEnlazado
end
end
--*****************************************************************************
-- Alias de formatos para utilizar en la plantilla propiedad
--*****************************************************************************
p['lugar'] = p['formatoLugar']
return p