Module:Authority control: Difference between revisions
http://www.isfdb.org/->https://www.isfdb.org/ |
bnfLink validation using NCDA: NOID Check Digit Algorithm |
||
(26 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
require('strict') |
|||
function getCatForId( id ) |
|||
local title = mw.title.getCurrentTitle() |
|||
local p = {} |
|||
if namespace == 0 then |
|||
local getArgs = require('Module:Arguments').getArgs |
|||
return '[[Category:Main pages with authority control data]]' |
|||
local navbox = require('Module:Navbox')._navbox |
|||
elseif namespace == 2 and not title.isSubpage then |
|||
local warning = require('Module:Warning') |
|||
return '[[Category:User pages with ' .. id .. ' identifiers]]' |
|||
elseif namespace == 100 and not title.isSubpage then |
|||
local function check_parameters(args) |
|||
return '[[Category:Portal pages with authority control data]]' |
|||
local knownArgs = {} |
|||
elseif namespace == 102 and not title.isSubpage then |
|||
for k, v in pairs(args.knownArgs) do |
|||
return '[[Category:Author pages with authority control data]]' |
|||
knownArgs[v] = true |
|||
else |
|||
end |
|||
return '[[Category:Miscellaneous pages with authority control data]]' |
|||
end |
|||
local parentArgs = args.parentArgs |
|||
local unknownArgs = {} |
|||
for k, v in pairs(parentArgs) do |
|||
if not knownArgs[k] then |
|||
table.insert(unknownArgs, k) |
|||
end |
|||
end |
|||
if #unknownArgs > 0 then |
|||
warning('Unknown parameters: ' .. table.concat(unknownArgs, ', ')) |
|||
return args.unknown |
|||
end |
|||
if parentArgs ~= {} then |
|||
return args.known |
|||
end |
|||
return nil |
|||
end |
|||
local function getCatForId( id ) |
|||
local title = mw.title.getCurrentTitle() |
|||
local namespace = title.namespace |
|||
if namespace == 0 then |
|||
return '[[Category:Main pages with authority control data]]' |
|||
elseif namespace == 2 and not title.isSubpage then |
|||
return '[[Category:User pages with ' .. id .. ' identifiers]]' |
|||
elseif namespace == 100 and not title.isSubpage then |
|||
return '[[Category:Portal pages with authority control data]]' |
|||
elseif namespace == 102 and not title.isSubpage then |
|||
return '[[Category:Author pages with authority control data]]' |
|||
else |
|||
return '[[Category:Miscellaneous pages with authority control data]]' |
|||
end |
|||
end |
end |
||
-- ** Author related authority controls follow ** |
-- ** Author related authority controls follow ** |
||
function viafLink( id ) |
local function viafLink( id ) |
||
if not string.match( id, '^%d+$' ) then |
|||
return false |
|||
end |
|||
return '[https://viaf.org/viaf/' .. id .. ' ' .. id .. ']' .. getCatForId( 'VIAF' ) |
|||
end |
end |
||
function nkcLink( id ) |
local function nkcLink( id ) |
||
return '[https://aleph.nkp.cz/F/?func=find-c&local_base=aut&ccl_term=ica=' .. id .. '&CON_LNG=ENG ' .. id .. ']' |
return '[https://aleph.nkp.cz/F/?func=find-c&local_base=aut&ccl_term=ica=' .. id .. '&CON_LNG=ENG ' .. id .. ']' |
||
end |
end |
||
function nclLink( id ) |
local function nclLink( id ) |
||
if not string.match( id, '^%d+$' ) then |
|||
return false |
|||
end |
|||
return '[https://aleweb.ncl.edu.tw/F/?func=accref&acc_sequence=' .. id .. '&CON_LNG=ENG ' .. id .. ']' |
|||
end |
end |
||
function ndlLink( id ) |
local function ndlLink( id ) |
||
return '[https://id.ndl.go.jp/auth/ndlna/' .. id .. ' ' .. id .. ']' |
return '[https://id.ndl.go.jp/auth/ndlna/' .. id .. ' ' .. id .. ']' |
||
end |
end |
||
function sudocLink( id ) |
local function sudocLink( id ) |
||
if not string.match( id, '^%d%d%d%d%d%d%d%d[%dxX]$' ) then |
|||
return false |
|||
end |
|||
return '[https://www.idref.fr/' .. id .. ' ' .. id .. ']' |
|||
end |
end |
||
function hlsLink( id ) |
local function hlsLink( id ) |
||
if not string.match( id, '^%d+$' ) then |
|||
return false |
|||
end |
|||
return '[https://www.hls-dhs-dss.ch/textes/f/F' .. id .. '.php ' .. id .. ']' |
|||
end |
end |
||
function lirLink( id ) |
local function lirLink( id ) |
||
if not string.match( id, '^%d+$' ) then |
|||
return false |
|||
end |
|||
return '[http://www.e-lir.ch/e-LIR___Lexicon.' .. id .. '.450.0.html ' .. id .. ']' |
|||
end |
end |
||
function |
local function splitLccn( id ) |
||
if id:match( '^%l%l?%l?%d%d%d%d%d%d%d%d%d?%d?$' ) then |
|||
local parts = splitLccn( id ) |
|||
id = id:gsub( '^(%l+)(%d+)(%d%d%d%d%d%d)$', '%1/%2/%3' ) |
|||
if not parts then |
|||
end |
|||
return false |
|||
if id:match( '^%l%l?%l?/%d%d%d?%d?/%d+$' ) then |
|||
end |
|||
return mw.text.split( id, '/' ) |
|||
id = parts[1] .. parts[2] .. append( parts[3], '0', 6 ) |
|||
end |
|||
return '[https://id.loc.gov/authorities/' .. id .. ' ' .. id .. ']' .. getCatForId( 'LCCN' ) |
|||
return false |
|||
end |
end |
||
function |
local function append(str, c, length) |
||
while str:len() < length do |
|||
if id:match( '^%l%l?%l?%d%d%d%d%d%d%d%d%d?%d?$' ) then |
|||
str = c .. str |
|||
id = id:gsub( '^(%l+)(%d+)(%d%d%d%d%d%d)$', '%1/%2/%3' ) |
|||
end |
|||
return str |
|||
if id:match( '^%l%l?%l?/%d%d%d?%d?/%d+$' ) then |
|||
return mw.text.split( id, '/' ) |
|||
end |
|||
return false |
|||
end |
end |
||
function |
local function lccnLink( id ) |
||
local parts = splitLccn( id ) |
|||
while str:len() < length do |
|||
if not parts then |
|||
str = c .. str |
|||
return false |
|||
end |
|||
end |
|||
return str |
|||
id = parts[1] .. parts[2] .. append( parts[3], '0', 6 ) |
|||
return '[https://id.loc.gov/authorities/' .. id .. ' ' .. id .. ']' .. getCatForId( 'LCCN' ) |
|||
end |
end |
||
--Returns the ISNI check digit isni must be a string where the 15 first elements are digits |
|||
function isniLink( id ) |
|||
local function getIsniCheckDigit( isni ) |
|||
id = validateIsni( id ) |
|||
local total = 0 |
|||
if not id then |
|||
for i = 1, 15 do |
|||
return false |
|||
local digit = isni:byte( i ) - 48 --Get integer value |
|||
end |
|||
total = (total + digit) * 2 |
|||
return '[https://isni.org/isni/' .. id .. ' ' .. id:sub( 1, 4 ) .. ' ' .. id:sub( 5, 8 ) .. ' ' .. id:sub( 9, 12 ) .. ' ' .. id:sub( 13, 16 ) .. ']' .. getCatForId( 'ISNI' ) |
|||
end |
|||
local remainder = total % 11 |
|||
local result = (12 - remainder) % 11 |
|||
if result == 10 then |
|||
return "X" |
|||
end |
|||
return tostring( result ) |
|||
end |
end |
||
--Validate ISNI (and ORCID) and |
--Validate ISNI (and ORCID) and returns it as a 16 characters string or returns false if it's invalid |
||
--See https://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier |
--See https://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier |
||
function validateIsni( id ) |
local function validateIsni( id ) |
||
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 getIsniCheckDigit( id ) ~= string.char( id:byte( 16 ) ) then |
|||
return false |
|||
end |
|||
return id |
|||
end |
end |
||
local function isniLink( id ) |
|||
--Returns the ISNI check digit isni must be a string where the 15 first elements are digits |
|||
id = validateIsni( id ) |
|||
function getIsniCheckDigit( isni ) |
|||
if not id then |
|||
local total = 0 |
|||
return false |
|||
for i = 1, 15 do |
|||
end |
|||
local digit = isni:byte( i ) - 48 --Get integer value |
|||
return '[https://isni.org/isni/' .. id .. ' ' .. id:sub( 1, 4 ) .. ' ' .. id:sub( 5, 8 ) .. ' ' .. id:sub( 9, 12 ) .. ' ' .. id:sub( 13, 16 ) .. ']' .. getCatForId( 'ISNI' ) |
|||
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 |
end |
||
function orcidLink( id ) |
local function orcidLink( id ) |
||
id = validateIsni( id ) |
|||
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 .. ' ' .. id .. ']' .. getCatForId( 'ORCID' ) |
|||
end |
end |
||
function gndLink( id ) |
local function gndLink( id ) |
||
return '[https://d-nb.info/gnd/' .. id .. ' ' .. id .. ']' .. getCatForId( 'GND' ) |
|||
end |
end |
||
function BanglapediaEnglishLink( id ) |
local function BanglapediaEnglishLink( id ) |
||
return '[https://en.banglapedia.org/index.php?title=' .. id .. ' ' .. id .. ']' .. getCatForId( 'Banglapedia' ) |
|||
end |
end |
||
function WBPLNauthorID( id ) |
local function WBPLNauthorID( id ) |
||
return '[http://dspace.wbpublibnet.gov.in:8080/jspui/browse?type=author&order=ASC&rpp=20&value=' .. id .. ' ' .. id .. ']' .. getCatForId( 'WBPLN' ) |
|||
end |
end |
||
function BHLcreatorID( id ) |
local function BHLcreatorID( id ) |
||
return '[https://www.biodiversitylibrary.org/creator/' .. id .. ' ' .. id .. ']' .. getCatForId( 'BHL' ) |
|||
end |
end |
||
function MunksRollLink( id ) |
local function MunksRollLink( id ) |
||
return '[http://munksroll.rcplondon.ac.uk/Biography/Details/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Munks Roll' ) |
|||
end |
end |
||
function selibrLink( id ) |
local function selibrLink( id ) |
||
if not string.match( id, '^%d+$' ) then |
if not string.match( id, '^%d+$' ) then |
||
return false |
|||
end |
|||
return '[https://libris.kb.se/auth/' .. id .. ' ' .. id .. ']' .. getCatForId( 'SELIBR' ) |
|||
end |
end |
||
-- NCDA: NOID Check Digit Algorithm; see [[wikipedia:Check digit#NCDA]] |
|||
function bnfLink( id ) |
|||
local ncda -- leave this as a local since NCDA is commonly used among ARK identifiers and could be useful for validating other identifiers later |
|||
--Add cb prefix if it has been removed |
|||
do -- initialize these constants only once but scope them in a block so local namespace doesn't get cluttered with these |
|||
if not string.match( id, '^cb.+$' ) then |
|||
local r29s = [[0123456789bcdfghjkmnpqrstvwxz]] -- radix 29 "betanumeric" digit string |
|||
id = 'cb' .. id |
|||
local r29n = r29s:len() |
|||
end |
|||
local r29v2d, r29d2v = {}, {} |
|||
for i = 1, r29n do |
|||
return '[https://catalogue.bnf.fr/ark:/12148/' .. id .. ' ' .. id .. ']' .. getCatForId( 'BNF' ) |
|||
local v, d = i-1, r29s:sub(i, i) |
|||
r29v2d[v], r29d2v[d] = d, v |
|||
end |
|||
function ncda(sid) |
|||
local n, sum = sid:len(), 0 |
|||
for i = 1, n do |
|||
sum = sum + i * (r29d2v[sid:sub(i, i)] or 0) |
|||
end |
|||
return r29v2d[sum % r29n] |
|||
end |
|||
end |
|||
local function bnfLink( id ) |
|||
id = id:match('^cb(.+)$') or id --Strip 'cb' "shoulder" prefix before validation if provided |
|||
local FRBNF, check = id:match('^(%d%d%d%d%d%d%d%d)(.)$') --Eight decimal digits plus NCDA check |
|||
return nil ~= FRBNF and ncda('cb'..FRBNF) == check and '[https://catalogue.bnf.fr/ark:/12148/cb' .. id .. ' ' .. FRBNF .. ']' .. getCatForId( 'BNF' ) |
|||
end |
end |
||
function bpnLink( id ) |
local function bpnLink( id ) |
||
if not string.match( id, '^%d+$' ) then |
|||
return false |
|||
end |
|||
return '[http://www.biografischportaal.nl/persoon/' .. id .. ' ' .. id .. ']' .. getCatForId( 'BPN' ) |
|||
end |
end |
||
function ridLink( id ) |
local function ridLink( id ) |
||
return '[http://www.researcherid.com/rid/' .. id .. ' ' .. id .. ']' .. getCatForId( 'RID' ) |
|||
end |
end |
||
function bibsysLink( id ) |
local function bibsysLink( id ) |
||
return '[http://ask.bibsys.no/ask/action/result?cmd=&kilde=biblio&cql=bs.autid+%3D+' .. id .. '&feltselect=bs.autid ' .. id .. ']' .. getCatForId( 'BIBSYS' ) |
|||
end |
end |
||
function ulanLink( id ) |
local function ulanLink( id ) |
||
return '[https://www.getty.edu/vow/ULANFullDisplay?find=&role=&nation=&subjectid=' .. id .. ' ' .. id .. ']' .. getCatForId( 'ULAN' ) |
|||
end |
end |
||
function nlaLink( id ) |
local function nlaLink( id ) |
||
return '[https://librariesaustralia.nla.gov.au/search/display?dbid=auth&id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'NLA' ) |
return '[https://librariesaustralia.nla.gov.au/search/display?dbid=auth&id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'NLA' ) |
||
end |
end |
||
function mbLink( id ) |
local function mbLink( id ) |
||
-- TODO Implement some sanity checking regex |
|||
return '[https://musicbrainz.org/artist/' .. id .. ' ' .. id .. ']' .. getCatForId( 'MusicBrainz' ) |
|||
end |
end |
||
function calisLink( id ) |
local function calisLink( id ) |
||
return '[http://opac.calis.edu.cn/aopac/ajsp/detail.jsp?actionfrom=1&actl=CAL++' .. id .. ' ' .. id .. ']' .. getCatForId( 'CALIS' ) |
return '[http://opac.calis.edu.cn/aopac/ajsp/detail.jsp?actionfrom=1&actl=CAL++' .. id .. ' ' .. id .. ']' .. getCatForId( 'CALIS' ) |
||
end |
end |
||
function ciniiLink( id ) |
local function ciniiLink( id ) |
||
return '[https://ci.nii.ac.jp/author/' .. id .. ' ' .. id .. ']' .. getCatForId( 'CiNii' ) |
return '[https://ci.nii.ac.jp/author/' .. id .. ' ' .. id .. ']' .. getCatForId( 'CiNii' ) |
||
end |
end |
||
function sbnLink( id ) |
local function sbnLink( id ) |
||
return '[http://id.sbn.it/af/' .. id .. ' ' .. id .. ']' .. getCatForId( 'SBN' ) |
return '[http://id.sbn.it/af/' .. id .. ' ' .. id .. ']' .. getCatForId( 'SBN' ) |
||
end |
end |
||
function cbdbLink( id ) |
local function cbdbLink( id ) |
||
return '[http://db1.ihp.sinica.edu.tw/cbdbc/cbdbkmeng?~~AAA' .. id .. ' ' .. id .. ']' .. getCatForId( 'CBDB' ) |
return '[http://db1.ihp.sinica.edu.tw/cbdbc/cbdbkmeng?~~AAA' .. id .. ' ' .. id .. ']' .. getCatForId( 'CBDB' ) |
||
end |
end |
||
function leonoreLink( id ) |
local function leonoreLink( id ) |
||
return '[https://www.culture.gouv.fr/public/mistral/leonore_fr?ACTION=CHERCHER&FIELD_1=COTE&VALUE_1=' .. id .. ' ' .. id .. ']' .. getCatForId( 'Léonore' ) |
return '[https://www.culture.gouv.fr/public/mistral/leonore_fr?ACTION=CHERCHER&FIELD_1=COTE&VALUE_1=' .. id .. ' ' .. id .. ']' .. getCatForId( 'Léonore' ) |
||
end |
end |
||
function dbnlLink( id ) |
local function dbnlLink( id ) |
||
return '[https://www.dbnl.org/auteurs/auteur.php?id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'DBNL' ) |
return '[https://www.dbnl.org/auteurs/auteur.php?id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'DBNL' ) |
||
end |
end |
||
function rslLink( id ) |
local function rslLink( id ) |
||
return '[http://aleph.rsl.ru/F?func=find-b&find_code=SYS&adjacent=Y&local_base=RSL11&request=' .. id .. ' ' .. id .. ']' .. getCatForId( 'RSL' ) |
return '[http://aleph.rsl.ru/F?func=find-b&find_code=SYS&adjacent=Y&local_base=RSL11&request=' .. id .. ' ' .. id .. ']' .. getCatForId( 'RSL' ) |
||
end |
end |
||
function ptbnpLink( id ) |
local function ptbnpLink( id ) |
||
return '[https://purl.pt/index/geral/aut/PT/' .. id .. '.html ' .. id .. ']' .. getCatForId( 'PTBNP' ) |
return '[https://purl.pt/index/geral/aut/PT/' .. id .. '.html ' .. id .. ']' .. getCatForId( 'PTBNP' ) |
||
end |
end |
||
function ntaLink( id ) |
local function ntaLink( id ) |
||
-- Nationale Thesaurus Auteursnamen, Koninklijke Bibliotheek |
-- Nationale Thesaurus Auteursnamen, Koninklijke Bibliotheek |
||
return '[https://data.bibliotheken.nl/doc/thes/p' .. id .. ' ' .. id .. ']' .. getCatForId( 'NTA' ) |
return '[https://data.bibliotheken.nl/doc/thes/p' .. id .. ' ' .. id .. ']' .. getCatForId( 'NTA' ) |
||
end |
end |
||
function vcbaLink( id ) |
local function vcbaLink( id ) |
||
return '[https://wikidata-externalid-url.toolforge.org/?p=8034&url_prefix=https://opac.vatlib.it/auth/detail/&id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'VcBA' ) |
|||
end |
end |
||
function nliLink( id ) |
local function nliLink( id ) |
||
return '[http://a20.libnet.ac.il/F?func=find-b&REQUEST=' .. id .. '&find_code=SYS&local_base=NNL10 ' .. id .. ']' .. getCatForId( 'NLI' ) |
return '[http://a20.libnet.ac.il/F?func=find-b&REQUEST=' .. id .. '&find_code=SYS&local_base=NNL10 ' .. id .. ']' .. getCatForId( 'NLI' ) |
||
end |
end |
||
function nlcLink( id ) |
local function nlcLink( id ) |
||
return '[http://opac.nlc.cn/F/?func=accref&acc_sequence=' .. id .. ' ' .. id .. ']' .. getCatForId( 'NLC' ) |
return '[http://opac.nlc.cn/F/?func=accref&acc_sequence=' .. id .. ' ' .. id .. ']' .. getCatForId( 'NLC' ) |
||
end |
end |
||
function nukatLink( id ) |
local function nukatLink( id ) |
||
return id .. getCatForId( 'NUKAT' ) |
return id .. getCatForId( 'NUKAT' ) |
||
-- linking format not currently available on Wikidata and cannot find anything suitable as http://www.nukat.edu.pl/ |
-- linking format not currently available on Wikidata and cannot find anything suitable as http://www.nukat.edu.pl/ |
||
end |
end |
||
function botanistLink( id ) |
local function botanistLink( id ) |
||
id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'PATH') end) |
local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'PATH') end) |
||
return '[https://www.ipni.org/ipni/advAuthorSearch.do?find_abbreviation=' .. id2 .. ' ' .. id .. ']' .. getCatForId( 'IPNI' ) |
|||
end |
end |
||
function naraIdLink( id ) |
local function naraIdLink( id ) |
||
return '[https://research.archives.gov/person/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' ) |
return '[https://research.archives.gov/person/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' ) |
||
end |
end |
||
function ibdbLink( id ) |
local function ibdbLink( id ) |
||
return '[https://www.ibdb.com/person.php?id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'IBDB' ) |
return '[https://www.ibdb.com/person.php?id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'IBDB' ) |
||
end |
end |
||
function isfdbIdLink( id ) |
local function isfdbIdLink( id ) |
||
return '[https://www.isfdb.org/cgi-bin/ea.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' ) |
return '[https://www.isfdb.org/cgi-bin/ea.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' ) |
||
end |
end |
||
function findGraveLink( id ) |
local function findGraveLink( id ) |
||
return '[https://www.findagrave.com/memorial/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Find a Grave' ) |
return '[https://www.findagrave.com/memorial/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Find a Grave' ) |
||
end |
end |
||
function mgpLink( id ) |
local function mgpLink( id ) |
||
return '[https://genealogy.math.ndsu.nodak.edu/id.php?id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'MGP' ) |
return '[https://genealogy.math.ndsu.nodak.edu/id.php?id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'MGP' ) |
||
end |
end |
||
function rkdLink( id ) |
local function rkdLink( id ) |
||
return '[http://explore.rkd.nl/nl/artists/' .. id .. ' ' .. id .. ']' .. getCatForId( 'RKD' ) |
return '[http://explore.rkd.nl/nl/artists/' .. id .. ' ' .. id .. ']' .. getCatForId( 'RKD' ) |
||
end |
end |
||
function bneLink( id ) |
local function bneLink( id ) |
||
return '[http://catalogo.bne.es/uhtbin/authoritybrowse.cgi?action=display&authority_id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'BNE' ) |
return '[http://catalogo.bne.es/uhtbin/authoritybrowse.cgi?action=display&authority_id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'BNE' ) |
||
end |
end |
||
function nlrLink( id ) |
local function nlrLink( id ) |
||
return '[http://alephnew.bibnat.ro:8991/F?func=find-b&request=' .. id .. '&find_code=SYS&adjacent=Y&local_base=NLR10 ' .. id .. ']' .. getCatForId( 'NLR' ) |
return '[http://alephnew.bibnat.ro:8991/F?func=find-b&request=' .. id .. '&find_code=SYS&adjacent=Y&local_base=NLR10 ' .. id .. ']' .. getCatForId( 'NLR' ) |
||
end |
end |
||
function chLink( id ) |
local function chLink( id ) |
||
-- Catholic Hierarchy (database of bishops) |
-- Catholic Hierarchy (database of bishops) |
||
return '[https://www.catholic-hierarchy.org/bishop/b' .. id .. '.html ' .. id .. ']' .. getCatForId( 'Catholic Hierarchy' ) |
return '[https://www.catholic-hierarchy.org/bishop/b' .. id .. '.html ' .. id .. ']' .. getCatForId( 'Catholic Hierarchy' ) |
||
end |
end |
||
function sycomoreLink( id ) |
local function sycomoreLink( id ) |
||
return '[https://www.assemblee-nationale.fr/sycomore/fiche.asp?num_dept=' .. id .. ' ' .. id .. ']' .. getCatForId( 'Sycomore' ) |
return '[https://www.assemblee-nationale.fr/sycomore/fiche.asp?num_dept=' .. id .. ' ' .. id .. ']' .. getCatForId( 'Sycomore' ) |
||
end |
end |
||
function uscongressLink( id ) |
local function uscongressLink( id ) |
||
return '[https://bioguide.congress.gov/scripts/biodisplay.pl?index=' .. id .. ' ' .. id .. ']' |
|||
end |
end |
||
function kulturnavLink( id ) |
local function kulturnavLink( id ) |
||
return '[https://kulturnav.org/language/en/' .. id .. ' id]' |
|||
end |
end |
||
function sikartLink( id ) |
local function sikartLink( id ) |
||
return '[https://www.sikart.ch/KuenstlerInnen.aspx?id=' .. id .. '&lng=en ' .. id .. ']' |
|||
end |
end |
||
function tlsLink( id ) |
local function tlsLink( id ) |
||
id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'WIKI') end) |
local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'WIKI') end) |
||
return '[http://tls.theaterwissenschaft.ch/wiki/' .. id2 .. ' ' .. id .. ']' |
|||
end |
end |
||
function PrdlLink( id ) |
local function PrdlLink( id ) |
||
return '[https://prdl.org/author_view.php?a_id=' .. id .. ' ' .. id .. ']' |
return '[https://prdl.org/author_view.php?a_id=' .. id .. ' ' .. id .. ']' |
||
end |
end |
||
function NupillALink( id ) |
local function NupillALink( id ) |
||
return '[https://www.literaturabrasileira.ufsc.br/autores/?id=' .. id .. ' ' .. id .. ']' |
return '[https://www.literaturabrasileira.ufsc.br/autores/?id=' .. id .. ' ' .. id .. ']' |
||
end |
end |
||
function MacTutorBLink( id ) |
local function MacTutorBLink( id ) |
||
return '[https://www-history.mcs.st-andrews.ac.uk/Biographies/' .. id .. '.html ' .. id .. ']' |
return '[https://www-history.mcs.st-andrews.ac.uk/Biographies/' .. id .. '.html ' .. id .. ']' |
||
end |
end |
||
function AtclLink( id ) |
local function AtclLink( id ) |
||
return '[https://www.victorianresearch.org/atcl/show_author.php?aid=' .. id .. ' ' .. id .. ']' |
return '[https://www.victorianresearch.org/atcl/show_author.php?aid=' .. id .. ' ' .. id .. ']' |
||
end |
end |
||
function ElemLink( id ) |
local function ElemLink( id ) |
||
return '[http://www.elem.mx/autor/datos/' .. id .. ' ' .. id .. ']' |
return '[http://www.elem.mx/autor/datos/' .. id .. ' ' .. id .. ']' |
||
end |
end |
||
function ImslpLink( id ) |
local function ImslpLink( id ) |
||
id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'WIKI') end) |
local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'WIKI') end) |
||
return '[https://imslp.org/wiki/' .. id2 .. ' ' .. id .. ']' |
|||
end |
end |
||
function OdnbLink( id ) |
local function OdnbLink( id ) |
||
return '[https://doi.org/10.1093/ref:odnb/' .. id .. ' ' .. id .. ']' |
return '[https://doi.org/10.1093/ref:odnb/' .. id .. ' ' .. id .. ']' |
||
end |
end |
||
function GecLink( id ) |
local function GecLink( id ) |
||
return '[https://www.enciclopedia.cat/enciclop%C3%A8dies/gran-enciclop%C3%A8dia-catalana/EC-GEC-' .. id .. '.xml ' .. id .. ']' |
return '[https://www.enciclopedia.cat/enciclop%C3%A8dies/gran-enciclop%C3%A8dia-catalana/EC-GEC-' .. id .. '.xml ' .. id .. ']' |
||
end |
end |
||
-- ** Subject related or general authority controls follow ** |
-- ** Subject related or general authority controls follow ** |
||
function imdbLink( id ) |
local function imdbLink( id ) |
||
return '[https://www.imdb.com/Name?' .. id .. ' ' .. id .. ']' .. getCatForId( 'IMDB' ) |
return '[https://www.imdb.com/Name?' .. id .. ' ' .. id .. ']' .. getCatForId( 'IMDB' ) |
||
end |
end |
||
function freebaseLink( id ) |
local function freebaseLink( id ) |
||
return '[https://freebase.toolforge.org/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Freebase' ) |
return '[https://freebase.toolforge.org/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Freebase' ) |
||
end |
end |
||
function naraOrgLink( id ) |
local function naraOrgLink( id ) |
||
return '[https://research.archives.gov/organization/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' ) |
return '[https://research.archives.gov/organization/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' ) |
||
end |
end |
||
function naraGeoLink( id ) |
local function naraGeoLink( id ) |
||
return '[https://research.archives.gov/geographic-reference/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' ) |
return '[https://research.archives.gov/geographic-reference/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' ) |
||
end |
end |
||
function naraSubLink( id ) |
local function naraSubLink( id ) |
||
return '[https://research.archives.gov/topical-subject/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' ) |
return '[https://research.archives.gov/topical-subject/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' ) |
||
end |
end |
||
function naraTypeLink( id ) |
local function naraTypeLink( id ) |
||
return '[https://research.archives.gov/specific-records-type/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' ) |
return '[https://research.archives.gov/specific-records-type/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' ) |
||
end |
end |
||
function isfdbPubLink( id ) |
local function isfdbPubLink( id ) |
||
return '[https://www.isfdb.org/cgi-bin/publisher.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' ) |
return '[https://www.isfdb.org/cgi-bin/publisher.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' ) |
||
end |
end |
||
function isfdbConLink( id ) |
local function isfdbConLink( id ) |
||
return '[https://www.isfdb.org/cgi-bin/pl.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' ) |
return '[https://www.isfdb.org/cgi-bin/pl.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' ) |
||
end |
end |
||
function lembpLink( id ) |
local function lembpLink( id ) |
||
--Lista de Encabezamientos de materia para las Bibliotecas Públicas = List of Subject Headings for Public Libraries (Spanish) |
--Lista de Encabezamientos de materia para las Bibliotecas Públicas = List of Subject Headings for Public Libraries (Spanish) |
||
return '[http://id.sgcb.mcu.es/lem/ver/Autoridades/' .. id .. '/concept ' .. id .. ']' .. getCatForId( 'LEMBP' ) |
return '[http://id.sgcb.mcu.es/lem/ver/Autoridades/' .. id .. '/concept ' .. id .. ']' .. getCatForId( 'LEMBP' ) |
||
end |
end |
||
function ddcLink( id ) |
local function ddcLink( id ) |
||
return '[http://dewey.info/class/' .. id .. '/about ' .. id .. ']' .. getCatForId( 'DDC' ) |
return '[http://dewey.info/class/' .. id .. '/about ' .. id .. ']' .. getCatForId( 'DDC' ) |
||
end |
end |
||
function libriVoxAuthorLink( id ) |
local function libriVoxAuthorLink( id ) |
||
return '[https://librivox.org/author/' .. id .. ' ' .. id .. ']' .. getCatForId( 'LVA' ) |
|||
end |
end |
||
function GutenbergLink( id ) |
local function GutenbergLink( id ) |
||
return '[https://www.gutenberg.org/ebooks/author/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Gutenberg' ) |
return '[https://www.gutenberg.org/ebooks/author/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Gutenberg' ) |
||
end |
end |
||
function syrBiographicalLink( id ) |
local function syrBiographicalLink( id ) |
||
return '[https://syriaca.org/person/' .. id .. ' ' .. id .. ']' |
return '[https://syriaca.org/person/' .. id .. ' ' .. id .. ']' |
||
end |
end |
||
Line 403: | Line 453: | ||
-- ** Book and work related authority controls follow ** |
-- ** Book and work related authority controls follow ** |
||
function isbnLink( id ) |
local function isbnLink( id ) |
||
return '[[Special:BookSources/' .. id .. '|' .. id .. ']]' .. getCatForId( 'ISBN' ) |
return '[[Special:BookSources/' .. id .. '|' .. id .. ']]' .. getCatForId( 'ISBN' ) |
||
-- ISBN currently only reads ISBN-13 numbers from Wikidata and ignores ISBN-10 numbers |
-- ISBN currently only reads ISBN-13 numbers from Wikidata and ignores ISBN-10 numbers |
||
end |
end |
||
function oclcLink( id ) |
local function oclcLink( id ) |
||
return '[https://www.worldcat.org/oclc/' .. id .. '?lang=en ' .. id .. ']' .. getCatForId( 'OCLC' ) |
return '[https://www.worldcat.org/oclc/' .. id .. '?lang=en ' .. id .. ']' .. getCatForId( 'OCLC' ) |
||
end |
end |
||
function openLibLink( id ) |
local function openLibLink( id ) |
||
return '[https://openlibrary.org/books/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Open Library' ) |
return '[https://openlibrary.org/books/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Open Library' ) |
||
end |
end |
||
function libraryThingLink( id ) |
local function libraryThingLink( id ) |
||
return '[https://www.librarything.com/work/' .. id .. ' ' .. id .. ']' .. getCatForId( 'LibraryThing' ) |
return '[https://www.librarything.com/work/' .. id .. ' ' .. id .. ']' .. getCatForId( 'LibraryThing' ) |
||
end |
end |
||
function archiveLink( id ) |
local function archiveLink( id ) |
||
return '[https://www.archive.org/details/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Internet Archive' ) |
return '[https://www.archive.org/details/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Internet Archive' ) |
||
end |
end |
||
function gutenbergebookLink( id ) |
local function gutenbergebookLink( id ) |
||
return '[https://www.gutenberg.org/ebooks/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Project Gutenberg' ) |
return '[https://www.gutenberg.org/ebooks/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Project Gutenberg' ) |
||
end |
end |
||
function europeanaLink( id ) |
local function europeanaLink( id ) |
||
return '[https://www.europeana.eu/portal/record/' .. id .. '.html ' .. id .. ']' .. getCatForId( 'Europeana' ) |
return '[https://www.europeana.eu/portal/record/' .. id .. '.html ' .. id .. ']' .. getCatForId( 'Europeana' ) |
||
end |
end |
||
function lccnBibliographicLink( id ) |
local function lccnBibliographicLink( id ) |
||
return '[https://lccn.loc.gov/' .. id .. ' ' .. id .. ']' .. getCatForId( 'LCCN (bibliographic)' ) |
return '[https://lccn.loc.gov/' .. id .. ' ' .. id .. ']' .. getCatForId( 'LCCN (bibliographic)' ) |
||
end |
end |
||
function googleBooksLink( id ) |
local function googleBooksLink( id ) |
||
return '[https://books.google.com/books?id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'Google Books' ) |
return '[https://books.google.com/books?id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'Google Books' ) |
||
end |
end |
||
function ndlBibliographicLink( id ) |
local function ndlBibliographicLink( id ) |
||
return '[https://iss.ndl.go.jp/books?op_id=1&any=' .. id .. ' ' .. id .. ']' .. getCatForId( 'NDL (bibliographic)' ) |
return '[https://iss.ndl.go.jp/books?op_id=1&any=' .. id .. ' ' .. id .. ']' .. getCatForId( 'NDL (bibliographic)' ) |
||
end |
end |
||
function issnLink( id ) |
local function issnLink( id ) |
||
return '[https://www.worldcat.org/search?fq=x0:jrnl&q=n2:' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISSN' ) |
return '[https://www.worldcat.org/search?fq=x0:jrnl&q=n2:' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISSN' ) |
||
end |
end |
||
function doiLink( id ) |
local function doiLink( id ) |
||
return '[https://doi.org/' .. id .. ' ' .. id .. ']' .. getCatForId( 'DOI' ) |
return '[https://doi.org/' .. id .. ' ' .. id .. ']' .. getCatForId( 'DOI' ) |
||
end |
end |
||
function eraLink( id ) |
local function eraLink( id ) |
||
return '[http://lamp.infosys.deakin.edu.au/era/?page=jnamedet12f&eraid=' .. id .. ' ' .. id .. ']' .. getCatForId( 'ERA' ) |
return '[http://lamp.infosys.deakin.edu.au/era/?page=jnamedet12f&eraid=' .. id .. ' ' .. id .. ']' .. getCatForId( 'ERA' ) |
||
end |
end |
||
function ismnLink( id ) |
local function ismnLink( id ) |
||
return id .. getCatForId( 'ISMN' ) |
return id .. getCatForId( 'ISMN' ) |
||
-- no link currently available for ISMN on Wikidata and none found elsewhere |
-- no link currently available for ISMN on Wikidata and none found elsewhere |
||
end |
end |
||
function isfdbBookLink( id ) |
local function isfdbBookLink( id ) |
||
return '[https://www.isfdb.org/cgi-bin/title.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' ) |
return '[https://www.isfdb.org/cgi-bin/title.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' ) |
||
end |
end |
||
function isfdbSerLink( id ) |
local function isfdbSerLink( id ) |
||
return '[https://www.isfdb.org/cgi-bin/pe.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' ) |
return '[https://www.isfdb.org/cgi-bin/pe.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' ) |
||
end |
end |
||
function sudocBibliographicLink( id ) |
local function sudocBibliographicLink( id ) |
||
return '[http://www.sudoc.fr/' .. id .. ' ' .. id .. ']' .. getCatForId( 'SUDOC' ) |
return '[http://www.sudoc.fr/' .. id .. ' ' .. id .. ']' .. getCatForId( 'SUDOC' ) |
||
end |
end |
||
function swbLink( id ) |
local function swbLink( id ) |
||
-- South-West German Library Network |
-- South-West German Library Network |
||
return '[https://swb.bsz-bw.de/DB=2.1/PPNSET?PPN=' .. id .. '&INDEXSET=1 ' .. id .. ']' .. getCatForId( 'SWB' ) |
return '[https://swb.bsz-bw.de/DB=2.1/PPNSET?PPN=' .. id .. '&INDEXSET=1 ' .. id .. ']' .. getCatForId( 'SWB' ) |
||
end |
end |
||
function zdbLink( id ) |
local function zdbLink( id ) |
||
-- Zeitschriftendatenbank |
-- Zeitschriftendatenbank |
||
return '[http://dispatch.opac.d-nb.de/DB=1.1/CMD?ACT=SRCHA&IKT=8506&TRM=' .. id .. ' ' .. id .. ']' .. getCatForId( 'ZDB' ) |
return '[http://dispatch.opac.d-nb.de/DB=1.1/CMD?ACT=SRCHA&IKT=8506&TRM=' .. id .. ' ' .. id .. ']' .. getCatForId( 'ZDB' ) |
||
end |
end |
||
function nlmLink( id ) |
local function nlmLink( id ) |
||
return '[http://locatorplus.gov/cgi-bin/Pwebrecon.cgi?DB=local&v1=1&ti=1,1&Search_Arg=' .. id .. '&Search_Code=0359&CNT=20&SID=1 ' ..id .. ']' .. getCatForId( 'NLM' ) |
return '[http://locatorplus.gov/cgi-bin/Pwebrecon.cgi?DB=local&v1=1&ti=1,1&Search_Arg=' .. id .. '&Search_Code=0359&CNT=20&SID=1 ' ..id .. ']' .. getCatForId( 'NLM' ) |
||
end |
end |
||
function selibrBibliographicLink( id ) |
local function selibrBibliographicLink( id ) |
||
return '[https://libris.kb.se/bib/' .. id .. ' ' .. id .. ']' .. getCatForId( 'SELIBR' ) |
return '[https://libris.kb.se/bib/' .. id .. ' ' .. id .. ']' .. getCatForId( 'SELIBR' ) |
||
end |
end |
||
function dliLink( id ) |
local function dliLink( id ) |
||
return '[http://dli.gov.in/cgi-bin/DBscripts/allmetainfo.cgi?barcode=' .. id .. ' ' .. id .. ']' .. getCatForId( 'DLI' ) |
return '[http://dli.gov.in/cgi-bin/DBscripts/allmetainfo.cgi?barcode=' .. id .. ' ' .. id .. ']' .. getCatForId( 'DLI' ) |
||
end |
end |
||
function hathitrustLink( id ) |
local function hathitrustLink( id ) |
||
return '[https://catalog.hathitrust.org/Record/' .. id .. ' ' .. id .. ']' .. getCatForId( 'HathiTrust' ) |
return '[https://catalog.hathitrust.org/Record/' .. id .. ' ' .. id .. ']' .. getCatForId( 'HathiTrust' ) |
||
end |
end |
||
function blSysnumLink( id ) |
local function blSysnumLink( id ) |
||
return '[http://explore.bl.uk/BLVU1:LSCOP-ALL:BLL01' .. id .. ' ' .. id .. ']' .. getCatForId( 'BL' ) |
return '[http://explore.bl.uk/BLVU1:LSCOP-ALL:BLL01' .. id .. ' ' .. id .. ']' .. getCatForId( 'BL' ) |
||
end |
end |
||
function BNBRLink( id ) |
local function BNBRLink( id ) |
||
return '[http://acervo.bn.br/sophia_web/autoridade/detalhe/' .. id .. ' ' .. id .. ']' .. getCatForId( 'BN.br' ) |
return '[http://acervo.bn.br/sophia_web/autoridade/detalhe/' .. id .. ' ' .. id .. ']' .. getCatForId( 'BN.br' ) |
||
end |
end |
||
function onlineBooksLink( id ) |
local function onlineBooksLink( id ) |
||
return '[https://onlinebooks.library.upenn.edu/webbin/cinfo/' .. id .. ' ' .. id .. ']' .. getCatForId( 'OnlineBooks' ) |
return '[https://onlinebooks.library.upenn.edu/webbin/cinfo/' .. id .. ' ' .. id .. ']' .. getCatForId( 'OnlineBooks' ) |
||
end |
end |
||
function newspapersComLink( id ) |
local function newspapersComLink( id ) |
||
if not string.match( id, '^%d+$' ) then |
|||
return false |
|||
end |
|||
return '[https://www.newspapers.com/title_' .. id .. ' ' .. id .. ']' |
|||
end |
end |
||
function worldcatLink( id ) |
local function worldcatLink( id ) |
||
local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'PATH') end) |
|||
return '[https://www.worldcat.org/identities/' .. id2 .. ' ' .. id .. ']' |
|||
end |
end |
||
-- Entry for Wikisource using 'wgArticleID' as an authority. Should always be last |
-- Entry for Wikisource using 'wgArticleID' as an authority. Should always be last |
||
function wksLink( id ) |
local function wksLink( id ) |
||
if not tonumber(id) then |
|||
return false |
|||
end |
|||
return '[//en.wikisource.org/w/index.php?curid=' .. id .. ' ' .. id .. ']' |
|||
end |
end |
||
-- End of authority control link formatting functions |
-- End of authority control link formatting functions |
||
function getIdsFromWikidata( item, property ) |
local function getIdsFromWikidata( item, property ) |
||
local ids = {} |
|||
if not item.claims[property] then |
|||
return ids |
|||
end |
|||
for _, statement in pairs( item:getBestStatements( property ) ) do |
|||
if statement.mainsnak.datavalue then |
if statement.mainsnak.datavalue then |
||
table.insert( ids, statement.mainsnak.datavalue.value ) |
table.insert( ids, statement.mainsnak.datavalue.value ) |
||
end |
end |
||
end |
|||
return ids |
|||
end |
end |
||
function matchesWikidataRequirements( item, reqs ) |
local function matchesWikidataRequirements( item, reqs ) |
||
for _, group in pairs( reqs ) do |
|||
local property = 'p' .. group[1] |
|||
local qid = group[2] |
|||
if item.claims[property] ~= nil then |
|||
for _, statement in pairs ( item.claims[property] ) do |
|||
if statement.mainsnak.datavalue ~= nil then |
|||
if statement.mainsnak.datavalue.value['numeric-id'] == qid then |
|||
return true |
|||
end |
|||
end |
|||
end |
|||
end |
|||
end |
|||
end |
|||
end |
|||
end |
|||
return false |
|||
end |
end |
||
function createRow( id, label, rawValue, link, withUid ) |
local function createRow( id, label, rawValue, link, withUid ) |
||
if link then |
|||
if withUid then |
|||
return '* ' .. label .. ' <span class="uid plainlinks">' .. link .. '</span>\n' |
|||
else |
|||
return '* ' .. label .. ' <span class="plainlinks">' .. link .. '</span>\n' |
|||
end |
|||
else |
|||
return '* <span class="error">The ' .. id .. ' id ' .. rawValue .. ' is not valid.</span>[[Category:Wikisource articles with faulty authority control identifiers]]\n' |
|||
end |
|||
end |
end |
||
Line 580: | Line 630: | ||
--In this order: { name of the parameter, label, propertyId in Wikidata, formatting function }, |
--In this order: { name of the parameter, label, propertyId in Wikidata, formatting function }, |
||
local conf = { |
local conf = { |
||
{ 'VIAF', '[[w:Virtual International Authority File|VIAF]]', 214, viafLink }, |
|||
{ 'LCCN', '[[w:Library of Congress Control Number|LCCN]]', 244, lccnLink }, |
|||
{ 'ISNI', '[[w:International Standard Name Identifier|ISNI]]', 213, isniLink }, |
|||
{ 'ORCID', '[[w:ORCID|ORCID]]', 496, orcidLink }, |
|||
{ 'GND', '[[w:Integrated Authority File|GND]]', 227, gndLink }, |
|||
{ 'Banglapedia', '[[w:Banglapedia|Banglapedia]]', 4255, BanglapediaEnglishLink }, |
|||
{ 'WBPLN', 'WBPLN', 4343, WBPLNauthorID }, |
|||
{ 'BHL', '[[w:Biodiversity Heritage Library|BHL]]', 4081, BHLcreatorID }, |
|||
{ 'Munks Roll', '[[w:Munk%27s_Roll|Munks Roll]]', 2941, MunksRollLink }, |
|||
{ 'SELIBR', '[[w:LIBRIS|SELIBR]]', 906, selibrLink }, |
|||
{ 'SUDOC', '[[w:Système universitaire de documentation|SUDOC]]', 269, sudocLink }, |
|||
{ 'BNF', '[[w:Bibliothèque nationale de France|BNF]]', 268, bnfLink }, |
|||
{ 'BPN', '[[w:Biografisch Portaal|BPN]]', 651, bpnLink }, |
|||
{ 'RID', '[[w:ResearcherID|ResearcherID]]', 1053, ridLink }, |
|||
{ 'BIBSYS', '[[w:BIBSYS|BIBSYS]]', 1015, bibsysLink }, |
|||
{ 'BL', '[[w:British Library|BL]]', 5199, blSysnumLink }, |
|||
{ 'ULAN', '[[w:Union List of Artist Names|ULAN]]', 245, ulanLink }, |
|||
{ 'HDS', '[[w:Historical Dictionary of Switzerland|HDS]]', 902, hlsLink }, |
|||
{ 'LIR', '[[w:Historical Dictionary of Switzerland#Lexicon_Istoric_Retic|LIR]]', 886, lirLink }, |
|||
{ 'MBA', '[[w:MusicBrainz|MusicBrainz]]', 434, mbLink }, |
|||
{ 'NLA', '[[w:National Library of Australia|NLA]]', 409, nlaLink }, |
|||
{ 'NDL', '[[w:National Diet Library|NDL]]', 349, ndlLink }, |
|||
{ 'NCL', '[[w:National Central Library|NCL]]', 1048, nclLink }, |
|||
{ 'NKC', '[[w:National Library of the Czech Republic|NKC]]', 691, nkcLink }, |
|||
{ 'CALIS', 'CALIS', 270, calisLink }, |
|||
{ 'CiNii', '[[w:CiNii|CiNii]]', 271, ciniiLink }, |
|||
{ 'SBN', '[[w:Istituto Centrale per il Catalogo Unico|SBN]]', 396, sbnLink }, |
|||
{ 'CBDB', 'CBDB', 497, cbdbLink }, |
|||
{ 'Leonore', '[[w:Legion of Honour|Léonore]]', 640, leonoreLink }, |
|||
{ 'DBNL', '[[w:Digital Library for Dutch Literature|DBNL]]', 723, dbnlLink }, |
|||
{ 'RSL', '[[w:Russian State Library|RSL]]', 947, rslLink }, |
|||
{ 'PTBNP', '[[w:Biblioteca Nacional de Portugal|PTBNP]]', 1005, ptbnpLink }, |
|||
{ 'NTA', 'NTA', 1006, ntaLink }, |
|||
{ 'VcBA', '[[w:Vatican Library|VcBA]]', 8034, vcbaLink }, |
|||
{ 'NLI', '[[w:National Library of Israel|NLI]]', 949, nliLink }, |
|||
{ 'NLC', '[[w:National Library of China|NLC]]', 1213, nlcLink }, |
|||
{ 'NUKAT', 'NUKAT', 1207, nukatLink }, |
|||
{ 'Botanist', '[[w:International Plant Names Index|Botanist]]', 428, botanistLink }, |
|||
{ 'NARAid', '[[w:National Archives and Records Administration|NARA]]', 1222, naraIdLink }, |
|||
{ 'IBDB', '[[w:Internet Broadway Database|IBDB]]', 1220, ibdbLink }, |
|||
{ 'ISFDB', '[[w:Internet Speculative Fiction Database|ISFDB]]', 1233, isfdbIdLink }, |
|||
{ 'LibriVoxAuth', '[[w:LibriVox|LibriVox]]', 1899, libriVoxAuthorLink }, |
|||
{ 'Gutenberg', '[[w:Project Gutenberg|Project Gutenberg]]', 1938, GutenbergLink }, |
|||
{ 'SBD', '[[w:Syriac Biographical Dictionary|SBD]]', 6934, syrBiographicalLink }, |
|||
{ 'Grave', '[[w:Find a Grave|Find a Grave]]', 535, findGraveLink }, |
|||
{ 'MGP', '[[w:Mathematics Genealogy Project|MGP]]', 549, mgpLink }, |
|||
{ 'RKD', '[[w:Netherlands Institute for Art History|RKD]]', 650, rkdLink }, |
|||
{ 'BNE', '[[w:Biblioteca Nacional de España|BNE]]', 950, bneLink }, |
|||
{ 'NLR', '[[w:National Library of Romania|NLR]]', 1003, nlrLink }, |
|||
{ 'Sycomore', '[[w:National Assembly (France)|Sycomore]]', 1045, sycomoreLink }, |
|||
{ 'CH', '[[w:Hierarchy of the Catholic Church|CH]]', 1047, chLink }, |
|||
{ 'USCongress', '[[w:Biographical Directory of the United States Congress|US Congress]]', 1157, uscongressLink }, |
|||
{ 'TLS', '[[w:Theaterlexikon der Schweiz|TLS]]', 1362, tlsLink }, |
|||
{ 'SIKART', '[[w:SIKART|SIKART]]', 781, sikartLink }, |
|||
{ 'KULTURNAV', 'KulturNav', 1248, kulturnavLink }, |
|||
{ 'LCCNbook', '[[w:Library of Congress Control Number|LCCN]]', 1144, lccnBibliographicLink }, |
|||
{ 'OCLC', '[[w:OCLC|OCLC]]', 243, oclcLink }, |
|||
{ 'ISBN', '[[w:International Standard Book Number|ISBN]]', 212, isbnLink }, |
|||
{ 'NDLbook', '[[w:National Diet Library|NDL]]', 1054, ndlBibliographicLink }, |
|||
{ 'ISSN', '[[w:International Standard Serial Number|ISSN]]', 236, issnLink }, |
|||
{ 'DOI', '[[w:Digital object identifier|DOI]]', 356, doiLink }, |
|||
{ 'ERA', 'ERA', 1058, eraLink }, |
|||
{ 'ISMN', '[[w:International Standard Music Number|ISMN]]', 1208, ismnLink }, |
|||
{ 'SUDOCbook', '[[w:Système universitaire de documentation|SUDOC]]', 1025, sudocBibliographicLink }, |
|||
{ 'ZDB', 'ZDB', 1042, zdbLink }, |
|||
{ 'SWB', 'SWB', 1044, swbLink }, |
|||
{ 'NLM', '[[w:United States National Library of Medicine|NLM]]', 1055, nlmLink }, |
|||
{ 'SELIBRbook', '[[w:LIBRIS|SELIBR]]', 1182, selibrBibliographicLink }, |
|||
{ 'ISFDBser', '[[w:Internet Speculative Fiction Database|ISFDB]]', 1235, isfdbSerLink }, |
|||
{ 'ISFDBcon', '[[w:Internet Speculative Fiction Database|ISFDB]]', 1234, isfdbConLink }, |
|||
{ 'OL', '[[w:Open Library|Open Library]]', 648, openLibLink }, |
|||
{ 'ARCHIVE', '[[w:Internet Archive|Internet Archive]]', 724, archiveLink }, |
|||
{ 'Gutenbergebook', '[[w:Project Gutenberg|Project Gutenberg]]', 2034, gutenbergebookLink }, |
|||
{ 'DLI', '[[w:Digital Library of India|Digital Library of India]]', 2185, dliLink }, |
|||
{ 'HathiTrust', '[[w:HathiTrust|HathiTrust]]', 1844, hathitrustLink }, |
|||
{ 'Google', '[[w:Google Books|Google]]', 675, googleBooksLink }, |
|||
{ 'Europeana', '[[w:Europeana|Europeana]]', 727, europeanaLink }, |
|||
{ 'LT', '[[w:LibraryThing|LibraryThing]]', 1085, libraryThingLink }, |
|||
{ 'Dewey', '[[w:Dewey Decimal Classification|Dewey]]', 1036, ddcLink }, |
|||
{ 'NARAorg', '[[w:National Archives and Records Administration|NARA]]', 1223, naraOrgLink }, |
|||
{ 'NARAgeo', '[[w:National Archives and Records Administration|NARA]]', 1224, naraGeoLink }, |
|||
{ 'NARAsub', '[[w:National Archives and Records Administration|NARA]]', 1225, naraSubLink }, |
|||
{ 'NARAtype', '[[w:National Archives and Records Administration|NARA]]', 1226, naraTypeLink }, |
|||
{ 'ISFDBpub', '[[w:Internet Speculative Fiction Database|ISFDB]]', 1239, isfdbPubLink }, |
|||
{ 'LEMBP', 'LEMBP', 920, lembpLink }, |
|||
{ 'IMDB', '[[w:Internet Movie Database|IMDB]]', 345, imdbLink }, |
|||
{ 'Freebase', '[[w:Freebase|Freebase]]', 646, freebaseLink }, |
|||
{ 'PRDL', '[[w:Post-Reformation Digital Library|PRDL]]', 1463, PrdlLink }, |
|||
{ 'NUPILL-A', 'NUPILL', 1473, NupillALink }, |
|||
{ 'MacTutorB', '[[w:MacTutor History of Mathematics archive|MacTutor]]', 1563, MacTutorBLink }, |
|||
{ 'ATCL', 'ATCL', 1564, AtclLink }, |
|||
{ 'ELeM', 'ELeM', 1565, ElemLink }, |
|||
{ 'Imslp', '[[w:International Music Score Library Project|IMSLP]]', 839, ImslpLink }, |
|||
{ 'Odnb', '[[w:Oxford Dictionary of National Biography|ODNB]]', 1415, OdnbLink }, |
{ 'Odnb', '[[w:Oxford Dictionary of National Biography|ODNB]]', 1415, OdnbLink }, |
||
{ 'Gec', '[[w:Gran Enciclopèdia Catalana|GEC]]', 1296, GecLink }, |
|||
{ 'BN.br', '[[w:National Library of Brazil|BN.br]]', 4619, BNBRLink }, |
|||
{ 'OnlineBooks', '[[w:Online Books Page|Online Books Page]]', 5396, onlineBooksLink }, |
|||
{ 'Newspapers.com', '[[w:Newspapers.com|Newspapers.com]]', 7259, newspapersComLink }, |
|||
{ 'WORLDCATID', '[[w:WorldCat|WorldCat]]', 7859, worldcatLink }, |
|||
{ 'WKS', '[[Wikisource:Authority control|English Wikisource]]', false, wksLink }, |
|||
} |
} |
||
Line 685: | Line 735: | ||
local reqs = {} |
local reqs = {} |
||
reqs['MBA'] = { |
reqs['MBA'] = { |
||
{ 106, 177220 }, -- occupation -> singer |
|||
{ 31, 177220 }, -- instance of -> singer |
|||
{ 106, 13385019 }, -- occupation -> rapper |
|||
{ 31, 13385019 }, -- instance of -> rapper |
|||
{ 106, 639669 }, -- occupation -> musician |
|||
{ 31, 639669 }, -- instance of -> musician |
|||
{ 106, 36834 }, -- occupation -> composer |
|||
{ 31, 36834 }, -- instance of -> composer |
|||
{ 106, 488205 }, -- occupation -> singer-songwriter |
|||
{ 31, 488205 }, -- instance of -> singer-songwriter |
|||
{ 106, 183945 }, -- occupation -> record producer |
|||
{ 31, 183945 }, -- instance of -> record producer |
|||
{ 106, 10816969 }, -- occupation -> club DJ |
|||
{ 31, 10816969 }, -- instance of -> club DJ |
|||
{ 106, 130857 }, -- occupation -> DJ |
|||
{ 31, 130857 }, -- instance of -> DJ |
|||
{ 106, 158852 }, -- occupation -> conductor |
|||
{ 31, 158852 }, -- instance of -> conductor |
|||
{ 31, 215380 }, -- instance of -> band |
|||
} |
} |
||
function p._authorityControl(parentArgs) |
|||
local p = {} |
|||
local knownArgs = {} |
|||
for k, v in pairs(conf) do |
|||
function p.authorityControl( frame ) |
|||
table.insert(knownArgs, v[1]) |
|||
local parentArgs = frame:getParent().args |
|||
end |
|||
local wksid = frame.args.wksid |
|||
--Create rows |
|||
for k, v in pairs(knownArgs) do |
|||
local elements = {} |
|||
if parentArgs[v] == '' then |
|||
parentArgs[v] = nil |
|||
--redirect PND to GND |
|||
end |
|||
if (parentArgs.GND == nil or parentArgs.GND == '') and parentArgs.PND ~= nil and parentArgs.PND ~= '' then |
|||
end |
|||
parentArgs.GND = parentArgs.PND |
|||
end |
|||
--Create rows |
|||
local elements = {} |
|||
parentArgs.WKS = parentArgs.WKS or mw.title.getCurrentTitle().id |
|||
--redirect PND to GND |
|||
if parentArgs.GND == nil then |
|||
parentArgs.GND = parentArgs.PND |
|||
parentArgs.PND = nil |
|||
end |
|||
--en.wikisource backwards compatibility |
--en.wikisource backwards compatibility |
||
--redirect LCCNid to LCCN |
--redirect LCCNid to LCCN |
||
if parentArgs.LCCN == nil then |
|||
parentArgs.LCCN = parentArgs.LCCNid |
|||
parentArgs.LCCNid = nil |
|||
end |
|||
parentArgs.LCCN = parentArgs.LCCNid |
|||
end |
|||
--Wikidata fallback if requested |
|||
local item = mw.wikibase.getEntity() |
|||
--Wikidata fallback if requested |
|||
if item ~= nil and item.claims ~= nil then |
|||
local item = mw.wikibase.getEntityObject() |
|||
for _, params in pairs( conf ) do |
|||
if item ~= nil and item.claims ~= nil then |
|||
if params[3] then |
|||
for _, params in pairs( conf ) do |
|||
local val = parentArgs[params[1]] |
|||
if val == nil then |
|||
local val = parentArgs[params[1]] |
|||
local canUseWikidata = nil |
|||
if not val or val == '' then |
|||
if reqs[params[1]] ~= nil then |
|||
local canUseWikidata = nil |
|||
canUseWikidata = matchesWikidataRequirements(item, reqs[params[1]]) |
|||
else |
|||
canUseWikidata = matchesWikidataRequirements( item, reqs[params[1]] ) |
|||
canUseWikidata = true |
|||
else |
|||
end |
|||
canUseWikidata = true |
|||
if canUseWikidata then |
|||
end |
|||
local wikidataIds = getIdsFromWikidata(item, 'P' .. params[3]) |
|||
if canUseWikidata then |
|||
if wikidataIds[1] then |
|||
local wikidataIds = getIdsFromWikidata( item, 'P' .. params[3] ) |
|||
parentArgs[params[1]] = wikidataIds[1] |
|||
end |
|||
parentArgs[params[1]] = wikidataIds[1] |
|||
end |
|||
end |
|||
end |
|||
end |
|||
end |
|||
end |
|||
end |
|||
end |
|||
end |
|||
end |
|||
--Fallback for WORLDCATID |
|||
if parentArgs['WORLDCATID'] == nil then |
|||
--Fallback for WORLDCATID |
|||
if parentArgs['LCCN'] ~= nil then |
|||
local lccnParts = splitLccn(parentArgs['LCCN']) |
|||
if lccnParts then |
|||
local lccnParts = splitLccn( parentArgs['LCCN'] ) |
|||
local lccnid = lccnParts[1] .. lccnParts[2] .. append(lccnParts[3], '0', 6) |
|||
if lccnParts then |
|||
parentArgs['WORLDCATID'] = 'lccn-' .. lccnid |
|||
local lccnid = lccnParts[1] .. lccnParts[2] .. append( lccnParts[3], '0', 6 ) |
|||
end |
|||
parentArgs['WORLDCATID'] = 'lccn-' .. lccnid |
|||
elseif parentArgs['VIAF'] ~= nil then |
|||
end |
|||
parentArgs['WORLDCATID'] = 'viaf-' .. parentArgs['VIAF'] |
|||
end |
|||
parentArgs['WORLDCATID'] = 'viaf-' .. parentArgs['VIAF'] |
|||
end |
|||
end |
|||
--Configured rows |
|||
local rct = 0 |
|||
--Configured rows |
|||
for k, params in pairs( conf ) do |
|||
local val = parentArgs[params[1]] |
|||
for k, params in pairs( conf ) do |
|||
if val ~= nil then |
|||
local val = parentArgs[params[1]] |
|||
table.insert(elements, createRow(params[1], params[2] .. ':', val, params[4](val), true)) |
|||
if val and val ~= '' then |
|||
rct = rct + 1 |
|||
table.insert( elements, createRow( params[1], params[2] .. ':', val, params[4]( val ), true ) ) |
|||
end |
|||
rct = rct + 1 |
|||
end |
|||
end |
|||
local elementscats = '' |
|||
local authority_navbox = navbox({ |
|||
--Wikisource self reference |
|||
name = 'Authority control', |
|||
if wksid and wksid ~= '' then |
|||
listclass = 'hlist', |
|||
table.insert( elements, createRow( 'wksid', '', wksid, '[[Wikisource:Authority control|English Wikisource]]: [//en.wikisource.org/w/index.php?curid=' .. wksid .. ' ' .. wksid .. ']', true ) ) |
|||
navboxclass = 'wst-authority-control acContainer ws-noexport dynlayout-exempt', |
|||
end |
|||
group1 = '[[Wikisource:Authority control|Authority control]]' .. elementscats, |
|||
list1 = table.concat( elements ) |
|||
}) |
|||
local unknown_param_check = check_parameters({ |
|||
knownArgs = knownArgs, |
|||
parentArgs = parentArgs, |
|||
unknown = '[[Category:' .. 'Pages using authority control with unknown parameters' .. ']]', |
|||
known = '[[Category:' .. 'Pages using authority control with parameters' .. ']]' |
|||
}) or '' |
|||
return authority_navbox .. unknown_param_check |
|||
end |
|||
function p.authorityControl(frame) |
|||
local Navbox = require('Module:Navbox') |
|||
return p._authorityControl(getArgs(frame, {removeBlanks = false})) |
|||
local elementscats = '' |
|||
return Navbox._navbox( { |
|||
name = 'Authority control', |
|||
bodyclass = 'hlist', |
|||
navboxclass = 'acContainer ws-noexport dynlayout-exempt', |
|||
group1 = '[[Wikisource:Authority control|Authority control]]' .. elementscats, |
|||
list1 = table.concat( elements ) |
|||
} ) |
|||
end |
end |
||
Latest revision as of 13:57, 25 July 2024
This module depends on the following other modules: |
Usage
This module is used by the template {{authority control}} to access authority control data from Wikidata.
Adding additional items
Step one — formatting function
Add a new function to the module with the following format:
function fooLink( id ) return '[http://bar.com/baz' .. id .. ' ' .. id .. ']' .. getCatForId( 'FOO' ) end
Where:
fooLink
is the name of the function, which will be used in step two. It won't affect the performance of this module but the naming scheme for these functions is a camel case concatenation of the name of the authority control and the work "Link".http://bar.com/baz
is the URL of the authority control website (if it has one) up to the point of the ID number. This format assumes that the URL ends with the ID number. If not the case, the remaining URL should be added after the first "id"; i.e. at thefoo
in' .. id .. 'foo ' .. id .. ']'
FOO
is the name of the parameter used if automatic categories are to be added (currently this is only used in the User namespace). The naming scheme uses the name of the authority control in uppercase.
Step two — list
In the list under the title "List of displayed authority control IDs", add a new line in the following format:
{ 'FOO', '[[w:BAR|BAZ]]', nnn, fooLink },
Where:
FOO
is the name of the parameter used for manual input via the template. The naming scheme uses the name of the authority control in uppercase.BAR
is the page name of a page on Wikipedia corresponding to this authority control, to explain it to a curious user.BAZ
is the visible text displayed before the ID number in the authority control template. It will often be the same asFOO
.- The whole
[[w:BAR|BAZ]]
element is just the wikilink text that precedes the ID number in the authority control template; it can be replaced with text that would normally work as wikitext. If there is no page to which to link on Wikipedia, the entire element can be replaced with justBAZ
.
- The whole
nnn
is the number of the corresponding property on wikidata. For example, "VIAF identifier" on Wikidata is P214, in which case the number214
should be entered here.fooLink
is the name of the function that formats the link. It should match the name used in step one.
Notes
- The order of the lines under "List of displayed authority control IDs" is also the order in which they appear in the template.
WorldCat
The WorldCat link can be generated in different ways. The manual parameter WORLDCATID
overrides everything else. If that has not been used, a single link will be automatically generated if any of the following are present, in order of precedence: LCCN (library of Congress authority file number), VIAF, or OCLC. The latter would be a reference number to a work rather than an author. If none of the above is available, either through manual entry or held on Wikidata, no WorldCat link will be generated.
Wikisource links
Wikidata links
- List of generic properties, lists the authority control properties on Wikidata.
- List of works properties, lists other similar properties specific to works.
- Wikidata:Wikidata:Property proposal/Authority control, lists the proposed (but not yet available) authority control properties on Wikidata.
require('strict')
local p = {}
local getArgs = require('Module:Arguments').getArgs
local navbox = require('Module:Navbox')._navbox
local warning = require('Module:Warning')
local function check_parameters(args)
local knownArgs = {}
for k, v in pairs(args.knownArgs) do
knownArgs[v] = true
end
local parentArgs = args.parentArgs
local unknownArgs = {}
for k, v in pairs(parentArgs) do
if not knownArgs[k] then
table.insert(unknownArgs, k)
end
end
if #unknownArgs > 0 then
warning('Unknown parameters: ' .. table.concat(unknownArgs, ', '))
return args.unknown
end
if parentArgs ~= {} then
return args.known
end
return nil
end
local function getCatForId( id )
local title = mw.title.getCurrentTitle()
local namespace = title.namespace
if namespace == 0 then
return '[[Category:Main pages with authority control data]]'
elseif namespace == 2 and not title.isSubpage then
return '[[Category:User pages with ' .. id .. ' identifiers]]'
elseif namespace == 100 and not title.isSubpage then
return '[[Category:Portal pages with authority control data]]'
elseif namespace == 102 and not title.isSubpage then
return '[[Category:Author pages with authority control data]]'
else
return '[[Category:Miscellaneous pages with authority control data]]'
end
end
-- ** Author related authority controls follow **
local function viafLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '[https://viaf.org/viaf/' .. id .. ' ' .. id .. ']' .. getCatForId( 'VIAF' )
end
local function nkcLink( id )
return '[https://aleph.nkp.cz/F/?func=find-c&local_base=aut&ccl_term=ica=' .. id .. '&CON_LNG=ENG ' .. id .. ']'
end
local function nclLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '[https://aleweb.ncl.edu.tw/F/?func=accref&acc_sequence=' .. id .. '&CON_LNG=ENG ' .. id .. ']'
end
local function ndlLink( id )
return '[https://id.ndl.go.jp/auth/ndlna/' .. id .. ' ' .. id .. ']'
end
local function sudocLink( id )
if not string.match( id, '^%d%d%d%d%d%d%d%d[%dxX]$' ) then
return false
end
return '[https://www.idref.fr/' .. id .. ' ' .. id .. ']'
end
local function hlsLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '[https://www.hls-dhs-dss.ch/textes/f/F' .. id .. '.php ' .. id .. ']'
end
local function lirLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '[http://www.e-lir.ch/e-LIR___Lexicon.' .. id .. '.450.0.html ' .. id .. ']'
end
local function splitLccn( id )
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
local function append(str, c, length)
while str:len() < length do
str = c .. str
end
return str
end
local function lccnLink( id )
local parts = splitLccn( id )
if not parts then
return false
end
id = parts[1] .. parts[2] .. append( parts[3], '0', 6 )
return '[https://id.loc.gov/authorities/' .. id .. ' ' .. id .. ']' .. getCatForId( 'LCCN' )
end
--Returns the ISNI check digit isni must be a string where the 15 first elements are digits
local function 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 returns it as a 16 characters string or returns false if it's invalid
--See https://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier
local function validateIsni( id )
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 getIsniCheckDigit( id ) ~= string.char( id:byte( 16 ) ) then
return false
end
return id
end
local function isniLink( id )
id = validateIsni( id )
if not id then
return false
end
return '[https://isni.org/isni/' .. id .. ' ' .. id:sub( 1, 4 ) .. ' ' .. id:sub( 5, 8 ) .. ' ' .. id:sub( 9, 12 ) .. ' ' .. id:sub( 13, 16 ) .. ']' .. getCatForId( 'ISNI' )
end
local function orcidLink( id )
id = validateIsni( id )
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 .. ' ' .. id .. ']' .. getCatForId( 'ORCID' )
end
local function gndLink( id )
return '[https://d-nb.info/gnd/' .. id .. ' ' .. id .. ']' .. getCatForId( 'GND' )
end
local function BanglapediaEnglishLink( id )
return '[https://en.banglapedia.org/index.php?title=' .. id .. ' ' .. id .. ']' .. getCatForId( 'Banglapedia' )
end
local function WBPLNauthorID( id )
return '[http://dspace.wbpublibnet.gov.in:8080/jspui/browse?type=author&order=ASC&rpp=20&value=' .. id .. ' ' .. id .. ']' .. getCatForId( 'WBPLN' )
end
local function BHLcreatorID( id )
return '[https://www.biodiversitylibrary.org/creator/' .. id .. ' ' .. id .. ']' .. getCatForId( 'BHL' )
end
local function MunksRollLink( id )
return '[http://munksroll.rcplondon.ac.uk/Biography/Details/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Munks Roll' )
end
local function selibrLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '[https://libris.kb.se/auth/' .. id .. ' ' .. id .. ']' .. getCatForId( 'SELIBR' )
end
-- NCDA: NOID Check Digit Algorithm; see [[wikipedia:Check digit#NCDA]]
local ncda -- leave this as a local since NCDA is commonly used among ARK identifiers and could be useful for validating other identifiers later
do -- initialize these constants only once but scope them in a block so local namespace doesn't get cluttered with these
local r29s = [[0123456789bcdfghjkmnpqrstvwxz]] -- radix 29 "betanumeric" digit string
local r29n = r29s:len()
local r29v2d, r29d2v = {}, {}
for i = 1, r29n do
local v, d = i-1, r29s:sub(i, i)
r29v2d[v], r29d2v[d] = d, v
end
function ncda(sid)
local n, sum = sid:len(), 0
for i = 1, n do
sum = sum + i * (r29d2v[sid:sub(i, i)] or 0)
end
return r29v2d[sum % r29n]
end
end
local function bnfLink( id )
id = id:match('^cb(.+)$') or id --Strip 'cb' "shoulder" prefix before validation if provided
local FRBNF, check = id:match('^(%d%d%d%d%d%d%d%d)(.)$') --Eight decimal digits plus NCDA check
return nil ~= FRBNF and ncda('cb'..FRBNF) == check and '[https://catalogue.bnf.fr/ark:/12148/cb' .. id .. ' ' .. FRBNF .. ']' .. getCatForId( 'BNF' )
end
local function bpnLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '[http://www.biografischportaal.nl/persoon/' .. id .. ' ' .. id .. ']' .. getCatForId( 'BPN' )
end
local function ridLink( id )
return '[http://www.researcherid.com/rid/' .. id .. ' ' .. id .. ']' .. getCatForId( 'RID' )
end
local function bibsysLink( id )
return '[http://ask.bibsys.no/ask/action/result?cmd=&kilde=biblio&cql=bs.autid+%3D+' .. id .. '&feltselect=bs.autid ' .. id .. ']' .. getCatForId( 'BIBSYS' )
end
local function ulanLink( id )
return '[https://www.getty.edu/vow/ULANFullDisplay?find=&role=&nation=&subjectid=' .. id .. ' ' .. id .. ']' .. getCatForId( 'ULAN' )
end
local function nlaLink( id )
return '[https://librariesaustralia.nla.gov.au/search/display?dbid=auth&id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'NLA' )
end
local function mbLink( id )
-- TODO Implement some sanity checking regex
return '[https://musicbrainz.org/artist/' .. id .. ' ' .. id .. ']' .. getCatForId( 'MusicBrainz' )
end
local function calisLink( id )
return '[http://opac.calis.edu.cn/aopac/ajsp/detail.jsp?actionfrom=1&actl=CAL++' .. id .. ' ' .. id .. ']' .. getCatForId( 'CALIS' )
end
local function ciniiLink( id )
return '[https://ci.nii.ac.jp/author/' .. id .. ' ' .. id .. ']' .. getCatForId( 'CiNii' )
end
local function sbnLink( id )
return '[http://id.sbn.it/af/' .. id .. ' ' .. id .. ']' .. getCatForId( 'SBN' )
end
local function cbdbLink( id )
return '[http://db1.ihp.sinica.edu.tw/cbdbc/cbdbkmeng?~~AAA' .. id .. ' ' .. id .. ']' .. getCatForId( 'CBDB' )
end
local function leonoreLink( id )
return '[https://www.culture.gouv.fr/public/mistral/leonore_fr?ACTION=CHERCHER&FIELD_1=COTE&VALUE_1=' .. id .. ' ' .. id .. ']' .. getCatForId( 'Léonore' )
end
local function dbnlLink( id )
return '[https://www.dbnl.org/auteurs/auteur.php?id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'DBNL' )
end
local function rslLink( id )
return '[http://aleph.rsl.ru/F?func=find-b&find_code=SYS&adjacent=Y&local_base=RSL11&request=' .. id .. ' ' .. id .. ']' .. getCatForId( 'RSL' )
end
local function ptbnpLink( id )
return '[https://purl.pt/index/geral/aut/PT/' .. id .. '.html ' .. id .. ']' .. getCatForId( 'PTBNP' )
end
local function ntaLink( id )
-- Nationale Thesaurus Auteursnamen, Koninklijke Bibliotheek
return '[https://data.bibliotheken.nl/doc/thes/p' .. id .. ' ' .. id .. ']' .. getCatForId( 'NTA' )
end
local function vcbaLink( id )
return '[https://wikidata-externalid-url.toolforge.org/?p=8034&url_prefix=https://opac.vatlib.it/auth/detail/&id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'VcBA' )
end
local function nliLink( id )
return '[http://a20.libnet.ac.il/F?func=find-b&REQUEST=' .. id .. '&find_code=SYS&local_base=NNL10 ' .. id .. ']' .. getCatForId( 'NLI' )
end
local function nlcLink( id )
return '[http://opac.nlc.cn/F/?func=accref&acc_sequence=' .. id .. ' ' .. id .. ']' .. getCatForId( 'NLC' )
end
local function nukatLink( id )
return id .. getCatForId( 'NUKAT' )
-- linking format not currently available on Wikidata and cannot find anything suitable as http://www.nukat.edu.pl/
end
local function botanistLink( id )
local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'PATH') end)
return '[https://www.ipni.org/ipni/advAuthorSearch.do?find_abbreviation=' .. id2 .. ' ' .. id .. ']' .. getCatForId( 'IPNI' )
end
local function naraIdLink( id )
return '[https://research.archives.gov/person/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' )
end
local function ibdbLink( id )
return '[https://www.ibdb.com/person.php?id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'IBDB' )
end
local function isfdbIdLink( id )
return '[https://www.isfdb.org/cgi-bin/ea.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' )
end
local function findGraveLink( id )
return '[https://www.findagrave.com/memorial/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Find a Grave' )
end
local function mgpLink( id )
return '[https://genealogy.math.ndsu.nodak.edu/id.php?id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'MGP' )
end
local function rkdLink( id )
return '[http://explore.rkd.nl/nl/artists/' .. id .. ' ' .. id .. ']' .. getCatForId( 'RKD' )
end
local function bneLink( id )
return '[http://catalogo.bne.es/uhtbin/authoritybrowse.cgi?action=display&authority_id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'BNE' )
end
local function nlrLink( id )
return '[http://alephnew.bibnat.ro:8991/F?func=find-b&request=' .. id .. '&find_code=SYS&adjacent=Y&local_base=NLR10 ' .. id .. ']' .. getCatForId( 'NLR' )
end
local function chLink( id )
-- Catholic Hierarchy (database of bishops)
return '[https://www.catholic-hierarchy.org/bishop/b' .. id .. '.html ' .. id .. ']' .. getCatForId( 'Catholic Hierarchy' )
end
local function sycomoreLink( id )
return '[https://www.assemblee-nationale.fr/sycomore/fiche.asp?num_dept=' .. id .. ' ' .. id .. ']' .. getCatForId( 'Sycomore' )
end
local function uscongressLink( id )
return '[https://bioguide.congress.gov/scripts/biodisplay.pl?index=' .. id .. ' ' .. id .. ']'
end
local function kulturnavLink( id )
return '[https://kulturnav.org/language/en/' .. id .. ' id]'
end
local function sikartLink( id )
return '[https://www.sikart.ch/KuenstlerInnen.aspx?id=' .. id .. '&lng=en ' .. id .. ']'
end
local function tlsLink( id )
local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'WIKI') end)
return '[http://tls.theaterwissenschaft.ch/wiki/' .. id2 .. ' ' .. id .. ']'
end
local function PrdlLink( id )
return '[https://prdl.org/author_view.php?a_id=' .. id .. ' ' .. id .. ']'
end
local function NupillALink( id )
return '[https://www.literaturabrasileira.ufsc.br/autores/?id=' .. id .. ' ' .. id .. ']'
end
local function MacTutorBLink( id )
return '[https://www-history.mcs.st-andrews.ac.uk/Biographies/' .. id .. '.html ' .. id .. ']'
end
local function AtclLink( id )
return '[https://www.victorianresearch.org/atcl/show_author.php?aid=' .. id .. ' ' .. id .. ']'
end
local function ElemLink( id )
return '[http://www.elem.mx/autor/datos/' .. id .. ' ' .. id .. ']'
end
local function ImslpLink( id )
local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'WIKI') end)
return '[https://imslp.org/wiki/' .. id2 .. ' ' .. id .. ']'
end
local function OdnbLink( id )
return '[https://doi.org/10.1093/ref:odnb/' .. id .. ' ' .. id .. ']'
end
local function GecLink( id )
return '[https://www.enciclopedia.cat/enciclop%C3%A8dies/gran-enciclop%C3%A8dia-catalana/EC-GEC-' .. id .. '.xml ' .. id .. ']'
end
-- ** Subject related or general authority controls follow **
local function imdbLink( id )
return '[https://www.imdb.com/Name?' .. id .. ' ' .. id .. ']' .. getCatForId( 'IMDB' )
end
local function freebaseLink( id )
return '[https://freebase.toolforge.org/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Freebase' )
end
local function naraOrgLink( id )
return '[https://research.archives.gov/organization/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' )
end
local function naraGeoLink( id )
return '[https://research.archives.gov/geographic-reference/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' )
end
local function naraSubLink( id )
return '[https://research.archives.gov/topical-subject/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' )
end
local function naraTypeLink( id )
return '[https://research.archives.gov/specific-records-type/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' )
end
local function isfdbPubLink( id )
return '[https://www.isfdb.org/cgi-bin/publisher.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' )
end
local function isfdbConLink( id )
return '[https://www.isfdb.org/cgi-bin/pl.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' )
end
local function lembpLink( id )
--Lista de Encabezamientos de materia para las Bibliotecas Públicas = List of Subject Headings for Public Libraries (Spanish)
return '[http://id.sgcb.mcu.es/lem/ver/Autoridades/' .. id .. '/concept ' .. id .. ']' .. getCatForId( 'LEMBP' )
end
local function ddcLink( id )
return '[http://dewey.info/class/' .. id .. '/about ' .. id .. ']' .. getCatForId( 'DDC' )
end
local function libriVoxAuthorLink( id )
return '[https://librivox.org/author/' .. id .. ' ' .. id .. ']' .. getCatForId( 'LVA' )
end
local function GutenbergLink( id )
return '[https://www.gutenberg.org/ebooks/author/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Gutenberg' )
end
local function syrBiographicalLink( id )
return '[https://syriaca.org/person/' .. id .. ' ' .. id .. ']'
end
-- ** Book and work related authority controls follow **
local function isbnLink( id )
return '[[Special:BookSources/' .. id .. '|' .. id .. ']]' .. getCatForId( 'ISBN' )
-- ISBN currently only reads ISBN-13 numbers from Wikidata and ignores ISBN-10 numbers
end
local function oclcLink( id )
return '[https://www.worldcat.org/oclc/' .. id .. '?lang=en ' .. id .. ']' .. getCatForId( 'OCLC' )
end
local function openLibLink( id )
return '[https://openlibrary.org/books/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Open Library' )
end
local function libraryThingLink( id )
return '[https://www.librarything.com/work/' .. id .. ' ' .. id .. ']' .. getCatForId( 'LibraryThing' )
end
local function archiveLink( id )
return '[https://www.archive.org/details/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Internet Archive' )
end
local function gutenbergebookLink( id )
return '[https://www.gutenberg.org/ebooks/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Project Gutenberg' )
end
local function europeanaLink( id )
return '[https://www.europeana.eu/portal/record/' .. id .. '.html ' .. id .. ']' .. getCatForId( 'Europeana' )
end
local function lccnBibliographicLink( id )
return '[https://lccn.loc.gov/' .. id .. ' ' .. id .. ']' .. getCatForId( 'LCCN (bibliographic)' )
end
local function googleBooksLink( id )
return '[https://books.google.com/books?id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'Google Books' )
end
local function ndlBibliographicLink( id )
return '[https://iss.ndl.go.jp/books?op_id=1&any=' .. id .. ' ' .. id .. ']' .. getCatForId( 'NDL (bibliographic)' )
end
local function issnLink( id )
return '[https://www.worldcat.org/search?fq=x0:jrnl&q=n2:' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISSN' )
end
local function doiLink( id )
return '[https://doi.org/' .. id .. ' ' .. id .. ']' .. getCatForId( 'DOI' )
end
local function eraLink( id )
return '[http://lamp.infosys.deakin.edu.au/era/?page=jnamedet12f&eraid=' .. id .. ' ' .. id .. ']' .. getCatForId( 'ERA' )
end
local function ismnLink( id )
return id .. getCatForId( 'ISMN' )
-- no link currently available for ISMN on Wikidata and none found elsewhere
end
local function isfdbBookLink( id )
return '[https://www.isfdb.org/cgi-bin/title.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' )
end
local function isfdbSerLink( id )
return '[https://www.isfdb.org/cgi-bin/pe.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' )
end
local function sudocBibliographicLink( id )
return '[http://www.sudoc.fr/' .. id .. ' ' .. id .. ']' .. getCatForId( 'SUDOC' )
end
local function swbLink( id )
-- South-West German Library Network
return '[https://swb.bsz-bw.de/DB=2.1/PPNSET?PPN=' .. id .. '&INDEXSET=1 ' .. id .. ']' .. getCatForId( 'SWB' )
end
local function zdbLink( id )
-- Zeitschriftendatenbank
return '[http://dispatch.opac.d-nb.de/DB=1.1/CMD?ACT=SRCHA&IKT=8506&TRM=' .. id .. ' ' .. id .. ']' .. getCatForId( 'ZDB' )
end
local function nlmLink( id )
return '[http://locatorplus.gov/cgi-bin/Pwebrecon.cgi?DB=local&v1=1&ti=1,1&Search_Arg=' .. id .. '&Search_Code=0359&CNT=20&SID=1 ' ..id .. ']' .. getCatForId( 'NLM' )
end
local function selibrBibliographicLink( id )
return '[https://libris.kb.se/bib/' .. id .. ' ' .. id .. ']' .. getCatForId( 'SELIBR' )
end
local function dliLink( id )
return '[http://dli.gov.in/cgi-bin/DBscripts/allmetainfo.cgi?barcode=' .. id .. ' ' .. id .. ']' .. getCatForId( 'DLI' )
end
local function hathitrustLink( id )
return '[https://catalog.hathitrust.org/Record/' .. id .. ' ' .. id .. ']' .. getCatForId( 'HathiTrust' )
end
local function blSysnumLink( id )
return '[http://explore.bl.uk/BLVU1:LSCOP-ALL:BLL01' .. id .. ' ' .. id .. ']' .. getCatForId( 'BL' )
end
local function BNBRLink( id )
return '[http://acervo.bn.br/sophia_web/autoridade/detalhe/' .. id .. ' ' .. id .. ']' .. getCatForId( 'BN.br' )
end
local function onlineBooksLink( id )
return '[https://onlinebooks.library.upenn.edu/webbin/cinfo/' .. id .. ' ' .. id .. ']' .. getCatForId( 'OnlineBooks' )
end
local function newspapersComLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '[https://www.newspapers.com/title_' .. id .. ' ' .. id .. ']'
end
local function worldcatLink( id )
local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'PATH') end)
return '[https://www.worldcat.org/identities/' .. id2 .. ' ' .. id .. ']'
end
-- Entry for Wikisource using 'wgArticleID' as an authority. Should always be last
local function wksLink( id )
if not tonumber(id) then
return false
end
return '[//en.wikisource.org/w/index.php?curid=' .. id .. ' ' .. id .. ']'
end
-- End of authority control link formatting functions
local function getIdsFromWikidata( item, property )
local ids = {}
if not item.claims[property] then
return ids
end
for _, statement in pairs( item:getBestStatements( property ) ) do
if statement.mainsnak.datavalue then
table.insert( ids, statement.mainsnak.datavalue.value )
end
end
return ids
end
local function matchesWikidataRequirements( item, reqs )
for _, group in pairs( reqs ) do
local property = 'p' .. group[1]
local qid = group[2]
if item.claims[property] ~= nil then
for _, statement in pairs ( item.claims[property] ) do
if statement.mainsnak.datavalue ~= nil then
if statement.mainsnak.datavalue.value['numeric-id'] == qid then
return true
end
end
end
end
end
return false
end
local function createRow( id, label, rawValue, link, withUid )
if link then
if withUid then
return '* ' .. label .. ' <span class="uid plainlinks">' .. link .. '</span>\n'
else
return '* ' .. label .. ' <span class="plainlinks">' .. link .. '</span>\n'
end
else
return '* <span class="error">The ' .. id .. ' id ' .. rawValue .. ' is not valid.</span>[[Category:Wikisource articles with faulty authority control identifiers]]\n'
end
end
-- *** List of displayed authority control IDs ***
-- Authority controls will appear in the same order as the list below
--In this order: { name of the parameter, label, propertyId in Wikidata, formatting function },
local conf = {
{ 'VIAF', '[[w:Virtual International Authority File|VIAF]]', 214, viafLink },
{ 'LCCN', '[[w:Library of Congress Control Number|LCCN]]', 244, lccnLink },
{ 'ISNI', '[[w:International Standard Name Identifier|ISNI]]', 213, isniLink },
{ 'ORCID', '[[w:ORCID|ORCID]]', 496, orcidLink },
{ 'GND', '[[w:Integrated Authority File|GND]]', 227, gndLink },
{ 'Banglapedia', '[[w:Banglapedia|Banglapedia]]', 4255, BanglapediaEnglishLink },
{ 'WBPLN', 'WBPLN', 4343, WBPLNauthorID },
{ 'BHL', '[[w:Biodiversity Heritage Library|BHL]]', 4081, BHLcreatorID },
{ 'Munks Roll', '[[w:Munk%27s_Roll|Munks Roll]]', 2941, MunksRollLink },
{ 'SELIBR', '[[w:LIBRIS|SELIBR]]', 906, selibrLink },
{ 'SUDOC', '[[w:Système universitaire de documentation|SUDOC]]', 269, sudocLink },
{ 'BNF', '[[w:Bibliothèque nationale de France|BNF]]', 268, bnfLink },
{ 'BPN', '[[w:Biografisch Portaal|BPN]]', 651, bpnLink },
{ 'RID', '[[w:ResearcherID|ResearcherID]]', 1053, ridLink },
{ 'BIBSYS', '[[w:BIBSYS|BIBSYS]]', 1015, bibsysLink },
{ 'BL', '[[w:British Library|BL]]', 5199, blSysnumLink },
{ 'ULAN', '[[w:Union List of Artist Names|ULAN]]', 245, ulanLink },
{ 'HDS', '[[w:Historical Dictionary of Switzerland|HDS]]', 902, hlsLink },
{ 'LIR', '[[w:Historical Dictionary of Switzerland#Lexicon_Istoric_Retic|LIR]]', 886, lirLink },
{ 'MBA', '[[w:MusicBrainz|MusicBrainz]]', 434, mbLink },
{ 'NLA', '[[w:National Library of Australia|NLA]]', 409, nlaLink },
{ 'NDL', '[[w:National Diet Library|NDL]]', 349, ndlLink },
{ 'NCL', '[[w:National Central Library|NCL]]', 1048, nclLink },
{ 'NKC', '[[w:National Library of the Czech Republic|NKC]]', 691, nkcLink },
{ 'CALIS', 'CALIS', 270, calisLink },
{ 'CiNii', '[[w:CiNii|CiNii]]', 271, ciniiLink },
{ 'SBN', '[[w:Istituto Centrale per il Catalogo Unico|SBN]]', 396, sbnLink },
{ 'CBDB', 'CBDB', 497, cbdbLink },
{ 'Leonore', '[[w:Legion of Honour|Léonore]]', 640, leonoreLink },
{ 'DBNL', '[[w:Digital Library for Dutch Literature|DBNL]]', 723, dbnlLink },
{ 'RSL', '[[w:Russian State Library|RSL]]', 947, rslLink },
{ 'PTBNP', '[[w:Biblioteca Nacional de Portugal|PTBNP]]', 1005, ptbnpLink },
{ 'NTA', 'NTA', 1006, ntaLink },
{ 'VcBA', '[[w:Vatican Library|VcBA]]', 8034, vcbaLink },
{ 'NLI', '[[w:National Library of Israel|NLI]]', 949, nliLink },
{ 'NLC', '[[w:National Library of China|NLC]]', 1213, nlcLink },
{ 'NUKAT', 'NUKAT', 1207, nukatLink },
{ 'Botanist', '[[w:International Plant Names Index|Botanist]]', 428, botanistLink },
{ 'NARAid', '[[w:National Archives and Records Administration|NARA]]', 1222, naraIdLink },
{ 'IBDB', '[[w:Internet Broadway Database|IBDB]]', 1220, ibdbLink },
{ 'ISFDB', '[[w:Internet Speculative Fiction Database|ISFDB]]', 1233, isfdbIdLink },
{ 'LibriVoxAuth', '[[w:LibriVox|LibriVox]]', 1899, libriVoxAuthorLink },
{ 'Gutenberg', '[[w:Project Gutenberg|Project Gutenberg]]', 1938, GutenbergLink },
{ 'SBD', '[[w:Syriac Biographical Dictionary|SBD]]', 6934, syrBiographicalLink },
{ 'Grave', '[[w:Find a Grave|Find a Grave]]', 535, findGraveLink },
{ 'MGP', '[[w:Mathematics Genealogy Project|MGP]]', 549, mgpLink },
{ 'RKD', '[[w:Netherlands Institute for Art History|RKD]]', 650, rkdLink },
{ 'BNE', '[[w:Biblioteca Nacional de España|BNE]]', 950, bneLink },
{ 'NLR', '[[w:National Library of Romania|NLR]]', 1003, nlrLink },
{ 'Sycomore', '[[w:National Assembly (France)|Sycomore]]', 1045, sycomoreLink },
{ 'CH', '[[w:Hierarchy of the Catholic Church|CH]]', 1047, chLink },
{ 'USCongress', '[[w:Biographical Directory of the United States Congress|US Congress]]', 1157, uscongressLink },
{ 'TLS', '[[w:Theaterlexikon der Schweiz|TLS]]', 1362, tlsLink },
{ 'SIKART', '[[w:SIKART|SIKART]]', 781, sikartLink },
{ 'KULTURNAV', 'KulturNav', 1248, kulturnavLink },
{ 'LCCNbook', '[[w:Library of Congress Control Number|LCCN]]', 1144, lccnBibliographicLink },
{ 'OCLC', '[[w:OCLC|OCLC]]', 243, oclcLink },
{ 'ISBN', '[[w:International Standard Book Number|ISBN]]', 212, isbnLink },
{ 'NDLbook', '[[w:National Diet Library|NDL]]', 1054, ndlBibliographicLink },
{ 'ISSN', '[[w:International Standard Serial Number|ISSN]]', 236, issnLink },
{ 'DOI', '[[w:Digital object identifier|DOI]]', 356, doiLink },
{ 'ERA', 'ERA', 1058, eraLink },
{ 'ISMN', '[[w:International Standard Music Number|ISMN]]', 1208, ismnLink },
{ 'SUDOCbook', '[[w:Système universitaire de documentation|SUDOC]]', 1025, sudocBibliographicLink },
{ 'ZDB', 'ZDB', 1042, zdbLink },
{ 'SWB', 'SWB', 1044, swbLink },
{ 'NLM', '[[w:United States National Library of Medicine|NLM]]', 1055, nlmLink },
{ 'SELIBRbook', '[[w:LIBRIS|SELIBR]]', 1182, selibrBibliographicLink },
{ 'ISFDBser', '[[w:Internet Speculative Fiction Database|ISFDB]]', 1235, isfdbSerLink },
{ 'ISFDBcon', '[[w:Internet Speculative Fiction Database|ISFDB]]', 1234, isfdbConLink },
{ 'OL', '[[w:Open Library|Open Library]]', 648, openLibLink },
{ 'ARCHIVE', '[[w:Internet Archive|Internet Archive]]', 724, archiveLink },
{ 'Gutenbergebook', '[[w:Project Gutenberg|Project Gutenberg]]', 2034, gutenbergebookLink },
{ 'DLI', '[[w:Digital Library of India|Digital Library of India]]', 2185, dliLink },
{ 'HathiTrust', '[[w:HathiTrust|HathiTrust]]', 1844, hathitrustLink },
{ 'Google', '[[w:Google Books|Google]]', 675, googleBooksLink },
{ 'Europeana', '[[w:Europeana|Europeana]]', 727, europeanaLink },
{ 'LT', '[[w:LibraryThing|LibraryThing]]', 1085, libraryThingLink },
{ 'Dewey', '[[w:Dewey Decimal Classification|Dewey]]', 1036, ddcLink },
{ 'NARAorg', '[[w:National Archives and Records Administration|NARA]]', 1223, naraOrgLink },
{ 'NARAgeo', '[[w:National Archives and Records Administration|NARA]]', 1224, naraGeoLink },
{ 'NARAsub', '[[w:National Archives and Records Administration|NARA]]', 1225, naraSubLink },
{ 'NARAtype', '[[w:National Archives and Records Administration|NARA]]', 1226, naraTypeLink },
{ 'ISFDBpub', '[[w:Internet Speculative Fiction Database|ISFDB]]', 1239, isfdbPubLink },
{ 'LEMBP', 'LEMBP', 920, lembpLink },
{ 'IMDB', '[[w:Internet Movie Database|IMDB]]', 345, imdbLink },
{ 'Freebase', '[[w:Freebase|Freebase]]', 646, freebaseLink },
{ 'PRDL', '[[w:Post-Reformation Digital Library|PRDL]]', 1463, PrdlLink },
{ 'NUPILL-A', 'NUPILL', 1473, NupillALink },
{ 'MacTutorB', '[[w:MacTutor History of Mathematics archive|MacTutor]]', 1563, MacTutorBLink },
{ 'ATCL', 'ATCL', 1564, AtclLink },
{ 'ELeM', 'ELeM', 1565, ElemLink },
{ 'Imslp', '[[w:International Music Score Library Project|IMSLP]]', 839, ImslpLink },
{ 'Odnb', '[[w:Oxford Dictionary of National Biography|ODNB]]', 1415, OdnbLink },
{ 'Gec', '[[w:Gran Enciclopèdia Catalana|GEC]]', 1296, GecLink },
{ 'BN.br', '[[w:National Library of Brazil|BN.br]]', 4619, BNBRLink },
{ 'OnlineBooks', '[[w:Online Books Page|Online Books Page]]', 5396, onlineBooksLink },
{ 'Newspapers.com', '[[w:Newspapers.com|Newspapers.com]]', 7259, newspapersComLink },
{ 'WORLDCATID', '[[w:WorldCat|WorldCat]]', 7859, worldcatLink },
{ 'WKS', '[[Wikisource:Authority control|English Wikisource]]', false, wksLink },
}
-- Check that the Wikidata item has this property-->value before adding it
local reqs = {}
reqs['MBA'] = {
{ 106, 177220 }, -- occupation -> singer
{ 31, 177220 }, -- instance of -> singer
{ 106, 13385019 }, -- occupation -> rapper
{ 31, 13385019 }, -- instance of -> rapper
{ 106, 639669 }, -- occupation -> musician
{ 31, 639669 }, -- instance of -> musician
{ 106, 36834 }, -- occupation -> composer
{ 31, 36834 }, -- instance of -> composer
{ 106, 488205 }, -- occupation -> singer-songwriter
{ 31, 488205 }, -- instance of -> singer-songwriter
{ 106, 183945 }, -- occupation -> record producer
{ 31, 183945 }, -- instance of -> record producer
{ 106, 10816969 }, -- occupation -> club DJ
{ 31, 10816969 }, -- instance of -> club DJ
{ 106, 130857 }, -- occupation -> DJ
{ 31, 130857 }, -- instance of -> DJ
{ 106, 158852 }, -- occupation -> conductor
{ 31, 158852 }, -- instance of -> conductor
{ 31, 215380 }, -- instance of -> band
}
function p._authorityControl(parentArgs)
local knownArgs = {}
for k, v in pairs(conf) do
table.insert(knownArgs, v[1])
end
for k, v in pairs(knownArgs) do
if parentArgs[v] == '' then
parentArgs[v] = nil
end
end
--Create rows
local elements = {}
parentArgs.WKS = parentArgs.WKS or mw.title.getCurrentTitle().id
--redirect PND to GND
if parentArgs.GND == nil then
parentArgs.GND = parentArgs.PND
parentArgs.PND = nil
end
--en.wikisource backwards compatibility
--redirect LCCNid to LCCN
if parentArgs.LCCN == nil then
parentArgs.LCCN = parentArgs.LCCNid
parentArgs.LCCNid = nil
end
--Wikidata fallback if requested
local item = mw.wikibase.getEntity()
if item ~= nil and item.claims ~= nil then
for _, params in pairs( conf ) do
if params[3] then
local val = parentArgs[params[1]]
if val == nil then
local canUseWikidata = nil
if reqs[params[1]] ~= nil then
canUseWikidata = matchesWikidataRequirements(item, reqs[params[1]])
else
canUseWikidata = true
end
if canUseWikidata then
local wikidataIds = getIdsFromWikidata(item, 'P' .. params[3])
if wikidataIds[1] then
parentArgs[params[1]] = wikidataIds[1]
end
end
end
end
end
end
--Fallback for WORLDCATID
if parentArgs['WORLDCATID'] == nil then
if parentArgs['LCCN'] ~= nil then
local lccnParts = splitLccn(parentArgs['LCCN'])
if lccnParts then
local lccnid = lccnParts[1] .. lccnParts[2] .. append(lccnParts[3], '0', 6)
parentArgs['WORLDCATID'] = 'lccn-' .. lccnid
end
elseif parentArgs['VIAF'] ~= nil then
parentArgs['WORLDCATID'] = 'viaf-' .. parentArgs['VIAF']
end
end
--Configured rows
local rct = 0
for k, params in pairs( conf ) do
local val = parentArgs[params[1]]
if val ~= nil then
table.insert(elements, createRow(params[1], params[2] .. ':', val, params[4](val), true))
rct = rct + 1
end
end
local elementscats = ''
local authority_navbox = navbox({
name = 'Authority control',
listclass = 'hlist',
navboxclass = 'wst-authority-control acContainer ws-noexport dynlayout-exempt',
group1 = '[[Wikisource:Authority control|Authority control]]' .. elementscats,
list1 = table.concat( elements )
})
local unknown_param_check = check_parameters({
knownArgs = knownArgs,
parentArgs = parentArgs,
unknown = '[[Category:' .. 'Pages using authority control with unknown parameters' .. ']]',
known = '[[Category:' .. 'Pages using authority control with parameters' .. ']]'
}) or ''
return authority_navbox .. unknown_param_check
end
function p.authorityControl(frame)
return p._authorityControl(getArgs(frame, {removeBlanks = false}))
end
return p