rdf 0.0.4 → 0.0.5
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 +9 -2
- data/VERSION +1 -1
- data/lib/rdf.rb +9 -0
- data/lib/rdf/graph.rb +5 -5
- data/lib/rdf/reader.rb +3 -3
- data/lib/rdf/repository.rb +242 -0
- data/lib/rdf/statement.rb +35 -19
- data/lib/rdf/version.rb +1 -1
- data/lib/rdf/writer.rb +1 -1
- metadata +7 -3
- data/Rakefile +0 -8
data/README
CHANGED
@@ -97,7 +97,7 @@ as follows:
|
|
97
97
|
|
98
98
|
% wget http://github.com/bendiken/rdf/tarball/master
|
99
99
|
|
100
|
-
|
100
|
+
Dependencies
|
101
101
|
------------
|
102
102
|
|
103
103
|
* [Addressable](http://addressable.rubyforge.org/) (>= 2.1.1)
|
@@ -117,7 +117,14 @@ Resources
|
|
117
117
|
* <http://github.com/bendiken/rdf>
|
118
118
|
* <http://gemcutter.org/gems/rdf>
|
119
119
|
* <http://rubyforge.org/projects/rdf/>
|
120
|
-
* <http://raa.ruby-lang.org/project/rdf
|
120
|
+
* <http://raa.ruby-lang.org/project/rdf/>
|
121
|
+
|
122
|
+
See also
|
123
|
+
--------
|
124
|
+
|
125
|
+
* [RDFize](http://rdfize.rubyforge.org/)
|
126
|
+
* [RDFbus](http://rdfbus.rubyforge.org/)
|
127
|
+
* [RDFcache](http://rdfcache.rubyforge.org/)
|
121
128
|
|
122
129
|
Author
|
123
130
|
------
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.5
|
data/lib/rdf.rb
CHANGED
@@ -14,6 +14,9 @@ module RDF
|
|
14
14
|
autoload :Reader, 'rdf/reader'
|
15
15
|
autoload :Writer, 'rdf/writer'
|
16
16
|
|
17
|
+
# RDF storage
|
18
|
+
autoload :Repository, 'rdf/repository'
|
19
|
+
|
17
20
|
# RDF vocabularies
|
18
21
|
autoload :Vocabulary, 'rdf/vocabulary'
|
19
22
|
autoload :CC, 'rdf/vocabulary/cc'
|
@@ -38,6 +41,12 @@ module RDF
|
|
38
41
|
Vocabulary.create(uri)
|
39
42
|
end
|
40
43
|
|
44
|
+
##
|
45
|
+
# @return [URI]
|
46
|
+
def self.type
|
47
|
+
self[:type]
|
48
|
+
end
|
49
|
+
|
41
50
|
##
|
42
51
|
# @return [#to_s] property
|
43
52
|
# @return [URI]
|
data/lib/rdf/graph.rb
CHANGED
@@ -56,7 +56,7 @@ module RDF
|
|
56
56
|
|
57
57
|
##
|
58
58
|
# @yield [triple]
|
59
|
-
# @yieldparam [Array
|
59
|
+
# @yieldparam [Array(Value)]
|
60
60
|
# @return [Graph]
|
61
61
|
def each_triple(&block)
|
62
62
|
@data.each do |statement|
|
@@ -67,7 +67,7 @@ module RDF
|
|
67
67
|
|
68
68
|
##
|
69
69
|
# @yield [quad]
|
70
|
-
# @yieldparam [Array
|
70
|
+
# @yieldparam [Array(Value)]
|
71
71
|
# @return [Graph]
|
72
72
|
def each_quad(&block)
|
73
73
|
@data.each do |statement|
|
@@ -125,13 +125,13 @@ module RDF
|
|
125
125
|
end
|
126
126
|
|
127
127
|
##
|
128
|
-
# @return [Array<Array>]
|
128
|
+
# @return [Array<Array(Value)>]
|
129
129
|
def triples(&block)
|
130
130
|
block_given? ? each_triple(&block) : map { |statement| statement.to_triple }
|
131
131
|
end
|
132
132
|
|
133
133
|
##
|
134
|
-
# @return [Array<Array>]
|
134
|
+
# @return [Array<Array(Value)>]
|
135
135
|
def quads(&block)
|
136
136
|
block_given? ? each_quad(&block) : map { |statement| statement.to_quad }
|
137
137
|
end
|
@@ -165,7 +165,7 @@ module RDF
|
|
165
165
|
end
|
166
166
|
|
167
167
|
##
|
168
|
-
# @param [Statement, Array]
|
168
|
+
# @param [Statement, Array(Value)]
|
169
169
|
# @return [Graph]
|
170
170
|
def <<(statement)
|
171
171
|
@data << case statement
|
data/lib/rdf/reader.rb
CHANGED
@@ -23,13 +23,13 @@ module RDF
|
|
23
23
|
end
|
24
24
|
|
25
25
|
##
|
26
|
-
# @return [{String => Symbol}]
|
26
|
+
# @return [Hash{String => Symbol}]
|
27
27
|
def self.content_types
|
28
28
|
@@content_types
|
29
29
|
end
|
30
30
|
|
31
31
|
##
|
32
|
-
# @return [{Symbol => String}]
|
32
|
+
# @return [Hash{Symbol => String}]
|
33
33
|
def self.file_extensions
|
34
34
|
@@file_extensions
|
35
35
|
end
|
@@ -89,7 +89,7 @@ module RDF
|
|
89
89
|
|
90
90
|
##
|
91
91
|
# @yield [triple]
|
92
|
-
# @yieldparam [Array]
|
92
|
+
# @yieldparam [Array(Value)]
|
93
93
|
# @return [Reader]
|
94
94
|
def each_triple(&block)
|
95
95
|
begin
|
@@ -0,0 +1,242 @@
|
|
1
|
+
module RDF
|
2
|
+
##
|
3
|
+
# An RDF repository.
|
4
|
+
class Repository
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
# @return [URI]
|
8
|
+
attr_reader :uri
|
9
|
+
|
10
|
+
# @return [String]
|
11
|
+
attr_reader :title
|
12
|
+
|
13
|
+
##
|
14
|
+
# Loads an N-Triples file as a transient in-memory repository.
|
15
|
+
#
|
16
|
+
# @param [String] filename
|
17
|
+
# @yield [repository]
|
18
|
+
# @yieldparam [Repository]
|
19
|
+
# @return [void]
|
20
|
+
def self.load(filename, options = {}, &block)
|
21
|
+
self.new(options) do |repository|
|
22
|
+
repository.load(filename, options)
|
23
|
+
|
24
|
+
if block_given?
|
25
|
+
case block.arity
|
26
|
+
when 1 then block.call(repository)
|
27
|
+
else repository.instance_eval(&block)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
##
|
34
|
+
# @yield [repository]
|
35
|
+
# @yieldparam [Repository]
|
36
|
+
def initialize(options = {}, &block)
|
37
|
+
@uri = options.delete(:uri)
|
38
|
+
@title = options.delete(:title)
|
39
|
+
@data, @options = [], options
|
40
|
+
|
41
|
+
if block_given?
|
42
|
+
case block.arity
|
43
|
+
when 1 then block.call(self)
|
44
|
+
else instance_eval(&block)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# Returns `true` if the repository is transient.
|
51
|
+
#
|
52
|
+
# @return [Boolean]
|
53
|
+
# @see #persistent?
|
54
|
+
def transient?
|
55
|
+
!persistent?
|
56
|
+
end
|
57
|
+
|
58
|
+
##
|
59
|
+
# Returns `true` if the repository is persistent.
|
60
|
+
#
|
61
|
+
# @return [Boolean]
|
62
|
+
# @see #transient?
|
63
|
+
# @abstract
|
64
|
+
def persistent?
|
65
|
+
false # NOTE: override this in any persistent subclasses
|
66
|
+
end
|
67
|
+
|
68
|
+
##
|
69
|
+
# Returns `true` if the repository is readable.
|
70
|
+
#
|
71
|
+
# @return [Boolean]
|
72
|
+
def readable?
|
73
|
+
true
|
74
|
+
end
|
75
|
+
|
76
|
+
##
|
77
|
+
# Returns `true` if the repository is mutable.
|
78
|
+
#
|
79
|
+
# @return [Boolean]
|
80
|
+
# @see #immutable?
|
81
|
+
# @see #immutable!
|
82
|
+
def mutable?
|
83
|
+
!immutable?
|
84
|
+
end
|
85
|
+
|
86
|
+
alias_method :writable?, :mutable?
|
87
|
+
|
88
|
+
##
|
89
|
+
# Returns `true` if the repository is immutable.
|
90
|
+
#
|
91
|
+
# @return [Boolean]
|
92
|
+
# @see #mutable?
|
93
|
+
# @see #immutable!
|
94
|
+
def immutable?
|
95
|
+
@options[:mutable] == false
|
96
|
+
end
|
97
|
+
|
98
|
+
##
|
99
|
+
# Makes the repository contents immutable.
|
100
|
+
#
|
101
|
+
# @return [void]
|
102
|
+
# @see #mutable?
|
103
|
+
# @see #immutable?
|
104
|
+
def immutable!
|
105
|
+
@options[:mutable] = true
|
106
|
+
end
|
107
|
+
|
108
|
+
##
|
109
|
+
# Returns `true` if the repository contains no RDF statements.
|
110
|
+
#
|
111
|
+
# @return [Boolean]
|
112
|
+
def empty?
|
113
|
+
@data.empty?
|
114
|
+
end
|
115
|
+
|
116
|
+
##
|
117
|
+
# Returns the number of RDF statements in the repository.
|
118
|
+
#
|
119
|
+
# @return [Integer]
|
120
|
+
def size
|
121
|
+
@data.size
|
122
|
+
end
|
123
|
+
|
124
|
+
alias_method :count, :size
|
125
|
+
|
126
|
+
##
|
127
|
+
# Returns `true` if the repository contains the given RDF statement.
|
128
|
+
#
|
129
|
+
# @param [Statement] statement
|
130
|
+
# @return [Boolean]
|
131
|
+
def has_statement?(statement)
|
132
|
+
@data.include?(statement)
|
133
|
+
end
|
134
|
+
|
135
|
+
alias_method :include?, :has_statement?
|
136
|
+
|
137
|
+
##
|
138
|
+
# Enumerates each RDF statement in the repository.
|
139
|
+
#
|
140
|
+
# @yield [statement]
|
141
|
+
# @yieldparam [Statement]
|
142
|
+
# @return [Repository]
|
143
|
+
def each_statement(&block)
|
144
|
+
@data.each(&block)
|
145
|
+
self
|
146
|
+
end
|
147
|
+
|
148
|
+
alias_method :each, :each_statement
|
149
|
+
|
150
|
+
##
|
151
|
+
# Queries the repository for RDF statements matching the given pattern.
|
152
|
+
#
|
153
|
+
# @param [Statement, Array(Value)] pattern
|
154
|
+
# @yield [statement]
|
155
|
+
# @yieldparam [Statement]
|
156
|
+
# @return [Array<Statement>, nil]
|
157
|
+
def query(pattern, &block)
|
158
|
+
raise TypeError.new("repository is not readable") unless readable?
|
159
|
+
case pattern
|
160
|
+
when Array
|
161
|
+
query(Statement.new(*pattern), &block)
|
162
|
+
when Statement
|
163
|
+
if block_given?
|
164
|
+
# TODO: yield any found statements
|
165
|
+
nil
|
166
|
+
else
|
167
|
+
find_all { |statement| pattern === statement }
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
##
|
173
|
+
# Loads RDF statements from the given N-Triples file into the repository.
|
174
|
+
#
|
175
|
+
# @param [String] filename
|
176
|
+
# @return [Integer] the number of inserted RDF statements
|
177
|
+
def load(filename, options = {})
|
178
|
+
raise TypeError.new("repository is immutable") if immutable?
|
179
|
+
count = 0
|
180
|
+
Reader.open(filename, options) do |reader|
|
181
|
+
reader.each_statement do |statement|
|
182
|
+
insert_statement(statement)
|
183
|
+
count += 1
|
184
|
+
end
|
185
|
+
end
|
186
|
+
count
|
187
|
+
end
|
188
|
+
|
189
|
+
##
|
190
|
+
# Inserts an RDF statement to the repository.
|
191
|
+
#
|
192
|
+
# @param [Statement, Array(Value), #to_a] statement
|
193
|
+
# @return [Repository]
|
194
|
+
def <<(statement)
|
195
|
+
raise TypeError.new("repository is immutable") if immutable?
|
196
|
+
case statement
|
197
|
+
when Statement then insert_statement(statement)
|
198
|
+
else insert_statement(Statement.new(*statement.to_a))
|
199
|
+
end
|
200
|
+
self
|
201
|
+
end
|
202
|
+
|
203
|
+
##
|
204
|
+
# Inserts RDF statements into the repository.
|
205
|
+
#
|
206
|
+
# @param [Array<Statement>] statements
|
207
|
+
# @raise [TypeError] if the repository is immutable
|
208
|
+
# @return [Repository]
|
209
|
+
def insert(*statements)
|
210
|
+
raise TypeError.new("repository is immutable") if immutable?
|
211
|
+
statements.each do |statement|
|
212
|
+
insert_statement(statement)
|
213
|
+
end
|
214
|
+
self
|
215
|
+
end
|
216
|
+
|
217
|
+
##
|
218
|
+
# Deletes RDF statements from the repository.
|
219
|
+
#
|
220
|
+
# @param [Array<Statement>] statements
|
221
|
+
# @raise [TypeError] if the repository is immutable
|
222
|
+
# @return [Repository]
|
223
|
+
def delete(*statements)
|
224
|
+
raise TypeError.new("repository is immutable") if immutable?
|
225
|
+
statements.each do |statement|
|
226
|
+
delete_statement(statement)
|
227
|
+
end
|
228
|
+
self
|
229
|
+
end
|
230
|
+
|
231
|
+
protected
|
232
|
+
|
233
|
+
def insert_statement(statement)
|
234
|
+
@data.push(statement) unless @data.include?(statement)
|
235
|
+
end
|
236
|
+
|
237
|
+
def delete_statement(statement)
|
238
|
+
@data.delete(statement)
|
239
|
+
end
|
240
|
+
|
241
|
+
end
|
242
|
+
end
|
data/lib/rdf/statement.rb
CHANGED
@@ -23,37 +23,58 @@ module RDF
|
|
23
23
|
# @param [Value] o
|
24
24
|
# @option options [Resource] :context (nil)
|
25
25
|
def initialize(s = nil, p = nil, o = nil, options = {})
|
26
|
+
@id = options[:id] if options.has_key?(:id)
|
26
27
|
@context = options[:context] || options[:graph]
|
27
28
|
@subject, @predicate, @object = s, p, o
|
28
29
|
end
|
29
30
|
|
30
31
|
##
|
31
32
|
# @return [Boolean]
|
32
|
-
def asserted?
|
33
|
+
def asserted?
|
34
|
+
!quoted?
|
35
|
+
end
|
36
|
+
|
37
|
+
##
|
38
|
+
# @return [Boolean]
|
39
|
+
def quoted?
|
40
|
+
false
|
41
|
+
end
|
33
42
|
|
34
43
|
##
|
35
44
|
# @return [Boolean]
|
36
|
-
def
|
45
|
+
def inferred?
|
46
|
+
false
|
47
|
+
end
|
37
48
|
|
38
49
|
##
|
39
50
|
# @return [Boolean]
|
40
|
-
def has_graph?
|
51
|
+
def has_graph?
|
52
|
+
has_context?
|
53
|
+
end
|
41
54
|
|
42
55
|
##
|
43
56
|
# @return [Boolean]
|
44
|
-
def has_context?
|
57
|
+
def has_context?
|
58
|
+
!!context
|
59
|
+
end
|
45
60
|
|
46
61
|
##
|
47
62
|
# @return [Boolean]
|
48
|
-
def has_subject?
|
63
|
+
def has_subject?
|
64
|
+
!!subject
|
65
|
+
end
|
49
66
|
|
50
67
|
##
|
51
68
|
# @return [Boolean]
|
52
|
-
def has_predicate?
|
69
|
+
def has_predicate?
|
70
|
+
!!predicate
|
71
|
+
end
|
53
72
|
|
54
73
|
##
|
55
74
|
# @return [Boolean]
|
56
|
-
def has_object?
|
75
|
+
def has_object?
|
76
|
+
!!object
|
77
|
+
end
|
57
78
|
|
58
79
|
##
|
59
80
|
# @param [Statement] other
|
@@ -100,24 +121,19 @@ module RDF
|
|
100
121
|
end
|
101
122
|
|
102
123
|
##
|
103
|
-
# @return [Array]
|
104
|
-
def to_triple
|
105
|
-
[subject, predicate, object]
|
106
|
-
end
|
107
|
-
|
108
|
-
##
|
109
|
-
# @return [Array]
|
124
|
+
# @return [Array(Value)]
|
110
125
|
def to_quad
|
111
126
|
[subject, predicate, object, context]
|
112
127
|
end
|
113
128
|
|
114
129
|
##
|
115
|
-
# @return [Array]
|
116
|
-
def
|
130
|
+
# @return [Array(Value)]
|
131
|
+
def to_triple
|
132
|
+
[subject, predicate, object]
|
133
|
+
end
|
117
134
|
|
118
|
-
|
119
|
-
|
120
|
-
def to_ary() to_triple end
|
135
|
+
alias_method :to_a, :to_triple
|
136
|
+
alias_method :to_ary, :to_triple
|
121
137
|
|
122
138
|
##
|
123
139
|
# @return [Hash]
|
data/lib/rdf/version.rb
CHANGED
data/lib/rdf/writer.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
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: 2009-12-
|
12
|
+
date: 2009-12-27 00:00:00 +01:00
|
13
13
|
default_executable: rdf
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -37,6 +37,10 @@ email: arto.bendiken@gmail.com
|
|
37
37
|
executables:
|
38
38
|
- rdf
|
39
39
|
- rdf-count
|
40
|
+
- rdf-lengths
|
41
|
+
- rdf-objects
|
42
|
+
- rdf-predicates
|
43
|
+
- rdf-subjects
|
40
44
|
extensions: []
|
41
45
|
|
42
46
|
extra_rdoc_files: []
|
@@ -44,7 +48,6 @@ extra_rdoc_files: []
|
|
44
48
|
files:
|
45
49
|
- AUTHORS
|
46
50
|
- README
|
47
|
-
- Rakefile
|
48
51
|
- UNLICENSE
|
49
52
|
- VERSION
|
50
53
|
- bin/rdf
|
@@ -60,6 +63,7 @@ files:
|
|
60
63
|
- lib/rdf/node.rb
|
61
64
|
- lib/rdf/reader/ntriples.rb
|
62
65
|
- lib/rdf/reader.rb
|
66
|
+
- lib/rdf/repository.rb
|
63
67
|
- lib/rdf/resource.rb
|
64
68
|
- lib/rdf/statement.rb
|
65
69
|
- lib/rdf/uri.rb
|