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

  • getIdentifierQualifier returns the value of a qualifier for an Identifier

FunctionsEdit

getIdentifierQualifierEdit

This returns the value of a qualifier for an identifier such as Art UK artist identifier (P1367).

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

Constraint violations for Art UK artist identifier (P1367) are at d:Wikidata:Databasereports/Constraintviolations/P1367 #Single_value

UsageEdit

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}}

ExamplesEdit

Retrieving the quantity (P1114) qualifier for the Art UK artist identifier (P1367) within an article:

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

Retrieving the quantity (P1114) qualifier for the Art UK artist identifier (P1367) for (Q5083334) outside of the article:

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

-- 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