Module:Authority control/config: Difference between revisions

From The Goon Show Depository
en>MSGJ
(more tidying)
 
m (1 revision imported)
(No difference)

Revision as of 16:23, 8 December 2022

require('strict')
local p = {}

--[[==========================================================================]]
--[[                      Property formatting functions                       ]]
--[[==========================================================================]]
function p.bnfLink(id,label)
	if not id:match( '^c?b?%d%d%d%d%d%d%d%d[0-9bcdfghjkmnpqrstvwxz]$' ) then
		return false
	end
	if not id:match( '^cb.+$' ) then --add cb prefix if it has been removed
		id = 'cb'..id
	end
	return '[https://catalogue.bnf.fr/ark:/12148/'..id..' '..(label or 'France')..'] [https://data.bnf.fr/ark:/12148/'..id..' (data)]'
end

function p.dbiV(id)
	local part1, part2;
	if id:find ('_res', 1, true) then
		part1, part2 = id:match ('([^_]+)(_res.+)');						-- split at constant '_res'; part 2 nil when no constant '_res'
	else
		part1 = id;															-- part2 not in target
	end
	if part1:find ('[^%-%l]') then											-- if <part1> has anything but lowercase letters and hyphens
		return false;														-- invalid so return false
	else																	-- here when <part1> has only lowercase letters and hyphens
		if part1:match ('^%-') or part1:match ('%-$') then					-- first and last characters in <part1> must be lowercase letters
			return false;													-- invalid so return false
		end
	end
	if part2 then
		if not part2:match ('^_res%-%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$') then
			return false;													-- invalid so return false
		end
	end
	return id
end

--Validate ISNI (and ORCID) and retuns it as a 16 characters string or returns false if it's invalid
--See http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier
function p.validateIsni(id)
	--P213 (ISNI) format regex: [0-9]{4} [0-9]{4} [0-9]{4} [0-9]{3}[0-9X] (e.g. 0000-0000-6653-4145)
	--P496 (ORCID) format regex: 0000-000(1-[5-9]|2-[0-9]|3-[0-4])\d{3}-\d{3}[\dX] (e.g. 0000-0002-7398-5483)
	id = id:gsub( '[ %-]', '' ):upper()
	if not id:match( '^%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d[%dX]$' ) then
		return false
	end
	local total = 0
	for i = 1, 15 do
		local digit = id:byte( i ) - 48 --Get integer value
		total = (total + digit) * 2
	end
	local remainder = total % 11
	local result = (12 - remainder) % 11
	local checkdigit
	if result == 10 then
		checkdigit = 'X'
	else
		checkdigit=tostring( result )
	end
	if checkdigit ~= string.char( id:byte( 16 ) ) then
		return false
	end
	return id
end

local function splitLccn(id)
	--P244's format regex: (n|nb|nr|no|ns|sh)([4-9][0-9]|00|20[0-1][0-9])[0-9]{6} (e.g. n78039510)
	if id:match( '^%l%l?%l?%d%d%d%d%d%d%d%d%d?%d?$' ) then
		id = id:gsub( '^(%l+)(%d+)(%d%d%d%d%d%d)$', '%1/%2/%3' )
	end
	if id:match( '^%l%l?%l?/%d%d%d?%d?/%d+$' ) then
		return mw.text.split( id, '/' )
	end
	return false
end

function p.lccnV(id)
	local function append(str, c, length)
		while str:len() < length do
			str = c..str
		end
		return str
	end
	local parts = splitLccn(id) --e.g. n78039510
	if not parts then
		return false
	end
	local lccnType = parts[1] ~= 'sh' and 'names' or 'subjects'
	return lccnType .. '/' .. parts[1] .. parts[2] .. append( parts[3], '0', 6 )
end

function p.WorldCatLCCN(id)
	local lccnParts = splitLccn(id)
	if lccnParts and lccnParts[1] ~= 'sh' then
		return lccnParts[1]..lccnParts[2]..'-'..lccnParts[3]
	else
		return false
	end
end

				
function p.orcidV(id)
	id = p.validateIsni(id)
	if not id then
		return false
	end
	return id:sub( 1, 4 )..'-'..id:sub( 5, 8 )..'-'..id:sub( 9, 12 )..'-'..id:sub( 13, 16 )
end

function p.tlsV(id)
	id = id:gsub(' +', '_')
	local idlen = mw.ustring.len(id)
	if idlen < 4 or idlen > 90 then
		return false
	end
	local regex = '^%u'..string.rep("[%w_',%.%-%(%)%*%/–&]", idlen - 1)..'$'
	if not mw.ustring.match(id,regex ) then
		return false
	end
	return id
end

function p.uscgLink(id)
	local id2 = id:match( '^[1-7]%-%d%d?%d?%d?%d?$' ) or id:match( '^[1-7]%-%d%d?%d?%d?%d?%.%d*[1-9]$' )
	if id2 then
		return '[https://www.navcen.uscg.gov/pdf/lightlists/LightList%20V'..mw.ustring.sub(id2,1,1)..'.pdf '..id2..']'
	else
		return false
	end
end

function p.vcbaV(id)
	return id:match( '^%d%d%d\/[1-9]%d?%d?%d?%d?%d?$' ):gsub('\/', '_')
end

function p.worldcatidV(id)
	if not id:match( '^viaf%-%d+$' ) and
	   not id:match( '^lccn%-n[a-z]?[0-9%-]+$' ) and
	   not id:match( '^n[cps]%-.+$' ) then
		return false
	end
	return mw.uri.encode(id, 'PATH')
end

function p.zbmathV(id)
	local ps = {'%l[%l%-]*', '%.%l[%l%-]*', '%.%d*'}
	return id:match( '^'..ps[1]..'$' ) -- prefix with no capture options
	   or id:match( '^'..ps[1]..ps[2]..'$' ) -- prefix with first capture option
	   or id:match( '^'..ps[1]..ps[3]..'$' ) -- prefix with second capture option
	   or id:match( '^'..ps[1]..ps[2]..ps[3]..'$' ) -- prefix and both capture options
end

p.config = {
	{ 'AAG',
		property = 3372,
		section = 3,
		example = '1',
		link = 'https://www.aucklandartgallery.com/explore-art-and-ideas/artist/$1/',
		label = 'Auckland',
		pattern = '^%d+$',
		regex = '\d+'
	},
	{ 'ACM-DL',
		property = 864,
		section = 6,
		example = '12345678901',
		pattern = '^%d%d%d%d%d%d%d%d%d%d%d$',
		link = 'https://dl.acm.org/profile/$1',
		label = 'Association for Computing Machinery',
		idlink = 'ACM DL (identifier)',
		regex = '\d{11}'
	},
	{ 'ADB',
		property = 1907,
		section = 5,
		example = 'barton-sir-edmund-toby-71',
		patterns = {'^[a-z][-a-z]+-[1-3]%d%d?%d?%d?$', '^[a-z][-a-z]+-[1-9]%d?%d?%d?$'},
		link = 'http://adb.anu.edu.au/biography/$1',
		label = 'Australia',
	},
	{ 'admiralty',
		property = 3562,
		patterns = {'^[A-Q]%d%d%d%d$', '^[A-Q]%d%d%d%d%.%d+$'},
		section = 7,
		example = 'D1204.1',
		prefix = '[[Admiralty number|Admiralty]]'
	},
	{ 'AGSA',
		property = 6804,
		section = 3,
		example = '3625',
		pattern = '^[1-9]%d*$',
		link = 'https://www.agsa.sa.gov.au/collection-publications/collection/creators/_/$1/',
		label = 'South Australia',
		regex = '[1-9]\d*'
	},
	{ 'ARLHS',
		property = 2980,
		section = 7,
		example = 'LAT023',
		pattern = '^[A-Z][A-Z][A-Z]%d%d%d%d?[A-Z]?$',
		link = 'http://wlol.arlhs.com/lighthouse/$1.html',
		label = 'ARLHS',
		regex = '[A-Z]{3}\d{3,4}[A-Z]?',
	},
	{ 'autores.uy',
		property = 2558,
		section = 5,
		example = '12345',
		pattern = '^[1-9]%d?%d?%d?%d?$',
		link = 'https://autores.uy/autor/$1',
		label = 'Uruguay',
		regex = '[1-9]\d{0,4}',
	},
	{ 'AWR',
		property = 4186,
		section = 5,
		example = 'PR00768b',
		patterns = {'^[A-Z][A-Z][A-Z]%d%d%d%d[a-z]$', '^[A-Z][A-Z]%d%d%d%d%d[a-z]$'},
		link = 'http://www.womenaustralia.info/biogs/$1.htm',
		regex = '[A-Z]{3}\d{4})|([A-Z]{2}\d{5}',
		label = 'Australian Women\'s Register',
	},
	{ 'BIBSYS',
		property = 1015,
		section = 2,
		example = '1234567890123',
		patterns = {'^[1-9]%d?%d?%d?%d?%d?%d?%d?%d?$', '^[1-9]%d%d%d%d%d%d%d%d%d%d%d%d$'},
		valid = p.bibsysV,
		link = 'https://authority.bibsys.no/authority/rest/authorities/html/$1',
		label = 'Norway',
	},
	{ 'Bildindex', 
		property = 2092,
		section = 4,
		example = '1',
		pattern = '^%d+$',
		link = 'https://www.bildindex.de/document/obj$1',
		label = 'Bildindex (Germany)',
		regex = '\d+'
	},
	{ 'BNC',
		property = 1890,
		section = 2,
		example = '123456789',
		pattern = '^%d%d%d%d%d%d%d%d%d$',
		link = 'http://www.bncatalogo.cl/F?func=direct&local_base=red10&doc_number=$1',
		label = 'Chile',
		regex = '\d{9}'
	},
	{ 'BNE', 
		property = 950,
		section = 2,
		example = 'XX1234567',
		patterns = {'^[XF][XF]%d%d%d%d%d?%d?%d?$', '^a%d%d%d%d%d?%d?%d?$', '^bi[mcsv][aoei]%d%d%d%d%d%d%d%d%d%d$', '^Mi[sm][eoa]%d%d%d%d%d%d%d%d%d%d$'},
		link = 'http://catalogo.bne.es/uhtbin/authoritybrowse.cgi?action=display&authority_id=$1',
		label = 'Spain',
		regex = '(XX|FF|a)\d{4,7}|(bima|bimo|bica|bis[eo]|bivi|Mise|Mimo|Mima)\d{10}'
	},
	{ 'BNF',
		property = 268,
		section = 2,
		example = '123456789',
		regex = '\d{8}[0-9bcdfghjkmnpqrstvwxz]',
		link2 = p.bnfLink,
	},
	{ 'BNMM',
		property = 3788,
		section = 2,
		example = '000024044',
		pattern = '^%d%d%d%d%d%d%d%d%d$',
		link = 'https://catalogo.bn.gov.ar/F/?func=direct&local_base=BNA10&doc_number=$1',
		label = 'Argentina',
		regex = '\d{9}'
	},
	{ 'Botanist',
		property = 428,
		section = 6,
		example = 'L.',
		pattern = "^[%u%l%d%. '-]+$", --not easily/meaningfully implementable in Lua's regex since "(this)?" is not allowed, better than nothing
		link = 'https://www.ipni.org/ipni/advAuthorSearch.do?find_abbreviation=$1',
		label = 'International Plant Names Index',
		regex = "('t )?(d')?(de )?(la )?(van (der )?)?(Ma?c)?(De)?(Di)?\p{Lu}?C?['\p{Ll}]*([-'. ]*(van )?(y )?(d[ae][nr]?[- ])?(Ma?c)?[\p{Lu}bht]?C?['\p{Ll}]*)*\.? ?f?\.?"
	},
	{ 'BPN',
		property = 651,
		section = 5,
		example = '12345678',
		patterns = {'^%d%d%d%d%d%d%d%d$', '^0?%d%d%d%d%d%d%d$', '^0?0?%d%d%d%d%d%d$'},
		link = 'http://www.biografischportaal.nl/en/persoon/$1',
		label = 'Netherlands',
		regex = '\d{6,8}'
	},
	{ 'CANTICN',
		property = 9984,
		section = 2,
		example = '981058515460906706',
		pattern = '^981[0-1]%d%d%d%d%d%d%d%d%d06706$',
		link = 'https://cantic.bnc.cat/registre/$1',
		label = 'Catalonia',
		regex = '981(0|1)\d{9}06706'
	},
	{ 'CANTIC',
		property = 1273,
		section = 2,
		example = 'a12345678',
		pattern = '^a%d%d%d%d%d%d%d[%dx]$',
		link = 'http://cantic.bnc.cat/registres/CUCId/$1',
		label = 'Catalonia',
		regex = 'a\d{7}[0-9x]',
		suppressedbyproperty = {9984}--don't show CANTIC if CANTICN is present, since they both go to the Library of Catalonia and the library has deprecated CANTIC IDs in favor of CANTICN IDs
	},
	{ 'CCG',
		property = 3920,
		section = 7,
		example = 'A1761',
		patterns = {'^[NAIP]?[1-9]%d*$', '^[NAIP]?[1-9]%d*%.%d+$'},
		prefix = '[[CCG (identifier)|CCG]]',
		regex = '([NAIP])?[1-9]\d*(\.\d+)?'
	},
	{ 'CINII',
		property = 271,
		section = 6,
		example = 'DA12345678',
		pattern = '^DA%d%d%d%d%d%d%d[%dX]$',
		idlink = 'CiNii (identifier)',
		link = 'https://ci.nii.ac.jp/author/$1?l=en',
		label = 'CiNii (Japan)',
		regex = 'DA\d{7}[\dX]'
	},
	{ 'CWGC',
		property = 1908,
		section = 8,
		example = '1234567',
		pattern = '^[1-9]%d*$',
		link = 'https://www.cwgc.org/find-war-dead/casualty/$1/',
		label = 'Commonwealth War Graves Commission',
		regex = '[1-9]\d*'
	},
	{ 'DAAO',
		property = 1707,
		section = 4,
		example = 'rolf-harris',
		pattern  ='^[a-z%-]+%d*$',
		link = 'https://www.daao.org.au/bio/$1',
		label = 'Australian Artists',
		regex = '[a-z\-]+\d*'
	},
	{ 'DBI',
		property = 1986,
		section = 5,
		example = 'dante-alighieri',
		valid = p.dbiV,
		link = 'https://www.treccani.it/enciclopedia/$1_(Dizionario-Biografico)',
		label = 'Italian People',
		regex = '[a-z]+(\-[a-z]+)*(_res\-[0-9a-f]{8}(\-[0-9a-f]{4}){3}\-[0-9a-f]{12})?'
	},
	{ 'DBLP',
		property = 2456,
		section = 6,
		example = '89/4185-p',
		patterns = {'^%d%d%d?%/%d+-?[%d]*[%a]*-?[%d]*$', '^[%a]+%/[%w]*-?[%d]*$'},
		link = 'https://dblp.org/pid/$1',
		label = 'DBLP (computer science)',
		regex = '\d{2,3}\/\d+(-\d+)?[a-zA-Z-]*(-\d+)?|[a-z]\/[0-9A-Za-z]*(-\d+)?'
	},
	{ 'DIB',
		property = 6829,
		section = 5,
		example = '001953',
		pattern = '^0[01]%d%d%d%d%.?[A-D]?$',
		link = 'https://dib.cambridge.org/viewReadPage.do?articleId=$1',
		label = 'Ireland',
		regex = '0[01]\d{4}(\.[A-D])?'
	},
	{ 'DSI',
		property = 2349,
		section = 4,
		example = '1538',
		pattern = '^[1-9]%d*$',
		link = 'http://www.uni-stuttgart.de/hi/gnt/dsi2/index.php?table_name=dsi&function=details&where_field=id&where_value=$1',
		label = 'Scientific illustrators',
		regex = '[1-9]\d*'
	},
	{ 'DTBIO',
		property = 7902,
		section = 5,
		example = '118554700',
		pattern = '^1[0-9]%d%d%d%d%d%d%d?[0-9X]$',
		link = 'https://www.deutsche-biographie.de/pnd$1.html?language=en',
		label = 'Germany',
		regex = '1[0-9]{7,8}[0-9X]'
	},
	{ 'EMU',
		property = 4613,
		section = 2,
		example = '15409',
		pattern = '^%d%d?%d?%d?%d?%d?$',
		link = 'http://esu.com.ua/search_articles.php?id=$1',
		label = 'Ukraine',
		regex = '\d{1,6}'
	},
	{ 'FAST',
		property = 2163, 
		section = 8,
		example = '1916996',
		pattern = '^[1-9]%d?%d?%d?%d?%d?%d?%d?$',
		link = 'http://id.worldcat.org/fast/$1/',
		label = 'Faceted Application of Subject Terminology',
		regex = '[1-9]\d{0,7}'
	},
	{ 'FNZA',
		property = 6792,
		section = 4,
		example = '9785',
		pattern = '^[1-9]%d*$',
		link = 'https://findnzartists.org.nz/artist/$1/',
		label = 'New Zealand Artists',
		regex = '[1-9]\d*'
	},
	{ 'GND',
		property = 227,
		section = 2,
		example = '4079154-3',
		patterns = {'^1[012]?%d%d%d%d%d%d%d[0-9X]$', '^[47]%d%d%d%d%d%d%-%d$', '^[1-9]%d?%d?%d?%d?%d?%d?%d?%-[0-9X]$', '^3%d%d%d%d%d%d%d[0-9X]$'},
		link = 'https://d-nb.info/gnd/$1',
		label = 'Germany',
		regex = '1[012]?\d{7}[0-9X]|[47]\d{6}-\d|[1-9]\d{0,7}-[0-9X]|3\d{7}[0-9X]'
	},
	{ 'Google Scholar',
		property = 1960,
		section = 6,
		example = 'QPdLuj8AAAAJ',
		pattern = '^[%-_%d%l%u][%-_%d%l%u][%-_%d%l%u][%-_%d%l%u][%-_%d%l%u][%-_%d%l%u][%-_%d%l%u][%-_%d%l%u][%-_%d%l%u][%-_%d%l%u][%-_%d%l%u][%-_%d%l%u]$',
		link = 'https://scholar.google.com/citations?user=$1',
		label = 'Google Scholar',
		regex = '[-_0-9A-Za-z]{12}'
	},
	{ 'HDS',
		property = 902,
		section = 8,
		example = '050123',
		pattern = '^%d%d%d%d%d%d$',
		label = 'Historical Dictionary of Switzerland',
		link = 'https://hls-dhs-dss.ch/fr/articles/$1',
		regex = '\d{6}'
	},
	{ 'IAAF',
		property = 1146,
		section = 8,
		example = '123',
		pattern = '^%d+$',
		link = 'https://www.iaaf.org/athletes/_/$1',
		label = 'World Athletics',
		regex = '[0-9][0-9]*'
	},
	{ 'ICCU',
		property = 396,
		section = 2,
		example = 'CFIV000163',
		pattern = '^%u%u[%u0-3]V%d%d%d%d%d%d$',
		link = 'https://opac.sbn.it/nome/$1',
		label = 'Italy',
		regex = '\D{2}[A-Z0-3]V\d{6}'
	},
	{ 'ICIA',
		property = 1736,
		section = 4,
		example = '1',
		pattern = '^%d+$',
		link = 'https://www.imj.org.il/artcenter/newsite/en/?artist=$1',
		label = 'ICIA (Israel)',
		regex = '\d+'
	},
	{ 'IEU',
		property = 9070,
		section = 8,
		example = 'N\\A\\NationalAcademyofArtandArchitecture',
		pattern = '^[A-Z]\\[A-Z]\\%w+$',
		link = 'http://www.encyclopediaofukraine.com/display.asp?linkpath=pages\\$1',
		label = 'Internet Encyclopedia of Ukraine',
		regex = '[A-Z]\\[A-Z]\\[A-Za-z0-9]+'
	},
	{ 'ISNI',
		property = 213,
		section = 1,
		example = '0000-0000-6653-4145',
		prefix = '[[ISNI (identifier)|ISNI]]',
		valid = p.validateIsni,
		link = 'https://isni.org/isni/$1',
		regex = '[0-9]{4} [0-9]{4} [0-9]{4} [0-9]{3}[0-9X]'
	},
	{ 'J9U',
		property = 8189,
		section = 2,
		example = '987007305652505171',
		pattern = '^9870[0-1]%d%d%d%d%d%d%d%d05171$',
		link = 'http://uli.nli.org.il/F/?func=find-b&local_base=NLX10&find_code=UID&request=$1',
		label = 'Israel',
		regex = '9870(0|1)\d{8}05171'
	},
	{ 'Joconde',
		property = 347,
		section = 4,
		example = '12345678901',
		pattern = '^'..string.rep('[%-0-9A-Za-z]', 11)..'$',
		link = 'https://www.pop.culture.gouv.fr/notice/joconde/$1',
		label = 'Joconde (France)',
		regex = '[\-0-9A-Za-z]{11}'
	},
	{ 'KULTURNAV',
		property = 1248,
		section = 4,
		example = '12345678-1234-1234-1234-1234567890AB',
		idlink = 'KulturNav (identifier)',
		pattern = '^%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$',
		link = 'http://kulturnav.org/$1',
		label = 'KulturNav (Norway)',
		regex = '[0-9a-f]{8}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{12}'
	},
	{ 'LCCN',
		property = 244,
		section = 2,
		example = 'n78039510',
		valid = p.lccnV,
		link = 'https://id.loc.gov/authorities/$1',
		label = 'United States',
	},
	{ 'LIR',
		property = 886,
		section = 8,
		example = '1',
		pattern = '^%d+$',
		link = 'http://www.e-lir.ch/e-LIR___Lexicon.$1.450.0.html',
		label = 'Lexicon Istoric Retic (Switzerland)',
		regex = '\d+'
	},
	{ 'LNB',
		property = 1368,
		section = 2,
		example = '123456789',
		pattern = '^%d%d%d%d%d%d%d%d%d$',
		link = 'https://kopkatalogs.lv/F?func=direct&local_base=lnc10&doc_number=$1&P_CON_LNG=ENG',
		label = 'Latvia',
		regex = '\d{9}'
	},
	{ 'Marina Militare',
		property = 3863,
		section = 7,
		example='3856',
		pattern='^[1-9]%d*$',
		link='http://www.marina.difesa.it/cosa-facciamo/per-la-difesa-sicurezza/fari/Pagine/$1.aspx',
		label='Italy',
		regex='[1-9]\d*'
	},
	{ 'MarineTraffic',
		property = 3601,
		section = 7,
		example='1000004707',
		pattern='^%d%d%d%d%d%d%d%d%d%d$',
		link='https://www.marinetraffic.com/en/ais/details/lights/$1',
		label='MarineTraffic',
		regex='\d{10}'
	},
	{ 'MATHSN',
		property = 4955,
		section = 6,
		example='175270',
		pattern='^[1-9]%d%d%d%d%d?%d?$',
		link='https://mathscinet.ams.org/mathscinet/MRAuthorID/$1',
		label='MathSciNet',
		regex='[1-9]\d{4,6}'
	},
	{ 'MBA',
		property = 434,
		section = 8,
		example='12345678-1234-1234-1234-1234567890AB',
		cat = 'MusicBrainz',
		pattern='^%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$',
		link='https://musicbrainz.org/artist/$1',
		prefix='[[MBA (identifier)|MusicBrainz]]',
		label='artist',
		regex='[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
	},
	{ 'MBAREA',
		property = 982,
		section = 8,
		example='12345678-1234-1234-1234-1234567890AB',
		cat = 'MusicBrainz area',
		pattern='^%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$',
		prefix='[[MBAREA (identifier)|MusicBrainz]]',
		link='https://musicbrainz.org/area/$1',
		label='area',
		regex='[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
	},
	{ 'MBI',
		property = 1330,
		section = 8,
		example='12345678-1234-1234-1234-1234567890AB',
		cat = 'MusicBrainz instrument',
		pattern='^%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$',
		link='https://musicbrainz.org/instrument/$1',
		label='instrument',
		prefix='[[MBI (identifier)|MusicBrainz]]',
		regex='[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
	},
	{ 'MBL',
		property = 966,
		section = 8,
		example='12345678-1234-1234-1234-1234567890AB',
		cat = 'MusicBrainz label',
		pattern='^%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$',
		prefix='[[MBL (identifier)|MusicBrainz]]',
		label='label',
		link='https://musicbrainz.org/label/$1',
		regex='[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
	},
	{ 'MBP',
		property = 1004,
		section = 8,
		example='12345678-1234-1234-1234-1234567890AB',
		cat = 'MusicBrainz place',
		pattern='^%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$',
		link='https://musicbrainz.org/place/$1',
		label='place',
		prefix='[[MBP (identifier)|MusicBrainz]]',
		regex='[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
	},
	{ 'MBRG',
		property = 436,
		section = 8,
		example='12345678-1234-1234-1234-1234567890AB',
		cat = 'MusicBrainz release group',
		pattern='^%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$',
		link='https://musicbrainz.org/release-group/$1',
		label='release group',
		prefix='[[MBRG (identifier)|MusicBrainz]]',
		regex='[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
	},
	{ 'MBS',
		property = 1407,
		section = 8,
		example='12345678-1234-1234-1234-1234567890AB',
		cat = 'MusicBrainz series',
		pattern='^%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$',
		link='https://musicbrainz.org/series/$1',
		label='series',
		prefix='[[MBS (identifier)|MusicBrainz]]',
		regex='[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
	},
	{ 'MBW',
		property = 435,
		section = 8,
		example='12345678-1234-1234-1234-1234567890AB',
		cat = 'MusicBrainz work',
		pattern='^%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x$',
		link='https://musicbrainz.org/work/$1',
		label='work',
		prefix='[[MBW (identifier)|MusicBrainz]]',
		regex='[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
	},
	{ 'MGP',
		property = 549,
		section = 6,
		example='123456',
		pattern='^%d%d?%d?%d?%d?%d?$',
		link='https://www.mathgenealogy.org/id.php?id=$1',
		label='Mathematics Genealogy Project',
		regex='\d{1,6}'
	},
	{ 'NARA',
		property = 1225,
		section = 8,
		example='12345678',
		pattern='^[1-9]%d?%d?%d?%d?%d?%d?%d?%d?$',
		link='https://catalog.archives.gov/id/$1',
		label='National Archives (US)',
		regex='^([1-9]\d{0,8})$'
	},
	{ 'NCL',
		property = 1048,
		section = 2,
		example='1081436',
		pattern='^%d+$',
		link='http://aleweb.ncl.edu.tw/F/?func=accref&acc_sequence=$1&CON_LNG=ENG',
		label='Taiwan',
		regex='\d+'
	},
	{ 'NDL',
		property = 349,
		section = 2,
		example = '012345678',
		link = 'https://id.ndl.go.jp/auth/ndlna/$1',
		patterns = {'^a1%d?%d%d%d%d%d%d%d%d', '^s?%d?%d%d%d%d%d%d%d%d'},
		label = 'Japan',
		regex = '(a1|s)?[0-9]?\d{8}',
	},
	{ 'NGA', property = 3563, section = 7, example='114-7721.2', pattern='^11[0-6]%-%d+%.?%d*$', link='https://wikidata-externalid-url.toolforge.org/?url=https%3A%2F%2Fmsi.nga.mil%2FqueryResults%3Fpublications%2Fngalol%2Flights-buoys%3Fvolume%3D%251%26featureNumber%3D%252%26includeRemovals%3Dfalse%26output%3Dhtml&exp=(%5Cd%7B3%7D)-(.*)&id=$1', label='NGA', cat='NGA', regex='11[0-6]-\d+(\.\d+)?'},
	{ 'NGV', property = 2041, section = 3, example='12354', pattern='^%d+$', link='https://www.ngv.vic.gov.au/explore/collection/artist/$1/', label='Victoria', cat='NGV', regex='\d+'},
	{ 'NKC', property = 691, section = 2, example='abcd12345678901234', pattern='^[a-z][a-z][a-z]?[a-z]?%d%d%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?$', regex='[a-z]{2,4}[0-9]{2,14}', link='https://aleph.nkp.cz/F/?func=find-c&local_base=aut&ccl_term=ica=$1&CON_LNG=ENG', label='Czech Republic', cat='NKC'},
	{ 'NLA', property = 409, section = 2, example='123456789012', pattern='^[1-9]%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?$', regex='[1-9][0-9]{0,11}', link='https://nla.gov.au/anbd.aut-an$1', label='Australia', cat='NLA' },
	{ 'NLG', property = 3348, section = 2, example='12345678', regex='[1-9]\d*', pattern='^[1-9]%d*$', link='https://data.nlg.gr/resource/authority/record$1', label='Greece', cat='NLG'},
	{ 'NLK',
		property = 5034,
		section = 2,
		example = 'KAB197000000',
		regex = '(KAB|KAC|KSH)([0-9]{4}|[0-9]{4}[a-zA-Z])[0-9]{4,6}',
		link = 'https://lod.nl.go.kr/resource/$1',
		label = 'Korea',
		patterns = {'^KAB%d%d%d%d%a?%d%d%d%d%d?%d?$', '^KAC%d%d%d%d%a?%d%d%d%d%d?%d?$', '^KSH%d%d%d%d%a?%d%d%d%d%d?%d?$'},
	},
	{ 'NLR', property = 1003, section = 2, example='123456789', pattern='^%d%d%d%d%d%d%d%d%d$', link='http://aleph.bibnat.ro:8991/F/?func=direct&local_base=NLR10&doc_number=$1', label='Romania', cat='NLR', regex='\d{9}'},
	{ 'NSK', property = 1375, section = 2, example='123456789', pattern='^%d%d%d%d%d%d%d%d%d$', link='http://katalog.nsk.hr/F/?func=direct&doc_number=$1&local_base=nsk10', label='Croatia', cat='NSK', regex='\d{9}'},
	{ 'NTA', property = 1006, section = 2, example='12345678X', pattern='^%d%d%d%d%d%d%d%d[%dX]$', link='http://data.bibliotheken.nl/id/thes/p$1', label='Netherlands', cat='NTA', regex='\d{8}[\dX]'},
	{ 'ORCID', property = 496, section = 1, example='0000-0002-7398-5483', prefix = '[[ORCID (identifier)|ORCID]]', valid=p.orcidV, link='https://orcid.org/$1', cat='ORCID'},
	{ 'PIC', property = 2750, section = 4, example='1', pattern='^[1-9]%d*$', link='https://pic.nypl.org/constituents/$1', label='Photographers\' Identities', cat='PIC', regex='[1-9]\d*'},
	{ 'PLWABN', property = 7293, section = 2, example='9812345678905606', pattern='^981%d%d%d%d%d%d%d%d05606*$', link='http://mak.bn.org.pl/cgi-bin/KHW/makwww.exe?BM=1&NU=1&IM=4&WI=$1', label='Poland', cat='PLWABN', regex='981[0-9]{8}05606'},
	{ 'NLP',
		property = 1695,
		section = 2,
		example = '9810123456789012345',
		patterns  = {'^9810%d+$', '^A%d%d%d%d%d%d%d[%dX]$'},
		link = 'https://tools.wmflabs.org/wikidata-externalid-url?p=1695&id=$1',
		label = 'Poland',
		regex = '9810[0-9]\d* or A[0-9]{7}[0-9X]',
		suppressedbyproperty = {7293}
	},
	{ 'Publons', property = 3829, section = 6, example='2776255', pattern='^%d+$', link='https://publons.com/author/$1/', label='Publons (researchers)', cat='Publons', regex='\d+'},
	{ 'RID',
		property = 1053,
		section = 6,
		example = 'A-1234-1934',
		patterns = {'^[A-Z][A-Z]?[A-Z]?%-%d%d%d%d%-19%d%d$', '^[A-Z][A-Z]?[A-Z]?%-%d%d%d%d%-20%d%d$'},
		link = 'https://www.researcherid.com/rid/$1',
		label = 'ResearcherID',
		regex = '[A-Z]{1,3}-\d{4}-(19|20)\d\d'
	},
	{ 'RISM',
		property = 5504,
		section = 8,
		example = 'pe30006410',
		prefix = '[[RISM (identifier)|RISM (France)]]',
		patterns = {'^pe[1-9]%d*$', '^ks[1-9]%d*$', '^[1-9]%d*$'},
		link = 'https://opac.rism.info/search?id=$1',
		regex = '(pe|ks)?\[1-9]d*'
	},
	{ 'RERO', property = 3065, section = 8, example='02-A012345678', prefix = '[[RERO (identifier)|RERO (Switzerland)]]', pattern='^0[1-2]%-[A-Z%d][A-Z%d]?[A-Z%d]?[A-Z%d]?[A-Z%d]?[A-Z%d]?[A-Z%d]?[A-Z%d]?[A-Z%d]?[A-Z%d]?$', link='http://data.rero.ch/$1', cat='RERO', regex='0[1-2]-[A-Z0-9]{1,10}'},
	{ 'RKDartists', property = 650, section = 4, example='123456', pattern='^[1-9]%d?%d?%d?%d?%d?$', link='https://rkd.nl/en/explore/artists/$1', label='RKD Artists (Netherlands)', cat='RKDartists', regex='[1-9]\d{0,5}'},
	{ 'RKDID', property = 350, section = 4, example='123456', pattern='^[1-9]%d?%d?%d?%d?%d?$', link='https://rkd.nl/nl/explore/images/$1', label='RKD ID (Netherlands)', cat='RKDID', regex='[1-9]\d{0,5}'},
	{ 'RSL', property = 947, section = 2, example='123456789', pattern='^%d%d?%d?%d?%d?%d?%d?%d?%d?$', link='http://aleph.rsl.ru/F?func=find-b&find_code=SYS&adjacent=Y&local_base=RSL11&request=$1&CON_LNG=ENG', label='Russia', cat='RSL', regex='\d{1,9}'},
	{ 'Scopus', property = 1153, section = 6, example='7005487412', pattern='^[1-9]%d%d%d%d%d%d%d%d%d%d?$', link='https://www.scopus.com/authid/detail.uri?authorId=$1', label='Scopus author', cat='Scopus', regex='[1-9]\d{9,10}'},
	{ 'SELIBR', property = 906, section = 2, example='123456', pattern='^[1-9]%d%d%d%d%d?$', link='https://libris.kb.se/auth/$1', label='Sweden', cat='SELIBR', regex='[1-9]\d{4,5}'},
	{ 'SIKART', property = 781, section = 4, example='123456789', pattern='^%d%d%d%d%d%d%d%d?%d?$', link='http://www.sikart.ch/KuenstlerInnen.aspx?id=$1&lng=en', label='SIKART (Switzerland)', cat='SIKART', regex='\d{7,9}'},
	{ 'SNAC-ID', property = 3430, section = 8, example='A', pattern='^%d*[A-Za-z][0-9A-Za-z]*$', link='https://snaccooperative.org/ark:/99166/$1', label='Social Networks and Archival Context', cat='SNAC-ID', regex='\d*[A-Za-z][0-9A-Za-z]*' },
	{ 'SUDOC', property = 269, section = 8, example='026927608', prefix = '[[SUDOC (identifier)|SUDOC (France)]]', pattern='^%d%d%d%d%d%d%d%d[%dxX]$', link='https://www.idref.fr/$1', cat='SUDOC', regex='(\d{8}[\dX]|)'},
	{ 'TA98', property = 1323, section = 6, example='A12.3.45.678', pattern='^A%d%d%.%d%.%d%d%.%d%d%d[FM]?$', link='http://tools.wmflabs.org/wikidata-externalid-url/?p=1323&url_prefix=https:%2F%2Fwww.unifr.ch%2Fifaa%2FPublic%2FEntryPage%2FTA98%20Tree%2FEntity%20TA98%20EN%2F&url_suffix=%20Entity%20TA98%20EN.htm&id=$1', label='Terminologia Anatomica', regex='A\d{2}\.\d\.\d{2}\.\d{3}[FM]?'},
	{ 'TDVİA', property = 7314, section = 8, example = 'asim-b-behdele', pattern='^[%d%l/-]+$', link='https://islamansiklopedisi.org.tr/$1', label='İslâm Ansiklopedisi', cat='TDVİA', regex='[0-9a-z/-]+' },
	{ 'TePapa', property = 3544, section = 3, example='1', pattern='^%d+$', link='https://collections.tepapa.govt.nz/agent/$1', label='Te Papa (New Zealand)', cat='TePapa', regex='\d+' },
	{ 'TLS',  property = 1362, section = 8, example='Abcd', regex="\p{Lu}[\p{L}\d_',\.\-\(\)\*\/–&]{3,89}", valid=p.tlsV, link='http://tls.theaterwissenschaft.ch/wiki/$1', label='Theaterlexikon (Switzerland)', cat='TLS'},
	{ 'Trove', property = 1315, section = 8, example='12345678', prefix = '[[Trove (identifier)|Trove (Australia)]]', pattern='^[1-9]%d%d%d%d%d%d?%d?$', link='https://trove.nla.gov.au/people/$1', cat='Trove', regex='[1-9]\d{5,7}'},
	{ 'UKPARL', property = 6213, section = 8, example='AQUupyiR', pattern='^[a-zA-Z%d][a-zA-Z%d][a-zA-Z%d][a-zA-Z%d][a-zA-Z%d][a-zA-Z%d][a-zA-Z%d][a-zA-Z%d]$', link='https://id.parliament.uk/$1', label='UK Parliament', cat='UKPARL', regex='[a-zA-Z\d]{8}' },
	{ 'ULAN', property = 245, section = 4, example='500123456', pattern='^500%d%d%d%d%d%d$', link='https://www.getty.edu/vow/ULANFullDisplay?find=&role=&nation=&subjectid=$1', label='Artist Names (Getty)', cat='ULAN', regex='500\d{6}'},
	{ 'USCG', property = 3723, section = 7, example='6-0695', prefix='[[USCG (identifier)|USCG]]', link2=p.uscgLink, cat='USCG', regex='[1-7]-\d{1,5}(.[1-9])?'},
	{ 'USCongress', property = 1157, section = 8, example='A000123', idlink = 'US Congress (identifier)', pattern='^[A-Z]00[01]%d%d%d$', link='http://bioguide.congress.gov/scripts/biodisplay.pl?index=$1', label='US Congress', cat='USCongress', regex='[A-Z]00[01]\d{3}' },
	{ 'VcBA',
		property = 8034,
		section = 2,
		example = '494/9793',
		valid = p.vcbaV,
		link = 'https://opac.vatlib.it/auth/detail/$1',
		label = 'Vatican',
		regex = '\d{3}\/[1-9]\d{0,5}'
	},
	{ 'VIAF',
		property = 214,
		section = 1,
		example = '123456789',
		prefix = '[[VIAF (identifier)|VIAF]]',
		patterns = {'^[1-9]%d%d?%d?%d?%d?%d?%d?%d?$', '^[1-9]%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d?%d?%d?$'},
		regex = '[1-9]\d(\d{0,7}|\d{17,20}',
		link = 'https://viaf.org/viaf/$1',
	},
	{ 'WORLDCATID',
		property = 7859,
		section = 1,
		example = 'lccn-n78-95332',
		idlink = 'WorldCat Identities (identifier)',
		valid = p.worldcatidV,
		link = 'https://www.worldcat.org/identities/$1/',
		label = 'WorldCat',
		regex = 'viaf-\d+|lccn-n[a-z]?[0-9\-]+|n[cps]-.+'
	},
	{ 'VIAF', --WorldCat (via VIAF)
		property = 214,
		section = 1,
		example = '123456789',
		patterns = {'^[1-9]%d%d?%d?%d?%d?%d?%d?%d?$', '^[1-9]%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d?%d?%d?$'},
		link = 'https://www.worldcat.org/identities/containsVIAFID/$1',
		label = 'WorldCat (via VIAF)',
		suppressedbyproperty = {7859},
		cat = 'WorldCat-VIAF',
		errorcat = 'VIAF'
	},
	{ 'LCCN', --WorldCat (via Library of Congress)
		property = 244,
		section = 1,
		example = 'n78039510',
		--valid = p.WorldCatLCCN,
		link = 'https://www.worldcat.org/identities/lccn-$1',
		label = 'WorldCat (via Library of Congress)',
		suppressedbyproperty = {7859,214},
		cat = 'WorldCat-LCCN',
		errorcat = 'LCCN'
	},
	{ 'ZBMATH',
		property = 1556,
		section = 6,
		example = 'turing.alan-m',
		valid = p.zbmathV,
		link = 'https://zbmath.org/authors/?q=ai:$1',
		label = 'zbMATH',
		regex = '[a-z][a-z\-]*(\.[a-z][a-z\-]*)?(\.[0-9]*)?'
	},
}
-- Legitimate aliases to p.conf, for convenience
-- Format: { 'alias', 'parameter name in p.conf' }
p.aliases = {
	{ 'DNB', 'GND' }, --Deutsche Nationalbibliothek -> Gemeinsame Normdatei
	{ 'MusicBrainz', 'MBA' },
	{ 'MusicBrainz artist', 'MBA' },
	{ 'MusicBrainz label', 'MBL' },
	{ 'MusicBrainz release group', 'MBRG' },
	{ 'MusicBrainz work', 'MBW' },
	{ 'SBN', 'ICCU' }, --SBN alias to be deprecated at a later stage
	{ 'TDVIA', 'TDVİA' }, --alias name without diacritics
	{ 'tdvia', 'TDVİA' }, --lowercase variant without diacritics
}
-- Deprecated aliases to p.conf; tracked in [[Category:Articles with deprecated authority control identifiers]]
-- Format: { 'deprecated parameter name', 'replacement parameter name in p.conf' }
p.deprecated = {
	{ 'GKD', 'GND' },
	{ 'PND', 'GND' },
	{ 'RLS', 'RSL' },
	{ 'SWD', 'GND' },
	{ 'NARA-organization', 'NARA' },
	{ 'NARA-person', 'NARA' },
}
p.sectionOrder = {
	'General',						-- 1
	'National libraries',			-- 2
	'Art galleries and museums',	-- 3
	'Art research institutes',		-- 4
	'Biographical dictionaries',	-- 5
	'Scientific databases',			-- 6
	'Lighthouse identifiers',		-- 7
	'Other'							-- 8
}
return p