rdf 0.0.9 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +10 -7
- data/VERSION +1 -1
- data/etc/doap.nt +18 -18
- data/lib/rdf.rb +1 -0
- data/lib/rdf/mixin/mutable.rb +1 -1
- data/lib/rdf/model/graph.rb +110 -36
- data/lib/rdf/model/literal.rb +10 -7
- data/lib/rdf/model/node.rb +24 -10
- data/lib/rdf/model/statement.rb +22 -6
- data/lib/rdf/model/uri.rb +22 -4
- data/lib/rdf/ntriples/reader.rb +3 -3
- data/lib/rdf/ntriples/writer.rb +20 -10
- data/lib/rdf/reader.rb +4 -4
- data/lib/rdf/repository.rb +15 -15
- data/lib/rdf/version.rb +6 -2
- data/lib/rdf/vocab.rb +3 -1
- data/lib/rdf/vocab/dc11.rb +23 -0
- data/lib/rdf/writer.rb +23 -7
- metadata +14 -6
- data/lib/rdf/spec.rb +0 -138
- data/lib/rdf/spec/enumerable.rb +0 -248
- data/lib/rdf/spec/repository.rb +0 -77
data/README
CHANGED
@@ -18,7 +18,7 @@ Examples
|
|
18
18
|
|
19
19
|
### Creating an RDF statement
|
20
20
|
|
21
|
-
s = RDF::URI.parse("http://
|
21
|
+
s = RDF::URI.parse("http://rubygems.org/gems/rdf")
|
22
22
|
p = RDF::DC.creator
|
23
23
|
o = RDF::URI.parse("http://ar.to/#self")
|
24
24
|
|
@@ -55,7 +55,7 @@ Documentation
|
|
55
55
|
|
56
56
|
* <http://rdf.rubyforge.org/>
|
57
57
|
|
58
|
-
### RDF
|
58
|
+
### RDF Object Model
|
59
59
|
|
60
60
|
* {RDF::Graph}
|
61
61
|
* {RDF::Literal}
|
@@ -74,17 +74,20 @@ Documentation
|
|
74
74
|
### RDF Serialization Formats
|
75
75
|
|
76
76
|
* {RDF::NTriples}
|
77
|
+
* [RDF::JSON](http://rdf.rubyforge.org/json/) (plugin)
|
78
|
+
* [RDF::Trix](http://rdf.rubyforge.org/trix/) (plugin)
|
77
79
|
|
78
80
|
### RDF Storage
|
79
81
|
|
80
82
|
* {RDF::Repository}
|
83
|
+
* [RDF::Sesame](http://rdf.rubyforge.org/sesame/) (plugin)
|
81
84
|
|
82
85
|
### RDF Querying
|
83
86
|
|
84
87
|
* {RDF::Query}
|
85
|
-
* {RDF::Query::Pattern}
|
86
|
-
* {RDF::Query::Solution}
|
87
|
-
* {RDF::Query::Variable}
|
88
|
+
* {RDF::Query::Pattern}
|
89
|
+
* {RDF::Query::Solution}
|
90
|
+
* {RDF::Query::Variable}
|
88
91
|
|
89
92
|
### RDF Vocabularies
|
90
93
|
|
@@ -112,7 +115,7 @@ Installation
|
|
112
115
|
------------
|
113
116
|
|
114
117
|
The recommended installation method is via RubyGems. To install the latest
|
115
|
-
official release from
|
118
|
+
official release from [RubyGems](http://rubygems.org/), do:
|
116
119
|
|
117
120
|
% [sudo] gem install rdf
|
118
121
|
|
@@ -133,7 +136,7 @@ Resources
|
|
133
136
|
|
134
137
|
* <http://rdf.rubyforge.org/>
|
135
138
|
* <http://github.com/bendiken/rdf>
|
136
|
-
* <http://
|
139
|
+
* <http://rubygems.org/gems/rdf>
|
137
140
|
* <http://rubyforge.org/projects/rdf/>
|
138
141
|
* <http://raa.ruby-lang.org/project/rdf/>
|
139
142
|
* <http://www.ohloh.net/p/rdf>
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
data/etc/doap.nt
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
<http://ar.to/#self> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
|
2
|
-
<http://ar.to/#self> <http://xmlns.com/foaf/0.1/made> <http://
|
2
|
+
<http://ar.to/#self> <http://xmlns.com/foaf/0.1/made> <http://rubygems.org/gems/rdf> .
|
3
3
|
<http://ar.to/#self> <http://xmlns.com/foaf/0.1/mbox> <mailto:arto.bendiken@gmail.com> .
|
4
4
|
<http://ar.to/#self> <http://xmlns.com/foaf/0.1/name> "Arto Bendiken" .
|
5
5
|
<http://bhuga.net/#ben> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
|
6
6
|
<http://bhuga.net/#ben> <http://xmlns.com/foaf/0.1/mbox> <mailto:blavender@gmail.com> .
|
7
7
|
<http://bhuga.net/#ben> <http://xmlns.com/foaf/0.1/name> "Ben Lavender" .
|
8
|
-
<http://
|
9
|
-
<http://
|
10
|
-
<http://
|
11
|
-
<http://
|
12
|
-
<http://
|
13
|
-
<http://
|
14
|
-
<http://
|
15
|
-
<http://
|
16
|
-
<http://
|
17
|
-
<http://
|
18
|
-
<http://
|
19
|
-
<http://
|
20
|
-
<http://
|
21
|
-
<http://
|
22
|
-
<http://
|
23
|
-
<http://
|
24
|
-
<http://
|
8
|
+
<http://rubygems.org/gems/rdf> <http://purl.org/dc/terms/creator> <http://ar.to/#self> .
|
9
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#blog> <http://ar.to/> .
|
10
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#bug-database> <http://github.com/bendiken/rdf/issues> .
|
11
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#created> "2007-10-23" .
|
12
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#description> "RDF.rb is a pure-Ruby library for working with Resource Description Framework (RDF) data."@en .
|
13
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#developer> <http://ar.to/#self> .
|
14
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#developer> <http://bhuga.net/#ben> .
|
15
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#documenter> <http://ar.to/#self> .
|
16
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#download-page> <http://rubyforge.org/projects/rdf/> .
|
17
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#homepage> <http://rdf.rubyforge.org/> .
|
18
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#license> <http://creativecommons.org/licenses/publicdomain/> .
|
19
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#maintainer> <http://ar.to/#self> .
|
20
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#name> "RDF.rb" .
|
21
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#platform> "Ruby" .
|
22
|
+
<http://rubygems.org/gems/rdf> <http://usefulinc.com/ns/doap#shortdesc> "A Ruby library for working with Resource Description Framework (RDF) data."@en .
|
23
|
+
<http://rubygems.org/gems/rdf> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://usefulinc.com/ns/doap#Project> .
|
24
|
+
<http://rubygems.org/gems/rdf> <http://xmlns.com/foaf/0.1/maker> <http://ar.to/#self> .
|
data/lib/rdf.rb
CHANGED
data/lib/rdf/mixin/mutable.rb
CHANGED
data/lib/rdf/model/graph.rb
CHANGED
@@ -3,21 +3,31 @@ module RDF
|
|
3
3
|
# An RDF graph.
|
4
4
|
class Graph < Resource
|
5
5
|
include RDF::Enumerable
|
6
|
+
include RDF::Mutable
|
6
7
|
include RDF::Queryable
|
7
8
|
|
8
|
-
|
9
|
-
|
9
|
+
##
|
10
|
+
# @return [Resource]
|
11
|
+
attr_accessor :context
|
10
12
|
|
13
|
+
##
|
11
14
|
# @return [Array<Statement>]
|
12
15
|
attr_accessor :data
|
13
16
|
|
14
17
|
##
|
15
|
-
# @param [
|
18
|
+
# @param [Resource] context
|
19
|
+
# @param [Hash{Symbol => Object}] options
|
16
20
|
# @yield [graph]
|
17
21
|
# @yieldparam [Graph]
|
18
|
-
def initialize(
|
19
|
-
@
|
20
|
-
|
22
|
+
def initialize(context = nil, options = {}, &block)
|
23
|
+
@context = case context
|
24
|
+
when nil then nil
|
25
|
+
when RDF::Resource then context
|
26
|
+
else RDF::URI.new(context)
|
27
|
+
end
|
28
|
+
|
29
|
+
@data = options.delete(:data) || []
|
30
|
+
@options = options
|
21
31
|
|
22
32
|
if block_given?
|
23
33
|
case block.arity
|
@@ -28,7 +38,7 @@ module RDF
|
|
28
38
|
end
|
29
39
|
|
30
40
|
##
|
31
|
-
# Returns `true
|
41
|
+
# Returns `true` to indicate that this is a graph.
|
32
42
|
#
|
33
43
|
# @return [Boolean]
|
34
44
|
def graph?
|
@@ -36,57 +46,121 @@ module RDF
|
|
36
46
|
end
|
37
47
|
|
38
48
|
##
|
49
|
+
# Returns `true` if this is a named graph.
|
50
|
+
#
|
39
51
|
# @return [Boolean]
|
40
|
-
def named?
|
52
|
+
def named?
|
53
|
+
!unnamed?
|
54
|
+
end
|
41
55
|
|
42
56
|
##
|
57
|
+
# Returns `true` if this is a unnamed graph.
|
58
|
+
#
|
43
59
|
# @return [Boolean]
|
44
|
-
def unnamed?
|
60
|
+
def unnamed?
|
61
|
+
context.nil?
|
62
|
+
end
|
45
63
|
|
46
64
|
##
|
47
|
-
#
|
48
|
-
|
65
|
+
# Returns all unique RDF contexts for this graph.
|
66
|
+
#
|
67
|
+
# @return [Array<Resource>]
|
68
|
+
def contexts
|
69
|
+
named? ? [context] : []
|
70
|
+
end
|
49
71
|
|
50
72
|
##
|
51
|
-
#
|
52
|
-
#
|
53
|
-
# @return [
|
54
|
-
def
|
55
|
-
|
73
|
+
# Returns the URI representation of this graph.
|
74
|
+
#
|
75
|
+
# @return [URI]
|
76
|
+
def to_uri
|
77
|
+
context
|
56
78
|
end
|
57
79
|
|
58
80
|
##
|
59
|
-
#
|
60
|
-
|
61
|
-
|
81
|
+
# Returns a string representation of this graph.
|
82
|
+
#
|
83
|
+
# @return [String]
|
84
|
+
def to_s
|
85
|
+
named? ? context.to_s : "<>"
|
62
86
|
end
|
63
87
|
|
64
88
|
##
|
65
|
-
#
|
66
|
-
|
67
|
-
|
89
|
+
# Returns `true` if this graph contains no RDF statements.
|
90
|
+
#
|
91
|
+
# @return [Boolean]
|
92
|
+
# @see RDF::Enumerable#empty?
|
93
|
+
def empty?
|
94
|
+
@data.empty?
|
68
95
|
end
|
69
96
|
|
70
97
|
##
|
71
|
-
#
|
72
|
-
#
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
else statement
|
78
|
-
end
|
79
|
-
self
|
98
|
+
# Returns the number of RDF statements in this graph.
|
99
|
+
#
|
100
|
+
# @return [Integer]
|
101
|
+
# @see RDF::Enumerable#count
|
102
|
+
def count
|
103
|
+
@data.size
|
80
104
|
end
|
81
105
|
|
82
106
|
##
|
83
|
-
#
|
84
|
-
|
107
|
+
# Returns `true` if this graph contains the given RDF statement.
|
108
|
+
#
|
109
|
+
# @param [Statement] statement
|
110
|
+
# @return [Boolean]
|
111
|
+
# @see RDF::Enumerable#has_statement?
|
112
|
+
def has_statement?(statement)
|
113
|
+
statement = statement.dup
|
114
|
+
statement.context = context
|
115
|
+
@data.include?(statement)
|
116
|
+
end
|
85
117
|
|
86
118
|
##
|
87
|
-
#
|
88
|
-
|
89
|
-
|
119
|
+
# Enumerates each RDF statement in this graph.
|
120
|
+
#
|
121
|
+
# @yield [statement]
|
122
|
+
# @yieldparam [Statement] statement
|
123
|
+
# @return [Enumerator]
|
124
|
+
# @see RDF::Enumerable#each_statement
|
125
|
+
def each(&block)
|
126
|
+
@data.each(&block)
|
90
127
|
end
|
128
|
+
|
129
|
+
##
|
130
|
+
# Inserts the given RDF statement into the graph.
|
131
|
+
#
|
132
|
+
# @param [RDF::Statement] statement
|
133
|
+
# @return [void]
|
134
|
+
# @see RDF::Mutable#insert
|
135
|
+
def insert_statement(statement)
|
136
|
+
statement = statement.dup
|
137
|
+
statement.context = context
|
138
|
+
@data.push(statement.dup) unless @data.include?(statement)
|
139
|
+
end
|
140
|
+
|
141
|
+
##
|
142
|
+
# Deletes the given RDF statement from the graph.
|
143
|
+
#
|
144
|
+
# @param [RDF::Statement] statement
|
145
|
+
# @return [void]
|
146
|
+
# @see RDF::Mutable#delete
|
147
|
+
def delete_statement(statement)
|
148
|
+
statement = statement.dup
|
149
|
+
statement.context = context
|
150
|
+
@data.delete(statement)
|
151
|
+
end
|
152
|
+
|
153
|
+
##
|
154
|
+
# Deletes all RDF statements from this graph.
|
155
|
+
#
|
156
|
+
# @return [void]
|
157
|
+
# @see RDF::Mutable#clear
|
158
|
+
def clear_statements
|
159
|
+
@data.clear
|
160
|
+
end
|
161
|
+
|
162
|
+
protected :insert_statement
|
163
|
+
protected :delete_statement
|
164
|
+
protected :clear_statements
|
91
165
|
end
|
92
166
|
end
|
data/lib/rdf/model/literal.rb
CHANGED
@@ -8,7 +8,7 @@ module RDF
|
|
8
8
|
#
|
9
9
|
# @example Creating a language-tagged literal (1)
|
10
10
|
# value = RDF::Literal.new("Hello!", :language => :en)
|
11
|
-
# value.
|
11
|
+
# value.has_language? #=> true
|
12
12
|
# value.language #=> :en
|
13
13
|
#
|
14
14
|
# @example Creating a language-tagged literal (2)
|
@@ -18,12 +18,12 @@ module RDF
|
|
18
18
|
#
|
19
19
|
# @example Creating an explicitly datatyped literal
|
20
20
|
# value = RDF::Literal.new("2009-12-31", :datatype => RDF::XSD.date)
|
21
|
-
# value.
|
21
|
+
# value.has_datatype? #=> true
|
22
22
|
# value.datatype #=> RDF::XSD.date
|
23
23
|
#
|
24
24
|
# @example Creating an implicitly datatyped literal
|
25
25
|
# value = RDF::Literal.new(Date.today)
|
26
|
-
# value.
|
26
|
+
# value.has_datatype? #=> true
|
27
27
|
# value.datatype #=> RDF::XSD.date
|
28
28
|
#
|
29
29
|
# @example Creating implicitly datatyped literals
|
@@ -173,21 +173,24 @@ module RDF
|
|
173
173
|
#
|
174
174
|
# @return [Boolean]
|
175
175
|
# @see http://www.w3.org/TR/rdf-concepts/#dfn-plain-literal
|
176
|
-
def
|
176
|
+
def has_language?
|
177
177
|
!language.nil?
|
178
178
|
end
|
179
179
|
|
180
|
+
alias_method :language?, :has_language?
|
181
|
+
|
180
182
|
##
|
181
183
|
# Returns `true` if this is a datatyped literal.
|
182
184
|
#
|
183
185
|
# @return [Boolean]
|
184
186
|
# @see http://www.w3.org/TR/rdf-concepts/#dfn-typed-literal
|
185
|
-
def
|
187
|
+
def has_datatype?
|
186
188
|
!datatype.nil?
|
187
189
|
end
|
188
190
|
|
189
|
-
alias_method :
|
190
|
-
alias_method :
|
191
|
+
alias_method :datatype?, :has_datatype?
|
192
|
+
alias_method :typed?, :has_datatype?
|
193
|
+
alias_method :datatyped?, :has_datatype?
|
191
194
|
|
192
195
|
##
|
193
196
|
# Returns a string representation of this literal.
|
data/lib/rdf/model/node.rb
CHANGED
@@ -1,21 +1,35 @@
|
|
1
1
|
module RDF
|
2
2
|
##
|
3
|
-
# An RDF blank node, also known as an unlabeled node.
|
3
|
+
# An RDF blank node, also known as an anonymous or unlabeled node.
|
4
4
|
#
|
5
5
|
# @example Creating a blank node with an implicit identifier
|
6
6
|
# bnode = RDF::Node.new
|
7
7
|
#
|
8
|
-
# @example Creating a blank node with an UUID identifier
|
9
|
-
#
|
10
|
-
# bnode
|
8
|
+
# @example Creating a blank node with an UUID identifier
|
9
|
+
# bnode = RDF::Node.uuid
|
10
|
+
# bnode.to_s #=> "_:504c0a30-0d11-012d-3f50-001b63cac539"
|
11
11
|
#
|
12
|
-
# @
|
13
|
-
#
|
14
|
-
# bnode = RDF::Node.new(UUIDTools::UUID.random_create)
|
15
|
-
#
|
16
|
-
# @see http://github.com/assaf/uuid
|
17
|
-
# @see http://uuidtools.rubyforge.org/
|
12
|
+
# @see http://rubygems.org/gems/uuid
|
13
|
+
# @see http://rubygems.org/gems/uuidtools
|
18
14
|
class Node < Resource
|
15
|
+
##
|
16
|
+
# Returns a blank node with a random UUID-based identifier.
|
17
|
+
#
|
18
|
+
# @return [RDF::Node]
|
19
|
+
def self.uuid
|
20
|
+
begin
|
21
|
+
require 'uuid'
|
22
|
+
self.new(UUID.generate)
|
23
|
+
rescue LoadError => e
|
24
|
+
begin
|
25
|
+
require 'uuidtools'
|
26
|
+
self.new(UUIDTools::UUID.random_create)
|
27
|
+
rescue LoadError => e
|
28
|
+
raise LoadError.new("no such file to load -- uuid or uuidtools")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
19
33
|
# @return [String]
|
20
34
|
attr_accessor :id
|
21
35
|
|
data/lib/rdf/model/statement.rb
CHANGED
@@ -3,7 +3,7 @@ module RDF
|
|
3
3
|
# An RDF statement.
|
4
4
|
#
|
5
5
|
# @example Creating an RDF statement
|
6
|
-
# s = RDF::URI.new("http://
|
6
|
+
# s = RDF::URI.new("http://rubygems.org/gems/rdf")
|
7
7
|
# p = RDF::DC.creator
|
8
8
|
# o = RDF::URI.new("http://ar.to/#self")
|
9
9
|
# RDF::Statement.new(s, p, o)
|
@@ -13,7 +13,7 @@ module RDF
|
|
13
13
|
#
|
14
14
|
# @example Creating an RDF statement from a `Hash`
|
15
15
|
# RDF::Statement.new({
|
16
|
-
# :subject => RDF::URI.new("http://
|
16
|
+
# :subject => RDF::URI.new("http://rubygems.org/gems/rdf"),
|
17
17
|
# :predicate => RDF::DC.creator,
|
18
18
|
# :object => RDF::URI.new("http://ar.to/#self"),
|
19
19
|
# })
|
@@ -62,7 +62,11 @@ module RDF
|
|
62
62
|
@options = options
|
63
63
|
@subject = subject
|
64
64
|
@predicate = predicate
|
65
|
-
@object = object
|
65
|
+
@object = case object
|
66
|
+
when nil then nil
|
67
|
+
when RDF::Value then object
|
68
|
+
else RDF::Literal.new(object)
|
69
|
+
end
|
66
70
|
end
|
67
71
|
end
|
68
72
|
|
@@ -206,13 +210,25 @@ module RDF
|
|
206
210
|
end
|
207
211
|
|
208
212
|
##
|
213
|
+
# Returns a string representation of this statement.
|
214
|
+
#
|
209
215
|
# @return [String]
|
210
216
|
def to_s
|
211
217
|
require 'stringio' unless defined?(StringIO)
|
212
218
|
StringIO.open do |buffer|
|
213
|
-
buffer <<
|
214
|
-
|
215
|
-
|
219
|
+
buffer << case subject
|
220
|
+
when RDF::Node then subject.to_s
|
221
|
+
when RDF::URI then "<#{subject}>"
|
222
|
+
else subject.inspect
|
223
|
+
end
|
224
|
+
buffer << " <#{predicate}> "
|
225
|
+
buffer << case object
|
226
|
+
when RDF::Literal then object.to_s
|
227
|
+
when RDF::Node then object.to_s
|
228
|
+
when RDF::URI then "<#{object}>"
|
229
|
+
else object.inspect
|
230
|
+
end
|
231
|
+
buffer << " ."
|
216
232
|
buffer.string
|
217
233
|
end
|
218
234
|
end
|