Přeskočit na obsah

Modul:ResolveEntityId

Tuto stránku mohou editovat jen zavedení uživatelé a správci.
Z Wikipedie, otevřené encyklopedie

Použití

Funguje podobně jako mw.wikibase.resolvePropertyId, ale pro Wikidata položky (entity) místo vlastností (properties).

Vrátí id položky pro zadaný název (propojené stránky na Wikipedii) nebo id. To dovoluje používat místní název pro příslušnou položku namísto toho, aby všude bylo nutné uvádět id. Pokud pro zadaný název či id nebyla nalezena žádná položka, nebo pokud je název nejednoznačný, je vrácena hodnota nil.

Při pokusu najít id k názvu jsou prohledávány pouze stránky na české Wikipedii propojené s Wikidaty. Pokud stránka na Wikipedii existuje, ale neexistuje odpovídající propojení na Wikidata, je vrácena hodnota nil.

Volání z modulu (_id)

Příklady volání z modulu:

Kód Výsledek
local resolveEntity = require( "Modul:ResolveEntityId" )
id = resolveEntity._id('Q42')
id = Q42
local resolveEntity = require( "Modul:ResolveEntityId" )
id = resolveEntity._id('Q0')
id = nil
local resolveEntity = require( "Modul:ResolveEntityId" )
id = resolveEntity._id('Q404')
id = Q404
local resolveEntity = require( "Modul:ResolveEntityId" )
id = resolveEntity._id('Q151384451555')
id = nil
local resolveEntity = require( "Modul:ResolveEntityId" )
id = resolveEntity._id('Douglas Adams')
id = Q42
local resolveEntity = require( "Modul:ResolveEntityId" )
id = resolveEntity._id('TotoNeníExistujícíPoložkaWikidat')
id = nil
local resolveEntity = require( "Modul:ResolveEntityId" )
id = resolveEntity._id('TotoNeníExistujícíPoložkaWikidat', 'Wikidata ID nenalezeno!')
id = 'Wikidata ID nenalezeno!'

Volání ze šablony (entityid)

Následující výraz vrátí id položky (nebo nil pokud ID neexistuje): {{#invoke:ResolveEntityId|entityid|id}}

Následující výraz vrátí id položky (nebo alternativní text pokud ID neexistuje): {{#invoke:ResolveEntityId|entityid|id|alternativní text pokud id je nil}}


local p = {}

function p._entityid(_,id,alt)
	-- backwards compatibility for deprecated _entityid function
	return p._id(id,alt)
end

function p._id(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._id(frame.args[1], frame.args[2])
end

return p