Sha256: e2a236efaa663c87e436737870fb493bdb0128c4d5c20080adebec8f595d9532
Contents?: true
Size: 1.92 KB
Versions: 3
Compression:
Stored size: 1.92 KB
Contents
require 'open-uri' module JSON::LD ## # A JSON-LD parser in Ruby. # # @see http://json-ld.org/spec/ED/20110507/ # @author [Gregg Kellogg](http://greggkellogg.net/) class Reader < RDF::Reader format Format ## # Override normal symbol generation def self.to_sym :jsonld end ## # Initializes the RDF/JSON reader instance. # # @param [IO, File, String] input # @param [Hash{Symbol => Object}] options # any additional options (see `RDF::Reader#initialize`) # @yield [reader] `self` # @yieldparam [RDF::Reader] reader # @yieldreturn [void] ignored # @raise [RDF::ReaderError] if the JSON document cannot be loaded def initialize(input = $stdin, options = {}, &block) options[:base_uri] ||= options[:base] super do @options[:base] ||= base_uri.to_s if base_uri begin @doc = JSON.load(input) rescue JSON::ParserError => e raise RDF::ReaderError, "Failed to parse input document: #{e.message}" if validate? @doc = JSON.parse("{}") end if block_given? case block.arity when 0 then instance_eval(&block) else block.call(self) end end end end ## # @private # @see RDF::Reader#each_statement def each_statement(&block) JSON::LD::API.toRDF(@doc, @options[:context], @options).each do |statement| # If RDF version is 1.0, fold literals with xsd:string to be just simple literals statement.object.datatype = nil if RDF::VERSION.to_s < "1.1" && statement.object.literal? && statement.object.datatype == RDF::XSD.string block.call(statement) end end ## # @private # @see RDF::Reader#each_triple def each_triple(&block) each_statement do |statement| block.call(*statement.to_triple) end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
json-ld-1.0.5 | lib/json/ld/reader.rb |
json-ld-1.0.4 | lib/json/ld/reader.rb |
json-ld-1.0.3 | lib/json/ld/reader.rb |