Module:WD-gildi

Úr Wikipediu, frjálsa alfræðiritinu
Jump to navigation Jump to search

Þessi skrifta sækir og lagar til upplýsingar úr staðhæfingum (statements) frá Wikidata. Henni er ætlað til að vera notuð í sniðum þar sem koma fram upplýsingar um viðkomandi viðfangsefni.

Í grunninn tekur skriftan við tveimur ónefndum gildum. Í fyrsta gildið er sett eiginleikinn (t.d. P112) og ef áhugi er fyrir því að sækja upplýsingar frá öðrum hlut (item) þá er sett númer hans í seinna gildið (t.d. Q100). Annars er notaður sami hluturinn og er tengt við síðunna sem unnið er að. Skriftan sjálf sér um að setja upplýsingarnar á læsilegt form. Notkun: {{#invoke:WD-gildi|main|P112|Q100}}. Útkoma: John Winthrop breyta (stofnandi Boston borgar í Bandaríkjunum).

Til dæmis:

  • Tími er upphaflega á ISO sniði á Wikidata, en sýndur á forminu "mánaðardagur. mánuður ár" hér
  • Hnit eru gefin upp á Wikidata með "E" (East) og "W" (West), en þetta er leiðrétt í "A" (Austur) og "V" (Vestur)
  • Staðhæfingar með hlutum eða eiginleikum eru gefin sem auðkenni frá Wikidata, en eru sýnd hér með nafni þeirra
  • Magntölur eru gefnar í tvennu lagi en eru sýndar hér saman
  • Allar upplýsingar eru gefnar upp með breytingartengli á Wikidata í smáu letri, svo ekki fari á milli mála hvaðan upplýsingarnar koma

Fyrir þá sem vilja frá ákveðnar útkomur úr sniðinu eru fleiri möguleikar, þeir eru allir valkvæðir.

  • Gildið "sérgreinir" (qualifier) sækir undirgildi undir staðhæfingunni. Þetta getur til dæmis verið útgáfudagsetningin á staðhæfingunni (þ.e.a.s upprunalegu heimildinni). Tilgreindur er eiginleikinn sem á við, t.d. P100.
  • Gildið "timeformat" gefur þér færi á að setja dagsetningar á annað form. Nota þarf kóðana sem tilgreindir eru á Hjálp:Þáttunar_aðgerðir##time. Sjálfgefið er að gefa upp dagsetninguna á forminu dagur. mánaðarnafn ár.
  • Gildið "delimiter" gefur þér færi á að setja eitthvað annað á milli staðhæfingar og sérgreinis en bil.

Sjá einnig[breyta frumkóða]

  • Þáttunaraðgerðina {{#property:}}

local p = {}

function p._main(frame) -- should work.
	local pframe = frame:getParent()
	return p.main(pframe)
end

function p.main(frame)
	local args = frame.args
	local eiginleiki = args[1]
	
	local hlutur = nil
	if args[2] and mw.wikibase.entityExists( args[2] ) then
		hlutur = args[2]
	else
		hlutur = mw.wikibase.getEntityIdForCurrentPage()
	end
	if args["sérgreinir"] then
		sergreinir = args["sérgreinir"]
	end
	local statements = nil
	local qualifier = nil
	if eiginleiki and hlutur and mw.ustring.sub(eiginleiki, 0, 1) == "P" and mw.wikibase.entityExists( hlutur ) and 
	mw.wikibase.getBestStatements(hlutur, eiginleiki)[1] and mw.wikibase.getBestStatements(hlutur, eiginleiki)[1].mainsnak.datavalue then
		local Bstat = mw.wikibase.getBestStatements(hlutur, eiginleiki)[1]
		-- Þessi hluti sækir og færir innihald staðhæfinga (statements) á skiljanlegt form
		-- hnit
		if Bstat.mainsnak.datavalue.type == "globecoordinate" then
			local hnit = mw.wikibase.renderSnak(Bstat.mainsnak)
			hnit = mw.ustring.gsub(hnit, "E", "A")
			statement = mw.ustring.gsub(hnit, "W", "V")
		-- tími
		elseif Bstat.mainsnak.datavalue.type == "time" then
			statement = mw.language.getContentLanguage():formatDate((args.timeformat or "j. F Y"), 
				Bstat.mainsnak.datavalue.value.time)
		-- strengur
		elseif Bstat.mainsnak.datavalue.type == "string" then
			statement = Bstat.mainsnak.datavalue.value
		-- hlutur eða eiginleiki
		elseif Bstat.mainsnak.datavalue.type == "wikibase-entityid" then
			statement = mw.wikibase.getLabel(Bstat.mainsnak.datavalue.value.id)
		-- magn
		elseif Bstat.mainsnak.datavalue.type == "quantity" then
			statement = mw.wikibase.renderSnak(Bstat.mainsnak)
		end
		if sergreinir and mw.ustring.sub(sergreinir, 0,1) == "P" and mw.wikibase.entityExists( sergreinir ) and 
		Bstat.qualifiers[sergreinir][1] and 
		Bstat.qualifiers[sergreinir][1].datavalue then
			-- Þessi hluti sækir og færir innihald sérgreina (qualifiers) á skiljanlegt form
			-- hnit
			if Bstat.qualifiers[sergreinir][1].datavalue.type == "globecoordinate" then
				local hnit = mw.wikibase.renderSnak(Bstat.mainsnak)
				hnit = mw.ustring.gsub(hnit, "E", "A")
				qualifier = "(" .. mw.ustring.gsub(hnit, "W", "V") .. ")"
			-- tími
			elseif Bstat.qualifiers[sergreinir][1].datavalue.type == "time" then
				qualifier = "(" .. mw.language.getContentLanguage():formatDate((args.timeformat or "j. F Y"), 
					Bstat.qualifiers[sergreinir][1].datavalue.value.time) .. ")"
			-- strengur
			elseif Bstat.qualifiers[sergreinir][1].datavalue.type == "string" then
				qualifier = "(" .. Bstat.qualifiers[sergreinir][1].datavalue.value .. ")"
			--hlutur eða eiginleiki
			elseif Bstat.qualifiers[sergreinir][1].datavalue.type == "wikibase-entityid" then
				qualifier = "(" .. mw.wikibase.getLabel(Bstat.qualifiers[sergreinir][1].datavalue.value.id) .. ")"
			-- magn
			elseif Bstat.qualifiers[sergreinir][1].datavalue.type == "quantity" then
				qualifier = "(" .. mw.wikibase.renderSnak(Bstat.qualifiers[sergreinir][1]) .. ")"
			end
		end
		local reftable = nil
		local reftext = nil
		if Bstat.references and Bstat.references[1].snaks["P123"] and Bstat.references[1].snaks["P123"][1].datavalue
		and Bstat.references[1].snaks["P854"] and Bstat.references[1].snaks["P854"][1].datavalue then
			reftext = '[' .. Bstat.references[1].snaks["P854"][1].datavalue.value .. ' ' ..
				mw.wikibase.getLabel(Bstat.references[1].snaks["P123"][1].datavalue.value.id) .. '] '
			if Bstat.references[1].snaks["P813"] and Bstat.references[1].snaks["P813"][1].datavalue then
				reftext = reftext .. mw.language.getContentLanguage():formatDate((args.timeformat or "j. F Y"), 
						Bstat.references[1].snaks["P813"][1].datavalue.value.time)
			end
			reftable = frame:extensionTag( "ref", reftext )
		end
		return (statement or "") .. (args.delimiter or " ") .. (qualifier or "") .. (reftable or "") ..
		" <small>[[:d:" .. (hlutur or mw.wikibase.getEntityIdForCurrentPage()) .. "|breyta]]</small>"
	else
		return ""
	end
end

return p