FANDOM


require('Module:No globals')
 
local function getCatForId( id )
    -- it.wiki non aggiunge categorie per ogni identificativo
    -- ma una unica "Categoria:Voci con codici di controllo di autorità"
    return ''
    --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
 
local function viafLink( id )
    if not string.match( id, '^%d+$' ) then
        return false
    end
    return '[http://viaf.org/viaf/' .. id .. ' ' .. id .. ']' .. getCatForId( 'VIAF' )
end
 
local function kulturnavLink( id )
    return '[http://kulturnav.org/language/en/' .. id .. ' id]' 
end
 
local function sikartLink( id )
    return '[http://www.sikart.ch/KuenstlerInnen.aspx?id=' .. 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 '[http://tls.theaterwissenschaft.ch/wiki/' .. id2 .. ' ' .. id .. ']' 
end
 
 
local function ciniiLink( id )
    return '[http://ci.nii.ac.jp/author/' .. id .. '?l=en ' .. id .. ']' 
end
 
local function bneLink( id )
    return '[http://catalogo.bne.es/uhtbin/authoritybrowse.cgi?action=display&authority_id=' .. id .. ' ' .. id .. ']' 
end
 
 
local function uscongressLink( id )
    return '[http://bioguide.congress.gov/scripts/biodisplay.pl?index=' .. id .. ' ' .. id .. ']' 
end
 
local function narapersonLink( id )
    return '[http://research.archives.gov/person/' .. id .. ' ' .. id .. ']' 
end
 
local function naraorganizationLink( id )
    return '[http://research.archives.gov/organization/' .. id .. ' ' .. 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 .. ' ' .. id .. ']' 
end
 
local function mgpLink( id )
    -- TODO Implement some sanity checking regex
    return '[http://www.genealogy.ams.org/id.php?id=' .. 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 ' .. 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 '[http://opac.sbn.it/opacsbn/opac/iccu/scheda_authority.jsp?bid=' .. id .. ' ' .. 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 ' .. id .. ']' 
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 ' .. id .. ']' 
end
 
local function ndlLink( id )
	return '[http://id.ndl.go.jp/auth/ndlna/' .. 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 '[http://www.idref.fr/' .. id .. ' ' .. 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 ' .. id .. ']'
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 ' .. 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() < 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 .. ' ' .. id .. ']' .. getCatForId( 'LCCN' )
end
 
local function mbLink( id )
    -- TODO Implement some sanity checking regex
    return '[//musicbrainz.org/artist/' .. id .. ' ' .. id .. ']' .. getCatForId( 'MusicBrainz' )
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-url.oclc.nl/isni/' .. id .. ' ' .. id:sub( 1, 4 ) .. ' ' .. id:sub( 5, 8 ) .. ' '  .. id:sub( 9, 12 ) .. ' '  .. id:sub( 13, 16 ) .. ']' .. getCatForId( 'ISNI' )
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 .. ' ' .. id .. ']' .. getCatForId( 'ORCID' )
end
 
local function gndLink( id )
    return '[http://d-nb.info/gnd/' .. id .. ' ' .. id .. ']' .. getCatForId( 'GND' )
end
 
local function selibrLink( id )
	if not string.match( id, '^%d+$' ) then
        return false
    end
    return '[//libris.kb.se/auth/' .. id .. ' ' .. id .. ']' .. getCatForId( 'SELIBR' )
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 .. ' ' .. id .. '] [http://data.bnf.fr/ark:/12148/' .. id .. ' (data)]' .. getCatForId( 'BNF' )
end
 
local function bpnLink( id )
    if not string.match( id, '^%d+$' ) then
        return false
    end
    return '[http://www.biografischportaal.nl/en/persoon/' .. id .. ' ' .. id .. ']' .. getCatForId( 'BPN' )
end
 
local function ridLink( id )
    return '[http://www.researcherid.com/rid/' .. id .. ' ' .. id .. ']' .. getCatForId( 'RID' )
end
 
local 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
 
local function ulanLink( id )
    return '[//www.getty.edu/vow/ULANFullDisplay?find=&role=&nation=&subjectid=' .. id .. ' ' .. id .. ']' .. getCatForId( 'ULAN' )
end
 
local function nlaLink( id )
	return '[//nla.gov.au/anbd.aut-an' .. id .. ' ' .. id .. ']' .. getCatForId( 'NLA' )
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, withUid )
    if link then
        if withUid then
            return label .. ' <span class="uid">' .. link .. '</span>'
        else
            return label .. ' ' .. link
        end
    else
        return '<span class="error">Il valore ' .. rawValue .. ' di ' .. id .. ' non è valido.</span>[[Categoria:Voci con codici controllo di autorità non validi (' .. id .. ')]]'
    end
end
 
--In this order: name of the parameter, label, propertyId in Wikidata, formatting function
local conf = {
    { 'VIAF', '[[Virtual International Authority File|VIAF]]', 214, viafLink },
    { 'LCCN', '[[Library of Congress Control Number|LCCN]]', 244, lccnLink },
    { 'SBN', '[[Servizio bibliotecario nazionale|SBN]]', 396, sbnLink },
    --{ 'ISNI', '[[International Standard Name Identifier|ISNI]]', 213, isniLink },
    { 'ORCID', '[[Open Researcher and Contributor ID|ORCID]]', 496, orcidLink },
    { 'GND', '[[Gemeinsame Normdatei|GND]]', 227, gndLink },
    --{ 'SELIBR', '[[LIBRIS|SELIBR]]', 906, selibrLink },
    --{ 'SUDOC', '[[Système universitaire de documentation|SUDOC]]', 269, sudocLink },    
    { 'BNF', '[[Bibliothèque nationale de France|BNF]]', 268, bnfLink },
    --{ 'BPN', '[[Biografisch Portaal|BPN]]', 651, bpnLink },
    --{ 'RID', '[[ResearcherID]]', 1053, ridLink },
    --{ 'BIBSYS', '[[BIBSYS]]', 1015, bibsysLink },
    --{ 'ULAN', '[[Union List of Artist Names|ULAN]]', 245, ulanLink },
    --{ 'HDS', '[[Historical Dictionary of Switzerland|HDS]]', 902, hlsLink },
    --{ 'LIR', '[[Historical Dictionary of Switzerland#Lexicon_Istoric_Retic|LIR]]', 886, lirLink },
    --{ 'MBA', '[[MusicBrainz]]', 434, mbLink },
    --{ 'MGP', '[[Mathematics Genealogy Project|MGP]]', 549, mgpLink },    
    --{ 'NLA', '[[National Library of Australia|NLA]]', 409, nlaLink },
    --{ 'NDL', '[[National Diet Library|NDL]]', 349, ndlLink },
    --{ 'NCL', '[[National Central Library|NCL]]', 1048, nclLink },
    --{ 'NKC', '[[National Library of the Czech Republic|NKC]]', 691, nkcLink },
    --{ 'Léonore', '[[:fr:Base Léonore|Léonore]]', 640, leonoreLink }, 
    --{ 'RLS', '[[Russian State Library|RLS]]', 947, rslLink },
    --{ 'Botanist', '[[Author citation (botany)|Botanist]]', 428, botanistLink },
    --{ 'NARA-person', '[[National Archives and Records Administration|NARA]]', 1222, narapersonLink },
    --{ 'NARA-organization', '[[National Archives and Records Administration|NARA]]', 1223, naraorganizationLink },
    --{ 'USCongress', '[[Biographical Directory of the United States Congress|US Congress]]', 1157, uscongressLink },
    --{ 'BNE', '[[Biblioteca Nacional de España|BNE]]', 950, bneLink },
    --{ 'CINII', '[[CiNii]]', 271, ciniiLink },
    --{ 'TLS', '[[Theaterlexikon der Schweiz|TLS]]', 0, tlsLink },
    --{ 'SIKART', '[[SIKART]]', 781, sikartLink },
    --{ 'KULTURNAV', '[[KulturNav]]', 1248, kulturnavLink },
}
 
-- Check that the Wikidata item has this property-->value before adding it
local reqs = {}
 
local p = {}
 
function p.authorityControl( frame )
	-- Su it.wiki è stata disabilitata la lettura dei parametri, per usare solo Wikidata
    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.getEntity()
    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
 
    --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 then
    --        table.insert( elements, createRow( 'LCCN', '', parentArgs['LCCN'], '[//www.worldcat.org/identities/lccn-' .. lccnParts[1] .. lccnParts[2] .. '-' .. lccnParts[3] .. ' WorldCat]', false ) )
    --    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
 
    --local elementscats = ''
    --if rct > 13 then
    --	elementscats  = '[[Category:AC with ' .. rct .. ' elements]]'
    --end
	local noparamcat = ''
	for k, v in pairs(frame:getParent().args) do
		noparamcat = '[[Categoria:Voci con template Controllo di autorità con parametri]]'
		break
	end
 
	if #elements ~= 0 then
		return string.format('<table class="CdA"><tr><th>%s</th><td>%s</td></tr></table>%s',
							 '[[Aiuto:Controllo di autorità|Controllo di autorità]]',
							 table.concat(elements, '<span style="font-weight:bold;">&nbsp;·</span> '),
							 noparamcat)
	else
		return ""
	end
end
 
return p

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Inoltre su FANDOM

Wiki casuale