Ellenő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=wikilinkbeállítást tesz szükségessé. Üres érték esetén számozott hivatkozás jelenik meg. Ha csakformatvan 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áulkm+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,
Pxxxesetén aPxxxminő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=' – ' localOptions.conjunction=' – ' 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,' ',' ') options.conjunction=options.conjunctionandstring.gsub(options.conjunction,' ',' ') 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
A lap eredeti címe: „https://hu.wikipedia.org/w/index.php?title=Modul:Wikidata&oldid=29143465”
Rejtett kategória:
