Módulo:Ficha de videojuego
Apariencia
Esta documentación explica el funcionamiento del módulo en un contexto técnico. Para instrucciones sobre el uso de la plantilla asociada, véase la documentación de la misma en {{Ficha de videojuego}}
.
Este módulo implementa la plantilla {{Ficha de videojuego}}
, y versiones experimentales de {{Clasificaciónvj}}
y {{Lanzamientovj}}
en {{Clasificaciónvj/zona de pruebas}}
y {{Lanzamientovj/zona de pruebas}}
respectivamente. El propósito de unificar las tres plantillas en un solo módulo es optimización de recursos al evitrar repetir llamadas a Wikibase para una misma entidad.
Funciones
p.Ficha()
, la función principal, la cual implementaMódulo:Ficha.infobox()
tomando los valores como argumentos o desde Wikidata.
p.clasificacionvj()
, función pública para obtener la clasificación de contenido, para ser invocada desde{{Clasificaciónvj/zona de pruebas}}
usando datos locales, la cual a su vez llama aClasificacionvj()
Clasificacionvj()
, función privada para obtener la clasificación de contenido, para ser llamada dentro del módulo usando Wikidata, o desde la función pública.
p.lanzamientovj()
, función pública para obtener las fechas de lanzamiento, para ser invocada desde{{Lanzamientovj/zona de pruebas}}
, la cual a su vez llama aLanzamientovj()
Lanzamientovj()
, función privada para obtener las fechas de lanzamiento, para ser llamada dentro del módulo usando Wikidata, o desde la función pública.
obtenerEnlaces()
, función para generar enlaces externos.propiedad()
, función envoltura paraMódulo:Tablas.elemento()
, para obtener el valor de la propiedades de clasificaciones.
Agregar clasificaciones de contenido
Véase la documentación de Módulo:Clasificaciónvj/datos.
local p = {}
-- Cargar módulos
local ModuloWikidata = require('Módulo:Wikidata')
local ModuloFormatos = require('Módulo:Wikidata/Formatos')
local ModuloPaginas = require('Módulo:Páginas')
-- Cargar tablas de datos
local ClasificacionDatos = mw.loadData('Módulo:Clasificaciónvj/datos')
local LanzamientoDatos = mw.loadData('Módulo:Lanzamientovj/datos')
-- :: Definir funciones desde módulos
local elementoTabla = require('Módulo:Tablas').elemento
local FormatoFechaHora = require('Módulo:Wikidata/Fecha').FormateaFechaHora
local obtenerArgumentosConValor = require('Módulo:Argumentos').obtenerArgumentosConValor
local enlazar = require('Módulo:URL').enlazar
local formatoNumero = ModuloFormatos.formatoNumero2
local numeroUnidad = ModuloFormatos.formatoUnidad2
-- :: Definir variables globales
local Entidad, InstanciaDeID
local argumentos -- Tabla de argumentos con los que se llama a la función
local argumento={} -- Argumentos eliminando los argumentos sin datos
-- :: Estilos por defecto
local EstiloEtiqueta = 'width:30%;background-color:#EEF'
local EstiloDatos = 'width:70%;'
local EstiloTitulo = 'font-weight:bold; background-color:#CCF'
local TipoCabecera = 'videojuego'
function p.Ficha(frame)
-- :: Inicializador
ModuloWikidata:setFrame(frame)
argumento = obtenerArgumentosConValor(frame)
Entidad = mw.wikibase.getEntity(argumento.id)
InstanciaDeID = propiedad('P31', {['formato'] = 'entidadID'})
-- :: Cabecera
local Titulo = argumento['título'] or argumento['nombre'] or ModuloPaginas.nombrePagina({desambiguar='sí'})
local TituloOrig = propiedad('P1476', { ['valor'] = argumento['título original'] or argumento['título_original'] or '' })
local Eslogan = propiedad('P6291', { ['valor'] = argumento['eslogan'] or '' })
--if InstanciaDeID == 'Q653928' then TipoCabecera = 'pinball' end
--if InstanciaDeID == 'Q192851' then TipoCabecera = 'arcade' end
local Logo = argumento['logo'] or ModuloWikidata.obtenerImagenWikidata(Entidad, 'P154') or ''
local ModoOscuro = argumento['imagen_modo_oscuro'] or argumento['imagen modo oscuro'] or argumento['imagenmodooscuro'] or ''
local Captura = argumento['imagen'] or argumento['captura'] or ''
local Pie
if Captura ~= '' then
Pie = argumento['pie'] or ''
else
Captura, Pie = ModuloWikidata.obtenerImagenWikidata(Entidad, 'P18')
end
-- General
local Genero = propiedad('P136', { ['valor'] = argumento['género'] or argumento['genero'] or '' })
local GeneroInic = argumento['género inicial'] or argumento['género_inicial'] or ''
local Idiomas = propiedad('P407', { ['valor'] = argumento['idioma'] or argumento['idiomas'] or '' })
local Fabricante = propiedad('P176', { ['valor'] = argumento['fabricante'] or '' })
local Desarrollador = propiedad('P178', { ['valor'] = argumento['desarrollador'] or argumento['desarrolladora'] or '' })
local Distribuidor = propiedad('P750', { ['valor'] = argumento['distribuidor'] or argumento['distribuidora'] or '' })
local Editorial = propiedad('P123', { ['valor'] = argumento['editorial'] or '' })
local Creador = propiedad('P50', { ['valor'] = argumento['creador'] or '' })
local Disenador = propiedad('P287', { ['valor'] = argumento['diseñador'] or '' })
local Director = propiedad('P57', { ['valor'] = argumento['director'] or '' })
local Productor = propiedad('P162', { ['valor'] = argumento['productor'] or '' })
local DirectorSon = propiedad('Q986888', { ['valor'] = argumento['director sonido'] or argumento['director_sonido'] or '' })
local Programador = propiedad('P943', { ['valor'] = argumento['programador'] or '' })
local Artista = argumento['artista'] or ''
local Escritor = propiedad('P58', { ['valor'] = argumento['escritor'] or '' })
local Compositor = propiedad('P86', { ['valor'] = argumento['compositor'] or '' })
local Modos = propiedad('P404', { ['valor'] = argumento['modo'] or argumento['modos'] or '' })
-- Software
local Motor = propiedad('P408', { ['valor'] = argumento['motor'] or '' })
local Version
local Ver = argumento['versión'] or argumento['version']
local VerFecha = argumento['versión fecha'] or argumento['version fecha']
if Ver == 'no' then
Version = ''
elseif Ver and Ver ~= '' then
if VerFecha and VerFecha:lower() ~= 'no' and VerFecha ~= '' then
Version = Ver .. ' <small>(' .. VerFecha .. ')</small>'
else
Version = Ver
end
else
Ver = propiedad('P348', {['uno'] = 'último', ['ordenar'] = 'por fecha'}) or ''
if Ver ~= '' then
VerFecha = propiedad('P348', {['calificador'] = 'P577', ['uno'] = 'último', ['ordenar'] = 'por fecha'}) or ''
if VerFecha ~= '' then
Version = Ver .. ' <small>(' .. VerFecha .. ')</small>'
else
Version = Ver
end
else
Version = ''
end
end
local VersionDesa
Ver = argumento['versión desarrollo'] or argumento['versión desarrollo']
VerFecha = argumento['versión desarrollo fecha'] or argumento['version desarrollo fecha']
if Ver and Ver ~= '' then
if VerFecha and VerFecha ~= '' then
VersionDesa = Ver .. ' <small>(' .. VerFecha .. ')</small>'
else
VersionDesa = Ver
end
else
VersionDesa = ''
end
local Plataformas = propiedad('P400', { ['valor'] = argumento['plataforma'] or argumento['plataformas'] or '' })
local PlatafInic = argumento['plataforma inicial'] or ''
local Requisitos = argumento['requisitos'] or ''
local Licencias = propiedad('P275', { ['valor'] = argumento['licencia'] or argumento['licencias'] or '' })
-- :: Hardware
local Formato = propiedad('P437', { ['valor'] = argumento['formato'] or '' })
local Mueble = argumento['mueble'] or ''
local Hardware = argumento['hardware'] or ''
local CPU = propiedad('P880', { ['valor'] = argumento['cpu'] or '' })
local GPU = ''
if argumento['gpu'] ~= 'no' then
GPU = argumento['gpu'] or propiedad('P2560') or propiedad('P6948') or ''
end
local Audio = propiedad('P7501', { ['valor'] = argumento['audio'] or '' })
local Pantalla = propiedad('P5307', { ['valor'] = argumento['pantalla'] or '' })
local PantallaHardware, PantallaPinball
if InstanciaDeID == 'Q653928' then
PantallaPinball = Pantalla
else
PantallaHardware = Pantalla
end
local Entrada = propiedad('P479', { ['valor'] = argumento['entradas'] or '' })
-- :: Mesa de pinball
local Tecnologia = argumento['tecnología'] or argumento['tecnologia'] or ''
local Lanzador = argumento['lanzador'] or ''
local Flippers = argumento['flippers'] or ''
local Anchura = argumento['anchura'] or ''
local Rampas = argumento['rampas'] or ''
local Bucles = argumento['bucles'] or ''
local Dianas = argumento['dianas']
local DianasAbat = argumento['dianas abatibles'] or argumento['dianas_abatibles'] or ''
local Bumpers = argumento['bumpers'] or ''
local Slingshots = argumento['slingshots'] or ''
local Accesorios = argumento['accesorios'] or ''
local UnidadesProducidas = ''
if argumento['unidades producidas'] ~= 'no' and argumento['unidades_producidas'] ~= 'no' then
UnidadesProducidas = argumento['unidades producidas'] or argumento['unidades_producidas'] or propiedad('P1092', {['formato'] = 'número'}) or ''
end
local UnidadesVendidas = ''
if argumento['unidades vendidas'] ~= 'no' and argumento['unidades_vendidas'] ~= 'no' then
UnidadesVendidas = argumento['unidades vendidas'] or argumento['unidades_vendidas'] or propiedad('P2664', {['valor-función'] = 'formatoNumero', ['valor-módulo'] = 'Wikidata/Formatos', ['uno'] = 'último', ['ordenar'] = 'por fecha'}) or ''
end
-- :: Desarrollo
local Lanzamiento = ''
if argumento['lanzamiento'] ~= 'no' then
Lanzamiento = argumento['lanzamiento'] or Lanzamientovj() or ''
end
local Discontinuacion = ''
if argumento['discontinuación'] ~= 'no' then
Discontinuacion = argumento['discontinuación'] or propiedad('P2669', {['enlace']='no'})
end
local ZonaPruebas = argumento['location test'] or ''
local Estado = argumento['estado actual'] or ''
local MotivoEstado = argumento['motivo estado'] or ''
local Franquicia = propiedad('P179', { ['valor'] = argumento['franquicia'] or argumento['serie'] })
local Anterior = propiedad('P155', { ['valor'] = argumento['anterior'] or '' })
local Posterior = propiedad('P156', { ['valor'] = argumento['posterior'] or '' })
local Primero = argumento['primero'] or ''
local PrimeroFecha = argumento['primero fecha'] or argumento['primero_fecha'] or ''
if Primero ~= '' and PrimeroFecha ~= '' then Primero = Primero .. ' (' .. PrimeroFecha .. ')' end
local Ultimo = argumento['último'] or ''
local UltimoFecha = argumento['último fecha'] or argumento['último_fecha'] or ''
if Ultimo ~= '' and UltimoFecha ~= '' then Ultimo = Ultimo .. ' (' .. UltimoFecha .. ')' end
local Derivadas = propiedad('P4969', { ['valor'] = argumento['derivada'] or '' })
local Expansiones = argumento['expansión'] or argumento['contenido descargable'] or argumento['dlc'] or ''
local Clasificaciones = ''
if argumento['clasificación'] ~= 'no' then
Clasificaciones = argumento['clasificación'] or Clasificacionvj()
end
local SitiosWeb = obtenerEnlaces()
local TablaFicha = {
titulo = Titulo,
subtitulo = Eslogan,
tipocabecera = TipoCabecera,
clasetitulo = ClaseTitulo,
estilotitulo = EstiloTitulo,
estiloseccion = EstiloTitulo,
estiloetiqueta = EstiloEtiqueta,
estilodatos = EstiloDatos,
imagen = Logo,
imagenmodooscuro = ModoOscuro,
['tamañoimagen'] = '250x250px',
imagen2 = Captura,
['tamañoimagen2'] = '250x250px',
pie2 = Pie,
estilopie = 'font-size:88%',
{tipo='sección',
titulo = 'Información general',
{'Creador', Creador},
{'Fabricante', Fabricante},
{'Desarrollador', Desarrollador},
{'Distribuidor', (Distribuidor or Editorial)},
{'Diseñador', Disenador},
{'Director', Director},
{'Productor', Productor},
{'Director de sonido', DirectorSon},
{'Programador', Programador},
{'Artista', Artista},
{'Escritor', Escritor},
{'Compositor', Compositor},
{'Franquicia', Franquicia},
},
{tipo='sección',
titulo = 'Datos del juego',
{'Género', Genero},
{'Género Inicial', GeneroInic},
{'Primer videojuego', Primero},
{'Ultimo videojuego', Ultimo},
{'Idiomas', Idiomas},
{'Obras derivadas', Derivadas},
{'Modos de juego', Modos},
{'Clasificaciones', Clasificaciones},
},
{tipo='sección',
titulo = 'Datos del software',
{'Motor', Motor},
{'Versión actual', Version},
{'Version en desarrollo', VersionDesa},
{'Plataformas', Plataformas},
{'Plataforma inicial', PlatafInic},
{'Requisitos', Requisitos},
{'Licencias', Licencias},
},
{tipo='sección',
titulo = 'Datos del la mesa',
{'Tecnología', Tecnologia},
{'Tipo de lanzador', Lanzador},
{'Tipo de pantalla', PantallaPinball},
{'Anchura', Anchura},
{"''Flippers''", Flippers},
{'Rampas', Rampas},
{'Bucles', Bucles},
{'Dianas', Dianas},
{'Bumpers', Bumpers},
{'Accesorios', Accesorios},
{'Unidades producidas', UnidadesProducidas},
{'Unidades comercializadas', UnidadesVendidas},
},
{tipo='sección',
titulo = 'Datos del hardware',
{'Formato', Formato},
{'Mueble', Mueble},
{'Hardware', Hardware},
{'CPU', CPU},
{'Video', GPU},
{'Pantalla', PantallaHardware},
{'Audio', Audio},
{'Dispositivos de entrada', Entrada},
},
{tipo='sección',
titulo = 'Desarrollo',
{'Lanzamiento', Lanzamiento},
{'Discontinuación', Discontinuacion},
{'Zona de pruebas', ZonaPruebas},
{'Estado de desarrollo', Estado},
{'Expansiones', Expansiones},
},
{tipo='sección',
titulo = 'Cronología de videojuegos',
{tipo='sucesión',
anterior = Anterior,
actual = Titulo,
siguiente = Posterior,
},
},
{tipo='sección',
titulo = 'Enlaces',
--estilodatos = 'text-align:left',
{'', SitiosWeb}
},
}
return require('Módulo:Ficha').infobox(TablaFicha)
end
-- Función p.clasificacionvj() pública para ser llamada desde la plantilla {{clasificaciónvj/zona de pruebas}}
function p.clasificacionvj(frame)
ModuloWikidata:setFrame(frame)
argumento = obtenerArgumentosConValor(frame)
if argumento.id then Entidad = mw.wikibase.getEntity(argumento.id) end
return Clasificacionvj()
end
-- Función Clasificacionvj() privada para ser incluída llamada desde este módulo
function Clasificacionvj()
local Salida = {}
local apertura = '<div style="display:table-row">'
local cierre = '</div>'
for k, v in pairs(ClasificacionDatos) do
local Clasificador = argumento[v[1]] or propiedad(v[3], {['formato'] = 'entidadID'})
if Clasificador then
if v[4][Clasificador] then
table.insert(Salida, '<div style="display:table-row">')
table.insert(Salida, '<div style="display:table-cell;font-weight:bold;padding-right:0.2em">[[' .. v[2] .. '|' .. v[1] .. ']]</div>')
table.insert(Salida, '<div style="display:table-cell;">[[Archivo:' .. v[4][Clasificador][1] .. '|' .. v[4][Clasificador][2] .. '|25x30px|link=]]</div>')
table.insert(Salida, '</div>')
end
end
end
return table.concat(Salida)
end
-- Función p.lanzamientovj() pública para ser llamada desde la plantilla {{Lanzamientovj/zona de pruebas}}
function p.lanzamientovj(frame)
argumento = obtenerArgumentosConValor(frame)
local Valores = {}
-- :: Sintraxis alternativa (parámetros posicionales, tres)
if argumento[1] and argumento[2] and argumento[3] then
local Valor = '<li style="display:table-row"><span style="display:table-cell;font-size:70%;vertical-align:top">[[' .. argumento[1] .. '|' .. argumento[2] .. ']]</span><span style="display:table-cell">' .. argumento[3] .. '</span></li>'
local Categoria
if argumento[4] then
Categoria = '[[Categoría:Wikipedia:Artículos que transcluyen Plantilla:Lanzamientovj usando una sintaxis incorrecta]]'
else
Categoria = '[[Categoría:Wikipedia:Artículos que transcluyen Plantilla:Lanzamientovj usando la sintaxis de parámetros posicionales]]'
end
table.insert(Valores, Valor..Categoria)
-- :: Sintraxis alternativa (parámetros posicionales, dos)
elseif argumento[1] and argumento[2] then
local Valor = '<li style="display:table-row"><span style="display:table-cell;font-size:70%;vertical-align:top">' .. argumento[1] .. '</span><span style="display:table-cell">' .. argumento[2] .. '</span></li>'
local Categoria = '[[Categoría:Wikipedia:Artículos que transcluyen Plantilla:Lanzamientovj usando la sintaxis de parámetros posicionales]]'
table.insert(Valores, Valor..Categoria)
-- :: Sintaxis estándar (parámetros nombrados por código de región)
else
for k, v in pairs(LanzamientoDatos) do
local Valor
for kk, vv in pairs(v[2]) do
if argumento[vv] then
Valor = argumento[vv]
break
end
end
if not Valor then
for kk, vv in pairs((v[3] or {})) do
if argumento[vv] then
Valor = argumento[vv]
end
end
end
if Valor then
if v[1] == 'DESC' then
Etiqueta = '<abbr title="Fecha desconocida">?</abbr>'
elseif v[1] == 'WW' then
Etiqueta = '<abbr title="Lanzamiento mundial">WW</abbr>'
elseif v[4] then
Etiqueta = '[[' .. v[4] .. '|' .. v[1] ..']]'
elseif v[1] then
Etiqueta = v[1]
else
Etiqueta = nil
end
if Etiqueta then
table.insert(Valores, '<li style="display:table-row"><span style="display:table-cell;font-size:70%;vertical-align:top">' .. Etiqueta .. '</span><span style="display:table-cell">'.. Valor ..'</span></li>')
end
end
end
end
if #Valores > 0 then
local Apertura = '<ul style="list-style: none; line-height: inherit; margin: 0px;">'
local Cierre = '</ul>'
return Apertura..table.concat(Valores)..Cierre
end
end
-- Función privada para ser llamada desde este módulo (solo extraer datos desde Wikidata)
function Lanzamientovj()
local Valores = {}
if not Entidad then return end
local Obj = elementoTabla(Entidad, 'claims', 'P577')
if Obj then
for k, v in pairs(Obj) do
local Valor = FormatoFechaHora(elementoTabla(v, 'mainsnak', 'datavalue', 'value'), {['enlace']='no'})
local Region = elementoTabla(v, 'qualifiers', 'P291', 1, 'datavalue', 'value', 'id')
local Etiqueta
if Region then
for kk, vv in pairs(LanzamientoDatos) do
if vv and vv[3] and (Region == vv[3][1] or Region == vv[3][2] or Region == vv[3][3]) then
if vv[4] and vv[1] then
Etiqueta = '[[' .. vv[4] .. '|' .. vv[1] ..']]'
elseif vv[1] then
Etiqueta = vv[1]
end
end
end
else
Etiqueta = '<abbr title="Lanzamiento mundial">WW</abbr>'
end
if Etiqueta and Valor then
table.insert(Valores, '<li style="display:table-row"><span style="display:table-cell;font-size:70%;vertical-align:top">' .. Etiqueta .. '</span><span style="display:table-cell">'.. Valor ..'</span></li>')
end
end
end
if #Valores > 0 then
local Apertura = '<ul style="list-style: none; line-height: inherit; margin: 0px;">'
local Cierre = '</ul>'
return Apertura..table.concat(Valores)..Cierre
end
end
-- :: Función para obtener y formatear enlaces externos
function obtenerEnlaces()
local SitiosWeb = {}
local SitioWeb = argumento['sitio_web'] or argumento['sitio web'] or argumento['web'] or propiedad('P856',{['enlace']='no', uno='sí'})
local Blog = argumento['blog_oficial'] or propiedad('P1581',{['enlace']='no', uno='sí'})
local Repo = argumento['repositorio'] or propiedad('P1324', {['enlace']='no', uno='sí'})
local SegErrores= argumento['seguimiento_de_errores'] or propiedad('P1401', {['enlace']='no', uno='sí'})
if SitioWeb then table.insert(SitiosWeb, '<div>' .. enlazar(SitioWeb, 'Sitio web oficial') .. '</div>') end
if Blog then table.insert(SitiosWeb, '<div>' .. enlazar(Blog, 'Blog') .. '</div>') end
if Repo then table.insert(SitiosWeb, '<div>' .. enlazar(Repo, 'Repositorio de código') .. '</div>') end
if SegErrores then table.insert(SitiosWeb, '<div>' .. enlazar(SegErrores, 'Seguimiento de errores') .. '</div>') end
return table.concat(SitiosWeb, '\n')
end
-- Función, propiedad() personalizada
function propiedad(idPropiedad, opciones, entidad)
if not entidad then entidad = Entidad end
if not opciones then
opciones = {['linkback'] = 'sí'}
end
-- Manejo incondicional de valores personalizados
local valor = opciones['valor'] or opciones[1]
if valor ~= nil then
valor = mw.text.trim(tostring(valor))
if valor:lower() == 'no' then
return nil
elseif valor ~= '' then
return valor
end
end
-- Solo si no hay valor personalizado, pasar a Wikidata
if entidad and entidad.claims and entidad.claims[idPropiedad] then
opciones['idioma'] = 'es'
local ValorPosicional = 1
if type(opciones['valor_posicional']) == 'number' then ValorPosicional = opciones['valor_posicional'] end
local ValorPosicionalCalif = 1
if type(opciones['valor_posicional_calif']) == 'number' then ValorPosicional = opciones['valor_posicional_calif'] end
local Calificador = opciones['calificador']
local Obj
local Obj2
local Obj3 = elementoTabla(entidad, 'claims', idPropiedad)
if type(ValorPosicional) == 'number' then Obj2 = elementoTabla(Obj3, ValorPosicional) end
if ValorPosicional == 'último' then Obj2 = elementoTabla(Obj3, #Obj3) end
if Calificador then
local Obj3 = elementoTabla(Obj2, 'qualifiers', Calificador)
if type(ValorPosicionalCalif) == 'number' then Obj2 = elementoTabla(Obj3, ValorPosicionalCalif) end
if ValorPosicionalCalif == 'último' then Obj2 = elementoTabla(Obj3, #Obj3) end
end
Obj = elementoTabla(Obj2, 'mainsnak')
Tipo = elementoTabla(Obj, 'datavalue', 'type')
if opciones['formato'] == 'archivo' then
if not opciones['uno'] then opciones['uno'] = 'último' end
opciones['ordenar'] = 'por fecha'
if Calificador then return elementoTabla(Obj, 'datavalue', 'value') end
end
-- Devolver el ID de la entidad, para propiedades de entidad
if opciones['formato'] == 'entidadID' then
return elementoTabla(Obj, 'datavalue', 'value', 'id')
end
if opciones['formato'] == 'cadena' then
opciones['linkback'] = 'no'
if Tipo == 'string' then
return elementoTabla(Obj, 'datavalue', 'value')
end
end
if opciones['formato'] == 'número' then
if Tipo == 'quantity' then
return formatoNumero(elementoTabla(Obj, 'datavalue', 'value', 'amount'))
end
end
-- Valores cuya unidad deba ir a la derecha, separada de un espacio
if opciones['formato'] == 'unidad' then
if elementoTabla(entidad, 'claims', idPropiedad, 2, 'mainsnak', 'datavalue') then
return formatoNumero(elementoTabla(entidad, 'claims', idPropiedad, 1, 'mainsnak', 'datavalue', 'value', 'amount')) .. ' - ' .. numeroUnidad(elementoTabla(entidad, 'claims', idPropiedad, 2, 'mainsnak', 'datavalue'), opciones)
else
return numeroUnidad(elementoTabla(entidad, 'claims', idPropiedad, 1, 'mainsnak', 'datavalue'), opciones)
end
end
-- Invocar a la función fallback si no se cumplen las condiciones anteriores
opciones.entityId = entidad.id
opciones.propiedad = idPropiedad
return ModuloWikidata.getPropiedad(opciones, entidad.claims[idPropiedad])
end
end
return p