יחידה:מיון/נתונים

מתוך ויקיפדיה, האנציקלופדיה החופשית

ניתן ליצור תיעוד על היחידה הזאת בדף יחידה:מיון/נתונים/תיעוד

local p={}
local l = {} -- local functions
local wikidataTreeCache = nil
local wikidataTaxonomicRanks = {
    	--[146481]= 'על-ממלכה',
        [36732]= 'ממלכה',
        --[2752679]= 'תת-ממלכה',
        [38348] = 'מערכה',
        [334460] = 'מערכה', -- division
        [3504061] = 'על-מחלקה',
        [37517] = 'מחלקה',
        [36602] = 'סדרה',
        [5867959] = 'תת-סדרה',
        [35409] = 'משפחה',
        [2455704] = 'תת-משפחה',
        [34740] = 'סוג',
        [7432] = 'מין'
    }
local wikidataTaxonomicLevels = {
	['ממלכה']=1,
	['מערכה']=1,
	['על-מחלקה']=1,
	['מחלקה']=1,
	['סדרה']=1,
	['תת-סדרה']=1,
	['משפחה']=1,
	['תת-משפחה']=1,
	['סוג']=1,
	['מין']=1
}

local wikidataTaxonProperties = {
	[ "שם מדעי"] = 'P225',
	[ "שנת תיאור הטקסון" ] = 'P574',
	[ "שימור"] = 'P141',
	[ "תפוצה"] = 'P181',
	[ "מופע של"] = 'P31',
	[ "מתאר הטקסון"] = 'P405'
}

--taxon items
local Q_RECOMBINATION = 'Q14594740'

function p.wikidataTaxonTree(frame)
	local highestRank = frame.args[1]
	if wikidataTreeCache~=nil then
		return wikidataTreeCache[highestRank]
	end
    local currentEntityId = frame.args['qid'] or mw.wikibase.getEntityIdForCurrentPage()
    local taxonomicTree= {}
    local parentTaxonProperty = 'P171'
    local taxonomicRankproperty = 'P105'
    local parents= {}
    local currentPageTitle = mw.title.getCurrentTitle().text
    while currentEntityId ~= nil do
		mw.log('Access to entity: ' .. currentEntityId)
        local taxLevel = mw.wikibase.getBestStatements( currentEntityId, taxonomicRankproperty )
        taxLevel = taxLevel and taxLevel[1] and taxLevel[1].mainsnak
        taxLevel = taxLevel and taxLevel.datavalue and taxLevel.datavalue.value['numeric-id']
		
		local linkTarget = mw.wikibase.getSitelink( currentEntityId )
        local linkTitle, linkLang = mw.wikibase.getLabelWithLang( currentEntityId ) 
        if not linkTitle or linkLang~='he' then
        	linkTitle = mw.wikibase.getBestStatements(currentEntityId, 'P225')
        	linkTitle = linkTitle and linkTitle[1] and linkTitle[1].mainsnak and mw.wikibase.renderSnak(linkTitle[1].mainsnak)
        	if wikidataTaxonomicRanks[taxLevel]=='סוג' or  wikidataTaxonomicRanks[taxLevel]=='מין' then
        		linkTitle = mw.ustring.format('\'\'%s\'\'', linkTitle)
        	end
      	end
        if wikidataTaxonomicRanks[taxLevel] and linkTitle then
        	local taxValue
        	if linkTarget==nil then
        		taxValue = linkTitle
        	elseif currentPageTitle==linkTarget then
        		taxValue = mw.ustring.format('\'\'\'%s\'\'\'', linkTarget)
        	elseif linkTarget  then
        		taxValue = mw.ustring.format( "[[%s|%s]]", linkTarget, linkTitle )
        	end
        		-- dont override claim if already filled
        		if taxonomicTree[wikidataTaxonomicRanks[taxLevel]] == nil then
                	taxonomicTree[wikidataTaxonomicRanks[taxLevel]] = taxValue
                end
        end
		local parentTaxon = nil
		if highestRank~=wikidataTaxonomicRanks[taxLevel] then
		        parentTaxon = mw.wikibase.getBestStatements( currentEntityId, parentTaxonProperty )
		        parentTaxon = parentTaxon and parentTaxon[1] and parentTaxon[1].mainsnak
		        parentTaxon = parentTaxon and parentTaxon.datavalue
		        parentTaxon = parentTaxon and parentTaxon.value['numeric-id']
		end
        if parentTaxon and not parents[parentTaxon] then
    		parents[parentTaxon]=1
			currentEntityId = 'Q'..parentTaxon
        else 
			currentEntityId = nil
        end
    end
	wikidataTreeCache = taxonomicTree
    return taxonomicTree[highestRank]
end

return p