Wikipedia diqwiki https://diq.wikipedia.org/wiki/Pela_Seri MediaWiki 1.47.0-wmf.5 first-letter Medya Xısusi Werênayış Karber Werênayışê karberi Wikipediya Werênayışê Wikipediya Dosya Werênayışê dosya MedyaWiki Werênayışê MedyaWikiyi Şablon Werênayışê şabloni Peşti Werênayışê peşti Kategoriye Werênayışê kategoriye Portal Werênayışê portali TimedText TimedText talk Modul Werênayışê moduli Event Event talk Alanya 0 13157 548939 488175 2026-06-06T14:39:18Z ~2026-33070-17 34013 /* Çımey */ 548939 wikitext text/x-wiki {{infobox Qeza}} '''Alanya''' (be Usmanıcanki: علاءيه ''Alâiye''), yew qezay [[Antalya]]ya. Antalya ra 140&nbsp;km dûria. Nıfusê cı heme 250.919, nıfusê sûke zi 99.000o. == Erd u Coğrafya == === Tene u qezenc === Alanya de erd ra giyandayış (qezenc); * Muz :4.318.365 kilo * Portaqale :6.283.114 kilo * Eriga Malt :2.060.636 kilo * Mandalina :950.465 kilo * Limone :2.626.988 kilo * Şamıke (Tomatese) :26.500.882 kilo * Xiyar :88.257.721 kilo * Giyandayışê zerzewati-meywi :37.908.836.13 YTL * Werdê roy (çemi) :260.470 kilo == İdare == {{Main |Lista Qeymeqamanê Alanya}} == Sûkê bıray == {{Sûkê Wariye}} == Nıfus== {| class="wikitable" style="font-size:90%;width:80;text-align:center;margin-right: 15px; margin-top: 0px" align=right ! colspan=3; style="background-color:#ccccff;" | Serra nıfusi |- ! colspan=3 | Heme Alanya |- | '''Serre''' || '''Nıfus''' || '''+/-''' |- | 1985 || 87080 || - |- | 1990 || 129936 || 49% |- | 1997 || 222028 || 71% |- | 2000 || 264240 || 19% |- | 2007 || 384949 || 46% |- ! colspan=3 | Alanya |- | 1893 || 37914 || - |- | 1985 || 28733 || -24% |- | 1990 || 52460 || 83% |- | 1997 || 110181 || 110% |- | 2000 || 88346 || -20% |- | 2007 || 91713 || 4% |- | 2008 || 92223 || 1% |- |2009 || 94316 || 2% |- |} == Fotogaleriye == <center> <gallery> Dosya:Alanya by Piri Reis.jpg|''Piri reis''i ra Alanya Dosya:Turkey, Alanya, panorama view.JPG|Nıka Dosya:Alanya Panorama edit.jpg|Nıka </gallery> </center> == Çımey == * {{resmi site2|www.alanya.bel.tr|Alanya Belediyesi}} * {{resmi site2|www.alanya.gov.tr|Alanya Kaymakamey}} * {{resmi site2|www.altso.org.tr|Alanya Ticaret Dairesi}} * [http://www.alanyahaber.com Xeberê Alanya] * [http://www.alanyarehber.com Rayberê Alanya] {{Webarchive|url=https://web.archive.org/web/20110902045122/http://www.alanyarehber.com/ |date=2011-09-02 }} {{Commonscat|Alanya}} {{Qezê Antalya}} {{Mahley Alanya}} {{Kontrolê_otoriteyi}} [[Kategoriye:Alanya]] ba27is1gu0grmqyug7l1keemh0id37z 548942 548939 2026-06-07T05:47:28Z Mirzali 16 548942 wikitext text/x-wiki {{infobox Qeza}} '''Alanya''' (be Usmanıcanki: علاءيه ''Alâiye''), yew qezay [[Antalya]]ya. Antalya ra 140&nbsp;km dûria. Nıfusê cı heme 250.919, nıfusê sûke zi 99.000o. == Erd u Coğrafya == === Tene u qezenc === Alanya de erd ra giyandayış (qezenc); * Muz :4.318.365 kilo * Portaqale :6.283.114 kilo * Eriga Malt :2.060.636 kilo * Mandalina :950.465 kilo * Limone :2.626.988 kilo * Şamıke (Tomatese) :26.500.882 kilo * Xiyar :88.257.721 kilo * Giyandayışê zerzewati-meywi :37.908.836.13 YTL * Werdê roy (çemi) :260.470 kilo == İdare == {{Main |Lista Qeymeqamanê Alanya}} == Sûkê bıray == {{Sûkê Wariye}} == Nıfus== {| class="wikitable" style="font-size:90%;width:80;text-align:center;margin-right: 15px; margin-top: 0px" align=right ! colspan=3; style="background-color:#ccccff;" | Serra nıfusi |- ! colspan=3 | Heme Alanya |- | '''Serre''' || '''Nıfus''' || '''+/-''' |- | 1985 || 87080 || - |- | 1990 || 129936 || 49% |- | 1997 || 222028 || 71% |- | 2000 || 264240 || 19% |- | 2007 || 384949 || 46% |- ! colspan=3 | Alanya |- | 1893 || 37914 || - |- | 1985 || 28733 || -24% |- | 1990 || 52460 || 83% |- | 1997 || 110181 || 110% |- | 2000 || 88346 || -20% |- | 2007 || 91713 || 4% |- | 2008 || 92223 || 1% |- |2009 || 94316 || 2% |- |} == Fotogaleriye == <center> <gallery> Dosya:Alanya by Piri Reis.jpg|''Piri reis''i ra Alanya Dosya:Turkey, Alanya, panorama view.JPG|Nıka Dosya:Alanya Panorama edit.jpg|Nıka </gallery> </center> == Çımey == * {{resmi site2|www.alanya.bel.tr|Alanya Belediyesi}} * {{resmi site2|www.alanya.gov.tr|Alanya Kaymakamey}} * {{resmi site2|www.altso.org.tr|Alanya Ticaret Dairesi}} * [http://www.alanyahaber.com Xeberê Alanya] * [http://www.alanyarehber.com Rayberê Alanya] {{Webarchive|url=https://web.archive.org/web/20110902045122/http://www.alanyarehber.com/ |date=2011-09-02 }} {{Commonscat|Alanya}} {{Qezê Antalya}} {{Mahley Alanya}} {{Kontrolê_otoriteyi}} [[Kategoriye:Alanya]] 317ma9uh5w3ilaqxz3ms5no80ta46wc Lista sûkanê Portekizi 0 31175 548937 548054 2026-06-06T12:30:39Z Ziv 30204 Vırnayışê hesabê 547787 ke terefê [[Karber:CommonsDelinker|CommonsDelinker]] ra peyser gêriyao 548937 wikitext text/x-wiki Ena yew lista sûkanê [[Portekiz]]iya: {| class="wikitable sortable" |- ! style="width:6%;"|Resım ! style="width:25%;"|Bacar ! style="width:25%;"|Wılayet ! style="width:20%;"|Nıfus<ref name="pop">Although the cities list doesn't indicate the cities' population, it indicates the parishes that compose them, therefore, this number is the sum of the population of the parishes. The population data was taken from the [http://www.anmp.pt/ National Association of Portuguese Municipalities] and is from 2004.</ref> ! style="width:20%;"|Serre |- | [[Dosya:PRT Abrantes CoA.svg|50px]] || <center>'''[[Abrantes]] ||<center>[[Abrantes]] ||align=center|18,600 ||<center>1916-06-14 |- | [[Dosya:Agualva-Cacem.png|50px]] || <center>'''[[Agualva-Cacém]]'''||<center>[[Sintra]] ||<center>121,000 || <center>2001-07-12 |- | [[Dosya:Brasão de município de Águeda.png|50px]] ||<center> '''[[Águeda Municipality|Águeda]]''' ||<center>[[Águeda Municipality|Águeda]] ||<center>11,357 ||<center>1985-08-14 |- | [[Dosya:COA of Albufeira municipality (Portugal).png|50px]] ||<center> '''[[Albufeira]]''' ||<center>[[Albufeira]] ||<center>16,237 ||<center>1986-08-20 |- | [[Dosya:ASL1.png|50px]] ||<center> '''[[Alcácer do Sal]]'''||<center>[[Alcácer do Sal]] ||<center>9,118 ||<center>1997-07-12 |- | [[Dosya:ACB1.png|50px]] || <center>'''[[Alcobaça (Portugal)|Alcobaça]]'''||<center>[[Alcobaça Municipality|Alcobaça]] ||<center>15,800 ||<center>1995-08-30 |- | [[Dosya:Brasão de Almada.png|50px]] || <center>'''[[Almada]]'''||<center>[[Almada]] ||<center>101,500 ||<center>1973-06-16 |- | [[Dosya:Blank pt CoA city.png|50px]]||<center> '''[[Almeirim]]'''||<center>[[Almeirim]] ||<center>11,607 || <center>1991-08-16 |- | [[Dosya:VFX-alverca1.png|50px]] ||<center> '''[[Alverca do Ribatejo]]'''||<center>[[Vila Franca de Xira]] ||<center>29,086 ||<center>1990-08-09 |- | [[Dosya:Cidade_da_Amadora.png|50px]] ||<center> '''[[Amadora]]''' || <center>[[Amadora]]||<center>151,500 ||<center>1979-09-17 |- | [[Dosya:AMT1.png|50px]] ||<center> '''[[Amarante, Portugal|Amarante]]'''||<center>[[Amarante Municipality, Portugal|Amarante]] ||<center>11,000 ||<center>1985-08-14 |- | [[Dosya:SXL-amora.png|50px]] ||<center> '''[[Amora, Portugal|Amora]]'''||<center>[[Seixal Municipality|Seixal]] ||<center>53,638 ||<center>1993-07-02 |- | [[Dosya:Pt-and1.png|50px]]||<center> '''[[Anadia]]''' ||<center>[[Anadia Municipality, Portugal|Anadia]] ||<center>3,533 ||<center>2004-12-09 |- | [[Dosya:AGH.png|50px]] ||<center> '''[[Angra do Heroísmo]]''' ||<center>[[Angra do Heroísmo]] ||<center>21,200 ||<center>1534-08-21 |- | [[Dosya:AVR.png|50px]] ||<center> '''[[Aveiro, Portugal|Aveiro]]''' ||<center>[[Aveiro Municipality|Aveiro]] ||<center>67,003 ||<center>1759-04-11 |- | [[Dosya:BCL.png|50px]] ||<center> '''[[Barcelos, Portugal|Barcelos]]''' ||<center>[[Barcelos Municipality, Portugal|Barcelos]] ||<center>20,000 ||<center>1928-09-06 |- | [[Dosya:BRR1.png|50px]] ||<center> '''[[Barreiro (city)|Barreiro]]''' ||<center>[[Barreiro Municipality|Barreiro]] ||<center>50,232 ||<center>1984-06-28 |- | [[Dosya:BJA.png|50px]] ||<center> '''[[Beja (Portugal)|Beja]]''' ||<center>[[Beja Municipality|Beja]] ||<center>23,475 ||<center>1521-04-10 |- | [[Dosya:Brasão de Braga.png|50px]] ||<center> '''[[Braga]]''' ||<center>[[Braga]] ||<center>181,819 ||<center>From time immemorial |- | [[Dosya:Brasão de Bragança.png|50px]] ||<center> '''[[Bragança (Portugal)|Bragança]]''' ||<center>[[Bragança Municipality|Bragança]] ||<center>19,998 ||<center>1464-02-23 |- | [[Dosya:CLD.png|50px]] ||<center> '''[[Caldas da Rainha]]''' ||<center>[[Caldas da Rainha]] ||<center>30,006 ||<center>1927-08-26 |- | [[Dosya:CMT1.png|50px]] ||<center> '''[[Câmara de Lobos]]''' ||<center>[[Câmara de Lobos]] ||<center>16,842 ||<center>1996-08-02 |- | [[Dosya:Blank pt CoA city.png|50px]] ||<center> '''[[Caniço (Santa Cruz)|Caniço]]''' ||<center>[[Santa Cruz (Madeira)|Santa Cruz]] ||<center>11,586 ||<center>2005-06-09 |- | [[Dosya:CNT1.png|50px]] ||<center> '''[[Cantanhede]]''' ||<center>[[Cantanhede]] ||<center>7,066 ||<center>1991-08-16 |- | [[Dosya:CTX1.png|50px]] ||<center> '''[[Cartaxo]]''' ||<center>[[Cartaxo]] ||<center>10,115 ||<center>1995-08-30 |- | [[Dosya:CTB.png|50px]] ||<center> '''[[Castelo Branco, Portugal|Castelo Branco]]''' ||<center>[[Castelo Branco Municipality|Castelo Branco]] ||<center>34,525 ||<center>1771-03-20 |- | [[Dosya:CHV.png|50px]] ||<center> '''[[Chaves (Portugal)|Chaves]]''' ||<center>[[Chaves (Portugal)|Chaves]] ||<center>19,307 ||<center>1929-03-18 |- | [[Dosya:CBR.png|50px]]||<center> '''[[Coimbra]]''' ||<center>[[Coimbra]] ||<center>138,540 ||<center>From time immemorial |- | [[Dosya:Blank pt CoA city.png|50px]] ||<center> '''[[Costa da Caparica]]''' ||<center>[[Almada]] ||<center>14,100 ||<center>2004-12-09 |- | [[Dosya:CVL.png|50px]] ||<center> '''[[Covilhã]]''' ||<center>[[Covilhã]] ||<center>36,147 ||<center>1870-10-20 |- | [[Dosya:ELV.png|50px]] ||<center> '''[[Elvas Municipality|Elvas]]''' ||<center>[[Elvas Municipality|Elvas]] ||<center>28,106 ||<center>1513-04-03 |- | [[Dosya:ENT1.png|50px]] ||<center> '''[[Entroncamento]]''' ||<center>[[Entroncamento Municipality|Entroncamento]] ||<center>20,065 ||<center>1991-08-16 |- | [[Dosya:Blank pt CoA city.png|50px]] ||<center> '''[[Ermesinde]]''' ||<center>[[Valongo]] ||<center>40,139 ||<center>1990-08-10 |- | [[Dosya:Blank pt CoA city.png|50px]] ||<center> '''[[Esmoriz]]'''|| <center>[[Ovar]]||<center>11,200 ||<center>1993-07-02 |- | [[Dosya:ESP1.png|50px]] ||<center> '''[[Espinho, Portugal|Espinho]]''' ||<center>[[Espinho Municipality|Espinho]] ||<center>10,500 ||<center>1973-06-16 |- | [[Dosya:EPS1.png|50px]] ||<center> '''[[Esposende]]''' ||<center>[[Esposende]] ||<center>9,148 ||<center>1993-07-02 |- | [[Dosya:ETR.png|50px]] ||<center> '''[[Estarreja]]''' ||<center>[[Estarreja]] ||<center>7,000 ||<center>2004-12-09 |- | [[Dosya:ETZ.png|50px]] || <center>'''[[Estremoz]]''' ||<center>[[Estremoz]] ||<center>9,011 ||<center>1926-08-31 |- | [[Dosya:EVR.png|50px]] ||<center> '''[[Évora]]''' ||<center>[[Évora]] ||<center>46,417 ||<center>From time immemorial |- | [[Dosya:FAF1.png|50px]] ||<center> '''[[Fafe]]''' ||<center>[[Fafe]] ||<center>15,323 ||<center>1986-08-23 |- | [[Dosya:Faroarms.svg|50px]] ||<center> '''[[Faro, Portugal|Faro]]''' ||<center>[[Faro, Portugal|Faro]] ||<center>43,757 ||<center>1540-09-07 |- | [[Dosya:Coat of Arms Fatima.svg|50px]] ||<center> '''[[Fátima]]'''||<center>[[Ourém]] ||<center>10,302 ||<center>1997-07-12 |- | [[Dosya:FLG1.png|50px]] ||<center> '''[[Felgueiras]]''' ||<center>[[Felgueiras Municipality|Felgueiras]] ||<center>15,100||<center>1990-08-10 |- | [[Dosya:FIG.png|50px]] ||<center> '''[[Figueira da Foz]]''' ||<center>[[Figueira da Foz]] ||<center>36,500 ||<center>1882-09-20 |- | [[Dosya:Blank pt CoA city.png|50px]] ||<center> '''[[Fiães]]''' ||<center>[[Santa Maria da Feira Municipality|Santa Maria da Feira]] ||<center>13,100 ||<center>2001-07-12 |- | [[Dosya:Blank pt CoA city.png|50px]] ||<center> '''[[Freamunde]]''' ||<center>[[Paços de Ferreira]] ||<center>7,452 ||<center>2001-07-12 |- | [[Dosya:FNC.png|50px]] ||<center> '''[[Funchal]]''' ||<center>[[Funchal]] ||<center>100,526 ||<center>1508-08-21 |- | [[Dosya:FND1.png|50px]] ||<center> '''[[Fundão]]''' ||<center>[[Fundão Municipality, Portugal|Fundão]] ||<center>8,957 ||<center>1988-04-19 |- | [[Dosya:ILH-gafanhanazare1.png|50px]] ||<center> '''[[Gafanha da Nazaré]]''' ||<center>[[Ílhavo]] ||<center>14,021 ||<center>2001-07-21 |- | [[Dosya:Blank pt CoA city.png|50px]] ||<center> '''[[Gandra (Paredes)|Gandra]]''' ||<center>[[Paredes Municipality|Paredes]] ||<center>5,200 ||<center>2003-08-26 |- | [[Dosya:GDM1.png|50px]] ||<center> '''[[Gondomar (Portugal)|Gondomar]]''' ||<center>[[Gondomar (Portugal)|Gondomar]] ||<center>25,000 ||<center>1991-08-16 |- | [[Dosya:GVA1.png|50px]] ||<center> '''[[Gouveia]]''' ||<center>[[Gouveia]] ||<center>3,500 ||<center>1988-02-01 |- | [[Dosya:GRD.png|50px]] ||<center> '''[[Guarda, Portugal|Guarda]]'''||<center>[[Guarda Municipality, Portugal|Guarda]] ||<center>32,274 ||<center>1199-11-27 |- | [[Dosya:GMR.png|50px]] ||<center> '''[[Guimarães]]''' ||<center>[[Guimarães]] ||<center>52,181 ||<center>1853-06-23 |- | [[Dosya:HRT.png|35px]] ||<center> '''[[Horta]]''' ||<center>[[Horta]]||<center>9,000 ||<center>1833-07-04 |- | [[Dosya:ILH1.png|50px]] ||<center> '''[[Ílhavo]]''' ||<center>[[Ílhavo]] ||<center>17,200 ||<center>1990-08-09 |- | [[Dosya:LGA1.png|50px]] ||<center> '''[[Lagoa]]''' ||<center>[[Lagoa]] ||<center>5,000 ||<center>2001-07-12 |- | [[Dosya:LGS.png|50px]] ||<center> '''[[Lagos, Portugal|Lagos]]''' ||<center>[[Lagos, Portugal|Lagos]] ||<center>20,000|| <center>1573-01-27 |- | [[Dosya:LMG.png|50px]] ||<center> '''[[Lamego]]''' ||<center>[[Lamego]] ||<center>12,000 ||<center>From time immemorial |- | [[Dosya:Escudo de Leiria.svg|50px]] ||<center> '''[[Leiria]]''' ||<center>[[Leiria]] ||<center>50,264 ||<center>1545-06-13 |- | [[Dosya:LSB.png|50px]] ||<center> '''[[Lisbon]]''' ||<center>[[Lisbon]] ||<center>545,245 ||<center>From time immemorial |- | [[Dosya:Blank pt CoA city.png|50px]] ||<center> '''[[Lixa]]''' ||<center>[[Felgueiras Municipality|Felgueiras]] ||<center>5,500 ||<center>1995-08-30 |- | [[Dosya:LLE1.png|50px]] ||<center> '''[[Loulé]]''' ||<center>[[Loulé]] ||<center>24,000||<center>1988-02-01 |- | [[Dosya:LRS.png|50px]] ||<center> '''[[Loures]]''' ||<center>[[Loures]] ||<center>26,000||<center> <center>1990-08-09 |- | [[Dosya:Blank pt CoA city.png|50px]] ||<center> '''[[Lourosa (Santa Maria da Feira)|Lourosa]]''' ||<center>[[Santa Maria da Feira Municipality|Santa Maria da Feira]] ||<center>11,300 ||<center>2001-07-12 |- | [[Dosya:MCD1.png|50px]] ||<center> '''[[Macedo de Cavaleiros]]''' ||<center>[[Macedo de Cavaleiros]] ||<center>7,800 ||<center>1999-06-24 |- Machico| [[Dosya:MCH1.png|50px]] ||<center> '''[[Machico]]''' ||<center>[[Machico]] ||<center>13,700||<center>1996-08-02 |- | [[Dosya:MAI1.png|50px]] ||<center> '''[[Maia, Portugal|Maia]]''' ||<center>[[Maia, Portugal|Maia]] ||<center>40,000||<center>1986-08-23 |- | [[Dosya:MGL1.png|50px]] ||<center> '''[[Mangualde]]''' ||<center>[[Mangualde]] ||<center>8,107 ||<center>2001-07-12 |- | [[Dosya:MCN2.png|50px]] ||<center> '''[[Marco de Canaveses]]''' ||<center>[[Marco de Canaveses]] ||<center>9,000 ||<center>1993-07-02 |- | [[Dosya:MGR1.png|50px]] ||<center> '''[[Marinha Grande]]''' ||<center>[[Marinha Grande]] ||<center>29,100 ||<center>1988-04-19 |- | [[Dosya:MTS1.png|50px]] ||<center> '''[[Matosinhos]]''' ||<center>[[Matosinhos]] ||<center>47,703 ||<center>1984-06-28 |- | [[Dosya:MLD.png|50px]] ||<center> '''[[Mealhada]]''' ||<center>[[Mealhada]] ||<center>5,500 ||<center>2003-08-26 |- | [[Dosya:MDA-mêda.JPG|50px]] ||<center> '''[[Mêda]]''' ||<center>[[Mêda]] ||<center>2,004 ||<center>2004-12-09 |- | [[Dosya:Coat of arms of Miranda do Douro.svg|50px]] ||<center>'''[[Miranda do Douro]]''' ||<center>[[Miranda do Douro]] ||<center>2,000 ||<center>1545-07-10 |- | [[Dosya:MDL1.png|50px]] ||<center> '''[[Mirandela]]''' ||<center>[[Mirandela]] ||<center>11,000 ||<center>1984-06-28 |- | [[Dosya:MMN1.png|50px]] ||<center> '''[[Montemor-o-Novo]]''' ||<center>[[Montemor-o-Novo]] ||<center>14,000 ||<center>1988-04-18 |- | [[Dosya:MTJ.png|50px]] ||<center> '''[[Montijo, Portugal|Montijo]]''' ||<center>[[Montijo Municipality|Montijo]] ||<center>30,486 ||<center>1985-08-14 |- | [[Dosya:MRA1.png|50px]] ||<center> '''[[Moura Municipality|Moura]]''' ||<center>[[Moura Municipality|Moura]] ||<center>10,000 ||<center>1988-02-01 |- | [[Dosya:ODV-odivelas.png|50px]] ||<center> '''[[Odivelas]]''' ||<center>[[Odivelas]] ||<center>54,500 ||<center>1990-08-10 |- | [[Dosya:OLH2.png|50px]] ||<center> '''[[Olhão]] da Restauração''' ||<center>[[Olhão]] ||<center>31,100 ||<center>1985-08-14 |- | [[Dosya:OAZ.png|50px]] ||<center> '''[[Oliveira de Azeméis]]''' ||<center>[[Oliveira de Azeméis]] ||<center>15,000 ||<center>1984-05-16 |- | [[Dosya:OBR1.png|50px]] ||<center> '''[[Oliveira do Bairro]]''' ||<center>[[Oliveira do Bairro]] ||<center>5,005||<center>2003-08-26 |- | [[Dosya:OHP1.png|50px]] ||<center> '''[[Oliveira do Hospital]]'''||<center>[[Oliveira do Hospital]] ||<center>4,400 ||<center>1993-07-02 |- | [[Dosya:VNO1.png|50px]] ||<center> '''[[Ourém]]''' ||<center>[[Ourém]] ||<center>11,100 ||<center>1991-08-16 |- | [[Dosya:Brasão de município de Ovar.png|50px]] ||<center> '''[[Ovar]]''' ||<center>[[Ovar]] ||<center>18,900 ||<center>1984-06-28 |- | [[Dosya:PFR1.png|50px]] ||<center> '''[[Paços de Ferreira]]''' ||<center>[[Paços de Ferreira]] ||<center>9,000 ||<center>1993-07-02 |- | [[Dosya:PRD1.png|50px]] ||<center> '''[[Paredes, Portugal|Paredes]]''' ||<center>[[Paredes Municipality|Paredes]] ||<center>12,500 ||<center>1991-08-16 |- | [[Dosya:Brasão de Penafiel.png|50px]] ||<center> '''[[Penafiel]]''' ||<center>[[Penafiel Municipality|Penafiel]] ||<center>10,000 ||<center>1770-03-03 |- |||<center> '''[[Peniche, Portugal|Peniche]]''' ||<center>[[Peniche Municipality|Peniche]] ||<center>17,500 ||<center>1988-02-01 |- | [[Dosya:PRG.png|50px]] ||<center> '''[[Peso da Régua]]''' ||<center>[[Peso da Régua]] ||<center>10,000 ||<center>1985-08-14 |- | [[Dosya:PNH.png|50px]] ||<center> '''[[Pinhel]]''' ||<center>[[Pinhel]] ||<center>3,500 ||<center>1770-08-25 |- | [[Dosya:PBL1.png|50px]] ||<center> '''[[Pombal, Portugal|Pombal]]''' ||<center>[[Pombal Municipality|Pombal]] ||<center>18,500 ||<center>1991-08-16 |- | [[Dosya:PDL.png|50px]] ||<center> '''[[Ponta Delgada]]''' ||<center>[[Ponta Delgada]] ||<center>46,102||<center>1546-04-02 |- | [[Dosya:PSR.png|50px]] ||<center> '''[[Ponte de Sor]]''' ||<center>[[Ponte de Sor]] ||<center>11,000||<center>1985-08-14 |- | [[Dosya:PTG.png|50px]] ||<center> '''[[Portalegre]]''' ||<center>[[Portalegre]] ||<center>15,700||<center>1550-05-23 |- | [[Dosya:PTM.png|50px]] ||<center> '''[[Portimão]]''' ||<center>[[Portimão]] ||<center>40,700||<center>1924-12-11 |- | [[Dosya:PRT.png|50px]] ||<center> '''[[Porto]]''' ||<center>[[Porto]] ||<center>237,559||<center>From time immemorial |- | [[Dosya:PST1.png|50px]] ||<center> '''[[Vila Baleira]] (a.k.a. [[Porto Santo]])''' ||<center>[[Porto Santo]] ||<center>4,475 ||<center>1996-08-02 |- | [[Dosya:VFX-povoasiria1.png|50px]] ||<center> '''[[Póvoa de Santa Iria]]''' ||<center>[[Vila Franca de Xira]]||<center>28,000 ||<center>1999-06-24 |- | [[Dosya:PVZ2.png|50px]] ||<center> '''[[Póvoa de Varzim]]''' ||<center>[[Póvoa de Varzim]] ||<center>38,257 ||<center>1973-06-16 |- | [[Dosya:VPV1.png|50px]] ||<center> '''[[Praia da Vitória]]'''||<center>[[Praia da Vitória]] ||<center>6,500 ||<center>1981-06-20 |- | [[Dosya:LLE-quarteira1.png|50px]] ||<center> '''[[Quarteira]]''' ||<center>[[Loulé]] ||<center>21,000 ||<center>1999-06-24 |- | [[Dosya:SNT-queluz.png|50px]] ||<center> '''[[Queluz, Portugal|Queluz]]''' ||<center>[[Sintra]] ||<center>116,124||<center>1997-07-24 |- | [[Dosya:Blank pt CoA city.png|50px]] ||<center> '''[[Rebordosa]]''' ||<center>[[Paredes Municipality|Paredes]] ||<center>12,100 ||<center>2003-08-26 |- | [[Dosya:RMZ.png|50px]] ||<center> '''[[Reguengos de Monsaraz]]'''||<center>[[Reguengos de Monsaraz]] ||<center>7,900 ||<center>2004-12-09 |- | [[Dosya:RGR1.png|50px]] ||<center> '''[[Ribeira Grande]]''' ||<center>[[Ribeira Grande]] ||<center>6,350 ||<center>1981-06-29 |- | [[Dosya:RMR1.png|50px]] ||<center> '''[[Rio Maior]]''' ||<center>[[Rio Maior]] ||<center>11,102 ||<center>1985-08-14 |- | [[Dosya:Blank pt CoA city.png|50px]] ||<center> '''[[Rio Tinto (Gondomar)|Rio Tinto]]''' ||<center>[[Gondomar (Portugal)|Gondomar]] ||<center>61,227 ||<center>1995-08-30 |- | [[Dosya:SBG.png|50px]] ||<center> '''[[Sabugal]]''' ||<center>[[Sabugal]] ||<center>2,300 ||<center>2004-12-09 |- | [[Dosya:LRS-sacavem.png|50px]] ||<center> '''[[Sacavém]]''' ||<center>[[Loures]] ||<center>17,000 ||<center>1997-06-04 |- | [[Dosya:SCD1.png|50px]] ||<center> '''[[Santa Comba Dão]]''' ||<center>[[Santa Comba Dão]] ||<center>3,200 ||<center>1999-06-24 |- | [[Dosya:SCR1.png|50px]]||<center> '''[[Santa Cruz, Madeira|Santa Cruz]]''' ||<center>[[Santa Cruz, Madeira|Santa Cruz]] ||<center>6,500 ||<center>1996-08-02 |- | [[Dosya:VFR1.png|50px]] ||<center> '''[[Santa Maria da Feira (city)|Santa Maria da Feira]]''' ||<center>[[Santa Maria da Feira Municipality|Santa Maria da Feira]] ||<center>16,900 ||<center>1985-08-14 |- | [[Dosya:STN1.png|50px]] ||<center> '''[[Santana, Madeira|Santana]]''' ||<center>[[Santana, Madeira|Santana]] ||<center>3,300 ||<center>2001-01-01 |- | [[Dosya:STR.png|50px]] ||<center> '''[[Santarém, Portugal|Santarém]]''' ||<center>[[Santarém, Portugal|Santarém]] ||<center>30,100 ||<center>1868-12-24 |- | [[Dosya:STC1.png|50px]] ||<center> '''[[Santiago do Cacém]]''' ||<center>[[Santiago do Cacém]] ||<center>7,753 ||<center>1991-08-16 |- | [[Dosya:STS1.png|50px]] ||<center> '''[[Santo Tirso]]''' ||<center>[[Santo Tirso]] ||<center>14,100 ||<center>1985-08-14 |- | [[Dosya:Brasão de São João da Madeira.png|50px]] ||<center> '''[[São João da Madeira]]''' ||<center>[[São João da Madeira]] ||<center>21,102 ||<center>1984-06-28 |- | [[Dosya:MTS-smamedeinfesta1.png|50px]] ||<center> '''[[São Mamede de Infesta]]''' ||<center>[[Matosinhos]] ||<center>27,000 ||<center>2001-07-12 |- | [[Dosya:Blank pt CoA city.png|50px]] ||<center> '''[[São Salvador de Lordelo]]''' ||<center>[[Paredes Municipality|Paredes]] ||<center>11,000 ||<center>2003-08-26 |- | [[Dosya:SEI1.png|50px]] ||<center> '''[[Seia]]''' ||<center>[[Seia]] ||<center>7,000 ||<center>1986-08-23 |- | [[Dosya:Brasão de Seixal.png|50px]] ||<center> '''[[Seixal Municipality|Seixal]]''' ||<center>[[Seixal Municipality|Seixal]] ||<center>31,101 ||<center>1993-07-02 |- | [[Dosya:SRP.png|50px]] ||<center> '''[[Serpa]]''' ||<center>[[Serpa]] ||<center>9,990||<center>2003-08-26 |- | [[Dosya:Coat of arms of Setúbal.svg|50px]] ||<center> '''[[Setúbal]]'''||<center>[[Setúbal]] ||<center>120,636||<center>1860-04-19 |- | [[Dosya:SLV.png|50px]] ||<center> '''[[Silves Municipality, Portugal|Silves]]''' ||<center>[[Silves Municipality, Portugal|Silves]] ||<center>11,000 ||<center>From time immemorial |- | [[Dosya:SNS1.png|50px]] ||<center> '''[[Sines, Portugal|Sines]]''' ||<center>[[Sines, Portugal|Sines]] ||<center>15,555 ||<center>1997-07-12 |- | [[Dosya:TRC.png|50px]] ||<center> '''[[Tarouca]]''' ||<center>[[Tarouca]] ||<center>3,200 ||<center>2004-12-09 |- | [[Dosya:TVR.png|50px]] ||<center> '''[[Tavira]]''' ||<center>[[Tavira]] ||<center>13,300 ||<center>1520-03-16 |- | [[Dosya:TMR.png|50px]] ||<center> '''[[Tomar]]''' ||<center>[[Tomar]] ||<center>20,000 ||<center>1844-02-12 |- | [[Dosya:TND1.png|50px]] ||<center> '''[[Tondela]]''' ||<center>[[Tondela]] ||<center>10,120 ||<center>1988-02-01 |- | [[Dosya:TNV1.png|50px]] ||<center> '''[[Torres Novas]]''' ||<center>[[Torres Novas]] ||<center>14,900 ||<center>1985-08-14 |- | [[Dosya:TVD1.png|50px]] ||<center> '''[[Torres Vedras]]''' || <center>[[Torres Vedras]]||<center>27,200 ||<center>1979-02-03 |- | [[Dosya:TCS.png|50px]] ||<center> '''[[Trancoso, Portugal|Trancoso]]''' ||<center>[[Trancoso, Portugal|Trancoso]]||<center>3,350 ||<center>2004-12-09 |- | [[Dosya:TRF.png|50px]] ||<center> '''[[Trofa]]''' ||<center>[[Trofa Municipality|Trofa]] ||<center>22,000 ||<center>1993-07-02 |- | [[Dosya:Blank pt CoA city.png|50px]] ||<center> '''[[Valbom]]''' ||<center>[[Gondomar (Portugal)|Gondomar]] ||<center>14,100 ||<center>2004-12-09 |- | [[Dosya:VAC1.png|50px]] ||<center> '''[[Vale de Cambra]]''' ||<center>[[Vale de Cambra]] ||<center>4,200 ||<center>1993-07-02 |- | [[Dosya:VLG1.png|50px]] ||<center> '''[[Valongo]]''' ||<center>[[Valongo]] ||<center>27,900 ||<center>1990-08-10 |- | [[Dosya:VPC1.png|50px]] ||<center> '''[[Valpaços]]''' ||<center>[[Valpaços]] ||<center>4,102 ||<center>1999-06-24 |- | [[Dosya:VND1.png|50px]] ||<center> '''[[Vendas Novas]]''' ||<center>[[Vendas Novas]] ||<center>10,103 ||<center>1993-07-02 |- | [[Dosya:COA of Viana do Castelo.svg|50px]] ||<center> '''[[Viana do Castelo Municipality|Viana do Castelo]]''' ||<center>[[Viana do Castelo Municipality|Viana do Castelo]] ||<center>36,750 ||<center>1848-01-20 |- | [[Dosya:VCD1.png|50px]] ||<center> '''[[Vila do Conde]]''' ||<center>[[Vila do Conde]] ||<center>32,257 ||<center>1988-02-01 |- | [[Dosya:VFX1.png|50px]] ||<center> '''[[Vila Franca de Xira]]'''||<center>[[Vila Franca de Xira]] ||<center>19,000 ||<center>1984-06-28 |- | [[Dosya:VNF1.png|50px]] ||<center> '''[[Vila Nova de Famalicão]]''' ||<center>[[Vila Nova de Famalicão]] ||<center>30,100 ||<center>1985-08-14 |- | [[Dosya:VLF1.png|50px]] ||<center> '''[[Vila Nova de Foz Côa]]''' ||<center>[[Vila Nova de Foz Côa]] ||<center>3,303 ||<center>1997-07-12 |- | [[Dosya:Vila Nova de Gaia COA.svg|50px]] ||<center> '''[[Vila Nova de Gaia]]''' ||<center>[[Vila Nova de Gaia]] ||<center>178,526 ||<center>1984-06-28 |- | [[Dosya:STC-sandre.png|50px]] ||<center> '''[[Vila Nova de Santo André]]''' ||<center>[[Santiago do Cacém]] ||<center>12,123 ||<center>2003-08-26 |- | [[Dosya:VRL.png|50px]] ||<center> '''[[Vila Real Municipality|Vila Real]]''' ||<center>[[Vila Real Municipality|Vila Real]] ||<center>27,250 ||<center>1925-07-20 |- | [[Dosya:VRS1.png|50px]] ||<center> '''[[Vila Real de Santo António Municipality|Vila Real de Santo António]]''' ||<center>[[Vila Real de Santo António Municipality|Vila Real de Santo António]] ||<center>11,000 ||<center>1988-04-19 |- | [[Dosya:VIS.png|50px]] ||<center> '''[[Viseu]]''' ||<center>[[Viseu]] ||<center>50,583 ||<center> From time immemorial |- | [[Dosya:VIZ.png|50px]] ||<center> '''[[Vizela]]''' ||<center>[[Vizela Municipality|Vizela]] ||<center>10,100 ||<center>1998-09-01 |} == Referansi == <references/> [[Kategoriye:Sûkê Portekizi]] [[Kategoriye:Listeyi]] fc72f3yfnl3q55iaki3iybijwt5er9y Marmara, Balıkesir 0 35612 548987 409926 2026-06-07T10:58:18Z ~2026-33757-55 34070 548987 wikitext text/x-wiki {{Databox}} '''Marmara''', yew qezay u taxa wılayetê [[Balıkesir (wılayet)|Balıkesir]]iya. == Bıvênên == * [[Balıkesir (wılayet)]] {{Portal|Coğrafya |Tırkiya}} {{Qezê Balıkesiri}} {{Kontrolê_otoriteyi}} [[Kategoriye:Qezê Balıkesiri]] [[Kategoriye:Marmara]] 3c33rn4tdxp1agd8bvnv85n86s6obzg .nowruz 0 69435 548944 516238 2026-06-07T05:49:58Z Mirzali 16 548944 wikitext text/x-wiki '''.nowruz''', [[İnternet|internet]] de nameyê bandıra jeneriko (be zıwanê [[İngılızki]]: ''[[Bandıra sewiyaya serêna jenerike|Generic top-level domains]]'') ke yew kodê interneti rê bırriyayo a. {{Generic top-level domain}} {{ccTLD}} [[Kategoriye:Bandıra sewiyaya serêna jenerike]] [[Kategoriye:İran]] j5lr1vy1mwo6ewjqisg2oirlk7run45 NGC 192 0 71313 548945 537625 2026-06-07T05:52:01Z Mirzali 16 548945 wikitext text/x-wiki {{Galaksiye}} '''NGC 192''', yew cısımê [[Asmên|asmên]]iyo.<ref>http://www.ngcic.org/</ref><ref>https://academic.oup.com/mnras/article-pdf/399/4/2146/17323628/mnras0399-2146.pdf</ref><ref>http://aladin.u-strasbg.fr</ref><ref>{{Cite web |title=Archive copy |url=http://skyview.gsfc.nasa.gov/ |access-date=2021-08-08 |archivedate=2014-01-08 |archiveurl=https://web.archive.org/web/20140108211809/http://skyview.gsfc.nasa.gov/}}</ref> No cısım [[Katalogo Pêroyiyo Newe|Katalogê Pêroyiyê Neweyi]] de komê estareyanê Balina miyan de ca gêno. 28 Kanun 1790 de terefê Wilhelm Herscheli ra keşıf biyo.<ref>https://cseligman.com/text/atlas/ngc0.htm</ref> == Bıwane == * [[Komê estareyan]] * [[Galaksiye]] * [[Estare]] * [[Pulsar]] * [[Nebula]] == Gıreyê teberi == * {{NASANED}} * {{Simbad}} * {{Leda}} * {{Seds}} * {{WikiSky}} == Bıvênên == * [[Lista cısımanê NGC]] * [[Lista astronoman]] == Çıme == {{Çıme}} {{Portal|Asmên|Astronomiye}} {{NGC|192}} {{Kontrolê otoriteyi}} [[Kategoriye:Cısımê Asmêni]] [[Kategoriye:Asmênşınasiye]] 110kbq8u9zfcp7oa79gdtlkbgf2agyo Pulsar 0 73366 548980 527949 2026-06-07T10:22:41Z ~2026-33757-55 34070 548980 wikitext text/x-wiki {{Databox }} [[File:Chandra-crab.jpg|thumb]] '''Pulsar''' ya zi '''Estarek''', yeno maneyê "Zey qelbi eştene". Pulsari, zerrek û qelbê [[nebula|nebuley]]anê. Pê quweta gırse ra, fasılê ritimi ra [[pêlanê radyoy]] asmêneştışi de [[Estarey notroni|estereyê notroni]]yê. {{Portal|Asmên}} {{Kontrolê otoriteyi}} [[Kategoriye:Asmênşınasiye]] j4dvvhpcxqnj2tz62dvm9aajqtzjo1z Froidestrées 0 74427 548995 540718 2026-06-07T11:31:58Z ~2026-33651-67 34072 /* Bıvênên */ 548995 wikitext text/x-wiki {{Infobox komun}} '''Froidestrées''' dewleta [[Fransa]] de mıntıqaya [[Hauts-de-France]] miyan de yew [[Komune|komunê]] qezay [[Aisne]]yo. ==Bıvênên == *[[Komunê Aisney]] {{Commonscat}} {{Kontrolê_otoriteyi}} {{Komunê Eni}} [[Kategoriye:Komunê Ena]] 2448q9jyxik07dtx1odx1xx09fsjdwd Koparuşaği 0 91229 548979 518140 2026-06-07T10:20:48Z ~2026-33757-55 34070 548979 wikitext text/x-wiki {{Infobox Dewe | Xerita = Elazığ_location_Merkez.png | Ware = [[Bınmıntıqay Malatya]] | Wılayet = [[Xarpêt (wılayet)|Xarpêt]] }} '''Koparuşaği''', wılayetê [[Xarpêt (wılayet)|Xarpêt]]i de yew dewa qezaya [[Xarpêt]]ia.<ref>https://nisanyanmap.com/?y=&t=Elazığ_m</ref> == Ekonomiye == Ekonomiye be heywanweyikerdış û [[Ziraet|ziraet]] ra bena. == Terbiyet == Dewe de [[Mektebo Verên|mekteb]] esto, labelê seba mektebê miyani telebey şınê merkez de wanenê. == Resayış == Raya dewe esta û kerda asfalt. == Xızmete == Postexane çıniyo. [[Awe|Awa]] dewe esta. Elektrikê dewe esto. == Çıme == {{Çıme}} {{Portal|Tırkiya|Coğrafya}} {{Dewê Xarpêti}} [[Kategoriye:Dewê Xarpêti]] 8b6h0sjkej3p9io15q49rctq9k9ocx7 Modul:Kontrolê otoriteyi 828 98330 548938 547366 2026-06-06T14:37:40Z ~2026-33070-17 34013 548938 Scribunto text/plain local p = {} -- ============ Format validation functions ============ local valid = {} -- NCDA: NOID Check Digit Algorithm; see [[wikipedia:Check digit#NCDA]] local ncda -- leave this as a local since NCDA is commonly used among ARK identifiers and could be useful for validating other identifiers later do -- initialize these constants only once but scope them in a block so local namespace doesn't get cluttered with these local r29s = [[0123456789bcdfghjkmnpqrstvwxz]] -- radix 29 "betanumeric" digit string local r29n = r29s:len() local r29v2d, r29d2v = {}, {} for i = 1, r29n do local v, d = i-1, r29s:sub(i, i) r29v2d[v], r29d2v[d] = d, v end function ncda(sid) local n, sum = sid:len(), 0 for i = 1, n do sum = sum + i * (r29d2v[sid:sub(i, i)] or 0) end return r29v2d[sum % r29n] end end function valid.validateBNF(id) --P268's format regex: \d{8}[0-9bcdfghjkmnpqrstvwxz] (e.g. 123456789) local FRBNF = id:sub(1, -2) return FRBNF:match('^%d%d%d%d%d%d%d%d$') ~= nil and ncda('cb'..FRBNF) == id:sub(-1) and id end --Validate ISNI (and ORCID) and returns 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 --P213 (ISNI) format regex: [0-9]{4} [0-9]{4} [0-9]{4} [0-9]{3}[0-9X] (e.g. 0000-0000-6653-4145) function valid.validateIsni(id) id = id:gsub( '[ %-]', '' ):upper() if not id:match( '^%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d[%dX]$' ) then return false end local total = 0 for i = 1, 15 do local digit = id:byte( i ) - 48 --Get integer value total = (total + digit) * 2 end local remainder = total % 11 local result = (12 - remainder) % 11 local checkdigit if result == 10 then checkdigit = 'X' else checkdigit=tostring( result ) end if checkdigit ~= string.char( id:byte( 16 ) ) then return false end return id end function valid.validateOrcid(id) --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 = valid.validateIsni(id) if not id then return false end return id:sub( 1, 4 )..'-'..id:sub( 5, 8 )..'-'..id:sub( 9, 12 )..'-'..id:sub( 13, 16 ) end function valid.validateEuropeana(id) --P7704's format regex: (place|agent|concept|organisation)/.* (e.g. agent/base/59832) local s1, s2, s3 = string.match(id, '([^/]+)([^%d]+)(%d+)') if not (s1 and s2 and s3) and not (s1 == 'place' or s1 == 'agent' or s1 == 'concept' or s1 == 'organisation') then return false end return s1 .. s2 .. s3 end -- ============ Local functions ============ local function validValue(conf_id, id) if not id then return end local valid_value if conf_id.pattern then -- check pattern to determine validity valid_value = string.match(id, '^' .. conf_id.pattern .. '$') elseif conf_id.patterns then -- check multiple patterns to determine validity for _, pattern in ipairs(conf_id.patterns) do valid_value = id:match('^' .. pattern .. '$') if valid_value then break end end elseif conf_id.valid and type(valid[conf_id.valid]) == 'function' then -- use function to determine validity valid_value = valid[conf_id.valid](id) else -- no validation possible valid_value = id end return valid_value end local title = mw.title.getCurrentTitle() local namespace = title.namespace local function addCat(cat) if cat and namespace == 0 then return '[[Category:Articles amb identificador ' .. cat .. ']]' end return '' end local function getIdsFromWikidata(item, property) if item.claims[property] then local claims = mw.wikibase.getBestStatements(item.id, property) for _, statement in ipairs(claims) do if statement.mainsnak.datavalue and statement.mainsnak.datavalue.value then return statement.mainsnak.datavalue.value end end end return end local function getLinkFromWikidata(property) local claims = mw.wikibase.getBestStatements(property, 'P1630') for _, statement in ipairs(claims) do if statement.mainsnak.datavalue and statement.mainsnak.datavalue.value then return statement.mainsnak.datavalue.value end end return end local function createId(params, id) local arg_link = params.link if not arg_link then arg_link = getLinkFromWikidata('P' .. params.property) end if arg_link then local link = mw.ustring.gsub(arg_link, '$1', id) if params.prefix then return '* ' .. params.prefix .. ' ([' .. link .. ' 1])' .. addCat(params.category) .. '\n' else return '* [' .. link .. ' ' .. params.label .. ']' .. addCat(params.category) .. '\n' end end return '' end -- ============ Main ============ local config = mw.loadData('Module:Authority control/config') function p.authorityControl(frame) local conf = config.config local parentArgs = frame:getParent().args local auxCats = "[[Categoria:Control d'autoritats]]" local rct = false -- boolean to track if there are any links to be returned -- Create sections local numsections, sections = 0, {} for _, _ in ipairs(config.sections) do -- count number of regular sections numsections = numsections + 1 end for _ = 1, numsections do table.insert(sections, {}) end -- fetch data with Wikidata fallback local item_obj = mw.wikibase.getEntityObject(parentArgs.item) if item_obj ~= nil and item_obj.claims ~= nil then for _, params in ipairs(conf) do local args_id = parentArgs[params.label] if args_id and args_id == '' then -- paràmetre definit però buit, no el mostrarà elseif params.property ~= 0 then local wikidata_id = getIdsFromWikidata(item_obj, 'P' .. params.property) local valid_id = validValue(params, args_id or wikidata_id) if valid_id then rct = true if wikidata_id then if args_id and args_id ~= wikidata_id then table.insert(sections[params.section], createId(params, valid_id)) auxCats = auxCats .. "[[Categoria:Pàgines amb paràmetres d'autoritat diferents de Wikidata]]" else table.insert(sections[params.section], createId(params, valid_id)) if args_id then auxCats = auxCats .. "[[Categoria:Pàgines que utilitzen control d'autoritats amb paràmetres]]" end end elseif args_id then table.insert(sections[params.section], createId(params, valid_id)) auxCats = auxCats .. "[[Categoria:Pàgines que utilitzen control d'autoritats amb paràmetres]]" end end end end end --configure Navbox if rct then -- there is at least one link to display local Navbox = require('Module:Navbox') local sect = 0 local navboxArgs = { name = 'Nustekar', navboxclass = 'authority-control', bodyclass = 'hlist', } for c = 1, numsections do if #sections[c] > 0 then -- section is non-empty sect = sect + 1 -- including categories inside navbox, avoiding a final extra line with parsoid navboxArgs['group' .. sect] = config.sections[c].name .. (sect == 1 and auxCats or '') navboxArgs['list' .. sect] = table.concat(sections[c]) end end return Navbox._navbox(navboxArgs) end return '' end return p b1czwvic5w7kysm81itaaqja20rewjr 548940 548938 2026-06-06T14:41:56Z ~2026-33070-17 34013 548940 Scribunto text/plain require('Módulo:No globals') local function cleanLink ( link, style ) -- similar to mw.uri.encode local wikiLink = link if style == 'PATH' then wikiLink = mw.ustring.gsub( wikiLink, ' ', '%%%%20' ) elseif style == 'WIKI' then wikiLink = mw.ustring.gsub( wikiLink, ' ', '_' ) wikiLink = mw.ustring.gsub( wikiLink, '?', '%%%%3F') else -- if style == 'QUERY' then -- default wikiLink = mw.ustring.gsub( wikiLink, ' ', '+' ) end wikiLink = mw.ustring.gsub( wikiLink, '%[', '%%5B' ) wikiLink = mw.ustring.gsub( wikiLink, '%]', '%%5D' ) wikiLink = mw.ustring.gsub( wikiLink, '%"', '%%%%22' ) return wikiLink end local function generic ( id, link, parameter ) local idlink = cleanLink( id, 'PATH' ) link = mw.ustring.gsub( link, '$1', idlink ) return '[' .. link .. ' ' .. id .. ']' end local function noLink ( id, link, parameter ) -- evita generar un enlace externo junto con el identificador return id end local function bncLink ( id, link, parameter ) -- filtro local del BNC, para evadir multitud de identificadores de Wikidata que no se enlazan adecuadamente -- véase https://www.wikidata.org/wiki/Wikidata:Database_reports/Constraint_violations/P1890#%22Format%22_violations if ( string.match( id, '^%d%d%d%d%d%d%d%d%d$' ) ) then return generic ( id, link, parameter ) end return false end local function bnfLink ( id, link, parameter ) -- representación local del BNF, con doble enlace return generic( id, link, parameter ) .. ' [http://data.bnf.fr/ark:/12148/cb' .. id .. ' (data)]' end local function icd11Link ( id, link, parameter ) -- la propiedad P7329 no genera un enlace externo, así que se usarán los valores de P7807 cuando esté definida local foundation = getIdsFromWikidata(mw.wikibase.getEntityIdForCurrentPage(), 'P7807') if foundation and foundation[1] then link = 'https://icd.who.int/browse11/l-m/en#/http://id.who.int/icd/entity/$1' link = link:gsub('$1', foundation[1]) return generic(id, link, parameter) else return id end end local function ineLink ( id, link, parameter ) -- representación especial del INE, enlace no estándar con cinco parámetros utilizados local ineMainRE, ineTailRE = '^(%d%d)(%d%d%d)', '(%d%d)(%d%d)(%d%d)' local codProv, codMuni, codEC, codES, codNUC = string.match( id, ineMainRE .. ineTailRE .. '$' ) if not codEC or not codES or not codNUC then codProv, codMuni = string.match( id, ineMainRE .. '$' ) if codProv and codMuni then codEC, codES, codNUC = '00', '00', '00' else codProv, codMuni = string.match( id, ineMainRE ) codEC, codES, codNUC = '', '', '' end end if codProv and codMuni then link = 'http://www.ine.es/nomen2/inicio_a.do?accion=busquedaAvanzada&inicio=inicio_a&subaccion=&botonBusquedaAvanzada=Consultar+selecci%C3%B3n&numPag=0&ordenAnios=ASC&comunidad=00&entidad_amb=no&poblacion_amb=T&poblacion_op=%3D&poblacion_txt=&denominacion_op=like&denominacion_txt=&codProv=$1&codMuni=$2&codEC=$3&codES=$4&codNUC=$5' link = link:gsub('$1', codProv):gsub('$2', codMuni):gsub('$3', codEC):gsub('$4', codES):gsub('$5', codNUC) return generic( id, link, parameter ) end return id end local function commonscat ( id, link, parameter ) -- representación especial del enlace a las categorías de Commons, para mantener el formato de enlace interwiki local idlink = cleanLink( id, 'WIKI' ) link = mw.ustring.gsub( link, '$1', idlink ) return '<span class="plainlinks">[' .. link .. ' ' .. id .. ']</span>' end local function sisterprojects ( id, link, parameter ) -- enlaces interproyecto local prefix = { -- Ejemplo: -- enwiki = 'w:en', commonswiki = 'c', eswikivoyage = 'voy', eswiktionary = 'wikt', eswikibooks = 'b', eswikinews = 'n', eswikiversity = 'v', eswikiquote = 'q', eswikisource = 's', mediawikiwiki = 'mw', metawiki = 'm', specieswiki = 'species', } if prefix[ parameter ] then return '[['..prefix[ parameter ]..':'..id..'|'..id..']]' end return false end function getCommonsValue ( itemId ) local commonslink = '' local categories = '' local property = getIdsFromWikidata( itemId, 'P373' ) if property and property[1] then property = property[1] commonslink = commonslink .. getLink( 373, property, commonscat ) else property = '' end local sitelink = getIdsFromSitelinks( itemId, 'commonswiki' ) if sitelink and sitelink[1] then sitelink = sitelink[1] if sitelink ~= 'Category:' .. property then if commonslink == '' then commonslink = commonslink .. sisterprojects( sitelink, nil, 'commonswiki' ) end end else sitelink = '' end if property and sitelink then if sitelink ~= 'Category:' .. property then -- categories = categories .. '[[Categoría:Wikipedia:Control de autoridades con enlaces diferentes de Commons]]' end elseif sitelink then -- not property -- categories = categories .. '[[Categoría:Wikipedia:Control de autoridades sin Commonscat]]' elseif property then -- not sitelink -- categories = categories .. '[[Categoría:Wikipedia:Control de autoridades sin Commons]]' else -- not property and not sitelink -- categories = categories .. '[[Categoría:Wikipedia:Control de autoridades sin ningún enlace de Commons]]' end if commonslink ~= '' then -- Special:MediaSearch local mediasearch = 'https://commons.wikimedia.org/wiki/Special:MediaSearch?type=image&search=%22$1%22' commonslink = commonslink .. ' / ' .. commonscat( itemId, mediasearch ) return { commonslink .. categories } end return {} end local conf = {} --In this order: name of the parameter, label, propertyId in Wikidata, formatting function, category id -- -- name of the parameter: unique name -- -- label: internal link in wiki format -- -- propertyId in Wikidata: number without 'P' suffix -- -- formatting function: one of these four options -- -- -- local function (like 'generic') -- -- -- string 'y' (yes), to show a default identifier 'ID' -- -- -- string 'n' (no), to show the real identifier -- -- -- any other string, to show this string as identifier ('id', 'url', 'link', ...) -- -- category id: one of these tree options -- -- -- number 0, to not add category -- -- -- number 1, to add a category based on the name of the parameter -- -- -- any string, to add a category based on this string conf.databases = {} conf.databases[1] = {} conf.databases[1].name = '[[Control de autoridades]]' conf.databases[1].list = { { title = 'Proyectos Wikimedia', group = { { 'Wikidata', '[[Archivo:Wikidata-logo.svg|20px|link=Wikidata|alt=Wd|Wikidata]] Datos', 'Wikidata:$1', 'n', 0 }, { 'Commons', '[[Archivo:Commons-logo.svg|15px|link=Wikimedia Commons|alt=Commonscat|Commonscat]] Multimedia', getCommonsValue, 'n', 0 }, { 'Wikivoyage', '[[Archivo:Wikivoyage-logo.svg|15px|link=Wikiviajes|alt=Wikivoyage|Wikivoyage]] Guía turística', 'eswikivoyage', sisterprojects, 0 }, { 'Wiktionary', '[[Archivo:Wiktionary-logo.svg|15px|link=Wikcionario|alt=Wiktionary|Wiktionary]] Diccionario', 'eswiktionary', sisterprojects, 0 }, { 'Wikibooks', '[[Archivo:Wikibooks-logo.svg|15px|link=Wikilibros|alt=Wikibooks|Wikibooks]] Libros y manuales', 'eswikibooks', sisterprojects, 0 }, { 'Wikinews', '[[Archivo:Wikinews-logo.svg|20px|link=Wikinoticias|alt=Wikinews|Wikinews]] Noticias', 'eswikinews', sisterprojects, 0 }, { 'Wikiversity', '[[Archivo:Wikiversity-logo.svg|15px|link=Wikiversidad|alt=Wikiversity|Wikiversity]] Recursos didácticos', 'eswikiversity', sisterprojects, 0 }, { 'Wikiquote', '[[Archivo:Wikiquote-logo.svg|15px|link=Wikiquote|alt=Wikiquote|Wikiquote]] Citas célebres', 'eswikiquote', sisterprojects, 0 }, { 'Wikisource', '[[Archivo:Wikisource-logo.svg|15px|link=Wikisource|alt=Wikisource|Wikisource]] Textos', 'eswikisource', sisterprojects, 0 }, { 'MediaWiki', '[[Archivo:MediaWiki-2020-icon.svg|20px|link=MediaWiki|alt=MediaWiki|MediaWiki]] MediaWiki', 'mediawikiwiki', sisterprojects, 0 }, { 'Meta-Wiki', '[[Archivo:Wikimedia Community Logo.svg|15px|link=Wikimedia Meta-Wiki|alt=Meta-Wiki|Meta-Wiki]] Coordinación', 'metawiki', sisterprojects, 0 }, { 'Wikispecies', '[[Archivo:Wikispecies-logo.svg|15px|link=Wikispecies|alt=Wikispecies|Wikispecies]] Especies', 'specieswiki', sisterprojects, 0 }, }, }, { title = 'Identificadores', group = { { 'ISSN', '[[ISSN]]', 236, 'n', 1 }, { 'VIAF', '[[Fichero de Autoridades Virtual Internacional|VIAF]]', 214, 'n', 1 }, { 'ISNI', '[[International Standard Name Identifier|ISNI]]', 213, 'n', 1 }, { 'BCN', '[[Biblioteca del Congreso de la Nación Argentina|BCN]]', 2879, 'n', 1 }, { 'BNA', '[[Biblioteca Nacional de la República Argentina|BNA]]', 3788, 'n', 1 }, { 'BNA-ed', '[[Biblioteca Nacional (Argentina)|BNA]]', 1143, 'n', 0 }, { 'BNM', '[[Biblioteca Nacional de Maestras y Maestros|BNM]]', 9774, 'n', 1 }, { 'BNE', '[[Biblioteca Nacional de España|BNE]]', 950, 'n', 1 }, { 'BNF', '[[Biblioteca Nacional de Francia|BNF]]', 268, bnfLink, 1 }, { 'VcBA', '[[Biblioteca Apostólica Vaticana|VcBA]]', 8034, 'n', 1 }, { 'BNM', '[[Biblioteca Nacional de México|BNM]]', 4440, 'n', 1 }, { 'BNC', '[[Biblioteca Nacional de Chile|BNC]]', 1890, bncLink, 1 }, { 'BNC', '[[Biblioteca Nacional de Chile|BNC]]', 7369, 'n', 1 }, { 'BNU', '[[Biblioteca Nacional de Uruguay|BNU]]', 12595, 'n', 1 }, { 'BNB', '[[Biblioteca Nacional de Brasil|BNB]]', 4619, 'n', 1 }, { 'CANTIC', '[[Biblioteca de Cataluña|CANTIC]]', 9984, 'n', 1 }, { 'GND', '[[Gemeinsame Normdatei|GND]]', 227, 'n', 1 }, { 'LCCN', '[[Library of Congress Control Number|LCCN]]', 244, 'n', 1 }, { 'NCL', '[[Biblioteca central de Taiwán|NCL]]', 1048, 'n', 0 }, { 'NDL', '[[Biblioteca Nacional de la Dieta|NDL]]', 349, 'n', 0 }, { 'NKC', '[[Biblioteca Nacional de la República Checa|NKC]]', 691, 'n', 0 }, { 'NLA', '[[Biblioteca Nacional de Australia|NLA]]', 409, 'n', 1 }, { 'RLS', '[[Biblioteca del Estado Ruso|BER]]', 947, 'n', 0 }, { 'J9U', '[[Biblioteca Nacional de Israel|NLI]]', 8189, 'n', 0 }, { 'CINII', '[[CiNii]]', 271, 'n', 0 }, { 'NARA', '[[National Archives and Records Administration|NARA]]', 1225, 'n', 0 }, { 'LCCNLCOC', '[[Library of Congress Control Number|LCCN]]', 1144, 'n', 0 }, { 'SNAC', '[[d:Q29861311|SNAC]]', 3430, 'n', 1 }, { 'S2', '[[:d:Q22908627|S2]]', 4012, 'n', 0 }, { 'SUDOC', '[[Système universitaire de documentation|SUDOC]]', 269, 'n', 0 }, { 'ULAN', '[[Union List of Artist Names|ULAN]]', 245, 'n', 1 }, { 'frickSpain ', '[[Colección Frick|research.frick]]', 8572, 'n', 1 }, { 'ORCID', '[[ORCID]]', 496, 'n', 1 }, { 'Scopus', '[[Scopus]]', 1153, 'n', 1 }, -- { 'SELIBR', '[[LIBRIS|SELIBR]]', 906, 'n', 1 }, { 'BIBSYS', '[[BIBSYS]]', 1015, 'n', 1 }, { 'IPNIaut', '[[Índice Internacional de Nombres de las Plantas|IPNI]]', 586, 'n', 'IPNI' }, { 'MGP', '[[Mathematics Genealogy Project|MGP]]', 549, 'n', 0 }, { 'autores.uy', '[[autores.uy]]', 2558, 'n', 1 }, { 'Slovenska biografija', '[[:d:Q15975890|Slovenska biografija]]', 1254, 'n', 0 }, { 'SBN', '[[Istituto Centrale per il Catalogo Unico|ICCU]]', 396, 'n', 1 }, { 'ARAE', '[[:d:Q105580684|ARAE]]', 9226, 'n', 1 }, { 'DeutscheBiographie', '[[Deutsche Biographie]]', 7902, 'n', 1 }, { 'NobelPrize', '[[Premio Nobel]]', 8024, 'n', 0 }, { 'CCBAE', '[[:d:Q61505171|CCBAE]]', 6493, 'n', 1 }, -- { 'DIR3', '[[Directorio Común de Unidades Orgánicas y Oficinas|DIR3]]', 6222, 'n', 1 }, { 'CensoGuia', '[[Censo-Guía de Archivos de España e Iberoamérica]]', 3998, 'n', 'Censo-Guía' }, { 'Libraries.org', 'Libraries.org', 4848, 'n', 1 }, { 'DirectorioMuseos', '[[:d:Q56246649|Directorio de Museos y Colecciones de España]]', 5763, 'n', 1 }, { 'SUCA', 'SUCA', 5946, 'n', 1 }, { 'BOE', '[[Boletín Oficial del Estado|BOE]]', 4256, 'n', 1 }, { 'RoyalSociety', '[[Royal Society]]', 2070, 'url', 'Royal Society' }, { 'HAW', '[[Academia de Ciencias y Humanidades de Heidelberg|HAW]]', 2273, 'n', 1 }, { 'SAW', '[[Academia Sajona de Ciencias de Leipzig|SAW]]', 3411, 'n', 1 }, { 'KNAW', '[[Real Academia de Artes y Ciencias de los Países Bajos|KNAW]]', 2454, 'n', 1 }, -- { 'KVAB', '[[Real Academia Flamenca de Ciencias y Artes de Bélgica|KVAB]]', 3887, 'n', 1 }, { 'Leopoldina', '[[Deutsche Akademie der Naturforscher Leopoldina|Leopoldina]]', 3413, 'n', 1 }, { 'CONICET', '[[CONICET]]', 3900, 'n', 1 }, { 'Grierson', '[[Directorio de científicos argentinos Dra. Grierson|Grierson]]', 3946, 'n', 1 }, { 'RANM', '[[Real Academia Nacional de Medicina|RANM]]', 3945, 'n', 1 }, -- { 'ANMF', '[[Académie Nationale de Médecine|ANMF]]', 3956, 'n', 1 }, { 'Léonore', '[[Base Léonore|Léonore]]', 11152, 'n', 0 }, { 'USCongress', '[[Biographical Directory of the United States Congress|US Congress]]', 1157, 'n', 0 }, { 'BPN', '[[Biografisch Portaal|BPN]]', 651, 'n', 1 }, -- { 'ISCO', '[[d:Q1233766|ISCO]]', 952, 'n', 1 }, { 'AAT', '[[Art & Architecture Thesaurus|AAT]]', 1014, 'n', 1 }, { 'OpenLibrary', '[[Open Library]]', 648, 'n', 'Open Library' }, { 'PARES', '[[PARES]]', 4813, 'n', 1 }, { 'SSRN', '[[Social Science Research Network|SSRN]]', 3747, 'n', 'SSRN autor' }, { 'SIKART', '[[SIKART]]', 781, 'n', 0 }, { 'KULTURNAV', '[[KulturNav]]', 1248, 'id', 0 }, { 'RKDartists', '[[Rijksbureau voor Kunsthistorische Documentatie|RKD]]', 650, 'n', 1 }, { 'GoogleScholar', '[[Google Académico]]', 1960, 'n', 'Google Académico' }, -- { 'Microsoft Academic', '[[Microsoft Academic]]', 6366, 'n', 1 }, { 'RID', '[[ResearcherID]]', 1053, 'n', 1 }, { 'NLM', '[[Biblioteca Nacional de Medicina de los Estados Unidos|NLM]]', 1055, 'n', 1 }, { 'Latindex', '[[Latindex]]', 12376, 'n', 1 }, { 'ERIH PLUS', '[[ERIH PLUS]]', 3434, 'n', 1 }, { 'IPNIpub', '[[Índice Internacional de Nombres de las Plantas|IPNI]]', 2008, 'n', 1 }, { 'SUDOCcat', '[[Système universitaire de documentation|SUDOC]]', 1025, 'n', 'SUDOC catálogo' }, { 'ZDB', '[[Zeitschriftendatenbank|ZDB]]', 1042, 'n', 1 }, { 'NorwegianRegister', '[[Norsk senter for forskningsdata|Norwegian Register]]', 1270, 'n', 'Norwegian Register' }, { 'DOAJ', '[[Directory of Open Access Journals|DOAJ]]', 5115, 'n', 1 }, { 'ACNP', 'ACNP', 6981, 'n', 1 }, { 'DipFedBra', '[[Cámara de Diputados de Brasil]]', 7480, 'n', 1 }, { 'HCDN', '[[Cámara de Diputados de la Nación Argentina|Estadísticas HCDN]]', 4693, 'n', 1 }, { 'HCDNbio', '[[Cámara de Diputados de la Nación Argentina|Biografía HCDN]]', 5225, 'n', 1 }, { 'Directorio Legislativo', 'Directorio Legislativo', 6585, 'n', 0 }, -- { 'Legislatura CABA', '[[Legislatura de la Ciudad de Buenos Aires|Legislatura CABA]]', 4667, 'n', 1 }, { 'Archivo Histórico de Diputados de España', '[[Congreso de los Diputados|Archivo Histórico de Diputados (1810-1977)]]', 9033, 'n', 1 }, { 'Senadores de España (1834-1923)', '[[Senado de España|Senadores de España (1834-1923)]]', 10265, 'n', 1 }, { 'Asamblea de Madrid', '[[Asamblea de Madrid]]', 4797, 'n', 1 }, { 'BCNCL', '[[Biblioteca del Congreso Nacional de Chile|Biografías BCN]]', 5442, 'url', 0 }, { 'RBD', '[[Ministerio de Educación de Chile|RBD MINEDUC]]', 1919, 'n', 0 }, { 'CineChile', 'CineChile', 6750, 'url', 0 }, { 'Tebeosfera-autor', '[[Tebeosfera]]', 5562, 'n', 1 }, { 'DPRR', 'DPRR', 6863, 'n', 0}, { 'tribunsdelaplebe.fr', 'TDLP', 8961, 'n', 0}, { 'Pleiades', 'Pleiades', 1584, 'n', 0}, { 'IMO', '[[Organización Marítima Internacional|IMO]]', 458, 'n', 0}, { 'Mnemosine', '[[Mnemosine. Biblioteca Digital de La otra Edad de Plata|Mnemosine]]', 10373, 'n', 0 }, { 'Renacyt', '[[Registro Nacional Científico, Tecnológico y de Innovación Tecnológica|Renacyt]]', 10452, 'n', 0 }, { 'AWARE', '[[Archives of Women Artists, Research and Exhibitions|AWARE]]', 6637, 'url', 0 }, { 'Tabakalera', '[[Tabakalera]]', 10069, 'n', 1 }, { 'BUSC', '[[Biblioteca de la Universidad de Santiago de Compostela|BUSC]]', 12538, 'n' , 1} }, }, { title = 'Diccionarios y enciclopedias', group = { { 'Auñamendi', '[[Enciclopedia Auñamendi|Auñamendi]]', 3218, 'n', 1 }, -- { 'GEA', '[[Gran Enciclopedia Aragonesa|GEA]]', 1807, 'n', 1 }, { 'GEN', '[[Gran Enciclopedia Navarra|GEN]]', 7388, 'n', 1 }, { 'DBSE', '[[Diccionario biográfico del socialismo español|DBSE]]', 2985, 'url', 1 }, { 'DBE', '[[Diccionario biográfico español|DBE]]', 4459, 'url', 1 }, { 'DBCLM', '[[Diccionario biográfico de Castilla-La Mancha|DBCLM]]', 13067, 'url', 1 }, { 'DCED', '[[Diccionario de catedráticos españoles de derecho|DCED]]', 13620, 'n', 1 }, { 'DBA', '[[Diccionario biográfico de Almería|DBA]]', 13851, 'n', 1 }, { 'DHS', '[[Diccionario histórico de Suiza|DHS]]', 902, 'n', 0 }, { 'LIR', '[[Diccionario histórico de Suiza|LIR]]', 886, 'n', 0 }, { 'TLS', '[[Theaterlexikon der Schweiz|TLS]]', 1362, 'n', 0 }, { 'Britannica', '[[Enciclopedia Británica|Britannica]]', 1417, 'url', 0 }, { 'ELEM', '[[Enciclopedia de la Literatura en México|ELEM]]', 1565, 'n', 0 }, { 'Treccani', '[[Enciclopedia Treccani|Treccani]]', 4223, 'url', 0 }, { 'Iranica', '[[Encyclopædia Iranica]]', 3021, 'n', 1 }, }, }, { title = 'Repositorios digitales', group = { { 'PerséeRevista', '[[Persée (portal)|Persée]]', 2733, 'n', 'Persée revista' }, { 'DialnetRevista', '[[Dialnet]]', 1609, 'n', 'Dialnet revista' }, { 'Redalyc', '[[Redalyc]]', 3131, 'n', 1 }, -- { 'UNZrevista', '[[UNZ.org|UNZ]]', 2735, 'n', 0 }, -- { 'JSTORrevista', '[[JSTOR]]', 1230, 'n', 'JSTOR revista' }, { 'HathiTrust', '[[HathiTrust]]', 1844, 'n', 1 }, { 'Galicianaobra', '[[Galiciana]]', 3004, 'n', 'Galiciana obra' }, { 'Trove', '[[Trove]]', 5603, 'n', 1 }, { 'BVMCobra', '[[Biblioteca Virtual Miguel de Cervantes|BVMC]]', 3976, 'n', 'BVMC obra' }, { 'BVMCpersona', '[[Biblioteca Virtual Miguel de Cervantes|BVMC]]', 2799, 'n', 'BVMC persona' }, { 'Persée', '[[Persée (portal)|Persée]]', 2732, 'n', 1 }, { 'Dialnet', '[[Dialnet]]', 1607, 'n', 1 }, { 'GutenbergAutor', '[[Proyecto Gutenberg]]', 1938, 'n', 'Proyecto Gutenberg autor' }, { 'BHL-bibliografia', '[[Biodiversity Heritage Library|BHL]]', 4327, 'n', 0 }, -- { 'UNZautor', '[[UNZ.org|UNZ]]', 2734, 'n', 'UNZ' }, { 'TLL', '[[:d:Q570837|TLL]]', 7042, 'n', 'The Latin Library' }, { 'BDCYL', '[[Biblioteca Digital de Castilla y León|BDCYL]]', 3964, 'n', 1 }, { 'BVPB', '[[Biblioteca Virtual del Patrimonio Bibliográfico|BVPB]]', 4802, 'n', 1 }, { 'PDCLM', '[[d:Q61500710|Patrimonio Digital de Castilla-La Mancha]]', 6490, 'n', 1 }, { 'BDA', '[[Biblioteca Digital de Andalucía|BDA]]', 6496, 'n', 1 }, { 'BDM', '[[Biblioteca Digital de Madrid|BDM]]', 13816, 'n', 1 }, { 'BVPHautoridad', '[[Biblioteca Virtual de Prensa Histórica|BVPH]]', 6492, 'n', 1 }, { 'BivaldiAutor', '[[Biblioteca Valenciana Digital|BiValDi]]', 3932, 'n', 'Bivaldi autor' }, { 'GalicianaAutor', '[[Galiciana]]', 3307, 'n', 'Galiciana autor' }, { 'Packard Humanities Institute', '[[Packard Humanities Institute|PHI]]', 6941, 'n', 0 }, { 'Europeana', '[[Europeana]]', 7704, 'n', 1 }, { 'DOI', '[[Identificador de objeto digital|DOI]]', 356, 'n', 1 }, { 'Handle', '[[Sistema Handle|Handle]]', 1184, 'url', 1 }, }, }, { title = 'Museos', group = { { 'MNCARS', '[[Museo Nacional Centro de Arte Reina Sofía|MNCARS]]', 4439, 'url', 1 }, { 'MuseoDelPradoPersona', '[[Museo del Prado]]', 5321, 'n', 'Museo del Prado (persona)' }, { 'MuseoDelPradoObra', '[[Museo del Prado]]', 8905, 'n', 'Museo del Prado (obra)' }, { 'Museo Smithsoniano de Arte AmericanoPersona', '[[Museo Smithsoniano de Arte Americano|SAAM]]', 1795, 'n', 'SAAM (persona)' }, { 'Museo Smithsoniano de Arte AmericanObra', '[[Museo Smithsoniano de Arte Americano|SAAM]]', 4704, 'n', 'SAAM (obra)' }, { 'MuseodeOrsayArtistas', '[[Museo de Orsay]]', 2268, 'n', 'Museo de Orsay (artista)' }, { 'Thyssen-BornemiszaArtistas', '[[Museo Thyssen-Bornemisza|Thyssen-Bornemisza]]', 2431, 'n', 'Thyssen-Bornemisza (artista)' }, }, }, { title = 'Hemerotecas digitales', group = { { 'HemBNE', '[[Hemeroteca Digital de la Biblioteca Nacional de España|Hemeroteca digital de la BNE]]', 12151, 'n', 1 }, { 'BVPH', '[[Biblioteca Virtual de Prensa Histórica]]', 2961, 'n', 1 }, { 'Memoriademadrid', '[[Memoriademadrid]]', 7372, 'n', 1 }, }, }, { title = 'Astronomía', group = { { 'Simbad', '[[SIMBAD]]', 3083, 'n', 0 }, { 'JPL-Small-Body-Database', '[[JPL Small-Body Database|JPL]]', 716, 'n', 0 }, { 'MPC', '[[Centro de Planetas Menores|MPC]]', 5736, 'n', 0 }, { 'NASA-Exoplanet-Archive', '[[NASA Exoplanet Archive]]', 5667, 'n', 0 }, { 'GazPlaNom', 'Gazetteer of Planetary Nomenclature', 2824, 'n', 0 }, }, }, { title = 'Lugares', group = { { 'OSM', '[[OpenStreetMap|OSM]]', 402, 'n', 'Relación OSM' }, { 'TGN', '[[Getty Thesaurus of Geographic Names|TGN]]', 1667, 'n', 1 }, { 'AtlasIR', '[[:d:Q24575107|Atlas Digital del Imperio Romano]]', 1936, 'n', 0 }, { 'Pleiades', '[[:d:Q24423804|Pleiades]]', 1584, 'n', 0 }, { 'TmGEO', '[[:d:Q22094624|Trismegistos GEO]]', 1958, 'n', 0 }, { 'SNCZI-IPE-EMBALSE', '[[Sistema Nacional de Cartografía de Zonas Inundables|SNCZI]]-IPE', 4568, 'n', 'SNCZI-IPE embalse' }, { 'SNCZI-IPE-PRESA', '[[Sistema Nacional de Cartografía de Zonas Inundables|SNCZI]]-IPE', 4558, 'n', 'SNCZI-IPE presa' }, { 'NATURA2000', '[[Red Natura 2000|Natura 2000]]', 3425, 'n', 'Natura 2000' }, { 'WWF', '[[Fondo Mundial para la Naturaleza|WWF]]', 1294, 'n', 1 }, { 'IDESCAT', '[[Instituto de Estadística de Cataluña|IDESCAT]]', 4335, 'n', 1 }, { 'INE', '[[Instituto Nacional de Estadística (España)|INE]]', 772, ineLink, 1 }, { 'INE Portugal', '[[Instituto Nacional de Estatística (Portugal)|INE]]', 6324, 'n', 1 }, { 'ISTAT', '[[Istituto Nazionale di Statistica|ISTAT]]', 635, 'n', 1 }, { 'OFS-Suiza', '[[Oficina Federal de Estadística (Suiza)|OFS]]', 771, 'n', 1 }, { 'IBGE', '[[Instituto Brasileiro de Geografia e Estatística|IBGE]]', 1585, 'n', 1 }, { 'TOID', '[[TOID]]', 3120, 'n', 1 }, { 'INSEE-commune', '[[Institut National de la Statistique et des Études Économiques|INSEE]]', 374, 'n', 'INSEE (comuna)' }, { 'INSEE-departamento', '[[Institut National de la Statistique et des Études Économiques|INSEE]]', 2586, 'n', 'INSEE (departamento)' }, { 'INSEE-region', '[[Institut National de la Statistique et des Études Économiques|INSEE]]', 2585, 'n', 'INSEE (región)' }, { 'INSEE-canton', '[[Institut National de la Statistique et des Études Économiques|INSEE]]', 2506, 'n', 'INSEE (cantón)' }, { 'INEGI-mun', '[[Instituto Nacional de Estadística y Geografía|INEGI]]', 3801, 'n', 'INEGI municipio' }, { 'INEGI-loc', '[[Instituto Nacional de Estadística y Geografía|INEGI]]', 1976, 'n', 'INEGI localidad' }, { 'SIRUTA', '[[SIRUTA]]', 843, 'n', 1 }, { 'SUDAFRICA-MUN', '[[Sudáfrica|Código municipio Sudáfrica]]', 911, 'n', 1 }, { 'LAU', '[[Unidad administrativa local|LAU]]', 782, 'n', 1 }, { 'KSH', '[[Központi Statisztikai Hivatal|KSH]]', 939, 'n', 1 }, { 'OKATO', '[[OKATO]]', 721, 'n', 1 }, { 'OSTAT', '[[Statistik Austria|ÖSTAT]]', 964, 'n', 'ÖSTAT-Nr'}, { 'TERC', '[[Oficina Central de Estadística (Polonia)|TERC]]', 1653, 'n', 'TERC'}, { 'GNIS', '[[Geographic Names Information System|GNIS]]', 590, 'n', 0}, { 'WDTA', '[[Base de Datos Mundial sobre Áreas Protegidas|WDTA]]', 809, 'n', 0 }, }, }, { title = 'Arquitectura', group = { { 'DocomomoIberico', '[[Fundación Docomomo Ibérico|Docomomo Ibérico]]', 3758, 'n', 'Docomomo Ibérico' }, { 'COAMinmueble', '[[Colegio Oficial de Arquitectos de Madrid|COAM]]', 2917, 'n', 'COAM inmueble' }, { 'COAMpersona', '[[Colegio Oficial de Arquitectos de Madrid|COAM]]', 4488, 'n', 'COAM persona' }, { 'ArchnetAutoridad', '[[ArchNet]]', 12728, 'n', 'Archnet autoridad' }, { 'ArchnetSitio', '[[ArchNet]]', 7323, 'n', 'Archnet sitio' }, }, }, { title = 'Faros', group = { { 'ARHLS', '[[Amateur Radio Lighthouse Society|ARHLS]]', 2980, 'n', 0 }, { 'NGA', '[[Agencia Nacional de Inteligencia-Geoespacial|NGA]]', 3563, 'n', 0 }, { 'UKHO', '[[Instituto Hidrográfico del Reino Unido|UKHO]]', 3562, 'n', 0 }, { 'MarineTraffic', '[[MarineTraffic]]', 3601, 'n', 0 }, { 'OnlineListofLights', '[[:d:Q843152|Online List of Lights]]', 3223, 'n', 0 }, }, }, { title = 'Patrimonio histórico', group = { { 'World Heritage Site', '[[Patrimonio de la Humanidad]]', 757, 'n', 'Centro del Patrimonio Mundial' }, { 'CNMLBH', '[[Comisión Nacional de Monumentos, de Lugares y de Bienes Históricos|CNMLBH]]', 4587, 'n', 'cnmlbh' }, { 'IGESPAR', '[[Instituto de Gestão do Património Arquitetónico e Arqueológico|IGESPAR]]', 1702, 'n', 1 }, { 'SIPA', '[[Sistema de Informação para o Património Arquitetónico|SIPA]]', 1700, 'n', 1 }, { 'Infopatrimonio', '[[:d:Q64745161|Infopatrimônio]]', 4372, 'n', 'Infopatrimônio' }, { 'AustriaObjektID', 'Austria ObjektID', 2951, 'n', 'Austria ObjektID' }, { 'FBBID', '[[Fredede og Bevaringsværdige Bygninger|FBB]]', 2783, 'n', 'FBB' }, { 'Fornminnesregistret', '[[Fornminnesregistret|FMIS]]', 1260, 'n', 'FMIS' }, { 'BerlinerKulturdenkmal', 'Berliner Kulturdenkmal', 2424, 'n', 'Berliner Kulturdenkmal' }, { 'NHLE', '[[National Heritage List for England|NHLE]]', 1216, 'n', 1 }, { 'NRHP', '[[Registro Nacional de Lugares Históricos|NRHP]]', 649, 'n', 1 }, { 'KULTURMINNE', '[[Riksantikvaren|Kulturminne]]', 758, 'n', 'Kulturminne' }, { 'CRHP', '[[:d:Q3456275|CRHP]]', 477, 'n', 1 }, { 'MERIMEE', '[[Base Mérimée|Mérimée]]', 380, 'n', 'Mérimée' }, { 'CADW', '[[Cadw]]', 1459, 'n', 'Cadw' }, { 'Památkový Katalog', '[[Památkový katalog]]', 762, 'n', 'Památkový katalog' }, { 'PatrimonioIran', 'Patrimonio Nacional de Irán', 1369, 'n', 'Patrimonio Nacional de Irán' }, { 'Rijksmonument', 'Rijksmonument', 359, 'n', 'Rijksmonument' }, { 'BIC', '[[Bien de Interés Cultural (España)|BIC]]', 808, 'n', 1 }, { 'BCIN', '[[Bien Cultural de Interés Nacional|BCIN]]', 1586, 'n', 1 }, { 'IPAC', '[[Inventario del Patrimonio Arquitectónico de Cataluña|IPAC]]', 1600, 'n', 1 }, { 'IGPCV', '[[Inventario General del Patrimonio Cultural Valenciano|IGPCV]]', 2473, 'n', 1 }, { 'IAPH', '[[Instituto Andaluz del Patrimonio Histórico|IAPH]]', 8425, 'n', 0 }, { 'GD-PCA', '[[Guía Digital del Patrimonio Cultural de Andalucía|Patrimonio Cultural de Andalucía]]', 3318, 'n', 1 }, { 'SIPCA', '[[SIPCA]]', 3580, 'n', 1 }, { 'PWJCYL', '[[Junta de Castilla y León|Patrimonio Web JCyL]]', 3177, 'n', 'Patrimonio Web JCyL' }, { 'CPCCLM', '[[Catálogo de Patrimonio Cultural de Castilla-La Mancha]]', 6539, 'n', 1 }, { 'HispaniaNostra', '[[Lista roja de patrimonio en peligro|Lista Roja Hispania Nostra]]', 4868, 'url', 'Lista Roja Hispania Nostra' }, { 'HGC', '[[Heritage Gazetteer for Cyprus]]', 6916, 'n', 1 }, { 'HGL', '[[Heritage Gazetteer of Libya]]', 6751, 'n', 1 }, }, }, { title = 'Deportistas', group = { { 'COI', '[[Comité Olímpico Internacional|COI]]', 5815, 'n', 0 }, { 'World Athletics', '[[World Athletics]]', 1146, 'n', 0 }, { 'European Athletics', '[[Atletismo Europeo]]', 3766, 'n', 0 }, { 'Liga Diamante', '[[Liga de Diamante]]', 3923, 'n', 0 }, { 'ITU', '[[Unión Internacional de Triatlón|ITU]]', 3604, 'n', 0 }, { 'ATP', '[[Asociación de Tenistas Profesionales|ATP]]', 536, 'n', 0 }, { 'Copa Davis', '[[Copa Davis]]', 2641, 'n', 0 }, { 'WTA', '[[Asociación de Tenis Femenino|WTA]]', 597, 'n', 0 }, { 'Fed Cup', '[[Copa Billie Jean King|Fed Cup]]', 2642, 'n', 0 }, { 'ITF', '[[Federación Internacional de Tenis|ITF]]', 599, 'n', 0 }, { 'ITHF', '[[Salón de la Fama del Tenis Internacional|ITHF]]', 3363, 'n', 0 }, { 'ITTF', '[[Federación Internacional de Tenis de Mesa|ITTF]]', 1364, 'n', 0 }, { 'FIFA', '[[FIFA]]', 1469, 'n', 0 }, { 'UEFA', '[[UEFA]]', 2276, 'n', 0 }, { 'NFT', 'National-Football-Teams', 2574, 'n', 0 }, { 'Soccerway', '[[Soccerway]]', 2369, 'n', 0 }, { 'Transfermarkt', '[[Transfermarkt]]', 2446, 'n', 0 }, { 'As', '[[As (periódico)|As]]', 3427, 'n', 0 }, { 'ESPN FC', '[[ESPN FC]]', 3681, 'n', 0 }, { 'FBref', 'FBref', 5750, 'n', 0 }, { 'BeSoccer', '[[BeSoccer]]', 12577, 'n', 0 }, { 'LaPreferente', 'LaPreferente', 7359, 'n', 0 }, { 'Livefutbol', 'Livefutbol', 2020, 'n', 0 }, { 'Soccerbase', 'Soccerbase', 2193, 'n', 0 }, { 'FootballDatabase', '[[FootballDatabase]]', 3537, 'n', 0 }, { 'BDFutbol', '[[BDFutbol]]', 3655, 'n', 0 }, { 'EPCR', '[[European Professional Club Rugby|EPCR]]', 3666, 'n', 0 }, { 'FIDE', '[[Federación Internacional de Ajedrez|FIDE]]', 1440, 'n', 0 }, { 'BoxRec', '[[BoxRec]]', 1967, 'n', 0 }, { 'Sherdog', '[[Sherdog]]', 2818, 'n', 0 }, { 'WWE', '[[WWE]]', 2857, 'n', 0 }, { 'NSK', '[[Asociación Japonesa de Sumo|NSK]]', 3385, 'n', 0 }, { 'IJF', '[[Federación Internacional de Yudo|IJF]]', 4559, 'n', 0 }, { 'FINA', '[[Federación Internacional de Natación|FINA]]', 3408, 'n', 0 }, { 'ISHOF', '[[International Swimming Hall of Fame|ISHOF]]', 3691, 'n', 0 }, { 'NFL', '[[National Football League|NFL]]', 3539, 'n', 0 }, { 'NHL', '[[National Hockey League|NHL]]', 3522, 'n', 0 }, { 'FIH', '[[Federación Internacional de Hockey|FIH]]', 3742, 'n', 0 }, { 'MLB', '[[Grandes Ligas de Béisbol|MLB]]', 3541, 'n', 0 }, { 'Baseball-Reference', '[[Baseball-Reference.com|Baseball-Reference]]', 1825, 'n', 0 }, { 'FIL', '[[Federación Internacional de Luge|FIL]]', 2990, 'n', 0 }, { 'IBSF', '[[Federación Internacional de Bobsleigh y Skeleton|IBSF]]', 2991, 'n', 0 }, { 'WAF', '[[Federación Internacional de Tiro con Arco|WAF]]', 3010, 'n', 0 }, { 'FEI', '[[Federación Ecuestre Internacional|FEI]]', 3111, 'n', 0 }, { 'FIE', '[[Federación Internacional de Esgrima|FIE]]', 2423, 'n', 0 }, { 'CEE', '[[Confederación Europea de Esgrima|CEE]]', 4475, 'n', 0 }, { 'IBU', '[[Unión Internacional de Biatlón|IBU]]', 2459, 'n', 0 }, { 'ISU', '[[Unión Internacional de Patinaje sobre Hielo|ISU]]', 2694, 'n', 0 }, { 'FIG', '[[Federación Internacional de Gimnasia|FIG]]', 2696, 'n', 0 }, { 'UIPM', '[[Unión Internacional de Pentatlón Moderno|UIPM]]', 2726, 'n', 0 }, { 'BWF', '[[Federación Mundial de Bádminton|BWF]]', 2729, 'n', 0 }, { 'WCF', '[[Federación Mundial de Curling|WCF]]', 3557, 'n', 0 }, { 'EHF', '[[Federación Europea de Balonmano|EHF]]', 3573, 'n', 0 }, { 'IWF', '[[Federación Internacional de Halterofilia|IWF]]', 3667, 'n', 0 }, { 'IOF', '[[Federación Internacional de Orientación|IOF]]', 3672, 'n', 0 }, { 'ISSF', '[[Federación Internacional de Tiro Deportivo|ISSF]]', 2730, 'n', 0 }, { 'FIVB', '[[Federación Internacional de Voleibol|FIVB]]', 2801, 'n', 0 }, { 'CEV', '[[Confederación Europea de Voleibol|CEV]]', 3725, 'n', 0 }, { 'ICF', '[[Federación Internacional de Piragüismo|ICF]]', 3689, 'n', 0 }, { 'FISA', '[[Federación Internacional de Sociedades de Remo|FISA]]', 2091, 'n', 0 }, { 'IFSC', '[[Federación Internacional de Escalada Deportiva|IFSC]]', 3690, 'n', 0 }, { 'NLL', '[[National Lacrosse League|NLL]]', 3955, 'n', 0 }, { 'PGA', '[[Professional Golfers Association of America|PGA]]', 2811, 'n', 0 }, { 'LPGA', '[[LPGA]]', 2810, 'n', 0 }, { 'FIBA', '[[Federación Internacional de Baloncesto|FIBA]]', 3542, 'n', 0 }, { 'Euroliga', '[[Euroliga]]', 3536, 'n', 0 }, { 'WNBA', '[[WNBA]]', 3588, 'n', 0 }, { 'NBA', '[[NBA]]', 3647, 'n', 0 }, { 'ACB', '[[Asociación de Clubs de Baloncesto|ACB]]', 3525, 'n', 0 }, { 'Entr. ACB', '[[Asociación de Clubs de Baloncesto|Entrenador ACB]]', 6297, 'n', 0 }, { 'snooker.org', 'snooker.org', 4502, 'n', 0 }, { 'snooker.org tournament', 'snooker.org', 4921, 'n', 0 }, { 'WST', 'WST', 4498, 'n', 0 }, { 'CueTracker', 'CueTracker', 4924, 'n', 0 }, }, }, { title = 'Cine', group = { { 'FilmAffinity', '[[FilmAffinity]]', 480, 'n', 0 }, { 'IMDb', '[[Internet Movie Database|IMDb]]', 345, 'n', 0 }, { 'Óscar', '[[Premios Óscar|Óscar]]', 6145, 'n', 0 }, { 'AFI', '[[AFI Catalog of Feature Films|AFI]]', 3593, 'n', 0 }, { 'Allcinema', '[[Allcinema]]', 2465, 'n', 0 }, { 'AllMovie', '[[AllMovie]]', 1562, 'n', 0 }, { 'AlloCiné', '[[AlloCiné]]', 1265, 'n', 0 }, { 'BFI', '[[British Film Institute|BFI]]', 2703, 'n', 0 }, { 'Box Office Mojo', '[[Box Office Mojo]]', 1237, 'n', 0 }, { 'ICAA película', '[[Instituto de la Cinematografía y de las Artes Audiovisuales|ICAA]]', 5128, 'n', 1 }, }, }, { title = 'Empresarios', group = { { 'Bloomberg', '[[Bloomberg L.P.|Bloomberg]]', 3052, 'n', 0 }, { 'Crunchbase', '[[Crunchbase]]', 2087, 'n', 0 }, }, }, { title = 'Identificadores fiscales', group = { { 'IRS', '[[Servicio de Impuestos Internos de los Estados Unidos|IRS]]', 1297, noLink, 0 }, { 'VAT', '[[Número de Identificación Fiscal a efectos del IVA (NIF-IVA)|VAT]]', 3608, noLink, 0 }, { 'UID', 'UID', 4829, 'n', 0 }, }, }, { title = 'Informática', group = { { 'TOP500', 'TOP500', 7307, 'n', 0 }, { 'Arch', 'Arch Linux', 3454, 'n', 0 }, { 'AUR', 'AUR', 4162, 'n', 0 }, { 'Debian', 'Debian', 3442, 'n', 0 }, { 'Fedora', 'Fedora', 3463, 'n', 0 }, { 'FSD', 'Free Software Directory', 2537, 'n', 0 }, { 'Gentoo', 'Gentoo', 3499, 'n', 0 }, { 'OpenHub', '[[Open Hub]]', 1972, 'n', 0 }, { 'PyPI', '[[PyPI]]', 5568, 'n', 0 }, { 'Snap', 'Snap', 4435, 'n', 0 }, { 'Ubuntu', 'Ubuntu', 3473, 'n', 0 }, } }, { title = 'Bases de datos taxonómicas', group = { { 'Algabase', '[[AlgaeBase]]', 1348, 'y', 0 }, { 'ADW', '[[Animal Diversity Web|ADW]]', 4024, 'n', 0 }, { 'AmphibiaWeb', '[[AmphibiaWeb]]', 5036, 'n', 0 }, { 'BOLD', 'BOLD', 3606, 'n', 0 }, { 'APD', '[[African Plant DB]]', 2036, 'n', 0 }, { 'Avibase', '[[Avibase]]', 2026, 'n', 0 }, { 'BHL', '[[Biodiversity Heritage Library|BHL]]', 687, 'n', 0 }, { 'BioLib', '[[BioLib]]', 838, 'n', 0 }, { 'BirdLife', '[[BirdLife International|BirdLife]]', 5257, 'n', 0 }, { 'CatalogueOfLife', '[[Catalogue of Life]]', 3088, 'n', 0 }, { 'CONABIO', '[[Comisión Nacional para el Conocimiento y Uso de la Biodiversidad|CONABIO]]', 4902, 'n', 0 }, { 'Dyntaxa', '[[Dyntaxa]]', 1939, 'n', 0 }, { 'eBird', '[[eBird]]', 3444, 'n', 0 }, { 'EOL', '[[Enciclopedia de la vida|EOL]]', 830, 'n', 0 }, { 'EUNIS', '[[European Nature Information System|EUNIS]]', 6177, 'n', 0 }, { 'FaunaEuropaea', '[[Fauna Europaea]]', 1895, 'n', 0 }, { 'FishBase', '[[FishBase]]', 938, 'n', 0 }, { 'FloraBase', '[[FloraBase]]', 3101, 'n', 0 }, { 'FOC', '[[Flora of China|Fl. China]]', 1747, 'n', 0 }, { 'GBIF', '[[Global Biodiversity Information Facility|GBIF]]', 846, 'n', 0 }, { 'GlobalSpecies', 'GlobalSpecies', 6433, 'n', 0 }, { 'GRIN', '[[Germplasm Resources Information Network|GRIN]]', 1421, 'url', 0 }, { 'IBC', [[Internet Bird Collection|IBC]], 3099, 'n', 0 }, { 'iNaturalist', [[iNaturalist]], 3151, 'n', 0 }, { 'IndexFungorum', '[[Index Fungorum]]', 1391, 'n', 0 }, { 'IOBIS', 'OBIS', 6754, 'n', 0 }, { 'IPNI', '[[Índice Internacional de Nombres de las Plantas|IPNI]]', 961, 'n', 0 }, { 'ITIS', '[[Sistema Integrado de Información Taxonómica|ITIS]]', 815, 'n', 0 }, { 'LPSN', '[[Listado de nombres procariotas con posición en nomenclatura|LPSN]]', 1991, 'url', 0 }, { 'MSW', '[[Mammal Species of the World|MSW]]', 959, 'n', 0 }, { 'MycoBank', '[[MycoBank]]', 962, 'n', 0 }, { 'NCBI', '[[Centro Nacional para la Información Biotecnológica|NCBI]]', 685, 'n', 0 }, { 'FossilWorks', '[[Paleobiology Database]]', 842, 'n', 0 }, { 'PlantList', '[[The Plant List|PlantList]]', 1070, 'n', 0 }, { 'SpeciesPlus', 'Species+', 2040, 'n', 0 }, { 'Taxonomicon', 'Taxonomicon', 7066, 'n', 0 }, { 'Tropicos', '[[W3TROPICOS]]', 960, 'n', 0 }, { 'UICN', '[[Unión Internacional para la Conservación de la Naturaleza|UICN]]', 627, 'n', 0 }, { 'USDAP', '[[Departamento de Agricultura de los Estados Unidos|USDA Plants]]', 1772, 'n', 0 }, { 'VASCAN', 'VASCAN', 1745, 'n', 0 }, { 'WoRMS', '[[Registro Mundial de Especies Marinas|WoRMS]]', 850, 'n', 0 }, { 'uBio', 'uBio', 4728, 'n', 0 }, { 'Xeno-canto', '[[Xeno-canto]]', 2426, 'n', 0 }, { 'Zoobank', '[[Zoobank]]', 1746, 'n', 0 }, }, }, { title = 'Identificadores médicos', group = { { 'DOID', 'DOID', 699, 'n', 0 }, { 'CIE11', '[[CIE-11]]', 7329, icd11Link, 0}, { 'CIE10', '[[CIE-10]]', 494, 'n', 0 }, { 'CIE9', '[[CIE-9]]', 493, 'n', 0 }, { 'CIE10MC', 'CIE-10-MC', 4229, 'n', 0 }, { 'CIE9MC', '[[CIE-9-MC]]', 1692, 'n', 0 }, { 'CIEO', '[[CIE-O]]', 563, 'n', 0 }, { 'CIAP2', '[[Clasificación Internacional de Atención Primaria|CIAP-2]]', 667, 'n', 0 }, { 'OMIM', '[[Herencia Mendeliana en el Hombre|OMIM]]', 492, 'n', 0 }, { 'DSM IV', '[[Manual diagnóstico y estadístico de los trastornos mentales|DSM IV]]', 663, 'n', 0 }, { 'DSM 5', '[[DSM 5|DSM-5]]', 1930, 'n', 0 }, { 'DiseasesDB', '[[Diseases Database|DiseasesDB]]', 557, 'n', 0 }, { 'MedlinePlus', '[[MedlinePlus]]', 604, 'n', 0 }, { 'eMedicine', '[[eMedicine]]', 673, 'n', 0 }, { 'MeSH', '[[Medical Subject Headings|MeSH]]', 486, 'n', 0 }, { 'MeSHdq', 'MeSH D/Q', 9340, 'y', 0 }, { 'DeCS', '[[Descriptores en Ciencias de la Salud|DeCS]]', 9272, 'n', 0 }, { 'Orphanet', '[[Orphanet]]', 1550, 'n', 0 }, { 'TA98', '[[Terminología Anatómica|TA]]', 1323, 'n', 1 }, { 'FMA', '[[Foundational Model of Anatomy|FMA]]', 1402, 'n', 0 }, { 'UMLS', 'UMLS', 2892, 'n', 0 }, { 'GeneReviews', 'GeneReviews', 668, 'n', 0 }, { 'NumE', '[[Número E]]', 628, 'n', 0 }, { 'GARD', 'GARD', 4317, 'n', 0 }, } }, { title = 'Identificadores químicos', group = { { 'CAS', '[[Número CAS]]', 231, 'n', 0 }, { 'EINECS', '[[EINECS|Números EINECS]]', 232, 'n', 0}, { 'ATC', '[[Código ATC]]', 267, 'n', 0 }, { 'RTECS', '[[RTECS]]', 657, 'n', 0 }, { 'ChEBI', '[[ChEBI]]', 683, 'n', 0 }, { 'ChEMBL', '[[ChEMBL]]', 592, 'n', 0 }, { 'ChemSpider', '[[ChemSpider]]', 661, 'n', 0 }, { 'DrugBank', '[[DrugBank]]', 715, 'n', 0 }, { 'PubChem', '[[PubChem]]', 662, 'n', 0 }, { 'UNII', '[[Unique Ingredient Identifier|UNII]]', 652, 'n', 0 }, { 'KEGG', '[[KEGG]]', 665, 'n', 0 }, { 'SMILES', '[[SMILES]]', 233, 'y', 0 }, { 'InChI', '[[International Chemical Identifier|InChI]]', 234, 'y', 0 }, { 'InChIKey', 'InChI key', 235, 'y', 0 }, } }, { title = 'Identificadores biológicos', group = { { 'MGI', '[[Mouse Genome Informatics|MGI]]', 231, 'n', 0 }, { 'HomoloGene', '[[HomoloGene]]', 593, 'n', 0 }, { ' HGNC', '[[Comité de Nomenclatura Genética de HUGO|HGNC]]', 354, 'n', 0 }, { 'UniProt', '[[UniProt]]', 352, 'n', 0 }, } }, { title = 'Identificadores astronómicos', group = { { 'COSPAR', 'COSPAR', 247, 'n', 0 }, { 'SCN', '[[Satellite Catalog Number|SCN]]', 377, 'n', 0 }, { 'NSSDCA', '[[International Designator|NSSDCA]]', 8913, 'n', 0 } } }, { title = 'Ontologías', group = { { 'IEV', 'Número IEV', 8855, 'n', 0 }, { 'OUM2', 'OUM 2.0', 8769, 'n', 0 } } } } -- -- Example row: -- -- conf.databases[2] = {} -- conf.databases[2].name = 'External links' -- conf.databases[2].list = { -- { -- title = '', -- group = { -- { 'Website', 'Website', 856, 'n', 0 }, -- }, -- }, -- } --In this order: alternate name, name of parameter from databases table conf.aliases = { { 'Wd', 'Wikidata' }, { 'PND', 'GND' }, { 'Commonscat', 'Commons' }, } local function getCatForId( parameter, category ) local title = mw.title.getCurrentTitle() local namespace = title.namespace if category == 0 then return '' elseif category == 1 then category = parameter end if namespace == 0 then return '[[Categoría:Wikipedia:Artículos con identificadores ' .. category .. ']]\n' elseif namespace == 2 and not title.isSubpage then return '[[Categoría:Wikipedia:Páginas de usuario con identificadores ' .. category .. ']]\n' else return '[[Categoría:Wikipedia:Páginas misceláneas con identificadores ' .. category .. ']]\n' end end function getIdsFromSitelinks( itemId, property ) local ids = {} local siteLink = itemId and mw.wikibase.getSitelink( itemId, property ) if siteLink then table.insert( ids, siteLink ) end return ids end function getIdsFromWikidata( itemId, property ) local ids = {} local declaraciones = mw.wikibase.getBestStatements(itemId, property) for _, statement in pairs( declaraciones) do if statement.mainsnak.datavalue then table.insert( ids, statement.mainsnak.datavalue.value ) end end return ids end function getLink( property, val, mask ) local link = '' if mw.ustring.find( val, '//' ) then link = val else if type(property) == 'number' then local entityObject = mw.wikibase.getEntityObject('P'..property) local dataType = entityObject.datatype if dataType == 'external-id' then local allStatements = entityObject:getBestStatements('P1630') if allStatements then for pos = 1, #allStatements, 1 do local q = allStatements[pos].qualifiers if q and q.P407 and q.P407[1].datavalue and q.P407[1].datavalue.value.id == 'Q1321' then link = allStatements[pos].mainsnak.datavalue.value end end end if link == '' then local formatterURL = entityObject:getBestStatements('P1630')[1] if formatterURL then link = formatterURL.mainsnak.datavalue.value else local formatterURL = entityObject:getBestStatements('P3303')[1] if formatterURL then link = formatterURL.mainsnak.datavalue.value end end end elseif dataType == 'url' then local subjectItem = entityObject:getBestStatements('P1629')[1] if subjectItem then local officialWebsite = mw.wikibase.getBestStatements(subjectItem.mainsnak.datavalue.value.id, 'P856')[1] if officialWebsite then link = officialWebsite.mainsnak.datavalue.value end end elseif dataType == 'string' then local formatterURL = entityObject:getBestStatements('P1630')[1] if formatterURL then link = formatterURL.mainsnak.datavalue.value else local formatterURL = entityObject:getBestStatements('P3303')[1] if formatterURL then link = formatterURL.mainsnak.datavalue.value else local subjectItem = entityObject:getBestStatements('P1629')[1] if subjectItem then local officialWebsite = mw.wikibase.getBestStatements(subjectItem.mainsnak.datavalue.value.id,'P856')[1] if officialWebsite then link = officialWebsite.mainsnak.datavalue.value end end end end end elseif type(property) == 'string' then link = property end end link = mw.ustring.gsub(link, '^[Hh][Tt][Tt][Pp]([Ss]?)&#58;//', 'http%1://') -- fix wikidata URL if type(mask) == 'function' then return mask( val, link, property ) end link = mw.ustring.gsub(link, '$1', mw.ustring.gsub( mw.ustring.gsub( val, '%%', '%%%%' ), ' ', '%%%%20' ) or val ) if mw.ustring.find( link, '//' ) then if type(mask) == 'string' then link = cleanLink( link, 'PATH' ) if mask == 'y' then return '['..link..' ID]' elseif mask == 'n' then return '['..link..' '..val..']' end return '['..link..' '..mask..']' end elseif link == '' then return val else return '[['..link..'|'..val..']]' end end local function createRow( id, label, rawValue, link, withUid ) if link then if label and label ~= '' then label = '<span style="white-space:nowrap;">'..label .. ':</span> ' end if withUid then return '* ' .. label .. '<span class="uid">' .. link .. '</span>\n' else return '* ' .. label .. link .. '\n' end else return '* <span class="error">El ' .. id .. ' id ' .. rawValue .. ' no es válido</span>[[Categoría:Wikipedia:Páginas con problemas en el control de autoridades]]\n' end end local function copyTable(inTable) if type(inTable) ~= 'table' then return inTable end local outTable = setmetatable({}, getmetatable(inTable)) for key, value in pairs (inTable) do outTable[copyTable(key)] = copyTable(value) end return outTable end local function splitLccn( id ) if id:match( '^%l%l?%l?%d%d%d%d%d%d%d%d%d?%d?$' ) then id = id:gsub( '^(%l+)(%d+)(%d%d%d%d%d%d)$', '%1/%2/%3' ) end if id:match( '^%l%l?%l?/%d%d%d?%d?/%d+$' ) then return mw.text.split( id, '/' ) end return false end local p = {} function p.authorityControl( frame ) local pArgs = frame:getParent().args local parentArgs = copyTable(pArgs) local stringArgs = false local fromForCount, itemCount, rowCount = 1, 0, 0 local mobileContent = '' --Cleanup args for k, v in pairs( pArgs ) do if type(k) == 'string' then --make args case insensitive local lowerk = mw.ustring.lower(k) if not parentArgs[lowerk] or parentArgs[lowerk] == '' then parentArgs[lowerk] = v parentArgs[k] = nil end --remap abc to abc1 if not mw.ustring.find(lowerk, '%d$') then --if no number at end of param if not parentArgs[lowerk..'1'] or parentArgs[lowerk..'1'] == '' then parentArgs[lowerk..'1'] = v parentArgs[lowerk] = nil end end if v and v ~= '' then --find highest from param if mw.ustring.sub(lowerk,1,4) == 'from' then local fromNumber = tonumber(mw.ustring.sub(lowerk,5,-1)) if fromNumber and fromNumber >= fromForCount then fromForCount = fromNumber end elseif mw.ustring.sub(lowerk,1,3) == 'for' then local forNumber = tonumber(mw.ustring.sub(lowerk,4,-1)) if forNumber and forNumber >= fromForCount then fromForCount = forNumber end elseif mw.ustring.lower(v) ~= 'no' and lowerk ~= 'for' then stringArgs = true end end end end --Setup navbox local navboxParams = { name = 'Control de autoridades', bodyclass = 'hlist', groupstyle = 'width: 12%; text-align:center;', } for f = 1, fromForCount, 1 do local title = {} --cleanup parameters if parentArgs['from'..f] == '' then parentArgs['from'..f] = nil end if parentArgs['for'..f] == '' then parentArgs['for'..f] = nil end --remap aliases for _, a in pairs( conf.aliases ) do local alias, name = mw.ustring.lower(a[1]), mw.ustring.lower(a[2]) if parentArgs[alias..f] and not parentArgs[name..f] then parentArgs[name..f] = parentArgs[alias..f] parentArgs[alias..f] = nil end end --Fetch Wikidata item local itemId = parentArgs['from'..f] or mw.wikibase.getEntityIdForCurrentPage() local label = itemId and (mw.wikibase.getSitelink(itemId) or mw.wikibase.getLabel(itemId)) or '' if label and label ~= '' then title = mw.title.new(label) if not title then title = mw.title.getCurrentTitle() end else title = mw.title.getCurrentTitle() end if (not parentArgs['wikidata'..f] or parentArgs['wikidata'..f] == '') and (title.namespace == 0 or title.namespace == 104) then parentArgs['wikidata'..f] = parentArgs['from'..f] or itemId or '' end if title.namespace == 0 or title.namespace == 104 or stringArgs then --Only in the main namespaces or if there are manual overrides if fromForCount > 1 and #conf.databases > 1 then if parentArgs['for'..f] and parentArgs['for'..f] ~= '' then navboxParams['list'..(rowCount + 1)] = "'''" .. parentArgs['for'..f] .. "'''" else navboxParams['list'..(rowCount + 1)] = "'''" .. title.text .. "'''" end navboxParams['list'..(rowCount + 1)..'style'] = 'background-color: #ddf;' rowCount = rowCount + 1 end for _, db in pairs( conf.databases ) do if db.list and #db.list > 0 then local listElements = {} for n, gr in pairs( db.list ) do local groupElements = {} if gr.group and #gr.group > 0 then for _, params in pairs( gr.group ) do local id = mw.ustring.lower( params[1] ) -- Wikidata fallback if requested if itemId and params[3] ~= 0 and (not parentArgs[id..f] or parentArgs[id..f] == '') then local wikidataIds = {} if type( params[3] ) == 'function' then wikidataIds = params[3]( itemId ) elseif type( params[3] ) == 'string' then wikidataIds = getIdsFromSitelinks(itemId, params[3] ) else wikidataIds = getIdsFromWikidata( itemId, 'P' .. params[3] ) end if wikidataIds[1] then parentArgs[id..f] = wikidataIds[1] end end local val = parentArgs[id..f] if val and val ~= '' and mw.ustring.lower(val) ~= 'no' and params[3] ~= 0 then local link if type( params[3] ) == 'function' then link = val else link = getLink( params[3], val, params[4] ) end if link and link ~= '' then table.insert( groupElements, createRow( id, params[2], val, link, true ) .. getCatForId( params[1], params[5] or 0 ) ) itemCount = itemCount + 1 end end end if #groupElements > 0 then if gr.title and gr.title ~= '' then table.insert( listElements, "* '''"..gr.title.."'''\n" ) end table.insert( listElements, table.concat( groupElements ) ) if n == 1 and #groupElements > 1 then table.insert( listElements, "\n----\n" ) end -- mobile version if n == 1 then mobileContent = table.concat( groupElements ) end end end end -- Generate navbox title if #listElements > 0 then if fromForCount > 1 and #conf.databases == 1 then if parentArgs['for'..f] and parentArgs['for'..f] ~= '' then navboxParams['group'..(rowCount + 1)] = "''" .. parentArgs['for'..f] .. "''" else navboxParams['group'..(rowCount + 1)] = "''" .. title.text .. "''" end else navboxParams['group'..(rowCount + 1)] = db.name or '' end navboxParams['list'..(rowCount + 1)] = table.concat( listElements ) rowCount = rowCount + 1 end end end end end if rowCount > 0 then local Navbox = require('Módulo:Navbox') if fromForCount > 1 then --add missing names for r = 1, rowCount, 1 do if navboxParams['group'..r] == '' then navboxParams['group'..r] = "''" .. mw.wikibase.getEntity(parentArgs['wikidata'..r]):getLabel().."''" end end if fromForCount > 2 then navboxParams['navbar'] = 'plain' else navboxParams['state'] = 'off' navboxParams['navbar'] = 'off' end end local mainCategories = '' if stringArgs then mainCategories = mainCategories .. '[[Categoría:Wikipedia:Páginas que utilizan control de autoridades con parámetros]]\n' end if itemCount > 13 then if itemCount > 30 then itemCount = 'más de 30' end mainCategories = mainCategories .. '[[Categoría:Wikipedia:Control de autoridades con ' .. itemCount .. ' elementos]]\n' end navboxParams['style'] = 'width: inherit'; return frame:extensionTag{ name = 'templatestyles', args = { src = 'Plantilla:Control de autoridades/styles.css' } } .. tostring( mw.html.create( 'div' ) :addClass( 'mw-authority-control' ) :wikitext( Navbox._navbox( navboxParams ) ) :done() :tag('div') :addClass( 'mw-mf-linked-projects' ) :addClass( 'hlist' ) :newline() :wikitext( mobileContent ) :done() :done() ) .. mainCategories else return '' end end return p ss0b8w6raapzpieacza1vwmdsf6fatd 548941 548940 2026-06-06T14:46:44Z ~2026-33070-17 34013 Zerrekê pele be "local function getCatForId( id ) local title = mw.title.getCurrentTitle() local namespace = title.namespace if namespace == 0 then return '[[Kategoriye:Pelê ke be şınasnameyê ' .. id .. ' ra ercê cı esto]]' elseif namespace == 2 and not title.isSubpage then return '[[Kategori:Användarsidor med identifierare från ' .. id .. ']]' else return '[[Kategori:Blandade sidor med identifierare från ' .. id .. ']]'..." ra vurriya 548941 Scribunto text/plain local function getCatForId( id ) local title = mw.title.getCurrentTitle() local namespace = title.namespace if namespace == 0 then return '[[Kategoriye:Pelê ke be şınasnameyê ' .. id .. ' ra ercê cı esto]]' elseif namespace == 2 and not title.isSubpage then return '[[Kategori:Användarsidor med identifierare från ' .. id .. ']]' else return '[[Kategori:Blandade sidor med identifierare från ' .. id .. ']]' end end 12qnbwu87dz49t4m3s4efvqs4oi51lp 548943 548941 2026-06-07T05:49:11Z Mirzali 16 548943 Scribunto text/plain local function getCatForId( id ) local title = mw.title.getCurrentTitle() local namespace = title.namespace if namespace == 0 then return '[[Kategoriye:Pelê ke be şınasnameyê ' .. id .. ' ra ercê cı esto]]' elseif namespace == 2 and not title.isSubpage then return '[[Kategoriye:Användarsidor med identifierare från ' .. id .. ']]' else return '[[Kategoriye:Blandade sidor med identifierare från ' .. id .. ']]' end end njnfzf2vfu5y35c1j8h3k2rpvu38t5w 548946 548943 2026-06-07T05:54:58Z Mirzali 16 Vurnayışê hesabê 548943 ke terefê [[Karber:Mirzali|Mirzali]] ra peyser gêriyayo. 548946 Scribunto text/plain require('strict') -- local genitive = require('Modul:Genitive')._genitive local contLang = mw.language.getContentLanguage() local cModul = {} local conf = require 'Modul:Kontrolê otoriteyi/conf'(contLang:getCode()) local hasdatafromwikidata = false local hasdatafromlocal = false local haswikidatalink = true -- we assume it's connected local p = {} local function getLabel(entity, use_genitive, pagetitle) local label = (pagetitle and pagetitle ~= '') and pagetitle or nil if not label and not entity then label = mw.title.getCurrentTitle().text elseif not label then label = mw.wikibase.label(entity.id) or mw.title.getCurrentTitle().text end -- return use_genitive and genitive(label, 'sitt') or label return use_genitive and label .. "'s" or label end -- @todo cleanup, this is in production, use the console local function dump(obj) return "<pre>" .. mw.dumpObject(obj) .. "</pre>" end local function stringFormatter( datavalue ) if datavalue == nil or datavalue['type'] ~= 'string' then return nil end return datavalue.value end local pval = {} pval.P1793 = { -- format as a regular expression types = { snaktype = 'value', datatype = 'string', }, } pval.P407 = { -- language of work or name types = { snaktype = 'value', datatype = 'wikibase-item', datavalue = { type = 'wikibase-entityid', } }, } pval.P364 = { -- original language of work types = { snaktype = 'value', datatype = 'wikibase-item', datavalue = { type = 'wikibase-entityid', } }, } pval.P218 = { -- ISO 639-1 language types = { snaktype = 'value', datatype = 'external-id', datavalue = { type = 'string', } }, } pval.P305 = { -- IETF language tag types = { snaktype = 'value', datatype = 'external-id', datavalue = { type = 'string', } }, } pval.P582 = { -- end time types = { snaktype = 'value', datatype = 'time', datavalue = { type = 'string', } }, } -- This is a really makeshift crappy converter, but it'll do some basic -- conversion from PCRE to Lua-style patterns (note that this only work -- in very few cases) local function regexConverter( regex ) local output = regex output = string.gsub(output, "\\d{2}", "%%d%%d") output = string.gsub(output, "\\d{3}", "%%d%%d%%d") output = string.gsub(output, "\\d{4}", "%%d%%d%%d%%d") output = string.gsub(output, "\\d{5}", "%%d%%d%%d%%d%%d") output = string.gsub(output, "\\d{6}", "%%d%%d%%d%%d%%d%%d") output = string.gsub(output, "\\d{7}", "%%d%%d%%d%%d%%d%%d%%d") output = string.gsub(output, "\\d{8}", "%%d%%d%%d%%d%%d%%d%%d%%d") output = string.gsub(output, "\\d", "%%d") return output end local function getFormatterUrl( prop, value ) local head = "" local tail = "" local entity = mw.wikibase.getEntity(prop) -- to avoid deep tests if not entity or not entity.claims then return head end -- get the claims for this entity local statements = entity.claims['P1630'] -- formatter URL -- to avoid deep tests if not statements then return head end local formatters = {} -- let's go through the claims for _, claim in ipairs( statements ) do -- to avoid deep tests if not claim then claim = {} end local valid = claim['type'] == 'statement' and claim['rank'] ~= 'deprecated' if valid then local mainsnak = claim.mainsnak or {} local preferred = claim['rank'] == 'preferred' -- get any qualifiers for this claim (we are interested in P1793 for -- indication of which claim is correct) local qualifiers = claim.qualifiers or {} -- now let's check the qualifier we are interested in local qualid = 'P1793' -- format as a regular expression -- if the claim has this qualifier if qualifiers[qualid] then -- it's here, let's check it out! local items = {} -- traverse all snaks in this qualifier for _, qualsnak in ipairs( qualifiers[qualid] ) do if qualsnak and pval[qualid] then --mw.log("qualsnak = " .. dump(qualsnak)) -- check if the snak is of the correct snaktype and datatype local valid = qualsnak.snaktype == pval[qualid].types.snaktype and qualsnak.datatype == pval[qualid].types.datatype if valid then -- we'll have to convert the regex to Lua-style local regex = regexConverter(qualsnak.datavalue.value) local test = string.match( value, '^'..regex..'$' ) if test then -- it matched, this is correct and overrides any other. if preferred then head = mainsnak.datavalue.value else tail = mainsnak.datavalue.value end end end end end else -- we don't have any qualifier, is it preferred? if (head == '' and preferred) or (tail == '' and not preferred) then -- if we don't have any other, use this one if preferred and head == '' then head = mainsnak.datavalue.value elseif not preferred and tail == '' then tail = mainsnak.datavalue.value end end end end end return head ~= '' and head or tail end local function getLanguageData(prop, qid) local head = {} local tail = {} -- mw.log("getLanguageData, prop="..dump(prop).." qid="..dump(qid)) -- get the entity we are checking local entity = mw.wikibase.getEntityObject(qid) -- to avoid deep tests if not entity then return nil end if not entity.claims then return {} end -- get the claims for this entity local statements = entity.claims[prop] -- to avoid deep tests if not statements then return {} end -- mw.log("getLanguageData going through claims="..dump(statements)) -- let's go through the claims for _, claim in ipairs( statements ) do -- to avoid deep tests if not claim then claim = {} end local valid = claim['type'] == 'statement' and claim['rank'] ~= 'deprecated' if valid then local mainsnak = claim.mainsnak or {} local preferred = claim['rank'] == 'preferred' -- verify the item is what we expect local valid = mainsnak.snaktype == pval[prop].types.snaktype and mainsnak.datatype == pval[prop].types.datatype and mainsnak.datavalue.type == pval[prop].types.datavalue.type if valid then -- mw.log("getLanguageData claim is valid="..dump(claim)) -- if this is the correct P-value, dive into it and get P218 (ISO 639-1) if mainsnak.property == 'P364' then -- original language of work if preferred then head[#head+1] = table.concat(getLanguageData('P218', 'Q'..mainsnak.datavalue.value['numeric-id']), conf:a('mod-filter-separator')) else tail[#tail+1] = table.concat(getLanguageData('P218', 'Q'..mainsnak.datavalue.value['numeric-id']), conf:a('mod-filter-separator')) end elseif mainsnak.property == 'P218' or mainsnak.property == 'P305' then -- ISO 639-1 code or IETF language tag if preferred then head[#head+1] = stringFormatter(mainsnak.datavalue) else tail[#tail+1] = stringFormatter(mainsnak.datavalue) end end end end end -- mw.log("getLanguageData returning head="..dump(head).." tail="..dump(tail)) return #head>0 and head or tail end local langqvalorder = {'P407','P364'} local otherqvalorder = {'P582'} local function getValuesFromWikidata(props) local head = {} local tail = {} -- mw.log("getValuesFromWikidata, props="..dump(props)) -- get the entity we are checking local entity = mw.wikibase.getEntityObject() -- to avoid deep tests if not entity then --mw.log("getValuesFromWikidata no entity") return nil end if not entity.claims or not props or not props.prop or props.prop == '' then --mw.log("getValuesFromWikidata no claims or no props") return {} end -- get the claims for this entity local statements = entity.claims[props.prop] -- to avoid deep tests if not statements then return {} end -- let's go through the claims for _, claim in ipairs( statements ) do -- to avoid deep tests if not claim then claim = {} end local valid = claim['type'] == 'statement' and claim['rank'] ~= 'deprecated' if valid then -- mw.log("getValuesFromWikidata valid claim="..dump(claim)) local mainsnak = claim.mainsnak or {} local preferred = claim['rank'] == 'preferred' -- get the content of the claim (the identifier) local langcode = props.langcode local checklangcode = nil if props.langcode and props.langcode ~= '' then checklangcode = string.find(langcode, "([pP]%d+)") end if checklangcode and checklangcode ~= "" then -- this is a P-value for language-code, so we'll check qualifiers for languagedata -- first get any qualifiers local qualifiers = claim.qualifiers or {} for _, qualid in ipairs( langqvalorder ) do -- if the claim has this qualifier if qualifiers[qualid] then -- it's here, let's check it out! local items = {} -- traverse all snaks in this qualifier for _, qualsnak in ipairs( qualifiers[qualid] ) do if qualsnak and pval[qualid] then -- mw.log("qualsnak = " .. dump(qualsnak)) -- check if the snak is of the correct snaktype and datatype local valid = qualsnak.snaktype == pval[qualid].types.snaktype and qualsnak.datatype == pval[qualid].types.datatype if valid then -- now get the actual data langcode = table.concat(getLanguageData('P305', 'Q'..qualsnak.datavalue.value['numeric-id']), '') end end end end -- mw.log("langcode is now="..dump(langcode)) end if string.find(langcode, "([pP]%d+)") then -- we still don't have any langcode, so we default to "en" langcode = nil end end local stillvalid = true -- we should check a couple of other qualifiers as well -- first get any qualifiers local qualifiers = claim.qualifiers or {} for _, qualid in ipairs( otherqvalorder ) do -- if the claim has this qualifier if qualifiers[qualid] then -- it's here, let's check it out! local items = {} -- traverse all snaks in this qualifier for _, qualsnak in ipairs( qualifiers[qualid] ) do if qualsnak and pval[qualid] then -- mw.log("qualsnak = " .. dump(qualsnak)) -- check if the snak is of the correct snaktype and datatype local valid = qualsnak.snaktype == pval[qualid].types.snaktype and qualsnak.datatype == pval[qualid].types.datatype if not valid then -- sorry, this is not correct mw.log("qualsnak = INCORRECT") stillvalid = false end end end end -- mw.log("langcode is now="..dump(langcode)) end if stillvalid then if preferred then head[#head+1] = { value=stringFormatter(mainsnak.datavalue) } if langcode and langcode ~= '' then head[#head]['langcode'] = langcode end else tail[#tail+1] = { value=stringFormatter(mainsnak.datavalue) } if langcode and langcode ~= '' then tail[#tail]['langcode'] = langcode end end end end end -- mw.log("getValuesFromWikidata returning head="..dump(head).." tail="..dump(tail)) return #head>0 and head or tail end local function findMainLinksOnWikidata(props, pagetitle, short_links) local output = {} local pid = nil -- get the entity we are checking local entity = mw.wikibase.getEntityObject() -- to avoid deep tests if not entity then return nil end local values = getValuesFromWikidata(props) for _, value in ipairs( values ) do local verified_value = nil if props.regex then -- we have a local defined regex, so this will have to pass first -- maybe we'll have to convert the regex to Lua-style local regex = regexConverter(props.regex) local test = string.match( value.value, '^'..regex..'$' ) --mw.log("testing with "..regex.. " and test="..dump(test).." and value="..id) if test then -- it matched, this is correct and overrides any other. verified_value = value.value end else verified_value = value.value end if verified_value then local url = '' output[#output+1] = {} output[#output].langcode = value.langcode output[#output].category = {} if props.url_f then -- we have a local defined url-formatter function, use it as first priority url = props.url_f(verified_value) if props.track and not string.find(props.langcode, "([pP]%d+)") then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-local-wd'), props.prop):plain() elseif props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-wd-wd'), props.prop):plain() end elseif props.url then -- we have a local defined url-formatter string, use it as second priority url = mw.message.newRawMessage(props.url, verified_value):plain() if props.track and not string.find(props.langcode, "([pP]%d+)") then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-local-wd'), props.prop):plain() elseif props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-wd-wd'), props.prop):plain() end else -- get the formatvalue from the property, if it exists local formatterUrl = getFormatterUrl(props.prop, verified_value) if formatterUrl ~= '' then url = mw.message.newRawMessage(formatterUrl, verified_value):plain() if props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-wd-wd'), props.prop):plain() end end end if url ~= '' then local this_wiki = mw.getContentLanguage() local this_wiki_code = this_wiki:getCode() local langlink = (value.langcode and value.langcode ~= '' and value.langcode ~= this_wiki_code) and mw.message.newRawMessage(conf:g('msg-langcode'), value.langcode, mw.language.fetchLanguageName(value.langcode, this_wiki_code)) or "" if short_links and props.short then output[#output].text = mw.message.newRawMessage(props.short, getLabel(entity, props.genitive, pagetitle), url, langlink, verified_value, mw.uri.encode(verified_value, 'PATH')) :plain() else output[#output].text = mw.message.newRawMessage(props.message, getLabel(entity, props.genitive, pagetitle), url, langlink, verified_value, mw.uri.encode(verified_value, 'PATH')) :plain() end end end end --mw.log("findMainLinksOnWikidata returning="..dump(output)) return output end local function getSitelinksFromWikidata(props, entity) local output = {} --mw.log("getSitelinksFromWikidata, props="..dump(props)) -- to avoid deep tests if not entity then entity = mw.wikibase.getEntityObject() if not entity then --mw.log("getSitelinksFromWikidata no entity") return nil end end local requested_sitelink = string.match(props.prop, "SL(%l+)") local sitelinks = entity:getSitelink(requested_sitelink) if sitelinks and sitelinks ~= '' then output[#output+1] = { value = sitelinks } end --mw.log("getSitelinksFromWikidata returning output="..dump(output)) return output end local function findSiteLinksOnWikidata(props, pagetitle, short_links) local output = {} local pid = nil -- get the entity we are checking local entity = mw.wikibase.getEntityObject() -- to avoid deep tests if not entity then return nil end local values = getSitelinksFromWikidata(props) for _, value in ipairs( values ) do local verified_value = nil if props.regex then -- we have a local defined regex, so this will have to pass first -- maybe we'll have to convert the regex to Lua-style local regex = regexConverter(props.regex) local test = string.match( value.value, '^'..regex..'$' ) --mw.log("testing with "..regex.. " and test="..dump(test).." and value="..id) if test then -- it matched, this is correct and overrides any other. verified_value = value.value end else verified_value = value.value end if verified_value then --mw.log("it's verified..") local url = '' output[#output+1] = {} output[#output].langcode = value.langcode output[#output].category = {} if props.url_f then -- we have a local defined url-formatter function, use it as first priority url = props.url_f(verified_value) if props.track and not string.find(props.langcode, "(SL%l+)") then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-local-wd'), props.prop):plain() elseif props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-wd-wd'), props.prop):plain() end elseif props.url then -- we have a local defined url-formatter string, use it as second priority url = mw.message.newRawMessage(props.url, verified_value):plain() if props.track and not string.find(props.langcode, "(SL%l+)") then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-local-wd'), props.prop):plain() elseif props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-wd-wd'), props.prop):plain() end else url = verified_value:gsub(' ','_') if props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-wd-wd'), props.prop):plain() end end if url ~= '' then local this_wiki = mw.getContentLanguage() local this_wiki_code = this_wiki:getCode() local langlink = (value.langcode and value.langcode ~= '' and value.langcode ~= this_wiki_code) and mw.message.newRawMessage(conf:g('msg-langcode'), value.langcode, mw.language.fetchLanguageName(value.langcode, this_wiki_code)) or "" if short_links and props.short then output[#output].text = mw.message.newRawMessage(props.short, getLabel(entity, props.genitive, pagetitle), url, langlink, verified_value, mw.uri.encode(verified_value, 'PATH')) :plain() else output[#output].text = mw.message.newRawMessage(props.message, getLabel(entity, props.genitive, pagetitle), url, langlink, verified_value, mw.uri.encode(verified_value, 'PATH')) :plain() end end end end --mw.log("findSiteLinksOnWikidata returning="..dump(output)) return output end local function findMainLinksLocal(props, pagetitle, short_links, local_value) local output = {} -- to avoid deep tests if not props.prop then return nil end if not (local_value or local_value == '') then -- bail out if no value is present return output end -- get the formatvalue from the property local verified_value = local_value if props.regex and props.regex ~= '' then -- let's verify the id -- maybe we'll have to convert the regex to Lua-style local regex = regexConverter(props.regex) local test = string.match( local_value, '^'..regex..'$' ) if test then -- it matched, this is correct verified_value = local_value else verified_value = nil end end if not verified_value then return output end local wikidata_property = string.find(props.prop, "([pP]%d+)") local wikidata_values = {} if wikidata_property then -- get any wikidata values to see if they are equal to local values wikidata_values = getValuesFromWikidata(props) end if wikidata_property or (props.url and props.url ~= '') or (props.url_f) then output[#output+1] = {} output[#output].langcode = string.find(props.langcode, "([pP]%d+)") and "" or props.langcode --mw.log("findMainLinksLocal - props="..dump(props).." langcode="..output[#output].langcode) output[#output].category = {} local url = '' if props.track and wikidata_property and wikidata_values and #wikidata_values then local local_value_in_wikidata = false for _,value in ipairs( wikidata_values ) do if value.value == verified_value then local_value_in_wikidata = true end end output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), (local_value_in_wikidata and 'track-cat-local-wd-equal' or 'track-cat-local-wd-unequal')), props.prop):plain() end if wikidata_property and wikidata_values and #wikidata_values then hasdatafromwikidata = true -- signal up the chain this article has a wikidata claim end if props.url_f then -- we have a local defined url-formatter function, use it as first priority url = props.url_f(verified_value) if props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-local-local'), props.prop):plain() end elseif props.url then -- we have a local defined url-formatter string, use it as second priority url = mw.message.newRawMessage(props.url, verified_value):plain() if props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-local-local'), props.prop):plain() end elseif wikidata_property then -- get the formatvalue from the property, if it exists local formatterUrl = getFormatterUrl(props.prop, verified_value) if formatterUrl ~= '' then url = mw.message.newRawMessage(formatterUrl, verified_value):plain() if props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-wd-local'), props.prop):plain() end end else -- no other choice, bail out return {} end local this_wiki = mw.getContentLanguage() local this_wiki_code = this_wiki:getCode() local langlink = (output[#output].langcode and output[#output].langcode ~= '' and output[#output].langcode ~= this_wiki_code) and mw.message.newRawMessage(conf:g('msg-langcode'), props.langcode, mw.language.fetchLanguageName(props.langcode, this_wiki_code)) or "" if short_links and props.short then output[#output].text = mw.message.newRawMessage(props.short, getLabel(nil, props.genitive, pagetitle), url, langlink, verified_value, mw.uri.encode(verified_value, 'PATH')) :plain() else output[#output].text = mw.message.newRawMessage(props.message, getLabel(nil, props.genitive, pagetitle), url, langlink, verified_value, mw.uri.encode(verified_value, 'PATH')) :plain() end end --mw.log("findMainLinksLocal returning="..dump(output)) return output end local function findSiteLinksLocal(props, pagetitle, short_links, local_value) local output = {} -- to avoid deep tests if not props.prop then return nil end if not (local_value or local_value == '') then -- bail out if no value is present return output end -- get the formatvalue from the property local verified_value = local_value if props.regex and props.regex ~= '' then -- let's verify the id -- maybe we'll have to convert the regex to Lua-style local regex = regexConverter(props.regex) local test = string.match( local_value, '^'..regex..'$' ) if test then -- it matched, this is correct verified_value = local_value else verified_value = nil end end if not verified_value then return output end local wikidata_property = string.find(props.prop, "(SL.+)") local wikidata_values = {} if wikidata_property then -- get any wikidata values to see if they are equal to local values wikidata_values = getSitelinksFromWikidata(props) end if wikidata_property or (props.url and props.url ~= '') or (props.url_f) then output[#output+1] = {} output[#output].langcode = string.find(props.langcode, "(SL.+)") and "" or props.langcode --mw.log("findSiteLinksLocal - props="..dump(props).." langcode="..output[#output].langcode .." wikidata_values="..dump(wikidata_values)) output[#output].category = {} local url = '' if props.track and wikidata_property and wikidata_values and #wikidata_values then local local_value_in_wikidata = false for _,value in ipairs( wikidata_values ) do if value.value == verified_value then local_value_in_wikidata = true end end output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), (local_value_in_wikidata and 'track-cat-local-wd-equal' or 'track-cat-local-wd-unequal')), props.prop):plain() end if wikidata_property and wikidata_values and #wikidata_values then hasdatafromwikidata = true -- signal up the chain this article has a wikidata claim end if props.url_f then -- we have a local defined url-formatter function, use it as first priority url = props.url_f(verified_value) if props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-local-local'), props.prop):plain() end elseif props.url then -- we have a local defined url-formatter string, use it as second priority url = mw.message.newRawMessage(props.url, verified_value):plain() if props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-local-local'), props.prop):plain() end elseif wikidata_property then url = verified_value:gsub(' ','_') if props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-wd-local'), props.prop):plain() end else -- no other choice, bail out return {} end local this_wiki = mw.getContentLanguage() local this_wiki_code = this_wiki:getCode() local langlink = (output[#output].langcode and output[#output].langcode ~= '' and output[#output].langcode ~= this_wiki_code) and mw.message.newRawMessage(conf:g('msg-langcode'), props.langcode, mw.language.fetchLanguageName(props.langcode, this_wiki_code)) or "" if short_links and props.short then output[#output].text = mw.message.newRawMessage(props.short, getLabel(nil, props.genitive, pagetitle), url, langlink, verified_value, mw.uri.encode(verified_value, 'PATH')) :plain() else output[#output].text = mw.message.newRawMessage(props.message, getLabel(nil, props.genitive, pagetitle), url, langlink, verified_value, mw.uri.encode(verified_value, 'PATH')) :plain() end end --mw.log("findSiteLinksLocal returning="..dump(output)) return output end local function addLinkback(str, property) local id = mw.wikibase.getEntityObject() if not id then return str end if type(id) == 'table' then id = id.id end local class = '' local url = '' if property then class = 'wd_' .. string.lower(property) url = mw.uri.fullUrl('d:' .. id .. '#' .. property) url.fragment = property else url = mw.uri.fullUrl('d:' .. id ) end local title = conf:g('wikidata-linkback-edit') local icon = '[%s [[File:Blue pencil.svg|%s|10px|text-top|link=]] ]' url = tostring(url) local v = mw.html.create('span') :addClass(class) :wikitext(str) :tag('span') :addClass('noprint plainlinks wikidata-linkback') :css('padding-left', '.3em') :wikitext(icon:format(url, title)) :allDone() return tostring(v) end local function getArgument(frame, argument) local args = frame.args if args[1] == nil then local pFrame = frame:getParent(); args = pFrame.args; for k,v in pairs( frame.args ) do args[k] = v; end end if args[argument] then return args[argument] end return nil end local function removeEntry(conf_claims, identifier, property) for i, props in ipairs(conf_claims) do if props[identifier] == property then table.remove(conf_claims, i) end end return conf_claims end function p.getLinks(frame) local configured_conf = getArgument(frame, conf:a('arg-conf')) if configured_conf then cModul = require ('Modul:Kontrolê otoriteyi/conf/'..configured_conf) else error(mw.message.newRawMessage(conf:g('missing-conf'), configured_conf):plain()) end local output = {} local category = {} local conf_claims = cModul:getConfiguredClaims(contLang:getCode()) local limits = cModul:getLimits() assert(limits, mw.message.newRawMessage(conf:g('missing-limits'), configured_conf):plain()) local links_shown = getArgument(frame, conf:a('arg-maxlink')) local pagetitle = getArgument(frame, conf:a('arg-title')) -- get a list of tracked properties from the article itself local requested_tracking = getArgument(frame, conf:a('arg-track')) if requested_tracking and requested_tracking ~= '' then -- the properties should be written as P1234, P2345 and other -- version corresponding to the applicable property-identifiers in the config for track_prop in string.gmatch(requested_tracking,"([^ ,;:]+)") do -- get the requested properties and be able to access them -- like req_prop['P345'] to verify if it was requested local remove_track = string.match(track_prop, "^\-(.*)") for i,claim in ipairs ( conf_claims ) do if remove_track == claim.prop or remove_track == conf:a('mod-filter-all') then -- if a property starts with "-", then we'll simply remove that -- property from the conf_claims conf_claims[i]['track'] = false elseif track_prop == claim.prop or track_prop == conf:a('mod-filter-all') then conf_claims[i]['track'] = true end end end end -- get a list of "approved" properties from the article itself local requested_properties = getArgument(frame, conf:a('arg-properties')) --mw.log("requested_properties="..dump(requested_properties)) -- assume all properties are allowed local req_prop = {} local no_req_prop = false -- we'll allow properties to be filtered for now if requested_properties and requested_properties ~= '' then -- the properties should be written as P1234, P2345 and other -- version corresponding to the applicable property-identifiers in the config for i in string.gmatch(requested_properties,"([^ ,;:]+)") do -- get the requested properties and be able to access them -- like req_prop['P345'] to verify if it was requested if i == conf:a('mod-filter-all') then -- this is a special modifier, saying we should ignore -- all previous and future positive filters and remove the -- filter (with exception of negative filters) req_prop = {} no_req_prop = true end local remove_prop = string.match(i, "^\-(.*)") if remove_prop then -- if a property starts with "-", then we'll simply remove that -- property from the conf_claims conf_claims = removeEntry(conf_claims, 'prop', remove_prop) elseif not no_req_prop then -- only if we are allowing properties to be filtered req_prop[i] = 1 -- cheat to make #req_prop indicate populated table req_prop[1] = 1 end end end local requested_langs = getArgument(frame, conf:a('arg-languages')) --mw.log("requested_langs="..dump(requested_langs)) -- assume all languages are allowed local req_lang = {} local no_req_lang = false -- we'll allow languages to be filtered for now if requested_langs and requested_langs ~= '' then -- the languages should be written as langcodes as used in the conf_claims for i in string.gmatch(requested_langs,"([^ ,;:]+)") do -- get the requested languages and be able to access them if i == conf:a('mod-filter-all') then -- this is a special modifier, saying we should ignore -- all previous and future positive filters and remove the -- filter (with exception of negative filters) req_lang = {} no_req_lang = true end -- like req_lang['en'] to verify if it was requested local remove_lang = string.match(i, "^\-(.*)") if remove_lang then -- if a language starts with "-", then we'll simply remove that -- language from the conf_claims conf_claims = removeEntry(conf_claims, 'langcode', remove_lang) elseif not no_req_lang then -- only if we are allowing languages to be filtered req_lang[i] = 1 -- cheat to make #req_lang indicate populated table req_lang[1] = 1 end end end local short_links = getArgument(frame, conf:a('arg-short')) if short_links and short_links ~= '' then short_links = true else short_links = false end local showinline = getArgument(frame, conf:a('arg-inline')) if showinline and showinline ~= '' then showinline = true else showinline = false end if not links_shown or links_shown == '' then links_shown = limits['links-shown'] and limits['links-shown'] or 10 else links_shown = tonumber(links_shown) end local somedataonwikidata = (short_links and false or true) --mw.log("conf_claims="..dump(conf_claims)) --mw.log("req_prop="..dump(req_prop)) --mw.log("req_lang="..dump(req_lang)) --mw.log("short_links="..dump(short_links)) for _, props in ipairs(conf_claims) do -- if we're called with a list of approved properties or languages, check if this one is "approved" if (#req_prop==0 or req_prop[props.prop]) and (#req_lang==0 or req_lang[props.langcode] or string.find(props.langcode, "([pP]%d+)")) then --mw.log("checking claim="..dump(props)) local links = {} local checkedonwikidata = false -- get the any local overriding value from the call local wikivalue = getArgument(frame, props.prop) --mw.log("wikivalue="..dump(wikivalue)) if (not wikivalue or wikivalue == "") and string.find(props.prop, "([pP]%d+)") then -- the property is a Pnnn type, and therefore on Wikidata links = findMainLinksOnWikidata(props, pagetitle, short_links) if links == nil then -- a nil-value indicated no wikidata-link haswikidatalink = false links = {} else checkedonwikidata = true end elseif (not wikivalue or wikivalue == "") and string.find(props.prop, "(SL%l+)") then -- this is a sitelink-type (SLspecieswiki) --mw.log("finding sitelinks..") links = findSiteLinksOnWikidata(props, pagetitle, short_links) if links == nil then -- a nil-value indicated no wikidata-link haswikidatalink = false links = {} else checkedonwikidata = true end elseif (wikivalue and wikivalue ~= "") and string.find(props.prop, "(SL%l+)") then -- this is a sitelink-type (SLspecieswiki) links = findSiteLinksLocal(props, pagetitle, short_links, wikivalue) elseif wikivalue and wikivalue ~= '' then -- the property is of another annotation, and therefore a local construct links = findMainLinksLocal(props, pagetitle, short_links, wikivalue) end --mw.log("links="..dump(links)) for _,v in ipairs(links) do -- we'll have to check langcodes again as they may have come from wikidata if (#req_lang==0 or req_lang[v.langcode]) then if checkedonwikidata and not hasdatafromwikidata then -- add a general tracking category for articles with data from wikidata hasdatafromwikidata = true category[#category+1] = cModul:getMessage(contLang:getCode(), 'with-data-cat') elseif not checkedonwikidata and not hasdatafromlocal then -- add a general tracking category for articles with data from template-calls in local articles hasdatafromlocal = true category[#category+1] = cModul:getMessage(contLang:getCode(), 'with-local-cat') end if short_links and props.short and v.text and v.text ~= '' then -- if short links were requested, and a short definition exists for this property, let's use it if #output==0 then output[#output+1] = v.text else output[#output] = output[#output] .. cModul:getMessage(contLang:getCode(),'short-list-separator') .. v.text end somedataonwikidata = true elseif not short_links and not showinline and v.text and v.text ~= '' then -- only if short links were not requested output[#output+1] = (#output>=1 and conf:g('msg-ul-prepend') or '') -- if this is the first link, we won't output a list-element (msg-ul-prepend) .. (checkedonwikidata and addLinkback(v.text, props.prop) or v.text) -- if the link comes from wikidata, also output a linkback. elseif not short_links and showinline and v.text and v.text ~= '' then -- only if short links were not requested output[#output+1] = v.text end if props.track and v.category and #v.category then -- add category if tracking is on for this property and a category exists in the link-result. for _,cats in ipairs( v.category ) do category[#category+1] = cats end end if links_shown>0 then links_shown = links_shown - 1 else break end end end if links_shown==0 then break end end end local outtext = "" if short_links and #output>0 then -- if these are short links, output the whole thing with linkback to wikidata --mw.log("somedataonwikidata="..dump(somedataonwikidata).." and output="..dump(output).." and #output="..dump(#output)) outtext = (somedataonwikidata and addLinkback(table.concat(output,cModul:getMessage(contLang:getCode(),'short-list-separator')), nil) or table.concat(output,cModul:getMessage(contLang:getCode(),'short-list-separator'))) elseif not short_links and not showinline and #output>0 then outtext = table.concat(output,"\n") elseif not short_links and showinline and #output>0 then outtext = table.concat(output,conf:g('msg-inline-separator')) end if not hasdatafromwikidata then category[#category+1] = cModul:getMessage(contLang:getCode(), 'no-data-cat') if not hasdatafromlocal and not short_links then outtext = cModul:getMessage(contLang:getCode(), 'no-data-text') end end if not haswikidatalink then category[#category+1] = cModul:getMessage(contLang:getCode(), 'no-wikilink-cat') if not hasdatafromlocal and not short_links then outtext = cModul:getMessage(contLang:getCode(), 'no-wikilink') end end local nocategory = getArgument(frame, conf:a('arg-no-categories')) category = #category>0 and "\n" .. table.concat(category,"\n") or "" --mw.log("nocategory="..dump(nocategory).." and outtext="..dump(outtext).." and category="..dump(category)) outtext = outtext .. (nocategory and '' or category) return outtext end function p.getLanguageCode(frame) local prop = getArgument(frame, conf:a('arg-properties')) local output = getLanguageData(prop) return table.concat(output, conf:a('mod-filter-separator')) end return p 0efjtob45wy3knbi2u5rhq4c963jnpw 548947 548946 2026-06-07T05:57:27Z Mirzali 16 "[[Modul:Kontrolê otoriteyi]]" sıtariya: Melumatê şaşi têarê kerdış ([Bıvurne=Karberanê qeydnêbiyaeyan bloke ke] (bêmıhlet) [Move=Karberanê qeydnêbiyaeyan bloke ke] (bêmıhlet)) 548946 Scribunto text/plain require('strict') -- local genitive = require('Modul:Genitive')._genitive local contLang = mw.language.getContentLanguage() local cModul = {} local conf = require 'Modul:Kontrolê otoriteyi/conf'(contLang:getCode()) local hasdatafromwikidata = false local hasdatafromlocal = false local haswikidatalink = true -- we assume it's connected local p = {} local function getLabel(entity, use_genitive, pagetitle) local label = (pagetitle and pagetitle ~= '') and pagetitle or nil if not label and not entity then label = mw.title.getCurrentTitle().text elseif not label then label = mw.wikibase.label(entity.id) or mw.title.getCurrentTitle().text end -- return use_genitive and genitive(label, 'sitt') or label return use_genitive and label .. "'s" or label end -- @todo cleanup, this is in production, use the console local function dump(obj) return "<pre>" .. mw.dumpObject(obj) .. "</pre>" end local function stringFormatter( datavalue ) if datavalue == nil or datavalue['type'] ~= 'string' then return nil end return datavalue.value end local pval = {} pval.P1793 = { -- format as a regular expression types = { snaktype = 'value', datatype = 'string', }, } pval.P407 = { -- language of work or name types = { snaktype = 'value', datatype = 'wikibase-item', datavalue = { type = 'wikibase-entityid', } }, } pval.P364 = { -- original language of work types = { snaktype = 'value', datatype = 'wikibase-item', datavalue = { type = 'wikibase-entityid', } }, } pval.P218 = { -- ISO 639-1 language types = { snaktype = 'value', datatype = 'external-id', datavalue = { type = 'string', } }, } pval.P305 = { -- IETF language tag types = { snaktype = 'value', datatype = 'external-id', datavalue = { type = 'string', } }, } pval.P582 = { -- end time types = { snaktype = 'value', datatype = 'time', datavalue = { type = 'string', } }, } -- This is a really makeshift crappy converter, but it'll do some basic -- conversion from PCRE to Lua-style patterns (note that this only work -- in very few cases) local function regexConverter( regex ) local output = regex output = string.gsub(output, "\\d{2}", "%%d%%d") output = string.gsub(output, "\\d{3}", "%%d%%d%%d") output = string.gsub(output, "\\d{4}", "%%d%%d%%d%%d") output = string.gsub(output, "\\d{5}", "%%d%%d%%d%%d%%d") output = string.gsub(output, "\\d{6}", "%%d%%d%%d%%d%%d%%d") output = string.gsub(output, "\\d{7}", "%%d%%d%%d%%d%%d%%d%%d") output = string.gsub(output, "\\d{8}", "%%d%%d%%d%%d%%d%%d%%d%%d") output = string.gsub(output, "\\d", "%%d") return output end local function getFormatterUrl( prop, value ) local head = "" local tail = "" local entity = mw.wikibase.getEntity(prop) -- to avoid deep tests if not entity or not entity.claims then return head end -- get the claims for this entity local statements = entity.claims['P1630'] -- formatter URL -- to avoid deep tests if not statements then return head end local formatters = {} -- let's go through the claims for _, claim in ipairs( statements ) do -- to avoid deep tests if not claim then claim = {} end local valid = claim['type'] == 'statement' and claim['rank'] ~= 'deprecated' if valid then local mainsnak = claim.mainsnak or {} local preferred = claim['rank'] == 'preferred' -- get any qualifiers for this claim (we are interested in P1793 for -- indication of which claim is correct) local qualifiers = claim.qualifiers or {} -- now let's check the qualifier we are interested in local qualid = 'P1793' -- format as a regular expression -- if the claim has this qualifier if qualifiers[qualid] then -- it's here, let's check it out! local items = {} -- traverse all snaks in this qualifier for _, qualsnak in ipairs( qualifiers[qualid] ) do if qualsnak and pval[qualid] then --mw.log("qualsnak = " .. dump(qualsnak)) -- check if the snak is of the correct snaktype and datatype local valid = qualsnak.snaktype == pval[qualid].types.snaktype and qualsnak.datatype == pval[qualid].types.datatype if valid then -- we'll have to convert the regex to Lua-style local regex = regexConverter(qualsnak.datavalue.value) local test = string.match( value, '^'..regex..'$' ) if test then -- it matched, this is correct and overrides any other. if preferred then head = mainsnak.datavalue.value else tail = mainsnak.datavalue.value end end end end end else -- we don't have any qualifier, is it preferred? if (head == '' and preferred) or (tail == '' and not preferred) then -- if we don't have any other, use this one if preferred and head == '' then head = mainsnak.datavalue.value elseif not preferred and tail == '' then tail = mainsnak.datavalue.value end end end end end return head ~= '' and head or tail end local function getLanguageData(prop, qid) local head = {} local tail = {} -- mw.log("getLanguageData, prop="..dump(prop).." qid="..dump(qid)) -- get the entity we are checking local entity = mw.wikibase.getEntityObject(qid) -- to avoid deep tests if not entity then return nil end if not entity.claims then return {} end -- get the claims for this entity local statements = entity.claims[prop] -- to avoid deep tests if not statements then return {} end -- mw.log("getLanguageData going through claims="..dump(statements)) -- let's go through the claims for _, claim in ipairs( statements ) do -- to avoid deep tests if not claim then claim = {} end local valid = claim['type'] == 'statement' and claim['rank'] ~= 'deprecated' if valid then local mainsnak = claim.mainsnak or {} local preferred = claim['rank'] == 'preferred' -- verify the item is what we expect local valid = mainsnak.snaktype == pval[prop].types.snaktype and mainsnak.datatype == pval[prop].types.datatype and mainsnak.datavalue.type == pval[prop].types.datavalue.type if valid then -- mw.log("getLanguageData claim is valid="..dump(claim)) -- if this is the correct P-value, dive into it and get P218 (ISO 639-1) if mainsnak.property == 'P364' then -- original language of work if preferred then head[#head+1] = table.concat(getLanguageData('P218', 'Q'..mainsnak.datavalue.value['numeric-id']), conf:a('mod-filter-separator')) else tail[#tail+1] = table.concat(getLanguageData('P218', 'Q'..mainsnak.datavalue.value['numeric-id']), conf:a('mod-filter-separator')) end elseif mainsnak.property == 'P218' or mainsnak.property == 'P305' then -- ISO 639-1 code or IETF language tag if preferred then head[#head+1] = stringFormatter(mainsnak.datavalue) else tail[#tail+1] = stringFormatter(mainsnak.datavalue) end end end end end -- mw.log("getLanguageData returning head="..dump(head).." tail="..dump(tail)) return #head>0 and head or tail end local langqvalorder = {'P407','P364'} local otherqvalorder = {'P582'} local function getValuesFromWikidata(props) local head = {} local tail = {} -- mw.log("getValuesFromWikidata, props="..dump(props)) -- get the entity we are checking local entity = mw.wikibase.getEntityObject() -- to avoid deep tests if not entity then --mw.log("getValuesFromWikidata no entity") return nil end if not entity.claims or not props or not props.prop or props.prop == '' then --mw.log("getValuesFromWikidata no claims or no props") return {} end -- get the claims for this entity local statements = entity.claims[props.prop] -- to avoid deep tests if not statements then return {} end -- let's go through the claims for _, claim in ipairs( statements ) do -- to avoid deep tests if not claim then claim = {} end local valid = claim['type'] == 'statement' and claim['rank'] ~= 'deprecated' if valid then -- mw.log("getValuesFromWikidata valid claim="..dump(claim)) local mainsnak = claim.mainsnak or {} local preferred = claim['rank'] == 'preferred' -- get the content of the claim (the identifier) local langcode = props.langcode local checklangcode = nil if props.langcode and props.langcode ~= '' then checklangcode = string.find(langcode, "([pP]%d+)") end if checklangcode and checklangcode ~= "" then -- this is a P-value for language-code, so we'll check qualifiers for languagedata -- first get any qualifiers local qualifiers = claim.qualifiers or {} for _, qualid in ipairs( langqvalorder ) do -- if the claim has this qualifier if qualifiers[qualid] then -- it's here, let's check it out! local items = {} -- traverse all snaks in this qualifier for _, qualsnak in ipairs( qualifiers[qualid] ) do if qualsnak and pval[qualid] then -- mw.log("qualsnak = " .. dump(qualsnak)) -- check if the snak is of the correct snaktype and datatype local valid = qualsnak.snaktype == pval[qualid].types.snaktype and qualsnak.datatype == pval[qualid].types.datatype if valid then -- now get the actual data langcode = table.concat(getLanguageData('P305', 'Q'..qualsnak.datavalue.value['numeric-id']), '') end end end end -- mw.log("langcode is now="..dump(langcode)) end if string.find(langcode, "([pP]%d+)") then -- we still don't have any langcode, so we default to "en" langcode = nil end end local stillvalid = true -- we should check a couple of other qualifiers as well -- first get any qualifiers local qualifiers = claim.qualifiers or {} for _, qualid in ipairs( otherqvalorder ) do -- if the claim has this qualifier if qualifiers[qualid] then -- it's here, let's check it out! local items = {} -- traverse all snaks in this qualifier for _, qualsnak in ipairs( qualifiers[qualid] ) do if qualsnak and pval[qualid] then -- mw.log("qualsnak = " .. dump(qualsnak)) -- check if the snak is of the correct snaktype and datatype local valid = qualsnak.snaktype == pval[qualid].types.snaktype and qualsnak.datatype == pval[qualid].types.datatype if not valid then -- sorry, this is not correct mw.log("qualsnak = INCORRECT") stillvalid = false end end end end -- mw.log("langcode is now="..dump(langcode)) end if stillvalid then if preferred then head[#head+1] = { value=stringFormatter(mainsnak.datavalue) } if langcode and langcode ~= '' then head[#head]['langcode'] = langcode end else tail[#tail+1] = { value=stringFormatter(mainsnak.datavalue) } if langcode and langcode ~= '' then tail[#tail]['langcode'] = langcode end end end end end -- mw.log("getValuesFromWikidata returning head="..dump(head).." tail="..dump(tail)) return #head>0 and head or tail end local function findMainLinksOnWikidata(props, pagetitle, short_links) local output = {} local pid = nil -- get the entity we are checking local entity = mw.wikibase.getEntityObject() -- to avoid deep tests if not entity then return nil end local values = getValuesFromWikidata(props) for _, value in ipairs( values ) do local verified_value = nil if props.regex then -- we have a local defined regex, so this will have to pass first -- maybe we'll have to convert the regex to Lua-style local regex = regexConverter(props.regex) local test = string.match( value.value, '^'..regex..'$' ) --mw.log("testing with "..regex.. " and test="..dump(test).." and value="..id) if test then -- it matched, this is correct and overrides any other. verified_value = value.value end else verified_value = value.value end if verified_value then local url = '' output[#output+1] = {} output[#output].langcode = value.langcode output[#output].category = {} if props.url_f then -- we have a local defined url-formatter function, use it as first priority url = props.url_f(verified_value) if props.track and not string.find(props.langcode, "([pP]%d+)") then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-local-wd'), props.prop):plain() elseif props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-wd-wd'), props.prop):plain() end elseif props.url then -- we have a local defined url-formatter string, use it as second priority url = mw.message.newRawMessage(props.url, verified_value):plain() if props.track and not string.find(props.langcode, "([pP]%d+)") then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-local-wd'), props.prop):plain() elseif props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-wd-wd'), props.prop):plain() end else -- get the formatvalue from the property, if it exists local formatterUrl = getFormatterUrl(props.prop, verified_value) if formatterUrl ~= '' then url = mw.message.newRawMessage(formatterUrl, verified_value):plain() if props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-wd-wd'), props.prop):plain() end end end if url ~= '' then local this_wiki = mw.getContentLanguage() local this_wiki_code = this_wiki:getCode() local langlink = (value.langcode and value.langcode ~= '' and value.langcode ~= this_wiki_code) and mw.message.newRawMessage(conf:g('msg-langcode'), value.langcode, mw.language.fetchLanguageName(value.langcode, this_wiki_code)) or "" if short_links and props.short then output[#output].text = mw.message.newRawMessage(props.short, getLabel(entity, props.genitive, pagetitle), url, langlink, verified_value, mw.uri.encode(verified_value, 'PATH')) :plain() else output[#output].text = mw.message.newRawMessage(props.message, getLabel(entity, props.genitive, pagetitle), url, langlink, verified_value, mw.uri.encode(verified_value, 'PATH')) :plain() end end end end --mw.log("findMainLinksOnWikidata returning="..dump(output)) return output end local function getSitelinksFromWikidata(props, entity) local output = {} --mw.log("getSitelinksFromWikidata, props="..dump(props)) -- to avoid deep tests if not entity then entity = mw.wikibase.getEntityObject() if not entity then --mw.log("getSitelinksFromWikidata no entity") return nil end end local requested_sitelink = string.match(props.prop, "SL(%l+)") local sitelinks = entity:getSitelink(requested_sitelink) if sitelinks and sitelinks ~= '' then output[#output+1] = { value = sitelinks } end --mw.log("getSitelinksFromWikidata returning output="..dump(output)) return output end local function findSiteLinksOnWikidata(props, pagetitle, short_links) local output = {} local pid = nil -- get the entity we are checking local entity = mw.wikibase.getEntityObject() -- to avoid deep tests if not entity then return nil end local values = getSitelinksFromWikidata(props) for _, value in ipairs( values ) do local verified_value = nil if props.regex then -- we have a local defined regex, so this will have to pass first -- maybe we'll have to convert the regex to Lua-style local regex = regexConverter(props.regex) local test = string.match( value.value, '^'..regex..'$' ) --mw.log("testing with "..regex.. " and test="..dump(test).." and value="..id) if test then -- it matched, this is correct and overrides any other. verified_value = value.value end else verified_value = value.value end if verified_value then --mw.log("it's verified..") local url = '' output[#output+1] = {} output[#output].langcode = value.langcode output[#output].category = {} if props.url_f then -- we have a local defined url-formatter function, use it as first priority url = props.url_f(verified_value) if props.track and not string.find(props.langcode, "(SL%l+)") then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-local-wd'), props.prop):plain() elseif props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-wd-wd'), props.prop):plain() end elseif props.url then -- we have a local defined url-formatter string, use it as second priority url = mw.message.newRawMessage(props.url, verified_value):plain() if props.track and not string.find(props.langcode, "(SL%l+)") then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-local-wd'), props.prop):plain() elseif props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-wd-wd'), props.prop):plain() end else url = verified_value:gsub(' ','_') if props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-wd-wd'), props.prop):plain() end end if url ~= '' then local this_wiki = mw.getContentLanguage() local this_wiki_code = this_wiki:getCode() local langlink = (value.langcode and value.langcode ~= '' and value.langcode ~= this_wiki_code) and mw.message.newRawMessage(conf:g('msg-langcode'), value.langcode, mw.language.fetchLanguageName(value.langcode, this_wiki_code)) or "" if short_links and props.short then output[#output].text = mw.message.newRawMessage(props.short, getLabel(entity, props.genitive, pagetitle), url, langlink, verified_value, mw.uri.encode(verified_value, 'PATH')) :plain() else output[#output].text = mw.message.newRawMessage(props.message, getLabel(entity, props.genitive, pagetitle), url, langlink, verified_value, mw.uri.encode(verified_value, 'PATH')) :plain() end end end end --mw.log("findSiteLinksOnWikidata returning="..dump(output)) return output end local function findMainLinksLocal(props, pagetitle, short_links, local_value) local output = {} -- to avoid deep tests if not props.prop then return nil end if not (local_value or local_value == '') then -- bail out if no value is present return output end -- get the formatvalue from the property local verified_value = local_value if props.regex and props.regex ~= '' then -- let's verify the id -- maybe we'll have to convert the regex to Lua-style local regex = regexConverter(props.regex) local test = string.match( local_value, '^'..regex..'$' ) if test then -- it matched, this is correct verified_value = local_value else verified_value = nil end end if not verified_value then return output end local wikidata_property = string.find(props.prop, "([pP]%d+)") local wikidata_values = {} if wikidata_property then -- get any wikidata values to see if they are equal to local values wikidata_values = getValuesFromWikidata(props) end if wikidata_property or (props.url and props.url ~= '') or (props.url_f) then output[#output+1] = {} output[#output].langcode = string.find(props.langcode, "([pP]%d+)") and "" or props.langcode --mw.log("findMainLinksLocal - props="..dump(props).." langcode="..output[#output].langcode) output[#output].category = {} local url = '' if props.track and wikidata_property and wikidata_values and #wikidata_values then local local_value_in_wikidata = false for _,value in ipairs( wikidata_values ) do if value.value == verified_value then local_value_in_wikidata = true end end output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), (local_value_in_wikidata and 'track-cat-local-wd-equal' or 'track-cat-local-wd-unequal')), props.prop):plain() end if wikidata_property and wikidata_values and #wikidata_values then hasdatafromwikidata = true -- signal up the chain this article has a wikidata claim end if props.url_f then -- we have a local defined url-formatter function, use it as first priority url = props.url_f(verified_value) if props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-local-local'), props.prop):plain() end elseif props.url then -- we have a local defined url-formatter string, use it as second priority url = mw.message.newRawMessage(props.url, verified_value):plain() if props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-local-local'), props.prop):plain() end elseif wikidata_property then -- get the formatvalue from the property, if it exists local formatterUrl = getFormatterUrl(props.prop, verified_value) if formatterUrl ~= '' then url = mw.message.newRawMessage(formatterUrl, verified_value):plain() if props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-wd-local'), props.prop):plain() end end else -- no other choice, bail out return {} end local this_wiki = mw.getContentLanguage() local this_wiki_code = this_wiki:getCode() local langlink = (output[#output].langcode and output[#output].langcode ~= '' and output[#output].langcode ~= this_wiki_code) and mw.message.newRawMessage(conf:g('msg-langcode'), props.langcode, mw.language.fetchLanguageName(props.langcode, this_wiki_code)) or "" if short_links and props.short then output[#output].text = mw.message.newRawMessage(props.short, getLabel(nil, props.genitive, pagetitle), url, langlink, verified_value, mw.uri.encode(verified_value, 'PATH')) :plain() else output[#output].text = mw.message.newRawMessage(props.message, getLabel(nil, props.genitive, pagetitle), url, langlink, verified_value, mw.uri.encode(verified_value, 'PATH')) :plain() end end --mw.log("findMainLinksLocal returning="..dump(output)) return output end local function findSiteLinksLocal(props, pagetitle, short_links, local_value) local output = {} -- to avoid deep tests if not props.prop then return nil end if not (local_value or local_value == '') then -- bail out if no value is present return output end -- get the formatvalue from the property local verified_value = local_value if props.regex and props.regex ~= '' then -- let's verify the id -- maybe we'll have to convert the regex to Lua-style local regex = regexConverter(props.regex) local test = string.match( local_value, '^'..regex..'$' ) if test then -- it matched, this is correct verified_value = local_value else verified_value = nil end end if not verified_value then return output end local wikidata_property = string.find(props.prop, "(SL.+)") local wikidata_values = {} if wikidata_property then -- get any wikidata values to see if they are equal to local values wikidata_values = getSitelinksFromWikidata(props) end if wikidata_property or (props.url and props.url ~= '') or (props.url_f) then output[#output+1] = {} output[#output].langcode = string.find(props.langcode, "(SL.+)") and "" or props.langcode --mw.log("findSiteLinksLocal - props="..dump(props).." langcode="..output[#output].langcode .." wikidata_values="..dump(wikidata_values)) output[#output].category = {} local url = '' if props.track and wikidata_property and wikidata_values and #wikidata_values then local local_value_in_wikidata = false for _,value in ipairs( wikidata_values ) do if value.value == verified_value then local_value_in_wikidata = true end end output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), (local_value_in_wikidata and 'track-cat-local-wd-equal' or 'track-cat-local-wd-unequal')), props.prop):plain() end if wikidata_property and wikidata_values and #wikidata_values then hasdatafromwikidata = true -- signal up the chain this article has a wikidata claim end if props.url_f then -- we have a local defined url-formatter function, use it as first priority url = props.url_f(verified_value) if props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-local-local'), props.prop):plain() end elseif props.url then -- we have a local defined url-formatter string, use it as second priority url = mw.message.newRawMessage(props.url, verified_value):plain() if props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-local-local'), props.prop):plain() end elseif wikidata_property then url = verified_value:gsub(' ','_') if props.track then output[#output].category[#output[#output].category+1] = mw.message.newRawMessage(cModul:getMessage(contLang:getCode(), 'track-cat-wd-local'), props.prop):plain() end else -- no other choice, bail out return {} end local this_wiki = mw.getContentLanguage() local this_wiki_code = this_wiki:getCode() local langlink = (output[#output].langcode and output[#output].langcode ~= '' and output[#output].langcode ~= this_wiki_code) and mw.message.newRawMessage(conf:g('msg-langcode'), props.langcode, mw.language.fetchLanguageName(props.langcode, this_wiki_code)) or "" if short_links and props.short then output[#output].text = mw.message.newRawMessage(props.short, getLabel(nil, props.genitive, pagetitle), url, langlink, verified_value, mw.uri.encode(verified_value, 'PATH')) :plain() else output[#output].text = mw.message.newRawMessage(props.message, getLabel(nil, props.genitive, pagetitle), url, langlink, verified_value, mw.uri.encode(verified_value, 'PATH')) :plain() end end --mw.log("findSiteLinksLocal returning="..dump(output)) return output end local function addLinkback(str, property) local id = mw.wikibase.getEntityObject() if not id then return str end if type(id) == 'table' then id = id.id end local class = '' local url = '' if property then class = 'wd_' .. string.lower(property) url = mw.uri.fullUrl('d:' .. id .. '#' .. property) url.fragment = property else url = mw.uri.fullUrl('d:' .. id ) end local title = conf:g('wikidata-linkback-edit') local icon = '[%s [[File:Blue pencil.svg|%s|10px|text-top|link=]] ]' url = tostring(url) local v = mw.html.create('span') :addClass(class) :wikitext(str) :tag('span') :addClass('noprint plainlinks wikidata-linkback') :css('padding-left', '.3em') :wikitext(icon:format(url, title)) :allDone() return tostring(v) end local function getArgument(frame, argument) local args = frame.args if args[1] == nil then local pFrame = frame:getParent(); args = pFrame.args; for k,v in pairs( frame.args ) do args[k] = v; end end if args[argument] then return args[argument] end return nil end local function removeEntry(conf_claims, identifier, property) for i, props in ipairs(conf_claims) do if props[identifier] == property then table.remove(conf_claims, i) end end return conf_claims end function p.getLinks(frame) local configured_conf = getArgument(frame, conf:a('arg-conf')) if configured_conf then cModul = require ('Modul:Kontrolê otoriteyi/conf/'..configured_conf) else error(mw.message.newRawMessage(conf:g('missing-conf'), configured_conf):plain()) end local output = {} local category = {} local conf_claims = cModul:getConfiguredClaims(contLang:getCode()) local limits = cModul:getLimits() assert(limits, mw.message.newRawMessage(conf:g('missing-limits'), configured_conf):plain()) local links_shown = getArgument(frame, conf:a('arg-maxlink')) local pagetitle = getArgument(frame, conf:a('arg-title')) -- get a list of tracked properties from the article itself local requested_tracking = getArgument(frame, conf:a('arg-track')) if requested_tracking and requested_tracking ~= '' then -- the properties should be written as P1234, P2345 and other -- version corresponding to the applicable property-identifiers in the config for track_prop in string.gmatch(requested_tracking,"([^ ,;:]+)") do -- get the requested properties and be able to access them -- like req_prop['P345'] to verify if it was requested local remove_track = string.match(track_prop, "^\-(.*)") for i,claim in ipairs ( conf_claims ) do if remove_track == claim.prop or remove_track == conf:a('mod-filter-all') then -- if a property starts with "-", then we'll simply remove that -- property from the conf_claims conf_claims[i]['track'] = false elseif track_prop == claim.prop or track_prop == conf:a('mod-filter-all') then conf_claims[i]['track'] = true end end end end -- get a list of "approved" properties from the article itself local requested_properties = getArgument(frame, conf:a('arg-properties')) --mw.log("requested_properties="..dump(requested_properties)) -- assume all properties are allowed local req_prop = {} local no_req_prop = false -- we'll allow properties to be filtered for now if requested_properties and requested_properties ~= '' then -- the properties should be written as P1234, P2345 and other -- version corresponding to the applicable property-identifiers in the config for i in string.gmatch(requested_properties,"([^ ,;:]+)") do -- get the requested properties and be able to access them -- like req_prop['P345'] to verify if it was requested if i == conf:a('mod-filter-all') then -- this is a special modifier, saying we should ignore -- all previous and future positive filters and remove the -- filter (with exception of negative filters) req_prop = {} no_req_prop = true end local remove_prop = string.match(i, "^\-(.*)") if remove_prop then -- if a property starts with "-", then we'll simply remove that -- property from the conf_claims conf_claims = removeEntry(conf_claims, 'prop', remove_prop) elseif not no_req_prop then -- only if we are allowing properties to be filtered req_prop[i] = 1 -- cheat to make #req_prop indicate populated table req_prop[1] = 1 end end end local requested_langs = getArgument(frame, conf:a('arg-languages')) --mw.log("requested_langs="..dump(requested_langs)) -- assume all languages are allowed local req_lang = {} local no_req_lang = false -- we'll allow languages to be filtered for now if requested_langs and requested_langs ~= '' then -- the languages should be written as langcodes as used in the conf_claims for i in string.gmatch(requested_langs,"([^ ,;:]+)") do -- get the requested languages and be able to access them if i == conf:a('mod-filter-all') then -- this is a special modifier, saying we should ignore -- all previous and future positive filters and remove the -- filter (with exception of negative filters) req_lang = {} no_req_lang = true end -- like req_lang['en'] to verify if it was requested local remove_lang = string.match(i, "^\-(.*)") if remove_lang then -- if a language starts with "-", then we'll simply remove that -- language from the conf_claims conf_claims = removeEntry(conf_claims, 'langcode', remove_lang) elseif not no_req_lang then -- only if we are allowing languages to be filtered req_lang[i] = 1 -- cheat to make #req_lang indicate populated table req_lang[1] = 1 end end end local short_links = getArgument(frame, conf:a('arg-short')) if short_links and short_links ~= '' then short_links = true else short_links = false end local showinline = getArgument(frame, conf:a('arg-inline')) if showinline and showinline ~= '' then showinline = true else showinline = false end if not links_shown or links_shown == '' then links_shown = limits['links-shown'] and limits['links-shown'] or 10 else links_shown = tonumber(links_shown) end local somedataonwikidata = (short_links and false or true) --mw.log("conf_claims="..dump(conf_claims)) --mw.log("req_prop="..dump(req_prop)) --mw.log("req_lang="..dump(req_lang)) --mw.log("short_links="..dump(short_links)) for _, props in ipairs(conf_claims) do -- if we're called with a list of approved properties or languages, check if this one is "approved" if (#req_prop==0 or req_prop[props.prop]) and (#req_lang==0 or req_lang[props.langcode] or string.find(props.langcode, "([pP]%d+)")) then --mw.log("checking claim="..dump(props)) local links = {} local checkedonwikidata = false -- get the any local overriding value from the call local wikivalue = getArgument(frame, props.prop) --mw.log("wikivalue="..dump(wikivalue)) if (not wikivalue or wikivalue == "") and string.find(props.prop, "([pP]%d+)") then -- the property is a Pnnn type, and therefore on Wikidata links = findMainLinksOnWikidata(props, pagetitle, short_links) if links == nil then -- a nil-value indicated no wikidata-link haswikidatalink = false links = {} else checkedonwikidata = true end elseif (not wikivalue or wikivalue == "") and string.find(props.prop, "(SL%l+)") then -- this is a sitelink-type (SLspecieswiki) --mw.log("finding sitelinks..") links = findSiteLinksOnWikidata(props, pagetitle, short_links) if links == nil then -- a nil-value indicated no wikidata-link haswikidatalink = false links = {} else checkedonwikidata = true end elseif (wikivalue and wikivalue ~= "") and string.find(props.prop, "(SL%l+)") then -- this is a sitelink-type (SLspecieswiki) links = findSiteLinksLocal(props, pagetitle, short_links, wikivalue) elseif wikivalue and wikivalue ~= '' then -- the property is of another annotation, and therefore a local construct links = findMainLinksLocal(props, pagetitle, short_links, wikivalue) end --mw.log("links="..dump(links)) for _,v in ipairs(links) do -- we'll have to check langcodes again as they may have come from wikidata if (#req_lang==0 or req_lang[v.langcode]) then if checkedonwikidata and not hasdatafromwikidata then -- add a general tracking category for articles with data from wikidata hasdatafromwikidata = true category[#category+1] = cModul:getMessage(contLang:getCode(), 'with-data-cat') elseif not checkedonwikidata and not hasdatafromlocal then -- add a general tracking category for articles with data from template-calls in local articles hasdatafromlocal = true category[#category+1] = cModul:getMessage(contLang:getCode(), 'with-local-cat') end if short_links and props.short and v.text and v.text ~= '' then -- if short links were requested, and a short definition exists for this property, let's use it if #output==0 then output[#output+1] = v.text else output[#output] = output[#output] .. cModul:getMessage(contLang:getCode(),'short-list-separator') .. v.text end somedataonwikidata = true elseif not short_links and not showinline and v.text and v.text ~= '' then -- only if short links were not requested output[#output+1] = (#output>=1 and conf:g('msg-ul-prepend') or '') -- if this is the first link, we won't output a list-element (msg-ul-prepend) .. (checkedonwikidata and addLinkback(v.text, props.prop) or v.text) -- if the link comes from wikidata, also output a linkback. elseif not short_links and showinline and v.text and v.text ~= '' then -- only if short links were not requested output[#output+1] = v.text end if props.track and v.category and #v.category then -- add category if tracking is on for this property and a category exists in the link-result. for _,cats in ipairs( v.category ) do category[#category+1] = cats end end if links_shown>0 then links_shown = links_shown - 1 else break end end end if links_shown==0 then break end end end local outtext = "" if short_links and #output>0 then -- if these are short links, output the whole thing with linkback to wikidata --mw.log("somedataonwikidata="..dump(somedataonwikidata).." and output="..dump(output).." and #output="..dump(#output)) outtext = (somedataonwikidata and addLinkback(table.concat(output,cModul:getMessage(contLang:getCode(),'short-list-separator')), nil) or table.concat(output,cModul:getMessage(contLang:getCode(),'short-list-separator'))) elseif not short_links and not showinline and #output>0 then outtext = table.concat(output,"\n") elseif not short_links and showinline and #output>0 then outtext = table.concat(output,conf:g('msg-inline-separator')) end if not hasdatafromwikidata then category[#category+1] = cModul:getMessage(contLang:getCode(), 'no-data-cat') if not hasdatafromlocal and not short_links then outtext = cModul:getMessage(contLang:getCode(), 'no-data-text') end end if not haswikidatalink then category[#category+1] = cModul:getMessage(contLang:getCode(), 'no-wikilink-cat') if not hasdatafromlocal and not short_links then outtext = cModul:getMessage(contLang:getCode(), 'no-wikilink') end end local nocategory = getArgument(frame, conf:a('arg-no-categories')) category = #category>0 and "\n" .. table.concat(category,"\n") or "" --mw.log("nocategory="..dump(nocategory).." and outtext="..dump(outtext).." and category="..dump(category)) outtext = outtext .. (nocategory and '' or category) return outtext end function p.getLanguageCode(frame) local prop = getArgument(frame, conf:a('arg-properties')) local output = getLanguageData(prop) return table.concat(output, conf:a('mod-filter-separator')) end return p 0efjtob45wy3knbi2u5rhq4c963jnpw 700 0 99769 548972 546702 2026-06-07T09:32:39Z ~2026-33678-44 34068 548972 wikitext text/x-wiki {{Pusula|700}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:700]] 5j7et91fbkh5v1e7cpb77cevwsef63j 599 0 100155 548948 2026-06-07T09:10:58Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]]' ra pela newiye vıraziye 548948 wikitext text/x-wiki {{Pusula|599}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]] r7vt8zxjiglutr8ia80rfwf9sawq7no 598 0 100156 548949 2026-06-07T09:11:28Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]]' ra pela newiye vıraziye 548949 wikitext text/x-wiki {{Pusula|598}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]] 78jh9gvoxznrf652njkriaechto0pqj 597 0 100157 548950 2026-06-07T09:12:00Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]]' ra pela newiye vıraziye 548950 wikitext text/x-wiki {{Pusula|597}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]] ffkfa4fkzyw0cvpa37v2biyr9gm1zgm 596 0 100158 548951 2026-06-07T09:12:49Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]]' ra pela newiye vıraziye 548951 wikitext text/x-wiki {{Pusula|596}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]] b6poyhpglapydo22oz3e7hyp2kt2e98 595 0 100159 548952 2026-06-07T09:14:07Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]]' ra pela newiye vıraziye 548952 wikitext text/x-wiki {{Pusula|595}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]] mjmx3mhous5elhpkuno2yl4cnkd4uyg 594 0 100160 548953 2026-06-07T09:15:21Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]]' ra pela newiye vıraziye 548953 wikitext text/x-wiki {{Pusula|594}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]] lwbzjex7cb65d1789vdq3l029vcszxc 593 0 100161 548954 2026-06-07T09:15:52Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]]' ra pela newiye vıraziye 548954 wikitext text/x-wiki {{Pusula|593}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]] 5nxesv71exs357j28l3hrv0o81rs2eh 592 0 100162 548955 2026-06-07T09:16:26Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]]' ra pela newiye vıraziye 548955 wikitext text/x-wiki {{Pusula|592}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]] 6605agcjmyfzicpue7xmp4ky103s2pl 591 0 100163 548956 2026-06-07T09:16:56Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]]' ra pela newiye vıraziye 548956 wikitext text/x-wiki {{Pusula|591}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]] eayemo62voeyptxsptsxo2f0763420y 590 0 100164 548957 2026-06-07T09:17:22Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]]' ra pela newiye vıraziye 548957 wikitext text/x-wiki {{Pusula|590}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]] s9y1g3d6f27qx5nbbo09bh1i3hxxgio 630 0 100165 548958 2026-06-07T09:18:20Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]]' ra pela newiye vıraziye 548958 wikitext text/x-wiki {{Pusula|630}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]] h3u71iuksjgqd3xek65n6z80tw3n1kv 635 0 100166 548959 2026-06-07T09:19:02Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]]' ra pela newiye vıraziye 548959 wikitext text/x-wiki {{Pusula|635}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:600]] nrgp6ctnschmcef79pffk69kpiagm9t 640 0 100167 548960 2026-06-07T09:20:08Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:{{Subst:PAGENAMEBASE}}]]' ra pela newiye vıraziye 548960 wikitext text/x-wiki {{Pusula|640}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:640]] 5ydabciv11sgz4xxl66123ksps4tylp 100 0 100168 548961 2026-06-07T09:20:45Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:{{Subst:PAGENAMEBASE}}]]' ra pela newiye vıraziye 548961 wikitext text/x-wiki {{Pusula|100}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:100]] epobzxug99c9qcchqdqw4gptvozavtt 150 0 100169 548962 2026-06-07T09:21:40Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:{{Subst:PAGENAMEBASE}}]]' ra pela newiye vıraziye 548962 wikitext text/x-wiki {{Pusula|150}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:150]] qrxxt7zie05hb06fin3olhyy0lln7m2 200 0 100170 548963 2026-06-07T09:22:36Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:{{Subst:PAGENAMEBASE}}]]' ra pela newiye vıraziye 548963 wikitext text/x-wiki {{Pusula|200}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:200]] 40vhwsdan4yehikrslq2l2gvdxyy825 250 0 100171 548964 2026-06-07T09:24:03Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:{{Subst:PAGENAMEBASE}}]]' ra pela newiye vıraziye 548964 wikitext text/x-wiki {{Pusula|250}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:250]] 6ehhw0133ummqjwqqgcjosssapg7tf6 300 0 100172 548965 2026-06-07T09:24:38Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:{{Subst:PAGENAMEBASE}}]]' ra pela newiye vıraziye 548965 wikitext text/x-wiki {{Pusula|300}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:300]] i27sjtkuqir9c402ko4caw7nlhne2ga 350 0 100173 548966 2026-06-07T09:25:30Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:{{Subst:PAGENAMEBASE}}]]' ra pela newiye vıraziye 548966 wikitext text/x-wiki {{Pusula|350}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:350]] 2524yx8rljevdypjigr2a1rgbjqus6f 400 0 100174 548967 2026-06-07T09:26:54Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:{{Subst:PAGENAMEBASE}}]]' ra pela newiye vıraziye 548967 wikitext text/x-wiki {{Pusula|400}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:400]] c6s4ub93r4lxvsticn7ph1fr5ex8fc1 450 0 100175 548968 2026-06-07T09:27:42Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:{{Subst:PAGENAMEBASE}}]]' ra pela newiye vıraziye 548968 wikitext text/x-wiki {{Pusula|450}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:450]] 3py0cais5ofsz5y03jw478ou0xjljta 500 0 100176 548969 2026-06-07T09:28:38Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:{{Subst:PAGENAMEBASE}}]]' ra pela newiye vıraziye 548969 wikitext text/x-wiki {{Pusula|500}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:500]] objl0idrcdd1njym5nvrnvjxpqzipqx 550 0 100177 548970 2026-06-07T09:29:33Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:{{Subst:PAGENAMEBASE}}]]' ra pela newiye vıraziye 548970 wikitext text/x-wiki {{Pusula|550}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:550]] krpemn0bbggoq1obko6nbdyplc9duzt 650 0 100178 548971 2026-06-07T09:31:07Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:{{Subst:PAGENAMEBASE}}]]' ra pela newiye vıraziye 548971 wikitext text/x-wiki {{Pusula|650}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:650]] gtzj84q8rw5v0tsyp0apwg5q9185ztx 750 0 100179 548973 2026-06-07T09:33:58Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:{{Subst:PAGENAMEBASE}}]]' ra pela newiye vıraziye 548973 wikitext text/x-wiki {{Pusula|750}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:750]] 0iu6ypvofwglt3kq4zxubz3sidwywro 50 0 100180 548974 2026-06-07T09:39:33Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:{{Subst:PAGENAMEBASE}}]]' ra pela newiye vıraziye 548974 wikitext text/x-wiki {{Pusula|50}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:50]] k5191w6pf60dsc5b6441p2oafm2qwr7 55 0 100181 548975 2026-06-07T09:40:19Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:{{Subst:PAGENAMEBASE}}]]' ra pela newiye vıraziye 548975 wikitext text/x-wiki {{Pusula|55}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:55]] 1wmq22sj1kv5t1fzlu7jsqbhf60azgt 60 0 100182 548976 2026-06-07T09:41:28Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:{{Subst:PAGENAMEBASE}}]]' ra pela newiye vıraziye 548976 wikitext text/x-wiki {{Pusula|60}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:60]] j4rar98x1hmzzoj4qbw7ccu8gbrq6cy 65 0 100183 548977 2026-06-07T09:41:53Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:{{Subst:PAGENAMEBASE}}]]' ra pela newiye vıraziye 548977 wikitext text/x-wiki {{Pusula|65}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:65]] q2ikygel6mlng67w8c1h365i42qum0h 70 0 100184 548978 2026-06-07T09:50:18Z ~2026-33678-44 34068 Ebe zerrekê '{{Pusula|{{Subst:PAGENAME}}}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:{{Subst:PAGENAMEBASE}}]]' ra pela newiye vıraziye 548978 wikitext text/x-wiki {{Pusula|70}} {{Serra Teqwimi}} == Seramey == === Welat === === Cihan === == Biyayışi == == Merdışi == == Sewbi == {{Portal|Serrename|Tarix}} {{Kontrolê_otoriteyi}} [[Kategoriye:70]] ewfdeezwrn6otyrwo87gwm25taxl64d Yered 0 100185 548981 2026-06-07T10:35:42Z ~2026-33757-55 34070 Ebe zerrekê '{{Merdumi}} '''Yered''', ehdo newe de piyê [[İdris]] peyğemberi yo. {{Kontrolê_otoriteyi}} [[Kategoriye:İncile de merdumi ]]' ra pela newiye vıraziye 548981 wikitext text/x-wiki {{Merdumi}} '''Yered''', ehdo newe de piyê [[İdris]] peyğemberi yo. {{Kontrolê_otoriteyi}} [[Kategoriye:İncile de merdumi ]] 7vtcebd40i4necws3sjz52geft58s81 Mahalalel 0 100186 548982 2026-06-07T10:40:30Z ~2026-33757-55 34070 Ebe zerrekê '{{Merdumi}} '''Mahalalel''', ehdo newe de kalıkê [[İdris]] peyğemberi yo. {{Kontrolê_otoriteyi}} [[Kategoriye:İncile de merdumi ]]' ra pela newiye vıraziye 548982 wikitext text/x-wiki {{Merdumi}} '''Mahalalel''', ehdo newe de kalıkê [[İdris]] peyğemberi yo. {{Kontrolê_otoriteyi}} [[Kategoriye:İncile de merdumi ]] 9by63jwwxepc085l8rfosp63fv2ymmg Kenan (merdum) 0 100187 548983 2026-06-07T10:44:59Z ~2026-33757-55 34070 Ebe zerrekê '{{Merdumi}} '''Kenan''', ehdo kehen de lacê [[Enos]]i yo. {{Kontrolê_otoriteyi}} [[Kategoriye:Torah de merdumi ]]' ra pela newiye vıraziye 548983 wikitext text/x-wiki {{Merdumi}} '''Kenan''', ehdo kehen de lacê [[Enos]]i yo. {{Kontrolê_otoriteyi}} [[Kategoriye:Torah de merdumi ]] syqyo4sglg4jxyas115tfms5e0hncto Enos 0 100188 548984 2026-06-07T10:47:45Z ~2026-33757-55 34070 Ebe zerrekê '{{Merdumi}} '''Enos''', ehdo kehen de lacê [[Şit]]i yo. {{Kontrolê_otoriteyi}} [[Kategoriye:Torah de merdumi ]]' ra pela newiye vıraziye 548984 wikitext text/x-wiki {{Merdumi}} '''Enos''', ehdo kehen de lacê [[Şit]]i yo. {{Kontrolê_otoriteyi}} [[Kategoriye:Torah de merdumi ]] 3tbuy3f3erj5ovm0gar3iyt2r4oaslp Şit 0 100189 548985 2026-06-07T10:51:10Z ~2026-33757-55 34070 Ebe zerrekê '{{Merdumi}} '''Şit'', ehdo kehen u Qurane de lacê [[Adam]]i yo. {{Kontrolê_otoriteyi}} [[Kategoriye:Torah de merdumi ]] [[Kategoriye:Qurane de merdumi]]' ra pela newiye vıraziye 548985 wikitext text/x-wiki {{Merdumi}} '''Şit'', ehdo kehen u Qurane de lacê [[Adam]]i yo. {{Kontrolê_otoriteyi}} [[Kategoriye:Torah de merdumi ]] [[Kategoriye:Qurane de merdumi]] hckh6oqo4ekwkd2ob83ml4zfmlaotdu 548986 548985 2026-06-07T10:54:18Z ~2026-33757-55 34070 548986 wikitext text/x-wiki {{Merdumi}} '''Şit'', ehdo kehen u Qurane de lacê [[Adem]]i yo. {{Kontrolê_otoriteyi}} [[Kategoriye:Torah de merdumi ]] [[Kategoriye:Qurane de merdumi]] hz4he11z4a3ufwr3r61tk8si0lp68dd Bandırma 0 100190 548988 2026-06-07T10:59:56Z ~2026-33757-55 34070 Ebe zerrekê '{{Databox}} '''{{Subst:PAGENAMEBASE }}''', yew qezay u taxa wılayetê [[Balıkesir (wılayet)|Balıkesir]]iya. {{Portal|Coğrafya |Tırkiya}} {{Qezê Balıkesiri}} {{Kontrolê_otoriteyi}} [[Kategoriye:Qezê Balıkesiri]] [[Kategoriye:{{subst:PAGENAME }}]]' ra pela newiye vıraziye 548988 wikitext text/x-wiki {{Databox}} '''Bandırma''', yew qezay u taxa wılayetê [[Balıkesir (wılayet)|Balıkesir]]iya. {{Portal|Coğrafya |Tırkiya}} {{Qezê Balıkesiri}} {{Kontrolê_otoriteyi}} [[Kategoriye:Qezê Balıkesiri]] [[Kategoriye:Bandırma]] r4rz7o9n8kcjz5r0qqi5ktgcyzvgw1u Ayvalık 0 100191 548989 2026-06-07T11:04:02Z ~2026-33757-55 34070 Ebe zerrekê '{{Databox}} '''{{Subst:PAGENAMEBASE }}''', yew qezay u taxa wılayetê [[Balıkesir (wılayet)|Balıkesir]]iya. {{Portal|Coğrafya |Tırkiya}} {{Qezê Balıkesiri}} {{Kontrolê_otoriteyi}} [[Kategoriye:Qezê Balıkesiri]] [[Kategoriye:{{subst:PAGENAME }}]]' ra pela newiye vıraziye 548989 wikitext text/x-wiki {{Databox}} '''Ayvalık''', yew qezay u taxa wılayetê [[Balıkesir (wılayet)|Balıkesir]]iya. {{Portal|Coğrafya |Tırkiya}} {{Qezê Balıkesiri}} {{Kontrolê_otoriteyi}} [[Kategoriye:Qezê Balıkesiri]] [[Kategoriye:Ayvalık]] moqfd8icm4oa7f45dfd77fglemwoskt Savaştepe 0 100192 548990 2026-06-07T11:26:27Z ~2026-33651-67 34072 Ebe zerrekê '{{Databox}} '''{{Subst:PAGENAMEBASE }}''', yew qezay u taxa wılayetê [[Balıkesir (wılayet)|Balıkesir]]iya. {{Portal|Coğrafya |Tırkiya}} {{Qezê Balıkesiri}} {{Kontrolê_otoriteyi}} [[Kategoriye:Qezê Balıkesiri]] [[Kategoriye:{{subst:PAGENAME }}]]' ra pela newiye vıraziye 548990 wikitext text/x-wiki {{Databox}} '''Savaştepe''', yew qezay u taxa wılayetê [[Balıkesir (wılayet)|Balıkesir]]iya. {{Portal|Coğrafya |Tırkiya}} {{Qezê Balıkesiri}} {{Kontrolê_otoriteyi}} [[Kategoriye:Qezê Balıkesiri]] [[Kategoriye:Savaştepe]] qkjxjzg01o91y1s4taobpczdy7pqofw Gönen 0 100193 548991 2026-06-07T11:26:56Z ~2026-33651-67 34072 Ebe zerrekê '{{Databox}} '''{{Subst:PAGENAMEBASE }}''', yew qezay u taxa wılayetê [[Balıkesir (wılayet)|Balıkesir]]iya. {{Portal|Coğrafya |Tırkiya}} {{Qezê Balıkesiri}} {{Kontrolê_otoriteyi}} [[Kategoriye:Qezê Balıkesiri]] [[Kategoriye:{{subst:PAGENAME }}]]' ra pela newiye vıraziye 548991 wikitext text/x-wiki {{Databox}} '''Gönen''', yew qezay u taxa wılayetê [[Balıkesir (wılayet)|Balıkesir]]iya. {{Portal|Coğrafya |Tırkiya}} {{Qezê Balıkesiri}} {{Kontrolê_otoriteyi}} [[Kategoriye:Qezê Balıkesiri]] [[Kategoriye:Gönen]] irlnie862a89iw59lnnz4v249z4foen Susurluk 0 100194 548992 2026-06-07T11:27:21Z ~2026-33651-67 34072 Ebe zerrekê '{{Databox}} '''{{Subst:PAGENAMEBASE }}''', yew qezay u taxa wılayetê [[Balıkesir (wılayet)|Balıkesir]]iya. {{Portal|Coğrafya |Tırkiya}} {{Qezê Balıkesiri}} {{Kontrolê_otoriteyi}} [[Kategoriye:Qezê Balıkesiri]] [[Kategoriye:{{subst:PAGENAME }}]]' ra pela newiye vıraziye 548992 wikitext text/x-wiki {{Databox}} '''Susurluk''', yew qezay u taxa wılayetê [[Balıkesir (wılayet)|Balıkesir]]iya. {{Portal|Coğrafya |Tırkiya}} {{Qezê Balıkesiri}} {{Kontrolê_otoriteyi}} [[Kategoriye:Qezê Balıkesiri]] [[Kategoriye:Susurluk]] nxled4mx92w5rc2a1ytbgnstfczcxs8 Sındırgı 0 100195 548993 2026-06-07T11:27:54Z ~2026-33651-67 34072 Ebe zerrekê '{{Databox}} '''{{Subst:PAGENAMEBASE }}''', yew qezay u taxa wılayetê [[Balıkesir (wılayet)|Balıkesir]]iya. {{Portal|Coğrafya |Tırkiya}} {{Qezê Balıkesiri}} {{Kontrolê_otoriteyi}} [[Kategoriye:Qezê Balıkesiri]] [[Kategoriye:{{subst:PAGENAME }}]]' ra pela newiye vıraziye 548993 wikitext text/x-wiki {{Databox}} '''Sındırgı''', yew qezay u taxa wılayetê [[Balıkesir (wılayet)|Balıkesir]]iya. {{Portal|Coğrafya |Tırkiya}} {{Qezê Balıkesiri}} {{Kontrolê_otoriteyi}} [[Kategoriye:Qezê Balıkesiri]] [[Kategoriye:Sındırgı]] nrbdod09qxt4ugrgmroztur1hu48qsj Havran 0 100196 548994 2026-06-07T11:28:26Z ~2026-33651-67 34072 Ebe zerrekê '{{Databox}} '''{{Subst:PAGENAMEBASE }}''', yew qezay u taxa wılayetê [[Balıkesir (wılayet)|Balıkesir]]iya. {{Portal|Coğrafya |Tırkiya}} {{Qezê Balıkesiri}} {{Kontrolê_otoriteyi}} [[Kategoriye:Qezê Balıkesiri]] [[Kategoriye:{{subst:PAGENAME }}]]' ra pela newiye vıraziye 548994 wikitext text/x-wiki {{Databox}} '''Havran''', yew qezay u taxa wılayetê [[Balıkesir (wılayet)|Balıkesir]]iya. {{Portal|Coğrafya |Tırkiya}} {{Qezê Balıkesiri}} {{Kontrolê_otoriteyi}} [[Kategoriye:Qezê Balıkesiri]] [[Kategoriye:Havran]] akc33t11civif8wry0m8qvfv4pescr9