Anonymous

Changes

From KIproBatt Wiki
filter objects
Line 5: Line 5:  
function p.GetProcessesGraph()
 
function p.GetProcessesGraph()
 
local process_types = {"LabProcess:OSL9a645a64b15442398ad3c057e1b64d87", "LabProcess:OSL4c1f7444e389471a8250f53407191735", "LabProcess:OSLd0c734a239844a0d8820856add12aeca"}
 
local process_types = {"LabProcess:OSL9a645a64b15442398ad3c057e1b64d87", "LabProcess:OSL4c1f7444e389471a8250f53407191735", "LabProcess:OSLd0c734a239844a0d8820856add12aeca"}
 +
--local process_types = {"LabProcess:OSL4c1f7444e389471a8250f53407191735", "LabProcess:OSLd0c734a239844a0d8820856add12aeca"}
 
local result = p.GetProcesses(process_types)
 
local result = p.GetProcesses(process_types)
 
--mw.logObject(result)
 
--mw.logObject(result)
Line 19: Line 20:  
local edges = ""
 
local edges = ""
 
for obj_id, obj in pairs(process['objects']) do
 
for obj_id, obj in pairs(process['objects']) do
nodes = nodes .. '"' .. obj_id .. '" [label="' .. obj['local_id'] .. '" href="https://kiprobatt.de/wiki/' .. obj_id .. '"];'  
+
 +
--if p.IsGlobalObject(obj) then
 +
nodes = nodes .. '"' .. obj_id .. '" [label="' .. obj['local_id'] .. '" href="/wiki/' .. obj_id .. '"];'  
 +
--end
 
local successors = nil
 
local successors = nil
if (obj['successor_object'] ~= nil) then  
+
successors = p.concatTables(obj['successor_object'], obj['successor_object_semistatic'])
successors = p.NormalizePropertyValue(obj['successor_object']);
+
successors = p.concatTables(successors, obj['successor_object_static'])
end
+
successors = p.removeDuplicates(successors)
if (obj['successor_process_output'] ~= nil) then  
+
obj['successors'] = successors
_successors = p.NormalizePropertyValue(obj['successor_process_output']);
+
successors = p.GetNextGlobalObject(result, obj);
if (p.tablelength(_successors) == 1) then successors = _successors end
+
--if (obj['successor_object'] ~= nil) then  
end
+
-- successors = p.toTable(obj['successor_object']);
 +
--end
 +
--if (obj['successor_process_output'] ~= nil) then  
 +
-- _successors = p.toTable(obj['successor_process_output']);
 +
-- if (p.tablelength(_successors) == 1) then successors = _successors end
 +
--end
 
if (successors ~= nil) then  
 
if (successors ~= nil) then  
 
for succ_id, succ in pairs(successors) do
 
for succ_id, succ in pairs(successors) do
Line 33: Line 42:  
end
 
end
 
end
 
end
 +
 
end
 
end
 
g = g .. [[
 
g = g .. [[
Line 61: Line 71:  
results[process_type] = {}
 
results[process_type] = {}
 
results[process_type]['objects'] = {}
 
results[process_type]['objects'] = {}
     result = p.GetOutputs(process_type)
+
     --result = p.GetOutputs(process_type)
 +
    result = p.GetProcessObjects(process_type)
 
     if (result ~= nil) then
 
     if (result ~= nil) then
 
    for index, obj in pairs(result) do
 
    for index, obj in pairs(result) do
Line 85: Line 96:  
     --mw.logObject(results)
 
     --mw.logObject(results)
 
return results
 
return results
 +
end
 +
 +
function p.GetNextGlobalObject(dataset, src_obj)
 +
if (src_obj['successors'] == nil) then return nil end
 +
local result = {}
 +
for id,process in pairs(dataset) do
 +
for obj_id, obj in pairs(process['objects']) do
 +
for succ_id, succ in pairs(src_obj['successors']) do
 +
--mw.log("Compare " .. obj_id .. " with " .. succ)
 +
if obj_id == succ then
 +
local isGlobal = p.IsGlobalObject(obj)
 +
if isGlobal == false then
 +
mw.log("Follow " .. obj_id)
 +
p.concatTables(result,p.GetNextGlobalObject(dataset, obj))
 +
elseif (succ ~= nil) then
 +
mw.log("Found " .. succ)
 +
table.insert(result, succ)
 +
end
 +
end
 +
end
 +
end
 +
end
 +
return result
 +
end
 +
 +
function p.IsGlobalObject(obj)
 +
local isGlobal = false
 +
for type_id, type in pairs(obj['type']) do
 +
if (type == "Category:LabProcessOutput") then isGlobal = true end
 +
end
 +
return isGlobal
 
end
 
end
   Line 104: Line 146:  
]]
 
]]
 
local result = mw.smw.ask( query )
 
local result = mw.smw.ask( query )
mw.logObject(result)
+
--mw.logObject(result)
 +
return result
 +
end
 +
 
 +
function p.GetProcessObjects(process_types)
 +
--local process_types = {"LabProcess:OSL9a645a64b15442398ad3c057e1b64d87", "LabProcess:OSL4c1f7444e389471a8250f53407191735", "LabProcess:OSLd0c734a239844a0d8820856add12aeca"}
 +
process_types = p.toTable(process_types)
 +
local query = "[[-HasObject.IsInstanceOf::" .. table.concat(process_types, "]] OR [[-HasObject.IsInstanceOf::") .. "]]"
 +
query = query .. [[
 +
|?#-=id
 +
|?HasId#-=local_id
 +
|?-HasPredecessor.IsProcessParameterOf.HasOutput#-=successor_object_semistatic
 +
|?-HasPredecessor.IsObjectParameterOf#-=successor_object
 +
|?-HasInput.HasOutput#-=successor_object_static
 +
|?Category#-=type
 +
|format=plain
 +
|limit=10000
 +
]]
 +
local result = mw.smw.ask( query )
 +
--mw.logObject(result)
 +
 
return result
 
return result
 
end
 
end
    
-- expands single values for properties to tables with len 1
 
-- expands single values for properties to tables with len 1
function p.NormalizePropertyValue(v)
+
function p.toTable(v)
 +
if (v == nil) then return nil end
 
if (type(v) ~= "table") then
 
if (type(v) ~= "table") then
 
v = {v}
 
v = {v}
Line 120: Line 183:  
   for _ in pairs(T) do count = count + 1 end
 
   for _ in pairs(T) do count = count + 1 end
 
   return count
 
   return count
 +
end
 +
 +
function p.concatTables(t1,t2)
 +
t1 = p.toTable(t1)
 +
t2 = p.toTable(t2)
 +
if (t1 == nil) then
 +
t1 = t2
 +
elseif (t2 ~= nil) then
 +
for _,v in ipairs(t2) do
 +
    table.insert(t1, v)
 +
    end
 +
end
 +
return t1
 +
end
 +
 +
function p.removeDuplicates(t)
 +
if (t == nil) then return nil end
 +
local hash = {}
 +
local res = {}
 +
for _,v in ipairs(t) do
 +
if (not hash[v]) then
 +
res[#res+1] = v
 +
hash[v] = true
 +
end
 +
end
 +
return res
 
end
 
end
    
return p
 
return p
Bots, bulkpusher, Bureaucrats, checkuser, filepusher, Interface administrators, oversight, pusher, rdfioadministrator, rdfiocurator, Administrators (Semantic MediaWiki), Curators (Semantic MediaWiki), Editors (Semantic MediaWiki), Administrators
5,444

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.