<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://baripedia.org/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://baripedia.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AWikidata"/>
	<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Wikidata&amp;action=history"/>
	<updated>2026-07-15T00:44:27Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.38.6</generator>
	<entry>
		<id>https://baripedia.org/index.php?title=Module:Wikidata&amp;diff=30886&amp;oldid=prev</id>
		<title>Arthur : 1 révision importée</title>
		<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Wikidata&amp;diff=30886&amp;oldid=prev"/>
		<updated>2016-01-27T20:14:11Z</updated>

		<summary type="html">&lt;p&gt;1 révision importée&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;
wd = wd or {}&lt;br /&gt;
reference = reference or require &amp;quot;Module:Wikidata/Références&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local linguistic = require &amp;quot;Module:Linguistique&amp;quot;&lt;br /&gt;
local formatDate = require &amp;quot;Module:Date complexe&amp;quot;&lt;br /&gt;
local formatNum = require 'Module:Conversion'&lt;br /&gt;
local units = require 'Module:Dictionnaire Wikidata/Unités'&lt;br /&gt;
local langmodule = require'Module:Langue'&lt;br /&gt;
local cite = require &amp;quot;Module:Biblio&amp;quot;&lt;br /&gt;
local langcodes = mw.loadData &amp;quot;Module:Dictionnaire Wikidata/Codes langue&amp;quot;&lt;br /&gt;
local getData = require 'Module:Wikidata/Récup'&lt;br /&gt;
local entities = require 'Module:Wikidata/Formatage entité'&lt;br /&gt;
local tools = require 'Module:Wikidata/Outils'&lt;br /&gt;
local defaultlang = mw.getContentLanguage():getCode()&lt;br /&gt;
&lt;br /&gt;
local translate = tools.translate&lt;br /&gt;
&lt;br /&gt;
function wd.addtrackingcat(prop, cat) -- doit parfois être appelé par d'autres modules&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(displayformat) -- à améliorer&lt;br /&gt;
	if not displayformat then&lt;br /&gt;
		return translate('somevalue')&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 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 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 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;
local function 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;
    return linguistic.quickconj( values, params.conjtype)--linguistic.conj( values, params.lang, params.conjtype )&lt;br /&gt;
end&lt;br /&gt;
&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 = 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 formatDate.simplestring(obj, params)&lt;br /&gt;
	elseif obj.type == 'rangeobject' then&lt;br /&gt;
		return formatDate.daterange(obj.begin, obj.ending, params)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function wd.getDate(statement)&lt;br /&gt;
--[[&lt;br /&gt;
returns an object containing a timestamp for easy sorting, and other data&lt;br /&gt;
	2 types of object&lt;br /&gt;
		dateobject&lt;br /&gt;
			{timestamp = string, year = number, month = number, day = number, calendar = string}&lt;br /&gt;
		rangeobject&lt;br /&gt;
			{timestamp = string, begin = dateobject, ending = dateobject}&lt;br /&gt;
]]--&lt;br /&gt;
	local q = statement.qualifiers&lt;br /&gt;
	if not q or not (q.P585 or q.P580 or q.P582) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local begin, ending&lt;br /&gt;
	-- si p585 : dateobject&lt;br /&gt;
	if q.P585 and q.P585[1].snaktype == 'value' then -- P585: punctual date&lt;br /&gt;
		return wd.dateobject(q.P585[1].datavalue.value)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- si p580 ou P582 : rangeobject avec une date de début et/ou une date de fin&lt;br /&gt;
	if q.P582 and q.P582[1].snaktype == 'value' then&lt;br /&gt;
		ending = wd.dateobject(q.P582[1].datavalue.value)&lt;br /&gt;
	end&lt;br /&gt;
	if (q.P580 and q.P580[1].snaktype == 'value') then&lt;br /&gt;
		begin = wd.dateobject(q.P580[1].datavalue.value)&lt;br /&gt;
	end&lt;br /&gt;
	if begin or ending then -- sinon ce sont des 'specialvalues', il faudrait aussi les prendre en charge&lt;br /&gt;
		return wd.rangeobject(begin, ending)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.getFormattedDate(statement, params)&lt;br /&gt;
	local datetable = wd.getDate(statement)&lt;br /&gt;
	if not datetable then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return wd.objecttotext(datetable, params)&lt;br /&gt;
end&lt;br /&gt;
&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.datavalue.type&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-entityid') then&lt;br /&gt;
		return entities.formatEntity(tools.getId(snak), params)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if datatype == ('string') then&lt;br /&gt;
		if params.displayformat == 'weblink' then&lt;br /&gt;
			return require('Module:Weblink').makelink(value, params.text)&lt;br /&gt;
		end&lt;br /&gt;
		if type(params.displayformat) == 'function' then&lt;br /&gt;
			value = params.displayformat(value)&lt;br /&gt;
		end&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;
			value = '[' .. mw.ustring.gsub(urlpattern, '$1', value) .. ' ' .. (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 == 'globecoordinate' 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;
		value.globe = require('Module:Wikidata/Globes')[value.globe] -- transforme l'ID du globe en nom anglais utilisable par geohack&lt;br /&gt;
		if formatting == 'latitude' then&lt;br /&gt;
			return value.latitude&lt;br /&gt;
		elseif formatting == 'longitude' then&lt;br /&gt;
			return value.longitude&lt;br /&gt;
		else&lt;br /&gt;
			return value -- 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;
 		if displayformat == 'raw' then&lt;br /&gt;
			return amount&lt;br /&gt;
		end&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 targetunit = params.targetunit&lt;br /&gt;
		if unit and showunit then --récupération des données sur l'unité&lt;br /&gt;
			local unititem = unit:match('Q%d+')&lt;br /&gt;
			unit = units[unititem]&lt;br /&gt;
			if (not unit) then -- si pas de données sur l'unité, on essaye dans l'élément&lt;br /&gt;
				unit = {&lt;br /&gt;
					[3] = wd.formatStatements{entity = unititem, property = 'P558'}, -- symbole de l'unité&lt;br /&gt;
					[6] = wd.getLabel(unititem),&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		return formatNum.displayvalue(amount, unit,&lt;br /&gt;
			{targetunit = params.targetunit, displayformat = params.displayformat, rounding = params.rounding, showunit = showunit}&lt;br /&gt;
			)&lt;br /&gt;
	end&lt;br /&gt;
	if datatype == 'monolingualtext' then&lt;br /&gt;
		return langmodule.langue({value.language, value.text})&lt;br /&gt;
	end&lt;br /&gt;
	&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 getData.getClaims(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.formatClaimList(claims, args)&lt;br /&gt;
    if not claims then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
	for i, j in pairs(claims) do&lt;br /&gt;
        claims[i] = wd.formatStatement(j, args)&lt;br /&gt;
    end&lt;br /&gt;
    if args.removedupes and (args.removedupes ~= '-') then&lt;br /&gt;
		claims = tools.addnewvalues({}, claims)&lt;br /&gt;
	end&lt;br /&gt;
    return claims&lt;br /&gt;
end&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;
	local claims = wd.getClaims(args)&lt;br /&gt;
	return wd.formatClaimList(claims, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function 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;
	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 = 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 linguistic.conj(qualiftable)&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 str = wd.formatSnak( statement.mainsnak, args )&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;
    	local qualifs =  args.showqualifiers&lt;br /&gt;
    	if type(qualifs) == 'string' then&lt;br /&gt;
    		qualifs = mw.text.split(qualifs, ',')&lt;br /&gt;
    	end&lt;br /&gt;
    	local qualifargs = {}&lt;br /&gt;
 		-- formatage des qualificateur = 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;
    	&lt;br /&gt;
    	local formattedqualifs = wd.getFormattedQualifiers(statement, qualifs, qualifargs)&lt;br /&gt;
    	if formattedqualifs then&lt;br /&gt;
    		str = str .. linguistic.inparentheses(formattedqualifs, lang)&lt;br /&gt;
		end&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 timedata = wd.getDate(statement)&lt;br /&gt;
    	if timedata then&lt;br /&gt;
    		local formatteddate = wd.objecttotext(timedata, args)&lt;br /&gt;
    		formatteddate = linguistic.inparentheses(formatteddate, lang)&lt;br /&gt;
    		str = str .. '&amp;lt;small&amp;gt;' .. formatteddate ..'&amp;lt;/small&amp;gt;'&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	if args.showsource and statement.references then&lt;br /&gt;
		local sourcestring = ''&lt;br /&gt;
		for i, ref in pairs(statement.references) do&lt;br /&gt;
			local s = ''&lt;br /&gt;
			&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;
			local function firstsnak(prop)&lt;br /&gt;
				return wd.formatSnak(prop[1])&lt;br /&gt;
			end&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 = reference.citeitem(tools.getId(source), {['page'] = page, ['accessdate'] = accessdate})&lt;br /&gt;
						s = mw.getCurrentFrame():extensionTag( 'ref', s )&lt;br /&gt;
						sourcestring = sourcestring .. s&lt;br /&gt;
					end&lt;br /&gt;
				end&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]), 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 = cite.lienWeb{titre = title, url = url, langue = publishlang, ['en ligne le'] = publishdate, ['consulté le'] = accessdate}&lt;br /&gt;
				s = mw.getCurrentFrame():extensionTag( 'ref', s)&lt;br /&gt;
				sourcestring = sourcestring .. s&lt;br /&gt;
			elseif ref.snaks.P854 and ref.snaks.P854[1].snaktype == 'value' then&lt;br /&gt;
				s = mw.getCurrentFrame():extensionTag( 'ref', wd.formatSnak(ref.snaks.P854[1]))&lt;br /&gt;
				sourcestring = sourcestring .. s&lt;br /&gt;
			end&lt;br /&gt;
			end&lt;br /&gt;
			str = str .. sourcestring&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(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 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 title = translate('see-wikidata-value')&lt;br /&gt;
	local icon = '[%s [[File:Blue pencil.svg|%s|10px|baseline|link=]] ]'&lt;br /&gt;
	local url = mw.uri.fullUrl('d:' .. id, 'uselang=fr')&lt;br /&gt;
	url.fragment = property&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 plainlinks wikidata-linkback')&lt;br /&gt;
			:css('padding-left', '.5em')&lt;br /&gt;
			:wikitext(icon:format(url, title))&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 Wikidata.&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(mw.html.create('span'):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;
	--If a value is already set, use it&lt;br /&gt;
	if args.value and args.value ~= '' then&lt;br /&gt;
		return args.value&lt;br /&gt;
	end&lt;br /&gt;
	args.entity = tools.getEntity(args.entity)&lt;br /&gt;
	local valuetable = wd.stringTable(args)&lt;br /&gt;
	&lt;br /&gt;
	local str = tableToText(valuetable, args)&lt;br /&gt;
	&lt;br /&gt;
	if not str then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if args.addcat and (args.addcat ~= '-') then&lt;br /&gt;
		str = str .. wd.addtrackingcat(args.property)&lt;br /&gt;
	end&lt;br /&gt;
	if args.linkback and (args.linkback ~= '-') then&lt;br /&gt;
		str = wd.addLinkback(str, args.entity, args.property)&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;
	if type(qualifs) == 'string' then&lt;br /&gt;
		qualifs = mw.text.split(qualifs, ',')&lt;br /&gt;
	end&lt;br /&gt;
	if not qualifs then&lt;br /&gt;
		return tools.formatError( 'property-param-not-provided' )&lt;br /&gt;
	end&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;
		table.insert(formattedvalues, wd.getFormattedDate(j))&lt;br /&gt;
	end&lt;br /&gt;
	local val = 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;
wd.getid = tools.getId&lt;br /&gt;
wd.getmainid = tools.getMainId&lt;br /&gt;
&lt;br /&gt;
-- fonctions obsolètes&lt;br /&gt;
function wd.getLabel(entity, args)&lt;br /&gt;
	entities.getLabel(entity)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd.formatEntity(entity, args)&lt;br /&gt;
	return entities.formatEntity(entity, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd._getLabel(entity, args)&lt;br /&gt;
	return wd.getLabel(entity, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function wd._formatAndCat(args)&lt;br /&gt;
	return wd.formatAndCat(args)&lt;br /&gt;
end&lt;br /&gt;
function wd._formatStatements(args)&lt;br /&gt;
	return wd.formatStatements(args)&lt;br /&gt;
end&lt;br /&gt;
return wd&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://baripedia.org/index.php?title=Module:Wikidata&amp;diff=28303&amp;oldid=prev</id>
		<title>Arthur : 1 révision importée</title>
		<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Wikidata&amp;diff=28303&amp;oldid=prev"/>
		<updated>2015-11-09T20:49:23Z</updated>

		<summary type="html">&lt;p&gt;1 révision importée&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 p = {}&lt;br /&gt;
local linguistic = require &amp;quot;Module:Linguistique&amp;quot;&lt;br /&gt;
local formatDate = require &amp;quot;Module:Date complexe&amp;quot;&lt;br /&gt;
local formatNum = require 'Module:Conversion'&lt;br /&gt;
local units = require 'Module:Dictionnaire Wikidata/Unités'&lt;br /&gt;
local langmodule = require'Module:Langue'&lt;br /&gt;
local cite = require &amp;quot;Module:Biblio&amp;quot;&lt;br /&gt;
local langcodes = mw.loadData &amp;quot;Module:Dictionnaire Wikidata/Codes langue&amp;quot;&lt;br /&gt;
local getData = require 'Module:Wikidata/Récup'&lt;br /&gt;
local entities = require 'Module:Wikidata/Formatage entité'&lt;br /&gt;
local tools = require 'Module:Wikidata/Outils'&lt;br /&gt;
local defaultlang = mw.getContentLanguage():getCode()&lt;br /&gt;
&lt;br /&gt;
local translate = tools.translate&lt;br /&gt;
&lt;br /&gt;
function p.addtrackingcat(prop, cat) -- doit parfois être appelé par d'autres modules&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(displayformat) -- à améliorer&lt;br /&gt;
	if not displayformat then&lt;br /&gt;
		return translate('somevalue')&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 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 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 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 = p.formatStatement(j, params)&lt;br /&gt;
    end&lt;br /&gt;
    return statements&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function 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;
    return linguistic.quickconj( values, params.conjtype)--linguistic.conj( values, params.lang, params.conjtype )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.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 p.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 = 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 p.objecttotext(obj, params)&lt;br /&gt;
	if obj.type == 'dateobject' then&lt;br /&gt;
		return formatDate.simplestring(obj, params)&lt;br /&gt;
	elseif obj.type == 'rangeobject' then&lt;br /&gt;
		return formatDate.daterange(obj.begin, obj.ending, params)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.getDate(statement)&lt;br /&gt;
--[[&lt;br /&gt;
returns an object containing a timestamp for easy sorting, and other data&lt;br /&gt;
	2 types of object&lt;br /&gt;
		dateobject&lt;br /&gt;
			{timestamp = string, year = number, month = number, day = number, calendar = string}&lt;br /&gt;
		rangeobject&lt;br /&gt;
			{timestamp = string, begin = dateobject, ending = dateobject}&lt;br /&gt;
]]--&lt;br /&gt;
	local q = statement.qualifiers&lt;br /&gt;
	if not q or not (q.P585 or q.P580 or q.P582) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local begin, ending&lt;br /&gt;
	-- si p585 : dateobject&lt;br /&gt;
	if q.P585 and q.P585[1].snaktype == 'value' then -- P585: punctual date&lt;br /&gt;
		return p.dateobject(q.P585[1].datavalue.value)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- si p580 ou P582 : rangeobject avec une date de début et/ou une date de fin&lt;br /&gt;
	if q.P582 and q.P582[1].snaktype == 'value' then&lt;br /&gt;
		ending = p.dateobject(q.P582[1].datavalue.value)&lt;br /&gt;
	end&lt;br /&gt;
	if (q.P580 and q.P580[1].snaktype == 'value') then&lt;br /&gt;
		begin = p.dateobject(q.P580[1].datavalue.value)&lt;br /&gt;
	end&lt;br /&gt;
	if begin or ending then -- sinon ce sont des 'specialvalues', il faudrait aussi les prendre en charge&lt;br /&gt;
		return p.rangeobject(begin, ending)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getFormattedDate(statement, params)&lt;br /&gt;
	local datetable = p.getDate(statement)&lt;br /&gt;
	if not datetable then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return p.objecttotext(datetable, params)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.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.datavalue.type&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-entityid') then&lt;br /&gt;
		return entities.formatEntity(tools.getId(snak), params)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if datatype == ('string') then&lt;br /&gt;
		if params.displayformat == 'weblink' then&lt;br /&gt;
			return require('Module:Weblink').makelink(value, params.text)&lt;br /&gt;
		end&lt;br /&gt;
		if type(params.displayformat) == 'function' then&lt;br /&gt;
			value = params.displayformat(value)&lt;br /&gt;
		end&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;
			value = '[' .. mw.ustring.gsub(urlpattern, '$1', value) .. ' ' .. (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 p.objecttotext(p.dateobject(value, {precision = precision}), {linktopic = params.linktopic})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if datatype == 'globecoordinate' 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;
		value.globe = require('Module:Wikidata/Globes')[value.globe] -- transforme l'ID du globe en nom anglais utilisable par geohack&lt;br /&gt;
		if formatting == 'latitude' then&lt;br /&gt;
			return value.latitude&lt;br /&gt;
		elseif formatting == 'longitude' then&lt;br /&gt;
			return value.longitude&lt;br /&gt;
		else&lt;br /&gt;
			return value -- 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;
 		if displayformat == 'raw' then&lt;br /&gt;
			return amount&lt;br /&gt;
		end&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 targetunit = params.targetunit&lt;br /&gt;
		if unit and showunit then --récupération des données sur l'unité&lt;br /&gt;
			local unititem = unit:match('Q%d+')&lt;br /&gt;
			unit = units[unititem]&lt;br /&gt;
			if (not unit) then -- si pas de données sur l'unité, on essaye dans l'élément&lt;br /&gt;
				unit = {&lt;br /&gt;
					[3] = p.formatStatements{entity = unititem, property = 'P558'}, -- symbole de l'unité&lt;br /&gt;
					[6] = p.getLabel(unititem),&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		return formatNum.displayvalue(amount, unit,&lt;br /&gt;
			{targetunit = params.targetunit, displayformat = params.displayformat, rounding = params.rounding, showunit = showunit}&lt;br /&gt;
			)&lt;br /&gt;
	end&lt;br /&gt;
	if datatype == 'monolingualtext' then&lt;br /&gt;
		return langmodule.langue({value.language, value.text})&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tools.formatError('unknown-datavalue-type' )&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getClaims( args ) -- returns a table of the claims matching some conditions given in args&lt;br /&gt;
	return getData.getClaims(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatClaimList(claims, args)&lt;br /&gt;
    if not claims then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
	for i, j in pairs(claims) do&lt;br /&gt;
        claims[i] = p.formatStatement(j, args)&lt;br /&gt;
    end&lt;br /&gt;
    if args.removedupes and (args.removedupes ~= '-') then&lt;br /&gt;
		claims = tools.addnewvalues({}, claims)&lt;br /&gt;
	end&lt;br /&gt;
    return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.citeitem(entity, page, accessdate)&lt;br /&gt;
	if not entity then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	entity = tools.getEntity(entity)&lt;br /&gt;
	if not entity then&lt;br /&gt;
		return &amp;quot;invalid entity id&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	local author = p.formatStatements{entity = entity, property = 'P50', defaultlink = '-'}&lt;br /&gt;
	if not author then -- il n'y a pas de paramètre simple dans Modèle:Ouvrage pour le directeur de la publication&lt;br /&gt;
		author = p.formatStatements{entity = entity, property = 'P98', defaultlink = '-'}&lt;br /&gt;
		if author then author = author .. ' (dir.)' end&lt;br /&gt;
	end&lt;br /&gt;
	local isbn = p.formatStatements{entity = entity, property = 'P212'}&lt;br /&gt;
	local doi  =  p.formatStatements{entity = entity, property = 'P356'}&lt;br /&gt;
	local ednumber = p.formatStatements{entity = entity, property = 'P393'}&lt;br /&gt;
	local publisher = p.formatStatements{entity = entity, property = 'P123', defaultlink = '-'}&lt;br /&gt;
	local journal = p.formatStatements{entity = journalid , property = 'P1433', defaultlink = '-'}&lt;br /&gt;
	local journalnumber = p.formatStatements{entity = entity, property = 'P433'}&lt;br /&gt;
	local volume = p.formatStatements{entity = entity, property = 'P478'}&lt;br /&gt;
	local publishdate = p.formatStatements{entity = entity, property = 'P577', linktopic = '-'}&lt;br /&gt;
	local title =  p.formatStatements{entity = entity, property = 'P1476', numval = 1, } or entities.getLabel(entity)&lt;br /&gt;
	local titlelink = entities.getLink(entity)&lt;br /&gt;
	if not titlelink then -- si pas de lien, on peut essayer de voir si c'est l'édition de quelque chose d'autre&lt;br /&gt;
		local edition = p.formatStatements{entity = entity, property = 'P747', displayformat = 'raw', numval = 1}&lt;br /&gt;
		if edition then&lt;br /&gt;
			titlelink = entities.getLink(edition)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if title and titlelink then&lt;br /&gt;
		title = '[[' .. titlelink .. '|' .. title .. ']]'&lt;br /&gt;
	end&lt;br /&gt;
	local url = p.formatStatements{entity = entity, property = 'P854', numval = 1}&lt;br /&gt;
	local worklang = p.formatStatements{entity = journalid , property = 'P407'}&lt;br /&gt;
	&lt;br /&gt;
	-- choose relevant cite type&lt;br /&gt;
	local entitytype = p.formatStatements{property = 'P31', entity = entity, numval = 1, displayformat = 'raw'}&lt;br /&gt;
	local funtype&lt;br /&gt;
&lt;br /&gt;
	if (entitytype == &amp;quot;Q3331189&amp;quot;) then --book edition&lt;br /&gt;
		funtype = cite.ouvrage&lt;br /&gt;
	elseif entitytype == &amp;quot;Q191067&amp;quot; then -- article&lt;br /&gt;
		funtype = cite.article&lt;br /&gt;
	else -- default: concatenate whatever there is&lt;br /&gt;
		funtype = function()&lt;br /&gt;
		if title then &lt;br /&gt;
			 title = '&amp;lt;i&amp;gt;' .. title .. '&amp;lt;/i&amp;gt;'&lt;br /&gt;
		end&lt;br /&gt;
		if page then&lt;br /&gt;
			page = 'p.' .. page&lt;br /&gt;
		end&lt;br /&gt;
		if accessdate then&lt;br /&gt;
			accessdate = 'consulté le ' .. accessdate&lt;br /&gt;
		end&lt;br /&gt;
		return linguistic.conj({author, title, publisher, publishdate, page, accessdate}, 'comma')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local val = funtype {&lt;br /&gt;
		['auteur'] = author,&lt;br /&gt;
		['titre'] = title,&lt;br /&gt;
		['volume'] = volume,&lt;br /&gt;
		['date'] = publishdate,&lt;br /&gt;
		['périodique'] = journal,&lt;br /&gt;
		[&amp;quot;numéro d'édition&amp;quot;] = ednumber,&lt;br /&gt;
		['éditeur'] = publisher,&lt;br /&gt;
		['lire en ligne'] = url,&lt;br /&gt;
		['isbn'] = isbn,&lt;br /&gt;
		['doi'] = doi,&lt;br /&gt;
		['page'] = page,&lt;br /&gt;
		['langue'] = worklang,&lt;br /&gt;
		['consulté le'] = accessdate,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if val then&lt;br /&gt;
		return p.addRefAnchor(p.addLinkback(val, entity), tools.EntityId(entity))&lt;br /&gt;
	end&lt;br /&gt;
	return tools.formatError()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.stringTable(args) -- like getClaims, but get a list of string rather than a list of snaks, for easier manipulation&lt;br /&gt;
	local claims = p.getClaims(args)&lt;br /&gt;
	return p.formatClaimList(claims, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function 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;
	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 p.getFormattedQualifiers(statement, qualifs, params)&lt;br /&gt;
	if not params then params = {} end&lt;br /&gt;
	local qualiftable = 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] = p.formatSnak(j, params)&lt;br /&gt;
	end&lt;br /&gt;
	return linguistic.conj(qualiftable)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.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 str = p.formatSnak( statement.mainsnak, args )&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;
    	local qualifs =  args.showqualifiers&lt;br /&gt;
    	if type(qualifs) == 'string' then&lt;br /&gt;
    		qualifs = mw.text.split(qualifs, ',')&lt;br /&gt;
    	end&lt;br /&gt;
    	local qualifargs = {}&lt;br /&gt;
 		-- formatage des qualificateur = 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;
    	&lt;br /&gt;
    	local formattedqualifs = p.getFormattedQualifiers(statement, qualifs, qualifargs)&lt;br /&gt;
    	if formattedqualifs then&lt;br /&gt;
    		str = str .. linguistic.inparentheses(formattedqualifs, lang)&lt;br /&gt;
		end&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 timedata = p.getDate(statement)&lt;br /&gt;
    	if timedata then&lt;br /&gt;
    		local formatteddate = p.objecttotext(timedata, args)&lt;br /&gt;
    		formatteddate = linguistic.inparentheses(formatteddate, lang)&lt;br /&gt;
    		str = str .. '&amp;lt;small&amp;gt;' .. formatteddate ..'&amp;lt;/small&amp;gt;'&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if args.showsource and statement.references then&lt;br /&gt;
    	local sourcestring = ''&lt;br /&gt;
        for i, ref in pairs(statement.references) do&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 ref.snaks.P304 and tools.isValue(ref.snaks.P304[1]) then&lt;br /&gt;
                    		page = p.formatSnak(ref.snaks.P304[1])&lt;br /&gt;
                    	end&lt;br /&gt;
                    	if ref.snaks.P813 and tools.isValue(ref.snaks.P813[1]) then&lt;br /&gt;
                    		accessdate = p.formatSnak(ref.snaks.P813[1])&lt;br /&gt;
                    	end&lt;br /&gt;
                        local s = p.citeitem(tools.getId(source), page, accessdate)&lt;br /&gt;
                        s = mw.getCurrentFrame():extensionTag( 'ref', s )&lt;br /&gt;
                        sourcestring = sourcestring .. s&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            elseif ref.snaks.P854 and ref.snaks.P854[1].snaktype == 'value' then&lt;br /&gt;
            	s = mw.getCurrentFrame():extensionTag( 'ref', p.formatSnak(ref.snaks.P854[1]))&lt;br /&gt;
            	sourcestring = sourcestring .. s&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        str = str .. sourcestring&lt;br /&gt;
    end&lt;br /&gt;
    return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatSnak( snak, params )&lt;br /&gt;
    if not args then args = {} end -- pour faciliter l'appel depuis d'autres modules&lt;br /&gt;
    if snak.snaktype == 'somevalue' then&lt;br /&gt;
        return unknownvalue(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 p.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 p.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 p.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 type(id) == 'table' then&lt;br /&gt;
		id = id.id&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local anchor = ''&lt;br /&gt;
	if property then&lt;br /&gt;
		anchor = '#' .. property&lt;br /&gt;
	end&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 title = translate('see-wikidata-value')&lt;br /&gt;
	local icon = '&amp;lt;small&amp;gt;&amp;lt;small&amp;gt;+&amp;lt;/small&amp;gt;&amp;lt;/small&amp;gt;'&lt;br /&gt;
	icon = '&amp;lt;span title = &amp;quot;' .. title .. '&amp;quot;&amp;gt;' .. icon .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
	local v = mw.html.create('span')&lt;br /&gt;
		:addClass(class)&lt;br /&gt;
		:wikitext(str ..  '&amp;amp;nbsp;')&lt;br /&gt;
			:tag('span')&lt;br /&gt;
			:wikitext('[[d:' .. id .. anchor .. '|' .. icon .. ']]')&lt;br /&gt;
		:allDone()&lt;br /&gt;
	return tostring(v)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.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 Wikidata.&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(mw.html.create('span'):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 p.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;
	--If a value is already set, use it&lt;br /&gt;
	if args.value and args.value ~= '' then&lt;br /&gt;
		return args.value&lt;br /&gt;
	end&lt;br /&gt;
	args.entity = tools.getEntity(args.entity)&lt;br /&gt;
	local valuetable = p.stringTable(args)&lt;br /&gt;
	&lt;br /&gt;
	local str = tableToText(valuetable, args)&lt;br /&gt;
	&lt;br /&gt;
	if not str then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if args.addcat and (args.addcat ~= '-') then&lt;br /&gt;
		str = str .. p.addtrackingcat(args.property)&lt;br /&gt;
	end&lt;br /&gt;
	if args.linkback and (args.linkback ~= '-') then&lt;br /&gt;
		str = p.addLinkback(str, args.entity, args.property)&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.showQualifier( args )&lt;br /&gt;
	local qualifs = args.qualifiers or args.qualifier&lt;br /&gt;
	if type(qualifs) == 'string' then&lt;br /&gt;
		qualifs = mw.text.split(qualifs, ',')&lt;br /&gt;
	end&lt;br /&gt;
	if not qualifs then&lt;br /&gt;
		return tools.formatError( 'property-param-not-provided' )&lt;br /&gt;
	end&lt;br /&gt;
	local claims = p.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 = p.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 p.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 .. p.addtrackingcat(args.property)&lt;br /&gt;
		val = p.addLinkback(val, args.entity, args.property)&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
	return p.formatStatements( args )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getTheDate(args)&lt;br /&gt;
	local claims = p.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;
		table.insert(formattedvalues, p.getFormattedDate(j))&lt;br /&gt;
	end&lt;br /&gt;
	local val = 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 .. p.addtrackingcat(args.property)&lt;br /&gt;
	end&lt;br /&gt;
	val = p.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 p.stringTable(query)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.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;
p.getid = tools.getId&lt;br /&gt;
p.getmainid = tools.getMainId&lt;br /&gt;
&lt;br /&gt;
-- fonctions obsolètes&lt;br /&gt;
function p.getLabel(entity, args)&lt;br /&gt;
	entities.getLabel(entity)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatEntity(entity, args)&lt;br /&gt;
	return entities.formatEntity(entity, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._getLabel(entity, args)&lt;br /&gt;
	return p.getLabel(entity, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._formatAndCat(args)&lt;br /&gt;
	return p.formatAndCat(args)&lt;br /&gt;
end&lt;br /&gt;
function p._formatStatements(args)&lt;br /&gt;
	return p.formatStatements(args)&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://baripedia.org/index.php?title=Module:Wikidata&amp;diff=16090&amp;oldid=prev</id>
		<title>Arthur : 1 version</title>
		<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Wikidata&amp;diff=16090&amp;oldid=prev"/>
		<updated>2014-10-03T21:58:56Z</updated>

		<summary type="html">&lt;p&gt;1 version&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;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local linguistic = require('Module:Linguistique')&lt;br /&gt;
local dates = require('Module:Wikidata/Dates')&lt;br /&gt;
local langmodule = require('Module:Langue')&lt;br /&gt;
lang = 'fr' -- peut-être écrasé par args.lang&lt;br /&gt;
&lt;br /&gt;
local i18n = {&lt;br /&gt;
    [&amp;quot;errors&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;property-param-not-provided&amp;quot;] = &amp;quot;property parameter missing&amp;quot;,&lt;br /&gt;
        [&amp;quot;qualifier-param-not-provided&amp;quot;] = &amp;quot;qualifier parameter missing&amp;quot;,&lt;br /&gt;
        [&amp;quot;entity-not-found&amp;quot;] = &amp;quot;entity not found&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-claim-type&amp;quot;] = &amp;quot;unknown claim type&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-snak-typeg&amp;quot;] = &amp;quot;unknown snak type&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-datavalue-type&amp;quot;] = &amp;quot;unknown datavalue type.&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-entity-type&amp;quot;] = &amp;quot;unknown entity type&amp;quot;,&lt;br /&gt;
        [&amp;quot;invalid-id&amp;quot;] = &amp;quot;invalid ID&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;no-label&amp;quot;] = &amp;quot;pas de libellé&amp;quot;,&lt;br /&gt;
    ['no description'] = &amp;quot;pas description&amp;quot;,&lt;br /&gt;
    [&amp;quot;novalue&amp;quot;] = &amp;quot;not applicable&amp;quot;,&lt;br /&gt;
    [&amp;quot;somevalue&amp;quot;] = &amp;quot;inconnu&amp;quot;,&lt;br /&gt;
    [&amp;quot;trackingcat&amp;quot;] = 'Page utilisant des données de Wikidata'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function formatError( key )&lt;br /&gt;
    return error(i18n.errors[key])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addtrackingcat(prop, cat)&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 = i18n.trackingcat .. '/' .. string.upper(prop)&lt;br /&gt;
	end&lt;br /&gt;
	return '[[Category:' .. cat .. ']]'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function formatTheUnknown() -- voir si on peut accorder/adapter l'usage de &amp;quot;inconnu&amp;quot;&lt;br /&gt;
	return i18n.somevalue&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function samevalue(snak, target)&lt;br /&gt;
	if snak.snaktype == 'value' and p.getRawvalue(snak) == target then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getEntity( val )&lt;br /&gt;
	if type(val) == 'table' then&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
	return mw.wikibase.getEntityObject(val)&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 = p.formatStatement(j, params)&lt;br /&gt;
    end&lt;br /&gt;
    return statements&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function 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;
    return linguistic.quickconj( values, params.conjtype)--linguistic.conj( values, params.lang, params.conjtype )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getDate(statement)&lt;br /&gt;
--[[&lt;br /&gt;
return a &amp;quot;timedata&amp;quot; object as used by the date modules with the date of an item from the p580, p582 and p585 qualifiers &lt;br /&gt;
	object format:&lt;br /&gt;
		* timestamp 28 char string value for the timepoint, or if non the beginning or if none, the end (for easy sorting)&lt;br /&gt;
		* timepoint: snak&lt;br /&gt;
		* begin: snak&lt;br /&gt;
]]--&lt;br /&gt;
	local q = statement.qualifiers&lt;br /&gt;
	if not q or not (q.P585 or q.P580 or q.P582) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if q.P585 and q.P585[1].snaktype == 'value' then -- P585: punctual date&lt;br /&gt;
		return dates.dateobject(q.P585[1].datavalue.value)&lt;br /&gt;
	end&lt;br /&gt;
	local begin, ending&lt;br /&gt;
&lt;br /&gt;
	if q.P582 and q.P582[1].snaktype == 'value' then&lt;br /&gt;
		ending = dates.dateobject(q.P582[1].datavalue.value)&lt;br /&gt;
	end&lt;br /&gt;
	if q.P580 and q.P580[1].snaktype == 'value' then &lt;br /&gt;
		begin = dates.dateobject(q.P580[1].datavalue.value)&lt;br /&gt;
	end&lt;br /&gt;
	return dates.daterange(begin, ending)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getFormattedDate(statement, params)&lt;br /&gt;
	local datetable = p.getDate(statement)&lt;br /&gt;
	if not datetable then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return dates.objecttotext(datetable, params)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function withtargetvalue(claims, targetvalue)&lt;br /&gt;
    targetvalue = string.upper(targetvalue)&lt;br /&gt;
    local oldclaims = claims&lt;br /&gt;
    local claims = {}&lt;br /&gt;
    for i, statement in pairs(oldclaims) do&lt;br /&gt;
        if samevalue(statement.mainsnak, targetvalue) then&lt;br /&gt;
                table.insert(claims, statement)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function validclaims(claims)&lt;br /&gt;
    local oldclaims = claims&lt;br /&gt;
    local claims = {}&lt;br /&gt;
    for i, statement in pairs(oldclaims) do&lt;br /&gt;
        if statement.rank == 'preferred' or statement.rank == 'normal' then&lt;br /&gt;
                table.insert(claims, statement)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function withrank(claims, rank)&lt;br /&gt;
    if rank == 'best' then&lt;br /&gt;
        local preferred = withrank(claims, 'preferred')&lt;br /&gt;
        if #preferred &amp;gt; 0 then&lt;br /&gt;
            return preferred&lt;br /&gt;
        else&lt;br /&gt;
            return withrank(claims, 'normal')&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
   &lt;br /&gt;
    if rank == 'valid' then&lt;br /&gt;
        return validclaims(claims)&lt;br /&gt;
    end&lt;br /&gt;
   &lt;br /&gt;
    local oldclaims = claims&lt;br /&gt;
    local claims = {}&lt;br /&gt;
    for i, statement in pairs(oldclaims) do&lt;br /&gt;
        if statement.rank == rank then&lt;br /&gt;
                table.insert(claims, statement)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function withqualifier(claims, qualifier, qualifiervalue)&lt;br /&gt;
    qualifier, qualifiervalue = string.upper(qualifier), string.upper(qualifiervalue or '')&lt;br /&gt;
   &lt;br /&gt;
    local oldclaims = claims&lt;br /&gt;
    local claims = {}&lt;br /&gt;
    for i, statement in pairs(oldclaims) do&lt;br /&gt;
        if statement.qualifiers and statement.qualifiers then&lt;br /&gt;
            if qualifiervalue ~= '' then&lt;br /&gt;
                for j, qualif in pairs(statement.qualifiers[qualifier]) do&lt;br /&gt;
                    if p.getRawvalue(qualif) == qualifiervalue then&lt;br /&gt;
                        table.insert(claims, statement)&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(claims, statement)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return claims&lt;br /&gt;
end&lt;br /&gt;
local function withsource(claims, source, sourceproperty)&lt;br /&gt;
    local oldclaims = claims&lt;br /&gt;
    local claims = {}&lt;br /&gt;
    sourceproperty = string.upper(sourceproperty or 'P248')&lt;br /&gt;
    local sourcevalue = string.upper(source or '')&lt;br /&gt;
    for i, statement in pairs(oldclaims) do&lt;br /&gt;
        local success&lt;br /&gt;
        if statement.references then&lt;br /&gt;
            for j, reference in pairs(statement.references) do&lt;br /&gt;
                if success then break end -- sp that it does not return twice the same reference when the property is used twice&lt;br /&gt;
                for prop, content in pairs(reference.snaks) do&lt;br /&gt;
                    if prop == sourceproperty then&lt;br /&gt;
                        if sourcevalue == '' then&lt;br /&gt;
                            table.insert(claims, statement)&lt;br /&gt;
                            success = true&lt;br /&gt;
                        else&lt;br /&gt;
                            for l, m in pairs(content) do&lt;br /&gt;
                                if p.getRawvalue(m) == source then&lt;br /&gt;
                                    table.insert(claims, statement)&lt;br /&gt;
                                    success = true&lt;br /&gt;
                                end&lt;br /&gt;
                            end&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isinlanguage(claims, lang) -- ne fonctionne que pour les monolingualtext / étendre aux autres types en utilisant les qualifiers ?&lt;br /&gt;
	local newclaims = {}&lt;br /&gt;
	for i, j in pairs(claims) do &lt;br /&gt;
		if j.mainsnak.snaktype == 'value' and j.mainsnak.datavalue.type == 'monolingualtext' then&lt;br /&gt;
			if j.mainsnak.datavalue.value.language == lang then&lt;br /&gt;
				table.insert(newclaims,j)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return newclaims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function excludespecial(claims)&lt;br /&gt;
    local oldclaims = claims&lt;br /&gt;
    local claims = {}&lt;br /&gt;
    for i, statement in pairs(oldclaims) do&lt;br /&gt;
        if statement.mainsnak.snaktype == 'value' then&lt;br /&gt;
            table.insert(claims, statement)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function comparedate(a, b) -- returns true if a is earlier than B or if a has a date but not b&lt;br /&gt;
	if a and b then&lt;br /&gt;
		return a.timestamp &amp;lt; b.timestamp&lt;br /&gt;
	elseif a then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function chronosort(claims, inverted)&lt;br /&gt;
	table.sort(claims, function(a,b)&lt;br /&gt;
		local timeA = p.getDate(a)&lt;br /&gt;
		local timeB = p.getDate(b)&lt;br /&gt;
		if inverted then &lt;br /&gt;
			return comparedate(timeB, timeA)&lt;br /&gt;
		else&lt;br /&gt;
			return comparedate(timeA, timeB)&lt;br /&gt;
		end&lt;br /&gt;
		end&lt;br /&gt;
	)&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.sortclaims(claims, sorttype)&lt;br /&gt;
	if sorttype == 'chronological' then&lt;br /&gt;
		return chronosort(claims)&lt;br /&gt;
	elseif sorttype == 'inverted' then&lt;br /&gt;
		return chronosort(claims, true)&lt;br /&gt;
	elseif type(sorttype) == 'function' then&lt;br /&gt;
		table.sort(claims, sorttype)&lt;br /&gt;
		return claims&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function numval(claims, numval)&lt;br /&gt;
    local numval = tonumber(numval) or 0 -- raise a error if numval is not a positive integer ?&lt;br /&gt;
    local newclaims = {}&lt;br /&gt;
    for i, j in pairs(claims) do&lt;br /&gt;
        if #newclaims == numval then&lt;br /&gt;
            return newclaims&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(newclaims,j)&lt;br /&gt;
    end&lt;br /&gt;
    return newclaims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getRawvalue(snak)&lt;br /&gt;
    return p.getDatavalue(snak, {format = 'raw'})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getDatavalue(snak, params)&lt;br /&gt;
	if not params then  &lt;br /&gt;
		params = {} &lt;br /&gt;
	end&lt;br /&gt;
	local formatting = params.formatting&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.datavalue.type&lt;br /&gt;
    local value = snak.datavalue.value&lt;br /&gt;
    local displayformat = params.format&lt;br /&gt;
    if datatype == 'wikibase-entityid' then&lt;br /&gt;
        if displayformat == 'raw' then&lt;br /&gt;
            return &amp;quot;Q&amp;quot; .. tostring(value['numeric-id'])&lt;br /&gt;
        else &lt;br /&gt;
            return p.formatEntity('Q' .. value['numeric-id'], params)&lt;br /&gt;
        end&lt;br /&gt;
       &lt;br /&gt;
    elseif datatype == 'string' then&lt;br /&gt;
        if params.displayformat == 'weblink' then&lt;br /&gt;
            return require('Module:Weblink').makelink(value)&lt;br /&gt;
        end&lt;br /&gt;
        return value&lt;br /&gt;
&lt;br /&gt;
	elseif 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 formatting == 'raw' then&lt;br /&gt;
			return value.time&lt;br /&gt;
		else&lt;br /&gt;
			return dates.objecttotext(dates.dateobject(value))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	elseif datatype == 'globecoordinate' 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;
		value.globe = require('Module:Wikidata/Globes')[value.globe] -- transforme l'ID du globe en nom anglais utilisable par geohack&lt;br /&gt;
		if formatting == 'latitude' then&lt;br /&gt;
			return value.latitude&lt;br /&gt;
		elseif formatting == 'longitude' then&lt;br /&gt;
			return value.longitude&lt;br /&gt;
		else&lt;br /&gt;
			return value -- 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;
		&lt;br /&gt;
&lt;br /&gt;
    elseif datatype == 'quantity' then&lt;br /&gt;
        if displayformat == 'raw' then&lt;br /&gt;
            return value.amount&lt;br /&gt;
        else&lt;br /&gt;
            local str = string.sub(value.amount,2) -- &lt;br /&gt;
            return str&lt;br /&gt;
        end&lt;br /&gt;
	elseif datatype == 'monolingualtext' then&lt;br /&gt;
		return langmodule.langue({value.language, value.text})&lt;br /&gt;
    else&lt;br /&gt;
        return formatError('unknown-datavalue-type' )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getMultipleClaims(args)&lt;br /&gt;
	local newargs = args&lt;br /&gt;
	local claims = {}&lt;br /&gt;
	for i, j in pairs(args.property) do&lt;br /&gt;
		newargs.property = j&lt;br /&gt;
		local newclaims = p.getClaims(args)&lt;br /&gt;
		for k, l in pairs(newclaims) do&lt;br /&gt;
			table.insert(claims, l)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end &lt;br /&gt;
function p.getClaims( args ) -- returns a table of the claims matching some conditions given in args&lt;br /&gt;
    if not args.property then&lt;br /&gt;
        return formatError( 'property-param-not-provided' )&lt;br /&gt;
    end&lt;br /&gt;
    if type(args.property) == 'table' then&lt;br /&gt;
    	return getMultipleClaims(args)&lt;br /&gt;
    end&lt;br /&gt;
    --Get entity&lt;br /&gt;
    if args.item then args.entity = args.item end -- synonyms&lt;br /&gt;
    local entity = args.entity&lt;br /&gt;
    if type(entity) ~= 'table' then&lt;br /&gt;
        entity = getEntity( args.entity )&lt;br /&gt;
    end&lt;br /&gt;
	if (not entity) or (not entity.claims) then &lt;br /&gt;
		return nil &lt;br /&gt;
	end&lt;br /&gt;
	local property = string.upper(args.property)&lt;br /&gt;
	local claims = entity.claims[property]&lt;br /&gt;
	if not claims then return nil end&lt;br /&gt;
    -- mettre ~= '' pour le cas ou le paramètre est écrit mais laissé blanc ({{#invoke:formatStatements|property=pXX|targetvalue = xx}})&lt;br /&gt;
    if args.targetvalue and args.targetvalue ~= '' then&lt;br /&gt;
        claims = withtargetvalue(claims, args.targetvalue)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if args.qualifier and args.qualifier ~= '' then&lt;br /&gt;
        claims = withqualifier(claims, args.qualifier, args.qualifiervalue)&lt;br /&gt;
    end&lt;br /&gt;
    if (args.source and args.source ~= '') or (args.sourceproperty and args.sourceproperty ~= '') then&lt;br /&gt;
        claims = withsource(claims, args.source, args.sourceproperty)&lt;br /&gt;
    end&lt;br /&gt;
   	if (args.isinlanguage and args.isinlanguage ~= '')  then&lt;br /&gt;
   		claims = isinlanguage(claims, args.inlanguage)&lt;br /&gt;
   	end&lt;br /&gt;
    if args.excludespecial and args.excludespecial ~= '' then&lt;br /&gt;
        claims = excludespecial(claims)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if args.rank ~= 'all' then&lt;br /&gt;
        if not args.rank or args.rank == '' then&lt;br /&gt;
            args.rank = 'best'&lt;br /&gt;
        end&lt;br /&gt;
        claims = withrank(claims, args.rank)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if args.sorttype then &lt;br /&gt;
    	claims = p.sortclaims(claims, args.sorttype)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if args.numval and args.numval ~= '' then  --keep at the end, after other filters have been implmented&lt;br /&gt;
        claims = numval(claims, args.numval)&lt;br /&gt;
    end&lt;br /&gt;
    if #claims &amp;gt; 0 then&lt;br /&gt;
	    return claims&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatClaimList(claims, args)&lt;br /&gt;
    if not claims then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
	for i, j in pairs(claims) do&lt;br /&gt;
        claims[i] = p.formatStatement(j, args)&lt;br /&gt;
    end&lt;br /&gt;
    return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.stringTable(args) -- like getClaims, but get a list of string rather than a list of snaks, for easier manipulation&lt;br /&gt;
    local claims = p.getClaims(args)&lt;br /&gt;
    return p.formatClaimList(claims, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function 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;
	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 p.getFormattedQualifiers(statement, qualifs, params)&lt;br /&gt;
	if not params then params = {} end&lt;br /&gt;
	local qualiftable = 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] = p.formatSnak(j, params)&lt;br /&gt;
	end&lt;br /&gt;
	return linguistic.conj(qualiftable, params)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatStatement( statement, args )&lt;br /&gt;
    if not statement.type or statement.type ~= 'statement' then&lt;br /&gt;
        return formatError( 'unknown-claim-type' )&lt;br /&gt;
    end&lt;br /&gt;
    local str = p.formatSnak( statement.mainsnak, args )&lt;br /&gt;
    if args.showqualifiers then &lt;br /&gt;
    	local qualifs =  args.showqualifiers&lt;br /&gt;
    	if type(qualifs) == 'string' then&lt;br /&gt;
    		qualifs = mw.text.split(qualifs, ',')&lt;br /&gt;
    	end&lt;br /&gt;
    	local foundvalues = p.getFormattedQualifiers(statement, qualifs, args)&lt;br /&gt;
    	if foundvalues then&lt;br /&gt;
    		str = str .. linguistic.inparentheses(foundvalues, lang) &lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
    &lt;br /&gt;
    if args.showdate then -- when &amp;quot;withdate and chronosort are both set, date retrieval is performed twice&lt;br /&gt;
    	local timedata = p.getDate(statement)&lt;br /&gt;
    	if timedata then&lt;br /&gt;
    		local formatteddate = dates.objecttotext(timedata, args)&lt;br /&gt;
    		formattteddate = linguistic.inparentheses(formatteddate, lang)&lt;br /&gt;
    		str = str .. '&amp;lt;small&amp;gt;' .. formattteddate ..'&amp;lt;/small&amp;gt;'&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if args.showsource and statement.references then --[[needs abritrary access   &lt;br /&gt;
    	local sourcestring = ''&lt;br /&gt;
        for i, ref in pairs(statement.references) do&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&lt;br /&gt;
                    	if ref.snaks.P304 and ref.snaks.P304[1].snaktype == 'value' then&lt;br /&gt;
                    		page = ref.snaks.P304[1].datavalue.value&lt;br /&gt;
                    	end&lt;br /&gt;
                        local s = require('Module:Cite/sandbox').citeitem('Q' .. source.datavalue.value['numeric-id'], lang, page)&lt;br /&gt;
                        s = mw.getCurrentFrame():extensionTag( 'ref', s )&lt;br /&gt;
                        sourcestring = sourcestring .. s&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            elseif ref.snaks.P854 and ref.snaks.P854[1].snaktype == 'value' then&lt;br /&gt;
            	s = mw.getCurrentFrame():extensionTag( 'ref', formatLink(ref.snaks.P854[1].datavalue.value))&lt;br /&gt;
            	sourcestring = sourcestring .. s&lt;br /&gt;
            end&lt;br /&gt;
        end &lt;br /&gt;
        str = str .. sourcestring ]]--&lt;br /&gt;
    end&lt;br /&gt;
    return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatSnak( snak, params )&lt;br /&gt;
    if not args then args = {} end -- pour faciliter l'appel depuis d'autres modules&lt;br /&gt;
    if snak.snaktype == 'somevalue' then&lt;br /&gt;
        return formatTheUnknown()&lt;br /&gt;
    elseif snak.snaktype == 'novalue' then&lt;br /&gt;
        return i18n['novalue'] --todo&lt;br /&gt;
    elseif snak.snaktype == 'value' then&lt;br /&gt;
        return p.getDatavalue( snak, params)&lt;br /&gt;
    else&lt;br /&gt;
        return formatError( 'unknown-snak-type' )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._getLabel(entity, default, inlanguage)&lt;br /&gt;
	local label&lt;br /&gt;
	if not entity then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if inlanguage then -- cherche dans l'élément complet s'il est déjà chargé, ou s'il faut une libellé non-français, inacessible par  mw.wikibase.label&lt;br /&gt;
		entity = getEntity(entity)&lt;br /&gt;
	end&lt;br /&gt;
	if type(entity) == 'table' then&lt;br /&gt;
		if entity and entity.labels and entity.labels[lang] then&lt;br /&gt;
			label = entity.labels[lang].value&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		label = mw.wikibase.label(entity)&lt;br /&gt;
	end&lt;br /&gt;
	if label then &lt;br /&gt;
		return label&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
    if default == 'nolabel' then&lt;br /&gt;
        return i18n['no-label']&lt;br /&gt;
    end&lt;br /&gt;
    return entity.id&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._getDescription(entity, lang)&lt;br /&gt;
	if type(entity) ~= 'table' then&lt;br /&gt;
		entity = getEntity(entity)&lt;br /&gt;
	end&lt;br /&gt;
    if not entity.descriptions then&lt;br /&gt;
    	return i18n['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[lang].value&lt;br /&gt;
    end&lt;br /&gt;
    local fblist = require('Module:Fallback').fblist(lang) -- list of fallback languages in no label in the desired language&lt;br /&gt;
    for i, j in pairs (mw.language.getFallbacksFor(lang)) do&lt;br /&gt;
        if descriptions.lang then&lt;br /&gt;
        	return descriptions[lang].value&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if default == 'nolabel' then&lt;br /&gt;
        return i18n['no-label']&lt;br /&gt;
    end&lt;br /&gt;
    return entity.id&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formattedLabel(label, entity, args)&lt;br /&gt;
    if args.link== '-' then&lt;br /&gt;
        return label&lt;br /&gt;
    end&lt;br /&gt;
    local link = mw.wikibase.sitelink( entity )&lt;br /&gt;
	if not link then&lt;br /&gt;
		link = 'd:' .. entity&lt;br /&gt;
	end&lt;br /&gt;
	return '[[' .. link .. '|' .. label .. ']]'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.getmainid(claim)&lt;br /&gt;
	if claim and claim.mainsnak.snaktype == 'value' then&lt;br /&gt;
		return 'Q' .. claim.mainsnak.datavalue.value['numeric-id']&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatEntity( entity, args )&lt;br /&gt;
    local label = p._getLabel(entity, lang)&lt;br /&gt;
    if not label then&lt;br /&gt;
    	label = entity&lt;br /&gt;
    end&lt;br /&gt;
    return formattedLabel(label, entity, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.getLabel(frame) -- simple for simple templates like {{Q|}}}&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
    local entity = args.entity&lt;br /&gt;
    local lang = lang&lt;br /&gt;
    if args.lang and args.lang ~= '' then&lt;br /&gt;
        lang = args.lang&lt;br /&gt;
    end&lt;br /&gt;
    if string.sub(entity, 1, 10) ==  'Property:P' then &lt;br /&gt;
    	entity = string.sub(entity, 10)&lt;br /&gt;
    elseif (string.sub(entity, 1, 1) ~= 'P' and string.sub(entity, 1, 1) ~= 'Q') or (not tonumber(string.sub(entity, 2))) then&lt;br /&gt;
        return i18n.errors['invalid-id']&lt;br /&gt;
    end&lt;br /&gt;
    if not args.link or args.link == '' then -- by default: no link&lt;br /&gt;
    	args.link = '-'&lt;br /&gt;
    end&lt;br /&gt;
    if args.link == '-' then&lt;br /&gt;
    	return p._getLabel(entity, lang) or  i18n.errors['invalid-id']&lt;br /&gt;
    else&lt;br /&gt;
    	lang = lang&lt;br /&gt;
    	return p.formatEntity(entity, args)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._formatStatements( args )--Format statement and concat them cleanly&lt;br /&gt;
	if args.item == '-' then &lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
    local valuetable = p.stringTable(args)&lt;br /&gt;
    return tableToText(valuetable, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._formatAndCat(args) &lt;br /&gt;
	local val = p._formatStatements( args )&lt;br /&gt;
	if val then&lt;br /&gt;
		return val .. addtrackingcat(args.property)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getTheDate(args)&lt;br /&gt;
	local claims = p.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;
		table.insert(formattedvalues, p.getFormattedDate(j))&lt;br /&gt;
	end&lt;br /&gt;
	return linguistic.conj(formattedvalues)&lt;br /&gt;
end&lt;br /&gt;
---FONCTIONS depuis le FRAME &lt;br /&gt;
function p.getaDate(frame)&lt;br /&gt;
	return p.getTheDate(frame.args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.getQualifier( frame )&lt;br /&gt;
	local claims = p.getClaims(frame.args)&lt;br /&gt;
	local str = ''&lt;br /&gt;
	local qualifs = frame.args.qualifiers or frame.args.qualifier &lt;br /&gt;
	if not qualifs then&lt;br /&gt;
		return formatError( 'property-param-not-provided' )&lt;br /&gt;
	end&lt;br /&gt;
	qualifs =  mw.text.split(qualifs, ',')&lt;br /&gt;
	for i, j in pairs(claims) do &lt;br /&gt;
		local new = p.getFormattedQualifiers(j, qualifs) 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 p.getDescription(frame) -- simple for simple templates like {{Q|}}}&lt;br /&gt;
    local entity = frame.args.entity&lt;br /&gt;
    if frame.args.lang then&lt;br /&gt;
    	lang = frame.args.lang&lt;br /&gt;
    end&lt;br /&gt;
    if (string.sub(entity, 1, 1) ~= 'P' and string.sub(entity, 1, 1) ~= 'Q') or (not tonumber(string.sub(entity, 2))) then&lt;br /&gt;
        return i18n.errors['invalid-id']&lt;br /&gt;
    end&lt;br /&gt;
    return p._getDescription(entity, lang) or  i18n.errors['invalid-id']&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.numOfClaims(frame)&lt;br /&gt;
	local claims = p.getClaims(frame.args)&lt;br /&gt;
	if claims then&lt;br /&gt;
		return #claims&lt;br /&gt;
	else&lt;br /&gt;
		return 0&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatStatements( frame )&lt;br /&gt;
	local args = {}&lt;br /&gt;
	if frame == mw.getCurrentFrame() then&lt;br /&gt;
		args = frame:getParent().args -- paramètres du modèle appelant (est-ce vraiment une bonne idée ?)&lt;br /&gt;
		for k, v in pairs(frame.args) do&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		args = frame&lt;br /&gt;
	end&lt;br /&gt;
	return p._formatStatements( args )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://baripedia.org/index.php?title=Module:Wikidata&amp;diff=12738&amp;oldid=prev</id>
		<title>Arthur : 1 version</title>
		<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Wikidata&amp;diff=12738&amp;oldid=prev"/>
		<updated>2014-07-09T12:42:40Z</updated>

		<summary type="html">&lt;p&gt;1 version&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 p = {}&lt;br /&gt;
&lt;br /&gt;
local i18n = {&lt;br /&gt;
    [&amp;quot;errors&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;property-param-not-provided&amp;quot;] = &amp;quot;Paramètre propriété non renseigné.&amp;quot;,&lt;br /&gt;
        [&amp;quot;qualifier-param-not-provided&amp;quot;] = &amp;quot;Paramètre qualifier non renseigné.&amp;quot;,&lt;br /&gt;
        [&amp;quot;entity-not-found&amp;quot;] = &amp;quot;Entité non trouvée.&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-claim-type&amp;quot;] = &amp;quot;type d'affirmation inconnu.&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-snak-type&amp;quot;] = &amp;quot;Type de snak inconnu.&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-datavalue-type&amp;quot;] = &amp;quot;Type de donnée non reconnu.&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-entity-type&amp;quot;] = &amp;quot;Type d'entité non reconnu.&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-value-module&amp;quot;] = &amp;quot;You must set both value-module and value-function parameters.&amp;quot;,&lt;br /&gt;
        [&amp;quot;value-module-not-found&amp;quot;] = &amp;quot;The module pointed by value-module not found.&amp;quot;,&lt;br /&gt;
        [&amp;quot;value-function-not-found&amp;quot;] = &amp;quot;The function pointed by value-function not found.&amp;quot;,&lt;br /&gt;
        [&amp;quot;ambigous&amp;quot;] = &amp;quot;Ambigu : plusieurs valeurs possibles&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;somevalue&amp;quot;] = &amp;quot;inconnu&amp;quot;,&lt;br /&gt;
    [&amp;quot;novalue&amp;quot;] = &amp;quot;pas applicable&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function getEntityFromId( id )&lt;br /&gt;
    return mw.wikibase.getEntityObject() --TODO support for getting other entities&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatError( key )&lt;br /&gt;
    return '&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;' .. i18n.errors[key] .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function withtargetvalue(claims, targetvalue)&lt;br /&gt;
	targetvalue = string.upper(targetvalue)&lt;br /&gt;
	local oldclaims = claims&lt;br /&gt;
    local claims = {}&lt;br /&gt;
    for i, statement in pairs(oldclaims) do&lt;br /&gt;
		if p.getRawvalue(statement.mainsnak) == targetvalue then&lt;br /&gt;
				table.insert(claims, statement)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function validclaims(claims)&lt;br /&gt;
	local oldclaims = claims&lt;br /&gt;
	local claims = {}&lt;br /&gt;
	for i, statement in pairs(oldclaims) do&lt;br /&gt;
		if statement.rank == 'preferred' or statement.rank == 'normal' then&lt;br /&gt;
				table.insert(claims, statement)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function withrank(claims, rank)&lt;br /&gt;
	if rank == 'best' then&lt;br /&gt;
		local preferred = withrank(claims, 'preferred')&lt;br /&gt;
		if #preferred &amp;gt; 0 then&lt;br /&gt;
			return preferred&lt;br /&gt;
		else&lt;br /&gt;
			return withrank(claims, 'normal')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if rank == 'valid' then&lt;br /&gt;
		return validclaims(claims)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local oldclaims = claims&lt;br /&gt;
	local claims = {}&lt;br /&gt;
	for i, statement in pairs(oldclaims) do&lt;br /&gt;
		if statement.rank == rank then&lt;br /&gt;
				table.insert(claims, statement)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function withqualifier(claims, qualifier, qualifiervalue)&lt;br /&gt;
	qualifier, qualifiervalue = string.upper(qualifier), string.upper(qualifiervalue or '')&lt;br /&gt;
	&lt;br /&gt;
	local oldclaims = claims&lt;br /&gt;
    local claims = {}&lt;br /&gt;
    for i, statement in pairs(oldclaims) do&lt;br /&gt;
		if statement.qualifiers and statement.qualifiers[qualifier] then&lt;br /&gt;
			if qualifiervalue then&lt;br /&gt;
				for j, qualif in pairs(statement.qualifiers[qualifier]) do&lt;br /&gt;
					if p.getRawvalue(qualif) == qualifiervalue then &lt;br /&gt;
						table.insert(claims, statement)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(claims, statement) &lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function withsource(claims, source, sourceproperty)&lt;br /&gt;
	local oldclaims = claims&lt;br /&gt;
	local claims = {}&lt;br /&gt;
	source = string.upper(source or '')&lt;br /&gt;
	sourceproperty = string.upper(sourceproperty or 'P248')&lt;br /&gt;
	&lt;br /&gt;
	for i, statement in pairs(oldclaims) do&lt;br /&gt;
		if statement.references then&lt;br /&gt;
			for j, reference in pairs(statement.references) do&lt;br /&gt;
				for prop, content in pairs(reference.snaks) do&lt;br /&gt;
					if prop == sourceproperty then&lt;br /&gt;
						for l, m in pairs(content) do&lt;br /&gt;
							if p.getRawvalue(m) == source then&lt;br /&gt;
								table.insert(claims, statement)&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function excludespecial(claims)&lt;br /&gt;
	local oldclaims = claims&lt;br /&gt;
    local claims = {}&lt;br /&gt;
    for i, statement in pairs(oldclaims) do&lt;br /&gt;
    	if statement.mainsnak.snaktype == 'value' then&lt;br /&gt;
    		table.insert(claims, statement)&lt;br /&gt;
    	end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function firstvalue(claims)&lt;br /&gt;
	-- return just the first value (useful for images for instance)&lt;br /&gt;
	-- returns in priority claims with rank = 'preferred', else with rank == 'normal' do not return claims with rank == 'deprecated'&lt;br /&gt;
	for i, statement in pairs(claims) do -- choisit en priorité les données &amp;quot;preferred&amp;quot;&lt;br /&gt;
		if statement.rank == 'preferred' then&lt;br /&gt;
			return {statement}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for i, statement in pairs(claims) do&lt;br /&gt;
		if statement.rank == 'normal' then&lt;br /&gt;
			return {statement}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getRawvalue(snak)&lt;br /&gt;
	return p.getDatavalue(snak, 'raw')&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function p.getDatavalue(snak, formatting)&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.datavalue.type&lt;br /&gt;
	local value = snak.datavalue.value&lt;br /&gt;
	&lt;br /&gt;
	if datatype == 'wikibase-entityid' then&lt;br /&gt;
		if formatting == 'raw' then &lt;br /&gt;
			return &amp;quot;Q&amp;quot; .. tostring(value['numeric-id'])&lt;br /&gt;
		else&lt;br /&gt;
			return p.formatEntityId(&amp;quot;Q&amp;quot; .. tostring(value['numeric-id']), formatting)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	elseif datatype == 'string' then&lt;br /&gt;
		if formatting == 'weblink' then &lt;br /&gt;
			local link = require ('Module:Weblink')&lt;br /&gt;
			return link.makelink(value)&lt;br /&gt;
		else &lt;br /&gt;
			return value&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	elseif datatype == 'time' then -- format example: +00000001809-02-12T00:00:00Z&lt;br /&gt;
		if formatting == 'raw' then&lt;br /&gt;
			return value.time&lt;br /&gt;
		else&lt;br /&gt;
			local wdate = require('Module:Wikidata/Dates') &lt;br /&gt;
			return wdate.objecttotext(wdate.dateobject(value))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	elseif datatype == 'globecoordinate' 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;
		value.globe = require('Module:Wikidata/Globes')[value.globe] -- transforme l'ID du globe en nom anglais utilisable par geohack&lt;br /&gt;
		if formatting == 'latitude' then&lt;br /&gt;
			return value.latitude&lt;br /&gt;
		elseif formatting == 'longitude' then&lt;br /&gt;
			return value.longitude&lt;br /&gt;
		else&lt;br /&gt;
			return value -- 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;
&lt;br /&gt;
	elseif datatype == 'url' then&lt;br /&gt;
		return value.url&lt;br /&gt;
&lt;br /&gt;
	elseif datatype == 'quantity' then&lt;br /&gt;
		return value.amount&lt;br /&gt;
&lt;br /&gt;
	else&lt;br /&gt;
		return formatError( 'unknown-datavalue-type' )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getClaims( args ) -- returns a table of the claims matching some conditions given in args&lt;br /&gt;
    if not args.property then&lt;br /&gt;
        return formatError( 'property-param-not-provided' )&lt;br /&gt;
    end&lt;br /&gt;
    --Get entity&lt;br /&gt;
    local entity = nil&lt;br /&gt;
    local property = string.upper(args.property)&lt;br /&gt;
    if args.entity and type( args.entity ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        entity = args.entity&lt;br /&gt;
    else&lt;br /&gt;
        entity = getEntityFromId( args.entityId )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if not entity or not entity.claims or not entity.claims[property] then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
	claims = entity.claims[property]&lt;br /&gt;
	-- mettre ~= '' pour le cas ou le paramètre est écrit mais laissé blanc ({{#invoke:formatStatements|property=pXX|targetvalue = xx}})&lt;br /&gt;
	&lt;br /&gt;
	if args.targetvalue and args.targetvalue ~= '' then &lt;br /&gt;
		claims = withtargetvalue(claims, args.targetvalue)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.qualifier and args.qualifier ~= '' then&lt;br /&gt;
		claims = withqualifier(claims, args.qualifier, args.qualifiervalue)&lt;br /&gt;
	end&lt;br /&gt;
	if args.source and args.source ~= '' then &lt;br /&gt;
		claims = withsource(claims, args.source, args.sourceproperty)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.excludespecial == 'true' and args.excludespecial ~= '' then&lt;br /&gt;
		claims = excludespecial(claims)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.rank ~= 'all' then -- à laisser vers la fin, quan les élimination sont faites&lt;br /&gt;
		if not args.rank or args.rank == '' then&lt;br /&gt;
			args.rank = 'best'&lt;br /&gt;
		end&lt;br /&gt;
		claims = withrank(claims, args.rank)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.first == 'true' and args.first ~= '' then -- retourne une seule valeur&lt;br /&gt;
		claims = firstvalue(claims)&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.numOfClaims(frame)&lt;br /&gt;
	local claims = p.getClaims(frame.args)&lt;br /&gt;
    if claims then&lt;br /&gt;
    	return #claims&lt;br /&gt;
    else&lt;br /&gt;
    	return 0&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._getQualifier(args)&lt;br /&gt;
	claims = p.getClaims( args )&lt;br /&gt;
	if args.qualifier then&lt;br /&gt;
		qualifier = args.qualifier&lt;br /&gt;
	else&lt;br /&gt;
		return formatError( 'qualifier-param-not-provided' )&lt;br /&gt;
	end&lt;br /&gt;
	if not claims or #claims == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	else &lt;br /&gt;
		result = {}&lt;br /&gt;
		for i, j in pairs(claims) do&lt;br /&gt;
			for k, l in pairs( j.qualifiers[qualifier] ) do&lt;br /&gt;
				table.insert(result, p.getDatavalue(l, 'standard'))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return mw.text.listToText(result)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getQualifier( frame )&lt;br /&gt;
	return p._getQualifier(frame.args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._formatStatements( args )--Format statement and concat them cleanly&lt;br /&gt;
	--If a value is already set, use it&lt;br /&gt;
	if args.value and args.value ~= '' then&lt;br /&gt;
		return args.value&lt;br /&gt;
	end&lt;br /&gt;
	local rawStatements = p.getClaims( args )&lt;br /&gt;
	local formattedStatements = {}&lt;br /&gt;
	if not rawStatements or #rawStatements == 0 then&lt;br /&gt;
		if args.returntype == 'table' then return {} end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
    for i, statement in pairs( rawStatements ) do&lt;br /&gt;
 		table.insert( formattedStatements, formatStatement( statement, args ))&lt;br /&gt;
 	end&lt;br /&gt;
 	if args.returntype == 'table' then -- pour certaines modules, il vaut mieux récupérer les données sous forme de table&lt;br /&gt;
 		return formattedStatements&lt;br /&gt;
 	end&lt;br /&gt;
    return mw.text.listToText( formattedStatements, args.separator, args.conjunction )&lt;br /&gt;
    -- .. '[[Category:Page utilisant des données de Wikidata/'  ..  string.upper(args.property) .. ']]'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatStatements( frame )&lt;br /&gt;
	local args = {}&lt;br /&gt;
	if frame == mw.getCurrentFrame() then&lt;br /&gt;
		args = frame:getParent().args -- paramètres du modèle appelant (est-ce vraiment une bonne idée ?)&lt;br /&gt;
		for k, v in pairs(frame.args) do&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		args = frame&lt;br /&gt;
	end&lt;br /&gt;
	return p._formatStatements( args )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function formatStatement( statement, args )&lt;br /&gt;
    if not statement.type or statement.type ~= 'statement' then&lt;br /&gt;
        return formatError( 'unknown-claim-type' )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    mainsnak = p.formatSnak( statement.mainsnak, args )&lt;br /&gt;
    &lt;br /&gt;
    if args.showqualifiers then -- to be improved&lt;br /&gt;
    	qualifier = args.showqualifiers &lt;br /&gt;
    	if statement.qualifiers and statement.qualifiers[qualifier] then&lt;br /&gt;
    		qualifvalues = {}&lt;br /&gt;
    		for i, j in pairs (statement.qualifiers[qualifier]) do&lt;br /&gt;
    			table.insert(qualifvalues, p.getDatavalue(j))&lt;br /&gt;
    		end&lt;br /&gt;
    		return mainsnak .. ' (' .. mw.text.listToText(qualifvalues) .. ')'&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    return mainsnak&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatSnak( snak, args )&lt;br /&gt;
	if not args then args = {} end -- pour faciliter l'appel depuis d'autres modules&lt;br /&gt;
    if snak.snaktype == 'somevalue' then&lt;br /&gt;
        return i18n['somevalue']&lt;br /&gt;
    elseif snak.snaktype == 'novalue' then&lt;br /&gt;
        return i18n['novalue']&lt;br /&gt;
    elseif snak.snaktype == 'value' then&lt;br /&gt;
        return p.getDatavalue( snak, args.formatting)&lt;br /&gt;
    else&lt;br /&gt;
        return formatError( 'unknown-snak-type' )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatEntityId( entityId, formatting )&lt;br /&gt;
	local label = mw.wikibase.label( entityId )&lt;br /&gt;
    if not label then&lt;br /&gt;
    	label = entityId --TODO what if no links and label + fallback language?&lt;br /&gt;
    end&lt;br /&gt;
	if formatting == 'nolink' then&lt;br /&gt;
		return label&lt;br /&gt;
	else&lt;br /&gt;
	    local link = mw.wikibase.sitelink( entityId )&lt;br /&gt;
	    if link then&lt;br /&gt;
	            return '[[' .. link .. '|' .. label .. ']]'&lt;br /&gt;
	    else&lt;br /&gt;
	        return '[[wikidata:' ..  entityId .. '|' .. label .. ']]'&lt;br /&gt;
	    end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://baripedia.org/index.php?title=Module:Wikidata&amp;diff=11864&amp;oldid=prev</id>
		<title>Arthur : 1 version</title>
		<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Wikidata&amp;diff=11864&amp;oldid=prev"/>
		<updated>2014-05-02T22:06:42Z</updated>

		<summary type="html">&lt;p&gt;1 version&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 p = {}&lt;br /&gt;
&lt;br /&gt;
local i18n = {&lt;br /&gt;
    [&amp;quot;errors&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;property-param-not-provided&amp;quot;] = &amp;quot;Paramètre propriété non renseigné.&amp;quot;,&lt;br /&gt;
        [&amp;quot;qualifier-param-not-provided&amp;quot;] = &amp;quot;Paramètre qualifier non renseigné.&amp;quot;,&lt;br /&gt;
        [&amp;quot;entity-not-found&amp;quot;] = &amp;quot;Entité non trouvée.&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-claim-type&amp;quot;] = &amp;quot;type d'affirmation inconnu.&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-snak-type&amp;quot;] = &amp;quot;Type de snak inconnu.&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-datavalue-type&amp;quot;] = &amp;quot;Type de donnée non reconnu.&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-entity-type&amp;quot;] = &amp;quot;Type d'entité non reconnu.&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-value-module&amp;quot;] = &amp;quot;You must set both value-module and value-function parameters.&amp;quot;,&lt;br /&gt;
        [&amp;quot;value-module-not-found&amp;quot;] = &amp;quot;The module pointed by value-module not found.&amp;quot;,&lt;br /&gt;
        [&amp;quot;value-function-not-found&amp;quot;] = &amp;quot;The function pointed by value-function not found.&amp;quot;,&lt;br /&gt;
        [&amp;quot;ambigous&amp;quot;] = &amp;quot;Ambigu : plusieurs valeurs possibles&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;somevalue&amp;quot;] = &amp;quot;inconnu&amp;quot;,&lt;br /&gt;
    [&amp;quot;novalue&amp;quot;] = &amp;quot;pas applicable&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function getEntityFromId( id )&lt;br /&gt;
    return mw.wikibase.getEntityObject() --TODO support for getting other entities&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatError( key )&lt;br /&gt;
    return '&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;' .. i18n.errors[key] .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function withtargetvalue(claims, targetvalue)&lt;br /&gt;
	targetvalue = string.upper(targetvalue)&lt;br /&gt;
	local oldclaims = claims&lt;br /&gt;
    local claims = {}&lt;br /&gt;
    for i, statement in pairs(oldclaims) do&lt;br /&gt;
		if p.getRawvalue(statement.mainsnak) == targetvalue then&lt;br /&gt;
				table.insert(claims, statement)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function validclaims(claims)&lt;br /&gt;
	local oldclaims = claims&lt;br /&gt;
	local claims = {}&lt;br /&gt;
	for i, statement in pairs(oldclaims) do&lt;br /&gt;
		if statement.rank == 'preferred' or statement.rank == 'normal' then&lt;br /&gt;
				table.insert(claims, statement)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function withrank(claims, rank)&lt;br /&gt;
	if rank == 'best' then&lt;br /&gt;
		local preferred = withrank(claims, 'preferred')&lt;br /&gt;
		if #preferred &amp;gt; 0 then&lt;br /&gt;
			return preferred&lt;br /&gt;
		else&lt;br /&gt;
			return withrank(claims, 'normal')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if rank == 'valid' then&lt;br /&gt;
		return validclaims(claims)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local oldclaims = claims&lt;br /&gt;
	local claims = {}&lt;br /&gt;
	for i, statement in pairs(oldclaims) do&lt;br /&gt;
		if statement.rank == rank then&lt;br /&gt;
				table.insert(claims, statement)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function withqualifier(claims, qualifier, qualifiervalue)&lt;br /&gt;
	qualifier, qualifiervalue = string.upper(qualifier), string.upper(qualifiervalue or '')&lt;br /&gt;
	&lt;br /&gt;
	local oldclaims = claims&lt;br /&gt;
    local claims = {}&lt;br /&gt;
    for i, statement in pairs(oldclaims) do&lt;br /&gt;
		if statement.qualifiers and statement.qualifiers[qualifier] then&lt;br /&gt;
			if qualifiervalue then&lt;br /&gt;
				for j, qualif in pairs(statement.qualifiers[qualifier]) do&lt;br /&gt;
					if p.getRawvalue(qualif) == qualifiervalue then &lt;br /&gt;
						table.insert(claims, statement)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(claims, statement) &lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function withsource(claims, source, sourceproperty)&lt;br /&gt;
	local oldclaims = claims&lt;br /&gt;
	local claims = {}&lt;br /&gt;
	source = string.upper(source or '')&lt;br /&gt;
	sourceproperty = string.upper(sourceproperty or 'P248')&lt;br /&gt;
	&lt;br /&gt;
	for i, statement in pairs(oldclaims) do&lt;br /&gt;
		if statement.references then&lt;br /&gt;
			for j, reference in pairs(statement.references) do&lt;br /&gt;
				for prop, content in pairs(reference.snaks) do&lt;br /&gt;
					if prop == sourceproperty then&lt;br /&gt;
						for l, m in pairs(content) do&lt;br /&gt;
							if p.getRawvalue(m) == source then&lt;br /&gt;
								table.insert(claims, statement)&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function excludespecial(claims)&lt;br /&gt;
	local oldclaims = claims&lt;br /&gt;
    local claims = {}&lt;br /&gt;
    for i, statement in pairs(oldclaims) do&lt;br /&gt;
    	if statement.mainsnak.snaktype == 'value' then&lt;br /&gt;
    		table.insert(claims, statement)&lt;br /&gt;
    	end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function firstvalue(claims)&lt;br /&gt;
	-- return just the first value (useful for images for instance)&lt;br /&gt;
	-- returns in priority claims with rank = 'preferred', else with rank == 'normal' do not return claims with rank == 'deprecated'&lt;br /&gt;
	for i, statement in pairs(claims) do -- choisit en priorité les données &amp;quot;preferred&amp;quot;&lt;br /&gt;
		if statement.rank == 'preferred' then&lt;br /&gt;
			return {statement}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for i, statement in pairs(claims) do&lt;br /&gt;
		if statement.rank == 'normal' then&lt;br /&gt;
			return {statement}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getRawvalue(snak)&lt;br /&gt;
	return p.getDatavalue(snak, 'raw')&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function p.getDatavalue(snak, formatting)&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.datavalue.type&lt;br /&gt;
	local value = snak.datavalue.value&lt;br /&gt;
	&lt;br /&gt;
	if datatype == 'wikibase-entityid' then&lt;br /&gt;
		if formatting == 'raw' then &lt;br /&gt;
			return &amp;quot;Q&amp;quot; .. tostring(value['numeric-id'])&lt;br /&gt;
		else&lt;br /&gt;
			return p.formatEntityId(&amp;quot;Q&amp;quot; .. tostring(value['numeric-id']), formatting)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	elseif datatype == 'string' then&lt;br /&gt;
		if formatting == 'weblink' then &lt;br /&gt;
			local link = require ('Module:Weblink')&lt;br /&gt;
			return link.makelink(value)&lt;br /&gt;
		else &lt;br /&gt;
			return value&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	elseif datatype == 'time' then -- format example: +00000001809-02-12T00:00:00Z&lt;br /&gt;
		if formatting == 'raw' then&lt;br /&gt;
			return value.time&lt;br /&gt;
		else&lt;br /&gt;
			local wdate = require('Module:Wikidata/Dates') &lt;br /&gt;
			return wdate.objecttotext(wdate.dateobject(value))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	elseif datatype == 'globecoordinate' 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;
		value.globe = require('Module:Wikidata/Globes')[value.globe] -- transforme l'ID du globe en nom anglais utilisable par geohack&lt;br /&gt;
		if formatting == 'latitude' then&lt;br /&gt;
			return value.latitude&lt;br /&gt;
		elseif formatting == 'longitude' then&lt;br /&gt;
			return value.longitude&lt;br /&gt;
		else&lt;br /&gt;
			return value -- 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;
&lt;br /&gt;
	elseif datatype == 'url' then&lt;br /&gt;
		return value.url&lt;br /&gt;
&lt;br /&gt;
	elseif datatype == 'quantity' then&lt;br /&gt;
		return value.amount&lt;br /&gt;
&lt;br /&gt;
	else&lt;br /&gt;
		return formatError( 'unknown-datavalue-type' )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getClaims( args ) -- returns a table of the claims matching some conditions given in args&lt;br /&gt;
    if not args.property then&lt;br /&gt;
        return formatError( 'property-param-not-provided' )&lt;br /&gt;
    end&lt;br /&gt;
    --Get entity&lt;br /&gt;
    local entity = nil&lt;br /&gt;
    local property = string.upper(args.property)&lt;br /&gt;
    if args.entity and type( args.entity ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        entity = args.entity&lt;br /&gt;
    else&lt;br /&gt;
        entity = getEntityFromId( args.entityId )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if not entity or not entity.claims or not entity.claims[property] then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
	claims = entity.claims[property]&lt;br /&gt;
	-- mettre ~= '' pour le cas ou le paramètre est écrit mais laissé blanc ({{#invoke:formatStatements|property=pXX|targetvalue = xx}})&lt;br /&gt;
	&lt;br /&gt;
	if args.targetvalue and args.targetvalue ~= '' then &lt;br /&gt;
		claims = withtargetvalue(claims, args.targetvalue)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.qualifier and args.qualifier ~= '' then&lt;br /&gt;
		claims = withqualifier(claims, args.qualifier, args.qualifiervalue)&lt;br /&gt;
	end&lt;br /&gt;
	if args.source and args.source ~= '' then &lt;br /&gt;
		claims = withsource(claims, args.source, args.sourceproperty)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.excludespecial == 'true' and args.excludespecial ~= '' then&lt;br /&gt;
		claims = excludespecial(claims)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.rank ~= 'all' then -- à laisser vers la fin, quan les élimination sont faites&lt;br /&gt;
		if not args.rank or args.rank == '' then&lt;br /&gt;
			args.rank = 'best'&lt;br /&gt;
		end&lt;br /&gt;
		claims = withrank(claims, args.rank)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args.first == 'true' and args.first ~= '' then -- retourne une seule valeur&lt;br /&gt;
		claims = firstvalue(claims)&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.numOfClaims(frame)&lt;br /&gt;
	local claims = p.getClaims(frame.args)&lt;br /&gt;
    if claims then&lt;br /&gt;
    	return #claims&lt;br /&gt;
    else&lt;br /&gt;
    	return 0&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._getQualifier(args)&lt;br /&gt;
	claims = p.getClaims( args )&lt;br /&gt;
	if args.qualifier then&lt;br /&gt;
		qualifier = args.qualifier&lt;br /&gt;
	else&lt;br /&gt;
		return formatError( 'qualifier-param-not-provided' )&lt;br /&gt;
	end&lt;br /&gt;
	if not claims or #claims == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	else &lt;br /&gt;
		result = {}&lt;br /&gt;
		for i, j in pairs(claims) do&lt;br /&gt;
			for k, l in pairs( j.qualifiers[qualifier] ) do&lt;br /&gt;
				table.insert(result, p.getDatavalue(l, 'standard'))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return mw.text.listToText(result)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getQualifier( frame )&lt;br /&gt;
	return p._getQualifier(frame.args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._formatStatements( args )--Format statement and concat them cleanly&lt;br /&gt;
	--If a value is already set, use it&lt;br /&gt;
	if args.value and args.value ~= '' then&lt;br /&gt;
		return args.value&lt;br /&gt;
	end&lt;br /&gt;
	local rawStatements = p.getClaims( args )&lt;br /&gt;
	local formattedStatements = {}&lt;br /&gt;
	if not rawStatements or #rawStatements == 0 then&lt;br /&gt;
			return nil&lt;br /&gt;
	end&lt;br /&gt;
    for i, statement in pairs( rawStatements ) do&lt;br /&gt;
 		table.insert( formattedStatements, formatStatement( statement, args ))&lt;br /&gt;
 	end&lt;br /&gt;
 	if args.returntype == 'table' then -- pour certaines modules, il vaut mieux récupérer les données sous forme de table&lt;br /&gt;
 		return formattedStatements&lt;br /&gt;
 	end&lt;br /&gt;
    return mw.text.listToText( formattedStatements, args.separator, args.conjunction )&lt;br /&gt;
    -- .. '[[Category:Page utilisant des données de Wikidata/'  ..  string.upper(args.property) .. ']]'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatStatements( frame )&lt;br /&gt;
	local args = {}&lt;br /&gt;
	if frame == mw.getCurrentFrame() then&lt;br /&gt;
		args = frame:getParent().args -- paramètres du modèle appelant (est-ce vraiment une bonne idée ?)&lt;br /&gt;
		for k, v in pairs(frame.args) do&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		args = frame&lt;br /&gt;
	end&lt;br /&gt;
	return p._formatStatements( args )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function formatStatement( statement, args )&lt;br /&gt;
    if not statement.type or statement.type ~= 'statement' then&lt;br /&gt;
        return formatError( 'unknown-claim-type' )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    mainsnak = p.formatSnak( statement.mainsnak, args )&lt;br /&gt;
    &lt;br /&gt;
    if args.showqualifiers then -- to be improved&lt;br /&gt;
    	qualifier = args.showqualifiers &lt;br /&gt;
    	if statement.qualifiers and statement.qualifiers[qualifier] then&lt;br /&gt;
    		qualifvalues = {}&lt;br /&gt;
    		for i, j in pairs (statement.qualifiers[qualifier]) do&lt;br /&gt;
    			table.insert(qualifvalues, p.getDatavalue(j))&lt;br /&gt;
    		end&lt;br /&gt;
    		return mainsnak .. ' (' .. mw.text.listToText(qualifvalues) .. ')'&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    return mainsnak&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatSnak( snak, args )&lt;br /&gt;
	if not args then args = {} end -- pour faciliter l'appel depuis d'autres modules&lt;br /&gt;
    if snak.snaktype == 'somevalue' then&lt;br /&gt;
        return i18n['somevalue']&lt;br /&gt;
    elseif snak.snaktype == 'novalue' then&lt;br /&gt;
        return i18n['novalue']&lt;br /&gt;
    elseif snak.snaktype == 'value' then&lt;br /&gt;
        return p.getDatavalue( snak, args.formatting)&lt;br /&gt;
    else&lt;br /&gt;
        return formatError( 'unknown-snak-type' )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatEntityId( entityId, formatting )&lt;br /&gt;
	local label = mw.wikibase.label( entityId )&lt;br /&gt;
    if not label then&lt;br /&gt;
    	label = entityId --TODO what if no links and label + fallback language?&lt;br /&gt;
    end&lt;br /&gt;
	if formatting == 'nolink' then&lt;br /&gt;
		return label&lt;br /&gt;
	else&lt;br /&gt;
	    local link = mw.wikibase.sitelink( entityId )&lt;br /&gt;
	    if link then&lt;br /&gt;
	            return '[[' .. link .. '|' .. label .. ']]'&lt;br /&gt;
	    else&lt;br /&gt;
	        return '[[wikidata:' ..  entityId .. '|' .. label .. ']]'&lt;br /&gt;
	    end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://baripedia.org/index.php?title=Module:Wikidata&amp;diff=7643&amp;oldid=prev</id>
		<title>Arthur : 1 version</title>
		<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Wikidata&amp;diff=7643&amp;oldid=prev"/>
		<updated>2014-01-13T22:01:30Z</updated>

		<summary type="html">&lt;p&gt;1 version&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 p = {}&lt;br /&gt;
&lt;br /&gt;
local formatDate = require( 'Module:Date')&lt;br /&gt;
local formatCoord = require( 'Module:Coordinates')&lt;br /&gt;
local Outils = require( 'Module:Outils' )&lt;br /&gt;
&lt;br /&gt;
local i18n = {&lt;br /&gt;
    [&amp;quot;errors&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;property-param-not-provided&amp;quot;] = &amp;quot;Paramètre propriété non renseigné.&amp;quot;,&lt;br /&gt;
        [&amp;quot;qualifier-param-not-provided&amp;quot;] = &amp;quot;Paramètre qualifier non renseigné.&amp;quot;,&lt;br /&gt;
        [&amp;quot;entity-not-found&amp;quot;] = &amp;quot;Entité non trouvée.&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-claim-type&amp;quot;] = &amp;quot;type d'affirmation inconnu.&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-snak-type&amp;quot;] = &amp;quot;Type de snak inconnu.&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-datavalue-type&amp;quot;] = &amp;quot;Type de donnée non reconnu.&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-entity-type&amp;quot;] = &amp;quot;Type d'entité non reconnu.&amp;quot;,&lt;br /&gt;
        [&amp;quot;unknown-value-module&amp;quot;] = &amp;quot;You must set both value-module and value-function parameters.&amp;quot;,&lt;br /&gt;
        [&amp;quot;value-module-not-found&amp;quot;] = &amp;quot;The module pointed by value-module not found.&amp;quot;,&lt;br /&gt;
        [&amp;quot;value-function-not-found&amp;quot;] = &amp;quot;The function pointed by value-function not found.&amp;quot;,&lt;br /&gt;
        [&amp;quot;ambigous&amp;quot;] = &amp;quot;Ambigu : plusieurs valeurs possibles&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;somevalue&amp;quot;] = &amp;quot;inconnu&amp;quot;,&lt;br /&gt;
    [&amp;quot;novalue&amp;quot;] = &amp;quot;pas applicable&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function getEntityFromId( id )&lt;br /&gt;
    return mw.wikibase.getEntity() --TODO support for getting other entities&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function formatError( key )&lt;br /&gt;
    return '&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;' .. i18n.errors[key] .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getClaims( args ) -- returns a table of the claims matching some conditions given in args&lt;br /&gt;
    if not args.property then&lt;br /&gt;
        return formatError( 'property-param-not-provided' )&lt;br /&gt;
    end&lt;br /&gt;
    --Get entity&lt;br /&gt;
    local entity = nil&lt;br /&gt;
    local property = string.lower(args.property)&lt;br /&gt;
    if args.entity and type( args.entity ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        entity = args.entity&lt;br /&gt;
    else&lt;br /&gt;
        entity = getEntityFromId( args.entityId )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if not entity or not entity.claims or not entity.claims[property] then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
	claims = entity.claims[property]&lt;br /&gt;
	-- mettre ~= '' pour le cas ou le paramètre est écrit mais laissé blanc ({{#invoke:formatStatements|property=pXX|targetvalue = xx}})&lt;br /&gt;
	&lt;br /&gt;
	if args.targetvalue and args.targetvalue ~= '' then &lt;br /&gt;
		claims = p.withtargetvalue(claims, args.targetvalue)&lt;br /&gt;
	end&lt;br /&gt;
	if not args.rank or args.rank == '' then -- par défaut, seul le meilleur rang est retenu&lt;br /&gt;
		args.rank = 'best'&lt;br /&gt;
	end&lt;br /&gt;
	if args.rank ~= 'all' then &lt;br /&gt;
		claims = p.withrank(claims, args.rank)&lt;br /&gt;
	end&lt;br /&gt;
	if args.qualifier and args.qualifier ~= '' then&lt;br /&gt;
		claims = p.withqualifier(claims, args.qualifier, args.qualifiervalue)&lt;br /&gt;
	end&lt;br /&gt;
	if args.source and arg.source ~= '' then &lt;br /&gt;
		claims = p.withsource(claims, args.source, args.sourceproperty)&lt;br /&gt;
	end&lt;br /&gt;
	if args.excludespecial == 'true' and args.excludespecial ~= ''then&lt;br /&gt;
		claims = p.excludespecial(claims)&lt;br /&gt;
	end&lt;br /&gt;
	if args.first == 'true' and args.first ~= '' then -- retourne une seule valeur, à laisser en dernier quand les éléminations sont faites&lt;br /&gt;
		claims = p.firstvalue(claims)&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.withtargetvalue(claims, targetvalue)&lt;br /&gt;
	local oldclaims = claims&lt;br /&gt;
    local claims = {}&lt;br /&gt;
    for i, statement in pairs(oldclaims) do&lt;br /&gt;
		if p.getRawvalue(statement.mainsnak) == targetvalue then&lt;br /&gt;
				table.insert(claims, statement)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.withrank(claims, rank)&lt;br /&gt;
	if rank == 'best' then&lt;br /&gt;
		return p.bestrank(claims)-- returns the set of items with the best rank available&lt;br /&gt;
	end	&lt;br /&gt;
	local oldclaims = claims&lt;br /&gt;
	local claims = {}&lt;br /&gt;
	for i, statement in pairs(oldclaims) do&lt;br /&gt;
		if statement.rank == rank then&lt;br /&gt;
				table.insert(claims, statement)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.bestrank(claims)&lt;br /&gt;
	local preferred = p.withrank(claims, 'preferred')&lt;br /&gt;
	if #preferred ~= 0 then&lt;br /&gt;
		return preferred&lt;br /&gt;
	end&lt;br /&gt;
	return p.withrank(claims, 'normal') -- ne prend pas le rang deprecated, vu qu'il est sensé être utilisé donnéex erronnées&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.withqualifier(claims, qualifier, qualifiervalue)&lt;br /&gt;
	local oldclaims = claims&lt;br /&gt;
    local claims = {}&lt;br /&gt;
    for i, statement in pairs(oldclaims) do&lt;br /&gt;
		if statement.qualifiers and statement.qualifiers[qualifier] then&lt;br /&gt;
			if qualifiervalue then&lt;br /&gt;
				for j, qualif in pairs(statement.qualifiers[qualifier]) do&lt;br /&gt;
					if p.getRawvalue(qualif) == qualifiervalue then &lt;br /&gt;
						table.insert(claims, statement)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(claims, statement) &lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.withsource(claims, source, sourceproperty)&lt;br /&gt;
	local oldclaims = claims&lt;br /&gt;
	local claims = {}&lt;br /&gt;
	if not sourceproperty then &lt;br /&gt;
		sourceproperty = 'p248' -- stated in &lt;br /&gt;
	end&lt;br /&gt;
	for i, statement in pairs(oldclaims) do&lt;br /&gt;
		if statement.references then&lt;br /&gt;
			for j, reference in pairs(statement.references) do&lt;br /&gt;
				for prop, content in pairs(reference.snaks) do&lt;br /&gt;
					if prop == sourceproperty then&lt;br /&gt;
						for l, m in pairs(content) do&lt;br /&gt;
							if p.getRawvalue(m) == source then&lt;br /&gt;
								table.insert(claims, statement)&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.excludespecial(claims)&lt;br /&gt;
	local oldclaims = claims&lt;br /&gt;
    local claims = {}&lt;br /&gt;
    for i, statement in pairs(oldclaims) do&lt;br /&gt;
    	if statement.mainsnak.snaktype == 'value' then&lt;br /&gt;
    		table.insert(claims, statement)&lt;br /&gt;
    	end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.firstvalue(claims)&lt;br /&gt;
	-- return just the first value (useful for images for instance)&lt;br /&gt;
	-- returns in priority claims with rank = 'preferred', else with rank == 'normal' do not return claims with rank == 'deprecated'&lt;br /&gt;
	for i, statement in pairs(claims) do -- choisit en priorité les données &amp;quot;preferred&amp;quot;&lt;br /&gt;
		if statement.rank == 'preferred' then&lt;br /&gt;
			return {statement}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for i, statement in pairs(claims) do&lt;br /&gt;
		if statement.rank == 'normal' then&lt;br /&gt;
			return {statement}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getRawvalue(snak)&lt;br /&gt;
	return p.getDatavalue(snak, 'raw')&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function p.getDatavalue(snak, formatting)&lt;br /&gt;
	if snak.snaktype ~= 'value' then &lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	datatype = snak.datavalue.type&lt;br /&gt;
	&lt;br /&gt;
	if datatype == 'wikibase-entityid' then&lt;br /&gt;
		if formatting == 'raw' then &lt;br /&gt;
			return &amp;quot;Q&amp;quot; .. tostring(snak.datavalue.value['numeric-id'])&lt;br /&gt;
		else&lt;br /&gt;
			return p.formatEntityId(&amp;quot;Q&amp;quot; .. tostring(snak.datavalue.value['numeric-id']), formatting)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	elseif datatype == 'string' then&lt;br /&gt;
		if formatting == 'weblink' then &lt;br /&gt;
			local link = require ('Module:Weblink')&lt;br /&gt;
			return link.makelink(snak.datavalue.value)&lt;br /&gt;
		else &lt;br /&gt;
			return snak.datavalue.value&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	elseif datatype == 'time' then -- format example: +00000001809-02-12T00:00:00Z&lt;br /&gt;
		return p.formatTimevalue(snak.datavalue.value, formatting)&lt;br /&gt;
&lt;br /&gt;
	elseif datatype == 'globecoordinate' then&lt;br /&gt;
		out = snak.datavalue.value&lt;br /&gt;
		if out.globe == 'http://www.wikidata.org/wiki/Q2' then -- by far the most common case&lt;br /&gt;
			out.globe = 'earth'&lt;br /&gt;
		else &lt;br /&gt;
			globetable = { Q2 = 'earth', Q111 = 'mars', Q405 = 'moon'}&lt;br /&gt;
			f = mw.getCurrentFrame() -- to use titleparts to get the relevant part of the value.globe, better method ?? &lt;br /&gt;
			out.globe = globetable[f:callParserFunction( '#titleparts', { snak.datavalue.value.globe, '', 2 } )] -- error handling needed&lt;br /&gt;
		end&lt;br /&gt;
		-- return out&lt;br /&gt;
		-- out utilisable avec module:coordinates mais pour l'instant faisons simple pour tests&lt;br /&gt;
		if formatting == 'latitude' then&lt;br /&gt;
			return snak.datavalue.value['latitude']&lt;br /&gt;
		elseif formatting == 'longitude' then&lt;br /&gt;
			return snak.datavalue.value['longitude']&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	elseif datatype == 'url' then&lt;br /&gt;
		return snak.datavalue.value['url']&lt;br /&gt;
	&lt;br /&gt;
	else return formatError( 'unknown-datavalue-type' )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function numOfClaims( claims )&lt;br /&gt;
	if type(claims) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
		return 0&lt;br /&gt;
	elseif claims == {} then &lt;br /&gt;
		return 0&lt;br /&gt;
	elseif claims[0] then -- table Wikibase non modifiée avec une clé 0&lt;br /&gt;
		return #claims + 1&lt;br /&gt;
	else&lt;br /&gt;
	return #claims&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.numOfClaims(frame)&lt;br /&gt;
    return numOfClaims( p.getClaims(frame.args) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getQualifier( frame )&lt;br /&gt;
	local args = Outils.extractArgs( frame )&lt;br /&gt;
	claims = p.getClaims( args )&lt;br /&gt;
	if args.qualifier then&lt;br /&gt;
		qualifier = args.qualifier&lt;br /&gt;
	else&lt;br /&gt;
		return formatError( 'qualifier-param-not-provided' )&lt;br /&gt;
	end&lt;br /&gt;
	if not claims or numOfClaims(claims) == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	else &lt;br /&gt;
		result = {}&lt;br /&gt;
		for i, j in pairs(claims) do&lt;br /&gt;
			for k, l in pairs( j.qualifiers[qualifier] ) do&lt;br /&gt;
				table.insert(result, p.getDatavalue(l, 'standard'))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return mw.text.listToText(result)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._formatStatements( args )--Format statement and concat them cleanly&lt;br /&gt;
	--If a value is already set, use it&lt;br /&gt;
	if args.value and args.value ~= '' then&lt;br /&gt;
		return args.value&lt;br /&gt;
	end&lt;br /&gt;
	local rawStatements = p.getClaims( args )&lt;br /&gt;
	local formattedStatements = {}&lt;br /&gt;
	if notrawStatements or numOfClaims(rawStatements) == 0 then&lt;br /&gt;
			return nil&lt;br /&gt;
	end&lt;br /&gt;
    for i, statement in pairs( rawStatements ) do&lt;br /&gt;
 		table.insert( formattedStatements, formatStatement( statement, args ))    end&lt;br /&gt;
    return mw.text.listToText( formattedStatements, args.separator, args.conjunction )&lt;br /&gt;
    -- .. '[[Category:Page utilisant des données de Wikidata/'  ..  string.upper(args.property) .. ']]'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatStatements( frame )&lt;br /&gt;
	local args = {}&lt;br /&gt;
	if frame == mw.getCurrentFrame() then&lt;br /&gt;
		args = frame:getParent().args -- paramètres du modèle appelant&lt;br /&gt;
		for k, v in pairs(frame.args) do&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		args = frame&lt;br /&gt;
	end&lt;br /&gt;
	return p._formatStatements( args )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function formatStatement( statement, args )&lt;br /&gt;
    if not statement.type or statement.type ~= 'statement' then&lt;br /&gt;
        return formatError( 'unknown-claim-type' )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    mainsnak = p.formatSnak( statement.mainsnak, args )&lt;br /&gt;
    &lt;br /&gt;
    if args.showqualifiers then -- to be improved&lt;br /&gt;
    	qualifier = args.showqualifiers &lt;br /&gt;
    	if statement.qualifiers and statement.qualifiers[qualifier] then&lt;br /&gt;
    		qualifvalues = {}&lt;br /&gt;
    		for i, j in pairs (statement.qualifiers[qualifier]) do&lt;br /&gt;
    			table.insert(qualifvalues, p.getDatavalue(j))&lt;br /&gt;
    		end&lt;br /&gt;
    		return mainsnak .. ' (' .. mw.text.listToText(qualifvalues) .. ')'&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    return mainsnak&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatSnak( snak, args )&lt;br /&gt;
    if snak.snaktype == 'somevalue' then&lt;br /&gt;
        return i18n['somevalue']&lt;br /&gt;
    elseif snak.snaktype == 'novalue' then&lt;br /&gt;
        return i18n['novalue']&lt;br /&gt;
    elseif snak.snaktype == 'value' then&lt;br /&gt;
        return p.getDatavalue( snak, args.formatting)&lt;br /&gt;
    else&lt;br /&gt;
        return formatError( 'unknown-snak-type' )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatEntityId( entityId, formatting )&lt;br /&gt;
	local label = mw.wikibase.label( entityId )&lt;br /&gt;
    if not label then&lt;br /&gt;
    	label = entityId --TODO what if no links and label + fallback language?&lt;br /&gt;
    end&lt;br /&gt;
	if formatting == 'nolink' then&lt;br /&gt;
		return label&lt;br /&gt;
	else&lt;br /&gt;
	    local link = mw.wikibase.sitelink( entityId )&lt;br /&gt;
	    if link then&lt;br /&gt;
	            return '[[' .. link .. '|' .. label .. ']]'&lt;br /&gt;
	    else&lt;br /&gt;
	        return '[[wikidata:' ..  entityId .. '|' .. label .. ']]'&lt;br /&gt;
	    end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatTimevalue(value, formatting) -- date managed in the dedicated Module:Wikidata/Dates&lt;br /&gt;
	if formatting == 'raw' then return value.time&lt;br /&gt;
	else&lt;br /&gt;
		local wdate = require('Module:Wikidata/Dates') &lt;br /&gt;
		return wdate.objecttotext(wdate.dateobject(value))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
</feed>