Module:Authority control
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.
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 **
function viafLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '[https://viaf.org/viaf/' .. id .. ' ' .. id .. ']' .. getCatForId( 'VIAF' )
end
function nkcLink( id )
return '[https://aleph.nkp.cz/F/?func=find-c&local_base=aut&ccl_term=ica=' .. id .. '&CON_LNG=ENG ' .. id .. ']'
end
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
function ndlLink( id )
return '[https://id.ndl.go.jp/auth/ndlna/' .. id .. ' ' .. id .. ']'
end
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
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
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
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
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
function append(str, c, length)
while str:len() < length do
str = c .. str
end
return str
end
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
--Validate ISNI (and ORCID) and retuns 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
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
--Returns the ISNI check digit isni must be a string where the 15 first elements are digits
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
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
function gndLink( id )
return '[https://d-nb.info/gnd/' .. id .. ' ' .. id .. ']' .. getCatForId( 'GND' )
end
function BanglapediaEnglishLink( id )
return '[https://en.banglapedia.org/index.php?title=' .. id .. ' ' .. id .. ']' .. getCatForId( 'Banglapedia' )
end
function WBPLNauthorID( id )
return '[http://dspace.wbpublibnet.gov.in:8080/jspui/browse?type=author&order=ASC&rpp=20&value=' .. id .. ' ' .. id .. ']' .. getCatForId( 'WBPLN' )
end
function BHLcreatorID( id )
return '[https://www.biodiversitylibrary.org/creator/' .. id .. ' ' .. id .. ']' .. getCatForId( 'BHL' )
end
function MunksRollLink( id )
return '[http://munksroll.rcplondon.ac.uk/Biography/Details/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Munks Roll' )
end
function selibrLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '[https://libris.kb.se/auth/' .. id .. ' ' .. id .. ']' .. getCatForId( 'SELIBR' )
end
function bnfLink( id )
--Add cb prefix if it has been removed
if not string.match( id, '^cb.+$' ) then
id = 'cb' .. id
end
return '[https://catalogue.bnf.fr/ark:/12148/' .. id .. ' ' .. id .. ']' .. getCatForId( 'BNF' )
end
function bpnLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '[http://www.biografischportaal.nl/persoon/' .. id .. ' ' .. id .. ']' .. getCatForId( 'BPN' )
end
function ridLink( id )
return '[http://www.researcherid.com/rid/' .. id .. ' ' .. id .. ']' .. getCatForId( 'RID' )
end
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
function ulanLink( id )
return '[https://www.getty.edu/vow/ULANFullDisplay?find=&role=&nation=&subjectid=' .. id .. ' ' .. id .. ']' .. getCatForId( 'ULAN' )
end
function nlaLink( id )
return '[https://librariesaustralia.nla.gov.au/search/display?dbid=auth&id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'NLA' )
end
function mbLink( id )
-- TODO Implement some sanity checking regex
return '[https://musicbrainz.org/artist/' .. id .. ' ' .. id .. ']' .. getCatForId( 'MusicBrainz' )
end
function calisLink( id )
return '[http://opac.calis.edu.cn/aopac/ajsp/detail.jsp?actionfrom=1&actl=CAL++' .. id .. ' ' .. id .. ']' .. getCatForId( 'CALIS' )
end
function ciniiLink( id )
return '[https://ci.nii.ac.jp/author/' .. id .. ' ' .. id .. ']' .. getCatForId( 'CiNii' )
end
function sbnLink( id )
return '[http://id.sbn.it/af/' .. id .. ' ' .. id .. ']' .. getCatForId( 'SBN' )
end
function cbdbLink( id )
return '[http://db1.ihp.sinica.edu.tw/cbdbc/cbdbkmeng?~~AAA' .. id .. ' ' .. id .. ']' .. getCatForId( 'CBDB' )
end
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
function dbnlLink( id )
return '[https://www.dbnl.org/auteurs/auteur.php?id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'DBNL' )
end
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
function ptbnpLink( id )
return '[https://purl.pt/index/geral/aut/PT/' .. id .. '.html ' .. id .. ']' .. getCatForId( 'PTBNP' )
end
function ntaLink( id )
-- Nationale Thesaurus Auteursnamen, Koninklijke Bibliotheek
return '[https://data.bibliotheken.nl/doc/thes/p' .. id .. ' ' .. id .. ']' .. getCatForId( 'NTA' )
end
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
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
function nlcLink( id )
return '[http://opac.nlc.cn/F/?func=accref&acc_sequence=' .. id .. ' ' .. id .. ']' .. getCatForId( 'NLC' )
end
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
function botanistLink( id )
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
function naraIdLink( id )
return '[https://research.archives.gov/person/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' )
end
function ibdbLink( id )
return '[https://www.ibdb.com/person.php?id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'IBDB' )
end
function isfdbIdLink( id )
return '[https://www.isfdb.org/cgi-bin/ea.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' )
end
function findGraveLink( id )
return '[https://www.findagrave.com/memorial/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Find a Grave' )
end
function mgpLink( id )
return '[https://genealogy.math.ndsu.nodak.edu/id.php?id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'MGP' )
end
function rkdLink( id )
return '[http://explore.rkd.nl/nl/artists/' .. id .. ' ' .. id .. ']' .. getCatForId( 'RKD' )
end
function bneLink( id )
return '[http://catalogo.bne.es/uhtbin/authoritybrowse.cgi?action=display&authority_id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'BNE' )
end
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
function chLink( id )
-- Catholic Hierarchy (database of bishops)
return '[https://www.catholic-hierarchy.org/bishop/b' .. id .. '.html ' .. id .. ']' .. getCatForId( 'Catholic Hierarchy' )
end
function sycomoreLink( id )
return '[https://www.assemblee-nationale.fr/sycomore/fiche.asp?num_dept=' .. id .. ' ' .. id .. ']' .. getCatForId( 'Sycomore' )
end
function uscongressLink( id )
return '[https://bioguide.congress.gov/scripts/biodisplay.pl?index=' .. id .. ' ' .. id .. ']'
end
function kulturnavLink( id )
return '[https://kulturnav.org/language/en/' .. id .. ' id]'
end
function sikartLink( id )
return '[https://www.sikart.ch/KuenstlerInnen.aspx?id=' .. id .. '&lng=en ' .. id .. ']'
end
function tlsLink( id )
id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'WIKI') end)
return '[http://tls.theaterwissenschaft.ch/wiki/' .. id2 .. ' ' .. id .. ']'
end
function PrdlLink( id )
return '[https://prdl.org/author_view.php?a_id=' .. id .. ' ' .. id .. ']'
end
function NupillALink( id )
return '[https://www.literaturabrasileira.ufsc.br/autores/?id=' .. id .. ' ' .. id .. ']'
end
function MacTutorBLink( id )
return '[https://www-history.mcs.st-andrews.ac.uk/Biographies/' .. id .. '.html ' .. id .. ']'
end
function AtclLink( id )
return '[https://www.victorianresearch.org/atcl/show_author.php?aid=' .. id .. ' ' .. id .. ']'
end
function ElemLink( id )
return '[http://www.elem.mx/autor/datos/' .. id .. ' ' .. id .. ']'
end
function ImslpLink( id )
id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'WIKI') end)
return '[https://imslp.org/wiki/' .. id2 .. ' ' .. id .. ']'
end
function OdnbLink( id )
return '[https://doi.org/10.1093/ref:odnb/' .. id .. ' ' .. id .. ']'
end
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 **
function imdbLink( id )
return '[https://www.imdb.com/Name?' .. id .. ' ' .. id .. ']' .. getCatForId( 'IMDB' )
end
function freebaseLink( id )
return '[https://freebase.toolforge.org/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Freebase' )
end
function naraOrgLink( id )
return '[https://research.archives.gov/organization/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' )
end
function naraGeoLink( id )
return '[https://research.archives.gov/geographic-reference/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' )
end
function naraSubLink( id )
return '[https://research.archives.gov/topical-subject/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' )
end
function naraTypeLink( id )
return '[https://research.archives.gov/specific-records-type/' .. id .. ' ' .. id .. ']' .. getCatForId( 'NARA' )
end
function isfdbPubLink( id )
return '[https://www.isfdb.org/cgi-bin/publisher.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' )
end
function isfdbConLink( id )
return '[https://www.isfdb.org/cgi-bin/pl.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' )
end
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
function ddcLink( id )
return '[http://dewey.info/class/' .. id .. '/about ' .. id .. ']' .. getCatForId( 'DDC' )
end
function libriVoxAuthorLink( id )
return '[https://librivox.org/author/' .. id .. ' ' .. id .. ']' .. getCatForId( 'LVA' )
end
function GutenbergLink( id )
return '[https://www.gutenberg.org/ebooks/author/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Gutenberg' )
end
function syrBiographicalLink( id )
return '[https://syriaca.org/person/' .. id .. ' ' .. id .. ']'
end
-- ** Book and work related authority controls follow **
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
function oclcLink( id )
return '[https://www.worldcat.org/oclc/' .. id .. '?lang=en ' .. id .. ']' .. getCatForId( 'OCLC' )
end
function openLibLink( id )
return '[https://openlibrary.org/books/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Open Library' )
end
function libraryThingLink( id )
return '[https://www.librarything.com/work/' .. id .. ' ' .. id .. ']' .. getCatForId( 'LibraryThing' )
end
function archiveLink( id )
return '[https://www.archive.org/details/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Internet Archive' )
end
function gutenbergebookLink( id )
return '[https://www.gutenberg.org/ebooks/' .. id .. ' ' .. id .. ']' .. getCatForId( 'Project Gutenberg' )
end
function europeanaLink( id )
return '[https://www.europeana.eu/portal/record/' .. id .. '.html ' .. id .. ']' .. getCatForId( 'Europeana' )
end
function lccnBibliographicLink( id )
return '[https://lccn.loc.gov/' .. id .. ' ' .. id .. ']' .. getCatForId( 'LCCN (bibliographic)' )
end
function googleBooksLink( id )
return '[https://books.google.com/books?id=' .. id .. ' ' .. id .. ']' .. getCatForId( 'Google Books' )
end
function ndlBibliographicLink( id )
return '[https://iss.ndl.go.jp/books?op_id=1&any=' .. id .. ' ' .. id .. ']' .. getCatForId( 'NDL (bibliographic)' )
end
function issnLink( id )
return '[https://www.worldcat.org/search?fq=x0:jrnl&q=n2:' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISSN' )
end
function doiLink( id )
return '[https://doi.org/' .. id .. ' ' .. id .. ']' .. getCatForId( 'DOI' )
end
function eraLink( id )
return '[http://lamp.infosys.deakin.edu.au/era/?page=jnamedet12f&eraid=' .. id .. ' ' .. id .. ']' .. getCatForId( 'ERA' )
end
function ismnLink( id )
return id .. getCatForId( 'ISMN' )
-- no link currently available for ISMN on Wikidata and none found elsewhere
end
function isfdbBookLink( id )
return '[https://www.isfdb.org/cgi-bin/title.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' )
end
function isfdbSerLink( id )
return '[https://www.isfdb.org/cgi-bin/pe.cgi?' .. id .. ' ' .. id .. ']' .. getCatForId( 'ISFDB' )
end
function sudocBibliographicLink( id )
return '[http://www.sudoc.fr/' .. id .. ' ' .. id .. ']' .. getCatForId( 'SUDOC' )
end
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
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
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
function selibrBibliographicLink( id )
return '[https://libris.kb.se/bib/' .. id .. ' ' .. id .. ']' .. getCatForId( 'SELIBR' )
end
function dliLink( id )
return '[http://dli.gov.in/cgi-bin/DBscripts/allmetainfo.cgi?barcode=' .. id .. ' ' .. id .. ']' .. getCatForId( 'DLI' )
end
function hathitrustLink( id )
return '[https://catalog.hathitrust.org/Record/' .. id .. ' ' .. id .. ']' .. getCatForId( 'HathiTrust' )
end
function blSysnumLink( id )
return '[http://explore.bl.uk/BLVU1:LSCOP-ALL:BLL01' .. id .. ' ' .. id .. ']' .. getCatForId( 'BL' )
end
function BNBRLink( id )
return '[http://acervo.bn.br/sophia_web/autoridade/detalhe/' .. id .. ' ' .. id .. ']' .. getCatForId( 'BN.br' )
end
function onlineBooksLink( id )
return '[https://onlinebooks.library.upenn.edu/webbin/cinfo/' .. id .. ' ' .. id .. ']' .. getCatForId( 'OnlineBooks' )
end
function newspapersComLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '[https://www.newspapers.com/title_' .. id .. ' ' .. id .. ']'
end
function worldcatLink( id )
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
function wksLink( id )
if id and wksid ~= '' then
return false
end
return '[//en.wikisource.org/w/index.php?curid=' .. id .. ' ' .. id .. ']' .. getCatForId( 'WKS' )
end
-- End of authority control link formatting functions
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
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
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]]', 0, 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
}
local p = {}
function p.authorityControl( frame )
local parentArgs = frame:getParent().args
local wksid = frame.args.wksid
--Create rows
local elements = {}
--redirect PND to GND
if (parentArgs.GND == nil or parentArgs.GND == '') and parentArgs.PND ~= nil and parentArgs.PND ~= '' then
parentArgs.GND = parentArgs.PND
end
--en.wikisource backwards compatibility
--redirect LCCNid to LCCN
if (parentArgs.LCCN == nil or parentArgs.LCCN == '') and parentArgs.LCCNid ~= nil and parentArgs.LCCNid ~= '' then
parentArgs.LCCN = parentArgs.LCCNid
end
--Wikidata fallback if requested
local item = mw.wikibase.getEntityObject()
if item ~= nil and item.claims ~= nil then
for _, params in pairs( conf ) do
if params[3] ~= 0 then
local val = parentArgs[params[1]]
if not val or val == '' 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 not parentArgs['WORLDCATID'] or parentArgs['WORLDCATID'] == '' then
if parentArgs['LCCN'] and parentArgs['LCCN'] ~= '' 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'] and parentArgs['VIAF'] ~= '' 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 and val ~= '' then
table.insert( elements, createRow( params[1], params[2] .. ':', val, params[4]( val ), true ) )
rct = rct + 1
end
end
--Wikisource self reference
if wksid and wksid ~= '' then
table.insert( elements, createRow( 'wksid', '', wksid, '[[Wikisource:Authority control|English Wikisource]]: [//en.wikisource.org/w/index.php?curid=' .. wksid .. ' ' .. wksid .. ']', true ) )
end
local Navbox = require('Module:Navbox')
local elementscats = ''
return 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 )
} )
end
return p