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 +3 -3
- data/VERSION +1 -1
- data/etc/doap.json +141 -0
- data/lib/rdf/json.rb +2 -2
- data/lib/rdf/json/format.rb +2 -2
- data/lib/rdf/json/reader.rb +101 -5
- data/lib/rdf/json/version.rb +2 -2
- data/lib/rdf/json/writer.rb +3 -3
- metadata +58 -28
data/README
CHANGED
@@ -18,14 +18,14 @@ Documentation
|
|
18
18
|
Dependencies
|
19
19
|
------------
|
20
20
|
|
21
|
-
* [RDF.rb](http://
|
22
|
-
* [JSON](http://
|
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
|
28
|
+
official release, do:
|
29
29
|
|
30
30
|
% [sudo] gem install rdf-json
|
31
31
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
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("
|
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("
|
18
|
+
# RDF::JSON::Writer.open("etc/test.json") do |writer|
|
19
19
|
# graph.each_statement do |statement|
|
20
20
|
# writer << statement
|
21
21
|
# end
|
data/lib/rdf/json/format.rb
CHANGED
@@ -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("
|
8
|
-
# RDF::Format.for(:file_name => "
|
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
|
#
|
data/lib/rdf/json/reader.rb
CHANGED
@@ -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("
|
8
|
-
# RDF::Reader.for(:file_name => "
|
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("
|
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("
|
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
|
-
|
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
|
data/lib/rdf/json/version.rb
CHANGED
data/lib/rdf/json/writer.rb
CHANGED
@@ -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("
|
8
|
-
# RDF::Writer.for(:file_name => "
|
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("
|
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
|
-
|
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-
|
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
|
-
|
18
|
-
|
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
|
-
|
24
|
-
|
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
|
-
|
28
|
-
|
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
|
-
|
46
|
+
type: :development
|
47
|
+
version_requirements: *id002
|
35
48
|
- !ruby/object:Gem::Dependency
|
36
49
|
name: yard
|
37
|
-
|
38
|
-
|
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
|
-
|
60
|
+
type: :development
|
61
|
+
version_requirements: *id003
|
45
62
|
- !ruby/object:Gem::Dependency
|
46
63
|
name: rdf
|
47
|
-
|
48
|
-
|
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
|
-
|
54
|
-
|
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
|
-
|
58
|
-
|
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
|
-
|
64
|
-
|
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.
|
138
|
+
rubygems_version: 1.3.6
|
109
139
|
signing_key:
|
110
140
|
specification_version: 3
|
111
141
|
summary: RDF/JSON support for RDF.rb.
|