Modul:WikidataListe
![]() | Denne modulen brukes på mer enn 200 000 sider. Det anbefales at endringer testes i en sandkasse før de legges inn. Diskuter gjerne også endringer på diskusjonssiden først. |
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 wdverdi(pv, first) lang = mw.language.getContentLanguage() local num = pv.mainsnak.datavalue.value["numeric-id"] return "[https://www.wikidata.org/wiki/Q" .. num .. " " .. 'Q' .. num .. "]" end function enkeltverdi(pv, first) lang = mw.language.getContentLanguage() 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 if first then return '[[' .. sitelink .. '|' .. lang:ucfirst(label) .. ']]' else return '[[' .. sitelink .. '|' .. label .. ']]' end end if label and not sitelink then if first then return lang:ucfirst(label) else return label end 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],true) local manglerOversettelse = string.len(resultat)==0 local first = manglerOversettelse while i < #pv do i = i+1 local lres = enkeltverdi(pv[i],first) if string.len(lres) > 0 then if not first then resultat = resultat .. ", " end resultat = resultat .. lres first = false; else -- if not first then -- resultat = resultat .. ' <div style="visibility:hidden"> , ' -- end -- resultat = resultat .. wdverdi(pv[i]) .. "</div>" -- first = false manglerOversettelse = true end end if manglerOversettelse then resultat = resultat .. "[[Kategori:Artikler hvor " .. prop .. " mangler oversettelse]]" end return resultat end function frameverdi(frame,param) local args = frame.args if args[1] == nil then local pFrame = frame:getParent(); args = pFrame.args; for k,v in pairs( frame.args ) do args[k] = v; end end if args[param] then return args[param] end return "" end function p.grenserTil(frame) return p.liste(frame,"grenser til") end function p.yrker(frame) return p.liste(frame,"yrke") end function velg(frame,prop,param) lang = mw.language.getContentLanguage() local verdiFraFrame = frameverdi(frame,param) local verdiFraWikidata = p.liste(frame,prop) if verdiFraFrame then if verdiFraFrame == "" then -- return "" elseif verdiFraFrame == "uten" then return "[[Kategori:Artikler hvor " .. param .. " spesifisert som uten]]" elseif not verdiFraWikidata then return verdiFraFrame elseif lang:uc(verdiFraFrame) == lang:uc(verdiFraWikidata) then return verdiFraFrame .. "[[Kategori:Artikler hvor " .. param .. " samme som på Wikidata]]" elseif string.len(verdiFraWikidata) > 0 then return verdiFraFrame .. "[[Kategori:Artikler hvor " .. param .. " forskjellig fra Wikidata]]" else return verdiFraFrame .. "[[Kategori:Artikler hvor " .. prop .. " mangler på Wikidata]]" end else return "" end if verdiFraWikidata then if string.len(verdiFraWikidata) > 0 then return verdiFraWikidata .. "[[Kategori:Artikler hvor " .. prop .. " hentes fra Wikidata]]" end end return "" end function rad(frame,prop,param) lang = mw.language.getContentLanguage() local c = velg(frame,prop,param) local verdiFraFrame = frameverdi(frame,param) if verdiFraFrame == "uten" then return c -- Dette returnerer kategorien som så vil bli brukt der ellers en infoboks rad hadde vært. end if string.len(c) >0 then local t1 = '<tr class="rad" valign="top"><th colspan="2">' local t2 = '</th><td colspan="2" >' local t3 = '</td></tr>' return t1 .. lang:ucfirst(param) .. t2 .. c .. t3 else return "" end end function p.radYrke(frame) return rad(frame,'yrke','yrke') end function p.velgYrke(frame) return velg(frame,'yrke','yrke') end function p.radEktefelle(frame) return rad(frame,'ektefelle','ektefelle') end function p.radMor(frame) return rad(frame,'mor','mor') end function p.radFar(frame) return rad(frame,'far','far') end function p.radBarn(frame) return rad(frame,'barn','barn') end function p.radBror(frame) return rad(frame,'bror','bror') end function p.radSoester(frame) return rad(frame,'søster','søster') end function p.radParti(frame) return rad(frame,'parti','parti') end return p