Modul:Wikidata
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í
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(Chyba skriptu: Funkce „getLabel “neexistuje.(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 – 17. č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í 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) |
locali18n={
["errors"]={
["param-not-provided"]="Nezadán parametr %s",
["entity-not-found"]="Entita nenalezena",
["unknown-claim-type"]="Neznámý typ tvrzení: %s",
["unknown-snak-type"]="Neznámý typ snaku: %s",
["unknown-datavalue-type"]="Neznámý typ datové hodnoty: %s",
["unknown-entity-type"]="Neznámý typ entity: %s",
["unknown-value-module"]="Musíte nastavit oba parametry value-module i value-function",
["value-module-not-found"]="Modul odkazovaný parametrem value-module nenalezen",
["value-function-not-found"]="Funkce odkazovaná parametrem value-function nenalezena",
["invalid-field"]="Neplatné pole"
},
["somevalue"]="''neznámá hodnota''",
["novalue"]="''bez hodnoty''"
}
functiongetEntityFromId(id)
returnmw.wikibase.getEntityObject(id)
end
functionwrapWithSpan(str,param,value)
return'<span '..param..'= "'..value..' ">'..str..'</span>'
end
functionformatError(key,...)
returnwrapWithSpan(string.format(i18n.errors[key],...),'class','error')
end
functiongetSitelink(options)
localsite=nil
ifoptions.site~=nilandoptions.site~=''then
site=options.site
elseifoptions[1]~=nilandoptions[1]~=''then
site=options[1]
else
returnformatError('param-not-provided','site')
end
localentity=nil
entity=getEntityFromId(options.item)
ifnotentityornotentity.sitelinksthen
return''
end
localsitelink=nil
ifentity.sitelinks[site]then
sitelink=entity.sitelinks[site].title
end
ifnotsitelinkthen
return''
elseifnotoptions.patternoroptions.pattern==''then
returnsitelink
else
formatFromPattern(sitelink,options)
end
end
functiongetEntityIdFromValue(value)
localentityType=value['entity-type']
ifentityType=='item'then
return'q'..value['numeric-id']
elseifentityType=='property'then
return'p'..value['numeric-id']
else
returnformatError('unknown-entity-type',entityType)
end
end
functionformatStatements(options)
ifnotoptions.propertythen
returnformatError('param-not-provided','property')
end
--Get entity
localentity=nil
ifoptions.entityandtype(options.entity)=="table"then
entity=options.entity
else
entity=getEntityFromId(options.item)
end
ifnotentitythen
return''--TODO error?
end
ifnotentity.claimsornotentity.claims[string.upper(options.property)]then
return''--TODO error?
end
locallimit
ifoptions.limitandoptions.limit~=''andtype(options.limit)=='number'then
limit=tonumber(options.limit)
else
limit=999
end
--Format statements and concat them cleanly
localformattedStatements={}
fori,statementinpairs(entity.claims[options.property:upper()])do
ifoptions.rank=='one'then
returnformatStatement(statement,options)--Output only one value
elseif(
((notoptions.rankoroptions.rank=='normal')and(statement.rank=='normal'orstatement.rank=='preferred'))or
(options.rank=='preferred'andstatement.rank=='preferred')or
(options.rank=='all')
)then
table.insert(formattedStatements,formatStatement(statement,options))
end
end
returnmw.text.listToText(formattedStatements,options.separator,options.conjunction)
end
functionformatStatement(statement,options)
ifnotstatement.typeorstatement.type~='statement'then
returnformatError('unknown-claim-type',statement.type)
end
returnformatSnak(statement.mainsnak,options)
--TODO reference and qualifiers
end
functionformatSnak(snak,options)
ifsnak.snaktype=='somevalue'then
returni18n['somevalue']
elseifsnak.snaktype=='novalue'then
returni18n['novalue']
elseifsnak.snaktype=='value'then
returnformatDatavalue(snak.datavalue,options)
else
returnformatError('unknown-snak-type',snak.snaktype)
end
end
functionformatDatavalue(datavalue,options)
--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'])
ifnotformatterthen
returnformatError('value-module-not-found')
end
localfun=formatter[options['value-function']]
ifnotfunthen
returnformatError('value-function-not-found')
end
returnfun(datavalue.value,options)
end
--Default formatters
ifdatavalue.type=='wikibase-entityid'then
returnformatEntityId(getEntityIdFromValue(datavalue.value),options)
elseifdatavalue.type=='string'then
ifoptions.patternandoptions.pattern~=''then
returnformatFromPattern(datavalue.value,options)
else
returndatavalue.value
end
elseifdatavalue.type=='time'then
localTime=require'Module:Time'
returnTime.newFromWikidataValue(datavalue.value):toString()
elseifdatavalue.type=='globecoordinate'then
ifnotoptions.fieldthen
returnformatError('param-not-provided','field')
elseifoptions.field=="latitude"oroptions.field=="longitude"oroptions.field=="precision"oroptions.field=="globe"then
returndatavalue.value[options.field]
else
returnformatError('invalid-field')
end
elseifdatavalue.type=='monolingualtext'then
returnwrapWithSpan(datavalue.value.text,'lang',datavalue.value.language)
elseifdatavalue.type=='quantity'then
returntonumber(datavalue.value.amount)
else
returnformatError('unknown-datavalue-type',datavalue.type)
end
end
functionformatEntityId(entityId,options)
locallabel=mw.wikibase.label(entityId)
locallink=mw.wikibase.sitelink(entityId)
iflinkthen
iflabelthen
return'[['..link..'|'..label..']]'
else
return'[['..link..']]'
end
elseiflabelthen
ifoptions.wrapandoptions.wrap~=""andmw.ustring.match(options.wrap,"$1")~=nilthen
localformattedLabel,_=mw.ustring.gsub(options.wrap,"$1",label)
returnformattedLabel
else
returnwrapWithSpan(label,'class','InfoFromWikidata')
end
else
returngetLinkWhenNonexistingLabel(entityId)
end
end
functionformatFromPattern(str,options)
returnmw.ustring.gsub(options.pattern,'$1',str)..''--Hack to get only the first result of the function
end
functiongetLinkWhenNonexistingLabel(entityId)
localtitle=mw.title.getCurrentTitle().text
return'[[Soubor:Wikidata-edit.svg|27x17px|link=d:'..entityId..'|Položka na Wikidatech neobsahuje český štítek; můžete ho doplnit]]<code>[[d:'..entityId..'|'..entityId..']]</code>[[Kategorie:Údržba:Doplnit štítek na Wikidatech|'..title..']]'
end
localp={}
functionp.dumpWikidataEntity(frame)
localargs=frameandframe.argsornil
returnmw.dumpObject(getEntityFromId(argsandargs.idornil))
end
functionp.getSitelink(frame)
returngetSitelink(frame.args)
end
functionp.formatStatements(frame)
localargs=frame.args
--If a value is already set, use it
ifargs.valueandargs.value~=''then
returnargs.value
end
returnformatStatements(frame.args)
end
functionp.formatStatementsFromLua(options)
--If a value is already set, use it
ifoptions.valueandoptions.value~=''then
returnoptions.value
end
returnformatStatements(options)
end
functionp.getCurrentId()
returnmw.wikibase.getEntityIdForCurrentPage()
end
returnp