rdf 3.1.13 → 3.2.3
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.md +3 -3
- data/VERSION +1 -1
- data/lib/rdf/model/literal/double.rb +1 -0
- data/lib/rdf/model/literal/numeric.rb +4 -2
- data/lib/rdf/model/literal.rb +55 -4
- data/lib/rdf/model/statement.rb +1 -1
- data/lib/rdf/model/uri.rb +36 -8
- data/lib/rdf/nquads.rb +2 -2
- data/lib/rdf/ntriples/reader.rb +6 -6
- data/lib/rdf/ntriples/writer.rb +1 -1
- data/lib/rdf/query/pattern.rb +6 -0
- data/lib/rdf/reader.rb +1 -1
- data/lib/rdf/repository.rb +18 -94
- data/lib/rdf/transaction.rb +76 -2
- data/lib/rdf/util/file.rb +2 -2
- data/lib/rdf/util/logger.rb +8 -5
- data/lib/rdf/vocabulary.rb +42 -16
- data/lib/rdf/writer.rb +2 -2
- metadata +20 -34
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4482866c0eb2c223af0f3a88f1eba8e1e2126c238c1136ff992a795de5047699
|
|
4
|
+
data.tar.gz: 38e58d5e2bab26f76b55affe2cb362aff85afb49c7692056837b69d34cad6081
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 464c0043d3238fc3c4b077dfe6144a145b2c636b0e7de53ea6e8ce7ea96d2fd196b88053b1974d939650295416a2e4f07d298009d06d3a0320c297caf7883309
|
|
7
|
+
data.tar.gz: 0b27d632fe51c621bd50c27c2b7ecf5da91cd615e4e39ddf82e9f65517bddadcba4adb387a33807f8f2f0851b3a1d3c0429ccf41f4ec1610371c57fe28bd0709
|
data/README.md
CHANGED
|
@@ -398,16 +398,16 @@ from BNode identity (i.e., they each entail the other)
|
|
|
398
398
|
|
|
399
399
|
## Dependencies
|
|
400
400
|
|
|
401
|
-
* [Ruby](https://ruby-lang.org/) (>= 2.
|
|
401
|
+
* [Ruby](https://ruby-lang.org/) (>= 2.6)
|
|
402
402
|
* [LinkHeader][] (>= 0.0.8)
|
|
403
|
-
* Soft dependency on [RestClient][] (>= 1
|
|
403
|
+
* Soft dependency on [RestClient][] (>= 2.1)
|
|
404
404
|
|
|
405
405
|
## Installation
|
|
406
406
|
|
|
407
407
|
The recommended installation method is via [RubyGems](https://rubygems.org/).
|
|
408
408
|
To install the latest official release of RDF.rb, do:
|
|
409
409
|
|
|
410
|
-
% [sudo] gem install rdf # Ruby 2+
|
|
410
|
+
% [sudo] gem install rdf # Ruby 2.6+
|
|
411
411
|
|
|
412
412
|
## Download
|
|
413
413
|
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.
|
|
1
|
+
3.2.3
|
|
@@ -43,6 +43,7 @@ module RDF; class Literal
|
|
|
43
43
|
# Can't use simple %f transformation due to special requirements from
|
|
44
44
|
# N3 tests in representation
|
|
45
45
|
@string = case
|
|
46
|
+
when @object.nil? then 'NaN'
|
|
46
47
|
when @object.nan? then 'NaN'
|
|
47
48
|
when @object.infinite? then @object.to_s[0...-'inity'.length].upcase
|
|
48
49
|
when @object.zero? then '0.0E0'
|
|
@@ -11,6 +11,9 @@ module RDF; class Literal
|
|
|
11
11
|
# @return [Integer] `-1`, `0`, or `1`
|
|
12
12
|
# @since 0.3.0
|
|
13
13
|
def <=>(other)
|
|
14
|
+
# If lexically invalid, use regular literal testing
|
|
15
|
+
return super unless self.valid? && (!other.respond_to?(:valid?) || other.valid?)
|
|
16
|
+
|
|
14
17
|
case other
|
|
15
18
|
when ::Numeric
|
|
16
19
|
to_d <=> other
|
|
@@ -30,11 +33,10 @@ module RDF; class Literal
|
|
|
30
33
|
# @since 0.3.0
|
|
31
34
|
def ==(other)
|
|
32
35
|
# If lexically invalid, use regular literal testing
|
|
33
|
-
return super unless self.valid?
|
|
36
|
+
return super unless self.valid? && (!other.respond_to?(:valid?) || other.valid?)
|
|
34
37
|
|
|
35
38
|
case other
|
|
36
39
|
when Literal::Numeric
|
|
37
|
-
return super unless other.valid?
|
|
38
40
|
(cmp = (self <=> other)) ? cmp.zero? : false
|
|
39
41
|
when RDF::URI, RDF::Node
|
|
40
42
|
# Interpreting SPARQL data-r2/expr-equal/eq-2-2, numeric can't be compared with other types
|
data/lib/rdf/model/literal.rb
CHANGED
|
@@ -166,12 +166,12 @@ module RDF
|
|
|
166
166
|
@object = value.freeze
|
|
167
167
|
@string = lexical if lexical
|
|
168
168
|
@string = value if !defined?(@string) && value.is_a?(String)
|
|
169
|
-
@string = @string.encode(Encoding::UTF_8).freeze if
|
|
170
|
-
@object = @string if
|
|
169
|
+
@string = @string.encode(Encoding::UTF_8).freeze if instance_variable_defined?(:@string)
|
|
170
|
+
@object = @string if instance_variable_defined?(:@string) && @object.is_a?(String)
|
|
171
171
|
@language = language.to_s.downcase.to_sym if language
|
|
172
172
|
@datatype = RDF::URI(datatype).freeze if datatype
|
|
173
173
|
@datatype ||= self.class.const_get(:DATATYPE) if self.class.const_defined?(:DATATYPE)
|
|
174
|
-
@datatype ||= @language ? RDF.langString : RDF::URI("http://www.w3.org/2001/XMLSchema#string")
|
|
174
|
+
@datatype ||= instance_variable_defined?(:@language) && @language ? RDF.langString : RDF::URI("http://www.w3.org/2001/XMLSchema#string")
|
|
175
175
|
end
|
|
176
176
|
|
|
177
177
|
##
|
|
@@ -179,7 +179,7 @@ module RDF
|
|
|
179
179
|
#
|
|
180
180
|
# @return [String]
|
|
181
181
|
def value
|
|
182
|
-
@string || to_s
|
|
182
|
+
instance_variable_defined?(:@string) && @string || to_s
|
|
183
183
|
end
|
|
184
184
|
|
|
185
185
|
##
|
|
@@ -308,6 +308,37 @@ module RDF
|
|
|
308
308
|
end
|
|
309
309
|
alias_method :===, :==
|
|
310
310
|
|
|
311
|
+
##
|
|
312
|
+
# Compares `self` to `other` for sorting purposes (with type check).
|
|
313
|
+
#
|
|
314
|
+
# @param [Object] other
|
|
315
|
+
# @return [Integer] `-1`, `0`, or `1`
|
|
316
|
+
def <=>(other)
|
|
317
|
+
case other
|
|
318
|
+
when Literal
|
|
319
|
+
case
|
|
320
|
+
when self.eql?(other)
|
|
321
|
+
0
|
|
322
|
+
when self.language? && other.language?
|
|
323
|
+
# Literals with languages can compare if languages are identical
|
|
324
|
+
self.to_s <=> other.to_s
|
|
325
|
+
when self.simple? && other.simple?
|
|
326
|
+
self.to_s <=> other.to_s
|
|
327
|
+
when !self.valid?
|
|
328
|
+
type_error("#{self.inspect} is invalid") || 0
|
|
329
|
+
when !other.valid?
|
|
330
|
+
type_error("#{other.inspect} is invalid") || 0
|
|
331
|
+
when self.comperable_datatype2?(other)
|
|
332
|
+
self.object <=> other.object
|
|
333
|
+
else
|
|
334
|
+
type_error("#{self.inspect} and #{other.inspect} are not comperable") || 0
|
|
335
|
+
end
|
|
336
|
+
when String
|
|
337
|
+
self.simple? && self.value <=> other
|
|
338
|
+
else 1
|
|
339
|
+
end
|
|
340
|
+
end
|
|
341
|
+
|
|
311
342
|
##
|
|
312
343
|
# Returns `true` if this is a plain literal. A plain literal
|
|
313
344
|
# may have a language, but may not have a datatype. For
|
|
@@ -399,6 +430,26 @@ module RDF
|
|
|
399
430
|
end
|
|
400
431
|
end
|
|
401
432
|
|
|
433
|
+
##
|
|
434
|
+
# Returns `true` if the literals are comperable.
|
|
435
|
+
#
|
|
436
|
+
# Used for <=> operator.
|
|
437
|
+
#
|
|
438
|
+
# @return [Boolean]
|
|
439
|
+
def comperable_datatype2?(other)
|
|
440
|
+
case self
|
|
441
|
+
when RDF::Literal::Numeric, RDF::Literal::Boolean
|
|
442
|
+
case other
|
|
443
|
+
when RDF::Literal::Numeric, RDF::Literal::Boolean
|
|
444
|
+
true
|
|
445
|
+
else
|
|
446
|
+
false
|
|
447
|
+
end
|
|
448
|
+
else
|
|
449
|
+
self.datatype == other.datatype
|
|
450
|
+
end
|
|
451
|
+
end
|
|
452
|
+
|
|
402
453
|
##
|
|
403
454
|
# Converts this literal into its canonical lexical representation.
|
|
404
455
|
#
|
data/lib/rdf/model/statement.rb
CHANGED
|
@@ -301,7 +301,7 @@ module RDF
|
|
|
301
301
|
# @see RDF::Literal#==
|
|
302
302
|
# @see RDF::Query::Variable#==
|
|
303
303
|
def eql?(other)
|
|
304
|
-
other.is_a?(Statement) && self
|
|
304
|
+
other.is_a?(Statement) && self.to_a.eql?(other.to_a) && (self.graph_name || false) == (other.graph_name || false)
|
|
305
305
|
end
|
|
306
306
|
|
|
307
307
|
##
|
data/lib/rdf/model/uri.rb
CHANGED
|
@@ -111,6 +111,10 @@ module RDF
|
|
|
111
111
|
tag tel turn turns tv urn javascript
|
|
112
112
|
).freeze
|
|
113
113
|
|
|
114
|
+
# Characters in a PName which must be escaped
|
|
115
|
+
PN_ESCAPE_CHARS = /[~\.\-!\$&'\(\)\*\+,;=\/\?\#@%_]/.freeze
|
|
116
|
+
PN_ESCAPES = /\\#{PN_ESCAPE_CHARS}/.freeze
|
|
117
|
+
|
|
114
118
|
##
|
|
115
119
|
# Cache size may be set through {RDF.config} using `uri_cache_size`.
|
|
116
120
|
#
|
|
@@ -621,16 +625,26 @@ module RDF
|
|
|
621
625
|
end
|
|
622
626
|
|
|
623
627
|
##
|
|
624
|
-
# Returns a qualified name (QName) for this URI based on available vocabularies, if possible.
|
|
628
|
+
# Returns a qualified name (QName) as a tuple of `[prefix, suffix]` for this URI based on available vocabularies, if possible.
|
|
625
629
|
#
|
|
626
630
|
# @example
|
|
627
631
|
# RDF::URI('http://www.w3.org/2000/01/rdf-schema#').qname #=> [:rdfs, nil]
|
|
628
632
|
# RDF::URI('http://www.w3.org/2000/01/rdf-schema#label').qname #=> [:rdfs, :label]
|
|
629
633
|
# RDF::RDFS.label.qname #=> [:rdfs, :label]
|
|
630
|
-
#
|
|
631
|
-
#
|
|
632
|
-
|
|
633
|
-
|
|
634
|
+
# RDF::Vocab::DC.title.qname(
|
|
635
|
+
# prefixes: {dcterms: 'http://purl.org/dc/terms/'}) #=> [:dcterms, :title]
|
|
636
|
+
#
|
|
637
|
+
# @note within this software, the term QName is used to describe the tuple of prefix and suffix for a given IRI, where the prefix identifies some defined vocabulary. This somewhat contrasts with the notion of a [Qualified Name](https://www.w3.org/TR/2006/REC-xml-names11-20060816/#ns-qualnames) from XML, which are a subset of Prefixed Names.
|
|
638
|
+
#
|
|
639
|
+
# @param [Hash{Symbol => String}] prefixes
|
|
640
|
+
# Explicit set of prefixes to look for matches, defaults to loaded vocabularies.
|
|
641
|
+
# @return [Array(Symbol, Symbol)] or `nil` if no QName found. The suffix component will not have [reserved characters](https://www.w3.org/TR/turtle/#reserved) escaped.
|
|
642
|
+
def qname(prefixes: nil)
|
|
643
|
+
if prefixes
|
|
644
|
+
prefixes.each do |prefix, uri|
|
|
645
|
+
return [prefix, self.to_s[uri.length..-1].to_sym] if self.start_with?(uri)
|
|
646
|
+
end
|
|
647
|
+
elsif self.to_s =~ %r([:/#]([^:/#]*)$)
|
|
634
648
|
local_name = $1
|
|
635
649
|
vocab_uri = local_name.empty? ? self.to_s : self.to_s[0...-(local_name.length)]
|
|
636
650
|
Vocabulary.each do |vocab|
|
|
@@ -653,11 +667,25 @@ module RDF
|
|
|
653
667
|
end
|
|
654
668
|
|
|
655
669
|
##
|
|
656
|
-
# Returns a
|
|
670
|
+
# Returns a Prefixed Name (PName) or the full IRI with any [reserved characters](https://www.w3.org/TR/turtle/#reserved) in the suffix escaped.
|
|
671
|
+
#
|
|
672
|
+
# @example Using a custom prefix for creating a PNname.
|
|
673
|
+
# RDF::URI('http://purl.org/dc/terms/creator').
|
|
674
|
+
# pname(prefixes: {dcterms: 'http://purl.org/dc/terms/'})
|
|
675
|
+
# #=> "dcterms:creator"
|
|
657
676
|
#
|
|
677
|
+
# @param [Hash{Symbol => String}] prefixes
|
|
678
|
+
# Explicit set of prefixes to look for matches, defaults to loaded vocabularies.
|
|
658
679
|
# @return [String] or `nil`
|
|
659
|
-
|
|
660
|
-
|
|
680
|
+
# @see #qname
|
|
681
|
+
# @see https://www.w3.org/TR/rdf-sparql-query/#prefNames
|
|
682
|
+
def pname(prefixes: nil)
|
|
683
|
+
q = self.qname(prefixes: prefixes)
|
|
684
|
+
return self.to_s unless q
|
|
685
|
+
prefix, suffix = q
|
|
686
|
+
suffix = suffix.to_s.gsub(PN_ESCAPE_CHARS) {|c| "\\#{c}"} if
|
|
687
|
+
suffix.to_s.match?(PN_ESCAPE_CHARS)
|
|
688
|
+
[prefix, suffix].join(":")
|
|
661
689
|
end
|
|
662
690
|
|
|
663
691
|
##
|
data/lib/rdf/nquads.rb
CHANGED
|
@@ -69,9 +69,9 @@ module RDF
|
|
|
69
69
|
|
|
70
70
|
begin
|
|
71
71
|
unless blank? || read_comment
|
|
72
|
-
subject = read_uriref || read_node ||
|
|
72
|
+
subject = read_uriref || read_node || read_quotedTriple || fail_subject
|
|
73
73
|
predicate = read_uriref(intern: true) || fail_predicate
|
|
74
|
-
object = read_uriref || read_node || read_literal ||
|
|
74
|
+
object = read_uriref || read_node || read_literal || read_quotedTriple || fail_object
|
|
75
75
|
graph_name = read_uriref || read_node
|
|
76
76
|
if validate? && !read_eos
|
|
77
77
|
log_error("Expected end of statement (found: #{current_line.inspect})", lineno: lineno, exception: RDF::ReaderError)
|
data/lib/rdf/ntriples/reader.rb
CHANGED
|
@@ -213,7 +213,7 @@ module RDF::NTriples
|
|
|
213
213
|
begin
|
|
214
214
|
read_statement
|
|
215
215
|
rescue RDF::ReaderError
|
|
216
|
-
value = read_uriref || read_node || read_literal ||
|
|
216
|
+
value = read_uriref || read_node || read_literal || read_quotedTriple
|
|
217
217
|
log_recover
|
|
218
218
|
value
|
|
219
219
|
end
|
|
@@ -229,9 +229,9 @@ module RDF::NTriples
|
|
|
229
229
|
|
|
230
230
|
begin
|
|
231
231
|
unless blank? || read_comment
|
|
232
|
-
subject = read_uriref || read_node ||
|
|
232
|
+
subject = read_uriref || read_node || read_quotedTriple || fail_subject
|
|
233
233
|
predicate = read_uriref(intern: true) || fail_predicate
|
|
234
|
-
object = read_uriref || read_node || read_literal ||
|
|
234
|
+
object = read_uriref || read_node || read_literal || read_quotedTriple || fail_object
|
|
235
235
|
|
|
236
236
|
if validate? && !read_eos
|
|
237
237
|
log_error("Expected end of statement (found: #{current_line.inspect})", lineno: lineno, exception: RDF::ReaderError)
|
|
@@ -247,11 +247,11 @@ module RDF::NTriples
|
|
|
247
247
|
|
|
248
248
|
##
|
|
249
249
|
# @return [RDF::Statement]
|
|
250
|
-
def
|
|
250
|
+
def read_quotedTriple
|
|
251
251
|
if @options[:rdfstar] && match(ST_START)
|
|
252
|
-
subject = read_uriref || read_node ||
|
|
252
|
+
subject = read_uriref || read_node || read_quotedTriple || fail_subject
|
|
253
253
|
predicate = read_uriref(intern: true) || fail_predicate
|
|
254
|
-
object = read_uriref || read_node || read_literal ||
|
|
254
|
+
object = read_uriref || read_node || read_literal || read_quotedTriple || fail_object
|
|
255
255
|
if !match(ST_END)
|
|
256
256
|
log_error("Expected end of statement (found: #{current_line.inspect})", lineno: lineno, exception: RDF::ReaderError)
|
|
257
257
|
end
|
data/lib/rdf/ntriples/writer.rb
CHANGED
|
@@ -227,7 +227,7 @@ module RDF::NTriples
|
|
|
227
227
|
# @param [RDF::Statement] statement
|
|
228
228
|
# @param [Hash{Symbol => Object}] options ({})
|
|
229
229
|
# @return [String]
|
|
230
|
-
def
|
|
230
|
+
def format_quotedTriple(statement, **options)
|
|
231
231
|
"<<%s %s %s>>" % statement.to_a.map { |value| format_term(value, **options) }
|
|
232
232
|
end
|
|
233
233
|
##
|
data/lib/rdf/query/pattern.rb
CHANGED
|
@@ -59,6 +59,12 @@ module RDF; class Query
|
|
|
59
59
|
super
|
|
60
60
|
end
|
|
61
61
|
|
|
62
|
+
##
|
|
63
|
+
# Create a new pattern from the quads, recursivly dupping sub-patterns.
|
|
64
|
+
def dup
|
|
65
|
+
self.class.from(self.to_quad.map {|t| t.is_a?(RDF::Query::Pattern) ? t.dup : t})
|
|
66
|
+
end
|
|
67
|
+
|
|
62
68
|
##
|
|
63
69
|
# Any additional options for this pattern.
|
|
64
70
|
#
|
data/lib/rdf/reader.rb
CHANGED
|
@@ -647,7 +647,7 @@ module RDF
|
|
|
647
647
|
##
|
|
648
648
|
# @return [String]
|
|
649
649
|
def readline
|
|
650
|
-
@line = @line_rest || @input.readline
|
|
650
|
+
@line = instance_variable_defined?(:@line_rest) && @line_rest || @input.readline
|
|
651
651
|
@line, @line_rest = @line.split("\r", 2)
|
|
652
652
|
@line = String.new if @line.nil? # not frozen
|
|
653
653
|
@line.chomp!
|
data/lib/rdf/repository.rb
CHANGED
|
@@ -243,17 +243,20 @@ module RDF
|
|
|
243
243
|
#
|
|
244
244
|
# @see RDF::Repository
|
|
245
245
|
module Implementation
|
|
246
|
-
require 'hamster'
|
|
247
246
|
DEFAULT_GRAPH = false
|
|
247
|
+
|
|
248
|
+
##
|
|
249
|
+
# @deprecated moved to {RDF::Transaction::SerializedTransaction}
|
|
250
|
+
SerializedTransaction = RDF::Transaction::SerializedTransaction
|
|
248
251
|
|
|
249
252
|
##
|
|
250
253
|
# @private
|
|
251
254
|
def self.extend_object(obj)
|
|
252
255
|
obj.instance_variable_set(:@data, obj.options.delete(:data) ||
|
|
253
|
-
|
|
256
|
+
Hash.new)
|
|
254
257
|
obj.instance_variable_set(:@tx_class,
|
|
255
258
|
obj.options.delete(:transaction_class) ||
|
|
256
|
-
SerializedTransaction)
|
|
259
|
+
RDF::Transaction::SerializedTransaction)
|
|
257
260
|
super
|
|
258
261
|
end
|
|
259
262
|
|
|
@@ -263,7 +266,6 @@ module RDF
|
|
|
263
266
|
def supports?(feature)
|
|
264
267
|
case feature.to_sym
|
|
265
268
|
when :graph_name then @options[:with_graph_name]
|
|
266
|
-
when :inference then false # forward-chaining inference
|
|
267
269
|
when :validity then @options.fetch(:with_validity, true)
|
|
268
270
|
when :literal_equality then true
|
|
269
271
|
when :atomic_write then true
|
|
@@ -381,7 +383,7 @@ module RDF
|
|
|
381
383
|
##
|
|
382
384
|
# @see RDF::Dataset#isolation_level
|
|
383
385
|
def isolation_level
|
|
384
|
-
:
|
|
386
|
+
:snapshot
|
|
385
387
|
end
|
|
386
388
|
|
|
387
389
|
##
|
|
@@ -471,7 +473,7 @@ module RDF
|
|
|
471
473
|
# @private
|
|
472
474
|
# @see RDF::Mutable#clear
|
|
473
475
|
def clear_statements
|
|
474
|
-
@data = @data.
|
|
476
|
+
@data = @data.class.new
|
|
475
477
|
end
|
|
476
478
|
|
|
477
479
|
##
|
|
@@ -513,14 +515,11 @@ module RDF
|
|
|
513
515
|
unless statement_in?(data, statement)
|
|
514
516
|
s, p, o, c = statement.to_quad
|
|
515
517
|
c ||= DEFAULT_GRAPH
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
end
|
|
522
|
-
end
|
|
523
|
-
end
|
|
518
|
+
|
|
519
|
+
data = data.has_key?(c) ? data.dup : data.merge(c => {})
|
|
520
|
+
data[c] = data[c].has_key?(s) ? data[c].dup : data[c].merge(s => {})
|
|
521
|
+
data[c][s] = data[c][s].has_key?(p) ? data[c][s].dup : data[c][s].merge(p => {})
|
|
522
|
+
data[c][s][p] = data[c][s][p].merge(o => statement.options)
|
|
524
523
|
end
|
|
525
524
|
data
|
|
526
525
|
end
|
|
@@ -529,93 +528,18 @@ module RDF
|
|
|
529
528
|
# @private
|
|
530
529
|
# @return [Hamster::Hash] a new, updated hamster hash
|
|
531
530
|
def delete_from(data, statement)
|
|
532
|
-
if
|
|
531
|
+
if has_statement_in?(data, statement)
|
|
533
532
|
s, p, o, g = statement.to_quad
|
|
534
533
|
g = DEFAULT_GRAPH unless supports?(:graph_name)
|
|
535
534
|
g ||= DEFAULT_GRAPH
|
|
536
535
|
|
|
537
|
-
os = data[g][s][p].
|
|
538
|
-
ps = os.empty? ? data[g][s].
|
|
539
|
-
ss = ps.empty? ? data[g].
|
|
540
|
-
return ss.empty? ? data.
|
|
536
|
+
os = data[g][s][p].dup.delete_if {|k,v| k == o}
|
|
537
|
+
ps = os.empty? ? data[g][s].dup.delete_if {|k,v| k == p} : data[g][s].merge(p => os)
|
|
538
|
+
ss = ps.empty? ? data[g].dup.delete_if {|k,v| k == s} : data[g].merge(s => ps)
|
|
539
|
+
return ss.empty? ? data.dup.delete_if {|k,v| k == g} : data.merge(g => ss)
|
|
541
540
|
end
|
|
542
541
|
data
|
|
543
542
|
end
|
|
544
|
-
|
|
545
|
-
##
|
|
546
|
-
# A transaction for the Hamster-based `RDF::Repository::Implementation`
|
|
547
|
-
# with full serializability.
|
|
548
|
-
#
|
|
549
|
-
# @todo refactor me!
|
|
550
|
-
# @see RDF::Transaction
|
|
551
|
-
class SerializedTransaction < Transaction
|
|
552
|
-
##
|
|
553
|
-
# @see Transaction#initialize
|
|
554
|
-
def initialize(*args, **options, &block)
|
|
555
|
-
super(*args, **options, &block)
|
|
556
|
-
@base_snapshot = @snapshot
|
|
557
|
-
end
|
|
558
|
-
|
|
559
|
-
##
|
|
560
|
-
# Inserts the statement to the transaction's working snapshot.
|
|
561
|
-
#
|
|
562
|
-
# @see Transaction#insert_statement
|
|
563
|
-
def insert_statement(statement)
|
|
564
|
-
@snapshot = @snapshot.class
|
|
565
|
-
.new(data: @snapshot.send(:insert_to,
|
|
566
|
-
@snapshot.send(:data),
|
|
567
|
-
process_statement(statement)))
|
|
568
|
-
end
|
|
569
|
-
|
|
570
|
-
##
|
|
571
|
-
# Deletes the statement from the transaction's working snapshot.
|
|
572
|
-
#
|
|
573
|
-
# @see Transaction#insert_statement
|
|
574
|
-
def delete_statement(statement)
|
|
575
|
-
@snapshot = @snapshot.class
|
|
576
|
-
.new(data: @snapshot.send(:delete_from,
|
|
577
|
-
@snapshot.send(:data),
|
|
578
|
-
process_statement(statement)))
|
|
579
|
-
end
|
|
580
|
-
|
|
581
|
-
##
|
|
582
|
-
# @see RDF::Dataset#isolation_level
|
|
583
|
-
def isolation_level
|
|
584
|
-
:serializable
|
|
585
|
-
end
|
|
586
|
-
|
|
587
|
-
##
|
|
588
|
-
# @note this is a simple object equality check.
|
|
589
|
-
#
|
|
590
|
-
# @see RDF::Transaction#mutated?
|
|
591
|
-
def mutated?
|
|
592
|
-
!@snapshot.send(:data).equal?(repository.send(:data))
|
|
593
|
-
end
|
|
594
|
-
|
|
595
|
-
##
|
|
596
|
-
# Replaces repository data with the transaction's snapshot in a safely
|
|
597
|
-
# serializable fashion.
|
|
598
|
-
#
|
|
599
|
-
# @note this transaction uses a pessimistic merge strategy which
|
|
600
|
-
# fails the transaction if any data has changed in the repository
|
|
601
|
-
# since transaction start time. However, the specific guarantee is
|
|
602
|
-
# softer: multiple concurrent conflicting transactions will not
|
|
603
|
-
# succeed. We may choose to implement a less pessimistic merge
|
|
604
|
-
# strategy as a non-breaking change.
|
|
605
|
-
#
|
|
606
|
-
# @raise [TransactionError] when the transaction can't be merged.
|
|
607
|
-
# @see Transaction#execute
|
|
608
|
-
def execute
|
|
609
|
-
raise TransactionError, 'Cannot execute a rolled back transaction. ' \
|
|
610
|
-
'Open a new one instead.' if @rolledback
|
|
611
|
-
|
|
612
|
-
raise TransactionError, 'Error merging transaction. Repository' \
|
|
613
|
-
'has changed during transaction time.' unless
|
|
614
|
-
repository.send(:data).equal? @base_snapshot.send(:data)
|
|
615
|
-
|
|
616
|
-
repository.send(:data=, @snapshot.send(:data))
|
|
617
|
-
end
|
|
618
|
-
end
|
|
619
543
|
end # Implementation
|
|
620
544
|
end # Repository
|
|
621
545
|
end # RDF
|
data/lib/rdf/transaction.rb
CHANGED
|
@@ -247,7 +247,7 @@ module RDF
|
|
|
247
247
|
# @raise [TransactionError] if the transaction can't be applied
|
|
248
248
|
def execute
|
|
249
249
|
raise TransactionError, 'Cannot execute a rolled back transaction. ' \
|
|
250
|
-
'Open a new one instead.' if @rolledback
|
|
250
|
+
'Open a new one instead.' if instance_variable_defined?(:@rolledback) && @rolledback
|
|
251
251
|
@changes.apply(@repository)
|
|
252
252
|
end
|
|
253
253
|
|
|
@@ -322,7 +322,81 @@ module RDF
|
|
|
322
322
|
end
|
|
323
323
|
|
|
324
324
|
public
|
|
325
|
-
|
|
325
|
+
|
|
326
|
+
##
|
|
327
|
+
# A transaction with full serializability.
|
|
328
|
+
#
|
|
329
|
+
# @todo refactor me!
|
|
330
|
+
# @see RDF::Transaction
|
|
331
|
+
class SerializedTransaction < Transaction
|
|
332
|
+
##
|
|
333
|
+
# @see Transaction#initialize
|
|
334
|
+
def initialize(*args, **options, &block)
|
|
335
|
+
super(*args, **options, &block)
|
|
336
|
+
@base_snapshot = @snapshot
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
##
|
|
340
|
+
# Inserts the statement to the transaction's working snapshot.
|
|
341
|
+
#
|
|
342
|
+
# @see Transaction#insert_statement
|
|
343
|
+
def insert_statement(statement)
|
|
344
|
+
@snapshot = @snapshot.class
|
|
345
|
+
.new(data: @snapshot.send(:insert_to,
|
|
346
|
+
@snapshot.send(:data),
|
|
347
|
+
process_statement(statement)))
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
##
|
|
351
|
+
# Deletes the statement from the transaction's working snapshot.
|
|
352
|
+
#
|
|
353
|
+
# @see Transaction#insert_statement
|
|
354
|
+
def delete_statement(statement)
|
|
355
|
+
@snapshot = @snapshot.class
|
|
356
|
+
.new(data: @snapshot.send(:delete_from,
|
|
357
|
+
@snapshot.send(:data),
|
|
358
|
+
process_statement(statement)))
|
|
359
|
+
end
|
|
360
|
+
|
|
361
|
+
##
|
|
362
|
+
# @see RDF::Dataset#isolation_level
|
|
363
|
+
def isolation_level
|
|
364
|
+
:serializable
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
##
|
|
368
|
+
# @note this is a simple object equality check.
|
|
369
|
+
#
|
|
370
|
+
# @see RDF::Transaction#mutated?
|
|
371
|
+
def mutated?
|
|
372
|
+
!@snapshot.send(:data).equal?(repository.send(:data))
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
##
|
|
376
|
+
# Replaces repository data with the transaction's snapshot in a safely
|
|
377
|
+
# serializable fashion.
|
|
378
|
+
#
|
|
379
|
+
# @note this transaction uses a pessimistic merge strategy which
|
|
380
|
+
# fails the transaction if any data has changed in the repository
|
|
381
|
+
# since transaction start time. However, the specific guarantee is
|
|
382
|
+
# softer: multiple concurrent conflicting transactions will not
|
|
383
|
+
# succeed. We may choose to implement a less pessimistic merge
|
|
384
|
+
# strategy as a non-breaking change.
|
|
385
|
+
#
|
|
386
|
+
# @raise [TransactionError] when the transaction can't be merged.
|
|
387
|
+
# @see Transaction#execute
|
|
388
|
+
def execute
|
|
389
|
+
raise TransactionError, 'Cannot execute a rolled back transaction. ' \
|
|
390
|
+
'Open a new one instead.' if instance_variable_defined?(:@rolledback) && @rolledback
|
|
391
|
+
|
|
392
|
+
raise TransactionError, 'Error merging transaction. Repository' \
|
|
393
|
+
'has changed during transaction time.' unless
|
|
394
|
+
repository.send(:data).equal? @base_snapshot.send(:data)
|
|
395
|
+
|
|
396
|
+
repository.send(:data=, @snapshot.send(:data))
|
|
397
|
+
end
|
|
398
|
+
end # SerializedTransaction
|
|
399
|
+
|
|
326
400
|
##
|
|
327
401
|
# An error class for transaction failures.
|
|
328
402
|
#
|
data/lib/rdf/util/file.rb
CHANGED
|
@@ -98,7 +98,7 @@ module RDF; module Util
|
|
|
98
98
|
headers: response.headers
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
RemoteDocument.new(response.body, document_options)
|
|
102
102
|
when 300..399
|
|
103
103
|
# Document base is redirected location
|
|
104
104
|
# Location may be relative
|
|
@@ -215,7 +215,7 @@ module RDF; module Util
|
|
|
215
215
|
headers: response.headers
|
|
216
216
|
}
|
|
217
217
|
|
|
218
|
-
|
|
218
|
+
RemoteDocument.new(response.body, document_options)
|
|
219
219
|
else
|
|
220
220
|
raise IOError, "<#{base_uri}>: #{response.status}"
|
|
221
221
|
end
|
data/lib/rdf/util/logger.rb
CHANGED
|
@@ -17,17 +17,20 @@ module RDF; module Util
|
|
|
17
17
|
# @param [Hash{Symbol => Object}] options
|
|
18
18
|
# @option options [Logger, #<<] :logger
|
|
19
19
|
# @return [Logger, #write, #<<]
|
|
20
|
-
def logger(**options)
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
def logger(logger: nil, **options)
|
|
21
|
+
# Guard against undefined instance variables, which may be a warning if used.
|
|
22
|
+
@options = {} unless instance_variable_defined?(:@options) || frozen?
|
|
23
|
+
logger ||= @logger if instance_variable_defined?(:@logger)
|
|
24
|
+
logger = @options[:logger] if logger.nil? && instance_variable_defined?(:@options) && @options
|
|
23
25
|
if logger.nil?
|
|
24
26
|
# Unless otherwise specified, use $stderr
|
|
25
|
-
logger =
|
|
27
|
+
logger = IOWrapper.new($stderr)
|
|
26
28
|
|
|
27
29
|
# Reset log_statistics so that it's not inherited across different instances
|
|
28
30
|
logger.log_statistics.clear if logger.respond_to?(:log_statistics)
|
|
29
31
|
end
|
|
30
|
-
logger =
|
|
32
|
+
logger = ::Logger.new(::File.open(::File::NULL, "w")) unless logger # Incase false was used, which is frozen
|
|
33
|
+
@options[:logger] ||= logger if instance_variable_defined?(:@options)
|
|
31
34
|
logger.extend(LoggerBehavior) unless logger.is_a?(LoggerBehavior)
|
|
32
35
|
logger
|
|
33
36
|
end
|
data/lib/rdf/vocabulary.rb
CHANGED
|
@@ -53,8 +53,7 @@ module RDF
|
|
|
53
53
|
# "rdfs:subClassOf" => "http://example/SuperClass"
|
|
54
54
|
# end
|
|
55
55
|
#
|
|
56
|
-
# @see
|
|
57
|
-
# @see http://en.wikipedia.org/wiki/QName
|
|
56
|
+
# @see https://www.w3.org/TR/rdf-sparql-query/#prefNames
|
|
58
57
|
class Vocabulary
|
|
59
58
|
extend ::Enumerable
|
|
60
59
|
|
|
@@ -70,7 +69,7 @@ module RDF
|
|
|
70
69
|
# @return [Enumerator]
|
|
71
70
|
def each(&block)
|
|
72
71
|
if self.equal?(Vocabulary)
|
|
73
|
-
if @vocabs
|
|
72
|
+
if instance_variable_defined?(:@vocabs) && @vocabs
|
|
74
73
|
@vocabs.select(&:name).each(&block)
|
|
75
74
|
else
|
|
76
75
|
# This is needed since all vocabulary classes are defined using
|
|
@@ -356,7 +355,7 @@ module RDF
|
|
|
356
355
|
def ontology(*args)
|
|
357
356
|
case args.length
|
|
358
357
|
when 0
|
|
359
|
-
@ontology
|
|
358
|
+
@ontology if instance_variable_defined?(:@ontology)
|
|
360
359
|
else
|
|
361
360
|
uri, options = args
|
|
362
361
|
URI.cache.delete(uri.to_s.to_sym) # Clear any previous entry
|
|
@@ -379,15 +378,20 @@ module RDF
|
|
|
379
378
|
alias_method :__properties__, :properties
|
|
380
379
|
|
|
381
380
|
##
|
|
382
|
-
# Attempt to expand a Compact IRI/PName
|
|
381
|
+
# Attempt to expand a Compact IRI/PName using loaded vocabularies
|
|
383
382
|
#
|
|
384
383
|
# @param [String, #to_s] pname
|
|
384
|
+
# The local-part of the PName will will have [reserved character escapes](https://www.w3.org/TR/turtle/#reserved) unescaped.
|
|
385
385
|
# @return [Term]
|
|
386
|
-
# @raise [KeyError] if pname suffix not found in identified vocabulary
|
|
386
|
+
# @raise [KeyError] if pname suffix not found in identified vocabulary.
|
|
387
387
|
# @raise [ArgumentError] if resulting URI is not valid
|
|
388
388
|
def expand_pname(pname)
|
|
389
389
|
return pname unless pname.is_a?(String) || pname.is_a?(Symbol)
|
|
390
390
|
prefix, suffix = pname.to_s.split(":", 2)
|
|
391
|
+
# Unescape escaped PN_ESCAPE_CHARS
|
|
392
|
+
if suffix.match?(/\\#{RDF::URI::PN_ESCAPE_CHARS}/)
|
|
393
|
+
suffix = suffix.gsub(RDF::URI::PN_ESCAPES) {|matched| matched[1..-1]}
|
|
394
|
+
end
|
|
391
395
|
if prefix == "rdf"
|
|
392
396
|
RDF[suffix]
|
|
393
397
|
elsif vocab_detail = RDF::Vocabulary.vocab_map[prefix.to_sym]
|
|
@@ -417,9 +421,10 @@ module RDF
|
|
|
417
421
|
end
|
|
418
422
|
|
|
419
423
|
##
|
|
420
|
-
# Return the Vocabulary term associated with a
|
|
424
|
+
# Return the Vocabulary term associated with a URI
|
|
421
425
|
#
|
|
422
|
-
# @param [RDF::URI] uri
|
|
426
|
+
# @param [RDF::URI, String] uri
|
|
427
|
+
# If `uri` has is a pname in a locded vocabulary, the suffix portion of the PName will have escape characters unescaped before resolving against the vocabulary.
|
|
423
428
|
# @return [Vocabulary::Term]
|
|
424
429
|
def find_term(uri)
|
|
425
430
|
uri = RDF::URI(uri)
|
|
@@ -428,7 +433,8 @@ module RDF
|
|
|
428
433
|
if vocab.ontology == uri
|
|
429
434
|
vocab.ontology
|
|
430
435
|
else
|
|
431
|
-
|
|
436
|
+
suffix = uri.to_s[vocab.to_uri.to_s.length..-1].to_s
|
|
437
|
+
vocab[suffix]
|
|
432
438
|
end
|
|
433
439
|
end
|
|
434
440
|
end
|
|
@@ -507,7 +513,7 @@ module RDF
|
|
|
507
513
|
end
|
|
508
514
|
|
|
509
515
|
# Also include the ontology, if it's not also a property
|
|
510
|
-
@ontology.each_statement(&block) if
|
|
516
|
+
@ontology.each_statement(&block) if self.ontology && self.ontology != self
|
|
511
517
|
end
|
|
512
518
|
|
|
513
519
|
##
|
|
@@ -574,6 +580,7 @@ module RDF
|
|
|
574
580
|
term_defs
|
|
575
581
|
end
|
|
576
582
|
|
|
583
|
+
#require 'byebug'; byebug
|
|
577
584
|
# Pass over embedded_defs with anonymous references, once
|
|
578
585
|
embedded_defs.each do |term, attributes|
|
|
579
586
|
attributes.each do |ak, avs|
|
|
@@ -642,12 +649,31 @@ module RDF
|
|
|
642
649
|
alias_method :__name__, :name
|
|
643
650
|
|
|
644
651
|
##
|
|
645
|
-
# Returns a suggested
|
|
652
|
+
# Returns a suggested vocabulary prefix for this vocabulary class.
|
|
646
653
|
#
|
|
647
654
|
# @return [Symbol]
|
|
648
655
|
# @since 0.3.0
|
|
649
656
|
def __prefix__
|
|
650
|
-
|
|
657
|
+
instance_variable_defined?(:@__prefix__) ?
|
|
658
|
+
@__prefix__ :
|
|
659
|
+
__name__.split('::').last.downcase.to_sym
|
|
660
|
+
end
|
|
661
|
+
|
|
662
|
+
##
|
|
663
|
+
# Sets the vocabulary prefix to use for this vocabulary..
|
|
664
|
+
#
|
|
665
|
+
# @example Overriding a standard vocabulary prefix.
|
|
666
|
+
# RDF::Vocab::DC.__prefix__ = :dcterms
|
|
667
|
+
# RDF::Vocab::DC.title.pname #=> 'dcterms:title'
|
|
668
|
+
#
|
|
669
|
+
# @param [Symbol] prefix
|
|
670
|
+
# @return [Symbol]
|
|
671
|
+
# @since 3.2.3
|
|
672
|
+
def __prefix__=(prefix)
|
|
673
|
+
params = RDF::Vocabulary.vocab_map[__prefix__]
|
|
674
|
+
@__prefix__ = prefix.to_sym
|
|
675
|
+
RDF::Vocabulary.register(@__prefix__, self, **params)
|
|
676
|
+
@__prefix__
|
|
651
677
|
end
|
|
652
678
|
|
|
653
679
|
protected
|
|
@@ -1234,16 +1260,16 @@ module RDF
|
|
|
1234
1260
|
values = values.map do |value|
|
|
1235
1261
|
if value.is_a?(Literal) && %w(: comment definition notation note editorialNote).include?(k.to_s)
|
|
1236
1262
|
"%(#{value.to_s.gsub('(', '\(').gsub(')', '\)')}).freeze"
|
|
1237
|
-
|
|
1238
|
-
|
|
1263
|
+
elsif value.node? && value.is_a?(RDF::Vocabulary::Term)
|
|
1264
|
+
"#{value.to_ruby(indent: indent + " ")}.freeze"
|
|
1239
1265
|
elsif value.is_a?(RDF::Term)
|
|
1240
1266
|
"#{value.to_s.inspect}.freeze"
|
|
1241
1267
|
elsif value.is_a?(RDF::List)
|
|
1242
1268
|
list_elements = value.map do |u|
|
|
1243
1269
|
if u.uri?
|
|
1244
1270
|
"#{u.to_s.inspect}.freeze"
|
|
1245
|
-
|
|
1246
|
-
|
|
1271
|
+
elsif u.node? && u.respond_to?(:to_ruby)
|
|
1272
|
+
u.to_ruby(indent: indent + " ")
|
|
1247
1273
|
else
|
|
1248
1274
|
"#{u.to_s.inspect}.freeze"
|
|
1249
1275
|
end
|
data/lib/rdf/writer.rb
CHANGED
|
@@ -516,7 +516,7 @@ module RDF
|
|
|
516
516
|
when RDF::Literal then format_literal(term, **options)
|
|
517
517
|
when RDF::URI then format_uri(term, **options)
|
|
518
518
|
when RDF::Node then format_node(term, **options)
|
|
519
|
-
when RDF::Statement then
|
|
519
|
+
when RDF::Statement then format_quotedTriple(term, **options)
|
|
520
520
|
else nil
|
|
521
521
|
end
|
|
522
522
|
end
|
|
@@ -574,7 +574,7 @@ module RDF
|
|
|
574
574
|
# @return [String]
|
|
575
575
|
# @raise [NotImplementedError] unless implemented in subclass
|
|
576
576
|
# @abstract
|
|
577
|
-
def
|
|
577
|
+
def format_quotedTriple(value, **options)
|
|
578
578
|
raise NotImplementedError.new("#{self.class}#format_statement") # override in subclasses
|
|
579
579
|
end
|
|
580
580
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rdf
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.2.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Arto Bendiken
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date:
|
|
13
|
+
date: 2022-01-16 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: link_header
|
|
@@ -32,76 +32,62 @@ dependencies:
|
|
|
32
32
|
- - ">="
|
|
33
33
|
- !ruby/object:Gem::Version
|
|
34
34
|
version: 0.0.8
|
|
35
|
-
- !ruby/object:Gem::Dependency
|
|
36
|
-
name: hamster
|
|
37
|
-
requirement: !ruby/object:Gem::Requirement
|
|
38
|
-
requirements:
|
|
39
|
-
- - "~>"
|
|
40
|
-
- !ruby/object:Gem::Version
|
|
41
|
-
version: '3.0'
|
|
42
|
-
type: :runtime
|
|
43
|
-
prerelease: false
|
|
44
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
45
|
-
requirements:
|
|
46
|
-
- - "~>"
|
|
47
|
-
- !ruby/object:Gem::Version
|
|
48
|
-
version: '3.0'
|
|
49
35
|
- !ruby/object:Gem::Dependency
|
|
50
36
|
name: rdf-spec
|
|
51
37
|
requirement: !ruby/object:Gem::Requirement
|
|
52
38
|
requirements:
|
|
53
39
|
- - "~>"
|
|
54
40
|
- !ruby/object:Gem::Version
|
|
55
|
-
version: '3.
|
|
41
|
+
version: '3.2'
|
|
56
42
|
type: :development
|
|
57
43
|
prerelease: false
|
|
58
44
|
version_requirements: !ruby/object:Gem::Requirement
|
|
59
45
|
requirements:
|
|
60
46
|
- - "~>"
|
|
61
47
|
- !ruby/object:Gem::Version
|
|
62
|
-
version: '3.
|
|
48
|
+
version: '3.2'
|
|
63
49
|
- !ruby/object:Gem::Dependency
|
|
64
50
|
name: rdf-turtle
|
|
65
51
|
requirement: !ruby/object:Gem::Requirement
|
|
66
52
|
requirements:
|
|
67
53
|
- - "~>"
|
|
68
54
|
- !ruby/object:Gem::Version
|
|
69
|
-
version: '3.
|
|
55
|
+
version: '3.2'
|
|
70
56
|
type: :development
|
|
71
57
|
prerelease: false
|
|
72
58
|
version_requirements: !ruby/object:Gem::Requirement
|
|
73
59
|
requirements:
|
|
74
60
|
- - "~>"
|
|
75
61
|
- !ruby/object:Gem::Version
|
|
76
|
-
version: '3.
|
|
62
|
+
version: '3.2'
|
|
77
63
|
- !ruby/object:Gem::Dependency
|
|
78
64
|
name: rdf-vocab
|
|
79
65
|
requirement: !ruby/object:Gem::Requirement
|
|
80
66
|
requirements:
|
|
81
67
|
- - "~>"
|
|
82
68
|
- !ruby/object:Gem::Version
|
|
83
|
-
version: '3.
|
|
69
|
+
version: '3.2'
|
|
84
70
|
type: :development
|
|
85
71
|
prerelease: false
|
|
86
72
|
version_requirements: !ruby/object:Gem::Requirement
|
|
87
73
|
requirements:
|
|
88
74
|
- - "~>"
|
|
89
75
|
- !ruby/object:Gem::Version
|
|
90
|
-
version: '3.
|
|
76
|
+
version: '3.2'
|
|
91
77
|
- !ruby/object:Gem::Dependency
|
|
92
78
|
name: rdf-xsd
|
|
93
79
|
requirement: !ruby/object:Gem::Requirement
|
|
94
80
|
requirements:
|
|
95
81
|
- - "~>"
|
|
96
82
|
- !ruby/object:Gem::Version
|
|
97
|
-
version: '3.
|
|
83
|
+
version: '3.2'
|
|
98
84
|
type: :development
|
|
99
85
|
prerelease: false
|
|
100
86
|
version_requirements: !ruby/object:Gem::Requirement
|
|
101
87
|
requirements:
|
|
102
88
|
- - "~>"
|
|
103
89
|
- !ruby/object:Gem::Version
|
|
104
|
-
version: '3.
|
|
90
|
+
version: '3.2'
|
|
105
91
|
- !ruby/object:Gem::Dependency
|
|
106
92
|
name: rest-client
|
|
107
93
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -122,14 +108,14 @@ dependencies:
|
|
|
122
108
|
requirements:
|
|
123
109
|
- - "~>"
|
|
124
110
|
- !ruby/object:Gem::Version
|
|
125
|
-
version: '3.
|
|
111
|
+
version: '3.10'
|
|
126
112
|
type: :development
|
|
127
113
|
prerelease: false
|
|
128
114
|
version_requirements: !ruby/object:Gem::Requirement
|
|
129
115
|
requirements:
|
|
130
116
|
- - "~>"
|
|
131
117
|
- !ruby/object:Gem::Version
|
|
132
|
-
version: '3.
|
|
118
|
+
version: '3.10'
|
|
133
119
|
- !ruby/object:Gem::Dependency
|
|
134
120
|
name: rspec-its
|
|
135
121
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -150,14 +136,14 @@ dependencies:
|
|
|
150
136
|
requirements:
|
|
151
137
|
- - "~>"
|
|
152
138
|
- !ruby/object:Gem::Version
|
|
153
|
-
version: '3.
|
|
139
|
+
version: '3.14'
|
|
154
140
|
type: :development
|
|
155
141
|
prerelease: false
|
|
156
142
|
version_requirements: !ruby/object:Gem::Requirement
|
|
157
143
|
requirements:
|
|
158
144
|
- - "~>"
|
|
159
145
|
- !ruby/object:Gem::Version
|
|
160
|
-
version: '3.
|
|
146
|
+
version: '3.14'
|
|
161
147
|
- !ruby/object:Gem::Dependency
|
|
162
148
|
name: yard
|
|
163
149
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -178,28 +164,28 @@ dependencies:
|
|
|
178
164
|
requirements:
|
|
179
165
|
- - "~>"
|
|
180
166
|
- !ruby/object:Gem::Version
|
|
181
|
-
version: '1.
|
|
167
|
+
version: '1.8'
|
|
182
168
|
type: :development
|
|
183
169
|
prerelease: false
|
|
184
170
|
version_requirements: !ruby/object:Gem::Requirement
|
|
185
171
|
requirements:
|
|
186
172
|
- - "~>"
|
|
187
173
|
- !ruby/object:Gem::Version
|
|
188
|
-
version: '1.
|
|
174
|
+
version: '1.8'
|
|
189
175
|
- !ruby/object:Gem::Dependency
|
|
190
176
|
name: faraday_middleware
|
|
191
177
|
requirement: !ruby/object:Gem::Requirement
|
|
192
178
|
requirements:
|
|
193
179
|
- - "~>"
|
|
194
180
|
- !ruby/object:Gem::Version
|
|
195
|
-
version: '1.
|
|
181
|
+
version: '1.2'
|
|
196
182
|
type: :development
|
|
197
183
|
prerelease: false
|
|
198
184
|
version_requirements: !ruby/object:Gem::Requirement
|
|
199
185
|
requirements:
|
|
200
186
|
- - "~>"
|
|
201
187
|
- !ruby/object:Gem::Version
|
|
202
|
-
version: '1.
|
|
188
|
+
version: '1.2'
|
|
203
189
|
description: RDF.rb is a pure-Ruby library for working with Resource Description Framework
|
|
204
190
|
(RDF) data.
|
|
205
191
|
email: public-rdf-ruby@w3.org
|
|
@@ -296,14 +282,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
296
282
|
requirements:
|
|
297
283
|
- - ">="
|
|
298
284
|
- !ruby/object:Gem::Version
|
|
299
|
-
version: '2.
|
|
285
|
+
version: '2.6'
|
|
300
286
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
301
287
|
requirements:
|
|
302
288
|
- - ">="
|
|
303
289
|
- !ruby/object:Gem::Version
|
|
304
290
|
version: '0'
|
|
305
291
|
requirements: []
|
|
306
|
-
rubygems_version: 3.
|
|
292
|
+
rubygems_version: 3.3.3
|
|
307
293
|
signing_key:
|
|
308
294
|
specification_version: 4
|
|
309
295
|
summary: A Ruby library for working with Resource Description Framework (RDF) data.
|