Modulo:Collegamenti esterni: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Gestione url archiviati per proprietà di tipo URL. Supporto configurazione titolo anche quando c'è il qualificatore titolo |
ricorsione nella ricerca dei vincoli, vedi discussione |
||
Riga 27:
local catEmpty = 'Voci con template Collegamenti esterni senza dati da Wikidata'
local catUnknownQual = 'Voci con template Collegamenti esterni e qualificatori sconosciuti'
local catExcessiveLoad = 'Voci con template Collegamenti esterni e molte entità Wikidata caricate'
-- =============================================================================
Line 73 ⟶ 74:
-- Restituisce true se l'elemento collegato alla pagina o quello specificato in from
-- ha tra i valori (o loro sottoclassi) della proprietà indicata uno degli elementi specificati.
-- Restituisce come secondo valore una tabella con gli ID delle entità caricate ai fini della ricerca.
-- @param {string} prop - codice della proprietà 'Pxxx'
-- @param {table} [entityIds] - array dei valori (strighe 'Qxxx') che può avere
-- @param {string} from
-- @return {boolean}
-- @return {table}
local function checkEntity(prop, entityIds, from)
local args = { from = from, recursion = 8 }
for _, entityId in ipairs(entityIds) do
table.insert(args, entityId)
Line 304 ⟶ 307:
local ret, groupSites = {}, {}
local cfg = readConfig()
local loadedEntities = setmetatable({}, {
__newindex = function(t1, key, t2)
if not t2 then return end
for k, v in pairs(t2) do rawset(t1, k, v) end
end })
for _, groupName in ipairs(orderedGroupNames) do -- Per ogni gruppo tematico
groupSites[groupName] = {}
Line 312 ⟶ 320:
end
for _, linkConf in ipairs(cfg[groupName]) do -- Per ogni sito configurato
local claims, valido
-- se il sito non è escluso manualmente dall'utente, avviene la lettura da Wikidata
if not (self:_Escluso(linkConf.pid, self.soloprop) or self:_Escluso(mw.getContentLanguage():ucfirst(linkConf.medium or 'web'), self.solomedium)) then
claims = mWikidata._getClaims(linkConf.pid, { from = self.from })
end
-- controlla se
if claims and #claims > 0 then
-- controlla se è un sito da escludere per soggetto non pertinente
if type(linkConf.vincolo) == 'table' then
local Nvincoli = 0
for _ in ipairs(linkConf.vincolo) do Nvincoli = Nvincoli + 1 end
for i = 2, Nvincoli, 2 do -- Per ogni coppia 'proprietà', {valori}
valido, loadedEntities[i] = checkEntity(linkConf.vincolo[i - 1], linkConf.vincolo[i], self.from)
if valido then break end
end
else
valido = true
end
end
--
if valido then
local url, qualifier, extraConf
local Nqualtitoli = 0
-- Qualificatori generali
-- In caso di valori multipli, il titolo viene letto per tutti; gli altri qualificatori solo per il primo (altrimenti bisogna rivedere la formattazione dei valori multipli)
-- Ricordarsi di elencare i qual. generali anche in altriQualNoti
extraConf = {}
extraConf.autore = mWikidata._formatQualifiers(claims[1], 'P50') or mWikidata._formatQualifiers(claims[1], 'P2093') -- come item o stringa
extraConf.volume = mWikidata._formatQualifiers(claims[1], 'P478')
for i, claim in ipairs(claims) do
extraConf.titolo[i] = mWikidata._formatQualifiers(claim, 'P1476') or mWikidata._formatQualifiers(claim, 'P1810') or mWikidata._formatQualifiers(claim, 'P1932') or mWikidata._formatQualifiers(claim, 'P742') -- titolo o "indicato come" o "riferito come" o pseudonimo
if extraConf.
-- url archiviato, solo per le proprietà di tipo URL
extraConf.urlmorto[i] = mWikidata._formatQualifiers(claim, 'P582') or mWikidata._formatQualifiers(claim, 'P582', { snaktype = 'somevalue' })
end
-- Uno o più url ed eventuali qualificatori per distinguerli
url = {}
for i, claim in ipairs(claims) do
if claim.qualifiers then
local qualifierIds = ParametroElenco(linkConf.multi)
for
if claim.qualifiers[qualifierId] then
local formattedQualifier = mWikidata._formatQualifiers(claim, qualifierId, { nq = '1', formatting = 'raw' })
if formattedQualifier then
if
qualifier[i] = mw.wikibase.getLabel(formattedQualifier)
break
end
end
end
local altriQualNoti = {P407 = true, P50 = true, P2093 = true, P1476 = true, P1810 = true, P1932 = true, P742 = true, P577 = true, P478 = true, P304 = true, P813 = true, P1065 = true, P2960 = true, P582 = true}
if qualifierIds[qualifierId] ~= true and altriQualNoti[qualifierId] ~= true then
table.insert(self.categories, string.format('[[%sCategoria:%s]]', self.catColon, catUnknownQual))
break
end
end
end
--
claim = mWikidata._formatStatement(claim)
if linkConf.url then
-- se proprietà di tipo id, il valore viene sotituito a "$1"
claim = mw.message.newRawMessage(linkConf.url, claim):plain()
end
table.insert(url, claim)
end
-- nome sito, di default il dominio estratto dall'url
extraConf.sito = linkConf.sito or getDomain(linkConf.url)
-- Creazione dell'oggetto collegamento esterno, con l'url (o gli url) e gli altri dati raccolti
table.insert(ret[groupName], ExtLink:new(url, qualifier, linkConf, extraConf, self.from))
-- categoria per proprietà letta; se multipla e indistinguibile, usa categoria di avviso
local tail = #url > 1 and linkConf.url and (qualifier == nil or #qualifier ~= #url) and (Nqualtitoli < #url - 1) and
catMultiSenzaQual or catLetta
table.insert(self.categories, string.format('[[%sCategoria:%s%s]]', self.catColon, linkConf.pid, tail))
-- per verificare se un sito è ripetuto nel gruppo
groupSites[groupName][extraConf.sito] = (groupSites[groupName][extraConf.sito] or 0) + 1
-- conteggio complessivo dei collegamenti
self.numExtLinks = self.numExtLinks + 1
end
end
Line 410 ⟶ 419:
end
end
--
local catnumero
if self.numExtLinks == 0 then
Line 420 ⟶ 429:
if catnumero then
table.insert(self.categories, string.format('[[%sCategoria:%s]]', self.catColon, catnumero))
end
-- categoria di servizio sul numero di entità caricate
if #loadedEntities > 100 then
table.insert(self.categories, string.format('[[%sCategoria:%s]]', self.catColon, catExcessiveLoad))
end
return ret
|