모듈:Authority control/연습장

require('strict')
local function getCatForId( id )
local title = mw.title.getCurrentTitle()
local namespace = title.namespace
if namespace == 0 then
return '분류:' .. id .. ' 식별자를 포함한 위키백과 문서'
elseif namespace == 2 and not title.isSubpage then
return '분류:' .. id .. ' 식별자를 포함한 사용자 문서'
else
return '분류:' .. id .. ' 식별자를 포함한 기타 문서'
end
end
local function viafLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return ' .. id .. ' ' .. id ..  .. getCatForId( 'VIAF' )
end
local function kulturnavLink( id )
return ' .. id .. ' id' 
end
local function sikartLink( id )
return ' .. 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 ' .. id2 .. ' ' .. id ..  
end
local function ciniiLink( id )
return ' .. id .. '?l=en ' .. id ..  
end
local function bneLink( id )
return ' .. id .. ' ' .. id ..  
end
local function uscongressLink( id )
return ' .. id .. ' ' .. id ..  
end
local function narapersonLink( id )
return ' .. id .. ' ' .. id ..  
end
local function naraorganizationLink( id )
return ' .. id .. ' ' .. id ..  
end
local function botanistLink( id )
	local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'PATH') end)
return ' .. id2 .. ' ' .. id ..  
end
local function mgpLink( id )
-- TODO Implement some sanity checking regex
return ' .. id .. ' ' .. id ..  
end
local function rslLink( id )
-- TODO Implement some sanity checking regex
return ' .. id .. '&CON_LNG=ENG ' .. id .. 
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)
if not string.match( id, '^LH/%d%d?%d?%d?/%d%d?%d?$' ) and
not string.match( id, '^C/0/%d%d?$' ) and
	   not string.match( id, '^19800035/%d%d?%d?%d?/%d%d?%d?%d?%d?$' ) then
return false
end
return '//www.culture.gouv.fr/public/mistral/leonore_fr?ACTION=CHERCHER&FIELD_1=COTE&VALUE_1=' .. id .. ' ' .. id ..  
end
local function sbnLink( id )
if not string.match( id, '^IT\\ICCU\\%d%d%d%d%d%d%d%d%d%d$' ) and not string.match( id, '^IT\\ICCU\\%u%u%d%u%u\\%d%d%d%d%d%d$' ) then
return false
end
return ' .. id .. ' ' .. id ..  .. getCatForId( 'SBN' )
end
local function nkcLink( id )
	return ' .. id .. '&CON_LNG=ENG ' .. id ..  
end
local function nclLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return ' .. id .. '&CON_LNG=ENG ' .. id ..  
end
local function ndlLink( id )
	return ' .. 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 ' .. id .. ' ' .. id ..  
end
local function melonLink( id )
	return ' .. id .. ' ' .. id ..  .. getCatForId( '멜론' )
end
local function hlsLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return ' .. id .. '.php ' .. id .. 
end
local function lirLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return ' .. 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() ' .. link .. '\n'
else
return '* ' .. label .. ' ' .. link .. '\n'
end
else
return '* ' .. id .. ' id의 ' .. rawValue .. ' 는 유효하지 않습니다.분류:잘못된 전거 통제 정보를 포함한 위키백과 문서\n'
end
end
--In this order: name of the parameter, label, propertyId in Wikidata, formatting function
local conf = {
{ 'VIAF', 'VIAF', 214, viafLink },
{ 'LCCN', 'LCCN', 244, lccnLink },
{ 'ISNI', 'ISNI', 213, isniLink },
{ 'ORCID', 'ORCID', 496, orcidLink },
{ 'GND', 'GND', 227, gndLink },
{ 'SELIBR', 'SELIBR', 906, selibrLink },
{ 'SUDOC', 'SUDOC', 269, sudocLink },    
{ 'BNF', 'BNF', 268, bnfLink },
{ 'BPN', 'BPN', 651, bpnLink },
{ 'RID', 'ResearcherID', 1053, ridLink },
{ 'BIBSYS', 'BIBSYS', 1015, bibsysLink },
{ 'ULAN', 'ULAN', 245, ulanLink },
{ 'HDS', 'HDS', 902, hlsLink },
{ 'LIR', 'LIR', 886, lirLink },
{ 'MBA', '뮤직브레인즈', 434, mbLink },
{ 'MGP', 'MGP', 549, mgpLink },    
{ 'NLA', 'NLA', 409, nlaLink },
{ 'NDL', 'NDL', 349, ndlLink },
{ '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 },
{ 'KULTURNAV', 'KulturNav', 1248, kulturnavLink },
{ 'RKDartists', 'RKD', 650, rkdartistsLink },
{ '멜론', '멜론', 4473, melonLink },
{ '국립중앙도서관', '국립중앙도서관', 5034, nlkLink },
}
-- Check that the Wikidata item has this property-->value before adding it
local reqs = {}
local p = {}
function p.authorityControl( frame )
local parentArgs = frame:getParent().args
--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
--Wikidata fallback if requested
local item = mw.wikibase.getEntityObject()
if item ~= nil and item.claims ~= nil then
for _, params in pairs( conf ) do
if params3 ~= 0 then
local val = parentArgsparams1
if not val or val ==  then
	local canUseWikidata = nil
if reqsparams1 ~= nil then
canUseWikidata = matchesWikidataRequirements( item, reqsparams1 )
else
canUseWikidata = true
end
if canUseWikidata then
local wikidataIds = getIdsFromWikidata( item, 'P' .. params3 )
if wikidataIds1 then
parentArgsparams1 = wikidataIds1
end
end
end
end
end
end
--Worldcat
if parentArgs'WORLDCATID' and parentArgs'WORLDCATID' ~=  then
table.insert( elements, createRow( 'WORLDCATID', , parentArgs'WORLDCATID', '//www.worldcat.org/identities/' .. parentArgs'WORLDCATID' .. ' WorldCat', false ) ) --Validation?
elseif parentArgs'LCCN' and parentArgs'LCCN' ~=  then
local lccnParts = splitLccn( parentArgs'LCCN' )
if lccnParts and lccnParts1 ~= 'sh' then
table.insert( elements, createRow( 'LCCN', , parentArgs'LCCN', '//www.worldcat.org/identities/lccn-' .. lccnParts1 .. lccnParts2 .. '-' .. lccnParts3 .. ' WorldCat', false ) )
end
end
--Configured rows
local rct = 0
for k, params in pairs( conf ) do
local val = parentArgsparams1
if val and val ~=  then
table.insert( elements, createRow( params1, params2 .. ':', val, params4( val ), true ) )
rct = rct + 1
end
end
local Navbox = require('Module:Navbox')
local elementscats = 
if rct > 13 then
	elementscats  = '분류:' .. rct .. ' 종류의 전거 통제 정보를 포함'
	end
	
	if #elements ~= 0 then
		return Navbox._navbox( {
			name  = 'Authority control',
			bodyclass = 'hlist',
			group1 = '전거 통제' .. elementscats,
			list1 = table.concat( elements )
			} )
	else
		return ""
	end
end
return p