Modul:WikidataDato
Hopp til navigering
Hopp til søk
Formål[rediger kilde]
Å presentere datoer fra Wikidata.
Bruk i maler[rediger kilde]
Modulen brukes ved å legge inn en av:
{{#invoke:WikidataDato|norskDato|qv=Qxxx|pv=Pxxx}}
{{#invoke:WikidataDato|norskDatoLenket|qv=Qxxx|pv=Pxxx}}
i en mal.
Bruk i moduler[rediger kilde]
local WikidataDato = require( 'Module:WikidataDato' )
local entity = mw.wikibase.getEntity()
local claim = entity.claims['Pxxx'][1].mainsnak -- Kun et eksempel! I virkeligheten må man sjekke at påstanden finnes og er gyldig.
local dato = WikidataDato.norskDatoFraClaim(claim)
Eksempler[rediger kilde]
Artikkel | I artikkel | Utenfor artikkel | resultat |
---|---|---|---|
Erna Solberg | {{#invoke:WikidataDato |norskDato |pv=P569}} | {{#invoke:WikidataDato |norskDato |qv=Q291644 |pv=P569}} | |
{{#invoke:WikidataDato |norskDatoLenket |pv=P569}} | {{#invoke:WikidataDato |norskDatoLenket |qv=Q291644 |pv=P569}} | ||
Lenin | {{#invoke:WikidataDato |norskDato |pv=P569}} | {{#invoke:WikidataDato |norskDato |qv=Q1394 |pv=P569}} | |
{{#invoke:WikidataDato |norskDatoLenket |pv=P569}} | {{#invoke:WikidataDato |norskDatoLenket |qv=Q1394 |pv=P569}} | ||
Platon | {{#invoke:WikidataDato |norskDato |pv=P569}} | {{#invoke:WikidataDato |norskDato |qv=Q859 |pv=P569}} | |
{{#invoke:WikidataDato |norskDatoLenket |pv=P569}} | {{#invoke:WikidataDato |norskDatoLenket |qv=Q859 |pv=P569}} | ||
Julien Brulé (død) | |||
Giuseppe Corsi da Celano (født) | |||
Sergej Kirdjapkin | |||
Sergej Kirdjapkin | |||
Nicole Oresme | |||
Hiempsal I | {{#invoke:WikidataDato |norskDato |pv=P569}} | {{#invoke:WikidataDato |norskDato |qv=Q523301 |pv=P569}} |
Referanser[rediger kilde]
local p = {} local refs = require 'Module:Reference score' local lang = mw.language.getContentLanguage() local maanednavn = {'januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember'} local kortmaanednavn = {'jan.', 'feb.', 'mars', 'apr.', 'mai', 'juni', 'juli', 'aug.', 'sep.', 'okt.', 'nov.', 'des.'} local maanedlenker = {'Januar', 'Februar', 'Mars (måned)', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Desember'} -- tekst vi ønsker sammen med dato når det finnes en P1480 (kvalifikator for presisjonen til en påstand) -- Hvis det forekommer ytterligere verdier i bruk, legg disse til i denne tabellen local kildekvalitettekst = { ["Q5727902"] = "ca. ", -- cirka ["Q21818619"] = "I nærheten av ", -- muligens omtrentlig verdi ["Q18122778"] = "Antagelig " -- antakelig } local linktext = 'Rediger på Wikidata' local linktarget = 'https://www.wikidata.org/wiki/%s?uselang=%s#%s' local function kildekvalitet(claim) for key,val in pairs(claim) do return kildekvalitettekst[val.datavalue.value.id] or '[[Kategori:Kildekvalitet for dato som mangler tekst i Modul WikidataDato]]' end return '' end function splitTimestamp(timestamp,forkortet) local aar = string.sub(timestamp, 2, 5) or '????' local maanednummer = tonumber(string.sub(timestamp, 7, 8) or '00') local maaned = maanednavn[maanednummer] or '??' local maanedlenke = maanedlenker[maanednummer] or '??' local kortmaaned = maaned if forkortet then kortmaaned = kortmaanednavn[tonumber(string.sub(timestamp, 7, 8) or '00')] or '??' end local dag = tonumber(string.sub(timestamp, 10, 11) or '??')..'.' local fkr = '' if string.sub(timestamp, 1, 1) == '-' then fkr = ' f.Kr.' end return aar,maanedlenke,maaned,dag,fkr,kortmaaned end function kalender(kal) if string.match (kal, 'wikidata.org/entity/Q1985727$' ) then return '' end if string.match (kal, 'wikidata.org/entity/Q1985786$' ) then --Kun når datoen er etter oktober 1582 bør juliansk skrives ut. Alle datoer før dette blir regnet for å være julianske uansett. -- local html = mw.html.create( 'span' ) -- :wikitext( '[[Den julianske kalenderen|juliansk]]' ) return '' --' ('..tostring( html )..')' end return mw.text.nowiki( kal ) end -- Denne funksjonen formaterer en norsk dato fra en Wikidata-påstand -- (enten en "mainsnak" eller en "qualifier"). Funksjonen eksporteres -- slik at den kan brukes av andre moduler. function p.norskDatoFraClaim(claim,forkortet) local value = claim.datavalue.value local presisjon = value.precision local aar,maanedlenke,maaned,dag,fkr,kortmaaned = splitTimestamp(value.time,forkortet) local utstring = '' if presisjon == 11 then utstring = string.format( '%s %s %s%s', dag, maaned, tonumber(aar) or aar, fkr ) elseif presisjon == 10 then utstring = string.format( '%s %s%s', maaned, tonumber(aar) or aar, fkr ) elseif presisjon == 9 then utstring = (tonumber(aar) or aar)..''..fkr utstring = string.format( '%s%s', tonumber(aar) or aar, fkr ) elseif presisjon == 8 then utstring = string.format( '%s-årene%s', math.floor(((tonumber(aar) or 0))/10)*10, fkr ) elseif presisjon == 7 then utstring = string.format( '%s. århundre%s', math.floor(((tonumber(aar) or 0)+99)/100), fkr ) end return mw.text.nowiki( utstring ).. kalender(value.calendarmodel) end -- Denne funksjonen formaterer en norsk dato fra en Wikidata-påstand -- (enten en "mainsnak" eller en "qualifier"). Funksjonen eksporteres -- slik at den kan brukes av andre moduler. function p.norskDatoLenketFraClaim(claim,forkortet) local value = claim.datavalue.value local presisjon = value.precision local aar,maanedlenke,maaned,dag,fkr,kortmaaned = splitTimestamp(value.time,forkortet) local html = mw.html.create( 'span' ) if presisjon == 11 then -- @todo use mw.html.wikitext to build this html:wikitext( string.format( '[[%s %s|%s %s]] [[%s%s]]', dag, maaned, dag, kortmaaned, tonumber(aar) or aar, fkr ) ) end if presisjon == 10 then html:wikitext( string.format( '[[%s|%s]] [[%s%s]]', maanedlenke, maaned, tonumber(aar) or aar, fkr ) ) end if presisjon == 9 then html:wikitext( string.format( '[[%s%s]]', tonumber(aar) or aar, fkr ) ) end if presisjon == 8 then html:wikitext( string.format( '[[%s-årene%s]]', math.floor(((tonumber(aar) or 0))/10)*10, fkr ) ) end if presisjon == 7 then html:wikitext( string.format( '[[%s. århundre%s]]', math.floor(((tonumber(aar) or 0)+99)/100), fkr ) ) end return tostring(html) .. kalender(value.calendarmodel) end local function frameargs(frame) 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 local qid = args['qv'] or args['qid'] or nil if qid and qid == "" then qid = nil end local pid = args['pv'] or args['pid'] or nil -- local forkortet = args['kort'] or pid == "P569" or pid == "P570" or nil local forkortet = args['kort'] or nil return qid,pid,forkortet end function p.okProperty( claim ) -- Sjekk at claim finnes og inneholder det vi trenger for å lage ok norsk dato if not claim and claim.type ~= 'statement' then return nil end local mainsnak = claim.mainsnak or {} if mainsnak.snaktype ~= 'value' or mainsnak.datatype ~= 'time' then return nil end local datavalue = mainsnak.datavalue or {} local value = datavalue.value or {} return not not (value.time and value.precision and value.calendarmodel) end function p.finnBesteProperty(frame) local qv,pv,forkortet = frameargs(frame) local entity = mw.wikibase.getEntity(qv) if not ( entity and entity.claims and entity.claims[pv] ) then return nil,nil end local props = entity['claims'][pv] local oki = 0 for i,prop in ipairs(props) do if p.okProperty(prop) then local rank = prop.rank or 'normal' if rank == 'preferred' then return prop, pv, qv, forkortet elseif rank == 'normal' then if oki == 0 then oki = i end end end end if oki>0 then return props[oki], pv, qv, forkortet else return nil, pv, qv, forkortet end end function p.norskDatoLenket(frame) local prop,qv,pv,forkortet = p.finnBesteProperty(frame) if not prop then return "" end -- prop er nå en ok property. -- Hvis det finnes en med rank preferred er den valgt -- Hvis ingen preferred, er den første med normal valgt. -- Det siste er tilfeldig, men kan antas være mindre utsatt for tilfeldige endringer enn å velge den siste -- ulenket, minimerer overlenking local kvalitet = '' if prop and prop.qualifiers and prop.qualifiers.P1480 then kvalitet = kildekvalitet(prop.qualifiers.P1480) end local tmp = refs.render(frame, prop.references) return kvalitet .. p.norskDatoLenketFraClaim(prop.mainsnak,forkortet) .. tmp end function p.norskDato(frame) local prop = p.finnBesteProperty(frame) if not prop then return "" end -- prop er nå en ok property. -- Hvis det finnes en med rank preferred er den valgt -- Hvis ingen preferred, er den første med normal valgt. -- Det siste er tilfeldig, men kan antas være mindre utsatt for tilfeldige endringer enn å velge den siste -- ulenket, minimerer overlenking return p.norskDatoFraClaim(prop.mainsnak) end -- Denne funksjonen formaterer en norsk dato fra en Wikidata-påstand -- (enten en "mainsnak" eller en "qualifier"). Funksjonen eksporteres -- slik at den kan brukes av andre moduler. function p.dagOgMaanedFraClaim(claim) local timestamp = claim.datavalue.value.time local presisjon = claim.datavalue.value.precision if tonumber(presisjon) < 11 then return '' end local aar, maanedlenke, maaned, dag aar, maanedlenke, maaned, dag = splitTimestamp(timestamp) if dag ~= nil and maaned ~= nil then return mw.text.nowiki( dag .. ' ' .. maaned ) else return '' end end function p.dagOgMaaned (frame) local prop = p.finnBesteProperty(frame) if not prop then return '' end return p.dagOgMaanedFraClaim(prop.mainsnak) end -- Denne funksjonen formaterer en norsk dato fra en Wikidata-påstand -- (enten en "mainsnak" eller en "qualifier"). Funksjonen eksporteres -- slik at den kan brukes av andre moduler. function p.aarFraClaim(claim) local timestamp = claim.datavalue.value.time local presisjon = tonumber(claim.datavalue.value.precision) or 0 if tonumber(presisjon) < 9 then return '' end local aar, maanedlenke, maaned, dag, fkr aar, maanedlenke, maaned, dag, fkr = splitTimestamp(timestamp) if aar ~= nil and fkr ~= ' f.Kr.' then return mw.text.nowiki( string.format('%u', aar) ) elseif aar ~= nil and fkr == ' f.Kr.' then return mw.text.nowiki( string.format('%u', aar) .. ' f.Kr.' ) else return '' end end function p.Aar(frame) local prop = p.finnBesteProperty(frame) if not prop then return '' end return mw.text.nowiki( p.aarFraClaim(prop.mainsnak) ) end function p.edit(frame) local prop, pid, qid = p.finnBesteProperty(frame) qid = qid or mw.wikibase.getEntityIdForCurrentPage() if not qid or not pid then return '' end local link = mw.ustring.format( linktarget, qid, lang:getCode(), pid ) local text = '[[File:OOjs UI icon edit-ltr-progressive.svg' .. '|frameless|text-top|10px' .. '|alt=' .. mw.text.nowiki( linktext ) .. '|link=' .. mw.text.nowiki( link ) .. '|' .. mw.text.nowiki( linktext ) .. ']]' local html = mw.html.create( 'span' ) :addClass( 'wb-edithandle' ) :attr( 'data-bridge-edit-flow', 'single-best-value' ) :wikitext( text ) return tostring( html ) end return p