Модуль:Wikidata/P512
Выгляд
Дакументацыю да гэтага модуля можна стварыць у Модуль:Wikidata/P512/Дакументацыя
local p = {}
--[[
Функцыя фарміруе радок з вікіразметкай для перададзенай уласцівасці
Прымае: аб'ект кантэксту для выкліку фарматараў і табліцу настроек
Вяртае: вікі-фарматаваны радок
]]
function p.formatAcademicDegree( context, options )
if ( not context ) then error( 'context not specified' ); end;
if ( not options ) then error( 'options not specified' ); end;
if ( not options.entity ) then error( 'options.entity missing' ); end;
local claims = context.selectClaims( options, options.property );
if (claims == nil) then
return ''
end
local blackList = p.getPreviousDegrees( claims )
local formattedClaims = {}
for i, claim in ipairs(claims) do
if (claim.mainsnak.datavalue and not blackList[claim.mainsnak.datavalue.value['numeric-id']]) then
local formattedStatement = context.formatStatement( options, claim )
if (formattedStatement) then
formattedStatement = '<span class="wikidata-claim"' ..
' data-wikidata-property-id="' ..
string.upper( options.property ) ..
'" data-wikidata-claim-id="' ..
claim.id .. '">' ..
formattedStatement .. '</span>'
if (claim.qualifiers) then
formattedStatement = formattedStatement ..
p.formatQualifier( context, options, claim.qualifiers.P585 )
end
formattedStatement = formattedStatement ..
p.formatCorrespondingCategory( claim )
table.insert( formattedClaims, formattedStatement )
end
end
end
-- стварэнне тэкставага радка са спісам аформленых заяў з табліцы
return mw.text.listToText( formattedClaims, options.separator, options.conjunction );
end
--[[
Функцыя змяшчае ў дужкі тэкст першага кваліфікатара з перададзенай табліцы
Прымае: аб'ект кантэксту для выкліку фарматараў, табліцу настройкі
і табліцу кваліфікатараў
Вяртае: адфарматаваны радок з кваліфікатарам
]]
function p.formatQualifier( context, options, qualifiers )
if (qualifiers~=nil and qualifiers[1] ~= nil) then
return ' (' .. context.formatSnak( options, qualifiers[1] ) .. ')'
end
return ''
end
--[[
Функцыя фарміруе спіс адпаведных навуковых ступеняў ніжняй ступені (P155)
Напрыклад, для "доктар мастацтвазнаўства" гэта будзе "кандыдат мастацтвазнаўства"
Прымае: аб'ект табліцу сутнасцяў - акадэмічных ступеняў персоны (P512)
Вяртае: аб'ект табліцу ідэнтыфікатараў ступеняў ніжняй ступені
]]
function p.getPreviousDegrees( claims )
-- Пакуль няма звычайнай магчымасці загружаць элементы c кэшам
-- звонку Module:Wikidata, мы гэтыя адпаведнасці захардкодзім (без Q)
local correspondingCandidates = {
[16698078] = 19610224, -- архітэктар
[17281188] = 19610186, -- біёлаг
[17281187] = 19610187, -- ветэрынар
[17281186] = 19610193, -- ваенны
[16698080] = 19610195, -- географ
[16698082] = 19610197, -- геа-мін
[17281180] = 18523814, -- мастацтвазнавец
[12101789] = 18523811, -- гісторык
[16698084] = 19610200, -- культуролаг
[17281165] = 19610203, -- медык
[17281161] = 19610206, -- педагог
[12101787] = 4212319, -- палітолаг
[17281156] = 19610208, -- псіхолаг
[17281153] = 19610210, -- сель-гас
[17281152] = 19610212, -- сацыёлаг
[17281125] = 18071588, -- тэхнік
[17281115] = 19610228, -- фармацэўт
[17281097] = 18002832, -- фіз-мат
[17281087] = 19603970, -- філолаг
[17281084] = 19603972, -- філосаф
[17281079] = 19610312, -- хімік
[17281072] = 17744738, -- эканаміст
[18745564] = 19610320 -- юрыст
}
local previousElements = {}
for i, claim in ipairs(claims) do
if(claim.mainsnak.datavalue) then
local entityId = claim.mainsnak.datavalue.value['numeric-id']
if (entityId) then
if correspondingCandidates[entityId] then
previousElements[correspondingCandidates[entityId]] = true
end
end
end
end
return previousElements
end
--[[
Функцыя фарміруе вікі-разметку катэгорыі, якая адпавядае навуковай ступені
Прымае: аб'ект табліцу сцвярджэння
Вяртае: радок аформленага тэксту або пусты радок
]]
function p.formatCorrespondingCategory (claim)
if ( not claim ) then return '' end;
if ( not claim.references ) then return '' end;
if ( not claim.mainsnak ) then return '' end;
local label = mw.wikibase.label("Q" .. claim.mainsnak.datavalue.value['numeric-id'])
if (label) then
local result, changes = string.gsub(label, "доктар ", "Катэгорыя:Дактары ")
if (changes == 1) then
return '[[' .. result .. ']]'
end
result, changes = string.gsub(label, "кандыдат ", "Катэгорыя:Кандыдаты ")
if (changes == 1) then
return '[[' .. result .. ']]'
end
end
return ''
end
return p