Hopp til innhald

Modul:Authority control

Frå Wikipedia – det frie oppslagsverket

Dokumentasjon for modulen kan opprettast på Modul:Authority control/dok


require('Module:No globals')

local function DyntaxaLink( id )
  return 'https://www.dyntaxa.se/taxon/info/' .. id
end

local function dnvLink( id )
  return 'http://vesselregister.dnvgl.com/VesselRegister/vesseldetails.html?vesselid= ' .. id
end

local function encyclopediaoflifeLink( id )
  return 'http://eol.org/pages/' .. id
end

local function FaunaEuropaeaLink( id )
  return 'http://fauna.naturkundemuseum-berlin.de/full_results.php?id=' .. id
end

local function HistoriskbefolkningsregisterLink( id )
  return 'http://histreg.no/index.php/person/' .. id
end


local function ItisLink( id )
  return 'http://www.itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=' .. id
end

local function viafLink( id )
	if not string.match( id, '^%d+$' ) then
		return false
	end
	return 'https://viaf.org/viaf/' .. id
end


local function kulturnavLink( id )
	return 'http://kulturnav.org/language/no/' .. id
end

local function lokalhistoriewikiLink( id )
	return 'https://lokalhistoriewiki.no/wiki/' .. id
end


local function geonamesLink( id )
	return 'http://sws.geonames.org/' .. id
end

local function ssrnameLink( id )
	return 'https://stadnamn.kartverket.no/fakta/' .. id
end

local function naturbaseLink( id )
	return 'http://faktaark.naturbase.no/?id=' .. id
end

local function NorskkrigsseglarregisterLink( id )
	return 'https://www.krigsseilerregisteret.no/no/sjofolk' .. id
end

local function kunstnerleksikonLink( id )
	return 'https://nkl.snl.no/' .. id
end

local function nasjfotoLink( id )
	return 'http://www.nb.no/nmff/fotograf.php?fotograf_id=' .. id
end

local function polsysLink( id )
	return 'http://www.nsd.uib.no/polsys/index.cfm?MenuItem=N1_1&ChildItem=&State=collapse&UttakNr=33&person=' .. id
end

local function snlLink( id )
	return 'https://snl.no/' .. id
end

local function catholicdioceseLink( id )
	return 'http://www.catholic-hierarchy.org/diocese/d' .. id .. '.html'
end

local function skyscraperLink( id )
	return 'http://www.skyscrapercenter.com/building.php?building_id=' .. id
end

local function bbcthingsLink( id )
	return 'http://www.bbc.co.uk/things/' .. id
end

local function brorgnrLink( id )
	return 'https://w2.brreg.no/enhet/sok/detalj.jsp?orgnr=' .. id
end

local function unescolangLink( id )
	return 'http://www.unesco.org/languages-atlas/en/atlasmap/language-id-' .. id .. '.html'
end

--local function heritagenorLink( id )
--	return 'http://www.kulturminnesok.no/kulturminnesok/kulturminne/?LOK_ID=' .. id
--end

local function munzingersportLink( id )
	return 'http://www.munzinger.de/search/go/document.jsp?id=' .. id
end

local function munzingeribaLink( id )
	return 'http://www.munzinger.de/search/go/document.jsp?id=' .. id
end

local function munzingersportLink( id )
	return 'http://www.munzinger.de/search/go/document.jsp?id=' .. id
end

local function munzingerpopLink( id )
	return 'http://www.munzinger.de/search/go/document.jsp?id=' .. id
end

local function musicbrainzartistLink( id )
	return 'https://musicbrainz.org/artist/' .. id
end

local function musicbrainzreleasegroupLink( id )
	return 'https://musicbrainz.org/release-group/' .. id
end

local function musicbrainzlabelLink( id )
	return 'https://musicbrainz.org/label/' .. id
end

local function musicbrainzareaLink( id )
	return 'https://musicbrainz.org/area/' .. id
end

local function nblLink( id )
	return 'https://nbl.snl.no/' .. id
end


local function discogsartistLink( id )
	return 'http://www.discogs.com/artist/' .. id
end

local function allmusicartistLink( id )
	return 'http://www.allmusic.com/artist/' .. id
end

local function sikartLink( id )
	return 'http://www.sikart.ch/KuenstlerInnen.aspx?id=' .. id .. '&lng=en'
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
end

local function ciniiLink( id )
	return 'http://ci.nii.ac.jp/author/' .. id .. '?l=en'
end

local function bneLink( id )
	return 'http://catalogo.bne.es/uhtbin/authoritybrowse.cgi?action=display&authority_id=' .. id
end

local function uscongressLink( id )
	return 'http://bioguide.congress.gov/scripts/biodisplay.pl?index=' .. id
end

local function narapersonLink( id )
	return 'http://research.archives.gov/person/' .. id
end

local function naraorganizationLink( id )
	return 'http://research.archives.gov/organization/' .. id
end

local function botanistLink( id )
	local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'PATH') end)
	return 'http://www.ipni.org/ipni/advAuthorSearch.do?find_abbreviation=' .. id2
end

local function mgpLink( id )
	-- TODO Implement some sanity checking regex
	return 'http://www.genealogy.ams.org/id.php?id=' .. id
end

local function rslLink( id )
	-- TODO Implement some sanity checking regex
	return 'http://aleph.rsl.ru/F?func=find-b&find_code=SYS&adjacent=Y&local_base=RSL11&request=' .. id .. '&CON_LNG=ENG'
end

local function leonoreLink( id )
-- Identifiants allant de LH/1/1 à LH/2794/54 (légionnaires)
-- Identifiants allant de C/0/1 à C/0/84 (84 légionnaires célèbres)
-- Identifiants allant de 19800035/1/1 à 19800035/385/51670 (légionnaires décédés entre 1954 et 1977, et quelques dossiers de légionnaires décédés avant 1954)
	return '//www.culture.gouv.fr/public/mistral/leonore_fr?ACTION=CHERCHER&FIELD_1=COTE&VALUE_1=' .. id
end

local function sbnLink( id )
	if not id:match( '^%u%u[%u0-3]V%d%d%d%d%d%d$' ) then --legacy: %u used here instead of %D (but the faulty ID cat is empty, out of ~12k uses)
		return false
	end
	return 'http://opac.sbn.it/opacsbn/opac/iccu/scheda_authority.jsp?bid=' .. id
end

local function nkcLink( id )
	return 'http://aleph.nkp.cz/F/?func=find-c&local_base=aut&ccl_term=ica=' .. id .. '&CON_LNG=ENG'
end

local function nclLink( id )
	if not string.match( id, '^%d+$' ) then
		return false
	end
	return 'http://aleweb.ncl.edu.tw/F/?func=accref&acc_sequence=' .. id .. '&CON_LNG=ENG'
end

local function ndlLink( id )
	return 'http://id.ndl.go.jp/auth/ndlna/' .. 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 'http://www.idref.fr/' .. id
end

local function hlsLink( id )
	if not string.match( id, '^%d+$' ) then
		return false
	end
	return 'http://www.hls-dhs-dss.ch/textes/f/F' .. id .. '.php'
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'
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
	local lccnType = parts[1] ~= 'sh' and 'names' or 'subjects'
	id = parts[1] .. parts[2] .. append( parts[3], '0', 6 )
	return 'http://id.loc.gov/authorities/' .. lccnType .. '/' .. id
end

local function cristinLink( id )
	return 'http://www.cristin.no/as/WebObjects/cristin.woa/wa/personVis?type=PERSON&action=sok&pnr=' .. id
end

--local function mbLink( id )
--	-- TODO Implement some sanity checking regex
--	return '//musicbrainz.org/artist/' .. id
--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 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
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 'http://isni.org/' .. id
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 'http://orcid.org/' .. id
end

local function gndLink( id )
	return 'http://d-nb.info/gnd/' .. id
end

local function selibrLink( id )
	if not string.match( id, '^%d+$' ) then
		return false
	end
	return '//libris.kb.se/auth/' .. id
end

local function bnfLink( id )
	--Add cb prefix if it has been removed
	if not string.match( id, '^cb.+$' ) then
		id = 'cb' .. id
	end

	return 'http://catalogue.bnf.fr/ark:/12148/' .. id
end

local function bnfLink2( id )
	--Add cb prefix if it has been removed
	if not string.match( id, '^cb.+$' ) then
		id = 'cb' .. id
	end

	return 'http://data.bnf.fr/ark:/12148/' .. id
end

local function bpnLink( id )
	if not string.match( id, '^%d+$' ) then
		return false
	end
	return 'http://www.biografischportaal.nl/en/persoon/' .. id
end

local function ridLink( id )
	return 'http://www.researcherid.com/rid/' .. id
end

local function bibsysLink( id )
	-- return 'http://ask.bibsys.no/ask/action/result?cmd=&kilde=biblio&cql=bs.autid+%3D+' .. id .. '&feltselect=bs.autid'
	return 'http://bibsys-almaprimo.hosted.exlibrisgroup.com/primo_library/libweb/action/dlSearch.do?institution=BIBSYS&vid=BIBSYS&search_scope=blended_scope&query=lsr39,exact,' .. id:gsub('^x0*', '')
end

local function ulanLink( id )
	return '//www.getty.edu/vow/ULANFullDisplay?find=&role=&nation=&subjectid=' .. id
end

local function nlaLink( id )
	return '//nla.gov.au/anbd.aut-an' .. id
end

local function getIdsFromWikidata( item, property )
	local ids = {}
	if not item.claims[property] then
		return ids
	end
	for _, statement in pairs( item.claims[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 )
	if link then
		return '* [' .. link .. ' ' .. label .. ']\n'
	else
		return '* <span class="error">' .. id .. '-identifikatoren ' .. rawValue .. ' er ikkje gyldig.</span>[[Kategori:Artikler med feilaktige autoritetsdata]]\n'
	end
end

--In this order: name of the parameter, label, propertyId in Wikidata, formatting function
local conf = {
	{ 'BIBSYS', 'BIBSYS', 1015, bibsysLink },
	{ 'NBL', 'Norsk biografisk leksikon', 5080, nblLink }, 
	{ 'SNL', 'Store norske leksikon', 4342, snlLink }, 
	{ 'HistBef', 'Historisk befolkningsregister', 4574, HistoriskbefolkningsregisterLink }, 
	{ 'NorKrigssegl', 'Norsk krigsseglarregister', 4972, NorskkrigsseglarregisterLink }, 
	{ 'NorKunstLeks', 'Norsk kunstnerleksikon', 5081, kunstnerleksikonLink }, 
	{ 'NasjFoto', '	Nasjonalbiblioteket fotograf', 1847, nasjfotoLink }, 
	{ 'Lokalhistoriewiki', 'Lokalhistoriewiki', 6520, lokalhistoriewikiLink },
	{ 'polsys', 'PolSys', 1980, polsysLink }, 
	{ 'DNV', 'DNV GL', 5006, dnvLink }, 
	{ 'VIAF', 'VIAF', 214, viafLink },
	{ 'GND', 'GND', 227, gndLink },
	{ 'LCCN', 'LCCN', 244, lccnLink },
	{ 'ISNI', 'ISNI', 213, isniLink },
	{ 'BNF', 'BNF', 268, bnfLink },
	{ 'BNF2', 'BNF (data)', 268, bnfLink2 },
	{ 'ORCID', 'ORCID', 496, orcidLink },
	{ 'SELIBR', 'LIBRIS', 906, selibrLink },
	{ 'SUDOC', 'SUDOC', 269, sudocLink },	
	{ 'BPN', 'BPN', 651, bpnLink },
	{ 'RID', 'ResearcherID', 1053, ridLink },
	{ 'ULAN', 'ULAN', 245, ulanLink },
	{ 'HDS', 'HDS', 902, hlsLink },
	{ 'LIR', 'LIR', 886, lirLink },
	{ 'MGP', 'MGP', 549, mgpLink },	
	{ 'NLA', 'NLA', 409, nlaLink },
	{ 'NCL', 'NCL', 1048, nclLink },
	{ 'NKC', 'NKC', 691, nkcLink },
	{ 'Léonore', 'Léonore', 640, leonoreLink }, 
	{ 'SBN', 'ICCU', 396, sbnLink },	 
	{ 'RLS', 'RLS', 947, rslLink },
	{ 'Botanist', 'Botanist', 428, botanistLink },
	{ 'NARA-person', 'NARA', 1222, narapersonLink },
	{ 'NARA-organization', 'NARA', 1223, naraorganizationLink },
	{ 'USCongress', 'US Congress', 1157, uscongressLink },
	{ 'BNE', 'BNE', 950, bneLink },
	{ 'CINII', 'CiNii', 271, ciniiLink },
	{ 'TLS', 'TLS', 1362, tlsLink },
	{ 'SIKART', 'SIKART', 781, sikartLink },
--	{ 'FREEBASE', 'Freebase', 646, freebaseLink },
	{ 'KULTURNAV', 'KulturNav', 1248, kulturnavLink },
	{ 'CRISTIN', 'CRIStin', 2287, cristinLink },
	{ 'GEONAMES', 'GeoNames', 1566, geonamesLink },
	{ 'SSRNAME', 'SSR (namn)', 1850, ssrnameLink },
	{ 'NATURBASE', 'Naturbase', 1732, naturbaseLink },
	{ 'CATHOLICDIOC', 'CatolicDiocese', 1866, catholicdioceseLink },
	{ 'SKYSCRAPER', 'SkyscraperCenter', 1305, skyscraperLink },
	{ 'BBCTHINGS', 'BBC Things', 1617, bbcthingsLink },
	{ 'BRORGNR', 'BR orgnr', 2333, brorgnrLink },
	{ 'UNESCOLANG', 'UNESCO lang', 2355, unescolangLink },
--	{ 'HERITAGENOR', 'Riksantikvaren (nor)', 758, heritagenorLink },
	{ 'MUNZINGERIBA', 'Munzinger (iba)', 1284, munzingeribaLink },
	{ 'MUNZINGERSPORT', 'Munzinger (sport)', 1285, munzingersportLink },
	{ 'MUNZINGERPOP', 'Munzinger (pop)', 1286, munzingerpopLink },
	{ 'MUSICBRAINZARTIST', 'MusicBrainz (artist)', 434, musicbrainzartistLink },
	{ 'MUSICBRAINZGROUP', 'MusicBrainz (release-group)', 436, musicbrainzreleasegroupLink },
	{ 'MUSICBRAINZLABEL', 'MusicBrainz (label)', 966, musicbrainzlabelLink },
	{ 'MUSICBRAINZAREA', 'MusicBrainz (area)', 982, musicbrainzareaLink },
	{ 'DISCOGSARTIST', 'Discogs (artist)', 1953, discogsartistLink },
	{ 'ALLMUSICARTIST', 'AllMusic (artist)', 1728, allmusicartistLink },
	{ 'Dyntaxa', 'Dyntaxa', 1939, DyntaxaLink },
	{ 'ITIS', 'ITIS', 815, ItisLink },
	{ 'FaunEur', 'FaunEur', 1895, FaunaEuropaeaLink },
	{ 'EOL', 'EOL', 830, encyclopediaoflifeLink },
	{ 'NDL', 'NDL', 349, ndlLink },
}

-- 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 
	{ 31, 5741069 }, -- instance of -> rock band
}

local p = {}

function p.authorityControl( frame )
	--Create rows
	local elements = {}

	--Collect info from Wikidata
	local authCtrls = {}
	local rct = 0
	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 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
						authCtrls[params[1]] = wikidataIds[1]
						if params[1] ~= 'BNF2' then -- Do not count the second BNF entry
							rct = rct + 1
						end
						if rct == 8 then break end -- Display max 8 entries						
					end
				end
			end
		end
	end
	
	if rct == 0 then return '[[Kategori:Artiklar utan autoritetsdata]]' end -- Skip box when no info

	--Worldcat
	if authCtrls['LCCN'] and authCtrls['LCCN'] ~= '' then
		local lccnParts = splitLccn( authCtrls['LCCN'] )
		if lccnParts then
			table.insert(elements, createRow('WorldCat', 'WorldCat', authCtrls['LCCN'], '//www.worldcat.org/identities/lccn-' .. lccnParts[1] .. lccnParts[2] .. '-' .. lccnParts[3]))
		end
	end

	--Configured rows
	for k, params in pairs( conf ) do
		local val = authCtrls[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')
	local box = Navbox._navbox( {
		name  = 'Autoritetsdata',
		bodyclass = 'hlist',
		group1 = '[[Autoritetsdata]]',
		list1 = table.concat( elements )
	} )
	return box .. (#elements==0 and '[[Kategori:Artiklar utan autoritetsdata]]' or '[[Kategori:Artiklar med autoritetsdata]]')
end

return p
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy