Module:WikidataIdentifiers

MyWikiBiz, Author Your Legacy — Tuesday April 23, 2024
Jump to navigationJump to search

Template:Module rating


Functions for use in retrieving Wikidata for use in templates that deal with identifiers

  • getIdentifierQualifier returns the value of a qualifier for an Identifier

Functions

getIdentifierQualifier

This returns the value of a qualifier for an identifier such as Template:Q.

There is an assumption is that one value exists for the property, and only one qualifier exists for that value.

Constraint violations for Template:Q are at d:Wikidata:Databasereports/Constraintviolations/P1367 #Single_value

Usage

Normally use like this within a template for use in the article concerned:

  • {{#invoke:WikidataIdentifiers |getIdentifierQualifier |<property> |qual=<qualifier>}}

If used outside of the related article, an expensive version of the call is available:

  • {{#invoke:WikidataIdentifiers |getIdentifierQualifier |<property> |qual=<qualifier> |qid=<Q-value for target in Wikidata}}

Examples

Retrieving the Template:Q qualifier for the Template:Q within an article:

  • {{#invoke:WikidataIdentifiers |getIdentifierQualifier |P1367 |qual=P1114}}

Retrieving the Template:Q qualifier for the Template:Q for Template:Q outside of the article:

  • {{#invoke:WikidataIdentifiers |getIdentifierQualifier |P1367 |qual=P1114 |qid=Q5083334}}Lua error at line 24: attempt to index field 'wikibase' (a nil value).

-- Functions for use in retrieving Wikidata for use in templates that deal with identifiers
-- getIdentifierQualifier returns the value of a qualifier for an Identifier

p = {}

-- getIdentifierQualifier returns the value of a qualifier for an Identifier
-- such as 'Art UK artist ID', P1367
-- the assumption is that one value exists for the property
-- and only one qualifier exists for that value
-- Constraint violations for P1367 are at:
-- https://www.wikidata.org/wiki/Wikidata:Database_reports/Constraint_violations/P1367#Single_value
p.getIdentifierQualifier = function(frame)
	local propertyID = mw.text.trim(frame.args[1] or "")

	-- The PropertyID of the qualifier
	-- whose value is to be returned is passed in named parameter |qual=
	local qualifierID = frame.args.qual
	
	-- Can take a named parameter |qid which is the Wikidata ID for the article.
	-- This will not normally be used because it's an expensive call.
	local qid = frame.args.qid
	if qid and (#qid == 0) then qid = nil end

	local entity = mw.wikibase.getEntityObject(qid)
	local props
	if entity and entity.claims then
		props = entity.claims[propertyID]
	end
	if props then
		-- Check that the first value of the property is an external id
		if props[1].mainsnak.datatype == "external-id" then
			-- get any qualifiers of the first value of the property
			local quals = props[1].qualifiers
			if quals and quals[qualifierID] then
				-- check what the dataype of the first qualifier value is
				-- if it's quantity return the amount
				if quals[qualifierID][1].datatype == "quantity" then
					return tonumber(quals[qualifierID][1].datavalue.value.amount)
				end
				-- checks for other datatypes go here:
				
			end
		end
	end
end


return p