한국   대만   중국   일본 
Moduł:Kontrola autorytatywna ? Wikipedia, wolna encyklopedia Przejd? do zawarto?ci

Moduł : Kontrola autorytatywna

Z Wikipedii, wolnej encyklopedii
 Dokumentacja modułu [ zobacz ] [ edytuj ] [ historia ] [ od?wie? ]

Moduł wykorzystywany przez szablon {{ Kontrola autorytatywna }} .

Raporty diagnostyczne
Bonus
Tabela bonus zawiera identyfikatory cech z Wikidanych, ktore odsyłaj? do zewn?trznych baz danych. Wszystko jest tworzone automatycznie na podstawie cech opisuj?cych wła?ciwo?ci. Jednak gdy cecha nie ma etykiety w j?zyku polskim to dana pozycja nie b?dzie wy?wietlana w szablonie. Zdefiniowanie odpowiedniej etykiety w Wikidanych rozwi?zuje problem. Alternatywnie mo?na poda? lokalny opis bezpo?rednio po identyfikatorze cechy oddzielaj?c je spacj?. Ten trik przydaje si? rownie? je?li etykieta cechy jest zbyt długa lub zbyt opisowa i chcemy j? zast?pi? jakim? skrotem.
require
(
"strict"
)


local
 resources
 =
 {

	title
 =
 "[[Kontrola autorytatywna]]"
,

	encyklopediaTitle
 =
 "[[Encyklopedia internetowa]]"
,

	otherTitle
 =
 "Identyfikatory zewn?trzne"
,

	catMissingLabel
 =
 '[[Kategoria:Kontrola autorytatywna potrzebuje polskiej etykiety]]'
,

	editLabelLink
 =
 '<span class="wdlink">&#x5B;[[:d:%s|<span  title="Brak polskiej etykiety">e</span>]]&#x5D;</span>'
,

	fallbackLabels
 =
 {
 "en"
,
 "de"
,
 "fr"
,
 "it"
,
 "cs"
,
 "lt"
,
 "pt"
,
 "es"
 },

	nativeTypes
 =
 {
 "P31"
,
 "P279"
 },

	-- type descriptions

	descriptions
 =
 {

		p
 =
 "osoba"
,

		k
 =
 "organizacja"
,

		v
 =
 "wydarzenie"
,

		w
 =
 "dzieło"
,

		s
 =
 "słowo kluczowe"
,

		g
 =
 "obiekt geograficzny"
,

	},

	encyklopedie
 =
 {

		"P7305 [[Encyklopedia PWN (internetowa)|PWN]]"
,

		"P5058 [[Encyklopedia teatru polskiego|ETP]]"
,

		"P1417 [[Encyklopedia Britannica|Britannica]]"
,

		"P5395"
,
 -- The Canadian Encyclopedia

		"P3365 [[Enciclopedia Treccani|Treccani]]"
,
 -- Enciclopedia Treccani

		"P3219 Universalis"
,
 -- Encyclopædia Universalis

		"P3123 [[Stanford Encyclopedia of Philosophy|SEP]]"
,

		"P2924 [[Wielka Encyklopedia Rosyjska|БРЭ]]"
,

		"P4613 [[Encykłopedija suczasnoji Ukrajiny|ЕСУ]]"
,

		"P3222 [[Nationalencyklopedin|NE.se]]"
,

		"P4854"
,
 -- Uppslagsverket Finland

		"P6870"
,
 -- Nacion?l? enciklop?dija

		"P4342 SNL"
,
 -- Store Norske leksikon

		"P7666 [[Visuotin? lietuvi? enciklopedija|VLE]]"
,

		"P1296 Catalana"
,
 -- Gran Enciclopedia Catalana

		"P8313 [[Den Store Danske Encyklopædi|DSDE]]"
,

		"P7982"
,
 -- Hrvatska enciklopedija

	},

	bonus
 =
 {

		"P8832 [[Polska Akademia Nauk|PAN]]"
,

		--"P402",  -- identyfikator relacji OpenStreetMap

		
		"P2038"
,
 -- identyfikator ResearchGate

		"P1053"
,
 -- ResearcherID

		"P3829 Publons"
,

		"P3124"
,
 -- identyfikator osoby w bazie ?Ludzie nauki” (starej)

		"P12541"
,
 -- identyfikator osoby w bazie ?Ludzie nauki” (nowej)

		"P1153 Scopus"
,
		
		"P1563 MacTutor"
,
 -- identyfikator MacTutor,

		"P8159 SciProfiles"
,
 -- identyfikator SciProfiles (MDPI),

		"P2798 Loop"
,
 -- identyfikator Loop (Frontiers),

		"P10861 Dimensions"
,
 -- identyfikator Dimensions (Springer Nature),

		
		"P8286 Olympedia"
,
 -- identyfikator sportowca w www.olympedia.org

		"P3495 FilmPolski.pl"
,
 -- identyfikator aktora w FilmPolski.pl

		
		"P2036"
,
 -- African Plant Database;

		"P838 BioLib"
,

		"P830 [[Encyclopedia of Life|EoL]]"
,

		"P6177 EUNIS"
,
 -- EUNIS ID, (lub P6681 ?) 

		"P1747 Flora of China"
,

		"P1727 Flora of North America"
,

		"P6094 FloraWeb"
,

		"P846 GBIF"
,
  -- Global Biodiversity Information Facility

		"P1421 GRIN"
,

		"P3151"
,
 -- iNaturalist,

		"P961 [[International Plant Names Index|IPNI]]"
,

		"P815 [[Integrated Taxonomic Information System|ITIS]]"
,

		"P685 NCBI"
,
  -- NCBI,

		"P6034 Plant Finder"
,

		"P1070"
,
 -- PlantList

		"P5037 Plants of the World"
,

		"P3105 Tela Botanica"
,

		"P960"
,
  -- Tropicos,

		"P1772 USDA PLANTS"
,

		"P821"
,
  -- CGNDB,

		"P6263"
,
 -- Mindat,

		"P842"
,
 -- Fossilworks

	}

}


local
 has
 =
 function
 (
entityId
,
 propertyId
)

	return
 #
mw
.
wikibase
.
getBestStatements
(
entityId
,
 propertyId
)
 >
 0

end


local
 hasAny
 =
 function
 (
entityId
,
 properties
)

	for
 i
,
 v
 in
 ipairs
(
properties
)
 do

		if
 has
(
entityId
,
 v
)
 then

			return
 true

		end

	end


	return
 false

end


local
 isHumanPerson
 =
 function
(
entityId
)

	for
 i
,
 v
 in
 ipairs
(
mw
.
wikibase
.
getBestStatements
(
entityId
,
 "P31"
))
 do

		if
 (
v
.
mainsnak
.
snaktype
 ==
 "value"
)

		and
 (
v
.
mainsnak
.
datavalue
.
value
[
"numeric-id"
]
 ==
 5
)
 then

			return
 true

		end

	end

	
	for
 i
,
 v
 in
 ipairs
(
mw
.
wikibase
.
getBestStatements
(
entityId
,
 "P21"
))
 do

		if
 (
v
.
mainsnak
.
snaktype
 ==
 "value"
)
 then

			local
 id
 =
 v
.
mainsnak
.
datavalue
.
value
[
"numeric-id"
]

			if
 (
id
 ==
 6581097
)
 or
 (
id
 ==
 6581072
)
 then

				return
 true

			end

		end

	end

	
	return
 false

end


local
 sources
 =
 {

	{

		name
     =
 "ISNI"
,

		hint
     =
 "International Standard Name Identifier"
,

		property
 =
 "P213"
,

		link
     =
 function
(
id
)

			local
 linkId
,
 x
 =
 string.gsub
(
id
,
 " "
,
 ""
)

			return
 "https://isni.org/isni/"
..
linkId

		end
,

		show
     =
 function
(
id
)

			local
 showId
,
 x
 =
 string.gsub
(
id
,
 " "
,
 "&thinsp;"
)

			return
 showId
				
		end
,

	},

	{

		name
     =
 "ORCID"
,

		hint
     =
 "ORCID"
,

		property
 =
 "P496"
,

		link
     =
 function
(
id
)

			id
 =
 string.gsub
(
id
,
 "-"
,
 ""
)

			return
 "http://orcid.org/"
..
string.sub
(
id
,
 1
,
 4
)
..
"-"
..
string.sub
(
id
,
5
,
8
)
..
"-"
..
string.sub
(
id
,
9
,
12
)
..
"-"
..
string.sub
(
id
,
13
,
16
)

		end
,

		show
     =
 function
(
id
)

			id
 =
 string.gsub
(
id
,
 "-"
,
 ""
)

			return
 string.sub
(
id
,
 1
,
 4
)
..
"-"
..
string.sub
(
id
,
5
,
8
)
..
"-"
..
string.sub
(
id
,
9
,
12
)
..
"-"
..
string.sub
(
id
,
13
,
16
)

		end
,

	},

	{

		name
     =
 "VIAF"
,

		hint
     =
 "Virtual International Authority File"
,

		property
 =
 "P214"
,

		link
     =
 function
(
id
)

			return
 "http://viaf.org/viaf/"
..
id

		end
,

	},

	{

		name
     =
 "ULAN"
,

		hint
     =
 ":en:Union List of Artist Names"
,

		property
 =
 "P245"
,

		link
     =
 function
(
id
)

			return
 "http://www.getty.edu/vow/ULANFullDisplay?find=&role=&nation=&subjectid="
..
id

		end
,

	},

	{

		name
     =
 "Europeana"
,

		hint
     =
 "Europeana"
,

		property
 =
 "P727"
,

		link
     =
 function
(
id
)

			return
 "http://www.europeana.eu/portal/record/"
..
id
..
".html"

		end
,

	},

	{

		name
     =
 "LCCN"
,

		hint
     =
 "Library of Congress Control Number"
,

		property
 =
 "P244"
,

		link
     =
 function
(
id
)

			return
 "http://lccn.loc.gov/"
..
id

		end
,

	},

	{

		name
     =
 "GND"
,

		hint
     =
 "Gemeinsame Normdatei"
,

		property
 =
 "P227"
,

		link
     =
 function
(
id
)

			return
 "http://d-nb.info/gnd/"
..
id

		end
,

	},

	{

		name
     =
 "NDL"
,

		hint
     =
 ":de:Web NDL Authorities"
,

		property
 =
 "P349"
,

		link
     =
 function
(
id
)

			return
 "http://id.ndl.go.jp/auth/ndlna/"
..
id

		end
,

	},

	{

		name
     =
 "LIBRIS"
,

		hint
     =
 "LIBRIS"
,

		property
 =
 "P5587"
,

		link
     =
 function
(
id
)

			return
 "https://libris.kb.se/katalogisering/"
..
id

		end
,

	},

	{

		name
     =
 "SELIBR"
,

		hint
     =
 "LIBRIS"
,

		property
 =
 "P906"
,

		disable
  =
 function
(
entityId
)

			return
 has
(
entityId
,
 "P5587"
)

		end
,

		link
     =
 function
(
id
)

			local
 x
 =
 mw
.
title
.
new
(
"Module:Kontrola autorytatywna/P906/enabled"
).
id

			return
 "http://libris.kb.se/auth/"
..
id

		end
,

	},

	{

		name
     =
 "BnF"
,

		hint
     =
 "Bibliotheque nationale"
,

		property
 =
 "P268"
,

		link
     =
 function
(
id
)

			return
 "http://catalogue.bnf.fr/ark:/12148/cb"
..
id

		end
,

	},

	{

		name
     =
 "SUDOC"
,

		hint
     =
 "Systeme Universitaire de Documentation"
,

		property
 =
 "P269"
,

		link
     =
 function
(
id
)

			return
 "http://www.idref.fr/"
..
id

		end
,

	},

	{

		name
     =
 "SBN"
,

		hint
     =
 ":it:Servizio bibliotecario nazionale"
,

		property
 =
 "P396"
,

		link
     =
 function
(
id
)

			return
 "http://id.sbn.it/af/"
..
id

		end
,

	},

	{

		name
     =
 "NLA"
,

		hint
     =
 "Biblioteka Narodowa Australii"
,

		property
 =
 "P409"
,

		link
     =
 function
(
id
)

			return
 "http://nla.gov.au/anbd.aut-an"
..
id

		end
,

	},

	{

		name
     =
 "BNCF"
,

		hint
     =
 ":it:Biblioteca Nazionale Centrale di Firenze"
,

		property
 =
 "P508"
,

		link
     =
 function
(
id
)

			return
 "http://thes.bncf.firenze.sbn.it/termine.php?id="
..
id

		end
,

	},

	{

		name
     =
 "NKC"
,

		hint
     =
 "Biblioteka Narodowa Republiki Czeskiej"
,

		property
 =
 "P691"
,

		link
     =
 function
(
id
)

			return
 "http://aut.nkp.cz/"
..
id

		end
,

	},

	{

		name
     =
 "DBNL"
,

		hint
     =
 ":nl:Digitale Bibliotheek voor de Nederlandse Letteren"
,

		property
 =
 "P723"
,

		link
     =
 function
(
id
)

			return
 "http://www.dbnl.org/auteurs/auteur.php?id="
..
id

		end
,

	},

	{

		name
     =
 "RSL"
,

		hint
     =
 ":ru:Российская государственная библиотека"
,

		property
 =
 "P947"
,

		link
     =
 function
(
id
)

			return
 "http://aleph.rsl.ru/F?func=find-b&find_code=SYS&adjacent=Y&local_base=RSL11&request="
..
id

		end
,

	},

	{

		name
     =
 "BNE"
,

		hint
     =
 "Hiszpa?ska Biblioteka Narodowa"
,

		property
 =
 "P950"
,

		link
     =
 function
(
id
)

			return
 "http://catalogo.bne.es/uhtbin/authoritybrowse.cgi?action=display&authority_id="
..
id

		end
,

	},

	{

		name
     =
 "BNR"
,

		hint
     =
 "Biblioteka Narodowa Rumunii"
,

		property
 =
 "P1003"
,

		link
     =
 function
(
id
)

			return
 "http://alephnew.bibnat.ro:8991/F?func=find-b&request="
..
id
..
"&find_code=SYS&adjacent=Y&local_base=NLR10"

		end
,

	},

	{

		name
     =
 "NTA"
,

		hint
     =
 "Holenderska Biblioteka Narodowa"
,

		property
 =
 "P1006"
,

		link
     =
 function
(
id
)

			--return "http://opc4.kb.nl/PPN?PPN="..id

			return
 "http://data.bibliotheken.nl/doc/thes/p"
..
id

		end
,

	},

	{

		name
     =
 "BIBSYS"
,

		hint
     =
 "BIBSYS"
,

		property
 =
 "P1015"
,

		link
     =
 function
(
id
)

			return
 "https://authority.bibsys.no/authority/rest/authorities/html/"
..
id

		end
,

	},

	{

		name
     =
 "CALIS"
,

		hint
     =
 ":zh:中?高等?育文?保障系?"
,

		property
 =
 "P270"
,

		link
     =
 function
(
id
)

			return
 "http://opac.calis.edu.cn/aopac/ajsp/detail.jsp?actionfrom=1&actl=CAL++"
..
id
..
"%23"

		end
,

	},

	{

		name
     =
 "CiNii"
,

		hint
     =
 ":jp:CiNii"
,

		property
 =
 "P271"
,

		link
     =
 function
(
id
)

			return
 "http://ci.nii.ac.jp/author/"
..
id

		end
,

	},

	{

		name
     =
 "Open Library"
,

		hint
     =
 ":en:Open Library"
,

		property
 =
 "P648"
,

		link
     =
 function
(
id
)

			return
 "https://openlibrary.org/books/"
..
id

		end
,

	},

	{

		name
     =
 "PLWABN"
,

		hint
     =
 "Biblioteka Narodowa (Warszawa)"
,

		property
 =
 "P7293"
,

		link
     =
 function
(
id
)

			return
 "https://dbn.bn.org.pl/descriptor-details/"
..
id

		end
,

	},

	{

		name
     =
 "NLP"
,

		hint
     =
 "Biblioteka Narodowa (Warszawa)"
,

		property
 =
 "P1695"
,

		disable
  =
 function
(
entityId
)

			return
 has
(
entityId
,
 "P7293"
)

		end
,

		link
     =
 function
(
id
)

			if
 id
:
byte
(
1
)
 ~=
 65
 then

				local
 x
 =
 mw
.
title
.
new
(
"Module:Kontrola autorytatywna/P1695/invalid"
).
id

				return
 "https://dbn.bn.org.pl/descriptor-details/"
..
id

			end

			
			local
 y
 =
 mw
.
title
.
new
(
"Module:Kontrola autorytatywna/P1695/enabled"
).
id

			return
 "https://dbn.bn.org.pl/descriptor-details/"
..
id

		end
,

	},

	{

		name
     =
 "NUKAT"
,

		hint
     =
 "NUKAT"
,

		property
 =
 "P1207"
,

		link
     =
 function
(
id
)

			local
 good
 =
 string.match
(
id
,
 "^[npst] %d%d%d%d%d%d%d%d%d%d$"
)

					or
 string.match
(
id
,
 "^[npst]  %d%d%d%d%d%d%d%d$"
)

			if
 not
 good
 then

				local
 prefix
 =
 string.sub
(
id
,
1
,
1
)

				local
 number
 =
 string.sub
(
id
,
2
)

				local
 infix
 =
 #
number
 ==
 8
 and
 "%20%20"
 or
 "%20"

				good
 =
 prefix
..
infix
..
number

			end

			
			local
 linkid
,
 x
 =
 string.gsub
(
good
,
 ' '
,
 '%%20'
)

			return
 "http://nukat.edu.pl/aut/"
..
linkid

		end
,

	},

	{

		name
     =
 "OBIN"
,

		hint
     =
 "Dictionary of National Biography"
,

		property
 =
 "P1415"
,

		link
     =
 function
(
id
)

			return
 "https://doi.org/10.1093/ref:odnb/"
..
id

		end
,

	},

	{

		name
     =
 "J9U"
,

		hint
     =
 "Biblioteka Narodowa Izraela"
,

		property
 =
 "P8189"
,

		link
     =
 function
(
id
)

			return
 "http://olduli.nli.org.il/F/?func=find-b&local_base=NLX10&find_code=UID&request="
..
id

		end
,

	},

	{

		name
     =
 "PTBNP"
,

		hint
     =
 "Biblioteka Narodowa Portugalii"
,

		property
 =
 "P1005"
,

		link
     =
 function
(
id
)

			return
 "http://urn.bn.pt/nca/unimarc-authorities/txt?id="
..
id

		end
,

	},

	{

		name
     =
 "CANTIC"
,

		hint
     =
 ":ca:Cataleg d'autoritats de noms i titols de Catalunya"
,

		property
 =
 "P1273"
,

		link
     =
 function
(
id
)

			return
 "http://cantic.bnc.cat/registres/CUCId/"
..
id

		end
,

	},

	{

		name
     =
 "LNB"
,

		hint
     =
 "Biblioteka Narodowa Łotwy"
,

		property
 =
 "P1368"
,

		link
     =
 function
(
id
)

			return
 "https://kopkatalogs.lv/F?func=direct&local_base=lnc10&doc_number="
..
id
..
"&P_CON_LNG=ENG"

		end
,

	},

	{

		name
     =
 "NSK"
,

		hint
     =
 ":hr:Nacionalna i sveu?ili?na knji?nica u Zagrebu"
,

		property
 =
 "P1375"
,

		link
     =
 function
(
id
)

			return
 "http://katalog.nsk.hr/F/?func=direct&doc_number="
..
id
..
"&local_base=nsk10"

		end
,

	},

	{

		name
     =
 "BNA"
,

		hint
     =
 ":es:Biblioteca Nacional de la Republica Argentina"
,

		property
 =
 "P3788"
,

		link
     =
 function
(
id
)

			return
 "http://catalogo.bn.gov.ar/F/?func=direct&doc_number="
..
id
..
"&local_base=BNA10"

		end
,

	},

	{

		name
     =
 "CONOR"
,

		hint
     =
 ":sl:CONOR"
,

		property
 =
 "P1280"
,

		link
     =
 function
(
id
)

			return
 "https://plus.cobiss.si/opac7/conor/"
..
id

		end
,

	},

	{

		name
     =
 "BNC"
,

		hint
     =
 ":es:Biblioteca Nacional de Chile"
,

		property
 =
 "P1890"
,

		link
     =
 function
(
id
)

			return
 "http://www.bncatalogo.cl/F?func=direct&local_base=red10&doc_number="
..
id

		end
,

	},

	{

		name
     =
 "ΕΒΕ"
,

		hint
     =
 "Grecka Biblioteka Narodowa"
,

		property
 =
 "P3348"
,

		link
     =
 function
(
id
)

			return
 "http://data.nlg.gr/resource/authority/record"
..
id

		end
,

	},

	{

		name
     =
 "BLBNB"
,

		hint
     =
 "Brazylijska Biblioteka Narodowa"
,

		property
 =
 "P4619"
,

		link
     =
 function
(
id
)

			return
 "http://acervo.bn.br/sophia_web/autoridade/detalhe/"
..
id

		end
,

	},

	{

		name
     =
 "KRNLK"
,

		hint
     =
 "Biblioteka Narodowa Korei"
,

		property
 =
 "P5034"
,

		link
     =
 function
(
id
)

			return
 "https://librarian.nl.go.kr/LI/contents/L20101000000.do?id="
..
id

		end
,

	},

	{

		name
     =
 "LIH"
,

		hint
     =
 "Litewska Biblioteka Narodowa im. Martynasa Ma?vydasa"
,

		property
 =
 "P7699"
,

		link
     =
 function
(
id
)

			return
 "https://lnb.libis.lt/simpleSearch.do?doSearch=1&AI001="
..
mw
.
uri
.
encode
(
id
,
"PATH"
)

		end
,

	},

	{

		name
     =
 "NSZL"
,

		hint
     =
 "Pa?stwowa Biblioteka Szechenyiego"
,

		property
 =
 "P3133"
,

		link
     =
 function
(
id
)

			return
 "http://nektar.oszk.hu/auth/"
..
id

		end
,

	},

	{

		name
     =
 "RISM"
,

		hint
     =
 "Repertoire International des Sources Musicales"
,

		property
 =
 "P5504"
,

		link
     =
 function
(
id
)

			return
 "https://rism.online/"
..
id

		end
,

	},

    {

		name
     =
 "GIA"
,

		hint
     =
 "Getty Iconography Authority"
,

		property
 =
 "P5986"
,

		link
     =
 function
(
id
)

			return
 "http://www.getty.edu/cona/CONAIconographyRecord.aspx?iconid="
..
id

		end
,

	},

	-- Zawsze na ko?cu / Always last !!!

	{

		name
     =
 "WorldCat"
,

		hint
     =
 "WorldCat"
,

		property
 =
 "P7859"
,

		link
     =
 function
(
id
)

			return
 "http://www.worldcat.org/identities/"
..
id

		end
,

	},

}


local
 getDescription
 =
 function
 (
entityId
,
 force
)

	local
 needLabel
 =
 false

	local
 site
 =
 mw
.
wikibase
.
getSitelink
(
entityId
)

	local
 label
 =
 mw
.
wikibase
.
getLabelByLang
(
entityId
,
 'pl'
)

	if
 not
 label
 then

		for
 i
,
 l
 in
 ipairs
(
resources
.
fallbackLabels
)
 do

			label
 =
 mw
.
wikibase
.
getLabelByLang
(
entityId
,
 l
)

			if
 label
 then

				needLabel
 =
 true

				break

			end

		end

	end

		
	if
 site
 and
 label
 then

		return
 "[["
..
site
..
"|"
..
label
..
"]]"
,
 needLabel

	elseif
 site
 then

		return
 "[["
..
site
..
"]]"
,
 needLabel

	elseif
 label
 then

		return
 label
,
 needLabel

	elseif
 force
 then

		return
 entityID
,
 true

	end

end


local
 findDescription
 =
 function
 (
entityId
,
 sourceProps
)

	local
 alt
 =
 nil

	for
 i
,
 prop
 in
 ipairs
(
sourceProps
)
 do

		for
 j
,
 v
 in
 ipairs
(
mw
.
wikibase
.
getBestStatements
(
entityId
,
 prop
))
 do

			if
 (
v
.
mainsnak
.
snaktype
 ==
 "value"
)

			and
 (
v
.
mainsnak
.
datatype
 ==
 "wikibase-item"
)
 then

				local
 qid
 =
 v
.
mainsnak
.
datavalue
.
value
.
id

				--	or "Q"..v.mainsnak.datavalue.value["numeric-id"]

				local
 description
,
 needLabel
 =
 getDescription
(
qid
,
 false
)

				if
 description
 and
 not
 needLabel
 then

					return
 description
,
 false

				end


				alt
 =
 alt
 or
 description

			end

		end

	end

	
	return
 alt
,
 alt

end


local
 insertHeader
 =
 function
(
title
,
 entityId
,
 result
,
 before
,
 after
)

	
	local
 determineDnbType
 =
 function
()

		if
 isHumanPerson
(
entityId
)
 then

			return
 "p"

		end

		
		-- pozostałe testy

		if
 hasAny
(
entityId
,
 {
 "P1687"
,
 "P1963"
 })
 then

			return
 "s"

		elseif
 hasAny
(
entityId
,
 {
"P27"
,
 "P26"
,
 "P25"
,
 "P22"
,
 "P40"
,
 "P1317"
})
 then

			return
 "p"

		elseif
 hasAny
(
entityId
,
 {
"P50"
,
 "P170"
,
 "P86"
,
 "P87"
,
 "P676"
,
 "P435"
})
 then

			return
 "w"

		elseif
 hasAny
(
entityId
,
 {
"P112"
,
 "P159"
,
 "P169"
,
 "P488"
,
 "P355"
,
 "P740"
})
 then

			return
 "k"

		elseif
 hasAny
(
entityId
,
 {
"P150"
,
 "P610"
,
 "P1589"
,
 "P85"
,
 "P35"
,
 "P36"
,
 "P47"
,
 "P984"
,
 "P474"
,
 "P982"
,
 "P300"
,
 "P901"
})
 then

			-- P625 cannot be used, there are some organizations, events, and even persons with this property

			return
 "g"

		end

	end

	
	local
 editLabelLink
 =
 ""

	local
 typClass
 =
 "normdaten-andere"

	local
 description
 =
 ''

	local
 needLabel
 =
 false

	if
 entityId
 then

		local
 typ
 =
 determineDnbType
()
 or
 "fehlt"

		typClass
 =
 "normdaten-typ-"
..
typ

		if
 entityId
 ~=
 mw
.
wikibase
.
getEntityIdForCurrentPage
()
 then

			description
,
 needLabel
 =
 getDescription
(
entityId
,
 true
)

			if
 needLabel
 then

				editLabelLink
 =
 string.format
(
resources
.
editLabelLink
,
 entityId
)

			end

		elseif
 typ
 ==
 'p'
 then

			-- "człowiek" -> "osoba"

			description
 =
 resources
.
descriptions
[
typ
]

		else

			description
,
 needLabel
 =
 findDescription
(
entityId
,
 resources
.
nativeTypes
)

			description
 =
 description
 or
 resources
.
descriptions
[
typ
]

		end

	end

	
	if
 needLabel
 then

		description
 =
 description
..
resources
.
catMissingLabel

	end


	if
 description
 and
 (
#
description
 >
 0
)
 then

		title
 =
 title
..
'&nbsp;(<span class="description">'
 ..
 description
..
 "</span>)"
 ..
 editLabelLink

	end

	
	table.insert
(
result
,
 1
,
 '<div class="'
..
typClass
..
'">'
)

	table.insert
(
result
,
 2
,
 '<div>'
..
title
..
":"
..
'</div>'
)

	if
 before
 then
 table.insert
(
result
,
 3
,
 before
)
 end

	if
 after
 then
 table.insert
(
result
,
 after
)
 end

	table.insert
(
result
,
"</div>"
)

end


local
 formats
 =
 {

	classic
 =
 function
(
info
,
 identifiers
)

		local
 result
 =
 {}

		table.insert
(
result
,
 "[["
)

		table.insert
(
result
,
 info
.
hint
)

		table.insert
(
result
,
 "|"
)

		table.insert
(
result
,
 info
.
name
)

		table.insert
(
result
,
 "]]"
)

		local
 show
 =
 info
.
show
 or
 function
(
id
)
 return
 id
 end

		for
 i
,
 id
 in
 ipairs
(
identifiers
)
 do

			table.insert
(
result
,
 (
i
 ==
 1
)
 and
 ":"
 or
 ","
)

			table.insert
(
result
,
 "&thinsp;<span class=
\"
uid
\"
>["
)

			table.insert
(
result
,
 info
.
link
(
id
))

			table.insert
(
result
,
 " "
)

			table.insert
(
result
,
 show
(
id
))

			table.insert
(
result
,
 "]</span>"
)

		end

		
		return
 table.concat
(
result
,
 ""
)

	end
,

	
	mini
 =
 function
(
info
,
 identifiers
)

		local
 result
 =
 {}

		if
 #
identifiers
 ==
 1
 then

			-- simple link with authority name

			local
 id
 =
 identifiers
[
1
]

			table.insert
(
result
,
 "["
)

			table.insert
(
result
,
 info
.
link
(
id
))

			table.insert
(
result
,
 " "
)

			table.insert
(
result
,
 string.format
(
info
.
format
 or
 "<span title=
\"
%s
\"
>%s</span>"
,
 id
,
 info
.
name
))

			table.insert
(
result
,
 "]"
)

			return
 table.concat
(
result
,
 ""
)

		end


		table.insert
(
result
,
 info
.
name
)

		for
 i
,
 id
 in
 ipairs
(
identifiers
)
 do

			table.insert
(
result
,
 (
i
 ==
 1
)
 and
 ":"
 or
 ","
)

			table.insert
(
result
,
 "&thinsp;["
)

			table.insert
(
result
,
 info
.
link
(
id
))

			table.insert
(
result
,
 " "
)

			table.insert
(
result
,
 string.format
(
"<span title=
\"
%s
\"
>%s</span>"
,
 id
,
 tostring
(
i
)))

			table.insert
(
result
,
 "]"
)

		end

		
		return
 table.concat
(
result
,
 ""
)

	end
,

}

	
local
 show
 =
 function
(
entityId
,
 argStyle
)


	local
 identifiers
 =
 function
 (
info
)

		local
 result
 =
 {}


		if
 info
.
disable
 and
 info
.
disable
(
entityId
)
 then

			return
 result
;

		end


		for
 i
,
 v
 in
 ipairs
(
mw
.
wikibase
.
getBestStatements
(
entityId
,
 info
.
property
))
 do

			if
 v
.
mainsnak
.
snaktype
 ==
 "value"
 then

				table.insert
(
result
,
 v
.
mainsnak
.
datavalue
.
value
)

			end

		end


		return
 result

	end

	
	local
 result
 =
 {}

	local
 formatItems
 =
 formats
[
argStyle
]
 or
 formats
.
classic

	for
 i
,
 info
 in
 ipairs
(
sources
)
 do

		local
 list
 =
 identifiers
(
info
)

		if
 #
list
 >
 0
 then

			table.insert
(
result
,
 "<li>"
..
formatItems
(
info
,
 list
)
..
"</li>"
)

		end

	end

	
	if
 #
result
 >
 0
 then

		insertHeader
(
resources
.
title
,
 entityId
,
 result
,
 "<ul>"
,
 "</ul>"
)

		return
 table.concat
(
result
,
 ""
);

	end

end


local
 findPropertyDescription
 =
 function
(
pid
)

	local
 description
,
 needLabel
 =
 findDescription
(
pid
,
 {
"P1629"
})

	if
 not
 description
 or
 (
#
description
 ==
 0
)
 or
 needLabel
 then

		description
,
 needLabel
 =
 getDescription
(
pid
,
 false
)

		if
 not
 description
 or
 (
#
description
 ==
 0
)
 or
 needLabel
 then

			mw
.
log
(
"KA "
..
pid
..
": Brak opisu cechy"
)

		else

			mw
.
log
(
"KA "
..
pid
..
": Brak elementu 'dedykowany typ dla' (P1629) w opisie cechy"
)

		end

	end

	
	return
 description
,
 needLabel

end


return
 {


[
"Dokumentacja"
]
 =
 function
(
frame
)

	local
 result
 =
 {}

	table.insert
(
result
,
 "{| class=wikitable
\n
!nazwa
\n
!cecha
\n
!dostawca
\n
"
)

	for
 i
,
 v
 in
 ipairs
(
sources
)
 do

		if
 i
 >
 0
 then

			table.insert
(
result
,
 "|-
\n
"
)

		end

		
		table.insert
(
result
,
 "|"
)

		table.insert
(
result
,
 v
.
name
)

		table.insert
(
result
,
 "
\n
"
)

		
		table.insert
(
result
,
 "|[[:d:Property:"
)

		table.insert
(
result
,
 v
.
property
)

		table.insert
(
result
,
 "|"
)

		table.insert
(
result
,
 v
.
property
)

		table.insert
(
result
,
 "]]
\n
"
)

		
		table.insert
(
result
,
 "|[["
)

		table.insert
(
result
,
 v
.
hint
)

		table.insert
(
result
,
 "]]
\n
"
)

	end

	
	table.insert
(
result
,
 "|-
\n
"
)

	table.insert
(
result
,
 '!colspan="3"|'
..
resources
.
encyklopediaTitle
..
'
\n
'
)

	for
 i
,
 b
 in
 ipairs
(
resources
.
encyklopedie
)
 do

		local
 pid
,
 name
 =
 mw
.
ustring
.
match
(
b
,
 "^(P[0-9]+) +(.+)$"
)

		if
 not
 pid
 then

			pid
 =
 b

		end

		
		local
 description
,
 needLabel
 =
 findPropertyDescription
(
pid
)

		if
 name
 or
 (
description
 and
 not
 needLabel
)
 then

			table.insert
(
result
,
 "|-
\n
"
)


			table.insert
(
result
,
 "|"
)

			table.insert
(
result
,
 name
 or
 ''
)

			table.insert
(
result
,
 "
\n
"
)

			
			table.insert
(
result
,
 "|[[:d:Property:"
)

			table.insert
(
result
,
 pid
)

			table.insert
(
result
,
 "|"
)

			table.insert
(
result
,
 pid
)

			table.insert
(
result
,
 "]]
\n
"
)

			
			table.insert
(
result
,
 "|"
)

			table.insert
(
result
,
 description
 or
 ''
)

			table.insert
(
result
,
 "
\n
"
)

		end

	end

	
	table.insert
(
result
,
 "|-
\n
"
)

	table.insert
(
result
,
 '!colspan="3"|'
..
resources
.
otherTitle
..
'
\n
'
)

	for
 i
,
 b
 in
 ipairs
(
resources
.
bonus
)
 do

		local
 pid
,
 name
 =
 mw
.
ustring
.
match
(
b
,
 "^(P[0-9]+) +(.+)$"
)

		if
 not
 pid
 then

			pid
 =
 b

		end

		
		local
 description
,
 needLabel
 =
 findPropertyDescription
(
pid
)

		if
 name
 or
 (
description
 and
 not
 needLabel
)
 then

			table.insert
(
result
,
 "|-
\n
"
)


			table.insert
(
result
,
 "|"
)

			table.insert
(
result
,
 name
 or
 ''
)

			table.insert
(
result
,
 "
\n
"
)

			
			table.insert
(
result
,
 "|[[:d:Property:"
)

			table.insert
(
result
,
 pid
)

			table.insert
(
result
,
 "|"
)

			table.insert
(
result
,
 pid
)

			table.insert
(
result
,
 "]]
\n
"
)

			
			table.insert
(
result
,
 "|"
)

			table.insert
(
result
,
 description
 or
 ''
)

			table.insert
(
result
,
 "
\n
"
)

		end

	end

	table.insert
(
result
,
 "|}"
)

	
	return
 table.concat
(
result
,
 ""
)

end
,

	
[
"Poka?"
]
 =
 function
 (
frame
)

	
	local
 args
 =
 frame
.
args

	local
 parent
 =
 frame
:
getParent
().
args

	
	local
 entityId
 =
 mw
.
wikibase
.
getEntityIdForCurrentPage
()

	if
 (
mw
.
title
.
getCurrentTitle
()
 ~=
 0
)
 and
 (
args
[
1
]
 or
 parent
[
1
])
 then

		entityId
 =
 args
[
1
]
 or
 parent
[
1
]
 or
 entityId

	end


	if
 not
 entityId
 then

		return

	end

	
	local
 argStyle
 =
 args
.
style

	
	local
 result
 =
 {

		-- typical result

		show
(
entityId
,
 argStyle
)
	
	}

	
	local
 group
 =
 false

	local
 idGroupOfHumans
 =
 'Q16334295'

	for
 i
,
 v
 in
 ipairs
(
mw
.
wikibase
.
getBestStatements
(
entityId
,
 "P31"
))
 do

		if
 v
.
mainsnak
.
snaktype
 ==
 "value"
 then

			local
 id
 =
 v
.
mainsnak
.
datavalue
.
value
.
id

			if
 id
 ==
 idGroupOfHumans
 then

				group
 =
 true

				break

			end

			
			local
 status
,
 r
 =
 pcall
(
mw
.
wikibase
.
getReferencedEntityId
,
 id
,
 'P279'
,
 {
 idGroupOfHumans
 })

			if
 not
 status
 then

				-- za du?o wywoła?, max 3

				break

			end

			
			if
 r
 then

				group
 =
 true

				break

			end

		end

	end


	if
 group
 then

		local
 p527
 =
 mw
.
wikibase
.
getBestStatements
(
entityId
,
 "P527"
)

		-- dodawaj nie wi?cej ni? 5 osob dodatkowo

		if
 (
#
p527
 >
 0
)
 and
 (
#
p527
 <=
 5
)
 then

			for
 i
,
 v
 in
 ipairs
(
p527
)
 do

				if
 v
.
mainsnak
.
snaktype
 ==
 "value"
 then

					local
 id
 =
 v
.
mainsnak
.
datavalue
.
value
.
id

					--	or "Q"..tostring(v.mainsnak.datavalue.value["numeric-id"])

					if
 isHumanPerson
(
id
)
 then

						local
 s
 =
 show
(
id
,
 argStyle
)

						if
 s
 then

							table.insert
(
result
,
 s
)

						end

					end

				end

			end

		end

	end

	
	-- czas na bonusy

	local
 genericPrinter
 =
 false
 -- lazy loaded

	
	local
 loadBonusSection
 =
 function
 (
bonusTitle
,
 bonusItems
)

		local
 bonus
 =
 {}

		for
 i
,
 b
 in
 ipairs
(
bonusItems
)
 do

			local
 pid
,
 name
 =
 mw
.
ustring
.
match
(
b
,
 "^(P[0-9]+) +(.+)$"
)

			if
 not
 pid
 then

				pid
 =
 b

			end

			
			local
 prop
 =
 mw
.
wikibase
.
getBestStatements
(
entityId
,
 pid
)

			if
 prop
 and
 (
#
prop
 >
 0
)
 then

				local
 description
 =
 name

				local
 needLabel
 =
 false

				if
 not
 description
 then

					description
,
 needLabel
 =
 findPropertyDescription
(
pid
)

				end

				if
 description
 and
 (
#
description
 >
 0
)
 and
 not
 needLabel
 then

					local
 expectedPattern
 =
 "^%[(%S+) (.-)%]$"

					local
 uids
 =
 {}

					for
 j
,
 p
 in
 ipairs
(
prop
)
 do

						if
 not
 p
.
mainsnak
 or
 (
p
.
mainsnak
.
snaktype
 ~=
 "value"
)
 then

							local
 x
 =
 mw
.
title
.
new
(
"Module:Kontrola autorytatywna/Poka?/InvalidData"
).
id

							mw
.
logObject
(
p
,
 "KA BAD DATA"
)

						else

							-- lazy loading once

							genericPrinter
 =
 genericPrinter
 or
 require
(
"Moduł:Wikidane/format/string"
)

							local
 s
 =
 genericPrinter
.
format
(
p
.
mainsnak
,
 {})

							if
 s
 and
 (
#
s
 >
 0
)
 then

								local
 link
,
 id
 =
 mw
.
ustring
.
match
(
s
,
 expectedPattern
)

								if
 link
 then

									table.insert
(
uids
,
 s
)

								end

							end

						end

					end

					if
 #
uids
 >
 0
 then

						local
 info
 =
 {

							show
 =
 function
(
s
)

								local
 link
,
 id
 =
 mw
.
ustring
.
match
(
s
,
 expectedPattern
)

								return
 id

							end
,

							link
 =
 function
(
s
)

								local
 link
,
 id
 =
 mw
.
ustring
.
match
(
s
,
 expectedPattern
)

								return
 link

							end
,

						}

						local
 hint
,
 name
 =
 mw
.
ustring
.
match
(
description
,
 "^%[%[(.-)|(.-)%]%]$"
)

						if
 hint
 then

							info
.
hint
 =
 hint

							info
.
name
 =
 name

						else

							local
 sitelink
 =
 mw
.
ustring
.
match
(
description
,
 "^%[%[(.-)%]%]$"
)

							if
 name
 then

								info
.
hint
 =
 sitelink

								info
.
name
 =
 sitelink

							else

								info
.
hint
 =
 ":d:Property:"
..
pid

								info
.
name
 =
 description

							end

						end

						local
 formatItems
 =
 formats
[
argStyle
]
 or
 formats
.
classic

						table.insert
(
bonus
,
 "
\n
*"
..
formatItems
(
info
,
 uids
))

					end

				end

			end

		end

		
		if
 #
bonus
 >
 0
 then

			insertHeader
(
bonusTitle
,
 (
#
result
 ==
 0
)
 and
 entityId
,
 bonus
,
 "
\n
"
,
 "
\n
"
)

			for
 i
,
 b
 in
 ipairs
(
bonus
)
 do

				table.insert
(
result
,
 b
)

			end

		end

	end

	
	loadBonusSection
(
resources
.
encyklopediaTitle
,
 resources
.
encyklopedie
)

	loadBonusSection
(
resources
.
otherTitle
,
 resources
.
bonus
)


	if
 #
result
 >
 0
 then

		table.insert
(
result
,
 1
,
 '<div id="normdaten" class="catlinks">'
)

		table.insert
(
result
,
 "</div>"
)

		return
 table.concat
(
result
,
 ""
)

	end

end
,


[
"Zestaw"
]
 =
 function
 (
frame
)

	local
 t
 =
 frame
.
args
[
"tytuł"
]
 or
 "[[Kontrola autorytatywna]]"

	local
 e
 =
 frame
.
args
[
"pusto"
]

	local
 sd
 =
 require
(
"Module:Wikidane/select"
)

	local
 f
 =
 require
(
"Module:Wikidane/format"
)

	local
 result
 =
 {}

	local
 i
 =
 1

	while
 true
 do

		local
 p
 =
 frame
.
args
[
i
]

		if
 not
 p
 then

			break

		end

		
		local
 pid
,
 qid
,
 prop
 =
 sd
.
selectProperty
(
p
,
 {})

		if
 qid
 then

			local
 ppid
,
 pqid
,
 pprop
 =
 sd
.
selectProperty
(
"P1629"
,
 {},
 pid
)

			if
 pqid
 then

				local
 s
 =
 "
\n
*"
..
f
.
run
(
frame
,
 ppid
,
 pprop
)
..
":&nbsp;"
..
f
.
run
(
frame
,
 pid
,
 prop
)

				table.insert
(
result
,
 s
)

			end

		end

		
		i
 =
 i
 +
 1

	end

	
	if
 #
result
 >
 0
 then

		table.insert
(
result
,
 1
,
 '<div class="catlinks">'
)

		table.insert
(
result
,
 2
,
 t
)

		local
 pid
,
 qid
,
 prop
 =
 sd
.
selectProperty
(
"P31"
,
 {},
 nil
,
 1
)

		table.insert
(
result
,
 3
,
 qid
 and
 (
" ("
..
f
.
run
(
frame
,
 pid
,
 prop
)
..
"):"
)
 or
 ":"
)

		table.insert
(
result
,
 "</div>"
)

		return
 table.concat
(
result
)

	end

	
	return
 e

end
,


}