יחידה:מיון/נתונים
ניתן ליצור תיעוד על היחידה הזאת בדף יחידה:מיון/נתונים/תיעוד
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