class RoadForest::TypeHandlers::RDFPost::Reader

c.f. www.lsrn.org/semweb/rdfpost.html

Attributes

current_state[RW]
lineno[R]
namespace_prefix[RW]
new_triple[RW]
object[RW]
object_lang[RW]
object_prefix[RW]
object_type[RW]
predicate[RW]
predicate_prefix[RW]
states[R]
subject[RW]
subject_prefix[RW]

Public Class Methods

new(input, options=nil, &block) click to toggle source
Calls superclass method
# File lib/roadforest/type-handlers/rdfpost.rb, line 216
def initialize(input, options=nil, &block)
  super(input, options||{}, &block)

  @lineno = 0
  @new_triple = false

  @states = {
    :rdf => St::RDF.new(self),
    :def_ns_decl => St::DefNsDecl.new(self),
    :ns_decl => St::NsDecl.new(self),
    :ns_decl_suffix => St::NsDeclSuffix.new(self),
    :skip_to_subject => St::SkipToSubject.new(self),
    :skip_to_subj_or_pred => St::SkipToSubjectOrPred.new(self),
    :subject => St::Subject.new(self),
    :subject_suffix => St::SubjectSuffix.new(self),
    :predicate => St::Predicate.new(self),
    :predicate_suffix => St::PredicateSuffix.new(self),
    :object => St::Object.new(self),
    :object_suffix => St::ObjectSuffix.new(self),
    :object_literal => St::ObjectLiteral.new(self),
    :type_or_lang => St::TypeOrLang.new(self)
  }

  @current_state = @states.fetch(:rdf)
end

Public Instance Methods

build_triple() click to toggle source
# File lib/roadforest/type-handlers/rdfpost.rb, line 263
def build_triple
  if @object.nil? or @predicate.nil? or @subject.nil?
    raise EOFError
  end

  object = @object
  if object.is_a? String
    object = ::RDF::Literal.new(object, :datatype => object_type, :language => object_lang)
  end
  @object_type = nil
  @object_lang = nil

  [@subject, @predicate, object]
end
consume_pair() click to toggle source
# File lib/roadforest/type-handlers/rdfpost.rb, line 282
def consume_pair
  @lineno += 1
end
read_triple() click to toggle source
# File lib/roadforest/type-handlers/rdfpost.rb, line 247
def read_triple
  if @lineno >= @input.length
    raise EOFError
  end

  while @lineno < @input.length
    @current_state.accept(*@input[@lineno])
    if @new_triple
      @new_triple = false
      return build_triple
    end
  end

  return build_triple
end
rewind() click to toggle source
# File lib/roadforest/type-handlers/rdfpost.rb, line 278
def rewind
  @lineno = 0
end