Modul:WikidataListe

Fra Wikisida.no
Sideversjon per 19. jun. 2015 kl. 20:38 av nb>Haros
Hopp til navigering Hopp til søk

Formål

Å hente data fra Wikidata til infobokser når aktuelle data ikke er gitt lokalt.

Det er mulig å spesifisere at det ikke skal være noe i infoboksen selv om Wikidata skulle ha noe ved å oppgi verdi uten.

Bruk

Modulen brukes normalt ved å legge inn en rad i en infoboks ved:

{{#invoke:WikidataListe/test|rad|<diverse parametre>}}

eller for å hente og formattere en verdi fra Wikidata, enten for en infoboks eller for annen tekst ved:

{{#invoke:WikidataListe/test|verdi|<diverse parametre>}}
Parameter Utelatt Forklaring
qid Identitet til sidens tilkoblede wikidataelement Identiteten til et wikidataelement. Verdiene vil hentes fra dette elementet hvis parameteren har verdi.
pid Identitet til egenskapen på Wikidata som skal hentes. Verdiene som returneres kan være tom, enkeltverdi eller liste
param Navnet til en parameter til infoboksen som kan ha verdi som skal overstyre verdien fra Wikidata.
ref Skal verdiene referansebelegges? "nei" vil forhindre det, ellers blir det referanser.
tekst Verdi av param Tekst i venstrekolonnen for raden, hvis ikke det er det samme som verdien i param.
kollaps 5 Et tall som angir hvor mange verdier som skal vises før listen vises sammenslått. Hvis intet argument er gitt blir verdien 5 brukt.
kval Kvalifikatorer på Wikidata som skal vises. En kommaseparert liste med egenskapsidentifikatorer. Listes i den rekkefølge de skal vises, altså som «kval=Pxxx,Pyyy»
Pxxx Betingelser for enkeltkvalifikator. En kommaseparert liste, men foreløpig kun ett tilgjengelig valg «tittel». Hvis den ikke er gitt, vil etiketten til egenskapen brukes. Altså vil (P1686) vises som «For verk: verksnavn/lenke» «P1686=tittel:verk» vil endre dette til «verk: verksnavn/lenke» mens «P1686=tittel:» vil gi kun verksnavn/lenke.

Eksempel

Skriptfeil: Funksjonen «rad» eksisterer ikke.Skriptfeil: Funksjonen «rad» eksisterer ikke.Skriptfeil: Funksjonen «rad» eksisterer ikke.
WikidataListe
norsknavn = {{{norsknavn|{{#invoke:WikidataListe/test|verdi|qid={{{qid|}}}|pid=P1843|ref=Y}}|}}}

for å hente verdi for norsk navn ut fra (P1843). Eksempelvis vil

{{{norsknavn|{{#invoke:WikidataListe/test|verdi|qid=Q503989|pid=P1843|ref=Y}}|}}}

gi

som resultat.

Tilsvarende vil (P1705) for (Q26087)

{{#invoke:WikidataListe/test|verdi|qid=Q26087|pid=P1705|ref=nei}}

gi

For kraftverk vil:

{{#invoke:WikidataListe/test|rad|pid=P2957 |qid= {{{qid|}}}|param=slukeevne|ref=Y}} {{#invoke:WikidataListe/test|rad|pid=P2109 |qid= {{{qid|}}}|param=effekt}} {{#invoke:WikidataListe/test|rad|pid=P4131 |qid= {{{qid|}}}|param=årsproduksjon}}

med qid= Q5645687 ( (Q5645687)) gi verdiene i denne infoboksen


Referanser



local p = {}

function dump( out )
    if type( out ) == 'table' then
        local s = '{ '
        for k,v in pairs( out ) do
                if type( k ) ~= 'number' then k = '"'..k..'"' end
                s = s .. '['..k..'] = ' .. dump( v ) .. ','
        end
        return s .. '} '
    else
        return tostring( out )
    end
end

function getclaims(frame)
   if not mw.wikibase then
        return resten
    end
    local artikkel = mw.wikibase.getEntityObject()
    if not artikkel then
        return resten
    end
    return artikkel.claims	
end

function enkeltverdi(pv)
	local qv = 'Q' .. pv.mainsnak.datavalue.value["numeric-id"]
    local label = mw.wikibase.label(qv)
    local sitelink = mw.wikibase.sitelink(qv)
    if label and sitelink then
        return '[[' .. sitelink .. '|' .. label .. ']]'
    end
    if label and not sitelink then
    	return label
	end
	if sitelink and not label then
		return '[[' .. sitelink .. ']]'
	end
	return ""
end

function p.liste(frame,prop)
    local claims = getclaims(frame)
    if not claims then
        return resten
    end
	local pid =  mw.wikibase.resolvePropertyId(prop)
	if not pid then
		return ""
	end
	
    local pv = claims[pid]
    if not pv then
        return ""
    end
    if not pv[1].mainsnak then return "" end
    if not pv[1].mainsnak.datavalue then return "" end
    
    local i = 1
    local resultat = enkeltverdi(pv[i])
    
    while i < #pv do
    	i = i+1
    	local lres = enkeltverdi(pv[i])
    	if string.len(lres) then
    	    resultat = resultat .. ', ' .. lres
    	end
    end
    
    return resultat


end

function p.grenserTil(frame)
	return p.liste(frame,"grenser til")
end

function p.yrker(frame)
	return p.liste(frame,"yrke")
end


return p