roadforest 0.1 → 0.5

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 (120) hide show
  1. checksums.yaml +4 -4
  2. data/examples/file-management.rb +12 -13
  3. data/lib/roadforest-client.rb +3 -0
  4. data/lib/roadforest-common.rb +2 -0
  5. data/lib/roadforest-server.rb +7 -0
  6. data/lib/roadforest-testing.rb +1 -0
  7. data/lib/roadforest/application.rb +9 -7
  8. data/lib/roadforest/application/dispatcher.rb +39 -63
  9. data/lib/roadforest/application/parameters.rb +1 -1
  10. data/lib/roadforest/application/path-provider.rb +2 -2
  11. data/lib/roadforest/application/route-adapter.rb +130 -18
  12. data/lib/roadforest/application/services-host.rb +0 -4
  13. data/lib/roadforest/augment/affordance.rb +78 -0
  14. data/lib/roadforest/augment/augmentation.rb +97 -0
  15. data/lib/roadforest/augment/augmenter.rb +54 -0
  16. data/lib/roadforest/augmentations.rb +1 -0
  17. data/lib/roadforest/content-handling.rb +1 -0
  18. data/lib/roadforest/content-handling/common-engines.rb +67 -0
  19. data/lib/roadforest/content-handling/engine.rb +2 -14
  20. data/lib/roadforest/content-handling/handler-wrap.rb +29 -31
  21. data/lib/roadforest/content-handling/media-type.rb +6 -0
  22. data/lib/roadforest/{rdf.rb → graph.rb} +1 -1
  23. data/lib/roadforest/{rdf → graph}/access-manager.rb +12 -74
  24. data/lib/roadforest/{rdf → graph}/document.rb +1 -1
  25. data/lib/roadforest/{rdf → graph}/etagging.rb +2 -2
  26. data/lib/roadforest/{rdf → graph}/focus-list.rb +1 -9
  27. data/lib/roadforest/{rdf → graph}/graph-copier.rb +2 -2
  28. data/lib/roadforest/{rdf → graph}/graph-focus.rb +5 -7
  29. data/lib/roadforest/{rdf → graph}/normalization.rb +1 -1
  30. data/lib/roadforest/{rdf → graph}/post-focus.rb +2 -3
  31. data/lib/roadforest/graph/vocabulary.rb +96 -0
  32. data/lib/roadforest/http/graph-transfer.rb +2 -2
  33. data/lib/roadforest/interface/application.rb +145 -0
  34. data/lib/roadforest/interface/blob.rb +38 -0
  35. data/lib/roadforest/interface/rdf.rb +77 -0
  36. data/lib/roadforest/interfaces.rb +2 -0
  37. data/lib/roadforest/remote-host.rb +17 -17
  38. data/lib/roadforest/resource.rb +4 -0
  39. data/lib/roadforest/resource/{rdf/leaf-item.rb → leaf-item.rb} +1 -1
  40. data/lib/roadforest/resource/{rdf/list.rb → list.rb} +1 -1
  41. data/lib/roadforest/resource/{rdf/parent-item.rb → parent-item.rb} +1 -1
  42. data/lib/roadforest/resource/{rdf/read-only.rb → read-only.rb} +18 -18
  43. data/lib/roadforest/resource/role/has-children.rb +1 -1
  44. data/lib/roadforest/resource/role/writable.rb +2 -2
  45. data/lib/roadforest/server.rb +1 -1
  46. data/lib/roadforest/source-rigor.rb +9 -0
  47. data/lib/roadforest/{rdf/source-rigor → source-rigor}/credence-annealer.rb +2 -2
  48. data/lib/roadforest/{rdf/source-rigor → source-rigor}/credence.rb +5 -5
  49. data/lib/roadforest/{rdf/source-rigor → source-rigor}/credence/any.rb +1 -1
  50. data/lib/roadforest/{rdf/source-rigor → source-rigor}/credence/none-if-role-absent.rb +1 -1
  51. data/lib/roadforest/{rdf/source-rigor → source-rigor}/credence/role-if-available.rb +1 -1
  52. data/lib/roadforest/source-rigor/engine.rb +45 -0
  53. data/lib/roadforest/{rdf → source-rigor}/graph-store.rb +9 -9
  54. data/lib/roadforest/{rdf/source-rigor → source-rigor}/http-investigator.rb +2 -2
  55. data/lib/roadforest/{rdf → source-rigor}/investigation.rb +2 -2
  56. data/lib/roadforest/{rdf/source-rigor → source-rigor}/investigator.rb +3 -3
  57. data/lib/roadforest/{rdf/source-rigor → source-rigor}/null-investigator.rb +3 -2
  58. data/lib/roadforest/{rdf → source-rigor}/parcel.rb +5 -5
  59. data/lib/roadforest/{rdf → source-rigor}/resource-pattern.rb +6 -6
  60. data/lib/roadforest/{rdf → source-rigor}/resource-query.rb +2 -2
  61. data/lib/roadforest/source-rigor/rigorous-access.rb +101 -0
  62. data/lib/roadforest/templates/affordance-doc.haml +23 -0
  63. data/lib/roadforest/templates/affordance-property-values.haml +13 -0
  64. data/lib/roadforest/templates/affordance-subject.haml +9 -0
  65. data/lib/roadforest/templates/affordance-uri-object.haml +2 -0
  66. data/lib/roadforest/templates/base/{property_value.haml → property-value.haml} +0 -0
  67. data/lib/roadforest/templates/base/{property_values.haml → property-values.haml} +0 -0
  68. data/lib/roadforest/templates/distiller/{property_value.haml → property-value.haml} +0 -0
  69. data/lib/roadforest/templates/distiller/{property_values.haml → property-values.haml} +0 -0
  70. data/lib/roadforest/templates/min/{property_values.haml → property-values.haml} +0 -0
  71. data/lib/roadforest/templates/rdfpost-curie.haml +6 -0
  72. data/lib/roadforest/test-support/dispatcher-facade.rb +2 -0
  73. data/lib/roadforest/test-support/matchers.rb +169 -5
  74. data/lib/roadforest/test-support/remote-host.rb +2 -2
  75. data/lib/roadforest/type-handlers/handler.rb +74 -0
  76. data/lib/roadforest/type-handlers/jsonld.rb +34 -0
  77. data/lib/roadforest/type-handlers/rdf-handler.rb +36 -0
  78. data/lib/roadforest/{content-handling/type-handlers → type-handlers}/rdfa-writer.rb +2 -2
  79. data/lib/roadforest/{content-handling/type-handlers → type-handlers}/rdfa-writer/document-environment.rb +9 -8
  80. data/lib/roadforest/type-handlers/rdfa-writer/environment-decorator.rb +312 -0
  81. data/lib/roadforest/{content-handling/type-handlers → type-handlers}/rdfa-writer/object-environment.rb +3 -3
  82. data/lib/roadforest/{content-handling/type-handlers → type-handlers}/rdfa-writer/property-environment.rb +5 -11
  83. data/lib/roadforest/type-handlers/rdfa-writer/render-engine.rb +427 -0
  84. data/lib/roadforest/{content-handling/type-handlers → type-handlers}/rdfa-writer/render-environment.rb +33 -26
  85. data/lib/roadforest/{content-handling/type-handlers → type-handlers}/rdfa-writer/subject-environment.rb +7 -23
  86. data/lib/roadforest/type-handlers/rdfa.rb +73 -0
  87. data/lib/roadforest/type-handlers/rdfpost.rb +301 -0
  88. data/lib/roadforest/utility/class-registry.rb +23 -5
  89. data/spec/.ctrlp-root +0 -0
  90. data/spec/affordance-augmenter.rb +75 -0
  91. data/spec/affordances-flow.rb +438 -0
  92. data/spec/authorization.rb +34 -0
  93. data/spec/client.rb +13 -12
  94. data/spec/credence-annealer.rb +5 -5
  95. data/spec/focus-list.rb +8 -8
  96. data/spec/full-integration.rb +3 -3
  97. data/spec/graph-copier.rb +4 -4
  98. data/spec/graph-store.rb +19 -31
  99. data/spec/keychain.rb +82 -0
  100. data/spec/rdf-normalization.rb +2 -2
  101. data/spec/rdf-parcel.rb +3 -3
  102. data/spec/rdfa-handler.rb +514 -0
  103. data/spec/rdfpost.rb +96 -0
  104. data/spec/source-rigor.rb +57 -0
  105. data/spec/update-focus.rb +11 -10
  106. metadata +91 -66
  107. data/lib/roadforest/blob-model.rb +0 -53
  108. data/lib/roadforest/content-handling/type-handler.rb +0 -76
  109. data/lib/roadforest/content-handling/type-handlers/jsonld.rb +0 -36
  110. data/lib/roadforest/content-handling/type-handlers/rdf-handler.rb +0 -38
  111. data/lib/roadforest/content-handling/type-handlers/rdfa-writer/render-engine.rb +0 -574
  112. data/lib/roadforest/content-handling/type-handlers/rdfa.rb +0 -175
  113. data/lib/roadforest/content-handling/type-handlers/rdfpost.rb +0 -297
  114. data/lib/roadforest/model.rb +0 -209
  115. data/lib/roadforest/models.rb +0 -2
  116. data/lib/roadforest/rdf/source-rigor.rb +0 -44
  117. data/lib/roadforest/rdf/vocabulary.rb +0 -11
  118. data/lib/roadforest/resource/http/form-parsing.rb +0 -81
  119. data/lib/roadforest/resource/rdf.rb +0 -4
  120. data/spec/form-parsing.rb +0 -1
@@ -1,175 +0,0 @@
1
- require 'rdf/rdfa' #XXX Otherwise json-ld grabs RDFa documents. Awaiting fix upstream
2
- require 'roadforest/content-handling/type-handlers/rdf-handler'
3
- module RoadForest
4
- module MediaType
5
- module Handlers
6
- class RESTfulRDFaWriter < ::RDF::RDFa::Writer
7
- HAML = ::RDF::RDFa::Writer::BASE_HAML.merge(:property_values => %q{
8
- - objects.each do |object|
9
- /
10
- = object.inspect
11
- %div.property
12
- %span.label
13
- = get_predicate_name(predicate)
14
- %ul
15
- - objects.each do |object|
16
- - if res = yield(object, :inlist => inlist, :element => :li)
17
- != res
18
- - elsif object.node?
19
- %li{:property => get_curie(predicate), :resource => get_curie(object), :inlist => inlist}= get_curie(object)
20
- - elsif object.uri?
21
- %li
22
- %a{:property => get_curie(predicate), :href => object.to_s, :inlist => inlist}= object.to_s
23
- - elsif object.datatype == RDF.XMLLiteral
24
- %li{:property => get_curie(predicate), :lang => get_lang(object), :datatype => get_curie(object.datatype), :inlist => inlist}<!= get_value(object)
25
- - else
26
- %li{:property => get_curie(predicate), :content => get_content(object), :lang => get_lang(object), :datatype => get_dt_curie(object), :inlist => inlist}= escape_entities(get_value(object))
27
- })
28
-
29
- def initialize(output = $stdout, options = nil, &block)
30
- options ||= {}
31
- options = {:haml => HAML}
32
- super(output, options, &block)
33
- end
34
-
35
-
36
- # Write a predicate with one or more values.
37
- #
38
- # Values may be a combination of Literal and Resource (Node or URI).
39
- # @param [RDF::Resource] predicate
40
- # Predicate to serialize
41
- # @param [Array<RDF::Resource>] objects
42
- # Objects to serialize
43
- # @return [String]
44
- def predicate(predicate, objects, options = nil)
45
- add_debug {"predicate: #{predicate.inspect}, objects: #{objects}"}
46
-
47
- return if objects.to_a.empty?
48
-
49
- add_debug {"predicate: #{get_curie(predicate)}"}
50
- render_property(predicate, objects, options || {}) do |o, opts|
51
- # Yields each object, for potential recursive definition.
52
- # If nil is returned, a leaf is produced
53
- opts = {:rel => get_curie(predicate), :element => (:li if objects.length > 1)}.merge(opts||{})
54
-
55
- if !is_done?(o) && @subjects.include?(o)
56
- depth {subject(o, opts)}
57
- end
58
- end
59
- end
60
-
61
-
62
- # Render a single- or multi-valued predicate using
63
- # `haml_template[:property_value]` or
64
- # `haml_template[:property_values]`. Yields each object for optional
65
- # rendering. The block should only render for recursive subject
66
- # definitions (i.e., where the object is also a subject and is rendered
67
- # underneath the first referencing subject).
68
- #
69
- # If a multi-valued property definition is not found within the template, the writer will use the single-valued property definition multiple times.
70
- #
71
- # @param [Array<RDF::Resource>] predicate
72
- # Predicate to render.
73
- # @param [Array<RDF::Resource>] objects
74
- # List of objects to render. If the list contains only a single element, the :property_value template will be used. Otherwise, the :property_values template is used.
75
- # @param [Hash{Symbol => Object}] options Rendering options passed to Haml render.
76
- # @option options [String] haml (haml_template[:property_value], haml_template[:property_values])
77
- # Haml template to render. Otherwise, uses `haml_template[:property_value] or haml_template[:property_values]`
78
- # depending on the cardinality of objects.
79
- # @yield [object]
80
- # Yields object.
81
- # @yieldparam [RDF::Resource] object
82
- # @yieldreturn [String, nil]
83
- # The block should only return a string for recursive object definitions.
84
- # @return String
85
- # The rendered document is returned as a string
86
- def render_property(predicate, objects, options = {}, &block)
87
- add_debug {"render_property(#{predicate}): #{objects.inspect}"}
88
- # If there are multiple objects, and no :property_values is defined, call recursively with
89
- # each object
90
-
91
- template = options[:haml]
92
- template ||= objects.length > 1 ? haml_template[:property_values] : haml_template[:property_value]
93
-
94
- # Separate out the objects which are lists and render separately
95
- list_objects = objects.select {|o| o != ::RDF.nil && ::RDF::List.new(o, @graph).valid?}
96
- unless list_objects.empty?
97
- # Render non-list objects
98
- add_debug {"properties with lists: non-lists: #{objects - list_objects} lists: #{list_objects}"}
99
- nl = render_property(predicate, objects - list_objects, options, &block) unless objects == list_objects
100
- return nl.to_s + list_objects.map do |object|
101
- # Render each list as multiple properties and set :inlist to true
102
- list = ::RDF::List.new(object, @graph)
103
- list.each_statement {|st| subject_done(st.subject)}
104
-
105
- add_debug {"list: #{list.inspect} #{list.to_a}"}
106
- render_property(predicate, list.to_a, options.merge(:inlist => "true"), &block)
107
- end.join(" ")
108
- end
109
-
110
- if objects.length > 1 && template.nil?
111
- # Uf there is no property_values template, render each property using property_value template
112
- objects.map do |object|
113
- render_property(predicate, [object], options, &block)
114
- end.join(" ")
115
- else
116
- raise ::RDF::WriterError, "Missing property template" if template.nil?
117
-
118
- template = options[:haml] || (
119
- objects.to_a.length > 1 &&
120
- haml_template.has_key?(:property_values) ?
121
- :property_values :
122
- :property_value)
123
- options = {
124
- :objects => objects,
125
- :object => objects.first,
126
- :predicate => predicate,
127
- :property => get_curie(predicate),
128
- :rel => get_curie(predicate),
129
- :inlist => nil,
130
- }.merge(options)
131
- hamlify(template, options) do |object, options|
132
- yield(object, options) if block_given?
133
- end
134
- end
135
- end
136
-
137
- end
138
-
139
- #text/html;q=1;rdfa
140
- #image/svg+xml;q=1;rdfa
141
- #application/xhtml+xml;q=1;rdfa
142
- #text/html
143
- #image/svg+xml
144
- #application/xhtml+xml
145
- class RDFa < RDFHandler
146
- include RDF::Normalization
147
-
148
- def local_to_network(base_uri, rdf)
149
- raise "Invalid base uri: #{base_uri}" if base_uri.nil?
150
- prefixes = relevant_prefixes_for_graph(rdf)
151
- prefixes.keys.each do |prefix|
152
- prefixes[prefix.to_sym] = prefixes[prefix]
153
- end
154
- #::RDF::RDFa.debug = true
155
- RESTfulRDFaWriter.buffer(:base_uri => base_uri.to_s,
156
- :prefixes => prefixes) do |writer|
157
- rdf.each_statement do |statement|
158
- writer << statement
159
- end
160
- end
161
- end
162
-
163
- def network_to_local(base_uri, source)
164
- raise "Invalid base uri: #{base_uri.inspect}" if base_uri.nil?
165
- graph = ::RDF::Graph.new
166
- reader = ::RDF::RDFa::Reader.new(source.to_s, :base_uri => base_uri.to_s)
167
- reader.each_statement do |statement|
168
- graph.insert(statement)
169
- end
170
- graph
171
- end
172
- end
173
- end
174
- end
175
- end
@@ -1,297 +0,0 @@
1
- require 'roadforest/content-handling/type-handlers/rdf-handler'
2
-
3
- module RoadForest
4
- module MediaType
5
- module Handlers
6
- #application/x-www-form-urlencoded
7
- class RDFPost < RDFHandler
8
-
9
- #c.f. http://www.lsrn.org/semweb/rdfpost.html
10
- class Reader < ::RDF::Reader
11
- module St
12
- class State
13
- def initialize(reader)
14
- @reader = reader
15
- @accept_hash = cleanup(accept_list)
16
- end
17
-
18
- def cleanup(accept_list)
19
- hash = Hash.new{ accept_list[nil] }
20
- accept_list.each_key do |key|
21
- next if key.nil?
22
- hash[key.to_s] = accept_list[key]
23
- end
24
- hash
25
- end
26
-
27
- def blank_node(name)
28
- ::RDF::Node.new(name)
29
- end
30
-
31
- def base_uri
32
- ::RDF::URI.intern(@reader.options[:base_uri])
33
- end
34
-
35
- def uri(string)
36
- base_uri.join(string)
37
- end
38
-
39
- def prefix_uri(name)
40
- ::RDF::URI.intern(@reader.options[:prefixes][name])
41
- end
42
-
43
- def clear_subject
44
- @reader.subject = nil
45
- @reader.subject_prefix = nil
46
- end
47
-
48
- def clear_predicate
49
- @reader.predicate = nil
50
- @reader.predicate_prefix = nil
51
- end
52
-
53
- def clear_object
54
- @reader.object = nil
55
- @reader.object_prefix = nil
56
- end
57
-
58
- def consume_next(name)
59
- consume
60
- next_state(name)
61
- end
62
-
63
- def consume
64
- @reader.consume_pair
65
- end
66
-
67
- def triple_complete
68
- @reader.new_triple = true
69
- end
70
-
71
- def next_state(name)
72
- @reader.current_state = @reader.states.fetch(name)
73
- end
74
-
75
- def accept(key, value)
76
- #puts "#{[self.class.to_s.sub(/.*:/,''), key,
77
- #value.sub(/\s*\Z/,'')].inspect}"
78
- @accept_hash[key][value.sub(/\s*\Z/,'')]
79
- end
80
- end
81
-
82
- class RDF < State
83
- def accept_list
84
- { rdf: proc{|v| consume_next(:def_ns_decl) },
85
- nil => proc{ consume } }
86
- end
87
- end
88
-
89
- class DefNsDecl < State
90
- def accept_list
91
- { v: proc {|v| consume_next(:ns_decl); @reader.options[:prefixes][nil] = v},
92
- nil => proc{|v| next_state(:ns_decl)}}
93
- end
94
- end
95
-
96
- class NsDecl < State
97
- def accept_list
98
- { n: proc{|v| consume_next(:ns_decl_suffix); @reader.namespace_prefix = v},
99
- nil => proc{|v| next_state(:subject)}}
100
- end
101
- end
102
-
103
- class NsDeclSuffix < State
104
- def accept_list
105
- { v: proc{|v| consume_next(:ns_decl); @reader.options[:prefixes][@reader.namespace_prefix] = v},
106
- nil => proc{ next_state(:ns_decl)}}
107
- end
108
- end
109
-
110
- class SkipToSubject < State
111
- def accept_list
112
- next_is_subject = proc{ next_state(:subject); clear_subject; clear_predicate; clear_object }
113
- {
114
- sb: next_is_subject,
115
- su: next_is_subject,
116
- sv: next_is_subject,
117
- sn: next_is_subject,
118
- nil => proc{ consume }
119
- }
120
- end
121
- end
122
-
123
- class SkipToSubjectOrPred < SkipToSubject
124
- def accept_list
125
- next_is_pred = proc{ next_state(:predicate); clear_predicate; clear_object }
126
- super.merge( pu: next_is_pred, pv: next_is_pred, pn: next_is_pred )
127
- end
128
- end
129
-
130
- class Subject < State
131
- def accept_list
132
- {
133
- sb: proc{|v| consume_next(:predicate); @reader.subject = blank_node(v)},
134
- su: proc{|v| consume_next(:predicate); @reader.subject = uri(v)},
135
- sv: proc{|v| consume_next(:predicate); @reader.subject = prefix_url(nil) / v},
136
- sn: proc{|v| consume_next(:subject_suffix); @reader.subject_prefix = prefix_uri(v)},
137
- nil => proc{ consume }
138
- }
139
- end
140
- end
141
-
142
- class SubjectSuffix < State
143
- def accept_list
144
- {
145
- sv: proc{|v| consume_next(:predicate); @reader.subject = @reader.subject_prefix/v},
146
- nil => proc{ next_state(:skip_to_subject)}
147
- }
148
- end
149
- end
150
-
151
- class Predicate < State
152
- def accept_list
153
- {
154
- pu: proc {|v| @reader.predicate = uri(v); consume_next(:object)},
155
- pv: proc {|v| @reader.predicate = prefix_uri(nil) / v; consume_next(:object)},
156
- pn: proc {|v| @reader.predicate_prefix = prefix_uri(v); consume_next(:predicate_suffix)},
157
- nil => proc { next_state(:skip_to_subject)}
158
- }
159
- end
160
- end
161
-
162
- class PredicateSuffix < State
163
- def accept_list
164
- {
165
- pv: proc{|v| consume_next(:object); @reader.predicate = @reader.predicate_prefix/v},
166
- nil => proc{ next_state(:skip_to_subject)}
167
- }
168
- end
169
- end
170
-
171
- class Object < State
172
- def accept_list
173
- {
174
- ob: proc{|v| consume; triple_complete; @reader.object = blank_node(v)},
175
- ou: proc{|v| consume; triple_complete; @reader.object = uri(v)},
176
- ov: proc{|v| consume; triple_complete; @reader.object = prefix_uri(nil) / v},
177
- on: proc{|v| consume_next(:object_suffix); @reader.object_prefix = prefix_uri(v)},
178
- ol: proc{|v| consume_next(:type_or_lang); @reader.object = v},
179
- ll: proc{|v| consume_next(:object_literal); @reader.object_lang = v},
180
- lt: proc{|v| consume_next(:object_literal); @reader.object_type = v},
181
- nil => proc{ next_state(:skip_to_subj_or_pred) }
182
- }
183
- end
184
- end
185
-
186
- class ObjectSuffix < State
187
- def accept_list
188
- {
189
- ov: proc{|v| consume_next(:object); triple_complete; @reader.object = @reader.object_prefix/v},
190
- nil => proc{ next_state(:skip_to_subj_or_pred)}
191
- }
192
- end
193
- end
194
-
195
- class ObjectLiteral < State
196
- def accept_list
197
- {
198
- ol: proc{|v| consume_next(:type_or_lang); @reader.object = v},
199
- ll: proc{|v| consume; @reader.object_lang = v},
200
- lt: proc{|v| consume; @reader.object_type = v},
201
- nil => proc{ next_state(:skip_to_subj_or_pred)}
202
- }
203
- end
204
- end
205
-
206
- class TypeOrLang < State
207
- def accept_list
208
- {
209
- ll: proc{|v| consume; @reader.object_lang = v},
210
- lt: proc{|v| consume; @reader.object_type = v},
211
- nil => proc{ next_state(:object); triple_complete }
212
- }
213
- end
214
- end
215
- end
216
-
217
- def initialize(input, options=nil, &block)
218
- super(input, options||{}, &block)
219
-
220
- @lineno = 0
221
- @new_triple = false
222
-
223
- @states = {
224
- :rdf => St::RDF.new(self),
225
- :def_ns_decl => St::DefNsDecl.new(self),
226
- :ns_decl => St::NsDecl.new(self),
227
- :ns_decl_suffix => St::NsDeclSuffix.new(self),
228
- :skip_to_subject => St::SkipToSubject.new(self),
229
- :skip_to_subj_or_pred => St::SkipToSubjectOrPred.new(self),
230
- :subject => St::Subject.new(self),
231
- :subject_suffix => St::SubjectSuffix.new(self),
232
- :predicate => St::Predicate.new(self),
233
- :predicate_suffix => St::PredicateSuffix.new(self),
234
- :object => St::Object.new(self),
235
- :object_suffix => St::ObjectSuffix.new(self),
236
- :object_literal => St::ObjectLiteral.new(self),
237
- :type_or_lang => St::TypeOrLang.new(self)
238
- }
239
-
240
- @current_state = @states.fetch(:rdf)
241
- end
242
- attr_reader :lineno, :states
243
- attr_accessor :current_state
244
- attr_accessor :new_triple, :subject, :predicate, :object
245
- attr_accessor :object_type, :object_lang
246
- attr_accessor :namespace_prefix, :subject_prefix, :predicate_prefix, :object_prefix
247
-
248
- def read_triple
249
- if @lineno >= @input.length
250
- raise EOFError
251
- end
252
- while @lineno < @input.length
253
- @current_state.accept(*@input[@lineno])
254
- if @new_triple
255
- @new_triple = false
256
- return build_triple
257
- end
258
- end
259
- return build_triple
260
- end
261
-
262
- def build_triple
263
- object = @object
264
- if object.is_a? String
265
- object = ::RDF::Literal.new(object, :datatype => object_type, :language => object_lang)
266
- end
267
- @object_type = nil
268
- @object_lang = nil
269
-
270
- [@subject, @predicate, object]
271
- end
272
-
273
- def rewind
274
- @lineno = 0
275
- end
276
-
277
- def consume_pair
278
- @lineno += 1
279
- end
280
- end
281
-
282
- def local_to_network(base_uri, graph)
283
- end
284
-
285
- def network_to_local(base_uri, list)
286
- raise "Invalid base uri: #{base_uri.inspect}" if base_uri.nil?
287
- graph = ::RDF::Graph.new
288
- reader = Reader.new(list, :base_uri => base_uri.to_s)
289
- reader.each_statement do |statement|
290
- graph.insert(statement)
291
- end
292
- graph
293
- end
294
- end
295
- end
296
- end
297
- end