« Module:Matériau » : différence entre les versions

De Lagny-sur-Marne Wiki
Aller à la navigation Aller à la recherche
0x010D (discussion | contributions)
Aucun résumé des modifications
0x010D (discussion | contributions)
mailleur gestion des qualificatifs (voir 1000 De La Gauchetière)
Ligne 3 : Ligne 3 :
local linguistic = require('Module:Linguistique')
local linguistic = require('Module:Linguistique')


local speciallabels = { -- valeur du libellé défini ici plutôt que dans l'élément Wikidata (pour adaptation au contexte, léger gain de performance)
local speciallabels = { -- libellés définis localement, qui priment sur ceux de Wikidata
Q296955 = '[[Peinture à l\'huile|huile]]'
Q296955 = '[[Peinture à l\'huile|huile]]'
}
}
Ligne 13 : Ligne 13 :
return nil
return nil
end
end
local mainvals = {}
local vals = {} -- table des valeurs formatées
local supportvals = {} -- comme dans huile ''sur toile''
vals.main = {} -- valeurs sans qualficatif P518
for i, j in pairs(materials) do
for i, j in pairs(materials) do
local val = wikidata.formatSnak(j.mainsnak, {speciallabels = speciallabels})
local val = wikidata.formatSnak(j.mainsnak, {speciallabels = speciallabels})
local typ = 'main' -- changé en 'support' s'il faut la mettre sur supportstr
if not j.qualifiers or not j.qualifiers.P518 then
if j.qualifiers and j.qualifiers.P518 then -- P518: "s'applique à "
table.insert(vals.main, val)
if wikidata.getRawvalue(j.qualifiers.P518[1]) == 'Q861259'  then
else for k, qualif in pairs(j.qualifiers.P518) do
typ = 'support'
local key = wikidata.getid(qualif)
else
if not vals[key] then
val = val ..linguistic.inparentheses(wikidata.formatSnak(j.qualifiers.P518[1], {link = '-'})) -- enlève le lien qui fait moche ici
vals[key] = {}
end
end
end
table.insert(vals[key], val)
if typ == 'support' then
end end
table.insert(supportvals, val)
end
else
 
table.insert(mainvals, val)
local mainstr, supportstr, withpartstr -- supportstr pour le support de peintrue, withpartstr, pour celle avec un autre qualificateur P518
end
mainstr = linguistic.conj(vals.main)
vals.main = nil
if vals['Q861259'] then
supportstr = ' sur ' .. linguistic.conj(vals['Q861259'])
vals['Q861259'] = nil
end
end
local val = linguistic.conj(mainvals) or ''
local withpart = {} -- table des données contenant un qualificatif P518, sauf "support de peinture"
local support = linguistic.conj(supportvals)
for part, materials in pairs(vals) do
if support then
table.insert(withpart, wikidata._getLabel(part) .. ' : ' .. linguistic.conj(materials))
val = val .. ' sur ' .. support
end
withpartstr = linguistic.conj(withpart, 'comma')
if mainstr or supportstr then
mainstr = (mainstr or '').. (supportstr or '')
end
end
val = wikidata.addLinkback(val, item, 'P186') .. wikidata.addtrackingcat('P186')
mainstr = linguistic.conj({mainstr, withpartstr}, 'comma')
return val
return wikidata.addLinkback(mainstr, item, 'P186') .. wikidata.addtrackingcat('P186')
end
end
return p
return p

Version du 11 mars 2015 à 14:18

local p = {} local wikidata = require('Module:Wikidata') local linguistic = require('Module:Linguistique')

local speciallabels = { -- libellés définis localement, qui priment sur ceux de Wikidata Q296955 = 'huile' }

function p.formatFromItem(item) -- affiche le matériau en fonction de Property:P186, et de son qualificatif P518 ('s'applique à') local materials = wikidata.getClaims{item = item, property = 'P186'} if not materials then return nil end local vals = {} -- table des valeurs formatées vals.main = {} -- valeurs sans qualficatif P518 for i, j in pairs(materials) do local val = wikidata.formatSnak(j.mainsnak, {speciallabels = speciallabels}) if not j.qualifiers or not j.qualifiers.P518 then table.insert(vals.main, val) else for k, qualif in pairs(j.qualifiers.P518) do local key = wikidata.getid(qualif) if not vals[key] then vals[key] = {} end table.insert(vals[key], val) end end end

local mainstr, supportstr, withpartstr -- supportstr pour le support de peintrue, withpartstr, pour celle avec un autre qualificateur P518

mainstr = linguistic.conj(vals.main) vals.main = nil if vals['Q861259'] then supportstr = ' sur ' .. linguistic.conj(vals['Q861259']) vals['Q861259'] = nil end

local withpart = {} -- table des données contenant un qualificatif P518, sauf "support de peinture" for part, materials in pairs(vals) do table.insert(withpart, wikidata._getLabel(part) .. ' : ' .. linguistic.conj(materials)) end withpartstr = linguistic.conj(withpart, 'comma') if mainstr or supportstr then mainstr = (mainstr or ).. (supportstr or ) end mainstr = linguistic.conj({mainstr, withpartstr}, 'comma') return wikidata.addLinkback(mainstr, item, 'P186') .. wikidata.addtrackingcat('P186') end return p