Přeskočit na obsah

Modul:Wikidata

Tato stránka je zamčena
Z Wikipedie, otevřené encyklopedie

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ů:

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.

Přehled všech funkcí a parametrů
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 funkcegetCountagetQualifier)
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 – 5. července 2024, 10 – červenec 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í funkcegetRawValuenagetQualifier 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