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.
- checksums.yaml +4 -4
- data/examples/file-management.rb +12 -13
- data/lib/roadforest-client.rb +3 -0
- data/lib/roadforest-common.rb +2 -0
- data/lib/roadforest-server.rb +7 -0
- data/lib/roadforest-testing.rb +1 -0
- data/lib/roadforest/application.rb +9 -7
- data/lib/roadforest/application/dispatcher.rb +39 -63
- data/lib/roadforest/application/parameters.rb +1 -1
- data/lib/roadforest/application/path-provider.rb +2 -2
- data/lib/roadforest/application/route-adapter.rb +130 -18
- data/lib/roadforest/application/services-host.rb +0 -4
- data/lib/roadforest/augment/affordance.rb +78 -0
- data/lib/roadforest/augment/augmentation.rb +97 -0
- data/lib/roadforest/augment/augmenter.rb +54 -0
- data/lib/roadforest/augmentations.rb +1 -0
- data/lib/roadforest/content-handling.rb +1 -0
- data/lib/roadforest/content-handling/common-engines.rb +67 -0
- data/lib/roadforest/content-handling/engine.rb +2 -14
- data/lib/roadforest/content-handling/handler-wrap.rb +29 -31
- data/lib/roadforest/content-handling/media-type.rb +6 -0
- data/lib/roadforest/{rdf.rb → graph.rb} +1 -1
- data/lib/roadforest/{rdf → graph}/access-manager.rb +12 -74
- data/lib/roadforest/{rdf → graph}/document.rb +1 -1
- data/lib/roadforest/{rdf → graph}/etagging.rb +2 -2
- data/lib/roadforest/{rdf → graph}/focus-list.rb +1 -9
- data/lib/roadforest/{rdf → graph}/graph-copier.rb +2 -2
- data/lib/roadforest/{rdf → graph}/graph-focus.rb +5 -7
- data/lib/roadforest/{rdf → graph}/normalization.rb +1 -1
- data/lib/roadforest/{rdf → graph}/post-focus.rb +2 -3
- data/lib/roadforest/graph/vocabulary.rb +96 -0
- data/lib/roadforest/http/graph-transfer.rb +2 -2
- data/lib/roadforest/interface/application.rb +145 -0
- data/lib/roadforest/interface/blob.rb +38 -0
- data/lib/roadforest/interface/rdf.rb +77 -0
- data/lib/roadforest/interfaces.rb +2 -0
- data/lib/roadforest/remote-host.rb +17 -17
- data/lib/roadforest/resource.rb +4 -0
- data/lib/roadforest/resource/{rdf/leaf-item.rb → leaf-item.rb} +1 -1
- data/lib/roadforest/resource/{rdf/list.rb → list.rb} +1 -1
- data/lib/roadforest/resource/{rdf/parent-item.rb → parent-item.rb} +1 -1
- data/lib/roadforest/resource/{rdf/read-only.rb → read-only.rb} +18 -18
- data/lib/roadforest/resource/role/has-children.rb +1 -1
- data/lib/roadforest/resource/role/writable.rb +2 -2
- data/lib/roadforest/server.rb +1 -1
- data/lib/roadforest/source-rigor.rb +9 -0
- data/lib/roadforest/{rdf/source-rigor → source-rigor}/credence-annealer.rb +2 -2
- data/lib/roadforest/{rdf/source-rigor → source-rigor}/credence.rb +5 -5
- data/lib/roadforest/{rdf/source-rigor → source-rigor}/credence/any.rb +1 -1
- data/lib/roadforest/{rdf/source-rigor → source-rigor}/credence/none-if-role-absent.rb +1 -1
- data/lib/roadforest/{rdf/source-rigor → source-rigor}/credence/role-if-available.rb +1 -1
- data/lib/roadforest/source-rigor/engine.rb +45 -0
- data/lib/roadforest/{rdf → source-rigor}/graph-store.rb +9 -9
- data/lib/roadforest/{rdf/source-rigor → source-rigor}/http-investigator.rb +2 -2
- data/lib/roadforest/{rdf → source-rigor}/investigation.rb +2 -2
- data/lib/roadforest/{rdf/source-rigor → source-rigor}/investigator.rb +3 -3
- data/lib/roadforest/{rdf/source-rigor → source-rigor}/null-investigator.rb +3 -2
- data/lib/roadforest/{rdf → source-rigor}/parcel.rb +5 -5
- data/lib/roadforest/{rdf → source-rigor}/resource-pattern.rb +6 -6
- data/lib/roadforest/{rdf → source-rigor}/resource-query.rb +2 -2
- data/lib/roadforest/source-rigor/rigorous-access.rb +101 -0
- data/lib/roadforest/templates/affordance-doc.haml +23 -0
- data/lib/roadforest/templates/affordance-property-values.haml +13 -0
- data/lib/roadforest/templates/affordance-subject.haml +9 -0
- data/lib/roadforest/templates/affordance-uri-object.haml +2 -0
- data/lib/roadforest/templates/base/{property_value.haml → property-value.haml} +0 -0
- data/lib/roadforest/templates/base/{property_values.haml → property-values.haml} +0 -0
- data/lib/roadforest/templates/distiller/{property_value.haml → property-value.haml} +0 -0
- data/lib/roadforest/templates/distiller/{property_values.haml → property-values.haml} +0 -0
- data/lib/roadforest/templates/min/{property_values.haml → property-values.haml} +0 -0
- data/lib/roadforest/templates/rdfpost-curie.haml +6 -0
- data/lib/roadforest/test-support/dispatcher-facade.rb +2 -0
- data/lib/roadforest/test-support/matchers.rb +169 -5
- data/lib/roadforest/test-support/remote-host.rb +2 -2
- data/lib/roadforest/type-handlers/handler.rb +74 -0
- data/lib/roadforest/type-handlers/jsonld.rb +34 -0
- data/lib/roadforest/type-handlers/rdf-handler.rb +36 -0
- data/lib/roadforest/{content-handling/type-handlers → type-handlers}/rdfa-writer.rb +2 -2
- data/lib/roadforest/{content-handling/type-handlers → type-handlers}/rdfa-writer/document-environment.rb +9 -8
- data/lib/roadforest/type-handlers/rdfa-writer/environment-decorator.rb +312 -0
- data/lib/roadforest/{content-handling/type-handlers → type-handlers}/rdfa-writer/object-environment.rb +3 -3
- data/lib/roadforest/{content-handling/type-handlers → type-handlers}/rdfa-writer/property-environment.rb +5 -11
- data/lib/roadforest/type-handlers/rdfa-writer/render-engine.rb +427 -0
- data/lib/roadforest/{content-handling/type-handlers → type-handlers}/rdfa-writer/render-environment.rb +33 -26
- data/lib/roadforest/{content-handling/type-handlers → type-handlers}/rdfa-writer/subject-environment.rb +7 -23
- data/lib/roadforest/type-handlers/rdfa.rb +73 -0
- data/lib/roadforest/type-handlers/rdfpost.rb +301 -0
- data/lib/roadforest/utility/class-registry.rb +23 -5
- data/spec/.ctrlp-root +0 -0
- data/spec/affordance-augmenter.rb +75 -0
- data/spec/affordances-flow.rb +438 -0
- data/spec/authorization.rb +34 -0
- data/spec/client.rb +13 -12
- data/spec/credence-annealer.rb +5 -5
- data/spec/focus-list.rb +8 -8
- data/spec/full-integration.rb +3 -3
- data/spec/graph-copier.rb +4 -4
- data/spec/graph-store.rb +19 -31
- data/spec/keychain.rb +82 -0
- data/spec/rdf-normalization.rb +2 -2
- data/spec/rdf-parcel.rb +3 -3
- data/spec/rdfa-handler.rb +514 -0
- data/spec/rdfpost.rb +96 -0
- data/spec/source-rigor.rb +57 -0
- data/spec/update-focus.rb +11 -10
- metadata +91 -66
- data/lib/roadforest/blob-model.rb +0 -53
- data/lib/roadforest/content-handling/type-handler.rb +0 -76
- data/lib/roadforest/content-handling/type-handlers/jsonld.rb +0 -36
- data/lib/roadforest/content-handling/type-handlers/rdf-handler.rb +0 -38
- data/lib/roadforest/content-handling/type-handlers/rdfa-writer/render-engine.rb +0 -574
- data/lib/roadforest/content-handling/type-handlers/rdfa.rb +0 -175
- data/lib/roadforest/content-handling/type-handlers/rdfpost.rb +0 -297
- data/lib/roadforest/model.rb +0 -209
- data/lib/roadforest/models.rb +0 -2
- data/lib/roadforest/rdf/source-rigor.rb +0 -44
- data/lib/roadforest/rdf/vocabulary.rb +0 -11
- data/lib/roadforest/resource/http/form-parsing.rb +0 -81
- data/lib/roadforest/resource/rdf.rb +0 -4
- 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
|