rdf-json 0.0.0 → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +11 -8
- data/VERSION +1 -1
- data/lib/rdf/json.rb +27 -23
- data/lib/rdf/json/extensions.rb +137 -0
- data/lib/rdf/json/format.rb +9 -2
- data/lib/rdf/json/reader.rb +18 -3
- data/lib/rdf/json/version.rb +5 -1
- data/lib/rdf/json/writer.rb +82 -3
- metadata +4 -3
data/README
CHANGED
@@ -1,19 +1,19 @@
|
|
1
|
-
RDF
|
2
|
-
|
1
|
+
RDF/JSON Support for RDF.rb
|
2
|
+
===========================
|
3
3
|
|
4
|
-
This is an [RDF.rb]
|
5
|
-
|
4
|
+
This is an [RDF.rb][] plugin that adds support for parsing/serializing the
|
5
|
+
[RDF/JSON][] serialization format.
|
6
6
|
|
7
7
|
* <http://github.com/bendiken/rdf-json>
|
8
8
|
|
9
|
-
### About RDF/JSON
|
10
|
-
|
11
|
-
* <http://n2.talis.com/wiki/RDF_JSON_Specification>
|
12
|
-
|
13
9
|
Documentation
|
14
10
|
-------------
|
15
11
|
|
16
12
|
* {RDF::JSON}
|
13
|
+
* {RDF::JSON::Extensions}
|
14
|
+
* {RDF::JSON::Format}
|
15
|
+
* {RDF::JSON::Reader}
|
16
|
+
* {RDF::JSON::Writer}
|
17
17
|
|
18
18
|
Dependencies
|
19
19
|
------------
|
@@ -51,3 +51,6 @@ License
|
|
51
51
|
|
52
52
|
`RDF::JSON` is free and unencumbered public domain software. For more
|
53
53
|
information, see <http://unlicense.org/> or the accompanying UNLICENSE file.
|
54
|
+
|
55
|
+
[RDF.rb]: http://rdf.rubyforge.org/
|
56
|
+
[RDF/JSON]: http://n2.talis.com/wiki/RDF_JSON_Specification
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.1
|
data/lib/rdf/json.rb
CHANGED
@@ -4,39 +4,43 @@ module RDF
|
|
4
4
|
##
|
5
5
|
# **`RDF::JSON`** is an RDF/JSON plugin for RDF.rb.
|
6
6
|
#
|
7
|
-
# Dependencies
|
8
|
-
# ------------
|
9
|
-
#
|
10
|
-
# * [RDF.rb](http://gemcutter.org/gems/rdf) (>= 0.0.9)
|
11
|
-
# * [JSON](http://gemcutter.org/gems/json_pure) (>= 1.2.0)
|
12
|
-
#
|
13
|
-
# Installation
|
14
|
-
# ------------
|
15
|
-
#
|
16
|
-
# The recommended installation method is via RubyGems. To install the latest
|
17
|
-
# official release from Gemcutter, do:
|
18
|
-
#
|
19
|
-
# % [sudo] gem install rdf-json
|
20
|
-
#
|
21
|
-
# Documentation
|
22
|
-
# -------------
|
23
|
-
#
|
24
|
-
# * {RDF::JSON::Format}
|
25
|
-
# * {RDF::JSON::Reader}
|
26
|
-
# * {RDF::JSON::Writer}
|
27
|
-
#
|
28
7
|
# @example Requiring the `RDF::JSON` module
|
29
8
|
# require 'rdf/json'
|
30
9
|
#
|
10
|
+
# @example Serializing RDF values into RDF/JSON strings
|
11
|
+
# RDF::Node.new('foobar').to_json
|
12
|
+
# RDF::URI.new("http://rdf.rubyforge.org/").to_json
|
13
|
+
# RDF::Literal.new("Hello, world!").to_json
|
14
|
+
# RDF::Literal.new("Hello, world!", :language => 'en-US').to_json
|
15
|
+
# RDF::Literal.new(3.1415).to_json
|
16
|
+
# RDF::Literal.new('true', :datatype => RDF::XSD.boolean).to_json
|
17
|
+
# RDF::Statement.new(s, p, o).to_json
|
18
|
+
#
|
19
|
+
# @example Parsing RDF statements from an RDF/JSON file
|
20
|
+
# RDF::JSON::Reader.open("spec/data/test.json") do |reader|
|
21
|
+
# reader.each_statement do |statement|
|
22
|
+
# puts statement.inspect
|
23
|
+
# end
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# @example Serializing RDF statements into an RDF/JSON file
|
27
|
+
# RDF::JSON::Writer.open("spec/data/test.json") do |writer|
|
28
|
+
# graph.each_statement do |statement|
|
29
|
+
# writer << statement
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
#
|
31
33
|
# @see http://rdf.rubyforge.org/
|
32
34
|
# @see http://n2.talis.com/wiki/RDF_JSON_Specification
|
33
35
|
# @see http://en.wikipedia.org/wiki/JSON
|
34
36
|
#
|
35
37
|
# @author [Arto Bendiken](http://ar.to/)
|
36
38
|
module JSON
|
39
|
+
require 'json'
|
40
|
+
require 'rdf/json/extensions'
|
37
41
|
require 'rdf/json/format'
|
38
42
|
autoload :Reader, 'rdf/json/reader'
|
39
43
|
autoload :Writer, 'rdf/json/writer'
|
40
44
|
autoload :VERSION, 'rdf/json/version'
|
41
|
-
end
|
42
|
-
end
|
45
|
+
end # module JSON
|
46
|
+
end # module RDF
|
@@ -0,0 +1,137 @@
|
|
1
|
+
module RDF::JSON
|
2
|
+
##
|
3
|
+
# RDF/JSON extensions for [RDF.rb](http://rdf.rubyforge.org/) core classes
|
4
|
+
# and mixins.
|
5
|
+
#
|
6
|
+
# Classes are extended with two new instance methods:
|
7
|
+
#
|
8
|
+
# * `#to_rdf_json` returns the RDF/JSON representation as a `Hash` object.
|
9
|
+
# * `#to_json` returns the serialized RDF/JSON representation as a string.
|
10
|
+
#
|
11
|
+
# @example Serializing blank nodes into RDF/JSON format
|
12
|
+
# RDF::Node.new(id).to_json
|
13
|
+
#
|
14
|
+
# @example Serializing URI references into RDF/JSON format
|
15
|
+
# RDF::URI.new("http://rdf.rubyforge.org/").to_json
|
16
|
+
#
|
17
|
+
# @example Serializing plain literals into RDF/JSON format
|
18
|
+
# RDF::Literal.new("Hello, world!").to_json
|
19
|
+
#
|
20
|
+
# @example Serializing language-tagged literals into RDF/JSON format
|
21
|
+
# RDF::Literal.new("Hello, world!", :language => 'en-US').to_json
|
22
|
+
#
|
23
|
+
# @example Serializing datatyped literals into RDF/JSON format
|
24
|
+
# RDF::Literal.new(3.1415).to_json
|
25
|
+
# RDF::Literal.new('true', :datatype => RDF::XSD.boolean).to_json
|
26
|
+
#
|
27
|
+
# @example Serializing statements into RDF/JSON format
|
28
|
+
# RDF::Statement.new(s, p, o).to_json
|
29
|
+
#
|
30
|
+
# @example Serializing enumerables into RDF/JSON format
|
31
|
+
# [RDF::Statement.new(s, p, o)].extend(RDF::Enumerable).to_json
|
32
|
+
#
|
33
|
+
module Extensions
|
34
|
+
##
|
35
|
+
# RDF/JSON extensions for `RDF::Value`.
|
36
|
+
module Value
|
37
|
+
##
|
38
|
+
# Returns the serialized RDF/JSON representation of this value.
|
39
|
+
#
|
40
|
+
# @return [String]
|
41
|
+
def to_json
|
42
|
+
# Any RDF/JSON-compatible class must implement `#to_rdf_json`:
|
43
|
+
to_rdf_json.to_json
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
##
|
48
|
+
# RDF/JSON extensions for `RDF::Node`.
|
49
|
+
module Node
|
50
|
+
##
|
51
|
+
# Returns the RDF/JSON representation of this blank node.
|
52
|
+
#
|
53
|
+
# @return [Hash]
|
54
|
+
def to_rdf_json
|
55
|
+
{:type => :bnode, :value => to_s}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
##
|
60
|
+
# RDF/JSON extensions for `RDF::URI`.
|
61
|
+
module URI
|
62
|
+
##
|
63
|
+
# Returns the RDF/JSON representation of this URI reference.
|
64
|
+
#
|
65
|
+
# @return [Hash]
|
66
|
+
def to_rdf_json
|
67
|
+
{:type => :uri, :value => to_s}
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
##
|
72
|
+
# RDF/JSON extensions for `RDF::Literal`.
|
73
|
+
module Literal
|
74
|
+
##
|
75
|
+
# Returns the RDF/JSON representation of this literal.
|
76
|
+
#
|
77
|
+
# @return [Hash]
|
78
|
+
def to_rdf_json
|
79
|
+
case
|
80
|
+
when datatype? # FIXME: use `has_datatype?` in RDF.rb 0.1.0
|
81
|
+
{:type => :literal, :value => value.to_s, :datatype => datatype.to_s}
|
82
|
+
when language? # FIXME: use `has_language?` in RDF.rb 0.1.0
|
83
|
+
{:type => :literal, :value => value.to_s, :lang => language.to_s}
|
84
|
+
else
|
85
|
+
{:type => :literal, :value => value.to_s}
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
##
|
91
|
+
# RDF/JSON extensions for `RDF::Statement`.
|
92
|
+
module Statement
|
93
|
+
##
|
94
|
+
# Returns the RDF/JSON representation of this statement.
|
95
|
+
#
|
96
|
+
# @return [Hash]
|
97
|
+
def to_rdf_json
|
98
|
+
# FIXME: improve the RDF::Statement constructor in RDF.rb 0.1.0
|
99
|
+
s, p, o = subject.to_s, predicate.to_s, object.is_a?(RDF::Value) ? object : RDF::Literal.new(object)
|
100
|
+
{s => {p => [o.to_rdf_json]}}
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
##
|
105
|
+
# RDF/JSON extensions for `RDF::Enumerable`.
|
106
|
+
module Enumerable
|
107
|
+
##
|
108
|
+
# Returns the serialized RDF/JSON representation of this object.
|
109
|
+
#
|
110
|
+
# @return [String]
|
111
|
+
def to_json
|
112
|
+
to_rdf_json.to_json
|
113
|
+
end
|
114
|
+
|
115
|
+
##
|
116
|
+
# Returns the RDF/JSON representation of this object.
|
117
|
+
#
|
118
|
+
# @return [Hash]
|
119
|
+
def to_rdf_json
|
120
|
+
json = {}
|
121
|
+
each_statement do |statement|
|
122
|
+
s = statement.subject.to_s
|
123
|
+
p = statement.predicate.to_s
|
124
|
+
o = statement.object.is_a?(RDF::Value) ? statement.object : RDF::Literal.new(statement.object)
|
125
|
+
json[s] ||= {}
|
126
|
+
json[s][p] ||= []
|
127
|
+
json[s][p] << o.to_rdf_json
|
128
|
+
end
|
129
|
+
json
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end # module Extensions
|
133
|
+
|
134
|
+
Extensions.constants.each do |klass|
|
135
|
+
RDF.const_get(klass).send(:include, Extensions.const_get(klass))
|
136
|
+
end
|
137
|
+
end # module RDF::JSON
|
data/lib/rdf/json/format.rb
CHANGED
@@ -2,6 +2,13 @@ module RDF::JSON
|
|
2
2
|
##
|
3
3
|
# RDF/JSON format specification.
|
4
4
|
#
|
5
|
+
# @example Obtaining an RDF/JSON format class
|
6
|
+
# RDF::Format.for(:json) #=> RDF::JSON::Format
|
7
|
+
# RDF::Format.for("spec/data/test.json")
|
8
|
+
# RDF::Format.for(:file_name => "spec/data/test.json")
|
9
|
+
# RDF::Format.for(:file_extension => "json")
|
10
|
+
# RDF::Format.for(:content_type => "application/json")
|
11
|
+
#
|
5
12
|
# @see http://n2.talis.com/wiki/RDF_JSON_Specification
|
6
13
|
class Format < RDF::Format
|
7
14
|
content_type 'application/json', :extension => :json
|
@@ -11,5 +18,5 @@ module RDF::JSON
|
|
11
18
|
writer { RDF::JSON::Writer }
|
12
19
|
|
13
20
|
require 'json'
|
14
|
-
end
|
15
|
-
end
|
21
|
+
end # class Format
|
22
|
+
end # module RDF::JSON
|
data/lib/rdf/json/reader.rb
CHANGED
@@ -2,17 +2,32 @@ module RDF::JSON
|
|
2
2
|
##
|
3
3
|
# RDF/JSON parser.
|
4
4
|
#
|
5
|
-
# @example
|
5
|
+
# @example Obtaining an RDF/JSON reader class
|
6
|
+
# RDF::Reader.for(:json) #=> RDF::JSON::Reader
|
7
|
+
# RDF::Reader.for("spec/data/test.json")
|
8
|
+
# RDF::Reader.for(:file_name => "spec/data/test.json")
|
9
|
+
# RDF::Reader.for(:file_extension => "json")
|
10
|
+
# RDF::Reader.for(:content_type => "application/json")
|
11
|
+
#
|
12
|
+
# @example Parsing RDF statements from an RDF/JSON file
|
6
13
|
# RDF::JSON::Reader.open("spec/data/test.json") do |reader|
|
7
14
|
# reader.each_statement do |statement|
|
8
15
|
# puts statement.inspect
|
9
16
|
# end
|
10
17
|
# end
|
11
18
|
#
|
19
|
+
# @example Parsing RDF statements from an RDF/JSON string
|
20
|
+
# data = StringIO.new(File.read("spec/data/test.json"))
|
21
|
+
# RDF::JSON::Reader.new(data) do |reader|
|
22
|
+
# reader.each_statement do |statement|
|
23
|
+
# puts statement.inspect
|
24
|
+
# end
|
25
|
+
# end
|
26
|
+
#
|
12
27
|
# @see http://n2.talis.com/wiki/RDF_JSON_Specification
|
13
28
|
class Reader < RDF::Reader
|
14
29
|
format RDF::JSON::Format
|
15
30
|
|
16
31
|
# TODO
|
17
|
-
end
|
18
|
-
end
|
32
|
+
end # class Reader
|
33
|
+
end # module RDF::JSON
|
data/lib/rdf/json/version.rb
CHANGED
@@ -2,7 +2,7 @@ module RDF module JSON
|
|
2
2
|
module VERSION
|
3
3
|
MAJOR = 0
|
4
4
|
MINOR = 0
|
5
|
-
TINY =
|
5
|
+
TINY = 1
|
6
6
|
EXTRA = nil
|
7
7
|
|
8
8
|
STRING = [MAJOR, MINOR, TINY].join('.')
|
@@ -15,5 +15,9 @@ module RDF module JSON
|
|
15
15
|
##
|
16
16
|
# @return [String]
|
17
17
|
def self.to_str() STRING end
|
18
|
+
|
19
|
+
##
|
20
|
+
# @return [Array(Integer, Integer, Integer)]
|
21
|
+
def self.to_a() [MAJOR, MINOR, TINY] end
|
18
22
|
end
|
19
23
|
end end
|
data/lib/rdf/json/writer.rb
CHANGED
@@ -2,10 +2,89 @@ module RDF::JSON
|
|
2
2
|
##
|
3
3
|
# RDF/JSON serializer.
|
4
4
|
#
|
5
|
+
# @example Obtaining an RDF/JSON writer class
|
6
|
+
# RDF::Writer.for(:json) #=> RDF::JSON::Writer
|
7
|
+
# RDF::Writer.for("spec/data/test.json")
|
8
|
+
# RDF::Writer.for(:file_name => "spec/data/test.json")
|
9
|
+
# RDF::Writer.for(:file_extension => "json")
|
10
|
+
# RDF::Writer.for(:content_type => "application/json")
|
11
|
+
#
|
12
|
+
# @example Serializing RDF statements into an RDF/JSON file
|
13
|
+
# RDF::JSON::Writer.open("spec/data/test.json") do |writer|
|
14
|
+
# graph.each_statement do |statement|
|
15
|
+
# writer << statement
|
16
|
+
# end
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# @example Serializing RDF statements into an RDF/JSON string
|
20
|
+
# RDF::JSON::Writer.buffer do |writer|
|
21
|
+
# graph.each_statement do |statement|
|
22
|
+
# writer << statement
|
23
|
+
# end
|
24
|
+
# end
|
25
|
+
#
|
5
26
|
# @see http://n2.talis.com/wiki/RDF_JSON_Specification
|
6
27
|
class Writer < RDF::Writer
|
7
28
|
format RDF::JSON::Format
|
8
29
|
|
9
|
-
|
10
|
-
|
11
|
-
|
30
|
+
##
|
31
|
+
# Stores the RDF/JSON representation of a triple.
|
32
|
+
#
|
33
|
+
# @param [RDF::Resource] subject
|
34
|
+
# @param [RDF::URI] predicate
|
35
|
+
# @param [RDF::Value] object
|
36
|
+
# @return [void]
|
37
|
+
# @see #write_epilogue
|
38
|
+
def write_triple(subject, predicate, object)
|
39
|
+
s = subject.to_s
|
40
|
+
p = predicate.to_s
|
41
|
+
o = object.is_a?(RDF::Value) ? object : RDF::Literal.new(object)
|
42
|
+
@json ||= {}
|
43
|
+
@json[s] ||= {}
|
44
|
+
@json[s][p] ||= []
|
45
|
+
@json[s][p] << o.to_rdf_json
|
46
|
+
end
|
47
|
+
|
48
|
+
##
|
49
|
+
# Outputs the RDF/JSON representation of all stored triples.
|
50
|
+
#
|
51
|
+
# @return [void]
|
52
|
+
# @see #write_triple
|
53
|
+
def write_epilogue
|
54
|
+
puts @json.to_json
|
55
|
+
end
|
56
|
+
|
57
|
+
##
|
58
|
+
# Returns the RDF/JSON representation of a blank node.
|
59
|
+
#
|
60
|
+
# @param [RDF::Node] value
|
61
|
+
# @param [Hash{Symbol => Object}] options
|
62
|
+
# @return [String]
|
63
|
+
def format_node(value, options = {})
|
64
|
+
value.to_json
|
65
|
+
end
|
66
|
+
|
67
|
+
##
|
68
|
+
# Returns the RDF/JSON representation of a URI reference.
|
69
|
+
#
|
70
|
+
# @param [RDF::URI] value
|
71
|
+
# @param [Hash{Symbol => Object}] options
|
72
|
+
# @return [String]
|
73
|
+
def format_uri(value, options = {})
|
74
|
+
value.to_json
|
75
|
+
end
|
76
|
+
|
77
|
+
##
|
78
|
+
# Returns the RDF/JSON representation of a literal.
|
79
|
+
#
|
80
|
+
# @param [RDF::Literal, String, #to_s] value
|
81
|
+
# @param [Hash{Symbol => Object}] options
|
82
|
+
# @return [String]
|
83
|
+
def format_literal(value, options = {})
|
84
|
+
case value
|
85
|
+
when RDF::Literal then value.to_json
|
86
|
+
else RDF::Literal.new(value).to_json
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end # class Writer
|
90
|
+
end # module RDF::JSON
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdf-json
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arto Bendiken
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-02-02 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.5.
|
33
|
+
version: 0.5.3
|
34
34
|
version:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: rdf
|
@@ -65,6 +65,7 @@ files:
|
|
65
65
|
- README
|
66
66
|
- UNLICENSE
|
67
67
|
- VERSION
|
68
|
+
- lib/rdf/json/extensions.rb
|
68
69
|
- lib/rdf/json/format.rb
|
69
70
|
- lib/rdf/json/reader.rb
|
70
71
|
- lib/rdf/json/version.rb
|