Modul:Wikidata
Vzhled
Hlavní modul pro práci s daty naWikidatech.Jeho základ byl převzat ztest2wiki:Module:Wikidata,postupně je rozšiřován o nové funkce.
Modul je rozdělen do submodulů:
- Modul:Wikidata/lib– knihovna funkcí pro všechny další submoduly,
- Modul:Wikidata/i18n– lokalizace
- Modul:Wikidata/Filterers– filtrování tvrzení nebo vymezení podle kritérií,
- Modul:Wikidata/Formatters– formátování údajů,
- Modul:Wikidata/Sorters– seřazování údajů (podle abecedy, data apod.),
- Modul:Wikidata/cite– formátování referencí,
- Modul:Wikidata/sandbox– testovací modul,
- Modul:Wikidata/testcases–unit testing
Viz též seznamšablon,které tento modul využívají.
Použití
Podrobnější nápovědu naleznete na stránceWikipedie:Wikidata/Přebírání do infoboxů.
Do šablony vložte{{#invoke:Wikidata|funkce|parametry = jako v šablonách}}
.
Parametry a funkce označené hvězdičkou (*) nejsou plně podporované a není zatím doporučeno je využívat. Naopak parametry či funkce označené křížkem (†) jsou zastaralé a mohou být v brzké době odstraněny.
Funkce | Popis funkce | Parametr | Povinný | Popis parametru |
---|---|---|---|---|
formatStatements
|
získá data, vybere tvrzení, přefiltruje, seřadí a zformátuje jejich hodnoty a vrátí jejich seznam | id | ne | identifikátor položky (písmeno „q “následované číslicemi) nebo vlastnosti (písmeno „p “následované číslicemi) na Wikidatech, jejíž data se mají získat pro další práci s nimi (implicitně je to položka propojená s danou stránkou) |
of | ne | identifikátor vlastnosti na Wikidatech (písmeno „p “následované číslicemi), ze kterého se získá entita, kterou modul skutečně využije, tak, že se použije první nejlepší hodnota vlastnosti | ||
page | ne | název stránky, jejíž položka se má použít pro získání údajů | ||
wiki | ne | zkratka projektu (např. enwiki), z něhož uvedená stránka pochází | ||
property | ano | identifikátor vlastnosti na Wikidatech (písmeno „p “následované číslicemi), jejíž hodnoty se mají zformátovat a zobrazit | ||
addlink | ne | pokud je „true “, na konci dat z repozitáře se objeví(e)odkazující přímo na vlastnost | ||
addclass | ne | pokud je „false “, potlačí obalení údajůCSS třídou(používat jen ve výjimečných případech) | ||
value-formatter | ne | submodulmodulu Wikidata/Formatters(jeho podstránka), která se použije pro formátování hodnot, pokud výchozí submodul není vyhovující (seznam,návod) | ||
limit | ne | maximální počet hodnot, které se v seznamu zobrazí | ||
rank | ne | nutné postavení hodnoty v rámci tvrzení; může býtall– použijí se všechna tvrzení;best– použijí se buď pouze tvrzení, která mají preferované postavení, nebo pouze ta s normálním postavením, pokud žádné preferované není;valid(implicitní) – použijí se jak preferovaná, tak normálně postavená tvrzení;preferred,normal,deprecated– použijí se pouze tvrzení s odpovídajícím postavením | ||
withtarget | ne | hodnota, jíž mají nabývat hledaná tvrzení (užitečné zejména pro funkcegetCount agetQualifier )
| ||
withqualifier | ne | identifikátor vlastnosti na Wikidatech (písmeno „p “následované číslicemi), která musí být přiřazena dané hodnotě v tvrzení jako vymezení | ||
withqualifiervalue | ne | hodnota, jíž má nabývat vlastnost vymezení daná parametrem „withqualifier “ | ||
withoutqualifier | ne | identifikátor vlastnosti na Wikidatech (písmeno „p “následované číslicemi), která nesmí být přiřazena dané hodnotě v tvrzení jako vymezení | ||
withoutqualifiervalue | ne | hodnota, jíž nemá nabývat vlastnost vymezení daná parametrem „withoutqualifier “ | ||
withunit | ne | identifikátor položky na Wikidatech | ||
withlabel* | ||||
withsitelink* | ||||
withlang | ne | kód jazyka, ve kterém mají být hodnoty jednojazyčného textu | ||
date | ne | datum ve formátu YYYY-MM-DD nebo „#now “(dnešní datum), ke kterému mají být tvrzení platná | ||
sort | ne | způsob, jakým změnit implicitní pořadí jednotlivých hodnot; hodnota parametru odpovídá čárkou odděleným podstránkámmodulu Wikidata/Sorters | ||
invert | ne | pokud je „true “a je zadán způsob řazení („sort “), řazení bude sestupné, nikoliv výchozí vzestupné | ||
pattern | ne | pokud je typ hodnoty řetězec, je toto vzor pro zformátování, přičemž „$1 “nahrazuje daný řetězec | ||
autoformat | ne | pokud je „true “a typ hodnoty řetězec, modul se na stránce dotyčné vlastnosti pokusí najít náhradu zapattern(URL pro zformátování(P1630)) a aplikuje ji | ||
precision | ne | přizpůsobení formátu časových údajů (pokud je skutečná přesnost nižší, formát se přizpůsobí jí); 11 – 12. října 2024, 10 – říjen 2024, 9 – 2024 atd. | ||
somevalue | ne | pokud je vyplněný, modul bude zobrazovat i speciální hodnotu „neznámá hodnota “s tímto textem | ||
novalue | ne | pokud je vyplněný, modul bude zobrazovat i speciální hodnotu „bez hodnoty “s tímto textem | ||
showqualifier | ne | čárkou oddělené identifikátory vlastností na Wikidatech (písmeno „p “následované číslicemi nebo „time “), které se zobrazí v závorce za hodnotou, pokud jsou dané hodnotě jako vymezení přiřazeny | ||
showsource | ne | pokud je „true “, k datům z repozitáře se přidají reference | ||
max_ref | ne | maximální počet referencí, které se mají zobrazit | ||
showmore | ne | pokud je hodnota „true “, tak se v případě, že existuje více hodnot, než kolik povolujelimit,zobrazí na konci jejich seznamu text „… více naWikidatech“s odkazem přímo na vlastnost | ||
list | ne | pokud je hodnota „ul “nebo „ol “, hodnoty budou vráceny jako HTML seznam („ol “– číslovaný, „ul “– odrážkový) | ||
separator | ne | znaky, jimiž se v seznamu oddělí jednotlivé hodnoty, kromě předposlední a poslední (implicitně čárka, neplatí pro HTML seznam) | ||
conjunction | ne | znaky, jimiž se v seznamu oddělí předposlední a poslední hodnota (implicitně spojka „a “, neplatí pro HTML seznam) | ||
qualifiers... | ne | takto uvozený argument (např. „qualifiers precision “) bude použit pro výběr a formátování vymezení | ||
showtargetdata* | ne | podobné jako „showqualifier “, ovšem data se místo z vymezení získávají z cílové položky | ||
targetdate* | ne | podobné jako „date “, vztahuje se k údajům cílové položky | ||
formatStatementsFromLua
|
funkce, kterou používají pouze jiné moduly a která je jinak shodná sformatStatements
|
entity | ne | tabulka s entitou, s níž má modul pracovat |
getSitelink
|
vrátí odkaz na článek daného projektu | site / první nepojmenovaný | ne | zkratka projektu (implicitně „cswiki “) |
pattern | ne | vzor pro zformátování odkazu, kde „$1 “je název odkazovaného článku (implicitně „$1 “) | ||
id | ne | identifikátor položky (písmeno „q “následované číslicemi) nebo vlastnosti (písmeno „p “následované číslicemi) na Wikidatech, jejíž data se mají získat pro další práci s nimi (implicitně je to položka propojená s danou stránkou) | ||
of | ne | identifikátor vlastnosti na Wikidatech (písmeno „p “následované číslicemi), ze kterého se získá entita, kterou modul skutečně využije, tak, že se použije první nejlepší hodnota vlastnosti | ||
page | ne | název stránky, jejíž položka se má použít pro získání údajů | ||
wiki | ne | zkratka projektu (např. enwiki), z něhož uvedená stránka pochází | ||
addclass | ne | pokud je „true “, odkaz bude obalenCSS třídou | ||
getLabel
|
vrátí štítek položky v daném jazyce | lang | ne | zkratka jazyka (implicitně „cs “) |
id | ne | identifikátor položky (písmeno „q “následované číslicemi) nebo vlastnosti (písmeno „p “následované číslicemi) na Wikidatech, jejíž data se mají získat pro další práci s nimi (implicitně je to položka propojená s danou stránkou) | ||
of | ne | identifikátor vlastnosti na Wikidatech (písmeno „p “následované číslicemi), ze kterého se získá entita, kterou modul skutečně využije, tak, že se použije první nejlepší hodnota vlastnosti | ||
page | ne | název stránky, jejíž položka se má použít pro získání údajů | ||
wiki | ne | zkratka projektu (např. enwiki), z něhož uvedená stránka pochází | ||
addclass | ne | pokud je „true “, štítek bude obalenCSS třídou | ||
getDescription
|
vrátí popisek položky v daném jazyce | lang | ne | zkratka jazyka (implicitně „cs “) |
id | ne | identifikátor položky (písmeno „q “následované číslicemi) nebo vlastnosti (písmeno „p “následované číslicemi) na Wikidatech, jejíž data se mají získat pro další práci s nimi (implicitně je to položka propojená s danou stránkou) | ||
of | ne | identifikátor vlastnosti na Wikidatech (písmeno „p “následované číslicemi), ze kterého se získá entita, kterou modul skutečně využije, tak, že se použije první nejlepší hodnota vlastnosti | ||
page | ne | název stránky, jejíž položka se má použít pro získání údajů | ||
wiki | ne | zkratka projektu (např. enwiki), z něhož uvedená stránka pochází | ||
addclass | ne | pokud je „true “, popisek bude obalenCSS třídou | ||
getAliases
|
vrátí aliasy položky v daném jazyce | lang | ne | zkratka jazyka (implicitně „cs “) |
limit | ne | maximální počet aliasů, který se má zobrazit | ||
id | ne | identifikátor položky (písmeno „q “následované číslicemi) nebo vlastnosti (písmeno „p “následované číslicemi) na Wikidatech, jejíž data se mají získat pro další práci s nimi (implicitně je to položka propojená s danou stránkou) | ||
of | ne | identifikátor vlastnosti na Wikidatech (písmeno „p “následované číslicemi), ze kterého se získá entita, kterou modul skutečně využije, tak, že se použije první nejlepší hodnota vlastnosti | ||
page | ne | název stránky, jejíž položka se má použít pro získání údajů | ||
wiki | ne | zkratka projektu (např. enwiki), z něhož uvedená stránka pochází | ||
showmore | ne | jako uformatStatements
| ||
list | ne | |||
separator | ne | |||
conjunction | ne | |||
getBadges
|
vrátí štítek odznaku přiřazeného danému odkazu na článek | site | ano | zkratka projektu |
id | ne | identifikátor položky (písmeno „q “následované číslicemi) nebo vlastnosti (písmeno „p “následované číslicemi) na Wikidatech, jejíž data se mají získat pro další práci s nimi (implicitně je to položka propojená s danou stránkou) | ||
of | ne | identifikátor vlastnosti na Wikidatech (písmeno „p “následované číslicemi), ze kterého se získá entita, kterou modul skutečně využije, tak, že se použije první nejlepší hodnota vlastnosti | ||
page | ne | název stránky, jejíž položka se má použít pro získání údajů | ||
wiki | ne | zkratka projektu (např. enwiki), z něhož uvedená stránka pochází | ||
getCount
|
vrátí počet tvrzení podle daných kritérií | všechny parametry pro filtrování | ||
getCurrentId
|
vrátí id položky, se kterou je stránka propojena | |||
getId
|
Vrátí id položky propojené se zadanou stránkou. Není-li propojená a jedná se opřesměrování,následuje jej (i rekurzivně). Nepodaří-li se, zkusí další stránky, pokud jich bylo zadáno víc. Nedostane-li parametry přímo, zpracuje parametry předané volající šabloně. | první, druhý,... nepojmenovaný | ne | název stránky na dané wiki (implicitně aktuální stránka) |
wiki | ne | zkratka projektu (např. enwiki), z něhož uvedená stránka pochází | ||
getRawValue
|
použije stejná kritéria jakoformatStatements ,ovšem vrátí strojově čitelný (nezformátovaný) údaj
|
všechny parametry pro filtrování | ||
field | ne | pokud je typ hodnoty souřadnice, toto je její část, která se zobrazí; jedno z „latitude “, „longitude “, „precision “a „globe “ | ||
getRawValueFromLua
|
jakogetRawValue ,pro použití v jiném modulu
|
entity | ne | tabulka s entitou, s níž má modul pracovat |
getQualifier
|
vrací hodnoty vymezení nalezeného tvrzení | qualifier | ano | vlastnost vymezení, jejíž hodnoty mají být vráceny |
qualifiers... | ne | takto uvozený argument (např. „qualifiers withlang “) bude použit pro výběr (při filtrování) vymezení | ||
stejné jako u funkceformatStatements
| ||||
getRawQualifier
|
aplikuje chování funkcegetRawValue nagetQualifier
|
stejné jako u funkcegetQualifier
| ||
formatEntity
|
lokalizuje položku zadanou pomocí jejího identifikátoru (pokusí se vytvořit lokální odkaz a zobrazit štítek) | id | ne | id položky, která se má zformátovat (jinak id položky, se kterou je stránka propojena) |
entityExists
|
zjistí, zda entita (položka, vlastnost atd.) s daným identifikátorem existuje (přesměrování se považuje za existující) | id / první nepojmenovaný | ano | id položky, jejíž existenci zjišťujeme |
ifexpr | ne | pokud je „true “, negativní hodnota bude vrácena jako „0 “, jinak (výchozí chování) jako prázdný řetězec (užitečné, pokud ve wikitextu používáme funkci #ifexpr:, a ne #if:) | ||
isValidEntityId
|
zjistí, zda zadaný řetězec je platný identifikátor entity (položky, vlastnosti atd.) | id / první nepojmenovaný | ano | řetězec, jehož validitu testujeme |
ifexpr | ne | jako uentityExists
| ||
dumpWikidataEntity
|
zobrazí entitu v čitelné podobě, užitečná pro ladění a zavádění nových funkcí, nepoužívá se v šablonách nebo článcích | id | ne | identifikátor položky (písmeno „q “následované číslicemi) nebo vlastnosti (písmeno „p “následované číslicemi) na Wikidatech, jejíž entita se zobrazí (implicitně je to položka propojená s danou stránkou) |
require'strict'
localp={}
locallib=require'Modul:Wikidata/lib'
locali18n=mw.loadData('Modul:Wikidata/i18n')
localgetArgs=(require'Modul:Arguments').getArgs
localfunctionoutputBool(arg,ifexpr)
localmap
ififexprthen
map={[true]=1,[false]=0}
else
map={[true]=1,[false]=''}
end
returnmap[arg]
end
localfunctionremoveDuplicates(values)
localTableTools=require'Modul:TableTools'
returnTableTools.removeDuplicates(values)
end
localfunctiongetEntityIdFromStatements(statements)
for_,statementinipairs(statements)do
iflib.IsSnakValue(statement.mainsnak)then
ifstatement.mainsnak.datavalue.type~='wikibase-entityid'then
error(lib.raiseInvalidDatatype('getEntityIdFromStatements',
statement.mainsnak.datatype,{'wikibase-item','wikibase-property'}))
end
localFormatters=require'Modul:Wikidata/Formatters'
returnFormatters.getRawValue(statement.mainsnak,{})
end
break
end
returnnil
end
localfunctiongetEntityIdFromEntity(entity,prop)
localprop=mw.ustring.upper(prop)
localstatements=entity:getBestStatements(prop)
returngetEntityIdFromStatements(statements)
end
localfunctiongetEntityIdFromId(id,prop)
localprop=mw.ustring.upper(prop)
localstatements=mw.wikibase.getBestStatements(id,prop)
returngetEntityIdFromStatements(statements)
end
localfunctiongetIdFromTitle(titleString,wiki)
ifwikithen
returnmw.wikibase.getEntityIdForTitle(titleString,wiki)
end
localtitle=mw.title.new(titleString)
whiletitledo
localid=mw.wikibase.getEntityIdForTitle(title.prefixedText)
ifidthen
returnid
end
title=title.redirectTarget
end
returnnil
end
localfunctionfindEntityId(options)
localid
ifoptions.entityandtype(options.entity)=='table'then
id=options.entity.id
end
ifnotidandoptions.pagethen
id=getIdFromTitle(options.page,options.wiki)
ifnotidthen
returnnil
end
end
ifnotidthen
id=options.idorp.getCurrentId()
end
ifidandoptions.ofthen
id=getEntityIdFromId(id,options.of)
end
returnid
end
localfunctionfindEntity(options)
localentity
ifoptions.entityandtype(options.entity)=='table'then
entity=options.entity
end
ifnotentitythen
ifoptions.idthen
localid=options.id:upper()
entity=mw.wikibase.getEntity(id)
ifentityandentity.id~=idthen
mw.log(id..' je přesměrování na '..entity.id)
end
else
ifoptions.pagethen
localid=getIdFromTitle(options.page,options.wiki)
ifidthen
entity=mw.wikibase.getEntity(id)
end
else
entity=mw.wikibase.getEntity()
end
end
end
ifoptions.ofthen
ifentitythen
localid=getEntityIdFromEntity(entity,options.of)
ifidthen
returnmw.wikibase.getEntity(id)
end
end
returnnil
end
returnentity
end
localfunctiongetSitelink(options)
localid=findEntityId(options)
ifnotidthen
returnnil
end
localsite=options.siteoroptions[1]
localsitelink=mw.wikibase.getSitelink(id,site)
ifnotsitelinkthen
returnnil
end
ifoptions.patternthen
sitelink=lib.formatFromPattern(sitelink,options.pattern)
end
iflib.IsOptionTrue(options,'addclass')then
sitelink=lib.addWdClass(sitelink)
end
returnsitelink
end
localfunctionformatStatementAndData(statement,options)
ifnotstatement.typeorstatement.type~='statement'then
error(lib.formatError('unknown-claim-type',statement.typeor'[neznámý]'))-- fixme: i18n
end
localFilterers=require'Modul:Wikidata/Filterers'
localFormatters=require'Modul:Wikidata/Formatters'
localresult={Formatters.getFormattedValue(statement.mainsnak,options)}
localqualifiers
ifstatement.qualifiersandoptions.showqualifierthen
localPropList=lib.textToTable(options.showqualifier)
-- TODO: move this to a better place (config)
localdefault_options={
isQualifier=true,
label='short',
nolink=lib.IsOptionTrue(options,'nolink'),
precision=9,
}
for_,propertyinipairs(PropList)do
localproperty=mw.ustring.upper(property)
localValues={}
localqualifiers_options=lib.augmentArgs(options,default_options,'qualifiers ')
ifstatement.qualifiers[property]then
localQualifiers=mw.clone(statement.qualifiers[property])
qualifiers_options.property=property
ifnotqualifiers_options.nolinkthen
qualifiers_options.nolink=(Qualifiers[1].datatype=='time')
end
Filterers.filterQualifiers(Qualifiers,qualifiers_options)
for_,snakinipairs(Qualifiers)do
table.insert(Values,Formatters.getFormattedValue(snak,qualifiers_options))
end
elseifproperty=='TIME'then
localData={}
-- TODO: factor out
forkey,arrayinpairs(lib.props)do
for_,propinipairs(array)do
for_,snakinipairs(statement.qualifiers[prop]or{})do
iflib.IsSnakValue(snak)then-- dokud nebude jasné, jak to používat
Data[key]=snak
break
end
end
end
end
ifData.beginorData.endingthen
qualifiers_options.nolink=true
table.insert(Values,lib.formatDateRange(Data,qualifiers_options))
end
end
if#Values>0then
result[property]=mw.text.listToText(
removeDuplicates(Values),
qualifiers_options.separator,
qualifiers_options.conjunction)
end
end
end
ifstatement.referencesandlib.IsOptionTrue(options,'showsource')then
-- TODO: configure custom formatter
localModule=require'Modul:Wikidata/cite'
result.ref=Module.formatReferences(statement.references,options)-- or table of references?
end
returnresult
end
localfunctionformatStatement(statement,options)
localdata=formatStatementAndData(statement,options)
localresult=data[1]
ifoptions.isQualifier==truethen
returnresult
end
localqualifiers
ifstatement.qualifiersandoptions.showqualifierthen
localPropList=lib.textToTable(options.showqualifier)
localtmp={}
for_,propinipairs(PropList)do
localprop=mw.ustring.upper(prop)
ifdata[prop]then
table.insert(tmp,data[prop])
end
end
if#tmp>0then
qualifiers=table.concat(tmp,i18n['qualifiers separator'])
end
end
ifnotqualifiersandoptions.showtargetdatathen
localentity
localFilterers=require'Modul:Wikidata/Filterers'
localFormatters=require'Modul:Wikidata/Formatters'
iflib.IsSnakValue(statement.mainsnak)then
ifstatement.mainsnak.datavalue.type=='wikibase-entityid'then
entity=mw.wikibase.getEntity(Formatters.getRawValue(statement.mainsnak,{}))
else
error(lib.formatError('invalid-datatype',statement.mainsnak.property,statement.mainsnak.datatype,'wikibase-item/wikibase-property'))
end
end
ifentitythen
localPropList=lib.textToTable(options.showtargetdata)
localdate
localrank='best'
ifoptions.targetdatethen
iflib.isPropertyId(options.targetdate)then
date=p.getRawValueFromLua{entity=options.entity,property=options.targetdate}
else
date=options.targetdate
end
ifdatethen
rank='valid'
end
end
localoptions={
addclass=false,
autoformat=true,
date=date,
entity=entity,
isQualifier=true,
label='short',
nolink=true,
precision=9,
rank=rank,
sort={'date'},
}
localSnaks={}
for_,propertyinipairs(PropList)do
localresult
ifmw.ustring.lower(property)=='time'then
localData={}
forkey,arrayinpairs(lib.props)do
for_,propinipairs(array)do
options.property=prop
localStatements=Filterers.filterStatementsFromEntity(entity,options)
for_,statementinipairs(Statements)do
Data[key]=statement.mainsnak
break
end
end
end
ifData.beginorData.endingthen
result=lib.formatDateRange(Data,options)
end
else
options.property=property
result=p.formatStatementsFromLua(options)
end
ifresultthen
table.insert(Snaks,result)
end
end
if#Snaks>0then
qualifiers=table.concat(Snaks,i18n['qualifiers separator'])
end
end
end
ifqualifiersthen
ifoptions.delimiterthen
result=result..options.delimiter..qualifiers
else
result=result..' ('..qualifiers..')'
end
end
ifdata.refanddata.ref~=''then
returnresult..data.ref..lib.category('references')
end
returnresult
end
localfunctionformatStatements(statements,options)
localformattedStatements={}
for_,statementinipairs(statements)do
table.insert(formattedStatements,formatStatement(statement,options))
end
returnformattedStatements
end
localfunctiongetStatements(id,options)
ifnotidthen
return{}
end
localstatements=mw.wikibase.getAllStatements(id,options.property:upper())
localFilterers=require'Modul:Wikidata/Filterers'
Filterers.filterStatements(statements,options)
returnstatements
end
localfunctionprepareShowMore(options)
ifoptions.limitandlib.IsOptionTrue(options,'showmore')then
options.limit=options.limit+1
returntrue
end
returnfalse
end
localfunctionhandleShowMore(values,limit,add_more)
ifadd_morethen
if#values==limitthen
table.remove(values)
else
add_more=false
end
end
returnadd_more
end
localfunctionmakeList(values,options,add_more,link)
values=removeDuplicates(values)-- TODO: maybe make optional
ifadd_morethen
localparts=mw.text.split(link,'#',true)-- b/c
table.insert(values,mw.ustring.format(i18n['more-on-Wikidata'],parts[1],parts[2]or''))
end
localtext
ifoptions.list=='ul'oroptions.list=='ol'then
localli={}
for_,valinipairs(values)do
table.insert(li,mw.ustring.format('<li>%s</li>',val))
end
text=mw.ustring.format('<%s class= "wd" >%s</%s>',options.list,table.concat(li),options.list)
else
text=mw.text.listToText(values,options.separator,options.conjunction)
iflib.IsOptionTrue(options,'addlink')then
-- TODO: data-bridge-edit-flow
text=mw.ustring.format('%s <sup class= "wd-link" >([[d:%s|e]])</sup>',text,link)
end
iftostring(options.addclass)~='false'then
text=lib.addWdClass(text)
end
end
returntext
end
localfunctiongetFormattedStatements(options)
options.limit=tonumber(options.limit)--TODO default?
localadd_more=prepareShowMore(options)
localid=findEntityId(options)
localstatements=getStatements(id,options)
if#statements==0thenreturnnilend
add_more=handleShowMore(statements,options.limit,add_more)
options.id=id
-- Format statements and concat them cleanly
localformattedStatements=formatStatements(statements,options)
localproperty=mw.ustring.upper(options.property)
locallink=mw.ustring.format('%s#%s',id,property)
localtext=makeList(formattedStatements,options,add_more,link)
iflib.IsOptionTrue(options,'addcat')then
text=text..lib.category('used-property',property)
end
returntext
end
localfunctiongetRawValue(options)
ifnotoptions.rankthen
options.rank='best'
end
for_,statementinipairs(p.getStatements(options))do
localFormatters=require'Modul:Wikidata/Formatters'
returnFormatters.getRawValue(statement.mainsnak,options)
end
returnnil
end
localfunctiongetQualifiers(args)
ifnotargs.qualifierthen
error(lib.formatError('param-not-provided','qualifier'))
end
ifnotargs.rankthen
args.rank='best'
end
for_,statementinipairs(p.getStatements(args))do
ifstatement.qualifiersthen
localqualifier_args=lib.augmentArgs(args,{},'qualifiers ')
localqualifiers=mw.clone(statement.qualifiers[mw.ustring.upper(args.qualifier)]or{})
localFilterers=require'Modul:Wikidata/Filterers'
Filterers.filterQualifiers(qualifiers,qualifier_args)
returnqualifiers
end
return{}
end
return{}
end
----- API pro šablony -----
functionp.compareStatements(frame)
localargs=getArgs(frame,{frameOnly=true})
returnp._compareStatements(args)
end
functionp.dumpWikidataEntity(frame)
localargs=getArgs(frame,{frameOnly=true})
returnmw.dumpObject(mw.wikibase.getEntity(args.id))
end
functionp.getBadges(frame)
localargs=getArgs(frame,{frameOnly=true})
localsite=args.site
ifnotsitethen
error(lib.formatError('param-not-provided','site'))
end
localid=findEntityId(args)
ifnotidthen
returnnil
end
localBadges={}
localFormatters=require'Modul:Wikidata/Formatters'
for_,badgeinipairs(mw.wikibase.getBadges(id,site))do
table.insert(Badges,Formatters.formatRawValue(badge,'wikibase-entityid'))
end
returntable.concat(Badges,', ')
end
functionp.getLabel(frame)
localargs=getArgs(frame,{frameOnly=true})
localid=findEntityId(args)
ifnotidthen
returnnil
end
locallang,label=args.lang
iflangthen
label=mw.wikibase.getLabelByLang(id,lang)
else
label,lang=mw.wikibase.getLabelWithLang(id)
end
ifnotlabelthenreturnnilend
label=mw.text.nowiki(label)
iflib.IsOptionTrue(args,'addclass')then
iflang~=i18n.langthen
returnlib.addWdClass(lib.formatTextInLanguage(label,lang))
else
returnlib.addWdClass(label)
end
end
returnlabel
end
functionp.getDescription(frame)
localargs=getArgs(frame,{frameOnly=true})
localid=findEntityId(args)
ifnotidthen
returnnil
end
locallang,description=args.lang
iflangthen
description=mw.wikibase.getDescriptionByLang(id,lang)
else
description,lang=mw.wikibase.getDescriptionWithLang(id)
end
ifnotdescriptionthenreturnnilend
description=mw.text.nowiki(description)
iflib.IsOptionTrue(args,'addclass')then
iflang~=i18n.langthen
returnlib.addWdClass(lib.formatTextInLanguage(description,lang))
else
returnlib.addWdClass(description)
end
end
returndescription
end
functionp.getAliases(frame)
localargs=getArgs(frame,{frameOnly=true})
localentity=findEntity(args)
locallang=args.langori18n.lang
ifnotentityornotentity.aliasesornotentity.aliases[lang]then
returnnil
end
args.limit=tonumber(args.limit)
localadd_more=prepareShowMore(args)
locallimit=args.limit
localAliases={}
fori,aliasinipairs(entity.aliases[lang])do
table.insert(Aliases,mw.text.nowiki(alias.value))
ifi==limitthen
break
end
end
add_more=handleShowMore(Aliases,limit,add_more)
returnmakeList(Aliases,args,add_more,entity.id)
end
functionp.getId(frame)
localargs=getArgs(frame,{
frameOnly=false,
parentOnly=false,
parentFirst=false,
})
ifnotargs[1]then
returnmw.wikibase.getEntityIdForCurrentPage()
end
for_,titleStringinipairs(args)do
localid=getIdFromTitle(titleString,args.wiki)
ifidthen
returnid
end
end
returnnil
end
functionp.getSitelink(frame)
returngetSitelink(getArgs(frame,{frameOnly=true}))
end
functionp.formatStatements(frame)
localargs=getArgs(frame,{frameOnly=true})
ifargs.valuethenreturnargs.valueend-- b/c for other wikis
localparent_args=getArgs(frame,{parentOnly=true})
localadd
ifparent_args.itemandnotargs.idthen
args.id=parent_args.item
add=lib.category('arbitrary-data')
end
localvalue=getFormattedStatements(args)
ifaddandvaluethen
returnvalue..add
end
returnvalue
end
functionp.formatTimespan(frame)
localargs=getArgs(frame,{frameOnly=true})
localsubargs={}
localdata={}
localdefaults={sort='default'}
forkeyinpairs{start=true,['end']=true}do
localprefix=key..' '
ifnotargs[prefix..'property']then
error('param-not-provided',prefix..'property')
end
subargs[key]=lib.augmentArgs(args,defaults,prefix)
localstatements=p.getStatements(subargs[key])
if#statements>0then
data[key]=statements
end
end
ifnotdata.startandnotdata['end']then
returnnil
end
localout={}
ifdata.startanddata['end']then
for_,startStinipairs(data.start)do
for_,endStinipairs(data['end'])do
localseparator=' – '
-- TODO
table.insert(
out,
mw.ustring.format('%s%s%s',
formatStatement(startSt,subargs.start),
separator,
formatStatement(endSt,subargs['end'])
)
)
end
end
else
forkeyinpairs{start=true,['end']=true}do
for_,statementinipairs(data[key]or{})do
table.insert(
out,
mw.ustring.format(
args[key..'-format']ori18n.date[key],
formatStatement(statement,subargs[key])
)
)
end
end
end
returnmakeList(out,args,false,'')
end
functionp.formatStatementsFromTemplate(frame)
localargs=getArgs(frame,{
frameOnly=false,
parentOnly=false,
parentFirst=false,
})
returngetFormattedStatements(args)
end
functionp.getCount(frame)
localargs=getArgs(frame,{frameOnly=true})
args.limit=nil
return#p.getStatements(args)
end
functionp.getRawValue(frame)
returngetRawValue(getArgs(frame,{frameOnly=true}))
end
functionp.getQualifier(frame)
localargs=getArgs(frame,{frameOnly=true})
args.limit=tonumber(args['qualifiers limit']orargs.limit)
localadd_more=prepareShowMore(args)
locallimit=args.limit
args['qualifiers limit']=limit
args.limit=1
localqualifiers=getQualifiers(args)
if#qualifiers==0then
returnnil
end
add_more=handleShowMore(qualifiers,limit,add_more)
localFormatters=require'Modul:Wikidata/Formatters'
localformattedQualifiers={}
for_,qualifierinipairs(qualifiers)do
table.insert(formattedQualifiers,Formatters.getFormattedValue(qualifier,args))
end
locallink=''-- TODO: we don't have statement anchor
-- TODO: references?
returnmakeList(formattedQualifiers,args,add_more,link)
end
functionp.getRawQualifier(frame)
localargs=getArgs(frame,{frameOnly=true})
args.limit=1
for_,qualifierinipairs(getQualifiers(args))do
localFormatters=require'Modul:Wikidata/Formatters'
returnFormatters.getRawValue(qualifier,args)
end
returnnil
end
functionp.getCurrentId()
returnmw.wikibase.getEntityIdForCurrentPage()
end
functionp.formatEntity(frame)
localargs=getArgs(frame,{frameOnly=true})
args.id=args.idorp.getCurrentId()
ifargs.idthen
localFormatters=require'Modul:Wikidata/Formatters'
returnFormatters.formatRawValue(args.id,'wikibase-entityid',args)
end
returnnil
end
functionp.entityExists(frame)
returnoutputBool(
mw.wikibase.entityExists(frame.args.idorframe.args[1]),
lib.IsOptionTrue(frame.args,'ifexpr'))
end
functionp.isValidEntityId(frame)
returnoutputBool(
mw.wikibase.isValidEntityId(frame.args.idorframe.args[1]),
lib.IsOptionTrue(frame.args,'ifexpr'))
end
----- API pro moduly -----
functionp.formatStatementsFromLua(options)
returngetFormattedStatements(options)
end
functionp.getSitelinkFromLua(options)
returngetSitelink(optionsor{})
end
functionp.getStatements(args)
localid=findEntityId(args)
returngetStatements(id,args)
end
functionp.getStatementsWithData(args)
localstatements=p.getStatements(args)
localresult={}
for_,statementinipairs(statements)do
table.insert(result,formatStatementAndData(statement,args))
end
returnresult
end
functionp.getRawValueFromLua(options)
returngetRawValue(options)
end
functionp.getRawValues(options)
localValues={}
localFormatters=require'Modul:Wikidata/Formatters'
for_,stinipairs(p.getStatements(options))do
table.insert(Values,Formatters.getRawValue(st.mainsnak,options))
end
returnValues
end
p.formatStatementsTable=formatStatements
functionp._compareStatements(args)
ifnotargs.valuethen
error(lib.formatError('param-not-provided','value'))
end
localstatements=p.getStatements(args)
localcompare=require'Modul:Wikidata/compare'
returncompare.compareValues(args.value,statements,args)
end
returnp