<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ABiota_infobox%2FWikidata</id>
	<title>Module:Biota infobox/Wikidata - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ABiota_infobox%2FWikidata"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Biota_infobox/Wikidata&amp;action=history"/>
	<updated>2026-04-21T07:49:18Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Biota_infobox/Wikidata&amp;diff=135379&amp;oldid=prev</id>
		<title>imported&gt;WOSlinker: use require(&#039;strict&#039;) instead of require(&#039;Module:No globals&#039;)</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Biota_infobox/Wikidata&amp;diff=135379&amp;oldid=prev"/>
		<updated>2022-10-22T09:17:23Z</updated>

		<summary type="html">&lt;p&gt;use require(&amp;#039;strict&amp;#039;) instead of require(&amp;#039;Module:No globals&amp;#039;)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local templateArgs = {}&lt;br /&gt;
--local info = {}   &lt;br /&gt;
----------------------------------AUTOMATIC TAXONOMY (module and wikidata versions) -----------&lt;br /&gt;
function p.addModuleTaxonomy(frame, taxoboxTable, templateArgs) -- use invoke of module function&lt;br /&gt;
&lt;br /&gt;
	local moduleData = require(&amp;quot;Module:Sandbox/trappist the monk/taxonomy&amp;quot;)&lt;br /&gt;
	local tree_t = {};&lt;br /&gt;
	local taxon = templateArgs[&amp;#039;taxon&amp;#039;]  or templateArgs[&amp;#039;parent&amp;#039;] &lt;br /&gt;
	&lt;br /&gt;
	tree_t = moduleData._crawl_tree(taxon, tree_t)	&lt;br /&gt;
	--local output = &amp;#039;\n|-\n|&amp;#039; .. table.concat (tree_t, &amp;#039;&amp;lt;br /&amp;gt;&amp;#039;)  -- dump the whole table&lt;br /&gt;
	local output = &amp;#039;&amp;#039; &lt;br /&gt;
	for k,v in pairs (tree_t) do&lt;br /&gt;
    	local parts = mw.text.split(v, &amp;quot;: &amp;quot;, true)&lt;br /&gt;
    	&lt;br /&gt;
    	if string.sub(parts[1],1,3) == &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot; then&lt;br /&gt;
			local styled_rank  = string.gsub(parts[1], &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
			local linked_taxon = string.gsub(parts[2], &amp;quot;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;small&amp;gt;.*&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	    	output = output ..	&amp;#039;\n|-\n|&amp;#039; .. styled_rank .. &amp;#039;||&amp;#039; .. linked_taxon &lt;br /&gt;
	    	end&lt;br /&gt;
	end&lt;br /&gt;
	return output&lt;br /&gt;
end&lt;br /&gt;
--[[ p.WikidataTaxonomy(frame)&lt;br /&gt;
      - entry point for Template:Biota infobox/Wikidata  &lt;br /&gt;
]]&lt;br /&gt;
function p.WikidataTaxonomy(frame)&lt;br /&gt;
	&lt;br /&gt;
	-- get taxon name. This must be the Wikipedia page for the taxon (which is linked to the qid), e.g. Helix (gastropod)&lt;br /&gt;
	-- an alternative is to have a qid parameter&lt;br /&gt;
	local taxon = frame:getParent().args[&amp;#039;taxon&amp;#039;]  or frame.args[&amp;#039;taxon&amp;#039;]  --or &amp;quot;Felis&amp;quot;  &lt;br /&gt;
	local qid = frame:getParent().args[&amp;#039;qid&amp;#039;]  or frame.args[&amp;#039;qid&amp;#039;]&lt;br /&gt;
	&lt;br /&gt;
	if qid and not taxon then&lt;br /&gt;
		taxon = mw.wikibase.getSitelink(qid)  -- only works if taxon name, page title and taxonomy template match&lt;br /&gt;
	end&lt;br /&gt;
	if not qid and not taxon then&lt;br /&gt;
		return &amp;quot;No valid taxon or qid.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	templateArgs[&amp;#039;taxon&amp;#039;] = taxon -- p.addWikidataTaxonomy() gets the taxon from template parameters&lt;br /&gt;
	templateArgs[&amp;#039;qid&amp;#039;] = qid&lt;br /&gt;
	&lt;br /&gt;
	-- contruct table comparing wikidata taxonomy and automated taxobox taxonomy&lt;br /&gt;
	local headerColor = &amp;quot;#ddeeff&amp;quot;&lt;br /&gt;
	local comment = &amp;#039;&amp;lt;p&amp;gt;Ancestral taxa taken from Wikidata. &amp;lt;br/&amp;gt;Bold taxa show those that will be displayed in taxobox.&amp;lt;/p&amp;gt;&amp;#039;&lt;br /&gt;
	local output =   &amp;#039;{|\n|-\n| style=&amp;quot;vertical-align:top;&amp;quot; |&amp;#039; .. comment                                                                      -- outer table&lt;br /&gt;
	                 .. &amp;#039;\n{| class=&amp;quot;infobox biota&amp;quot; style=&amp;quot;text-align: left; font-size:100%;&amp;quot;&amp;#039;  -- wikidata ancestry table&lt;br /&gt;
	                 &lt;br /&gt;
	output = output .. &amp;#039;\n|- \n! colspan=&amp;quot;5&amp;quot; class=&amp;quot;section-header&amp;quot; style=&amp;quot;text-align:center;background:&amp;#039; ..  headerColor .. &amp;#039;;&amp;quot; &amp;#039;&lt;br /&gt;
               .. &amp;#039;|&amp;#039; .. &amp;quot;Ancestral taxa (from Wikidata)&amp;quot;&lt;br /&gt;
               .. &amp;#039;\n|- style=&amp;quot;text-align:center;background:&amp;#039; ..  headerColor .. &amp;#039;;&amp;quot;&amp;#039; &lt;br /&gt;
               .. &amp;#039;\n! Rank !! Taxon !! colspan=&amp;quot;2&amp;quot; | Wikidata ID !! Parents at Wikdata&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	templateArgs[&amp;#039;display_parents&amp;#039;] = &amp;quot;all&amp;quot;&lt;br /&gt;
	templateArgs[&amp;#039;show_alt_parents&amp;#039;] = true&lt;br /&gt;
	templateArgs[&amp;#039;select_parent&amp;#039;] =  frame:getParent().args[&amp;#039;select_parent&amp;#039;]  or frame.args[&amp;#039;select_parent&amp;#039;] &lt;br /&gt;
	output = output .. p._addWikidataTaxonomy(frame)&lt;br /&gt;
	&lt;br /&gt;
	if  not (frame:getParent().args[&amp;#039;suppress_autotaxonomy_comparison&amp;#039;]  or frame.args[&amp;#039;suppress_autotaxonomy_comparison&amp;#039;])  then&lt;br /&gt;
		taxon = taxon:gsub(&amp;quot;(.*)%s%(.*%)&amp;quot;, &amp;quot;%1&amp;quot;) -- remove disambiguation&lt;br /&gt;
		local automatedTaxonomyList = frame:callParserFunction (&amp;#039;#invoke&amp;#039;, {&amp;#039;Autotaxobox/sandbox&amp;#039;, &amp;#039;taxonomyList&amp;#039;, taxon})&lt;br /&gt;
		automatedTaxonomyList = automatedTaxonomyList:gsub(&amp;quot;Ancestral taxa&amp;quot;, &amp;quot;Ancestral taxa &amp;lt;br/&amp;gt;(from automated taxonomy templates)&amp;quot;)&lt;br /&gt;
		output = output .. &amp;#039;\n|}&amp;#039;             -- close wikidata table&lt;br /&gt;
		                .. &amp;#039;\n| style=&amp;quot;vertical-align:top;&amp;quot; |&amp;#039;             -- cell for automated taxonomy table&lt;br /&gt;
		                .. automatedTaxonomyList&lt;br /&gt;
		                .. &amp;#039;\n|}&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		output = output .. &amp;#039;\n|}&amp;#039;  .. &amp;#039;\n|}&amp;#039;           -- close wikidata table and outer table&lt;br /&gt;
	end&lt;br /&gt;
	return output&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
function p.getAnchor(frame)&lt;br /&gt;
	--return &amp;quot;Felis&amp;quot; --mw.title.getCurrentTitle().fragment&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.addWikidataTaxonomy(frame, taxoboxTable, args) -- use invoke of module function&lt;br /&gt;
    templateArgs = args&lt;br /&gt;
    return  p._addWikidataTaxonomy(frame) &lt;br /&gt;
end&lt;br /&gt;
function p._addWikidataTaxonomy(frame) -- use invoke of module function&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    local qid&lt;br /&gt;
    local taxon = templateArgs[&amp;#039;taxon&amp;#039;] or templateArgs[&amp;#039;parent&amp;#039;]  -- parent set for species and subspeciesbox&lt;br /&gt;
    if templateArgs[&amp;#039;qid&amp;#039;] then&lt;br /&gt;
    	qid = templateArgs[&amp;#039;qid&amp;#039;]                        --  get qid from parameter&lt;br /&gt;
    else&lt;br /&gt;
    	qid = mw.wikibase.getEntityIdForTitle (taxon)   -- get qid from Wikipedia page on taxon&lt;br /&gt;
    end&lt;br /&gt;
    if not qid then &lt;br /&gt;
    	return &amp;quot;The taxon name must be the Wikipedia page title. Alternatively provide the Wikidata qid (qid=).&amp;quot; &lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local rows = &amp;quot;&amp;quot;&lt;br /&gt;
    local row = &amp;quot;| rank || taxon&amp;quot;&lt;br /&gt;
    local count = 0&lt;br /&gt;
    while qid and count &amp;lt; 100 do&lt;br /&gt;
	    local taxonInfo = p.getTaxonInfo(qid)&lt;br /&gt;
	    if not taxonInfo.rank then taxonInfo.rank = &amp;quot;unranked&amp;quot; end&lt;br /&gt;
	    if not taxonInfo.taxon then taxonInfo.taxon = &amp;quot;no taxon name&amp;quot; end&lt;br /&gt;
	    &lt;br /&gt;
        if p.showTaxonRow(taxonInfo.rank, taxonInfo.taxon, count) then  -- display required rows&lt;br /&gt;
        	local link = &amp;quot;&amp;quot;&lt;br /&gt;
        	local italics = &amp;quot;&amp;quot;&lt;br /&gt;
        	if taxonInfo.rank == &amp;quot;genus&amp;quot; then italics = &amp;quot;&amp;#039;&amp;#039;&amp;quot; end&lt;br /&gt;
        	if taxonInfo.siteLink and taxonInfo.siteLink ~= taxonInfo.taxon then link = taxonInfo.siteLink .. &amp;quot;|&amp;quot; end&lt;br /&gt;
	    	row = &amp;quot;\n|-\n| &amp;quot; .. p.firstToUpper(taxonInfo.rank) &lt;br /&gt;
	    	                 .. &amp;quot;||&amp;quot; .. italics .. &amp;quot;[[&amp;quot; .. link .. taxonInfo.taxon .. &amp;quot;]]&amp;quot; .. italics&lt;br /&gt;
	    	                 &lt;br /&gt;
	    	if templateArgs[&amp;#039;show_alt_parents&amp;#039;] and taxonInfo.altParents then  &lt;br /&gt;
	    		row = row   .. &amp;#039;||[[:d:&amp;#039; .. qid .. &amp;#039;|&amp;#039; .. qid .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	    		            .. &amp;#039;||[[:d:&amp;#039; .. qid .. &amp;#039;#P171|[edit]]]&amp;#039;&lt;br /&gt;
	    		            .. &amp;quot;||&amp;quot; .. taxonInfo.altParents &lt;br /&gt;
	        end&lt;br /&gt;
	        rows = row   .. rows&lt;br /&gt;
	    end&lt;br /&gt;
	    &lt;br /&gt;
	    if taxonInfo.parent then &lt;br /&gt;
	    	qid = taxonInfo.parent  -- next parent&lt;br /&gt;
	    else &lt;br /&gt;
	    	qid = nil  -- no more parents so stop&lt;br /&gt;
	    end&lt;br /&gt;
	    count = count + 1&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return rows&lt;br /&gt;
end&lt;br /&gt;
local majorRanks = { &amp;quot;superkingdom&amp;quot;, &amp;quot;kingdom&amp;quot;, &amp;quot;phylum&amp;quot;, &amp;quot;division&amp;quot;, &amp;quot;class&amp;quot;, &amp;quot;order&amp;quot;, &amp;quot;family&amp;quot;, &amp;quot;genus&amp;quot;, &amp;quot;species&amp;quot; }&lt;br /&gt;
function p.showTaxonRow(rank, taxon, count)&lt;br /&gt;
		&lt;br /&gt;
	local majorRank = false&lt;br /&gt;
    for k, v in pairs(majorRanks) do&lt;br /&gt;
    	if rank == v then &lt;br /&gt;
    		majorRank = true            -- flag major ranks for display&lt;br /&gt;
    		majorRanks[k] = nil         -- don&amp;#039;t show this class again in hierarchy (e.g. for mammals, birds)&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    if majorRank then return true end&lt;br /&gt;
&lt;br /&gt;
	if count &amp;lt; (tonumber(templateArgs[&amp;#039;display_parents&amp;#039;]) or 2) then return true end  &lt;br /&gt;
	if templateArgs[&amp;#039;display_parents&amp;#039;] == &amp;quot;all&amp;quot; then return true end&lt;br /&gt;
	&lt;br /&gt;
	if templateArgs[&amp;#039;display_parent_taxa&amp;#039;] then&lt;br /&gt;
		if string.find(templateArgs[&amp;#039;display_parent_taxa&amp;#039;], taxon) then return true end&lt;br /&gt;
	end&lt;br /&gt;
	if templateArgs[&amp;#039;display_parent_ranks&amp;#039;]  then&lt;br /&gt;
		for v in mw.text.gsplit(templateArgs[&amp;#039;display_parent_ranks&amp;#039;], &amp;quot;,&amp;quot;, true) do&lt;br /&gt;
			if rank == mw.text.trim(v) then return true end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
function p.getTaxonInfo(qid)&lt;br /&gt;
&lt;br /&gt;
    --local rank, taxon, parent&lt;br /&gt;
    local taxonInfo = {}&lt;br /&gt;
&lt;br /&gt;
    --[[&lt;br /&gt;
         local item = mw.wikibase.getEntity(qid)  -- this increments the expensive parser function count&lt;br /&gt;
         so instead of &lt;br /&gt;
            item:getBestStatements(property)&lt;br /&gt;
         use &lt;br /&gt;
        	mw.wikibase.getBestStatements(qid, property)&lt;br /&gt;
    ]]&lt;br /&gt;
    local statements = mw.wikibase.getBestStatements(qid, &amp;#039;P105&amp;#039;)[1]                           --taxon rank&lt;br /&gt;
    if statements and statements.mainsnak and statements.mainsnak.datavalue then&lt;br /&gt;
    	taxonInfo.rank = mw.wikibase.getLabel(statements.mainsnak.datavalue.value.id)&lt;br /&gt;
    end&lt;br /&gt;
    local statements = mw.wikibase.getBestStatements(qid, &amp;#039;P225&amp;#039;)[1]                           -- taxon name&lt;br /&gt;
    if statements and statements.mainsnak and statements.mainsnak.datavalue then&lt;br /&gt;
    	taxonInfo.taxon = statements.mainsnak.datavalue.value&lt;br /&gt;
    end   &lt;br /&gt;
&lt;br /&gt;
    local statements = mw.wikibase.getBestStatements(qid, &amp;#039;P171&amp;#039;)                           -- taxon parent&lt;br /&gt;
    local statement = statements[1]&lt;br /&gt;
    if statement and statement.mainsnak and statement.mainsnak.datavalue then&lt;br /&gt;
    	taxonInfo.parent = statement.mainsnak.datavalue.value.id                    -- use first value&lt;br /&gt;
    end   &lt;br /&gt;
    &lt;br /&gt;
    for index, statement in pairs( statements ) do&lt;br /&gt;
    	local id&lt;br /&gt;
    	if statement and statement.mainsnak and statement.mainsnak.datavalue then&lt;br /&gt;
    		id = statement.mainsnak.datavalue.value.id&lt;br /&gt;
    	end&lt;br /&gt;
    	if id then&lt;br /&gt;
    		local label = mw.wikibase.getLabel(id)&lt;br /&gt;
    		local parentString = label .. &amp;quot;&amp;amp;nbsp;([[:d:&amp;quot; .. id .. &amp;quot;#P171|&amp;quot; .. id .. &amp;quot;]])&amp;quot;&lt;br /&gt;
	    	if taxonInfo.altParents then&lt;br /&gt;
	    	    taxonInfo.altParents = taxonInfo.altParents .. &amp;quot;&amp;lt;/br/&amp;gt;&amp;quot; .. parentString&lt;br /&gt;
	    	else&lt;br /&gt;
	    		taxonInfo.altParents = parentString&lt;br /&gt;
	    	end&lt;br /&gt;
	    	local selectParent = templateArgs[&amp;#039;select_parent&amp;#039;] or &amp;quot;1&amp;quot;         -- template parameters read as strings&lt;br /&gt;
	    	if selectParent == tostring(index) or selectParent == &amp;quot;last&amp;quot; then&lt;br /&gt;
	    		taxonInfo.parent = id  &lt;br /&gt;
	    	end&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local label = mw.wikibase.getLabel(qid)&lt;br /&gt;
    if label then taxonInfo.label = label end&lt;br /&gt;
    &lt;br /&gt;
    local siteLink = mw.wikibase.getSitelink(qid) &lt;br /&gt;
    if siteLink then taxonInfo.siteLink = siteLink end&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    return taxonInfo --rank, taxon, parent&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
function p.firstToUpper(str)&lt;br /&gt;
    return (str:gsub(&amp;quot;^%l&amp;quot;, string.upper))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;WOSlinker</name></author>
	</entry>
</feed>