class RDF::Mongo::Conversion

Public Class Methods

from_mongo(value, value_type = :u, literal_extra = nil) click to toggle source

Translate an BSON positional reference to an RDF Value.

@return [RDF::Value]

# File lib/rdf/mongo.rb, line 90
def self.from_mongo(value, value_type = :u, literal_extra = nil)
  case value_type
  when :u
    RDF::URI.intern(value)
  when :ll
    RDF::Literal.new(value, language: literal_extra.to_sym)
  when :lt
    RDF::Literal.new(value, datatype: RDF::URI.intern(literal_extra))
  when :l
    RDF::Literal.new(value)
  when :n
    @nodes ||= {}
    @nodes[value] ||= RDF::Node.new(value)
  when :default
    nil # The default context returns as nil, although it's queried as false.
  end
end
to_mongo(value, place_in_statement) click to toggle source

Translate an RDF::Value type to BSON key/value pairs.

@param [RDF::Value, Symbol, false, nil] value

URI, BNode or Literal. May also be a Variable or Symbol to indicate
a pattern for a named graph, or `false` to indicate the default graph.
A value of `nil` indicates a pattern that matches any value.

@param [:subject, :predicate, :object, :graph_name] place_in_statement

Position within statement.

@return [Hash] BSON representation of the statement

# File lib/rdf/mongo.rb, line 45
def self.to_mongo(value, place_in_statement)
  case value
  when RDF::URI
    v, k = value.to_s, :u
  when RDF::Literal
    if value.has_language?
      v, k, ll = value.value, :ll, value.language.to_s
    elsif value.has_datatype?
      v, k, ll = value.value, :lt, value.datatype.to_s
    else
      v, k, ll = value.value, :l, nil
    end
  when RDF::Node
    v, k = value.id.to_s, :n
  when RDF::Query::Variable, Symbol
    # Returns anything other than the default context
    v, k = nil, {"$ne" => :default}
  when false
    # Used for the default context
    v, k = false, :default
  when nil
    v, k = nil, nil
  else
    v, k = value.to_s, :u
  end
  v = nil if v == ''

  case place_in_statement
  when :subject
    t, k1, lt = :st, :s, :sl
  when :predicate
    t, k1, lt = :pt, :p, :pl
  when :object
    t, k1, lt = :ot, :o, :ol
  when :graph_name
    t, k1, lt = :ct, :c, :cl
  end
  h = {k1 => v, t => k, lt => ll}
  h.delete_if {|kk,_| h[kk].nil?}
end