Módulo:Ficha Wikidata

De Wikipedia, la enciclopedia libre
Icono de documentación de módulo Documentación del módulo[ver] [editar] [historial] [purgar]

A continuación se muestra la documentación transcluida desde la subpágina /doc. [salta a la caja de código]


Uso

Este módulo genera fichas a partir de todas las propiedades de Wikidata excepto aquellas que se han filtrado por no ser relevantes para la ficha. Los formatos se adaptarán según el tipo de artículo que debe ilustrar.


Esta documentación está transcluida desde Módulo:Ficha Wikidata/doc.
Por favor, añade las categorías en la subpágina de documentación y los interwikis en Wikidata. Subpáginas de este módulo.

--[[
   *****************************************************************
   * Nombre: Módulo:Ficha Wikidata
   * Descripción: Este módulo genera una ficha solo con los valores
   *               de todas las propiedades de Wikidata
   * Estado: En creación
   *****************************************************************
]]
local p = {}
local ficha = require('Módulo:Ficha')
local Wikidata = require( 'Módulo:Ficha/Wikidata')
local elemento = mw.wikibase.getEntityObject() --Tabla con todos los datos de Wikidata
local es = mw.language.new('es') -- Configuración de idioma español
local marco
local cd = true 
local pais, web, mapa, unidad = '';

--[[
  ====================================================================
    Eliminar propiedades irrelevantes
  ====================================================================
  ]]
function filtrarPropiedades(propComprobar)
 
--   == Popiedades que no aparecerán en ninguna ficha ==
 
    local propIrrelevantes = {'P107','P646','P373','P214','P227','P244','P213','P1025', 'P268','P345','P269','P948','P402','P910','P968','P998','P982','P349', 'P865', 'P434', 'P906', 'P865', 'P935', 'P691','P1036','P1273','P1566', 'P1465', 'P1792','P1464','P2498','P2581','P1296','P6665'} 
 
--  == Comprobamos coincidencia ==
 
    for k,v in pairs(propIrrelevantes) do -- Se comprueba si coincide propiedad con propComprobar
       if propComprobar == v then return false end -- Si hay coincidencia devuelve false
    end
    return true -- Si no hay coincidencia devuelve true
end
--[[
  ====================================================================
    Seleccionamos configuración
  ====================================================================
  ]]
function configuracion(tablaValor,propiedades)
  --[[ 
  local formato = include('Módulo:Ficha Wikidata/Formatos')
  if formato.getTablaParametros(tablaValor, propiedades) ~= nil then
      return formato.getTablaParametros(tablaValor,propiedades)
  end
  ]]
  local tablaParametros = {}
  local valorID = tablaValor[1]['mainsnak']['datavalue']['value']['numeric-id']
  local valor = mw.wikibase.label('q'.. valorID)
    if valor == 'ser humano' then
        tablaParametros['tipocabecera'] = 'humano fn'         
        tablaParametros['clase'] = 'biography vcard'
        tablaParametros['colorfondo'] = '#8DB1C3'
        tablaParametros['colortexto'] = '#fff'
 
elseif valor == 'ciudad' or valor == 'localidad' or valor == 'villa' or valor == 'pueblo' or valor == 'municipio' or valor == 'comuna' or valor == 'barrio' or valor == 'concejo' or valor == 'capital' then
        local coor  = {}
        local pais
        tablaParametros['tipocabecera'] = 'mapa fn org' 
        tablaParametros['clase'] = 'geography vcar'
        tablaParametros['colorfondo'] = 'transparet'
        --tablaParametros['estilosubtitulo1']  = 'line-height: 2.4em; padding:3px; font-size:100%; font-weight:bold; background-color:#cddeff'
        --tablaParametros['estiloetiqueta'] = 'line-height: 1.4em; padding:1px 7px'
       -- tablaParametros['estilodatos'] = 'line-height: 1.4em; padding:1px 7px 1px 1px'
        tablaParametros['estiloetiqueta'] = 'padding:2px 7px;'
        tablaParametros['estilodatos'] = 'padding:2px 7px 1px 1px'
       
        for k, v in pairs(propiedades) do
           mw.log('propiedades esp '.. v.propiedad)
           if v.propiedad == 'P625' then -- Coordenadas
           	        tablaParametros['estiloetiqueta1'] = 'font-size:100;padding:0px 7px'
                    tablaParametros['etiqueta1'] = '[[Coordenadas geográficas|Coordenadas]]'
                    tablaParametros['estilodatos1'] = 'white-space:nowrap;padding:0px 1px 1px 1px'
                    tablaParametros['datos1'] = Wikidata.getDeclaracion(v.valor, v.propiedad, nil, nil, nil, nil)  
                    coor['latitud'] = Wikidata.getDeclaracion(v.valor, 'latitud', nil, nil, nil, nil) 
                    coor['longitud'] = Wikidata.getDeclaracion(v.valor, 'longitud', nil, nil, nil, nil) 
                    table.remove (propiedades, k)
                    cd = false
           elseif v.propiedad == 'P31' and pais then
              tablaParametros['etiqueta2'] = tostring('[[Entidad subnacional|Unidad]]')
              unidad = Wikidata.getDeclaracion(v.valor, v.propiedad, nil, nil, nil, nil) 
              tablaParametros['datos2'] = unidad
              tablaParametros['subtitulo1'] =	unidad .. ' de ' .. pais
           elseif v.propiedad == 'P17' then
              tablaParametros['estiloetiqueta3'] = 'border:0;font-weight:100; padding:0px 7px'
              tablaParametros['estilodatos3'] = 'border:0;font-weight:100;padding:0px 1px 0px 1px'
              tablaParametros['etiqueta3'] = tostring('• [[Anexo:Países|País]]')
              tablaParametros['datos3'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '<br>', 'Wikidata/Formatos', 'formatBandera2', nil, nil)
              mapa = Wikidata.getDeclaracion(v.valor, v.propiedad, nil, nil, nil, nil,'no')
              pais = Wikidata.getDeclaracion(v.valor, v.propiedad, nil, nil, nil, nil)
          elseif v.propiedad == 'P131' then
              tablaParametros['estiloetiqueta4'] = 'border:0;font-weight:100; padding:0px 7px'
              tablaParametros['estilodatos4'] = 'border:0;font-weight:100;padding:0px 1px 1px 1px'
              cd = false
              tablaParametros['etiqueta4'] = ''
              --local entidad = Wikidata.getDeclaracion(v,k , '<br>&bull;&nbsp; ','Wikidata/Formatos' ,'formatId' , nil, nil, nil,'P31')
              --local entidadComparar = Wikidata.getDeclaracion(v.valor, v.propiedad,'', 'Wikidata/Formatos','formatId' , 'no', nil, nil,'P31')
              mw.log(entidadComparar)
             -- if entidad and entidad ~= '' then
               --   tablaParametros['etiqueta4'] = '&bull;&nbsp;' .. entidad
             -- else
              --    tablaParametros['etiqueta4'] = '&bull;&nbsp;Entidades superiores'
             -- end
              --tablaParametros['datos4'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '<br>', 'Wikidata/Formatos', 'formatBandera2', nil,nil, entidadComparar) 
              tablaParametros['datos4'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '<br>', 'Wikidata/Formatos', 'formatFicha')
          end
          local nombre = Wikidata.getEtiqueta()
          if mapa and nombre and coor  then
          	  tablaParametros['estiloimagen'] = 'padding:0.8em 0.7em 0em 0.7em; text-align:center'
              tablaParametros['imagenflotante'] = 'si' 
              tablaParametros['imagen'] = require('Módulo:Ficha Wikidata/Mapa').mapaLoc(mapa, nombre, coor, marco)
              tablaParametros['estilopie'] = 'font-size:smaller; font-weight:bold'
              tablaParametros['pie'] ='Ubicación de ' .. nombre.. ' en ' .. mapa
          end    
    end
    elseif valor == 'provincia' or valor =='estado' or valor =='región' or valor =='comunidad autónoma'or valor == 'departamento' or valor =='comarca' or valor =='merindad' or valor =='partido judicial' then
        tablaParametros['colorfondo'] = 'transparet'
        tablaParametros['tipocabecera'] = 'mapa fn org' 
        tablaParametros['clase'] = 'geography vcar'
    elseif valor == 'pais' or valor == 'estado soberano' then
        tablaParametros['tipocabecera'] = 'mapa fn org' 
        tablaParametros['clase'] = 'geography vcar'
 
    elseif valor == 'monte' or valor == 'montaña' or valor == 'volcán'then
        tablaParametros['tipocabecera'] = 'mapa fn org'
        tablaParametros['colorfondotitulo'] = '#e7dcc3'
        --tablaParametros['colortexto'] = '#fff'
        tablaParametros['estiloetiqueta'] = 'background-color:#e7dcc3;'
    elseif valor == 'rio' or valor == 'océano' or valor == 'canal' or valor == 'Pólder' or valor == 'isla artificial' or valor == 'isla fluvial' or valor == 'mar'  or valor =='lago' or valor == 'fiordo' or valor == 'golfo' or valor == 'estrecho' then
        tablaParametros['tipocabecera'] = 'mapa fn org'
        tablaParametros['colorfondotitulo'] = '#7793E0'
        tablaParametros['colortexto'] = '#fff'
        tablaParametros['estiloetiqueta'] = 'background:#ddf'
        --tablaParametros['clase'] = 'geography vcar'
    elseif valor == 'revista' then
    	tablaParametros['tipocabecera'] = 'revista'
        tablaParametros['colorfondotitulo'] = '#D2691E'
        tablaParametros['colortexto'] = '#fff'
        tablaParametros['estiloetiqueta'] = 'background-color:#D2691E; color:#fff;'
    elseif valor == 'libro' then
    	tablaParametros['tipocabecera'] = libro
    	tablaParametros['colorfondotitulo'] = '#ddf'
        tablaParametros['estiloetiqueta'] = 'padding:1px 8px'
    elseif valor == 'Arboreto' or valor == 'parque' then
    	tablaParametros['tipocabecera'] = libro
    	tablaParametros['colorfondotitulo'] = '#d0f0c0'
    elseif valor == 'museo' or valor == 'museo de artes' then	
        tablaParametros['tipocabecera']  = 'conflicto'
        tablaParametros['estilotitulo']  = 'color:white'
        tablaParametros['colorfondotitulo'] = '#996633'	
        tablaParametros['colortexto'] = '#fff'
    else
        tablaParametros['colorfondotitulo'] = '#ddf'
        tablaParametros['estiloetiqueta'] = 'padding:1px 8px'
    end
    return tablaParametros
end

function ordenarPropiedades(propiedades) 
	local propiedadesOrdenadas = {}
	local num=1
    for k,v in pairs(propiedades) do
	     if  string.find(k,'P%d+') and v ~= '' then -- Comprobamos que son propiedades
	     	--local num = tostring(k):match('^P([1-9]%d*)$')
	     	--[[if k == 'P31' then 
	     		propiedadesOrdenadas[1] = {propiedad = k, valor = v }
	     	elseif k == 'P17' then 
	     	    propiedadesOrdenadas[2] = {propiedad = k, valor = v }	
	     	else
	     	   num  = mw.ustring.gsub(k,'P','')
	     	   mw.log(num)
	     	   num = tonumber(num)
	     	   propiedadesOrdenadas[num] = {propiedad = k, valor = v }
	     	end]]
	     	propiedadesOrdenadas[num]  = {propiedad = k, valor = v }
	     	num = num+1
     	end
    end
    table.sort(propiedadesOrdenadas,function(a1,a2) return a1.propiedad < a2.propiedad end)
    return propiedadesOrdenadas
end
local function getPropiedadNums(num)
    return  tonumber(mw.ustring.gsub(num,'P',''))
end
--[[
  ====================================================================
    Pasamos las datos de Wikidata a una tabla
  ====================================================================
]]
 
function leerEtiquetas()   
    local propiedades = {}
    local annadirFila = {} 
    local nuevasFilas = {}
    local etiquetaFicha ={}
    local num = 8
    if Wikidata.getDeclaraciones() ~= '' then
        propiedades = Wikidata.getDeclaraciones()
        if propiedades == nil then return nil end 
        propiedades = ordenarPropiedades(propiedades) 
        for k,v in pairs(propiedades) do
         mw.log('clave '.. v.propiedad )
            --if  string.find(k,'P%d+') then -- Comprobamos que son propiedades
                if v.propiedad == 'P18' then -- Imagen
                    annadirFila['imagensuperior'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '', nil, nil, nil) 
                elseif v.propiedad == 'P31' then -- instancia de
                    nuevasFilas  = configuracion(v.valor,propiedades)
                elseif v.propiedad == 'P154' then -- Imagen Logo
                    annadirFila['imagenderecha'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '', nil, nil, nil)    
                 elseif v.propiedad == 'P41' then -- Imagen de la bandera
                    annadirFila['imagenizquierda'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '', nil, nil, nil) 
                    annadirFila['estilopieizquierdo'] = 'font-size:smaller; font-weight:bold'
                    annadirFila['pieizquierdo'] = 'Bandera'
                elseif v.propiedad == 'P94' then -- Imagen del Escudo
                    annadirFila['imagenderecha'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '', nil, nil, nil)   
                    annadirFila['estilopiederecho'] = 'font-size:smaller; font-weight:bold'
                    annadirFila['piederecho'] =  'Escudo'
                elseif v.propiedad == 'P368' then -- prueba commons archivo multimedia
                    annadirFila['imagen'] =  Wikidata.getDeclaracion(v.valor, v.propiedad, '', nil, nil, nil)    
                elseif v.propiedad == 'P163' then -- Artículo de la bandera
                    annadirFila['pieizquierdo'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '', nil, nil, nil) 
                elseif v.propiedad == 'P237' then -- Artículo del escudo
                    annadirFila['piederecho'] =  Wikidata.getDeclaracion(v.valor, v.propiedad, '', nil, nil, nil) 
                elseif v.propiedad == 'P242' then -- mapa de localización
                    annadirFila['imagen']= '[[Archivo:'.. Wikidata.getDeclaracion(v.valor, v.propiedad, '|245px]]<br>[[Archivo:', nil, nil, nil)..'|245px]]'
                elseif v.propiedad == 'P856' then -- mapa de localización
                    web = Wikidata.getDeclaracion(v.valor, v.propiedad,nil, nil, nil, nil)    
                elseif v.propiedad == 'P17' then -- 
                    annadirFila['etiqueta2'] = '[[País]]'
                    pais = Wikidata.getDeclaracion(v.valor, v.propiedad, nil, nil,nil, nil)
                    annadirFila['datos2'] =  Wikidata.getDeclaracion(v.valor, v.propiedad, '<br>', 'Wikidata/Formatos', 'formatBandera2', nil)
                elseif v.propiedad == 'P131' then  
                    annadirFila['etiqueta3'] = '[[d:Property:' .. k .. '|Situado en unidad administrativa]]'
                    annadirFila['datos3'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '<br>', 'Wikidata/Formatos', 'formatBandera2', nil)     
                elseif v.propiedad == 'P625' and cd then -- Coordenadas
                    annadirFila['etiqueta4'] = '[[Coordenadas geográficas|Coordenadas]]'
                    annadirFila['datos4'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '<br>', nil, nil, nil) 
                elseif v.propiedad == 'P6' then -- Jefe de gobierno
                	local cadenaEtiqueta, cadenaDatos
                        local mandatario = Wikidata.getDeclaracion(v.valor, v.propiedad,'<br>')
                	local cargo = Wikidata.getDeclaracion(v.valor, v.propiedad,'', 'Wikidata/Formatos','formatId' , nil, nil, nil,'P39')
                	local partido = Wikidata.getDeclaracion(v.valor, v.propiedad,'', 'Wikidata/Formatos','formatId' ,nil, nil, nil,'P102')
                	local mandato = ''
                	if cargo and cargo ~= '' and  mandato and mandato ~= '' then
                		cadenaEtiqueta = cargo .. '&nbsp;(' .. mandato .. ')'
                	elseif 	cargo and cargo ~= '' then
                		cadenaEtiqueta = cargo
                    else 
                           cadenaEtiqueta = '[[d:Property:P6|Jefe de gobierno]]'
                	end
                	
                    if partido and partido ~= '' then
                           cadenaDatos = mandatario .. '&nbsp;(' .. partido .. ')'
                    else
                           cadenaDatos = mandatario
                    end	
                	annadirFila['etiqueta6'] = cadenaEtiqueta
                        annadirFila['datos6'] = cadenaDatos 
                elseif v.propiedad == 'P1082' then -- Población
                	local censo = Wikidata.getDeclaracion(v.valor, v.propiedad, nil, nil, nil,'P585')
                	annadirFila['estiloetiqueta8'] = 'border:0;font-weight:100'
                    annadirFila['estilodatos8'] = 'border:0;font-weight:100'
                	if censo and censo ~= '' then
                         annadirFila['etiqueta7'] = '[[Población]]&nbsp;('.. censo ..')'
                    else
                	     annadirFila['etiqueta7'] = '[[Población]]' 
                	end
                	annadirFila['datos7'] = '&nbsp;'  
                	annadirFila['etiqueta8'] =  '&bull;&nbsp;Total'
                    annadirFila['datos8'] = Wikidata.getDeclaracion(v.valor, v.propiedad, '<br>', nil, nil, nil) .. ' hab.'    
                
                elseif filtrarPropiedades(v.propiedad) then    	
                        num = num + 1
                        if mw.wikibase.label(v.propiedad) ~= nil and mw.wikibase.label(v.propiedad) ~= '' then
                        	etiquetaFicha = es:ucfirst( mw.wikibase.label(v.propiedad))
                        else
                        	etiquetaFicha = k 
                        end	
                        annadirFila['etiqueta' .. num] = '[[d:Property:' .. v.propiedad .. '|'.. etiquetaFicha .. ']]'
                        annadirFila['datos' .. num] = Wikidata.getDeclaracion(v.valor, v.propiedad, '<br>', nil, nil, nil)                                 
                end
 
            end   
        end
 
        annadirFila['titulo'] = Wikidata.getEtiqueta()
        annadirFila['estilotitulo'] = 'padding:0'  
        annadirFila['estilosubtitulo1'] = 'font-size:100%; font-weight:bold; background-color:#cddeff'
 
        annadirFila['estilodatos'] = 'padding:1px 8px 1px 1px'
        annadirFila['tamañoimagenizquierda'] = '100x78px'
        annadirFila['tamañoimagenderecha'] = '88x88px'
        annadirFila['tamañoimagensuperior'] = '245px'
        annadirFila['tamañoimagen'] = '245px'
        annadirFila['tamañoimagen1'] = '245px' 
        annadirFila['tamañoimageninferior'] = '245px'
        if web ~= '' and web ~= nil then
            annadirFila['datos' .. num+1]  = '['.. web .. ' Sitio web oficial]'
        end
        for k,v in pairs(nuevasFilas) do
                    annadirFila[k] = v -- Cargamos las filas según la configuración en la tabla
                end
        return  annadirFila
   --else 
       -- return nil
  -- end
end
 
--[[
  ====================================================================
    Función principal
  ====================================================================
]]
 
function _principal()
 
    local parametros = leerEtiquetas()
    if parametros ~= nil then
      return ficha.infobox(parametros)
    else
      return '<span class="error">Página sin enlace a Wikidata</span>'         
    end
end
 
function p.principal(frame)
    marco = frame
    Wikidata:setFrame(marco)
    return _principal()
end

return p