Module:Authority control/sandbox
This is the module sandbox page for Module:Authority control (diff). |
This module depends on the following other modules: |
Usage
[edit]This module is used by the template {{authority control}} to access authority control data from Wikidata.
Adding additional items
[edit]Step one — formatting function
[edit]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
[edit]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
[edit]- The order of the lines under "List of displayed authority control IDs" is also the order in which they appear in the template.
WorldCat
[edit]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
[edit]Wikidata links
[edit]- 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 unknownParentArgs = {}
local knownParentArgs = {}
for k, v in pairs(parentArgs) do
if knownArgs[k] then
table.insert(knownParentArgs, k)
else
table.insert(unknownParentArgs, k)
end
end
if #unknownParentArgs > 0 then
warning('Unknown parameters: ' .. table.concat(unknownParentArgs, ', '))
return args.unknown
end
if #knownParentArgs > 0 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 )
})
-- XXX: hack to get around writing into parentArgs above
local pframe = mw.getCurrentFrame():getParent()
parentArgs = pframe and pframe.args or {}
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