rdf_rules_engine 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/rdf_rules_engine.rb +191 -0
- metadata +72 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 35cdc4b407eb727827ce56f639104317d850ffa4
|
4
|
+
data.tar.gz: b7282128e876ff40aa8d2f94ef8ac1b2b19c72d1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8fa467bf9586e3ce1e437eeddca0954e15d064d8bafb1926519240efa4259174bd0e2a19d32d2f685046f80d612b30e931a13d33e705ad6aa9cc4344ec371165
|
7
|
+
data.tar.gz: 831b968840d6749c36641b496b436057d3a22c7da1e1f86673fef37e162a6e23bc4792b150e31e7ad769d5f0ef2c8c9a5645cea3e0ee4120e4d4873f2bc0d9b3
|
@@ -0,0 +1,191 @@
|
|
1
|
+
require 'linkeddata'
|
2
|
+
require 'sparql'
|
3
|
+
|
4
|
+
include RDF
|
5
|
+
|
6
|
+
class RdfRulesEngine
|
7
|
+
attr_accessor :prefix, :graph, :graph_code
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@prefix = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
|
11
|
+
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
|
12
|
+
PREFIX owl: <http://www.w3.org/2002/07/owl#>
|
13
|
+
PREFIX wd: <http://vieslav.pl/RulesToGraphviz#>
|
14
|
+
PREFIX bmm: <http://ikm-group.ch/archiMEO/BMM#>\n"
|
15
|
+
@cache_code = {}
|
16
|
+
@cache_dependOn = {}
|
17
|
+
end
|
18
|
+
|
19
|
+
def term_name(statement)
|
20
|
+
if statement.literal?
|
21
|
+
statement.to_s
|
22
|
+
elsif statement.node?
|
23
|
+
statement.to_s
|
24
|
+
else
|
25
|
+
statement.pname
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
def generate_simple_dot(options = {})
|
31
|
+
txt_dot = ""
|
32
|
+
options[:rdf_graph] ||= @graph
|
33
|
+
options[:digraph] ||= true
|
34
|
+
if options[:digraph] == true
|
35
|
+
txt_dot << "\ndigraph test123 {"
|
36
|
+
else
|
37
|
+
txt_dot << "\ngraph test123 {"
|
38
|
+
end
|
39
|
+
|
40
|
+
options[:rdf_graph].each_statement do |statement|
|
41
|
+
|
42
|
+
s = term_name(statement[0])
|
43
|
+
o = term_name(statement[2])
|
44
|
+
|
45
|
+
txt_dot << "\n\"#{s}\"[color=red, shape=doublecircle];"
|
46
|
+
if statement[2].literal?
|
47
|
+
txt_dot << "\n\"#{o}\"[shape=rectangle];"
|
48
|
+
else
|
49
|
+
txt_dot << "\n\"#{o}\"[color=blue, shape=circle];"
|
50
|
+
end
|
51
|
+
txt_dot << "\n\"#{s}\" -> \"#{o}\" [label=\"#{statement[1].pname}\"];"
|
52
|
+
|
53
|
+
end
|
54
|
+
txt_dot << "}"
|
55
|
+
end
|
56
|
+
|
57
|
+
def sub_str_replace(string, substring, replace_substring)
|
58
|
+
|
59
|
+
while string.include?(substring) do
|
60
|
+
string[substring] = replace_substring
|
61
|
+
end
|
62
|
+
string
|
63
|
+
end
|
64
|
+
|
65
|
+
def query_sub(code_id)
|
66
|
+
query = "CONSTRUCT {
|
67
|
+
code_id wd:text ?code .
|
68
|
+
}
|
69
|
+
WHERE
|
70
|
+
{
|
71
|
+
OPTIONAL {
|
72
|
+
code_id wd:hasCodeUnit ?codeU .
|
73
|
+
?codeU wd:text ?code .
|
74
|
+
}
|
75
|
+
OPTIONAL {
|
76
|
+
code_id wd:hasRule ?Rule .
|
77
|
+
?Rule wd:hasCode ?code .
|
78
|
+
}
|
79
|
+
}"
|
80
|
+
|
81
|
+
#while query.include?("code_id") do
|
82
|
+
|
83
|
+
# query["code_id"] = code_id
|
84
|
+
#end
|
85
|
+
query = sub_str_replace(query, "code_id", code_id)
|
86
|
+
end
|
87
|
+
|
88
|
+
def is_dependOn?(code_id, graph_code)
|
89
|
+
query = @prefix + "Ask {code_id wd:dependOn ?cos .}"
|
90
|
+
query = sub_str_replace(query, "code_id", code_id)
|
91
|
+
#puts query
|
92
|
+
res0 = SPARQL.execute(query, graph_code)
|
93
|
+
#puts res0
|
94
|
+
res0
|
95
|
+
end
|
96
|
+
|
97
|
+
def get_single_code(code_id, graph_code)
|
98
|
+
if @cache_code[code_id]== nil then
|
99
|
+
res = nil
|
100
|
+
res = SPARQL.execute(@prefix + query_sub(code_id), graph_code)
|
101
|
+
code= []
|
102
|
+
res.each_statement do |statement|
|
103
|
+
code << @prefix + statement[2].to_s
|
104
|
+
#puts "statement:" + code.to_s
|
105
|
+
end
|
106
|
+
#puts code
|
107
|
+
@cache_code[code_id] = code
|
108
|
+
code
|
109
|
+
else
|
110
|
+
@cache_code[code_id]
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def get_tree_code(code_id, graph_code, tree_code, n=0)
|
115
|
+
#puts "n:" + n.to_s
|
116
|
+
tree_code[code_id]= n
|
117
|
+
|
118
|
+
|
119
|
+
if is_dependOn?(code_id, graph_code)==true then
|
120
|
+
res0 = nil
|
121
|
+
n=n+1
|
122
|
+
#puts n
|
123
|
+
query = @prefix + "CONSTRUCT {code_id wd:dependOn ?cos .} WHERE {code_id wd:dependOn ?cos .}"
|
124
|
+
query = sub_str_replace(query, "code_id", code_id)
|
125
|
+
#puts query
|
126
|
+
res0 = SPARQL.execute(query, graph_code)
|
127
|
+
#puts res0.count
|
128
|
+
|
129
|
+
res0.each_statement do |statement|
|
130
|
+
st = statement[2].pname
|
131
|
+
ost = st.size
|
132
|
+
pier = st.index("#") + 1
|
133
|
+
#puts st[pier..ost]
|
134
|
+
st = "wd:" + st[pier..ost]
|
135
|
+
get_tree_code(st, graph_code, tree_code, n)
|
136
|
+
end
|
137
|
+
|
138
|
+
#puts res0
|
139
|
+
end
|
140
|
+
#tree_code
|
141
|
+
end
|
142
|
+
|
143
|
+
def get_code(code_id, graph_code)
|
144
|
+
code = []
|
145
|
+
if @cache_dependOn.has_key?(code_id) == false then
|
146
|
+
tree_code = {}
|
147
|
+
|
148
|
+
get_tree_code(code_id, graph_code, tree_code, 0)
|
149
|
+
#@cache_dependOn[code_id] = tree_code
|
150
|
+
#puts @cache_dependOn
|
151
|
+
ar = tree_code.values
|
152
|
+
n = ar.max
|
153
|
+
#puts n.to_s
|
154
|
+
while n >= 0 do
|
155
|
+
code_list = tree_code.select {|key, value| value == n}
|
156
|
+
#puts n.to_s
|
157
|
+
code << code_list.keys
|
158
|
+
|
159
|
+
n=n-1
|
160
|
+
end
|
161
|
+
@cache_dependOn[code_id] = code
|
162
|
+
else
|
163
|
+
code = @cache_dependOn[code_id]
|
164
|
+
end
|
165
|
+
|
166
|
+
#puts code
|
167
|
+
code
|
168
|
+
end
|
169
|
+
|
170
|
+
def execute(code_id, graph=@graph, graph_code=@graph_code, zm1=nil )
|
171
|
+
res = RDF::Graph.new
|
172
|
+
graph_l = RDF::Graph.new
|
173
|
+
graph_l << graph
|
174
|
+
get_code(code_id, graph_code).each do |c|
|
175
|
+
#puts "c:"+ c.to_s
|
176
|
+
graph_l << res
|
177
|
+
c.each do |c1|
|
178
|
+
#puts "c1:" + c1
|
179
|
+
get_single_code(c1, graph_code).each do |c2|
|
180
|
+
#puts c2
|
181
|
+
if zm1 != nil then
|
182
|
+
c2 = sub_str_replace(c2, "zm1", zm1)
|
183
|
+
end
|
184
|
+
res << SPARQL.execute(c2, graph_l)
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
end
|
189
|
+
res
|
190
|
+
end
|
191
|
+
end
|
metadata
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rdf_rules_engine
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- WiDu
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-08-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: linkeddata
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sparql
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Rules Engine
|
42
|
+
email: wdulek@gmail.com
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files: []
|
46
|
+
files:
|
47
|
+
- lib/rdf_rules_engine.rb
|
48
|
+
homepage: https://github.com/widu/rdf_rules_engine
|
49
|
+
licenses:
|
50
|
+
- MIT
|
51
|
+
metadata: {}
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options: []
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
requirements: []
|
67
|
+
rubyforge_project:
|
68
|
+
rubygems_version: 2.6.7
|
69
|
+
signing_key:
|
70
|
+
specification_version: 4
|
71
|
+
summary: Rules Engine
|
72
|
+
test_files: []
|