Module:WikidataCheck/sandbox
To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them.
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
[edit ]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}}
To make comparison case insensitive for "different from" category:
{{WikidataCheck|property=P###|value={{{value|}}}|category=Category prefix|ignorecase=1}}
Parameters
[edit ]- 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.
- It is recommended you create these categories with
- Optional
|namespaces=
is a comma separated list of the numerical namespaces to apply the template. 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.|ignorecase=
if set to any value will ignore upper/lower case differences between value in template and value in Wikidata when adding pages to a "different from" category.|qid=
if specified will check a a different Wikidata item than the current article.|onlysourced=
if set to "yes" will ignore unsourced Wikidata properties, equivalent to Module:WikidataIB's|onlysourced=yes
.
Example
[edit ]For {{MusicBrainz artist}}
, which checks MusicBrainz artist ID (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:
- Category:MusicBrainz artist not in Wikidata
- Category:MusicBrainz artist same as Wikidata
- Category:MusicBrainz artist different from Wikidata
See also
[edit ]- {{Tracks Wikidata }} for use in template documentation
- {{Wikidata tracking category }} for use in hidden tracking categories
- Category:Wikipedia categories tracking data not in Wikidata
- Category:Wikipedia categories tracking data same as Wikidata
- Category:Wikipedia categories tracking Wikidata differences
Editors can experiment in this module's sandbox (edit | diff) and testcases (create) pages.
Add categories to the /doc subpage. Subpages of this module.
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 ignorecase = config.ignorecase or "" local qid = config.qid or "" local onlysourced = (config.onlysourced == 'yes') or false 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 if qid == "" then entity = mw.wikibase.getEntityObject() else entity = mw.wikibase.getEntityObject(qid) end 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 if ignorecase ~= "" then value = string.lower( value ) end for i, v in ipairs(hasProp) do -- Now we try to iterate over all possible values? propValue = (v.mainsnak.datavalue or {}).value if ignorecase ~= "" then propValue = string.lower( propValue ) end local sourced = false -- check for external refs a la Module:WikidataIB onlysourced if v.references then for j, vr in ipairs(v.references) do local ref = mw.wikibase.renderSnaks(vr.snaks) if not ref:find("Wiki") then sourced = true break end end end if propValue == value and (not onlysourced or sourced) 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