Module:Test
Apparence
[voir] [modifier] [historique] [purger]
Voir : {{Test-module}}
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
local formats = {
Q16 = { -- Canada
streetline = '$number $street $direction',
directions = {Q659 = 'Nord', Q679 = 'Ouest', Q684 = 'Est', Q667 = 'Sud'},
},
Q30 = {--USA
streetline = '$number $street $direction',
cityline = '$admindivs $postcode',
div1 = {},
div2 = {}, -- county or county equivalent
div2 = {'Q35657'}, --state
},
Q142 = { --France
streetline = '$number $street',
cityline = '$postcode $admindivs',
div1 = {'Q702842', 'Q484170'}, -- arrondissement municipal ou commune
div2 = {'Q6465'}, -- département
},
default = {
streetline = '$number $street $direction',
cityline = '$postcode $admindivs',
}
}
local p = {}
local wikidata = require "Module:Interface Wikidata".fromLua
local analysis = require "Module:Wikidata/Analyse transitive" -- à mettre dans interface wikidata
local linguistic = require "Module:Linguistique"
local countrymodule = require "Module:Country data"
local function numberFromClaim(claim) -- récupère le numéro de l'immeuble à partir d'un qualificatif P670 d'une affirmation Wikidata
if not claim.qualifiers or not claim.qualifiers.P670 then
return nil
end
local vals = {}
for i, j in pairs(claim.qualifiers.P670) do
table.insert(vals, wikidata.formatSnak(j))
end
return table.concat(vals, '-')
end
local function directionFromClaim(claim, area) -- par exemple rue Sherbrooke Ouest
if not claim.qualifiers or not claim.qualifiers.P560 then
return nil
end
local str = ''
for i, snak in pairs(claim.qualifiers.P560) do
local directionlabels = area.directions or formats.default.directions
str = str .. wikidata.formatSnak(snak, {speciallabels = directionlabels})
end
return str
end
local function streetFromClaims(claim, formattingarea) -- réupère le nom de la rue à partir d'une affirmation P669 Wikidata
return wikidata.formatStatement(claim)
end
local function formatStreet(streetname, housenumber, direction, displayformat)
local val = displayformat.streetline or formats.default.streetline
val = mw.ustring.gsub(val, '$number', housenumber or '')
val = mw.ustring.gsub(val, '$street', streetname or '')
val = mw.ustring.gsub(val, '$direction', direction or '')
return val
end
local function wikidatastreet(claim, area) --formate des données sur la rue à partir d'une affirmation Wikidata
local streetname = streetFromClaims(claim)
local housenumber = numberFromClaim(claim)
local direction = directionFromClaim(claim, area)
return formatStreet(streetname, housenumber, direction, area)
end
function p.streetLine(item, area) -- fprùate l'intégralité d'une adresse à partir des données contenues dans une élément Wikidata
local streets -- châine contenant le ou les rues et numéros d'immeuble
-- essaye de remplir street, en priorité avec P669, type : élément
local streetclaims = wikidata.getClaims{entity = item, property = 'P669'}
if streetclaims then
for i, j in pairs(streetclaims) do
streetclaims[i] = wikidatastreet(j, area)
end
streets = mw.text.listToText(streetclaims)
streets = wikidata.addLinkback(streets, item, 'P669')
-- faut-il ajouter Category:Page utilisant des données de Wikidata/P969 ?
end
-- sinon : P969, type : string
if not streets then
streets = wikidata.formatAndCat{property = 'P969', entity = item}
end
return streets
end
function p.fullAddress(id, candidatesdivs, country)
local divisions = analysis.transitiveVals(id, {property = 'P131'}, 3)
local country = wikidata.formatStatements{property = 'P17', entity = id, displayformat = 'raw', numval = 1} -- quand il y a plusieurs pays, on prend le formatage du premier
if not divisions then
return "no id"
end
local function setValue(targetclasses, divisions)
for i, division in pairs(divisions) do
for j, divtype in pairs(targetclasses) do
if analysis.isInstance(divtype, division, 3) then
return wikidata.formatEntity(division)
end
end
end
end
local displayformat = formats[country] or formats[default]
local postcode = wikidata.formatStatements{entity = id, property = 'P281'}
local div1, div2, div3
if displayformat.div1 then
div1 = setValue(displayformat.div1, divisions)
end
if displayformat.div2 then
div2 = setValue(displayformat.div2, divisions)
end
if displayformat.div3 then
div3 = setValue(displayformat.div3, divisions)
end
-- first line: street
local streetline = p.streetLine(id, displayformat)
-- line2: administrative divisions, postcodes
local cityline = displayformat.cityline or formats.default.cityline
local divs = linguistic.conj({div1, div2, div3}, 'comma')
cityline = cityline:gsub("$postcode", postcode or '')
cityline = cityline:gsub("$admindivs", divs or '')
if mw.text.trim(cityline) == '' then
cityline = nil
end
-- last line: country
local countryline = countrymodule.standarddisplay(country) or wikidata.formatStatements{entity = entity, property = 'P17'}
return linguistic.conj({streetline, cityline, countryline}, '<br />')
end
local tableMaker = require "Module:Fabricant de tables"
local linguistic = require "Module:Linguistique"
local wikidata = require "Module:Interface Wikidata".fromLua
function p.test(frame)
local ids = {
-- 'Q4055', -- château de Blois (cas normal français)
-- 'Q1503331', -- obélisque de la Concorde (Paris)
-- 'Q9202', -- statue de la liberté
-- 'Q35525', -- Maison blanche
-- 'Q44440', -- Golden Gate Bridge
'Q134883', -- Tour CN, Toronto
'Q1151208', -- Hôtel de ville de Montréal
}
local results = tableMaker:new()
results:addHeaders{'élément', 'résultat'}
for i, id in pairs(ids) do
local idstr = wikidata.formatEntity(id) .. linguistic.inparentheses('<small>[[:d:' .. id .. '|' .. id .. ']]</small>')
local work, result = pcall(p.fullAddress, id)
results:addRow{idstr, result}
end
return results:show()
end
return p