มอดูล:Is instance
หน้าตา
![]() | 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. |
Usage[แก้]
{{#invoke:Is instance|main|qid=|value=}}
This module will use Wikidata properties เป็น (P31) and กลุ่มย่อยของ (P279) to determine whether or not an entity is an instance of some other entity.
Example[แก้]
For example:
- (Q847672)
- is an instance of เรือบรรทุกเครื่องบินเบา (Q1185562), which
- is a subclass of เรือบรรทุกอากาศยาน (Q17205), which
- is a subclass of เรือรบ (Q3114762), which
- is a subclass of (Q177597), which
- is a subclass of เรือกำปั่น (Q11446).
- is a subclass of (Q177597), which
- is a subclass of เรือรบ (Q3114762), which
- is a subclass of เรือบรรทุกอากาศยาน (Q17205), which
- is an instance of เรือบรรทุกเครื่องบินเบา (Q1185562), which
To know that (Q847672) is an instance of เรือกำปั่น (Q11446), you can use:
{{#invoke:Is instance|main|qid=Q847672|value=Q11446}}
= 3
The output number indicates the minimum recursion depth to find the value required. An output of zero indicates that the item is not an instance.
Maximum depth[แก้]
For performance considerations, the module will not go on searching indefinitely. The default maximum recursion depth is 5. If you want to change this, use the |maxdepth=
parameter.
คู่มือการใช้งานที่ปรากฏด้านบนนี้ดึงมาจาก มอดูล:Is instance/doc (แก้ | ประวัติ) ผู้เขียนสามารถทำการทดลองได้ที่กระบะทราย (สร้าง | คัดลอก) และชุดทดสอบ (สร้าง) ของมอดูลนี้ หน้าย่อยของมอดูลนี้ |
local p = {};
local function checklayer(depth) -- check subclasses 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 property
if depth == 1 then
property = "P31" -- use P31 for depth 1
else
property = "P279" -- use P279 for depths 2+
end
local subclasses = mw.wikibase.getBestStatements(checklist[depth][j],property) -- get P31 or P279 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
isInstance = true
else
checklist[depth+1][#checklist[depth+1]+1] = newitem -- add item to next depth of checklist table
end
end
end
end
return isInstance
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 = {{qid}}
local md = args.maxdepth or pargs.maxdepth
if md then
maxdepth = tonumber(md)
else
maxdepth = 5
end
depth = 0 -- current depth
isInstance = false -- assume false until match found
while not isInstance and depth<maxdepth do
depth = depth+1
checklayer(depth)
end
if not isInstance then
depth = 0 -- indicates not isInstance
end
return depth -- return depth that item was found
end
return p