Module:WikidataCheck/sandbox: Difference between revisions
DefaultFree (talk | contribs) mNo edit summary |
DefaultFree (talk | contribs) fix bug that was causing onlysourced logic to apply even when onlysourced parameter is absent |
||
Line 13: | Line 13: | ||
local ignorecase = config.ignorecase or "" |
local ignorecase = config.ignorecase or "" |
||
local qid = config.qid or "" |
local qid = config.qid or "" |
||
local onlysourced = config.onlysourced or false |
local onlysourced = (config.onlysourced == 'yes') or false |
||
local ok = false -- one-way flag to check if we're in a good namespace |
local ok = false -- one-way flag to check if we're in a good namespace |
||
local ns = mw.title.getCurrentTitle().namespace |
local ns = mw.title.getCurrentTitle().namespace |
Latest revision as of 10:34, 30 November 2023
This is the module sandbox page for Module:WikidataCheck (diff). |
This Lua module is used on approximately 490,000 pages, or roughly 1% of all pages. 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. |
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
The following is the documentation for Template:WikidataCheck. |
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
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