Module:Authority control: Difference between revisions
Appearance
Content deleted Content added
No edit summary |
No edit summary |
||
Line 60: | Line 60: | ||
end |
end |
||
return str |
return str |
||
end |
|||
function isniLink( id ) |
|||
id = validateIsni( id ) |
|||
if not id then |
|||
return false |
|||
end |
|||
return '[http://isni-url.oclc.nl/isni/' .. id .. ' ' .. string.sub( id, 1, 4 ) .. ' ' .. string.sub( id, 5, 8 ) .. ' ' .. string.sub( id, 9, 12 ) .. ' ' .. string.sub( id, 13, 16 ) .. ']' .. getCatForId( 'ISNI' ) |
|||
end |
|||
function validateIsni( id ) |
|||
id = string.gsub( id, '[ %-]', '' ) |
|||
if string.match( id, '^%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d[%dxX]$' ) then |
|||
return id --validation of sum? |
|||
end |
|||
return false |
|||
end |
end |
||
Line 111: | Line 127: | ||
{ 'VIAF', '[[Virtual International Authority File|VIAF]]', 0, viafLink }, |
{ 'VIAF', '[[Virtual International Authority File|VIAF]]', 0, viafLink }, |
||
{ 'LCCN', '[[Library of Congress Control Number|LCCN]]', 0, lccnLink }, |
{ 'LCCN', '[[Library of Congress Control Number|LCCN]]', 0, lccnLink }, |
||
{ 'ISNI', '[[International Standard Name Identifier|ISNI]]', 0, isniLink }, |
|||
{ 'ORCID', '[[ORCID]]', 0, orcidLink }, |
{ 'ORCID', '[[ORCID]]', 0, orcidLink }, |
||
{ 'GND', '[[Universal Authority File|GND]]', 0, gndLink }, |
{ 'GND', '[[Universal Authority File|GND]]', 0, gndLink }, |
Revision as of 12:42, 6 April 2013
This Lua module is used on approximately 2,140,000 pages, or roughly 3% of all pages. To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them. |
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
Wikipedia:Authority control |
---|
This module depends on the following other modules: |
This module contains the code for the {{Authority control}} template.
Please see Template:Authority control/doc.
function getCatForId( id )
local title = mw.title.getCurrentTitle()
local namespace = title.namespace
if namespace == 0 then
return '[[Category:Wikipedia articles with ' .. id .. ' identifiers]]'
elseif namespace == 2 and not title.isSubpage then
return '[[Category:User pages with ' .. id .. ' identifiers]]'
else
return '[[Category:Miscellaneous pages with ' .. id .. ' identifiers]]'
end
end
function viafLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '[http://viaf.org/viaf/' .. id .. ' ' .. id .. ']' .. getCatForId( 'VIAF' )
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 '[http://id.loc.gov/authorities/names/' .. id .. ' ' .. id .. ']' .. getCatForId( 'LCCN' )
end
function splitLccn( id )
if string.match( id, '^%l%l?%l?%d%d%d%d%d%d%d%d%d?%d?$' ) then
id = string.gsub( id, '^(%l+)(%d+)(%d%d%d%d%d%d)$', '%1/%2/%3' )
end
if string.match( id, '^%l%l?%l?/%d%d%d?%d?/%d+$' ) then
return split( id, '/' )
end
return false
end
--Do split before deployment of mw.text.split
function split( str, c )
local parts = {}
local current = ''
local length = string.len( str )
for i = 1,length do
local ch = string.char( string.byte( str, i ) )
if ch == c then
table.insert( parts, current )
current = ''
else
current = current .. ch
end
end
table.insert( parts, current )
return parts
end
function append(str, c, length)
while string.len( str ) < length do
str = c .. str
end
return str
end
function isniLink( id )
id = validateIsni( id )
if not id then
return false
end
return '[http://isni-url.oclc.nl/isni/' .. id .. ' ' .. string.sub( id, 1, 4 ) .. ' ' .. string.sub( id, 5, 8 ) .. ' ' .. string.sub( id, 9, 12 ) .. ' ' .. string.sub( id, 13, 16 ) .. ']' .. getCatForId( 'ISNI' )
end
function validateIsni( id )
id = string.gsub( id, '[ %-]', '' )
if string.match( id, '^%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d[%dxX]$' ) then
return id --validation of sum?
end
return false
end
function orcidLink( id )
return '[http://orcid.org/' .. id .. ' ' .. id .. ']' .. getCatForId( 'ORCID' )
end
function gndLink( id )
return '[http://d-nb.info/gnd/' .. id .. ' ' .. id .. ']' .. getCatForId( 'GND' )
end
function selibrLink( id )
return '[http://libris.kb.se/auth/' .. id .. ' ' .. id .. ']' .. getCatForId( 'SELIBR' )
end
function swdLink( id )
return '[http://d-nb.info/gnd/' .. id .. ' ' .. id .. '][[Category:Wikipedia:Authority control (key words only)]] [[Category:Wikipedia articles with deprecated authority control identifiers (SWD)]]'
end
function bnfLink( id )
--with or without cd?
return '[http://catalogue.bnf.fr/ark:/12148/cb' .. id .. ' ' .. id .. ']' .. getCatForId( 'BNF' )
end
function bpnLink( id )
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 '[http://www.getty.edu/vow/ULANFullDisplay?find=&role=&nation=&subjectid=' .. id .. ' ' .. id .. ']' .. getCatForId( 'ULAN' )
end
function createRow( id, label, rawValue, link )
if link then
return '* ' .. label .. ' <span class="uid">' .. link .. '</span>\n'
else
return '* <span class="error">The ' .. id .. ' id ' .. rawValue .. ' is not valid.</span>[[Category:Wikipedia articles with faulty authority control identifiers (' .. id .. ')]]\n'
end
end
--In this order: name of the parameter, label, propertyId in Wikidata, formatting function
local conf = {
{ 'VIAF', '[[Virtual International Authority File|VIAF]]', 0, viafLink },
{ 'LCCN', '[[Library of Congress Control Number|LCCN]]', 0, lccnLink },
{ 'ISNI', '[[International Standard Name Identifier|ISNI]]', 0, isniLink },
{ 'ORCID', '[[ORCID]]', 0, orcidLink },
{ 'GND', '[[Universal Authority File|GND]]', 0, gndLink },
{ 'PND', '[[Universal Authority File|GND]]', 0, gndLink },
{ 'SELIBR', '[[LIBRIS]]', 0, selibrLink },
{ 'SWD', '[[Subject Headings Authority File|SWD]]', 0, swdLink },
{ 'BNF', '[[Bibliothèque nationale de France|BNF]]', 0, bnfLink },
{ 'BPN', '[[Biografisch Portaal|BPN]]', 0, bpnLink },
{ 'RID', '[[ResearcherID]]', 0, ridLink },
{ 'BIBSYS', '[[BIBSYS]]', 0, bibsysLink },
{ 'ULAN', '[[Union List of Artist Names|ULAN]]', 0, bpnLink }
}
local p = {}
function p.authorityControl( frame )
local parentArgs = frame:getParent().args
--Create rows
local elements = {}
--Worldcat
if parentArgs['WORLDCATID'] and parentArgs['WORLDCATID'] ~= '' then
table.insert( elements, createRow( 'WORLDCATID', '', parentArgs['WORLDCATID'], '[http://www.worldcat.org/identities/' .. parentArgs['WORLDCATID'] .. ' WorldCat]' ) ) --Validation?
elseif parentArgs['LCCN'] and parentArgs['LCCN'] ~= '' then
local lccnParts = splitLccn( parentArgs['LCCN'] )
if lccnParts then
table.insert( elements, createRow( 'LCCN', '', parentArgs['LCCN'], '[http://www.worldcat.org/identities/lccn-' .. lccnParts[1] .. lccnParts[2] .. '-' .. lccnParts[3] .. ' WorldCat]' ) )
end
end
--Configured rows
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 ) ) )
end
end
local Navbox = require('Module:Navbox')
return Navbox._navbox( {
name = 'Authority control',
bodyclass = 'hlist',
group1 = '[[Authority control]]',
list1 = table.concat( elements )
} )
end
return p