<?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%3ASuivi_des_biographies</id>
	<title>Module:Suivi des biographies - 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%3ASuivi_des_biographies"/>
	<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Suivi_des_biographies&amp;action=history"/>
	<updated>2026-05-04T18:24:24Z</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:Suivi_des_biographies&amp;diff=30878&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:Suivi_des_biographies&amp;diff=30878&amp;oldid=prev"/>
		<updated>2016-01-27T20:14:07Z</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;--[[&lt;br /&gt;
Module servant au modèle:Suivi des biographies.&lt;br /&gt;
&lt;br /&gt;
Ce module catégorise les biographies.&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- module wikidata&lt;br /&gt;
local wd = require 'Module:Wikidata'&lt;br /&gt;
&lt;br /&gt;
-- les données associées&lt;br /&gt;
local data = require &amp;quot;Module:Suivi des biographies/données&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
  fonction parcourant les &amp;quot;parents&amp;quot; de l'élément indiqué et retournant&lt;br /&gt;
  le premier élément présent dans la table 'association' durant ce processus&lt;br /&gt;
  (ou référencé par un 'identique à').&lt;br /&gt;
  Fait au maximum 'prof' itérations.&lt;br /&gt;
  Retourne 'nil' ou une table vide si rien n'est trouvé&lt;br /&gt;
]]--&lt;br /&gt;
function p.cherche_parents(el, prof)&lt;br /&gt;
	if (prof &amp;lt;= 0) then&lt;br /&gt;
		return nil  -- fin de récursion&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- si l'élément courant est dans la table on le retourne (récursion)&lt;br /&gt;
	if (data.association[el] ~= nil) then&lt;br /&gt;
		return el&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- si l'élément n'est pas une entity valide on quitte&lt;br /&gt;
	if not el:match( '^Q%d+$' ) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- on récupère les P460 (réputé identique à) au cas où&lt;br /&gt;
	local args = { [&amp;quot;property&amp;quot;] = &amp;quot;P460&amp;quot;, [&amp;quot;entity&amp;quot;] = el, link = &amp;quot;-&amp;quot;, displayformat = &amp;quot;raw&amp;quot; }&lt;br /&gt;
	local id = wd.stringTable(args)&lt;br /&gt;
	if (id ~= nil) then&lt;br /&gt;
		-- correspond ?&lt;br /&gt;
		for k, v in pairs(id) do&lt;br /&gt;
			if (data.association[v] ~= nil) then&lt;br /&gt;
				return v  -- trouvé, on quitte&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- si on arrive ici c'est qu'il n'a pas d'équivalence. On parcours&lt;br /&gt;
	-- les &amp;quot;sous-classe de&amp;quot; (P279) récursivement&lt;br /&gt;
	args = { [&amp;quot;property&amp;quot;] = &amp;quot;P279&amp;quot;, [&amp;quot;entity&amp;quot;] = el, link = &amp;quot;-&amp;quot;, displayformat = &amp;quot;raw&amp;quot; }&lt;br /&gt;
	id = wd.stringTable(args)&lt;br /&gt;
	if (id ~= nil) then&lt;br /&gt;
		-- pour chaque &amp;quot;sur-classe&amp;quot; on se ré-appelle&lt;br /&gt;
		local ret&lt;br /&gt;
		for k, v in pairs(id) do&lt;br /&gt;
			ret = p.cherche_parents(v, prof-1)&lt;br /&gt;
			if (ret ~= nil) then&lt;br /&gt;
				return ret&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- ici on n'a rien trouvé → nil&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
  fonction retournant une liste des éléments de la table 'p.association'&lt;br /&gt;
  trouvés à partir de la propriété 'property' pour l'entité 'entity' (ou l'article&lt;br /&gt;
  courant si 'entity' vaut 'nil')&lt;br /&gt;
]]--&lt;br /&gt;
function p.propriete_parente(property, entity)&lt;br /&gt;
	local args = { [&amp;quot;property&amp;quot;] = property, link = &amp;quot;-&amp;quot;, displayformat = &amp;quot;raw&amp;quot; }&lt;br /&gt;
	local out = {} -- table des résultats&lt;br /&gt;
	if (entity ~= nil) then&lt;br /&gt;
		args[&amp;quot;entity&amp;quot;] = entity&lt;br /&gt;
	end&lt;br /&gt;
	local res = wd.stringTable(args)&lt;br /&gt;
	&lt;br /&gt;
	-- si aucun résultat on retourne nil&lt;br /&gt;
	if (type(res) ~= &amp;quot;table&amp;quot;) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- on parcours tous les résultats à la recherche de ceux qui sont dans la&lt;br /&gt;
	-- liste 'association' ou ayant un élément fils de l'un d'entre eux&lt;br /&gt;
	for k, v in pairs(res) do&lt;br /&gt;
		-- si l'élément est présent on l'insert directement&lt;br /&gt;
		if (data.association[v] ~= nil) then&lt;br /&gt;
			table.insert(out, v)&lt;br /&gt;
		else&lt;br /&gt;
			-- on cherche &amp;quot;récursivement&amp;quot; chez les parents&lt;br /&gt;
			-- la valeur numérique est la profondeur max de recherche&lt;br /&gt;
			local d = p.cherche_parents(v, 4)&lt;br /&gt;
			if (d ~= nil) then&lt;br /&gt;
				table.insert(out, d)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return out	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
  fonction retournant true si la valeur 'value' est présente dans la liste des&lt;br /&gt;
  propriétés 'property' pour l'entité 'entity' (ou l'article courant si 'entity'&lt;br /&gt;
  vaut 'nil')&lt;br /&gt;
  retourne false sinon&lt;br /&gt;
]]--&lt;br /&gt;
function p.presence_propriete(property, value, entity)&lt;br /&gt;
	local args = { [&amp;quot;property&amp;quot;] = property, link = &amp;quot;-&amp;quot;, displayformat = &amp;quot;raw&amp;quot; }&lt;br /&gt;
	if (entity ~= nil) then&lt;br /&gt;
		args[&amp;quot;entity&amp;quot;] = entity&lt;br /&gt;
	end&lt;br /&gt;
	local res = wd.stringTable(args)&lt;br /&gt;
	&lt;br /&gt;
	-- pas de résultat, cette propriété WD est absente je présume&lt;br /&gt;
	if (res == nil) then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	-- on parcours les résultats pour voir si celle qu'on veut est là&lt;br /&gt;
	for k, v in pairs(res) do&lt;br /&gt;
		if (v == value) then&lt;br /&gt;
			return true  -- trouvé&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false -- pas trouvé&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- dédoublonne le contenu&lt;br /&gt;
function p.dedoublonne(tbl)&lt;br /&gt;
	if (type(tbl) ~= &amp;quot;table&amp;quot;) then&lt;br /&gt;
		return tbl&lt;br /&gt;
	end&lt;br /&gt;
	local out = {}&lt;br /&gt;
	local tmp = {}&lt;br /&gt;
	for k, v in ipairs(tbl) do&lt;br /&gt;
		if (tmp[v] == nil) then&lt;br /&gt;
			table.insert(out, v)&lt;br /&gt;
			tmp[v] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- conversion affichage d'une liste de 'association'&lt;br /&gt;
function p.affiche_elements(tbl)&lt;br /&gt;
	local ret = &amp;quot;&amp;quot;&lt;br /&gt;
	for k, v in ipairs(tbl) do&lt;br /&gt;
		ret = ret .. data.association[v][&amp;quot;texte&amp;quot;] .. &amp;quot; (&amp;quot; .. v .. &amp;quot;) &amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
  fonction qui retourne true si un élément wikidata existe pour l'article&lt;br /&gt;
  courant (ou l'élément 'entity' si différent de 'nil') et false sinon&lt;br /&gt;
  Note : le paramètre 'entity' n'a pas de sens, c'est juste pour du test. En&lt;br /&gt;
         effet si on a une 'entity' c'est que ça existe…&lt;br /&gt;
]]--&lt;br /&gt;
function p.a_wikidata(entity)&lt;br /&gt;
	if (entity == nil) then&lt;br /&gt;
		if (mw.wikibase.getEntity() ~= nil) then&lt;br /&gt;
			return true&lt;br /&gt;
		else&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	else -- cette partie disparaitra&lt;br /&gt;
		if (mw.wikibase.getEntity(entity) ~= nil) then&lt;br /&gt;
			return true&lt;br /&gt;
		else&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
  Fonction externe (appelable) qui catégorise l'article courant en fonction de WD&lt;br /&gt;
  Ne reçoit actuellement aucun paramètre&lt;br /&gt;
]]--&lt;br /&gt;
function p.categorise(frame)&lt;br /&gt;
	-- si on n'est pas dans l'espace encyclopédique on ne fait rien&lt;br /&gt;
	local titre = mw.title.getCurrentTitle()&lt;br /&gt;
	if ((titre == nil) or (titre.namespace ~= 0)) then&lt;br /&gt;
		return &amp;quot;&amp;quot;  -- on retourne un texte vide, donc l'action est inexistante&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- on regarde si la page a une entrée wikidata&lt;br /&gt;
	local awd = p.a_wikidata(nil)&lt;br /&gt;
	if (not awd) then&lt;br /&gt;
		-- on catégorise et on quitte&lt;br /&gt;
		return &amp;quot;[[Catégorie:Wikipédia:Article sans Wikidata appelant le modèle Suivi des biographies]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- on regarde si c'est un humain&lt;br /&gt;
	local hwd = p.presence_propriete(&amp;quot;P31&amp;quot;, &amp;quot;Q5&amp;quot;, nil)&lt;br /&gt;
	if (not hwd) then&lt;br /&gt;
		-- on catégorise et on quitte&lt;br /&gt;
		return &amp;quot;[[Catégorie:Wikipédia:Article non biographique appelant le modèle Suivi des biographies]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- là il faut aller plus loin et récupérer les métiers pour catégoriser&lt;br /&gt;
	local mwd = p.propriete_parente(&amp;quot;P106&amp;quot;, nil)&lt;br /&gt;
	-- si aucune réponse on le place dans &amp;quot;autres&amp;quot;&lt;br /&gt;
	if (mwd == nil) then&lt;br /&gt;
		-- on catégorise et on quitte&lt;br /&gt;
		return &amp;quot;[[Catégorie:Portail:Biographie/Articles liés/Général]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	-- on a (au moins) une réponse : on regarde ce que contient le 1er élément (le &amp;quot;principal&amp;quot;)&lt;br /&gt;
	--[[ note : on pourrait faire du multi-catégorie (ne pas utiliser de else/elseif alors&lt;br /&gt;
	              mais &amp;quot;cumuler&amp;quot; diverses catégories et retourner le tout à la fin)&lt;br /&gt;
	            on pourrait aussi faire des tests plus complexes du style si militaire et pas&lt;br /&gt;
	              homme politique alors faire ci sinon si cela faire ça…&lt;br /&gt;
	]]--  &lt;br /&gt;
	if (mwd[1] == &amp;quot;Q483501&amp;quot;) then&lt;br /&gt;
		return &amp;quot;[[Catégorie:Portail:Biographie/Articles liés/Culture et arts]]&amp;quot;&lt;br /&gt;
	elseif (mwd[1] == &amp;quot;Q47064&amp;quot;) then&lt;br /&gt;
		return &amp;quot;[[Catégorie:Portail:Biographie/Articles liés/Militaire]]&amp;quot;&lt;br /&gt;
	elseif (mwd[1] == &amp;quot;Q82955&amp;quot;) then&lt;br /&gt;
		return &amp;quot;[[Catégorie:Portail:Biographie/Articles liés/Politique]]&amp;quot;&lt;br /&gt;
	elseif (mwd[1] == &amp;quot;Q2066131&amp;quot;) then&lt;br /&gt;
		return &amp;quot;[[Catégorie:Portail:Biographie/Articles liés/Sport]]&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		-- catégorie par défaut&lt;br /&gt;
		return mwd[1]&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;quot;&amp;quot; -- on ne devrait pas arriver ici&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
  Fonction externe (appelable) qui catégorise l'article courant en fonction de WD&lt;br /&gt;
  Ne reçoit actuellement aucun paramètre&lt;br /&gt;
  version &amp;quot;2&amp;quot;, avec cumul de catégories&lt;br /&gt;
]]--&lt;br /&gt;
function p.categoriseBiographie(frame)&lt;br /&gt;
	-- si on n'est pas dans l'espace encyclopédique on ne fait rien&lt;br /&gt;
	local titre = mw.title.getCurrentTitle()&lt;br /&gt;
	if ((titre == nil) or (titre.namespace ~= 0)) then&lt;br /&gt;
		return &amp;quot;&amp;quot;  -- on retourne un texte vide, donc l'action est inexistante&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- on regarde si la page a une entrée wikidata&lt;br /&gt;
	local awd = p.a_wikidata(nil)&lt;br /&gt;
	if (not awd) then&lt;br /&gt;
		-- on catégorise et on quitte&lt;br /&gt;
		return data.cat_badwd&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- on regarde si c'est un humain&lt;br /&gt;
	local hwd = p.presence_propriete(&amp;quot;P31&amp;quot;, &amp;quot;Q5&amp;quot;, nil)&lt;br /&gt;
	if (not hwd) then&lt;br /&gt;
		-- on catégorise et on quitte&lt;br /&gt;
		return data.cat_badcall&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- pour cumuler les éléments à retourner (maintenant on sait que c'est une biographie)&lt;br /&gt;
	local out = data.cat_biographie&lt;br /&gt;
	&lt;br /&gt;
	-- là il faut aller plus loin et récupérer les métiers pour catégoriser&lt;br /&gt;
	local mwd = p.propriete_parente(&amp;quot;P106&amp;quot;, nil)&lt;br /&gt;
	-- si aucune réponse on le place dans &amp;quot;autres&amp;quot;&lt;br /&gt;
	if (mwd == nil) then&lt;br /&gt;
		-- on catégorise&lt;br /&gt;
                   -- traitement spécifique pour les personnages humains de la Bible&lt;br /&gt;
                     local hwd2 = p.presence_propriete(&amp;quot;P31&amp;quot;, &amp;quot;Q20643955&amp;quot;, nil)&lt;br /&gt;
	             if (hwd2) then&lt;br /&gt;
		          -- catégorisation dans Religion&lt;br /&gt;
                          return out .. data.cat_bible&lt;br /&gt;
	             else&lt;br /&gt;
                          return out .. data.cat_defaut&lt;br /&gt;
                     end&lt;br /&gt;
&lt;br /&gt;
	else&lt;br /&gt;
		-- on a (au moins) une réponse : on parcours chaque entrée et on cumule les catégories associées&lt;br /&gt;
		nb = 0&lt;br /&gt;
		for k, v in ipairs(mwd) do&lt;br /&gt;
			out = out .. data.association[v][&amp;quot;catégorie&amp;quot;]&lt;br /&gt;
			nb = nb + 1&lt;br /&gt;
		end&lt;br /&gt;
		-- si 0 catégorie insérée on met celle par défaut&lt;br /&gt;
		if (nb == 0) then&lt;br /&gt;
                     -- traitement spécifique pour les personnages humains de la Bible&lt;br /&gt;
                     local hwd3 = p.presence_propriete(&amp;quot;P31&amp;quot;, &amp;quot;Q20643955&amp;quot;, nil)&lt;br /&gt;
	             if (hwd3) then&lt;br /&gt;
		          -- catégorisation dans Religion&lt;br /&gt;
                          return out .. data.cat_bible&lt;br /&gt;
	             else&lt;br /&gt;
			out = out .. data.cat_defaut&lt;br /&gt;
                     end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
        -- ajout du cas particulier des personnages humains de la Bible&lt;br /&gt;
        local hwd4 = p.presence_propriete(&amp;quot;P31&amp;quot;, &amp;quot;Q20643955&amp;quot;, nil)&lt;br /&gt;
        if (hwd4) then&lt;br /&gt;
	   -- catégorisation dans Religion&lt;br /&gt;
           out = out .. data.cat_bible&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- on retourne le résultat final&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
</feed>