Module:WikidataCheck: Difference between revisions

From Seeds of the Word, the encyclopedia of the influence of the Gospel on culture
(Allow templates to specify that the "same as" category should not be added. Tested first with /sandbox.)
 
m (1 revision imported)
 
(No difference)

Latest revision as of 19:47, August 31, 2020

Template:WikidataCheck compares a template parameter to a Wikidata property and adds pages using the template to one of three categories: not in, same as, or different from Wikidata. It is powered by the Lua module Module:WikidataCheck.

Usage

To add only articles to the categories:

{{WikidataCheck|property=P###|value={{{value|}}}|category=Category prefix}}

To add pages in other namespaces to the categories:

{{WikidataCheck|property=P###|value={{{value|}}}|category=Category prefix|namespaces=0,14}}

To prevent adding pages to a "same as" category:

{{WikidataCheck|property=P###|value={{{value|}}}|category=Category prefix|nocatsame=1}}

Parameters

Required
  • |property= is the P### of the property. The "P" must be uppercase.
  • |value= is the value to use from the template. This would be something like {{{id|}}} or {{{id|{{{1|}}}}}}
  • |category= is the prefix to use in front of the category names. The categories created are "[prefix] not in Wikidata", "[prefix] same as Wikidata", and "[prefix] different from Wikidata".
    • It is recommended you create these categories with {{hiddencat}} before applying this template.
Optional
  • |namespaces= is a comma separated list of the numerical namespaces to apply the template in. The default is 0, which is just article space.
  • |nocatsame= if set to any value will prevent adding pages to a "same as" category. The "not in" and "different from" categories are still added, where applicable.

Example

For {{MusicBrainz artist}}, which checks Sandbox Monolingual text (P434), the following code would be added:

{{WikidataCheck|property=P434|value={{{mbid|{{{id|{{{1|}}}}}}}}}|category=MusicBrainz artist}}

Articles using that template with an ID would be placed in one of the following categories:

See also


local p = {}

function p.wikidatacheck(frame)
	local pframe = frame:getParent()
	local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself
	local args = pframe.args -- the arguments passed TO the template, in the wikitext that transcludes the template

	local property = config.property
	local value = config.value or ""
	local catbase = config.category
	local namespaces = config.namespaces
	local nocatsame = config.nocatsame or ""
	local ok = false -- one-way flag to check if we're in a good namespace
	local ns = mw.title.getCurrentTitle().namespace
	for v in mw.text.gsplit( namespaces, ",", true) do
		if tonumber(v) == ns then
			ok = true
		end
	end
	if not ok then -- not in one of the approved namespaces
		return ""
	end
	local entity = mw.wikibase.getEntityObject()
	if not entity then -- no Wikidata item
		return "[[Category:" .. catbase .. " not in Wikidata]]"
	end
	if value == "" then
		return nil -- Using Wikidata
	end
	local claims = entity.claims or {}
	local hasProp = claims[property]
	if not hasProp then -- no claim of that property
		return "[[Category:" .. catbase .. " not in Wikidata]]" -- bad. Bot needs to add the property
	end
	for i, v in ipairs(hasProp) do -- Now we try to iterate over all possible values?
		propValue = (v.mainsnak.datavalue or {}).value
		if propValue == value then
			if nocatsame == "" then
				return "[[Category:" .. catbase .. " same as Wikidata]]" -- yay!
			else
				return nil -- if nocatsame, the "same as" category is not added
			end
		end
	end
	return "[[Category:" .. catbase .. " different from Wikidata]]" -- needs human review :(
end

return p