「モジュール:Authority control」の版間の差分
表示
削除された内容 追加された内容
en:Module:Authority control oldid=1089010245 よりDIB、MGP、TDVIA、TLS、ZBMATHを修正 |
Marine-Blue (会話 | 投稿記録) |
||
9行目: | 9行目: | ||
--[[ Category functions ]] |
--[[ Category functions ]] |
||
--[[==========================================================================]] |
--[[==========================================================================]] |
||
local function addCat( cat ) |
|||
if cat and cat ~= '' then return '[[Category:'..cat..']]'..p.redCatLink(cat) end |
|||
return '' |
|||
end |
|||
function p.getCatForId( id ) |
function p.getCatForId( id ) |
||
local |
local catName = '' |
||
if namespace == 0 then |
if namespace == 0 then |
||
catName = id..'識別子が指定されている記事' |
|||
elseif namespace == 2 and not title.isSubpage then |
elseif namespace == 2 and not title.isSubpage then |
||
catName = id..'識別子が指定されている利用者ページ' |
|||
else |
else |
||
catName = id..'識別子が指定されているその他のページ' |
|||
end |
end |
||
return '[[Category:'..catName..']]'..p.redCatLink(catName) |
|||
return addCat(cat) |
|||
end |
end |
||
function p.redCatLink( |
function p.redCatLink( catName ) --catName == 'Blah' (not 'Category:Blah', not '[[Category:Blah]]') |
||
if |
if catName and catName ~= '' and |
||
testcases == false and |
testcases == false and |
||
mw.title.new( |
mw.title.new(catName, 14).exists == false |
||
then |
then |
||
return '[[Category:赤リンクの典拠情報カテゴリがあるページ]]' |
return '[[Category:赤リンクの典拠情報カテゴリがあるページ]]' |
||
37行目: | 32行目: | ||
end |
end |
||
function p.createRow( id |
function p.createRow( id, rawValues, link, links, withUid, specialCat, prefix ) |
||
local |
local catName = '誤った'..(specialCat or id)..'識別子が指定されている記事' |
||
if links then -- all links[] use withUid = false; no check needed |
if links then -- all links[] use withUid = false; no check needed |
||
local row = '' |
local row = '' |
||
if |
if prefix then |
||
row = row..'*'.. |
row = row .. '*' .. prefix |
||
end |
end |
||
local totlen = 0 |
|||
-- row = row..'*'..prefix |
|||
--end |
|||
for i, l in ipairs( links ) do |
for i, l in ipairs( links ) do |
||
if i == 1 and not |
if i == 1 and not prefix then row = row..'*' |
||
else row = row..'\n**' end |
|||
if l then |
if l then |
||
row = row..'<span class="uid">'..l..'</span>' |
row = row..'<span class="uid">'..l..'</span>' |
||
else |
else |
||
row = row..'<span class="error">'..id..'識別子の値'..rawValues[i]..'は正しくありません。</span>'.. |
row = row..'<span class="error">'..id..'識別子の値'..rawValues[i]..'は正しくありません。</span>[[Category:'..catName..']]'..p.redCatLink(catName) |
||
end |
end |
||
end |
end |
||
59行目: | 52行目: | ||
elseif link then -- All IDs that have a prefix support multiple identifiers, so prefix is not needed |
elseif link then -- All IDs that have a prefix support multiple identifiers, so prefix is not needed |
||
if withUid then |
if withUid then |
||
return '*<span class="nowrap"> |
return '*<span class="nowrap"><span class="uid">'..link..'</span></span>\n' |
||
end |
end |
||
return '*<span class="nowrap"> |
return '*<span class="nowrap">'..link..'</span>\n' |
||
end |
end |
||
return '* <span class="error">'..id..'識別子の値'..rawValues..'は正しくありません。</span>'.. |
return '* <span class="error">'..id..'識別子の値'..rawValues..'は正しくありません。</span>[[Category:'..catName..']]'..p.redCatLink(catName)..'\n' |
||
end |
end |
||
71行目: | 64行目: | ||
--[[==========================================================================]] |
--[[==========================================================================]] |
||
-- If a link has a suitable entry in the global inter-wiki prefix table at [[:m:Interwiki_map]], |
-- 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. |
||
-- 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 ) |
function p.aagLink( id, label ) |
||
--P3372's format regex: \d+ (e.g. 1) |
--P3372's format regex: \d+ (e.g. 1) |
||
if not id:match( '^%d+$' ) then |
if not id:match( '^%d+$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://www.aucklandartgallery.com/explore-art-and-ideas/artist/'..id..'/ '.. |
return '[https://www.aucklandartgallery.com/explore-art-and-ideas/artist/'..id..'/ '..(label or 'オークランド')..']'..p.getCatForId( 'AAG' ) |
||
end |
end |
||
function p.acmLink( id ) |
function p.acmLink( id, label ) |
||
--P864's format regex: \d{11} (e.g. 12345678901) |
--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 |
if not id:match( '^%d%d%d%d%d%d%d%d%d%d%d$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://dl.acm.org/profile/'..id..' '.. |
return '[https://dl.acm.org/profile/'..id..' '..(label or '計算機協会')..']'..p.getCatForId( 'ACM-DL' ) |
||
end |
end |
||
function p.adbLink( id ) |
function p.adbLink( id, label ) |
||
--P1907's format regex: [a-z][-a-z]+-([1- |
--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- |
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 |
not id:match( '^[a-z][-a-z]+-[1-9]%d?%d?%d?$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[http://adb.anu.edu.au/biography/'..id..' '.. |
return '[http://adb.anu.edu.au/biography/'..id..' '..(label or 'オーストラリア')..']'..p.getCatForId( 'ADB' ) |
||
end |
end |
||
function p. |
function p.agsaLink( id, label ) |
||
--P3562's format regex: [A-Q]\d{4}(\.\d+)? (e.g. D1204.1) |
|||
if not id:match('^[A-Q]%d%d%d%d$') and |
|||
not id:match('^[A-Q]%d%d%d%d%.%d+$') then |
|||
return false |
|||
end |
|||
return id..p.getCatForId( 'admiralty' ) |
|||
end |
|||
function p.agsaLink( id ) |
|||
--P6804's format regex: [1-9]\d* (e.g. 3625) |
--P6804's format regex: [1-9]\d* (e.g. 3625) |
||
if not id:match( '^[1-9]%d*$' ) then |
if not id:match( '^[1-9]%d*$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://www.agsa.sa.gov.au/collection-publications/collection/creators/_/'..id..'/ '.. |
return '[https://www.agsa.sa.gov.au/collection-publications/collection/creators/_/'..id..'/ '..(label or '南オーストラリア')..']'..p.getCatForId( 'AGSA' ) |
||
end |
|||
function p.ARLHSLink( id ) |
|||
--P2980's format regex: [A-Z]{3}\d{3,4}[A-Z]?| e.g. LAT023 |
|||
if not id:match('^[A-Z][A-Z][A-Z]%d%d%d%d?[A-Z]?$') then |
|||
return false |
|||
end |
|||
return '[http://wlol.arlhs.com/lighthouse/'..id..'.html '..id..']'..p.getCatForId( 'ARLHS' ) |
|||
end |
end |
||
function p.autoresuyLink( id ) |
function p.autoresuyLink( id, label ) |
||
--P2558's format regex: [1-9]\d{0,4} (e.g. 12345) |
--P2558's format regex: [1-9]\d{0,4} (e.g. 12345) |
||
if not id:match( '^[1-9]%d?%d?%d?%d?$' ) then |
if not id:match( '^[1-9]%d?%d?%d?%d?$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://autores.uy/autor/'..id..' '.. |
return '[https://autores.uy/autor/'..id..' '..(label or 'ウルグアイ')..']'..p.getCatForId( 'autores.uy' ) |
||
end |
end |
||
function p.awrLink( id ) |
function p.awrLink( id, label ) |
||
--P4186's format regex: (([A-Z]{3}\d{4})|([A-Z]{2}\d{5}))[a-z] (e.g. PR00768b) |
--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 |
if not id:match( '^[A-Z][A-Z][A-Z]%d%d%d%d[a-z]$' ) and |
||
140行目: | 113行目: | ||
return false |
return false |
||
end |
end |
||
return '[http://www.womenaustralia.info/biogs/'..id..'.htm '.. |
return '[http://www.womenaustralia.info/biogs/'..id..'.htm '..(label or 'Australian Women\'s Register')..']'..p.getCatForId( 'AWR' ) |
||
end |
end |
||
function p.bibsysLink( id ) |
function p.bibsysLink( id, label ) |
||
--P1015's format regex: [1-9]\d* or [1-9](\d{0,8}|\d{12}) (e.g. 1234567890123) |
--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 |
--TODO: follow up @ [[d:Property talk:P1015#Discrepancy between the 2 regex constraints]] or escalate/investigate |
||
150行目: | 123行目: | ||
return false |
return false |
||
end |
end |
||
return '[https://authority.bibsys.no/authority/rest/authorities/html/'..id..' '.. |
return '[https://authority.bibsys.no/authority/rest/authorities/html/'..id..' '..(label or 'ノルウェー')..']'..p.getCatForId( 'BIBSYS' ) |
||
end |
end |
||
function p.bildLink( id ) |
function p.bildLink( id, label ) |
||
--P2092's format regex: \d+ (e.g. 1) |
--P2092's format regex: \d+ (e.g. 1) |
||
if not id:match( '^%d+$' ) then |
if not id:match( '^%d+$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://www.bildindex.de/document/obj'..id..' '.. |
return '[https://www.bildindex.de/document/obj'..id..' '..(label or 'Bildindex(ドイツ)')..']'..p.getCatForId( 'Bildindex' ) |
||
end |
end |
||
function p.bncLink( id ) |
function p.bncLink( id, label ) |
||
--P1890's format regex: \d{9} (e.g. 123456789) |
--P1890's format regex: \d{9} (e.g. 123456789) |
||
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then |
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[http://www.bncatalogo.cl/F?func=direct&local_base=red10&doc_number='..id..' '.. |
return '[http://www.bncatalogo.cl/F?func=direct&local_base=red10&doc_number='..id..' '..(label or 'チリ')..']'..p.getCatForId( 'BNC' ) |
||
end |
end |
||
function p.bneLink( id ) |
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) |
--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 |
if not id:match( '^[XF][XF]%d%d%d%d%d?%d?%d?$' ) and |
||
177行目: | 150行目: | ||
return false |
return false |
||
end |
end |
||
return '[http://catalogo.bne.es/uhtbin/authoritybrowse.cgi?action=display&authority_id='..id..' '.. |
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 |
end |
||
function p.bnfLink( id ) |
function p.bnfLink( id, label ) |
||
--P268's format regex: \d{8}[0-9bcdfghjkmnpqrstvwxz] (e.g. 123456789) |
--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 |
if not id:match( '^c?b?%d%d%d%d%d%d%d%d[0-9bcdfghjkmnpqrstvwxz]$' ) then |
||
189行目: | 162行目: | ||
id = 'cb'..id |
id = 'cb'..id |
||
end |
end |
||
return '[https://catalogue.bnf.fr/ark:/12148/'..id..' '.. |
return '[https://catalogue.bnf.fr/ark:/12148/'..id..' '..(label or 'フランス')..'] [https://data.bnf.fr/ark:/12148/'..id..' (データ)]'..p.getCatForId( 'BNF' ) |
||
end |
end |
||
function p.botanistLink( id ) |
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.) |
--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... |
--not easily/meaningfully implementable in Lua's regex since "(this)?" is not allowed... |
||
198行目: | 171行目: | ||
return false |
return false |
||
end |
end |
||
id = id:gsub(' +', '%%20') |
|||
return '[https://www.ipni.org/ipni/advAuthorSearch.do?find_abbreviation='.. |
return '[https://www.ipni.org/ipni/advAuthorSearch.do?find_abbreviation='..id..' '..(label or 'International Plant Names Index')..']'..p.getCatForId( 'Botanist' ) |
||
end |
end |
||
function p.bpnLink( id ) |
function p.bpnLink( id, label ) |
||
--P651's format regex: \d{6,8} (e.g. 00123456) |
--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 |
if not id:match( '^%d%d%d%d%d%d%d%d$' ) and --original format regex, changed 8/2019 to |
||
209行目: | 182行目: | ||
return false |
return false |
||
end |
end |
||
return '[http://www.biografischportaal.nl/en/persoon/'..id..' '.. |
return '[http://www.biografischportaal.nl/en/persoon/'..id..' '..(label or 'オランダ')..']'..p.getCatForId( 'BPN' ) --no https as of 9/2019 |
||
end |
end |
||
function p.canticLink( id ) |
function p.canticLink( id, label ) |
||
--P1273's format regex: a\d{7}[0-9x] (e.g. a10640745) |
--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 |
if not id:match( '^a%d%d%d%d%d%d%d[%dx]$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[http://cantic.bnc.cat/registres/CUCId/'..id..' '.. |
return '[http://cantic.bnc.cat/registres/CUCId/'..id..' '..(label or 'カタルーニャ')..']'..p.getCatForId( 'CANTIC' ) --no https as of 10/2019 |
||
end |
end |
||
function p. |
function p.ciniiLink( id, label ) |
||
--P3920's format regex: ([NAIP])?[1-9]\d*(\.\d+)? (e.g. A1761) |
|||
if not id:match( '^[NAIP]?[1-9]%d*$' ) and |
|||
not id:match( '^[NAIP]?[1-9]%d*%.%d+$' ) then |
|||
return false |
|||
end |
|||
return id..p.getCatForId( 'CCG' ) |
|||
end |
|||
function p.ciniiLink( id ) |
|||
--P271's format regex: DA\d{7}[\dX] (e.g. DA12345678) |
--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 |
if not id:match( '^DA%d%d%d%d%d%d%d[%dX]$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://ci.nii.ac.jp/author/'..id..'?l= |
return '[https://ci.nii.ac.jp/author/'..id..'?l=en '..(label or 'CiNii(日本)')..']'..p.getCatForId( 'CINII' ) |
||
end |
end |
||
function p.cwgcLink( id ) |
function p.cwgcLink( id, label ) |
||
--P1908's format regex: [1-9]\d* (e.g. 75228351) |
--P1908's format regex: [1-9]\d* (e.g. 75228351) |
||
if not id:match( '^[1-9]%d*$' ) then |
if not id:match( '^[1-9]%d*$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://www.cwgc.org/find-war-dead/casualty/'..id..'/ '.. |
return '[https://www.cwgc.org/find-war-dead/casualty/'..id..'/ '..(label or 'コモンウェルス戦争墓地委員会')..']'..p.getCatForId( 'CWGC' ) |
||
end |
end |
||
function p.daaoLink( id ) |
function p.daaoLink( id, label ) |
||
--P1707's format regex: [a-z\-]+\d* (e.g. rolf-harris) |
--P1707's format regex: [a-z\-]+\d* (e.g. rolf-harris) |
||
if not id:match( '^[a-z%-]+%d*$' ) then |
if not id:match( '^[a-z%-]+%d*$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://www.daao.org.au/bio/'..id..' '.. |
return '[https://www.daao.org.au/bio/'..id..' '..(label or 'オーストラリアのアーティスト')..']'..p.getCatForId( 'DAAO' ) |
||
end |
end |
||
function p.dblpLink( id ) |
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) |
--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 |
if not id:match( '^%d%d%d?/%d+$' ) and |
||
261行目: | 225行目: | ||
return false |
return false |
||
end |
end |
||
return '[https://dblp.org/pid/'..id..' '.. |
return '[https://dblp.org/pid/'..id..' '..(label or 'DBLP(コンピュータ科学)')..']'..p.getCatForId( 'DBLP' ) |
||
end |
end |
||
function p.dibLink( id ) |
function p.dibLink( id, label ) |
||
--P6829's format regex: |
--P6829's format regex: a\d{4}\d?(-[A-D])? (e.g. a1953) |
||
if not id:match( '^ |
if not id:match( '^a%d%d%d%d%d?%-?[A-D]?$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://dib.cambridge.org/viewReadPage.do?articleId='..id..' '.. |
return '[https://dib.cambridge.org/viewReadPage.do?articleId='..id..' '..(label or 'アイルランド')..']'..p.getCatForId( 'DIB' ) |
||
end |
end |
||
function p.dsiLink( id ) |
function p.dsiLink( id, label ) |
||
--P2349's format regex: [1-9]\d* (e.g. 1538) |
--P2349's format regex: [1-9]\d* (e.g. 1538) |
||
if not id:match( '^[1-9]%d*$' ) then |
if not id:match( '^[1-9]%d*$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[http://www.uni-stuttgart.de/hi/gnt/dsi2/index.php?table_name=dsi&function=details&where_field=id&where_value='..id..' '.. |
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 |
end |
||
function p. |
function p.fastLink( id, label ) |
||
--P7902's format regex: 1[0-9]{7,8}[0-9X] (e.g. 118554700) |
|||
if not id:match( '^1[0-9]%d%d%d%d%d%d%d?[0-9X]$' ) then |
|||
return false |
|||
end |
|||
return '[https://www.deutsche-biographie.de/pnd'..id..'.html?language=en '..id..']'..p.getCatForId( 'DTBIO' ) |
|||
end |
|||
function p.emuLink( id ) |
|||
--P4613's format regex: \d{1,6} (e.g. 15409 (or 015409)) |
|||
if not id:match( '^%d%d?%d?%d?%d?%d?$' ) then |
|||
return false |
|||
end |
|||
return '[http://esu.com.ua/search_articles.php?id='..id..' '..id..']'..p.getCatForId( 'EMU' ) |
|||
end |
|||
function p.fastLink( id ) |
|||
--P2163's format regex: [1-9]\d{0,7} (e.g. 1916996) |
--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 |
if not id:match( '^[1-9]%d?%d?%d?%d?%d?%d?%d?$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[http://id.worldcat.org/fast/'..id..'/ '.. |
return '[http://id.worldcat.org/fast/'..id..'/ '..(label or 'Faceted Application of Subject Terminology')..']'..p.getCatForId( 'FAST' ) |
||
end |
end |
||
function p.fnzaLink( id ) |
function p.fnzaLink( id, label ) |
||
--P6792's format regex: [1-9]\d* (e.g. 9785) |
--P6792's format regex: [1-9]\d* (e.g. 9785) |
||
if not id:match( '^[1-9]%d*$' ) then |
if not id:match( '^[1-9]%d*$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://findnzartists.org.nz/artist/'..id..'/ '.. |
return '[https://findnzartists.org.nz/artist/'..id..'/ '..(label or 'ニュージーランドのアーティスト')..']'..p.getCatForId( 'FNZA' ) |
||
end |
end |
||
function p.gndLink( id ) |
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) |
--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 |
if not id:match( '^1[012]?%d%d%d%d%d%d%d[0-9X]$' ) and |
||
320行目: | 268行目: | ||
return false |
return false |
||
end |
end |
||
return '[https://d-nb.info/gnd/'..id..' '.. |
return '[https://d-nb.info/gnd/'..id..' '..(label or '統合典拠ファイル(ドイツ)')..']'..p.getCatForId( 'GND' ) |
||
end |
end |
||
function p. |
function p.hdsLink( id, label ) |
||
--P1960's format regex: [-_0-9A-Za-z]{12} (e.g. CUO0vDcAAAAJ) |
|||
if not id:match( '^[%-_%d%l%u][%-_%d%l%u][%-_%d%l%u][%-_%d%l%u][%-_%d%l%u][%-_%d%l%u][%-_%d%l%u][%-_%d%l%u][%-_%d%l%u][%-_%d%l%u][%-_%d%l%u][%-_%d%l%u]$' ) then |
|||
return false |
|||
end |
|||
return '[https://scholar.google.com/citations?user='..id..' '..id..']'..p.getCatForId( 'Google Scholar' ) |
|||
end |
|||
function p.hdsLink( id ) |
|||
--P902's format regex: \d{6} (e.g. 050123) |
--P902's format regex: \d{6} (e.g. 050123) |
||
if not id:match( '^%d%d%d%d%d%d$' ) then |
if not id:match( '^%d%d%d%d%d%d$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://hls-dhs-dss.ch/fr/articles/'..id..' '.. |
return '[https://hls-dhs-dss.ch/fr/articles/'..id..' '..(label or 'スイス歴史辞典')..']'..p.getCatForId( 'HDS' ) |
||
end |
end |
||
function p.iaafLink( id ) |
function p.iaafLink( id, label ) |
||
--P1146's format regex: [0-9][0-9]* (e.g. 012) |
--P1146's format regex: [0-9][0-9]* (e.g. 012) |
||
if not id:match( '^%d+$' ) then |
if not id:match( '^%d+$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://www.iaaf.org/athletes/_/'..id..' '.. |
return '[https://www.iaaf.org/athletes/_/'..id..' '..(label or 'ワールドアスレティックス')..']'..p.getCatForId( 'IAAF' ) |
||
end |
end |
||
function p.iccuLink( id ) |
function p.iccuLink( id, label ) |
||
--P396's format regex: \ |
--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( '^%u%u[% |
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 |
return false |
||
end |
|||
return '[https://opac.sbn.it/ |
return '[https://opac.sbn.it/opacsbn/opac/iccu/scheda_authority.jsp?bid='..id..' '..(label or 'イタリア')..']'..p.getCatForId( 'ICCU' ) |
||
end |
end |
||
function p.iciaLink( id ) |
function p.iciaLink( id, label ) |
||
--P1736's format regex: \d+ (e.g. 1) |
--P1736's format regex: \d+ (e.g. 1) |
||
if not id:match( '^%d+$' ) then |
if not id:match( '^%d+$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://www.imj.org.il/artcenter/newsite/en/?artist='..id..' '.. |
return '[https://www.imj.org.il/artcenter/newsite/en/?artist='..id..' '..(label or 'ICIA(イスラエル)')..']'..p.getCatForId( 'ICIA' ) |
||
end |
end |
||
function p.ieuLink( id ) |
function p.ieuLink( id, label ) |
||
--P9070's format regex: [A-Z]\\[A-Z]\\[A-Za-z0-9]+ (e.g. K\Y\Kyiv) |
--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 |
if not id:match( '^[A-Z]\\[A-Z]\\%w+$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[http://www.encyclopediaofukraine.com/display.asp?linkpath=pages\\'..id..' '.. |
return '[http://www.encyclopediaofukraine.com/display.asp?linkpath=pages\\'..id..' '..(label or 'ウクライナ・インターネット百科事典')..']'..p.getCatForId( 'IEU' ) |
||
end |
end |
||
function p.isniLink( id ) |
function p.isniLink( id, label ) |
||
id = p.validateIsni( id ) --e.g. 0000-0000-6653-4145 |
id = p.validateIsni( id ) --e.g. 0000-0000-6653-4145 |
||
if not id then |
if not id then |
||
return false |
return false |
||
end |
end |
||
return '[https://isni.org/isni/'..id..' '.. |
return '[https://isni.org/isni/'..id..' '..(label or 'ISNI')..']'..p.getCatForId( 'ISNI' ) |
||
end |
end |
||
function p. |
function p.jocondeLink( id, label ) |
||
--P8189's format regex: 9870(0|1)\d{8}05171 (e.g. 987007305652505171) |
|||
if not id:match( '^9870[0-1]%d%d%d%d%d%d%d%d05171$' ) then |
|||
return false |
|||
end |
|||
return '[http://uli.nli.org.il/F/?func=find-b&local_base=NLX10&find_code=UID&request='..id..' '..id..']'..p.getCatForId( 'J9U' ) |
|||
end |
|||
function p.jocondeLink( id ) |
|||
--P347's format regex: [\-0-9A-Za-z]{11} (e.g. 12345678901) |
--P347's format regex: [\-0-9A-Za-z]{11} (e.g. 12345678901) |
||
local regex = '^'..string.rep('[%-0-9A-Za-z]', 11)..'$' |
local regex = '^'..string.rep('[%-0-9A-Za-z]', 11)..'$' |
||
393行目: | 326行目: | ||
return false |
return false |
||
end |
end |
||
return '[https://www.pop.culture.gouv.fr/notice/joconde/'..id..' '.. |
return '[https://www.pop.culture.gouv.fr/notice/joconde/'..id..' '..(label or 'Joconde(フランス)')..']'..p.getCatForId( 'Joconde' ) |
||
end |
end |
||
function p.kulturnavLink( id ) |
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) |
--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 |
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 |
return false |
||
end |
end |
||
return '[http://kulturnav.org/'..id..' '.. |
return '[http://kulturnav.org/'..id..' '..(label or 'KulturNav(ノルウェー)')..']'..p.getCatForId( 'KULTURNAV' ) --no https as of 9/2019 |
||
end |
end |
||
function p.lccnLink( id ) |
function p.lccnLink( id, label ) |
||
local parts = p.splitLccn( id ) --e.g. n78039510 |
local parts = p.splitLccn( id ) --e.g. n78039510 |
||
if not parts then |
if not parts then |
||
411行目: | 344行目: | ||
local lccnType = parts[1] ~= 'sh' and 'names' or 'subjects' |
local lccnType = parts[1] ~= 'sh' and 'names' or 'subjects' |
||
id = parts[1] .. parts[2] .. p.append( parts[3], '0', 6 ) |
id = parts[1] .. parts[2] .. p.append( parts[3], '0', 6 ) |
||
return '[https://id.loc.gov/authorities/'..lccnType..'/'..id..' '.. |
return '[https://id.loc.gov/authorities/'..lccnType..'/'..id..' '..(label or 'アメリカ')..']'..p.getCatForId( 'LCCN' ) |
||
end |
end |
||
function p.lirLink( id ) |
function p.lirLink( id, label ) |
||
--P886's format regex: \d+ (e.g. 1) |
--P886's format regex: \d+ (e.g. 1) |
||
if not id:match( '^%d+$' ) then |
if not id:match( '^%d+$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[http://www.e-lir.ch/e-LIR___Lexicon.'..id..'.450.0.html '.. |
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 |
end |
||
function p.lnbLink( id ) |
function p.lnbLink( id, label ) |
||
--P1368's format regex: \d{9} (e.g. 123456789) |
--P1368's format regex: \d{9} (e.g. 123456789) |
||
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then |
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://kopkatalogs.lv/F?func=direct&local_base=lnc10&doc_number='..id..'&P_CON_LNG=ENG '.. |
return '[https://kopkatalogs.lv/F?func=direct&local_base=lnc10&doc_number='..id..'&P_CON_LNG=ENG '..(label or 'ラトビア')..']'..p.getCatForId( 'LNB' ) |
||
end |
end |
||
function p.leonoreLink( id ) |
function p.leonoreLink( id, label ) |
||
--P640's format regex: LH |
--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 |
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 |
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( '^ |
not id:match( '^C/0/%d%d?$' ) then --IDs from C/0/1 to C/0/84 (84 famous legionaries) |
||
not id:match( '^19800035/%d%d?%d?%d?/%d%d?%d?%d?%d?Ter$' ) and --IDs from ? |
|||
not id:match( '^C/0/%d%d?$' ) then --IDs from C/0/1 to C/0/84 (84 famous legionaries) |
|||
return false |
return false |
||
end |
end |
||
return '[http://www.culture.gouv.fr/public/mistral/leonore_fr?ACTION=CHERCHER&FIELD_1=COTE&VALUE_1='..id..' '.. |
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 |
end |
||
function p. |
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?$' ) then |
if not id:match( '^[1-9]%d%d%d%d%d?%d?%d?%d?%d?$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https:// |
return '[https://academic.microsoft.com/v2/detail/'..id..' '..(label or 'マイクロソフト・アカデミック')..']'..p.getCatForId( 'MA' ) |
||
end |
end |
||
function p.mbaLink( id ) |
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) |
--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 |
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 |
return false |
||
end |
end |
||
local url = 'https://musicbrainz.org/artist/'..id |
|||
local cat = p.getCatForId( 'MusicBrainz' )--special cat name |
|||
if label then |
|||
return '['..url..' '..label..']'..cat |
|||
else |
|||
return '[[MBA (識別子)|MusicBrainz]] [' .. url .. ' アーティスト]' .. cat |
|||
end |
|||
end |
end |
||
function p.mbareaLink( id ) |
function p.mbareaLink( id, label ) |
||
--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) |
--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) |
||
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 |
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 |
return false |
||
end |
end |
||
local url = 'https://musicbrainz.org/area/'..id |
|||
local cat = p.getCatForId( 'MusicBrainz地域' )--special cat name |
|||
if label then |
|||
return '['..url..' '..label..']'..cat |
|||
else |
|||
return '[[MBAREA (識別子)|MusicBrainz]] [' .. url .. ' 地域]' .. cat |
|||
end |
|||
end |
end |
||
function p.mbiLink( id ) |
function p.mbiLink( id, label ) |
||
--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) |
--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 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 |
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 |
return false |
||
end |
end |
||
local url = 'https://musicbrainz.org/instrument/'..id |
|||
local cat = p.getCatForId( 'MusicBrainz楽器' )--special cat name |
|||
if label then |
|||
return '['..url..' '..label..']'..cat |
|||
else |
|||
return '[[MBI (識別子)|MusicBrainz]] [' .. url .. ' 楽器]' .. cat |
|||
end |
|||
end |
end |
||
function p.mblLink( id ) |
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) |
--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 |
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 |
return false |
||
end |
end |
||
local url = 'https://musicbrainz.org/label/'..id |
|||
local cat = p.getCatForId( 'MusicBrainzレーベル' )--special cat name |
|||
if label then |
|||
return '['..url..' '..label..']'..cat |
|||
else |
|||
return '[[MBL (識別子)|MusicBrainz]] [' .. url .. ' レーベル]' .. cat |
|||
end |
|||
end |
end |
||
function p.mbpLink( id ) |
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) |
--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) |
||
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 |
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 |
return false |
||
end |
end |
||
local url = 'https://musicbrainz.org/place/'..id |
|||
local cat = p.getCatForId( 'MusicBrainz場所' )--special cat name |
|||
if label then |
|||
return '['..url..' '..label..']'..cat |
|||
else |
|||
return '[[MBP (識別子)|MusicBrainz]] [' .. url .. ' 場所]' .. cat |
|||
end |
|||
end |
end |
||
function p.mbrgLink( id ) |
function p.mbrgLink( id, label ) |
||
--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) |
--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 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 |
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 |
return false |
||
end |
end |
||
local url = 'https://musicbrainz.org/release-group/'..id |
|||
local cat = p.getCatForId( 'MusicBrainzリリース・グループ' )--special cat name |
|||
if label then |
|||
return '['..url..' '..label..']'..cat |
|||
else |
|||
return '[[MBRG (識別子)|MusicBrainz]] [' .. url .. ' リリース・グループ]' .. cat |
|||
end |
|||
end |
end |
||
function p.mbsLink( id ) |
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) |
--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 |
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 |
return false |
||
end |
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 |
||
function p.mbwLink( id ) |
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) |
--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) |
||
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 |
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 |
return false |
||
end |
end |
||
local url = 'https://musicbrainz.org/work/'..id |
|||
local cat = p.getCatForId( 'MusicBrainz作品' )--special cat name |
|||
if label then |
|||
return '['..url..' '..label..']'..cat |
|||
else |
|||
return '[[MBW (識別子)|MusicBrainz]] [' .. url .. ' 作品]' .. cat |
|||
end |
|||
end |
end |
||
function p.mgpLink( id ) |
function p.mgpLink( id, label ) |
||
--P549's format regex: \d{1,6} (e.g. 123456) |
--P549's format regex: \d{1,6} (e.g. 123456) |
||
if not id:match( '^%d%d?%d?%d?%d?%d?$' ) then |
if not id:match( '^%d%d?%d?%d?%d?%d?$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https:// |
return '[https://genealogy.math.ndsu.nodak.edu/id.php?id='..id..' '..(label or 'Mathematics Genealogy Project')..']'..p.getCatForId( 'MGP' ) |
||
end |
end |
||
function p.naraLink( id ) |
function p.naraLink( id, label ) |
||
--P1225's format regex: ^([1-9]\d{0,8})$ (e.g. 123456789) |
--P1225's format regex: ^([1-9]\d{0,8})$ (e.g. 123456789) |
||
if not id:match( '^[1-9]%d?%d?%d?%d?%d?%d?%d?%d?$' ) then |
if not id:match( '^[1-9]%d?%d?%d?%d?%d?%d?%d?%d?$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://catalog.archives.gov/id/'..id..' '.. |
return '[https://catalog.archives.gov/id/'..id..' '..(label or '公文書館(アメリカ)')..']'..p.getCatForId( 'NARA' ) |
||
end |
end |
||
function p.nclLink( id ) |
function p.nclLink( id, label ) |
||
--P1048's format regex: \d+ (e.g. 1081436) |
--P1048's format regex: \d+ (e.g. 1081436) |
||
if not id:match( '^%d+$' ) then |
if not id:match( '^%d+$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[http://aleweb.ncl.edu.tw/F/?func=accref&acc_sequence='..id..'&CON_LNG=ENG '.. |
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 |
||
end |
end |
||
function p.ndlLink( id ) |
function p.ndlLink( id, label ) |
||
--P349's format regex: 0?\d{8} (e.g. 012345678) |
--P349's format regex: 0?\d{8} (e.g. 012345678) |
||
if not id:match( '^0?%d%d%d%d%d%d%d%d$' ) then |
if not id:match( '^0?%d%d%d%d%d%d%d%d$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://id.ndl.go.jp/auth/ndlna/'..id..' '.. |
return '[https://id.ndl.go.jp/auth/ndlna/'..id..' '..(label or '日本')..']'..p.getCatForId( 'NDL' ) |
||
end |
end |
||
function p. |
function p.ngvLink( id, label ) |
||
--P3563's format rgex: 11[0-6]-\d+(\.\d+)? (e.g. 114-7721.2) |
|||
if not id:match('^11[0-6]%-%d+%.?%d*$') then |
|||
return false |
|||
end |
|||
return '[https://wikidata-externalid-url.toolforge.org/?url=https%3A%2F%2Fmsi.nga.mil%2FqueryResults%3Fpublications%2Fngalol%2Flights-buoys%3Fvolume%3D%251%26featureNumber%3D%252%26includeRemovals%3Dfalse%26output%3Dhtml&exp=(%5Cd%7B3%7D)-(.*)&id='..id..' '..id..']'..p.getCatForId( 'NGA' ) |
|||
end |
|||
function p.ngvLink( id ) |
|||
--P2041's format regex: \d+ (e.g. 12354) |
--P2041's format regex: \d+ (e.g. 12354) |
||
if not id:match( '^%d+$' ) then |
if not id:match( '^%d+$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://www.ngv.vic.gov.au/explore/collection/artist/'..id..'/ '.. |
return '[https://www.ngv.vic.gov.au/explore/collection/artist/'..id..'/ '..(label or 'ヴィクトリア')..']'..p.getCatForId( 'NGV' ) |
||
end |
end |
||
function p.nkcLink( id ) |
function p.nkcLink( id, label ) |
||
--P691's format regex: [a-z]{2,4}[0-9]{2,14} (e.g. abcd12345678901234) |
--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 |
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 |
return false |
||
end |
end |
||
return '[https://aleph.nkp.cz/F/?func=find-c&local_base=aut&ccl_term=ica='..id..'&CON_LNG=ENG '.. |
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 |
||
function p.nlaLink( id ) |
function p.nlaLink( id, label ) |
||
--P409's format regex: [1-9][0-9]{0,11} (e.g. 123456789012) |
--P409's format regex: [1-9][0-9]{0,11} (e.g. 123456789012) |
||
if not id:match( '^[1-9]%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?$' ) then |
if not id:match( '^[1-9]%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://nla.gov.au/anbd.aut-an'..id..' '.. |
return '[https://nla.gov.au/anbd.aut-an'..id..' '..(label or 'オーストラリア')..']'..p.getCatForId( 'NLA' ) |
||
end |
end |
||
function p.nlgLink( id ) |
function p.nlgLink( id, label ) |
||
--P3348's format regex: [1-9]\d* (e.g. 1) |
--P3348's format regex: [1-9]\d* (e.g. 1) |
||
if not id:match( '^[1-9]%d*$' ) then |
if not id:match( '^[1-9]%d*$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://data.nlg.gr/resource/authority/record'..id..' '.. |
return '[https://data.nlg.gr/resource/authority/record'..id..' '..(label or 'ギリシャ')..']'..p.getCatForId( 'NLG' ) |
||
end |
end |
||
function p.nliLink( id ) |
function p.nliLink( id, label ) |
||
--P949's format regex: \d{9} (e.g. 123456789) |
--P949's format regex: \d{9} (e.g. 123456789) |
||
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then |
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[http://uli.nli.org.il/F/?func=direct&doc_number='..id..'&local_base=nlx10'..' '.. |
return '[http://uli.nli.org.il/F/?func=direct&doc_number='..id..'&local_base=nlx10'..' '..(label or 'イスラエル')..']'..p.getCatForId( 'NLI' ) |
||
end |
end |
||
function p.nlkLink( id ) |
function p.nlkLink( id, label ) |
||
--P5034's format regex: |
--P5034's format regex: (KAB|KAC|KSH)([0-9]{4}|[0-9]{4}[a-zA-Z])[0-9]{4,6} (e.g. KAC201501465) |
||
if not id:match( '^ |
if not id:match( '^KAB%d%d%d%d%a?%d%d%d%d%d?%d?$' ) and |
||
not id:match( '^KAC%d%d%d%d%a?%d%d%d%d%d?%d?$' ) and |
|||
not id:match( '^KSH%d%d%d%d%a?%d%d%d%d%d?%d?$' ) then |
|||
return false |
return false |
||
end |
end |
||
return '[https:// |
return '[https://lod.nl.go.kr/resource/'..id..' '..(label or '韓国')..']'..p.getCatForId( 'NLK' ) |
||
end |
end |
||
function p.nlpLink( id ) |
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) |
--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 |
if not id:match( '^9810%d+$' ) and |
||
609行目: | 581行目: | ||
return false |
return false |
||
end |
end |
||
return '[https://tools.wmflabs.org/wikidata-externalid-url?p=1695&id='..id..' '.. |
return '[https://tools.wmflabs.org/wikidata-externalid-url?p=1695&id='..id..' '..(label or 'ポーランド')..']'..p.getCatForId( 'NLP' ) |
||
end |
end |
||
function p.nlrLink( id ) |
function p.nlrLink( id, label ) |
||
--P1003's format regex: \d{9} (e.g. 123456789) |
--P1003's format regex: \d{9} (e.g. 123456789) |
||
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then |
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[http://aleph.bibnat.ro:8991/F/?func=direct&local_base=NLR10&doc_number='..id..' '.. |
return '[http://aleph.bibnat.ro:8991/F/?func=direct&local_base=NLR10&doc_number='..id..' '..(label or 'ルーマニア')..']'..p.getCatForId( 'NLR' ) |
||
end |
end |
||
function p.nskLink( id ) |
function p.nskLink( id, label ) |
||
--P1375's format regex: \d{9} (e.g. 123456789) |
--P1375's format regex: \d{9} (e.g. 123456789) |
||
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then |
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[http://katalog.nsk.hr/F/?func=direct&doc_number='..id..'&local_base=nsk10 '.. |
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 |
end |
||
function p.ntaLink( id ) |
function p.ntaLink( id, label ) |
||
--P1006's format regex: \d{8}[\dX] (e.g. 12345678X) |
--P1006's format regex: \d{8}[\dX] (e.g. 12345678X) |
||
if not id:match( '^%d%d%d%d%d%d%d%d[%dX]$' ) then |
if not id:match( '^%d%d%d%d%d%d%d%d[%dX]$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[http://data.bibliotheken.nl/id/thes/p'..id..' '.. |
return '[http://data.bibliotheken.nl/id/thes/p'..id..' '..(label or 'オランダ')..']'..p.getCatForId( 'NTA' ) |
||
end |
end |
||
function p.orcidLink( id ) |
function p.orcidLink( id, label ) |
||
id = p.validateIsni( id ) --e.g. 0000-0002-7398-5483 |
id = p.validateIsni( id ) --e.g. 0000-0002-7398-5483 |
||
if not id then |
if not id then |
||
642行目: | 614行目: | ||
end |
end |
||
id = id:sub( 1, 4 )..'-'..id:sub( 5, 8 )..'-'..id:sub( 9, 12 )..'-'..id:sub( 13, 16 ) |
id = id:sub( 1, 4 )..'-'..id:sub( 5, 8 )..'-'..id:sub( 9, 12 )..'-'..id:sub( 13, 16 ) |
||
return '[https://orcid.org/'..id..' '.. |
return '[https://orcid.org/'..id..' '..(label or 'ORCID')..']'..p.getCatForId( 'ORCID' ) |
||
end |
end |
||
function p.picLink( id ) |
function p.picLink( id, label ) |
||
--P2750's format regex: [1-9]\d* (e.g. 1) |
--P2750's format regex: [1-9]\d* (e.g. 1) |
||
if not id:match( '^[1-9]%d*$' ) then |
if not id:match( '^[1-9]%d*$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://pic.nypl.org/constituents/'..id..' '.. |
return '[https://pic.nypl.org/constituents/'..id..' '..(label or 'Photographers\' Identities')..']'..p.getCatForId( 'PIC' ) |
||
end |
end |
||
function p.plwabnLink( id ) |
function p.plwabnLink( id, label ) |
||
--P7293's format regex: 981[0-9]{8}05606 (e.g. 9810696457305606) |
--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 |
if not id:match( '^981%d%d%d%d%d%d%d%d05606*$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[http://mak.bn.org.pl/cgi-bin/KHW/makwww.exe?BM=1&NU=1&IM=4&WI='..id..' '.. |
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 |
end |
||
function p.publonsLink( id ) |
function p.publonsLink( id, label ) |
||
--P3829's format regex: \d+ (e.g. 654601) |
--P3829's format regex: \d+ (e.g. 654601) |
||
if not id:match( '^%d+$' ) then |
if not id:match( '^%d+$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://publons.com/author/'..id..'/ '.. |
return '[https://publons.com/author/'..id..'/ '..(label or 'Publons(研究者)')..']'..p.getCatForId( 'Publons' ) |
||
end |
end |
||
function p.ridLink( id ) |
function p.ridLink( id, label ) |
||
--P1053's format regex: [A-Z]{1,3}-\d{4}-(19|20)\d\d (e.g. AAS-5150-2020) |
--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 |
if not id:match( '^[A-Z][A-Z]?[A-Z]?%-%d%d%d%d%-19%d%d$' ) and |
||
675行目: | 647行目: | ||
return false |
return false |
||
end |
end |
||
return '[https://www.researcherid.com/rid/'..id..' '.. |
return '[https://www.researcherid.com/rid/'..id..' '..(label or 'ResearcherID')..']'..p.getCatForId( 'RID' ) |
||
end |
|||
function p.reroLink( id ) |
|||
--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..' '..id..']'..p.getCatForId( 'RERO' ) |
|||
end |
end |
||
function p.rismLink( id ) |
function p.rismLink( id, label ) |
||
--P5504's format regex: (pe|ks)?\[1-9]d* (e.g. pe30006410) |
--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' |
if not id:match( '^pe[1-9]%d*$' ) and --99% start with 'pe' |
||
693行目: | 657行目: | ||
return false |
return false |
||
end |
end |
||
return '[https://opac.rism.info/search?id='..id..' '.. |
return '[https://opac.rism.info/search?id='..id..' '..(label or 'RISM(フランス)')..']'..p.getCatForId( 'RISM' ) |
||
end |
end |
||
function p. |
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) |
--P650's format regex: [1-9]\d{0,5} (e.g. 123456) |
||
if not id:match( '^[1-9]%d?%d?%d?%d?%d?$' ) then |
if not id:match( '^[1-9]%d?%d?%d?%d?%d?$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://rkd.nl/en/explore/artists/'..id..' '.. |
return '[https://rkd.nl/en/explore/artists/'..id..' '..(label or 'RKDアーティスト(オランダ)')..']'..p.getCatForId( 'RKDartists' ) |
||
end |
end |
||
function p.rkdidLink( id ) |
function p.rkdidLink( id, label ) |
||
--P350's format regex: [1-9]\d{0,5} (e.g. 123456) |
--P350's format regex: [1-9]\d{0,5} (e.g. 123456) |
||
if not id:match( '^[1-9]%d?%d?%d?%d?%d?$' ) then |
if not id:match( '^[1-9]%d?%d?%d?%d?%d?$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://rkd.nl/nl/explore/images/'..id..' '.. |
return '[https://rkd.nl/nl/explore/images/'..id..' '..(label or 'RKD ID(オランダ)')..']'..p.getCatForId( 'RKDID' ) |
||
end |
end |
||
function p.rslLink( id ) |
function p.rslLink( id, label ) |
||
--P947's format regex: \d{1,9} (e.g. 123456789) |
--P947's format regex: \d{1,9} (e.g. 123456789) |
||
if not id:match( '^%d%d?%d?%d?%d?%d?%d?%d?%d?$' ) then |
if not id:match( '^%d%d?%d?%d?%d?%d?%d?%d?%d?$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[http://aleph.rsl.ru/F?func=find-b&find_code=SYS&adjacent=Y&local_base=RSL11&request='..id..'&CON_LNG=ENG '.. |
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 |
end |
||
function p. |
function p.selibrLink( id, label ) |
||
--P1153's format regex: [1-9]\d{9,10} (e.g. 35247902700) |
|||
if not id:match( '^[1-9]%d%d%d%d%d%d%d%d%d%d?$' ) then |
|||
return false |
|||
end |
|||
return '[https://www.scopus.com/authid/detail.uri?authorId='..id..' '..id..']'..p.getCatForId( 'Scopus' ) |
|||
end |
|||
function p.selibrLink( id ) |
|||
--P906's format regex: [1-9]\d{4,5} (e.g. 123456) |
--P906's format regex: [1-9]\d{4,5} (e.g. 123456) |
||
if not id:match( '^[1-9]%d%d%d%d%d?$' ) then |
if not id:match( '^[1-9]%d%d%d%d%d?$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://libris.kb.se/auth/'..id..' '.. |
return '[https://libris.kb.se/auth/'..id..' '..(label or 'スウェーデン')..']'..p.getCatForId( 'SELIBR' ) |
||
end |
end |
||
function p.sikartLink( id ) |
function p.sikartLink( id, label ) |
||
--P781's format regex: \d{7,9} (e.g. 123456789) |
--P781's format regex: \d{7,9} (e.g. 123456789) |
||
if not id:match( '^%d%d%d%d%d%d%d%d?%d?$' ) then |
if not id:match( '^%d%d%d%d%d%d%d%d?%d?$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[http://www.sikart.ch/KuenstlerInnen.aspx?id='..id..'&lng=en '.. |
return '[http://www.sikart.ch/KuenstlerInnen.aspx?id='..id..'&lng=en '..(label or 'SIKART(スイス)')..']'..p.getCatForId( 'SIKART' ) --no https as of 9/2019 |
||
end |
end |
||
function p.snacLink( id ) |
function p.snacLink( id, label ) |
||
--P3430's format regex: \d*[A-Za-z][0-9A-Za-z]* (e.g. A) |
--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 |
if not id:match( '^%d*[A-Za-z][0-9A-Za-z]*$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://snaccooperative.org/ark:/99166/'..id..' '.. |
return '[https://snaccooperative.org/ark:/99166/'..id..' '..(label or 'Social Networks and Archival Context')..']'..p.getCatForId( 'SNAC-ID' ) |
||
end |
end |
||
function p.sudocLink( id ) |
function p.sudocLink( id, label ) |
||
--P269's format regex: (\d{8}[\dX]|) (e.g. 026927608) |
--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' |
if not id:match( '^%d%d%d%d%d%d%d%d[%dxX]$' ) then --legacy: allow lowercase 'x' |
||
return false |
return false |
||
end |
end |
||
return '[https://www.idref.fr/'..id..' '.. |
return '[https://www.idref.fr/'..id..' '..(label or 'SUDOC(フランス)')..']'..p.getCatForId( 'SUDOC' ) |
||
end |
end |
||
function p. |
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) |
--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 |
if not id:match( '^A%d%d%.%d%.%d%d%.%d%d%d[FM]?$' ) then |
||
return false |
return false |
||
end |
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' ) |
|||
return longurl..id..' '..id..']'..p.getCatForId( 'TA98' ) |
|||
end |
end |
||
function p.tdviaLink( id ) |
function p.tdviaLink( id, label ) |
||
--P7314's format regex: [ |
--P7314's format regex: [a-z/-]+] (e.g. barkan-omer-lutfi) |
||
if not id:match( '^[ |
if not id:match( '^[a-z/-]+$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://islamansiklopedisi.org.tr/'..id..' '.. |
return '[https://islamansiklopedisi.org.tr/'..id..' '..(label or 'イスラーム百科事典(トルコ)')..']'..p.getCatForId( 'TDVİA' ) |
||
end |
end |
||
function p.tepapaLink( id ) |
function p.tepapaLink( id, label ) |
||
--P3544's format regex: \d+ (e.g. 1) |
--P3544's format regex: \d+ (e.g. 1) |
||
if not id:match( '^%d+$' ) then |
if not id:match( '^%d+$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://collections.tepapa.govt.nz/agent/'..id..' '.. |
return '[https://collections.tepapa.govt.nz/agent/'..id..' '..(label or 'Te Papa(ニュージーランド)')..']'..p.getCatForId( 'TePapa' ) |
||
end |
end |
||
function p.tlsLink( id ) |
function p.tlsLink( id, label ) |
||
id = id:gsub(' +', '_') |
|||
--P1362's format regex: \p{Lu}[\p{L}\d_',\.\-\(\)\*\/–&]{3,89} (e.g. Abcd) |
--P1362's format regex: \p{Lu}[\p{L}\d_',\.\-\(\)\*\/–&]{3,89} (e.g. Abcd) |
||
--Mediawiki page title partial URL so consider validation with mw.title or "[^#<>%[%] {|}]" |
--Mediawiki page title partial URL so consider validation with mw.title or "[^#<>%[%] {|}]" |
||
local class = "[%w_',%.%-%(%)%*%/–&]" |
local class = "[%w_',%.%-%(%)%*%/–&]" |
||
local idlen = |
local idlen = mw.ustring.len (id) |
||
if idlen < 4 or idlen > 90 then |
if idlen < 4 or idlen > 90 then |
||
return false |
return false |
||
end |
end |
||
local regex = '^%u'..string.rep(class, idlen - 1)..'$' |
local regex = '^%u'..string.rep(class, idlen - 1)..'$' |
||
if not mw.ustring.match( |
if not mw.ustring.match( id, regex ) then |
||
return false |
return false |
||
end |
end |
||
return '[http://tls.theaterwissenschaft.ch/wiki/'.. |
return '[http://tls.theaterwissenschaft.ch/wiki/'..id..' '..(label or 'Theaterlexikon(スイス)')..']'..p.getCatForId( 'TLS' ) --no https as of 9/2019 |
||
end |
end |
||
function p.troveLink( id ) |
function p.troveLink( id, label ) |
||
--P1315's format regex: [1-9]\d{5,7} (e.g. 12345678) |
--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 |
if not id:match( '^[1-9]%d%d%d%d%d%d?%d?$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://trove.nla.gov.au/people/'..id..' '.. |
return '[https://trove.nla.gov.au/people/'..id..' '..(label or 'Trove(オーストラリア)')..']'..p.getCatForId( 'Trove' ) |
||
end |
end |
||
function p.ukparlLink( id ) |
function p.ukparlLink( id, label ) |
||
--P6213's format regex: [a-zA-Z\d]{8} (e.g. AQUupyiR) |
--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 |
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 |
return false |
||
end |
end |
||
return '[https://id.parliament.uk/'..id..' '.. |
return '[https://id.parliament.uk/'..id..' '..(label or '英議会')..']'..p.getCatForId( 'UKPARL' ) |
||
end |
end |
||
function p.ulanLink( id ) |
function p.ulanLink( id, label ) |
||
--P245's format regex: 500\d{6} (e.g. 500123456) |
--P245's format regex: 500\d{6} (e.g. 500123456) |
||
if not id:match( '^500%d%d%d%d%d%d$' ) then |
if not id:match( '^500%d%d%d%d%d%d$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[https://www.getty.edu/vow/ULANFullDisplay?find=&role=&nation=&subjectid='..id..' '.. |
return '[https://www.getty.edu/vow/ULANFullDisplay?find=&role=&nation=&subjectid='..id..' '..(label or 'アーティスト名(ゲティ)')..']'..p.getCatForId( 'ULAN' ) |
||
end |
|||
function p.uscgLink( id ) |
|||
--P3723's format regex: [1-7]-\d{1,5}(.[1-9])? (e.g. 6-0695) |
|||
if not id:match( '^[1-7]%-%d%d?%d?%d?%d?$' ) and |
|||
not id:match( '^[1-7]%-%d%d?%d?%d?%d?%.%d*[1-9]$' ) then |
|||
return false |
|||
end |
|||
return id..p.getCatForId( 'USCG' ) |
|||
end |
end |
||
function p.uscongressLink( id ) |
function p.uscongressLink( id, label ) |
||
--P1157's format regex: [A-Z]00[01]\d{3} (e.g. A000123) |
--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 |
if not id:match( '^[A-Z]00[01]%d%d%d$' ) then |
||
return false |
return false |
||
end |
end |
||
return '[http://bioguide.congress.gov/scripts/biodisplay.pl?index='..id..' '.. |
return '[http://bioguide.congress.gov/scripts/biodisplay.pl?index='..id..' '..(label or '米議会')..']'..p.getCatForId( 'USCongress' ) --no https as of 9/2019 |
||
end |
end |
||
function p.vcbaLink( id ) |
function p.vcbaLink( id, label ) |
||
--P8034's format regex: \d{3}\/[1-9]\d{0,5} (e.g. 494/9793) |
--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 |
if not id:match( '^%d%d%d\/[1-9]%d?%d?%d?%d?%d?$' ) then |
||
return false |
return false |
||
end |
end |
||
id = id:gsub('\/', '_') |
|||
return '[https://opac.vatlib.it/auth/detail/'.. |
return '[https://opac.vatlib.it/auth/detail/'..id..' '..(label or 'バチカン')..']'..p.getCatForId( 'VcBA' ) |
||
end |
end |
||
function p.viafLink( id ) |
function p.viafLink( id, label ) |
||
--P214's format regex: [1-9]\d(\d{0,7}|\d{17,20}) (e.g. 123456789, 1234567890123456789012) |
--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 |
if not id:match( '^[1-9]%d%d?%d?%d?%d?%d?%d?%d?$' ) and |
||
857行目: | 819行目: | ||
return false |
return false |
||
end |
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), |
-- 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' ) |
|||
return '[https://viaf.org/viaf/'..id..' '..id..']'..p.getCatForId( 'VIAF' ) |
|||
end |
|||
function p.worldcatidLink( id ) |
|||
--P7859's format regex: viaf-\d+|lccn-n[a-z]?[0-9\-]+|n[cps]-.+ (e.g. viaf-100181709, lccn-n78-95332, np-verbeck,%20william$1861) |
|||
if not id:match( '^viaf%-%d+$' ) and |
|||
not id:match( '^lccn%-n[a-z]?[0-9%-]+$' ) and |
|||
not id:match( '^n[cps]%-.+$' ) then |
|||
return false |
|||
end |
|||
return '[https://www.worldcat.org/identities/'..mw.uri.encode(id, 'PATH')..'/ '..id..']'..p.getCatForId( 'WORLDCATID' ) |
|||
end |
|||
function p.zbmathLink( id ) |
|||
--P1556's format regex: [a-z][a-z\-]*(\.[a-z][a-z\-]*)?(\.[0-9]*)? (e.g. turing.alan-m) |
|||
local ps = {'%l[%l%-]*', '%.%l[%l%-]*', '%.%d*'} |
|||
if not id:match( '^'..ps[1]..'$' ) and -- prefix with no capture options |
|||
not id:match( '^'..ps[1]..ps[2]..'$' ) and -- prefix with first capture option |
|||
not id:match( '^'..ps[1]..ps[3]..'$' ) and -- prefix with second capture option |
|||
not id:match( '^'..ps[1]..ps[2]..ps[3]..'$' ) then -- prefix and both capture options |
|||
return false |
|||
end |
|||
return '[https://zbmath.org/authors/?q=ai:'..id..' '..id..']'..p.getCatForId( 'ZBMATH' ) |
|||
end |
end |
||
888行目: | 827行目: | ||
function p.append(str, c, length) |
function p.append(str, c, length) |
||
while str:len() < length do |
while str:len() < length do |
||
str = c..str |
str = c .. str |
||
end |
end |
||
return str |
return str |
||
903行目: | 842行目: | ||
local result = (12 - remainder) % 11 |
local result = (12 - remainder) % 11 |
||
if result == 10 then |
if result == 10 then |
||
return |
return "X" |
||
end |
end |
||
return tostring( result ) |
return tostring( result ) |
||
955行目: | 894行目: | ||
local wikiTable = '{| class="wikitable sortable"\n'.. |
local wikiTable = '{| class="wikitable sortable"\n'.. |
||
'! rowspan=2 | 識別子\n'.. |
'! rowspan=2 | 識別子\n'.. |
||
'! rowspan=2 | |
'! rowspan=2 | グループ\n'.. |
||
'! rowspan=2 | 表示名\n'.. |
|||
'! rowspan=2; data-sort-type=number | ウィキデータのプロパティ\n'.. |
'! rowspan=2; data-sort-type=number | ウィキデータのプロパティ\n'.. |
||
'! colspan=4 | 追跡カテゴリのページ数\n'.. |
'! colspan=4 | 追跡カテゴリのページ数\n'.. |
||
964行目: | 904行目: | ||
'! [[:Category:誤った典拠管理情報が指定されている記事|'..'誤った識別子]]\n'.. |
'! [[:Category:誤った典拠管理情報が指定されている記事|'..'誤った識別子]]\n'.. |
||
'|-\n' |
'|-\n' |
||
local lang = mw.getContentLanguage() |
local lang = mw.getContentLanguage() |
||
local a, u, m, f, P = 0, 0, 0, 0, 0 --cumulative sums |
|||
for _, conf in pairs( p.conf ) do |
for _, conf in pairs( p.conf ) do |
||
local param, pid, section = conf[1], conf[2], conf[4] |
local param, pid, section = conf[1], conf[2], conf[4] |
||
local category = conf.category or param |
|||
local appearsAs |
local appearsAs |
||
if |
if param == "WORLDCATID" then |
||
-- WorldCat is special |
|||
appearsAs = "[https://www.worldcat.org/identities/lccn-n78039510 WorldCat]" |
|||
elseif conf.prefix then |
|||
appearsAs = conf.prefix |
appearsAs = conf.prefix |
||
else |
else |
||
appearsAs = conf[3](conf[5]) |
appearsAs = conf[3](conf[5]) |
||
end |
end |
||
local link = conf.link or param..' (識別子)' |
local link = conf.link or param .. ' (識別子)' |
||
local displayname = conf.displayname or param --日本語版独自 |
|||
local category = conf.category or param |
local category = conf.category or param |
||
local args = { id = 'f', pid } |
local args = { id = 'f', pid } |
||
991行目: | 930行目: | ||
local miscCount = lang:formatNum( mw.site.stats.pagesInCategory(miscCat, 'pages') ) |
local miscCount = lang:formatNum( mw.site.stats.pagesInCategory(miscCat, 'pages') ) |
||
local faultyCount = lang:formatNum( mw.site.stats.pagesInCategory(faultyCat, 'pages') ) |
local faultyCount = lang:formatNum( mw.site.stats.pagesInCategory(faultyCat, 'pages') ) |
||
P = P + 1 --property count |
|||
a = a + lang:parseFormattedNumber(articleCount) |
|||
u = u + lang:parseFormattedNumber(userCount) |
|||
m = m + lang:parseFormattedNumber(miscCount) |
|||
f = f + lang:parseFormattedNumber(faultyCount) |
|||
--concat |
--concat |
||
wikiTable = wikiTable..'\n'.. |
wikiTable = wikiTable..'\n'.. |
||
'|-\n'.. |
'|-\n'.. |
||
'||'..param.. |
'||[['..link..'|'..param..']]'.. |
||
'|| |
'||'..section.. |
||
'||'..appearsAs.. |
|||
'||data-sort-value='..pid..'|'..wpl.. |
'||data-sort-value='..pid..'|'..wpl.. |
||
'||style="text-align: right;"|[[:Category:'..articleCat..'|'..articleCount..']]'.. |
'||style="text-align: right;"|[[:Category:'..articleCat..'|'..articleCount..']]'.. |
||
1,014行目: | 949行目: | ||
local articleCat = w..'識別子が指定されている記事' |
local articleCat = w..'識別子が指定されている記事' |
||
local articleCount = lang:formatNum( mw.site.stats.pagesInCategory(articleCat, 'pages') ) |
local articleCount = lang:formatNum( mw.site.stats.pagesInCategory(articleCat, 'pages') ) |
||
local appearsAs |
local appearsAs |
||
if w == |
if w == "WorldCat-LCCN" then |
||
appearsAs = "[https://www.worldcat.org/identities/lccn-n79-113947 WorldCat(アメリカ議会図書館経由)]" |
|||
appearsAs = 'WorldCat-LCCN' |
|||
else |
else |
||
appearsAs = "[https://www.worldcat.org/identities/containsVIAFID/12345789 WorldCat(VIAF経由)]" |
|||
appearsAs = 'WorldCat-VIAF' |
|||
end |
end |
||
a = a + lang:parseFormattedNumber(articleCount) |
|||
wikiTable = wikiTable..'\n'.. |
wikiTable = wikiTable..'\n'.. |
||
'|-\n'.. |
'|-\n'.. |
||
'||'..'—'.. |
'||'..'—'.. |
||
'||' |
'||全般'.. |
||
'||'..appearsAs.. |
|||
'||data-sort-value='..w..'|'..'—'.. |
'||data-sort-value='..w..'|'..'—'.. |
||
'||style="text-align: right;"|[[:Category:'..articleCat..'|'..articleCount..']]'.. |
'||style="text-align: right;"|[[:Category:'..articleCat..'|'..articleCount..']]'.. |
||
1,032行目: | 967行目: | ||
end |
end |
||
return require("Module:Suppress categories").main(wikiTable)..'\n|}' |
|||
--append sums |
|||
wikiTable = wikiTable..'\n'.. |
|||
'|-\n'.. |
|||
'! style="text-align: right;" colspan=2|合計'.. |
|||
'||style="text-align: right;"|'..lang:formatNum(P).. |
|||
'||style="text-align: right;"|'..lang:formatNum(a).. |
|||
'||style="text-align: right;"|'..lang:formatNum(u).. |
|||
'||style="text-align: right;"|'..lang:formatNum(m).. |
|||
'||style="text-align: right;"|'..lang:formatNum(f) |
|||
return require('Module:Suppress categories').main(wikiTable)..'\n|}' |
|||
end |
end |
||
1,049行目: | 974行目: | ||
--[[==========================================================================]] |
--[[==========================================================================]] |
||
-- |
-- 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. |
||
-- This reduces clutter in "What links here" on both the redirect and the target, |
|||
-- and improves reverse lookup of articles where a manifestation of each identifier is used. |
|||
-- p.conf table basic format: { 'parameter name', propertyId # in Wikidata, formatting/validation function, section, example ID for documentation } |
|||
-- Parameter format: { 'parameter name', propertyId # in Wikidata, formatting/validation function, section, example ID for documentation } |
|||
-- p.conf table optional named parameters: |
|||
-- |
-- Optional named parameters: `link` to override the link in the documentation (defaults to parameter + (identifer)), |
||
-- |
-- category to override the ID in category names (defaults to parameter), |
||
-- |
-- prefix to include a prefix (usually a wikilink explaining what the identifier is) before the external link itself |
||
p.conf = { |
p.conf = { |
||
{ 'AAG', 3372, p.aagLink, |
{ 'AAG', 3372, p.aagLink, "美術館と博物館", "1", link = ":en:AAG (identifier)"}, |
||
{ 'ACM-DL', 864, p.acmLink, |
{ 'ACM-DL', 864, p.acmLink, "科学データベース", "12345678901", link="ACM DL (識別子)"}, |
||
{ 'ADB', 1907, p.adbLink, |
{ 'ADB', 1907, p.adbLink, "人名辞典", "barton-sir-edmund-toby-71", link = ":en:ADB (identifier)"}, |
||
{ 'AGSA', 6804, p.agsaLink, "美術館と博物館", "3625"}, |
|||
{ 'admiralty', 3562, p.admiraltyLink, '', 'D1204.1', link=':en:Admiralty (identifier)'}, |
|||
{ ' |
{ 'autores.uy', 2558, p.autoresuyLink, "人名辞典", "12345"}, |
||
{ ' |
{ 'AWR', 4186, p.awrLink, "人名辞典", "PR00768b", link = ":en:AWR (identifier)"}, |
||
{ 'BIBSYS', 1015, p.bibsysLink, "国立図書館", "1234567890123", link = ":en:BIBSYS (identifier)"}, |
|||
{ 'autores.uy', 2558, p.autoresuyLink, '', '12345' }, |
|||
{ ' |
{ 'Bildindex', 2092, p.bildLink, "美術研究組織", "1", link = ":en:Bildindex (identifier)"}, |
||
{ ' |
{ 'BNC', 1890, p.bncLink, "国立図書館", "123456789", link = ":en:BNC (identifier)"}, |
||
{ 'BNE', 950, p.bneLink, "国立図書館", "XX1234567"}, |
|||
{ 'Bildindex', 2092, p.bildLink, '', '1', link=':en:Bildindex (identifier)' }, |
|||
{ ' |
{ 'BNF', 268, p.bnfLink, "国立図書館", "123456789"}, |
||
{ ' |
{ 'Botanist', 428, p.botanistLink , "科学データベース", "L."}, |
||
{ ' |
{ 'BPN', 651, p.bpnLink , "人名辞典", "12345678", link = ":en:BPN (identifier)"}, |
||
{ 'CANTIC', 1273, p.canticLink, "国立図書館", "a12345678", link = ":en:CANTIC (identifier)"}, |
|||
{ 'Botanist', 428, p.botanistLink, '', 'L.' }, |
|||
{ ' |
{ 'CINII', 271, p.ciniiLink, "科学データベース", "DA12345678", link = "CiNii (識別子)"}, |
||
{ 'CWGC', 1908, p.cwgcLink, "その他", "1234567"}, |
|||
{ 'CANTIC', 1273, p.canticLink, '', 'a12345678', link=':en:CANTIC (identifier)' }, |
|||
{ ' |
{ 'DAAO', 1707, p.daaoLink, "美術研究組織", "rolf-harris", link = ":en:DAAO (identifier)"}, |
||
{ 'DBLP', 2456, p.dblpLink, "科学データベース", "123/123"}, |
|||
{ 'CINII', 271, p.ciniiLink, '', 'DA12345678', link='CiNii (識別子)' }, |
|||
{ ' |
{ '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"}, |
|||
{ 'DTBIO', 7902, p.dtbioLink, '', '118554700', link=':en:DTBIO (identifier)' }, |
|||
{ ' |
{ '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)"}, |
|||
{ 'GND', 227, p.gndLink, '', '4079154-3' }, |
|||
{ 'ISNI', 213, p.isniLink, "全般", "0000-0000-6653-4145", prefix = '[[ISNI (識別子)|ISNI]]'}, |
|||
{ 'Google Scholar', 1960, p.googleLink, '', 'QPdLuj8AAAAJ' }, |
|||
{ 'Joconde', 347, p.jocondeLink, "美術研究組織", "12345678901", link = ":en:Joconde (identifier)"}, |
|||
{ 'HDS', 902, p.hdsLink, '', '050123' }, |
|||
{ 'KULTURNAV', 1248, p.kulturnavLink, "美術研究組織", "12345678-1234-1234-1234-1234567890AB", link=":en:KulturNav (identifier)"}, |
|||
{ 'IAAF', 1146, p.iaafLink, '', '123' }, |
|||
{ 'LCCN', 244, p.lccnLink, "国立図書館", "n78039510"}, |
|||
{ 'ICCU', 396, p.iccuLink, '', 'CFIV000163', link=':en:ICCU (identifier)' }, --formerly SBN |
|||
{ ' |
{ '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(フランス)]]"}, |
|||
{ 'ISNI', 213, p.isniLink, '', '0000-0000-6653-4145' }, |
|||
{ ' |
{ 'MA', 6366, p.maLink, "その他", "123456789", link = ":en:MA (identifier)"}, |
||
{ 'MBA', 434, p.mbaLink, "その他", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainz'}, --special cat name |
|||
{ 'Joconde', 347, p.jocondeLink, '', '12345678901', link=':en:Joconde (identifier)' }, |
|||
{ ' |
{ '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 |
|||
{ 'LCCN', 244, p.lccnLink, '', 'n78039510' }, |
|||
{ 'MBL', 966, p.mblLink, "その他", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainzレーベル' }, --special cat name |
|||
{ 'LIR', 886, p.lirLink, '', '1' }, |
|||
{ 'MBP', 1004, p.mbpLink, "その他", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainz場所' }, --special cat name |
|||
{ 'LNB', 1368, p.lnbLink, '', '123456789', link=':en:LNB (identifier)' }, |
|||
{ 'MBRG', 436, p.mbrgLink, "その他", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainzリリース・グループ' }, --special cat name |
|||
{ 'Léonore', 640, p.leonoreLink, '', 'LH//1/1', link=':en:Léonore (identifier)' }, |
|||
{ 'MBS', 1407, p.mbsLink, "その他", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainzシリーズ' }, --special cat name |
|||
{ 'MATHSN', 4955, p.mathsnLink, '', '175270', link=':en:MATHSN (identifier)' }, |
|||
{ ' |
{ 'MBW', 435, p.mbwLink, "その他", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainz作品' }, --special cat name |
||
{ 'MGP', 549, p.mgpLink, "科学データベース", "123456"}, |
|||
{ 'MBAREA', 982, p.mbareaLink, '', '12345678-1234-1234-1234-1234567890AB', category = 'MusicBrainz地域' }, --special cat name |
|||
{ 'NARA', 1225, p.naraLink, "その他", "12345678"}, |
|||
{ 'MBI', 1330, p.mbiLink, '', '12345678-1234-1234-1234-1234567890AB', category = 'MusicBrainz楽器' }, --special cat name |
|||
{ 'NCL', 1048, p.nclLink, "国立図書館", "1081436"}, |
|||
{ 'MBL', 966, p.mblLink, '', '12345678-1234-1234-1234-1234567890AB', category = 'MusicBrainzレーベル' }, --special cat name |
|||
{ 'NDL', 349, p.ndlLink, "国立図書館", "012345678"}, |
|||
{ 'MBP', 1004, p.mbpLink, '', '12345678-1234-1234-1234-1234567890AB', category = 'MusicBrainz場所' }, --special cat name |
|||
{ 'NGV', 2041, p.ngvLink, "美術館と博物館", "12354"}, |
|||
{ 'MBRG', 436, p.mbrgLink, '', '12345678-1234-1234-1234-1234567890AB', category = 'MusicBrainzリリース・グループ' }, --special cat name |
|||
{ 'NKC', 691, p.nkcLink, "国立図書館", "abcd12345678901234", link = ":en:NKC (identifier)"}, |
|||
{ 'MBS', 1407, p.mbsLink, '', '12345678-1234-1234-1234-1234567890AB', category = 'MusicBrainzシリーズ' }, --special cat name |
|||
{ 'NLA', 409, p.nlaLink, "国立図書館", "123456789012"}, |
|||
{ 'MBW', 435, p.mbwLink, '', '12345678-1234-1234-1234-1234567890AB', category = 'MusicBrainz作品' }, --special cat name |
|||
{ ' |
{ '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"}, |
|||
{ 'NGA', 3563, p.ngaLink, '', '114-5592', link=':en:NGA (identifier)' }, |
|||
{ 'NSK', 1375, p.nskLink, "国立図書館", "123456789", link = ":en:NSK (identifier)"}, |
|||
{ 'NGV', 2041, p.ngvLink, '', '12354' }, |
|||
{ ' |
{ 'NTA', 1006, p.ntaLink, "国立図書館", "12345678X", link = ":en:NTA (identifier)"}, |
||
{ 'ORCID', 496, p.orcidLink, "全般", "0000-0002-7398-5483", prefix = '[[ORCID (識別子)|ORCID]]'}, |
|||
{ 'NLA', 409, p.nlaLink, '', '123456789012' }, |
|||
{ ' |
{ 'PIC', 2750, p.picLink, "美術研究組織", "1", link = ":en:PIC (identifier)"}, |
||
{ ' |
{ 'PLWABN', 7293, p.plwabnLink, "国立図書館", "9812345678905606"}, |
||
{ 'Publons', 3829, p.publonsLink, "科学データベース", "2776255", link = ":en:Publons (identifier)"}, |
|||
{ 'NLK', 5034, p.nlkLink, '', 'KAB197000000' }, |
|||
{ ' |
{ 'RID', 1053, p.ridLink, "科学データベース", "A-1234-1934"}, |
||
{ 'RISM', 5504, p.rismLink, "その他", "pe1", prefix = '[[:en:RISM (identifier)|RISM(フランス)]]'}, |
|||
{ 'NLR', 1003, p.nlrLink, '', '123456789' }, |
|||
{ ' |
{ 'RERO', 3065, p.reroLink, "その他", "02-A012345678", prefix = '[[:en:RERO (identifier)|RERO(スイス)]]'}, |
||
{ 'RKDartists', 650, p.rkdartistsLink, "美術研究組織", "123456"}, |
|||
{ 'NTA', 1006, p.ntaLink, '', '12345678X', link=':en:NTA (identifier)' }, |
|||
{ ' |
{ 'RKDID', 350, p.rkdidLink, "美術研究組織", "123456"}, |
||
{ ' |
{ 'RSL', 947, p.rslLink, "国立図書館", "123456789"}, |
||
{ 'SELIBR', 906, p.selibrLink, "国立図書館", "123456", link = ":en:SELIBR (identifier)"}, |
|||
{ 'PLWABN', 7293, p.plwabnLink, '', '9812345678905606' }, |
|||
{ ' |
{ 'SIKART', 781, p.sikartLink, "美術研究組織", '123456789', link = ":en:SIKART (identifier)"}, |
||
{ 'SNAC-ID', 3430, p.snacLink, "その他", "A"}, |
|||
{ 'RERO', 3065, p.reroLink, '', '02-A012345678', link=':en:RERO (identifier)' }, |
|||
{ 'SUDOC', 269, p.sudocLink, "その他", "026927608", prefix = '[[SUDOC (識別子)|SUDOC(フランス)]]'}, |
|||
{ 'RID', 1053, p.ridLink, '', 'A-1234-1934', displayname='ResearcherID' }, |
|||
{ ' |
{ '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)"}, |
|||
{ 'RKDartists', 650, p.rkdartistsLink, '', '123456', displayname='RKD' }, |
|||
{ 'TDVİA', 7314, p.tdviaLink, "その他", "asim-b-behdele", link = ":en:TDVİA (identifier)"}, |
|||
{ 'RKDID', 350, p.rkdidLink, '', '123456', displayname='RKDimages ID' }, |
|||
{ ' |
{ '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"}, |
|||
{ 'SIKART', 781, p.sikartLink, '', '123456789', link=':en:SIKART (identifier)' }, |
|||
{ 'ULAN', 245, p.ulanLink, "美術研究組織", "500123456", link = ":en:ULAN (identifier)"}, |
|||
{ 'SNAC-ID', 3430, p.snacLink, '', 'A', displayname='SNAC' }, |
|||
{ 'USCongress', 1157, p.uscongressLink, "その他", "A000123", link = ":en:US Congress (identifier)"}, |
|||
{ 'SUDOC', 269, p.sudocLink, '', '026927608' }, |
|||
{ 'VcBA', 8034, p.vcbaLink, "国立図書館", "494/9793"}, |
|||
{ 'TA98', 1323, p.ta98Link, '', 'A12.3.45.678', link=':en:TA98 (identifier)' }, |
|||
{ ' |
{ 'VIAF', 214, p.viafLink, "全般", "123456789", prefix = "[[VIAF (識別子)|VIAF]]"}, |
||
{ 'WORLDCATID', 7859, nil, "全般", nil, link = "WorldCat Identities (識別子)"}, |
|||
{ 'TePapa', 3544, p.tepapaLink, '', '1' }, |
|||
{ 'TLS', 1362, p.tlsLink, '', 'Abcd', link=':en:TLS (identifier)' }, |
|||
{ 'Trove', 1315, p.troveLink, '', '12345678', link=':en:Trove (identifier)' }, --formerly NLA-person |
|||
{ 'UKPARL', 6213, p.ukparlLink, '', 'AQUupyiR', displayname='英議会' }, |
|||
{ 'ULAN', 245, p.ulanLink, '', '500123456', link=':en:ULAN (identifier)' }, |
|||
{ 'USCG', 3723, p.uscgLink, '', '6-0695', link=':en:USCG (identifier)' }, |
|||
{ 'USCongress', 1157, p.uscongressLink, '', 'A000123', link=':en:US Congress (identifier)', displayname='米議会' }, |
|||
{ 'VcBA', 8034, p.vcbaLink, '', '494/9793' }, |
|||
{ 'VIAF', 214, p.viafLink, '', '123456789' }, |
|||
{ 'WORLDCATID', 7859, p.worldcatidLink, '', 'lccn-n78-95332', link='WorldCat Identities (識別子)', displayname='WorldCat Identities' }, |
|||
{ 'ZBMATH', 1556, p.zbmathLink, '', 'turing.alan-m', link=':en:ZBMATH (identifier)' }, |
|||
} |
} |
||
1,171行目: | 1,084行目: | ||
} |
} |
||
-- Deprecated aliases to p.conf; tracked in [[Category: |
-- 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' } |
-- Format: { 'deprecated parameter name', 'replacement parameter name in p.conf' } |
||
p.deprecated = { |
p.deprecated = { |
||
1,187行目: | 1,100行目: | ||
function p.authorityControl( frame ) |
function p.authorityControl( frame ) |
||
local resolveEntity = require( |
local resolveEntity = require( "Module:ResolveEntityId" ) |
||
local parentArgs = frame:getParent().args --WD IDs added here later |
local parentArgs = frame:getParent().args --WD IDs added here later |
||
local iParentArgs = 0 --count original/manual parent args only later |
local iParentArgs = 0 --count original/manual parent args only later |
||
local elements = {} --create/insert rows later |
|||
local worldcatCat = '' |
local worldcatCat = '' |
||
local elementsCat = '' |
|||
local multipleIdCat = '' |
local multipleIdCat = '' |
||
local suppressedIdCat = '' |
local suppressedIdCat = '' |
||
local suppressedIdCatArts = '' |
|||
local deprecatedIdCat = '' |
local deprecatedIdCat = '' |
||
local differentOnWDCat = '' |
local differentOnWDCat = '' |
||
local sameOnWDCat = '' |
local sameOnWDCat = '' |
||
local stateCat = '' |
|||
-- |
--Redirect aliases to proper parameter names |
||
for _, a in pairs( p.aliases ) do |
for _, a in pairs( p.aliases ) do |
||
local alias, param = a[1], a[2] |
local alias, param = a[1], a[2] |
||
1,209行目: | 1,118行目: | ||
end |
end |
||
-- |
--Redirect deprecated parameters to proper parameter names, and assign tracking cat |
||
for _, d in pairs( p.deprecated ) do |
for _, d in pairs( p.deprecated ) do |
||
local dep, param = d[1], d[2] |
local dep, param = d[1], d[2] |
||
1,220行目: | 1,129行目: | ||
end |
end |
||
-- |
--Use QID= parameter for testing/example purposes only |
||
local itemId = nil |
local itemId = nil |
||
if namespace ~= 0 then |
if namespace ~= 0 then |
||
1,234行目: | 1,143行目: | ||
--Wikidata fallback if available |
--Wikidata fallback if available |
||
if itemId then |
if itemId then |
||
local suppressedIdCount = 0 |
|||
local iMatches = 0 |
local iMatches = 0 |
||
for _, params in ipairs( p.conf ) do |
for _, params in ipairs( p.conf ) do |
||
1,243行目: | 1,151行目: | ||
if wikidataIds[1] then |
if wikidataIds[1] then |
||
if val == '' and (namespace == 0 or testcases) then |
if val == '' and (namespace == 0 or testcases) then |
||
suppressedIdCount = suppressedIdCount + 1 |
|||
suppressedIdCat = '[[Category:抑制された典拠管理識別子がある記事|'..params[1]..']]' |
suppressedIdCat = '[[Category:抑制された典拠管理識別子がある記事|'..params[1]..']]' |
||
else |
else |
||
1,265行目: | 1,172行目: | ||
if iMatches > 0 and iMatches == iParentArgs then |
if iMatches > 0 and iMatches == iParentArgs then |
||
sameOnWDCat = '[[Category:ウィキデータと同じ典拠管理識別子をパラメータで指定しているページ]]' |
sameOnWDCat = '[[Category:ウィキデータと同じ典拠管理識別子をパラメータで指定しているページ]]' |
||
end |
|||
if parentArgs['arts'] == 'arts' and suppressedIdCount > 0 then |
|||
if namespace == 0 or testcases then |
|||
local s = 's' |
|||
if suppressedIdCount == 1 then s = '' end |
|||
--local sCat = 'ACArt with '..suppressedIdCount..' suppressed element'..s |
|||
--suppressedIdCatArts = addCat(sCat) |
|||
end |
|||
end |
end |
||
end |
end |
||
--Configured rows |
|||
--configure rows |
|||
local rct = 0 |
local rct = 0 |
||
local sectionOrder = {"全般","国立図書館","美術館と博物館", |
|||
--don't show NLI if J9U is present, since they both go to the National Library of Israel |
|||
"美術研究組織","人名辞典","科学データベース", |
|||
--and the library has deprecated NLI IDs in favor of J9U IDs |
|||
"その他"} |
|||
if parentArgs.J9U or parentArgs.j9u then |
|||
local sections = { |
|||
parentArgs.NLI = '' |
|||
["全般"] = {}, |
|||
["国立図書館"] = {}, |
|||
end |
|||
["美術館と博物館"] = {}, |
|||
--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 |
|||
["人名辞典"] = {}, |
|||
["科学データベース"] = {}, |
|||
["その他"] = {} |
|||
} |
|||
-- 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 |
if parentArgs.PLWABN or parentArgs.plwabn then |
||
parentArgs.NLP = '' |
parentArgs.NLP = '' |
||
1,295行目: | 1,199行目: | ||
if val and val ~= '' and type(params[3]) == 'function' then |
if val and val ~= '' and type(params[3]) == 'function' then |
||
table.insert( tval, val ) |
table.insert( tval, val ) |
||
if params.prefix then |
if params.prefix then |
||
table.insert( tlinks, params[3]( val, |
table.insert( tlinks, params[3]( val, "1" ) ) |
||
else |
else |
||
table.insert( tlinks, params[3]( val ) ) |
table.insert( tlinks, params[3]( val ) ) |
||
1,319行目: | 1,223行目: | ||
--assemble |
--assemble |
||
if tval[1] then |
if tval[1] then |
||
table.insert( sections[params[4]], p.createRow( params[1], tval, nil, tlinks, true, params.category, params.prefix) ) |
|||
table.insert( elements, p.createRow( params[1], elementLink, tval, nil, tlinks, true, params.category, params.prefix ) ) |
|||
rct = rct + 1 |
rct = rct + 1 |
||
if tval[2] then |
if tval[2] then |
||
1,328行目: | 1,231行目: | ||
end |
end |
||
--WorldCat |
--WorldCat |
||
local worldcatId = parentArgs['worldcatid'] or parentArgs['WORLDCATID'] |
local worldcatId = parentArgs['worldcatid'] or parentArgs['WORLDCATID'] |
||
if worldcatId |
if worldcatId and worldcatId ~= '' then --if WORLDCATID present & unsuppressed |
||
table.insert( sections["全般"], p.createRow( 'WORLDCATID', worldcatId, '[https://www.worldcat.org/identities/'..mw.uri.encode(worldcatId, 'PATH')..' WorldCat]', nil, false ) ) --Validation? |
|||
worldcatCat = p.getCatForId( 'WORLDCATID' ) |
|||
rct = rct + 1 |
|||
elseif worldcatId == nil then --if WORLDCATID absent but unsuppressed |
|||
local viafId = parentArgs['viaf'] or parentArgs['VIAF'] |
local viafId = parentArgs['viaf'] or parentArgs['VIAF'] |
||
local lccnId = parentArgs['lccn'] or parentArgs['LCCN'] |
local lccnId = parentArgs['lccn'] or parentArgs['LCCN'] |
||
if viafId and viafId ~= '' and p.viafLink( viafId ) then --VIAF must be present, unsuppressed, & validated |
if viafId and viafId ~= '' and p.viafLink( viafId ) then --VIAF must be present, unsuppressed, & validated |
||
table.insert( |
table.insert( sections["全般"], p.createRow( 'VIAF', viafId, '[https://www.worldcat.org/identities/containsVIAFID/'..viafId..' WorldCat(VIAF経由)]', nil, false ) ) |
||
if namespace == 0 then |
if namespace == 0 then |
||
worldcatCat = '[[Category:WorldCat-VIAF識別子が指定されている記事]]' |
worldcatCat = '[[Category:WorldCat-VIAF識別子が指定されている記事]]' |
||
end |
end |
||
rct = rct + 1 |
|||
elseif lccnId and lccnId ~= '' and p.lccnLink( lccnId ) then --LCCN must be present, unsuppressed, & validated |
elseif lccnId and lccnId ~= '' and p.lccnLink( lccnId ) then --LCCN must be present, unsuppressed, & validated |
||
local lccnParts = p.splitLccn( lccnId ) |
local lccnParts = p.splitLccn( lccnId ) |
||
if lccnParts and lccnParts[1] ~= 'sh' then |
if lccnParts and lccnParts[1] ~= 'sh' then |
||
local lccnIdFmtd = lccnParts[1]..lccnParts[2]..'-'..lccnParts[3] |
local lccnIdFmtd = lccnParts[1]..lccnParts[2]..'-'..lccnParts[3] |
||
table.insert( |
table.insert( sections["全般"], p.createRow( 'LCCN', lccnId, '[https://www.worldcat.org/identities/lccn-'..lccnIdFmtd..' WorldCat(アメリカ国会図書館経由)]', nil, false ) ) |
||
if namespace == 0 then |
if namespace == 0 then |
||
worldcatCat = '[[Category:WorldCat-LCCN識別子が指定されている記事]]' |
worldcatCat = '[[Category:WorldCat-LCCN識別子が指定されている記事]]' |
||
end |
end |
||
end |
end |
||
rct = rct + 1 |
|||
end |
end |
||
elseif worldcatId == '' then --if WORLDCATID suppressed |
|||
suppressedIdCat = '[[Category:抑制された典拠管理識別子がある記事|WORLDCATID]]' |
|||
end |
end |
||
local Navbox = require('Module:Navbox') |
|||
--configure Navbox |
|||
local |
local elementsCat = '' |
||
if rct == 0 or rct >= 25 then |
|||
local extrap = true |
|||
local eCat = rct..'種類以上の識別子があるページ' |
|||
local extra = parentArgs.extralist |
|||
--elementsCat = '[[Category:'..eCat..']]'..p.redCatLink(eCat) |
|||
if extra == nil or extra == '' then |
|||
elementsCat = '' --25種類以上の識別子が指定された場合、追跡カテゴリをつけるという機能は日本語版では導入されていない |
|||
extrap = false |
|||
end |
end |
||
if rct > 0 or extrap then |
|||
local outString = '' |
|||
if rct > 0 then |
|||
local sectionID = 1 |
|||
local args = { pid = 'identifiers' } -- #target the list of identifiers |
local args = { pid = 'identifiers' } -- #target the list of identifiers |
||
if testcases and itemId then args = { pid = 'identifiers', qid = itemId } end --expensive |
if testcases and itemId then args = { pid = 'identifiers', qid = itemId } end --expensive |
||
local pencil = frame:expandTemplate{ title = 'EditAtWikidata', args = args} |
local pencil = frame:expandTemplate{ title = 'EditAtWikidata', args = args} |
||
local navboxArgs = { |
|||
outString = Navbox._navbox( { |
|||
name = 'Normdaten', |
name = 'Normdaten', |
||
navboxclass = 'authority-control', |
navboxclass = 'authority-control', |
||
bodyclass = 'hlist', |
bodyclass = 'hlist', |
||
state = parentArgs.state, |
state = parentArgs.state or 'autocollapse', |
||
group1 = '[[Help:典拠管理|典拠管理]]'..pencil, |
|||
list1 = table.concat( elements ), |
|||
navbar = 'off' |
navbar = 'off' |
||
} |
|||
for _, sectName in ipairs(sectionOrder) do |
|||
end |
|||
if #sections[sectName] ~= 0 then |
|||
navboxArgs["group" .. sectionID] = sectName |
|||
--auxCats |
|||
navboxArgs["list" .. sectionID] = table.concat(sections[sectName]) |
|||
if rct == 0 or rct >= 25 then |
|||
sectionID = sectionID + 1 |
|||
local eCat = rct..'種類以上の識別子があるページ' |
|||
end |
|||
--elementsCat = addCat(eCat) |
|||
elementsCat = '' --25種類以上の識別子が指定された場合、追跡カテゴリをつけるという機能は日本語版では導入されていない |
|||
end |
|||
if parentArgs.state then |
|||
if namespace == 0 or testcases then |
|||
local sCat |
|||
--if parentArgs.state == 'collapsed' then sCat = 'AC using state parameter: collapsed' |
|||
--elseif parentArgs.state == 'expanded' then sCat = 'AC using state parameter: expanded' |
|||
--elseif parentArgs.state == 'autocollapse' then sCat = 'AC using state parameter: autocollapse' |
|||
--else sCat = 'AC using state parameter: other' |
|||
--end |
|||
--stateCat = addCat(sCat) |
|||
end |
end |
||
if navboxArgs.group2 then |
|||
navboxArgs.title = "[[Help:典拠管理|典拠管理]]" .. pencil |
|||
else |
|||
local sect = navboxArgs.group1 |
|||
if sect == "全般" or sect == "その他" then |
|||
-- Just say "Authority control" with no label if only general or only other IDs are present |
|||
-- 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 |
end |
||
local auxCats = worldcatCat..elementsCat..multipleIdCat..suppressedIdCat..suppressedIdCatArts.. |
|||
local auxCats = worldcatCat .. elementsCat .. multipleIdCat .. suppressedIdCat .. |
|||
deprecatedIdCat..differentOnWDCat..sameOnWDCat..stateCat |
|||
deprecatedIdCat .. differentOnWDCat .. sameOnWDCat |
|||
if testcases then |
if testcases then |
||
auxCats = mw.ustring.gsub(auxCats, '(%[%[)(Category)', '%1:%2') --for easier checking |
auxCats = mw.ustring.gsub(auxCats, '(%[%[)(Category)', '%1:%2') --for easier checking |
||
end |
end |
||
outString = outString .. auxCats |
|||
--out |
|||
outString = outString..auxCats |
|||
if namespace ~= 0 then |
if namespace ~= 0 then |
||
outString = mw.ustring.gsub(outString, '(%[%[)(Category:[^%]]*記事)', '%1:%2') --by definition |
outString = mw.ustring.gsub(outString, '(%[%[)(Category:[^%]]*記事)', '%1:%2') --by definition |
2022年10月25日 (火) 13:44時点における版
このLuaモジュールは350,000以上のページで使われています。 余計な混乱やサーバーへの負荷を避けるために、どんな変更でも最初はモジュールのサンドボックス・サブページ、テストケース・サブページで試すべきです。そうすれば、試した変更を1度の編集でこのモジュールに加えることができます。しかし、最初にあなたの提案した変更を、この項目のノートで議論するようにお願いします。 |
このモジュールは保護されています。このモジュールは非常に多くのページで使用されています。荒らしまたは過失によって多くのページが影響を受け、また些細な編集でもサーバーに多大な負荷をかけるため、編集保護されています。 |
Wikipedia:典拠管理 |
---|
テンプレート |
モジュール |
Config |
Auxiliary |
Docモジュール |
カテゴリ |
Luaモジュールを使用しています: |
{{Normdaten}}のコードを生成しているモジュールです。
識別子、ウィキデータプロパティと追跡カテゴリ
Lua エラー モジュール:No_globals 内、1 行目: このモジュールはモジュール‐ノート:No globalsでの議論を経て廃止されました。今後は<code>require('strict')</code>をご利用ください。
require('Module:No globals')
local p = {}
local title = mw.title.getCurrentTitle()
local namespace = title.namespace
local testcases = (string.sub(title.subpageText,1,9) == 'testcases')
--[[==========================================================================]]
--[[ 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
function p.redCatLink( catName ) --catName == 'Blah' (not 'Category:Blah', not '[[Category:Blah]]')
if catName and catName ~= '' and
testcases == false and
mw.title.new(catName, 14).exists == false
then
return '[[Category:赤リンクの典拠情報カテゴリがあるページ]]'
end
return ''
end
function p.createRow( id, rawValues, link, links, withUid, specialCat, prefix )
local catName = '誤った'..(specialCat or id)..'識別子が指定されている記事'
if links then -- all links[] use withUid = false; no check needed
local row = ''
if prefix then
row = row .. '*' .. prefix
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
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
return '[[MBA (識別子)|MusicBrainz]] [' .. url .. ' アーティスト]' .. cat
end
end
function p.mbareaLink( id, label )
--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)
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/area/'..id
local cat = p.getCatForId( 'MusicBrainz地域' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[[MBAREA (識別子)|MusicBrainz]] [' .. url .. ' 地域]' .. cat
end
end
function p.mbiLink( id, label )
--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 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/instrument/'..id
local cat = p.getCatForId( 'MusicBrainz楽器' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[[MBI (識別子)|MusicBrainz]] [' .. url .. ' 楽器]' .. cat
end
end
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
return '[[MBL (識別子)|MusicBrainz]] [' .. url .. ' レーベル]' .. cat
end
end
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)
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/place/'..id
local cat = p.getCatForId( 'MusicBrainz場所' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[[MBP (識別子)|MusicBrainz]] [' .. url .. ' 場所]' .. cat
end
end
function p.mbrgLink( id, label )
--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 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/release-group/'..id
local cat = p.getCatForId( 'MusicBrainzリリース・グループ' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[[MBRG (識別子)|MusicBrainz]] [' .. url .. ' リリース・グループ]' .. cat
end
end
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
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)
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/work/'..id
local cat = p.getCatForId( 'MusicBrainz作品' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[[MBW (識別子)|MusicBrainz]] [' .. url .. ' 作品]' .. cat
end
end
function p.mgpLink( id, label )
--P549's format regex: \d{1,6} (e.g. 123456)
if not id:match( '^%d%d?%d?%d?%d?%d?$' ) then
return false
end
return '[https://genealogy.math.ndsu.nodak.edu/id.php?id='..id..' '..(label or 'Mathematics Genealogy Project')..']'..p.getCatForId( 'MGP' )
end
function p.naraLink( id, label )
--P1225's format regex: ^([1-9]\d{0,8})$ (e.g. 123456789)
if not id:match( '^[1-9]%d?%d?%d?%d?%d?%d?%d?%d?$' ) then
return false
end
return '[https://catalog.archives.gov/id/'..id..' '..(label or '公文書館(アメリカ)')..']'..p.getCatForId( 'NARA' )
end
function p.nclLink( id, label )
--P1048's format regex: \d+ (e.g. 1081436)
if not id:match( '^%d+$' ) then
return false
end
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
end
function p.ndlLink( id, label )
--P349's format regex: 0?\d{8} (e.g. 012345678)
if not id:match( '^0?%d%d%d%d%d%d%d%d$' ) then
return false
end
return '[https://id.ndl.go.jp/auth/ndlna/'..id..' '..(label or '日本')..']'..p.getCatForId( 'NDL' )
end
function p.ngvLink( id, label )
--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
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
function p.nlaLink( id, label )
--P409's format regex: [1-9][0-9]{0,11} (e.g. 123456789012)
if not id:match( '^[1-9]%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?$' ) then
return false
end
return '[https://nla.gov.au/anbd.aut-an'..id..' '..(label or 'オーストラリア')..']'..p.getCatForId( 'NLA' )
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
return '[https://data.nlg.gr/resource/authority/record'..id..' '..(label or 'ギリシャ')..']'..p.getCatForId( 'NLG' )
end
function p.nliLink( id, label )
--P949'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://uli.nli.org.il/F/?func=direct&doc_number='..id..'&local_base=nlx10'..' '..(label or 'イスラエル')..']'..p.getCatForId( 'NLI' )
end
function p.nlkLink( id, label )
--P5034's format regex: (KAB|KAC|KSH)([0-9]{4}|[0-9]{4}[a-zA-Z])[0-9]{4,6} (e.g. KAC201501465)
if not id:match( '^KAB%d%d%d%d%a?%d%d%d%d%d?%d?$' ) and
not id:match( '^KAC%d%d%d%d%a?%d%d%d%d%d?%d?$' ) and
not id:match( '^KSH%d%d%d%d%a?%d%d%d%d%d?%d?$' ) then
return false
end
return '[https://lod.nl.go.kr/resource/'..id..' '..(label or '韓国')..']'..p.getCatForId( 'NLK' )
end
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,89} (e.g. Abcd)
--Mediawiki page title partial URL so consider validation with mw.title or "[^#<>%[%] {|}]"
local class = "[%w_',%.%-%(%)%*%/–&]"
local idlen = mw.ustring.len (id)
if idlen < 4 or idlen > 90 then
return false
end
local regex = '^%u'..string.rep(class, idlen - 1)..'$'
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
return ids
end
-- Creates a human-readable standalone wikitable version of p.conf, and tracking categories with page counts, for use in the documentation
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
--[[==========================================================================]]
--[[ Configuration ]]
--[[==========================================================================]]
-- 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.
-- Parameter format: { 'parameter name', propertyId # in Wikidata, formatting/validation function, section, example ID for documentation }
-- Optional named parameters: `link` to override the link in the documentation (defaults to parameter + (identifer)),
-- category to override the ID in category names (defaults to parameter),
-- prefix to include a prefix (usually a wikilink explaining what the identifier is) before the external link itself
p.conf = {
{ 'AAG', 3372, p.aagLink, "美術館と博物館", "1", link = ":en:AAG (identifier)"},
{ 'ACM-DL', 864, p.acmLink, "科学データベース", "12345678901", link="ACM DL (識別子)"},
{ 'ADB', 1907, p.adbLink, "人名辞典", "barton-sir-edmund-toby-71", link = ":en:ADB (identifier)"},
{ 'AGSA', 6804, p.agsaLink, "美術館と博物館", "3625"},
{ 'autores.uy', 2558, p.autoresuyLink, "人名辞典", "12345"},
{ 'AWR', 4186, p.awrLink, "人名辞典", "PR00768b", link = ":en:AWR (identifier)"},
{ 'BIBSYS', 1015, p.bibsysLink, "国立図書館", "1234567890123", link = ":en:BIBSYS (identifier)"},
{ 'Bildindex', 2092, p.bildLink, "美術研究組織", "1", link = ":en:Bildindex (identifier)"},
{ 'BNC', 1890, p.bncLink, "国立図書館", "123456789", link = ":en:BNC (identifier)"},
{ 'BNE', 950, p.bneLink, "国立図書館", "XX1234567"},
{ 'BNF', 268, p.bnfLink, "国立図書館", "123456789"},
{ 'Botanist', 428, p.botanistLink , "科学データベース", "L."},
{ 'BPN', 651, p.bpnLink , "人名辞典", "12345678", link = ":en:BPN (identifier)"},
{ 'CANTIC', 1273, p.canticLink, "国立図書館", "a12345678", link = ":en:CANTIC (identifier)"},
{ 'CINII', 271, p.ciniiLink, "科学データベース", "DA12345678", link = "CiNii (識別子)"},
{ 'CWGC', 1908, p.cwgcLink, "その他", "1234567"},
{ '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
iParentArgs = iParentArgs + 1
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
end
--assemble
if tval[1] then
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
end
--WorldCat
local worldcatId = parentArgs['worldcatid'] or parentArgs['WORLDCATID']
if worldcatId and worldcatId ~= '' then --if WORLDCATID present & unsuppressed
table.insert( sections["全般"], p.createRow( 'WORLDCATID', worldcatId, '[https://www.worldcat.org/identities/'..mw.uri.encode(worldcatId, 'PATH')..' WorldCat]', nil, false ) ) --Validation?
worldcatCat = p.getCatForId( 'WORLDCATID' )
rct = rct + 1
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
rct = rct + 1
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
elseif worldcatId == '' then --if WORLDCATID suppressed
suppressedIdCat = '[[Category:抑制された典拠管理識別子がある記事|WORLDCATID]]'
end
local Navbox = require('Module:Navbox')
local elementsCat = ''
if rct == 0 or rct >= 25 then
local eCat = rct..'種類以上の識別子があるページ'
--elementsCat = '[[Category:'..eCat..']]'..p.redCatLink(eCat)
elementsCat = '' --25種類以上の識別子が指定された場合、追跡カテゴリをつけるという機能は日本語版では導入されていない
end
local outString = ''
if rct > 0 then
local sectionID = 1
local args = { pid = 'identifiers' } -- #target the list of identifiers
if testcases and itemId then args = { pid = 'identifiers', qid = itemId } end --expensive
local pencil = frame:expandTemplate{ title = 'EditAtWikidata', args = args}
local navboxArgs = {
name = 'Normdaten',
navboxclass = 'authority-control',
bodyclass = 'hlist',
state = parentArgs.state or 'autocollapse',
navbar = 'off'
}
for _, sectName in ipairs(sectionOrder) do
if #sections[sectName] ~= 0 then
navboxArgs["group" .. sectionID] = sectName
navboxArgs["list" .. sectionID] = table.concat(sections[sectName])
sectionID = sectionID + 1
end
end
if navboxArgs.group2 then
navboxArgs.title = "[[Help:典拠管理|典拠管理]]" .. pencil
else
local sect = navboxArgs.group1
if sect == "全般" or sect == "その他" then
-- Just say "Authority control" with no label if only general or only other IDs are present
-- 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
return p