rtriplify 0.0.0 → 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README +41 -3
- data/lib/app/controllers/triplify_controller.rb +67 -67
- data/lib/app/helpers/triplify_helper.rb +1 -5
- data/lib/config/{database.yml → database_1.yml} +77 -57
- data/lib/model.rb +93 -46
- data/lib/rtriplify.rb +10 -11
- data/lib/tripleizer.rb +371 -116
- data/lib/triplify_metadata.rb +3 -3
- data/rails/init.rb +2 -2
- metadata +17 -7
- data/lib/triplify/acts_ass_yaffle.rb +0 -0
- data/lib/triplify.rb +0 -11
data/lib/rtriplify.rb
CHANGED
@@ -1,17 +1,16 @@
|
|
1
1
|
require 'configatron'
|
2
2
|
|
3
|
-
|
3
|
+
if File.exists?('config/triplify.yml')
|
4
|
+
#loading helpers and controllers
|
4
5
|
|
5
|
-
%w{ models controllers helpers}.each do |dir|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
%w{ models controllers helpers}.each do |dir|
|
7
|
+
path = File.join(File.dirname(__FILE__), 'app', dir)
|
8
|
+
$LOAD_PATH << path
|
9
|
+
ActiveSupport::Dependencies.load_paths << path
|
10
|
+
ActiveSupport::Dependencies.load_once_paths.delete(path)
|
11
|
+
end
|
12
|
+
# load settings
|
13
|
+
configatron.configure_from_yaml('config/triplify.yml')
|
10
14
|
end
|
11
15
|
|
12
|
-
# load settings
|
13
|
-
configatron.configure_from_yaml('vendor/plugins/rtriplify/lib/config/database.yml')
|
14
|
-
|
15
|
-
|
16
|
-
|
17
16
|
|
data/lib/tripleizer.rb
CHANGED
@@ -1,129 +1,348 @@
|
|
1
1
|
require 'configatron'
|
2
|
+
require 'json'
|
2
3
|
|
3
4
|
class Tripleizer
|
4
5
|
def initialize output=nil
|
5
6
|
@object_properties = configatron.objectProperties.to_hash
|
6
|
-
@
|
7
|
+
@object_namespaces = configatron.namespaces.to_hash
|
7
8
|
@class_map = configatron.classMap.to_hash
|
8
9
|
@output=output
|
9
10
|
@version="0.0.1"
|
10
|
-
|
11
|
+
@json_hash = Hash.new
|
12
|
+
@output_json = nil;
|
13
|
+
@base_uri = "www.base_uri"
|
11
14
|
end
|
12
15
|
|
13
16
|
attr_accessor :output
|
14
17
|
attr_reader :version
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
#
|
21
|
-
|
22
|
-
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
30
|
-
#
|
31
|
-
# if
|
32
|
-
#
|
18
|
+
attr_accessor :output_json
|
19
|
+
attr_accessor :base_uri
|
20
|
+
|
21
|
+
|
22
|
+
# def all request,headers
|
23
|
+
# #get all models
|
24
|
+
# #render all models
|
25
|
+
# ret=""
|
26
|
+
# t = Tripleizer.new
|
27
|
+
# $base_uri= t.uri request.env['REQUEST_URI'].to_s[0..-5]
|
28
|
+
# #t.output_json = request.content_type.try(:to_sym)==:json
|
29
|
+
# #content_type = t.output_json ? 'application/json' : 'text/plain'
|
30
|
+
# ret << t.write_rdf_head
|
31
|
+
# model_groups = eval("configatron.query").to_hash
|
32
|
+
# model_groups.each do |model_group_name,model_group|
|
33
|
+
# model_group.each do |model_name,model_attributes|
|
34
|
+
# if model_name.to_s =="sql_query"
|
35
|
+
# ret<<t.write_sql(model_group_name,model_attributes,t.output)
|
36
|
+
# else
|
37
|
+
# ret<<t.write_model(model_name,model_group_name)
|
33
38
|
# end
|
34
|
-
# when 2
|
35
|
-
# if !c
|
36
|
-
# write_triple uri(_class),uri('rdf:type'), uri('owl:Class')
|
37
|
-
# end
|
38
|
-
# #TODO continue 2
|
39
|
-
# return
|
40
|
-
# when 1
|
41
|
-
#
|
42
|
-
# else
|
43
|
-
# #TODO:DataDepthERROR
|
44
39
|
# end
|
45
|
-
# #TODO:some magic sql-query building
|
46
|
-
#
|
47
|
-
# #query sql
|
48
|
-
# #for each result make_triples
|
49
|
-
#
|
50
40
|
# end
|
41
|
+
# t_metadata = TriplifyMetadata.new
|
42
|
+
# ret<<t_metadata.write_metadata(t).to_s
|
43
|
+
# ret
|
44
|
+
# end
|
45
|
+
|
46
|
+
def rdf rdf_start_class , var=[]
|
47
|
+
class_map = Hash.new
|
48
|
+
var.each do |c|
|
49
|
+
class_map[c[0].class.to_s]= c
|
50
|
+
end
|
51
|
+
rdf_string =""
|
52
|
+
#get configuration start ->classes
|
53
|
+
m = search_models(rdf_start_class)
|
54
|
+
|
55
|
+
m.values[0].each do |mod,attributes|
|
56
|
+
unless mod.eql?("sql_query")
|
57
|
+
t_mod = Model.new(mod, rdf_start_class, class_map[mod.to_s])
|
58
|
+
#if sql...
|
59
|
+
key = t_mod.get_key
|
60
|
+
t_mod.get_rows.each do |item|
|
61
|
+
rdf_string<<rdf_by_id(mod,rdf_start_class,eval("item.#{key}"))
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
rdf_string
|
66
|
+
end
|
67
|
+
|
68
|
+
#
|
69
|
+
def rdf_by_id model_name, class_name, id
|
70
|
+
puts model_name
|
71
|
+
ret=""
|
72
|
+
#TODO...mehrere Models
|
73
|
+
|
74
|
+
model = Model.new(model_name,class_name)
|
75
|
+
data_types= model.get_datatypes
|
76
|
+
#build hash
|
77
|
+
item=model.get_row_by_id(id).first
|
78
|
+
line = Hash.new
|
79
|
+
subline = Hash.new
|
80
|
+
remove =Array.new
|
81
|
+
|
82
|
+
model.model_attributes.each do |k,v|
|
83
|
+
if v.to_s.include?("*") || v.to_s[0..9]=="new_model("
|
84
|
+
remove.push(k.to_s) unless remove.index(k.to_s)
|
85
|
+
m_class,field=v.to_s.split("*")
|
86
|
+
ref_pred,ref_model=k.to_s.split"->"
|
87
|
+
if v.to_s[0..5]=="MODEL("
|
88
|
+
m_class.gsub!("MODEL(","Model.new(")
|
89
|
+
submodel= eval(m_class.to_s)
|
90
|
+
sub_rows= submodel.get_rows
|
91
|
+
else
|
92
|
+
submodel= eval("item.#{m_class.to_s.downcase}")
|
93
|
+
sub_rows= submodel
|
94
|
+
end
|
95
|
+
sub_rows.each do |subitem|
|
96
|
+
sub_id=eval("subitem.#{field}")
|
97
|
+
ret<< make_triples({:id=>id,k=>sub_id },class_name,"",Array.new,false)
|
98
|
+
ret<<rdf_by_id( submodel.model_name ? submodel.model_name : m_class , ref_model,sub_id).to_s
|
99
|
+
end
|
100
|
+
else
|
101
|
+
write_line = true;
|
102
|
+
#FIXME: use last "." split
|
103
|
+
if k.to_s.include? "->"
|
104
|
+
line[k.to_s]=eval("item."+v.to_s)
|
105
|
+
#write key ref
|
106
|
+
ref_pred,ref_model=k.to_s.split"->"
|
107
|
+
#write referenced model
|
108
|
+
#ret<< make_triples({:id=>id,k=>sub_id },class_name,"",Array.new,false)
|
109
|
+
m= search_models(ref_model)
|
110
|
+
m.values[0].each do |mod,val|
|
111
|
+
ret<<(rdf_by_id mod, ref_model, eval("item."+v.to_s)).to_s
|
112
|
+
end
|
113
|
+
else
|
114
|
+
if v.to_s.include? "."
|
115
|
+
write_line = nil unless eval("item."+v.to_s.downcase.split(".")[0])
|
116
|
+
end
|
117
|
+
begin
|
118
|
+
if v.to_s[0..5]=="CONST("
|
119
|
+
line[k.to_s],data_types[k.to_s]= model.get_const(v)
|
120
|
+
#datatype to uri format
|
121
|
+
if data_types[k.to_s]=="LINK"
|
122
|
+
line[k.to_s] =uri line[k.to_s]
|
123
|
+
data_types.delete k.to_s
|
124
|
+
@object_properties[k.to_s]="t"
|
125
|
+
else
|
126
|
+
data_types[k.to_s] = uri(data_types[k.to_s])
|
127
|
+
end
|
128
|
+
else
|
129
|
+
line[k.to_s]=eval("item."+v.to_s) if write_line
|
130
|
+
|
131
|
+
end
|
132
|
+
rescue Exception => ex
|
133
|
+
line[k.to_s]=v.to_s if write_line
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
# end
|
138
|
+
end
|
139
|
+
extract_id_line(model.model_attributes, line, item,data_types)
|
140
|
+
remove.each { |rem_attrib| line.delete(rem_attrib) }
|
141
|
+
#get triples of row
|
142
|
+
ret<<make_triples(line, class_name , "", data_types)
|
143
|
+
#render :text => t.make_triples(c1, controller , "", t.dbd_types)
|
144
|
+
ret
|
145
|
+
end
|
146
|
+
|
147
|
+
# rdfa generation starts here
|
148
|
+
def get_rdfa rdf_start_class , var=[]
|
149
|
+
#write namespace
|
150
|
+
"<div #{@object_namespaces.collect {|pre,ns| "xmlns:"<<pre.to_s<<"=\""<<ns.to_s<<"\" " }}>\n #{get_rdfa_root(rdf_start_class,var)} </div>"
|
151
|
+
end
|
152
|
+
|
153
|
+
# the root rdf node
|
154
|
+
def get_rdfa_root rdf_start_class , var=[]
|
155
|
+
#map each var on its classname
|
156
|
+
rdfa_string = ""
|
157
|
+
class_map = Hash.new
|
158
|
+
var.each do |c|
|
159
|
+
class_map[c[0].class.to_s]= c
|
160
|
+
end
|
161
|
+
|
162
|
+
#get configuration start ->classes
|
163
|
+
m = search_models(rdf_start_class)
|
164
|
+
|
165
|
+
m.values[0].each do |mod,attributes|
|
166
|
+
unless mod.eql?("sql_query")
|
167
|
+
t_mod = Model.new(mod, rdf_start_class, class_map[mod.to_s])
|
168
|
+
#if sql...
|
169
|
+
key = t_mod.get_key
|
170
|
+
t_mod.get_rows.each do |item|
|
171
|
+
rdfa_string<<get_rdfa_by_id(rdf_start_class,eval("item.#{key}"))
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
rdfa_string
|
176
|
+
end
|
177
|
+
|
178
|
+
# generate RDFa tags by a specified ID
|
179
|
+
def get_rdfa_by_id rdf_start_class , id
|
180
|
+
#map each var on its classname
|
181
|
+
id = id.to_s
|
182
|
+
rdfa_string = "<div about=\"#{rdf_start_class+"/"<<id}\" typeof=\"#{@class_map[rdf_start_class.to_sym]}\">\n"
|
183
|
+
#get configuration start ->classes
|
184
|
+
m = search_models(rdf_start_class)
|
185
|
+
m.values[0].each do |mod,attributes|
|
186
|
+
unless mod.to_s.eql?("sql_query")
|
187
|
+
t_mod = Model.new(mod, rdf_start_class)
|
188
|
+
#if sql...
|
189
|
+
item=t_mod.get_row_by_id(id).first
|
190
|
+
t_mod.model_attributes.each do |name,link_field|
|
191
|
+
#property
|
192
|
+
#link to other ress
|
193
|
+
if name.to_s.include? "->"
|
194
|
+
m_class,role_mod = name.to_s.split "->"
|
195
|
+
|
196
|
+
if role_mod.eql?("sql_query")
|
197
|
+
hello=""
|
198
|
+
else
|
199
|
+
if link_field.include?("*")
|
200
|
+
field_class,field= link_field.to_s.split("*")
|
201
|
+
if field_class.to_s[0..5]=="Model("
|
202
|
+
field_class.gsub!("MODEL(","Model.new(")
|
203
|
+
submodel= eval(field_class.to_s).get_rows
|
204
|
+
rdfa_string<<"<div rel=\"#{m_class}\">\n"
|
205
|
+
submodel.each do |line|
|
206
|
+
rdfa_string<<get_rdfa_by_id(role_mod , eval("line.#{field.to_s}"))
|
207
|
+
end
|
208
|
+
rdfa_string<<"</div>\n"
|
209
|
+
else
|
210
|
+
subitem = eval("item.#{field_class}")
|
211
|
+
rdfa_string<<"<div rel=\"#{m_class}\">\n"
|
212
|
+
subitem.each do |subline|
|
213
|
+
rdfa_string<< get_rdfa_by_id(role_mod , eval("subline.#{field.to_s}"))
|
214
|
+
end
|
215
|
+
rdfa_string<<"</div>\n"
|
216
|
+
end
|
217
|
+
else
|
218
|
+
rdfa_string<<"<div rel=\"#{m_class}\">\n"
|
219
|
+
rdfa_string << get_rdfa_by_id(role_mod , eval("item.#{link_field.to_s}"))
|
220
|
+
rdfa_string<<"</div>\n"
|
221
|
+
end
|
222
|
+
end
|
223
|
+
else
|
224
|
+
write=true
|
225
|
+
#just a property
|
226
|
+
#CONST(
|
227
|
+
#Model(
|
228
|
+
if link_field.to_s[0..5] =="CONST("
|
229
|
+
write=false
|
230
|
+
val,data_type= t_mod.get_const(link_field)
|
231
|
+
if data_type=="LINK"
|
232
|
+
#link
|
233
|
+
rdfa_string<<"<div rel= \"#{name}\" resource=\"#{val}\"> </div>\n"
|
234
|
+
else
|
235
|
+
#value
|
236
|
+
rdfa_string<<"<div property= \"#{name}\" content=\"#{val}\" datatype=\"#{data_type}\"> </div>\n"
|
237
|
+
end
|
238
|
+
else
|
239
|
+
m_class,field= link_field.to_s.split("*")
|
240
|
+
if name.to_s[0..5]=="MODEL("
|
241
|
+
m_class.gsub!("MODEL(","Model.new(")
|
242
|
+
submodel= eval(m_class.to_s).get_rows
|
243
|
+
submodel.each do |line|
|
244
|
+
datatype="string"
|
245
|
+
rdfa_string<<"<div property= \"#{ref_pred}\" content=\"#{eval("line.#{field.to_s.downcase}")}\" datatype=\"#{data_type}\"> </div>\n"
|
246
|
+
end
|
247
|
+
end
|
248
|
+
if field
|
249
|
+
write = false
|
250
|
+
#rdfa_string<<get_rdfa_by_id("","")
|
251
|
+
end
|
252
|
+
end
|
253
|
+
rdfa_string<<"<div property= \"#{name}\" content=\"#{eval("item.#{link_field}")}\"></div>\n" if write
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
258
|
+
rdfa_string << "</div>\n"
|
51
259
|
end
|
52
260
|
|
261
|
+
#not used
|
262
|
+
def tripleize (tr_self,c =nil,id=nil)
|
263
|
+
|
264
|
+
end
|
265
|
+
|
266
|
+
# Find all the models to the given key ( the RDF-Class name)
|
267
|
+
# returns a hash with the RDF-Class name as key and the models as value
|
53
268
|
def search_models key
|
54
269
|
model_groups = eval("configatron.query").to_hash
|
55
270
|
model_groups.each do |model_group_name,model_group|
|
56
271
|
if model_group_name.to_s.downcase == key.downcase
|
57
|
-
return model_group
|
272
|
+
return {model_group_name=>model_group}
|
58
273
|
end
|
59
274
|
end
|
275
|
+
nil
|
60
276
|
end
|
61
|
-
|
62
|
-
#
|
63
|
-
def write_model model_name,model_attributes, output
|
64
|
-
puts model_name
|
65
277
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
278
|
+
# write the model(s) depending on its RDF-Class name.
|
279
|
+
# This is one of the core funktions of rtriplify
|
280
|
+
def write_model model_name, class_name
|
281
|
+
puts model_name
|
282
|
+
ret=""
|
283
|
+
model = Model.new(model_name,class_name)
|
73
284
|
data_types= model.get_datatypes
|
74
285
|
#build hash
|
75
286
|
model.get_rows.each do |item|
|
76
287
|
line = Hash.new
|
77
288
|
subline = Hash.new
|
78
289
|
#and now add all mapping-attributes
|
79
|
-
|
290
|
+
remove =Array.new
|
80
291
|
model.model_attributes.each do |k,v|
|
81
|
-
|
82
|
-
if
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
if
|
88
|
-
|
89
|
-
|
90
|
-
subline[:id] = item.id
|
91
|
-
subline[k] = eval("submodel."+sub_m.get_key.to_s)
|
92
|
-
#subline[k.split"->"[0]] = eval("item."+k.split"->"[1]+".id")
|
93
|
-
sub_data_types = model.get_datatypes
|
94
|
-
extract_id_line(model.model_attributes, subline, item, sub_data_types)
|
95
|
-
output.write make_triples(subline, model.model_name , "", sub_data_types,false)
|
96
|
-
end
|
292
|
+
# if k.to_s.include?("->")
|
293
|
+
if v.to_s.include?("*") || v.to_s[0..9]=="new_model("
|
294
|
+
|
295
|
+
remove.push(k.to_s) unless remove.index(k.to_s)
|
296
|
+
m_class,field=v.to_s.split("*")
|
297
|
+
ref_pred,ref_model=k.to_s.split"->"
|
298
|
+
if v.to_s[0..5]=="MODEL("
|
299
|
+
m_class.gsub!("MODEL(","Model.new(")
|
300
|
+
submodel= eval(m_class.to_s).get_rows
|
97
301
|
else
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
output.write make_triples(subline, model.model_name , "", sub_data_types,false)
|
107
|
-
end
|
108
|
-
end
|
302
|
+
submodel= eval("item.#{m_class.to_s.downcase}")
|
303
|
+
end
|
304
|
+
submodel.each do |subitem|
|
305
|
+
subline[:id] = eval("item.#{model.get_key}")
|
306
|
+
subline[k] = eval("subitem.#{field}")
|
307
|
+
#extract_id_line(m.model_attributes, subline, subitem, Array.new)
|
308
|
+
ret<<make_triples(subline, class_name, false,Array.new,false )
|
309
|
+
subline.clear
|
109
310
|
end
|
110
311
|
else
|
111
312
|
write_line = true;
|
112
313
|
if v.to_s.include? "."
|
113
|
-
write_line = nil unless eval("item."+v.to_s.split(".")[0])
|
314
|
+
write_line = nil unless eval("item."+v.to_s.downcase.split(".")[0])
|
315
|
+
end
|
316
|
+
begin
|
317
|
+
if v.to_s[0..5]=="CONST("
|
318
|
+
line[k.to_s],data_types[k.to_s]= model.get_const(v)
|
319
|
+
#datatype to uri format
|
320
|
+
if data_types[k.to_s]=="LINK"
|
321
|
+
line[k.to_s] =uri line[k.to_s]
|
322
|
+
data_types.delete k.to_s
|
323
|
+
@object_properties[k.to_s]="t"
|
324
|
+
else
|
325
|
+
data_types[k.to_s] = uri(data_types[k.to_s])
|
326
|
+
end
|
327
|
+
else
|
328
|
+
line[k.to_s]=eval("item."+v.to_s) if write_line
|
329
|
+
end
|
330
|
+
rescue Exception => ex
|
331
|
+
line[k.to_s]=v.to_s if write_line
|
114
332
|
end
|
115
|
-
line[k.to_s]=eval("item."+v.to_s) if write_line
|
116
333
|
end
|
334
|
+
# end
|
117
335
|
end
|
118
336
|
extract_id_line(model.model_attributes, line, item,data_types)
|
119
|
-
|
120
|
-
#watch if there is a mapping to another object with "->"
|
337
|
+
remove.each { |rem_attrib| line.delete(rem_attrib) }
|
121
338
|
#get triples of row
|
122
|
-
|
339
|
+
ret<<make_triples(line, class_name , "", data_types)
|
123
340
|
#render :text => t.make_triples(c1, controller , "", t.dbd_types)
|
124
341
|
end
|
342
|
+
ret
|
125
343
|
end
|
126
344
|
|
345
|
+
# search for the ID field and set it in line var- to the "id"-key
|
127
346
|
def extract_id_line model_attributes, line,item,dtypes
|
128
347
|
#look if id is mapped to another field
|
129
348
|
id_keys = model_attributes.to_hash.keys
|
@@ -141,35 +360,37 @@ class Tripleizer
|
|
141
360
|
end
|
142
361
|
end
|
143
362
|
|
363
|
+
# Executes a sql command. Better to not use this function
|
144
364
|
def write_sql model_name, model_attributes,output
|
145
365
|
model_attributes.each do|key,query|
|
146
366
|
sql= ActiveRecord::Base.connection();
|
147
367
|
(sql.select_all query).each do |row|
|
148
|
-
|
368
|
+
make_triples(row,model_name,"")
|
149
369
|
end
|
150
370
|
end
|
151
371
|
end
|
152
372
|
|
153
|
-
|
373
|
+
# the standard triples at the beginning of your rdf output ( version and licence)
|
374
|
+
def write_rdf_head
|
154
375
|
# $this->writeTriple($self,$this->uri('rdfs:comment'),'Generated by Triplify '.$this->version.' (http://Triplify.org)',true);
|
155
|
-
|
376
|
+
write_triple(@base_uri, uri("rdfs:comment"), 'Generated by Triplify '+'version'+ " (http://Triplify.org) ", "literal" )
|
156
377
|
unless configatron.license.blank?
|
157
378
|
#$this->writeTriple($self,'http://creativecommons.org/ns#license',$this->config['license']);
|
158
|
-
|
379
|
+
write_triple(@base_uri,'http://creativecommons.org/ns#license',configatron.license, "literal" )
|
159
380
|
end
|
160
381
|
end
|
161
382
|
|
162
|
-
|
163
|
-
|
383
|
+
# generate the triples from a given hash
|
164
384
|
def make_triples (c1,rdf_class,maketype,dtypes=Array.new,rdf_type=true)
|
165
385
|
rdf_ns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
166
386
|
ipref= uri rdf_class.to_s+'/'
|
167
387
|
is_literal=false
|
168
388
|
dtype,lang,ret="","",""
|
169
389
|
object_property = nil
|
390
|
+
triples =""
|
170
391
|
|
171
392
|
unless c1[:id]
|
172
|
-
id_row = c1.select {|k,v| k =~ /^(id|ID|iD|Id)$/}
|
393
|
+
id_row = c1.select {|k,v| k =~ /^(id|ID|iD|Id)$/}
|
173
394
|
c1[:id] = id_row[0][1]
|
174
395
|
c1.delete id_row[0][0]
|
175
396
|
|
@@ -181,11 +402,12 @@ class Tripleizer
|
|
181
402
|
#write model :-)
|
182
403
|
|
183
404
|
c= @class_map[rdf_class.to_sym] ?@class_map[rdf_class.to_sym]:rdf_class
|
184
|
-
|
185
|
-
|
405
|
+
triples << write_triple(subject, rdf_ns+"type", uri(c, @object_namespaces[:vocabulary])) if rdf_type
|
406
|
+
# write_triple(subject,predi cate,object ,is_literal=false,dtype="",lang="",json=nil)
|
186
407
|
c1.delete :id unless rdf_type
|
187
408
|
|
188
409
|
c1.each do |k,v|
|
410
|
+
dtype=""
|
189
411
|
k=k.to_s
|
190
412
|
if v.to_s.empty?
|
191
413
|
next
|
@@ -214,10 +436,10 @@ class Tripleizer
|
|
214
436
|
#callbackfunktion
|
215
437
|
#
|
216
438
|
|
217
|
-
prop= self.uri(k,@
|
439
|
+
prop= self.uri(k,@object_namespaces[:vocabulary])
|
218
440
|
|
219
441
|
unless object_property
|
220
|
-
is_literal= true
|
442
|
+
is_literal= true
|
221
443
|
object= v.to_s
|
222
444
|
else
|
223
445
|
is_literal= false
|
@@ -225,37 +447,46 @@ class Tripleizer
|
|
225
447
|
#TODO: fixme "/" in the middle
|
226
448
|
#object= uri "#{object_property}/#{object_property && object_property[-1,1].to_s !="/" ?"/":":"}#{v}"
|
227
449
|
object= uri "#{object_property}#{object_property[-1,1].to_s !="/" ? "/":":"}#{v}"
|
450
|
+
if object[0..1] == "t/"
|
451
|
+
object = object.to_s[2..-1]
|
452
|
+
end
|
228
453
|
end
|
229
|
-
|
230
|
-
end
|
231
|
-
|
454
|
+
triples<<write_triple(subject,prop,object,is_literal,dtype,lang).to_s
|
455
|
+
end
|
456
|
+
triples
|
232
457
|
end
|
233
458
|
|
459
|
+
# triple will be given to its defined output (json||inner_variable||return value
|
234
460
|
def write_triple(subject,predicate,object,is_literal=false,dtype="",lang="")
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
if(is_literal)
|
242
|
-
object = "\"#{object.to_s.gsub('"','%22')}\""+ (dtype.empty? ? (lang.empty? ? "": "@#{lang}" ):"^^<#{dtype}>" )
|
461
|
+
if @output_json
|
462
|
+
oa = {:value=> object,:type=> is_literal ? 'literal' : 'uri'}
|
463
|
+
oa['datatype']=dtype if is_literal && dtype
|
464
|
+
oa['language']=lang if is_literal && lang
|
465
|
+
add_json_pair subject, predicate,oa
|
466
|
+
|
243
467
|
else
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
468
|
+
#(lang?"@#{lang}":'')
|
469
|
+
|
470
|
+
#define the object
|
471
|
+
if(is_literal)
|
472
|
+
object = "\"#{object.to_s.gsub('"','%22')}\""+ (dtype.empty? ? (lang.empty? ? "": "@#{lang}" ):"^^<#{dtype}>" )
|
473
|
+
else
|
474
|
+
object = ( object[0..1] == "_:" ) ? object : "<#{object}>"
|
475
|
+
end
|
476
|
+
#object="\"#{object[1..-2].gsub('"','\"')}\""
|
477
|
+
#define the subject
|
478
|
+
subject = ( subject[0..1] == "_:" ) ? subject : "<#{subject}>"
|
479
|
+
if @output
|
480
|
+
@output.write "#{subject} <#{predicate}> #{object} .\n"
|
481
|
+
end
|
482
|
+
return "#{subject} <#{predicate}> #{object} .\n"
|
251
483
|
end
|
252
|
-
"#{subject} <#{predicate}> #{object} .\n"
|
253
484
|
end
|
254
485
|
|
255
486
|
#generates an uri with the given name
|
256
487
|
def uri (name,default="")
|
257
488
|
name=name.to_s
|
258
|
-
|
489
|
+
|
259
490
|
if name.try(:include?, "://")
|
260
491
|
return name[0..name.length-2] if name[-1,1]=="/"
|
261
492
|
return name[0..name.length]
|
@@ -264,7 +495,7 @@ class Tripleizer
|
|
264
495
|
|
265
496
|
if name.index(":")
|
266
497
|
#$this->ns[substr($name,0,strpos($name,':'))].$this->normalizeLocalName(substr($name,strpos($name,':')+1))
|
267
|
-
t= @
|
498
|
+
t= @object_namespaces[name.split(":")[0].to_sym]
|
268
499
|
t ||=""
|
269
500
|
t += "/" unless (t[t.length-1..t.length-1] == ("/" || "#") || t.blank?) || name.try(:include?, ":")
|
270
501
|
return uri( t+ normalize_local_name(name.split(":")[1])+"/")
|
@@ -272,14 +503,22 @@ class Tripleizer
|
|
272
503
|
##($default?$default:$GLOBALS['baseURI']).$this->normalizeLocalName($name));
|
273
504
|
#falls bei default hinten ein "/" ist abschneiden
|
274
505
|
#default= default[0.. default.length-2] unless default[default.length-1..default.length-1] == "/"
|
275
|
-
t= default.blank? ?
|
506
|
+
t= default.blank? ? @base_uri : default
|
276
507
|
t += "/" unless t[t.length-1..t.length-1]=="/"
|
277
508
|
return uri( t + normalize_local_name(name))
|
278
509
|
end
|
279
510
|
end
|
280
511
|
end
|
281
512
|
|
282
|
-
|
513
|
+
# extract the base uri for triple generation from given request
|
514
|
+
# if param "set" is true, the inner base_uri variable off class will be set too
|
515
|
+
def generate_base_uri request, set=nil
|
516
|
+
b_uri= uri request.env['REQUEST_URI'].to_s[0..-request.env['PATH_INFO'].length]
|
517
|
+
@base_uri = b_uri if set
|
518
|
+
b_uri
|
519
|
+
end
|
520
|
+
|
521
|
+
# returns an hash with columnname as key and datatype as value
|
283
522
|
def dbd_types (model,model_attributes)
|
284
523
|
#hard coded mapping look mapping table
|
285
524
|
mapping = Hash[ "binary"=>"base64Binary","boolean"=>"boolean","date"=>"date","datetime"=>"dateTime","decimal"=>"decimal","float"=>"float","integer"=>"integer","string"=>"string","text"=>"string","time"=>"time","timestamp"=>"dateTime",]
|
@@ -296,7 +535,23 @@ class Tripleizer
|
|
296
535
|
end
|
297
536
|
#some encoding stuff
|
298
537
|
def normalize_local_name name
|
299
|
-
CGI::escape(name).gsub(/%2F/,'/').gsub(/%23/,'#')
|
538
|
+
CGI::escape(name).gsub(/%2F/,'/').gsub(/%23/,'#')
|
539
|
+
end
|
540
|
+
|
541
|
+
def json
|
542
|
+
@json_hash.to_json
|
543
|
+
end
|
544
|
+
|
545
|
+
def add_json_pair subject, predicate,oa
|
546
|
+
if @json_hash.key? subject
|
547
|
+
if @json_hash[subject].key? predicate
|
548
|
+
@json_hash[subject][predicate].merge!(oa)
|
549
|
+
else
|
550
|
+
@json_hash[subject][predicate]=oa
|
551
|
+
end
|
552
|
+
else
|
553
|
+
@json_hash[subject]=Hash.new
|
554
|
+
@json_hash[subject][predicate]=oa
|
555
|
+
end
|
300
556
|
end
|
301
|
-
|
302
557
|
end
|
data/lib/triplify_metadata.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'configatron'
|
2
2
|
|
3
3
|
class TriplifyMetadata
|
4
|
-
def write_metadata tripleizer
|
4
|
+
def write_metadata tripleizer
|
5
5
|
p = ProvenanceWriter.new
|
6
|
-
p.describe_provenance "http://triplify.org",tripleizer
|
6
|
+
p.describe_provenance "http://triplify.org",tripleizer
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
@@ -12,7 +12,7 @@ class ProvenanceWriter
|
|
12
12
|
|
13
13
|
end
|
14
14
|
|
15
|
-
def describe_provenance( subject, tripleizer
|
15
|
+
def describe_provenance( subject, tripleizer)
|
16
16
|
@now = Time.new
|
17
17
|
@triplify_instance = get_new_bnode_id
|
18
18
|
tripleizer.write_triple(subject, tripleizer.uri("rdf:type" ), tripleizer.uri("prv:DataItem" ))
|