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,263 @@
1
+ module RDF
2
+ ##
3
+ # An RDF graph.
4
+ #
5
+ # @example Creating an empty unnamed graph
6
+ # graph = Graph.new
7
+ #
8
+ # @example Creating an empty named graph
9
+ # graph = Graph.new("http://rubygems.org/")
10
+ #
11
+ # @example Loading graph data from a URL (1)
12
+ # require 'rdf/raptor' # for RDF/XML support
13
+ #
14
+ # graph = RDF::Graph.new("http://www.bbc.co.uk/programmes/b0081dq5.rdf")
15
+ # graph.load!
16
+ #
17
+ # @example Loading graph data from a URL (2)
18
+ # require 'rdf/raptor' # for RDF/XML support
19
+ #
20
+ # graph = RDF::Graph.load("http://www.bbc.co.uk/programmes/b0081dq5.rdf")
21
+ #
22
+ class Graph
23
+ include RDF::Resource
24
+
25
+ include RDF::Countable
26
+ include RDF::Durable
27
+ include RDF::Enumerable
28
+ include RDF::Queryable
29
+ include RDF::Mutable
30
+
31
+ ##
32
+ # Returns the options passed to this graph when it was constructed.
33
+ #
34
+ # @return [Hash{Symbol => Object}]
35
+ attr_reader :options
36
+
37
+ ##
38
+ # @return [RDF::Resource]
39
+ attr_accessor :context
40
+
41
+ ##
42
+ # @return [RDF::Queryable]
43
+ attr_accessor :data
44
+
45
+ ##
46
+ # Creates a new `Graph` instance populated by the RDF data returned by
47
+ # dereferencing the given context URL.
48
+ #
49
+ # @param [String, #to_s] url
50
+ # @param [Hash{Symbol => Object}] options
51
+ # Options from {RDF::Reader#initialize}, {RDF::Format.for} and {RDF::Graph#initialize}
52
+ # @yield [graph]
53
+ # @yieldparam [Graph] graph
54
+ # @return [Graph]
55
+ # @since 0.1.7
56
+ def self.load(url, options = {}, &block)
57
+ self.new(url, options) do |graph|
58
+ graph.load! unless graph.unnamed?
59
+
60
+ if block_given?
61
+ case block.arity
62
+ when 1 then block.call(graph)
63
+ else graph.instance_eval(&block)
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ ##
70
+ # @param [RDF::Resource] context
71
+ # @param [Hash{Symbol => Object}] options
72
+ # @yield [graph]
73
+ # @yieldparam [Graph]
74
+ def initialize(context = nil, options = {}, &block)
75
+ @context = case context
76
+ when nil then nil
77
+ when RDF::Resource then context
78
+ else RDF::URI.new(context)
79
+ end
80
+
81
+ @options = options.dup
82
+ @data = @options.delete(:data) || RDF::Repository.new
83
+
84
+ if block_given?
85
+ case block.arity
86
+ when 1 then block.call(self)
87
+ else instance_eval(&block)
88
+ end
89
+ end
90
+ end
91
+
92
+ ##
93
+ # @return [void]
94
+ def load!(*args)
95
+ case
96
+ when args.empty?
97
+ load(context.to_s, context ? {:base_uri => context}.merge(@options) : @options)
98
+ else super
99
+ end
100
+ end
101
+
102
+ ##
103
+ # Returns `true` to indicate that this is a graph.
104
+ #
105
+ # @return [Boolean]
106
+ def graph?
107
+ true
108
+ end
109
+
110
+ ##
111
+ # Returns `true` if this is a named graph.
112
+ #
113
+ # @return [Boolean]
114
+ def named?
115
+ !unnamed?
116
+ end
117
+
118
+ ##
119
+ # Returns `true` if this is a unnamed graph.
120
+ #
121
+ # @return [Boolean]
122
+ def unnamed?
123
+ context.nil?
124
+ end
125
+
126
+ ##
127
+ # Returns `false` to indicate that this graph is not durable
128
+ #
129
+ # @return [Boolean]
130
+ # @see RDF::Durable#durable?
131
+ def durable?
132
+ false
133
+ end
134
+
135
+ ##
136
+ # Returns all unique RDF contexts for this graph.
137
+ #
138
+ # @return [Enumerator<RDF::Resource>]
139
+ def contexts
140
+ (named? ? [context] : []).to_enum.extend(RDF::Countable)
141
+ end
142
+
143
+ ##
144
+ # Returns the URI representation of this graph.
145
+ #
146
+ # @return [RDF::URI]
147
+ def to_uri
148
+ context
149
+ end
150
+
151
+ ##
152
+ # Returns a string representation of this graph.
153
+ #
154
+ # @return [String]
155
+ def to_s
156
+ named? ? context.to_s : "<>"
157
+ end
158
+
159
+ ##
160
+ # Returns `true` if this graph contains no RDF statements.
161
+ #
162
+ # @return [Boolean]
163
+ # @see RDF::Enumerable#empty?
164
+ def empty?
165
+ @data.empty?
166
+ end
167
+
168
+ ##
169
+ # Returns `true` if this graph has an anonymous context, `false` otherwise.
170
+ #
171
+ # @return [Boolean]
172
+ def anonymous?
173
+ context.nil? ? false : context.anonymous?
174
+ end
175
+
176
+ ##
177
+ # Returns the number of RDF statements in this graph.
178
+ #
179
+ # @return [Integer]
180
+ # @see RDF::Enumerable#count
181
+ def count
182
+ @data.query(:context => context).count
183
+ end
184
+
185
+ ##
186
+ # Returns `true` if this graph contains the given RDF statement.
187
+ #
188
+ # @param [Statement] statement
189
+ # @return [Boolean]
190
+ # @see RDF::Enumerable#has_statement?
191
+ def has_statement?(statement)
192
+ statement = statement.dup
193
+ statement.context = context
194
+ @data.has_statement?(statement)
195
+ end
196
+
197
+ ##
198
+ # Enumerates each RDF statement in this graph.
199
+ #
200
+ # @yield [statement]
201
+ # @yieldparam [Statement] statement
202
+ # @return [Enumerator]
203
+ # @see RDF::Enumerable#each_statement
204
+ def each(&block)
205
+ @data.query(:context => context).each(&block)
206
+ end
207
+
208
+ ##
209
+ # @private
210
+ # @see RDF::Queryable#query
211
+ def query_pattern(pattern, &block)
212
+ pattern = pattern.dup
213
+ pattern.context = context
214
+ @data.query(pattern, &block)
215
+ end
216
+
217
+ ##
218
+ # @private
219
+ # @see RDF::Mutable#insert
220
+ def insert_statement(statement)
221
+ statement = statement.dup
222
+ statement.context = context
223
+ @data.insert(statement)
224
+ end
225
+
226
+ ##
227
+ # @private
228
+ # @see RDF::Mutable#delete
229
+ def delete_statement(statement)
230
+ statement = statement.dup
231
+ statement.context = context
232
+ @data.delete(statement)
233
+ end
234
+
235
+ ##
236
+ # @private
237
+ # @see RDF::Mutable#clear
238
+ def clear_statements
239
+ @data.delete(:context => context)
240
+ end
241
+
242
+ protected :query_pattern
243
+ protected :insert_statement
244
+ protected :delete_statement
245
+ protected :clear_statements
246
+
247
+ ##
248
+ # @private
249
+ # @see RDF::Enumerable#graphs
250
+ # @since 0.2.0
251
+ def graphs
252
+ enum_graph
253
+ end
254
+
255
+ ##
256
+ # @private
257
+ # @see RDF::Enumerable#each_graph
258
+ # @since 0.2.0
259
+ def each_graph(&block)
260
+ block_given? ? block.call(self) : enum_graph
261
+ end
262
+ end
263
+ end