Modul:WikidataListe: Forskjell mellom sideversjoner
Hopp til navigering
Hopp til søk
(Ingen innledende komma.) |
(blank etter komma) |
||
Linje 77: | Linje 77: | ||
if string.len(lres) > 0 then |
if string.len(lres) > 0 then |
||
if not first then |
if not first then |
||
resultat = resultat .. "," |
resultat = resultat .. ", " |
||
end |
end |
||
resultat = resultat .. lres |
resultat = resultat .. lres |
Sideversjonen fra 22. jun. 2015 kl. 22:18
![]() | 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 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 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 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) 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 "[[Kategori:Mangler " .. param .. "]]" end end function p.radYrke(frame) return rad(frame,'yrke','yrke') end function p.velgYrke(frame) return velg(frame,'yrke','yrke') end return p