Module:Wikidata
Εμφάνιση
Τεκμηρίωση module[προβολή] [επεξεργασία] [ιστορικό] [ανανέωση]
Το κύριο module για εργασία με τα δεδομένα των Wikidata. Η βασική μορφή προέρχεται από test2wiki:Module:Wikidata, και έχει επεκταθεί με νέες δυνατότητες.
Το module διαιρείται σε υπό modules:
- Module: Wikidata/lib - βιβλιοθήκη λειτουργιών για όλα τα άλλα υπο modules.
- Module: Wikidata/i18n - διαμόρφωση με βάση την ελληνική Βικιπαίδεια
- Module: Wikidata/Filterers - φιλτράρισμα δηλώσεων, ορισμών κτλ.
- Module: Wikidata/Formatters - μορφοποίηση δεδομένων
- Module: Wikidata/Sorters - ταξινόμηση δεδομένων (αλφαβητικά, ανά ημερομηνία κτλ)
- Module: Wikidata/cite - μορφοποίηση παραπομπών
Δείτε επίσης τη λίστα των προτύπων που χρησιμοποιούν αυτό το module.
Χρήση
[επεξεργασία κώδικα]Τοποθετείστε το πρότυπο {{#invoke:Wikidata|λειτουργία|παράμετρος}}.
Οι παράμετροι και οι λειτουργίες που σημειώνονται με έναν αστερίσκο (*) δεν υποστηρίζονται πλήρως και δεν συνιστάται η χρήση τους. Αντίθετα, οι παράμετροι ή οι λειτουργίες που σημειώνονται με ένα σταυρό (†) είναι ξεπερασμένα και μπορεί σύντομα να αφαιρεθούν.
Λειτουργία | Περιγραφή λειτουργίας | Παράμετρος | Απαιτείται | Περιγραφή παραμέτρου |
---|---|---|---|---|
formatStatements | ανακτά τα δεδομένα, επιλέγει αξιώσεις, φιλτράρει, ταξινομεί και μορφοποιεί τις τιμές τους και επιστρέφει τη λίστα τους | id | όχι | ένα αναγνωριστικό του αντικειμένου (το γράμμα "q" που ακολουθείται από ψηφία) ή τις ιδιότητες (το γράμμα "p" ακολουθούμενο από ψηφία) στα Wikidata, ποια δεδομένα θα πρέπει να ληφθούν για περαιτέρω εργασία μαζί του (σιωπηρά ένα στοιχείο που συνδέεται με αυτή τη σελίδα) |
of | όχι | το αναγνωριστικό των ιδιοτήτων στις Wikidata (το γράμμα "p" που ακολουθείται από ψηφία) από το οποίο η οντότητα που πραγματικά χρησιμοποιεί το στοιχείο αποκτάται χρησιμοποιώντας την πρώτη προτιμώμενη τιμή της ιδιότητας | ||
page* | όχι | το όνομα της σελίδας της οποίας το αντικείμενο πρόκειται να χρησιμοποιηθεί για την ανάκτηση των δεδομένων | ||
property | ναι | αναγνωριστικό ιδιότητας Wikidata (το γράμμα "p" που ακολουθείται από ψηφία) της οποίας οι τιμές θα μορφοποιηθούν και θα εμφανιστούν | ||
value* | όχι | εάν αυτή η παράμετρος έχει οριστεί, εμφανίζονται τα περιεχόμενά της | ||
over* | όχι | αν είναι «αληθής», η κενή τιμή του «value» δεν θεωρείται καταχωρημένη | ||
compare* | όχι | εάν είναι «αληθής» και η παράμετρος «value» έχει καθοριστεί, το module συγκρίνει το περιεχόμενό της και τα δεδομένα στα Wikidata σύμφωνα με τις άλλες παραμέτρους που καθορίζονται για το φιλτράρισμα δεδομένων και τις επισημαίνει με την κλάση CSS σύμφωνα με τη συνέπεια των δεδομένων | ||
addlink | όχι | αν «αληθής», ένα (e) εμφανίζεται απευθείας στην ιδιότητα στο τέλος των δεδομένων από το χώρο αποθήκευσης | ||
addclass | όχι | αν είναι «ψευδής», καταστέλλει την ταξινόμηση δεδομένων της κλάσης CSS </ span> (χρήση μόνο σε σπάνιες περιπτώσεις) | ||
value-formatter | όχι | το υπό module του Module:Wikidata/Formatters (της υποσελίδας) που χρησιμοποιείται για τη μορφοποίηση των τιμών εάν το προεπιλεγμένο υπό module δεν είναι ικανοποιητικό | ||
limit | όχι | ο μέγιστος αριθμός τιμών που εμφανίζονται στη λίστα | ||
rank | όχι | η απαιτούμενη κατάσταση της τιμής σε μια δήλωση: μπορεί να είναι «all» - θα χρησιμοποιηθούν όλες οι δηλώσεις, best - θα χρησιμοποιηθούν είτε οι δηλώσεις που έχουν προτιμώμενη βαθμίδα είτε μόνο όσοι έχουν κανονική βαθμίδα αν δεν χρησιμοποιείται η προτιμώμενη. valid (προεπιλογή) - χρησιμοποιούνται τόσο οι δηλώσεις με προτιμώμενες όσο και με κανονικές βαθμίδες. preferred, normal, deprecated - μόνο δηλώσεις με την κατάλληλη βαθμίδα | ||
withqualifier | όχι | Αναγνωριστικό ιδιότητας Wikidata (το γράμμα "p" που ακολουθείται από ψηφία), το οποίο πρέπει να αντιστοιχιστεί στη δεδομένη τιμή της δήλωσης ως ένας ορισμός | ||
withlang | όχι | ο κώδικας γλώσσας, στον οποίο πρέπει να είναι οι τιμές του μονογλωσσικού κειμένου | ||
date | όχι | ημερομηνίας σε μορφή ΕΕΕΕ-ΜΜ-ΗΗ ή #now (σημερινή ημερομηνία) στην οποία θα πρέπει να ισχύει η δήλωση | ||
sort | όχι | ο τρόπος αλλαγής της προεπιλεγμένης σειράς κάθε τιμής. Η τιμή της παραμέτρου αντιστοιχεί σε δευτερεύουσες σελίδες που χωρίζονται με κόμματα του υπό module Module:Wikidata/Sorters | ||
invert | όχι | αν έχει οριστεί «αληθής» και έχει οριστεί «sort», η ταξινόμηση θα είναι πτωτική, όχι η προεπιλεγμένη αύξουσα | ||
pattern | όχι | αν ο τύπος συμβολοσειράς είναι string (κείμενο), αυτή η μορφή είναι για μορφοποίηση, με το "$1" να αντικαθιστά το string | ||
autoformat† | όχι | εάν είναι «αληθής» και ο τύπος συμβολοσειράς είναι string (κείμενο), το module θα προσπαθήσει να βρει αντικαταστάτη για την ιδιότητα (P1630) στη σελίδα ιδιοτήτων και να την εφαρμόσει | ||
precision | όχι | προσαρμογή της μορφής του χρόνου (εάν η πραγματική ακρίβεια είναι μικρότερη, η μορφή προσαρμόζεται σε αυτήν). 11 – 21. Νοεμβρίου 2024, 10 – Νοέμβριος 2024, 9 – 2024 κ.λπ. | ||
somevalue | όχι | εάν συμπληρωθεί, το module θα εμφανίσει επίσης την ειδική τιμή "άγνωστη τιμή" μαζί με το κείμενο | ||
novalue | όχι | εάν συμπληρωθεί, το module θα εμφανίσει επίσης την ειδική τιμή "καμία τιμή" μαζί με το κείμενο | ||
showqualifier | όχι | τα αναγνωριστικά των προσδιοριστών της ιδιότητας στα Wikidata (το γράμμα "p" που ακολουθείται από ψηφία ή "time"), τα οποία χωρίζονται με κόμματα, που εμφανίζονται σε παρένθεση μετά την εκχώρηση της τιμής στην τιμή αυτή ως ορισμός | ||
showtargetdata* | όχι | παρόμοια με το "showqualifier", αλλά τα δεδομένα αντλούνται από το αντικείμενο στόχο | ||
targetdate* | όχι | παρόμοια με την "date", αναφέρεται στα στοιχεία του αντικειμένου στόχου | ||
showsource | όχι | αν είναι "αληθής", οι αναφορές προστίθενται στα δεδομένα | ||
showmore | όχι | pokud je hodnota „true“, tak se v případě, že existuje více hodnot, než kolik povoluje limit, zobrazí na konci jejich seznamu text „… více na Wikidatech“ s odkazem přímo na vlastnost | ||
separator | όχι | znaky, jimiž se v seznamu oddělí jednotlivé hodnoty, kromě předposlední a poslední (implicitně čárka) | ||
conjunction | όχι | znaky, jimiž se v seznamu oddělí předposlední a poslední hodnota (implicitně spojka „a“) | ||
formatStatementsFromLua | funkce, kterou používají pouze jiné moduly a která je jinak shodná s „formatStatements“ | entity | όχι | tabulka s entitou, s níž má modul pracovat |
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 | όχι | 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) |
getSitelink | vrátí odkaz na článek daného projektu | site / první nepojmenovaný | όχι | zkratka projektu (implicitně „cswiki“) |
pattern | όχι | vzor pro zformátování odkazu, kde „$1“ je název odkazovaného článku (implicitně „$1“) | ||
id | όχι | 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 | όχι | 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 | ||
addclass | όχι | pokud je „true“, odkaz bude obalen CSS třídou | ||
getLabel | vrátí štítek položky v daném jazyce | lang | όχι | zkratka jazyka (implicitně „cs“) |
id | όχι | 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 | όχι | 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 | ||
addclass | όχι | pokud je „true“, štítek bude obalen CSS třídou | ||
getDescription | vrátí popisek položky v daném jazyce | lang | όχι | zkratka jazyka (implicitně „cs“) |
id | όχι | 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 | όχι | 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 | ||
addclass | όχι | pokud je „true“, popisek bude obalen CSS třídou | ||
getAliases | vrátí aliasy položky v daném jazyce | lang | όχι | zkratka jazyka (implicitně „cs“) |
limit | όχι | maximální počet aliasů, který se má zobrazit | ||
id | όχι | 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 | όχι | 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 | ||
separator | όχι | znaky, jimiž se v seznamu oddělí jednotlivé aliasy, kromě předposledního a posledního (implicitně čárka) | ||
conjunction | όχι | znaky, jimiž se v seznamu oddělí předposlední a poslední alias (implicitně spojka „a“) | ||
getBadges | vrátí štítek odznaku přiřazeného danému odkazu na článek | site | ναι | zkratka projektu |
id | όχι | 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 | όχι | 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 | ||
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 o Βικιπαίδεια:Ανακατεύθυνση, 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ě.
(funkčnost závisí na phab:T74815) |
první, druhý, ... nepojmenovaný | όχι | název stránky na této wiki (implicitně aktuální stránka) |
getRawValue | použije stejná kritéria jako „formatStatements“, ovšem vrátí strojově čitelný (nezformátovaný) údaj | všechny parametry pro filtrování | ||
field | όχι | pokud je typ hodnoty souřadnice, toto je její část, která se zobrazí; jedno z „latitude“, „longitude“, „precision“ a „globe“ | ||
getRawValueFromLua | jako „getRawValue“, pro použití v jiném modulu | entity | όχι | tabulka s entitou, s níž má modul pracovat |
getQualifier* | qualifier | ναι | ||
getRawQualifier* | qualifier | ναι | ||
formatEntity | lokalizuje položku zadanou pomocí jejího identifikátoru (pokusí se vytvořit lokální odkaz a zobrazit štítek) | id | όχι | id položky, která se má zformátovat (jinak id položky, se kterou je stránka propojena) |
--require "Module:No globals"
local p = {}
local lib = require 'Module:Wikidata/lib'
local i18n = mw.loadData('Module:Wikidata/i18n')
local getArgs = (require 'Module:Arguments').getArgs
local function getEntityIdFromStatements(statements)
for _, statement in ipairs(statements) do
if lib.IsSnakValue(statement.mainsnak) then
if statement.mainsnak.datavalue.type ~= 'wikibase-entityid' then
return error(lib.raiseInvalidDatatype('getEntityIdFromStatements',
statement.mainsnak.datatype, {'wikibase-item', 'wikibase-property'}))
end
local Formatters = require 'Module:Wikidata/Formatters'
return Formatters.getRawValue(statement.mainsnak)
end
end
return nil
end
local function getEntityIdFromEntity(entity, prop)
local prop = mw.ustring.upper(prop)
local statements = entity:getBestStatements(prop)
return getEntityIdFromStatements(statements)
end
local function getEntityIdFromId(id, prop)
local prop = mw.ustring.upper(prop)
local statements = mw.wikibase.getBestStatements(id, prop)
return getEntityIdFromStatements(statements)
end
local function getIdFromTitle(titleString)
local title = mw.title.new(titleString)
while title do
local id = mw.wikibase.getEntityIdForTitle(title.prefixedText)
if id then
return id
end
title = title.redirectTarget
end
return nil
end
local function findEntityId(options)
local id
if options.entity and type(options.entity) == 'table' then
id = options.entity.id
end
if not id and options.page then
id = getIdFromTitle(options.page)
if not id then
return nil
end
end
if not id then
id = options.id or p.getCurrentId()
end
if id and options.of then
id = getEntityIdFromId(id, options.of)
end
return id
end
local function findEntity(options)
local entity
if options.entity and type(options.entity) == 'table' then
entity = options.entity
end
if not entity then
if options.id then
local id = options.id:upper()
entity = mw.wikibase.getEntity(id)
if entity and entity.id ~= id then
mw.log(id .. ' je přesměrování na ' .. entity.id)
end
else
if options.page then
local id = getIdFromTitle(options.page)
if id then
entity = mw.wikibase.getEntity(id)
end
else
entity = mw.wikibase.getEntity()
end
end
end
if options.of then
if entity then
local id = getEntityIdFromEntity(entity, options.of)
if id then
return mw.wikibase.getEntity(id)
end
end
return nil
end
return entity
end
local function getSitelink(options)
local id = findEntityId(options)
if not id then
return nil
end
local site = options.site or options[1]
local sitelink = mw.wikibase.sitelink(id, site)
if not sitelink then
return nil
end
if options.pattern then
sitelink = lib.formatFromPattern(sitelink, options.pattern)
end
if lib.IsOptionTrue(options, 'addclass') then
sitelink = lib.addWdClass(sitelink)
end
return sitelink
end
local function formatStatement(statement, options)
if not statement.type or statement.type ~= 'statement' then
return error(lib.formatError('unknown-claim-type', statement.type or '[neznámý]'))
end
local Filterers = require 'Module:Wikidata/Filterers'
local Formatters = require 'Module:Wikidata/Formatters'
local mainsnak = Formatters.getFormattedValue(statement.mainsnak, options)
if options.isQualifier == true then
return mainsnak
end
local qualifiers, targetdata, references
if statement.qualifiers and options.showqualifier then
local PropList = lib.textToTable(options.showqualifier)
local Snaks = {}
for _, property in ipairs(PropList) do
local Values = {}
local property = mw.ustring.upper(property)
local format_options = {
autoformat = true,
isQualifier = true,
label = 'short',
precision = options['qualifiers precision'] or 9,
property = property
}
if statement.qualifiers[property] then
local Qualifiers = mw.clone(statement.qualifiers[property])
Filterers.filterQualifiers(Qualifiers, options)
for _, snak in ipairs(Qualifiers) do
if lib.IsSnakValue(snak) then
table.insert(Values, Formatters.getFormattedValue(snak, {}))
end
end
elseif property == 'TIME' then
local Data = {}
-- todo: factor out
for key, array in pairs(lib.props) do
for _, prop in ipairs(array) do
for _, snak in ipairs(statement.qualifiers[prop] or {}) do
Data[key] = snak
break
end
end
end
if Data.begin or Data.ending then
table.insert(Values, lib.formatDateRange(Data, format_options))
end
end
if #Values > 0 then
table.insert(Snaks, mw.text.listToText(Values))
end
end
if #Snaks > 0 then
qualifiers = table.concat(Snaks, options['qualifiers separator'] or i18n['qualifiers separator'])
end
end
if not qualifiers and options.showtargetdata then
local entity
if lib.IsSnakValue(statement.mainsnak) then
if statement.mainsnak.datavalue.type == 'wikibase-entityid' then
entity = mw.wikibase.getEntity(Formatters.getRawValue(statement.mainsnak))
else
return error(lib.formatError('invalid-datatype', statement.mainsnak.property, statement.mainsnak.datatype, 'wikibase-item/wikibase-property'))
end
end
if entity then
local PropList = lib.textToTable(options.showtargetdata)
local date
local rank = 'best'
if options.targetdate then
if lib.isPropertyId(options.targetdate) then
date = p.getRawValueFromLua{ entity = options.entity, property = options.targetdate }
else
date = options.targetdate
end
if date then
rank = 'valid'
end
end
local options = {
addclass = false,
autoformat = true,
date = date,
entity = entity,
isQualifier = true,
label = 'short',
precision = 9,
rank = rank,
sort = {'date'},
}
local Snaks = {}
for _, property in ipairs(PropList) do
local result
if mw.ustring.lower(property) == 'time' then
local Data = {}
for key, array in pairs(lib.props) do
for _, prop in ipairs(array) do
options.property = prop
local Statements = Filterers.filterStatementsFromEntity(entity, options)
for _, statement in ipairs(Statements) do
Data[key] = statement.mainsnak
break
end
end
end
if Data.begin or Data.ending then
result = lib.formatDateRange(Data, options)
end
else
options.property = property
result = p.formatStatementsFromLua(options)
end
if result then
table.insert(Snaks, result)
end
end
if #Snaks > 0 then
targetdata = table.concat(Snaks, '; ')
end
end
end
if statement.references and lib.IsOptionTrue(options, 'showsource') then
local Module = require 'Module:Wikidata/cite'
references = Module.formatReferences(statement.references, options)
end
if qualifiers or targetdata then
if options.delimiter then
mainsnak = mainsnak .. options.delimiter .. (qualifiers or targetdata)
else
mainsnak = mainsnak .. ' (' .. (qualifiers or targetdata) .. ')'
end
end
if references and references ~= '' then
return mainsnak .. references .. lib.category('references')
end
return mainsnak
end
local function formatStatements(statements, options)
local formattedStatements = {}
for _, statement in ipairs(statements) do
if not statement.type or statement.type ~= 'statement' then
return error(lib.formatError('unknown-claim-type', statement.type or '[neznámý]')) -- fixme: i18n
end
local formatted = formatStatement(statement, options)
local add = true
for _, fmt in ipairs(formattedStatements) do
if formatted == fmt then
add = false
break
end
end
if add then -- not in_array
table.insert(formattedStatements, formatted)
end
end
return formattedStatements
end
local function getStatements(id, options)
if not id then
return {}
end
local statements = mw.wikibase.getAllStatements(id, options.property:upper())
local Filterers = require 'Module:Wikidata/Filterers'
Filterers.filterStatements(statements, options)
return statements
end
local function prepareShowMore(options)
if options.limit and lib.IsOptionTrue(options, 'showmore') then
options.limit = options.limit + 1
return true
end
return false
end
local function handleShowMore(values, limit, add_more)
if add_more then
if #values == limit then
table.remove(values)
else
add_more = false
end
end
return add_more
end
local function makeList(values, options, add_more)
if add_more then
table.insert(values, mw.ustring.format(i18n['more-on-Wikidata'], options.id, options.property))
end
return mw.text.listToText(values, options.separator, options.conjunction)
end
local function getFormattedStatements(options)
local value = options.value
if value then
if value == '' and lib.IsOptionTrue(options, 'over') then
value = nil
end
if value and not lib.IsOptionTrue(options, 'compare') then
return value
end
end
--Get entity
local options = lib.common.cleanArgs(options)
options.limit = tonumber(options.limit) --TODO default?
local add_more = false
if not lib.IsOptionTrue(options, 'compare') then
add_more = prepareShowMore(options)
end
local id = findEntityId(options)
local statements = getStatements(id, options)
options.property = mw.ustring.upper(options.property)
if value then
local compare = require 'Module:Wikidata/compare'
local marked, category = compare.compareValues(value, statements, {
catbase = options.catbase,
property = options.of or options.property
})
if tostring(options.addclass) ~= 'false' and marked then
value = marked
end
if lib.IsOptionTrue(options, 'addcat') and category then
return value .. category
end
return value
end
if #statements == 0 then return nil end
add_more = handleShowMore(statements, options.limit, add_more)
options.id = id
-- Format statements and concat them cleanly
local formattedStatements = formatStatements(statements, options)
value = makeList(formattedStatements, options, add_more)
if lib.IsOptionTrue(options, 'addlink') then
value = mw.ustring.format('%s <sup class="wd-link">([[d:%s#%s|e]])</sup>', value, id, options.property)
end
if lib.IsOptionTrue(options, 'addcat') then
value = value .. lib.category('used-property', options.property)
end
if tostring(options.addclass) ~= 'false' then
return lib.addWdClass(value)
end
return value
end
local function getRawValue(options)
if options.rank ~= 'best' and options.rank ~= 'preferred' then
local byRank = mw.ustring.match(options.sort or '', 'rank') and true
options.sort = lib.textToTable(options.sort or '')
if not byRank then
table.insert(options.sort, 1, 'rank')
end
end
for _, statement in ipairs(p.getStatements(options)) do
local Formatters = require 'Module:Wikidata/Formatters'
return Formatters.getRawValue(statement.mainsnak, options)
end
return nil
end
local function getQualifiers(args)
if not args.qualifier then
return error(lib.formatError('param-not-provided', 'qualifier'))
end
local all_qualifiers = {}
for _, statement in ipairs(p.getStatements(args)) do
if statement.qualifiers then
local qualifiers = mw.clone(statement.qualifiers[mw.ustring.upper(args.qualifier)] or {})
local Filterers = require 'Module:Wikidata/Filterers'
Filterers.filterQualifiers(qualifiers, args)
for _, q in ipairs(qualifiers) do
table.insert(all_qualifiers, q)
end
end
if not lib.IsOptionTrue(args, 'all') then
return all_qualifiers
end
end
return all_qualifiers
end
----- API pro šablony -----
function p.dumpWikidataEntity(frame)
local args = getArgs(frame, { removeBlanks = true })
return mw.dumpObject( mw.wikibase.getEntity( args.id ) )
end
function p.getBadges(frame)
local args = getArgs(frame, { removeBlanks = true })
local site = args.site
if not site then
return error(lib.formatError('param-not-provided', 'site'))
end
local entity = findEntity(args)
local Badges = {}
if entity and entity.sitelinks and entity.sitelinks[site] then
local Formatters = require 'Module:Wikidata/Formatters'
for _, badge in ipairs(entity.sitelinks[site].badges) do
table.insert(Badges, Formatters.formatRawValue(badge, 'wikibase-entityid'))
end
end
return table.concat( Badges, ', ' )
end
function p.getLabel(frame)
local args = getArgs(frame, { removeBlanks = true })
local id = findEntityId(args)
if not id then
return nil
end
local lang = args.lang
local code = mw.language.getContentLanguage():getCode()
if not lang or lang == code then
local label, _ = lib.getLabelInLanguage(id, { code })
if label and lib.IsOptionTrue(args, 'addclass') then
label = lib.addWdClass(label)
end
return label
end
local entity = mw.wikibase.getEntity(id)
if entity and entity.labels and entity.labels[lang] then
local label = entity.labels[lang].value
if label and lib.IsOptionTrue(args, 'addclass') then
label = lib.addWdClass(label)
end
return label
end
return nil
end
function p.getDescription(frame)
local args = getArgs(frame, { removeBlanks = true })
local id = findEntityId(args)
if not id then
return nil
end
local lang = args.lang
if not lang or lang == mw.language.getContentLanguage():getCode() then
local description = mw.wikibase.description(id)
if description and lib.IsOptionTrue(args, 'addclass') then
description = lib.addWdClass(description)
end
return description
end
local entity = mw.wikibase.getEntity(id)
if entity and entity.descriptions and entity.descriptions[lang] then
local description = entity.descriptions[lang].value
if description and lib.IsOptionTrue(args, 'addclass') then
description = lib.addWdClass(description)
end
return description
end
return nil
end
function p.getAliases(frame)
local args = getArgs(frame, {
removeBlanks = true,
frameOnly = true,
})
local lang = args.lang
local entity = findEntity(args)
if not lang then
lang = mw.language.getContentLanguage():getCode()
end
if not entity or not entity.aliases or not entity.aliases[lang] then
return nil
end
args.limit = tonumber(args.limit)
local add_more = prepareShowMore(args)
local Aliases = {}
for i, alias in ipairs(entity.aliases[lang]) do
if not args.limit or i <= args.limit then
table.insert(Aliases, alias.value)
else break end
end
add_more = handleShowMore(Aliases, args.limit, add_more)
local list = makeList(Aliases, args, add_more)
return lib.addWdClass(list)
end
function p.getId(frame)
local args = getArgs(frame, {
removeBlanks = true,
frameOnly = false,
parentFirst = false
})
if not args[1] then
return mw.wikibase.getEntityIdForCurrentPage()
end
for _, titleString in ipairs(args) do
local id = getIdFromTitle(titleString)
if id then
return id
end
end
return nil
end
function p.getSitelink(frame)
return getSitelink(getArgs(frame, {
removeBlanks = true,
frameOnly = true,
}))
end
function p.formatStatements(frame)
local args = getArgs(frame, {
removeBlanks = false, -- todo
frameOnly = true,
})
local parent_args = getArgs(frame:getParent(), { removeBlanks = true })
local add
if parent_args.item and not args.id then
args.id = parent_args.item
add = lib.category('arbitrary-data')
end
local value = getFormattedStatements(args)
if add and value then
return value .. add
end
return value
end
function p.formatStatementsFromTemplate(frame)
local args = getArgs(frame, {
frameOnly = false,
parentOnly = false,
parentFirst = false,
})
return getFormattedStatements(args)
end
function p.getCount(frame)
local args = getArgs(frame, {
removeBlanks = true,
frameOnly = true,
})
args.limit = nil
return #p.getStatements(args)
end
function p.getRawValue(frame)
return getRawValue(getArgs(frame, {
removeBlanks = true,
frameOnly = true,
}))
end
function p.getQualifier(frame)
local args = getArgs(frame, {
removeBlanks = true,
frameOnly = true,
})
args.limit = tonumber(args.limit)
local add_more = prepareShowMore(args)
local limit = args.limit
args.limit = 1
args.isQualifier = true
if not args['qualifiers limit'] then
args['qualifiers limit'] = limit
end
local qualifiers = getQualifiers(args)
if #qualifiers == 0 then
return nil
end
add_more = handleShowMore(qualifiers, limit, add_more)
local Formatters = require 'Module:Wikidata/Formatters'
local formattedQualifiers = {}
for _, qualifier in ipairs(qualifiers) do
table.insert(formattedQualifiers, Formatters.getFormattedValue(qualifier, args))
end
local value = makeList(formattedQualifiers, args, add_more)
return lib.addWdClass(value)
end
function p.getRawQualifier(frame)
local args = getArgs(frame, {
removeBlanks = true,
frameOnly = true,
})
local limit = args.limit and tonumber(args.limit)
args.limit = 1
for _, qualifier in ipairs(getQualifiers(args)) do
local Formatters = require 'Module:Wikidata/Formatters'
return Formatters.getRawValue(qualifier)
end
return nil
end
function p.formatEntity(frame)
local args = getArgs(frame, {
removeBlanks = true,
frameOnly = true,
})
args.id = args.id or p.getCurrentId()
if args.id then
local Formatters = require 'Module:Wikidata/Formatters'
return Formatters.formatRawValue(args.id, 'wikibase-entityid', args)
end
return nil
end
function p.compareStatements(frame)
local args = getArgs(frame, {
removeBlanks = true,
frameOnly = true,
})
if not args.value then
return nil
end
local statements = p.getStatements(args)
local compare = require 'Module:Wikidata/compare'
return compare.compareValues(args.value, statements, args)
end
----- API pro moduly -----
p.getCurrentId = mw.wikibase.getEntityIdForCurrentPage
function p.formatStatementsFromLua(options)
return getFormattedStatements(options)
end
function p.getSitelinkFromLua(options)
return getSitelink(options or {})
end
function p.getStatements(args)
local id = findEntityId(args)
return getStatements(id, args)
end
function p.getRawValueFromLua(options)
return getRawValue(options)
end
p.formatStatementsTable = formatStatements
return p