Modul:Authority control
Penampilan
![]() | Halaman ini punya modul Lua digunakan pada anggaran 9,700 laman dan perubahan besar-besaran mungkin akan ternampak. Sila uji perubahan di modul punya subhalaman kotak pasir atau laman uji kaji, atau pada module sandbox anda. Pertimbang untuk membincang perubahan pada laman perbincangan sebelum melaksanakannya. |
![]() | Modul ini tertakluk kepada perlindungan laman. Ia merupakan sebuah modul yang sangat terlihat dengan penggunaan pada bilangan laman yang sangat tinggi, atau kerap ditukar ganti. Disebabkan sebarang laku musnah atau kesilapan pada laman ini akan memberi kesan besar pada banyak laman, serta suntingan yang sedikit pun boleh menyebabkan bebanan besar pada pelayan, ia telah dilindungi daripada sebarang suntingan. |
Halaman yang berkaitan |
---|
![]() |
Modul ini menggunakan satu atau lebih banyak ciri Wikidata; lihat § Parameter untuk butirannya.: |
![]() | Modul ini bergantung pada modul-modul lain: |
Modul ini mengandungi kod templat {{Kawalan kewibawaan}}}. Lihat pendokumenannya.
Parameter, sifat-sifat Wikidata, dan kategori penjejakan
Kategori penjejak tambahan
Modul ini juga melaksanakan kategori penjejakan tersembunyi yang berikut:
- Kategori:Halaman dengan kategori kawalan kewibawaan berpautan merah (0) – kategori ralat untuk mengenal pasti kategori yang hilang
- Kategori:Rencana dengan pengenalan kawalan kewibawaan yang usang (10) – membetulkan/menghijrahkan/mengalih keluar ID yang tidak digunakan
- Kategori:Rencana dengan pengenalan kawalan kewibawaan yang ditindas (0) – Penjejakan sahaja (tiada ralat)
- Kategori:Halaman menggunakan kawalan kewibawaan dengan parameter (151) – menghijrahkan ID ke Wikidata jika boleh (tiada ralat)
- Kategori:VIAF tiada di Wikidata (0)
- Kategori:VIAF berbeza di Wikidata (0)
- Kategori:Rencana dengan pengenalan WorldCat (0)
- Kategori:Rencana dengan pengenalan WorldCat-LCCN (0)
- Kategori:Rencana dengan pengenalan WorldCat-VIAF (0)
Bilangan pengenalan
- Kategori:KK dengan 25 elemen (0)
- Kategori:KK dengan 26 elemen (0)
- Kategori:KK dengan 27 elemen (0)
- Kategori:KK dengan 28 elemen (0)
- Kategori:KK dengan 29 elemen (0)
- Kategori:KK dengan 30 elemen (0)
- Kategori:KK dengan 31 elemen (0)
- Kategori:KK dengan 32 elemen (0)
- Kategori:KK dengan 33 elemen (0)
- Kategori:KK dengan 34 elemen (0)
- Kategori:KK dengan 35 elemen (0)
- Kategori:KK dengan 36 elemen (0)
- Kategori:KK dengan 37 elemen (0)
- Kategori:KK dengan 38 elemen (0)
- Kategori:KK dengan 39 elemen (0)
- Kategori:KK dengan 40 elemen (0)
- Kategori:KK dengan 41 elemen (0)
require('Module:No globals')
local p = {}
local title = mw.title.getCurrentTitle()
local namespace = title.namespace
local testcases = (string.sub(title.subpageText,1,9) == 'kes ujian')
--[[==========================================================================]]
--[[ Category functions ]]
--[[==========================================================================]]
local function addCat( cat )
if cat and cat ~= '' then return '[[Kategori:'..cat..']]'..p.redCatLink(cat) end
return ''
end
function p.getCatForId( id )
local cat = ''
if namespace == 0 then
cat = 'Rencana dengan pengenalan '..id
end
return addCat(cat)
end
function p.redCatLink( cat ) --cat == 'Blah' (not 'Kategori:Blah', not '[[Kategori:Blah]]')
if cat and cat ~= '' and testcases == false and mw.title.new(cat, 14).exists == false then
return '[[Kategori:Halaman dengan kategori kawalan kewibawaan berpaut merah]]'
end
return ''
end
function p.createRow( id, rawValues, link, links, withUid, specialCat, prefix)
local faultyCat = 'Rencana dengan pengenalan '..(specialCat or id)..' yang rosak'
if links then -- all links[] use withUid = false; no check needed
local row = ''
if prefix then
row = row..'*'..prefix
end
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">The '..id..' id '..rawValues[i]..' is not valid.</span>'..addCat(faultyCat)
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">The '..id..' id '..rawValues..' is not valid.</span>'..addCat(faultyCat)..'\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 'Auckland')..']'..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 'Persatuan Profesional Komputer')..']'..p.getCatForId( 'ACM-DL' )
end
function p.adbLink( id, label )
--P1907's format regex: [a-z][-a-z]+-([1-3]\d|[1-9])\d{0,3} (e.g. barton-sir-edmund-toby-71)
if not id:match( '^[a-z][-a-z]+-[1-3]%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 'Australia')..']'..p.getCatForId( 'ADB' )
end
function p.admiraltyLink(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, 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 'Australia Selatan')..']'..p.getCatForId( 'AGSA' )
end
function p.ARLHSLink(id,label)
--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 '..(label or 'ARLHS')..']'..p.getCatForId( 'ARLHS' )
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 'Uruguay')..']'..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 'Norway')..']'..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 (Jerman)')..']'..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 'Chile')..']'..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 'Sepanyol')..']'..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 'Perancis')..'] [https://data.bnf.fr/ark:/12148/'..id..' (data)]'..p.getCatForId( 'BNF' )
end
function p.bnmmLink( id, label )
--P3788's format regex: \d{9} (e.g. 000024044)
if id:match( '^%d%d%d%d%d%d%d%d%d$' ) then
return '[https://catalogo.bn.gov.ar/F/?func=direct&local_base=BNA10&doc_number='..id..' '..(label or 'Argentina')..']'..p.getCatForId( 'BNMM' )
else
return false
end
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 'Indeks Nama Tumbuhan Antarabangsa')..']'..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 'Belanda')..']'..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 'Catalonia')..']'..p.getCatForId( 'CANTIC' ) --no https as of 10/2019
end
function p.canticnLink( id, label )
--P9984's format regex: 981(0|1)\d{9}06706 (e.g. 981058515460906706)
if not id:match( '^981[0-1]%d%d%d%d%d%d%d%d%d06706$' ) then
return false
end
return '[https://cantic.bnc.cat/registre/'..id..' '..(label or 'Catalonia')..']'..p.getCatForId( 'CANTICN' )
end
function p.ccgLink( 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, 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 (Jepun)')..']'..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 'Suruhanjaya Perkuburan Perang Komanwel')..']'..p.getCatForId( 'CWGC' )
end
function p.emuLink( id, label )
--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..' '..(label or 'Ukraine')..']'..p.getCatForId( 'EMU' )
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 'Artis Australia')..']'..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 (sains komputer)')..']'..p.getCatForId( 'DBLP' )
end
function p.dibLink( id, label )
--P6829's format regex: 0[01]\d{4}(\.[A-D])? (e.g. 001953)
if not id:match( '^0[01]%d%d%d%d%.?[A-D]?$' ) then
return false
end
return '[https://dib.cambridge.org/viewReadPage.do?articleId='..id..' '..(label or 'Ireland')..']'..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 'Scientific illustrators')..']'..p.getCatForId( 'DSI' )
end
function p.dtbioLink( 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 '..(label or 'Jerman')..']'..p.getCatForId( 'DTBIO' )
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 'Aplikasi Berfaset Terminologi Subjek')..']'..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 'Artis New Zealand')..']'..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 'Jerman')..']'..p.getCatForId( 'GND' )
end
function p.googleLink( 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..' '..(label or 'Google Scholar')..']'..p.getCatForId( 'Google Scholar' )
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 'Kamus Sejarah Switzerland')..']'..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 'World Athletics')..']'..p.getCatForId( 'IAAF' )
end
function p.iccuLink( id, label )
--P396's format regex: \D{2}[A-Z0-3]V\d{6} (e.g. CFIV000163)
if not id:match( '^%u%u[%u0-3]V%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/nome/'..id..' '..(label or 'Itali')..']'..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 (Israel)')..']'..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 'Ensiklopedia Internet Ukraine')..']'..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.j9uLink( 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..' '..(label or 'Israel')..']'..p.getCatForId( 'J9U' )
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 (Perancis)')..']'..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 (Norway)')..']'..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 'Amerika Syarikat')..']'..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 (Switzerland)')..']'..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 'Latvia')..']'..p.getCatForId( 'LNB' )
end
function p.marinaMilitareLink( id, label )
--P3863's format regex: [1-9]\d* (e.g. 3856)
if id:match( '^[1-9]%d*$' ) then
return '[http://www.marina.difesa.it/cosa-facciamo/per-la-difesa-sicurezza/fari/Pagine/'..id..'.aspx '..(label or 'Itali')..']'..p.getCatForId( 'Marina Militare' )
else
return false
end
end
function p.mathsnLink( id, label )
--P4955's format regex: [1-9]\d{4,6} (e.g. 175270)
if not id:match( '^[1-9]%d%d%d%d%d?%d?$' ) then
return false
end
return '[https://mathscinet.ams.org/mathscinet/MRAuthorID/'..id..' '..(label or 'MathSciNet')..']'..p.getCatForId( 'MATHSN' )
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 '[[MusicBrainz|MusicBrainz]] ['..url..' (artis)]'..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( 'kawasan MusicBrainz' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[[MusicBrainz|MusicBrainz]] ['..url..' (kawasan)]'..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( 'instrumen MusicBrainz' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[[MusicBrainz|MusicBrainz]] ['..url..' (instrumen)]'..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( 'syarikat rakaman MusicBrainz' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[[MusicBrainz|MusicBrainz]] ['..url..' (syarikat rakaman)]'..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( 'tempat MusicBrainz' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[[MusicBrainz|MusicBrainz]] ['..url..' (tempat)]'..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( 'kumpulan pelancaran MusicBrainz' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[[MusicBrainz|MusicBrainz]] ['..url..' (kumpulan pelancaran)]'..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( 'siri MusicBrainz' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[[MusicBrainz|MusicBrainz]] ['..url..' (siri)]'..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( 'karya MusicBrainz' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[[MusicBrainz|MusicBrainz]] ['..url..' (karya)]'..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://www.mathgenealogy.org/id.php?id='..id..' '..(label or 'Projek Genealogi Matematik')..']'..p.getCatForId( 'MGP' )
end
function p.mtLink( id, label )
--P3601's format regex: \d{10} (e.g. 1000004707)
if id:match( '^%d%d%d%d%d%d%d%d%d%d$' ) then
return '[https://www.marinetraffic.com/en/ais/details/lights/'..id..' '..(label or 'MarineTraffic')..']'..p.getCatForId( 'MarineTraffic' )
else
return false
end
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 'Arkib Negara (A.S.)')..']'..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 'Taiwan')..']'..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 'Jepun')..']'..p.getCatForId( 'NDL' )
end
function p.ngaLink(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..' '..(label or 'NGA')..']'..p.getCatForId( 'NGA' )
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 'Victoria')..']'..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 'Republik Czech')..']'..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 'Australia')..']'..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 'Yunani')..']'..p.getCatForId( 'NLG' )
end
function p.nlkLink( id, label )
--P5034's format regex: KA.(19|20).{7} (e.g. KAC201501465)
if not id:match( '^KA.19.......$' ) and
not id:match( '^KA.20.......$' ) then
return false
end
return '[https://librarian.nl.go.kr/LI/contents/L20101000000.do?id='..id..' '..(label or 'Korea')..']'..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 'Poland')..']'..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 'Romania')..']'..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 'Croatia')..']'..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 'Belanda')..']'..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 'Poland')..']'..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 (pengkaji)')..']'..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 (Perancis)')..']'..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 (Switzerland)')..']'..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 'Artis RKD (Belanda)')..']'..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 'ID RKD (Belanda)')..']'..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 'Rusia')..']'..p.getCatForId( 'RSL' ) --no https as of 9/2019
end
function p.scopusLink( 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..' '..(label or 'Pengarang Scopus')..']'..p.getCatForId( 'Scopus' )
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 'Sweden')..']'..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 (Switzerland)')..']'..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 'Rangkaian Sosial dan Konteks Arkib')..']'..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 (Perancis)')..']'..p.getCatForId( 'SUDOC' )
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
local longurl = '[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='
return longurl..id..' '..(label or 'Terminologia Anatomica')..']'..p.getCatForId( 'TA98' )
end
function p.tdviaLink( id, label )
--P7314's format regex: [0-9a-z/-]+] (e.g. barkan-omer-lutfi)
if not id:match( '^[%d%l/-]+$' ) then
return false
end
return '[https://islamansiklopedisi.org.tr/'..id..' '..(label or 'İslâm Ansiklopedisi')..']'..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 (New Zealand)')..']'..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 (Switzerland)')..']'..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 (Australia)')..']'..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 'Parlimen U.K.')..']'..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 'Nama Artis (Getty)')..']'..p.getCatForId( 'ULAN' )
end
function p.uscgLink( id, label )
--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 '[[Pengawal Pantai Amerika Syarikat|USCG]] ([https://www.navcen.uscg.gov/pdf/lightlists/LightList%20V'..mw.ustring.sub(id,1,1)..'.pdf '..id..'])'..p.getCatForId( 'USCG' )
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 'Kongres A.S.')..']'..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 'Vatican')..']'..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),
-- then 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
function p.worldcatidLink( id, label )
--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')..'/ '..(label or 'WorldCat')..']'..p.getCatForId( 'WORLDCATID' )
end
function p.zbmathLink( id, label )
--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..' '..(label or 'zbMATH')..']'..p.getCatForId( 'ZBMATH' )
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 = {}
if not mw.wikibase then
return ids
end
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
function p.checkcat( category,label )
local ret='[[:Kategori:'..category..'|'..label..']]'
if mw.title.new(category, 14).exists == false then
ret = ret..' <span class="plainlinks" style="font-size:85%;">[['..tostring(mw.uri.fullUrl('Kategori:'..category,'action=edit&preload=Template:Authority_control/preload'))..' cipta]]</span>'
end
return ret
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 = '<table class="wikitable sortable">'..
'<tr><th rowspan=2>Parameter</th>'..
'<th rowspan=2>Bahagian</th>'..
'<th rowspan=2>Dipaparkan sebagai</th>'..
'<th rowspan=2 data-sort-type=number>Sifat Wikidata</th>'..
'<th colspan=2>Kategori penjejakan dan kiraan halaman</th></tr>'..
'<tr><th>[[:Kategori:Rencana dengan maklumat kawalan kewibawaan|Rencana]]</th>'..
'<th>[[:Kategori:Rencana dengan maklumat kawalan kewibawaan yang salah|ID yang salah]]</th></tr>'
local lang = mw.getContentLanguage()
local a, f, P = 0, 0, 0 --cumulative sums
for _, conf in pairs( p.conf ) do
local param, pid, section = conf[1], conf[2], conf[4]
local appearsAs
if conf.prefix then
appearsAs = conf.prefix
else
appearsAs = conf[3](conf[5])
end
local link = conf.link or param..' (pengenalan)'
local category = conf.category or param
local args = { id = 'f', pid }
local wpl = frame:expandTemplate{ title = 'Wikidata property link', args = args }
--cats
local articleCat = 'Rencana dengan pengenalan '..category
local faultyCat = 'Rencana dengan pengenalan '..category..' yang rosak'
--counts
local articleCount = lang:formatNum( mw.site.stats.pagesInCategory(articleCat, 'pages') )
local faultyCount = lang:formatNum( mw.site.stats.pagesInCategory(faultyCat, 'pages') )
--calcs
P = P + 1 --property count
a = a + lang:parseFormattedNumber(articleCount)
f = f + lang:parseFormattedNumber(faultyCount)
--concat
wikiTable = wikiTable..'<tr><td>[['..link..'|'..param..']]</td>'..
'<td>'..section..'</td>'..
'<td>'..appearsAs..'</td>'..
'<td data-sort-value='..pid..'>'..wpl..'</td>'..
'<td style="text-align: right;">'..p.checkcat(articleCat,articleCount)..'</td>'..
'<td style="text-align: right;">'..p.checkcat(faultyCat,faultyCount)..'</td></tr>'
end
--append derivative WorldCat cats
local wcd = { 'WorldCat-LCCN', 'WorldCat-VIAF' }
for _, w in pairs(wcd) do
local articleCat = 'Rencana dengan pengenalan '..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 (melalui Perpustakaan Kongres)]'
else
appearsAs = '[https://www.worldcat.org/identities/containsVIAFID/12345789 WorldCat (melalui VIAF)]'
end
a = a + lang:parseFormattedNumber(articleCount)
wikiTable = wikiTable..'<tr><td>-</td>'..
'<td>General</td>'..
'<td>'..appearsAs..'</td>'..
'<td data-sort-value='..w..'>—</td>'..
'<td style="text-align: right;">[[:Kategori:'..articleCat..'|'..articleCount..']]</td>'..
'<td style="text-align: right;">—</td></tr>'
end
--append sums
wikiTable = wikiTable..'<tr><th style="text-align: right;" colspan=3>Totals</th>'..
'<th style="text-align: right;">'..lang:formatNum(P)..'</th>'..
'<th style="text-align: right;">'..lang:formatNum(a)..'</th>'..
'<th style="text-align: right;">'..lang:formatNum(f)..'</th></tr></table>'
return require('Module:Suppress categories').main(wikiTable)
end
--[[==========================================================================]]
--[[ Configuration ]]
--[[==========================================================================]]
-- Please use "<parameter> (pengenalan)" redirects rather than linking directly to the target page.
-- 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 }
-- p.conf table optional named parameters:
-- link: to override the link in the documentation (defaults to "<parameter> (identifer)")
-- Kategori: to override the ID in category names (defaults to "... with <parameter> identifiers")
-- prefix: to include a prefix (usually a wikilink explaining what the identifier is) before the external link itself
p.conf = {
{ 'AAG', 3372, p.aagLink, 'Galeri seni dan muzium', '1' },
{ 'ACM-DL', 864, p.acmLink, 'Pangkalan data saintifik', '12345678901', prefix = '[[Persatuan Profesional Komputer|ACM DL]]' },
{ 'ADB', 1907, p.adbLink,'Kamus biografi', 'barton-sir-edmund-toby-71' },
{ 'admiralty', 3562, p.admiraltyLink, 'Pengenalan Lighthouse', 'D1204.1', prefix='[[Pejabat Hidrografi United Kingdom|Admiralty]]'},
{ 'AGSA', 6804, p.agsaLink, 'Galeri seni dan muzium', '3625' },
{ 'ARLHS', 2980, p.ARLHSLink, 'Pengenalan Lighthouse', 'LAT023'},
{ 'autores.uy', 2558, p.autoresuyLink, 'Kamus biografi', '12345' },
{ 'AWR', 4186, p.awrLink, 'Kamus biografi', 'PR00768b' },
{ 'BIBSYS', 1015, p.bibsysLink, 'Perpustakaan negara', '1234567890123' },
{ 'Bildindex', 2092, p.bildLink, 'Institut penyelidikan seni', '1' },
{ 'BNC', 1890, p.bncLink, 'Perpustakaan negara', '123456789' },
{ 'BNE', 950, p.bneLink, 'Perpustakaan negara', 'XX1234567' },
{ 'BNF', 268, p.bnfLink, 'Perpustakaan negara', '123456789' },
{ 'BNMM', 3788, p.bnmmLink, 'Perpustakaan negara', '000024044' },
{ 'Botanist', 428, p.botanistLink , 'Pangkalan data saintifik', 'L.' },
{ 'BPN', 651, p.bpnLink , 'Kamus biografi', '12345678' },
{ 'CANTIC', 1273, p.canticLink, 'Perpustakaan negara', 'a12345678' },
{ 'CANTICN', 9984, p.canticnLink, 'Perpustakaan negara', '981058515460906706' },
{ 'CCG', 3920, p.ccgLink, 'Pengenalan Lighthouse', 'A1761', prefix='[[Pengawal Pantai Kanada|CCG]]' },
{ 'CINII', 271, p.ciniiLink, 'Pangkalan data saintifik', 'DA12345678', link = 'CiNii' },
{ 'CWGC', 1908, p.cwgcLink, 'Lain-lain', '1234567' },
{ 'DAAO', 1707, p.daaoLink, 'Institut penyelidikan seni', 'rolf-harris' },
{ 'DBLP', 2456, p.dblpLink, 'Pangkalan data saintifik', '123/123' },
{ 'DIB', 6829, p.dibLink, 'Kamus biografi', '001953' },
{ 'DSI', 2349, p.dsiLink, 'Institut penyelidikan seni', '1538' },
{ 'DTBIO', 7902, p.dtbioLink, 'Kamus biografi', '118554700' },
{ 'EMU', 4613, p.emuLink, 'Perpustakaan negara', '15409' },
{ 'FAST', 2163, p.fastLink, 'Lain-lain', '1' },
{ 'FNZA', 6792, p.fnzaLink, 'Institut penyelidikan seni', '12' },
{ 'GND', 227, p.gndLink, 'Perpustakaan negara', '4079154-3' },
{ 'Google Scholar', 1960, p.googleLink, 'Pangkalan data saintifik', 'QPdLuj8AAAAJ' },
{ 'HDS', 902, p.hdsLink, 'Lain-lain', '050123' },
{ 'IAAF', 1146, p.iaafLink, 'Lain-lain', '123' },
{ 'ICCU', 396, p.iccuLink, 'Perpustakaan negara', 'CFIV000163' }, --formerly SBN
{ 'ICIA', 1736, p.iciaLink, 'Institut penyelidikan seni', '1' },
{ 'IEU', 9070, p.ieuLink, 'Lain-lain', 'N\\A\\NationalAcademyofArtandArchitecture' },
{ 'ISNI', 213, p.isniLink, 'Umum', '0000-0000-6653-4145', prefix = '[[Pengecam Nama Piawaian Antarabangsa|ISNI]]' },
{ 'J9U', 8189, p.j9uLink, 'Perpustakaan negara', '987007305652505171' },
{ 'Joconde', 347, p.jocondeLink, 'Institut penyelidikan seni', '12345678901' },
{ 'KULTURNAV', 1248, p.kulturnavLink, 'Institut penyelidikan seni', '12345678-1234-1234-1234-1234567890AB', link = 'KulturNav' },
{ 'LCCN', 244, p.lccnLink, 'Perpustakaan negara', 'n78039510' },
{ 'LIR', 886, p.lirLink, 'Lain-lain', '1' },
{ 'LNB', 1368, p.lnbLink, 'Perpustakaan negara', '123456789' },
{ 'Marina Militare', 3863, p.marinaMilitareLink, 'Pengenalan Lighthouse', '3856' },
{ 'MarineTraffic', 3601, p.mtLink, 'Pengenalan Lighthouse', '1000004707' },
{ 'MATHSN', 4955, p.mathsnLink, 'Pangkalan data saintifik', '175270' },
{ 'MBA', 434, p.mbaLink, 'Lain-lain', '12345678-1234-1234-1234-1234567890AB', category = 'MusicBrainz' }, --special cat name
{ 'MBAREA', 982, p.mbareaLink, 'Lain-lain', '12345678-1234-1234-1234-1234567890AB', category = 'kawasan MusicBrainz' }, --special cat name
{ 'MBI', 1330, p.mbiLink, 'Lain-lain', '12345678-1234-1234-1234-1234567890AB', category = 'instrumen MusicBrainz' }, --special cat name
{ 'MBL', 966, p.mblLink, 'Lain-lain', '12345678-1234-1234-1234-1234567890AB', category = 'syarikat rakaman MusicBrainz' }, --special cat name
{ 'MBP', 1004, p.mbpLink, 'Lain-lain', '12345678-1234-1234-1234-1234567890AB', category = 'tempat MusicBrainz' }, --special cat name
{ 'MBRG', 436, p.mbrgLink, 'Lain-lain', '12345678-1234-1234-1234-1234567890AB', category = 'kumpulan pelancaran MusicBrainz' }, --special cat name
{ 'MBS', 1407, p.mbsLink, 'Lain-lain', '12345678-1234-1234-1234-1234567890AB', category = 'siri MusicBrainz' }, --special cat name
{ 'MBW', 435, p.mbwLink, 'Lain-lain', '12345678-1234-1234-1234-1234567890AB', category = 'karya MusicBrainz' }, --special cat name
{ 'MGP', 549, p.mgpLink, 'Pangkalan data saintifik', '123456' },
{ 'NARA', 1225, p.naraLink, 'Lain-lain', '12345678' },
{ 'NCL', 1048, p.nclLink, 'Perpustakaan negara', '1081436' },
{ 'NDL', 349, p.ndlLink, 'Perpustakaan negara', '012345678' },
{ 'NGA', 3563, p.ngaLink, 'Pengenalan Lighthouse', '114-5592'},
{ 'NGV', 2041, p.ngvLink, 'Galeri seni dan muzium', '12354' },
{ 'NKC', 691, p.nkcLink, 'Perpustakaan negara', 'abcd12345678901234' },
{ 'NLA', 409, p.nlaLink, 'Perpustakaan negara', '123456789012' },
{ 'NLG', 3348, p.nlgLink, 'Perpustakaan negara', '12345678' },
{ 'NLK', 5034, p.nlkLink, 'Perpustakaan negara', 'KAB197000000' },
{ 'NLP', 1695, p.nlpLink, 'Perpustakaan negara', '9810123456789012345' },
{ 'NLR', 1003, p.nlrLink, 'Perpustakaan negara', '123456789' },
{ 'NSK', 1375, p.nskLink, 'Perpustakaan negara', '123456789' },
{ 'NTA', 1006, p.ntaLink, 'Perpustakaan negara', '12345678X' },
{ 'ORCID', 496, p.orcidLink, 'Umum', '0000-0002-7398-5483', prefix = '[[ORCID|ORCID]]' },
{ 'PIC', 2750, p.picLink, 'Institut penyelidikan seni', '1' },
{ 'PLWABN', 7293, p.plwabnLink, 'Perpustakaan negara', '9812345678905606' },
{ 'Publons', 3829, p.publonsLink, 'Pangkalan data saintifik', '2776255' },
{ 'RID', 1053, p.ridLink, 'Pangkalan data saintifik', 'A-1234-1934' },
{ 'RISM', 5504, p.rismLink, 'Lain-lain', 'pe1', prefix = '[[RISM|RISM (Perancis)]]' },
{ 'RERO', 3065, p.reroLink, 'Lain-lain', '02-A012345678', prefix = '[[Rangkaian Perpustakaan Switzerland Barat|RERO (Switzerland)]]' },
{ 'RKDartists', 650, p.rkdartistsLink, 'Institut penyelidikan seni', '123456' },
{ 'RKDID', 350, p.rkdidLink, 'Institut penyelidikan seni', '123456' },
{ 'RSL', 947, p.rslLink, 'Perpustakaan negara', '123456789' },
{ 'Scopus', 1153, p.scopusLink, 'Pangkalan data saintifik', '7005487412' },
{ 'SELIBR', 906, p.selibrLink, 'Perpustakaan negara', '123456' },
{ 'SIKART', 781, p.sikartLink, 'Institut penyelidikan seni', '123456789' },
{ 'SNAC-ID', 3430, p.snacLink, 'Lain-lain', 'A' },
{ 'SUDOC', 269, p.sudocLink, 'Lain-lain', '026927608', prefix = '[[Sistem Pendokumenan Universiti|SUDOC (Perancis)]]' },
{ 'TA98', 1323, p.ta98Link, 'Pangkalan data saintifik', 'A12.3.45.678' },
{ 'TDVİA', 7314, p.tdviaLink, 'Lain-lain', 'asim-b-behdele' },
{ 'TePapa', 3544, p.tepapaLink, 'Galeri seni dan muzium', '1' },
{ 'TLS', 1362, p.tlsLink, 'Lain-lain', 'Abcd' },
{ 'Trove', 1315, p.troveLink, 'Lain-lain', '12345678', prefix = '[[Trove|Trove (Australia)]]' }, --formerly NLA-person
{ 'UKPARL', 6213, p.ukparlLink, 'Lain-lain', 'AQUupyiR' },
{ 'ULAN', 245, p.ulanLink, 'Institut penyelidikan seni', '500123456' },
{ 'USCG', 3723, p.uscgLink, 'Pengenalan Lighthouse', '6-0695'},
{ 'USCongress', 1157, p.uscongressLink, 'Lain-lain', 'A000123', prefix = '[[Direktori Biografi Kongres Amerika Syarikat|Kongres A.S.]]' },
{ 'VcBA', 8034, p.vcbaLink, 'Perpustakaan negara', '494/9793' },
{ 'VIAF', 214, p.viafLink, 'Umum', '123456789', prefix = '[[Fail Kewibawaan Antarabangsa Maya|VIAF]]' },
{ 'WORLDCATID', 7859, p.worldcatidLink, 'Umum', 'lccn-n78-95332', prefix = '[[WorldCat|WorldCat Identities]]' },
{ 'ZBMATH', 1556, p.zbmathLink, 'Pangkalan data saintifik', 'turing.alan-m' },
}
-- Legitimate aliases to p.conf, for convenience
-- Format: { 'alias', 'parameter name in p.conf' }
p.aliases = {
{ 'DNB', 'GND' }, --Deutsche Nationalbibliothek -> Gemeinsame Normdatei
{ '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 [[Kategori: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 elementsCat = ''
local multipleIdCat = ''
local suppressedIdCat = ''
local suppressedIdCatArts = ''
local deprecatedIdCat = ''
local differentOnWDCat = ''
local sameOnWDCat = ''
local stateCat = ''
--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 = '[[Kategori:Rencana dengan pengenalan kawalan kewibawaan yang usang|'..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
elseif mw.wikibase then
itemId = mw.wikibase.getEntityIdForCurrentPage()
end
--Wikidata fallback if available
if itemId then
local suppressedIdCount = 0
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
suppressedIdCount = suppressedIdCount + 1
suppressedIdCat = '[[Kategori:Rencana dengan pengenalan kawalan kewibawaan yang disekat|'..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 = '[[Kategori:Halaman menggunakan kawalan kewibawaan dengan parameter berbeza pada Wikidata|'..params[1]..']]'
end end end end end
if iMatches > 0 and iMatches == iParentArgs then
sameOnWDCat = '[[Kategori:Halaman menggunakan kawalan kewibawaan dengan parameter semua sepadan dengan Wikidata]]'
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 dengan '..suppressedIdCount..' elemen yang disekat'
suppressedIdCatArts = addCat(sCat)
end
end
end
--configure rows
local rct = 0
local sectionOrder = {
'Umum',
'Perpustakaan negara',
'Galeri seni dan muzium',
'Institut penyelidikan seni',
'Kamus biografi',
'Pangkalan data saintifik',
'Pengenalan Lighthouse',
'Lain-lain'
}
local sections = {
['Umum'] = {},
['Perpustakaan negara'] = {},
['Galeri seni dan muzium'] = {},
['Institut penyelidikan seni'] = {},
['Kamus biografi'] = {},
['Pangkalan data saintifik'] = {},
['Pengenalan Lighthouse'] = {},
['Lain-lain'] = {}
}
--don't show CANTIC if CANTICN is present, since they both go to the Library of Catalonia
--and the library has deprecated CANTIC IDs in favor of CANTICN IDs
if parentArgs.CANTICN or parentArgs.canticn then
parentArgs.CANTIC = ''
parentArgs.cantic = ''
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
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-VIAF & WorldCat-LCCN
local worldcatId = parentArgs['worldcatid'] or parentArgs['WORLDCATID']
if 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['Umum'], p.createRow( 'VIAF', viafId, '[https://www.worldcat.org/identities/containsVIAFID/'..viafId..' WorldCat (melalui VIAF)]', nil, false ) )
if namespace == 0 then
worldcatCat = '[[Kategori:Recana dengan pengenalan 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['Umum'], p.createRow( 'LCCN', lccnId, '[https://www.worldcat.org/identities/lccn-'..lccnIdFmtd..' WorldCat (melalui Perpustakaan Kongres)]', nil, false ) )
if namespace == 0 then
worldcatCat = '[[Kategori:Recana dengan pengenalan WorldCat-LCCN]]'
end
end
rct = rct + 1
end
end
--configure Navbox
local outString = ''
local extrap = true
local extra = parentArgs.extralist
if extra == nil or extra == '' then
extrap = false
end
if rct > 0 or extrap then
local Navbox = require('Module:Navbox')
local sectionID = 1
local args = { pid = 'identifiers' } -- #target the list of identifiers
if testcases and itemId then args.qid = itemId end --expensive
local pencil = require('Module:EditAtWikidata')._showMessage(args)
local navboxArgs = {
name = 'Kawalan kewibawaan',
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 extrap then
if parentArgs.extragroup then
navboxArgs['group'..sectionID] = parentArgs.extragroup
else
navboxArgs['group'..sectionID] = 'Additional'
end
navboxArgs['list'..sectionID] = extra
sectionID = sectionID + 1
end
if navboxArgs.list2 then
navboxArgs.title = '[[Bantuan:Kawalan kewibawaan|Kawalan kewibawaan]]'..pencil
else
local sect = navboxArgs.group1
if sect == 'Umum' or sect == 'Lain-lain' or sect == 'Additional' then
-- Just say "Kawalan kewibawaan" 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 = '[[Bantuan:Kawalan kewibawaan|Kawalan kewibawaan]]'..pencil
else
navboxArgs.group1 = '[[Bantuan:Kawalan kewibawaan|Kawalan kewibawaan: '..sect..']] '..pencil
end
end
outString = Navbox._navbox(navboxArgs)
end
--auxCats
if rct == 0 or rct >= 25 then
if namespace == 0 or testcases then
local eCat = 'AC dengan '..rct..' elemen'
elementsCat = addCat(eCat)
end
end
if parentArgs.state then
if namespace == 0 or testcases then
local sCat
if parentArgs.state == 'collapsed' then sCat = 'AC menggunakan parameter keadaan: collapsed'
elseif parentArgs.state == 'expanded' then sCat = 'AC menggunakan parameter keadaan: expanded'
elseif parentArgs.state == 'autocollapse' then sCat = 'AC menggunakan parameter keadaan: autocollapse'
else sCat = 'AC menggunakan parameter keadaan: other'
end
stateCat = addCat(sCat)
end
end
local auxCats = worldcatCat..elementsCat..multipleIdCat..suppressedIdCat..suppressedIdCatArts..
deprecatedIdCat..differentOnWDCat..sameOnWDCat..stateCat
if testcases then
auxCats = mw.ustring.gsub(auxCats, '(%[%[)(Kategori)', '%1:%2') --for easier checking
end
--out
outString = outString..auxCats
if namespace ~= 0 then
outString = mw.ustring.gsub(outString, '(%[%[)(Kategori:Rencana)', '%1:%2') --by definition
end
return outString
end
return p