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
-
.deserialize(tuple) ⇒ Object
tagged tuple (or nil) -> RDF.rb term.
-
.deserialize_statement(quad) ⇒ Object
[s, p, o, g] tagged tuples -> RDF::Statement.
-
.serialize(term) ⇒ Object
RDF.rb term -> tagged tuple (or nil).
-
.serialize_statement(statement) ⇒ Object
RDF::Statement -> [s, p, o, g] tagged tuples.
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 |