پودمان: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