「モジュール:Authority control/sandbox」の版間の差分
表示
削除された内容 追加された内容
en:Module:Authority control oldid=1030024367 より更新 |
Category:典拠管理識別子が1つもない記事を付与しないようにする。暫定的にModule:Check for unknown parametersに代えてModule:Check for unknown parameters/sandboxを使用する。 |
||
(同じ利用者による、間の31版が非表示) | |||
1行目: | 1行目: | ||
require(' |
require('strict') |
||
local p = {} |
local p = {} |
||
local frame = mw.getCurrentFrame() |
|||
local config_file = frame.args.config and frame.args.config~='' and ('/' .. frame.args.config) or '' |
|||
local config = mw.loadData('Module:Authority control/config' .. config_file) |
|||
local title = mw.title.getCurrentTitle() |
local title = mw.title.getCurrentTitle() |
||
local namespace = title.namespace |
local namespace = title.namespace |
||
local testcases = |
local testcases = title.subpageText == config.i18n.testcases |
||
local wikilink = function(target, label) |
|||
--[[==========================================================================]] |
|||
return label and '[[' .. target .. '|' .. label .. ']]' or '[[' .. target .. ']]' |
|||
--[[ Category functions ]] |
|||
--[[==========================================================================]] |
|||
function p.getCatForId( id ) |
|||
local catName = '' |
|||
if namespace == 0 then |
|||
catName = id..'識別子が指定されている記事' |
|||
elseif namespace == 2 and not title.isSubpage then |
|||
catName = id..'識別子が指定されている利用者ページ' |
|||
else |
|||
catName = id..'識別子が指定されているその他のページ' |
|||
end |
|||
return '[[Category:'..catName..']]'..p.redCatLink(catName) |
|||
end |
end |
||
local needsAttention = function(sortkey) |
|||
function p.redCatLink( catName ) --catName == 'Blah' (not 'Category:Blah', not '[[Category:Blah]]') |
|||
return wikilink(config.i18n.category .. ':' .. config.i18n.attentioncat, sortkey .. title.text) |
|||
if catName and catName ~= '' and |
|||
testcases == false and |
|||
mw.title.new(catName, 14).exists == false |
|||
then |
|||
return '[[Category:赤リンクの典拠情報カテゴリがあるページ]]' |
|||
end |
|||
return '' |
|||
end |
end |
||
local addCat = function(cat, sortkey) |
|||
function p.createRow( id, rawValues, link, links, withUid, specialCat, prefix ) |
|||
if cat and cat~='' and (namespace==0 or namespace==14 or testcases) then |
|||
local catName = '誤った'..(specialCat or id)..'識別子が指定されている記事' |
|||
local redlinkcat = '' |
|||
if links then -- all links[] use withUid = false; no check needed |
|||
if testcases==false then |
|||
local row = '' |
|||
local success, exists = pcall(function() return mw.title.new(cat, 14).exists end) |
|||
if prefix then |
|||
if success and not exists then |
|||
redlinkcat = needsAttention('N') |
|||
end |
|||
local totlen = 0 |
|||
for i, l in ipairs( links ) do |
|||
if i == 1 and not prefix then row = row..'*' |
|||
else row = row..'\n**' end |
|||
if l then |
|||
row = row..'<span class="uid">'..l..'</span>' |
|||
else |
|||
row = row..'<span class="error">'..id..'識別子の値'..rawValues[i]..'は正しくありません。</span>[[Category:'..catName..']]'..p.redCatLink(catName) |
|||
end |
end |
||
end |
end |
||
return wikilink(config.i18n.category..':'..cat, sortkey and sortkey..title.text) .. redlinkcat |
|||
return row..'\n' |
|||
elseif link then -- All IDs that have a prefix support multiple identifiers, so prefix is not needed |
|||
if withUid then |
|||
return '*<span class="nowrap"><span class="uid">'..link..'</span></span>\n' |
|||
end |
|||
return '*<span class="nowrap">'..link..'</span>\n' |
|||
end |
|||
return '* <span class="error">'..id..'識別子の値'..rawValues..'は正しくありません。</span>[[Category:'..catName..']]'..p.redCatLink(catName)..'\n' |
|||
end |
|||
--[[==========================================================================]] |
|||
--[[ Property formatting functions ]] |
|||
--[[==========================================================================]] |
|||
-- If a link has a suitable entry in the global inter-wiki prefix table at [[:m:Interwiki_map]], please consider routing through this prefix rather than as external link URL. This will ease future maintenance as necessary updates to the link can be centrally carried out there rather than by updating this module. The "external link" icon would disappear for such entries. |
|||
function p.aagLink( id, label ) |
|||
--P3372's format regex: \d+ (e.g. 1) |
|||
if not id:match( '^%d+$' ) then |
|||
return false |
|||
end |
|||
return '[https://www.aucklandartgallery.com/explore-art-and-ideas/artist/'..id..'/ '..(label or 'オークランド')..']'..p.getCatForId( 'AAG' ) |
|||
end |
|||
function p.acmLink( id, label ) |
|||
--P864's format regex: \d{11} (e.g. 12345678901) |
|||
if not id:match( '^%d%d%d%d%d%d%d%d%d%d%d$' ) then |
|||
return false |
|||
end |
|||
return '[https://dl.acm.org/profile/'..id..' '..(label or '計算機協会')..']'..p.getCatForId( 'ACM-DL' ) |
|||
end |
|||
function p.adbLink( id, label ) |
|||
--P1907's format regex: [a-z][-a-z]+-([1-2]\d|[1-9])\d{0,3} (e.g. barton-sir-edmund-toby-71) |
|||
if not id:match( '^[a-z][-a-z]+-[1-2]%d%d?%d?%d?$' ) and |
|||
not id:match( '^[a-z][-a-z]+-[1-9]%d?%d?%d?$' ) then |
|||
return false |
|||
end |
|||
return '[http://adb.anu.edu.au/biography/'..id..' '..(label or 'オーストラリア')..']'..p.getCatForId( 'ADB' ) |
|||
end |
|||
function p.agsaLink( id, label ) |
|||
--P6804's format regex: [1-9]\d* (e.g. 3625) |
|||
if not id:match( '^[1-9]%d*$' ) then |
|||
return false |
|||
end |
|||
return '[https://www.agsa.sa.gov.au/collection-publications/collection/creators/_/'..id..'/ '..(label or '南オーストラリア')..']'..p.getCatForId( 'AGSA' ) |
|||
end |
|||
function p.autoresuyLink( id, label ) |
|||
--P2558's format regex: [1-9]\d{0,4} (e.g. 12345) |
|||
if not id:match( '^[1-9]%d?%d?%d?%d?$' ) then |
|||
return false |
|||
end |
|||
return '[https://autores.uy/autor/'..id..' '..(label or 'ウルグアイ')..']'..p.getCatForId( 'autores.uy' ) |
|||
end |
|||
function p.awrLink( id, label ) |
|||
--P4186's format regex: (([A-Z]{3}\d{4})|([A-Z]{2}\d{5}))[a-z] (e.g. PR00768b) |
|||
if not id:match( '^[A-Z][A-Z][A-Z]%d%d%d%d[a-z]$' ) and |
|||
not id:match( '^[A-Z][A-Z]%d%d%d%d%d[a-z]$' ) then |
|||
return false |
|||
end |
|||
return '[http://www.womenaustralia.info/biogs/'..id..'.htm '..(label or 'Australian Women\'s Register')..']'..p.getCatForId( 'AWR' ) |
|||
end |
|||
function p.bibsysLink( id, label ) |
|||
--P1015's format regex: [1-9]\d* or [1-9](\d{0,8}|\d{12}) (e.g. 1234567890123) |
|||
--TODO: follow up @ [[d:Property talk:P1015#Discrepancy between the 2 regex constraints]] or escalate/investigate |
|||
if not id:match( '^[1-9]%d?%d?%d?%d?%d?%d?%d?%d?$' ) and |
|||
not id:match( '^[1-9]%d%d%d%d%d%d%d%d%d%d%d%d$' ) then |
|||
return false |
|||
end |
|||
return '[https://authority.bibsys.no/authority/rest/authorities/html/'..id..' '..(label or 'ノルウェー')..']'..p.getCatForId( 'BIBSYS' ) |
|||
end |
|||
function p.bildLink( id, label ) |
|||
--P2092's format regex: \d+ (e.g. 1) |
|||
if not id:match( '^%d+$' ) then |
|||
return false |
|||
end |
|||
return '[https://www.bildindex.de/document/obj'..id..' '..(label or 'Bildindex(ドイツ)')..']'..p.getCatForId( 'Bildindex' ) |
|||
end |
|||
function p.bncLink( id, label ) |
|||
--P1890's format regex: \d{9} (e.g. 123456789) |
|||
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then |
|||
return false |
|||
end |
|||
return '[http://www.bncatalogo.cl/F?func=direct&local_base=red10&doc_number='..id..' '..(label or 'チリ')..']'..p.getCatForId( 'BNC' ) |
|||
end |
|||
function p.bneLink( id, label ) |
|||
--P950's format regex: (XX|FF|a)\d{4,7}|(bima|bimo|bica|bis[eo]|bivi|Mise|Mimo|Mima)\d{10} (e.g. XX1234567) |
|||
if not id:match( '^[XF][XF]%d%d%d%d%d?%d?%d?$' ) and |
|||
not id:match( '^a%d%d%d%d%d?%d?%d?$' ) and |
|||
not id:match( '^bi[mcsv][aoei]%d%d%d%d%d%d%d%d%d%d$' ) and |
|||
not id:match( '^Mi[sm][eoa]%d%d%d%d%d%d%d%d%d%d$' ) then |
|||
return false |
|||
end |
|||
return '[http://catalogo.bne.es/uhtbin/authoritybrowse.cgi?action=display&authority_id='..id..' '..(label or 'スペイン')..']'..p.getCatForId( 'BNE' ) --no https as of 9/2019 |
|||
end |
|||
function p.bnfLink( id, label ) |
|||
--P268's format regex: \d{8}[0-9bcdfghjkmnpqrstvwxz] (e.g. 123456789) |
|||
if not id:match( '^c?b?%d%d%d%d%d%d%d%d[0-9bcdfghjkmnpqrstvwxz]$' ) then |
|||
return false |
|||
end |
|||
--Add cb prefix if it has been removed |
|||
if not id:match( '^cb.+$' ) then |
|||
id = 'cb'..id |
|||
end |
|||
return '[https://catalogue.bnf.fr/ark:/12148/'..id..' '..(label or 'フランス')..'] [https://data.bnf.fr/ark:/12148/'..id..' (データ)]'..p.getCatForId( 'BNF' ) |
|||
end |
|||
function p.botanistLink( id, label ) |
|||
--P428's format regex: ('t )?(d')?(de )?(la )?(van (der )?)?(Ma?c)?(De)?(Di)?\p{Lu}?C?['\p{Ll}]*([-'. ]*(van )?(y )?(d[ae][nr]?[- ])?(Ma?c)?[\p{Lu}bht]?C?['\p{Ll}]*)*\.? ?f?\.? (e.g. L.) |
|||
--not easily/meaningfully implementable in Lua's regex since "(this)?" is not allowed... |
|||
if not mw.ustring.match( id, "^[%u%l%d%. '-]+$" ) then --better than nothing |
|||
return false |
|||
end |
|||
id = id:gsub(' +', '%%20') |
|||
return '[https://www.ipni.org/ipni/advAuthorSearch.do?find_abbreviation='..id..' '..(label or 'International Plant Names Index')..']'..p.getCatForId( 'Botanist' ) |
|||
end |
|||
function p.bpnLink( id, label ) |
|||
--P651's format regex: \d{6,8} (e.g. 00123456) |
|||
if not id:match( '^%d%d%d%d%d%d%d%d$' ) and --original format regex, changed 8/2019 to |
|||
not id:match( '^0?%d%d%d%d%d%d%d$' ) and --allow 1-2 leading 0s, allowed by the website |
|||
not id:match( '^0?0?%d%d%d%d%d%d$' ) then |
|||
return false |
|||
end |
|||
return '[http://www.biografischportaal.nl/en/persoon/'..id..' '..(label or 'オランダ')..']'..p.getCatForId( 'BPN' ) --no https as of 9/2019 |
|||
end |
|||
function p.canticLink( id, label ) |
|||
--P1273's format regex: a\d{7}[0-9x] (e.g. a10640745) |
|||
if not id:match( '^a%d%d%d%d%d%d%d[%dx]$' ) then |
|||
return false |
|||
end |
|||
return '[http://cantic.bnc.cat/registres/CUCId/'..id..' '..(label or 'カタルーニャ')..']'..p.getCatForId( 'CANTIC' ) --no https as of 10/2019 |
|||
end |
|||
function p.ciniiLink( id, label ) |
|||
--P271's format regex: DA\d{7}[\dX] (e.g. DA12345678) |
|||
if not id:match( '^DA%d%d%d%d%d%d%d[%dX]$' ) then |
|||
return false |
|||
end |
|||
return '[https://ci.nii.ac.jp/author/'..id..'?l=en '..(label or 'CiNii(日本)')..']'..p.getCatForId( 'CINII' ) |
|||
end |
|||
function p.cwgcLink( id, label ) |
|||
--P1908's format regex: [1-9]\d* (e.g. 75228351) |
|||
if not id:match( '^[1-9]%d*$' ) then |
|||
return false |
|||
end |
|||
return '[https://www.cwgc.org/find-war-dead/casualty/'..id..'/ '..(label or 'コモンウェルス戦争墓地委員会')..']'..p.getCatForId( 'CWGC' ) |
|||
end |
|||
function p.daaoLink( id, label ) |
|||
--P1707's format regex: [a-z\-]+\d* (e.g. rolf-harris) |
|||
if not id:match( '^[a-z%-]+%d*$' ) then |
|||
return false |
|||
end |
|||
return '[https://www.daao.org.au/bio/'..id..' '..(label or 'オーストラリアのアーティスト')..']'..p.getCatForId( 'DAAO' ) |
|||
end |
|||
function p.dblpLink( id, label ) |
|||
--P2456's format regex: \d{2,3} /\d+(-\d+)?|[a-z] /[a-zA-Z][0-9A-Za-z]*(-\d+)? (e.g. 123/123) |
|||
if not id:match( '^%d%d%d?/%d+$' ) and |
|||
not id:match( '^%d%d%d?/%d+%-%d+$' ) and |
|||
not id:match( '^[a-z]/[a-zA-Z][0-9A-Za-z]*$' ) and |
|||
not id:match( '^[a-z]/[a-zA-Z][0-9A-Za-z]*%-%d+$' ) then |
|||
return false |
|||
end |
|||
return '[https://dblp.org/pid/'..id..' '..(label or 'DBLP(コンピュータ科学)')..']'..p.getCatForId( 'DBLP' ) |
|||
end |
|||
function p.dibLink( id, label ) |
|||
--P6829's format regex: a\d{4}\d?(-[A-D])? (e.g. a1953) |
|||
if not id:match( '^a%d%d%d%d%d?%-?[A-D]?$' ) then |
|||
return false |
|||
end |
|||
return '[https://dib.cambridge.org/viewReadPage.do?articleId='..id..' '..(label or 'アイルランド')..']'..p.getCatForId( 'DIB' ) |
|||
end |
|||
function p.dsiLink( id, label ) |
|||
--P2349's format regex: [1-9]\d* (e.g. 1538) |
|||
if not id:match( '^[1-9]%d*$' ) then |
|||
return false |
|||
end |
|||
return '[http://www.uni-stuttgart.de/hi/gnt/dsi2/index.php?table_name=dsi&function=details&where_field=id&where_value='..id..' '..(label or '科学画家')..']'..p.getCatForId( 'DSI' ) |
|||
end |
|||
function p.fastLink( id, label ) |
|||
--P2163's format regex: [1-9]\d{0,7} (e.g. 1916996) |
|||
if not id:match( '^[1-9]%d?%d?%d?%d?%d?%d?%d?$' ) then |
|||
return false |
|||
end |
|||
return '[http://id.worldcat.org/fast/'..id..'/ '..(label or 'Faceted Application of Subject Terminology')..']'..p.getCatForId( 'FAST' ) |
|||
end |
|||
function p.fnzaLink( id, label ) |
|||
--P6792's format regex: [1-9]\d* (e.g. 9785) |
|||
if not id:match( '^[1-9]%d*$' ) then |
|||
return false |
|||
end |
|||
return '[https://findnzartists.org.nz/artist/'..id..'/ '..(label or 'ニュージーランドのアーティスト')..']'..p.getCatForId( 'FNZA' ) |
|||
end |
|||
function p.gndLink( id, label ) |
|||
--P227's format regex: 1[012]?\d{7}[0-9X]|[47]\d{6}-\d|[1-9]\d{0,7}-[0-9X]|3\d{7}[0-9X] (e.g. 4079154-3) |
|||
if not id:match( '^1[012]?%d%d%d%d%d%d%d[0-9X]$' ) and |
|||
not id:match( '^[47]%d%d%d%d%d%d%-%d$' ) and |
|||
not id:match( '^[1-9]%d?%d?%d?%d?%d?%d?%d?%-[0-9X]$' ) and |
|||
not id:match( '^3%d%d%d%d%d%d%d[0-9X]$' ) then |
|||
return false |
|||
end |
|||
return '[https://d-nb.info/gnd/'..id..' '..(label or '統合典拠ファイル(ドイツ)')..']'..p.getCatForId( 'GND' ) |
|||
end |
|||
function p.hdsLink( id, label ) |
|||
--P902's format regex: \d{6} (e.g. 050123) |
|||
if not id:match( '^%d%d%d%d%d%d$' ) then |
|||
return false |
|||
end |
|||
return '[https://hls-dhs-dss.ch/fr/articles/'..id..' '..(label or 'スイス歴史辞典')..']'..p.getCatForId( 'HDS' ) |
|||
end |
|||
function p.iaafLink( id, label ) |
|||
--P1146's format regex: [0-9][0-9]* (e.g. 012) |
|||
if not id:match( '^%d+$' ) then |
|||
return false |
|||
end |
|||
return '[https://www.iaaf.org/athletes/_/'..id..' '..(label or 'ワールドアスレティックス')..']'..p.getCatForId( 'IAAF' ) |
|||
end |
|||
function p.iccuLink( id, label ) |
|||
--P396's format regex: IT\\ICCU\\(\d{10}|\D\D[\D\d]\D\\\d{6}) (e.g. IT\ICCU\CFIV\000163) |
|||
if not id:match( '^IT\\ICCU\\%d%d%d%d%d%d%d%d%d%d$' ) and |
|||
not id:match( '^IT\\ICCU\\%u%u[%u%d]%u\\%d%d%d%d%d%d$' ) then --legacy: %u used here instead of %D (but the faulty ID cat is empty, out of ~12k uses) |
|||
return false |
|||
end |
|||
return '[https://opac.sbn.it/opacsbn/opac/iccu/scheda_authority.jsp?bid='..id..' '..(label or 'イタリア')..']'..p.getCatForId( 'ICCU' ) |
|||
end |
|||
function p.iciaLink( id, label ) |
|||
--P1736's format regex: \d+ (e.g. 1) |
|||
if not id:match( '^%d+$' ) then |
|||
return false |
|||
end |
|||
return '[https://www.imj.org.il/artcenter/newsite/en/?artist='..id..' '..(label or 'ICIA(イスラエル)')..']'..p.getCatForId( 'ICIA' ) |
|||
end |
|||
function p.ieuLink( id, label ) |
|||
--P9070's format regex: [A-Z]\\[A-Z]\\[A-Za-z0-9]+ (e.g. K\Y\Kyiv) |
|||
if not id:match( '^[A-Z]\\[A-Z]\\%w+$' ) then |
|||
return false |
|||
end |
|||
return '[http://www.encyclopediaofukraine.com/display.asp?linkpath=pages\\'..id..' '..(label or 'ウクライナ・インターネット百科事典')..']'..p.getCatForId( 'IEU' ) |
|||
end |
|||
function p.isniLink( id, label ) |
|||
id = p.validateIsni( id ) --e.g. 0000-0000-6653-4145 |
|||
if not id then |
|||
return false |
|||
end |
|||
return '[https://isni.org/isni/'..id..' '..(label or 'ISNI')..']'..p.getCatForId( 'ISNI' ) |
|||
end |
|||
function p.jocondeLink( id, label ) |
|||
--P347's format regex: [\-0-9A-Za-z]{11} (e.g. 12345678901) |
|||
local regex = '^'..string.rep('[%-0-9A-Za-z]', 11)..'$' |
|||
if not id:match( regex ) then |
|||
return false |
|||
end |
|||
return '[https://www.pop.culture.gouv.fr/notice/joconde/'..id..' '..(label or 'Joconde(フランス)')..']'..p.getCatForId( 'Joconde' ) |
|||
end |
|||
function p.kulturnavLink( id, label ) |
|||
--P1248's format regex: [0-9a-f]{8}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{12} (e.g. 12345678-1234-1234-1234-1234567890AB) |
|||
if not id:match( '^%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$' ) then |
|||
return false |
|||
end |
|||
return '[http://kulturnav.org/'..id..' '..(label or 'KulturNav(ノルウェー)')..']'..p.getCatForId( 'KULTURNAV' ) --no https as of 9/2019 |
|||
end |
|||
function p.lccnLink( id, label ) |
|||
local parts = p.splitLccn( id ) --e.g. n78039510 |
|||
if not parts then |
|||
return false |
|||
end |
|||
local lccnType = parts[1] ~= 'sh' and 'names' or 'subjects' |
|||
id = parts[1] .. parts[2] .. p.append( parts[3], '0', 6 ) |
|||
return '[https://id.loc.gov/authorities/'..lccnType..'/'..id..' '..(label or 'アメリカ')..']'..p.getCatForId( 'LCCN' ) |
|||
end |
|||
function p.lirLink( id, label ) |
|||
--P886's format regex: \d+ (e.g. 1) |
|||
if not id:match( '^%d+$' ) then |
|||
return false |
|||
end |
|||
return '[http://www.e-lir.ch/e-LIR___Lexicon.'..id..'.450.0.html '..(label or 'Lexicon Istoric Retic(スイス)')..']'..p.getCatForId( 'LIR' ) --no https as of 9/2019 |
|||
end |
|||
function p.lnbLink( id, label ) |
|||
--P1368's format regex: \d{9} (e.g. 123456789) |
|||
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then |
|||
return false |
|||
end |
|||
return '[https://kopkatalogs.lv/F?func=direct&local_base=lnc10&doc_number='..id..'&P_CON_LNG=ENG '..(label or 'ラトビア')..']'..p.getCatForId( 'LNB' ) |
|||
end |
|||
function p.leonoreLink( id, label ) |
|||
--P640's format regex: LH/\d{1,4}/\d{1,3}|19800035/\d{1,4}/\d{1,5}(Bis)?|C/0/\d{1,2} (e.g. LH/2064/18) |
|||
if not id:match( '^LH/%d%d?%d?%d?/%d%d?%d?$' ) and --IDs from LH/1/1 to LH/2794/54 (legionaries) |
|||
not id:match( '^19800035/%d%d?%d?%d?/%d%d?%d?%d?%d?$' ) and --IDs from 19800035/1/1 to 19800035/385/51670 (legionnaires who died 1954-1977 & some who died < 1954) |
|||
not id:match( '^C/0/%d%d?$' ) then --IDs from C/0/1 to C/0/84 (84 famous legionaries) |
|||
return false |
|||
end |
|||
return '[http://www.culture.gouv.fr/public/mistral/leonore_fr?ACTION=CHERCHER&FIELD_1=COTE&VALUE_1='..id..' '..(label or 'Léonore(フランス)')..']'..p.getCatForId( 'Léonore' ) --no https as of 9/2019 |
|||
end |
|||
function p.maLink( id, label ) |
|||
--P6366's format regex: [1-9]\d{4,9} (e.g. 1498221862) |
|||
if not id:match( '^[1-9]%d%d%d%d%d?%d?%d?%d?%d?$' ) then |
|||
return false |
|||
end |
|||
return '[https://academic.microsoft.com/v2/detail/'..id..' '..(label or 'マイクロソフト・アカデミック')..']'..p.getCatForId( 'MA' ) |
|||
end |
|||
function p.mbaLink( id, label ) |
|||
--P434's format regex: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (e.g. 12345678-1234-1234-1234-1234567890AB) |
|||
if not id:match( '^%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$' ) then |
|||
return false |
|||
end |
|||
local url = 'https://musicbrainz.org/artist/'..id |
|||
local cat = p.getCatForId( 'MusicBrainz' )--special cat name |
|||
if label then |
|||
return '['..url..' '..label..']'..cat |
|||
else |
else |
||
return '' |
|||
return '[[MBA (識別子)|MusicBrainz]] [' .. url .. ' アーティスト]' .. cat |
|||
end |
end |
||
end |
end |
||
local tooltip = function(text, label) |
|||
if label and label~='' then |
|||
--P982's format regex: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (e.g. 12345678-1234-1234-1234-1234567890AB) |
|||
return frame:expandTemplate{ |
|||
if not id:match( '^%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$' ) then |
|||
title = 'Tooltip', |
|||
return false |
|||
args = {text, label} |
|||
end |
|||
} |
|||
local url = 'https://musicbrainz.org/area/'..id |
|||
local cat = p.getCatForId( 'MusicBrainz地域' )--special cat name |
|||
if label then |
|||
return '['..url..' '..label..']'..cat |
|||
else |
else |
||
return text |
|||
return '[[MBAREA (識別子)|MusicBrainz]] [' .. url .. ' 地域]' .. cat |
|||
end |
end |
||
end |
end |
||
local _makelink = function(id, val, additional, qid) --validate values and create a link |
|||
function p.mbiLink( id, label ) |
|||
local link = mw.html.create('span'):addClass('uid') |
|||
--P1330's format regex: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (e.g. 12345678-1234-1234-1234-1234567890AB) |
|||
if not additional and id.prefix then --show prefix on primary value |
|||
if not id:match( '^%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$' ) then |
|||
link:wikitext(id.prefix .. ': ') |
|||
return false |
|||
end |
end |
||
local valid_value = false |
|||
local url = 'https://musicbrainz.org/instrument/'..id |
|||
if id.customlink then -- use function to validate and generate link |
|||
local cat = p.getCatForId( 'MusicBrainz楽器' )--special cat name |
|||
local newlink = require(config.auxiliary)[id.customlink](val.id, additional) |
|||
if label then |
|||
if newlink then |
|||
return '['..url..' '..label..']'..cat |
|||
link:wikitext(newlink) |
|||
valid_value = true |
|||
end |
|||
else |
else |
||
if id.pattern then -- check pattern to determine validity |
|||
return '[[MBI (識別子)|MusicBrainz]] [' .. url .. ' 楽器]' .. cat |
|||
valid_value = string.match(val.id, '^' .. id.pattern .. '$') |
|||
elseif id.patterns then -- check multiple patterns to determine validity |
|||
for _, pattern in ipairs(id.patterns) do |
|||
valid_value = val.id:match('^' .. pattern .. '$') |
|||
if valid_value then break end |
|||
end |
|||
elseif id.valid then -- use function to determine validity |
|||
valid_value = require(config.auxiliary)[id.valid](val.id) |
|||
else -- no validation possible |
|||
valid_value = val.id |
|||
end |
|||
if valid_value then |
|||
local label = id.label |
|||
if not label or additional then |
|||
label = tostring(additional) |
|||
end |
|||
local newlink |
|||
if id.link then |
|||
valid_value = valid_value:gsub('%%', '%%%%') |
|||
newlink = '[' .. mw.ustring.gsub(id.link, '%$1', valid_value) .. ' ' .. label .. ']' |
|||
else |
|||
newlink = valid_value |
|||
end |
|||
link:wikitext(tooltip(newlink, val.name)) |
|||
end |
|||
end |
end |
||
if valid_value then |
|||
end |
|||
local cat = id.category and string.format(config.i18n.cat, id.category) |
|||
link:wikitext(addCat(cat)) |
|||
function p.mblLink( id, label ) |
|||
--P966's format regex: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (e.g. 12345678-1234-1234-1234-1234567890AB) |
|||
if not id:match( '^%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$' ) then |
|||
return false |
|||
end |
|||
local url = 'https://musicbrainz.org/label/'..id |
|||
local cat = p.getCatForId( 'MusicBrainzレーベル' )--special cat name |
|||
if label then |
|||
return '['..url..' '..label..']'..cat |
|||
else |
else |
||
local wdlink = qid and wikilink(':wikidata:' .. qid .. '#P' .. id.property) or '' |
|||
return '[[MBL (識別子)|MusicBrainz]] [' .. url .. ' レーベル]' .. cat |
|||
local name = mw.wikibase.getLabel('P' .. id.property) or '' |
|||
local tooltip = string.format( |
|||
config.i18n.idnotvalid, |
|||
name, |
|||
val.id |
|||
) |
|||
local cat = id.category and string.format( |
|||
config.i18n.cat, |
|||
config.i18n.faulty .. ' ' .. id.category |
|||
) |
|||
link:wikitext(wikilink('File:' .. config.i18n.warningicon .. '|20px|frameless|link=' .. wdlink, tooltip .. '.')) |
|||
:wikitext(addCat(cat)) |
|||
:wikitext(addCat(config.i18n.allfaultycat, name)) |
|||
end |
end |
||
return link |
|||
end |
end |
||
local _makelinks = function(id, qid) |
|||
function p.mbpLink( id, label ) |
|||
--[[==================================]] |
|||
--P1004's format regex: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (e.g. 12345678-1234-1234-1234-1234567890AB) |
|||
--[[ Make links ]] |
|||
if not id:match( '^%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$' ) then |
|||
--[[==================================]] |
|||
return false |
|||
local getquals = function(statement, qualid) |
|||
end |
|||
if statement.qualifiers and statement.qualifiers['P'..qualid] then |
|||
local url = 'https://musicbrainz.org/place/'..id |
|||
return mw.wikibase.renderSnak(statement.qualifiers['P'..qualid][1]) |
|||
local cat = p.getCatForId( 'MusicBrainz場所' )--special cat name |
|||
if label then |
|||
return '['..url..' '..label..']'..cat |
|||
else |
|||
return '[[MBP (識別子)|MusicBrainz]] [' .. url .. ' 場所]' .. cat |
|||
end |
end |
||
end |
end |
||
local ids = {} |
|||
if qid then |
|||
function p.mbrgLink( id, label ) |
|||
for _, statement in ipairs(mw.wikibase.getBestStatements(qid, 'P'..id.property)) do |
|||
--P436's format regex: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (e.g. 12345678-1234-1234-1234-1234567890AB) |
|||
if statement.mainsnak.datavalue then |
|||
if not id:match( '^%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$' ) then |
|||
local val = statement.mainsnak.datavalue.value |
|||
return false |
|||
if val then |
|||
end |
|||
local namedas = getquals(statement, 1810) or getquals(statement, 742) or '' |
|||
local url = 'https://musicbrainz.org/release-group/'..id |
|||
table.insert(ids, {id=val, name=namedas}) |
|||
local cat = p.getCatForId( 'MusicBrainzリリース・グループ' )--special cat name |
|||
end end end end |
|||
if label then |
|||
local links |
|||
return '['..url..' '..label..']'..cat |
|||
if ids[1] then |
|||
else |
|||
links = mw.html.create('li'):node(_makelink(id, ids[1], false, qid)) |
|||
return '[[MBRG (識別子)|MusicBrainz]] [' .. url .. ' リリース・グループ]' .. cat |
|||
if ids[2] then |
|||
local sublinks = mw.html.create('ul') |
|||
for n = 2, #ids do |
|||
sublinks:tag('li'):node(_makelink(id, ids[n], n, qid)):done() |
|||
end |
|||
links:node(sublinks) |
|||
end |
end |
||
end |
end |
||
return links |
|||
function p.mbsLink( id, label ) |
|||
--P1407's format regex: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (e.g. 12345678-1234-1234-1234-1234567890AB) |
|||
if not id:match( '^%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$' ) then |
|||
return false |
|||
end |
|||
local url = 'https://musicbrainz.org/series/'..id |
|||
local cat = p.getCatForId( 'MusicBrainzシリーズ' )--special cat name |
|||
if label then |
|||
return '['..url..' '..label..']'..cat |
|||
else |
|||
return '[[MBS (識別子)|MusicBrainz]] [' .. url .. ' シリーズ]' .. cat |
|||
end |
|||
end |
end |
||
p.authorityControl = function(frame) |
|||
function p.mbwLink( id, label ) |
|||
--[[==================================]] |
|||
--P435's format regex: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (e.g. 12345678-1234-1234-1234-1234567890AB) |
|||
--[[ Main ]] |
|||
if not id:match( '^%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$' ) then |
|||
--[[==================================]] |
|||
return false |
|||
local resolveQID = function(qid) |
|||
end |
|||
if qid then |
|||
local url = 'https://musicbrainz.org/work/'..id |
|||
qid = 'Q' .. mw.ustring.gsub(qid, '^[Qq]', '') |
|||
local cat = p.getCatForId( 'MusicBrainz作品' )--special cat name |
|||
if mw.wikibase.isValidEntityId(qid) and mw.wikibase.entityExists(qid) then |
|||
if label then |
|||
local sitelink = mw.wikibase.getSitelink(qid) |
|||
return '['..url..' '..label..']'..cat |
|||
if sitelink then |
|||
else |
|||
return mw.wikibase.getEntityIdForTitle(sitelink) or mw.wikibase.getEntity(qid).id |
|||
return '[[MBW (識別子)|MusicBrainz]] [' .. url .. ' 作品]' .. cat |
|||
end |
|||
return mw.wikibase.getEntity(qid).id |
|||
end end end |
|||
local conf = config.config |
|||
local parentArgs = frame:getParent().args |
|||
local auxCats = '' |
|||
local rct = false -- boolean to track if there are any links to be returned |
|||
local qid, topic |
|||
if namespace==0 then |
|||
qid = mw.wikibase.getEntityIdForCurrentPage() |
|||
end |
end |
||
if qid then -- article is connected to a Wikidata item |
|||
if parentArgs.qid and resolveQID(parentArgs.qid)~=qid then -- non-matching qid parameter |
|||
function p.mgpLink( id, label ) |
|||
auxCats = auxCats .. needsAttention('D') |
|||
--P549's format regex: \d{1,6} (e.g. 123456) |
|||
if not id:match( '^%d%d?%d?%d?%d?%d?$' ) then |
|||
return false |
|||
end |
end |
||
else -- page is not connected to any Wikidata item |
|||
return '[https://genealogy.math.ndsu.nodak.edu/id.php?id='..id..' '..(label or 'Mathematics Genealogy Project')..']'..p.getCatForId( 'MGP' ) |
|||
qid = resolveQID(parentArgs.qid) -- check qid parameter if no wikidata item is connected |
|||
end |
|||
if qid then -- qid parameter is valid, set topic to display |
|||
topic = mw.wikibase.getLabel(qid) |
|||
function p.naraLink( id, label ) |
|||
if topic then |
|||
--P1225's format regex: ^([1-9]\d{0,8})$ (e.g. 123456789) |
|||
if mw.ustring.lower(title.subpageText)==mw.ustring.lower(topic) then -- suppress topic display if subpagename equals topic up to case change |
|||
if not id:match( '^[1-9]%d?%d?%d?%d?%d?%d?%d?%d?$' ) then |
|||
topic = nil |
|||
return false |
|||
end |
|||
if topic and mw.wikibase.getSitelink(qid) then -- make wikilink to article |
|||
topic = wikilink(mw.wikibase.getSitelink(qid), topic) |
|||
end |
|||
else |
|||
auxCats = auxCats .. needsAttention('L') |
|||
end |
|||
elseif parentArgs.qid and parentArgs.qid~='' then -- invalid qid has been supplied, add to tracking cat |
|||
auxCats = auxCats .. needsAttention('Q') |
|||
end |
end |
||
return '[https://catalog.archives.gov/id/'..id..' '..(label or '公文書館(アメリカ)')..']'..p.getCatForId( 'NARA' ) |
|||
end |
end |
||
local qids = {} -- setup any additional QIDs |
|||
if parentArgs.additional=='auto' and qid then -- check P527 for parts to add additional qids |
|||
function p.nclLink( id, label ) |
|||
local checkparts = function(property) |
|||
--P1048's format regex: \d+ (e.g. 1081436) |
|||
local parts = mw.wikibase.getBestStatements(qid, property) |
|||
if not id:match( '^%d+$' ) then |
|||
if parts then |
|||
return false |
|||
for _, part in ipairs(parts) do |
|||
if part.mainsnak.datavalue and part.mainsnak.datavalue.value.id then |
|||
local resolvedqid = resolveQID(part.mainsnak.datavalue.value.id) |
|||
if resolvedqid then |
|||
table.insert(qids,resolvedqid) |
|||
end end end end end |
|||
for _, part in ipairs(config.auto_additional) do |
|||
checkparts('P' .. part) |
|||
end |
end |
||
elseif parentArgs.additional and parentArgs.additional~='' then |
|||
return '[http://aleweb.ncl.edu.tw/F/?func=accref&acc_sequence='..id..'&CON_LNG=ENG '..(label or '台湾')..']'..p.getCatForId( 'NCL' ) --no https as of 9/2019 |
|||
for _, v in ipairs(mw.text.split(parentArgs.additional, '%s*,%s*')) do |
|||
end |
|||
v = resolveQID(v) |
|||
if v then |
|||
function p.ndlLink( id, label ) |
|||
if v==qid then -- duplicate of qid parameter |
|||
--P349's format regex: 0?\d{8} (e.g. 012345678) |
|||
auxCats = auxCats .. needsAttention('R') |
|||
if not id:match( '^0?%d%d%d%d%d%d%d%d$' ) then |
|||
end |
|||
return false |
|||
table.insert(qids, v) |
|||
else -- invalid QID specified |
|||
auxCats = auxCats .. needsAttention('A') |
|||
end |
|||
end |
end |
||
return '[https://id.ndl.go.jp/auth/ndlna/'..id..' '..(label or '日本')..']'..p.getCatForId( 'NDL' ) |
|||
end |
end |
||
local numsections, sections = 0, {} |
|||
for _, _ in ipairs(config.sections) do -- count number of regular sections |
|||
function p.ngvLink( id, label ) |
|||
numsections = numsections + 1 |
|||
--P2041's format regex: \d+ (e.g. 12354) |
|||
if not id:match( '^%d+$' ) then |
|||
return false |
|||
end |
|||
return '[https://www.ngv.vic.gov.au/explore/collection/artist/'..id..'/ '..(label or 'ヴィクトリア')..']'..p.getCatForId( 'NGV' ) |
|||
end |
end |
||
for _ = 1, #qids+numsections do |
|||
table.insert(sections, {}) |
|||
function p.nkcLink( id, label ) |
|||
--P691's format regex: [a-z]{2,4}[0-9]{2,14} (e.g. abcd12345678901234) |
|||
if not id:match( '^[a-z][a-z][a-z]?[a-z]?%d%d%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?$' ) then |
|||
return false |
|||
end |
|||
return '[https://aleph.nkp.cz/F/?func=find-c&local_base=aut&ccl_term=ica='..id..'&CON_LNG=ENG '..(label or 'チェコ')..']'..p.getCatForId( 'NKC' ) |
|||
end |
end |
||
-- check which identifiers to show/suppress in template |
|||
function p.nlaLink( id, label ) |
|||
local show, show_all_unsuppressed = {}, true |
|||
--P409's format regex: [1-9][0-9]{0,11} (e.g. 123456789012) |
|||
local stripP = function(pid) --strip P from property number |
|||
if not id:match( '^[1-9]%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?$' ) then |
|||
if pid:match('^[Pp]%d+$') then |
|||
return false |
|||
pid = mw.ustring.gsub(pid, '[Pp]', '') |
|||
end |
end |
||
if pid:match('^%d+$') then |
|||
return '[https://nla.gov.au/anbd.aut-an'..id..' '..(label or 'オーストラリア')..']'..p.getCatForId( 'NLA' ) |
|||
return tonumber(pid) |
|||
end |
|||
function p.nlgLink( id, label ) |
|||
--P3348's format regex: [1-9]\d* (e.g. 1) |
|||
if not id:match( '^[1-9]%d*$' ) then |
|||
return false |
|||
end |
end |
||
return '[https://data.nlg.gr/resource/authority/record'..id..' '..(label or 'ギリシャ')..']'..p.getCatForId( 'NLG' ) |
|||
end |
end |
||
local addshowlist = function(list) |
|||
if list and list~='' then |
|||
function p.nliLink( id, label ) |
|||
for _, v in ipairs(mw.text.split(string.lower(list), '%s*,%s*')) do |
|||
--P949's format regex: \d{9} (e.g. 123456789) |
|||
local vprop = stripP(v) |
|||
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then |
|||
if vprop then -- e.g. show=P214 to show one particular property |
|||
return false |
|||
show[vprop] = true |
|||
else -- e.g. show=arts to use whitelist |
|||
if config.whitelists[v] then |
|||
for _, w in ipairs(config.whitelists[v].properties) do |
|||
show[w] = true |
|||
end end end end |
|||
show_all_unsuppressed = false |
|||
end end |
|||
addshowlist(frame.args.show) -- check show parameter on wrapper template |
|||
addshowlist(parentArgs.show) -- check show parameter on article |
|||
addshowlist(parentArgs.country) -- check country parameter on article |
|||
if parentArgs.suppress then |
|||
local suppresslist = mw.text.split(parentArgs.suppress, '%s*,%s*') -- split parameter by comma |
|||
for _, v in ipairs(suppresslist) do |
|||
v = stripP(v) |
|||
if v then |
|||
show[v] = false |
|||
auxCats = auxCats .. wikilink(config.i18n.category .. ':' .. config.i18n.suppressedcat) |
|||
else |
|||
auxCats = auxCats .. needsAttention('P') |
|||
end |
|||
end |
end |
||
return '[http://uli.nli.org.il/F/?func=direct&doc_number='..id..'&local_base=nlx10'..' '..(label or 'イスラエル')..']'..p.getCatForId( 'NLI' ) |
|||
end |
end |
||
local makeSections = function(qid, addit) |
|||
function p.nlkLink( id, label ) |
|||
for _, id in ipairs(conf) do |
|||
--P5034's format regex: KA.(19|20).{7} (e.g. KAC201501465) |
|||
if id.suppressedbyproperty then |
|||
if not id:match( '^KA.19.......$' ) and |
|||
for _, property in ipairs(id.suppressedbyproperty) do |
|||
not id:match( '^KA.20.......$' ) then |
|||
if show[property]=='used' then -- property is in use |
|||
return false |
|||
show[id.property] = false -- suppressed by another property |
|||
end |
|||
end end end |
|||
return '[https://nl.go.kr/authorities/resource/'..id..' '..(label or '韓国')..']'..p.getCatForId( 'NLK' ) |
|||
if show[id.property]==nil then |
|||
end |
|||
show[id.property] = show_all_unsuppressed |
|||
function p.nlpLink( id, label ) |
|||
--P1695's format regex: 9810[0-9]\d* or A[0-9]{7}[0-9X] (e.g. 9810123456789012345 or A10414836) |
|||
if not id:match( '^9810%d+$' ) and |
|||
not id:match( '^A%d%d%d%d%d%d%d[%dX]$' ) then |
|||
return false |
|||
end |
|||
return '[https://tools.wmflabs.org/wikidata-externalid-url?p=1695&id='..id..' '..(label or 'ポーランド')..']'..p.getCatForId( 'NLP' ) |
|||
end |
|||
function p.nlrLink( id, label ) |
|||
--P1003's format regex: \d{9} (e.g. 123456789) |
|||
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then |
|||
return false |
|||
end |
|||
return '[http://aleph.bibnat.ro:8991/F/?func=direct&local_base=NLR10&doc_number='..id..' '..(label or 'ルーマニア')..']'..p.getCatForId( 'NLR' ) |
|||
end |
|||
function p.nskLink( id, label ) |
|||
--P1375's format regex: \d{9} (e.g. 123456789) |
|||
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then |
|||
return false |
|||
end |
|||
return '[http://katalog.nsk.hr/F/?func=direct&doc_number='..id..'&local_base=nsk10 '..(label or 'クロアチア')..']'..p.getCatForId( 'NSK' ) --no https as of 9/2019 |
|||
end |
|||
function p.ntaLink( id, label ) |
|||
--P1006's format regex: \d{8}[\dX] (e.g. 12345678X) |
|||
if not id:match( '^%d%d%d%d%d%d%d%d[%dX]$' ) then |
|||
return false |
|||
end |
|||
return '[http://data.bibliotheken.nl/id/thes/p'..id..' '..(label or 'オランダ')..']'..p.getCatForId( 'NTA' ) |
|||
end |
|||
function p.orcidLink( id, label ) |
|||
id = p.validateIsni( id ) --e.g. 0000-0002-7398-5483 |
|||
if not id then |
|||
return false |
|||
end |
|||
id = id:sub( 1, 4 )..'-'..id:sub( 5, 8 )..'-'..id:sub( 9, 12 )..'-'..id:sub( 13, 16 ) |
|||
return '[https://orcid.org/'..id..' '..(label or 'ORCID')..']'..p.getCatForId( 'ORCID' ) |
|||
end |
|||
function p.picLink( id, label ) |
|||
--P2750's format regex: [1-9]\d* (e.g. 1) |
|||
if not id:match( '^[1-9]%d*$' ) then |
|||
return false |
|||
end |
|||
return '[https://pic.nypl.org/constituents/'..id..' '..(label or 'Photographers\' Identities')..']'..p.getCatForId( 'PIC' ) |
|||
end |
|||
function p.plwabnLink( id, label ) |
|||
--P7293's format regex: 981[0-9]{8}05606 (e.g. 9810696457305606) |
|||
if not id:match( '^981%d%d%d%d%d%d%d%d05606*$' ) then |
|||
return false |
|||
end |
|||
return '[http://mak.bn.org.pl/cgi-bin/KHW/makwww.exe?BM=1&NU=1&IM=4&WI='..id..' '..(label or 'ポーランド')..']'..p.getCatForId( 'PLWABN' ) |
|||
end |
|||
function p.publonsLink( id, label ) |
|||
--P3829's format regex: \d+ (e.g. 654601) |
|||
if not id:match( '^%d+$' ) then |
|||
return false |
|||
end |
|||
return '[https://publons.com/author/'..id..'/ '..(label or 'Publons(研究者)')..']'..p.getCatForId( 'Publons' ) |
|||
end |
|||
function p.ridLink( id, label ) |
|||
--P1053's format regex: [A-Z]{1,3}-\d{4}-(19|20)\d\d (e.g. AAS-5150-2020) |
|||
if not id:match( '^[A-Z][A-Z]?[A-Z]?%-%d%d%d%d%-19%d%d$' ) and |
|||
not id:match( '^[A-Z][A-Z]?[A-Z]?%-%d%d%d%d%-20%d%d$' ) then |
|||
return false |
|||
end |
|||
return '[https://www.researcherid.com/rid/'..id..' '..(label or 'ResearcherID')..']'..p.getCatForId( 'RID' ) |
|||
end |
|||
function p.rismLink( id, label ) |
|||
--P5504's format regex: (pe|ks)?\[1-9]d* (e.g. pe30006410) |
|||
if not id:match( '^pe[1-9]%d*$' ) and --99% start with 'pe' |
|||
not id:match( '^ks[1-9]%d*$' ) and |
|||
not id:match( '^[1-9]%d*$' ) then |
|||
return false |
|||
end |
|||
return '[https://opac.rism.info/search?id='..id..' '..(label or 'RISM(フランス)')..']'..p.getCatForId( 'RISM' ) |
|||
end |
|||
function p.reroLink( id, label ) |
|||
--P3065's format regex: 0[1-2]-[A-Z0-9]{1,10} (e.g. 02-A012345678) |
|||
if not id:match( '^0[1-2]%-[A-Z%d][A-Z%d]?[A-Z%d]?[A-Z%d]?[A-Z%d]?[A-Z%d]?[A-Z%d]?[A-Z%d]?[A-Z%d]?[A-Z%d]?$' ) then |
|||
return false |
|||
end |
|||
return '[http://data.rero.ch/'..id..' '..(label or 'RERO(スイス)')..']'..p.getCatForId( 'RERO' ) |
|||
end |
|||
function p.rkdartistsLink( id, label ) |
|||
--P650's format regex: [1-9]\d{0,5} (e.g. 123456) |
|||
if not id:match( '^[1-9]%d?%d?%d?%d?%d?$' ) then |
|||
return false |
|||
end |
|||
return '[https://rkd.nl/en/explore/artists/'..id..' '..(label or 'RKDアーティスト(オランダ)')..']'..p.getCatForId( 'RKDartists' ) |
|||
end |
|||
function p.rkdidLink( id, label ) |
|||
--P350's format regex: [1-9]\d{0,5} (e.g. 123456) |
|||
if not id:match( '^[1-9]%d?%d?%d?%d?%d?$' ) then |
|||
return false |
|||
end |
|||
return '[https://rkd.nl/nl/explore/images/'..id..' '..(label or 'RKD ID(オランダ)')..']'..p.getCatForId( 'RKDID' ) |
|||
end |
|||
function p.rslLink( id, label ) |
|||
--P947's format regex: \d{1,9} (e.g. 123456789) |
|||
if not id:match( '^%d%d?%d?%d?%d?%d?%d?%d?%d?$' ) then |
|||
return false |
|||
end |
|||
return '[http://aleph.rsl.ru/F?func=find-b&find_code=SYS&adjacent=Y&local_base=RSL11&request='..id..'&CON_LNG=ENG '..(label or 'ロシア')..']'..p.getCatForId( 'RSL' ) --no https as of 9/2019 |
|||
end |
|||
function p.selibrLink( id, label ) |
|||
--P906's format regex: [1-9]\d{4,5} (e.g. 123456) |
|||
if not id:match( '^[1-9]%d%d%d%d%d?$' ) then |
|||
return false |
|||
end |
|||
return '[https://libris.kb.se/auth/'..id..' '..(label or 'スウェーデン')..']'..p.getCatForId( 'SELIBR' ) |
|||
end |
|||
function p.sikartLink( id, label ) |
|||
--P781's format regex: \d{7,9} (e.g. 123456789) |
|||
if not id:match( '^%d%d%d%d%d%d%d%d?%d?$' ) then |
|||
return false |
|||
end |
|||
return '[http://www.sikart.ch/KuenstlerInnen.aspx?id='..id..'&lng=en '..(label or 'SIKART(スイス)')..']'..p.getCatForId( 'SIKART' ) --no https as of 9/2019 |
|||
end |
|||
function p.snacLink( id, label ) |
|||
--P3430's format regex: \d*[A-Za-z][0-9A-Za-z]* (e.g. A) |
|||
if not id:match( '^%d*[A-Za-z][0-9A-Za-z]*$' ) then |
|||
return false |
|||
end |
|||
return '[https://snaccooperative.org/ark:/99166/'..id..' '..(label or 'Social Networks and Archival Context')..']'..p.getCatForId( 'SNAC-ID' ) |
|||
end |
|||
function p.sudocLink( id, label ) |
|||
--P269's format regex: (\d{8}[\dX]|) (e.g. 026927608) |
|||
if not id:match( '^%d%d%d%d%d%d%d%d[%dxX]$' ) then --legacy: allow lowercase 'x' |
|||
return false |
|||
end |
|||
return '[https://www.idref.fr/'..id..' '..(label or 'SUDOC(フランス)')..']'..p.getCatForId( 'SUDOC' ) |
|||
end |
|||
function p.s2authoridLink( id, label ) |
|||
--P4012's format regex: [1-9]\d* (e.g. 1796130) |
|||
if not id:match( '^[1-9]%d*$' ) then |
|||
return false |
|||
end |
|||
return '[https://www.semanticscholar.org/author/'..id..' '..(label or 'Semantic Scholar')..']'..p.getCatForId( 'Semantic Scholar著者' ) --special cat name |
|||
end |
|||
function p.ta98Link( id, label ) |
|||
--P1323's format regex: A\d{2}\.\d\.\d{2}\.\d{3}[FM]? (e.g. A12.3.45.678) |
|||
if not id:match( '^A%d%d%.%d%.%d%d%.%d%d%d[FM]?$' ) then |
|||
return false |
|||
end |
|||
return '[http://tools.wmflabs.org/wikidata-externalid-url/?p=1323&url_prefix=https:%2F%2Fwww.unifr.ch%2Fifaa%2FPublic%2FEntryPage%2FTA98%20Tree%2FEntity%20TA98%20EN%2F&url_suffix=%20Entity%20TA98%20EN.htm&id='..id..' '..(label or 'Terminologia Anatomica')..']'..p.getCatForId( 'TA98' ) |
|||
end |
|||
function p.tdviaLink( id, label ) |
|||
--P7314's format regex: [a-z/-]+] (e.g. barkan-omer-lutfi) |
|||
if not id:match( '^[a-z/-]+$' ) then |
|||
return false |
|||
end |
|||
return '[https://islamansiklopedisi.org.tr/'..id..' '..(label or 'イスラーム百科事典(トルコ)')..']'..p.getCatForId( 'TDVİA' ) |
|||
end |
|||
function p.tepapaLink( id, label ) |
|||
--P3544's format regex: \d+ (e.g. 1) |
|||
if not id:match( '^%d+$' ) then |
|||
return false |
|||
end |
|||
return '[https://collections.tepapa.govt.nz/agent/'..id..' '..(label or 'Te Papa(ニュージーランド)')..']'..p.getCatForId( 'TePapa' ) |
|||
end |
|||
function p.tlsLink( id, label ) |
|||
id = id:gsub(' +', '_') |
|||
--P1362's format regex: \p{Lu}[\p{L}\d_',\.\-\(\)\*/–]{3,59} (e.g. Abcd) |
|||
local class = "[%a%d_',%.%-%(%)%*/–]" |
|||
local regex = "^%u"..string.rep(class, 3)..string.rep(class.."?", 56).."$" |
|||
if not mw.ustring.match( id, regex ) then |
|||
return false |
|||
end |
|||
return '[http://tls.theaterwissenschaft.ch/wiki/'..id..' '..(label or 'Theaterlexikon(スイス)')..']'..p.getCatForId( 'TLS' ) --no https as of 9/2019 |
|||
end |
|||
function p.troveLink( id, label ) |
|||
--P1315's format regex: [1-9]\d{5,7} (e.g. 12345678) |
|||
if not id:match( '^[1-9]%d%d%d%d%d%d?%d?$' ) then |
|||
return false |
|||
end |
|||
return '[https://trove.nla.gov.au/people/'..id..' '..(label or 'Trove(オーストラリア)')..']'..p.getCatForId( 'Trove' ) |
|||
end |
|||
function p.ukparlLink( id, label ) |
|||
--P6213's format regex: [a-zA-Z\d]{8} (e.g. AQUupyiR) |
|||
if not id:match( '^[a-zA-Z%d][a-zA-Z%d][a-zA-Z%d][a-zA-Z%d][a-zA-Z%d][a-zA-Z%d][a-zA-Z%d][a-zA-Z%d]$' ) then |
|||
return false |
|||
end |
|||
return '[https://id.parliament.uk/'..id..' '..(label or '英議会')..']'..p.getCatForId( 'UKPARL' ) |
|||
end |
|||
function p.ulanLink( id, label ) |
|||
--P245's format regex: 500\d{6} (e.g. 500123456) |
|||
if not id:match( '^500%d%d%d%d%d%d$' ) then |
|||
return false |
|||
end |
|||
return '[https://www.getty.edu/vow/ULANFullDisplay?find=&role=&nation=&subjectid='..id..' '..(label or 'アーティスト名(ゲティ)')..']'..p.getCatForId( 'ULAN' ) |
|||
end |
|||
function p.uscongressLink( id, label ) |
|||
--P1157's format regex: [A-Z]00[01]\d{3} (e.g. A000123) |
|||
if not id:match( '^[A-Z]00[01]%d%d%d$' ) then |
|||
return false |
|||
end |
|||
return '[http://bioguide.congress.gov/scripts/biodisplay.pl?index='..id..' '..(label or '米議会')..']'..p.getCatForId( 'USCongress' ) --no https as of 9/2019 |
|||
end |
|||
function p.vcbaLink( id, label ) |
|||
--P8034's format regex: \d{3}\/[1-9]\d{0,5} (e.g. 494/9793) |
|||
if not id:match( '^%d%d%d\/[1-9]%d?%d?%d?%d?%d?$' ) then |
|||
return false |
|||
end |
|||
id = id:gsub('\/', '_') |
|||
return '[https://opac.vatlib.it/auth/detail/'..id..' '..(label or 'バチカン')..']'..p.getCatForId( 'VcBA' ) |
|||
end |
|||
function p.viafLink( id, label ) |
|||
--P214's format regex: [1-9]\d(\d{0,7}|\d{17,20}) (e.g. 123456789, 1234567890123456789012) |
|||
if not id:match( '^[1-9]%d%d?%d?%d?%d?%d?%d?%d?$' ) and |
|||
not id:match( '^[1-9]%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d?%d?%d?$' ) then |
|||
return false |
|||
end |
|||
-- If the "VIAF" entry at [[:m:Interwiki map]] would resolve to "https://viaf.org/viaf/$1" (rather than "http://viaf.org/viaf/$1", as it currently still does), the code below could change from '[https://viaf.org/viaf/'..id..' '..id..']' to '[[:VIAF:'..id..'|'..id..']]'. |
|||
return '[https://viaf.org/viaf/'..id..' '..(label or 'VIAF')..']'..p.getCatForId( 'VIAF' ) |
|||
end |
|||
--[[=========================== Helper functions =============================]] |
|||
function p.append(str, c, length) |
|||
while str:len() < length do |
|||
str = c .. str |
|||
end |
|||
return str |
|||
end |
|||
--Returns the ISNI check digit isni must be a string where the 15 first elements are digits, e.g. 0000000066534145 |
|||
function p.getIsniCheckDigit( isni ) |
|||
local total = 0 |
|||
for i = 1, 15 do |
|||
local digit = isni:byte( i ) - 48 --Get integer value |
|||
total = (total + digit) * 2 |
|||
end |
|||
local remainder = total % 11 |
|||
local result = (12 - remainder) % 11 |
|||
if result == 10 then |
|||
return "X" |
|||
end |
|||
return tostring( result ) |
|||
end |
|||
--Validate ISNI (and ORCID) and retuns it as a 16 characters string or returns false if it's invalid |
|||
--See http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier |
|||
function p.validateIsni( id ) |
|||
--P213 (ISNI) format regex: [0-9]{4} [0-9]{4} [0-9]{4} [0-9]{3}[0-9X] (e.g. 0000-0000-6653-4145) |
|||
--P496 (ORCID) format regex: 0000-000(1-[5-9]|2-[0-9]|3-[0-4])\d{3}-\d{3}[\dX] (e.g. 0000-0002-7398-5483) |
|||
id = id:gsub( '[ %-]', '' ):upper() |
|||
if not id:match( '^%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d[%dX]$' ) then |
|||
return false |
|||
end |
|||
if p.getIsniCheckDigit( id ) ~= string.char( id:byte( 16 ) ) then |
|||
return false |
|||
end |
|||
return id |
|||
end |
|||
function p.splitLccn( id ) |
|||
--P244's format regex: (n|nb|nr|no|ns|sh)([4-9][0-9]|00|20[0-1][0-9])[0-9]{6} (e.g. n78039510) |
|||
if id:match( '^%l%l?%l?%d%d%d%d%d%d%d%d%d?%d?$' ) then |
|||
id = id:gsub( '^(%l+)(%d+)(%d%d%d%d%d%d)$', '%1/%2/%3' ) |
|||
end |
|||
if id:match( '^%l%l?%l?/%d%d%d?%d?/%d+$' ) then |
|||
return mw.text.split( id, '/' ) |
|||
end |
|||
return false |
|||
end |
|||
--[[==========================================================================]] |
|||
--[[ Wikidata & documentation functions ]] |
|||
--[[==========================================================================]] |
|||
function p.getIdsFromWikidata( itemId, property ) |
|||
local ids = {} |
|||
local statements = mw.wikibase.getBestStatements( itemId, property ) |
|||
if statements then |
|||
for _, statement in ipairs( statements ) do |
|||
if statement.mainsnak.datavalue then |
|||
table.insert( ids, statement.mainsnak.datavalue.value ) |
|||
end |
|||
end |
end |
||
if show[id.property] then |
|||
local links = _makelinks(id, qid) |
|||
if links then |
|||
table.insert( |
|||
sections[addit or id.section], |
|||
links |
|||
) |
|||
show[id.property] = 'used' |
|||
rct = true |
|||
end end end end |
|||
local pencil = function(qid) |
|||
if qid then |
|||
return require('Module:EditAtWikidata')._showMessage{ |
|||
pid = 'identifiers', |
|||
qid = qid |
|||
} |
|||
else |
|||
return '' |
|||
end |
end |
||
return ids |
|||
end |
end |
||
makeSections(qid, false) |
|||
for c = 1, #qids do |
|||
-- Creates a human-readable standalone wikitable version of p.conf, and tracking categories with page counts, for use in the documentation |
|||
makeSections(qids[c], numsections+c) |
|||
function p.docConfTable( frame ) |
|||
local wikiTable = '{| class="wikitable sortable"\n'.. |
|||
'! rowspan=2 | 識別子\n'.. |
|||
'! rowspan=2 | グループ\n'.. |
|||
'! rowspan=2 | 表示名\n'.. |
|||
'! rowspan=2; data-sort-type=number | ウィキデータのプロパティ\n'.. |
|||
'! colspan=4 | 追跡カテゴリのページ数\n'.. |
|||
'|-\n'.. |
|||
'! [[:Category:典拠管理情報がある記事|'.. '記事]]\n'.. |
|||
'! [[:Category:典拠管理情報がある利用者ページ|'.. '利用者ページ]]\n'.. |
|||
'! [[:Category:典拠管理情報があるその他のページ|'.. 'その他のページ]]\n'.. |
|||
'! [[:Category:誤った典拠管理情報が指定されている記事|'..'誤った識別子]]\n'.. |
|||
'|-\n' |
|||
local lang = mw.getContentLanguage() |
|||
for _, conf in pairs( p.conf ) do |
|||
local param, pid, section = conf[1], conf[2], conf[4] |
|||
local appearsAs |
|||
if param == "WORLDCATID" then |
|||
-- WorldCat is special |
|||
appearsAs = "[https://www.worldcat.org/identities/lccn-n78039510 WorldCat]" |
|||
elseif conf.prefix then |
|||
appearsAs = conf.prefix |
|||
else |
|||
appearsAs = conf[3](conf[5]) |
|||
end |
|||
local link = conf.link or param .. ' (識別子)' |
|||
local category = conf.category or param |
|||
local args = { id = 'f', pid } |
|||
local wpl = frame:expandTemplate{ title = 'Wikidata property link', args = args } |
|||
--cats |
|||
local articleCat = category..'識別子が指定されている記事' |
|||
local userCat = category..'識別子が指定されている利用者ページ' |
|||
local miscCat = category..'識別子が指定されているその他のページ' |
|||
local faultyCat = '誤った'..category..'識別子が指定されている記事' |
|||
--counts |
|||
local articleCount = lang:formatNum( mw.site.stats.pagesInCategory(articleCat, 'pages') ) |
|||
local userCount = lang:formatNum( mw.site.stats.pagesInCategory(userCat, 'pages') ) |
|||
local miscCount = lang:formatNum( mw.site.stats.pagesInCategory(miscCat, 'pages') ) |
|||
local faultyCount = lang:formatNum( mw.site.stats.pagesInCategory(faultyCat, 'pages') ) |
|||
--concat |
|||
wikiTable = wikiTable..'\n'.. |
|||
'|-\n'.. |
|||
'||[['..link..'|'..param..']]'.. |
|||
'||'..section.. |
|||
'||'..appearsAs.. |
|||
'||data-sort-value='..pid..'|'..wpl.. |
|||
'||style="text-align: right;"|[[:Category:'..articleCat..'|'..articleCount..']]'.. |
|||
'||style="text-align: right;"|[[:Category:'.. userCat..'|'.. userCount..']]'.. |
|||
'||style="text-align: right;"|[[:Category:'.. miscCat..'|'.. miscCount..']]'.. |
|||
'||style="text-align: right;"|[[:Category:'.. faultyCat..'|'.. faultyCount..']]' |
|||
end |
|||
--append derivative WorldCat cats |
|||
local wcd = { 'WorldCat-LCCN', 'WorldCat-VIAF' } |
|||
for _, w in pairs(wcd) do |
|||
local articleCat = w..'識別子が指定されている記事' |
|||
local articleCount = lang:formatNum( mw.site.stats.pagesInCategory(articleCat, 'pages') ) |
|||
local appearsAs |
|||
if w == "WorldCat-LCCN" then |
|||
appearsAs = "[https://www.worldcat.org/identities/lccn-n79-113947 WorldCat(アメリカ議会図書館経由)]" |
|||
else |
|||
appearsAs = "[https://www.worldcat.org/identities/containsVIAFID/12345789 WorldCat(VIAF経由)]" |
|||
end |
|||
wikiTable = wikiTable..'\n'.. |
|||
'|-\n'.. |
|||
'||'..'—'.. |
|||
'||全般'.. |
|||
'||'..appearsAs.. |
|||
'||data-sort-value='..w..'|'..'—'.. |
|||
'||style="text-align: right;"|[[:Category:'..articleCat..'|'..articleCount..']]'.. |
|||
'||style="text-align: right;"|—'.. |
|||
'||style="text-align: right;"|—'.. |
|||
'||style="text-align: right;"|—' |
|||
end |
|||
return require("Module:Suppress categories").main(wikiTable)..'\n|}' |
|||
end |
end |
||
--configure Navbox |
|||
--[[==========================================================================]] |
|||
local outString = '' |
|||
--[[ Configuration ]] |
|||
if rct then -- there is at least one link to display |
|||
--[[==========================================================================]] |
|||
local Navbox = require('Module:Navbox') |
|||
local sect, lastsect = 0, 0 |
|||
-- If a specific "(identifier) redirect" exists for an identifier, please route through this particular redirect rather than linking directly to the target page. This reduces clutter in "What links here" and improves reverse lookup of articles where a manifestation of this particular identifier is used. |
|||
local navboxArgs = { |
|||
name = 'Authority control', |
|||
navboxclass = 'authority-control', |
|||
-- Parameter format: { 'parameter name', propertyId # in Wikidata, formatting/validation function, section, example ID for documentation } |
|||
bodyclass = 'hlist', |
|||
-- Optional named parameters: `link` to override the link in the documentation (defaults to parameter + (identifer)), |
|||
state = parentArgs.state or config.i18n.autocollapse, |
|||
-- category to override the ID in category names (defaults to parameter), |
|||
navbar = 'off' |
|||
-- prefix to include a prefix (usually a wikilink explaining what the identifier is) before the external link itself |
|||
} |
|||
p.conf = { |
|||
for c = 1, numsections+#qids do |
|||
{ 'AAG', 3372, p.aagLink, "美術館と博物館", "1", link = ":en:AAG (identifier)"}, |
|||
if #sections[c]>0 then -- section is non-empty |
|||
{ 'ACM-DL', 864, p.acmLink, "科学データベース", "12345678901", link="ACM DL (識別子)"}, |
|||
sect = sect + 1 |
|||
{ 'ADB', 1907, p.adbLink, "人名辞典", "barton-sir-edmund-toby-71", link = ":en:ADB (identifier)"}, |
|||
lastsect = c |
|||
{ 'AGSA', 6804, p.agsaLink, "美術館と博物館", "3625"}, |
|||
local sectname |
|||
{ 'autores.uy', 2558, p.autoresuyLink, "人名辞典", "12345"}, |
|||
if c<=numsections then -- regular section |
|||
{ 'AWR', 4186, p.awrLink, "人名辞典", "PR00768b", link = ":en:AWR (identifier)"}, |
|||
sectname = config.sections[c].name |
|||
{ 'BIBSYS', 1015, p.bibsysLink, "国立図書館", "1234567890123", link = ":en:BIBSYS (identifier)"}, |
|||
else -- section from additional qid |
|||
{ 'Bildindex', 2092, p.bildLink, "美術研究組織", "1", link = ":en:Bildindex (identifier)"}, |
|||
local qid = qids[c-numsections] |
|||
{ 'BNC', 1890, p.bncLink, "国立図書館", "123456789", link = ":en:BNC (identifier)"}, |
|||
local label, sitelink = mw.wikibase.getLabel(qid), mw.wikibase.getSitelink(qid) |
|||
{ 'BNE', 950, p.bneLink, "国立図書館", "XX1234567"}, |
|||
if label then |
|||
{ 'BNF', 268, p.bnfLink, "国立図書館", "123456789"}, |
|||
if sitelink then |
|||
{ 'Botanist', 428, p.botanistLink , "科学データベース", "L."}, |
|||
local target = mw.title.new(sitelink) |
|||
{ 'BPN', 651, p.bpnLink , "人名辞典", "12345678", link = ":en:BPN (identifier)"}, |
|||
if target==title or (target.isRedirect and target.redirectTarget==title) then -- do not link |
|||
{ 'CANTIC', 1273, p.canticLink, "国立図書館", "a12345678", link = ":en:CANTIC (identifier)"}, |
|||
sectname = label |
|||
{ 'CINII', 271, p.ciniiLink, "科学データベース", "DA12345678", link = "CiNii (識別子)"}, |
|||
else -- make wikilink to article |
|||
{ 'CWGC', 1908, p.cwgcLink, "その他", "1234567"}, |
|||
sectname = wikilink(sitelink, label) |
|||
{ 'DAAO', 1707, p.daaoLink, "美術研究組織", "rolf-harris", link = ":en:DAAO (identifier)"}, |
|||
{ 'DBLP', 2456, p.dblpLink, "科学データベース", "123/123"}, |
|||
{ 'DIB', 6829, p.dibLink, "人名辞典", "a1234", link = ":en:DIB (identifier)"}, |
|||
{ 'DSI', 2349, p.dsiLink, "美術研究組織", "1538", link = ":en:DSI (identifier)"}, |
|||
{ 'FAST', 2163, p.fastLink, "その他", "1", link = ":en:FAST (identifier)"}, |
|||
{ 'FNZA', 6792, p.fnzaLink, "美術研究組織", "12", link = ":en:FNZA (identifier)"}, |
|||
{ 'GND', 227, p.gndLink, "全般", "4079154-3"}, |
|||
{ 'HDS', 902, p.hdsLink, "その他", "050123"}, |
|||
{ 'IAAF', 1146, p.iaafLink, "その他", "123"}, |
|||
{ 'ICCU', 396, p.iccuLink, "国立図書館", "IT\\ICCU\\CFIV\\000163", link = ":en:ICCU (identifier)"}, --formerly SBN |
|||
{ 'ICIA', 1736, p.iciaLink, "美術研究組織", "1", link = ":en:ICIA (identifier)"}, |
|||
{ 'IEU', 9070, p.ieuLink, "その他", "N\\A\\NationalAcademyofArtandArchitecture", link = ":en:IEU (identifier)"}, |
|||
{ 'ISNI', 213, p.isniLink, "全般", "0000-0000-6653-4145", prefix = '[[ISNI (識別子)|ISNI]]'}, |
|||
{ 'Joconde', 347, p.jocondeLink, "美術研究組織", "12345678901", link = ":en:Joconde (identifier)"}, |
|||
{ 'KULTURNAV', 1248, p.kulturnavLink, "美術研究組織", "12345678-1234-1234-1234-1234567890AB", link=":en:KulturNav (identifier)"}, |
|||
{ 'LCCN', 244, p.lccnLink, "国立図書館", "n78039510"}, |
|||
{ 'LIR', 886, p.lirLink, "その他", "1"}, |
|||
{ 'LNB', 1368, p.lnbLink, "国立図書館", "123456789", link = ":en:LNB (identifier)"}, |
|||
{ 'Léonore', 640, p.leonoreLink, "その他", "LH/1/1", prefix = "[[:en:Léonore (identifier)|Léonore(フランス)]]"}, |
|||
{ 'MA', 6366, p.maLink, "その他", "123456789", link = ":en:MA (identifier)"}, |
|||
{ 'MBA', 434, p.mbaLink, "その他", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainz'}, --special cat name |
|||
{ 'MBAREA', 982, p.mbareaLink, "その他", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainz地域' }, --special cat name |
|||
{ 'MBI', 1330, p.mbiLink, "その他", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainz楽器' }, --special cat name |
|||
{ 'MBL', 966, p.mblLink, "その他", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainzレーベル' }, --special cat name |
|||
{ 'MBP', 1004, p.mbpLink, "その他", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainz場所' }, --special cat name |
|||
{ 'MBRG', 436, p.mbrgLink, "その他", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainzリリース・グループ' }, --special cat name |
|||
{ 'MBS', 1407, p.mbsLink, "その他", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainzシリーズ' }, --special cat name |
|||
{ 'MBW', 435, p.mbwLink, "その他", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainz作品' }, --special cat name |
|||
{ 'MGP', 549, p.mgpLink, "科学データベース", "123456"}, |
|||
{ 'NARA', 1225, p.naraLink, "その他", "12345678"}, |
|||
{ 'NCL', 1048, p.nclLink, "国立図書館", "1081436"}, |
|||
{ 'NDL', 349, p.ndlLink, "国立図書館", "012345678"}, |
|||
{ 'NGV', 2041, p.ngvLink, "美術館と博物館", "12354"}, |
|||
{ 'NKC', 691, p.nkcLink, "国立図書館", "abcd12345678901234", link = ":en:NKC (identifier)"}, |
|||
{ 'NLA', 409, p.nlaLink, "国立図書館", "123456789012"}, |
|||
{ 'NLG', 3348, p.nlgLink, "国立図書館", "12345678", link = ":en:NLG (identifier)"}, |
|||
{ 'NLI', 949, p.nliLink, "国立図書館", "123456789"}, |
|||
{ 'NLK', 5034, p.nlkLink, "国立図書館", "KAB197000000"}, |
|||
{ 'NLP', 1695, p.nlpLink, "国立図書館", "9810123456789012345"}, |
|||
{ 'NLR', 1003, p.nlrLink, "国立図書館", "123456789"}, |
|||
{ 'NSK', 1375, p.nskLink, "国立図書館", "123456789", link = ":en:NSK (identifier)"}, |
|||
{ 'NTA', 1006, p.ntaLink, "国立図書館", "12345678X", link = ":en:NTA (identifier)"}, |
|||
{ 'ORCID', 496, p.orcidLink, "全般", "0000-0002-7398-5483", prefix = '[[ORCID (識別子)|ORCID]]'}, |
|||
{ 'PIC', 2750, p.picLink, "美術研究組織", "1", link = ":en:PIC (identifier)"}, |
|||
{ 'PLWABN', 7293, p.plwabnLink, "国立図書館", "9812345678905606"}, |
|||
{ 'Publons', 3829, p.publonsLink, "科学データベース", "2776255", link = ":en:Publons (identifier)"}, |
|||
{ 'RID', 1053, p.ridLink, "科学データベース", "A-1234-1934"}, |
|||
{ 'RISM', 5504, p.rismLink, "その他", "pe1", prefix = '[[:en:RISM (identifier)|RISM(フランス)]]'}, |
|||
{ 'RERO', 3065, p.reroLink, "その他", "02-A012345678", prefix = '[[:en:RERO (identifier)|RERO(スイス)]]'}, |
|||
{ 'RKDartists', 650, p.rkdartistsLink, "美術研究組織", "123456"}, |
|||
{ 'RKDID', 350, p.rkdidLink, "美術研究組織", "123456"}, |
|||
{ 'RSL', 947, p.rslLink, "国立図書館", "123456789"}, |
|||
{ 'SELIBR', 906, p.selibrLink, "国立図書館", "123456", link = ":en:SELIBR (identifier)"}, |
|||
{ 'SIKART', 781, p.sikartLink, "美術研究組織", '123456789', link = ":en:SIKART (identifier)"}, |
|||
{ 'SNAC-ID', 3430, p.snacLink, "その他", "A"}, |
|||
{ 'SUDOC', 269, p.sudocLink, "その他", "026927608", prefix = '[[SUDOC (識別子)|SUDOC(フランス)]]'}, |
|||
{ 'S2AuthorId', 4012, p.s2authoridLink, "科学データベース", "1796130", category = 'Semantic Scholar著者', link = ":en:S2AuthorId (identifier)" }, --special cat name |
|||
{ 'TA98', 1323, p.ta98Link, "科学データベース", "A12.3.45.678", link = ":en:TA98 (identifier)"}, |
|||
{ 'TDVİA', 7314, p.tdviaLink, "その他", "asim-b-behdele", link = ":en:TDVİA (identifier)"}, |
|||
{ 'TePapa', 3544, p.tepapaLink, "美術館と博物館", "1"}, |
|||
{ 'TLS', 1362, p.tlsLink, "その他", "Abcd", link = ":en:TLS (identifier)"}, |
|||
{ 'Trove', 1315, p.troveLink, "その他", "12345678", prefix = '[[:en:Trove (identifier)|Trove(オーストラリア)]]'}, --formerly NLA-person |
|||
{ 'UKPARL', 6213, p.ukparlLink, "その他", "AQUupyiR"}, |
|||
{ 'ULAN', 245, p.ulanLink, "美術研究組織", "500123456", link = ":en:ULAN (identifier)"}, |
|||
{ 'USCongress', 1157, p.uscongressLink, "その他", "A000123", link = ":en:US Congress (identifier)"}, |
|||
{ 'VcBA', 8034, p.vcbaLink, "国立図書館", "494/9793"}, |
|||
{ 'VIAF', 214, p.viafLink, "全般", "123456789", prefix = "[[VIAF (識別子)|VIAF]]"}, |
|||
{ 'WORLDCATID', 7859, nil, "全般", nil, link = "WorldCat Identities (識別子)"}, |
|||
} |
|||
-- Legitimate aliases to p.conf, for convenience |
|||
-- Format: { 'alias', 'parameter name in p.conf' } |
|||
p.aliases = { |
|||
{ 'DNB', 'GND' }, --Deutsche Nationalbibliothek -> Gemeinsame Normdatei |
|||
{ 'Leonore', 'Léonore' }, --alias name without diacritics |
|||
{ 'leonore', 'Léonore' }, --lowercase variant without diacritics |
|||
{ 'MusicBrainz', 'MBA' }, |
|||
{ 'MusicBrainz artist', 'MBA' }, |
|||
{ 'MusicBrainz label', 'MBL' }, |
|||
{ 'MusicBrainz release group', 'MBRG' }, |
|||
{ 'MusicBrainz work', 'MBW' }, |
|||
{ 'SBN', 'ICCU' }, --SBN alias to be deprecated at a later stage |
|||
{ 'TDVIA', 'TDVİA' }, --alias name without diacritics |
|||
{ 'tdvia', 'TDVİA' }, --lowercase variant without diacritics |
|||
} |
|||
-- Deprecated aliases to p.conf; tracked in [[Category:Wikipedia articles with deprecated authority control identifiers]] |
|||
-- Format: { 'deprecated parameter name', 'replacement parameter name in p.conf' } |
|||
p.deprecated = { |
|||
{ 'GKD', 'GND' }, |
|||
{ 'PND', 'GND' }, |
|||
{ 'RLS', 'RSL' }, |
|||
{ 'SWD', 'GND' }, |
|||
{ 'NARA-organization', 'NARA' }, |
|||
{ 'NARA-person', 'NARA' }, |
|||
} |
|||
--[[==========================================================================]] |
|||
--[[ Main ]] |
|||
--[[==========================================================================]] |
|||
function p.authorityControl( frame ) |
|||
local resolveEntity = require( "Module:ResolveEntityId" ) |
|||
local parentArgs = frame:getParent().args --WD IDs added here later |
|||
local iParentArgs = 0 --count original/manual parent args only later |
|||
local worldcatCat = '' |
|||
local multipleIdCat = '' |
|||
local suppressedIdCat = '' |
|||
local deprecatedIdCat = '' |
|||
local differentOnWDCat = '' |
|||
local sameOnWDCat = '' |
|||
--Redirect aliases to proper parameter names |
|||
for _, a in pairs( p.aliases ) do |
|||
local alias, param = a[1], a[2] |
|||
if (parentArgs[param] == nil or parentArgs[param] == '') and parentArgs[alias] then |
|||
parentArgs[param] = parentArgs[alias] |
|||
end |
|||
end |
|||
--Redirect deprecated parameters to proper parameter names, and assign tracking cat |
|||
for _, d in pairs( p.deprecated ) do |
|||
local dep, param = d[1], d[2] |
|||
if (parentArgs[param] == nil or parentArgs[param] == '') and parentArgs[dep] then |
|||
parentArgs[param] = parentArgs[dep] |
|||
if namespace == 0 then |
|||
deprecatedIdCat = '[[Category:非推奨の典拠管理識別子が指定されている記事|'..dep..']]' |
|||
end |
|||
end |
|||
end |
|||
--Use QID= parameter for testing/example purposes only |
|||
local itemId = nil |
|||
if namespace ~= 0 then |
|||
local qid = parentArgs['qid'] or parentArgs['QID'] |
|||
if qid then |
|||
itemId = 'Q'..mw.ustring.gsub(qid, '^[Qq]', '') |
|||
itemId = resolveEntity._id(itemId) --nil if unresolvable |
|||
end |
|||
else |
|||
itemId = mw.wikibase.getEntityIdForCurrentPage() |
|||
end |
|||
--Wikidata fallback if available |
|||
if itemId then |
|||
local iMatches = 0 |
|||
for _, params in ipairs( p.conf ) do |
|||
if params[2] > 0 then |
|||
local val = parentArgs[mw.ustring.lower(params[1])] or parentArgs[params[1]] |
|||
if val == nil or val == '' then |
|||
local wikidataIds = p.getIdsFromWikidata( itemId, 'P'..params[2] ) |
|||
if wikidataIds[1] then |
|||
if val == '' and (namespace == 0 or testcases) then |
|||
suppressedIdCat = '[[Category:抑制された典拠管理識別子がある記事|'..params[1]..']]' |
|||
else |
|||
parentArgs[params[1]] = wikidataIds[1] --add ID from WD |
|||
end |
end |
||
else |
|||
sectname = label |
|||
end |
end |
||
else |
else |
||
auxCats = auxCats .. needsAttention('L') |
|||
iParentArgs = iParentArgs + 1 |
|||
sectname = qid |
|||
local wikidataIds = p.getIdsFromWikidata( itemId, 'P'..params[2] ) |
|||
if wikidataIds[1] and differentOnWDCat == '' then |
|||
local bMatch = false |
|||
for _, wd in pairs( wikidataIds ) do |
|||
if val == wd then |
|||
iMatches = iMatches + 1 |
|||
bMatch = true |
|||
end |
|||
end |
|||
if bMatch == false then |
|||
differentOnWDCat = '[[Category:ウィキデータと異なる典拠管理識別子をパラメータで指定しているページ|'..params[1]..']]' |
|||
end end end end end |
|||
if iMatches > 0 and iMatches == iParentArgs then |
|||
sameOnWDCat = '[[Category:ウィキデータと同じ典拠管理識別子をパラメータで指定しているページ]]' |
|||
end |
|||
end |
|||
--Configured rows |
|||
local rct = 0 |
|||
local sectionOrder = {"全般","国立図書館","美術館と博物館", |
|||
"美術研究組織","人名辞典","科学データベース", |
|||
"その他"} |
|||
local sections = { |
|||
["全般"] = {}, |
|||
["国立図書館"] = {}, |
|||
["美術館と博物館"] = {}, |
|||
["美術研究組織"] = {}, |
|||
["人名辞典"] = {}, |
|||
["科学データベース"] = {}, |
|||
["その他"] = {} |
|||
} |
|||
-- Don't show NLP if PLWABN is present, since they both go to the National Library of Poland |
|||
-- and the library has deprecated NLP IDs in favor of PLWABN IDs |
|||
if parentArgs.PLWABN or parentArgs.plwabn then |
|||
parentArgs.NLP = '' |
|||
parentArgs.nlp = '' |
|||
end |
|||
for _, params in ipairs( p.conf ) do |
|||
local val = parentArgs[mw.ustring.lower(params[1])] or parentArgs[params[1]] |
|||
local tval, tlinks = {}, {} --init tables |
|||
if val and val ~= '' and type(params[3]) == 'function' then |
|||
table.insert( tval, val ) |
|||
if params.prefix then |
|||
table.insert( tlinks, params[3]( val, "1" ) ) |
|||
else |
|||
table.insert( tlinks, params[3]( val ) ) |
|||
end |
|||
end |
|||
--collect other unique vals (IDs) from WD, if present |
|||
if itemId and tval[1] then |
|||
local nextIdVal = 2 |
|||
local wikidataIds = p.getIdsFromWikidata( itemId, 'P'..params[2] ) |
|||
for _, v in pairs( wikidataIds ) do |
|||
local bnew = true |
|||
for _, w in pairs( tval ) do |
|||
if v == w then bnew = false end |
|||
end |
|||
if bnew then |
|||
table.insert( tval, v ) |
|||
table.insert( tlinks, params[3]( v, tostring(nextIdVal) ) ) |
|||
nextIdVal = nextIdVal + 1 |
|||
end |
end |
||
sectname = sectname .. pencil(qid) |
|||
end |
end |
||
navboxArgs['group' .. c] = sectname |
|||
end |
|||
local list = mw.html.create('ul') |
|||
--assemble |
|||
for _, link in ipairs(sections[c]) do |
|||
if tval[1] then |
|||
list:node(link) |
|||
table.insert( sections[params[4]], p.createRow( params[1], tval, nil, tlinks, true, params.category, params.prefix) ) |
|||
rct = rct + 1 |
|||
if tval[2] then |
|||
--multipleIdCat = p.getCatForId( 'multiple' ) -- 日本語版でのカテゴリ導入は様子を見てから |
|||
end |
end |
||
navboxArgs['list' .. c] = tostring(list) |
|||
end |
end |
||
end |
end |
||
if topic then -- display in expanded form with topic |
|||
navboxArgs.title = config.i18n.aclink .. ' – ' .. topic .. pencil(qid) |
|||
--WorldCat |
|||
elseif sect==1 then -- special display when only one section |
|||
local worldcatId = parentArgs['worldcatid'] or parentArgs['WORLDCATID'] |
|||
if lastsect<=numsections then |
|||
if worldcatId and worldcatId ~= '' then --if WORLDCATID present & unsuppressed |
|||
if config.sections[lastsect].hidelabelwhenalone then -- no special label when only general or other IDs are present |
|||
table.insert( sections["全般"], p.createRow( 'WORLDCATID', worldcatId, '[https://www.worldcat.org/identities/'..mw.uri.encode(worldcatId, 'PATH')..' WorldCat]', nil, false ) ) --Validation? |
|||
navboxArgs['group' .. lastsect] = config.i18n.aclink .. pencil(qid) |
|||
worldcatCat = p.getCatForId( 'WORLDCATID' ) |
|||
else -- other regular section |
|||
rct = rct + 1 |
|||
navboxArgs['group' .. lastsect] = config.i18n.aclink .. ': ' .. navboxArgs['group' .. lastsect] .. pencil(qid) |
|||
elseif worldcatId == nil then --if WORLDCATID absent but unsuppressed |
|||
local viafId = parentArgs['viaf'] or parentArgs['VIAF'] |
|||
local lccnId = parentArgs['lccn'] or parentArgs['LCCN'] |
|||
if viafId and viafId ~= '' and p.viafLink( viafId ) then --VIAF must be present, unsuppressed, & validated |
|||
table.insert( sections["全般"], p.createRow( 'VIAF', viafId, '[https://www.worldcat.org/identities/containsVIAFID/'..viafId..' WorldCat(VIAF経由)]', nil, false ) ) |
|||
if namespace == 0 then |
|||
worldcatCat = '[[Category:WorldCat-VIAF識別子が指定されている記事]]' |
|||
end |
end |
||
else -- section from additional qid |
|||
rct = rct + 1 |
|||
navboxArgs['group' .. lastsect] = config.i18n.aclink .. ': ' .. navboxArgs['group' .. lastsect] |
|||
elseif lccnId and lccnId ~= '' and p.lccnLink( lccnId ) then --LCCN must be present, unsuppressed, & validated |
|||
local lccnParts = p.splitLccn( lccnId ) |
|||
if lccnParts and lccnParts[1] ~= 'sh' then |
|||
local lccnIdFmtd = lccnParts[1]..lccnParts[2]..'-'..lccnParts[3] |
|||
table.insert( sections["全般"], p.createRow( 'LCCN', lccnId, '[https://www.worldcat.org/identities/lccn-'..lccnIdFmtd..' WorldCat(アメリカ国会図書館経由)]', nil, false ) ) |
|||
if namespace == 0 then |
|||
worldcatCat = '[[Category:WorldCat-LCCN識別子が指定されている記事]]' |
|||
end |
|||
end |
|||
rct = rct + 1 |
|||
end |
end |
||
else -- add title to navbox |
|||
elseif worldcatId == '' then --if WORLDCATID suppressed |
|||
navboxArgs.title = config.i18n.aclink .. pencil(qid) |
|||
suppressedIdCat = '[[Category:抑制された典拠管理識別子がある記事|WORLDCATID]]' |
|||
end |
end |
||
outString = Navbox._navbox(navboxArgs) |
|||
end |
|||
local Navbox = require('Module:Navbox') |
|||
local elementsCat = '' |
|||
if parentArgs.state |
|||
if rct == 0 or rct >= 25 then |
|||
and parentArgs.state~='' |
|||
local eCat = rct..'種類以上の識別子があるページ' |
|||
and parentArgs.state~=config.i18n.collapsed |
|||
--elementsCat = '[[Category:'..eCat..']]'..p.redCatLink(eCat) |
|||
and parentArgs.state~=config.i18n.expanded |
|||
elementsCat = '' --25種類以上の識別子が指定された場合、追跡カテゴリをつけるという機能は日本語版では導入されていない |
|||
and parentArgs.state~=config.i18n.autocollapse then --invalid state parameter |
|||
end |
|||
auxCats = auxCats .. needsAttention('S') |
|||
end |
|||
local outString = '' |
|||
if testcases then |
|||
auxCats = mw.ustring.gsub(auxCats, '(%[%[)(' .. config.i18n.category .. ')', '%1:%2') --for easier checking |
|||
local sectionID = 1 |
|||
end |
|||
local args = { pid = 'identifiers' } -- #target the list of identifiers |
|||
if testcases and itemId then args = { pid = 'identifiers', qid = itemId } end --expensive |
|||
--out |
|||
local pencil = frame:expandTemplate{ title = 'EditAtWikidata', args = args} |
|||
outString = outString .. auxCats |
|||
local navboxArgs = { |
|||
if namespace~=0 then |
|||
name = 'Normdaten', |
|||
-- 日本語版独自の変更あり |
|||
navboxclass = 'authority-control', |
|||
outString = mw.ustring.gsub(outString,'(%[%[)(' .. config.i18n.category .. ':)([^%|%]]+' .. config.i18n.Articles .. ')%|?[^%|%]]*(%]%])','%1:%2%3%4') |
|||
bodyclass = 'hlist', |
|||
end |
|||
state = parentArgs.state or 'autocollapse', |
|||
local check = require('Module:Check for unknown parameters/sandbox')._check |
|||
navbar = 'off' |
|||
local sortkey |
|||
} |
|||
if namespace==0 then |
|||
for _, sectName in ipairs(sectionOrder) do |
|||
sortkey = '*' .. title.text |
|||
if #sections[sectName] ~= 0 then |
|||
else |
|||
navboxArgs["group" .. sectionID] = sectName |
|||
sortkey = title.fullText |
|||
navboxArgs["list" .. sectionID] = table.concat(sections[sectName]) |
|||
end |
|||
sectionID = sectionID + 1 |
|||
outString = outString .. check({ |
|||
end |
|||
['unknown'] = wikilink(config.i18n.category .. ':' .. config.i18n.pageswithparams, sortkey), |
|||
end |
|||
['preview'] = config.i18n.previewwarning, 'show', 'country', 'suppress', 'additional', 'qid', 'state' |
|||
if navboxArgs.group2 then |
|||
}, parentArgs) |
|||
navboxArgs.title = "[[Help:典拠管理|典拠管理]]" .. pencil |
|||
return outString |
|||
else |
|||
end |
|||
local sect = navboxArgs.group1 |
|||
if sect == "全般" or sect == "その他" then |
|||
p.makelink = function(id, qid) |
|||
-- Just say "Authority control" with no label if only general or only other IDs are present |
|||
return _makelinks(id, qid) |
|||
-- since "general" is redundant and "other" is silly when there's nothing to contrast it with |
|||
navboxArgs.group1 = "[[Help:典拠管理|典拠管理]]" .. pencil |
|||
else |
|||
navboxArgs.group1 = "[[Help:典拠管理|典拠管理:" .. sect .. "]] " .. pencil |
|||
end |
|||
end |
|||
outString = Navbox._navbox(navboxArgs) |
|||
end |
|||
local auxCats = worldcatCat .. elementsCat .. multipleIdCat .. suppressedIdCat .. |
|||
deprecatedIdCat .. differentOnWDCat .. sameOnWDCat |
|||
if testcases then |
|||
auxCats = mw.ustring.gsub(auxCats, '(%[%[)(Category)', '%1:%2') --for easier checking |
|||
end |
|||
outString = outString .. auxCats |
|||
if namespace ~= 0 then |
|||
outString = mw.ustring.gsub(outString, '(%[%[)(Category:[^%]]*記事)', '%1:%2') --by definition |
|||
end |
|||
return outString |
|||
end |
end |
||
2024年11月16日 (土) 07:44時点における最新版
これはモジュール:Authority control (差分)のモジュール・サンドボックスページです。 |
Wikipedia:典拠管理 |
---|
テンプレート |
モジュール |
Config |
Auxiliary |
Docモジュール |
カテゴリ |
Luaモジュールを使用しています: |
{{Normdaten}}のコードを生成しているモジュールです。
識別子、ウィキデータプロパティと追跡カテゴリ
[編集]ウィキデータのプロパティ | 識別子 | 分類 | 表示例 |
---|---|---|---|
ISNI (P213) | 国際標準名称識別子 | 全般 | |
Remarks:ISNI is a method for uniquely identifying the public identities of contributors to media content such as books, TV programmes, and newspaper articles. Please take care not to confuse ISNI and ORCID identifiers. | |||
VIAF識別子 (P214) | VIAF識別子 | 全般 | |
Remarks:International authority data from the Online Computer Library Center (OCLC) | |||
GND識別子 (P227) | GND識別子 | 国立図書館 | |
Remarks:Authority data on people, corporations and subjects from the German National Library (DNB) | |||
アメリカ議会図書館典拠管理識別子 (P244) | アメリカ議会図書館リンクデータサービス | 国立図書館 | |
Remarks:See Wikipedia:Authority control#LCCN for formatting instructions | |||
ULAN (P245) | 美術人名ユニオン・リスト | 芸術家 | |
Remarks:ULAN is an online database using a controlled vocabulary currently containing around 293,000 names and other information about artists. Names in ULAN may include given names, pseudonyms, variant spellings, names in multiple languages, and names that have changed over time (e.g., married names). | |||
フランス国立図書館識別子 (P268) | フランス国立図書館 | 国立図書館 | |
Remarks:Authority data of people listed in the general catalogue of the National Library of France | |||
フランス国立図書館識別子 (P268) | フランス国立図書館 | 国立図書館 | |
IdRef識別子 (P269) | IdRef | その他 | |
Remarks:Authority data of people listed in the general catalogue of the University Documentation System of France. Also available from English-speaking catalog (search author, click one book, click author name, take PPN= value of the URL) | |||
NACSIS-CAT著者名典拠ID (P271) | NACSIS-CAT著者名典拠ID | 学術データベース | |
Remarks:CiNii is a bibliographic database service for material in Japanese academic libraries. It is maintained by the National Institute of Informatics. | |||
Joconde (P347) | ジョコンデ | その他 | |
国立国会図書館典拠ID (P349) | ウェブ版国立国会図書館典拠 | 国立図書館 | |
Remarks:Authority data listed in the catalog of the national library of Japan. Search also available via VIAF. | |||
RKDimages (P350) | RKD絵画データベース | その他 | |
メリメ識別子 (P380) | フランス登録記念物 | 地理 | |
イタリア国立図書館サービス著者識別子 (P396) | 国立図書館 | ||
Remarks:Central Institute for the Union Catalogue (ICCU: Istituto Centrale per il Catalogo Unico) is an Italian government agency created to build a single catalog of all the libraries in the nation. It manages National Library Service (Servizio bibliotecario nazionale). | |||
オーストラリア図書館識別子 (P409) | オーストラリア国立図書館典拠 | 国立図書館 | |
Remarks:NLA Trove's People and Organisation view allows the discovery of biographical and other contextual information about people and organisations. Search also available via VIAF. | |||
植物学者の短縮名 (P428) | International Plant Names Index | 学術データベース | |
Remarks:Author citation (botany): standard form (official abbreviation) of a personal name for use in an author citation (only for names of algae, fungi and plants). Links to page at International Plant Names Index (IPNI). | |||
MusicBrainzアーティスト識別子 (P434) | MusicBrainzアーティスト識別子 | 芸術家 | |
Remarks:MusicBrainz is an open music encyclopedia that collects music metadata and makes it available to the public. | |||
MusicBrainz作品ID (P435) | その他 | ||
MusicBrainzリリース・グループ識別子 (P436) | その他 | ||
Structurae (P454) | Structurae | 地理 | |
ORCID (P496) | ORCID | 学術データベース | |
Remarks:Authority data on researchers, academics, etc. The ID range is a subset of the ISNI range. For free text links (for example when mentioning a person on page which is not about them), it is also possible to use {{ORCID}}. Authors—including Wikipedia editors—may obtain an ORCID by signing up at orcid.org/register. Please take care not to confuse ORCID and ISNI identifiers. | |||
Mathematics Genealogy Project ID (P549) | 学術データベース | ||
Remarks:Mathematics Genealogy Project is a web-based database for the academic genealogy of mathematicians. | |||
RKDartists識別子 (P650) | オランダ美術史研究所データベース | 芸術家 | |
Remarks:RKDartists is an online database using a controlled vocabulary currently containing around 200,000+ names and other information about artists. Names in RKDartists may include given names, pseudonyms, variant spellings, names in multiple languages, and names that have changed over time (e.g., married names). | |||
(P651) | オランダ人物典拠管理データベース | 人物 | |
Remarks:Dutch project with material for 40,000 digitized biographies, including former colonies of the Netherlands. | |||
チェコ国立図書館識別子 (P691) | チェコ国立図書館典拠データベース | 国立図書館 | |
Remarks:National Library of the Czech Republic (Národní knihovna České republiky) is the central library of the Czech Republic. | |||
JPL小天体データベース SPK-ID (P716) | JPL Small-Body Database | その他 | |
(P781) | 芸術家 | ||
Remarks:SIKART is a biographical dictionary and a database on visual art in Switzerland and Liechtenstein. It is published online by the Swiss Institute for Art Research (SIAR). | |||
ISIL識別子 (P791) | 図書館及び関連組織のための国際標準識別子 | 人物 | |
Remarks:Libraries, museums and archives, decentralized national databases. | |||
ACM電子図書館著者識別子 (P864) | ACM電子図書館 | 学術データベース | |
BMLO (P865) | 人物 | ||
Lexicon istoric retic識別子 (P886) | Lexicon istoric retic | その他 | |
Remarks:Lexicon Istoric Retic (LIR) is a two volume version with a selection of articles published in Romansh. | |||
スイス歴史事典識別子 (P902) | スイス歴史事典 | その他 | |
Remarks:Historical Dictionary of Switzerland is an encyclopedia on the history of Switzerland. | |||
ロシア国立図書館 (モスクワ)人物識別子 (P947) | ロシア国立図書館 | 国立図書館 | |
Remarks:Russian State Library (Российская государственная библиотека) is the national library of Russia. | |||
スペイン国立図書館識別子 (P950) | スペイン国立図書館識別子 | 国立図書館 | |
Remarks:National Library of Spain (BNE: Biblioteca Nacional de España) is a major public library, the largest in Spain. | |||
MusicBrainzレーベルID (P966) | その他 | ||
MusicBrainz地域ID (P982) | 地理 | ||
ルーマニア国立図書館識別子 (P1003) | 国立図書館 | ||
MusicBrainz 場所 ID (P1004) | 地理 | ||
PTBNP識別子 (P1005) | 国立図書館 | ||
NTA PPN識別子 (P1006) | 国立図書館 | ||
BIBSYS識別子 (P1015) | 国立図書館 | ||
Remarks:BIBSYS is a supplier of library and information systems for all Norwegian university Libraries, the National Library of Norway, college libraries, and a number of research libraries and institutions. | |||
(P1045) | 国民議会議員 | 人物 | |
国家図書館識別子 (P1048) | 国家図書館 | 国立図書館 | |
Remarks:National Central Library is the national library of Taiwan, Republic of China. | |||
ResearcherID (P1053) | ResearcherID | 学術データベース | |
Remarks:An identifying system for scientific authors. The system was introduced in January 2008 by Thomson Reuters. The combined use of the digital object identifier with the ResearcherID allows for a unique association of authors and scientific articles. | |||
ワールド・アスレティックスID (P1146) | ワールド・アスレティックス・データベース | 人物 | |
Remarks:The IAAF athlete database lists information about sport of athletics competitors. | |||
Scopus著者識別子 (P1153) | Scopus | 学術データベース | |
Remarks:SciVerse Scopus is a bibliographic database containing abstracts and citations for academic journal articles. It covers nearly 19,500 titles from over 5,000 international publishers, of which 16,500 are peer-reviewed journals in the scientific, technical, medical, and social sciences (including arts and humanities). | |||
アメリカ国会識別子 (P1157) | アメリカ国会人物識別子 | 人物 | |
Remarks:Biographical Directory of the United States Congress is a biographical dictionary of all present and former members of the United States Congress and its predecessor, the Continental Congress. Also included are Delegates from territories and the District of Columbia and Resident Commissioners from the Philippines and Puerto Rico. | |||
欧州議会議員データベースのID (P1186) | 欧州議会議員 | 人物 | |
アメリカ国立公文書記録管理局識別子 (P1225) | 国立公文書館識別子 | その他 | |
Remarks:National Archives and Records Administration (NARA) is an independent agency of the United States government charged with preserving and documenting government and historical records. | |||
(P1248) | 芸術家 | ||
Remarks:KulturNav is a Norwegian cloud-based software service, allowing users to create, manage and distribute name authorities and terminology, focusing on the needs of museums and other cultural heritage institutions. The software is developed by KulturIT ANS and the development project is funded by the Arts Council Norway. | |||
NLAトローヴ人物識別子 (P1315) | トローヴ | 人物 | |
Terminologia Anatomica 98 (P1323) | Terminologia Anatomica | その他 | |
MusicBrainz楽器ID (P1330) | その他 | ||
(P1362) | その他 | ||
Remarks:Theaterlexikon der Schweiz (TLS) is an encyclopedia about theatre in Switzerland. It was developed by the Institute of Theatre Studies of the University of Berne. | |||
LNB識別子 (P1368) | 国立図書館 | ||
NSK識別子 (P1375) | 国立図書館 | ||
MusicBrainzシリーズID (P1407) | その他 | ||
zbMATH著者識別子 (P1556) | 学術データベース | ||
プレアデスID (P1584) | プレアデス | 地理 | |
Remarks:Pleiades is a joint project of the Institute for the Study of the Ancient World at New York University and the Ancient World Mapping Center at the University of North Carolina at Chapel Hill. | |||
(P1707) | 芸術家 | ||
(P1736) | 芸術家 | ||
GVP火山番号 (P1886) | Global Volcanism Program | 地理 | |
チリ書誌典拠収集目録識別子 (P1890) | 国立図書館 | ||
オーストラリア人名辞典ID (P1907) | オーストラリア人名事典 | 人物 | |
CWGC人物識別子 (P1908) | コモンウェルス戦争墓地委員会データベース | 人物 | |
Google Scholar著者識別子 (P1960) | Google Scholar著者識別子 | 学術データベース | |
イタリア人名事典識別子 (P1986) | イタリア人名事典 | 人物 | |
ビクトリア国立美術館芸術家ID (P2041) | ヴィクトリア国立美術館 | 芸術家 | |
FAST識別子 (P2163) | 全般 | ||
ニューヨーク近代美術館 芸術家ID (P2174) | 芸術家 | ||
オルセー美術館 作者識別子 (P2268) | 芸術家 | ||
シュトゥットガルト科学イラストレーター・データベースID (P2349) | 芸術家 | ||
(P2418) | Structurae | 人物 | |
DBLP著者識別子 (P2456) | DBLP | 学術データベース | |
NCES 学校ID (P2484) | 地理 | ||
autores.uy ID (P2558) | Autores.uy | 人物 | |
Remarks:autores.uy is an author's database, that focus on Uruguayan authors. It was created and maintained by the Uruguayan chapter of Creative Commons. It also provides access to digitized works of the authors in public domain. | |||
写真家識別目録識別子 (P2750) | 写真家識別目録 | 芸術家 | |
Remarks:PIC is a photographer's database. It is maintained by the New York Public Library. | |||
ARLHS灯台ID (P2980) | ARLHS 灯台 ID | 地理 | |
(P3223) | 地理 | ||
(P3233) | PhilPapers | 学術データベース | |
(P3326) | 地理 | ||
ギリシャ国立図書館識別子 (P3348) | ギリシア国立図書館 | 国立図書館 | |
オークランド美術館芸術家ID (P3372) | オークランド美術館 | 芸術家 | |
(P3407) | 地理 | ||
SNAC ARK識別子 (P3430) | SNAC | その他 | |
テ・パパ代理識別子 (P3544) | ニュージーランド国立博物館テ・パパ・トンガレワ収蔵物オンライン | その他 | |
英国水路部灯台番号 (P3562) | 英国水路部灯台番号 | 地理 |
|
アメリカ国家地理空間情報局灯台識別子 (P3563) | アメリカ国家地理空間情報局灯台識別子 | 地理 | |
マリントラフィック灯台識別子 (P3601) | マリントラフィック灯台識別子 | 地理 | |
アメリカ沿岸警備隊灯台識別子 (P3723) | アメリカ沿岸警備隊灯台識別子 | 地理 | |
(P3788) | 国立図書館 | ||
Publons著者識別子 (P3829) | パブロンズ | 学術データベース | |
イタリア海軍ビーコン識別子 (P3863) | Fari e Segnalamenti | 地理 | |
カナダ沿岸警備隊灯台識別子 (P3920) | カナダ沿岸警備隊灯台識別子 | 地理 | |
Remarks:Identifier from one of 4 volumes of List of Lights, Buoys and Fog Signals issued by the Canadian Coast Guard. | |||
(P3993) | 地理 |
| |
(P4038) | 地理 |
| |
(P4055) | 地理 |
| |
ADK メンバーID (P4114) | ベルリン芸術アカデミー | 芸術家 | |
(P4143) | 地理 |
| |
Australian Women's Register ID (P4186) | 人物 | ||
(P4423) | 地理 |
| |
(P4457) | 歴史的録音の資料台帳 (アメリカ) | 芸術家 | |
(P4534) | 人物 | ||
(P4535) | 地理 | ||
シュテーデル美術館 芸術家ID (P4581) | シュテーデル美術館 | 芸術家 | |
現代ウクライナ百科事典ID (P4613) | 現代ウクライナ百科事典 | その他 | |
MathSciNet著者識別子 (P4955) | 学術データベース | ||
韓国国立中央図書館識別子 (P5034) | 韓国国立中央図書館典拠ファイル | 国立図書館 | |
(P5226) | 芸術家 | ||
Remarks:Identifier of an artist in the B.R.A.H.M.S. (Base Relationnelle d'Articles Hypertextes sur la Musique du 20e Siècle database), by the IRCAM | |||
(P5288) | 地理 | ||
(P5302) | その他 | ||
Remarks:Identifier for a musical work in the B.R.A.H.M.S. (Base Relationnelle d'Articles Hypertextes sur la Musique du 20e Siècle database) database, by the IRCAM | |||
(P5321) | 芸術家 | ||
(P5368) | カナダ国立美術館 | 芸術家 | |
(P5504) | その他 | ||
Libris-URI (P5587) | LIBRIS | 国立図書館 | |
SELIBR識別子 (P906) | LIBRIS | 国立図書館 | |
Remarks:Authority data from the National Library of Sweden | |||
小惑星センター 天体ID (P5736) | 小惑星センター・データベース | その他 | |
(P5818) | 植物園自然保護国際機構 | 地理 | |
イギリス議会識別子 (P6213) | イギリスの議会 | 人物 | |
Remarks:UK parliament member data | |||
(P6792) | 芸術家 | ||
南オーストラリア美術館芸術家ID (P6804) | 南オーストラリア美術館 | 芸術家 | |
(P6829) | アイルランド人名事典 | 人物 | |
ポーランド国立図書館識別子 (P7293) | MAK | 国立図書館 | |
ポーランド国立図書館識別子(旧) (P1695) | ポーランド国立図書館 | 国立図書館 | |
グラミー賞芸術家識別子 (P7303) | グラミー賞芸術家識別子 | 芸術家 | |
トルコ宗教財団イスラーム百科事典ID (P7314) | トルコ宗教財団イスラーム百科事典 | その他 | |
ドイッチェ・ビオグラフィー識別子 (P7902) | GND識別子 | 人物 | |
バチカン図書館VcBA識別子 (P8034) | opac.vatlib.it | 国立図書館 | |
Remarks:Vatican Library document data | |||
イスラエル国立図書館J9U識別子 (P8189) | イスラエル国立図書館名称・主題典拠ファイル | 国立図書館 | |
(P8381) | エミー賞 | 芸術家 | |
(P8671) | その他 | ||
Remarks:Deutsche Bahn station code, identifier for train stations and other operating points used by Deutsche Bahn | |||
KANTO ID (P8980) | KANTO | 国立図書館 | |
ウクライナ・インターネット百科事典識別子 (P9070) | IEU (識別子) | その他 | |
(P9692) | 芸術家 | ||
Remarks:Identifier for a musician in the Lexikon verfolgter Musiker und Musikerinnen der NS-Zeit | |||
(P9725) | 地理 | ||
Remarks:Identifier for an entry in the castles inventory database EBIDAT | |||
CANTIC識別子 (P9984) | カタルーニャ名称・題名典拠ファイル | 国立図書館 | |
(P10020) | 人物 | ||
レオポルディーナ会員識別子(新) (P10299) | www.leopoldina.org | 学術データベース | |
WorldCat Entities識別子 (P10832) | WorldCat Entities | 全般 | |
Remarks:WorldCat Entities for persons and works, by OCLC | |||
ベルギー王立図書館 人物ID (P11249) | ベルギー王立図書館オンライン・カタログ | 国立図書館 | |
CiNii Research ID (P11496) | CiNii Research ID | 学術データベース | |
ドイッチェ・シンクロンカルテイ 人物ID (P11646) | ドイッチェ・シンクロンカルテイ | 人物 | |
Remarks:Online database of voice actors in film and television productions | |||
(P12204) | その他 | ||
Remarks:Identifier for an entry in the Electronic Literature as a Model of Creativity and Innovation in Practice (ELNCIP) Knowledge Base | |||
(P12754) | その他 | ||
DDB 人物 (GND) ID (P13049) | ドイツ電子図書館 | 人物 | |
Remarks:Deutsche Digitale Bibliothek |
require('strict')
local p = {}
local frame = mw.getCurrentFrame()
local config_file = frame.args.config and frame.args.config~='' and ('/' .. frame.args.config) or ''
local config = mw.loadData('Module:Authority control/config' .. config_file)
local title = mw.title.getCurrentTitle()
local namespace = title.namespace
local testcases = title.subpageText == config.i18n.testcases
local wikilink = function(target, label)
return label and '[[' .. target .. '|' .. label .. ']]' or '[[' .. target .. ']]'
end
local needsAttention = function(sortkey)
return wikilink(config.i18n.category .. ':' .. config.i18n.attentioncat, sortkey .. title.text)
end
local addCat = function(cat, sortkey)
if cat and cat~='' and (namespace==0 or namespace==14 or testcases) then
local redlinkcat = ''
if testcases==false then
local success, exists = pcall(function() return mw.title.new(cat, 14).exists end)
if success and not exists then
redlinkcat = needsAttention('N')
end
end
return wikilink(config.i18n.category..':'..cat, sortkey and sortkey..title.text) .. redlinkcat
else
return ''
end
end
local tooltip = function(text, label)
if label and label~='' then
return frame:expandTemplate{
title = 'Tooltip',
args = {text, label}
}
else
return text
end
end
local _makelink = function(id, val, additional, qid) --validate values and create a link
local link = mw.html.create('span'):addClass('uid')
if not additional and id.prefix then --show prefix on primary value
link:wikitext(id.prefix .. ': ')
end
local valid_value = false
if id.customlink then -- use function to validate and generate link
local newlink = require(config.auxiliary)[id.customlink](val.id, additional)
if newlink then
link:wikitext(newlink)
valid_value = true
end
else
if id.pattern then -- check pattern to determine validity
valid_value = string.match(val.id, '^' .. id.pattern .. '$')
elseif id.patterns then -- check multiple patterns to determine validity
for _, pattern in ipairs(id.patterns) do
valid_value = val.id:match('^' .. pattern .. '$')
if valid_value then break end
end
elseif id.valid then -- use function to determine validity
valid_value = require(config.auxiliary)[id.valid](val.id)
else -- no validation possible
valid_value = val.id
end
if valid_value then
local label = id.label
if not label or additional then
label = tostring(additional)
end
local newlink
if id.link then
valid_value = valid_value:gsub('%%', '%%%%')
newlink = '[' .. mw.ustring.gsub(id.link, '%$1', valid_value) .. ' ' .. label .. ']'
else
newlink = valid_value
end
link:wikitext(tooltip(newlink, val.name))
end
end
if valid_value then
local cat = id.category and string.format(config.i18n.cat, id.category)
link:wikitext(addCat(cat))
else
local wdlink = qid and wikilink(':wikidata:' .. qid .. '#P' .. id.property) or ''
local name = mw.wikibase.getLabel('P' .. id.property) or ''
local tooltip = string.format(
config.i18n.idnotvalid,
name,
val.id
)
local cat = id.category and string.format(
config.i18n.cat,
config.i18n.faulty .. ' ' .. id.category
)
link:wikitext(wikilink('File:' .. config.i18n.warningicon .. '|20px|frameless|link=' .. wdlink, tooltip .. '.'))
:wikitext(addCat(cat))
:wikitext(addCat(config.i18n.allfaultycat, name))
end
return link
end
local _makelinks = function(id, qid)
--[[==================================]]
--[[ Make links ]]
--[[==================================]]
local getquals = function(statement, qualid)
if statement.qualifiers and statement.qualifiers['P'..qualid] then
return mw.wikibase.renderSnak(statement.qualifiers['P'..qualid][1])
end
end
local ids = {}
if qid then
for _, statement in ipairs(mw.wikibase.getBestStatements(qid, 'P'..id.property)) do
if statement.mainsnak.datavalue then
local val = statement.mainsnak.datavalue.value
if val then
local namedas = getquals(statement, 1810) or getquals(statement, 742) or ''
table.insert(ids, {id=val, name=namedas})
end end end end
local links
if ids[1] then
links = mw.html.create('li'):node(_makelink(id, ids[1], false, qid))
if ids[2] then
local sublinks = mw.html.create('ul')
for n = 2, #ids do
sublinks:tag('li'):node(_makelink(id, ids[n], n, qid)):done()
end
links:node(sublinks)
end
end
return links
end
p.authorityControl = function(frame)
--[[==================================]]
--[[ Main ]]
--[[==================================]]
local resolveQID = function(qid)
if qid then
qid = 'Q' .. mw.ustring.gsub(qid, '^[Qq]', '')
if mw.wikibase.isValidEntityId(qid) and mw.wikibase.entityExists(qid) then
local sitelink = mw.wikibase.getSitelink(qid)
if sitelink then
return mw.wikibase.getEntityIdForTitle(sitelink) or mw.wikibase.getEntity(qid).id
end
return mw.wikibase.getEntity(qid).id
end end end
local conf = config.config
local parentArgs = frame:getParent().args
local auxCats = ''
local rct = false -- boolean to track if there are any links to be returned
local qid, topic
if namespace==0 then
qid = mw.wikibase.getEntityIdForCurrentPage()
end
if qid then -- article is connected to a Wikidata item
if parentArgs.qid and resolveQID(parentArgs.qid)~=qid then -- non-matching qid parameter
auxCats = auxCats .. needsAttention('D')
end
else -- page is not connected to any Wikidata item
qid = resolveQID(parentArgs.qid) -- check qid parameter if no wikidata item is connected
if qid then -- qid parameter is valid, set topic to display
topic = mw.wikibase.getLabel(qid)
if topic then
if mw.ustring.lower(title.subpageText)==mw.ustring.lower(topic) then -- suppress topic display if subpagename equals topic up to case change
topic = nil
end
if topic and mw.wikibase.getSitelink(qid) then -- make wikilink to article
topic = wikilink(mw.wikibase.getSitelink(qid), topic)
end
else
auxCats = auxCats .. needsAttention('L')
end
elseif parentArgs.qid and parentArgs.qid~='' then -- invalid qid has been supplied, add to tracking cat
auxCats = auxCats .. needsAttention('Q')
end
end
local qids = {} -- setup any additional QIDs
if parentArgs.additional=='auto' and qid then -- check P527 for parts to add additional qids
local checkparts = function(property)
local parts = mw.wikibase.getBestStatements(qid, property)
if parts then
for _, part in ipairs(parts) do
if part.mainsnak.datavalue and part.mainsnak.datavalue.value.id then
local resolvedqid = resolveQID(part.mainsnak.datavalue.value.id)
if resolvedqid then
table.insert(qids,resolvedqid)
end end end end end
for _, part in ipairs(config.auto_additional) do
checkparts('P' .. part)
end
elseif parentArgs.additional and parentArgs.additional~='' then
for _, v in ipairs(mw.text.split(parentArgs.additional, '%s*,%s*')) do
v = resolveQID(v)
if v then
if v==qid then -- duplicate of qid parameter
auxCats = auxCats .. needsAttention('R')
end
table.insert(qids, v)
else -- invalid QID specified
auxCats = auxCats .. needsAttention('A')
end
end
end
local numsections, sections = 0, {}
for _, _ in ipairs(config.sections) do -- count number of regular sections
numsections = numsections + 1
end
for _ = 1, #qids+numsections do
table.insert(sections, {})
end
-- check which identifiers to show/suppress in template
local show, show_all_unsuppressed = {}, true
local stripP = function(pid) --strip P from property number
if pid:match('^[Pp]%d+$') then
pid = mw.ustring.gsub(pid, '[Pp]', '')
end
if pid:match('^%d+$') then
return tonumber(pid)
end
end
local addshowlist = function(list)
if list and list~='' then
for _, v in ipairs(mw.text.split(string.lower(list), '%s*,%s*')) do
local vprop = stripP(v)
if vprop then -- e.g. show=P214 to show one particular property
show[vprop] = true
else -- e.g. show=arts to use whitelist
if config.whitelists[v] then
for _, w in ipairs(config.whitelists[v].properties) do
show[w] = true
end end end end
show_all_unsuppressed = false
end end
addshowlist(frame.args.show) -- check show parameter on wrapper template
addshowlist(parentArgs.show) -- check show parameter on article
addshowlist(parentArgs.country) -- check country parameter on article
if parentArgs.suppress then
local suppresslist = mw.text.split(parentArgs.suppress, '%s*,%s*') -- split parameter by comma
for _, v in ipairs(suppresslist) do
v = stripP(v)
if v then
show[v] = false
auxCats = auxCats .. wikilink(config.i18n.category .. ':' .. config.i18n.suppressedcat)
else
auxCats = auxCats .. needsAttention('P')
end
end
end
local makeSections = function(qid, addit)
for _, id in ipairs(conf) do
if id.suppressedbyproperty then
for _, property in ipairs(id.suppressedbyproperty) do
if show[property]=='used' then -- property is in use
show[id.property] = false -- suppressed by another property
end end end
if show[id.property]==nil then
show[id.property] = show_all_unsuppressed
end
if show[id.property] then
local links = _makelinks(id, qid)
if links then
table.insert(
sections[addit or id.section],
links
)
show[id.property] = 'used'
rct = true
end end end end
local pencil = function(qid)
if qid then
return require('Module:EditAtWikidata')._showMessage{
pid = 'identifiers',
qid = qid
}
else
return ''
end
end
makeSections(qid, false)
for c = 1, #qids do
makeSections(qids[c], numsections+c)
end
--configure Navbox
local outString = ''
if rct then -- there is at least one link to display
local Navbox = require('Module:Navbox')
local sect, lastsect = 0, 0
local navboxArgs = {
name = 'Authority control',
navboxclass = 'authority-control',
bodyclass = 'hlist',
state = parentArgs.state or config.i18n.autocollapse,
navbar = 'off'
}
for c = 1, numsections+#qids do
if #sections[c]>0 then -- section is non-empty
sect = sect + 1
lastsect = c
local sectname
if c<=numsections then -- regular section
sectname = config.sections[c].name
else -- section from additional qid
local qid = qids[c-numsections]
local label, sitelink = mw.wikibase.getLabel(qid), mw.wikibase.getSitelink(qid)
if label then
if sitelink then
local target = mw.title.new(sitelink)
if target==title or (target.isRedirect and target.redirectTarget==title) then -- do not link
sectname = label
else -- make wikilink to article
sectname = wikilink(sitelink, label)
end
else
sectname = label
end
else
auxCats = auxCats .. needsAttention('L')
sectname = qid
end
sectname = sectname .. pencil(qid)
end
navboxArgs['group' .. c] = sectname
local list = mw.html.create('ul')
for _, link in ipairs(sections[c]) do
list:node(link)
end
navboxArgs['list' .. c] = tostring(list)
end
end
if topic then -- display in expanded form with topic
navboxArgs.title = config.i18n.aclink .. ' – ' .. topic .. pencil(qid)
elseif sect==1 then -- special display when only one section
if lastsect<=numsections then
if config.sections[lastsect].hidelabelwhenalone then -- no special label when only general or other IDs are present
navboxArgs['group' .. lastsect] = config.i18n.aclink .. pencil(qid)
else -- other regular section
navboxArgs['group' .. lastsect] = config.i18n.aclink .. ': ' .. navboxArgs['group' .. lastsect] .. pencil(qid)
end
else -- section from additional qid
navboxArgs['group' .. lastsect] = config.i18n.aclink .. ': ' .. navboxArgs['group' .. lastsect]
end
else -- add title to navbox
navboxArgs.title = config.i18n.aclink .. pencil(qid)
end
outString = Navbox._navbox(navboxArgs)
end
if parentArgs.state
and parentArgs.state~=''
and parentArgs.state~=config.i18n.collapsed
and parentArgs.state~=config.i18n.expanded
and parentArgs.state~=config.i18n.autocollapse then --invalid state parameter
auxCats = auxCats .. needsAttention('S')
end
if testcases then
auxCats = mw.ustring.gsub(auxCats, '(%[%[)(' .. config.i18n.category .. ')', '%1:%2') --for easier checking
end
--out
outString = outString .. auxCats
if namespace~=0 then
-- 日本語版独自の変更あり
outString = mw.ustring.gsub(outString,'(%[%[)(' .. config.i18n.category .. ':)([^%|%]]+' .. config.i18n.Articles .. ')%|?[^%|%]]*(%]%])','%1:%2%3%4')
end
local check = require('Module:Check for unknown parameters/sandbox')._check
local sortkey
if namespace==0 then
sortkey = '*' .. title.text
else
sortkey = title.fullText
end
outString = outString .. check({
['unknown'] = wikilink(config.i18n.category .. ':' .. config.i18n.pageswithparams, sortkey),
['preview'] = config.i18n.previewwarning, 'show', 'country', 'suppress', 'additional', 'qid', 'state'
}, parentArgs)
return outString
end
p.makelink = function(id, qid)
return _makelinks(id, qid)
end
return p