<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wicri-demo.istex.fr/Wicri/Europe/France/fr/index.php?action=history&amp;feed=atom&amp;title=Module%3AWikidata</id>
	<title>Module:Wikidata - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://wicri-demo.istex.fr/Wicri/Europe/France/fr/index.php?action=history&amp;feed=atom&amp;title=Module%3AWikidata"/>
	<link rel="alternate" type="text/html" href="https://wicri-demo.istex.fr/Wicri/Europe/France/fr/index.php?title=Module:Wikidata&amp;action=history"/>
	<updated>2026-04-19T01:26:03Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.31.10</generator>
	<entry>
		<id>https://wicri-demo.istex.fr/Wicri/Europe/France/fr/index.php?title=Module:Wikidata&amp;diff=916&amp;oldid=prev</id>
		<title>Jacques Ducloy : 1 révision importée</title>
		<link rel="alternate" type="text/html" href="https://wicri-demo.istex.fr/Wicri/Europe/France/fr/index.php?title=Module:Wikidata&amp;diff=916&amp;oldid=prev"/>
		<updated>2021-01-11T16:09:11Z</updated>

		<summary type="html">&lt;p&gt;1 révision importée&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Version du 11 janvier 2021 à 16:09&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;fr&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Aucune différence)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Jacques Ducloy</name></author>
		
	</entry>
	<entry>
		<id>https://wicri-demo.istex.fr/Wicri/Europe/France/fr/index.php?title=Module:Wikidata&amp;diff=11752&amp;oldid=prev</id>
		<title>imported&gt;Jacques Ducloy : 1 révision importée</title>
		<link rel="alternate" type="text/html" href="https://wicri-demo.istex.fr/Wicri/Europe/France/fr/index.php?title=Module:Wikidata&amp;diff=11752&amp;oldid=prev"/>
		<updated>2020-12-28T09:45:28Z</updated>

		<summary type="html">&lt;p&gt;1 révision importée&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Version du 28 décembre 2020 à 09:45&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;fr&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Aucune différence)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>imported&gt;Jacques Ducloy</name></author>
		
	</entry>
	<entry>
		<id>https://wicri-demo.istex.fr/Wicri/Europe/France/fr/index.php?title=Module:Wikidata&amp;diff=3723&amp;oldid=prev</id>
		<title>imported&gt;Jacques Ducloy : 1 révision importée</title>
		<link rel="alternate" type="text/html" href="https://wicri-demo.istex.fr/Wicri/Europe/France/fr/index.php?title=Module:Wikidata&amp;diff=3723&amp;oldid=prev"/>
		<updated>2017-07-03T14:27:46Z</updated>

		<summary type="html">&lt;p&gt;1 révision importée&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Version du 3 juillet 2017 à 14:27&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;fr&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Aucune différence)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>imported&gt;Jacques Ducloy</name></author>
		
	</entry>
	<entry>
		<id>https://wicri-demo.istex.fr/Wicri/Europe/France/fr/index.php?title=Module:Wikidata&amp;diff=915&amp;oldid=prev</id>
		<title>Jacques Ducloy : Page créée avec « --script that retrieves basic data stored in Wikidata, for the datamodel, see https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua  local wd = {}  local modules =... »</title>
		<link rel="alternate" type="text/html" href="https://wicri-demo.istex.fr/Wicri/Europe/France/fr/index.php?title=Module:Wikidata&amp;diff=915&amp;oldid=prev"/>
		<updated>2017-06-18T21:28:20Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « --script that retrieves basic data stored in Wikidata, for the datamodel, see https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua  local wd = {}  local modules =... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--script that retrieves basic data stored in Wikidata, for the datamodel, see https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua&lt;br /&gt;
&lt;br /&gt;
local wd = {}&lt;br /&gt;
&lt;br /&gt;
local modules = { }&lt;br /&gt;
local modulesNames = {&lt;br /&gt;
	reference = 'Module:Wikidata/Références',&lt;br /&gt;
	linguistic = 'Module:Linguistique',&lt;br /&gt;
	formatDate = 'Module:Date complexe',&lt;br /&gt;
	formatNum = 'Module:Conversion',&lt;br /&gt;
	langmodule = 'Module:Langue',&lt;br /&gt;
	cite = 'Module:Biblio',&lt;br /&gt;
	getData = 'Module:Wikidata/Récup',&lt;br /&gt;
	entities = 'Module:Wikidata/Formatage entité',&lt;br /&gt;
	tools = 'Module:Wikidata/Outils',&lt;br /&gt;
	globes = 'Module:Wikidata/Globes',&lt;br /&gt;
	langcodes = 'Module:Dictionnaire Wikidata/Codes langue', -- gros et rarement utilisé&lt;br /&gt;
	weblink = 'Module:Weblink'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function loadModule( t, key )&lt;br /&gt;
	if modulesNames[key] then&lt;br /&gt;
		local m = require( modulesNames[key] )&lt;br /&gt;
		t[key] = m&lt;br /&gt;
		return m&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
setmetatable( modules, { __index = loadModule } )&lt;br /&gt;
&lt;br /&gt;
local tools = require 'Module:Wikidata/Outils'&lt;br /&gt;
local translate = tools.translate&lt;br /&gt;
local defaultlang = mw.getContentLanguage():getCode()&lt;br /&gt;
&lt;br /&gt;
function wd.getLabel(entity, args)&lt;br /&gt;
	modules.entities.getLabel(entity)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.formatEntity(entity, args)&lt;br /&gt;
	return modules.entities.formatEntity(entity, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.addtrackingcat(prop, cat) -- doit parfois être appelé par d'autres modules&lt;br /&gt;
	if type(prop) == 'table' then&lt;br /&gt;
		prop = prop[1] -- devrait logiquement toutes les ajouter&lt;br /&gt;
	end&lt;br /&gt;
	if not prop and not cat then&lt;br /&gt;
		return error(&amp;quot;no property provided&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if not cat then&lt;br /&gt;
		cat = translate('trackingcat', prop or 'P??')&lt;br /&gt;
	end&lt;br /&gt;
	return tools.addcat(cat )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function removeblanks(args)&lt;br /&gt;
	for i, j in pairs(args) do&lt;br /&gt;
		if j == '' then args[i] = nil end&lt;br /&gt;
	end&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function unknownvalue(snak, label)&lt;br /&gt;
	local str = label&lt;br /&gt;
&lt;br /&gt;
	if type(str) == &amp;quot;function&amp;quot; then&lt;br /&gt;
		str = str(snak)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (not str) then&lt;br /&gt;
		if snak.datatype == 'time' then&lt;br /&gt;
			str = translate('sometime')&lt;br /&gt;
		else&lt;br /&gt;
			str = translate('somevalue')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if type(str) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
		return tools.formatError(snak.datatype)&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function novalue(displayformat)&lt;br /&gt;
	if not displayformat then&lt;br /&gt;
		return translate('novalue')&lt;br /&gt;
	end&lt;br /&gt;
	if type(displayformat) == 'string' then&lt;br /&gt;
		return displayformat&lt;br /&gt;
	end&lt;br /&gt;
	return tools.formatError()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getlangcode(entityid)&lt;br /&gt;
	return modules.langcodes[tonumber(entityid:sub(2))]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local  function showlang(statement) -- retourne le code langue entre paranthèse avant la valeur (par exemple pour les biblios et liens externes)&lt;br /&gt;
	local mainsnak = statement.mainsnak&lt;br /&gt;
	if mainsnak.snaktype ~= 'value' then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local langlist = {}&lt;br /&gt;
	if mainsnak.datavalue.type == 'monolingualtext' then&lt;br /&gt;
		langlist = {mainsnak.datavalue.value.language}&lt;br /&gt;
	elseif (not statement.qualifiers) or (not statement.qualifiers.P407) then&lt;br /&gt;
		return&lt;br /&gt;
	else&lt;br /&gt;
		for i, j in pairs( statement.qualifiers.P407 ) do&lt;br /&gt;
			if  j.snaktype == 'value' then&lt;br /&gt;
				local langentity = tools.getId(j)&lt;br /&gt;
				local langcode =  getlangcode(langentity)&lt;br /&gt;
				table.insert(langlist, langcode)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if (#langlist &amp;gt; 1) or (#langlist == 1 and langlist[1] ~= defaultlang) then -- si c'est en français, pas besoin de le dire&lt;br /&gt;
		return modules.langmodule.indicationMultilingue(langlist)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formattable(statements, params) -- transform a table of claims into a table of formatted values&lt;br /&gt;
	for i, j in pairs(statements) do&lt;br /&gt;
		j = wd.formatStatement(j, params)&lt;br /&gt;
	end&lt;br /&gt;
	return statements&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.tableToText(values, params) -- takes a list of already formatted values and make them a text&lt;br /&gt;
	if not values then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- filters out nil values to avoid error in subsequent table.concat&lt;br /&gt;
	local filteredValues = {}&lt;br /&gt;
	for i, v in ipairs(values) do&lt;br /&gt;
		if v ~= nil then&lt;br /&gt;
			table.insert(filteredValues, v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return modules.linguistic.quickconj( filteredValues, params.conjtype)--modules.linguistic.conj( values, params.lang, params.conjtype )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function wd.addStandardQualifs(str, statement)&lt;br /&gt;
	if (not statement) or (not statement.qualifiers) then&lt;br /&gt;
		return str&lt;br /&gt;
	end&lt;br /&gt;
	if not str then&lt;br /&gt;
		return tools.formatError(&amp;quot;adding qualifs to a nil str !&amp;quot;)-- il y a un problème&lt;br /&gt;
	end&lt;br /&gt;
	if statement.qualifiers.P1480 then&lt;br /&gt;
		for i, j in pairs(statement.qualifiers.P1480) do&lt;br /&gt;
			local v = tools.getId(j)&lt;br /&gt;
			if (v == &amp;quot;Q21818619&amp;quot;) then&lt;br /&gt;
				str = str .. &amp;quot; (ou environs)&amp;quot;&lt;br /&gt;
			elseif (v == &amp;quot;Q18122778&amp;quot;) or (v == &amp;quot;Q18912752&amp;quot;) then&lt;br /&gt;
				str = str.. &amp;quot; (?)&amp;quot;&lt;br /&gt;
			elseif (v == &amp;quot;Q5727902&amp;quot;) then -- traité séparément, car plus complexe séparément&lt;br /&gt;
			end			&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.rangeobject(begin, ending, params)&lt;br /&gt;
	--[[&lt;br /&gt;
		objet comportant un timestamp pour le classement chronologique et deux dateobject (begin et ending)&lt;br /&gt;
	]]-- &lt;br /&gt;
	local timestamp&lt;br /&gt;
	if begin then&lt;br /&gt;
		timestamp = begin.timestamp&lt;br /&gt;
	else&lt;br /&gt;
		timestamp = ending.timestamp&lt;br /&gt;
	end&lt;br /&gt;
	return {begin = begin, ending = ending, timestamp = timestamp, type = 'rangeobject'}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.dateobject(orig, params)&lt;br /&gt;
	--[[ transforme un snak en un nouvel objet utilisable par Module:Date complexe&lt;br /&gt;
		{type = 'dateobject', timestamp = str, era = '+' ou '-', year = number, month = number, day = number, calendar = calendar}&lt;br /&gt;
	]]-- &lt;br /&gt;
	if not params then&lt;br /&gt;
		params = {}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local newobj = modules.formatDate.splitDate(orig.time, orig.calendar)&lt;br /&gt;
	&lt;br /&gt;
	newobj.precision = params.precision or orig.precision&lt;br /&gt;
	newobj.type = 'dateobject'&lt;br /&gt;
	return newobj&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.objecttotext(obj, params)&lt;br /&gt;
	if obj.type == 'dateobject' then&lt;br /&gt;
		return modules.formatDate.simplestring(obj, params)&lt;br /&gt;
	elseif obj.type == 'rangeobject' then&lt;br /&gt;
		return modules.formatDate.daterange(obj.begin, obj.ending, params)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getDatefromQualif(statement, qualif)&lt;br /&gt;
	if (not statement) or (not statement.qualifiers) or not (statement.qualifiers[qualif]) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local v = statement.qualifiers[qualif][1]&lt;br /&gt;
	if v.snaktype ~= 'value' then -- que faire dans ce cas ?&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return wd.dateobject(v.datavalue.value)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.getDate(statement)&lt;br /&gt;
	local period = getDatefromQualif(statement, 'P585') -- retourne un dateobject&lt;br /&gt;
	if period then&lt;br /&gt;
		return period&lt;br /&gt;
	end&lt;br /&gt;
	local begin, ending = getDatefromQualif(statement, 'P580'),  getDatefromQualif(statement, 'P582')&lt;br /&gt;
	if begin or ending then&lt;br /&gt;
		return wd.rangeobject(begin, ending) -- retourne un rangeobject fait de deux dateobject&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
function wd.getFormattedDate(statement, params, useallqualifiers)&lt;br /&gt;
	if not statement then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local str&lt;br /&gt;
&lt;br /&gt;
	local fuzzy = modules.getData.hasqualifier(statement, {&amp;quot;P1480&amp;quot;}, {&amp;quot;Q5727902&amp;quot;})&lt;br /&gt;
	if fuzzy then&lt;br /&gt;
		fuzzy = true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--cherche la date avec les qualifs P580/P582&lt;br /&gt;
	local datetable = wd.getDate(statement)&lt;br /&gt;
	if datetable then&lt;br /&gt;
		str = wd.objecttotext(datetable, params)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- puis limite intérieur / supérieur&lt;br /&gt;
	if not str then&lt;br /&gt;
		local start, ending = getDatefromQualif(statement, 'P1319'), getDatefromQualif(statement, 'P1326')&lt;br /&gt;
		str = modules.formatDate.between(start, ending, params)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	 -- sinon, le mainsnak, pour les données de type time&lt;br /&gt;
	if (not str) and (statement.mainsnak.datatype == 'time') then&lt;br /&gt;
		local mainsnak = statement.mainsnak&lt;br /&gt;
		if&lt;br /&gt;
			(mainsnak.snaktype == 'value' and mainsnak.datavalue.value.precision &amp;gt; 7)&lt;br /&gt;
			or&lt;br /&gt;
			(mainsnak.snaktype == 'somevalue')&lt;br /&gt;
		then&lt;br /&gt;
		str = wd.formatSnak(mainsnak, params)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- ajouter le qualificatif &amp;quot;environ&amp;quot;&lt;br /&gt;
	if fuzzy then&lt;br /&gt;
		str = modules.formatDate.fuzzydate(str)&lt;br /&gt;
	end&lt;br /&gt;
	-- autres valeurs de qualité de l'information&lt;br /&gt;
	if str and (useallqualifiers ~= &amp;quot;-&amp;quot;) then&lt;br /&gt;
		str = wd.addStandardQualifs(str, statement)&lt;br /&gt;
		if params.showqualifiers then&lt;br /&gt;
			str = wd.showQualifiers(str, statement, params)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Fonction qui trie des Claims de type time selon l'ordre chronologique&lt;br /&gt;
-- Une clé de tri nomée « dateSortKey » est ajouté à chaque claim.&lt;br /&gt;
-- Si des clés de tri de ce nom existent déjà, elles sont utilisées sans modification.&lt;br /&gt;
function wd.sortDateClaims( claims )&lt;br /&gt;
	for _, claim in ipairs( claims ) do&lt;br /&gt;
		if not claim.dateSortKey then&lt;br /&gt;
			local iso = wd.formatSnak( claim.mainsnak, { displayformat = 'raw' } ) &lt;br /&gt;
			-- transformation en nombre (indication de la base car gsub retourne deux valeurs)&lt;br /&gt;
			iso = tonumber( iso:gsub( '(%d)%D', '%1' ), 10 ) or 0&lt;br /&gt;
			claim.dateSortKey = iso&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort( &lt;br /&gt;
		claims,&lt;br /&gt;
		function ( c1, c2 )&lt;br /&gt;
			return c1.dateSortKey &amp;lt; c2.dateSortKey&lt;br /&gt;
		end&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.wikidataDate(prop, item, params)&lt;br /&gt;
	local claims = wd.getClaims{entity = item, property = prop}&lt;br /&gt;
	if not claims then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	wd.sortDateClaims( claims )&lt;br /&gt;
	params = params or {}&lt;br /&gt;
	local vals = {}&lt;br /&gt;
	for i, j in ipairs(claims) do&lt;br /&gt;
		local v = wd.getFormattedDate(j, params)&lt;br /&gt;
		if v then&lt;br /&gt;
			table.insert(vals, v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local str = modules.linguistic.conj(vals, params.conjtype or 'or')&lt;br /&gt;
&lt;br /&gt;
	if not str then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if params.addcat ~= '-' then&lt;br /&gt;
		str = str .. wd.addtrackingcat(prop)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if params.linkback ~= '-' then&lt;br /&gt;
		str = wd.addLinkback(str, item, prop)&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.getReferences(statement)&lt;br /&gt;
	local refdata = statement.references&lt;br /&gt;
	if not refdata then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function firstsnak(prop)&lt;br /&gt;
		return wd.formatSnak(prop[1])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local refs = {}&lt;br /&gt;
	for i, ref in pairs(refdata) do&lt;br /&gt;
		local s&lt;br /&gt;
		local function hasValue(prop) -- checks that the prop is here with valid value&lt;br /&gt;
			if ref.snaks[prop] and ref.snaks[prop][1].snaktype == 'value' then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
			return false&lt;br /&gt;
		end		&lt;br /&gt;
&lt;br /&gt;
		if ref.snaks.P248 then&lt;br /&gt;
			for j, source in pairs(ref.snaks.P248) do&lt;br /&gt;
				if source.snaktype == 'value' then&lt;br /&gt;
					local page, accessdate&lt;br /&gt;
					if hasValue('P304') then&lt;br /&gt;
						page = wd.formatSnak(ref.snaks.P304[1])&lt;br /&gt;
					end&lt;br /&gt;
					if hasValue('P813') then&lt;br /&gt;
						accessdate = wd.formatSnak(ref.snaks.P813[1])&lt;br /&gt;
					end&lt;br /&gt;
					s = modules.reference.citeitem(tools.getId(source), {['page'] = page, ['accessdate'] = accessdate})&lt;br /&gt;
					table.insert(refs, s)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
	&lt;br /&gt;
		elseif hasValue('P854') and hasValue('P1476') then&lt;br /&gt;
			local url, title, accessdate, publishdate, publishlang&lt;br /&gt;
			url, title = wd.formatSnak(ref.snaks.P854[1], {text = &amp;quot;-&amp;quot;}), wd.formatSnak(ref.snaks.P1476[1])&lt;br /&gt;
			if hasValue('P813') then&lt;br /&gt;
				accessdate = wd.formatSnak(ref.snaks.P813[1])&lt;br /&gt;
			end&lt;br /&gt;
			-- publishdate avec P577 ? (ne semble pas vraiment correspondre) &lt;br /&gt;
			if hasValue('P407') then&lt;br /&gt;
				local id = tools.getId(ref.snaks.P407[1])&lt;br /&gt;
				publishlang = getlangcode(id)&lt;br /&gt;
			end&lt;br /&gt;
			s = modules.cite.lienWeb{titre = title, url = url, langue = publishlang, ['en ligne le'] = publishdate, ['consulté le'] = accessdate}&lt;br /&gt;
			table.insert(refs, s)			&lt;br /&gt;
		elseif ref.snaks.P854 and ref.snaks.P854[1].snaktype == 'value' then&lt;br /&gt;
			s = wd.formatSnak(ref.snaks.P854[1], {text = &amp;quot;-&amp;quot;})&lt;br /&gt;
			table.insert(refs, s)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #refs &amp;gt; 0 then&lt;br /&gt;
		return refs&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.getDatavalue(snak, params)&lt;br /&gt;
	if not params then&lt;br /&gt;
		params = {}&lt;br /&gt;
	end&lt;br /&gt;
	local speciallabels = params.speciallabels -- parfois on a besoin de faire une liste d'éléments pour lequel le libellé doit être changé, pas très pratique d'utiliser une fonction pour ça&lt;br /&gt;
&lt;br /&gt;
	if snak.snaktype ~= 'value' then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local datatype = snak.datatype&lt;br /&gt;
	local value = snak.datavalue.value&lt;br /&gt;
	&lt;br /&gt;
	local displayformat = params.displayformat&lt;br /&gt;
	if type(displayformat) == 'function' then&lt;br /&gt;
		return displayformat(snak, params)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if datatype == 'wikibase-item' then&lt;br /&gt;
		return modules.entities.formatEntity(tools.getId(snak), params)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if datatype == 'url' then&lt;br /&gt;
		return modules.weblink.makelink(value, params.text)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if datatype == 'math' then&lt;br /&gt;
		return mw.getCurrentFrame():extensionTag( &amp;quot;math&amp;quot;, value)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (datatype == 'string') or (datatype == 'external-id') or (datatype == 'commonsMedia') then -- toutes les données de type string sauf &amp;quot;math&amp;quot;&lt;br /&gt;
		if params.urlpattern then&lt;br /&gt;
			local urlpattern = params.urlpattern&lt;br /&gt;
			if type(urlpattern) == 'function' then&lt;br /&gt;
				urlpattern = urlpattern(value)&lt;br /&gt;
			end&lt;br /&gt;
			local url = mw.ustring.gsub(urlpattern, '$1', (value:gsub('%%', '%%%%'))):gsub(' ', '%%20')&lt;br /&gt;
			value = '[' .. url .. ' ' .. (params.text or value) .. ']'&lt;br /&gt;
		end&lt;br /&gt;
		return value&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if datatype == 'time' then -- format example: +00000001809-02-12T00:00:00Z&lt;br /&gt;
		local precision = params.precision -- degré de précision à afficher ('day', 'month', 'year'), inférieur ou égal à value.precision&lt;br /&gt;
		if displayformat == 'raw' then&lt;br /&gt;
			return value.time&lt;br /&gt;
		else&lt;br /&gt;
			return wd.objecttotext(wd.dateobject(value, {precision = precision}), {linktopic = params.linktopic})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if datatype == 'globe-coordinate' then&lt;br /&gt;
		-- retourne une table avec clés latitude, longitude, précision et globe à formater par un autre module (à changer ?)&lt;br /&gt;
		if displayformat == 'latitude' then&lt;br /&gt;
			return value.latitude&lt;br /&gt;
		elseif displayformat == 'longitude' then&lt;br /&gt;
			return value.longitude&lt;br /&gt;
		else&lt;br /&gt;
			local coordvalue = mw.clone( value )&lt;br /&gt;
			coordvalue.globe = modules.globes[value.globe] -- transforme l'ID du globe en nom anglais utilisable par geohack&lt;br /&gt;
			return coordvalue -- note : les coordonnées Wikidata peuvent être utilisée depuis Module:Coordinates. Faut-il aussi autoriser à appeler Module:Coordiantes ici ?&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if datatype == 'quantity' then -- todo : gérer les paramètre précision&lt;br /&gt;
		local amount, unit = value.amount, value.unit&lt;br /&gt;
&lt;br /&gt;
		if unit then&lt;br /&gt;
			unit = unit:match('Q%d+')&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local showunit = params.showunit or true		&lt;br /&gt;
		if showunit == '-' then&lt;br /&gt;
			showunit = false&lt;br /&gt;
		end&lt;br /&gt;
		local raw	&lt;br /&gt;
		if displayformat == &amp;quot;raw&amp;quot; then&lt;br /&gt;
			raw = true&lt;br /&gt;
		end&lt;br /&gt;
		return modules.formatNum.displayvalue(amount, unit,&lt;br /&gt;
			{targetunit = params.targetunit, raw = raw, rounding = params.rounding, showunit = showunit}&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	if datatype == 'monolingualtext' then&lt;br /&gt;
		if value.language == defaultlang then&lt;br /&gt;
			return value.text&lt;br /&gt;
		else&lt;br /&gt;
			return modules.langmodule.langue({value.language, value.text})&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
	return tools.formatError('unknown-datavalue-type' )&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.getClaims( args ) -- returns a table of the claims matching some conditions given in args&lt;br /&gt;
	return modules.getData.getClaims(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function wd.stringTable(args) -- like getClaims, but get a list of string rather than a list of snaks, for easier manipulation&lt;br /&gt;
	&lt;br /&gt;
	local claims = args.claims&lt;br /&gt;
	if not claims then&lt;br /&gt;
		claims = wd.getClaims(args)&lt;br /&gt;
	end&lt;br /&gt;
	if not claims or claims == {} then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local props = {} -- liste des propriétés associété à chaque string pour catégorisation et linkback&lt;br /&gt;
	for i, j in pairs(claims) do&lt;br /&gt;
		claims[i] = wd.formatStatement(j, args)&lt;br /&gt;
		table.insert(props, j.mainsnak.property)&lt;br /&gt;
	end&lt;br /&gt;
	if args.removedupes and (args.removedupes ~= '-') then&lt;br /&gt;
		claims = tools.addnewvalues({}, claims) -- devrait aussi supprimer de props celles qui ne sont pas utilisées&lt;br /&gt;
	end&lt;br /&gt;
	return claims, props&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.getQualifiers(statement, qualifs, params)&lt;br /&gt;
	if not statement.qualifiers then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local vals = {}&lt;br /&gt;
	if type(qualifs) == 'string' then&lt;br /&gt;
		qualifs = tools.splitStr(qualifs)&lt;br /&gt;
	end&lt;br /&gt;
	for i, j in pairs(qualifs) do&lt;br /&gt;
		if statement.qualifiers[j] then&lt;br /&gt;
			for k, l in pairs(statement.qualifiers[j]) do&lt;br /&gt;
				table.insert(vals, l)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #vals == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return vals&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.getFormattedQualifiers(statement, qualifs, params)&lt;br /&gt;
	if not params then params = {} end&lt;br /&gt;
	local qualiftable = wd.getQualifiers(statement, qualifs)&lt;br /&gt;
	if not qualiftable then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	for i, j in pairs(qualiftable) do&lt;br /&gt;
		qualiftable[i] = wd.formatSnak(j, params)&lt;br /&gt;
	end&lt;br /&gt;
	return modules.linguistic.conj(qualiftable, params.conjtype)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.showQualifiers(str, statement, args) -- utilisée par formatStatement et par wikidatadate&lt;br /&gt;
	local qualifs =  args.showqualifiers&lt;br /&gt;
	if not qualifs then&lt;br /&gt;
		return str -- or error ?&lt;br /&gt;
	end&lt;br /&gt;
	if type(qualifs) == 'string' then&lt;br /&gt;
			qualifs = tools.splitStr(qualifs)&lt;br /&gt;
	end&lt;br /&gt;
	local qualifargs = args.qualifargs or {}&lt;br /&gt;
	-- formatage des qualificatifs = args commençant par &amp;quot;qualif&amp;quot;, ou à défaut, les mêmes que pour la valeur principale&lt;br /&gt;
	qualifargs.displayformat = args.qualifdisplayformat or args.displayformat&lt;br /&gt;
	qualifargs.labelformat = args.qualiflabelformat or args.labelformat&lt;br /&gt;
	qualifargs.link = args.qualiflink or args.link&lt;br /&gt;
	qualifargs.conjtype = args.qualifconjtype&lt;br /&gt;
			&lt;br /&gt;
	local formattedqualifs = wd.getFormattedQualifiers(statement, qualifs, qualifargs)&lt;br /&gt;
	if formattedqualifs and str then&lt;br /&gt;
		str = str .. modules.linguistic.inparentheses(formattedqualifs, defaultlang)&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function wd.sourceStr(sources)&lt;br /&gt;
	if not sources or (#sources == 0) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	for i, j in pairs(sources) do&lt;br /&gt;
		sources[i] = mw.getCurrentFrame():extensionTag( &amp;quot;ref&amp;quot;, j)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(sources, '&amp;lt;sup class=&amp;quot;reference cite_virgule&amp;quot;&amp;gt;,&amp;lt;/sup&amp;gt;')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.formatStatement( statement, args )&lt;br /&gt;
	if not args then&lt;br /&gt;
		args = {}&lt;br /&gt;
	end&lt;br /&gt;
	if not statement.type or statement.type ~= 'statement' then&lt;br /&gt;
		return tools.formatError( 'unknown-claim-type' )&lt;br /&gt;
	end&lt;br /&gt;
	local prop = statement.mainsnak.property&lt;br /&gt;
&lt;br /&gt;
	local str&lt;br /&gt;
&lt;br /&gt;
	-- partie principale&lt;br /&gt;
	if args.showonlyqualifier and (args.showonlyqualifier ~= '') then&lt;br /&gt;
		str = wd.getFormattedQualifiers(statement, args.showonlyqualifier, args)&lt;br /&gt;
		if not str then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	elseif args.statementformat and (type(args.statementformat) == 'function') then&lt;br /&gt;
		str = args.statementformat(statement, args)&lt;br /&gt;
	else &lt;br /&gt;
		str = wd.formatSnak( statement.mainsnak, args )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- ajouts divers	&lt;br /&gt;
	if args.showlang == true then&lt;br /&gt;
		str = (showlang(statement) or '') .. '&amp;amp;#32;' .. str&lt;br /&gt;
	end&lt;br /&gt;
	if args.showqualifiers then&lt;br /&gt;
		str = wd.showQualifiers(str, statement, args)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.showdate then -- when &amp;quot;showdate and chronosort are both set, date retrieval is performed twice&lt;br /&gt;
	local period = wd.getFormattedDate(statement, args, &amp;quot;-&amp;quot;) -- 3 arguments indicate the we should not use additional qualifiers, alrady added by wd.formatStatement&lt;br /&gt;
	if period then&lt;br /&gt;
		str = str .. &amp;quot; &amp;lt;small&amp;gt;(&amp;quot; .. period ..&amp;quot;)&amp;lt;/small&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.showsource then&lt;br /&gt;
		local sources = wd.getReferences(statement)&lt;br /&gt;
		if sources then&lt;br /&gt;
			local source = wd.sourceStr(sources)&lt;br /&gt;
			str = str .. (source or &amp;quot;&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if statement.qualifiers then&lt;br /&gt;
		str = wd.addStandardQualifs(str, statement)&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.formatSnak( snak, params )&lt;br /&gt;
	if not params then params = {} end -- pour faciliter l'appel depuis d'autres modules&lt;br /&gt;
	if snak.snaktype == 'somevalue' then&lt;br /&gt;
		return unknownvalue(snak, params.unknownlabel)&lt;br /&gt;
	elseif snak.snaktype == 'novalue' then&lt;br /&gt;
		return novalue(params.novaluelabel)&lt;br /&gt;
	elseif snak.snaktype == 'value' then&lt;br /&gt;
		return wd.getDatavalue( snak, params)&lt;br /&gt;
	else&lt;br /&gt;
		return tools.formatError( 'unknown-snak-type' )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.getDescription(entity, lang)&lt;br /&gt;
	lang = lang or defaultlang&lt;br /&gt;
&lt;br /&gt;
	local description&lt;br /&gt;
	if lang == defaultlang then&lt;br /&gt;
		return  mw.wikibase.descriptionl(qid)&lt;br /&gt;
	end&lt;br /&gt;
	if not entity.descriptions then&lt;br /&gt;
		return translate('no description')&lt;br /&gt;
	end&lt;br /&gt;
	local descriptions = entity.descriptions&lt;br /&gt;
	if not descriptions then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if descriptions[lang] then&lt;br /&gt;
		return descriptions[delang].value&lt;br /&gt;
	end&lt;br /&gt;
	return entity.id&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.addLinkback(str, id, property)&lt;br /&gt;
	if not id then&lt;br /&gt;
		id = tools.getEntity()&lt;br /&gt;
	end&lt;br /&gt;
	if not id then&lt;br /&gt;
		return str&lt;br /&gt;
	end&lt;br /&gt;
	if type(property) == 'table' then&lt;br /&gt;
		property = property[1]&lt;br /&gt;
	end&lt;br /&gt;
	if type(id) == 'table' then&lt;br /&gt;
		id = id.id&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local class = ''&lt;br /&gt;
	if property then&lt;br /&gt;
		class = 'wd_' .. string.lower(property)&lt;br /&gt;
	end&lt;br /&gt;
	local icon = '[[File:Blue pencil.svg|%s|10px|baseline|class=noviewer|link=%s]]'&lt;br /&gt;
	local title = translate('see-wikidata-value')&lt;br /&gt;
	local url = mw.uri.fullUrl('d:' .. id, 'uselang=fr')&lt;br /&gt;
	url.fragment = property -- ajoute une #ancre si paramètre &amp;quot;property&amp;quot; défini&lt;br /&gt;
	url = tostring(url)&lt;br /&gt;
	local v = mw.html.create('span')&lt;br /&gt;
		:addClass(class)&lt;br /&gt;
		:wikitext(str)&lt;br /&gt;
		:tag('span')&lt;br /&gt;
			:addClass('noprint wikidata-linkback')&lt;br /&gt;
			:css('padding-left', '0.5em')&lt;br /&gt;
			:wikitext(icon:format(title, url))&lt;br /&gt;
		:allDone()&lt;br /&gt;
	return tostring(v)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.addRefAnchor(str, id)&lt;br /&gt;
--[[&lt;br /&gt;
	Insère une ancre pour une référence générée à partir d'un élément wd.&lt;br /&gt;
	L'id Wikidata sert d'identifiant à l'ancre, à utiliser dans les modèles type &amp;quot;harvsp&amp;quot;&lt;br /&gt;
--]]&lt;br /&gt;
	return tostring(&lt;br /&gt;
		mw.html.create('span')&lt;br /&gt;
			:attr('id', id)&lt;br /&gt;
			:attr('class', &amp;quot;ouvrage&amp;quot;)&lt;br /&gt;
			:wikitext(str)&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.formatStatements( args )--Format statement and concat them cleanly&lt;br /&gt;
	if args.value == '-' then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local valueexpl = translate(&amp;quot;activate-query&amp;quot;)&lt;br /&gt;
	--If a value is already set, use it&lt;br /&gt;
	if args.value and (args.value ~= '') and (args.value ~= valueexpl) then&lt;br /&gt;
		return args.value&lt;br /&gt;
	end&lt;br /&gt;
	-- if args.expl: return something only one if explicitly required in Wikitext&lt;br /&gt;
	if args.expl and (args.value ~= valueexpl) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	args.entity = tools.getEntity(args.entity)&lt;br /&gt;
&lt;br /&gt;
	if args.grouped and args.grouped ~= '' then&lt;br /&gt;
		args.grouped = false&lt;br /&gt;
		return wd.groupedStatements(args)&lt;br /&gt;
	end&lt;br /&gt;
	local valuetable = args.valuetable -- dans le cas où les valeurs sont déjà formtées&lt;br /&gt;
	local props -- les prorpriétés réellement utilisées (dans certainse cas, ce ne sont pas toutes celles de ags.property&lt;br /&gt;
	if not valuetable then -- cas le plus courant&lt;br /&gt;
		valuetable, props = wd.stringTable(args)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local str = wd.tableToText(valuetable, args)&lt;br /&gt;
	if not str then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if not props then&lt;br /&gt;
		props = tools.splitStr(args.property)[1]&lt;br /&gt;
	end&lt;br /&gt;
	if args.ucfirst ~= '-' then&lt;br /&gt;
		str = modules.linguistic.ucfirst(str)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.addcat and (args.addcat ~= '-') then&lt;br /&gt;
		str = str .. wd.addtrackingcat(props)&lt;br /&gt;
	end&lt;br /&gt;
	if args.linkback and (args.linkback ~= '-') then&lt;br /&gt;
		str = wd.addLinkback(str, args.entity, props)&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.showQualifier( args )&lt;br /&gt;
	local qualifs = args.qualifiers or args.qualifier&lt;br /&gt;
	&lt;br /&gt;
	if not qualifs then&lt;br /&gt;
		return tools.formatError( 'property-param-not-provided' )&lt;br /&gt;
	end&lt;br /&gt;
	if type(qualifs) == 'string' then&lt;br /&gt;
		qualifs = tools.splitStr(qualifs)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local claims = wd.getClaims(args)&lt;br /&gt;
	if not claims then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local str = ''&lt;br /&gt;
	for i, j in pairs(claims) do&lt;br /&gt;
		local new = wd.getFormattedQualifiers(j, qualifs, args) or ''&lt;br /&gt;
		str = str .. new&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.formatAndCat(args)&lt;br /&gt;
	if not args then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	args.linkback = true&lt;br /&gt;
	args.addcat = true&lt;br /&gt;
	if args.value then -- do not ignore linkback and addcat, as formatStatements do&lt;br /&gt;
		local val = args.value .. wd.addtrackingcat(args.property)&lt;br /&gt;
		val = wd.addLinkback(val, args.entity, args.property)&lt;br /&gt;
		return val&lt;br /&gt;
	end &lt;br /&gt;
	return wd.formatStatements( args )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.getTheDate(args)&lt;br /&gt;
	local claims = wd.getClaims(args)&lt;br /&gt;
	if not claims then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local formattedvalues = {}&lt;br /&gt;
	for i, j in pairs(claims) do&lt;br /&gt;
		local v = wd.getFormattedDate(j, args)&lt;br /&gt;
		if v then&lt;br /&gt;
			table.insert(formattedvalues, v )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local val = modules.linguistic.conj(formattedvalues)&lt;br /&gt;
	if not val then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if args.addcat == true then&lt;br /&gt;
		val = val .. wd.addtrackingcat(args.property)&lt;br /&gt;
	end&lt;br /&gt;
	val = wd.addLinkback(val, args.entity, args.property)&lt;br /&gt;
	return val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Complex functions using several items&lt;br /&gt;
local function getids(query)&lt;br /&gt;
	query.excludespecial = true&lt;br /&gt;
	query.displayformat = 'raw'&lt;br /&gt;
	return wd.stringTable(query)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function wd.Dump(entity)&lt;br /&gt;
	entity = tools.getEntity(entity)&lt;br /&gt;
	if not entity then&lt;br /&gt;
		return tools.formatError(&amp;quot;entity-param-not-provided&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;quot;&amp;lt;pre&amp;gt;&amp;quot;..mw.dumpObject(entity)..&amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.groupedStatements(args, type)&lt;br /&gt;
	-- regroupe les affirmations ayant la même valeur en mainsnak, mais des qualificatifs différents&lt;br /&gt;
	-- (seulement pour les propriétés de type élément)&lt;br /&gt;
&lt;br /&gt;
	local claims = wd.getClaims(args)&lt;br /&gt;
	if not claims then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local groupedClaims = {}&lt;br /&gt;
&lt;br /&gt;
	-- regroupe les affirmations par valeur de mainsnak&lt;br /&gt;
	local function addClaim(claim)&lt;br /&gt;
		local id = tools.getMainId(claim)&lt;br /&gt;
		for i, j in pairs(groupedClaims) do &lt;br /&gt;
			if (j.id == id) then&lt;br /&gt;
				table.insert(groupedClaims[i].claims, claim)&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(groupedClaims, {id = id, claims = {claim}})&lt;br /&gt;
	end&lt;br /&gt;
	for i, claim in pairs(claims) do	&lt;br /&gt;
		addClaim(claim)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local stringTable = {}&lt;br /&gt;
&lt;br /&gt;
	-- instructions ad hoc pour les paramètres concernant la mise en forme d'une déclaration individuelle&lt;br /&gt;
	local funs = {&lt;br /&gt;
		{param = &amp;quot;showqualifiers&amp;quot;, fun = function(str, claims)&lt;br /&gt;
			local qualifs = {}&lt;br /&gt;
			for i, claim in pairs(claims) do&lt;br /&gt;
				local news = wd.getFormattedQualifiers(claim, args.showqualifiers, args)&lt;br /&gt;
				if news then&lt;br /&gt;
					table.insert(qualifs, news)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			local qualifstr = modules.linguistic.conj(qualifs, &amp;quot; ; &amp;quot;) -- point virgule pour séparer les années&lt;br /&gt;
			if not qualifstr then&lt;br /&gt;
				return str&lt;br /&gt;
			end&lt;br /&gt;
			return str .. &amp;quot; &amp;quot; .. modules.linguistic.inparentheses(qualifstr)&lt;br /&gt;
			end&lt;br /&gt;
		},&lt;br /&gt;
		{param = &amp;quot;showdate&amp;quot;, fun = function(str, claims)&lt;br /&gt;
			-- toutes les dates sont regroupées à l'intérieur des mêmes parenthèses ex &amp;quot;médaille d'or (1922, 1924)&amp;quot;&lt;br /&gt;
			local dates = {}&lt;br /&gt;
			for i, statement in pairs(claims) do&lt;br /&gt;
				local s = wd.getFormattedDate(statement, args, true) -- l'option useallqualifiers ne doit pas être désactivée dans ce cas&lt;br /&gt;
				if statement then table.insert(dates, s) end&lt;br /&gt;
			end&lt;br /&gt;
			local datestr = modules.linguistic.conj(dates)&lt;br /&gt;
			if not datestr then&lt;br /&gt;
				return str&lt;br /&gt;
			end&lt;br /&gt;
			return str .. &amp;quot;&amp;lt;small&amp;gt;&amp;quot; .. modules.linguistic.inparentheses(datestr) .. &amp;quot;&amp;lt;/small&amp;gt;&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		},&lt;br /&gt;
		{param = &amp;quot;showsource&amp;quot;, fun = function(str, claims)&lt;br /&gt;
			-- les sources sont toutes affichées au même endroit, à la fin&lt;br /&gt;
			-- si deux affirmations ont la même source, on ne l'affiche qu'une fois&lt;br /&gt;
			local sources = {}&lt;br /&gt;
		&lt;br /&gt;
			local function dupeRef(old, new)&lt;br /&gt;
				for i, j in pairs(old) do&lt;br /&gt;
					if j == new then&lt;br /&gt;
						return true&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			for i, claim in pairs(claims) do&lt;br /&gt;
				local refs = wd.getReferences(claim)&lt;br /&gt;
				if refs then&lt;br /&gt;
					for i, j in pairs(refs) do&lt;br /&gt;
						if not dupeRef(sources, j) then&lt;br /&gt;
							table.insert(sources, j)&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			return str .. (wd.sourceStr(sources) or &amp;quot;&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	for i, group in pairs(groupedClaims) do -- bricolage pour utiliser les arguments de formatStatements&lt;br /&gt;
		local str = wd.formatEntity(group.id, args)&lt;br /&gt;
		for i, fun in pairs(funs) do&lt;br /&gt;
			if args[fun.param] then&lt;br /&gt;
				str = fun.fun(str, group.claims, args)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(stringTable, str)&lt;br /&gt;
	end&lt;br /&gt;
				&lt;br /&gt;
	args.valuetable = stringTable&lt;br /&gt;
	return wd.formatStatements(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return wd&lt;/div&gt;</summary>
		<author><name>Jacques Ducloy</name></author>
		
	</entry>
</feed>