rtriplify 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -2,18 +2,17 @@ rTriplify
2
2
  ========
3
3
 
4
4
  rTriplify is a ruby clone of the triplify-php version. It is used to create
5
- a rdf-mapping of your existing database and serve it out to the (semantic)-web.
5
+ a rdf-mapping of your existing database and serves it out to the (semantic)-web.
6
6
 
7
7
  rTriplify uses the rails database models to generate your rdf-data.
8
-
9
8
  It comes with most of the origin features of triplify.
10
- Please have a look at ..... to see the full features list.
9
+ I will go on detail on this later.
11
10
 
12
11
  In addition you have the possibility to generate RDFa -Data and place it inside of
13
12
  your webpage as a hidden div. Please be aware that this is not the clean way to
14
13
  serve your content as RDFa. But I think, if you have generated the mapping file
15
14
  for your database it's just the consequence to place RDFa on your page instead.
16
- rTriplify gives you the right tools to place RDFa tags on your Webpage without having
15
+ RTriplify gives you the right tools to place RDFa tags on your Webpage without having
17
16
  to do a full code review of your templates. And of course, search engines like google
18
17
  and yahoo already watch for these tags. Google already rewards RDFa tags with some specials.
19
18
  For further informations please see here [1] or [2] here
@@ -30,7 +29,7 @@ gem install rtriplify
30
29
 
31
30
  then place a triplify.yml file in the config folder of your RoR-application.
32
31
  Probably it's the best idea to use the sample config file included in the gem or
33
- you can download the sample file here [3] too.
32
+ you can download a clean sample file here [3] too.
34
33
 
35
34
  Usaly the sample config has all configuration possibilitys inside of it and
36
35
  it's well documented. I think you can start now and change the config so that it
@@ -5,6 +5,7 @@ class TriplifyController < ActionController::Base
5
5
  def tripleize
6
6
  t = Tripleizer.new
7
7
  t.base_uri = t.uri request.env['REQUEST_URI'].to_s
8
+ depth = configatron.linked_data_depth.to_i
8
9
 
9
10
  filename = 'data.n3'
10
11
  headers.merge!(
@@ -15,20 +16,21 @@ class TriplifyController < ActionController::Base
15
16
 
16
17
  t.output_json = request.content_type.try(:to_sym)==:json
17
18
  content_type = t.output_json ? 'application/json' : 'text/plain'
19
+
18
20
  render :content_type => content_type , :text => proc { |response, output|
19
21
  t.output = output
20
22
  case params[:specs].length
21
23
  when 0
22
24
  t.write_rdf_head
23
- all t
25
+ all t if depth > -1
24
26
  when 1
25
27
  t.base_uri = t.base_uri.to_s[0..t.base_uri.to_s.index(params[:specs][0].to_s)-1]
26
28
  t.write_rdf_head
27
- model t, params[:specs][0]
29
+ model t, params[:specs][0] if depth >0
28
30
  when 2
29
31
  t.base_uri = t.base_uri.to_s[0..t.base_uri.to_s.index(params[:specs][0].to_s)-1]
30
32
  t.write_rdf_head
31
- index t, params[:specs]
33
+ index t, params[:specs] if depth > 1
32
34
  end
33
35
 
34
36
  t_metadata = TriplifyMetadata.new
@@ -58,7 +60,7 @@ class TriplifyController < ActionController::Base
58
60
 
59
61
  #get all models
60
62
  def model t, model_group
61
- models = t.search_models model_group
63
+ models = t.find_models model_group
62
64
  models.values[0].each do |model_name, model_attributes|
63
65
  if model_name.to_s =="sql_query"
64
66
  t.write_sql(model_group_name,model_attributes,output)
@@ -71,7 +73,7 @@ class TriplifyController < ActionController::Base
71
73
  # get a defined model with given id
72
74
  def index t,param
73
75
  subclass,id = param
74
- models = t.search_models subclass
76
+ models = t.find_models subclass
75
77
  models.values[0].each do |model_name, model_attributes|
76
78
  if model_name.to_s =="sql_query"
77
79
  #some magic is needed here ..parse the sql query?
@@ -5,15 +5,16 @@
5
5
  # an editor for it. For example Netbeans already have a build in one.
6
6
 
7
7
  # Please be sure having configured your database configuration properly
8
+ # Now let's start with the Configuration
8
9
 
9
10
 
10
11
  # all namespaces for your application. Please use them in your application to
11
12
  # get the data better linked
12
13
  namespaces:
13
- vocabulary: http://your-webapp.com/vocabulary/
14
+ xmlns: http://www.w3.org/1999/xhtml/
14
15
  rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
15
16
  rdfs: http://www.w3.org/2000/01/rdf-schema#
16
- owl: http://www.w3.org/2002/07/owl#
17
+ xsd: http://www.w3.org/2001/XMLSchema#
17
18
  foaf: http://xmlns.com/foaf/0.1/
18
19
  sioc: http://rdfs.org/sioc/ns#
19
20
  sioctypes: http://rdfs.org/sioc/types#
@@ -21,21 +22,22 @@ namespaces:
21
22
  dcterms: http://purl.org/dc/terms/
22
23
  skos: http://www.w3.org/2004/02/skos/core#
23
24
  tag: http://www.holygoat.co.uk/owl/redwood/0.1/tags/
24
- xsd: http://www.w3.org/2001/XMLSchema#
25
+
25
26
  update: http://triplify.org/vocabulary/update#
26
27
  gr: http://purl.org/goodrelations/v1#
27
- v: http://www.w3.org/2006/vcard/ns#
28
+ vc: http://www.w3.org/2006/vcard/ns#
28
29
  daml: http://www.daml.org/2001/09/countries/iso-3166-ont#
29
30
 
30
- #queries:
31
+ #query:
31
32
  # In general there are two possibilites to configure your rdf Data. First is by
32
33
  # using sql queries like in the php version of triplify. Please have a look at
33
34
  # http://triplify.svn.sourceforge.net/viewvc/triplify/triplify-php/config.dist.php?view=markup
34
- # to find out how to configure.
35
+ # to find out how model your querys
35
36
  #
36
37
  # Secound possibility and may be the more "rails-way" is to use active record.
37
- # you have two hierarchy levels for configuration. First, the group and secound,
38
+ # you have two hierarchy levels for configuration. First-level, the RDF-Resource-class and in secound-level,
38
39
  # the Active record model.
40
+ #
39
41
  # A configuration line in the model has always the Schema
40
42
  # nameOfField: ar_field
41
43
  # ID field has a special meaning. The ID field is always the Subject of the RDF
@@ -48,143 +50,95 @@ namespaces:
48
50
  # filter:
49
51
  # ID: ">213 and id <224"
50
52
  # Note: in some case lower and Uppercase Notation is Important.
51
- # the "id" field is alway written uppercase.
52
- # group is written lowercase
53
- # Model are written Capitalized like using it in ruby.
54
- # first time you may be a little bit irritated, but up to now there is
55
- # no better solution for this issue.
56
-
53
+ # the "id" field is alway written uppercase.#
54
+ # Models are written Capitalized like using it in ruby.
57
55
 
58
- query:
59
- shipping: #the group write it lowercase
60
56
 
61
- ShippingMethod:
62
- gr:DeliveryModeParcelService: name
63
- zone->zone: zone
64
57
 
65
- Zone:
66
- rdfs:label: name
67
- rdfs:comment: description
68
58
 
69
- ZoneMember:
70
- zone->zone: zone
71
- Country->Country: zoneable
72
-
73
- Country: #the model name...write it capitalized
74
- ID: iso
75
- daml:name: iso_name
76
- iso: iso
77
- v:name: name
78
- daml:code: iso3
79
- numcode: numcode
80
- state->State: states
81
- # filter:
82
- # ID: ">213 and id <224"
83
- #iso_name: ='VENEZUELA'
84
- #id must be written upcase, otherwis some trouble with standard yaml language
85
- #["created_at > ? AND updated_at > ?"]: ["hello","hello]
86
- #TODO: do it more the ror way
87
-
88
- State:
89
- ID: abbr
59
+ query: #starting the query section
60
+ # The best way always is
61
+ Offer: #the RDF-resource-class
62
+ Variant: # the model
63
+ # the simple predicate: field_name config
64
+ hasStockKeepingUnit: sku
65
+ # use
66
+ # gr:hasStockKeepingUnit: sku to set the rdf-schema class
67
+
68
+ #predicate "gr:name" has the value field product.name
69
+ gr:name: product.name
70
+ gr:description: product.description
71
+ # if you have some constant strings use this function
72
+ # CONST( predicate, LINK) or
73
+ # CONST( predicate, datatype) datatype is e.g. xsd:string
74
+ # please refer to UnitPriceSpecification for an example
75
+ gr:hasBusinessFunction: CONST(gr:Sell,LINK)
76
+ # you have a reference to another object the config qoes like:
77
+ # predicate->RDF-Resource-class: id of the referenced RDF-Resource-class
78
+ # please see UnitPriceSpecification
79
+ gr:hasPriceSpecification->UnitPriceSpecification: id
80
+ # Sometime it can happen thate you have a static ref to some Values
81
+ # MODEL( 'model-class','rdf-resource class').field_name or, if multiple values
82
+ # MODEL( 'model-class','rdf-resource class')*field_name or, if multiple values
83
+ gr:acceptedPaymentMethods->Payment: MODEL('PaymentMethod','Payment')*id
84
+
85
+ # A Variant of a Product
86
+ Variant: #the RDF-resource-class
87
+ Variant: # the Model
88
+ gr:name: product.name
89
+ gr:description: product.description
90
+ gr:hasStockKeepingUnit: sku
91
+ gr:isVariantOf->Product: product.permalink
92
+ # predicate->RDF-ressource-class and a link on multiple id values
93
+ gr:qualitativeProductOrServiceProperty->VariantProp: option_values*id
94
+ # add one or multiple fields by direct sql command
95
+ # better not to use this feature! Please proof if there is not another configuration possibility
96
+ sql_query:
97
+ query1: Select v.id, ov.name as 'gr:Color' from Variants v, option_values_variants ovv,option_values ov,option_types ot where ovv.variant_id=v.id and ov.id = ovv.option_value_id and ov.option_type_id=ot.id and ot.id =643188970
98
+ # some properties of the Variant
99
+ VariantProp:
100
+ OptionValue:
101
+ rdfs:subClassOf: CONST(gr:QualitativeValue,LINK)
90
102
  name: name
91
- abrr: abbr
92
- Country->Country: country
93
-
94
- product: #the group write it lowercase
95
- Product: #the model name...write it capitalized
96
- rdfs:label: name
97
- rdfs:comment: description
98
- ID: permalink
99
- Property->Property: properties
100
- PropertyValue->ProductProperty: product_properties
101
- OptionType->OptionType: option_types
102
- CategoryName: tax_category.name
103
- CategoryDescription: tax_category.description
104
-
105
- Property: #the model name...write it capitalized
106
- ID: name
107
103
  presentation: presentation
108
- Prototype->Prototpye: prototypes
109
- Product->Product: products
104
+ # a prodct e.g. a T-shirt or a bag...
105
+ Product:
106
+ Product:
107
+ ID: permalink
108
+ gr:name: name
109
+ gr:description: description
110
+ # again some multiple sub-properties
111
+ gr:qualitativeProductOrServiceProperty->ProductProp: product_properties*id
112
+ #gr:category
113
+ # some subproperties of the product..e.g. the color or size
114
+ ProductProp:
110
115
  ProductProperty:
116
+ rdfs:subClassOf: CONST(gr:QualitativeValue,LINK)
111
117
  value: value
112
-
113
-
114
- # TaxCategory:
115
- # ID: name
116
- # description: description
117
-
118
- ProductGroup:
119
- name: name
120
- permalink: permalink
121
- Product->Product: cached_products
122
-
123
- Prototype:
124
- name: name
125
- Property->Property: properties
126
- OptionType->OptionType: option_types
127
-
128
- OptionType:
129
- ID: name
130
- presentation: presentation
131
- Prototype->Prototype: prototypes
132
-
133
-
134
- Variant:
135
- gr:hasBusinessFunction: "gr:Sell"
136
- Product->Product: product
137
- ID: sku
138
- #gr:hasCurrency
139
- gr:hasCurrencyValue: price
140
- gr:weight: weight
141
- gr:height: height
142
- gr:width: width
143
- gr:depth: depth
144
- #count_on_hand: count_on_hand
145
- OptionValue->OptionValue: option_values
146
-
147
- Taxon:
148
- ID: name
149
- name: taxonomy.name
150
- permalink: permalink
151
- Parent->Taxon: parent
152
-
153
-
154
-
155
- OptionValue:
156
- ID: name
157
- position: position
158
- presentation: presentation
159
- Variant->Variant: variants
160
- OptionType->OptionType: option_type
161
-
162
- user:
163
- User:
164
- firstname: ship_address.firstname
165
- lastname: ship_address.lastname
166
- role->Role: roles
167
-
168
- Role:
169
- name: name
170
- ID: name
171
-
172
- paymentmethod: #the group write it lowercase
173
- PaymentMethod: #the model name...write it capitalized
174
- gr:PaymentMethod: name
175
- description: description
118
+ propertyName: property.name
119
+ rdfs:label: property.presentation
120
+ # accepted payment methods
121
+ Payment:
122
+ PaymentMethod:
123
+ #rdfs:type: type
124
+ rdf:label: name
125
+ rdf:description: description
126
+ # a filter description
127
+ # up to now there are only static filters possible
176
128
  filter:
129
+ # field_to_filter: filter value.... in sql its the " where active = 't' "
177
130
  active: = 't'
178
- #["created_at > ? AND updated_at > ?"]: ["hello","hello]
179
- #TODO: do it more the ror way
180
- # orders:
181
- # sql_query:
182
- # query1: select * from products where id > 706676762
183
-
131
+ environment: = 'development'
132
+ # the price specification for the offer
133
+ UnitPriceSpecification:
134
+ Variant:
135
+ ID: id
136
+ gr:hasCurrencyValue: price
137
+ gr:hasCurrency: CONST(EUR,xsd:string) # adds the [ subject has_curency "EUR" ] triple
184
138
 
185
139
  # Some of the columns of the Triplify queries will contain references to other
186
140
  # objects rather than literal values. The following configuration array
187
- # specifies, which columns are references to objects of which type.
141
+ # specifies, which columns are references to objects of which type. (same like in origin triplify)
188
142
 
189
143
  objectProperties:
190
144
  has_creator: person
@@ -192,13 +146,17 @@ objectProperties:
192
146
  # Objects are classified according to their type. However, you can specify
193
147
  # a mapping here, if objects of a certain type should be associated with a
194
148
  # different class (e.g. classify all users as 'foaf:person'). If you are
195
- # unsure it is safe to leave this configuration array empty.
149
+ # unsure it is safe to leave this configuration array empty. (same like in origin triplify)
196
150
  #
197
151
  classMap:
198
- Movie: foaf:person
199
- Product: gr:ProductOrServiceModel
200
- ShippingMethod: gr:DeliveryMethod
201
- Variant:
152
+ Offer: gr:Offering #the offer
153
+ Product: gr:ProductOrServiceModel # the product, for Example the ruby_on_rails t-shirt
154
+ Variant: gr:ProductOrServiceModel # for example the blue / XL variant of the ruy_on_rails t-shirt
155
+ ProductProp: gr:ProductOrServiceProperty
156
+ UnitPriceSpecification: gr:UnitPriceSpecification
157
+ Payment: gr:PaymentMethod
158
+
159
+
202
160
 
203
161
  #the licence under which you publish your data
204
162
  license: http://creativecommons.org/licenses/by/3.0/us/
@@ -208,8 +166,8 @@ license: http://creativecommons.org/licenses/by/3.0/us/
208
166
  # properties, the values will be represented as respective property values.
209
167
 
210
168
  metadata:
211
- dc:title: test
212
- dc:publisher: test
169
+ dc:title: spree-demo Shop
170
+ dc:publisher: Nico Patitz
213
171
 
214
172
  # not yet
215
173
  # Set this to true in order to register your linked data endpoint with the
@@ -236,7 +194,8 @@ register: true
236
194
  # content will be exposed on the instance level, e.g. when /triplify/user/1/
237
195
  # is accessed.
238
196
  #
239
- # LinkedDataDepth: 2
197
+
198
+ linked_data_depth: 2
240
199
 
241
200
  # Callback Functions
242
201
  #
@@ -245,9 +204,9 @@ register: true
245
204
  # column names to respective functions, which have to take the data value as a
246
205
  # parameter and return it processed.
247
206
 
207
+ #not yet implemented
248
208
  CallbackFunctions:
249
209
 
250
-
251
210
  # Semantic Pingback
252
211
  #
253
212
  # This section contains the Semantic Pingback configuration.
@@ -256,9 +215,9 @@ pingback:
256
215
  # Whether X-Pingback header should be exposed and XML-RPC is active.
257
216
  enabled: true
258
217
  #Whether to write Pingbacks with the instance data.
259
- write: true
218
+ write: true
260
219
 
261
- # metadata
220
+ # metadata #most of this is the same like you know from the php- triplify
262
221
 
263
222
  ##
264
223
  ## BEGIN OF CONFIGURATION
data/lib/tripleizer.rb CHANGED
@@ -2,6 +2,7 @@ require 'configatron'
2
2
  require 'json'
3
3
 
4
4
  class Tripleizer
5
+ # constructor
5
6
  def initialize output=nil
6
7
  @object_properties = configatron.objectProperties.to_hash
7
8
  @object_namespaces = configatron.namespaces.to_hash
@@ -10,39 +11,19 @@ class Tripleizer
10
11
  @version="0.0.1"
11
12
  @json_hash = Hash.new
12
13
  @output_json = nil;
13
- @base_uri = "www.base_uri"
14
+ @base_uri = "http://example.com/"
14
15
  end
15
-
16
+
17
+ # stores RDF output as string
16
18
  attr_accessor :output
19
+ # rtriplify version in RDF
17
20
  attr_reader :version
21
+ # get a json object of the RDF
18
22
  attr_accessor :output_json
23
+ # base uri..if not set, std. from config is used
19
24
  attr_accessor :base_uri
20
25
 
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)
38
- # end
39
- # end
40
- # end
41
- # t_metadata = TriplifyMetadata.new
42
- # ret<<t_metadata.write_metadata(t).to_s
43
- # ret
44
- # end
45
-
26
+ #Generation of N3 RDF with iterative depth
46
27
  def rdf rdf_start_class , var=[]
47
28
  class_map = Hash.new
48
29
  var.each do |c|
@@ -50,7 +31,7 @@ class Tripleizer
50
31
  end
51
32
  rdf_string =""
52
33
  #get configuration start ->classes
53
- m = search_models(rdf_start_class)
34
+ m = find_models(rdf_start_class)
54
35
 
55
36
  m.values[0].each do |mod,attributes|
56
37
  unless mod.eql?("sql_query")
@@ -65,7 +46,8 @@ class Tripleizer
65
46
  rdf_string
66
47
  end
67
48
 
68
- #
49
+ # get a RDFa note by its ID and resource-class.
50
+ # Iterative Function, so be carefull with your config not to produce endless loops
69
51
  def rdf_by_id model_name, class_name, id
70
52
  puts model_name
71
53
  ret=""
@@ -106,7 +88,7 @@ class Tripleizer
106
88
  ref_pred,ref_model=k.to_s.split"->"
107
89
  #write referenced model
108
90
  #ret<< make_triples({:id=>id,k=>sub_id },class_name,"",Array.new,false)
109
- m= search_models(ref_model)
91
+ m= find_models(ref_model)
110
92
  m.values[0].each do |mod,val|
111
93
  ret<<(rdf_by_id mod, ref_model, eval("item."+v.to_s)).to_s
112
94
  end
@@ -139,19 +121,19 @@ class Tripleizer
139
121
  extract_id_line(model.model_attributes, line, item,data_types)
140
122
  remove.each { |rem_attrib| line.delete(rem_attrib) }
141
123
  #get triples of row
142
- ret<<make_triples(line, class_name , "", data_types)
143
- #render :text => t.make_triples(c1, controller , "", t.dbd_types)
124
+ ret<<make_triples(line, class_name , "", data_types)
144
125
  ret
145
126
  end
146
127
 
147
- # rdfa generation starts here
148
- def get_rdfa rdf_start_class , var=[]
128
+ # rdfa generation
129
+ # iterative and returns "hidden" rdfa-div-tags
130
+ def rdfa rdf_start_class , var=[]
149
131
  #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>"
132
+ "<div #{@object_namespaces.collect {|pre,ns| "xmlns:"<<pre.to_s<<"=\""<<ns.to_s<<"\" " }}>\n #{rdfa_root(rdf_start_class,var)} </div>"
151
133
  end
152
134
 
153
135
  # the root rdf node
154
- def get_rdfa_root rdf_start_class , var=[]
136
+ def rdfa_root rdf_start_class , var=[]
155
137
  #map each var on its classname
156
138
  rdfa_string = ""
157
139
  class_map = Hash.new
@@ -160,7 +142,7 @@ class Tripleizer
160
142
  end
161
143
 
162
144
  #get configuration start ->classes
163
- m = search_models(rdf_start_class)
145
+ m = find_models(rdf_start_class)
164
146
 
165
147
  m.values[0].each do |mod,attributes|
166
148
  unless mod.eql?("sql_query")
@@ -168,7 +150,7 @@ class Tripleizer
168
150
  #if sql...
169
151
  key = t_mod.get_key
170
152
  t_mod.get_rows.each do |item|
171
- rdfa_string<<get_rdfa_by_id(rdf_start_class,eval("item.#{key}"))
153
+ rdfa_string<<find_rdfa_by_id(rdf_start_class,eval("item.#{key}"))
172
154
  end
173
155
  end
174
156
  end
@@ -176,12 +158,12 @@ class Tripleizer
176
158
  end
177
159
 
178
160
  # generate RDFa tags by a specified ID
179
- def get_rdfa_by_id rdf_start_class , id
161
+ def find_rdfa_by_id rdf_start_class , id
180
162
  #map each var on its classname
181
163
  id = id.to_s
182
164
  rdfa_string = "<div about=\"#{rdf_start_class+"/"<<id}\" typeof=\"#{@class_map[rdf_start_class.to_sym]}\">\n"
183
165
  #get configuration start ->classes
184
- m = search_models(rdf_start_class)
166
+ m = find_models(rdf_start_class)
185
167
  m.values[0].each do |mod,attributes|
186
168
  unless mod.to_s.eql?("sql_query")
187
169
  t_mod = Model.new(mod, rdf_start_class)
@@ -203,20 +185,20 @@ class Tripleizer
203
185
  submodel= eval(field_class.to_s).get_rows
204
186
  rdfa_string<<"<div rel=\"#{m_class}\">\n"
205
187
  submodel.each do |line|
206
- rdfa_string<<get_rdfa_by_id(role_mod , eval("line.#{field.to_s}"))
188
+ rdfa_string<<find_rdfa_by_id(role_mod , eval("line.#{field.to_s}"))
207
189
  end
208
190
  rdfa_string<<"</div>\n"
209
191
  else
210
192
  subitem = eval("item.#{field_class}")
211
193
  rdfa_string<<"<div rel=\"#{m_class}\">\n"
212
194
  subitem.each do |subline|
213
- rdfa_string<< get_rdfa_by_id(role_mod , eval("subline.#{field.to_s}"))
195
+ rdfa_string<< find_rdfa_by_id(role_mod , eval("subline.#{field.to_s}"))
214
196
  end
215
197
  rdfa_string<<"</div>\n"
216
198
  end
217
199
  else
218
200
  rdfa_string<<"<div rel=\"#{m_class}\">\n"
219
- rdfa_string << get_rdfa_by_id(role_mod , eval("item.#{link_field.to_s}"))
201
+ rdfa_string << find_rdfa_by_id(role_mod , eval("item.#{link_field.to_s}"))
220
202
  rdfa_string<<"</div>\n"
221
203
  end
222
204
  end
@@ -247,7 +229,7 @@ class Tripleizer
247
229
  end
248
230
  if field
249
231
  write = false
250
- #rdfa_string<<get_rdfa_by_id("","")
232
+ #rdfa_string<<find_rdfa_by_id("","")
251
233
  end
252
234
  end
253
235
  rdfa_string<<"<div property= \"#{name}\" content=\"#{eval("item.#{link_field}")}\"></div>\n" if write
@@ -260,12 +242,11 @@ class Tripleizer
260
242
 
261
243
  #not used
262
244
  def tripleize (tr_self,c =nil,id=nil)
263
-
264
245
  end
265
246
 
266
247
  # Find all the models to the given key ( the RDF-Class name)
267
248
  # returns a hash with the RDF-Class name as key and the models as value
268
- def search_models key
249
+ def find_models key
269
250
  model_groups = eval("configatron.query").to_hash
270
251
  model_groups.each do |model_group_name,model_group|
271
252
  if model_group_name.to_s.downcase == key.downcase
@@ -407,11 +388,13 @@ class Tripleizer
407
388
  c1.delete :id unless rdf_type
408
389
 
409
390
  c1.each do |k,v|
391
+ #FIXME: not quite satisfied with this source part
410
392
  dtype=""
411
393
  k=k.to_s
412
394
  if v.to_s.empty?
413
395
  next
414
396
  end
397
+
415
398
  # beinhaltet key ^^ dann type oder sprache richtig setzen
416
399
  if k.index("^^")
417
400
  #TODO: k,dtype = k.split("^^")
@@ -425,7 +408,7 @@ class Tripleizer
425
408
  end
426
409
  end
427
410
  end
428
- # beinhaltet key -> dann muss objekt richtig gesetzt werden
411
+ #
429
412
  if k.index("->")
430
413
  k, object_property = k.split("->")
431
414
  else
@@ -437,15 +420,12 @@ class Tripleizer
437
420
  #
438
421
 
439
422
  prop= self.uri(k,@object_namespaces[:vocabulary])
440
-
441
423
  unless object_property
442
424
  is_literal= true
443
425
  object= v.to_s
444
426
  else
445
- is_literal= false
446
- #uri($objectProperty.($objectProperty&&substr($objectProperty,-1,1)!='/'?'/':'').$val);
447
- #TODO: fixme "/" in the middle
448
- #object= uri "#{object_property}/#{object_property && object_property[-1,1].to_s !="/" ?"/":":"}#{v}"
427
+ is_literal= false
428
+ #TODO: fixme "/" in the middle
449
429
  object= uri "#{object_property}#{object_property[-1,1].to_s !="/" ? "/":":"}#{v}"
450
430
  if object[0..1] == "t/"
451
431
  object = object.to_s[2..-1]
@@ -463,10 +443,9 @@ class Tripleizer
463
443
  oa['datatype']=dtype if is_literal && dtype
464
444
  oa['language']=lang if is_literal && lang
465
445
  add_json_pair subject, predicate,oa
466
-
446
+ return ""
467
447
  else
468
448
  #(lang?"@#{lang}":'')
469
-
470
449
  #define the object
471
450
  if(is_literal)
472
451
  object = "\"#{object.to_s.gsub('"','%22')}\""+ (dtype.empty? ? (lang.empty? ? "": "@#{lang}" ):"^^<#{dtype}>" )
@@ -485,24 +464,21 @@ class Tripleizer
485
464
 
486
465
  #generates an uri with the given name
487
466
  def uri (name,default="")
467
+
488
468
  name=name.to_s
489
-
469
+ #FIXME: bad urls (for example just www.example.com will produce an endless-loop
490
470
  if name.try(:include?, "://")
491
471
  return name[0..name.length-2] if name[-1,1]=="/"
492
472
  return name[0..name.length]
493
473
  else
494
474
  name +="/" unless (name[name.length-1..name.length-1] == ("/" || "#")) || name.try(:include?, ":")
495
475
 
496
- if name.index(":")
497
- #$this->ns[substr($name,0,strpos($name,':'))].$this->normalizeLocalName(substr($name,strpos($name,':')+1))
476
+ if name.index(":")
498
477
  t= @object_namespaces[name.split(":")[0].to_sym]
499
478
  t ||=""
500
479
  t += "/" unless (t[t.length-1..t.length-1] == ("/" || "#") || t.blank?) || name.try(:include?, ":")
501
480
  return uri( t+ normalize_local_name(name.split(":")[1])+"/")
502
- else
503
- ##($default?$default:$GLOBALS['baseURI']).$this->normalizeLocalName($name));
504
- #falls bei default hinten ein "/" ist abschneiden
505
- #default= default[0.. default.length-2] unless default[default.length-1..default.length-1] == "/"
481
+ else
506
482
  t= default.blank? ? @base_uri : default
507
483
  t += "/" unless t[t.length-1..t.length-1]=="/"
508
484
  return uri( t + normalize_local_name(name))
@@ -538,10 +514,12 @@ class Tripleizer
538
514
  CGI::escape(name).gsub(/%2F/,'/').gsub(/%23/,'#')
539
515
  end
540
516
 
517
+ # if output var is set to jason, you get the json source here
541
518
  def json
542
519
  @json_hash.to_json
543
520
  end
544
521
 
522
+ # adds a pair to the json hash tree
545
523
  def add_json_pair subject, predicate,oa
546
524
  if @json_hash.key? subject
547
525
  if @json_hash[subject].key? predicate
@@ -552,6 +530,7 @@ class Tripleizer
552
530
  else
553
531
  @json_hash[subject]=Hash.new
554
532
  @json_hash[subject][predicate]=oa
533
+ hello="test"
555
534
  end
556
535
  end
557
536
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Nico Patitz
@@ -44,7 +44,7 @@ files:
44
44
  - README
45
45
  - MIT-LICENSE
46
46
  - rails/init.rb
47
- - lib/config/database_1.yml
47
+ - lib/config/triplify_demo.yml
48
48
  - lib/app/controllers/triplify_controller.rb
49
49
  - lib/app/helpers/triplify_helper.rb
50
50
  - lib/app/models/triplify.rb