Open main menu
Home
Random
Donate
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Biota infobox/Wikidata
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
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, '<br />') -- 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], " <small>.*", "") output = output .. '\n|-\n|' .. styled_rank .. '||' .. linked_taxon end end return output end --[[ p.WikidataTaxonomy(frame) - entry point for Template:Biota infobox/Wikidata ]] 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 = '<p>Ancestral taxa taken from Wikidata. <br/>Bold taxa show those that will be displayed in taxobox.</p>' local output = '{|\n|-\n| style="vertical-align:top;" |' .. comment -- outer table .. '\n{| class="infobox biota" style="text-align: left; font-size:100%;"' -- wikidata ancestry table output = output .. '\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 !! colspan="2" | 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', {'Autotaxobox/sandbox', 'taxonomyList', taxon}) automatedTaxonomyList = automatedTaxonomyList:gsub("Ancestral taxa", "Ancestral taxa <br/>(from automated taxonomy templates)") output = output .. '\n|}' -- close wikidata table .. '\n| style="vertical-align:top;" |' -- cell for automated taxonomy table .. automatedTaxonomyList .. '\n|}' else output = output .. '\n|}' .. '\n|}' -- close wikidata table and outer table end return output end function p.getAnchor(frame) --return "Felis" --mw.title.getCurrentTitle().fragment end function p.addWikidataTaxonomy(frame, taxoboxTable, args) -- use invoke of module function templateArgs = args return p._addWikidataTaxonomy(frame) end function 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 .. '||[[:d:' .. qid .. '|' .. qid .. ']]' .. '||[[:d:' .. qid .. '#P171|[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 rows end local majorRanks = { "superkingdom", "kingdom", "phylum", "division", "class", "order", "family", "genus", "species" } 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 false end function p.getTaxonInfo(qid) --local rank, taxon, parent local taxonInfo = {} --[[ local item = mw.wikibase.getEntity(qid) -- this increments the expensive parser function count so instead of item:getBestStatements(property) use mw.wikibase.getBestStatements(qid, property) ]] 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 .. " ([[:d:" .. id .. "#P171|" .. id .. "]])" if taxonInfo.altParents then taxonInfo.altParents = taxonInfo.altParents .. "</br/>" .. 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 end function p.firstToUpper(str) return (str:gsub("^%l", string.upper)) end return p
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:Biota infobox/Wikidata/doc
(
edit
)