rdf 1.99.1 → 2.0.0.beta1
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.
- checksums.yaml +4 -4
- data/{README → README.md} +9 -44
- data/VERSION +1 -1
- data/bin/rdf +1 -1
- data/lib/rdf.rb +40 -49
- data/lib/rdf/changeset.rb +161 -0
- data/lib/rdf/cli.rb +195 -33
- data/lib/rdf/cli/vocab-loader.rb +13 -3
- data/lib/rdf/format.rb +44 -26
- data/lib/rdf/mixin/enumerable.rb +133 -97
- data/lib/rdf/mixin/enumerator.rb +8 -0
- data/lib/rdf/mixin/indexable.rb +1 -1
- data/lib/rdf/mixin/mutable.rb +101 -22
- data/lib/rdf/mixin/queryable.rb +21 -32
- data/lib/rdf/mixin/transactable.rb +94 -0
- data/lib/rdf/mixin/writable.rb +12 -3
- data/lib/rdf/model/dataset.rb +48 -0
- data/lib/rdf/model/graph.rb +73 -43
- data/lib/rdf/model/list.rb +61 -33
- data/lib/rdf/model/literal.rb +20 -19
- data/lib/rdf/model/literal/double.rb +20 -4
- data/lib/rdf/model/literal/numeric.rb +15 -13
- data/lib/rdf/model/node.rb +15 -16
- data/lib/rdf/model/statement.rb +1 -43
- data/lib/rdf/model/term.rb +10 -8
- data/lib/rdf/model/uri.rb +35 -34
- data/lib/rdf/model/value.rb +1 -1
- data/lib/rdf/nquads.rb +2 -11
- data/lib/rdf/ntriples.rb +1 -1
- data/lib/rdf/ntriples/reader.rb +33 -46
- data/lib/rdf/ntriples/writer.rb +42 -5
- data/lib/rdf/query.rb +6 -40
- data/lib/rdf/query/pattern.rb +4 -17
- data/lib/rdf/query/solutions.rb +6 -6
- data/lib/rdf/reader.rb +65 -14
- data/lib/rdf/repository.rb +365 -229
- data/lib/rdf/transaction.rb +211 -84
- data/lib/rdf/util.rb +1 -0
- data/lib/rdf/util/cache.rb +5 -5
- data/lib/rdf/util/file.rb +12 -9
- data/lib/rdf/util/logger.rb +272 -0
- data/lib/rdf/version.rb +2 -2
- data/lib/rdf/vocab/owl.rb +82 -77
- data/lib/rdf/vocab/rdfs.rb +22 -17
- data/lib/rdf/vocab/xsd.rb +5 -0
- data/lib/rdf/vocabulary.rb +50 -56
- data/lib/rdf/writer.rb +104 -52
- metadata +45 -90
- data/lib/rdf/mixin/inferable.rb +0 -5
- data/lib/rdf/vocab/cc.rb +0 -128
- data/lib/rdf/vocab/cert.rb +0 -245
- data/lib/rdf/vocab/dc.rb +0 -948
- data/lib/rdf/vocab/dc11.rb +0 -167
- data/lib/rdf/vocab/dcat.rb +0 -214
- data/lib/rdf/vocab/doap.rb +0 -337
- data/lib/rdf/vocab/exif.rb +0 -941
- data/lib/rdf/vocab/foaf.rb +0 -614
- data/lib/rdf/vocab/geo.rb +0 -157
- data/lib/rdf/vocab/gr.rb +0 -1501
- data/lib/rdf/vocab/ht.rb +0 -236
- data/lib/rdf/vocab/ical.rb +0 -528
- data/lib/rdf/vocab/ma.rb +0 -513
- data/lib/rdf/vocab/mo.rb +0 -2412
- data/lib/rdf/vocab/og.rb +0 -222
- data/lib/rdf/vocab/ogc.rb +0 -58
- data/lib/rdf/vocab/prov.rb +0 -1550
- data/lib/rdf/vocab/rsa.rb +0 -72
- data/lib/rdf/vocab/rss.rb +0 -66
- data/lib/rdf/vocab/schema.rb +0 -10569
- data/lib/rdf/vocab/sioc.rb +0 -669
- data/lib/rdf/vocab/skos.rb +0 -238
- data/lib/rdf/vocab/skosxl.rb +0 -57
- data/lib/rdf/vocab/v.rb +0 -383
- data/lib/rdf/vocab/vcard.rb +0 -841
- data/lib/rdf/vocab/vmd.rb +0 -383
- data/lib/rdf/vocab/void.rb +0 -186
- data/lib/rdf/vocab/vs.rb +0 -28
- data/lib/rdf/vocab/wdrs.rb +0 -134
- data/lib/rdf/vocab/wot.rb +0 -167
- data/lib/rdf/vocab/xhtml.rb +0 -8
- data/lib/rdf/vocab/xhv.rb +0 -505
@@ -0,0 +1,48 @@
|
|
1
|
+
module RDF
|
2
|
+
##
|
3
|
+
# An RDF Dataset
|
4
|
+
#
|
5
|
+
# Datasets are immutable by default. {RDF::Repository} provides an interface
|
6
|
+
# for mutable Datasets.
|
7
|
+
#
|
8
|
+
# @see https://www.w3.org/TR/rdf11-concepts/#section-dataset
|
9
|
+
# @see https://www.w3.org/TR/rdf11-datasets/
|
10
|
+
class Dataset
|
11
|
+
include RDF::Countable
|
12
|
+
include RDF::Enumerable
|
13
|
+
include RDF::Durable
|
14
|
+
include RDF::Queryable
|
15
|
+
|
16
|
+
ISOLATION_LEVELS = [ :read_uncommitted,
|
17
|
+
:read_committed,
|
18
|
+
:repeatable_read,
|
19
|
+
:snapshot,
|
20
|
+
:serializable].freeze
|
21
|
+
|
22
|
+
##
|
23
|
+
# Returns a developer-friendly representation of this object.
|
24
|
+
#
|
25
|
+
# @return [String]
|
26
|
+
def inspect
|
27
|
+
sprintf("#<%s:%#0x(%s)>", self.class.name, __id__, uri.to_s)
|
28
|
+
end
|
29
|
+
|
30
|
+
##
|
31
|
+
# Outputs a developer-friendly representation of this object to
|
32
|
+
# `stderr`.
|
33
|
+
#
|
34
|
+
# @return [void]
|
35
|
+
def inspect!
|
36
|
+
each_statement { |statement| statement.inspect! }
|
37
|
+
nil
|
38
|
+
end
|
39
|
+
|
40
|
+
##
|
41
|
+
# @return [Symbol] a representation of the isolation level for reads of this
|
42
|
+
# Dataset. One of `:read_uncommitted`, `:read_committed`, `:repeatable_read`,
|
43
|
+
# `:snapshot`, or `:serializable`.
|
44
|
+
def isolation_level
|
45
|
+
:read_committed
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/rdf/model/graph.rb
CHANGED
@@ -27,7 +27,7 @@ module RDF
|
|
27
27
|
# require 'rdf/trig' # for TriG support
|
28
28
|
#
|
29
29
|
# repository = graph = RDF::Repository.load("https://raw.githubusercontent.com/ruby-rdf/rdf-trig/develop/etc/doap.trig", format: :trig))
|
30
|
-
# graph = RDF::Graph.new(RDF::URI("http://greggkellogg.net/foaf#me"), data: repository)
|
30
|
+
# graph = RDF::Graph.new(graph_name: RDF::URI("http://greggkellogg.net/foaf#me"), data: repository)
|
31
31
|
class Graph
|
32
32
|
include RDF::Value
|
33
33
|
include RDF::Countable
|
@@ -35,6 +35,7 @@ module RDF
|
|
35
35
|
include RDF::Enumerable
|
36
36
|
include RDF::Queryable
|
37
37
|
include RDF::Mutable
|
38
|
+
include RDF::Transactable
|
38
39
|
|
39
40
|
##
|
40
41
|
# Returns the options passed to this graph when it was constructed.
|
@@ -51,17 +52,7 @@ module RDF
|
|
51
52
|
attr_accessor :graph_name
|
52
53
|
|
53
54
|
alias_method :name, :graph_name
|
54
|
-
|
55
|
-
##
|
56
|
-
# Name of this graph, if it is part of an {RDF::Repository}
|
57
|
-
# @!attribute [rw] graph_name
|
58
|
-
# @return [RDF::Resource]
|
59
|
-
# @since 1.1.0
|
60
|
-
# @deprecated Use {#graph_name} instead.
|
61
|
-
def context
|
62
|
-
warn "[DEPRECATION] Graph#context is being replaced with Graph@graph_name in RDF.rb 2.0. Called from #{Gem.location_of_caller.join(':')}"
|
63
|
-
graph_name
|
64
|
-
end
|
55
|
+
alias_method :name=, :graph_name=
|
65
56
|
|
66
57
|
##
|
67
58
|
# {RDF::Queryable} backing this graph.
|
@@ -73,16 +64,18 @@ module RDF
|
|
73
64
|
# Creates a new `Graph` instance populated by the RDF data returned by
|
74
65
|
# dereferencing the given graph_name Resource.
|
75
66
|
#
|
76
|
-
# @param [String, #to_s]
|
67
|
+
# @param [String, #to_s] url
|
68
|
+
# @param [RDF::Resource] graph_name
|
69
|
+
# Set set graph name of each loaded statement
|
77
70
|
# @param [Hash{Symbol => Object}] options
|
78
|
-
# Options from {RDF::
|
71
|
+
# Options from {RDF::Reader.open}
|
79
72
|
# @yield [graph]
|
80
73
|
# @yieldparam [Graph] graph
|
81
74
|
# @return [Graph]
|
82
75
|
# @since 0.1.7
|
83
|
-
def self.load(url,
|
84
|
-
self.new(options) do |graph|
|
85
|
-
graph.load(url, options)
|
76
|
+
def self.load(url, graph_name: nil, **options, &block)
|
77
|
+
self.new(graph_name: graph_name, **options) do |graph|
|
78
|
+
graph.load(url, graph_name: graph_name, **options)
|
86
79
|
|
87
80
|
if block_given?
|
88
81
|
case block.arity
|
@@ -103,21 +96,31 @@ module RDF
|
|
103
96
|
# @param [Hash{Symbol => Object}] options
|
104
97
|
# @option options [RDF::Queryable] :data (RDF::Repository.new)
|
105
98
|
# Storage behind this graph.
|
106
|
-
# @
|
107
|
-
#
|
108
|
-
#
|
109
|
-
#
|
110
|
-
#
|
111
|
-
#
|
112
|
-
#
|
113
|
-
#
|
114
|
-
# @
|
99
|
+
# @deprecated This form is deprecated in version 2.0.
|
100
|
+
#
|
101
|
+
# @overload initialize(graph_name: nil, data: nil)
|
102
|
+
# @param [RDF::Resource] graph_name
|
103
|
+
# The graph_name from the associated {RDF::Queryable} associated
|
104
|
+
# with this graph as provided with the `:data` option
|
105
|
+
# (only for {RDF::Queryable} instances supporting
|
106
|
+
# named graphs).
|
107
|
+
# @param [RDF::Queryable] :data (RDF::Repository.new)
|
115
108
|
# Storage behind this graph.
|
109
|
+
#
|
110
|
+
# @raise [ArgumentError] if a `data` does not support named graphs.
|
111
|
+
# @note
|
112
|
+
# Graph names are only useful when used as a projection
|
113
|
+
# on a `:data` which supports named graphs. Otherwise, there is no
|
114
|
+
# such thing as a named graph in RDF 1.1, a repository may have
|
115
|
+
# graphs which are named, but the name is not a property of the graph.
|
116
116
|
# @yield [graph]
|
117
117
|
# @yieldparam [Graph]
|
118
|
-
def initialize(*args, &block)
|
119
|
-
|
120
|
-
|
118
|
+
def initialize(*args, graph_name: nil, data: nil, **options, &block)
|
119
|
+
unless args.empty?
|
120
|
+
warn "[DEPRECATION] Graph#initialize now uses keyword arguments. Called from #{Gem.location_of_caller.join(':')}"
|
121
|
+
graph_name ||= args.first
|
122
|
+
end
|
123
|
+
|
121
124
|
@graph_name = case graph_name
|
122
125
|
when nil then nil
|
123
126
|
when RDF::Resource then graph_name
|
@@ -125,7 +128,7 @@ module RDF
|
|
125
128
|
end
|
126
129
|
|
127
130
|
@options = options.dup
|
128
|
-
@data
|
131
|
+
@data = data || RDF::Repository.new(with_graph_name: false)
|
129
132
|
|
130
133
|
raise ArgumentError, "Can't apply graph_name unless initialized with `data` supporting graph_names" if
|
131
134
|
@graph_name && !@data.supports?(:graph_name)
|
@@ -146,7 +149,7 @@ module RDF
|
|
146
149
|
case
|
147
150
|
when args.empty?
|
148
151
|
raise ArgumentError, "Can't reload graph without a graph_name" unless graph_name.is_a?(RDF::URI)
|
149
|
-
load(graph_name.to_s,
|
152
|
+
load(graph_name.to_s, base_uri: graph_name)
|
150
153
|
else super
|
151
154
|
end
|
152
155
|
end
|
@@ -186,21 +189,11 @@ module RDF
|
|
186
189
|
@data.durable?
|
187
190
|
end
|
188
191
|
|
189
|
-
##
|
190
|
-
# Returns all unique RDF contexts for this graph.
|
191
|
-
#
|
192
|
-
# @return [Enumerator<RDF::Resource>]
|
193
|
-
# @deprecated Use {#graph_names} instead.
|
194
|
-
def contexts(options = {})
|
195
|
-
warn "[DEPRECATION] Graph#contexts is being replaced with Graph#graph_names in RDF.rb 2.0. Called from #{Gem.location_of_caller.join(':')}"
|
196
|
-
(named? ? [context] : []).to_enum.extend(RDF::Countable)
|
197
|
-
end
|
198
|
-
|
199
192
|
##
|
200
193
|
# Returns all unique RDF names for this graph.
|
201
194
|
#
|
202
195
|
# @return [Enumerator<RDF::Resource>]
|
203
|
-
def graph_names(
|
196
|
+
def graph_names(unique: true)
|
204
197
|
(named? ? [graph_name] : []).extend(RDF::Countable)
|
205
198
|
end
|
206
199
|
|
@@ -241,6 +234,8 @@ module RDF
|
|
241
234
|
##
|
242
235
|
# Returns `true` if this graph contains the given RDF statement.
|
243
236
|
#
|
237
|
+
# A statement is in a graph if the statement if it has the same triples without regard to graph_name.
|
238
|
+
#
|
244
239
|
# @param [Statement] statement
|
245
240
|
# @return [Boolean]
|
246
241
|
# @see RDF::Enumerable#has_statement?
|
@@ -267,6 +262,17 @@ module RDF
|
|
267
262
|
end
|
268
263
|
end
|
269
264
|
|
265
|
+
##
|
266
|
+
# @private
|
267
|
+
# @see RDF::Enumerable#project_graph
|
268
|
+
def project_graph(graph_name, &block)
|
269
|
+
if block_given?
|
270
|
+
self.each(&block) if graph_name == self.graph_name
|
271
|
+
else
|
272
|
+
graph_name == self.graph_name ? self : RDF::Graph.new
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
270
276
|
##
|
271
277
|
# Graph equivalence based on the contents of each graph being _exactly_
|
272
278
|
# the same. To determine if the have the same _meaning_, consider
|
@@ -299,6 +305,21 @@ module RDF
|
|
299
305
|
@data.insert(statement)
|
300
306
|
end
|
301
307
|
|
308
|
+
##
|
309
|
+
# @private
|
310
|
+
# @see RDF::Mutable#insert_statements
|
311
|
+
def insert_statements(statements)
|
312
|
+
enum = Enumerable::Enumerator.new do |yielder|
|
313
|
+
|
314
|
+
statements.send(method = statements.respond_to?(:each_statement) ? :each_statement : :each) do |s|
|
315
|
+
s = s.dup
|
316
|
+
s.graph_name = graph_name
|
317
|
+
yielder << s
|
318
|
+
end
|
319
|
+
end
|
320
|
+
@data.insert(enum)
|
321
|
+
end
|
322
|
+
|
302
323
|
##
|
303
324
|
# @private
|
304
325
|
# @see RDF::Mutable#delete
|
@@ -315,17 +336,26 @@ module RDF
|
|
315
336
|
@data.delete(graph_name: graph_name || false)
|
316
337
|
end
|
317
338
|
|
339
|
+
##
|
340
|
+
# @private
|
341
|
+
# Opens a transaction over the graph
|
342
|
+
# @see RDF::Transactable#begin_transaction
|
343
|
+
def begin_transaction(mutable: false, graph_name: @graph_name)
|
344
|
+
@data.send(:begin_transaction, mutable: mutable, graph_name: graph_name)
|
345
|
+
end
|
346
|
+
|
318
347
|
protected :query_pattern
|
319
348
|
protected :insert_statement
|
320
349
|
protected :delete_statement
|
321
350
|
protected :clear_statements
|
351
|
+
protected :begin_transaction
|
322
352
|
|
323
353
|
##
|
324
354
|
# @private
|
325
355
|
# @see RDF::Enumerable#graphs
|
326
356
|
# @since 0.2.0
|
327
357
|
def graphs
|
328
|
-
enum_graph
|
358
|
+
Array(enum_graph)
|
329
359
|
end
|
330
360
|
|
331
361
|
##
|
data/lib/rdf/model/list.rb
CHANGED
@@ -27,7 +27,7 @@ module RDF
|
|
27
27
|
# @param [Array<RDF::Term>] values
|
28
28
|
# @return [RDF::List]
|
29
29
|
def self.[](*values)
|
30
|
-
self.new(nil, nil, values)
|
30
|
+
self.new(subject: nil, graph: nil, values: values)
|
31
31
|
end
|
32
32
|
|
33
33
|
##
|
@@ -49,21 +49,28 @@ module RDF
|
|
49
49
|
# g.count # => l.count
|
50
50
|
#
|
51
51
|
# @overload initialize(subject = nil, graph = nil, values = nil, &block)
|
52
|
-
# @param [RDF::
|
52
|
+
# @param [RDF::Resource] subject
|
53
|
+
# Subject should be an {RDF::Node}, not a {RDF::URI}. A list with an IRI head will not validate, but is commonly used to detect if a list is valid.
|
53
54
|
# @param [RDF::Graph] graph
|
54
55
|
# @param [Array<RDF::Term>] values
|
55
56
|
# Any values which are not terms are coerced to `RDF::Literal`.
|
56
57
|
# @yield [list]
|
57
58
|
# @yieldparam [RDF::List] list
|
58
|
-
# @deprecated
|
59
|
-
#
|
60
|
-
#
|
59
|
+
# @deprecated This form is deprecated in version 2.0
|
60
|
+
#
|
61
|
+
# @overload initialize(subject: nil, graph: nil, values: nil, &block)
|
62
|
+
# @param [RDF::Resource] subject (RDF.nil)
|
63
|
+
# Subject should be an {RDF::Node}, not a {RDF::URI}. A list with an IRI head will not validate, but is commonly used to detect if a list is valid.
|
61
64
|
# @param [RDF::Graph] graph (RDF::Graph.new)
|
62
65
|
# @param [Array<RDF::Term>] values
|
63
66
|
# Any values which are not terms are coerced to `RDF::Literal`.
|
64
67
|
# @yield [list]
|
65
68
|
# @yieldparam [RDF::List] list
|
66
|
-
|
69
|
+
#
|
70
|
+
def initialize(*args, subject: nil, graph: nil, values: nil, &block)
|
71
|
+
unless args.empty?
|
72
|
+
raise ArgumentError, "[FATAL DEPRECATION] List#initialize now uses keyword arguments. Called from #{Gem.location_of_caller.join(':')}"
|
73
|
+
end
|
67
74
|
@subject = subject || RDF.nil
|
68
75
|
@graph = graph || RDF::Graph.new
|
69
76
|
is_empty = @graph.query(subject: subject, predicate: RDF.first).empty?
|
@@ -95,7 +102,15 @@ module RDF
|
|
95
102
|
UNSET = Object.new.freeze # @private
|
96
103
|
|
97
104
|
# The canonical empty list.
|
98
|
-
NIL = RDF::List.new(RDF.nil).freeze
|
105
|
+
NIL = RDF::List.new(subject: RDF.nil).freeze
|
106
|
+
|
107
|
+
##
|
108
|
+
# Is this a {RDF::List}?
|
109
|
+
#
|
110
|
+
# @return [Boolean]
|
111
|
+
def list?
|
112
|
+
true
|
113
|
+
end
|
99
114
|
|
100
115
|
##
|
101
116
|
# Validate the list ensuring that
|
@@ -151,7 +166,7 @@ module RDF
|
|
151
166
|
#
|
152
167
|
# @param [RDF::List] other
|
153
168
|
# @return [RDF::List]
|
154
|
-
# @see http://ruby-doc.org/core-
|
169
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-26
|
155
170
|
def &(other)
|
156
171
|
RDF::List[*(to_a & other.to_a)]
|
157
172
|
end
|
@@ -169,7 +184,7 @@ module RDF
|
|
169
184
|
#
|
170
185
|
# @param [RDF::List] other
|
171
186
|
# @return [RDF::List]
|
172
|
-
# @see http://ruby-doc.org/core-
|
187
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-7C
|
173
188
|
def |(other)
|
174
189
|
RDF::List[*(to_a | other.to_a)]
|
175
190
|
end
|
@@ -182,7 +197,7 @@ module RDF
|
|
182
197
|
#
|
183
198
|
# @param [RDF::List] other
|
184
199
|
# @return [RDF::List]
|
185
|
-
# @see http://ruby-doc.org/core-
|
200
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-2B
|
186
201
|
def +(other)
|
187
202
|
RDF::List[*(to_a + other.to_a)]
|
188
203
|
end
|
@@ -196,7 +211,7 @@ module RDF
|
|
196
211
|
#
|
197
212
|
# @param [RDF::List] other
|
198
213
|
# @return [RDF::List]
|
199
|
-
# @see http://ruby-doc.org/core-
|
214
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-2D
|
200
215
|
def -(other)
|
201
216
|
RDF::List[*(to_a - other.to_a)]
|
202
217
|
end
|
@@ -225,7 +240,7 @@ module RDF
|
|
225
240
|
# @return [RDF::List]
|
226
241
|
#
|
227
242
|
# @return [RDF::List]
|
228
|
-
# @see http://ruby-doc.org/core-
|
243
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-2A
|
229
244
|
def *(int_or_str)
|
230
245
|
case int_or_str
|
231
246
|
when Integer then RDF::List[*(to_a * int_or_str)]
|
@@ -233,6 +248,19 @@ module RDF
|
|
233
248
|
end
|
234
249
|
end
|
235
250
|
|
251
|
+
##
|
252
|
+
# Returns the element at `index`.
|
253
|
+
#
|
254
|
+
# @example
|
255
|
+
# RDF::List[1, 2, 3][0] #=> RDF::Literal(1)
|
256
|
+
#
|
257
|
+
# @param [Integer] index
|
258
|
+
# @return [RDF::Term]
|
259
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-5B-5D
|
260
|
+
def [](index)
|
261
|
+
at(index)
|
262
|
+
end
|
263
|
+
|
236
264
|
##
|
237
265
|
# Element Assignment — Sets the element at `index`, or replaces a subarray from the `start` index for `length` elements, or replaces a subarray specified by the `range` of indices.
|
238
266
|
#
|
@@ -314,7 +342,7 @@ module RDF
|
|
314
342
|
# Clear the list and create a new list using the existing subject
|
315
343
|
subject = @subject unless ary.empty? || @subject == RDF.nil
|
316
344
|
self.clear
|
317
|
-
new_list = RDF::List.new(subject, @graph, ary)
|
345
|
+
new_list = RDF::List.new(subject: subject, graph: @graph, values: ary)
|
318
346
|
@subject = new_list.subject
|
319
347
|
ret # Returns inserted values
|
320
348
|
end
|
@@ -328,13 +356,13 @@ module RDF
|
|
328
356
|
# @param [RDF::Term, Array<RDF::Term>, RDF::List] value
|
329
357
|
# A non-RDF::Term is coerced to a Literal
|
330
358
|
# @return [RDF::List]
|
331
|
-
# @see http://
|
359
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-unshift
|
332
360
|
#
|
333
361
|
def unshift(value)
|
334
362
|
value = case value
|
335
363
|
when nil then RDF.nil
|
336
364
|
when RDF::Term then value
|
337
|
-
when Array then RDF::List.new(nil, graph, value)
|
365
|
+
when Array then RDF::List.new(subject: nil, graph: graph, values: value)
|
338
366
|
else value
|
339
367
|
end
|
340
368
|
|
@@ -355,7 +383,7 @@ module RDF
|
|
355
383
|
# RDF::List[1,2,3].shift #=> 1
|
356
384
|
#
|
357
385
|
# @return [RDF::Term]
|
358
|
-
# @see http://
|
386
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-shift
|
359
387
|
def shift
|
360
388
|
return nil if empty?
|
361
389
|
|
@@ -376,7 +404,7 @@ module RDF
|
|
376
404
|
# RDF::List[1, 2, 2, 3].clear #=> RDF::List[]
|
377
405
|
#
|
378
406
|
# @return [RDF::List]
|
379
|
-
# @see http://ruby-doc.org/core-
|
407
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-clear
|
380
408
|
def clear
|
381
409
|
until empty?
|
382
410
|
shift
|
@@ -392,12 +420,12 @@ module RDF
|
|
392
420
|
#
|
393
421
|
# @param [RDF::Term] value
|
394
422
|
# @return [RDF::List]
|
395
|
-
# @see http://ruby-doc.org/core-
|
423
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-3C-3C
|
396
424
|
def <<(value)
|
397
425
|
value = case value
|
398
426
|
when nil then RDF.nil
|
399
427
|
when RDF::Value then value
|
400
|
-
when Array then RDF::List.new(nil, graph, value)
|
428
|
+
when Array then RDF::List.new(subject: nil, graph: graph, values: value)
|
401
429
|
else value
|
402
430
|
end
|
403
431
|
|
@@ -439,7 +467,7 @@ module RDF
|
|
439
467
|
#
|
440
468
|
# @param [RDF::List] other
|
441
469
|
# @return [Integer]
|
442
|
-
# @see http://ruby-doc.org/core-
|
470
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-3C-3D-3E
|
443
471
|
def <=>(other)
|
444
472
|
to_a <=> other.to_a # TODO: optimize this
|
445
473
|
end
|
@@ -452,7 +480,7 @@ module RDF
|
|
452
480
|
# RDF::List[1, 2, 3].empty? #=> false
|
453
481
|
#
|
454
482
|
# @return [Boolean]
|
455
|
-
# @see http://ruby-doc.org/core-
|
483
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-empty-3F
|
456
484
|
def empty?
|
457
485
|
graph.query(subject: subject, predicate: RDF.first).empty?
|
458
486
|
end
|
@@ -465,7 +493,7 @@ module RDF
|
|
465
493
|
# RDF::List[1, 2, 3].length #=> 3
|
466
494
|
#
|
467
495
|
# @return [Integer]
|
468
|
-
# @see http://ruby-doc.org/core-
|
496
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-length
|
469
497
|
def length
|
470
498
|
each.count
|
471
499
|
end
|
@@ -482,7 +510,7 @@ module RDF
|
|
482
510
|
#
|
483
511
|
# @param [RDF::Term] value
|
484
512
|
# @return [Integer]
|
485
|
-
# @see http://ruby-doc.org/core-
|
513
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-index
|
486
514
|
def index(value)
|
487
515
|
each.with_index do |v, i|
|
488
516
|
return i if v == value
|
@@ -499,7 +527,7 @@ module RDF
|
|
499
527
|
# RDF::List[1, 2, 3].slice(0..2) #=> RDF::List[1, 2, 3]
|
500
528
|
#
|
501
529
|
# @return [RDF::Term]
|
502
|
-
# @see http://ruby-doc.org/core-
|
530
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-slice
|
503
531
|
def slice(*args)
|
504
532
|
case argc = args.size
|
505
533
|
when 2 then slice_with_start_and_length(*args)
|
@@ -556,7 +584,7 @@ module RDF
|
|
556
584
|
# RDF::List[1, 2, 3].at(4) #=> nil
|
557
585
|
#
|
558
586
|
# @return [RDF::Term]
|
559
|
-
# @see http://ruby-doc.org/core-
|
587
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-at
|
560
588
|
def at(index)
|
561
589
|
each.with_index do |v, i|
|
562
590
|
return v if i == index
|
@@ -683,7 +711,7 @@ module RDF
|
|
683
711
|
# RDF::List[*(1..10)].last #=> RDF::Literal(10)
|
684
712
|
#
|
685
713
|
# @return [RDF::Term]
|
686
|
-
# @see http://ruby-doc.org/core-
|
714
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-last
|
687
715
|
def last
|
688
716
|
graph.first_object(subject: last_subject, predicate: RDF.first)
|
689
717
|
end
|
@@ -696,7 +724,7 @@ module RDF
|
|
696
724
|
#
|
697
725
|
# @return [RDF::List]
|
698
726
|
def rest
|
699
|
-
(subject = rest_subject).eql?(RDF.nil) ? nil : self.class.new(subject, graph)
|
727
|
+
(subject = rest_subject).eql?(RDF.nil) ? nil : self.class.new(subject: subject, graph: graph)
|
700
728
|
end
|
701
729
|
|
702
730
|
##
|
@@ -707,7 +735,7 @@ module RDF
|
|
707
735
|
#
|
708
736
|
# @return [RDF::List]
|
709
737
|
def tail
|
710
|
-
(subject = last_subject).eql?(RDF.nil) ? nil : self.class.new(subject, graph)
|
738
|
+
(subject = last_subject).eql?(RDF.nil) ? nil : self.class.new(subject: subject, graph: graph)
|
711
739
|
end
|
712
740
|
|
713
741
|
##
|
@@ -815,7 +843,7 @@ module RDF
|
|
815
843
|
#
|
816
844
|
# @param [String] sep
|
817
845
|
# @return [String]
|
818
|
-
# @see http://ruby-doc.org/core-
|
846
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-join
|
819
847
|
def join(sep = $,)
|
820
848
|
map(&:to_s).join(sep)
|
821
849
|
end
|
@@ -827,7 +855,7 @@ module RDF
|
|
827
855
|
# RDF::List[1, 2, 3].reverse #=> RDF::List[3, 2, 1]
|
828
856
|
#
|
829
857
|
# @return [RDF::List]
|
830
|
-
# @see http://ruby-doc.org/core-
|
858
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-reverse
|
831
859
|
def reverse
|
832
860
|
RDF::List[*to_a.reverse]
|
833
861
|
end
|
@@ -839,7 +867,7 @@ module RDF
|
|
839
867
|
# RDF::List[2, 3, 1].sort #=> RDF::List[1, 2, 3]
|
840
868
|
#
|
841
869
|
# @return [RDF::List]
|
842
|
-
# @see http://ruby-doc.org/core-
|
870
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-sort
|
843
871
|
def sort(&block)
|
844
872
|
RDF::List[*super]
|
845
873
|
end
|
@@ -851,7 +879,7 @@ module RDF
|
|
851
879
|
# RDF::List[2, 3, 1].sort_by(&:to_i) #=> RDF::List[1, 2, 3]
|
852
880
|
#
|
853
881
|
# @return [RDF::List]
|
854
|
-
# @see http://ruby-doc.org/core-
|
882
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-sort_by
|
855
883
|
def sort_by(&block)
|
856
884
|
RDF::List[*super]
|
857
885
|
end
|
@@ -863,7 +891,7 @@ module RDF
|
|
863
891
|
# RDF::List[1, 2, 2, 3].uniq #=> RDF::List[1, 2, 3]
|
864
892
|
#
|
865
893
|
# @return [RDF::List]
|
866
|
-
# @see http://ruby-doc.org/core-
|
894
|
+
# @see http://ruby-doc.org/core-2.2.2/Array.html#method-i-uniq
|
867
895
|
def uniq
|
868
896
|
RDF::List[*to_a.uniq]
|
869
897
|
end
|