Diferencia entre revisiones de «Módulo:Wikidata/Formato lugar»

De Hispanopedia
require ya carga el módulo una sola vez
usar paréntesis
Línea 116: Línea 116:
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.
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
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
else
return separadosPorComa({lugarEnlazado, entidadTerritorialAdministrativaEnlazada, paisEnlazado})
return lugarEnlazado or entidadTerritorialAdministrativaEnlazada or paisEnlazado
end
end
end
end

Revisión del 21:34 1 jun 2019

La documentación para este módulo puede ser creada en Módulo:Wikidata/Formato lugar/doc

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

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
		
		--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')
			
			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