Ugrás a tartalomhoz

„Modul:Wikidata” változatai közötti eltérés

A Wikipédiából, a szabad enciklopédiából
[ellenőrzött változat][ellenőrzött változat]
Tartalom törölve Tartalom hozzáadva
aNincs szerkesztési összefoglaló
Wikidata mellőzése mínusszal
217. sor: 217. sor:
args = frame
args = frame
end
end

--If a value if already set, use it
--If a value if already set, use it
if args.value and args.value ~= '' then
if args.value and args.value ~= '' then
return args.value
return args.value ~= '-' and args.value or ''
end
end
return formatStatements(args)
return formatStatements(args)

A lap 2014. június 22., 22:21-kori változata

Wikidata[mi ez?] • [dokumentáció: mutat, szerkeszt] • [tesztek: sikeres: 0, sikertelen: 11, kihagyva: 0 (részletek)]

Wikidata-adatok formázott megjelenítése, a {{Wikidata}} sablon implementációja.

Wikikódból hívható függvények

formatStatements

Paraméterek

property
A Wikidatában tárolt tulajdonság azonosítója. Megadható névvel is. Például p856.
value
A Wikidatában tárolt érték helyett megjelenítendő érték.
entityId
A cikkhez kapcsolt Wikidata-elem helyett a megadott Wikidata-elemből olvassa ki a tulajdonság értékét.
pageTitle
A Wikidatához kapcsolt lap címe. Nem adható entityId-vel együtt.
qualProp
Állítás minősítőjének tulajdonságazonosítója. Példa: P548.
qualValue
A szűrésnél alkalmazott érték. Több érték is adható, vesszővel elválasztva. Példa: Q3295609,Q51930650,Q2122918,Q21727724,Q1072356.
direction
Koordináták dimenziója. Értéke latitude, longitude vagy both lehet: az első kettő a további gépi feldolgozásra alkalmas számot adja vissza, a harmadik a Modul:Coordinate segítségével formázott eredményt ad.
link
Értéke nem, ha azt szeretnénk, hogy a függvény értéke ne link legyen, hanem csak a címke; csak, ha pedig azt szeretnénk, hogy csak a kapcsolt Wikipédia-szócikk.
externalId
Helyileg megadott külső azonosító formázása Wikidata helyett. Külső azonosítóknál ezt kell megadni második paraméter helyett!
externalIdLabel
Külső azonosítóhoz tartozó hivatkozás megjelenítési szövege.
link szövege
URL típusú tulajdonság hivatkozásának megjelenő szövege. Visszamenőleges kompatibilitás miatt format=wikilink beállítást tesz szükségessé. Üres érték esetén számozott hivatkozás jelenik meg. Ha csak format van megadva, a tulajdonság neve lesz a szöveg.
lang
A címke nyelvének megadása, több nyelv esetén vesszővel elválasztva, szóköz nélkül, ekkor az első olyan nyelven jeleníti meg a címkét, amin létezik. Alapértelmezetten hu,en. Nyelvvel jelölt szövegek (monolingual text) esetén a nyelv szűrőfeltétele. all értékkel nincs szűrés.
first
Ha azt szeretnénk, hogy csak egy értéket adjon vissza, például képeknél.
showQualifiers
Összes minősítő megjelenítése, vagy megadott minősítők megjelenítése (ha a paraméterérték tulajdonságazonosítók listája, pl. P580, P582).
showReferences
Forráshivatkozások megjelenítése. Alapértelmezetten legfeljebb 5 forráshivatkozás jelenik meg; ha a paraméter értéke egy pozitív egész szám, akkor annyi a limit, ha 0, akkor pedig az összes (esetenként több tucat!) forráshivatkozás megjelenik.
rank
Értékei: preferred, normal, deprecated, all, valid. Ha nincs megadva, akkor a legmagasabb rangúakat adja vissza. A valid a preferred és a normal együttesen.
életkor
Értéke igen.
felsorolás
Az értékek felsorolásának típusa:
lista
pöttyözött lista
számozott lista
számozott lista
sorok
több érték esetén felsorolásjel nélküli lista, egy érték esetén sima szöveg (alapértelmezett)
szöveg
folyószöveg (értékek között vesszővel, utolsó érték előtt „és”-sel)
table
Lua-tömb
lenyíló
Hosszú listák megjelenítése nyitható listaként. Értéke egy szám. Ha a listának több eleme van, akkor nyitható listaként fog megjelenni. Lista, számozott lista és sorok felsorolásnál használható. Példa: Földközi-tenger.
format
raw
tárolt érték formázás nélkül
default
népesség formázása a {{Népesség}}(?) sablon alapmegjelenítése szerint
iso
dátum ISO 8601 formátumban
date-object
dátum a Modul:Time objektumával (csak modulból hívva van értelme)
percentage
számok megjelenítése százalékként
url
URL, például külső azonosító címe
wikilink
URL típusú tulajdonság formázása wikiszöveges külső hivatkozásként
sort
Rendezés több érték estén: üres vagy logikai igaz esetén címke szerint, Pxxx esetén a Pxxx minősítő szerint (a megadott minősítőket előre rendezve), egyébként a sort függvénnyel. sortDesc paraméter jelenléte esetén csökkenő sorrendben történik a rendezés.
sortDesc
Rendezés csökkenő sorrendben. A paraméter jelenléte esetén csökkenő sorrendben történik a rendezés, különben növekvő sorrendben.
dateformat
Dátumformátum a {{#time:}} értelmezőfüggvénynek (csak a népesség dátumánál működik, más helyzetben a változó pontosság – napra pontostól az évmilliárdig bármi lehet – és a függvény behatároltsága – csak 111-től 9999-ig értelmezi az éveket – miatt nincs értelme megadni egy fix formátumot).
punctuation
Központozás az utolsó érték és esetleges minősítői után, de a hozzá tartozó forráshivatkozás előtt. Általában felsorolás=lista esetén van értelme.

containsProperty

Wikidata-tulajdonság meglétének vizsgálata. Lásd {{Wikidata-f}}.

Luából hívható függvények

containsPropertyWithValue

Tulajdonág értékének vizsgálata.

withHighestRank

Tulajdonság értékeinek szűrése a legmagasabb fokozattal (rank) rendelkező értékekre.

formatStatement

Tulajdonság egy értékének formázott megjelenítése.

Használt modulok, sablonok

  • Modul:Arguments – paraméterek beolvasásához
  • Modul:Time – dátum kiírásához (formázottan)
  • {{plainlist}} – alapértelmezett kimenetnél a többelemű listák formázásához
local p = {}

local i18n = {
    ["errors"] = {
        ["property-param-not-provided"] = "Hiányzó ''property='' paraméter.",
        ["entity-not-found"] = "Nem létező Wikidata-elem.",
        ["unknown-claim-type"] = "Ismeretlen az állítás típusa.",
        ["unknown-snak-type"] = "Ismeretlen a snak típusa.",
        ["unknown-datavalue-type"] = "Ismeretlen az érték típusa.",
        ["unknown-entity-type"] = "Ismeretlen a Wikidata-elem típusa.",
        ["unknown-value-module"] = "A ''value-module'' és ''value-function'' paramétert egyszerre kell beállítani.",
        ["value-module-not-found"] = "A ''value-module'' nem létező modulra mutat.",
        ["value-function-not-found"] = "A ''value-function'' nem létező funkcióra mutat.",
        ["globecoordinate-element"] = "Az érték típusa ''globecoordinate'' : kell ''element=latitude'' vagy ''longitude''."
    },
    ["somevalue"] = "''ismeretlen érték''",
    ["novalue"] = "''nincs érték''"
}

function getEntityFromId(id)
    if id then
        return mw.wikibase.getEntityObject(id)
    end
    return mw.wikibase.getEntityObject()
end

function getEntityIdFromValue(value)
    local prefix = ''
    if value['entity-type'] == 'item' then
        prefix = 'q'
    elseif value['entity-type'] == 'property' then
        prefix = 'p'
    else
        return formatError('unknown-entity-type')
    end
    return prefix .. value['numeric-id']
end

function formatError( key )
    return '<span class="error">' .. i18n.errors[key] .. '</span>'
end


function formatStatements( options )
    if not options.property then
        return formatError( 'property-param-not-provided' )
    end

    --Get entity
    local entity = getEntityFromId(options.entityId)
    if not entity then
        return -- formatError( 'entity-not-found' )
    end

    if (entity.claims == nil) or (not entity.claims[string.upper(options.property)]) then
        return '' --TODO error?
    end

    if options.first then
        return formatStatement(entity.claims[string.upper(options.property)][1], options)
    end
    
    local max_rank = 1
    for _, statement in pairs(entity.claims[string.upper(options.property)]) do
        if p.RANK[statement.rank] > max_rank and formatStatement(statement, options) then
            max_rank = p.RANK[statement.rank]
        end
    end
    local ranks = {all = 0, normal = 1, preferred = 2}
    local rank = ranks[options.rank] or 1
    if rank == 2 and max_rank == 1 then
        rank = 1
    end
    
    --Format statement and concat them cleanly
    local formattedStatements = {}
    for _, statement in pairs(entity.claims[string.upper(options.property)]) do
        if p.RANK[statement.rank] >= rank then
            local fs
            if string.upper(options.property) == 'P1082' then  -- population
                fs = require('Modul:Wikidata/Population').formatStatement(statement, options)
            else
                fs = formatStatement(statement, options)
            end
            if fs then
                if options['felsorolás'] == 'lista' then
                    fs = '* ' .. fs
                elseif options['felsorolás'] == 'számozott lista' then
                    fs = '# ' .. fs
                end
                if options.rank == 'one' then
                    if p.RANK[statement.rank] == max_rank then
                        table.insert(formattedStatements, fs)
                        break
                    end
                else
                    table.insert(formattedStatements, fs)
                end
            end
        end
    end
    if options['felsorolás'] == 'lista' or options['felsorolás'] == 'számozott lista' then
        return table.concat(formattedStatements, '\n')
    elseif options['felsorolás'] == 'sorok' then
        return table.concat(formattedStatements, '<br>')
    elseif options['felsorolás'] == 'szöveg' then
        return mw.text.listToText(formattedStatements)
    elseif options.separator or options.conjunction then
        options.separator = options.separator and string.gsub(options.separator, '&#32;', ' ')
        options.conjunction = options.conjunction and string.gsub(options.conjunction, '&#32;', ' ')
        return mw.text.listToText(formattedStatements, options.separator, options.conjunction)
    else
        return table.concat(formattedStatements, '<br>')
    end
end

function formatStatement( statement, options )
    if not statement.type or statement.type ~= 'statement' then
        return formatError( 'unknown-claim-type' )
    end

    return formatSnak( statement.mainsnak, options )
    --TODO reference and qualifiers
end

function formatSnak( snak, options )
    if snak.snaktype == 'somevalue' then
        return i18n['somevalue']
    elseif snak.snaktype == 'novalue' then
        return i18n['novalue']
    elseif snak.snaktype == 'value' then
        return formatDatavalue( snak.datavalue, options )
    else
        return formatError( 'unknown-snak-type' )
    end
end

function formatDatavalue(datavalue, options)
    --Use the customize handler if provided
    if options['value-module'] or options['value-function'] then
        if not options['value-module'] or not options['value-function'] then
            return formatError( 'unknown-value-module' )
        end
        local formatter = require ('Module:' .. options['value-module'])
        if formatter == nil then
            return formatError( 'value-module-not-found' )
        end
        local fun = formatter[options['value-function']]
        if fun == nil then
            return formatError( 'value-function-not-found' )
        end
        return fun( datavalue.value, options )
    end

    --Default formatters
    -- ld. [[d:Help:Wikidata datamodel]]
    if datavalue.type == 'wikibase-entityid' then
        return formatEntityId(getEntityIdFromValue(datavalue.value), options)
    elseif datavalue.type == 'string' then
        return datavalue.value --TODO ids + media
    elseif datavalue.type == 'time' then
        return formatTimeValue(datavalue.value, options)
    elseif datavalue.type == 'globecoordinate' then
        if options.element == 'latitude' then
            return datavalue.value['latitude']
        elseif options.element == 'longitude' then
            return datavalue.value['longitude']
        else
            return formatError( 'globecoordinate-element' )
        end
    elseif datavalue.type == 'url' then
        return datavalue.value['url']
    elseif datavalue.type == 'quantity' then
        return options.format == 'raw' and datavalue.value.amount or mw.getContentLanguage():formatNum(tonumber(datavalue.value.amount))
    else
        return formatError('unknown-datavalue-type')
    end
end

function formatEntityId( entityId, options )
    local label = mw.wikibase.label( entityId )
    local link = mw.wikibase.sitelink( entityId )
    if link and options.link ~= 'nem' then
        if label then
            return '[[' .. link .. '|' .. label .. ']]'
        else
            return '[[' .. link .. ']]'
        end
    else  -- if label then
        return label --TODO what if no links and label + fallback language?
    --[[
    else
        local frame = mw.getCurrentFrame()
        return frame:callParserFunction('#ifexist', entityId, '', entityId) .. 
            frame:expandTemplate{title = 'Wd', args = {entityId}} .. 
            ' [ [Kategória:Hivatkozás nem létező címkére] ]'
    --]]
    end
end

function formatTimeValue(value, options)
    if options.format == 'raw' then
        return value.time
    else
        return require('Modul:Time').newFromWikidataValue(value):formatDate(options)
    end
end

function p.formatStatements(frame)
    local args = {}
    if frame == mw.getCurrentFrame() then
        args = frame:getParent().args
        for k, v in pairs(frame.args) do
            args[k] = v
        end
    else
        args = frame
    end
    
    --If a value if already set, use it
    if args.value and args.value ~= '' then
        return args.value ~= '-' and args.value or ''
    end
    return formatStatements(args)
end

p.RANK = {
    deprecated = 0,
    normal = 1,
    preferred = 2
}

return p