openlogic-rdf 0.3.6

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.
Files changed (80) hide show
  1. data/AUTHORS +3 -0
  2. data/CREDITS +9 -0
  3. data/README +361 -0
  4. data/UNLICENSE +24 -0
  5. data/VERSION +1 -0
  6. data/bin/rdf +18 -0
  7. data/etc/doap.nt +62 -0
  8. data/lib/df.rb +1 -0
  9. data/lib/rdf/cli.rb +200 -0
  10. data/lib/rdf/format.rb +383 -0
  11. data/lib/rdf/mixin/countable.rb +39 -0
  12. data/lib/rdf/mixin/durable.rb +31 -0
  13. data/lib/rdf/mixin/enumerable.rb +637 -0
  14. data/lib/rdf/mixin/indexable.rb +26 -0
  15. data/lib/rdf/mixin/inferable.rb +5 -0
  16. data/lib/rdf/mixin/mutable.rb +191 -0
  17. data/lib/rdf/mixin/queryable.rb +265 -0
  18. data/lib/rdf/mixin/readable.rb +15 -0
  19. data/lib/rdf/mixin/type_check.rb +21 -0
  20. data/lib/rdf/mixin/writable.rb +152 -0
  21. data/lib/rdf/model/graph.rb +263 -0
  22. data/lib/rdf/model/list.rb +731 -0
  23. data/lib/rdf/model/literal/boolean.rb +121 -0
  24. data/lib/rdf/model/literal/date.rb +73 -0
  25. data/lib/rdf/model/literal/datetime.rb +72 -0
  26. data/lib/rdf/model/literal/decimal.rb +86 -0
  27. data/lib/rdf/model/literal/double.rb +189 -0
  28. data/lib/rdf/model/literal/integer.rb +126 -0
  29. data/lib/rdf/model/literal/numeric.rb +184 -0
  30. data/lib/rdf/model/literal/time.rb +87 -0
  31. data/lib/rdf/model/literal/token.rb +47 -0
  32. data/lib/rdf/model/literal/xml.rb +39 -0
  33. data/lib/rdf/model/literal.rb +373 -0
  34. data/lib/rdf/model/node.rb +156 -0
  35. data/lib/rdf/model/resource.rb +28 -0
  36. data/lib/rdf/model/statement.rb +296 -0
  37. data/lib/rdf/model/term.rb +77 -0
  38. data/lib/rdf/model/uri.rb +570 -0
  39. data/lib/rdf/model/value.rb +133 -0
  40. data/lib/rdf/nquads.rb +152 -0
  41. data/lib/rdf/ntriples/format.rb +48 -0
  42. data/lib/rdf/ntriples/reader.rb +239 -0
  43. data/lib/rdf/ntriples/writer.rb +219 -0
  44. data/lib/rdf/ntriples.rb +104 -0
  45. data/lib/rdf/query/pattern.rb +329 -0
  46. data/lib/rdf/query/solution.rb +252 -0
  47. data/lib/rdf/query/solutions.rb +237 -0
  48. data/lib/rdf/query/variable.rb +221 -0
  49. data/lib/rdf/query.rb +404 -0
  50. data/lib/rdf/reader.rb +511 -0
  51. data/lib/rdf/repository.rb +389 -0
  52. data/lib/rdf/transaction.rb +161 -0
  53. data/lib/rdf/util/aliasing.rb +63 -0
  54. data/lib/rdf/util/cache.rb +139 -0
  55. data/lib/rdf/util/file.rb +38 -0
  56. data/lib/rdf/util/uuid.rb +36 -0
  57. data/lib/rdf/util.rb +6 -0
  58. data/lib/rdf/version.rb +19 -0
  59. data/lib/rdf/vocab/cc.rb +18 -0
  60. data/lib/rdf/vocab/cert.rb +13 -0
  61. data/lib/rdf/vocab/dc.rb +63 -0
  62. data/lib/rdf/vocab/dc11.rb +23 -0
  63. data/lib/rdf/vocab/doap.rb +45 -0
  64. data/lib/rdf/vocab/exif.rb +168 -0
  65. data/lib/rdf/vocab/foaf.rb +69 -0
  66. data/lib/rdf/vocab/geo.rb +13 -0
  67. data/lib/rdf/vocab/http.rb +26 -0
  68. data/lib/rdf/vocab/owl.rb +59 -0
  69. data/lib/rdf/vocab/rdfs.rb +17 -0
  70. data/lib/rdf/vocab/rsa.rb +12 -0
  71. data/lib/rdf/vocab/rss.rb +14 -0
  72. data/lib/rdf/vocab/sioc.rb +93 -0
  73. data/lib/rdf/vocab/skos.rb +36 -0
  74. data/lib/rdf/vocab/wot.rb +21 -0
  75. data/lib/rdf/vocab/xhtml.rb +9 -0
  76. data/lib/rdf/vocab/xsd.rb +58 -0
  77. data/lib/rdf/vocab.rb +215 -0
  78. data/lib/rdf/writer.rb +475 -0
  79. data/lib/rdf.rb +192 -0
  80. metadata +173 -0
@@ -0,0 +1,296 @@
1
+ module RDF
2
+ ##
3
+ # An RDF statement.
4
+ #
5
+ # @example Creating an RDF statement
6
+ # s = RDF::URI.new("http://rubygems.org/gems/rdf")
7
+ # p = RDF::DC.creator
8
+ # o = RDF::URI.new("http://ar.to/#self")
9
+ # RDF::Statement.new(s, p, o)
10
+ #
11
+ # @example Creating an RDF statement with a context
12
+ # RDF::Statement.new(s, p, o, :context => uri)
13
+ #
14
+ # @example Creating an RDF statement from a `Hash`
15
+ # RDF::Statement.new({
16
+ # :subject => RDF::URI.new("http://rubygems.org/gems/rdf"),
17
+ # :predicate => RDF::DC.creator,
18
+ # :object => RDF::URI.new("http://ar.to/#self"),
19
+ # })
20
+ #
21
+ class Statement
22
+ include RDF::Value
23
+
24
+ ##
25
+ # @private
26
+ # @since 0.2.2
27
+ def self.from(statement, options = {})
28
+ case statement
29
+ when Array, Query::Pattern
30
+ context = statement[3] == false ? nil : statement[3]
31
+ self.new(statement[0], statement[1], statement[2], options.merge(:context => context))
32
+ when Statement then statement
33
+ when Hash then self.new(options.merge(statement))
34
+ else raise ArgumentError, "expected RDF::Statement, Hash, or Array, but got #{statement.inspect}"
35
+ end
36
+ end
37
+
38
+ # @return [Object]
39
+ attr_accessor :id
40
+
41
+ # @return [RDF::Resource]
42
+ attr_accessor :context
43
+
44
+ # @return [RDF::Resource]
45
+ attr_accessor :subject
46
+
47
+ # @return [RDF::URI]
48
+ attr_accessor :predicate
49
+
50
+ # @return [RDF::Term]
51
+ attr_accessor :object
52
+
53
+ ##
54
+ # @overload initialize(options = {})
55
+ # @param [Hash{Symbol => Object}] options
56
+ # @option options [RDF::Resource] :subject (nil)
57
+ # @option options [RDF::URI] :predicate (nil)
58
+ # @option options [RDF::Term] :object (nil)
59
+ # @option options [RDF::Resource] :context (nil)
60
+ #
61
+ # @overload initialize(subject, predicate, object, options = {})
62
+ # @param [RDF::Resource] subject
63
+ # @param [RDF::URI] predicate
64
+ # @param [RDF::Term] object
65
+ # @param [Hash{Symbol => Object}] options
66
+ # @option options [RDF::Resource] :context (nil)
67
+ def initialize(subject = nil, predicate = nil, object = nil, options = {})
68
+ case subject
69
+ when Hash
70
+ @options = subject.dup
71
+ @subject = @options.delete(:subject)
72
+ @predicate = @options.delete(:predicate)
73
+ @object = @options.delete(:object)
74
+ else
75
+ @options = !options.empty? ? options.dup : {}
76
+ @subject = subject
77
+ @predicate = predicate
78
+ @object = object
79
+ end
80
+ @id = @options.delete(:id) if @options.has_key?(:id)
81
+ @context = @options.delete(:context)
82
+ initialize!
83
+ end
84
+
85
+ ##
86
+ # @private
87
+ def initialize!
88
+ @context = Node.intern(@context) if @context.is_a?(Symbol)
89
+ @subject = Node.intern(@subject) if @subject.is_a?(Symbol)
90
+ @predicate = Node.intern(@predicate) if @predicate.is_a?(Symbol)
91
+ @object = case @object
92
+ when nil then nil
93
+ when Symbol then Node.intern(@object)
94
+ when Term then @object
95
+ else Literal.new(@object)
96
+ end
97
+ end
98
+
99
+ ##
100
+ # Returns `true` to indicate that this value is a statement.
101
+ #
102
+ # @return [Boolean]
103
+ def statement?
104
+ true
105
+ end
106
+
107
+ ##
108
+ # @return [Boolean]
109
+ def invalid?
110
+ !valid?
111
+ end
112
+
113
+ ##
114
+ # @return [Boolean]
115
+ def valid?
116
+ has_subject? && has_predicate? && has_object?
117
+ end
118
+
119
+ ##
120
+ # @return [Boolean]
121
+ def asserted?
122
+ !quoted?
123
+ end
124
+
125
+ ##
126
+ # @return [Boolean]
127
+ def quoted?
128
+ false
129
+ end
130
+
131
+ ##
132
+ # @return [Boolean]
133
+ def inferred?
134
+ false
135
+ end
136
+
137
+ ##
138
+ # @return [Boolean]
139
+ def has_graph?
140
+ has_context?
141
+ end
142
+
143
+ ##
144
+ # @return [Boolean]
145
+ def has_context?
146
+ !!context
147
+ end
148
+
149
+ ##
150
+ # @return [Boolean]
151
+ def has_subject?
152
+ !!subject
153
+ end
154
+
155
+ ##
156
+ # @return [Boolean]
157
+ def has_predicate?
158
+ !!predicate
159
+ end
160
+
161
+ ##
162
+ # @return [Boolean]
163
+ def has_object?
164
+ !!object
165
+ end
166
+
167
+ ##
168
+ # Returns `true` if the subject or object of this statement is a blank
169
+ # node.
170
+ #
171
+ # @return [Boolean]
172
+ def has_blank_nodes?
173
+ (has_object? && object.node?) || (has_subject? && subject.node?)
174
+ end
175
+
176
+ ##
177
+ # @param [Statement] other
178
+ # @return [Boolean]
179
+ def eql?(other)
180
+ other.is_a?(Statement) && self == other && (self.context || false) == (other.context || false)
181
+ end
182
+
183
+ ##
184
+ # @param [Object] other
185
+ # @return [Boolean]
186
+ def ==(other)
187
+ to_a == other.to_a
188
+ end
189
+
190
+ ##
191
+ # @param [Statement] other
192
+ # @return [Boolean]
193
+ def ===(other)
194
+ return false if has_context? && !context.eql?(other.context)
195
+ return false if has_subject? && !subject.eql?(other.subject)
196
+ return false if has_predicate? && !predicate.eql?(other.predicate)
197
+ return false if has_object? && !object.eql?(other.object)
198
+ return true
199
+ end
200
+
201
+ ##
202
+ # @param [Integer] index
203
+ # @return [RDF::Term]
204
+ def [](index)
205
+ case index
206
+ when 0 then self.subject
207
+ when 1 then self.predicate
208
+ when 2 then self.object
209
+ when 3 then self.context
210
+ else nil
211
+ end
212
+ end
213
+
214
+ ##
215
+ # @param [Integer] index
216
+ # @param [RDF::Term] value
217
+ # @return [RDF::Term]
218
+ def []=(index, value)
219
+ case index
220
+ when 0 then self.subject = value
221
+ when 1 then self.predicate = value
222
+ when 2 then self.object = value
223
+ when 3 then self.context = value
224
+ else nil
225
+ end
226
+ end
227
+
228
+ ##
229
+ # @return [Array(RDF::Term)]
230
+ def to_quad
231
+ [subject, predicate, object, context]
232
+ end
233
+
234
+ ##
235
+ # @return [Array(RDF::Term)]
236
+ def to_triple
237
+ [subject, predicate, object]
238
+ end
239
+
240
+ alias_method :to_a, :to_triple
241
+ alias_method :to_ary, :to_triple
242
+
243
+ ##
244
+ # Returns the terms of this statement as a `Hash`.
245
+ #
246
+ # @param [Symbol] subject_key
247
+ # @param [Symbol] predicate_key
248
+ # @param [Symbol] object_key
249
+ # @return [Hash{Symbol => RDF::Term}]
250
+ def to_hash(subject_key = :subject, predicate_key = :predicate, object_key = :object, context_key = :context)
251
+ {subject_key => subject, predicate_key => predicate, object_key => object, context_key => context}
252
+ end
253
+
254
+ ##
255
+ # Returns a string representation of this statement.
256
+ #
257
+ # @return [String]
258
+ def to_s
259
+ StringIO.open do |buffer|
260
+ buffer << case subject
261
+ when RDF::Node then subject.to_s
262
+ when RDF::URI then "<#{subject}>"
263
+ else subject.inspect
264
+ end
265
+ buffer << " <#{predicate}> "
266
+ buffer << case object
267
+ when RDF::Literal then object.to_s
268
+ when RDF::Node then object.to_s
269
+ when RDF::URI then "<#{object}>"
270
+ else object.inspect
271
+ end
272
+ buffer << case context
273
+ when nil then " ."
274
+ else " <#{context}> ."
275
+ end
276
+ buffer.string
277
+ end
278
+ end
279
+
280
+ ##
281
+ # Returns a graph containing this statement in reified form.
282
+ #
283
+ # @param [Hash{Symbol => Object}] options
284
+ # @return [RDF::Graph]
285
+ # @see http://www.w3.org/TR/rdf-primer/#reification
286
+ def reified(options = {})
287
+ RDF::Graph.new(options[:context]) do |graph|
288
+ subject = options[:subject] || RDF::Node.new(options[:id])
289
+ graph << [subject, RDF.type, RDF[:Statement]]
290
+ graph << [subject, RDF.subject, self.subject]
291
+ graph << [subject, RDF.predicate, self.predicate]
292
+ graph << [subject, RDF.object, self.object]
293
+ end
294
+ end
295
+ end
296
+ end
@@ -0,0 +1,77 @@
1
+ module RDF
2
+ ##
3
+ # An RDF term.
4
+ #
5
+ # Terms can be used as subjects, predicates, objects, and contexts of
6
+ # statements.
7
+ #
8
+ # @since 0.3.0
9
+ module Term
10
+ include RDF::Value
11
+ include Comparable
12
+
13
+ ##
14
+ # Compares `self` to `other` for sorting purposes.
15
+ #
16
+ # Subclasses should override this to provide a more meaningful
17
+ # implementation than the default which simply performs a string
18
+ # comparison based on `#to_s`.
19
+ #
20
+ # @abstract
21
+ # @param [Object] other
22
+ # @return [Integer] `-1`, `0`, or `1`
23
+ def <=>(other)
24
+ self.to_s <=> other.to_s
25
+ end
26
+
27
+ ##
28
+ # Compares `self` to `other` to implement RDFterm-equal.
29
+ #
30
+ # Subclasses should override this to provide a more meaningful
31
+ # implementation than the default which simply performs a string
32
+ # comparison based on `#to_s`.
33
+ #
34
+ # @abstract
35
+ # @param [Object] other
36
+ # @return [Integer] `-1`, `0`, or `1`
37
+ #
38
+ # @see http://www.w3.org/TR/rdf-sparql-query/#func-RDFterm-equal
39
+ def ==(other)
40
+ super
41
+ end
42
+
43
+ ##
44
+ # Determins if `self` is the same term as `other`.
45
+ #
46
+ # Subclasses should override this to provide a more meaningful
47
+ # implementation than the default which simply performs a string
48
+ # comparison based on `#to_s`.
49
+ #
50
+ # @abstract
51
+ # @param [Object] other
52
+ # @return [Integer] `-1`, `0`, or `1`
53
+ #
54
+ # @see http://www.w3.org/TR/rdf-sparql-query/#func-sameTerm
55
+ def eql?(other)
56
+ super
57
+ end
58
+
59
+ ##
60
+ # Returns `true` if this term is constant.
61
+ #
62
+ # @return [Boolean] `true` or `false`
63
+ # @see #variable?
64
+ def constant?
65
+ !(variable?)
66
+ end
67
+
68
+ ##
69
+ # Returns `true` if this term is variable.
70
+ #
71
+ # @return [Boolean] `true` or `false`
72
+ # @see #constant?
73
+ def variable?
74
+ false
75
+ end
76
+ end # Term
77
+ end # RDF