VOOZH about

URL: https://hu.wikipedia.org/wiki/Modul:Wikidata

⇱ Modul:Wikidata – Wikipédia


Ugrás a tartalomhoz
A Wikipédiából, a szabad enciklopédiából
Ez a közzétett változat, ellenőrizve: 2026. június 24.
Pontosságellenőrzött

👁 Image
Wikidata[mi ez?] • [dokumentáció: mutat, szerkeszt] • [tesztek: sikeres: 12, sikertelen: 0, kihagyva: 0 (részletek)]

Wikidata-adatok formázott megjelenítése, a {{Wikidata}} sablon implementációja.

Wikikódból hívható függvények

formatStatements

Paraméterek

property
A Wikidatában tárolt tulajdonság azonosítója. Megadható névvel is. Például p856.
value
A Wikidatában tárolt érték helyett megjelenítendő érték.
entityId
A cikkhez kapcsolt Wikidata-elem helyett a megadott Wikidata-elemből olvassa ki a tulajdonság értékét.
pageTitle
A Wikidatához kapcsolt lap címe. Nem adható entityId-vel együtt.
qualProp
Állítás minősítőjének tulajdonságazonosítója. Példa: P548.
qualValue
A szűrésnél alkalmazott érték. Több érték is adható, vesszővel elválasztva. Példa: Q3295609,Q51930650,Q2122918,Q21727724,Q1072356.
direction
Koordináták dimenziója. Értéke latitude, longitude vagy both lehet: az első kettő a további gépi feldolgozásra alkalmas számot adja vissza, a harmadik a Modul:Coordinate segítségével formázott eredményt ad.
link
Értéke nem, ha azt szeretnénk, hogy a függvény értéke ne link legyen, hanem csak a címke; csak, ha pedig azt szeretnénk, hogy csak a kapcsolt Wikipédia-szócikk.
externalId
Helyileg megadott külső azonosító formázása Wikidata helyett. Külső azonosítóknál ezt kell megadni második paraméter helyett!
externalIdLabel
Külső azonosítóhoz tartozó hivatkozás megjelenítési szövege.
link szövege
URL típusú tulajdonság hivatkozásának megjelenő szövege. Visszamenőleges kompatibilitás miatt format=wikilink beállítást tesz szükségessé. Üres érték esetén számozott hivatkozás jelenik meg. Ha csak format van megadva, a tulajdonság neve lesz a szöveg.
lang
A címke nyelvének megadása, több nyelv esetén vesszővel elválasztva, szóköz nélkül, ekkor az első olyan nyelven jeleníti meg a címkét, amin létezik. Alapértelmezetten hu,en. Nyelvvel jelölt szövegek (monolingual text) esetén a nyelv szűrőfeltétele. all értékkel nincs szűrés.
first
Ha azt szeretnénk, hogy csak egy értéket adjon vissza, például képeknél.
showQualifiers
Összes minősítő megjelenítése, vagy megadott minősítők megjelenítése (ha a paraméterérték tulajdonságazonosítók listája, pl. P580, P582).
showReferences
Forráshivatkozások megjelenítése. Alapértelmezetten legfeljebb 5 forráshivatkozás jelenik meg; ha a paraméter értéke egy pozitív egész szám, akkor annyi a limit, ha , akkor pedig az összes (esetenként több tucat!) forráshivatkozás megjelenik.
rank
Értékei: preferred, normal, deprecated, all, valid. Ha nincs megadva, akkor a legmagasabb rangúakat adja vissza. A valid a preferred és a normal együttesen.
életkor
Értéke igen.
felsorolás
Az értékek felsorolásának típusa:
lista
pöttyözött lista
számozott lista
számozott lista
sorok
több érték esetén felsorolásjel nélküli lista, egy érték esetén sima szöveg (alapértelmezett)
szöveg
folyószöveg (értékek között vesszővel, utolsó érték előtt „és”-sel)
table
Lua-tömb
lenyíló
Hosszú listák megjelenítése nyitható listaként. Értéke egy szám. Ha a listának több eleme van, akkor nyitható listaként fog megjelenni. Lista, számozott lista és sorok felsorolásnál használható. Példa: Földközi-tenger.
format
raw
tárolt érték formázás nélkül
default
népesség formázása a {{Népesség}}(?) sablon alapmegjelenítése szerint
iso
dátum ISO 8601 formátumban
date-object
dátum a Modul:Time objektumával (csak modulból hívva van értelme)
percentage
számok megjelenítése százalékként
url
URL, például külső azonosító címe
wikilink
URL típusú tulajdonság formázása wikiszöveges külső hivatkozásként
unit
mennyiség mértékegysége. A lehetséges értékei a Modul:Convert/data modulban láthatóak. Például km2. Egyszerre több mértékegységben is meg tudja jeleníteni a mennyiséget. Ehhez a mértékegységeket + jellel kell felsorolni. Például km+mi.
showUnit
mértékegység megjelenítése a paraméter jelenléte esetén
roundDec
hány tizedesre kerekítse az átalakított értéket
sort
Rendezés több érték estén: üres vagy logikai igaz esetén címke szerint, Pxxx esetén a Pxxx minősítő szerint (a megadott minősítőket előre rendezve), egyébként a sort függvénnyel. sortDesc paraméter jelenléte esetén csökkenő sorrendben történik a rendezés.
sortDesc
Rendezés csökkenő sorrendben. A paraméter jelenléte esetén csökkenő sorrendben történik a rendezés, különben növekvő sorrendben.
dateformat
Dátumformátum a {{#time:}} értelmezőfüggvénynek (csak a népesség dátumánál működik, más helyzetben a változó pontosság – napra pontostól az évmilliárdig bármi lehet – és a függvény behatároltsága – csak 111-től 9999-ig értelmezi az éveket – miatt nincs értelme megadni egy fix formátumot).
punctuation
Központozás az utolsó érték és esetleges minősítői után, de a hozzá tartozó forráshivatkozás előtt. Általában felsorolás=lista esetén van értelme.

containsProperty

Wikidata-tulajdonság meglétének vizsgálata. Lásd {{Wikidata-f}}.

Luából hívható függvények

containsPropertyWithValue

Tulajdonág értékének vizsgálata.

withHighestRank

Tulajdonság értékeinek szűrése a legmagasabb fokozattal (rank) rendelkező értékekre.

formatStatement

Tulajdonság egy értékének formázott megjelenítése.

Használt modulok, sablonok

  • Modul:Arguments – paraméterek beolvasásához
  • Modul:Time – dátum kiírásához (formázottan)
  • {{plainlist}} – alapértelmezett kimenetnél a többelemű listák formázásához
require('strict')
localp={}
localgetArgs=require('Modul:Arguments').getArgs
localframel=mw.getCurrentFrame()
locallang=mw.getContentLanguage()
localformatStatements
localref_names={}
locali18n={
['errors']={
['property-param-not-provided']="Hiányzó ''property='' paraméter",
['property-not-found']='Érvénytelen tulajdonság: %s',
['entity-not-found']='Nem létező Wikidata-elem',
['unknown-claim-type']='Ismeretlen az állítás típusa',
['unknown-snak-type']='Ismeretlen a snak típusa',
['unknown-datavalue-type']='Ismeretlen az érték típusa',
['unknown-entity-type']='Ismeretlen a Wikidata-elem típusa',
['unknown-value-module']="A ''value-module'' és ''value-function'' paramétert egyszerre kell beállítani",
['value-module-not-found']="A ''value-module'' nem létező modulra mutat",
['value-function-not-found']="A ''value-function'' nem létező funkcióra mutat",
['globecoordinate-direction']="Az érték típusa ''globecoordinate:'' kell ''direction=latitude'', ''longitude'' vagy ''both''",
['invalid-value']='Érvénytelen érték',
['unknown-unit']='Ismeretlen mértékegység: %s',
['excluding-arguments']='Nem adható %s és %s egyidejűleg',
},
['somevalue']="''nem ismert''",
['novalue']="''nincs''"
}
localciteTemplateArgs={
cite_web={
title='Cite web',
CitationClass='web',
args={
P50='author',
P407='language',
P248='website',
P304='pages',
P123='publisher',
P577='date',
P1065='archiveurl',
P2960='archivedate',
P356='doi',
P813='accessdate',
P1683='quote'
}
},
cite_journal={
title='Cite journal',
CitationClass='journal',
args={
P50='author',
P577='date',
P407='language',
P1433='journal',
P291='location',
P478='volume',
P433='issue',
P304='pages',
P123='publisher',
P1065='archiveurl',
P2960='archivedate',
P356='doi',
P236='issn',
P888='jstor',
P698='pmid',
P932='pmc',
P813='accessdate',
P1683='quote'
}
},
cite_book={
title='CitLib',
ref_module='CitLib',
ref_function='_run',
args={
P50='aut',
P2093='aut',
P393='edi',
P291='loc',
P123='red',
P577='ann',
P179='ser',
P957='isbn',
P212='isbn',
P792='cap',
P478='vol',
P304='pag',
P813='accd',
P407='lan',
P1065='aurl',
P2960='archd',
P655='ass',
P98='ass'
}
},
}
-- In addition to url, title, author
localfunctionformatError(key,...)
error(i18n.errors[key]:format(...),2)
end
functionp.getUpperLevelOfType(property,typeId,entityId,item)
localresult,statements,visited={},{},{[itemanditem.idorentityId]=true}
localfunctiongetStatements(aEntityId,aItem)
localwb_statements
ifaItemthen
wb_statements=aItem:getBestStatements(property)
elseifaEntityIdthen
wb_statements=mw.wikibase.getBestStatements(aEntityId,property)
else
return
end
for_,sinipairs(wb_statements)do
ifs.mainsnak.snaktype=='value'then
localitemId='Q'..s.mainsnak.datavalue.value['numeric-id']
ifnotvisited[itemId]then
visited[itemId]=true
localitem2=mw.wikibase.getEntity(itemId)
ifp.containsPropertyWithValue(item2,'P31',typeId)then
statements[item2.id]=s
else
getStatements(nil,item2)
end
end
end
end
end
getStatements(entityId,item)
for_,sinpairs(statements)do
table.insert(result,s)
end
returnresult
end
localfunctionfirstValue(statements)
for_,statementinipairs(statements)do
ifstatement.rank=='preferred'then
return{statement}
end
end
for_,statementinipairs(statements)do
ifstatement.rank=='normal'then
return{statement}
end
end
return{}
end
localfunctionwithRank(statements,ranks)
localresult={}
for_,statementinipairs(statements)do
for_,rankinipairs(ranks)do
ifstatement.rank==rankthen
table.insert(result,statement)
break
end
end
end
returnresult
end
functionp.withHighestRank(statements)
localpreferred,normal={},{}
for_,statementinipairs(statements)do
ifstatement.rank=='preferred'then
table.insert(preferred,statement)
elseifstatement.rank=='normal'then
table.insert(normal,statement)
end
end
return#preferred>0andpreferredornormal
end
localfunctionatDate(statements,date)
localresult={}
localTime=require('Modul:Time')
localtime=Time.newFromIso8601(date,true)
ifnottimethen
returnstatements
end
localisQualified=false
for_,sinipairs(statements)do
localstartDate,endDate
ifs.qualifiersands.qualifiers.P580and#s.qualifiers.P580==1ands.qualifiers.P580[1].snaktype=='value'then
startDate=Time.newFromWikidataValue(s.qualifiers.P580[1].datavalue.value)
end
ifs.qualifiersands.qualifiers.P582and#s.qualifiers.P582==1ands.qualifiers.P582[1].snaktype=='value'then
endDate=Time.newFromWikidataValue(s.qualifiers.P582[1].datavalue.value)
end
ifstartDateorendDatethen
isQualified=true
end
ifnotstartDateandendDateandtime<=endDateor
startDateandnotendDateandstartDate<=timeor
startDateandendDateandstartDate<=timeandtime<=endDatethen
table.insert(result,s)
end
end
ifisQualifiedthen
returnresult
else
returnstatements
end
end
localfunctiongetEntityIdFromValue(value)
localprefix
ifvalue['entity-type']=='item'then
prefix='Q'
elseifvalue['entity-type']=='property'then
prefix='P'
else
formatError('unknown-entity-type')
end
returnprefix..value['numeric-id']
end
localfunctiongetChrDates(chrDate,entityId)
ifnotchrDatethen
return{}
end
ifchrDate:match('^P%d+$')then
localdates=mw.wikibase.getEntity(entityId):getBestStatements(chrDate)
localret={}
for_,vinipairs(dates)do
ifv.mainsnak.snaktype=='value'then
table.insert(ret,v.mainsnak.datavalue.value.time)
end
end
returnret
else
return{chrDate}
end
end
localfunctiongetChrQualifierDates(chrQualifierDate,statement)
ifnotchrQualifierDateornotchrQualifierDate:match('^P%d+$')then
return{}
end
ifnotstatement.qualifiersornotstatement.qualifiers[chrQualifierDate]then
return{}
end
localret={}
for_,vinipairs(statement.qualifiers[chrQualifierDate])do
ifv.snaktype=='value'then
table.insert(ret,v.datavalue.value.time)
end
end
returnret
end
localfunctiongetDatedStatement(dates,options,dateFields,item)
ifnotdateFieldsthen
dateFields={'atDate'}
end
localresult,conflict=nil,false
for_,vinipairs(dates)do
for_,winipairs(dateFields)do
options[w]=v
end
localstatement=formatStatements(options,item)
ifstatement==''then
statement=nil
end
ifstatementandresult==nilthen
result=statement
elseifstatement~=resultthen
conflict=true
end
end
ifnotconflictthen
returnresult
else
returnnil
end
end
localfunctionformatEntityId(entityId,options,statement)
locallink=mw.wikibase.sitelink(entityId)
ifoptions.link=='csak'then
returnlink
end
iflinkandoptions.link~='nem'andmw.ustring.sub(link,1,10)=='Kategória:'then
return'[['..link..']]'
end
locallabel
ifoptions.langthen
forlaninmw.text.gsplit(options.lang,',')do
label=mw.wikibase.getLabelByLang(entityId,lan)
iflabelthen
break
end
end
else
label=mw.wikibase.label(entityId)
end
ifoptions.labelPropertyandoptions.labelProperty~=''then
localoptions2={}
fork,vinpairs(options)do
ifk~='labelProperty'then
options2[k]=v
end
end
options2.property=options.labelProperty
options2.entityId=entityId
options2.rank='valid'
options2.link='nem'
options2.lang=options.langor'hu'
options2.firstAfter=true
options2['felsorolás']=nil-- felsorolásjel nélkül
locallabel2=formatStatements(options2)
iflabel2andlabel2~=''then
label=label2
end
end
ifoptions.chrPropertythen
localdates
ifoptions.chrDatethen
dates=getChrDates(options.chrDate,options.entityId)
elseifoptions.chrQualifierDateandstatementthen
dates=getChrQualifierDates(options.chrQualifierDate,statement)
else
-- getDatedStatement with an empty date object is a no-op
-- this should not happen if the module is used correctly
dates={}
end
localchrLabel=getDatedStatement(dates,{
property=options.chrProperty,
entityId=entityId,
rank='valid',
lang=options.langor'hu',
firstAfter=true,
['felsorolás']=nil-- felsorolásjel nélkül
})
ifchrLabelthen
label=chrLabel
end
end
iflabelandoptions.format=='ucfirst'then
label=lang:ucfirst(label)
end
iflinkandoptions.link~='nem'then
iflabelthen
ifmw.ustring.sub(label,2)==mw.ustring.sub(link,2)and
mw.ustring.lower(mw.ustring.sub(label,1,1))==mw.ustring.lower(mw.ustring.sub(link,1,1))then
return'[['..label..']]'
else
return'[['..link..'|'..label..']]'
end
else
return'[['..link..']]'
end
else
returnlabelorlink--TODO what if no links and label + fallback language?
end
end
localfunctionformatTimeValue(value,options)
ifoptions.format=='raw'then
returnvalue.time
else
localtime=require('Modul:Time').newFromWikidataValue(value)
iftimethen
ifoptions.format=='iso'then
returntostring(time)
elseifoptions.format=='date-object'then
returntime
end
returntime:formatDate(options)
else
formatError('invalid-value')
end
end
end
localfunctioncountryOf(itemId,options,noselflink,chrDate)
localfunctiongetStatement(dates,new_options,item)
returngetDatedStatement(dates,new_options,{'atDate','chrDate'},item)orformatStatements(new_options,item)
end
ifnotitemIdthen
returnnil
end
localitem=mw.wikibase.getEntity(itemId)
ifnotitemthen
returnnil
end
localdates=getChrDates(chrDate,options.entityId)
localnew_options={
property='P17',
chrProperty=options.chrProperty,
format='raw'
}
ifnoselflinkanditem.id==getStatement(dates,new_options,item)then
returnnil
end
new_options.format=nil
returngetStatement(dates,new_options,item)
end
localfunctionformatNum(amount)
ifamount<10000and-10000<amountthen
returntostring(amount):gsub('%.',',')
else
returnlang:formatNum(amount)
end
end
localfunctionformatDatavalue(datavalue,options,statement)
--Use the customize handler if provided
ifoptions['value-module']oroptions['value-function']then
ifnotoptions['value-module']ornotoptions['value-function']then
returnformatError('unknown-value-module')
end
localformatter=require('Module:'..options['value-module'])
ifformatter==nilthen
returnformatError('value-module-not-found')
end
localfun=formatter[options['value-function']]
iffun==nilthen
returnformatError('value-function-not-found')
end
returnfun(datavalue.value,options)
end
--Default formatters
ifdatavalue.type=='wikibase-entityid'then
localitemId=getEntityIdFromValue(datavalue.value)
ifoptions.format=='raw'then
returnitemId
end
localresult=formatEntityId(itemId,options,statement)
ifnotresultthen
returnnil
end
localcountry=options.format=='with_country'andcountryOf(itemId,options,true,options.chrDate)
returnresult..(countryand', '..countryor'')
elseifdatavalue.type=='string'then
returndatavalue.value--TODO ids + media
elseifdatavalue.type=='time'then
returnformatTimeValue(datavalue.value,options)
elseifdatavalue.type=='globecoordinate'then
ifoptions.format=='geohack'then
return'[[Fájl:OOjs UI icon mapPin-progressive.svg|16px|link=]] '..require('Modul:Coordinate').coord{
datavalue.value.latitude,
datavalue.value.longitude,
options.meta,
precision='wikidata',
format='dms'
}
end
ifoptions.direction=='latitude'then
returndatavalue.value.latitude
elseifoptions.direction=='longitude'then
returndatavalue.value.longitude
else
returnformatError('globecoordinate-direction')
end
elseifdatavalue.type=='quantity'then
ifoptions.format=='raw'then
returndatavalue.value.amount
end
localresult
localamount=tonumber(datavalue.value.amount)
ifdatavalue.value.unit=='1'then
ifoptions.unitthen
returnnil
end
ifoptions.format=='percentage'then
result=formatNum(amount*100)..'%'
else
result=formatNum(amount)
end
else
localunitId=datavalue.value.unit:match('Q%d+')
localsourceUnit=mw.loadData('Modul:Wikidata/units').wikidata_item_ids[unitId]
ifnotsourceUnitthen
ifnotoptions.unitandunitIdthen
localsym_hu,sym_mul
for_,stinipairs(mw.wikibase.getBestStatements(unitId,'P5061'))do-- unit symbol
sym_hu=p.formatStatement(st,{lang='hu'})
ifsym_huthen
break
end
sym_mul=sym_mulorp.formatStatement(st,{lang='mul'})
end
sym_hu=sym_huorsym_mul
result=formatNum(amount)..(unitId~='Q28390'and' 'or'')..(sym_huormw.wikibase.getLabel(unitId)orunitId)
else
formatError('unknown-unit',unitIdor'nil')
end
else
localtargetUnit=options.unitorsourceUnit
-- Help: [[:en:Help:Convert]]
result=require('Modul:Convert')._convert{
amount,
sourceUnit,
targetUnit,
options.roundDec~=''andoptions.roundDecornil,-- round output to N decimal places
disp=options.showUnitand'out'or'number'
}
end
end
returnresult
elseifdatavalue.type=='monolingualtext'then
locallangs=options.langor'hu'
iflangs=='all'orlangs=='~hu'anddatavalue.value.language~='hu'then
returndatavalue.value.text
end
forlaninmw.text.gsplit(langs,',')do
iflan:match('^%s*(.-)%s*$')==datavalue.value.languagethen
returndatavalue.value.text
end
end
returnnil
else
formatError('unknown-datavalue-type')
end
end
localfunctionformatExternalId(options,externalId)
ifoptions.format=='raw'then
returnexternalId
end
localformatterUrl=formatStatements{
entityId=options.property,
property='P1630',-- formatter URL
first=true
}
ifnotformatterUrlthen
returnexternalId
end
localurl=formatterUrl:gsub('%$1',((mw.uri.encode(externalId,'PATH'):gsub('%%2F','/')):gsub('%%','%%%%')))
ifoptions.format=='url'then
returnurl
end
returnstring.format('[%s %s]',url,options.externalIdLabel~=''andoptions.externalIdLabelorexternalId)
end
localfunctionformatUrl(url,property,options)
ifnotoptionsornotoptions.formatoroptions.format=='raw'oroptions.format=='url'then
returnurl
end
ifoptions.format=='wikilink'then
return('[%s %s]'):format(url,options['link szövege']ormw.wikibase.getLabel(property))
end
returnnil
end
-- Format an arbitrary snak. Parameters:
-- snak: the snak to format (required)
-- aOptions: a table of formatting options (optional)
-- statement: the statement of which this snak is the main snak of,
-- if it’s a main snak (optional)
localfunctionformatSnak(snak,aOptions,statement)
localoptions=aOptionsor{}
ifsnak.snaktype=='somevalue'then
returnoptions.somevalueor(options.format=='raw'and'somevalue'ori18n['somevalue'])
elseifsnak.snaktype=='novalue'then
returnoptions.format=='raw'and'novalue'ori18n['novalue']
elseifsnak.snaktype=='value'then
ifoptions['value-module']oroptions['value-function']then
returnformatDatavalue(snak.datavalue,options,statement)
end
ifsnak.datatype=='math'then
returnframel:extensionTag('math',snak.datavalue.value)
elseifsnak.datatype=='external-id'then
returnformatExternalId(options,snak.datavalue.value)
elseifsnak.datatype=='url'then
returnformatUrl(snak.datavalue.value,snak.property,options)
else
returnformatDatavalue(snak.datavalue,options,statement)
end
else
formatError('unknown-snak-type')
end
end
--[[
	Empty string result used in concatenations.
 ]]
localfunctionformatSnaks(snaks,options)
localformattedSnaks={}
for_,snakinipairs(snaks)do
table.insert(formattedSnaks,formatSnak(snak,options))
end
returnmw.text.listToText(formattedSnaks,options.separator,options.conjunction)
end
--[=[
	Implementation guidelines: [[d:Help:Sources]], [[:en:Module:Wd#References]]
--]=]
localfunctionformatReference(reference,options)
localstatedInItemId
localargs={}
localresult={}
localtplId='cite_web'
localstatedInItem
localfunctionformatProperty(prop,prop2,dashSeparated,extraOptions)
locallocalOptions=extraOptionsor{}
ifdashSeparatedthen
localOptions['felsorolás']=nil
localOptions.separator='&#8201;&#8211;&#8201;'
localOptions.conjunction='&#8201;&#8211;&#8201;'
else
localOptions['felsorolás']='szöveg'
end
localformatted=reference.snaks[prop]andformatSnaks(reference.snaks[prop],localOptions)
ifformattedandformatted~=''then
returnformatted
end
ifprop2then
formatted=reference.snaks[prop2]andformatSnaks(reference.snaks[prop2],localOptions)
ifformattedandformatted~=''then
returnformatted
end
end
ifstatedInItemthen
localOptions.property=prop
formatted=formatStatements(localOptions,statedInItem)
ifformattedandformatted~=''then
returnformatted
end
ifprop2then
localOptions.property=prop2
returnformatStatements(localOptions,statedInItem)
end
end
returnnil
end
localfunctionformatCS1DateValue(value)
ifvalue.precision>=11then
returnvalue.time:sub(2,11)
end
ifvalue.precision>=10then
returnlang:formatDate('F Y',value.time:sub(2,11))
end
returnvalue.time:sub(2,5)
end
localfunctionformatFirstValue(entityId,propertyId)
locallOptions={}
for_,sinipairs(mw.wikibase.getBestStatements(entityId,propertyId))do
ifs.mainsnak.snaktype=='value'then
ifpropertyId=='P407'then-- [[d:Property:P407]] language of work or name (Item)
-- [[d:Property:P218]] ISO 639-1 code (External identifier)
returnformatStatements{entityId=s.mainsnak.datavalue.value.id,property='P218',format='raw',first=true,excludespecial=true}
end
ifs.mainsnak.datatype=='time'then
ifs.mainsnak.datavalue.value.precision>=9then
returnformatCS1DateValue(s.mainsnak.datavalue.value)
end
lOptions={link='nem'}
end
returnp.formatStatement(s,lOptions)
end
end
returnnil
end
statedInItemId=reference.snaks.P248andreference.snaks.P248[1].snaktype=='value'andreference.snaks.P248[1].datavalue.value.idornil
ifstatedInItemIdthen
ifp.isOfType(statedInItemId,'Q191067')then-- [[d:Q191067]] article
tplId='cite_journal'
localpublishedInItemId
for_,sinipairs(mw.wikibase.getBestStatements(statedInItemId,'P1433'))do-- [[d:Property:P1433]] published in (Item)
ifs.mainsnak.snaktype=='value'then
publishedInItemId=s.mainsnak.datavalue.value.id
break
end
end
ifpublishedInItemIdthen
forproperty,arginpairs(citeTemplateArgs[tplId].args)do
args[arg]=formatFirstValue(publishedInItemId,property)
end
end
elseifp.isOfType(statedInItemId,'Q571')then-- [[d:Q571]] book
tplId='cite_book'
end
forproperty,arginpairs(citeTemplateArgs[tplId].args)do
args[arg]=formatFirstValue(statedInItemId,property)orargs[arg]
end
end
localexcluded=true
forkey,referenceSnaksinpairs(reference.snaks)do
-- exclude "imported from Wikimedia project", "Wikimedia import URL" and "inferred from"
ifkey~='P143'andkey~='P4656'andkey~='P3452'then
-- don't show references with nothing more than an access date
ifkey~='P813'then
excluded=false
end
ifkey=='P407'then-- [[d:Property:P407]] language of work or name (Item)
localformattedSnak=formatSnaks(referenceSnaks,{link='nem'})
ifformattedSnak~='magyar'andformattedSnak~=''then
table.insert(result,formattedSnak)
-- A sablonoknak nyelvkód kell
formattedSnak=formatSnaks(referenceSnaks,{
['value-module']='Wikidata/Formatters',
['value-function']='formatLanguage',
conjunction=', '
})
args[citeTemplateArgs[tplId].args[key]]=formattedSnak
end
else
for_,snakinipairs(referenceSnaks)do
ifsnak.snaktype=='value'then
localrefOptions={property=snak.property}
ifsnak.datatype=='time'then
refOptions.link='nem'
end
localformattedSnak=formatSnak(snak,refOptions)
table.insert(result,formattedSnak)
ifciteTemplateArgs[tplId].args[snak.property]then
ifsnak.datatype=='time'andsnak.datavalue.value.precision>=9then
formattedSnak=formatCS1DateValue(snak.datavalue.value)
end
args[citeTemplateArgs[tplId].args[snak.property]]=formattedSnak
end
end
end
end
end
end
ifargs.language=='hu'then
args.language=nil
end
ifargs.lan=='hu'then
args.lan=nil
end
localurl_source='reference'
args.url=reference.snaks['P854']andformatSnak(reference.snaks['P854'][1])-- [[d:Property:P854]] reference URL (URL)
ifreference.snaks.P1476then
for_,snakinipairs(reference.snaks.P1476)do
ifnotargs.titleor(snak.datavalueandsnak.datavalue.value.language=='hu')then
args.title=snak.datavalue.value.text
end
end
for_,snakinipairs(args.titleandreference.snaks.P1680or{})do-- [[d:Property:P1680]] subtitle (Monolingual text)
ifsnak.datavalueandsnak.datavalue.value.language=='hu'then
args.title=args.title..': '..snak.datavalue.value.text
break
end
end
end
statedInItem=reference.snaks.P248and
reference.snaks.P248[1].snaktype=='value'and
mw.wikibase.getEntity(reference.snaks.P248[1].datavalue.value.id)or
nil
ifnotargs.titleandstatedInItemthen
args.title=formatStatements({
property='P1476',-- [[d:Property:P1476]] title (Monolingual text)
lang='all',
first=true
},statedInItem)
ifargs.titlethen
localsubtitle=formatFirstValue(statedInItemId,'P1680')-- [[d:Property:P1680]] subtitle (Monolingual text)
ifsubtitlethen
args.title=args.title..': '..subtitle
end
end
end
ifnotargs.titleandstatedInItemthen
args.title=formatSnaks(reference.snaks.P248,{link='nem'})
ifargs.title==''then
args.title=nil
end
end
ifargs.website==args.titlethen
args.website=nil
end
ifnotargs.urlandstatedInItemthen
localid_property
for_,statementinipairs(mw.wikibase.getBestStatements(statedInItem.id,'P1687'))do-- [[d:Property:P1687]] Wikidata property (Property)
ifstatement.mainsnak.snaktype=='value'and(reference.snaks[statement.mainsnak.datavalue.value.id]or
next(mw.wikibase.getBestStatements(options.entityId,statement.mainsnak.datavalue.value.id)))then
id_property=statement.mainsnak.datavalue.value.id
break
end
end
ifnotid_propertythen
for_,statementinipairs(mw.wikibase.getBestStatements(statedInItem.id,'P527'))do-- [[d:Property:P527]] has part(s) (Item)
ifstatement.mainsnak.snaktype=='value'then
id_property=formatStatements{
entityId=statement.mainsnak.datavalue.value.id,
property='P1687',
first=true,
excludespecial=true,
format='raw'
}
ifid_propertythen
break
end
end
end
end
ifid_propertythen
url_source='external_id'
localfs_options={property=id_property,first=true,excludespecial=true,format='url'}
ifreference.snaks[id_property]then
args.url=formatSnak(reference.snaks[id_property][1],fs_options)
else
-- Get property from item instead of reference
fs_options.entityId=options.entityId
args.url=formatStatements(fs_options)
end
end
end
ifnotargs.urlandstatedInItemthen
url_source='stated_in'
args.url=formatStatements({
property='P953',-- [[d:Property:P953]] full work available at URL (URL)
first=true,
excludespecial=true
},statedInItem)
ifnotargs.urlthen
args.url=formatStatements({
property='P856',-- [[d:Property:P856]] official website (URL)
first=true,
excludespecial=true
},statedInItem)
end
end
ifurl_source~='external_id'then
localauthor=formatProperty('P50','P2093',true)
ifauthorthen
ifciteTemplateArgs[tplId].args.P50then
args[citeTemplateArgs[tplId].args.P50]=author
elseifciteTemplateArgs[tplId].args.P2093then
args[citeTemplateArgs[tplId].args.P2093]=author
end
end
end
--[=[ Final fixes ]=]
ifargs.urlandargs.url:match('^https?://www.ksh.hu')then
args.url=args.url:gsub('p_lang=EN','p_lang=HU')
end
ifargs.urlandargs.url:match('^https://nepszamlalas2022.ksh.hu')then
args.url=args.url:gsub('en/database','adatbazis')
end
args.url=url_source=='reference'andargs.urlorargs.archiveurlorargs.url
args.title=args.titleorargs.urlandargs.url:match('https?://(.*)')
args.title=args.title~=''andargs.titleornil
args.archiveurl=args.archivedateandargs.archiveurlornil
args.archivedate=args.archiveurlandargs.archivedateornil
iftplId=='cite_book'then
args.tit=args.title
args.subtit=args.subtitle
args.title=nil
args.subtitle=nil
end
iftplId~='cite_web'orargs.urlandargs.titlethen
ifciteTemplateArgs[tplId].CitationClassthen
returnrequire('Modul:Citation/CS1')._citation(nil,args,{CitationClass=citeTemplateArgs[tplId].CitationClass})
elseifciteTemplateArgs[tplId].ref_modulethen
returnrequire('Modul:'..citeTemplateArgs[tplId].ref_module)[citeTemplateArgs[tplId].ref_function](args,{['alkategóriák kellenek']='igen'})
else
returnframel:expandTemplate{title=citeTemplateArgs[tplId].title,args=args}
end
end
ifexcludedthen
returnnil
end
returntable.concat(result,', ')
end
localfunctionformatReferences(references,options)
ifnotreferencesthen
return''
end
locallimit=tonumber(options.showReferences)or5
localformattedReferences={}
for_,referenceinipairs(references)do
iflimit==0or#formattedReferences<limitthen
ifref_names[reference.hash]then
table.insert(formattedReferences,framel:extensionTag('ref',nil,{name=reference.hash}))
else
localformattedReference=formatReference(reference,options)
ifformattedReferenceandformattedReference~=''then
table.insert(formattedReferences,framel:extensionTag('ref',formattedReference,{name=reference.hash}))
ref_names[reference.hash]=true
end
end
end
end
returntable.concat(formattedReferences)
end
localfunctionpopulationWithPointInTime(statement,options,last)
ifstatement.mainsnak.snaktype~='value'then
returnnil
end
localpopulation=tonumber(statement.mainsnak.datavalue.value.amount)
localtext=(population<10000andtostring(population)orlang:formatNum(population))..' fő'
ifstatement.qualifiersandstatement.qualifiers.P585andstatement.qualifiers.P585[1].snaktype=='value'then-- dátum
localtime=require('Modul:Time').newFromWikidataValue(statement.qualifiers.P585[1].datavalue.value)
localfDate
iftime.precision>=11then
fDate=lang:formatDate(options.dateformator'Y. M. j.',time:toIso8601())
else
fDate=tostring(time.year)
end
text=text..' '..mw.text.tag('span',{style='font-size:90%; white-space:nowrap;'},'('..fDate..')')
end
iflastandoptions.punctuationthen
text=text..options.punctuation
end
text=text..formatReferences(statement.references,options)
localqid=statement.id:match("^[Qq]%d+"):upper()
ifqid==mw.wikibase.getEntityIdForCurrentPage()then
returntext
end
iflastthen
text=text..string.format(' <small class="plainlinks noexcerpts">[https://www.wikidata.org/wiki/%s?uselang=hu#P1082 +/-]</small>',qid)
end
returntext
end
localfunctionsortAuxiliary(statements,propGenerator,sortDesc)
localnewlist,auxlist={},{}
localfunctionsort(a,b)
ifa.propandb.propanda.prop~=b.propthen
returna.prop<b.prop
elseifa.propandb.propthen
returna.i<b.i
elseifa.proporb.propthen
returnnota.prop
else
returna.i<b.i
end
end
fori,vinipairs(statements)do
auxlist[i]={
i=i,
prop=propGenerator(v,i)
}
end
ifsortDescthen
table.sort(auxlist,function(a,b)
returnnotsort(a,b)
end)
else
table.sort(auxlist,sort)
end
for_,vinipairs(auxlist)do
table.insert(newlist,statements[v.i])
end
returnnewlist
end
localfunctiongetSortableValue(snak)
ifnotsnakorsnak.snaktype~='value'then
returnnil
end
localdatavalue=snak.datavalue
ifdatavalue.type=='wikibase-entityid'then
localid='Q'..datavalue.value['numeric-id']
localkey=mw.wikibase.label(id)
ifnotkeythen
key=mw.wikibase.sitelink(id)
end
ifnotkeythen
returnid
end
returnlang:caseFold(key)
elseifdatavalue.type=='string'then
returndatavalue.value
elseifdatavalue.type=='time'then
returnrequire('Modul:Time').newFromWikidataValue(datavalue.value)
elseifdatavalue.type=='quantity'then
returntonumber(datavalue.value.amount)
elseifdatavalue.type=='monolingualtext'then
returndatavalue.value.text
end
returnnil
end
localfunctionsortByValue(statements,sortDesc)
localfunctionpropGenerator(v)
returngetSortableValue(v.mainsnak)
end
returnsortAuxiliary(statements,propGenerator,sortDesc)
end
localfunctionsortByQualifier(statements,qualifier,sortDesc)
localfunctionpropGenerator(v)
returnv.qualifiersandv.qualifiers[qualifier]andgetSortableValue(v.qualifiers[qualifier][1])
end
returnsortAuxiliary(statements,propGenerator,sortDesc)
end
localfunctionfilterByQualifier(options,statements)
ifnotoptions.qualPropthen
returnstatements
end
localresult={}
options.qualProp=(options.qualProp):upper()
for_,sinipairs(statements)do
ifs.qualifiersands.qualifiers[options.qualProp]then
ifnotoptions.qualValuethen
table.insert(result,s)
else
for_,snakinipairs(s.qualifiers[options.qualProp])do
ifsnak.snaktype=='value'then
ifsnak.datavalue.type=='wikibase-entityid'and((options.qualValue):upper()..','):find(snak.datavalue.value.id..',',1,true)or
snak.datavalue.type=='string'and(options.qualValue..','):find(snak.datavalue.value..',',1,true)then
table.insert(result,s)
break
end
end
end
end
end
end
returnresult
end
--[[
	Local function with forward declaration
--]]
functionformatStatements(options,item)
ifnotoptions.propertyoroptions.property==''then
formatError('property-param-not-provided')
end
localproperty=mw.wikibase.resolvePropertyId(options.property)
ifnotpropertythen
formatError('property-not-found',options.property)
end
--Get entity
localentity=item
localstatements={}
ifentitythen
statements=entity:getAllStatements(property)
else
ifoptions.entityIdandoptions.pageTitlethen
returnformatError('excluding-arguments','entityId','pageTitle')
end
ifoptions.pageTitlethen
options.entityId=mw.wikibase.getEntityIdForTitle(options.pageTitle)
elseifnotoptions.entityIdthen
options.entityId=mw.wikibase.getEntityIdForCurrentPage()
end
ifnotoptions.entityIdthen
returnoptions['felsorolás']=='table'and{}ornil
end
ifmw.wikibase.isValidEntityId(options.entityId)then
statements=mw.wikibase.getAllStatements(options.entityId,property)
end
end
if#statements==0then
returnoptions['felsorolás']=='table'and{}ornil
end
ifoptions.atDatethen
statements=atDate(statements,options.atDate)
end
-- TODO Extract selection and filtering
ifoptions.rank~='all'then
ifnotoptions.rankthen
statements=p.withHighestRank(statements)
elseifoptions.rank=='valid'then
statements=withRank(statements,{'normal','preferred'})
else
statements=withRank(statements,{options.rank})
end
end
ifoptions.typeIdthen
statements=p.getUpperLevelOfType(property,options.typeId,options.entityId,entity)
end
ifoptions.excludespecialthen
localnewStatements={}
for_,sinipairs(statements)do
ifs.mainsnak.snaktype=='value'then
table.insert(newStatements,s)
end
end
statements=newStatements
end
statements=filterByQualifier(options,statements)
ifoptions['filter-function']then
statements=require('Modul:Wikidata/filters')[options['filter-function']](statements)
end
ifoptions.sortthen
localcomp=options.sort
iftype(comp)=='string'andcomp:match('[Pp]%d+')then
statements=sortByQualifier(statements,string.upper(comp),options.sortDesc)
elseifcomp==''orcomp==truethen
statements=sortByValue(statements,options.sortDesc)
else
table.sort(statements,comp)
end
end
ifoptions.firstthen
statements=firstValue(statements)
end
--Format statement and concat them cleanly
localformattedStatements={}
-- loop variable to know if we're processing the last statement
locali=0
for_,statementinipairs(statements)do
i=i+1
localfs
ifproperty=='P1082'andoptions.format=='default'then-- population
fs=populationWithPointInTime(statement,options,(i==#statements))
else
fs=p.formatStatement(statement,options,(i==#statements))
end
iffsthen
ifoptions['felsorolás']=='lista'then
fs='* '..fs
elseifoptions['felsorolás']=='számozott lista'then
fs='# '..fs
end
table.insert(formattedStatements,fs)
end
end
localfunctioncollapsibleList(frame,args,list,size)
ifargs['lenyíló']andsize>tonumber(args['lenyíló'])then
returnframe:expandTemplate{title='Show',args={'Lista',list}}
end
returnlist
end
localfunctionplainlist(items)
if#items==0then
returnnil
end
if#items==1then
returnitems[1]
end
returncollapsibleList(framel,options,framel:expandTemplate{title='Plainlist',args={'\n* '..table.concat(items,'\n* ')..'\n'}},#items)
end
ifoptions['felsorolás']=='lista'oroptions['felsorolás']=='számozott lista'then
returncollapsibleList(framel,options,table.concat(formattedStatements,'\n'),#formattedStatements)
elseifoptions['felsorolás']=='sorok'then
returnplainlist(formattedStatements)
elseifoptions['felsorolás']=='szöveg'then
returnmw.text.listToText(formattedStatements)
elseifoptions['felsorolás']=='table'then
returnformattedStatements
elseifoptions.separatororoptions.conjunctionthen
options.separator=options.separatorandstring.gsub(options.separator,'&#32;',' ')
options.conjunction=options.conjunctionandstring.gsub(options.conjunction,'&#32;',' ')
returnmw.text.listToText(formattedStatements,options.separator,options.conjunction)
else
ifoptions.firstAfterthen
returnformattedStatements[1]or''
end
returnplainlist(formattedStatements)
end
end
localfunctionformatQualifiers(statement,_,qualifiers)
localresult,orderedResult,startDate,endDate={},{}
localfunctiongetInterval()
ifstartDateandstartDate~=''orendDateandendDate~=''then
localdash='–'
if(startDateandnotstartDate:match('^%d+$'))or(endDateandnotendDate:match('^%d+$'))then
dash=' – '
end
return(startDateor'')..dash..(endDateor'')
end
end
iftype(qualifiers)=='string'andqualifiers:find('[Pp]%d')then
qualifiers=qualifiers:upper()
else
qualifiers=nil
end
localexcludedQual={
P7452=true,-- [[d:Property:P7452]] reason for preferred rank
}
forkey,snaksinpairs(statement.qualifiers)do
if(notqualifiersorqualifiers:find(key,1,true))andnotexcludedQual[key]then
ifkey=='P580'then
startDate=formatSnak(snaks[1],{link='nem'})
elseifkey=='P582'then
endDate=formatSnak(snaks[1],{link='nem'})
else
for_,snakinipairs(snaks)do
localformattedSnak=formatSnak(snak,{
link=snak.property~='P102'and'nem'ornil,
['format']='geohack',
showUnit=true,
labelProperty='P1813'-- [[d:Property:P1813]] rövid név
})
ifqualifiersthen
-- order determined by the order in parameter
iforderedResult[key]then
table.insert(orderedResult[key],formattedSnak)
else
orderedResult[key]={formattedSnak}
end
else
table.insert(result,formattedSnak)
end
end
end
end
end
ifqualifiersthen
forqualifierinqualifiers:gmatch('P%d+')do
ifqualifier=='P580'orqualifier=='P582'then
localinterval=getInterval()
ifintervalthen
table.insert(result,interval)
-- prevent interval to be inserted twice (both at P580 and P582)
startDate,endDate=nil,nil
end
elseiforderedResult[qualifier]then
for_,vinipairs(orderedResult[qualifier])do
table.insert(result,v)
end
end
end
else
localinterval=getInterval()
ifintervalthen
table.insert(result,1,interval)
end
end
returntable.concat(result,', ')
end
functionp.formatStatement(statement,aOptions,last)
ifnotstatement.typeorstatement.type~='statement'then
formatError('unknown-claim-type')
end
localoptions=aOptionsor{}
localresult
ifstatement.mainsnak.snaktype=='somevalue'andstatement.mainsnak.datatype=='time'andstatement.qualifiersand
(statement.qualifiers.P1319orstatement.qualifiers.P1326)then
-- TODO Extract method
ifstatement.qualifiers.P1319then
ifstatement.qualifiers.P1326then
result=formatSnak(statement.qualifiers.P1319[1])..' és '..formatSnak(statement.qualifiers.P1326[1])..' között'
else
result=formatSnak(statement.qualifiers.P1319[1])..' után'
end
else
result=formatSnak(statement.qualifiers.P1326[1])..' előtt'
end
else
result=formatSnak(statement.mainsnak,options,statement)
end
--TODO reference and qualifiers
ifresultandresult~=''then
ifoptions.showQualifiersandstatement.qualifiersthen
localformattedQualifiers=formatQualifiers(statement,options,options.showQualifiers)
ifformattedQualifiersandformattedQualifiers~=''then
result=result..' <small>('..formattedQualifiers..')</small>'
end
end
iflastandoptions.punctuationthen
result=result..options.punctuation
end
ifoptions.showReferencesthen
result=result..formatReferences(statement.references,options)
end
end
returnresult
end
functionp.formatStatements(frame,args,item)
ifnotargsthen
args=getArgs(frame,{removeBlanks=false})
end
--If a value if already set, use it
ifargs.valueandargs.value~=''then
ifargs.value=='-'then
returnnil
end
ifargs['format']=='wikilink'then
returnformatUrl(args.value,args.property,args)
end
returnargs.value
end
ifargs.externalId=='-'then
returnnil
end
ifargs.externalIdandargs.externalId~=''then
returnformatExternalId(args,args.externalId)
end
args.entityId=args.entityId~=''andargs.entityIdornil
args.pageTitle=args.pageTitle~=''andargs.pageTitleornil
args.qualProp=args.qualProp~=''andargs.qualPropornil
args.qualValue=args.qualValue~=''andargs.qualValueornil
returnformatStatements(args,item)
end
--[[
	Returns string true if connected Wikibase item contains property specified
	by property argument, empty string otherwise.
	Used by template Wikidata-f in conditional expressions.
--]]
functionp.containsProperty(frame,args,item)
ifnotargsthen
args=getArgs(frame,{removeBlanks=false})
end
ifnotargs.propertythen
formatError('property-param-not-provided')
end
ifargs.value=='-'orargs.externalId=='-'then
returnnil
end
ifargs.valuethen
returntrue
end
ifargs.externalIdandargs.externalId~=''then
returntrue
end
ifnotitemthen-- default usage from Wikidata-f template
args.entityId=args.entityId~=''andargs.entityIdornil
args.pageTitle=args.pageTitle~=''andargs.pageTitleornil
localentityId=args.entityId
ifnotentityIdthen
ifargs.pageTitlethen
entityId=mw.wikibase.getEntityIdForTitle(args.pageTitle)
else
entityId=mw.wikibase.getEntityIdForCurrentPage()
end
end
ifnotentityIdthen
returnnil
end
for_,sinipairs(mw.wikibase.getBestStatements(entityId,args.property:upper()))do
ifnotargs.excludespecialors.mainsnak.snaktype=='value'then
returntrue
end
end
returnnil
end
ifnotitem.claimsornotitem.claims[args.property:upper()]then
returnnil
end
ifargs.rank=='all'then
returntrue
elseifargs.rank=='valid'then
-- if we're just searching, it doesn't matter
-- if we want all or only the better ones
args.rank=nil
end
for_,claiminipairs(item.claims[args.property:upper()])do
if
(args.rankandclaim.rank==args.rankornotargs.rankandclaim.rank~='deprecated')and
(notargs.excludespecialorclaim.mainsnak.snaktype=='value')
then
returntrue
end
end
returnnil
end
functionp.containsPropertyWithValue(item,property,value)
ifnotpropertyornotvaluethen
returnfalse
end
ifnotitemornotitem.claimsornotitem.claims[property:upper()]then
returnfalse
end
for_,statementinipairs(item.claims[property:upper()])do
ifstatement.rank~='deprecated'andstatement.mainsnak.snaktype=='value'then
localtype=statement.mainsnak.datavalue.type
iftype=='wikibase-entityid'then
if'Q'..statement.mainsnak.datavalue.value['numeric-id']==valuethen
returntrue
end
end
end
end
returnfalse
end
functionp.isOfType(itemId,class)
ifnotitemIdornotclassthen
returnfalse
end
localvisited={}
localfunctioncheckProperty(aItemId,property,level)
iflevel>5then
returnfalse
end
ifvisited[aItemId]then
returnfalse
end
visited[aItemId]=true
for_,sinipairs(mw.wikibase.getBestStatements(aItemId,property))do
ifs.mainsnak.snaktype=='value'then
localitemClass=s.mainsnak.datavalue.value.id
ifitemClass==classorcheckProperty(itemClass,'P279',level+1)then
returntrue
end
end
end
returnfalse
end
returncheckProperty(itemId,'P31',0)
end
--[[
	Local functions available to other modules.
 ]]
p.formatters={
formatDatavalue=formatDatavalue,
formatSnak=formatSnak,
formatSnaks=formatSnaks
}
returnp