Class: JSON::LD::Writer
- Inherits:
-
RDF::Writer
- Object
- RDF::Writer
- JSON::LD::Writer
- Includes:
- StreamingWriter, Utils
- Defined in:
- lib/json/ld/writer.rb
Overview
A JSON-LD parser in Ruby.
Note that the natural interface is to write a whole graph at a time. Writing statements or Triples will create a graph to add them to and then serialize the graph.
The writer will add prefix definitions, and use them for creating @context definitions, and minting CURIEs
Select the :expand option to output JSON-LD in expanded form
Instance Attribute Summary collapse
-
#context ⇒ Context
readonly
Context used to load and administer contexts.
-
#graph ⇒ RDF::Graph
readonly
Graph of statements serialized.
Instance Method Summary collapse
-
#initialize(output = $stdout, options = {}) {|writer| ... } ⇒ Writer
constructor
Initializes the RDF-LD writer instance.
-
#write_epilogue ⇒ void
Outputs the Serialized JSON-LD representation of all stored statements.
-
#write_prologue ⇒ void
Necessary for streaming.
-
#write_statement(statement) ⇒ void
Adds a statement to be serialized.
-
#write_triple(subject, predicate, object) ⇒ void
abstract
Addes a triple to be serialized.
Methods included from Utils
#add_value, #as_resource, #blank_node?, #compare_values, #has_property, #has_value, #index?, #list?, #node?, #node_reference?, #value?
Methods included from StreamingWriter
#stream_epilogue, #stream_prologue, #stream_statement
Constructor Details
#initialize(output = $stdout, options = {}) {|writer| ... } ⇒ Writer
Initializes the RDF-LD writer instance.
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/json/ld/writer.rb', line 95 def initialize(output = $stdout, = {}, &block) [:base_uri] ||= [:base] if .has_key?(:base) [:base] ||= [:base_uri] if .has_key?(:base_uri) super do @repo = RDF::Repository.new @debug = @options[:debug] if block_given? case block.arity when 0 then instance_eval(&block) else block.call(self) end end end end |
Instance Attribute Details
#context ⇒ Context (readonly)
Returns context used to load and administer contexts.
65 66 67 |
# File 'lib/json/ld/writer.rb', line 65 def context @context end |
#graph ⇒ RDF::Graph (readonly)
Returns Graph of statements serialized.
61 62 63 |
# File 'lib/json/ld/writer.rb', line 61 def graph @graph end |
Instance Method Details
#write_epilogue ⇒ void
This method returns an undefined value.
Outputs the Serialized JSON-LD representation of all stored statements.
If provided a context or prefixes, we’ll create a context and use it to compact the output. Otherwise, we return un-compacted JSON-LD
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
# File 'lib/json/ld/writer.rb', line 157 def write_epilogue return stream_epilogue if @options[:stream] debug("writer") { "serialize #{@repo.count} statements, #{@options.inspect}"} result = API.fromRdf(@repo, @options) # If we were provided a context, or prefixes, use them to compact the output context = RDF::Util::File.open_file(@options[:context]) if @options[:context].is_a?(String) context ||= @options[:context] context ||= if @options[:prefixes] || @options[:language] || @options[:standard_prefixes] ctx = Context.new(@options) ctx.language = @options[:language] if @options[:language] @options[:prefixes].each do |prefix, iri| ctx.set_mapping(prefix, iri) if prefix && iri end if @options[:prefixes] ctx end # Rename BNodes to uniquify them, if necessary if [:unique_bnodes] result = API.flatten(result, context, @options) end frame = RDF::Util::File.open_file(@options[:frame]) if @options[:frame].is_a?(String) if frame ||= @options[:frame] # Perform framing, if given a frame debug("writer") { "frame result"} result = API.frame(result, frame, @options) elsif context # Perform compaction, if we have a context debug("writer") { "compact result"} result = API.compact(result, context, @options) end @output.write(result.to_json(JSON_STATE)) end |
#write_prologue ⇒ void
This method returns an undefined value.
Necessary for streaming
140 141 142 143 144 145 146 147 |
# File 'lib/json/ld/writer.rb', line 140 def write_prologue case when @options[:stream] stream_prologue else super end end |
#write_statement(statement) ⇒ void
This method returns an undefined value.
Adds a statement to be serialized
115 116 117 118 119 120 121 122 123 |
# File 'lib/json/ld/writer.rb', line 115 def write_statement(statement) case when @options[:stream] stream_statement(statement) else # Add to repo and output in epilogue @repo.insert(statement) end end |
#write_triple(subject, predicate, object) ⇒ void
This method returns an undefined value.
Addes a triple to be serialized
133 134 135 |
# File 'lib/json/ld/writer.rb', line 133 def write_triple(subject, predicate, object) write_statement(Statement.new(subject, predicate, object)) end |