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.
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: []