मोड्यूल:Authority control
इस साँचे का इस्तेमाल 500+ पृष्ठों में किया जा रहा है। बड़े पैमाने पर व्यवधान और अनावश्यक सर्वर लोड से बचने के लिए, किसी भी बदलाव के पहले इस साँचे के /प्रयोगपृष्ठ उपपृष्ठ या अपने उपयोगकर्ता स्थान पर उसे जांच कर देख ले। जांचे गये बदलावों को इस साँचे में एक बार में जोड़ा जा सकता है।अन्य उपयोगकर्ताओं के खातिर, बदलाव करने से पहले उससे सम्बंधित बात-चीत वार्ता पृष्ठ पर करें। |
इस मोड्यूल में साँचा:T साँचे का कोड समाहित है।
require('Module:No globals')
local function getCatForId( id )
local title = mw.title.getCurrentTitle()
local namespace = title.namespace
local hid
if id == "VIAF" then
hid="वी॰आई॰एफ॰ए॰"
elseif id == "LCCN" then
hid="एल॰सी॰सी॰एन॰"
elseif id == "ISNI" then
hid="आई॰एस॰एन॰आई॰"
elseif id == "GND" then
hid="जी॰एन॰डी॰"
elseif id == "BNF" then
hid="बी॰एन॰एफ॰"
elseif id == "ULAN" then
hid="यू॰एल॰ए॰एन॰"
elseif id == "BIBSYS" then
hid= "बी॰आई॰बी॰एस॰वाई॰एस॰"
elseif id == "BNE" then
hid= "बी॰एन॰ई॰"
elseif id == "BPN" then
hid= "बी॰पी॰एन॰"
elseif id == "LNB" then
hid= "एल॰एन॰बी॰"
elseif id == "MusicBrainz" then
hid= "म्यूजिक ब्रॉन्ज़"
elseif id == "NDL" then
hid= "एन॰डी॰एल॰"
elseif id == "NLA" then
hid= "एन॰एल॰ए॰"
elseif id == "NSK" then
hid= "एन॰एस॰के॰"
elseif id == "ORCID" then
hid= "ओ॰आर॰सी॰आई॰डी॰"
elseif id == "RID" then
hid= "आर॰आई॰डी॰"
elseif id == "RKDartists" then
hid= "आर॰के॰डी॰ कलाकार"
elseif id == "SELIBR" then
hid= "एस॰ई॰एल॰आई॰बी॰आर॰"
elseif id == "Trove" then
hid= "ट्रोव"
else
hid= "अन्य संख्यात्मक मान"
end
if namespace == 0 then
return '[[Category:' .. hid .. ' अभिज्ञापक वाले विकिपीडिया पृष्ठ]]'
elseif namespace == 2 and not title.isSubpage then
return '[[Category:' .. hid .. ' अभिज्ञापक वाले सदस्य पृष्ठ]]'
else
return '[[Category:' .. hid .. ' अभिज्ञापक विविध पृष्ठ]]'
end
end
local function viafLink( id )
if not string.match( id, '^%d+$' ) then
return false
end
return '[https://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 troveLink( id )
return '[//trove.nla.gov.au/people/' .. id .. '' .. id .. ']' .. getCatForId( 'Trove' )
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 .. ' (आँकड़े)]' .. 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 rkdartistsLink( id )
return '[https://rkd.nl/en/explore/artists/' .. id .. ' ' .. id .. ']' .. getCatForId( 'RKDartists' )
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>\n'
else
return '* ' .. label .. ' ' .. link .. '\n'
end
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', '[[वर्चुअल अंतरराष्ट्रीय प्राधिकरण फ़ाइल|वी॰आई॰एफ॰ए॰]]', 214, viafLink },
{ 'LCCN', '[[लाइब्रेरी ऑफ कॉंग्रेस नियंत्रण संख्या|एल॰सी॰सी॰एन॰]]', 244, lccnLink },
{ 'ISNI', '[[इंटरनेशनल स्टैण्डर्ड नाम पहचानकर्ता|आई॰एस॰एन॰आई]]', 213, isniLink },
{ 'ORCID', '[[खुला शोधकर्ता और योगदानकर्ता आईडी|ओ॰आर॰सी॰आई॰डी॰]]', 496, orcidLink },
{ 'GND', '[[एकीकृत प्राधिकरण फ़ाइल|जी॰एन॰डी॰]]', 227, gndLink },
{ 'SELIBR', '[[स्वीडन राष्ट्रीय पुस्तकालय|सेलाइबर]]', 906, selibrLink },
{ 'Trove', '[[ट्रोव]]', 1315, troveLink },
{ 'SUDOC', '[[सिस्टम यूनिवर्सल डी डॉकुमेंटेशन|एस॰यू॰डी॰ओ॰सी॰]]', 269, sudocLink },
{ 'BNF', '[[बिब्लियोथेक़ नेशनल दी फ्रांस|बी॰एन॰एफ॰]]', 268, bnfLink }, -- Need correction in this line
{ 'BPN', '[[Biografisch Portaal|बी॰पी॰एन॰]]', 651, bpnLink },
{ 'RID', '[[रिसर्चर-आईडी]]', 1053, ridLink },
{ 'BIBSYS', '[[BIBSYS]]', 1015, bibsysLink },
{ 'ULAN', '[[Union List of Artist Names|यू॰एल॰ए॰एन॰]]', 245, ulanLink },
{ 'HDS', '[[Historical Dictionary of Switzerland|एच॰डी॰एस॰]]', 902, hlsLink },
{ 'LIR', '[[Historical Dictionary of Switzerland#Lexicon_Istoric_Retic|एल॰आई॰आर॰]]', 886, lirLink },
{ 'MBA', '[[म्यूज़िकब्रैन्ज़]]', 434, mbLink },
{ 'MGP', '[[Mathematics Genealogy Project|एम॰जी॰पी॰]]', 549, mgpLink },
{ 'NLA', '[[National Library of Australia|एन॰एल॰ए॰]]', 409, nlaLink },
{ 'NDL', '[[National Diet Library|एन॰डी॰एल॰]]', 349, ndlLink },
{ 'NCL', '[[National Central Library|एन॰सी॰एल॰]]', 1048, nclLink },
{ 'NKC', '[[National Library of the Czech Republic|एन॰के॰सी॰]]', 691, nkcLink },
{ 'Léonore', '[[:fr:Base Léonore|Léonore]]', 640, leonoreLink },
{ 'SBN', '[[Istituto Centrale per il Catalogo Unico|आई॰सी॰सी॰यू॰]]', 396, sbnLink },
{ 'RLS', '[[Russian State Library|आर॰एल॰एस॰]]', 947, rslLink },
{ 'Botanist', '[[Author citation (botany)|वनस्पतिज्ञ]]', 428, botanistLink },
{ 'NARA-person', '[[National Archives and Records Administration|एन॰ए॰आर॰ए॰]]', 1222, narapersonLink },
{ 'NARA-organization', '[[National Archives and Records Administration|एन॰ए॰आर॰ए॰]]', 1223, naraorganizationLink },
{ 'USCongress', '[[Biographical Directory of the United States Congress|यू॰एस॰ कांग्रेस]]', 1157, uscongressLink },
{ 'BNE', '[[Biblioteca Nacional de España|बी॰एन॰ई॰]]', 950, bneLink },
{ 'CINII', '[[CiNii]]', 271, ciniiLink },
{ 'TLS', '[[Theaterlexikon der Schweiz|टी॰एल॰एस॰]]', 1362, tlsLink },
{ 'SIKART', '[[SIKART]]', 781, sikartLink },
{ 'KULTURNAV', '[[KulturNav]]', 1248, kulturnavLink },
{ 'RKDartists', '[[Netherlands Institute for Art History#Online artist pages|आर॰के॰डी॰]]', 650, rkdartistsLink },
}
-- 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 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] .. ' वर्ल्डकैट]', 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 Navbox = require('Module:Navbox')
local elementscats = ''
if rct > 13 then
elementscats = '[[Category:' .. rct .. ' अवयवों के साथ प्राधिकरण नियंत्रण]]'
end
if #elements ~= 0 then
return Navbox._navbox( {
name = 'प्राधिकरण नियंत्रण',
bodyclass = 'hlist',
group1 = '[[प्राधिकरण नियंत्रण]]' .. elementscats,
list1 = table.concat( elements )
} )
else
return ""
end
end
return p