Module: RDF::Oxigraph::Conversion

Defined in:
lib/rdf/oxigraph/conversion.rb

Overview

Maps between RDF.rb terms and the native extension's tagged-tuple wire format.

IRI:        ["uri",   "<iri>"]
blank node: ["bnode", "<id>"]
literal:    ["lit",   "<value>", <datatype-iri or nil>, <lang or nil>]
nil (e.g. default graph): nil

Class Method Summary collapse

Class Method Details

.deserialize(tuple) ⇒ Object

tagged tuple (or nil) -> RDF.rb term.



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/rdf/oxigraph/conversion.rb', line 33

def deserialize(tuple)
  return nil if tuple.nil?

  case tuple[0]
  when "uri"
    RDF::URI.new(tuple[1])
  when "bnode"
    RDF::Node.new(tuple[1])
  when "lit"
    value, datatype, lang = tuple[1], tuple[2], tuple[3]
    if lang && !lang.empty?
      RDF::Literal.new(value, language: lang.to_sym)
    elsif datatype && !datatype.empty?
      RDF::Literal.new(value, datatype: RDF::URI.new(datatype))
    else
      RDF::Literal.new(value)
    end
  else
    raise ArgumentError, "cannot deserialize tuple: #{tuple.inspect}"
  end
end

.deserialize_statement(quad) ⇒ Object

[s, p, o, g] tagged tuples -> RDF::Statement.



66
67
68
69
70
71
72
73
# File 'lib/rdf/oxigraph/conversion.rb', line 66

def deserialize_statement(quad)
  RDF::Statement.new(
    deserialize(quad[0]),
    deserialize(quad[1]),
    deserialize(quad[2]),
    graph_name: deserialize(quad[3])
  )
end

.serialize(term) ⇒ Object

RDF.rb term -> tagged tuple (or nil).



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/rdf/oxigraph/conversion.rb', line 13

def serialize(term)
  case term
  when nil
    nil
  when RDF::URI
    ["uri", term.to_s]
  when RDF::Node
    ["bnode", term.id.to_s]
  when RDF::Literal
    if term.language? && !term.language.to_s.empty?
      ["lit", term.value, nil, term.language.to_s]
    else
      ["lit", term.value, term.datatype.to_s, nil]
    end
  else
    raise ArgumentError, "cannot serialize term: #{term.inspect}"
  end
end

.serialize_statement(statement) ⇒ Object

RDF::Statement -> [s, p, o, g] tagged tuples.



56
57
58
59
60
61
62
63
# File 'lib/rdf/oxigraph/conversion.rb', line 56

def serialize_statement(statement)
  [
    serialize(statement.subject),
    serialize(statement.predicate),
    serialize(statement.object),
    statement.graph_name ? serialize(statement.graph_name) : nil
  ]
end