Changes

add sparql query
Line 2: Line 2:  
-- Module:SMW
 
-- Module:SMW
 
local p = {}
 
local p = {}
 
+
local linkedwiki = require 'linkedwiki'
 
function p.GetProcessesGraph()
 
function p.GetProcessesGraph()
 
local process_types = {"LabProcess:OSL9a645a64b15442398ad3c057e1b64d87", "LabProcess:OSL4c1f7444e389471a8250f53407191735", "LabProcess:OSLd0c734a239844a0d8820856add12aeca"}
 
local process_types = {"LabProcess:OSL9a645a64b15442398ad3c057e1b64d87", "LabProcess:OSL4c1f7444e389471a8250f53407191735", "LabProcess:OSLd0c734a239844a0d8820856add12aeca"}
Line 15: Line 15:  
rankdir=LR
 
rankdir=LR
 
]]
 
]]
 +
local edges = ""
 
for id,process in pairs(result) do
 
for id,process in pairs(result) do
 
--mw.logObject(process)
 
--mw.logObject(process)
 
local nodes = ""
 
local nodes = ""
local edges = ""
+
local nodes2 = ""
 +
 
 
for obj_id, obj in pairs(process['objects']) do
 
for obj_id, obj in pairs(process['objects']) do
 
 
 
if p.IsGlobalObject(obj) then
 
if p.IsGlobalObject(obj) then
nodes = nodes .. '"' .. obj_id .. '" [label="' .. obj['local_id'] .. '" href="/wiki/' .. obj_id .. '"];'
  −
end
   
local successors = nil
 
local successors = nil
successors = p.concatTables(obj['successor_object'], obj['successor_object_semistatic'])
+
successors = p.concatTables(obj['successor_object'], obj['successor_object_static'])
successors = p.concatTables(successors, obj['successor_object_static'])
+
--if (successors == nil) then successors = p.toTable(obj['successor_object_semistatic']) end
 +
if (successors == nil and p.tableContains(p.toTable(obj['process_output']),obj_id) == false) then successors = p.toTable(obj['process_output']) end
 
successors = p.removeDuplicates(successors)
 
successors = p.removeDuplicates(successors)
 
obj['successors'] = successors
 
obj['successors'] = successors
Line 37: Line 38:  
-- if (p.tablelength(_successors) == 1) then successors = _successors end
 
-- if (p.tablelength(_successors) == 1) then successors = _successors end
 
--end
 
--end
 +
local color = "black"
 
if (successors ~= nil) then  
 
if (successors ~= nil) then  
 +
color = "green"
 
for succ_id, succ in pairs(successors) do
 
for succ_id, succ in pairs(successors) do
 
edges = edges .. '"' .. obj_id .. '" -> "' .. succ .. '";'  
 
edges = edges .. '"' .. obj_id .. '" -> "' .. succ .. '";'  
 
end
 
end
 +
nodes2 = nodes2 .. '"' .. obj_id .. '" [color=' .. color .. ' label="' .. obj['label'] .. '" href="/wiki/' .. obj_id .. '"];'
 +
else
 +
nodes = nodes .. '"' .. obj_id .. '" [color=' .. color .. ' label="' .. obj['label'] .. '" href="/wiki/' .. obj_id .. '"];'
 +
end
 
end
 
end
   
end
 
end
 
g = g .. [[
 
g = g .. [[
 
subgraph cluster_]] .. id:gsub(":","_") .. [[ {
 
subgraph cluster_]] .. id:gsub(":","_") .. [[ {
node [style=filled];
+
node [shape=rect];
 
label = "]] .. process['label'] .. [[";
 
label = "]] .. process['label'] .. [[";
 
color=blue;
 
color=blue;
 
]] .. nodes .. [[
 
]] .. nodes .. [[
 +
]] .. nodes2 .. [[
 
 
 
}
 
}
]] .. edges .. [[
   
 
 
]]
 
]]
 
end
 
end
 
g = g .. [[
 
g = g .. [[
 +
 +
]] .. edges .. [[
 +
 
}]]
 
}]]
 
d:wikitext(g)
 
d:wikitext(g)
Line 108: Line 117:  
local isGlobal = p.IsGlobalObject(obj)
 
local isGlobal = p.IsGlobalObject(obj)
 
if isGlobal == false then  
 
if isGlobal == false then  
mw.log("Follow " .. obj_id)
+
--mw.log("Follow " .. obj_id)
 
p.concatTables(result,p.GetNextGlobalObject(dataset, obj))  
 
p.concatTables(result,p.GetNextGlobalObject(dataset, obj))  
 
elseif (succ ~= nil) then  
 
elseif (succ ~= nil) then  
mw.log("Found " .. succ)
+
--mw.log("Found " .. succ)
 
table.insert(result, succ)  
 
table.insert(result, succ)  
 
end
 
end
Line 123: Line 132:  
function p.IsGlobalObject(obj)
 
function p.IsGlobalObject(obj)
 
local isGlobal = false
 
local isGlobal = false
for type_id, type in pairs(obj['type']) do
+
local visible_types = {"Material:OSL344e5c0f20e04894abe53678e2f68351"}
if (type == "Category:LabProcessOutput") then isGlobal = true end
+
for category_id, category in pairs(p.toTable(obj['category'])) do
 +
if (category == "Category:LabProcessOutput") then isGlobal = true end
 +
end
 +
if (obj['type'] ~= nil) then
 +
for obj_type_id, obj_type in pairs(p.toTable(obj['type'])) do
 +
for vis_type_id, vis_type in pairs(p.toTable(visible_types)) do
 +
if (obj_type == vis_type) then isGlobal = true end
 +
end
 +
end
 
end
 
end
 
return isGlobal
 
return isGlobal
Line 137: Line 154:  
|?#-=id  
 
|?#-=id  
 
|?HasId#-=local_id  
 
|?HasId#-=local_id  
 +
|?Display title of#-=label
 
|?-HasPredecessor#-=successor_param  
 
|?-HasPredecessor#-=successor_param  
 
|?-HasPredecessor.IsProcessParameterOf#-=successor_subprocess  
 
|?-HasPredecessor.IsProcessParameterOf#-=successor_subprocess  
Line 157: Line 175:  
|?#-=id  
 
|?#-=id  
 
|?HasId#-=local_id  
 
|?HasId#-=local_id  
 +
|?Display title of#-=label
 
|?-HasPredecessor.IsProcessParameterOf.HasOutput#-=successor_object_semistatic
 
|?-HasPredecessor.IsProcessParameterOf.HasOutput#-=successor_object_semistatic
 
|?-HasPredecessor.IsObjectParameterOf#-=successor_object
 
|?-HasPredecessor.IsObjectParameterOf#-=successor_object
 +
|?-Has subobject.-IsOutputOf#-=process_output
 
|?-HasInput.HasOutput#-=successor_object_static
 
|?-HasInput.HasOutput#-=successor_object_static
|?Category#-=type
+
|?Category#-=category
 +
|?IsInstanceOf#-=type
 
|format=plain
 
|format=plain
 
|limit=10000
 
|limit=10000
Line 170: Line 191:  
end
 
end
    +
function p.GetProcessObjectsSPARQL(process_types)
 +
--local process_types = {"LabProcess:OSL9a645a64b15442398ad3c057e1b64d87", "LabProcess:OSL4c1f7444e389471a8250f53407191735", "LabProcess:OSLd0c734a239844a0d8820856add12aeca"}
 +
local object =  linkedwiki.new()
 +
    object:setConfig("https://kiprobatt.de")
 +
    mw.log(object:getConfig())
 +
   
 +
    local query = [[
 +
    PREFIX dc: <http://purl.org/dc/elements/1.1/>
 +
PREFIX property: <https://kiprobatt.de/id/Property-3A>
 +
PREFIX file: <https://kiprobatt.de/id/File-3A>
 +
PREFIX category: <https://kiprobatt.de/id/Category-3A>
 +
PREFIX material: <https://kiprobatt.de/id/Material-3A>
 +
PREFIX process: <https://kiprobatt.de/id/LabProcess-3A>
 +
PREFIX wiki: <https://kiprobatt.de/id/>
 +
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
 +
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
 +
PREFIX owl: <http://www.w3.org/2002/07/owl#>
 +
PREFIX swivt: <http://semantic-mediawiki.org/swivt/1.0#>
 +
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
 +
 +
SELECT  ?id ?local_id ?label ?successor_object_semistatic ?successor_object ?process_output ?successor_object_static ?category ?type
 +
WHERE {
 +
  ?id ^property:HasObject/property:IsInstanceOf process:OSLd0c734a239844a0d8820856add12aeca
 +
optional {  ?id property:HasId ?local_id  }
 +
optional {  ?id property:Display_title_of ?label }
 +
optional {  ?id ^property:HasPredecessor/property:IsProcessParameterOf/property:HasOutput ?successor_object_semistatic }
 +
optional {  ?id ^property:HasPredecessor/property:IsObjectParameterOf ?successor_object }
 +
optional {  ?id ^property:HasObject/^property:IsOutputOf ?process_output }
 +
optional {  ?id ^property:HasInput/property:HasOutput ?successor_object_static }
 +
optional {  ?id rdf:type ?category  }
 +
optional {  ?id property:IsInstanceOf ?type }
 +
}
 +
LIMIT 10000
 +
    ]]
 +
 +
local rtbl = object:query( query )
 +
mw.logObject(rtbl)
 +
while( row ~= nil )
 +
do
 +
  if row['subject_label'] then --set subject label
 +
  text = text .. '"' .. row['subject'] .. '"' .. '[label="'.. row['subject_label'] .. '" href="' .. row['subject'] .. '"]' .. newline
 +
  end
 +
  i = i + 1
 +
  row = rtbl['result']['rows'][i]
 +
end
 +
return result
 +
end
 
-- expands single values for properties to tables with len 1
 
-- expands single values for properties to tables with len 1
 
function p.toTable(v)
 
function p.toTable(v)
Line 196: Line 264:  
end
 
end
 
return t1
 
return t1
 +
end
 +
 +
function p.tableContains(t,v)
 +
if (t == nil or v == nil) then return false end
 +
local contained = false
 +
for _,_v in ipairs(t) do
 +
if (_v == v) then contained = true end
 +
end
 +
return contained
 
end
 
end
  
Bots, bulkpusher, Bureaucrats, checkuser, filepusher, Interface administrators, oversight, pusher, rdfioadministrator, rdfiocurator, Administrators (Semantic MediaWiki), Curators (Semantic MediaWiki), Editors (Semantic MediaWiki), Administrators
5,452

edits