rdf 0.0.9 → 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 +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
|