Edición de «Módulo:Wikidata»
Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces publica los cambios para así efectuar la reversión.
Revisión actual | Tu texto | ||
Línea 5: | Línea 5: | ||
* específico a una propiedad de Wikidata. | * específico a una propiedad de Wikidata. | ||
* | * | ||
* Fecha última revisión: | * Fecha última revisión: 2 de mayo de 2019. | ||
* | * | ||
* Estado: En uso. | * Estado: En uso. | ||
* | * | ||
*********************************************************************************`-- ]] | *********************************************************************************`-- ]] | ||
local p = {} | local p = {} | ||
local datequalifiers = {'P585', 'P571', 'P580', 'P582'} | local datequalifiers = {'P585', 'P571', 'P580', 'P582'} | ||
Línea 19: | Línea 20: | ||
========================================================================= `-- ]] | ========================================================================= `-- ]] | ||
local avisos = | local avisos = { | ||
["errores"] = { | |||
["property-param-not-provided"] = "Parámetro de la propiedad no proporcionado.", | |||
["entity-not-found"] = "Entrada no encontrada.", | |||
["unknown-claim-type"] = "Tipo de notificación desconocida.", | |||
["unknown-snak-type"] = "Tipo de dato desconocido.", | |||
["unknown-datavalue-type"] = "Formato de dato desconocido.", | |||
["unknown-entity-type"] = "Tipo de entrada desconocido.", | |||
["unknown-value-module"] = "Debe ajustar ambos parámetros de valor y el valor del módulo de funciones.", | |||
["value-module-not-found"] = "No se ha encontrado el módulo apuntado por valor-módulo.", | |||
["value-function-not-found"] = "No se ha encontrado la función apuntada por valor-función.", | |||
["other entity"] = "Enlaces a elementos diferentes desactivado." | |||
}, | |||
["somevalue"] = "''valor desconocido''", | |||
["novalue"] = "" | |||
} | |||
-- Módulos y funciones utilizadas | -- Módulos y funciones utilizadas | ||
Línea 27: | Línea 43: | ||
-- diferentes de Wikidata/Formatos | -- diferentes de Wikidata/Formatos | ||
-- | -- | ||
local modulosTipos = | local modulosTipos = { | ||
['altura'] = 'Módulo:Wikidata/Formato magnitud', | |||
['área'] = 'Módulo:Wikidata/Formato magnitud', | |||
['bandera'] = 'Módulo:Wikidata/Formatos país', | |||
['educado en'] = 'Módulo:Wikidata/Formatos educación', | |||
['imagen'] = 'Módulo:Wikidata/Formato imagen', | |||
['lugar'] = 'Módulo:Wikidata/Formato lugar', | |||
['formatoLugar']= 'Módulo:Wikidata/Formato lugar', | |||
['magnitud'] = 'Módulo:Wikidata/Formato magnitud', | |||
['movimiento'] = 'Módulo:Wikidata/Formato movimiento', | |||
['periodicidad']= 'Módulo:Wikidata/Formato magnitud', | |||
['premio'] = 'Módulo:Wikidata/Formato premio', | |||
} | |||
local modulosTiposComplejos = { | local modulosTiposComplejos = { | ||
Línea 51: | Línea 79: | ||
return mw.wikibase.getEntityObject() | return mw.wikibase.getEntityObject() | ||
end | end | ||
end | end | ||
Línea 102: | Línea 131: | ||
local tablaAuxiliar = tablaDeclaraciones | local tablaAuxiliar = tablaDeclaraciones | ||
tablaDeclaraciones = {} | tablaDeclaraciones = {} | ||
for indice, declaracion in pairs(tablaAuxiliar) do | for indice, declaracion in pairs(tablaAuxiliar) do | ||
Línea 149: | Línea 174: | ||
function p.getDeclaraciones(entityId) | function p.getDeclaraciones(entityId) | ||
-- == Comprobamos que existe un ítem enlazado a la página en Wikidata == | -- == Comprobamos que existe un ítem enlazado a la página en Wikidata == | ||
Línea 155: | Línea 181: | ||
end | end | ||
local entidad = SelecionEntidadPorId(entityId) | local entidad = SelecionEntidadPorId(entityId) | ||
if not entidad then | if not entidad then | ||
return '' -- Si la página no está enlazada a un ítem no devuelve nada | return '' -- Si la página no está enlazada a un ítem no devuelve nada | ||
Línea 165: | Línea 192: | ||
end | end | ||
-- == Declaración de formato y concatenado limpio == | -- == Declaración de formato y concatenado limpio == | ||
return entidad.claims | return entidad.claims | ||
end | end | ||
Línea 175: | Línea 203: | ||
local claimqualifs = claim.qualifiers | local claimqualifs = claim.qualifiers | ||
local i,qualif | local i,qualif | ||
local vals, vals1, datavalue, value | local vals, vals1, datavalue, value | ||
if not claimqualifs then | if not claimqualifs then | ||
Línea 188: | Línea 216: | ||
if datavalue then | if datavalue then | ||
value = datavalue.value | value = datavalue.value | ||
if | if value then | ||
return value.time | return value.time | ||
end | end | ||
end | end | ||
Línea 204: | Línea 229: | ||
function p.getPropiedad(opciones, declaracion) | function p.getPropiedad(opciones, declaracion) | ||
local propiedad = {} | local propiedad = {} | ||
local tablaOrdenada = {} | |||
if opciones.propiedad == 'precisión' or opciones.propiedad == 'latitud' or opciones.propiedad == 'longitud' then | |||
if opciones.propiedad == 'precisión' or opciones.propiedad == 'latitud' or opciones.propiedad == 'longitud' then | propiedad = 'P625' -- Si damos el valor latitud, longitud o precisión equivaldrá a dar p625 | ||
propiedad = 'P625' | |||
else | else | ||
propiedad = opciones.propiedad -- En el resto de casos se lee lo dado | propiedad = opciones.propiedad -- En el resto de casos se lee lo dado | ||
end | |||
if not propiedad then -- Comprobamos si existe la propiedad dada y en caso contrario se devuelve un error | if not propiedad then -- Comprobamos si existe la propiedad dada y en caso contrario se devuelve un error | ||
return formatoError( 'property-param-not-provided' ) | return formatoError( 'property-param-not-provided' ) | ||
end | end | ||
if declaracion then | if declaracion then | ||
tablaOrdenada = declaracion | tablaOrdenada = declaracion | ||
elseif | elseif not p.getDeclaraciones(opciones.entityId) then | ||
return formatoError( 'other entity' ) | |||
elseif p.getDeclaraciones(opciones.entityId)[mw.ustring.upper(propiedad)] then | |||
tablaOrdenada = p.getDeclaraciones(opciones.entityId)[mw.ustring.upper(propiedad)] | |||
else | else | ||
return '' | return '' | ||
end | end | ||
function split(inputstr, sep) | function split(inputstr, sep) | ||
sep=sep or '%s' | sep=sep or '%s' | ||
Línea 243: | Línea 262: | ||
end | end | ||
if (opciones.filtroCalificador ~= nil and opciones.filtroCalificador ~= '') then | if (opciones.filtroCalificador ~= nil and opciones.filtroCalificador ~= '') then | ||
local opts = split(opciones.filtroCalificador, ';') | local opts = split(opciones.filtroCalificador, ';') | ||
tablaOrdenada = p.filtroCalificadores(tablaOrdenada, opts[1], split(opts[2], ',')) | |||
tablaOrdenada = p.filtroCalificadores(tablaOrdenada, opts[1], split(opts[2], ',') | |||
end | end | ||
if (opciones.filtroValor ~= nil and opciones.filtroValor ~= '') then | if (opciones.filtroValor ~= nil and opciones.filtroValor ~= '') then | ||
tablaOrdenada = p.filtroValores(tablaOrdenada, split(opciones.filtroValor, ',')) | |||
tablaOrdenada = p.filtroValores(tablaOrdenada, split( | |||
end | end | ||
local modulo, funcion | local modulo, funcion | ||
funcion = opciones['valor-función'] or opciones['value-function'] or opciones['funcion'] | funcion = opciones['valor-función'] or opciones['value-function'] or opciones['funcion'] | ||
if funcion then | if funcion then | ||
modulo = modulosTiposComplejos[funcion] | modulo = modulosTiposComplejos[funcion] | ||
Línea 291: | Línea 289: | ||
end | end | ||
-- | --Dejar en su caso los valores de mayor rango | ||
if (opciones.rangoMayor == 'sí') then | if (opciones.rangoMayor == 'sí') then | ||
tablaOrdenada = p.filtrarDeclaracionPorRango(tablaOrdenada) | tablaOrdenada = p.filtrarDeclaracionPorRango(tablaOrdenada) | ||
end | end | ||
--Ordenar en su caso por fecha. Ver la función chronosort de :fr:Module:Wikidata/Récup | |||
--Ordenar | |||
if opciones.ordenar == 'por fecha' then | if opciones.ordenar == 'por fecha' then | ||
require('Módulo:Tablas').ordenar(tablaOrdenada, | require('Módulo:Tablas').ordenar(tablaOrdenada, | ||
Línea 320: | Línea 306: | ||
end | end | ||
if not tablaOrdenada[1] then | if not tablaOrdenada[1] then | ||
return | return | ||
Línea 398: | Línea 383: | ||
-- busca un un elemento concreto en Wikidata (QID), en caso contrario que sea nil | -- busca un un elemento concreto en Wikidata (QID), en caso contrario que sea nil | ||
local id = frame.args.id | local id = frame.args.id | ||
if id and (#id == 0) then | if id and (#id == 0) then | ||
id = nil | id = nil | ||
Línea 570: | Línea 554: | ||
========================================================================= `-- ]] | ========================================================================= `-- ]] | ||
function p.filtroCalificadores(t, qualifier, values | function p.filtroCalificadores(t, qualifier, values) | ||
local f = {} -- Tabla que se devolverá con el resultado del filtrado | local f = {} -- Tabla que se devolverá con el resultado del filtrado | ||
for k,v in pairs(t) do | for k,v in pairs(t) do | ||
Línea 584: | Línea 568: | ||
end | end | ||
end | end | ||
if counts | if counts then -- Si uno de los valores del cualificador dio true se inserta el elemento | ||
table.insert(f, v) | table.insert(f, v) | ||
end | end | ||
Línea 598: | Línea 580: | ||
========================================================================= `-- ]] | ========================================================================= `-- ]] | ||
function p.filtroValores(t, values | function p.filtroValores(t, values) | ||
local f = {} -- Tabla que se devolverá con el resultado del filtrado | local f = {} -- Tabla que se devolverá con el resultado del filtrado | ||
for k,v in pairs(t) do | for k,v in pairs(t) do | ||
Línea 609: | Línea 591: | ||
end | end | ||
end | end | ||
if counts | if counts then -- Si uno de los valores dio true se inserta el elemento | ||
table.insert(f, v) | table.insert(f, v) | ||
end | end | ||
end | end | ||
return f | return f | ||
end | end | ||
Línea 721: | Línea 668: | ||
if wValorCalificativoFormateado then | if wValorCalificativoFormateado then | ||
datoFormateado = p.formatoDato(declaracion.mainsnak, opciones) | datoFormateado = p.formatoDato(declaracion.mainsnak, opciones) | ||
return (datoFormateado and datoFormateado .. ' <small>(' .. wValorCalificativoFormateado .. ')</small>') or nil | return (datoFormateado and datoFormateado .. ' <small>(' .. wValorCalificativoFormateado .. ')</small>') or nil | ||
end | end | ||
Línea 802: | Línea 743: | ||
-- == Formatos por defecto en función del tipo de valor == | -- == Formatos por defecto en función del tipo de valor == | ||
-- * Para tipo coordenadas cuando se da como valor de propiedad: latitud, longitud o precisión | |||
if opciones.propiedad == 'latitud' then | |||
return valorDato.value['latitude'] | |||
elseif opciones.propiedad == 'longitud' then | |||
return valorDato.value['longitude'] | |||
elseif opciones.propiedad == 'precisión' then | |||
return valorDato.value['precision'] | |||
-- * Con el resto de valores en propiedad | -- * Con el resto de valores en propiedad | ||
elseif valorDato.type == 'wikibase-entityid' then -- Tipo: Número de entidad que puede ser un ítem o propiedad | |||
local opcionesEntidad = {} | local opcionesEntidad = {} | ||
if mw.ustring.find(opciones['formatoTexto'],'mayúscula', plain ) and | if mw.ustring.find(opciones['formatoTexto'],'mayúscula', plain ) and | ||
Línea 833: | Línea 783: | ||
return require('Módulo:Wikidata/Fecha').FormateaFechaHora(valorDato.value, opcionesFecha, calificativos) | return require('Módulo:Wikidata/Fecha').FormateaFechaHora(valorDato.value, opcionesFecha, calificativos) | ||
elseif valorDato.type == 'monolingualtext' then -- Tipo: | elseif valorDato.type == 'monolingualtext' then -- Tipo: monoligüe | ||
if valorDato.value then | if valorDato.value then | ||
if opciones.idioma then | if opciones.idioma then | ||
Línea 850: | Línea 800: | ||
return require('Módulo:Wikidata/Formatos').formatoUnidad(valorDato, opciones) | return require('Módulo:Wikidata/Formatos').formatoUnidad(valorDato, opciones) | ||
elseif valorDato.value['latitude'] and valorDato.value['longitude'] then -- Tipo: Coordenadas | elseif valorDato.value['latitude'] and valorDato.value['longitude'] then -- Tipo: Coordenadas | ||
local globo = require('Módulo:Wikidata/Globos')[valorDato.value.globe] | local globo = require('Módulo:Wikidata/Globos')[valorDato.value.globe] | ||
Línea 874: | Línea 813: | ||
opciones.display ..'|formato=' .. opciones.formato..'}}') | opciones.display ..'|formato=' .. opciones.formato..'}}') | ||
end | end | ||
else | else | ||
return formatoError( 'unknown-datavalue-type' ) -- Si no es de ninguno de estos tipos devolverá error valor desconocido | return formatoError( 'unknown-datavalue-type' ) -- Si no es de ninguno de estos tipos devolverá error valor desconocido | ||
Línea 900: | Línea 839: | ||
function p.Wikidata( frame ) | function p.Wikidata( frame ) | ||
marco = frame | marco = frame | ||
local args = frame.args | local args = frame.args | ||
Línea 911: | Línea 847: | ||
local parentArgs = frame:getParent().args | local parentArgs = frame:getParent().args | ||
-- Copiar los argumentos | -- Copiar los argumentos | ||
local argumentos = {} | local argumentos = {} | ||
Línea 925: | Línea 860: | ||
end | end | ||
end | end | ||
--if true then return require('Módulo:Tablas').tostring(argumentos) end | --if true then return require('Módulo:Tablas').tostring(argumentos) end | ||
Línea 937: | Línea 867: | ||
local valorWikidata; | local valorWikidata; | ||
if (args.prioridad ~= 'sí' or (args.importar and args.importar == 'no')) and args.valor and args.valor ~= '' then | if (args.prioridad ~= 'sí' or (args.importar and args.importar == 'no')) and args.valor and args.valor ~= '' then | ||
valorWikidata = | valorWikidata = ''; | ||
else | else | ||
local ent = SelecionEntidadPorId(argumentos.entityId) | |||
argumentos.entityId = ent and ent.id or nil | |||
valorWikidata = p.getPropiedad(argumentos, nil); | valorWikidata = p.getPropiedad(argumentos, nil); | ||
end | end | ||
Línea 954: | Línea 883: | ||
and string.upper(args.propiedad) ~= 'P109' -- P109: firma de persona | and string.upper(args.propiedad) ~= 'P109' -- P109: firma de persona | ||
and string.upper(args.propiedad) ~= 'P154') then -- P154: logotipo | and string.upper(args.propiedad) ~= 'P154') then -- P154: logotipo | ||
if | if valorWikidata ~= '' and args.valor and args.valor ~= '' then | ||
categorias = '[[Categoría:Wikipedia:Artículos con datos locales]]' | categorias = '[[Categoría:Wikipedia:Artículos con datos locales]]' | ||
elseif valorWikidata and valorWikidata == '' and args.valor and args.valor ~= '' and | elseif valorWikidata and valorWikidata == '' and args.valor and args.valor ~= '' and | ||
(not args.calificador or args.calificador == '') and | (not args.calificador or args.calificador == '') and | ||
(not args.dato or args.dato == '' or args.dato ~= 'fuente') then | (not args.dato or args.dato == '' or args.dato ~= 'fuente')then | ||
categorias = '[[Categoría:Wikipedia:Artículos con datos por trasladar a Wikidata]]' | categorias = '[[Categoría:Wikipedia:Artículos con datos por trasladar a Wikidata]]' | ||
end | end | ||
end | end | ||
if args.prioridad == 'sí' and valorWikidata | if args.prioridad == 'sí' and valorWikidata ~= '' then -- Si se da el valor sí a prioridad tendrá preferencia el valor de Wikidata | ||
if args.importar and args.importar == 'no' and args.valor and args.valor ~= '' then | if args.importar and args.importar == 'no' and args.valor and args.valor ~= '' then | ||
return args.valor .. categorias | return args.valor .. categorias | ||
Línea 1016: | Línea 945: | ||
if lidEntidad then | if lidEntidad then | ||
return valorPropiedad .. '<span class=\"wikidata-link | return valorPropiedad .. '<span class=\"wikidata-link noprint\"> [[Archivo:Blue_pencil.svg|Ver y modificar los datos en Wikidata|10px|baseline|alt=Ver y modificar los datos en Wikidata|enlace=https://www.wikidata.org/wiki/' .. lidEntidad .. '?uselang=es#' .. idPropiedad .. | ||
']]</span>' | ']]</span>' | ||
else | else | ||
Línea 1032: | Línea 961: | ||
if opciones.linkback == 'sí' and opciones.entityId and opciones.propiedad then | if opciones.linkback == 'sí' and opciones.entityId and opciones.propiedad then | ||
lapiz = '<span class=\"wikidata-link | lapiz = '<span class=\"wikidata-link noprint\"> [[Archivo:Blue_pencil.svg|Ver y modificar los datos en Wikidata|10px|baseline|alt=Ver y modificar los datos en Wikidata|enlace=https://www.wikidata.org/wiki/' .. opciones.entityId .. '?uselang=es#' .. opciones.propiedad .. | ||
']]</span>' | ']]</span>' | ||
else | else |