rdf_rules_engine 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/rdf_rules_engine.rb +191 -0
  3. 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: []