Módulo:Wikidata/Formatos educación

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

local p = {}

-- Funciones de otros módulos
local moduloTablas               = require('Módulo:Tablas')
	local elementoTabla          = moduloTablas.elemento
local moduloWikidata             = require('Módulo:Wikidata')
	local formatoIdEntidadWikidata = moduloWikidata.formatoIdEntidad
local moduloWikidataFormatos     = require('Módulo:Wikidata/Formatos')
	local enlazar                = moduloWikidataFormatos.enlazar
	local obtenerDatos           = moduloWikidataFormatos.obtenerDatos	
	local formatoPeriodoWikidata = moduloWikidataFormatos.formatoPeriodo	

local grados = {
	['Q163727']  = {abreviatura = 'Grado', enlace = 'Título de grado'}, -- Bachelor
	['Q1765120'] = {abreviatura = 'B.A.', enlace = 'Bachelor of Arts'},
	['Q2878277'] = {abreviatura = 'B.F.A.', enlace = 'Bachelor of Fine Arts'},
	['Q798137']  = {abreviatura = 'B.L.', enlace = 'Bachelor of Laws'},	
	['Q787674']  = {abreviatura = 'B.S.', enlace = 'Bachelor of Science'},
	['Q749020']  = {abreviatura = 'Lic.', enlace = 'Licenciatura'},
	['Q691532']  = {abreviatura = 'Lic. en Derecho', enlace = 'Licenciatura en Derecho'},
	['Q183816']  = {abreviatura = 'Maestría', enlace = 'Maestría'},
	['Q2091008'] = {abreviatura = 'M.A.', enlace = 'Master of Arts'},
	['Q191701']  = {abreviatura = 'M.B.A.', enlace = 'Maestría en Administración de Empresas'},
	['Q4175466'] = {abreviatura = 'M.F.A.', enlace = 'Máster en Bellas Artes'},
	['Q950900']  = {abreviatura = 'M.S.', enlace = 'Master of Science'},
	['Q849697']  = {abreviatura = 'Doc.', enlace = 'Doctorado'},
	['Q4618975'] = {abreviatura = 'Doc.', enlace = 'Doctorado'},	-- doctor
	['Q3033550'] = {abreviatura = 'Doc.', enlace = 'Doctorado (Francia)'},	
	['Q959320']  = {abreviatura = 'Doc. of Law', enlace = 'Doctor of Law'},
	['Q1540185'] = {abreviatura = 'J.D.', enlace = 'Juris Doctor'},
	['Q6518699'] = {abreviatura = 'L.L.D.', enlace = 'LLD'},
	['Q913404']  = {abreviatura = 'M.D.', enlace = 'Doctor en Medicina'},	
	['Q752297']  = {abreviatura = 'Ph.D.',enlace = 'Philosophiæ doctor'},	
}

local especialidades = {
	['Q222749']  = {etiqueta = 'Actuación', enlace = 'Actuación'},
	['Q12271']   = {etiqueta = 'Arquitectura', enlace = 'Arquitectura'},	
	['Q21198']   = {etiqueta = 'Ciencias de la Computación', enlace = 'Ciencias de la computación'},		
	['Q7748']    = {etiqueta = 'Derecho', enlace = 'Derecho'},	
	['Q4932206'] = {etiqueta = 'Jurisprudencia', enlace = 'Ciencia del derecho'},
	['Q382995']  = {etiqueta = 'Ciencias del Derecho', enlace = 'Ciencias del derecho'},	
	['Q8134']    = {etiqueta = 'Ciencias Económicas', enlace = 'Ciencia económica'},
	['Q5891']    = {etiqueta = 'Filosofía', enlace = 'Filosofía'},
	['Q413']     = {etiqueta = 'Física', enlace = 'Física'},	
	['Q309']     = {etiqueta = 'Historia', enlace = 'Historia'},
	['Q395']     = {etiqueta = 'Matemáticas', enlace = 'Matemáticas'},		
	['Q11190']   = {etiqueta = 'Medicina', enlace = 'Medicina'},		
	['Q11030']   = {etiqueta = 'Periodismo', enlace = 'Periodismo'},
	['Q36442']   = {etiqueta = 'Ciencias Políticas', enlace = 'Ciencia política'},
	['Q9418']    = {etiqueta = 'Psicología', enlace = 'Psicología'},	
	['Q2329']    = {etiqueta = 'Química', enlace = 'Química'},
	['Q21201']   = {etiqueta = 'Sociología', enlace = 'Sociología'},
	['Q34178']   = {etiqueta = 'Teología', enlace = 'Teología'},
}

function p.formatoEducadoEn(valor, opciones, frame, calificativos)
	-- Función que devuelve para un lugar de educación, por ejemplo Universidad Harvard.
	
	--
	-- Funciones internas
	--
	
	function obtenerGrado(idGrado, opciones)
		if not idGrado then
			return
		end
		
		local grado = grados[idGrado]
		
		if grado then
			return enlazar(grado.enlace, grado.abreviatura, idGrado,opciones)
		else
			-- En el caso de que el grado no sea uno de los grados de la tabla interna
			return formatoIdEntidadWikidata(idGrado, opciones)
		end
	end
	
	function obtenerEspecializacion(idEspecialidad, opciones)
		if not idEspecialidad then
			return
		end		
		
		local especialidad = especialidades[idEspecialidad]
		
		if especialidad then
			return enlazar(especialidad.enlace, especialidad.etiqueta, idEspecialidad,opciones)
		else
			-- En el caso de que la especialidad no sea uno de las especialidades de la tabla interna
			return formatoIdEntidadWikidata(idEspecialidad, opciones)
		end
		
		-- A medias
		return formatoIdEntidadWikidata(idEspecialidad, opciones)
	end	
	
	-- Variables
	if not valor then
		return
	end
	
	-- Obtener los datos
	
	local enlaceLugarEducacion, etiquetaLugarEducacion, idEntidadLugarEducacion = obtenerDatos(valor)
	local lugarEducacion     = enlazar(enlaceLugarEducacion, etiquetaLugarEducacion, idEntidadLugarEducacion,opciones)
	
	if not lugarEducacion then
		return
	end
	
	-- Grados
	local grado
	local declaracionGrados = elementoTabla(calificativos,'P512')
		
	if declaracionGrados then
		local grados = {}
		local idGrado
	
		for k, v in pairs(declaracionGrados) do
			idGrado = elementoTabla(v,'datavalue','value','id')
			
			if idGrado then
				table.insert(grados, obtenerGrado(idGrado, opciones))
			end
		end
		
		grado = mw.text.listToText( grados, ', ', ' y ' )
	end

	-- Especialización
	local especializacion
	local declaracionEspecializaciones = elementoTabla(calificativos,'P812')
		
	if declaracionEspecializaciones then
		local especializaciones = {}
		local idEspecializacion
	
		for k, v in pairs(declaracionEspecializaciones) do
			idEspecializacion = elementoTabla(v,'datavalue','value','id')
			
			if idEspecializacion then
				table.insert(especializaciones, obtenerEspecializacion(idEspecializacion, opciones))
			end
		end
		
		especializacion = mw.text.listToText( especializaciones, ', ', ' y ' )
	end
	
	-- Añadir al grado la especialización
	local gradoEspecializacion
	if grado and especializacion then
		gradoEspecializacion = grado .. ' en ' .. especializacion
	else
		gradoEspecializacion = grado or especializacion
	end
	
	local periodo            = formatoPeriodoWikidata(calificativos, opciones)
    
    -- Casos
    --
    
    if gradoEspecializacion and periodo then
    	return lugarEducacion .. '&nbsp;<small>(' .. gradoEspecializacion .. '; ' .. periodo .. ')</small>'
    elseif gradoEspecializacion then
    	return lugarEducacion .. '&nbsp;<small>(' .. gradoEspecializacion .. ')</small>'
    elseif periodo then
    	return lugarEducacion .. '&nbsp;<small>(' .. periodo .. ')</small>'
    else
    	return lugarEducacion
    end
    --if true then return require('Módulo:Tablas').tostring(calificativos) end -- Pruebas
end

-- Alias para simplificar el uso desde la plantilla propiedad
--
p['educado en'] 		= p.formatoEducadoEn

return p