Þ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: (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

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

local p = {}

function p._main(frame)
	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
	and mw.wikibase.getBestStatements(hlutur, eiginleiki)[1].rank == "preferred" and mw.wikibase.getBestStatements(hlutur, eiginleiki)[1].references
	and mw.wikibase.getBestStatements(hlutur, eiginleiki)[1].references[1] 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[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>[[Mynd:Antu document-edit-sign.svg|14px|link=d:" .. (hlutur or mw.wikibase.getEntityIdForCurrentPage()) .. "]]</small>"
	else
		return ""
	end
end

function p._langlink(frame)
	local pframe = frame:getParent()
	return p.langlink(pframe)
end

function p.langlink(frame)
	local args = frame.args
	
	if args[1] and mw.wikibase.getEntityIdForTitle(args[1]) then
		hlutur = mw.wikibase.getEntityIdForTitle(args[1])
	elseif args[1] and mw.wikibase.entityExists( args[1] ) then
		hlutur = args[1]
	else
		hlutur = mw.wikibase.getEntityIdForCurrentPage()
	end
	local projects = {
		["wikipedia"] = "wiki",
		["wikipedía"] = "wiki",
		["wikiorðabók"] = "wiktionary",
		["wikibækur"] = "wikibooks",
		["wikivitnun"] = "wikiquote",
		["wikiheimild"] = "wikisource",
		["wikilífverur"] = "specieswiki",
		["wikispecies"] = "specieswiki",
		["commons"] = "commonswiki",
		["meta"] = "metawiki",
		["mediawiki"] = "mediawikiwiki",
		["wikidata"] = "wikidatawiki"
	}
	local projectlinks = {
		["wikipedia"] = "",
		["wikipedía"] = "",
		["wikiorðabók"] = "wikt:",
		["wiktionary"] = "wikt:",
		["wikibækur"] = "b:",
		["wikibooks"] = "b:",
		["wikivitnun"] = "q:",
		["wikiquote"] = "q:",
		["wikiheimild"] = "s:",
		["wikisource"] = "s:",
		["wikilífverur"] = "wikispecies:",
		["wikispecies"] = "wikispecies:",
		["commons"] = "commons:",
		["meta"] = "m:",
		["mediawiki"] = "mw:",
		["wikidata"] = "d:"
	}
	if hlutur and args[2] and mw.text.trim(args[2]) ~= "" and args[3] then
		return "[[:" .. projectlinks[mw.ustring.lower(args[3])] .. args[2] .. ":" .. mw.wikibase.getSitelink(hlutur, args[2] .. 
			(projects[mw.ustring.lower(args[3])] or args[3])) .. "]]"
	elseif hlutur and args[2] and mw.text.trim(args[2]) == "" and args[3] then
		local languages = {}
		local project = (projects[mw.ustring.lower(args[3])] or args[3])
		local projectlink = projectlinks[mw.ustring.lower(args[3])]
		for x, y in pairs(mw.wikibase.getEntity( hlutur ).sitelinks) do
			if project == "commonswiki" or project == "specieswiki" or project == "metawiki" or 
			project == "wikidatawiki" or project == "mediawikiwiki" then
				break;
			end
			local lang = string.gsub(x, project, "")
			if lang == "zh_min_nan" then
				lang = 'nan'
			end
			if string.find(x, project .. "$", 1, false) then
				if project == "wiki" and x == "commonswiki" or x == "specieswiki" or x == "metawiki" or 
				x == "wikidatawiki" or x == "mediawikiwiki" then
					--nothing
				else
					table.insert(languages, "[[:" ..projectlink .. lang  .. 
					':' .. y.title .. ']]')
				end
			end
		end
		if mw.wikibase.getEntity( hlutur ).sitelinks[project] and project == "commonswiki" or project == "specieswiki" or project == "metawiki" or 
		project == "wikidatawiki" or project == "mediawikiwiki" then
			table.insert(languages, "[[:" ..projectlink .. mw.wikibase.getEntity( hlutur ).sitelinks[project].title .. ']]')
		end
		if project == "commonswiki" then
			if mw.wikibase.getBestStatements(hlutur, "P373")[1] and mw.wikibase.getBestStatements(hlutur, "P373")[1].mainsnak.datavalue then
				table.insert(languages, "[[:" ..projectlink .. 'category:' .. mw.wikibase.getBestStatements(hlutur, "P373")[1].mainsnak.datavalue.value .. ']]')
			end
		end
		if args["aðgreining"] == nil then
			args["aðgreining"] = ", "
		end
		return table.concat(languages, args["aðgreining"])
	else
		return ''
	end
end

return p