rdf-json 0.0.2 → 0.1.0

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 CHANGED
@@ -18,14 +18,14 @@ Documentation
18
18
  Dependencies
19
19
  ------------
20
20
 
21
- * [RDF.rb](http://gemcutter.org/gems/rdf) (>= 0.0.9)
22
- * [JSON](http://gemcutter.org/gems/json_pure) (>= 1.2.0)
21
+ * [RDF.rb](http://rubygems.org/gems/rdf) (>= 0.1.0)
22
+ * [JSON](http://rubygems.org/gems/json_pure) (>= 1.2.3)
23
23
 
24
24
  Installation
25
25
  ------------
26
26
 
27
27
  The recommended installation method is via RubyGems. To install the latest
28
- official release from Gemcutter, do:
28
+ official release, do:
29
29
 
30
30
  % [sudo] gem install rdf-json
31
31
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.1.0
data/etc/doap.json ADDED
@@ -0,0 +1,141 @@
1
+
2
+ {
3
+ "http://ar.to/#self" : {
4
+ "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" : [ {
5
+ "value" : "http://xmlns.com/foaf/0.1/Person",
6
+ "type" : "uri"
7
+ }
8
+
9
+ ],
10
+ "http://www.w3.org/2000/01/rdf-schema#seeAlso" : [ {
11
+ "value" : "http://datagraph.org/bendiken/foaf",
12
+ "type" : "uri"
13
+ }
14
+
15
+ ],
16
+ "http://xmlns.com/foaf/0.1/made" : [ {
17
+ "value" : "http://rubygems.org/gems/rdf-json",
18
+ "type" : "uri"
19
+ }
20
+
21
+ ],
22
+ "http://xmlns.com/foaf/0.1/mbox" : [ {
23
+ "value" : "mailto:arto.bendiken@gmail.com",
24
+ "type" : "uri"
25
+ }
26
+
27
+ ],
28
+ "http://xmlns.com/foaf/0.1/name" : [ {
29
+ "value" : "Arto Bendiken",
30
+ "type" : "literal"
31
+ }
32
+
33
+ ]
34
+ }
35
+ ,
36
+ "http://rubygems.org/gems/rdf-json" : {
37
+ "http://purl.org/dc/terms/creator" : [ {
38
+ "value" : "http://ar.to/#self",
39
+ "type" : "uri"
40
+ }
41
+
42
+ ],
43
+ "http://usefulinc.com/ns/doap#blog" : [ {
44
+ "value" : "http://ar.to/",
45
+ "type" : "uri"
46
+ }
47
+ ,
48
+ {
49
+ "value" : "http://blog.datagraph.org/",
50
+ "type" : "uri"
51
+ }
52
+
53
+ ],
54
+ "http://usefulinc.com/ns/doap#bug-database" : [ {
55
+ "value" : "http://github.com/bendiken/rdf-json/issues",
56
+ "type" : "uri"
57
+ }
58
+
59
+ ],
60
+ "http://usefulinc.com/ns/doap#created" : [ {
61
+ "value" : "2009-12-28",
62
+ "type" : "literal"
63
+ }
64
+
65
+ ],
66
+ "http://usefulinc.com/ns/doap#description" : [ {
67
+ "value" : "RDF.rb plugin for parsing/serializing RDF/JSON data.",
68
+ "lang" : "en",
69
+ "type" : "literal"
70
+ }
71
+
72
+ ],
73
+ "http://usefulinc.com/ns/doap#developer" : [ {
74
+ "value" : "http://ar.to/#self",
75
+ "type" : "uri"
76
+ }
77
+
78
+ ],
79
+ "http://usefulinc.com/ns/doap#documenter" : [ {
80
+ "value" : "http://ar.to/#self",
81
+ "type" : "uri"
82
+ }
83
+
84
+ ],
85
+ "http://usefulinc.com/ns/doap#download-page" : [ {
86
+ "value" : "http://rubyforge.org/projects/rdf/",
87
+ "type" : "uri"
88
+ }
89
+
90
+ ],
91
+ "http://usefulinc.com/ns/doap#homepage" : [ {
92
+ "value" : "http://rdf.rubyforge.org/json/",
93
+ "type" : "uri"
94
+ }
95
+
96
+ ],
97
+ "http://usefulinc.com/ns/doap#license" : [ {
98
+ "value" : "http://creativecommons.org/licenses/publicdomain/",
99
+ "type" : "uri"
100
+ }
101
+
102
+ ],
103
+ "http://usefulinc.com/ns/doap#maintainer" : [ {
104
+ "value" : "http://ar.to/#self",
105
+ "type" : "uri"
106
+ }
107
+
108
+ ],
109
+ "http://usefulinc.com/ns/doap#name" : [ {
110
+ "value" : "RDF::JSON",
111
+ "type" : "literal"
112
+ }
113
+
114
+ ],
115
+ "http://usefulinc.com/ns/doap#platform" : [ {
116
+ "value" : "Ruby",
117
+ "type" : "literal"
118
+ }
119
+
120
+ ],
121
+ "http://usefulinc.com/ns/doap#shortdesc" : [ {
122
+ "value" : "RDF/JSON support for RDF.rb.",
123
+ "lang" : "en",
124
+ "type" : "literal"
125
+ }
126
+
127
+ ],
128
+ "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" : [ {
129
+ "value" : "http://usefulinc.com/ns/doap#Project",
130
+ "type" : "uri"
131
+ }
132
+
133
+ ],
134
+ "http://xmlns.com/foaf/0.1/maker" : [ {
135
+ "value" : "http://ar.to/#self",
136
+ "type" : "uri"
137
+ }
138
+
139
+ ]
140
+ }
141
+ }
data/lib/rdf/json.rb CHANGED
@@ -8,14 +8,14 @@ module RDF
8
8
  # require 'rdf/json'
9
9
  #
10
10
  # @example Parsing RDF statements from an RDF/JSON file
11
- # RDF::JSON::Reader.open("spec/data/test.json") do |reader|
11
+ # RDF::JSON::Reader.open("etc/doap.json") do |reader|
12
12
  # reader.each_statement do |statement|
13
13
  # puts statement.inspect
14
14
  # end
15
15
  # end
16
16
  #
17
17
  # @example Serializing RDF statements into an RDF/JSON file
18
- # RDF::JSON::Writer.open("spec/data/test.json") do |writer|
18
+ # RDF::JSON::Writer.open("etc/test.json") do |writer|
19
19
  # graph.each_statement do |statement|
20
20
  # writer << statement
21
21
  # end
@@ -4,8 +4,8 @@ module RDF::JSON
4
4
  #
5
5
  # @example Obtaining an RDF/JSON format class
6
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")
7
+ # RDF::Format.for("etc/doap.json")
8
+ # RDF::Format.for(:file_name => "etc/doap.json")
9
9
  # RDF::Format.for(:file_extension => "json")
10
10
  # RDF::Format.for(:content_type => "application/json")
11
11
  #
@@ -4,20 +4,20 @@ module RDF::JSON
4
4
  #
5
5
  # @example Obtaining an RDF/JSON reader class
6
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")
7
+ # RDF::Reader.for("etc/doap.json")
8
+ # RDF::Reader.for(:file_name => "etc/doap.json")
9
9
  # RDF::Reader.for(:file_extension => "json")
10
10
  # RDF::Reader.for(:content_type => "application/json")
11
11
  #
12
12
  # @example Parsing RDF statements from an RDF/JSON file
13
- # RDF::JSON::Reader.open("spec/data/test.json") do |reader|
13
+ # RDF::JSON::Reader.open("etc/doap.json") do |reader|
14
14
  # reader.each_statement do |statement|
15
15
  # puts statement.inspect
16
16
  # end
17
17
  # end
18
18
  #
19
19
  # @example Parsing RDF statements from an RDF/JSON string
20
- # data = StringIO.new(File.read("spec/data/test.json"))
20
+ # data = StringIO.new(File.read("etc/doap.json"))
21
21
  # RDF::JSON::Reader.new(data) do |reader|
22
22
  # reader.each_statement do |statement|
23
23
  # puts statement.inspect
@@ -28,6 +28,102 @@ module RDF::JSON
28
28
  class Reader < RDF::Reader
29
29
  format RDF::JSON::Format
30
30
 
31
- # TODO
31
+ ##
32
+ # @return [RDF::Graph]
33
+ attr_reader :graph
34
+
35
+ ##
36
+ # Initializes the RDF/JSON reader instance.
37
+ #
38
+ # @param [IO, File, String] input
39
+ # @param [Hash{Symbol => Object}] options
40
+ # @yield [reader]
41
+ # @yieldparam [Reader] reader
42
+ def initialize(input = $stdin, options = {}, &block)
43
+ super do
44
+ @graph = RDF::Graph.new
45
+
46
+ JSON.parse(@input.read).each do |subject, predicates|
47
+ subject = parse_subject(subject)
48
+ predicates.each do |predicate, objects|
49
+ predicate = parse_predicate(predicate)
50
+ objects.each do |object|
51
+ object = parse_object(object)
52
+ @graph << [subject, predicate, object]
53
+ end
54
+ end
55
+ end
56
+
57
+ block.call(self) if block_given?
58
+ end
59
+ end
60
+
61
+ ##
62
+ # Parses an RDF/JSON subject string into a URI reference or blank node.
63
+ #
64
+ # @param [String] subject
65
+ # @return [RDF::Resource]
66
+ def parse_subject(subject)
67
+ case subject
68
+ when /^_:/ then RDF::Node.new(subject[2..-1])
69
+ else RDF::URI.new(subject)
70
+ end
71
+ end
72
+
73
+ ##
74
+ # Parses an RDF/JSON predicate string into a URI reference.
75
+ #
76
+ # @param [String] predicate
77
+ # @return [RDF::URI]
78
+ def parse_predicate(predicate)
79
+ # TODO: support for CURIE predicates (issue #1 on GitHub).
80
+ parse_subject(predicate)
81
+ end
82
+
83
+ ##
84
+ # Parses an RDF/JSON object string into an RDF value.
85
+ #
86
+ # @param [Hash{String => Object}] object
87
+ # @return [RDF::Value]
88
+ def parse_object(object)
89
+ raise RDF::ReaderError.new, "missing 'type' key in #{object.inspect}" unless object.has_key?('type')
90
+ raise RDF::ReaderError.new, "missing 'value' key in #{object.inspect}" unless object.has_key?('value')
91
+
92
+ case type = object['type']
93
+ when 'bnode'
94
+ RDF::Node.new(object['value'][2..-1])
95
+ when 'uri'
96
+ RDF::URI.new(object['value'])
97
+ when 'literal'
98
+ RDF::Literal.new(object['value'], {
99
+ :language => object['lang'],
100
+ :datatype => object['datatype'],
101
+ })
102
+ else
103
+ raise RDF::ReaderError, "expected 'type' to be 'bnode', 'uri', or 'literal', but got #{type.inspect}"
104
+ end
105
+ end
106
+
107
+ ##
108
+ # Iterates the given block for each RDF statement in the input.
109
+ #
110
+ # @yield [statement]
111
+ # @yieldparam [RDF::Statement] statement
112
+ # @return [void]
113
+ def each_statement(&block)
114
+ @graph.each_statement(&block)
115
+ end
116
+
117
+ ##
118
+ # Iterates the given block for each RDF triple in the input.
119
+ #
120
+ # @yield [subject, predicate, object]
121
+ # @yieldparam [RDF::Resource] subject
122
+ # @yieldparam [RDF::URI] predicate
123
+ # @yieldparam [RDF::Value] object
124
+ # @return [void]
125
+ def each_triple(&block)
126
+ @graph.each_triple(&block)
127
+ end
32
128
  end # class Reader
33
129
  end # module RDF::JSON
@@ -1,8 +1,8 @@
1
1
  module RDF module JSON
2
2
  module VERSION
3
3
  MAJOR = 0
4
- MINOR = 0
5
- TINY = 2
4
+ MINOR = 1
5
+ TINY = 0
6
6
  EXTRA = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY].join('.')
@@ -4,13 +4,13 @@ module RDF::JSON
4
4
  #
5
5
  # @example Obtaining an RDF/JSON writer class
6
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")
7
+ # RDF::Writer.for("etc/test.json")
8
+ # RDF::Writer.for(:file_name => "etc/test.json")
9
9
  # RDF::Writer.for(:file_extension => "json")
10
10
  # RDF::Writer.for(:content_type => "application/json")
11
11
  #
12
12
  # @example Serializing RDF statements into an RDF/JSON file
13
- # RDF::JSON::Writer.open("spec/data/test.json") do |writer|
13
+ # RDF::JSON::Writer.open("etc/test.json") do |writer|
14
14
  # graph.each_statement do |statement|
15
15
  # writer << statement
16
16
  # end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdf-json
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
5
10
  platform: ruby
6
11
  authors:
7
12
  - Arto Bendiken
@@ -9,59 +14,79 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-02-08 00:00:00 +01:00
17
+ date: 2010-03-11 00:00:00 +01:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: rdf-spec
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
23
- version: 0.0.9
24
- version:
27
+ segments:
28
+ - 0
29
+ - 1
30
+ - 0
31
+ version: 0.1.0
32
+ type: :development
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: rspec
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
30
38
  requirements:
31
39
  - - ">="
32
40
  - !ruby/object:Gem::Version
41
+ segments:
42
+ - 1
43
+ - 3
44
+ - 0
33
45
  version: 1.3.0
34
- version:
46
+ type: :development
47
+ version_requirements: *id002
35
48
  - !ruby/object:Gem::Dependency
36
49
  name: yard
37
- type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
40
52
  requirements:
41
53
  - - ">="
42
54
  - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ - 5
58
+ - 3
43
59
  version: 0.5.3
44
- version:
60
+ type: :development
61
+ version_requirements: *id003
45
62
  - !ruby/object:Gem::Dependency
46
63
  name: rdf
47
- type: :runtime
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
50
66
  requirements:
51
67
  - - ">="
52
68
  - !ruby/object:Gem::Version
53
- version: 0.0.9
54
- version:
69
+ segments:
70
+ - 0
71
+ - 1
72
+ - 0
73
+ version: 0.1.0
74
+ type: :runtime
75
+ version_requirements: *id004
55
76
  - !ruby/object:Gem::Dependency
56
77
  name: json_pure
57
- type: :runtime
58
- version_requirement:
59
- version_requirements: !ruby/object:Gem::Requirement
78
+ prerelease: false
79
+ requirement: &id005 !ruby/object:Gem::Requirement
60
80
  requirements:
61
81
  - - ">="
62
82
  - !ruby/object:Gem::Version
63
- version: 1.2.0
64
- version:
83
+ segments:
84
+ - 1
85
+ - 2
86
+ - 3
87
+ version: 1.2.3
88
+ type: :runtime
89
+ version_requirements: *id005
65
90
  description: RDF.rb plugin for parsing/serializing RDF/JSON data.
66
91
  email: arto.bendiken@gmail.com
67
92
  executables: []
@@ -75,6 +100,7 @@ files:
75
100
  - README
76
101
  - UNLICENSE
77
102
  - VERSION
103
+ - etc/doap.json
78
104
  - lib/rdf/json/extensions.rb
79
105
  - lib/rdf/json/format.rb
80
106
  - lib/rdf/json/reader.rb
@@ -94,18 +120,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
94
120
  requirements:
95
121
  - - ">="
96
122
  - !ruby/object:Gem::Version
123
+ segments:
124
+ - 1
125
+ - 8
126
+ - 2
97
127
  version: 1.8.2
98
- version:
99
128
  required_rubygems_version: !ruby/object:Gem::Requirement
100
129
  requirements:
101
130
  - - ">="
102
131
  - !ruby/object:Gem::Version
132
+ segments:
133
+ - 0
103
134
  version: "0"
104
- version:
105
135
  requirements: []
106
136
 
107
137
  rubyforge_project: rdf
108
- rubygems_version: 1.3.5
138
+ rubygems_version: 1.3.6
109
139
  signing_key:
110
140
  specification_version: 3
111
141
  summary: RDF/JSON support for RDF.rb.