پودمان:Authority control
توضیحات این پودمان میتواند در پودمان:Authority control/توضیحات قرار گیرد.
require('Module:No globals')
local lang = mw.getContentLanguage()
local p = {}
local title = mw.title.getCurrentTitle()
local namespace = title.namespace
local testcases = (mw.ustring.sub(title.subpageText,1,7) == 'آزمایشی')
--[[==========================================================================]]
--[[ Category functions ]]
--[[==========================================================================]]
function p.getCatForId( id )
local catName = ''
if namespace == 0 then
catName = 'مقالههای ویکیپدیا همراه شناسههای '..id
elseif namespace == 2 and not title.isSubpage then
catName = 'صفحههای کاربری دارای شناسههای '..id
else
catName = 'صفحههای متفرقه دارای شناسههای '..id
end
return '[[رده:'..catName..']]'..p.redCatLink(catName)
end
function p.redCatLink( catName ) --catName == 'Blah' (not 'Category:Blah', not '[[Category:Blah]]')
if catName and catName ~= '' and
testcases == false and
mw.title.new(catName, 14).exists == false
then
return '[[رده:صفحههای دارای ردههای دادههای کتابخانهای با پیوند قرمز]]'
end
return ''
end
function p.createRow( id, rawValues, link, links, withUid, specialCat, prefix)
local catName = 'مقالههای ویکیپدیا همراه شناسههای معیوب '..(specialCat or id)
if links then -- all links[] use withUid = false; no check needed
local row = ''
if prefix then
row = row .. '*' .. prefix
end
for i, l in ipairs( links ) do
if i == 1 and not prefix then row = row..'*'
else row = row..'\n**' end
if l then
row = row..'<span class="uid">'..l..'</span>'
else
row = row..'<span class="error">شناسهٔ '..id..'برابر با '..rawValues[i]..' نامعتبر است.</span>[[رده:'..catName..']]'..p.redCatLink(catName)
end
end
return row..'\n'
elseif link then -- All IDs that have a prefix support multiple identifiers, so prefix is not needed
if withUid then
return '*<span class="nowrap"><span class="uid">'..link..'</span></span>\n'
end
return '*<span class="nowrap">'..link..'</span>\n'
end
return '* <span class="error">شناسهٔ '..id..' برابر با '..rawValues..' نامعتبر است.</span>[[رده:'..catName..']]'..p.redCatLink(catName)..'\n'
end
--[[==========================================================================]]
--[[ Property formatting functions ]]
--[[==========================================================================]]
-- If a link has a suitable entry in the global inter-wiki prefix table at [[:m:Interwiki_map]], please consider routing through this prefix rather than as external link URL. This will ease future maintenance as necessary updates to the link can be centrally carried out there rather than by updating this module. The "external link" icon would disappear for such entries.
function p.aagLink( id, label)
--P3372's format regex: \d+ (e.g. 1)
if not id:match( '^%d+$' ) then
return false
end
return '[https://www.aucklandartgallery.com/explore-art-and-ideas/artist/'..id..'/ '..(label or 'اوکلند')..']'..p.getCatForId( 'AAG' )
end
function p.acmLink( id, label )
--P864's format regex: \d{11} (e.g. 12345678901)
if not id:match( '^%d%d%d%d%d%d%d%d%d%d%d$' ) then
return false
end
return '[https://dl.acm.org/profile/'..id..' '..(label or 'انجمن ماشینهای حسابگر')..']'..p.getCatForId( 'ACM-DL' )
end
function p.adbLink( id, label )
--P1907's format regex: [a-z][-a-z]+-([1-2]\d|[1-9])\d{0,3} (e.g. barton-sir-edmund-toby-71)
if not id:match( '^[a-z][-a-z]+-[1-2]%d%d?%d?%d?$' ) and -- Not localized
not id:match( '^[a-z][-a-z]+-[1-9]%d?%d?%d?$' ) then -- Not localized
return false
end
return '[http://adb.anu.edu.au/biography/'..id..' '..(label or 'استرالیا')..']'..p.getCatForId( 'ADB' )
end
function p.agsaLink( id, label )
--P6804's format regex: [1-9]\d* (e.g. 3625)
if not id:match( '^[1-9]%d*$' ) then -- Not localized
return false
end
return '[https://www.agsa.sa.gov.au/collection-publications/collection/creators/_/'..id..'/ '..(label or 'استرالیای جنوبی')..']'..p.getCatForId( 'AGSA' )
end
function p.autoresuyLink( id, label )
--P2558's format regex: [1-9]\d{0,4} (e.g. 12345)
if not id:match( '^[1-9]%d?%d?%d?%d?$' ) then -- Not localized
return false
end
return '[https://autores.uy/autor/'..id..' '..(label or 'اروگوئه')..']'..p.getCatForId( 'autores.uy' )
end
function p.awrLink( id, label )
--P4186's format regex: (([A-Z]{3}\d{4})|([A-Z]{2}\d{5}))[a-z] (e.g. PR00768b)
if not id:match( '^[A-Z][A-Z][A-Z]%d%d%d%d[a-z]$' ) and -- Not localized
not id:match( '^[A-Z][A-Z]%d%d%d%d%d[a-z]$' ) then -- Not localized
return false
end
return '[http://www.womenaustralia.info/biogs/'..id..'.htm '..(label or 'فهرست زنان استرالیا')..']'..p.getCatForId( 'AWR' )
end
function p.bibsysLink( id, label )
--P1015's format regex: [1-9]\d* or [1-9](\d{0,8}|\d{12}) (e.g. 1234567890123)
--TODO: follow up @ [[d:Property talk:P1015#Discrepancy between the 2 regex constraints]] or escalate/investigate
if not id:match( '^[1-9]%d?%d?%d?%d?%d?%d?%d?%d?$' ) and -- Not localized
not id:match( '^[1-9]%d%d%d%d%d%d%d%d%d%d%d%d$' ) then -- Not localized
return false
end
return '[https://authority.bibsys.no/authority/rest/authorities/html/'..id..' '..(label or 'نروژ')..']'..p.getCatForId( 'BIBSYS' )
end
function p.bildLink( id, label )
--P2092's format regex: \d+ (e.g. 1)
if not id:match( '^%d+$' ) then
return false
end
return '[https://www.bildindex.de/document/obj'..id..' '..(label or 'بیلدینکس (آلمان)')..']'..p.getCatForId( 'Bildindex' )
end
function p.bncLink( id, label )
--P1890's format regex: \d{9} (e.g. 123456789)
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then
return false
end
return '[http://www.bncatalogo.cl/F?func=direct&local_base=red10&doc_number='..id..' '..(label or 'شیلی')..']'..p.getCatForId( 'BNC' )
end
function p.bneLink( id, label )
--P950's format regex: (XX|FF|a)\d{4,7}|(bima|bimo|bica|bis[eo]|bivi|Mise|Mimo|Mima)\d{10} (e.g. XX1234567)
if not id:match( '^[XF][XF]%d%d%d%d%d?%d?%d?$' ) and -- Not localized
not id:match( '^a%d%d%d%d%d?%d?%d?$' ) and
not id:match( '^bi[mcsv][aoei]%d%d%d%d%d%d%d%d%d%d$' ) and -- Not localized
not id:match( '^Mi[sm][eoa]%d%d%d%d%d%d%d%d%d%d$' ) then -- Not localized
return false
end
return '[http://catalogo.bne.es/uhtbin/authoritybrowse.cgi?action=display&authority_id='..id..' '..(label or 'اسپانیا')..']'..p.getCatForId( 'BNE' ) --no https as of 6/2021
end
function p.bnfLink( id, label )
--P268's format regex: \d{8}[0-9bcdfghjkmnpqrstvwxz] (e.g. 123456789)
if not id:match( '^c?b?%d%d%d%d%d%d%d%d[0-9bcdfghjkmnpqrstvwxz]$' ) then -- Not localized
return false
end
--Add cb prefix if it has been removed
if not id:match( '^cb.+$' ) then
id = 'cb'..id
end
return '[https://catalogue.bnf.fr/ark:/12148/'..id..' ' .. (label or 'فرانسه')..'] [https://data.bnf.fr/ark:/12148/'..id..' (دادهها)]'..p.getCatForId( 'BNF' )
end
function p.botanistLink( id, label )
--P428's format 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?\.? (e.g. L.)
--not easily/meaningfully implementable in Lua's regex since "(this)?" is not allowed...
if not mw.ustring.match( id, "^[%u%l%d%. '-]+$" ) then --better than nothing -- Not localized
return false
end
id = id:gsub(' +', '%%20') -- Not localized
return '[https://www.ipni.org/ipni/advAuthorSearch.do?find_abbreviation='..id..' '..(label or 'فهرست نامهای بینالمللی گیاهان')..']'..p.getCatForId( 'Botanist' )
end
function p.bpnLink( id, label )
--P651's format regex: \d{6,8} (e.g. 00123456)
if not id:match( '^%d%d%d%d%d%d%d%d$' ) and --original format regex, changed 8/2019 to -- Not localized
not id:match( '^0?%d%d%d%d%d%d%d$' ) and --allow 1-2 leading 0s, allowed by the website -- Not localized
not id:match( '^0?0?%d%d%d%d%d%d$' ) then -- Not localized
return false
end
return '[http://www.biografischportaal.nl/en/persoon/'..id..' '..(label or 'هلند')..']'..p.getCatForId( 'BPN' ) --no https as of 9/2019
end
function p.canticLink( id, label )
--P1273's format regex: a\d{7}[0-9x] (e.g. a10640745)
if not id:match( '^a%d%d%d%d%d%d%d[%dx]$' ) then -- Not localized
return false
end
return '[http://cantic.bnc.cat/registres/CUCId/'..id..' '..(label or 'کاتالونیا')..']'..p.getCatForId( 'CANTIC' ) --no https as of 10/2019
end
function p.ciniiLink( id, label )
--P271's format regex: DA\d{7}[\dX] (e.g. DA12345678)
if not id:match( '^DA%d%d%d%d%d%d%d[%dX]$' ) then -- Not localized
return false
end
return '[https://ci.nii.ac.jp/author/'..id..'?l=en '..(label or 'ساینی (ژاپن)')..']'..p.getCatForId( 'CINII' )
end
function p.cwgcLink( id, label )
--P1908's format regex: [1-9]\d* (e.g. 75228351)
if not id:match( '^[1-9]%d*$' ) then -- Not localized
return false
end
return '[https://www.cwgc.org/find-war-dead/casualty/'..id..'/ '..(label or 'کمیسیون مشترکالمنافع گورهای جنگ')..']'..p.getCatForId( 'CWGC' )
end
function p.daaoLink( id, label )
--P1707's format regex: [a-z\-]+\d* (e.g. rolf-harris)
if not id:match( '^[a-z%-]+%d*$' ) then -- Not localized
return false
end
return '[https://www.daao.org.au/bio/'..id..' '..(label or 'هنرمندان استرالیا')..']'..p.getCatForId( 'DAAO' )
end
function p.dblpLink( id, label )
--P2456's format regex: \d{2,3} /\d+(-\d+)?|[a-z] /[a-zA-Z][0-9A-Za-z]*(-\d+)? (e.g. 123/123)
if not id:match( '^%d%d%d?/%d+$' ) and -- Not localized
not id:match( '^%d%d%d?/%d+%-%d+$' ) and -- Not localized
not id:match( '^[a-z]/[a-zA-Z][0-9A-Za-z]*$' ) and -- Not localized
not id:match( '^[a-z]/[a-zA-Z][0-9A-Za-z]*%-%d+$' ) then -- Not localized
return false
end
return '[https://dblp.org/pid/'..id..' '..(label or 'دیبیالپی (علوم رایانه)')..']'..p.getCatForId( 'DBLP' )
end
function p.dibLink( id, label )
--P6829's format regex: a\d{4}\d?(-[A-D])? (e.g. a1953)
if not id:match( '^a%d%d%d%d%d?%-?[A-D]?$' ) then -- Not localized
return false
end
return '[https://dib.cambridge.org/viewReadPage.do?articleId='..id..' '..(label or 'ایرلند')..']'..p.getCatForId( 'DIB' )
end
function p.dsiLink( id, label )
--P2349's format regex: [1-9]\d* (e.g. 1538)
if not id:match( '^[1-9]%d*$' ) then
return false
end
return '[http://www.uni-stuttgart.de/hi/gnt/dsi2/index.php?table_name=dsi&function=details&where_field=id&where_value='..id..' '..(label or 'تصویرسازان فنی')..']'..p.getCatForId( 'DSI' )
end
function p.fastLink( id, label )
--P2163's format regex: [1-9]\d{0,7} (e.g. 1916996)
if not id:match( '^[1-9]%d?%d?%d?%d?%d?%d?%d?$' ) then -- Not localized
return false
end
return '[http://id.worldcat.org/fast/'..id..'/ '..(label or 'کاربرد چندوجهی اصطلاحات موضوعی')..']'..p.getCatForId( 'FAST' )
end
function p.fnzaLink( id, label )
--P6792's format regex: [1-9]\d* (e.g. 9785)
if not id:match( '^[1-9]%d*$' ) then -- Not localized
return false
end
return '[https://findnzartists.org.nz/artist/'..id..'/ '..(label or 'هنرمندان نیوزیلند')..']'..p.getCatForId( 'FNZA' )
end
function p.gndLink( id, label )
--P227's format regex: 1[012]?\d{7}[0-9X]|[47]\d{6}-\d|[1-9]\d{0,7}-[0-9X]|3\d{7}[0-9X] (e.g. 4079154-3)
if not id:match( '^1[012]?%d%d%d%d%d%d%d[0-9X]$' ) and -- Not localized
not id:match( '^[47]%d%d%d%d%d%d%-%d$' ) and -- Not localized
not id:match( '^[1-9]%d?%d?%d?%d?%d?%d?%d?%-[0-9X]$' ) and -- Not localized
not id:match( '^3%d%d%d%d%d%d%d[0-9X]$' ) then -- Not localized
return false
end
return '[https://d-nb.info/gnd/'..id..' '..(label or 'برگهدان مستند فراگیر (آلمان)')..']'..p.getCatForId( 'GND' )
end
function p.hdsLink( id, label )
--P902's format regex: \d{6} (e.g. 050123)
if not id:match( '^%d%d%d%d%d%d$' ) then -- Not localized
return false
end
return '[https://hls-dhs-dss.ch/fr/articles/'..id..' '..(label or 'فرهنگ تاریخی سوئیس')..']'..p.getCatForId( 'HDS' )
end
function p.iaafLink( id, label )
--P1146's format regex: [0-9][0-9]* (e.g. 012)
if not id:match( '^%d+$' ) then
return false
end
return '[https://www.iaaf.org/athletes/_/'..id..' '..(label or 'دو و میدانی جهانی')..']'..p.getCatForId( 'IAAF' )
end
function p.iccuLink( id, label )
--P396's format regex: IT\\ICCU\\(\d{10}|\D\D[\D\d]\D\\\d{6}) (e.g. IT\ICCU\CFIV\000163)
if not id:match( '^IT\\ICCU\\%d%d%d%d%d%d%d%d%d%d$' ) and -- Not localized
not id:match( '^IT\\ICCU\\%u%u[%u%d]%u\\%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) -- Not localized
return false
end
return '[https://opac.sbn.it/opacsbn/opac/iccu/scheda_authority.jsp?bid='..id..' '..(label or 'ایتالیا')..']'..p.getCatForId( 'ICCU' )
end
function p.iciaLink( id, label )
--P1736's format regex: \d+ (e.g. 1)
if not id:match( '^%d+$' ) then
return false
end
return '[https://www.imj.org.il/artcenter/newsite/en/?artist='..id..' '..(label or 'آیسیآیای (اسرائیل)')..']'..p.getCatForId( 'ICIA' )
end
function p.ieuLink( id, label )
--P9070's format regex: [A-Z]\\[A-Z]\\[A-Za-z0-9]+ (e.g. K\Y\Kyiv)
if not id:match( '^[A-Z]\\[A-Z]\\%w+$' ) then -- Not localized
return false
end
return '[http://www.encyclopediaofukraine.com/display.asp?linkpath=pages\\'..id..' '..(label or 'دانشنامه اینترنتی اکراین')..']'..p.getCatForId( 'IEU' )
end
function p.isniLink( id, label )
id = p.validateIsni( id ) --e.g. 0000-0000-6653-4145
if not id then
return false
end
return '[https://isni.org/isni/'..id..' '..(label or 'ISNI')..']'..p.getCatForId( 'ISNI' ) -- Not localized (intentionally)
end
function p.jocondeLink( id, label )
--P347's format regex: [\-0-9A-Za-z]{11} (e.g. 12345678901)
local regex = '^'..mw.ustring.rep('[%-0-9A-Za-z]', 11)..'$' -- Not localized
if not id:match( regex ) then
return false
end
return '[https://www.pop.culture.gouv.fr/notice/joconde/'..id..' '..(label or 'ژوکوند (فرانسه)')..']'..p.getCatForId( 'Joconde' )
end
function p.kulturnavLink( id, label )
--P1248's format regex: [0-9a-f]{8}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{12} (e.g. 12345678-1234-1234-1234-1234567890AB)
if not id:match( '^%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
end
return '[http://kulturnav.org/'..id..' '..(label or 'کولتورناو (نروژ)')..']'..p.getCatForId( 'KULTURNAV' ) --no https as of 9/2019 -- Not localized
end
function p.lccnLink( id, label )
local parts = p.splitLccn( id ) --e.g. n78039510
if not parts then
return false
end
local lccnType = parts[1] ~= 'sh' and 'names' or 'subjects'
id = parts[1] .. parts[2] .. p.append( parts[3], '0', 6 )
return '[https://id.loc.gov/authorities/'..lccnType..'/'..id..' '..(label or 'ایالات متحده آمریکا')..']'..p.getCatForId( 'LCCN' )
end
function p.lirLink( id, label )
--P886's format regex: \d+ (e.g. 1)
if not id:match( '^%d+$' ) then
return false
end
return '[http://www.e-lir.ch/e-LIR___Lexicon.'..id..'.450.0.html '..(label or 'واژهنامه تاریخی مشبک (سوئیس)')..']'..p.getCatForId( 'LIR' ) --no https as of 9/2019
end
function p.lnbLink( id, label )
--P1368's format regex: \d{9} (e.g. 123456789)
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then
return false
end
return '[https://kopkatalogs.lv/F?func=direct&local_base=lnc10&doc_number='..id..'&P_CON_LNG=ENG '..(label or 'لتونی')..']'..p.getCatForId( 'LNB' )
end
function p.leonoreLink( id, label )
--P640's format regex: LH/\d{1,4}/\d{1,3}|19800035/\d{1,4}/\d{1,5}(Bis)?|C/0/\d{1,2} (e.g. LH/2064/18)
if not id:match( '^LH/%d%d?%d?%d?/%d%d?%d?$' ) and --IDs from LH/1/1 to LH/2794/54 (legionaries) Not localized
not id:match( '^19800035/%d%d?%d?%d?/%d%d?%d?%d?%d?$' ) and --IDs from 19800035/1/1 to 19800035/385/51670 (legionnaires who died 1954-1977 & some who died < 1954) Not localized
not id:match( '^C/0/%d%d?$' ) then --IDs from C/0/1 to C/0/84 (84 famous legionaries) Not localized
return false
end
return '[https://www.culture.gouv.fr/public/mistral/leonore_fr?ACTION=CHERCHER&FIELD_1=COTE&VALUE_1='..id..' '..(label or 'لیونور (فرانسه)')..']'..p.getCatForId( 'Léonore' )
end
function p.maLink( id, label )
--P6366's format regex: [1-9]\d{4,9} (e.g. 1498221862)
if not id:match( '^[1-9]%d%d%d%d%d?%d?%d?%d?%d?$' ) then -- Not localized
return false
end
return '[https://academic.microsoft.com/v2/detail/'..id..' '..(label or 'مایکروسافت آکادمیک')..']'..p.getCatForId( 'MA' )
end
function p.mbaLink( id, label )
--P434's format regex: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (e.g. 12345678-1234-1234-1234-1234567890AB)
if not id:match( '^%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 -- Not localized
return false
end
local url = 'https://musicbrainz.org/artist/'..id
local cat = p.getCatForId( 'MusicBrainz' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[' .. url .. ' هنرمند] [[موزیکبرینز]]' .. cat
end
end
function p.mbareaLink( id, label )
--P982's format regex: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (e.g. 12345678-1234-1234-1234-1234567890AB)
if not id:match( '^%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
end
local url = 'https://musicbrainz.org/area/'..id
local cat = p.getCatForId( 'MusicBrainz area' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[' .. url .. ' منطقهٔ] [[موزیکبرینز]]' .. cat
end
end
function p.mbiLink( id, label )
--P1330's format regex: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (e.g. 12345678-1234-1234-1234-1234567890AB)
if not id:match( '^%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 -- Not localized
return false
end
local url = 'https://musicbrainz.org/instrument/'..id
local cat = p.getCatForId( 'MusicBrainz instrument' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[' .. url .. ' ساز] [[موزیکبرینز]]' .. cat
end
end
function p.mblLink( id, label )
--P966's format regex: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (e.g. 12345678-1234-1234-1234-1234567890AB)
if not id:match( '^%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 -- Not localized
return false
end
local url = 'https://musicbrainz.org/label/'..id
local cat = p.getCatForId( 'MusicBrainz label' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[' .. url .. ' ناشر] [[موزیکبرینز]]' .. cat
end
end
function p.mbpLink( id, label )
--P1004's format regex: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (e.g. 12345678-1234-1234-1234-1234567890AB)
if not id:match( '^%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 -- Not localized
return false
end
local url = 'https://musicbrainz.org/place/'..id
local cat = p.getCatForId( 'MusicBrainz place' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[' .. url .. ' مکان] [[موزیکبرینز]]' .. cat
end
end
function p.mbrgLink( id, label )
--P436's format regex: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (e.g. 12345678-1234-1234-1234-1234567890AB)
if not id:match( '^%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 -- Not localized
return false
end
local url = 'https://musicbrainz.org/release-group/'..id
local cat = p.getCatForId( 'MusicBrainz release group' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[' .. url .. ' گروه انتشار] [[موزیکبرینز]]' .. cat
end
end
function p.mbsLink( id, label )
--P1407's format regex: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (e.g. 12345678-1234-1234-1234-1234567890AB)
if not id:match( '^%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 -- Not localized
return false
end
local url = 'https://musicbrainz.org/series/'..id
local cat = p.getCatForId( 'MusicBrainz series' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[' .. url .. ' مجموعهٔ] [[موزیکبرینز]]' .. cat
end
end
function p.mbwLink( id, label )
--P435's format regex: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} (e.g. 12345678-1234-1234-1234-1234567890AB)
if not id:match( '^%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 -- Not localized
return false
end
local url = 'https://musicbrainz.org/work/'..id
local cat = p.getCatForId( 'MusicBrainz work' )--special cat name
if label then
return '['..url..' '..label..']'..cat
else
return '[' .. url .. ' اثر] [[موزیکبرینز]]' .. cat
end
end
function p.mgpLink( id, label )
--P549's format regex: \d{1,6} (e.g. 123456)
if not id:match( '^%d%d?%d?%d?%d?%d?$' ) then -- Not localized
return false
end
return '[https://genealogy.math.ndsu.nodak.edu/id.php?id='..id..' '..(label or 'پروژهٔ تبارشناسی ریاضیات')..']'..p.getCatForId( 'MGP' )
end
function p.naraLink( id, label )
--P1225's format regex: ^([1-9]\d{0,8})$ (e.g. 123456789)
if not id:match( '^[1-9]%d?%d?%d?%d?%d?%d?%d?%d?$' ) then -- Not localized
return false
end
return '[https://catalog.archives.gov/id/'..id..' '..(label or 'بایگانی ملی (ایالت متحده)')..']'..p.getCatForId( 'NARA' )
end
function p.nclLink( id, label )
--P1048's format regex: \d+ (e.g. 1081436)
if not id:match( '^%d+$' ) then
return false
end
return '[https://aleweb.ncl.edu.tw/F/?func=accref&acc_sequence='..id..'&CON_LNG=ENG '..(label or 'تایوان')..']'..p.getCatForId( 'NCL' )
end
function p.ndlLink( id, label )
--P349's format regex: 0?\d{8} (e.g. 012345678)
if not id:match( '^0?%d%d%d%d%d%d%d%d$' ) then -- Not localized
return false
end
return '[https://id.ndl.go.jp/auth/ndlna/'..id..' '..(label or 'ژاپن')..']'..p.getCatForId( 'NDL' )
end
function p.ngvLink( id, label )
--P2041's format regex: \d+ (e.g. 12354)
if not id:match( '^%d+$' ) then
return false
end
return '[https://www.ngv.vic.gov.au/explore/collection/artist/'..id..'/ '..(label or 'ویکتوریا')..']'..p.getCatForId( 'NGV' )
end
function p.nkcLink( id, label )
--P691's format regex: [a-z]{2,4}[0-9]{2,14} (e.g. abcd12345678901234)
if not id:match( '^[a-z][a-z][a-z]?[a-z]?%d%d%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?$' ) then -- Not localized
return false
end
return '[https://aleph.nkp.cz/F/?func=find-c&local_base=aut&ccl_term=ica='..id..'&CON_LNG=ENG '..(label or 'جمهوری چک')..']'..p.getCatForId( 'NKC' )
end
function p.nlaLink( id, label )
--P409's format regex: [1-9][0-9]{0,11} (e.g. 123456789012)
if not id:match( '^[1-9]%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?%d?$' ) then -- Not localized
return false
end
return '[https://nla.gov.au/anbd.aut-an'..id..' '..(label or 'استرالیا')..']'..p.getCatForId( 'NLA' )
end
function p.nlgLink( id, label )
--P3348's format regex: [1-9]\d* (e.g. 1)
if not id:match( '^[1-9]%d*$' ) then -- Not localized
return false
end
return '[https://data.nlg.gr/resource/authority/record'..id..' '..(label or 'یونان')..']'..p.getCatForId( 'NLG' )
end
function p.nliLink( id, label )
--P949's format regex: \d{9} (e.g. 123456789)
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then -- Not localized
return false
end
return '[http://uli.nli.org.il/F/?func=direct&doc_number='..id..'&local_base=nlx10'..' '..(label or 'اسرائیل')..']'..p.getCatForId( 'NLI' )
end
function p.nlkLink( id, label )
--P5034's format regex: KA.(19|20).{7} (e.g. KAC201501465)
if not id:match( '^KA.19.......$' ) and -- Not localized
not id:match( '^KA.20.......$' ) then -- Not localized
return false
end
return '[https://nl.go.kr/authorities/resource/'..id..' '..(label or 'کره')..']'..p.getCatForId( 'NLK' )
end
function p.nlpLink( id, label )
--P1695's format regex: 9810[0-9]\d* or A[0-9]{7}[0-9X] (e.g. 9810123456789012345 or A10414836)
if not id:match( '^9810%d+$' ) and -- Not localized
not id:match( '^A%d%d%d%d%d%d%d[%dX]$' ) then -- Not localized
return false
end
return '[https://tools.wmflabs.org/wikidata-externalid-url?p=1695&id='..id..' '..(label or 'لهستان')..']'..p.getCatForId( 'NLP' )
end
function p.nlrLink( id, label )
--P1003's format regex: \d{9} (e.g. 123456789)
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then -- Not localized
return false
end
return '[http://aleph.bibnat.ro:8991/F/?func=direct&local_base=NLR10&doc_number='..id..' '..(label or 'رومانی')..']'..p.getCatForId( 'NLR' )
end
function p.nskLink( id, label )
--P1375's format regex: \d{9} (e.g. 123456789)
if not id:match( '^%d%d%d%d%d%d%d%d%d$' ) then -- Not localized
return false
end
return '[http://katalog.nsk.hr/F/?func=direct&doc_number='..id..'&local_base=nsk10 '..(label or 'کرواسی')..']'..p.getCatForId( 'NSK' ) --no https as of 6/2021
end
function p.ntaLink( id, label )
--P1006's format regex: \d{8}[\dX] (e.g. 12345678X)
if not id:match( '^%d%d%d%d%d%d%d%d[%dX]$' ) then -- Not localized
return false
end
return '[http://data.bibliotheken.nl/id/thes/p'..id..' '..(label or 'هلند')..']'..p.getCatForId( 'NTA' )
end
function p.orcidLink( id, label )
id = p.validateIsni( id ) --e.g. 0000-0002-7398-5483
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 '[https://orcid.org/'..id..' '..(label or 'اُرکید')..']'..p.getCatForId( 'ORCID' )
end
function p.picLink( id, label )
--P2750's format regex: [1-9]\d* (e.g. 1)
if not id:match( '^[1-9]%d*$' ) then -- Not localized
return false
end
return '[https://pic.nypl.org/constituents/'..id..' '..(label or 'هویت عکاسان')..']'..p.getCatForId( 'PIC' )
end
function p.plwabnLink( id, label )
--P7293's format regex: 981[0-9]{8}05606 (e.g. 9810696457305606)
if not id:match( '^981%d%d%d%d%d%d%d%d05606*$' ) then -- Not localized
return false
end
return '[http://mak.bn.org.pl/cgi-bin/KHW/makwww.exe?BM=1&NU=1&IM=4&WI='..id..' '..(label or 'لهستان')..']'..p.getCatForId( 'PLWABN' )
end
function p.publonsLink( id, label )
--P3829's format regex: \d+ (e.g. 654601)
if not id:match( '^%d+$' ) then
return false
end
return '[https://publons.com/author/'..id..'/ '..(label or 'پابلونز (پژوهشگران)')..']'..p.getCatForId( 'Publons' )
end
function p.ridLink( id, label )
--P1053's format regex: [A-Z]{1,3}-\d{4}-(19|20)\d\d (e.g. AAS-5150-2020)
if not id:match( '^[A-Z][A-Z]?[A-Z]?%-%d%d%d%d%-19%d%d$' ) and -- Not localized
not id:match( '^[A-Z][A-Z]?[A-Z]?%-%d%d%d%d%-20%d%d$' ) then -- Not localized
return false
end
return '[https://www.researcherid.com/rid/'..id..' '..(label or 'ریسرچر آیدی')..']'..p.getCatForId( 'RID' )
end
function p.rismLink( id, label )
--P5504's format regex: (pe|ks)?\[1-9]d* (e.g. pe30006410)
if not id:match( '^pe[1-9]%d*$' ) and --99% start with 'pe' Not localized
not id:match( '^ks[1-9]%d*$' ) and -- Not localized
not id:match( '^[1-9]%d*$' ) then -- Not localized
return false
end
return '[https://opac.rism.info/search?id='..id..' '..(label or 'ریسم (فرانسه)')..']'..p.getCatForId( 'RISM' )
end
function p.reroLink( id, label )
--P3065's format regex: 0[1-2]-[A-Z0-9]{1,10} (e.g. 02-A012345678)
if not id:match( '^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]?$' ) then -- Not localized
return false
end
return '[http://data.rero.ch/'..id..' '..(label or 'ریرو (سوئیس)')..']'..p.getCatForId( 'RERO' )
end
function p.rkdartistsLink( id, label )
--P650's format regex: [1-9]\d{0,5} (e.g. 123456)
if not id:match( '^[1-9]%d?%d?%d?%d?%d?$' ) then -- Not localized
return false
end
return '[https://rkd.nl/en/explore/artists/'..id..' '..(label or 'هنرمندان آرکیدی (هلند)')..']'..p.getCatForId( 'RKDartists' )
end
function p.rkdidLink( id, label )
--P350's format regex: [1-9]\d{0,5} (e.g. 123456)
if not id:match( '^[1-9]%d?%d?%d?%d?%d?$' ) then -- Not localized
return false
end
return '[https://rkd.nl/nl/explore/images/'..id..' '..(label or 'شناسه آرکیدی (هلند)')..']'..p.getCatForId( 'RKDID' )
end
function p.rslLink( id, label )
--P947's format regex: \d{1,9} (e.g. 123456789)
if not id:match( '^%d%d?%d?%d?%d?%d?%d?%d?%d?$' ) then
return false
end
return '[http://aleph.rsl.ru/F?func=find-b&find_code=SYS&adjacent=Y&local_base=RSL11&request='..id..'&CON_LNG=ENG '..(label or 'Russia')..']'..p.getCatForId( 'RSL' ) --no https as of 9/2019
end
function p.selibrLink( id, label )
--P906's format regex: [1-9]\d{4,5} (e.g. 123456)
if not id:match( '^[1-9]%d%d%d%d%d?$' ) then -- Not localized
return false
end
return '[https://libris.kb.se/auth/'..id..' '..(label or 'سوئد')..']'..p.getCatForId( 'SELIBR' )
end
function p.sikartLink( id, label )
--P781's format regex: \d{7,9} (e.g. 123456789)
if not id:match( '^%d%d%d%d%d%d%d%d?%d?$' ) then
return false
end
return '[https://www.sikart.ch/KuenstlerInnen.aspx?id='..id..'&lng=en '..(label or 'SIKART (سوئیس)')..']'..p.getCatForId( 'SIKART' )
end
function p.snacLink( id, label )
--P3430's format regex: \d*[A-Za-z][0-9A-Za-z]* (e.g. A)
if not id:match( '^%d*[A-Za-z][0-9A-Za-z]*$' ) then -- Not localized
return false
end
return '[https://snaccooperative.org/ark:/99166/'..id..' '..(label or 'شبکه اجتماعی و محتوای بایگانی شونده')..']'..p.getCatForId( 'SNAC-ID' )
end
function p.sudocLink( id, label )
--P269's format regex: (\d{8}[\dX]|) (e.g. 026927608)
if not id:match( '^%d%d%d%d%d%d%d%d[%dxX]$' ) then --legacy: allow lowercase 'x' Not localized
return false
end
return '[https://www.idref.fr/'..id..' '..(label or 'SUDOC (فرانسه)')..']'..p.getCatForId( 'SUDOC' )
end
function p.s2authoridLink( id, label )
--P4012's format regex: [1-9]\d* (e.g. 1796130)
if not id:match( '^[1-9]%d*$' ) then -- Not localized
return false
end
return '[https://www.semanticscholar.org/author/'..id..' '..(label or 'سمانتیک اسکالر')..']'..p.getCatForId( 'Semantic Scholar author' ) --special cat name
end
function p.ta98Link( id, label )
--P1323's format regex: A\d{2}\.\d\.\d{2}\.\d{3}[FM]? (e.g. A12.3.45.678)
if not id:match( '^A%d%d%.%d%.%d%d%.%d%d%d[FM]?$' ) then -- Not localized
return false
end
return '[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='..id..' '..(label or 'واژگان کالبدشناسی')..']'..p.getCatForId( 'TA98' )
end
function p.tdviaLink( id, label )
--P7314's format regex: [a-z/-]+] (e.g. barkan-omer-lutfi)
if not id:match( '^[a-z/-]+$' ) then -- Not localized
return false
end
return '[https://islamansiklopedisi.org.tr/'..id..' '..(label or 'دانشنامه اسلام')..']'..p.getCatForId( 'TDVİA' )
end
function p.tepapaLink( id, label )
--P3544's format regex: \d+ (e.g. 1)
if not id:match( '^%d+$' ) then
return false
end
return '[https://collections.tepapa.govt.nz/agent/'..id..' '..(label or 'تی پاپا (نیوزیلند)')..']'..p.getCatForId( 'TePapa' )
end
function p.tlsLink( id, label )
id = id:gsub(' +', '_')
--P1362's format regex: \p{Lu}[\p{L}\d_',\.\-\(\)\*/–]{3,59} (e.g. Abcd)
local class = "[%a%d_',%.%-%(%)%*/–]" -- Not localized
local regex = "^%u"..string.rep(class, 3)..string.rep(class.."?", 56).."$"
if not mw.ustring.match( id, regex ) then
return false
end
return '[http://tls.theaterwissenschaft.ch/wiki/'..id..' '..(label or 'فرهنگ تئاتر (سوئیس)')..']'..p.getCatForId( 'TLS' ) --no https as of 6/2021
end
function p.troveLink( id, label )
--P1315's format regex: [1-9]\d{5,7} (e.g. 12345678)
if not id:match( '^[1-9]%d%d%d%d%d%d?%d?$' ) then -- Not localized
return false
end
return '[https://trove.nla.gov.au/people/'..id..' '..(label or 'تروف (استرالیا)')..']'..p.getCatForId( 'Trove' )
end
function p.ukparlLink( id, label )
--P6213's format regex: [a-zA-Z\d]{8} (e.g. AQUupyiR)
if not id:match( '^[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]$' ) then -- Not localized
return false
end
return '[https://id.parliament.uk/'..id..' '..(label or 'پارلمان بریتانیا')..']'..p.getCatForId( 'UKPARL' )
end
function p.ulanLink( id, label )
--P245's format regex: 500\d{6} (e.g. 500123456)
if not id:match( '^500%d%d%d%d%d%d$' ) then -- Not localized
return false
end
return '[https://www.getty.edu/vow/ULANFullDisplay?find=&role=&nation=&subjectid='..id..' '..(label or 'نام هنرمندان (گتی)')..']'..p.getCatForId( 'ULAN' )
end
function p.uscongressLink( id, label )
--P1157's format regex: [A-Z]00[01]\d{3} (e.g. A000123)
if not id:match( '^[A-Z]00[01]%d%d%d$' ) then -- Not localized
return false
end
return '[http://bioguide.congress.gov/scripts/biodisplay.pl?index='..id..' '..(label or 'کنگره آمریکا')..']'..p.getCatForId( 'USCongress' ) --no https as of 9/2019
end
function p.vcbaLink( id, label )
--P8034's format regex: \d{3}\/[1-9]\d{0,5} (e.g. 494/9793)
if not id:match( '^%d%d%d\/[1-9]%d?%d?%d?%d?%d?$' ) then -- Not localized
return false
end
id = id:gsub('\/', '_')
return '[https://opac.vatlib.it/auth/detail/'..id..' '..(label or 'واتیکان')..']'..p.getCatForId( 'VcBA' )
end
function p.viafLink( id, label )
--P214's format regex: [1-9]\d(\d{0,7}|\d{17,20}) (e.g. 123456789, 1234567890123456789012)
if not id:match( '^[1-9]%d%d?%d?%d?%d?%d?%d?%d?$' ) and -- Not localized
not id:match( '^[1-9]%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d?%d?%d?$' ) then -- Not localized
return false
end
-- If the "VIAF" entry at [[:m:Interwiki map]] would resolve to "https://viaf.org/viaf/$1" (rather than "http://viaf.org/viaf/$1", as it currently still does), the code below could change from '[https://viaf.org/viaf/'..id..' '..id..']' to '[[:VIAF:'..id..'|'..id..']]'.
return '[https://viaf.org/viaf/'..id..' '..(label or 'ویاف')..']'..p.getCatForId( 'VIAF' )
end
--[[=========================== Helper functions =============================]]
function p.append(str, c, length)
while str:len() < length do
str = c .. str
end
return str
end
--Returns the ISNI check digit isni must be a string where the 15 first elements are digits, e.g. 0000000066534145
function p.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
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 -- Not localized
return false
end
if p.getIsniCheckDigit( id ) ~= string.char( id:byte( 16 ) ) then
return false
end
return id
end
function p.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 -- Not localized
id = id:gsub( '^(%l+)(%d+)(%d%d%d%d%d%d)$', '%1/%2/%3' ) -- Not localized
end
if id:match( '^%l%l?%l?/%d%d%d?%d?/%d+$' ) then
return mw.text.split( id, '/' )
end
return false
end
--[[==========================================================================]]
--[[ Wikidata & documentation functions ]]
--[[==========================================================================]]
function p.getIdsFromWikidata( itemId, property )
local ids = {}
local statements = mw.wikibase.getBestStatements( itemId, property )
if statements then
for _, statement in ipairs( statements ) do
if statement.mainsnak.datavalue then
table.insert( ids, statement.mainsnak.datavalue.value )
end
end
end
return ids
end
-- Creates a human-readable standalone wikitable version of p.conf, and tracking categories with page counts, for use in the documentation
function p.docConfTable( frame )
local wikiTable = '{| class="wikitable sortable"\n'..
'! rowspan=2 | پارامتر\n'..
'! rowspan=2 | بخش\n'..
'! rowspan=2 | نمایش بهشکل\n'..
'! rowspan=2; data-sort-type=number | ویژگی ویکیداده\n'..
'! colspan=4 | ردههای ردیابی و شمار صفحهها\n'..
'|-\n'..
'! [[:رده:مقالههای ویکیپدیا همراه اطلاعات دادههای کتابخانهای|'.. 'مقالهها]]\n'..
'! [[:رده:صفحههای کاربری دارای اطلاعات دادههای کتابخانهای|'.. 'صفحههای کاربری]]\n'..
'! [[:رده:صفحههای متفرقه دارای اطلاعات دادههای کتابخانهای|'.. 'صفحههای متفرقه]]\n'..
'! [[:رده:مقالههای ویکیپدیا همراه اطلاعات معیوب دادههای کتابخانهای|'..'شناسههای معیوب]]\n'..
'|-\n'
local lang = mw.getContentLanguage()
for _, conf in pairs( p.conf ) do
local param, pid, section = conf[1], conf[2], conf[4]
local appearsAs
if param == "WORLDCATID" then
-- WorldCat is special
appearsAs = "[https://www.worldcat.org/identities/lccn-n78039510 ورلدکت]"
elseif conf.prefix then
appearsAs = conf.prefix
else
appearsAs = conf[3](conf[5])
end
local link = conf.link or param .. ' (شناسه)'
local category = conf.category or param
local args = { id = 'f', pid }
local wpl = frame:expandTemplate{ title = 'پیوند خصوصیت ویکیداده', args = args }
--cats
local articleCat = 'مقالههای ویکیپدیا همراه شناسههای '..category
local userCat = 'صفحههای کاربری دارای شناسههای '..category
local miscCat = 'صفحههای متفرقه دارای شناسههای '..category
local faultyCat = 'مقالههای ویکیپدیا همراه شناسههای معیوب '..category
--counts
local articleCount = lang:formatNum( mw.site.stats.pagesInCategory(articleCat, 'pages') )
local userCount = lang:formatNum( mw.site.stats.pagesInCategory(userCat, 'pages') )
local miscCount = lang:formatNum( mw.site.stats.pagesInCategory(miscCat, 'pages') )
local faultyCount = lang:formatNum( mw.site.stats.pagesInCategory(faultyCat, 'pages') )
--concat
wikiTable = wikiTable..'\n'..
'|-\n'..
'||[['..link..'|'..param..']]'..
'||'..section..
'||'..appearsAs..
'||data-sort-value='..pid..'|'..wpl..
'||style="text-align: left;"|[[:رده:'..articleCat..'|'..articleCount..']]'..
'||style="text-align: left;"|[[:رده:'.. userCat..'|'.. userCount..']]'..
'||style="text-align: left;"|[[:رده:'.. miscCat..'|'.. miscCount..']]'..
'||style="text-align: left;"|[[:رده:'.. faultyCat..'|'.. faultyCount..']]'
end
--append derivative WorldCat cats
local wcd = { 'WorldCat-LCCN', 'WorldCat-VIAF' }
for _, w in pairs(wcd) do
local articleCat = 'مقالههای ویکیپدیا همراه شناسههای '..w
local articleCount = lang:formatNum( mw.site.stats.pagesInCategory(articleCat, 'pages') )
local appearsAs
if w == "WorldCat-LCCN" then
appearsAs = "[https://www.worldcat.org/identities/lccn-n79-113947 ورلدکت (از طریق کتابخانهٔ کنگره)]"
else
appearsAs = "[https://www.worldcat.org/identities/containsVIAFID/12345789 ورلدکت (از طریق ویاف)]"
end
wikiTable = wikiTable..'\n'..
'|-\n'..
'||'..'—'..
'||عمومی'..
'||'..appearsAs..
'||data-sort-value='..w..'|'..'—'..
'||style="text-align: left;"|[[:رده:'..articleCat..'|'..articleCount..']]'..
'||style="text-align: left;"|—'..
'||style="text-align: left;"|—'..
'||style="text-align: left;"|—'
end
return require("Module:Suppress categories").main(wikiTable)..'\n|}'
end
--[[==========================================================================]]
--[[ Configuration ]]
--[[==========================================================================]]
-- If a specific "(identifier) redirect" exists for an identifier, please route through this particular redirect rather than linking directly to the target page. This reduces clutter in "What links here" and improves reverse lookup of articles where a manifestation of this particular identifier is used.
-- Parameter format: { 'parameter name', propertyId # in Wikidata, formatting/validation function, section, example ID for documentation }
-- Optional named parameters: `link` to override the link in the documentation (defaults to parameter + (identifer)),
-- category to override the ID in category names (defaults to parameter),
-- prefix to include a prefix (usually a wikilink explaining what the identifier is) before the external link itself
p.conf = {
{ 'AAG', 3372, p.aagLink, "نگارخانههای هنری و موزهها", "1"},
{ 'ACM-DL', 864, p.acmLink, "پایگاههای دادهٔ علمی", "12345678901", link = "ایسیام دیال (شناسه)" },
{ 'ADB', 1907, p.adbLink,"واژهنامههای زندگینامهای", "barton-sir-edmund-toby-71"},
{ 'AGSA', 6804, p.agsaLink, "نگارخانههای هنری و موزهها", "3625"},
{ 'autores.uy', 2558, p.autoresuyLink, "واژهنامههای زندگینامهای", "12345"},
{ 'AWR', 4186, p.awrLink, "واژهنامههای زندگینامهای", "PR00768b"},
{ 'BIBSYS', 1015, p.bibsysLink, "کتابخانههای ملی", "1234567890123"},
{ 'Bildindex', 2092, p.bildLink, "نهادهای پژوهش هنری", "1"},
{ 'BNC', 1890, p.bncLink, "کتابخانههای ملی", "123456789"},
{ 'BNE', 950, p.bneLink, "کتابخانههای ملی", "XX1234567"},
{ 'BNF', 268, p.bnfLink, "کتابخانههای ملی", "123456789"},
{ 'Botanist', 428, p.botanistLink , "پایگاههای دادهٔ علمی", "L."},
{ 'BPN', 651, p.bpnLink , "واژهنامههای زندگینامهای", "12345678"},
{ 'CANTIC', 1273, p.canticLink, "کتابخانههای ملی", "a12345678"},
{ 'CINII', 271, p.ciniiLink, "پایگاههای دادهٔ علمی", "DA12345678", link = "ساینی (شناسه)"},
{ 'CWGC', 1908, p.cwgcLink, "دیگر", "1234567"},
{ 'DAAO', 1707, p.daaoLink, "نهادهای پژوهش هنری", "rolf-harris"},
{ 'DBLP', 2456, p.dblpLink, "پایگاههای دادهٔ علمی", "123/123"},
{ 'DIB', 6829, p.dibLink, "واژهنامههای زندگینامهای", "a1234"},
{ 'DSI', 2349, p.dsiLink, "نهادهای پژوهش هنری", "1538"},
{ 'FAST', 2163, p.fastLink, "دیگر", "1"},
{ 'FNZA', 6792, p.fnzaLink, "نهادهای پژوهش هنری", "12"},
{ 'GND', 227, p.gndLink, "عمومی", "4079154-3"},
{ 'HDS', 902, p.hdsLink, "دیگر", "050123"},
{ 'IAAF', 1146, p.iaafLink, "دیگر", "123"},
{ 'ICCU', 396, p.iccuLink, "کتابخانههای ملی", "IT\\ICCU\\CFIV\\000163"}, --formerly SBN
{ 'ICIA', 1736, p.iciaLink, "نهادهای پژوهش هنری", "1"},
{ 'IEU', 9070, p.ieuLink, "دیگر", "N\\A\\NationalAcademyofArtandArchitecture"},
{ 'ISNI', 213, p.isniLink, "عمومی", "0000-0000-6653-4145", prefix = '[[آیاسانآی (شناسه)|ISNI]]'},
{ 'Joconde', 347, p.jocondeLink, "نهادهای پژوهش هنری", "12345678901"},
{ 'KULTURNAV', 1248, p.kulturnavLink, "نهادهای پژوهش هنری", "12345678-1234-1234-1234-1234567890AB", link="کولتورناو (شناسه)"},
{ 'LCCN', 244, p.lccnLink, "کتابخانههای ملی", "n78039510"},
{ 'LIR', 886, p.lirLink, "دیگر", "1"},
{ 'LNB', 1368, p.lnbLink, "کتابخانههای ملی", "123456789"},
{ 'Léonore', 640, p.leonoreLink, "دیگر", "LH/1/1", prefix = "[[لیونور (شناسه)|لیونور (فرانسه)]]"},
{ 'MA', 6366, p.maLink, "دیگر", "123456789"},
{ 'MBA', 434, p.mbaLink, "دیگر", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainz'}, --special cat name
{ 'MBAREA', 982, p.mbareaLink, "دیگر", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainz area' }, --special cat name
{ 'MBI', 1330, p.mbiLink, "دیگر", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainz instrument' }, --special cat name
{ 'MBL', 966, p.mblLink, "دیگر", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainz label' }, --special cat name
{ 'MBP', 1004, p.mbpLink, "دیگر", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainz place' }, --special cat name
{ 'MBRG', 436, p.mbrgLink, "دیگر", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainz release group' }, --special cat name
{ 'MBS', 1407, p.mbsLink, "دیگر", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainz series' }, --special cat name
{ 'MBW', 435, p.mbwLink, "دیگر", "12345678-1234-1234-1234-1234567890AB", category = 'MusicBrainz work' }, --special cat name
{ 'MGP', 549, p.mgpLink, "پایگاههای دادهٔ علمی", "123456"},
{ 'NARA', 1225, p.naraLink, "دیگر", "12345678"},
{ 'NCL', 1048, p.nclLink, "کتابخانههای ملی", "1081436"},
{ 'NDL', 349, p.ndlLink, "کتابخانههای ملی", "012345678"},
{ 'NGV', 2041, p.ngvLink, "نگارخانههای هنری و موزهها", "12354"},
{ 'NKC', 691, p.nkcLink, "کتابخانههای ملی", "abcd12345678901234"},
{ 'NLA', 409, p.nlaLink, "کتابخانههای ملی", "123456789012"},
{ 'NLG', 3348, p.nlgLink, "کتابخانههای ملی", "12345678"},
{ 'NLI', 949, p.nliLink, "کتابخانههای ملی", "123456789"},
{ 'NLK', 5034, p.nlkLink, "کتابخانههای ملی", "KAB197000000"},
{ 'NLP', 1695, p.nlpLink, "کتابخانههای ملی", "9810123456789012345"},
{ 'NLR', 1003, p.nlrLink, "کتابخانههای ملی", "123456789"},
{ 'NSK', 1375, p.nskLink, "کتابخانههای ملی", "123456789"},
{ 'NTA', 1006, p.ntaLink, "کتابخانههای ملی", "12345678X"},
{ 'ORCID', 496, p.orcidLink, "عمومی", "0000-0002-7398-5483", prefix = '[[ارکید (شناسه)|اُرکید]]'},
{ 'PIC', 2750, p.picLink, "نهادهای پژوهش هنری", "1"},
{ 'PLWABN', 7293, p.plwabnLink, "کتابخانههای ملی", "9812345678905606"},
{ 'Publons', 3829, p.publonsLink, "پایگاههای دادهٔ علمی", "2776255"},
{ 'RID', 1053, p.ridLink, "پایگاههای دادهٔ علمی", "A-1234-1934"},
{ 'RISM', 5504, p.rismLink, "دیگر", "pe1", prefix = '[[ریسم (شناسه)|ریسم (فرانسه)]]'},
{ 'RERO', 3065, p.reroLink, "دیگر", "02-A012345678", prefix = '[[ریرو (شناسه)|ریرو (سوئیس)]]'},
{ 'RKDartists', 650, p.rkdartistsLink, "نهادهای پژوهش هنری", "123456"},
{ 'RKDID', 350, p.rkdidLink, "نهادهای پژوهش هنری", "123456"},
{ 'RSL', 947, p.rslLink, "کتابخانههای ملی", "123456789"},
{ 'SELIBR', 906, p.selibrLink, "کتابخانههای ملی", "123456"},
{ 'SIKART', 781, p.sikartLink, "نهادهای پژوهش هنری", '123456789'},
{ 'SNAC-ID', 3430, p.snacLink, "دیگر", "A"},
{ 'SUDOC', 269, p.sudocLink, "دیگر", "026927608", prefix = '[[سوداک (شناسه)|سوداک (فرانسه)]]'},
{ 'S2AuthorId', 4012, p.s2authoridLink, "پایگاههای دادهٔ علمی", "1796130", category = 'Semantic Scholar author' }, --special cat name
{ 'TA98', 1323, p.ta98Link, "پایگاههای دادهٔ علمی", "A12.3.45.678"},
{ 'TDVİA', 7314, p.tdviaLink, "دیگر", "asim-b-behdele"},
{ 'TePapa', 3544, p.tepapaLink, "نگارخانههای هنری و موزهها", "1"},
{ 'TLS', 1362, p.tlsLink, "دیگر", "Abcd"},
{ 'Trove', 1315, p.troveLink, "دیگر", "12345678", prefix = '[[تروف (شناسه)|تروف (استرالیا)]]'}, --formerly NLA-person
{ 'UKPARL', 6213, p.ukparlLink, "دیگر", "AQUupyiR"},
{ 'ULAN', 245, p.ulanLink, "نهادهای پژوهش هنری", "500123456"},
{ 'USCongress', 1157, p.uscongressLink, "دیگر", "A000123", link = "کنگره ایالات متحده (شناسه)"},
{ 'VcBA', 8034, p.vcbaLink, "کتابخانههای ملی", "494/9793"},
{ 'VIAF', 214, p.viafLink, "عمومی", "123456789", prefix = "[[برگهدان مستند مجازی بینالمللی|ویاف]]"},
{ 'WORLDCATID', 7859, nil, "عمومی", nil, link = "هویت ورلدکت (شناسه)"},
}
-- Legitimate aliases to p.conf, for convenience
-- Format: { 'alias', 'parameter name in p.conf' }
p.aliases = {
{ 'DNB', 'GND' }, --Deutsche Nationalbibliothek -> Gemeinsame Normdatei
{ 'Leonore', 'Léonore' }, --alias name without diacritics
{ 'leonore', 'Léonore' }, --lowercase variant without diacritics
{ '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:Wikipedia 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' },
}
--[[==========================================================================]]
--[[ Main ]]
--[[==========================================================================]]
function p.authorityControl( frame )
local resolveEntity = require( "Module:ResolveEntityId" )
local parentArgs = frame:getParent().args --WD IDs added here later
local iParentArgs = 0 --count original/manual parent args only later
local worldcatCat = ''
local multipleIdCat = ''
local suppressedIdCat = ''
local deprecatedIdCat = ''
local differentOnWDCat = ''
local sameOnWDCat = ''
--Redirect aliases to proper parameter names
for _, a in pairs( p.aliases ) do
local alias, param = a[1], a[2]
if (parentArgs[param] == nil or parentArgs[param] == '') and parentArgs[alias] then
parentArgs[param] = parentArgs[alias]
end
end
--Redirect deprecated parameters to proper parameter names, and assign tracking cat
for _, d in pairs( p.deprecated ) do
local dep, param = d[1], d[2]
if (parentArgs[param] == nil or parentArgs[param] == '') and parentArgs[dep] then
parentArgs[param] = parentArgs[dep]
if namespace == 0 then
deprecatedIdCat = '[[رده:مقالههای ویکیپدیا همراه شناسههای منسوخ دادههای کتابخانهای|'..dep..']]'
end
end
end
--Use QID= parameter for testing/example purposes only
local itemId = nil
if namespace ~= 0 then
local qid = parentArgs['qid'] or parentArgs['QID']
if qid then
itemId = 'Q'..mw.ustring.gsub(qid, '^[Qq]', '')
itemId = resolveEntity._id(itemId) --nil if unresolvable
end
else
itemId = mw.wikibase.getEntityIdForCurrentPage()
end
--Wikidata fallback if available
if itemId then
local iMatches = 0
for _, params in ipairs( p.conf ) do
if params[2] > 0 then
local val = parentArgs[mw.ustring.lower(params[1])] or parentArgs[params[1]]
if val == nil or val == '' then
local wikidataIds = p.getIdsFromWikidata( itemId, 'P'..params[2] )
if wikidataIds[1] then
if val == '' and (namespace == 0 or testcases) then
suppressedIdCat = '[[رده:مقالههای ویکیپدیا همراه شناسههای فرونشانیشده دادههای کتابخانهای|'..params[1]..']]'
else
parentArgs[params[1]] = wikidataIds[1] --add ID from WD
end
end
else
iParentArgs = iParentArgs + 1
local wikidataIds = p.getIdsFromWikidata( itemId, 'P'..params[2] )
if wikidataIds[1] and differentOnWDCat == '' then
local bMatch = false
for _, wd in pairs( wikidataIds ) do
if val == wd then
iMatches = iMatches + 1
bMatch = true
end
end
if bMatch == false then
differentOnWDCat = '[[رده:صفحههایی که از دادههای کتابخانهای با پارامترهای متفاوت در ویکیداده استفاده میکنند|'..params[1]..']]'
end end end end end
if iMatches > 0 and iMatches == iParentArgs then
sameOnWDCat = '[[رده:صفحههایی که از دادههای کتابخانهای همراه پارامترهای منطبق با ویکیداده استفاده میکنند]]'
end
end
--Configured rows
local rct = 0
local sectionOrder = {"عمومی","کتابخانههای ملی","نگارخانههای هنری و موزهها",
"نهادهای پژوهش هنری","واژهنامههای زندگینامهای","پایگاههای دادهٔ علمی",
"دیگر"}
local sections = {
["عمومی"] = {},
["کتابخانههای ملی"] = {},
["نگارخانههای هنری و موزهها"] = {},
["نهادهای پژوهش هنری"] = {},
["واژهنامههای زندگینامهای"] = {},
["پایگاههای دادهٔ علمی"] = {},
["دیگر"] = {}
}
-- Don't show NLP is PLWABN is present, since they both go to the National Library of Poland
-- and the library has deprecated NLP IDs in favor of PLWABN IDs
if parentArgs.PLWABN or parentArgs.plwabn then
parentArgs.NLP = ''
parentArgs.nlp = ''
end
for _, params in ipairs( p.conf ) do
local val = parentArgs[mw.ustring.lower(params[1])] or parentArgs[params[1]]
local tval, tlinks = {}, {} --init tables
if val and val ~= '' and type(params[3]) == 'function' then
table.insert( tval, val )
if params.prefix then
table.insert( tlinks, params[3]( val, "1" ) )
else
table.insert( tlinks, params[3]( val ) )
end
end
--collect other unique vals (IDs) from WD, if present
if itemId and tval[1] then
local nextIdVal = 2
local wikidataIds = p.getIdsFromWikidata( itemId, 'P'..params[2] )
for _, v in pairs( wikidataIds ) do
local bnew = true
for _, w in pairs( tval ) do
if v == w then bnew = false end
end
if bnew then
table.insert( tval, v )
table.insert( tlinks, params[3]( v, tostring(nextIdVal) ) )
nextIdVal = nextIdVal + 1
end
end
end
--assemble
if tval[1] then
table.insert( sections[params[4]], p.createRow( params[1], tval, nil, tlinks, true, params.category, params.prefix) )
rct = rct + 1
if tval[2] then
multipleIdCat = p.getCatForId( 'چندگانه' )
end
end
end
--WorldCat
local worldcatId = parentArgs['worldcatid'] or parentArgs['WORLDCATID']
if worldcatId and worldcatId ~= '' then --if WORLDCATID present & unsuppressed
table.insert( sections["عمومی"], p.createRow( 'WORLDCATID', worldcatId, '[https://www.worldcat.org/identities/'..mw.uri.encode(worldcatId, 'PATH')..' ورلدکت]', nil, false ) ) --Validation?
worldcatCat = p.getCatForId( 'WORLDCATID' )
rct = rct + 1
elseif worldcatId == nil then --if WORLDCATID absent but unsuppressed
local viafId = parentArgs['viaf'] or parentArgs['VIAF']
local lccnId = parentArgs['lccn'] or parentArgs['LCCN']
if viafId and viafId ~= '' and p.viafLink( viafId ) then --VIAF must be present, unsuppressed, & validated
table.insert( sections["عمومی"], p.createRow( 'VIAF', viafId, '[https://www.worldcat.org/identities/containsVIAFID/'..viafId..' ورلدکت (از طریق ویاف)]', nil, false ) )
if namespace == 0 then
worldcatCat = '[[رده:مقالههای ویکیپدیا همراه شناسههای WorldCat-VIAF]]'
end
rct = rct + 1
elseif lccnId and lccnId ~= '' and p.lccnLink( lccnId ) then --LCCN must be present, unsuppressed, & validated
local lccnParts = p.splitLccn( lccnId )
if lccnParts and lccnParts[1] ~= 'sh' then
local lccnIdFmtd = lccnParts[1]..lccnParts[2]..'-'..lccnParts[3]
table.insert( sections["عمومی"], p.createRow( 'LCCN', lccnId, '[https://www.worldcat.org/identities/lccn-'..lccnIdFmtd..' ورلدکت (از طریق کتابخانهٔ کنگره)]', nil, false ) )
if namespace == 0 then
worldcatCat = '[[رده:مقالههای ویکیپدیا همراه شناسههای WorldCat-LCCN]]'
end
end
rct = rct + 1
end
elseif worldcatId == '' then --if WORLDCATID suppressed
suppressedIdCat = '[[رده:مقالههای ویکیپدیا همراه شناسههای فرونشانیشده دادههای کتابخانهای|WORLDCATID]]'
end
local lang = mw.getContentLanguage()
local Navbox = require('Module:Navbox')
local elementsCat = ''
if rct == 0 or rct >= 25 then
local eCat = 'دادههای کتابخانهای با '..lang:formatNum(rct)..' عنصر'
elementsCat = '[[رده:'..eCat..']]'..p.redCatLink(eCat)
end
local outString = ''
if rct > 0 then
local sectionID = 1
local args = { pid = 'identifiers' } -- #target the list of identifiers
if testcases and itemId then args = { pid = 'identifiers', qid = itemId } end --expensive
local pencil = frame:expandTemplate{ title = 'EditAtWikidata', args = args}
local navboxArgs = {
name = 'دادههای کتابخانهای',
navboxclass = 'authority-control',
bodyclass = 'hlist',
state = parentArgs.state or 'autocollapse',
navbar = 'off'
}
for _, sectName in ipairs(sectionOrder) do
if #sections[sectName] ~= 0 then
navboxArgs["group" .. sectionID] = sectName
navboxArgs["list" .. sectionID] = table.concat(sections[sectName])
sectionID = sectionID + 1
end
end
if navboxArgs.group2 then
navboxArgs.title = "[[راهنما:دادههای کتابخانهای|دادههای کتابخانهای]]" .. pencil
else
local sect = navboxArgs.group1
if sect == "عمومی" or sect == "دیگر" then
-- Just say "Authority control" with no label if only general or only other IDs are present
-- since "general" is redundant and "other" is silly when there's nothing to contrast it with
navboxArgs.group1 = "[[راهنما:دادههای کتابخانهای|دادههای کتابخانهای]]" .. pencil
else
navboxArgs.group1 = "[[راهنما:دادههای کتابخانهای|دادههای کتابخانهای: " .. sect .. "]] " .. pencil
end
end
outString = Navbox._navbox(navboxArgs)
end
local auxCats = worldcatCat .. elementsCat .. multipleIdCat .. suppressedIdCat ..
deprecatedIdCat .. differentOnWDCat .. sameOnWDCat
if testcases then
auxCats = mw.ustring.gsub(auxCats, '(%[%[)(رده)', '%1:%2') --for easier checking
end
outString = outString .. auxCats
if namespace ~= 0 then
outString = mw.ustring.gsub(outString, '(%[%[)(رده:مقالههای ویکیپدیا)', '%1:%2') --by definition
end
return outString
end
return p