<?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%2FR%C3%A9cup</id>
	<title>Module:Wikidata/Récup - 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%2FR%C3%A9cup"/>
	<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Wikidata/R%C3%A9cup&amp;action=history"/>
	<updated>2026-05-13T01:59:56Z</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/R%C3%A9cup&amp;diff=30896&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/R%C3%A9cup&amp;diff=30896&amp;oldid=prev"/>
		<updated>2016-01-27T20:14:13Z</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;local p = {}&lt;br /&gt;
local datequalifiers = {'P585', 'P571', 'P580', 'P582'}&lt;br /&gt;
local tools = require &amp;quot;Module:Wikidata/Outils&amp;quot;&lt;br /&gt;
local datemod = require &amp;quot;Module:Date complexe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local function severalProperties(args)&lt;br /&gt;
	local newargs = args&lt;br /&gt;
	for i, j in pairs(args.property) do&lt;br /&gt;
		newargs.property = j&lt;br /&gt;
		local claims = p.getClaims(newargs)&lt;br /&gt;
		if claims then&lt;br /&gt;
			return claims&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function notSpecial(claim)&lt;br /&gt;
	return tools.isValue(claim.mainsnak)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hastargetvalue(claim, target)&lt;br /&gt;
	return tools.getMainId(claim) == target&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function bestranked(claims)&lt;br /&gt;
	if not claims then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local preferred, normal = {}, {}&lt;br /&gt;
	for i, j in pairs(claims) do&lt;br /&gt;
		if j.rank == 'preferred' then&lt;br /&gt;
			table.insert(preferred, j)&lt;br /&gt;
		elseif j.rank == 'normal' then&lt;br /&gt;
			table.insert(normal, j)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #preferred &amp;gt; 0 then&lt;br /&gt;
		return preferred&lt;br /&gt;
	else&lt;br /&gt;
		return normal&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function withrank(claims, target)&lt;br /&gt;
	if target == 'best' then&lt;br /&gt;
		return bestranked(claims)&lt;br /&gt;
	end&lt;br /&gt;
	local newclaims = {}&lt;br /&gt;
	for pos, claim in pairs(claims)  do&lt;br /&gt;
		if target == 'valid' then&lt;br /&gt;
			if claim.rank ~= 'deprecated' then&lt;br /&gt;
				table.insert(newclaims, claim)&lt;br /&gt;
			end&lt;br /&gt;
		elseif claim.rank == target then&lt;br /&gt;
			table.insert(newclaims, claim)&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 hasqualifier(claim, qualifier, qualifiervalues)&lt;br /&gt;
	local claimqualifs = claim.qualifiers&lt;br /&gt;
   	if (not claimqualifs) or not(claimqualifs[qualifier]) then&lt;br /&gt;
   		return false&lt;br /&gt;
   	end&lt;br /&gt;
&lt;br /&gt;
   	if (not qualifiervalues) or (qualifiervalues == {}) then&lt;br /&gt;
   		return true -- si aucune valeur spécifique n'est exigée, c'est bon&lt;br /&gt;
   	end&lt;br /&gt;
&lt;br /&gt;
   if type(qualifiervalues) == 'string' then&lt;br /&gt;
   		qualifiervalues = {qualifiervalues}&lt;br /&gt;
   	end&lt;br /&gt;
&lt;br /&gt;
   	for i, j in pairs(claim.qualifiers[qualifier]) do&lt;br /&gt;
   		local val = tools.getId(j)&lt;br /&gt;
   		for k, l in pairs(qualifiervalues) do&lt;br /&gt;
   			if l == val then&lt;br /&gt;
   				return true&lt;br /&gt;
   			end&lt;br /&gt;
   		end&lt;br /&gt;
   end&lt;br /&gt;
   return false&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
local function hassource(claim, targetsource, sourceproperty)&lt;br /&gt;
    sourceproperty = sourceproperty or 'P248'&lt;br /&gt;
	if not claim.references or not claim.references[sourceproperty] then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	if not targetsource then -- si toutes les sources sont valides, du moment qu'elles utilisent sourceproperty&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	for _, source in pairs(claim.references[sourceproperty]) do&lt;br /&gt;
		if tools.getId(source) == targetsource then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasdate(claim)&lt;br /&gt;
	local claimqualifs = claims.qualifiers&lt;br /&gt;
	if not claimqualifs then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	for _, qualif in pairs(claimqualifs) do&lt;br /&gt;
		if claimsqualifs[qualif] and claimsqualifs[qualif][1].snaktype == 'value' then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function haslink(claim, site, lang)&lt;br /&gt;
	if not(tools.isValue(claim.mainsnak)) then -- ne pas supprimer les valeurs spéciales, il y a une fonction dédiée pour ça&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	local id = tools.getMainId(claim)&lt;br /&gt;
	local link = tools.siteLink(id, site, lang)&lt;br /&gt;
	if link then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isinlanguage(snak, lang) -- ne fonctionne que pour les monolingualtext / étendre aux autres types en utilisant les qualifiers ?&lt;br /&gt;
	if tools.isSpecial(snak) then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	if snak.datavalue.type == 'monolingualtext' and snak.datavalue.value.language == lang then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function firstvals(claims, numval) -- retourn les numval premières valeurs de la table claims&lt;br /&gt;
    local numval = tonumber(numval) or 0 -- raise a error if numval is not a positive integer ?&lt;br /&gt;
    if not claims then&lt;br /&gt;
    	return nil&lt;br /&gt;
    end&lt;br /&gt;
    if #claims &amp;lt;= numval then&lt;br /&gt;
    	return claims&lt;br /&gt;
    end&lt;br /&gt;
    local newclaims = {}&lt;br /&gt;
    while #newclaims &amp;lt; numval do&lt;br /&gt;
    	table.insert(newclaims, claims[#newclaims + 1])&lt;br /&gt;
    end&lt;br /&gt;
    return newclaims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function valinQualif(claim, qualifs)&lt;br /&gt;
	local claimqualifs = claim.qualifiers&lt;br /&gt;
	if not claimqualifs then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	for i, qualif in pairs(qualifs) do&lt;br /&gt;
		local vals = claimqualifs[qualif]&lt;br /&gt;
		if vals and tools.isValue(vals[1]) then&lt;br /&gt;
			return tools.getValue(vals[1]).time&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function chronosort(claims, inverted)&lt;br /&gt;
	table.sort(&lt;br /&gt;
		claims,&lt;br /&gt;
		function(a,b)&lt;br /&gt;
			local timeA = valinQualif(a, datequalifiers) or ''&lt;br /&gt;
			local timeB = valinQualif(b, datequalifiers) or ''&lt;br /&gt;
			if inverted then&lt;br /&gt;
				return timeA &amp;lt; timeB -- marche sauf pour les dates &amp;lt; 10 000 av-JC utiliser datemod.before produit un bug&lt;br /&gt;
			else&lt;br /&gt;
				return timeB &amp;gt; timeA&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;
local function atDate(claim, mydate)&lt;br /&gt;
	local newclaims = {}&lt;br /&gt;
	local mindate = valinQualif(claim, {'P580'}) &lt;br /&gt;
	local maxdate = valinQualif(claim, {'P582'})&lt;br /&gt;
	if datemod.before(mydate, mindate) and datemod.before(maxdate, mydate) then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function excludevalues(claim, values)&lt;br /&gt;
	local id = tools.getMainId(claim)&lt;br /&gt;
	for i, j in pairs(values) do&lt;br /&gt;
		if j == id then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.sortclaims(claims, sorttype)&lt;br /&gt;
	if not claims then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&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;
&lt;br /&gt;
function p.filterClaims(claims, args) --retire de la tables de claims celles qui sont éliminés par un des filters de la table des filters&lt;br /&gt;
	&lt;br /&gt;
	local function filter(condition, filterfunction, funargs)&lt;br /&gt;
		if not args[condition] then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local newclaims = {}&lt;br /&gt;
		for i, claim in pairs(claims) do&lt;br /&gt;
			if filterfunction(claim, args[funargs[1]], args[funargs[2]], args[funargs[3]]) then&lt;br /&gt;
				table.insert(newclaims, claim)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for i, j in pairs(newclaims) do if type(j) == nil then return error(i) end end&lt;br /&gt;
		claims = newclaims&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	filter('targetvalue', hastargetvalue, {'targetvalue'} )&lt;br /&gt;
	filter('atdate', atDate, {'atdate'} )&lt;br /&gt;
	filter('qualifier', hasqualifier, {'qualifier', 'qualifiervalue'} )&lt;br /&gt;
	filter('source', hassource, {'source', 'sourceproperty'} )&lt;br /&gt;
	filter('withdate', hasdate, {} )&lt;br /&gt;
	filter('targetvalue', hastargetvalue, {'targetvalue'} )&lt;br /&gt;
	filter('excludespecial', notSpecial, {} )&lt;br /&gt;
	filter('excludevalues', excludevalues, {'excludevalues'})&lt;br /&gt;
	filter('withlink', haslink, {'withlink', 'linklang'} )&lt;br /&gt;
&lt;br /&gt;
	claims = withrank(claims, args.rank or 'best')&lt;br /&gt;
	if args.sorttype then&lt;br /&gt;
		claims = p.sortclaims(claims, args.sorttype)&lt;br /&gt;
	end&lt;br /&gt;
	if #claims == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if args.numval then&lt;br /&gt;
		claims = firstvals(claims, args.numval)&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.loadEntity(entity, cache)&lt;br /&gt;
	if type(entity) ~= 'table' then&lt;br /&gt;
		if cache then&lt;br /&gt;
			if not cache[entity] then &lt;br /&gt;
				cache[entity] = mw.wikibase.getEntity(entity)&lt;br /&gt;
				mw.log(&amp;quot;cached&amp;quot;)&lt;br /&gt;
     		end&lt;br /&gt;
			return cache[entity]&lt;br /&gt;
        else&lt;br /&gt;
        	return mw.wikibase.getEntity(entity)&lt;br /&gt;
        end&lt;br /&gt;
    else &lt;br /&gt;
    	return entity&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&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 args.claims then -- if claims have already been set, return them&lt;br /&gt;
		return args.claims&lt;br /&gt;
	end&lt;br /&gt;
	if not args.property then&lt;br /&gt;
	return error( 'property-param-not-provided' )&lt;br /&gt;
	end&lt;br /&gt;
	if type(args.property) == 'table' then&lt;br /&gt;
		return severalProperties(args)&lt;br /&gt;
	end&lt;br /&gt;
	--Get entity&lt;br /&gt;
	local entity = args.entity&lt;br /&gt;
 	entity = p.loadEntity(args.entity, args.cache)&lt;br /&gt;
    &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;
	if not entity.claims[property] then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local claims = entity.claims[property]&lt;br /&gt;
	if not claims then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return p.filterClaims(claims, 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/R%C3%A9cup&amp;diff=28313&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/R%C3%A9cup&amp;diff=28313&amp;oldid=prev"/>
		<updated>2015-11-09T20:49:26Z</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;local p = {}&lt;br /&gt;
local datequalifiers = {'P585', 'P571', 'P580', 'P582'}&lt;br /&gt;
local tools = require &amp;quot;Module:Wikidata/Outils&amp;quot;&lt;br /&gt;
local datemod = require &amp;quot;Module:Date complexe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local function severalProperties(args)&lt;br /&gt;
	local newargs = args&lt;br /&gt;
	for i, j in pairs(args.property) do&lt;br /&gt;
		newargs.property = j&lt;br /&gt;
		local claims = p.getClaims(newargs)&lt;br /&gt;
		if claims then&lt;br /&gt;
			return claims&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function notSpecial(claim)&lt;br /&gt;
	return tools.isValue(claim.mainsnak)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hastargetvalue(claim, target)&lt;br /&gt;
	return tools.getMainId(claim) == target&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function bestranked(claims)&lt;br /&gt;
	if not claims then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local preferred, normal = {}, {}&lt;br /&gt;
	for i, j in pairs(claims) do&lt;br /&gt;
		if j.rank == 'preferred' then&lt;br /&gt;
			table.insert(preferred, j)&lt;br /&gt;
		elseif j.rank == 'normal' then&lt;br /&gt;
			table.insert(normal, j)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #preferred &amp;gt; 0 then&lt;br /&gt;
		return preferred&lt;br /&gt;
	else&lt;br /&gt;
		return normal&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function withrank(claims, target)&lt;br /&gt;
	if target == 'best' then&lt;br /&gt;
		return bestranked(claims)&lt;br /&gt;
	end&lt;br /&gt;
	local newclaims = {}&lt;br /&gt;
	for pos, claim in pairs(claims)  do&lt;br /&gt;
		if target == 'valid' then&lt;br /&gt;
			if claim.rank ~= 'deprecated' then&lt;br /&gt;
				table.insert(newclaims, claim)&lt;br /&gt;
			end&lt;br /&gt;
		elseif claim.rank == target then&lt;br /&gt;
			table.insert(newclaims, claim)&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 hasqualifier(claim, qualifier, qualifiervalues)&lt;br /&gt;
	local claimqualifs = claim.qualifiers&lt;br /&gt;
   	if (not claimqualifs) or not(claimqualifs[qualifier]) then&lt;br /&gt;
   		return false&lt;br /&gt;
   	end&lt;br /&gt;
&lt;br /&gt;
   	if (not qualifiervalues) or (qualifiervalues == {}) then&lt;br /&gt;
   		return true -- si aucune valeur spécifique n'est exigée, c'est bon&lt;br /&gt;
   	end&lt;br /&gt;
&lt;br /&gt;
   if type(qualifiervalues) == 'string' then&lt;br /&gt;
   		qualifiervalues = {qualifiervalues}&lt;br /&gt;
   	end&lt;br /&gt;
&lt;br /&gt;
   	for i, j in pairs(claim.qualifiers[qualifier]) do&lt;br /&gt;
   		local val = tools.getId(j)&lt;br /&gt;
   		for k, l in pairs(qualifiervalues) do&lt;br /&gt;
   			if l == val then&lt;br /&gt;
   				return true&lt;br /&gt;
   			end&lt;br /&gt;
   		end&lt;br /&gt;
   end&lt;br /&gt;
   return false&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
local function hassource(claim, targetsource, sourceproperty)&lt;br /&gt;
    sourceproperty = sourceproperty or 'P248'&lt;br /&gt;
	if not claim.references or not claim.references[sourceproperty] then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	if not targetsource then -- si toutes les sources sont valides, du moment qu'elles utilisent sourceproperty&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	for _, source in pairs(claim.references[sourceproperty]) do&lt;br /&gt;
		if tools.getId(source) == targetsource then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasdate(claim)&lt;br /&gt;
	local claimqualifs = claims.qualifiers&lt;br /&gt;
	if not claimqualifs then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	for _, qualif in pairs(claimqualifs) do&lt;br /&gt;
		if claimsqualifs[qualif] and claimsqualifs[qualif][1].snaktype == 'value' then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function haslink(claim, site, lang)&lt;br /&gt;
	if not(tools.isValue(claim.mainsnak)) then -- ne pas supprimer les valeurs spéciales, il y a une fonction dédiée pour ça&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	local id = tools.getMainId(claim)&lt;br /&gt;
	local link = tools.siteLink(id, site, lang)&lt;br /&gt;
	if link then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isinlanguage(snak, lang) -- ne fonctionne que pour les monolingualtext / étendre aux autres types en utilisant les qualifiers ?&lt;br /&gt;
	if tools.isSpecial(snak) then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	if snak.datavalue.type == 'monolingualtext' and snak.datavalue.value.language == lang then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function firstvals(claims, numval) -- retourn les numval premières valeurs de la table claims&lt;br /&gt;
    local numval = tonumber(numval) or 0 -- raise a error if numval is not a positive integer ?&lt;br /&gt;
    if not claims then&lt;br /&gt;
    	return nil&lt;br /&gt;
    end&lt;br /&gt;
    if #claims &amp;lt;= numval then&lt;br /&gt;
    	return claims&lt;br /&gt;
    end&lt;br /&gt;
    local newclaims = {}&lt;br /&gt;
    while #newclaims &amp;lt; numval do&lt;br /&gt;
    	table.insert(newclaims, claims[#newclaims + 1])&lt;br /&gt;
    end&lt;br /&gt;
    return newclaims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function valinQualif(claim, qualifs)&lt;br /&gt;
	local claimqualifs = claim.qualifiers&lt;br /&gt;
	if not claimqualifs then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	for i, qualif in pairs(qualifs) do&lt;br /&gt;
		local vals = claimqualifs[qualif]&lt;br /&gt;
		if vals and tools.isValue(vals[1]) then&lt;br /&gt;
			return tools.getValue(vals[1]).time&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function chronosort(claims, inverted)&lt;br /&gt;
	table.sort(&lt;br /&gt;
		claims,&lt;br /&gt;
		function(a,b)&lt;br /&gt;
			local timeA = valinQualif(a, datequalifiers) or ''&lt;br /&gt;
			local timeB = valinQualif(b, datequalifiers) or ''&lt;br /&gt;
			if inverted then&lt;br /&gt;
				return timeA &amp;lt; timeB -- marche sauf pour les dates &amp;lt; 10 000 av-JC utiliser datemod.before produit un bug&lt;br /&gt;
			else&lt;br /&gt;
				return timeB &amp;gt; timeA&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;
local function atDate(claim, mydate)&lt;br /&gt;
	local newclaims = {}&lt;br /&gt;
	local mindate = valinQualif(claim, {'P580'}) &lt;br /&gt;
	local maxdate = valinQualif(claim, {'P582'})&lt;br /&gt;
	if datemod.before(mydate, mindate) and datemod.before(maxdate, mydate) then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function excludevalues(claim, values)&lt;br /&gt;
	local id = tools.getMainId(claim)&lt;br /&gt;
	for i, j in pairs(values) do&lt;br /&gt;
		if j == id then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.sortclaims(claims, sorttype)&lt;br /&gt;
	if not claims then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&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;
&lt;br /&gt;
function p.filterClaims(claims, args) --retire de la tables de claims celles qui sont éliminés par un des filters de la table des filters&lt;br /&gt;
	&lt;br /&gt;
	local function filter(condition, filterfunction, funargs)&lt;br /&gt;
		if not args[condition] then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local newclaims = {}&lt;br /&gt;
		for i, claim in pairs(claims) do&lt;br /&gt;
			if filterfunction(claim, args[funargs[1]], args[funargs[2]], args[funargs[3]]) then&lt;br /&gt;
				table.insert(newclaims, claim)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for i, j in pairs(newclaims) do if type(j) == nil then return error(i) end end&lt;br /&gt;
		claims = newclaims&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	filter('targetvalue', hastargetvalue, {'targetvalue'} )&lt;br /&gt;
	filter('atdate', atDate, {'atdate'} )&lt;br /&gt;
	filter('qualifier', hasqualifier, {'qualifier', 'qualifiervalue'} )&lt;br /&gt;
	filter('source', hassource, {'source', 'sourceproperty'} )&lt;br /&gt;
	filter('withdate', hasdate, {} )&lt;br /&gt;
	filter('targetvalue', hastargetvalue, {'targetvalue'} )&lt;br /&gt;
	filter('excludespecial', notSpecial, {} )&lt;br /&gt;
	filter('excludevalues', excludevalues, {'excludevalues'})&lt;br /&gt;
	filter('withlink', haslink, {'withlink', 'linklang'} )&lt;br /&gt;
&lt;br /&gt;
	claims = withrank(claims, args.rank or 'best')&lt;br /&gt;
	if args.sorttype then&lt;br /&gt;
		claims = p.sortclaims(claims, args.sorttype)&lt;br /&gt;
	end&lt;br /&gt;
	if #claims == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if args.numval then&lt;br /&gt;
		claims = firstvals(claims, args.numval)&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
	&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 args.claims then -- if claims have already been set, return them&lt;br /&gt;
		return args.claims&lt;br /&gt;
	end&lt;br /&gt;
	if not args.property then&lt;br /&gt;
	return error( 'property-param-not-provided' )&lt;br /&gt;
	end&lt;br /&gt;
	if type(args.property) == 'table' then&lt;br /&gt;
		return severalProperties(args)&lt;br /&gt;
	end&lt;br /&gt;
	--Get entity&lt;br /&gt;
	local entity = args.entity&lt;br /&gt;
 	if type(entity) ~= 'table' then&lt;br /&gt;
        entity = mw.wikibase.getEntityObject( 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;
	if not entity.claims[property] then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local claims = entity.claims[property]&lt;br /&gt;
	if not claims then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return p.filterClaims(claims, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
</feed>