Jump to content

Module:Taxonbar/confdoc: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
add examples
add examples
Line 26: Line 26:
-function to show formatURL and id for taxonomic databases
-function to show formatURL and id for taxonomic databases
]]
]]
local counter = 10

function p.wikidataInfo( frame )
function p.wikidataInfo( frame )
counter = frame.args['counter'] or 50 -- too preventmany expensive calls
local wikitable = '{| class="wikitable sortable"\n' ..
local wikitable = '{| class="wikitable sortable"\n' ..
'|-\n' ..
'|-\n' ..
Line 40: Line 42:
local datatype = ""
local datatype = ""
local examples = ""
local examples = ""
local links = ""
local formatterURL = ""
if type(prop) == 'number' and prop > 0 then
if type(prop) == 'number' and prop > 0 then
Line 48: Line 52:
local statements = item:getBestStatements('P1630')[1]
local statements = item:getBestStatements('P1630')[1]
if statements and statements.mainsnak and statements.mainsnak.datavalue and statements.mainsnak.datavalue.value then
if statements and statements.mainsnak and statements.mainsnak.datavalue and statements.mainsnak.datavalue.value then
local formatterURL = statements.mainsnak.datavalue.value
formatterURL = statements.mainsnak.datavalue.value
url = formatterURL
url = formatterURL
else
else
Line 71: Line 75:
end
end
end
end
examples = p.getExamples( item )
examples, links = p.getExamples( item, prop, formatterURL, datatype )
end
end


Line 81: Line 85:
.. '\n|' .. examples
.. '\n|' .. examples
.. '\n|' .. datatype
.. '\n|' .. datatype
.. '\n|' .. url
.. '\n|' .. url .. (links or "")
end
end
end
end
Line 87: Line 91:
return wikitable .. '\n|}'
return wikitable .. '\n|}'
end
end

function p.getExamples( item )
function p.getExamples( propItem , prop, formatterURL, datatype)
counter = counter -1
local examples = ""
if counter < 0 then return "count exceeded" end
local statements = item:getBestStatements('P1855')
local examples = ""
local links = ""
local exampleStatements = propItem:getBestStatements('P1855')
--local statement = statements[1]
--local statement = statements[1]
for _, statement in pairs( statements ) do
for _, statement in pairs( exampleStatements ) do
if statement.mainsnak and statement.mainsnak.datavalue and statement.mainsnak.datavalue.value then
if statement.mainsnak and statement.mainsnak.datavalue and statement.mainsnak.datavalue.value then
local examplesValue = statement.mainsnak.datavalue.value
local examplesValue = statement.mainsnak.datavalue.value
if examplesValue and examplesValue.id then
if examplesValue and examplesValue.id then
local exampleID = examplesValue.id
local exampleID = examplesValue.id
examples = examples .. '[[:d:' .. exampleID .. '|' .. exampleID ..']] <br/>'
examples = examples .. '\n*[[:d:' .. exampleID .. '|' .. exampleID ..']] <br/>'
local item = mw.wikibase.getEntity(exampleID)
if item and item ~= "" then
--datatype = item.datatype
local statements = item:getBestStatements('P225')[1] -- taxon name
if statements and statements.mainsnak and statements.mainsnak.datavalue and statements.mainsnak.datavalue.value then
local taxon = statements.mainsnak.datavalue.value
examples = examples .. ' [[' .. taxon .. ']]'
end
local statements = item:getBestStatements('P'..prop)[1] -- the databas property
if statements and statements.mainsnak and statements.mainsnak.datavalue and statements.mainsnak.datavalue.value then
local id = statements.mainsnak.datavalue.value
local link = formatterURL:gsub('$1', id)
if (datatype == "url") then link = id end
examples = examples .. ' (' .. id .. ')'
links = links .. '\n*' .. link .. ''
end
end
else
else
examples = examples .. "No example"
examples = examples .. "No example"
Line 107: Line 133:
end
end


return examples
return examples, links
end
end
return p
return p

Revision as of 16:37, 14 November 2021

require('Module:No globals')

local conf = require( "Module:Taxonbar/conf" ) -- configuration module

local p = {}
	
function p.confdoc( frame )
	local wikitable = '{| class="wikitable sortable"\n' .. 
					  '|-\n' .. 
					  '! Parameter !! data-sort-type=number style="white-space: nowrap;"|Wikidata ID !! Authority !! Description'
	
	for _, db in pairs( conf.databases ) do
		local param = mw.ustring.lower(db[1])
		local prop = db[3]
		if type(prop) == 'number' and prop > 0 then
			local TaxonbarProperty = frame:expandTemplate{ title = 'Taxonbar/Property', args = { prop } }
			wikitable = wikitable .. '\n' .. 
					    '|-\n' .. 
					    '|' .. param .. '||' .. TaxonbarProperty
		end
	end
	
	return wikitable .. '\n|}'
end
--[[ p.wikidataInfo( frame )
    -function to show formatURL and id for taxonomic databases
]]
local counter = 10
function p.wikidataInfo( frame )
	counter = frame.args['counter']  or 50  -- too preventmany expensive calls
	
	local wikitable = '{| class="wikitable sortable"\n' .. 
					  '|-\n' .. 
					  '! Parameter !! data-sort-type=number style="white-space: nowrap;"|Wikidata ID !! Database !! Examples !! datatype !! formatterURL or alternative'
	
	for _, db in pairs( conf.databases ) do
		local param = mw.ustring.lower(db[1])
		local link = db[2]
		local prop = db[3]
		local id = 'id'
		local url = 'url'
		local datatype = ""
		local examples = ""
		local links = ""
		local formatterURL = ""
		
		if type(prop) == 'number' and prop > 0 then
			local item = mw.wikibase.getEntity('P'..prop)  --('P5354')
			
			if item and item ~= "" then
				datatype = item.datatype
				local statements = item:getBestStatements('P1630')[1] 
				if statements and statements.mainsnak and statements.mainsnak.datavalue and statements.mainsnak.datavalue.value then
					formatterURL = statements.mainsnak.datavalue.value
					url = formatterURL
				else
					url = "No formatter URL (P1630)."
					if datatype == "url" then url = url .. " The id of the external database is the url." end
					local subjectItem = item:getBestStatements('P1629')[1]
					if subjectItem then
						local officialWebsite = mw.wikibase.getEntity(subjectItem.mainsnak.datavalue.value.id):getBestStatements('P856')[1]
						if officialWebsite then	
							url = url .. '<br/>website: ' ..  officialWebsite.mainsnak.datavalue.value
						end
					else
						url = url .. ' or official website (P856) of wikidata item of this property (P1629)'
						-- use third-party formatter URL. e.g for  Euring number (P3459) 
						local statements = item:getBestStatements('P3459')[1] 
						if statements and statements.mainsnak and statements.mainsnak.datavalue and statements.mainsnak.datavalue.value then
				   			local thirdPartyURL = statements.mainsnak.datavalue.value
							url = url ..'<br/>use third party url: ' .. thirdPartyURL
						else
							url = url .. ' or third party formatter url (P3459) '
						end
					end
				end
                examples, links =  p.getExamples( item, prop, formatterURL, datatype )
			end

		
			wikitable = wikitable .. '\n' .. '|-' 
					    .. '\n|' .. param 
					    .. '\n|' .. '[[:d:Property:P' .. prop .. '|P' .. prop .. ']]' 
					    .. '\n|' .. link
					    .. '\n|' .. examples
					    .. '\n|' .. datatype
					    .. '\n|' .. url  .. (links or "")
		end
	end
	
	return wikitable .. '\n|}'
end

function p.getExamples( propItem , prop, formatterURL, datatype)
	
	counter = counter -1
	if counter < 0 then return "count exceeded" end
	
	local examples	= ""	
	local links	= ""	
	local exampleStatements = propItem:getBestStatements('P1855')
	
	--local statement = statements[1]
	for _, statement in pairs( exampleStatements ) do
		if statement.mainsnak and statement.mainsnak.datavalue and statement.mainsnak.datavalue.value then
			local examplesValue = statement.mainsnak.datavalue.value
			if examplesValue and examplesValue.id then
				local exampleID = examplesValue.id
				examples = examples .. '\n*[[:d:' .. exampleID  .. '|' .. exampleID ..']] <br/>'
		        local item = mw.wikibase.getEntity(exampleID)
		        if item and item ~= "" then
					--datatype = item.datatype
					local statements = item:getBestStatements('P225')[1] -- taxon name
					if statements and statements.mainsnak and statements.mainsnak.datavalue and statements.mainsnak.datavalue.value then
						local taxon = statements.mainsnak.datavalue.value
						examples = examples .. ' [[' .. taxon .. ']]'
					end
					local statements = item:getBestStatements('P'..prop)[1] -- the databas property
					if statements and statements.mainsnak and statements.mainsnak.datavalue and statements.mainsnak.datavalue.value then
						local id = statements.mainsnak.datavalue.value
						local link = formatterURL:gsub('$1', id)
						if (datatype == "url") then link = id end
						examples = examples .. ' (' .. id .. ')'  
						links = links .. '\n*' .. link .. ''
					end
				end
		    else
		    	examples = examples .. "No example"
		    end
		else
			examples = examples .. "No examples statements"
		end
	end

    return examples, links
end
return p