Module:Is located in

local p = {};

local function checklayer(depth) -- check P131 of items at current depth checklist[depth+1] = {} -- setup next layer of table local j = 0 for j = 1,#checklist[depth] do -- loop over items at current depth local subclasses = mw.wikibase.getBestStatements(checklist[depth][j],"P131") -- get P131 statements for i,statement in ipairs(subclasses) do -- loop through items at next depth if statement.mainsnak.snaktype == 'value' then local newitem = statement.mainsnak.datavalue.value.id				if newitem == value then isLocated = true else checklist[depth+1][#checklist[depth+1]+1] = newitem -- add item to next depth of checklist table end end end end return isLocated end

function p.main(frame) local args = frame.args local pargs = frame:getParent.args value = args.value or pargs.value local qid = args.qid or pargs.qid or "" if qid == "" then qid = mw.wikibase.getEntityIdForCurrentPage end if not qid then return 0 end checklist = local md = args.maxdepth or pargs.maxdepth if md then maxdepth = tonumber(md) else maxdepth = 5 end depth = 0 -- current depth isLocated = false -- assume false until match found while not isLocated and depth<maxdepth do		depth = depth+1 checklayer(depth) end if not isLocated then depth = 0 -- indicates not isLocated end return depth -- return depth that item was found end

return p