Module:Biota infobox/Wikidata explained

require('strict')

local p = local templateArgs = --local info = ----------------------------------AUTOMATIC TAXONOMY (module and wikidata versions) -----------function p.addModuleTaxonomy(frame, taxoboxTable, templateArgs) -- use invoke of module function

local moduleData = require("Module:Sandbox/trappist the monk/taxonomy") local tree_t = ; local taxon = templateArgs['taxon'] or templateArgs['parent'] tree_t = moduleData._crawl_tree(taxon, tree_t) --local output = '\n|-\n|' .. table.concat (tree_t, '
') -- dump the whole table local output = for k,v in pairs (tree_t) do local parts = mw.text.split(v, ": ", true) if string.sub(parts[1],1,3)

"" then local styled_rank = string.gsub(parts[1], "", "") local linked_taxon = string.gsub(parts[2], "  .*", "") output = output .. '\n|-\n|' .. styled_rank .. '||' .. linked_taxon end end return outputend--function p.WikidataTaxonomy(frame) -- get taxon name. This must be the Wikipedia page for the taxon (which is linked to the qid), e.g. Helix (gastropod) -- an alternative is to have a qid parameter local taxon = frame:getParent.args['taxon'] or frame.args['taxon'] --or "Felis" local qid = frame:getParent.args['qid'] or frame.args['qid'] if qid and not taxon then taxon = mw.wikibase.getSitelink(qid) -- only works if taxon name, page title and taxonomy template match end if not qid and not taxon then return "No valid taxon or qid." end templateArgs['taxon'] = taxon -- p.addWikidataTaxonomy gets the taxon from template parameters templateArgs['qid'] = qid -- contruct table comparing wikidata taxonomy and automated taxobox taxonomy local headerColor = "#ddeeff" local comment = '

Ancestral taxa taken from Wikidata.
Bold taxa show those that will be displayed in taxobox.

' local output = '

-\n' .. comment -- outer table .. '\n
- \n! colspan="5" class="section-header" style="text-align:center;background:' .. headerColor .. ';" ' .. '' .. "Ancestral taxa (from Wikidata)" .. '\n- style="text-align:center;background:' .. headerColor .. ';"' .. '\n! Rank Taxon Wikidata ID Parents at Wikdata' templateArgs['display_parents'] = "all" templateArgs['show_alt_parents'] = true templateArgs['select_parent'] = frame:getParent.args['select_parent'] or frame.args['select_parent'] output = output .. p._addWikidataTaxonomy(frame) if not (frame:getParent.args['suppress_autotaxonomy_comparison'] or frame.args['suppress_autotaxonomy_comparison']) then taxon = taxon:gsub("(.*)%s%(.*%)", "%1") -- remove disambiguation local automatedTaxonomyList = frame:callParserFunction ('#invoke',) automatedTaxonomyList = automatedTaxonomyList:gsub("Ancestral taxa", "Ancestral taxa
(from automated taxonomy templates)") output = output .. '\n
' -- close wikidata table .. '\n
' -- cell for automated taxonomy table .. automatedTaxonomyList .. '\n
' else output = output .. '\n|}' .. '\n|}' -- close wikidata table and outer table end return output endfunction p.getAnchor(frame) --return "Felis" --mw.title.getCurrentTitle.fragmentend

function p.addWikidataTaxonomy(frame, taxoboxTable, args) -- use invoke of module function templateArgs = args return p._addWikidataTaxonomy(frame) endfunction p._addWikidataTaxonomy(frame) -- use invoke of module function local qid local taxon = templateArgs['taxon'] or templateArgs['parent'] -- parent set for species and subspeciesbox if templateArgs['qid'] then qid = templateArgs['qid'] -- get qid from parameter else qid = mw.wikibase.getEntityIdForTitle (taxon) -- get qid from Wikipedia page on taxon end if not qid then return "The taxon name must be the Wikipedia page title. Alternatively provide the Wikidata qid (qid=)." end local rows = "" local row = "| rank || taxon" local count = 0 while qid and count < 100 do local taxonInfo = p.getTaxonInfo(qid) if not taxonInfo.rank then taxonInfo.rank = "unranked" end if not taxonInfo.taxon then taxonInfo.taxon = "no taxon name" end if p.showTaxonRow(taxonInfo.rank, taxonInfo.taxon, count) then -- display required rows local link = "" local italics = "" if taxonInfo.rank

"genus" then italics = "" end if taxonInfo.siteLink and taxonInfo.siteLink ~= taxonInfo.taxon then link = taxonInfo.siteLink .. "|" end row = "\n|-\n| " .. p.firstToUpper(taxonInfo.rank) .. "||" .. italics .. "" .. link .. taxonInfo.taxon .. "" .. italics if templateArgs['show_alt_parents'] and taxonInfo.altParents then row = row .. '||' .. qid .. '' .. '||[edit]' .. "||" .. taxonInfo.altParents end rows = row .. rows end if taxonInfo.parent then qid = taxonInfo.parent -- next parent else qid = nil -- no more parents so stop end count = count + 1 end

return rowsendlocal majorRanks = function p.showTaxonRow(rank, taxon, count) local majorRank = false for k, v in pairs(majorRanks) do if rank

v then majorRank = true -- flag major ranks for display majorRanks[k] = nil -- don't show this class again in hierarchy (e.g. for mammals, birds) end end if majorRank then return true end

if count < (tonumber(templateArgs['display_parents']) or 2) then return true end if templateArgs['display_parents']

"all" then return true end if templateArgs['display_parent_taxa'] then if string.find(templateArgs['display_parent_taxa'], taxon) then return true end end if templateArgs['display_parent_ranks'] then for v in mw.text.gsplit(templateArgs['display_parent_ranks'], ",", true) do if rank

mw.text.trim(v) then return true end end end return falseendfunction p.getTaxonInfo(qid)

--local rank, taxon, parent local taxonInfo =

-- local statements = mw.wikibase.getBestStatements(qid, 'P105')[1] --taxon rank if statements and statements.mainsnak and statements.mainsnak.datavalue then taxonInfo.rank = mw.wikibase.getLabel(statements.mainsnak.datavalue.value.id) end local statements = mw.wikibase.getBestStatements(qid, 'P225')[1] -- taxon name if statements and statements.mainsnak and statements.mainsnak.datavalue then taxonInfo.taxon = statements.mainsnak.datavalue.value end

local statements = mw.wikibase.getBestStatements(qid, 'P171') -- taxon parent local statement = statements[1] if statement and statement.mainsnak and statement.mainsnak.datavalue then taxonInfo.parent = statement.mainsnak.datavalue.value.id -- use first value end for index, statement in pairs(statements) do local id if statement and statement.mainsnak and statement.mainsnak.datavalue then id = statement.mainsnak.datavalue.value.id end if id then local label = mw.wikibase.getLabel(id) local parentString = label .. " (" .. id .. ")" if taxonInfo.altParents then taxonInfo.altParents = taxonInfo.altParents .. "
" .. parentString else taxonInfo.altParents = parentString end local selectParent = templateArgs['select_parent'] or "1" -- template parameters read as strings if selectParent

tostring(index) or selectParent

"last" then taxonInfo.parent = id end end end local label = mw.wikibase.getLabel(qid) if label then taxonInfo.label = label end local siteLink = mw.wikibase.getSitelink(qid) if siteLink then taxonInfo.siteLink = siteLink end return taxonInfo --rank, taxon, parent

endfunction p.firstToUpper(str) return (str:gsub("^%l", string.upper))end

return p