rdf-json 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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.