Method: RDF::Writer#write_statement
- Defined in:
- lib/rdf/writer.rb
#write_statement(statement) ⇒ self Also known as: insert_statement
Note:
logs error if attempting to write an invalid Statement or if canonicalizing a statement which cannot be canonicalized.
Add a statement to the writer. This will check to ensure that the statement is complete (no nil terms) and is valid, if the :validation option is set.
Additionally, it will de-duplicate BNode terms sharing a common identifier.
477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 |
# File 'lib/rdf/writer.rb', line 477 def write_statement(statement) statement = statement.canonicalize! if canonicalize? # Make sure BNodes in statement use unique identifiers if statement.node? statement.to_quad.map do |term| if term.is_a?(RDF::Node) term = term.original while term.original @nodes[term] ||= begin # Account for duplicated nodes @node_id_map[term.to_s] ||= term if !@node_id_map[term.to_s].equal?(term) # Rename node term.make_unique! @node_id_map[term.to_s] = term end end else term end end statement = RDF::Statement.from(statement.to_quad) end if statement.incomplete? log_error "Statement #{statement.inspect} is incomplete" elsif validate? && statement.invalid? log_error "Statement #{statement.inspect} is invalid" elsif respond_to?(:write_quad) write_quad(*statement.to_quad) else write_triple(*statement.to_triple) end self rescue ArgumentError => e log_error e. + " at #{e.backtrace.first}" end |