Module: RDF::Writable

Extended by:
Util::Aliasing::LateBound
Includes:
Util::Coercions
Included in:
Mutable, Writer
Defined in:
lib/rdf/mixin/writable.rb

Overview

Classes that include this module must implement the methods #insert_statement.

See Also:

Instance Method Summary collapse

Methods included from Util::Aliasing::LateBound

alias_method

Methods included from Util::Coercions

#coerce_statements

Instance Method Details

#<<(data) ⇒ self

Inserts RDF data into self.

Parameters:

Returns:

  • (self)


26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/rdf/mixin/writable.rb', line 26

def <<(data)
  case data
    when RDF::Reader
      insert_reader(data)
    when RDF::Graph
      insert_graph(data)
    when RDF::Enumerable
      insert_statements(data)
    when RDF::Statement
      insert_statement(data)
    else case
      when data.respond_to?(:to_rdf) && !data.equal?(rdf = data.to_rdf)
        self << rdf
      else
        insert_statement(Statement.from(data))
    end
  end

  return self
end

#insert(*statements) ⇒ self #insert(statements) ⇒ self Also known as: insert!

Note:

using splat argument syntax with excessive arguments provided

Inserts RDF statements into self.

significantly affects performance. Use Enumerator form for large numbers of statements.

Overloads:

  • #insert(*statements) ⇒ self

    Parameters:

    Returns:

    • (self)

    Raises:

    • (ArgumentError)

      on an attempt to insert an embedded statement when it is not supported

  • #insert(statements) ⇒ self

    Parameters:

    Returns:

    • (self)

    Raises:

    • (ArgumentError)

      on an attempt to insert an embedded statement when it is not supported



63
64
65
66
67
# File 'lib/rdf/mixin/writable.rb', line 63

def insert(*statements)
  coerce_statements(statements) { |value| insert_statements value }

  return self
end

#insert_graph(graph) (protected)

This method returns an undefined value.

Inserts the given RDF graph into the underlying storage or output stream.

Defaults to passing the graph to the #insert_statements method.

Subclasses of Repository may wish to override this method in case their underlying storage architecture is graph-centric rather than statement-oriented.

Subclasses of RDF::Writer may wish to override this method if the output format they implement supports named graphs, in which case implementing this method may help in producing prettier and more concise output.

Parameters:



106
107
108
# File 'lib/rdf/mixin/writable.rb', line 106

def insert_graph(graph)
  insert_statements(graph)
end

#insert_reader(reader) (protected)

This method returns an undefined value.

Inserts statements from the given RDF reader into the underlying storage or output stream.

Defaults to passing the reader to the #insert_statements method.

Subclasses of Repository may wish to override this method in case their underlying storage can efficiently import RDF data directly in particular serialization formats, thus avoiding the intermediate parsing overhead.

Parameters:

Since:

  • 0.2.3



85
86
87
# File 'lib/rdf/mixin/writable.rb', line 85

def insert_reader(reader)
  insert_statements(reader)
end

#insert_statement(statement) (protected)

This method is abstract.

This method returns an undefined value.

Inserts an RDF statement into the underlying storage or output stream.

Subclasses of Repository must implement this method, except if they are immutable.

Subclasses of RDF::Writer must implement this method.

Parameters:

Raises:

  • (ArgumentError)

    on an attempt to insert an embedded statement when it is not supported



153
154
155
# File 'lib/rdf/mixin/writable.rb', line 153

def insert_statement(statement)
  raise NotImplementedError.new("#{self.class}#insert_statement")
end

#insert_statements(statements) (protected)

This method returns an undefined value.

Inserts the given RDF statements into the underlying storage or output stream.

Defaults to invoking #insert_statement for each given statement.

Subclasses of Repository may wish to override this method if they are capable of more efficiently inserting multiple statements at once.

Subclasses of RDF::Writer don't generally need to implement this method.

Parameters:

Raises:

  • (ArgumentError)

    on an attempt to insert an embedded statement when it is not supported

Since:

  • 0.1.6



127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/rdf/mixin/writable.rb', line 127

def insert_statements(statements)
  each = statements.respond_to?(:each_statement) ? :each_statement : :each
  statements.__send__(each) do |statement|
    # FIXME: quoted triples are now deprecated
    if statement.embedded? && respond_to?(:supports?) && !(supports?(:quoted_triples) || supports?(:rdf_full))
      raise ArgumentError, "Writable does not support quoted triples"
    end
    if statement.object && statement.object.literal? && statement.object.direction? && respond_to?(:supports?) && !supports?(:base_direction)
      raise ArgumentError, "Writable does not support directional languaged-tagged strings"
    end
    insert_statement(statement)
  end
end

#writable?Boolean

Returns true if self is writable.

Returns:

  • (Boolean)

    true or false

See Also:



17
18
19
# File 'lib/rdf/mixin/writable.rb', line 17

def writable?
  !frozen?
end