Class: JSON::LD::Writer
- Inherits:
-
RDF::Writer
- Object
- RDF::Writer
- JSON::LD::Writer
- Includes:
- StreamingWriter, Utils, RDF::Util::Logger
- 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
Class Attribute Summary collapse
-
.black_list ⇒ Object
readonly
Returns the value of attribute black_list.
-
.white_list ⇒ Object
readonly
Returns the value of attribute white_list.
Instance Attribute Summary collapse
-
#context ⇒ Context
readonly
Context used to load and administer contexts.
-
#graph ⇒ RDF::Graph
readonly
Graph of statements serialized.
Class Method Summary collapse
-
.accept?(accept_params) {|accept_params| ... } ⇒ Boolean
Use parameters from accept-params to determine if the parameters are acceptable to invoke this writer.
-
.default_context ⇒ String
Returns default context used for compacted profile without an explicit context URL.
-
.default_context=(url) ⇒ Object
Sets default context used for compacted profile without an explicit context URL.
-
.options ⇒ Object
JSON-LD Writer options.
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_quad(subject, predicate, object, graph_name) ⇒ void
Outputs the N-Quads representation of a statement.
-
#write_triple(subject, predicate, object) ⇒ void
abstract
Addes a triple to be serialized.
Methods included from Utils
#add_value, #as_array, #as_resource, #blank_node?, #compare_values, #graph?, #has_property, #has_value, #index?, #list?, #node?, #node_or_ref?, #node_reference?, #simple_graph?, #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.
232 233 234 235 236 237 238 239 240 241 242 243 244 245 |
# File 'lib/json/ld/writer.rb', line 232 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 if block_given? case block.arity when 0 then instance_eval(&block) else block.call(self) end end end end |
Class Attribute Details
.black_list ⇒ Object (readonly)
Returns the value of attribute black_list.
171 172 173 |
# File 'lib/json/ld/writer.rb', line 171 def black_list @black_list end |
.white_list ⇒ Object (readonly)
Returns the value of attribute white_list.
170 171 172 |
# File 'lib/json/ld/writer.rb', line 170 def white_list @white_list end |
Instance Attribute Details
#context ⇒ Context (readonly)
Returns context used to load and administer contexts.
70 71 72 |
# File 'lib/json/ld/writer.rb', line 70 def context @context end |
#graph ⇒ RDF::Graph (readonly)
Returns Graph of statements serialized.
66 67 68 |
# File 'lib/json/ld/writer.rb', line 66 def graph @graph end |
Class Method Details
.accept?(accept_params) {|accept_params| ... } ⇒ Boolean
Use parameters from accept-params to determine if the parameters are acceptable to invoke this writer. The ‘accept_params` will subsequently be provided to the writer instance.
181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/json/ld/writer.rb', line 181 def accept?(accept_params) # Profiles that aren't specific IANA relations represent the URL # of a context or frame that may be subject to black- or white-listing profile = accept_params[:profile].to_s.split(/\s+/) if block_given? yield(accept_params) else true end end |
.default_context ⇒ String
Returns default context used for compacted profile without an explicit context URL
196 |
# File 'lib/json/ld/writer.rb', line 196 def default_context; @default_context || JSON::LD::DEFAULT_CONTEXT; end |
.default_context=(url) ⇒ Object
Sets default context used for compacted profile without an explicit context URL
201 |
# File 'lib/json/ld/writer.rb', line 201 def default_context=(url); @default_context = url; end |
.options ⇒ Object
JSON-LD Writer options
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/json/ld/writer.rb', line 75 def self. super + [ RDF::CLI::Option.new( symbol: :compactArrays, datatype: TrueClass, default: true, control: :checkbox, on: ["--[no-]compact-arrays"], description: "Replaces arrays with just one element with that element during compaction. Default is `true` use --no-compact-arrays to disable.") {|arg| arg}, RDF::CLI::Option.new( symbol: :compactToRelative, datatype: TrueClass, default: true, control: :checkbox, on: ["--[no-]compact-to-relative"], description: "Creates document relative IRIs when compacting, if `true`, otherwise leaves expanded. Default is `true` use --no-compact-to-relative to disable.") {|arg| arg}, RDF::CLI::Option.new( symbol: :context, datatype: RDF::URI, control: :url2, on: ["--context CONTEXT"], description: "Context to use when compacting.") {|arg| RDF::URI(arg)}, RDF::CLI::Option.new( symbol: :embed, datatype: %w(@always @once @never), default: '@once', control: :select, on: ["--embed EMBED"], description: "How to embed matched objects (@once).") {|arg| RDF::URI(arg)}, RDF::CLI::Option.new( symbol: :explicit, datatype: TrueClass, control: :checkbox, on: ["--[no-]explicit"], description: "Only include explicitly declared properties in output (false)") {|arg| arg}, RDF::CLI::Option.new( symbol: :lowercaseLanguage, datatype: TrueClass, control: :checkbox, on: ["--[no-]lowercase-language"], description: "By default, language tags are left as is. To normalize to lowercase, set this option to `true`."), RDF::CLI::Option.new( symbol: :omitDefault, datatype: TrueClass, control: :checkbox, on: ["--[no-]omitDefault"], description: "Omit missing properties from output (false)") {|arg| arg}, RDF::CLI::Option.new( symbol: :ordered, datatype: TrueClass, control: :checkbox, on: ["--[no-]ordered"], description: "Order object member processing lexographically.") {|arg| arg}, RDF::CLI::Option.new( symbol: :processingMode, datatype: %w(json-ld-1.0 json-ld-1.1), control: :radio, on: ["--processingMode MODE", %w(json-ld-1.0 json-ld-1.1)], description: "Set Processing Mode (json-ld-1.0 or json-ld-1.1)"), RDF::CLI::Option.new( symbol: :rdfDirection, datatype: %w(i18n-datatype compound-literal), default: 'null', control: :select, on: ["--rdf-direction DIR", %w(i18n-datatype compound-literal)], description: "How to serialize literal direction (i18n-datatype compound-literal)") {|arg| RDF::URI(arg)}, RDF::CLI::Option.new( symbol: :requireAll, datatype: TrueClass, default: true, control: :checkbox, on: ["--[no-]require-all"], description: "Require all properties to match (true). Default is `true` use --no-require-all to disable.") {|arg| arg}, RDF::CLI::Option.new( symbol: :stream, datatype: TrueClass, control: :checkbox, on: ["--[no-]stream"], description: "Do not attempt to optimize graph presentation, suitable for streaming large graphs.") {|arg| arg}, RDF::CLI::Option.new( symbol: :useNativeTypes, datatype: TrueClass, control: :checkbox, on: ["--[no-]use-native-types"], description: "Use native JSON values in value objects.") {|arg| arg}, RDF::CLI::Option.new( symbol: :useRdfType, datatype: TrueClass, control: :checkbox, on: ["--[no-]use-rdf-type"], description: "Treat `rdf:type` like a normal property instead of using `@type`.") {|arg| arg}, ] 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
290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 |
# File 'lib/json/ld/writer.rb', line 290 def write_epilogue if @options[:stream] stream_epilogue else log_debug("writer") { "serialize #{@repo.count} statements, #{@options.inspect}"} result = API.fromRdf(@repo, **@options) # Some options may be indicated from accept parameters profile = @options.fetch(:accept_params, {}).fetch(:profile, "").split(' ') links = LinkHeader.parse(@options[:link]) @options[:context] ||= links.find_link(['rel', JSON_LD_NS+"context"]).href rescue nil @options[:context] ||= Writer.default_context if profile.include?(JSON_LD_NS+"compacted") @options[:frame] ||= links.find_link(['rel', JSON_LD_NS+"frame"]).href rescue nil # If we were provided a context, or prefixes, use them to compact the output 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 if frame = @options[:frame] # Perform framing, if given a frame log_debug("writer") { "frame result"} result = API.frame(result, frame, **@options) elsif context # Perform compaction, if we have a context log_debug("writer") { "compact result"} result = API.compact(result, context, **@options) end @output.write(result.to_json(JSON_STATE)) end super end |
#write_prologue ⇒ void
This method returns an undefined value.
Necessary for streaming
277 278 279 280 |
# File 'lib/json/ld/writer.rb', line 277 def write_prologue stream_prologue if @options[:stream] super end |
#write_quad(subject, predicate, object, graph_name) ⇒ void
This method returns an undefined value.
Outputs the N-Quads representation of a statement.
265 266 267 268 269 270 271 272 |
# File 'lib/json/ld/writer.rb', line 265 def write_quad(subject, predicate, object, graph_name) statement = RDF::Statement.new(subject, predicate, object, graph_name: graph_name) if @options[:stream] stream_statement(statement) else @repo.insert(statement) end end |
#write_triple(subject, predicate, object) ⇒ void
This method returns an undefined value.
Addes a triple to be serialized
254 255 256 |
# File 'lib/json/ld/writer.rb', line 254 def write_triple(subject, predicate, object) write_quad(subject, predicate, object, nil) end |