class RDF::Raptor::FFI::V1::Statement

@see librdf.org/raptor/api-1.4/raptor-section-triples.html

Attributes

graph_name[RW]

@return [RDF::Resource]

id[RW]

@return [Object]

Public Class Methods

new(ptr = nil, factory = nil) click to toggle source

@param [FFI::Pointer] ptr @param [#create_node] factory

Calls superclass method
# File lib/rdf/raptor/ffi/v1/statement.rb, line 18
def initialize(ptr = nil, factory = nil)
  super(ptr)
  @factory = factory if factory
end
release(ptr) click to toggle source

Releases ‘libraptor` memory associated with this structure.

@param [FFI::Pointer] ptr @return [void]

# File lib/rdf/raptor/ffi/v1/statement.rb, line 28
def self.release(ptr)
  raptor_free_memory(ptr) unless ptr.null?
end

Public Instance Methods

free() click to toggle source

Releases ‘libraptor` memory associated with this structure.

@return [void]

# File lib/rdf/raptor/ffi/v1/statement.rb, line 197
def free
  if self[:subject_type].nonzero? && !(self[:subject].null?)
    self[:subject] = case self[:subject_type]
      when RAPTOR_IDENTIFIER_TYPE_ANONYMOUS
        V1.raptor_free_string(self[:subject])
      when RAPTOR_IDENTIFIER_TYPE_RESOURCE
        V1.raptor_free_uri(self[:subject])
    end
    self[:subject_type] = RAPTOR_IDENTIFIER_TYPE_UNKNOWN
  end

  if self[:predicate_type].nonzero? && !(self[:predicate].null?)
    self[:predicate] = V1.raptor_free_uri(self[:predicate])
    self[:predicate_type] = RAPTOR_IDENTIFIER_TYPE_UNKNOWN
  end

  if self[:object_type].nonzero? && !(self[:object].null?)
    self[:object] = case self[:object_type]
      when RAPTOR_IDENTIFIER_TYPE_ANONYMOUS
        V1.raptor_free_string(self[:object])
      when RAPTOR_IDENTIFIER_TYPE_RESOURCE
        V1.raptor_free_uri(self[:object])
      when RAPTOR_IDENTIFIER_TYPE_LITERAL
        V1.raptor_free_string(self[:object])
        unless self[:object_literal_datatype].null?
          self[:object_literal_datatype] = V1.raptor_free_uri(self[:object_literal_datatype])
        end
        unless self[:object_literal_language].null?
          self[:object_literal_language] = V1.raptor_free_string(self[:object_literal_language])
        end
    end
    self[:object_type] = RAPTOR_IDENTIFIER_TYPE_UNKNOWN
  end
end
Also aliased as: release
object() click to toggle source

@return [RDF::Term]

# File lib/rdf/raptor/ffi/v1/statement.rb, line 111
def object
  @object ||= case self[:object_type]
    when RAPTOR_IDENTIFIER_TYPE_ANONYMOUS
      @factory.create_node(self[:object].read_string)
    when RAPTOR_IDENTIFIER_TYPE_RESOURCE
      @factory.create_uri(V1.raptor_uri_as_string(self[:object]))
    when RAPTOR_IDENTIFIER_TYPE_LITERAL
      str = self[:object].read_string.unpack('U*').pack('U*')
      case
        when !self[:object_literal_language].null?
          RDF::Literal.new(str, language: self[:object_literal_language].read_string)
        when !self[:object_literal_datatype].null?
          RDF::Literal.new(str, datatype: V1.raptor_uri_as_string(self[:object_literal_datatype]))
        else
          RDF::Literal.new(str)
      end
  end
end
object=(value) click to toggle source

Sets the object term from an ‘RDF::Term`.

The value must be one of ‘RDF::Resource` or `RDF::Literal`.

@param [RDF::Term] value @return [void]

# File lib/rdf/raptor/ffi/v1/statement.rb, line 137
def object=(value)
  @object = nil
  case value
    when RDF::Node
      self[:object_type] = RAPTOR_IDENTIFIER_TYPE_ANONYMOUS
      self[:object] = V1.raptor_new_string(value.id.to_s)
    when RDF::URI
      self[:object_type] = RAPTOR_IDENTIFIER_TYPE_RESOURCE
      self[:object] = V1.raptor_new_uri(value.to_s)
    when RDF::Literal
      self[:object_type] = RAPTOR_IDENTIFIER_TYPE_LITERAL
      self[:object] = V1.raptor_new_string(value.value)
      self[:object_literal_datatype] = V1.raptor_new_uri(value.datatype.to_s) if value.datatype
      self[:object_literal_language] = V1.raptor_new_string(value.language.to_s) if value.language?
    else
      raise ArgumentError, "object term must be an RDF::Node, RDF::URI, or RDF::Literal"
  end
  @object = value
end
object_as_string() click to toggle source

@return [String]

# File lib/rdf/raptor/ffi/v1/statement.rb, line 159
def object_as_string
  V1.raptor_statement_part_as_string(
    self[:object],
    self[:object_type],
    self[:object_literal_datatype],
    self[:object_literal_language])
end
predicate() click to toggle source

@return [RDF::URI]

# File lib/rdf/raptor/ffi/v1/statement.rb, line 80
def predicate
  @predicate ||= case self[:predicate_type]
    when RAPTOR_IDENTIFIER_TYPE_RESOURCE
      RDF::URI.intern(V1.raptor_uri_as_string(self[:predicate]))
  end
end
predicate=(uri) click to toggle source

Sets the predicate term from an ‘RDF::URI`.

@param [RDF::URI] uri @return [void]

# File lib/rdf/raptor/ffi/v1/statement.rb, line 92
def predicate=(uri)
  @predicate = nil
  raise ArgumentError, "predicate term must be an RDF::URI" unless uri.is_a?(RDF::URI)
  self[:predicate_type] = RAPTOR_IDENTIFIER_TYPE_RESOURCE
  self[:predicate] = V1.raptor_new_uri(uri.to_s)
  @predicate = uri
end
predicate_as_string() click to toggle source

@return [String]

# File lib/rdf/raptor/ffi/v1/statement.rb, line 102
def predicate_as_string
  V1.raptor_statement_part_as_string(
    self[:predicate],
    self[:predicate_type],
    nil, nil)
end
release()
Alias for: free
reset!() click to toggle source

@return [void]

# File lib/rdf/raptor/ffi/v1/statement.rb, line 189
def reset!
  @subject = @predicate = @object = @graph_name = nil
end
subject() click to toggle source

@return [RDF::Resource]

# File lib/rdf/raptor/ffi/v1/statement.rb, line 40
def subject
  @subject ||= case self[:subject_type]
    when RAPTOR_IDENTIFIER_TYPE_ANONYMOUS
      @factory.create_node(self[:subject].read_string)
    when RAPTOR_IDENTIFIER_TYPE_RESOURCE
      @factory.create_uri(V1.raptor_uri_as_string(self[:subject]))
  end
end
subject=(resource) click to toggle source

Sets the subject term from an ‘RDF::Resource`.

@param [RDF::Resource] resource @return [void]

# File lib/rdf/raptor/ffi/v1/statement.rb, line 54
def subject=(resource)
  @subject = nil
  case resource
    when RDF::Node
      self[:subject_type] = RAPTOR_IDENTIFIER_TYPE_ANONYMOUS
      self[:subject] = V1.raptor_new_string(resource.id.to_s)
    when RDF::URI
      self[:subject_type] = RAPTOR_IDENTIFIER_TYPE_RESOURCE
      self[:subject] = V1.raptor_new_uri(resource.to_s)
    else
      raise ArgumentError, "subject term must be an RDF::Node or RDF::URI"
  end
  @subject = resource
end
subject_as_string() click to toggle source

@return [String]

# File lib/rdf/raptor/ffi/v1/statement.rb, line 71
def subject_as_string
  V1.raptor_statement_part_as_string(
    self[:subject],
    self[:subject_type],
    nil, nil)
end
to_quad() click to toggle source

@return [Array(RDF::Resource, RDF::URI, RDF::Term, nil)] @see RDF::Statement#to_quad

# File lib/rdf/raptor/ffi/v1/statement.rb, line 177
def to_quad
  [subject, predicate, object, graph_name]
end
to_rdf() click to toggle source

@return [RDF::Statement]

# File lib/rdf/raptor/ffi/v1/statement.rb, line 183
def to_rdf
  RDF::Statement.new(subject, predicate, object, graph_name: graph_name)
end
to_triple() click to toggle source

@return [Array(RDF::Resource, RDF::URI, RDF::Term)] @see RDF::Statement#to_triple

# File lib/rdf/raptor/ffi/v1/statement.rb, line 170
def to_triple
  [subject, predicate, object]
end