« Module:Matériau » : différence entre les versions
Apparence
Modèle:Infobox>Zolo mailleur gestion des qualificatifs (voir 1000 De La Gauchetière) |
m 22 versions importées |
||
| (17 versions intermédiaires par 4 utilisateurs non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
local p = {} | local p = {} | ||
local wikidata = require | local wikidata = require 'Module:Wikidata' | ||
local linguistic = require | local linguistic = require 'Module:Linguistique' | ||
local speciallabels = { -- libellés définis localement, qui priment sur ceux de Wikidata | local speciallabels = { -- libellés définis localement, qui priment sur ceux de Wikidata | ||
Q296955 = '[[Peinture à l\'huile|huile]]' | Q296955 = '[[Peinture à l\'huile|huile]]', | ||
Q22731 = '[[Pierre naturelle|pierre]]', | |||
Q4259259 = '[[Toile (peinture)|toile]]', | |||
Q2448108 = 'structure', --QID de "gros oeuvre" mais parait un peu bizarre dans des contexte comme "gros oeuvre en acier" | |||
} | } | ||
function p.formatFromItem(item) | function p.formatFromItem(item, params) -- affiche le matériau en fonction de Property:P186, et de son qualificatif P518 ('s'applique à') | ||
params = params or {} | |||
local | params.speciallabels = speciallabels | ||
if not | |||
local claims = wikidata.getClaims{entity = item, property = 'P186'} | |||
if not claims then | |||
return nil | return nil | ||
end | end | ||
-- crée trois tables : main pour celle sans P518, support pour celle avec qualif "s'applique à "support de peinture" et "parts" pour les autres | |||
local main, support, parts = {}, {}, {} | |||
local | |||
if not | |||
table.insert( | local function assignClaim(claim) -- met une claims dans la bonne table | ||
else for | local str = wikidata.formatStatement(claim, params) | ||
if (not claim.qualifiers) or (not claim.qualifiers.P518) then | |||
table.insert(main, str) | |||
else | |||
for _, val in pairs(claim.qualifiers.P518) do | |||
local key = wikidata.getId(val) | |||
if key == 'Q861259' then | |||
table.insert(support, str) | |||
else | |||
parts[key] = parts[key] or {} | |||
table.insert(parts[key], str) | |||
end | |||
end | |||
end | |||
end | end | ||
for i, j in pairs(claims) do | |||
assignClaim(j) | |||
end | end | ||
local | -- transforme en chaîne la table des valeurs sans qualificatif | ||
for part, materials in pairs( | local mainstr = linguistic.conj(main) | ||
-- ajoute le support de peinture (sur toile) | |||
local supportstr = linguistic.conj(support) | |||
mainstr = linguistic.conj({mainstr, supportstr}, ' sur ') | |||
-- chaîne des autres valeurs avec qualifs: [piédestal] = {marbre, bronze} => 'piédestal en marbre et bronze' | |||
local formattedparts = {} | |||
for part, materials in pairs(parts) do | |||
local str = wikidata.formatEntity(part, {link = '-', speciallabels = speciallabels}) .. ' en ' .. linguistic.conj(materials) | |||
table.insert(formattedparts, str) | |||
end | end | ||
local partsStr = linguistic.conj(formattedparts, 'comma') | |||
mainstr = linguistic.conj({mainstr, partsStr}, 'comma') | |||
if (params.linkback ~= '-') then | |||
mainstr = wikidata.addLinkBack(mainstr, item, 'P186') | |||
end | end | ||
return mainstr .. wikidata.addTrackingCat('P186') | |||
return | |||
end | end | ||
return p | return p | ||
Dernière version du 22 février 2026 à 00:17
La documentation pour ce module peut être créée à Module:Matériau/doc
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 = '[[Peinture à l\'huile|huile]]',
Q22731 = '[[Pierre naturelle|pierre]]',
Q4259259 = '[[Toile (peinture)|toile]]',
Q2448108 = 'structure', --QID de "gros oeuvre" mais parait un peu bizarre dans des contexte comme "gros oeuvre en acier"
}
function p.formatFromItem(item, params) -- affiche le matériau en fonction de Property:P186, et de son qualificatif P518 ('s'applique à')
params = params or {}
params.speciallabels = speciallabels
local claims = wikidata.getClaims{entity = item, property = 'P186'}
if not claims then
return nil
end
-- crée trois tables : main pour celle sans P518, support pour celle avec qualif "s'applique à "support de peinture" et "parts" pour les autres
local main, support, parts = {}, {}, {}
local function assignClaim(claim) -- met une claims dans la bonne table
local str = wikidata.formatStatement(claim, params)
if (not claim.qualifiers) or (not claim.qualifiers.P518) then
table.insert(main, str)
else
for _, val in pairs(claim.qualifiers.P518) do
local key = wikidata.getId(val)
if key == 'Q861259' then
table.insert(support, str)
else
parts[key] = parts[key] or {}
table.insert(parts[key], str)
end
end
end
end
for i, j in pairs(claims) do
assignClaim(j)
end
-- transforme en chaîne la table des valeurs sans qualificatif
local mainstr = linguistic.conj(main)
-- ajoute le support de peinture (sur toile)
local supportstr = linguistic.conj(support)
mainstr = linguistic.conj({mainstr, supportstr}, ' sur ')
-- chaîne des autres valeurs avec qualifs: [piédestal] = {marbre, bronze} => 'piédestal en marbre et bronze'
local formattedparts = {}
for part, materials in pairs(parts) do
local str = wikidata.formatEntity(part, {link = '-', speciallabels = speciallabels}) .. ' en ' .. linguistic.conj(materials)
table.insert(formattedparts, str)
end
local partsStr = linguistic.conj(formattedparts, 'comma')
mainstr = linguistic.conj({mainstr, partsStr}, 'comma')
if (params.linkback ~= '-') then
mainstr = wikidata.addLinkBack(mainstr, item, 'P186')
end
return mainstr .. wikidata.addTrackingCat('P186')
end
return p