lib/rdf/json/writer.rb in rdf-json-0.0.0 vs lib/rdf/json/writer.rb in rdf-json-0.0.1
- old
+ new
@@ -1,11 +1,90 @@
module RDF::JSON
##
# RDF/JSON serializer.
#
+ # @example Obtaining an RDF/JSON writer class
+ # RDF::Writer.for(:json) #=> RDF::JSON::Writer
+ # RDF::Writer.for("spec/data/test.json")
+ # RDF::Writer.for(:file_name => "spec/data/test.json")
+ # RDF::Writer.for(:file_extension => "json")
+ # RDF::Writer.for(:content_type => "application/json")
+ #
+ # @example Serializing RDF statements into an RDF/JSON file
+ # RDF::JSON::Writer.open("spec/data/test.json") do |writer|
+ # graph.each_statement do |statement|
+ # writer << statement
+ # end
+ # end
+ #
+ # @example Serializing RDF statements into an RDF/JSON string
+ # RDF::JSON::Writer.buffer do |writer|
+ # graph.each_statement do |statement|
+ # writer << statement
+ # end
+ # end
+ #
# @see http://n2.talis.com/wiki/RDF_JSON_Specification
class Writer < RDF::Writer
format RDF::JSON::Format
- # TODO
- end
-end
+ ##
+ # Stores the RDF/JSON representation of a triple.
+ #
+ # @param [RDF::Resource] subject
+ # @param [RDF::URI] predicate
+ # @param [RDF::Value] object
+ # @return [void]
+ # @see #write_epilogue
+ def write_triple(subject, predicate, object)
+ s = subject.to_s
+ p = predicate.to_s
+ o = object.is_a?(RDF::Value) ? object : RDF::Literal.new(object)
+ @json ||= {}
+ @json[s] ||= {}
+ @json[s][p] ||= []
+ @json[s][p] << o.to_rdf_json
+ end
+
+ ##
+ # Outputs the RDF/JSON representation of all stored triples.
+ #
+ # @return [void]
+ # @see #write_triple
+ def write_epilogue
+ puts @json.to_json
+ end
+
+ ##
+ # Returns the RDF/JSON representation of a blank node.
+ #
+ # @param [RDF::Node] value
+ # @param [Hash{Symbol => Object}] options
+ # @return [String]
+ def format_node(value, options = {})
+ value.to_json
+ end
+
+ ##
+ # Returns the RDF/JSON representation of a URI reference.
+ #
+ # @param [RDF::URI] value
+ # @param [Hash{Symbol => Object}] options
+ # @return [String]
+ def format_uri(value, options = {})
+ value.to_json
+ end
+
+ ##
+ # Returns the RDF/JSON representation of a literal.
+ #
+ # @param [RDF::Literal, String, #to_s] value
+ # @param [Hash{Symbol => Object}] options
+ # @return [String]
+ def format_literal(value, options = {})
+ case value
+ when RDF::Literal then value.to_json
+ else RDF::Literal.new(value).to_json
+ end
+ end
+ end # class Writer
+end # module RDF::JSON