Přeskočit na obsah

Modul:Wikidata

Z Wikizdrojů, volně dostupné knihovny
Verze z 8. 12. 2019, 21:48, kterou vytvořilJAn Dudík(diskuse|příspěvky)(function p.getCurrentId() return mw.wikibase.getEntityIdForCurrentPage() end)

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í

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(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í 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)



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