Modul:Taksoboks: Forskjell mellom sideversjoner

Fra wikisida.no
Hopp til navigering Hopp til søk
Ingen redigeringsforklaring
m 18 sideversjoner ble importert
 
(15 mellomliggende versjoner av 3 brukere er ikke vist)
Linje 1: Linje 1:
--[[ Modul:Taksoboks
Denne modulen skal i framtiden kalles fra Mal:Taksoboks. Den skal inneholde nødvendige funksjoner og data som kan fjerne behovet for de mange ulike taksoboksene. Til og begynne med kan den kalles fra de ulike taksoboksene med relevante funksjoner for å utføre samme oppgave. Etterhvert kan kanskje de mange taksoboksene fases ut og fjernes med bot
]]
local p = {}
local p = {}


--[[
the module should give priority to manually added parameters, 30–349 are parameters for scientific classification
]]
--[[
--[[
Taksoboksens seksjon som viser biologisk klassifisering har en etikett i venstre kolonne og navnet på et nivå i hierarkiet i høyre kolonne. De forskjellige nivåenes etiketter baseres på de latinske navnene i tabellen translations. De oversatte etikettene på nivåene svarer til Petter Bøckmans Bruker:Petter_Bøckman/fornorske_rang.
Taksoboksens seksjon som viser biologisk klassifisering har en etikett i venstre kolonne og navnet på et nivå i hierarkiet i høyre kolonne. De forskjellige nivåenes etiketter baseres på de latinske navnene i tabellen translations. De oversatte etikettene på nivåene svarer til Petter Bøckmans Bruker:Petter_Bøckman/fornorske_rang.
Linje 18: Linje 10:
      
      
     local translations = {
     local translations = {
    ['superdomain'] = 'Overdomene',
['superdomain'] = 'Overdomene', ['domain'] = 'Domene', ['superregnum'] = 'Overrike', ['regnum'] = 'Rike', ['subregnum'] = 'Underrike', ['superdivisio'] = 'Overdivisjon', ['superphylum'] = 'Overrekke', ['divisio'] = 'Divisjon', ['phylum'] = 'Rekke', ['zoodivisio'] = 'Divisjon', ['subdivisio'] = 'Underdivisjon', ['subphylum'] = 'Underrekke', ['infraphylum'] = 'Infrarekke', ['microphylum'] = 'Mikrorekke', ['nanophylum'] = 'Nanorekke', ['superclassis'] = 'Overklasse', ['classis'] = 'Klasse', ['subclassis'] = 'Underklasse', ['infraclassis'] = 'Infraklasse', ['magnordo'] = 'Hyperorden', ['superordo'] = 'Overorden', ['ordo'] = 'Orden', ['subordo'] = 'Underorden', ['infraordo'] = 'Infraorden', ['parvordo'] = 'Parvorden', ['superfamilia'] = 'Overfamilie', ['familia'] = 'Familie', ['subfamilia'] = 'Underfamilie', ['supertribus'] = 'Overtribus', ['tribus'] = 'Tribus', ['subtribus'] = 'Undertribus', ['alliance'] = 'Allianse', ['genus'] = 'Slekt', ['subgenus'] = 'Underslekt', ['sectio'] = 'Seksjon', ['zoosectio'] = 'Seksjon', ['subsectio'] = 'Underseksjon', ['zoosubsectio'] = 'Underseksjon', ['series'] = 'Serien', ['subseries'] = 'Underserie', ['species_group'] = 'Artsgruppe', ['species_subgroup'] = 'Artsundergruppe', ['species_complex'] = 'Artskompleks', ['species'] = 'Art', ['subspecies'] = 'Underart', ['variety'] = 'Varietet', ['form'] = 'Form', ['infraspecies'] = 'Infraart', ['infratribus'] = 'Infratribus', ['subzoodivisio'] = 'Subdivisjon', ['micrordo'] = 'Mikro-orden', ['grandordo'] = 'Grandorden', ['cohort'] = 'Kohort', ['informal'] = 'Uformell gruppe', ['informal_group'] = 'Uformell gruppe', ['stem group'] = 'Kronegruppe', ['crown group'] = 'Kronegruppe', ['total group'] = 'Kronegruppe', ['legion'] = 'Legion', ['infralegion'] = 'Infralegion', ['superlegion'] = 'Overlegion', ['sublegion'] = 'Underlegion', ['cladus'] = 'Gruppe', ['clade'] = 'Gruppe', ['ichnostem-group'] = 'Iknokronegruppe', ['ichnosuperclassis'] = 'Iknooverklasse', ['ichnoclassis'] = 'Iknoklasse', ['ichnosubclassis'] = 'Iknounderklasse', ['ichnoinfraclassis'] = 'Iknoinfraklasse', ['ichnodivisio'] = 'Iknodivisjon', ['ichnosubdivisio'] = 'Iknounderdivisjon', ['ichnoinfradivisio'] = 'Iknoinfradivisjon', ['ichnomagnordo'] = 'Iknohyperorden', ['ichnosuperordo'] = 'Iknooverorden', ['ichnograndordo'] = 'Iknograndorden', ['ichnomicrordo'] = 'Iknomikrorden', ['ichnoordo'] = 'Iknoorden', ['ichnosubordo'] = 'Iknoudnerorden', ['ichnoinfraordo'] = 'Iknoinfraorden', ['ichnoparvordo'] = 'Iknoparvorden', ['ichnosuperfamilia'] = 'Iknooverfamilie', ['ichnofamilia'] = 'Iknofamilie', ['ichnosubfamilia'] = 'Iknounderfamilie', ['ichnogenus'] = 'Iknoslekt', ['ichnosubgenus'] = 'Iknounderslekt', ['ichnospecies'] = 'Iknoart', ['ichnosubspecies'] = 'Iknounderart', ['ichnoinfraspecies'] = 'Iknoinfraart', ['ooclassis'] = 'Ooklasse', ['oosubclassis'] = 'Oounderklasse', ['oosupercohort'] = 'Oooverkohort', ['oocohort'] = 'Ookohort', ['oomagnordo'] = 'Oohyperorden', ['oosuperordo'] = 'Ooverorden', ['oordo'] = 'Oorden', ['morphotype'] = 'Morfotype', ['oofamilia'] = 'Oofamilie', ['oogenus'] = 'Ooslekt', ['oosubgenus'] = 'Oounderslekt', ['oospecies'] = 'Ooart', ['oosubspecies'] = 'Oounderart', ['ooinfraspecies'] = 'Ooinfraart',
    ['domain'] = 'Domene',
    ['superregnum'] = 'Overrike',
    ['regnum'] = 'Rike',
    ['subregnum'] = 'Underrike',
    ['superdivisio'] = 'Overdivisjon',
    ['superphylum'] = 'Overrekke',
    ['divisio'] = 'Divisjon',
    ['phylum'] = 'Rekke',
    ['zoodivisio'] = 'Divisjon',
    ['subdivisio'] = 'Subdivisjon',
    ['subphylum'] = 'Underrekke',
    ['infraphylum'] = 'Infrarekke',
    ['microphylum'] = 'Mikrorekke',
    ['nanophylum'] = 'Nanorekke',
    ['superclassis'] = 'Overklasse',
    ['classis'] = 'Klasse',
    ['subclassis'] = 'Underklasse',
    ['infraclassis'] = 'Infraklasse',
    ['magnordo'] = 'Hyperorden',
    ['superordo'] = 'Overorden',
    ['ordo'] = 'Orden',
    ['subordo'] = 'Underorden',
    ['infraordo'] = 'Infraorden',
    ['parvordo'] = 'Parvorden',
    ['superfamilia'] = 'Overfamilie',
    ['familia'] = 'Familie',
    ['subfamilia'] = 'Underfamilie',
    ['supertribus'] = 'Overtribus',
    ['tribus'] = 'Tribus', -- unødvendig å oversette
    ['subtribus'] = 'Undertribus',
    ['alliance'] = 'Allianse',
    ['genus'] = 'Slekt',
    ['subgenus'] = 'Underslekt',
    ['sectio'] = 'Seksjon',
    ['zoosectio'] = 'Seksjon',
    ['subsectio'] = 'Underseksjon',
    ['zoosubsectio'] = 'Underseksjon',
    ['series'] = 'Serien',
    ['subseries'] = 'Underserien', -- underserie(n)?
    ['species_group'] = 'Artsgruppe', -- uoversatt? herfra og ut
    ['species_subgroup'] = 'Artsuntergruppe', -- skulle kanskje vært Artsundergruppe?
    ['species_complex'] = 'Artskompleks',
    ['species'] = 'Art',
    ['subspecies'] = 'Underart',
    ['variety'] = 'Varietet',
    ['form'] = 'Form', -- Herfra og ut er ikke støttet av Mal:Taksoboks, og finnes derfor ikke i params
    ['infraspecies'] = 'Infraart',
    ['infratribus'] = 'Infratribus',
    ['subzoodivisio'] = 'Subdivisjon',
    ['micrordo'] = 'Mikro-orden',
    ['grandordo'] = 'Grandorden',
    ['cohort'] = 'Kohort', -- Skal kursiveres?
    ['informal'] = 'Uformell gruppe', -- Skal kursiveres?
    ['informal_group'] = 'Uformell gruppe', -- Skal kursiveres?
    ['stem group'] = 'Kronegruppe', -- Skal kursiveres?
    ['crown group'] = 'Kronegruppe', -- Skal kursiveres?
    ['total group'] = 'Kronegruppe', -- Skal kursiveres?
    ['legion'] = '{{ucfirst:{{{1}}}}}', -- Skal kursiveres?
    ['infralegion'] = '{{ucfirst:{{{1}}}}}', -- Skal kursiveres?
    ['superlegion'] = 'Overlegion', -- Skal kursiveres?
    ['sublegion'] = 'Underlegion', -- Skal kursiveres?
    ['cladus'] = 'Gruppe',
    ['clade'] = 'Gruppe',
    ['ichnostem-group'] = 'Iknokronegruppe', -- Skal kursiveres?
    ['ichnosuperclassis'] = 'Iknooverklasse',
    ['ichnoclassis'] = 'Iknoklasse',
    ['ichnosubclassis'] = 'Iknounderklasse',
    ['ichnoinfraclassis'] = 'Iknoinfraklasse',
    ['ichnodivisio'] = 'Iknodivisjon',
    ['ichnosubdivisio'] = 'Iknounderdivisjon',
    ['ichnoinfradivisio'] = 'Iknoinfradivisjon',
    ['ichnomagnordo'] = 'Iknohyperorden',
    ['ichnosuperordo'] = 'Iknooverorden',
    ['ichnograndordo'] = 'Iknograndorden',
    ['ichnomicrordo'] = 'Iknomikrorden',
    ['ichnoordo'] = 'Iknoorden',
    ['ichnosubordo'] = 'Iknoudnerorden',
    ['ichnoinfraordo'] = 'Iknoinfraorden',
    ['ichnoparvordo'] = 'Iknoparvorden',
    ['ichnosuperfamilia'] = 'Iknooverfamilie',
    ['ichnofamilia'] = 'Iknofamilie',
    ['ichnosubfamilia'] = 'Iknounderfamilie',
    ['ichnogenus'] = 'Iknoslekt',
    ['ichnosubgenus'] = 'Iknounderslekt',
    ['ichnospecies'] = 'Iknoart',
    ['ichnosubspecies'] = 'Iknornderart', -- Skulle kanskje vært Iknounderart
    ['ichnoinfraspecies'] = 'Iknoinfraart',
    ['ooclassis'] = 'Ooklasse',
    ['oosubclassis'] = 'Oounderklasse',
    ['oosupercohort'] = 'Oooverkohort', -- Skal kursiveres?
    ['oocohort'] = 'Ookohort', -- Skal kursiveres?
    ['oomagnordo'] = 'Oohyperorden',
    ['oosuperordo'] = 'Ooverorden',
    ['oordo'] = 'Oorden',
    ['morphotype'] = 'Morfotype',
    ['oofamilia'] = 'Oofamilie',
    ['oogenus'] = 'Ooslekt',
    ['oosubgenus'] = 'Oounderslekt',
    ['oospecies'] = 'Ooart',
    ['oosubspecies'] = 'Oounderart',
    ['ooinfraspecis'] = 'Ooinfraart',
     }
     }
     local label = ""
     local label = ""
     local param_name = mw.text.trim(frame.args['param_name'])
     local param_name = frame.args['param_name']
   
     local unranked = {
     local unranked = {
     "ikke_rankert_",
     "ikke_rankert_",
Linje 150: Linje 42:
end
end


local function getBestP18fromWikidata()
function p.getScientificName( frame )
-- check for wikibase connection, empty string if not exists
if not mw.wikibase then mw.log('# Ingen wikibase-tilkobling') return "" end
-- fetch the subject article wikidata entity, nil if not exists
local subject = mw.wikibase.getEntity()
local pArgs = frame:getParent().args -- arguments passed to Mal:Taksoboks
local p225value = '' -- P225: vitenskapelig navn
local p6507value = '' -- P6507: autorstreng
local p105value = '' -- P105: taksonomisk rang
local error = false -- has an error occurred?
local p225missing = true -- is P225 missing on wikidata?
local p6507missing = true -- is P6507 missing on wikidata?
local autorMissing = true -- Mal:Taksoboks missing autor?
local autoraarMissing = true -- Mal:Taksoboks missing autorår?
local italicName = 0 -- should name be italicized?
local autor = pArgs["autor"] -- autor from Mal:Taksoboks
local autoraar = pArgs["autorår"] -- autorår from Mal:Taksoboks
if not mw.wikibase then
if autor == "" or not autor then  
mw.log('no wikibase connection')
mw.log('* Autor ikke oppgitt i Mal:Taksoboks')  
return ""
else
autorMissing = false
autor = mw.text.trim( autor ) -- remove trailing whitespace
end
end
local wikidataItem = mw.wikibase.getEntity('Q131219') -- remove qid when testing is over
if not wikidataItem then
if autoraar == "" or not autoraar then
return ""
mw.log('* Autorår ikke oppgitt i Mal:Taksoboks')  
else
autoraarMissing = false
autoraar = mw.text.trim( autoraar ) -- remove trailing whitespace
end
end
local claims = wikidataItem:getBestStatements('P18')
if not claims then
-- taxonomic ranks to be italicized
return ""
local italicNames = {
[1] = {['qid'] = 'Q34740', ['label'] = 'Slekt', ['abbr'] = nil},
[2] = {['qid'] = 'Q3238261', ['label'] = 'Underslekt', ['abbr'] = ' subg. '},
[3] = {['qid'] = 'Q3181348', ['label'] = 'Seksjon', ['abbr'] = ' sect. '},
[4] = {['qid'] = 'Q3025161', ['label'] = 'Serie', ['abbr'] = ' ser. '},
[5] = {['qid'] = 'Q7432', ['label'] = 'Art', ['abbr'] = nil},
[6] = {['qid'] = 'Q68947', ['label'] = 'Underart', ['abbr'] = ' subsp. '},
[7] = {['qid'] = 'Q767728', ['label'] = 'Varietet', ['abbr'] = ' var. '},
[8] = {['qid'] = 'Q279749', ['label'] = 'Form', ['abbr'] = ' f. '},
}
if not subject then
mw.log( '* Ingen wikidataelement, prøver med qid' )
local qid = frame.args['qid'] -- qid from #invoke
if not qid then qid = pArgs['qid'] end -- qid from Mal:Taksoboks
if not qid then mw.log( '# Ingen qid' ) return '' end
subject = mw.wikibase.getEntity(qid)
if not subject then
mw.log( '# Ingen tilkoblede wikidataelement' )
return ""  
end
end
end
local img = claims[1]['mainsnak']['datavalue']['value']
-- non-deprecated ranks from:
local p225 = subject:getBestStatements( 'P225' ) -- taxon name
local p6507 = subject:getBestStatements( 'P6507' ) -- taxon author citation
local p105 = subject:getBestStatements( 'P105' ) -- taxon rank
return img
-- what to do if statement exists or not
if not p225 or #p225 < 1  then
mw.log( '* Ingen aktuelle utsagn med P225' )
else
p225missing = false
p225value = p225[1].mainsnak.datavalue.value
mw.log( '* Wikidata takson: ' .. p225value )
end
end
-- what to do if statement exists or not
 
if not p6507 or #p6507 < 1 then
 
mw.log( '* Ingen aktuelle utsagn med P6507' )
local navn = "{{{navn|{{PAGENAME}}}}}"
else
local bilde = "[[Fil:" .. getBestP18fromWikidata() .. "|frameless]]"
p6507missing = false
local taksoboksLinjer = {
p6507value = p6507[1].mainsnak.datavalue.value
    '{| class="infoboks"',
mw.log( '* Wikidata-autorstreng: ' .. p6507value )
    '|- colspan=2 class="overskrift',
end
    '!' .. navn,
    '|- colspan=2 class="bilde"',
-- what to do if statement exists or not
    '|' .. bilde,
if not p105 or #p105 < 1 or p105[1].mainsnak['snaktype'] == 'novalue' then
    '|}',
mw.log('# Ingen aktuelle utsagn med P105')
}
error = true -- formatting impossible
 
else
local taksoboks = table.concat(taksoboksLinjer, '\n')
-- fetch value
table.insert(p, taksoboks)
p105value = p105[1].mainsnak.datavalue.value.id
 
function p.skrivTaksoboks ( frame )
-- check if taxon rank should be italicized
    -- use table.insert(p, name) to insert a local variable to the package
for k, v in ipairs(italicNames) do
    return frame:preprocess( taksoboks )
if v['qid'] == p105value then
italicName = k
mw.log( '* ' .. v['label'] .. ': navnet kursiveres')
break
end
end
end
-- format strings of ranks lower than genus
if not p225missing then
if italicName > 0 then
-- rank abbriviations are not italicized
if italicNames[italicName]['abbr'] then
local oldStr = italicNames[italicName]['abbr']
local newStr = "''" .. oldStr .. "''"
p225value = mw.ustring.gsub(p225value, oldStr, newStr, 1)
end
p225value =  "''" .. p225value .. "''" -- italicize names
end
end
-- create autorstring from parameters passed to template if not on wikidata
if p6507missing then
mw.log( '* Registrer utsagn med P6507 på wikidata' )
if autorMissing then
mw.log( '* Autor mangler' )
autor = ""
end
-- check for autorår and add if it exists
if autoraarMissing then
mw.log ( '* Autorår mangler' )
autoraar = ""
else
autoraar = ', ' .. autoraar
end
p6507value = autor .. autoraar
end
-- unless p105 is missing, return formatted string, else return empty string
if not error then
return p225value .. '<br/><small>' .. p6507value .. '</small>'
else
return ''
end
end
end


return p
return p

Siste sideversjon per 22. apr. 2026 kl. 01:08

Dokumentasjon for denne modulen kan opprettes på Modul:Taksoboks/dok

local p = {}

--[[
Taksoboksens seksjon som viser biologisk klassifisering har en etikett i venstre kolonne og navnet på et nivå i hierarkiet i høyre kolonne. De forskjellige nivåenes etiketter baseres på de latinske navnene i tabellen translations. De oversatte etikettene på nivåene svarer til Petter Bøckmans Bruker:Petter_Bøckman/fornorske_rang.

Funksjonen tester først om parameteret inneholder virus, unranked_ eller ikke_rankert_ og vil returnere «Gruppe» hvis den oppdager det. Hvis ikke vil den gå gjennom nøklene i translations og returnere oversettelsen straks den finner den.
]]

p.translateRank = function (frame)
    
    local translations = {
		['superdomain'] = 'Overdomene', ['domain'] = 'Domene', ['superregnum'] = 'Overrike', ['regnum'] = 'Rike', ['subregnum'] = 'Underrike', ['superdivisio'] = 'Overdivisjon', ['superphylum'] = 'Overrekke', ['divisio'] = 'Divisjon', ['phylum'] = 'Rekke', ['zoodivisio'] = 'Divisjon', ['subdivisio'] = 'Underdivisjon', ['subphylum'] = 'Underrekke', ['infraphylum'] = 'Infrarekke', ['microphylum'] = 'Mikrorekke', ['nanophylum'] = 'Nanorekke', ['superclassis'] = 'Overklasse', ['classis'] = 'Klasse', ['subclassis'] = 'Underklasse', ['infraclassis'] = 'Infraklasse', ['magnordo'] = 'Hyperorden', ['superordo'] = 'Overorden', ['ordo'] = 'Orden', ['subordo'] = 'Underorden', ['infraordo'] = 'Infraorden', ['parvordo'] = 'Parvorden', ['superfamilia'] = 'Overfamilie', ['familia'] = 'Familie', ['subfamilia'] = 'Underfamilie', ['supertribus'] = 'Overtribus', ['tribus'] = 'Tribus', ['subtribus'] = 'Undertribus', ['alliance'] = 'Allianse', ['genus'] = 'Slekt', ['subgenus'] = 'Underslekt', ['sectio'] = 'Seksjon', ['zoosectio'] = 'Seksjon', ['subsectio'] = 'Underseksjon', ['zoosubsectio'] = 'Underseksjon', ['series'] = 'Serien', ['subseries'] = 'Underserie', ['species_group'] = 'Artsgruppe', ['species_subgroup'] = 'Artsundergruppe', ['species_complex'] = 'Artskompleks', ['species'] = 'Art', ['subspecies'] = 'Underart', ['variety'] = 'Varietet', ['form'] = 'Form', ['infraspecies'] = 'Infraart', ['infratribus'] = 'Infratribus', ['subzoodivisio'] = 'Subdivisjon', ['micrordo'] = 'Mikro-orden', ['grandordo'] = 'Grandorden', ['cohort'] = 'Kohort', ['informal'] = 'Uformell gruppe', ['informal_group'] = 'Uformell gruppe', ['stem group'] = 'Kronegruppe', ['crown group'] = 'Kronegruppe', ['total group'] = 'Kronegruppe', ['legion'] = 'Legion', ['infralegion'] = 'Infralegion', ['superlegion'] = 'Overlegion', ['sublegion'] = 'Underlegion', ['cladus'] = 'Gruppe', ['clade'] = 'Gruppe', ['ichnostem-group'] = 'Iknokronegruppe', ['ichnosuperclassis'] = 'Iknooverklasse', ['ichnoclassis'] = 'Iknoklasse', ['ichnosubclassis'] = 'Iknounderklasse', ['ichnoinfraclassis'] = 'Iknoinfraklasse', ['ichnodivisio'] = 'Iknodivisjon', ['ichnosubdivisio'] = 'Iknounderdivisjon', ['ichnoinfradivisio'] = 'Iknoinfradivisjon', ['ichnomagnordo'] = 'Iknohyperorden', ['ichnosuperordo'] = 'Iknooverorden', ['ichnograndordo'] = 'Iknograndorden', ['ichnomicrordo'] = 'Iknomikrorden', ['ichnoordo'] = 'Iknoorden', ['ichnosubordo'] = 'Iknoudnerorden', ['ichnoinfraordo'] = 'Iknoinfraorden', ['ichnoparvordo'] = 'Iknoparvorden', ['ichnosuperfamilia'] = 'Iknooverfamilie', ['ichnofamilia'] = 'Iknofamilie', ['ichnosubfamilia'] = 'Iknounderfamilie', ['ichnogenus'] = 'Iknoslekt', ['ichnosubgenus'] = 'Iknounderslekt', ['ichnospecies'] = 'Iknoart', ['ichnosubspecies'] = 'Iknounderart', ['ichnoinfraspecies'] = 'Iknoinfraart', ['ooclassis'] = 'Ooklasse', ['oosubclassis'] = 'Oounderklasse', ['oosupercohort'] = 'Oooverkohort', ['oocohort'] = 'Ookohort', ['oomagnordo'] = 'Oohyperorden', ['oosuperordo'] = 'Ooverorden', ['oordo'] = 'Oorden', ['morphotype'] = 'Morfotype', ['oofamilia'] = 'Oofamilie', ['oogenus'] = 'Ooslekt', ['oosubgenus'] = 'Oounderslekt', ['oospecies'] = 'Ooart', ['oosubspecies'] = 'Oounderart', ['ooinfraspecies'] = 'Ooinfraart',
    }
    local label = ""
    local param_name = frame.args['param_name']
    
    local unranked = {
    	"ikke_rankert_",
    	"unranked_",
    	"virus",
    }
    
    for _,s in ipairs(unranked) do
    	if mw.ustring.match( param_name , s ) ~= nil then
    		return "Gruppe"
    	end
    end
    
    for k,v in pairs(translations) do

    	if param_name == k then
    		label = v
    	end
    	
    	if label ~= "" then
    		return label	
    	end
    	
    end

	return label
end

function p.getScientificName( frame )
	-- check for wikibase connection, empty string if not exists
	if not mw.wikibase then mw.log('# Ingen wikibase-tilkobling') return "" end
	
	-- fetch the subject article wikidata entity, nil if not exists
	local subject = mw.wikibase.getEntity()
	
	local pArgs = frame:getParent().args -- arguments passed to Mal:Taksoboks
	local p225value = '' -- P225: vitenskapelig navn
	local p6507value = '' -- P6507: autorstreng
	local p105value = '' -- P105: taksonomisk rang
	local error = false -- has an error occurred?
	local p225missing = true -- is P225 missing on wikidata?
	local p6507missing = true -- is P6507 missing on wikidata?
	local autorMissing = true -- Mal:Taksoboks missing autor?
	local autoraarMissing = true -- Mal:Taksoboks missing autorår?
	local italicName = 0 -- should name be italicized?
	local autor = pArgs["autor"] -- autor from Mal:Taksoboks
	local autoraar = pArgs["autorår"] -- autorår from Mal:Taksoboks
	
	if autor == "" or not autor then 
		mw.log('* Autor ikke oppgitt i Mal:Taksoboks') 
	else 
		autorMissing = false
		autor = mw.text.trim( autor ) -- remove trailing whitespace
	end
	
	if autoraar == "" or not autoraar then 
		mw.log('* Autorår ikke oppgitt i Mal:Taksoboks') 
	else
		autoraarMissing = false
		autoraar = mw.text.trim( autoraar ) -- remove trailing whitespace
	end
	
	-- taxonomic ranks to be italicized
	local italicNames = {
		[1] = {['qid'] = 'Q34740', ['label'] = 'Slekt', ['abbr'] = nil},
		[2] = {['qid'] = 'Q3238261', ['label'] = 'Underslekt', ['abbr'] = ' subg. '},
		[3] = {['qid'] = 'Q3181348', ['label'] = 'Seksjon', ['abbr'] = ' sect. '},
		[4] = {['qid'] = 'Q3025161', ['label'] = 'Serie', ['abbr'] = ' ser. '},
		[5] = {['qid'] = 'Q7432', ['label'] = 'Art', ['abbr'] = nil},
		[6] = {['qid'] = 'Q68947', ['label'] = 'Underart', ['abbr'] = ' subsp. '},
		[7] = {['qid'] = 'Q767728', ['label'] = 'Varietet', ['abbr'] = ' var. '},
		[8] = {['qid'] = 'Q279749', ['label'] = 'Form', ['abbr'] = ' f. '},
	}
	
	if not subject then 
		mw.log( '* Ingen wikidataelement, prøver med qid' )
		local qid = frame.args['qid'] -- qid from #invoke
		if not qid then qid = pArgs['qid'] end -- qid from Mal:Taksoboks
		if not qid then mw.log( '# Ingen qid' ) return '' end
		subject = mw.wikibase.getEntity(qid)
		
		if not subject then
			mw.log( '# Ingen tilkoblede wikidataelement' ) 
			return "" 
		end
	end
	
	-- non-deprecated ranks from:
	local p225 = subject:getBestStatements( 'P225' ) -- taxon name
	local p6507 = subject:getBestStatements( 'P6507' ) -- taxon author citation
	local p105 = subject:getBestStatements( 'P105' ) -- taxon rank
	
	-- what to do if statement exists or not
	if not p225 or #p225 < 1  then 
		mw.log( '* Ingen aktuelle utsagn med P225' )
	else
		p225missing = false
		p225value = p225[1].mainsnak.datavalue.value
		mw.log( '* Wikidata takson: ' .. p225value )
	end
	
	-- what to do if statement exists or not
	if not p6507 or #p6507 < 1 then 
		mw.log( '* Ingen aktuelle utsagn med P6507' )
	else
		p6507missing = false
		p6507value = p6507[1].mainsnak.datavalue.value
		mw.log( '* Wikidata-autorstreng: ' .. p6507value )
	end
	
	-- what to do if statement exists or not
	if not p105 or #p105 < 1 or p105[1].mainsnak['snaktype'] == 'novalue' then
		mw.log('# Ingen aktuelle utsagn med P105')
		error = true -- formatting impossible
	else
		-- fetch value
		p105value = p105[1].mainsnak.datavalue.value.id
		
		-- check if taxon rank should be italicized
		for k, v in ipairs(italicNames) do
			if v['qid'] == p105value then 
				italicName = k
				mw.log( '* ' .. v['label'] .. ': navnet kursiveres')
				break
			end
		end
	end
	
	-- format strings of ranks lower than genus
	if not p225missing then
		if italicName > 0 then
			
			-- rank abbriviations are not italicized
			if italicNames[italicName]['abbr'] then
				local oldStr = italicNames[italicName]['abbr']
				local newStr = "''" .. oldStr .. "''"
				p225value = mw.ustring.gsub(p225value, oldStr, newStr, 1)
			end
			
			p225value =  "''" .. p225value .. "''" -- italicize names
		end
	end
	
	-- create autorstring from parameters passed to template if not on wikidata
	if p6507missing then
		mw.log( '* Registrer utsagn med P6507 på wikidata' )
		
		if autorMissing then
			mw.log( '* Autor mangler' )
			autor = ""
		end
		
		-- check for autorår and add if it exists
		if autoraarMissing then
			mw.log ( '* Autorår mangler' )
			autoraar = ""
		else
			autoraar = ', ' .. autoraar
		end
		
		p6507value = autor .. autoraar
	
	end
	
	-- unless p105 is missing, return formatted string, else return empty string
	if not error then
		return p225value .. '<br/><small>' .. p6507value .. '</small>'
	else
		return ''
	end
end

return p