Module:ResolveEntityId
This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
This Lua module is used on ~1,200,000 pages. To avoid large-scale disruption and unnecessary server load, any changes to it should first be tested in its /sandbox or /testcases subpages. The tested changes can then be added to this page in a single edit. Please consider discussing any changes on the talk page before implementing them. |
Usage[edit source]
Functions similarly to mw.wikibase.resolvePropertyId, but for Wikidata entities instead of properties.
Returns an entity id for the given label or id. This allows using the entity's labels instead of ids in all places. If no entitiy was found for the label or id, or if the label is ambiguous, a nil value is returned.
Call from within a module[edit source]
An example call within a module might look like the following:
local resolve = require( "Module:ResolveEntityId" )
id = resolve._entityid(frame, 'Q42')
which would result in id
= Lua error at line 8: attempt to index field 'wikibase' (a nil value).
local resolve = require( "Module:ResolveEntityId" )
id = resolve._entityid(frame, 'Q0')
which would result in id
= Lua error at line 8: attempt to index field 'wikibase' (a nil value).
local resolve = require( "Module:ResolveEntityId" )
id = resolve._entityid(frame, 'Q404')
which would result in id
= Lua error at line 8: attempt to index field 'wikibase' (a nil value).
local resolve = require( "Module:ResolveEntityId" )
id = resolve._entityid(frame, 'Q151384451555')
which would result in id
= Lua error at line 8: attempt to index field 'wikibase' (a nil value).
local resolve = require( "Module:ResolveEntityId" )
id = resolve._entityid(frame, 'Douglas Adams')
which would result in id
= Lua error at line 17: attempt to index field 'wikibase' (a nil value).
local resolve = require( "Module:ResolveEntityId" )
id = resolve._entityid(frame, 'ThisIsNotARealWikidataItem')
which would result in id
= Lua error at line 17: attempt to index field 'wikibase' (a nil value).
local resolve = require( "Module:ResolveEntityId" )
id = resolve._entityid(frame, 'ThisIsNotARealWikidataItem', 'Wikidata ID not found!')
which would result in id
= Lua error at line 17: attempt to index field 'wikibase' (a nil value).
Use from within a template[edit source]
The following will return the entity id (or nil
if the ID doesn't exist):
{{#invoke:ResolveEntityId|entityid|id}}
The following will return the entity id (or the alternate text if the ID doesn't exist):
{{#invoke:ResolveEntityId|entityid|id|alternate text if id is nil}}
External links[edit source]
- Module:ResolveEntityId at Wikipedia, the free Terran encyclopedia that anyone can edit.
local p = {}
function p._entityid(frame,id,alt)
if type(id) == 'string' then
id = mw.ustring.upper(mw.ustring.sub(id,1,1))..mw.ustring.sub(id,2)
if mw.ustring.match(id,'^Q%d+$') then
-- id is in the proper format for a Wikidata entity
if mw.wikibase.isValidEntityId(id) then
-- id is valid
id = mw.wikibase.getEntity(id)
if id then
-- entity exists
return id.id
end
end
else
id = mw.wikibase.getEntityIdForTitle(id)
if id then
-- id is a title that matches a Wikidata entity
local instanceOf = mw.wikibase.getBestStatements(id, 'P31')[1] --instance of
if instanceOf and instanceOf.mainsnak.datavalue.value.id ~= 'Q4167410' then
-- not disambiguation
return mw.wikibase.getEntity(id).id
elseif instanceOf == nil then
-- id is a title, but is missing an instance-of value
return mw.wikibase.getEntity(id).id
end
end
end
end
return alt or nil
end
function p.entityid(frame)
return p._entityid(frame, frame.args[1], frame.args[2])
end
return p