rdf 3.3.2 → 3.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b9b8e26b43854ef02542acbc81b88426f3b5989df1156e010bfb5250f3fb31c6
4
- data.tar.gz: 7a4303eccec6cd20b29bcfcba87a9cffb36c3db7f7045bbd375264922e2a4a66
3
+ metadata.gz: 061dd8c1cc1312a0637faec70a4aff5c8f6872e333c225563cd0f426e46b1021
4
+ data.tar.gz: 1abd0cfb43de3db148b5930165c0fdf494e1313c577a14b93d8385def05885d0
5
5
  SHA512:
6
- metadata.gz: 31e5f916ecc25dddf44f6b6057311b784afa1a593b406e6ba1944481c3f5a2ac8f4de752a86d779d415e21c3292064c363bb9369c86ba8d401b0aebade755195
7
- data.tar.gz: 68d96d55bc4a4ad89472b212db1b6e64a03f30936b0cc7cbc8e802505a133117c1fcf0a311f1a0f6b5c4e91255841f95cd7d4ef2963db665bb648d900aa2e05b
6
+ metadata.gz: 272d88f2911164ecc3a2fa71f485e4f6f789252b9f7f5d2c5b222e60dd65ebf5acf0843de3c68910e6e795ebe3003eca2f956ca309eff8afae13694fe5de94a5
7
+ data.tar.gz: 385f3ff6159082e189d8cfb47bfe4c77243e7c5c18558e5d7a3cd5701d75cebab29f250d7ba28c1f4d7ba5e6564a51236ca367a832534d666c7fc4a4a831bb8a
data/README.md CHANGED
@@ -280,19 +280,24 @@ Internally, an `RDF::Statement` is treated as another resource, along with `RDF:
280
280
 
281
281
  **Note: This feature is subject to change or elimination as the standards process progresses.**
282
282
 
283
- ### Serializing a Graph containing quoted triples
283
+ ### Serializing a Graph containing triple terms
284
284
 
285
285
  require 'rdf/ntriples'
286
286
  statement = RDF::Statement(RDF::URI('bob'), RDF::Vocab::FOAF.age, RDF::Literal(23))
287
- graph = RDF::Graph.new << [statement, RDF::URI("ex:certainty"), RDF::Literal(0.9)]
287
+ reifier = RDF::Node.new
288
+ graph = RDF::Graph.new do |g|
289
+ g << [reifier, RDF.reifies, statement]
290
+ g << [reifier, RDF::URI("ex:certainty"), RDF::Literal(0.9)]
291
+ end
288
292
  graph.dump(:ntriples, validate: false)
289
- # => '<<<bob> <http://xmlns.com/foaf/0.1/age> "23"^^<http://www.w3.org/2001/XMLSchema#integer>>> <ex:certainty> "0.9"^^<http://www.w3.org/2001/XMLSchema#double> .'
293
+ # ==> '_:bn <http://www.w3.org/1999/02/22-rdf-syntax-ns#reifies> <<(<bob> <http://xmlns.com/foaf/0.1/age> "23"^^<http://www.w3.org/2001/XMLSchema#integer>)>> .
294
+ _:bn <ex:certainty> "0.9"^^<http://www.w3.org/2001/XMLSchema#double> .'
290
295
 
291
- ### Reading a Graph containing quoted triples
296
+ ### Reading a Graph containing triple terms
292
297
 
293
298
  By default, the N-Triples reader will reject a document containing a subject resource.
294
299
 
295
- nt = '<<<bob> <http://xmlns.com/foaf/0.1/age> "23"^^<http://www.w3.org/2001/XMLSchema#integer>>> <ex:certainty> "0.9"^^<http://www.w3.org/2001/XMLSchema#double> .'
300
+ nt = '<<(<bob> <http://xmlns.com/foaf/0.1/age> "23"^^<http://www.w3.org/2001/XMLSchema#integer>)>> <ex:certainty> "0.9"^^<http://www.w3.org/2001/XMLSchema#double> .'
296
301
  graph = RDF::Graph.new do |graph|
297
302
  RDF::NTriples::Reader.new(nt) {|reader| graph << reader}
298
303
  end
@@ -346,6 +351,7 @@ other gems:
346
351
  * [RDF::TriG][] (extension)
347
352
  * [RDF::TriX][] (extension)
348
353
  * [RDF::Turtle][] (extension)
354
+ * [RDF::Borsh][] (extension)
349
355
 
350
356
  The meta-gem [LinkedData][LinkedData doc] includes many of these gems.
351
357
 
@@ -511,6 +517,7 @@ see <https://unlicense.org/> or the accompanying {file:UNLICENSE} file.
511
517
  [RDF 1.2]: https://www.w3.org/TR/rdf12-concepts/
512
518
  [SPARQL 1.1]: https://www.w3.org/TR/sparql11-query/
513
519
  [RDF.rb]: https://ruby-rdf.github.io/
520
+ [RDF::Borsh]: https://ruby-rdf.github.io/rdf-borsh
514
521
  [RDF::DO]: https://ruby-rdf.github.io/rdf-do
515
522
  [RDF::Mongo]: https://ruby-rdf.github.io/rdf-mongo
516
523
  [RDF::Sesame]: https://ruby-rdf.github.io/rdf-sesame
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.3.2
1
+ 3.3.3
@@ -84,7 +84,7 @@ module RDF
84
84
  # * `:validity` allows a concrete Enumerable implementation to indicate that it does or does not support valididty checking. By default implementations are assumed to support validity checking.
85
85
  # * `:skolemize` supports [Skolemization](https://www.w3.org/wiki/BnodeSkolemization) of an `Enumerable`. Implementations supporting this feature must implement a `#skolemize` method, taking a base URI used for minting URIs for BNodes as stable identifiers and a `#deskolemize` method, also taking a base URI used for turning URIs having that prefix back into the same BNodes which were originally skolemized.
86
86
  # * `:rdf_full` supports RDF 1.2 Full profile, including support for embedded Triple Terms.
87
- # * `:quoted_triples` supports RDF-star quoted triples.
87
+ # * `:quoted_triples` supports RDF-star quoted triples. (DEPRECATED)
88
88
  # * `:base_direction` supports RDF 1.2 directional language-tagged strings.
89
89
  #
90
90
  # @param [Symbol, #to_sym] feature
@@ -20,7 +20,7 @@ module RDF
20
20
  #
21
21
  # @example Loading graph data from a URL
22
22
  # require 'rdf/rdfxml' # for RDF/XML support
23
- #
23
+ #
24
24
  # graph = RDF::Graph.load("http://www.bbc.co.uk/programmes/b0081dq5.rdf")
25
25
  #
26
26
  # @example Accessing a specific named graph within a {RDF::Repository}
@@ -250,6 +250,36 @@ module RDF
250
250
  end
251
251
  alias_method :has_statement?, :statement?
252
252
 
253
+ ##
254
+ # Returns `true` if `self` contains the given RDF subject term.
255
+ #
256
+ # @param [RDF::Resource] value
257
+ # @return [Boolean]
258
+ def subject? value
259
+ !@data.query({ subject: value, graph_name: graph_name || false }).empty?
260
+ end
261
+ alias_method :has_subject?, :subject?
262
+
263
+ ##
264
+ # Returns `true` if `self` contains the given RDF predicate term.
265
+ #
266
+ # @param [RDF::URI] value
267
+ # @return [Boolean]
268
+ def predicate? value
269
+ !@data.query({ predicate: value, graph_name: graph_name || false }).empty?
270
+ end
271
+ alias_method :has_predicate?, :predicate?
272
+
273
+ ##
274
+ # Returns `true` if `self` contains the given RDF object term.
275
+ #
276
+ # @param [RDF::Term] value
277
+ # @return [Boolean]
278
+ def object? value
279
+ !@data.query({ object: value, graph_name: graph_name || false }).empty?
280
+ end
281
+ alias_method :has_object?, :object?
282
+
253
283
  ##
254
284
  # Enumerates each RDF statement in this graph.
255
285
  #
@@ -26,9 +26,7 @@ module RDF; class Literal
26
26
  # Use midnight as midpoint of the interval
27
27
  ::DateTime.parse(value.strftime('%FT00:00:00'))
28
28
  when value.respond_to?(:to_datetime)
29
- dt = value.to_datetime
30
- @zone = dt.zone
31
- dt
29
+ value.to_datetime
32
30
  else
33
31
  md = value.to_s.match(GRAMMAR)
34
32
  _, dt, tz = Array(md)
@@ -12,10 +12,10 @@ module RDF; class Literal
12
12
  # @since 0.2.1
13
13
  class Decimal < Numeric
14
14
  DATATYPE = RDF::URI("http://www.w3.org/2001/XMLSchema#decimal")
15
- GRAMMAR = /^[\+\-]?\d+(\.\d*)?$/.freeze
15
+ GRAMMAR = /^[\+\-]?(?:(?:\d+(?:\.\d*)?)|(?:\.\d+))$/.freeze
16
16
 
17
17
  ##
18
- # @param [String, BidDecimal, Numeric] value
18
+ # @param [String, BigDecimal, Numeric] value
19
19
  # @param (see Literal#initialize)
20
20
  def initialize(value, datatype: nil, lexical: nil, **options)
21
21
  @datatype = RDF::URI(datatype || self.class.const_get(:DATATYPE))
@@ -12,7 +12,7 @@ module RDF; class Literal
12
12
  # @since 0.2.1
13
13
  class Double < Numeric
14
14
  DATATYPE = RDF::URI("http://www.w3.org/2001/XMLSchema#double")
15
- GRAMMAR = /^(?:NaN|\-?INF|[+\-]?(?:\d+(:?\.\d*)?|\.\d+)(?:[eE][\+\-]?\d+)?)$/.freeze
15
+ GRAMMAR = /^(?:NaN|[+\-]?INF|[+\-]?(?:\d+(:?\.\d*)?|\.\d+)(?:[eE][\+\-]?\d+)?)$/.freeze
16
16
 
17
17
  ##
18
18
  # @param [String, Float, #to_f] value
@@ -26,7 +26,7 @@ module RDF; class Literal
26
26
  when 'INF' then 1/0.0
27
27
  when '-INF' then -1/0.0
28
28
  when 'NAN' then 0/0.0
29
- else Float(value.sub(/\.[eE]/, '.0E')) rescue nil
29
+ else Float(value.sub(/\.[eE]/, '.0E').sub(/\.$/, '.0')) rescue nil
30
30
  end
31
31
  when value.is_a?(::Float) then value
32
32
  when value.respond_to?(:to_f) then value.to_f
@@ -476,7 +476,7 @@ module RDF
476
476
  def to_s
477
477
  (graph_name ? to_quad : to_triple).map do |term|
478
478
  if term.is_a?(Statement)
479
- "<<#{term.to_s[0..-3]}>>"
479
+ "<<(#{term.to_s[0..-3]})>>"
480
480
  elsif term.respond_to?(:to_base)
481
481
  term.to_base
482
482
  else
data/lib/rdf/model/uri.rb CHANGED
@@ -80,6 +80,10 @@ module RDF
80
80
  # scheme, authority, path, query, fragment
81
81
  IRI_PARTS = /^(?:([^:\/?#]+):)?(?:\/\/([^\/?#]*))?([^?#]*)(\?[^#]*)?(#.*)?$/.freeze
82
82
 
83
+ # Special version for file-scheme on Windows (path SHOULD begin with /, but may not)
84
+ # scheme, authority, path, query, fragment
85
+ FILE_PARTS = /^file:(?:\/\/(#{IHOST}))?(\/?[^?#]*)(\?[^#]*)?(#.*)?$/.freeze
86
+
83
87
  # Remove dot expressions regular expressions
84
88
  RDS_2A = /^\.?\.\/(.*)$/.freeze
85
89
  RDS_2B1 = /^\/\.$/.freeze
@@ -160,7 +164,7 @@ module RDF
160
164
  # (see #initialize)
161
165
  # @return [RDF::URI] an immutable, frozen URI object
162
166
  def self.intern(str, *args, **options)
163
- (cache[(str = str.to_s).to_sym] ||= self.new(str, *args, **options)).freeze
167
+ (cache[(str = str.to_s).to_sym] ||= self.new(str.to_s, *args, **options)).freeze
164
168
  end
165
169
 
166
170
  ##
@@ -716,8 +720,8 @@ module RDF
716
720
  ##
717
721
  # @private
718
722
  def freeze
719
- unless frozen?
720
- @mutex.synchronize do
723
+ @mutex.synchronize do
724
+ unless frozen?
721
725
  # Create derived components
722
726
  authority; userinfo; user; password; host; port
723
727
  @value = value.freeze
@@ -851,8 +855,7 @@ module RDF
851
855
  # lexical representation of URI, either absolute or relative
852
856
  # @return [String]
853
857
  def value
854
- return @value if @value
855
- @value = [
858
+ @value ||= [
856
859
  ("#{scheme}:" if absolute?),
857
860
  ("//#{authority}" if authority),
858
861
  path,
@@ -883,17 +886,35 @@ module RDF
883
886
  #
884
887
  # @param [String, to_s] value
885
888
  # @return [Object{Symbol => String}]
889
+ # @see https://datatracker.ietf.org/doc/html/rfc8089
886
890
  def parse(value)
887
- value = value.to_s.dup.force_encoding(Encoding::ASCII_8BIT)
891
+ value = value.to_s.dup.force_encoding(Encoding::UTF_8) unless value && value.encoding == Encoding::UTF_8
888
892
  parts = {}
889
- if matchdata = IRI_PARTS.match(value)
893
+ if matchdata = FILE_PARTS.match(value)
894
+ # A file-based URI is always in the folloring form:
895
+ # * file:/path - absolute path, no host name
896
+ # * file:///path - absolute path, empty host name
897
+ # * file://hostname/path - absolute path with authority.
898
+ # * file://path – is invalid, but treated as file:///path
899
+ scheme = 'file'
900
+ authority, path, query, fragment = matchdata[1..-1]
901
+ if authority && authority.match?(/^[A-Za-z]$/) && Gem.win_platform?
902
+ # In this case, if the authority is a drive letter and part of the path
903
+ authority, path = nil, "#{authority}#{path}"
904
+ end
905
+ # We accept paths that aren't absolute, but coerce them to be absolute
906
+ path = "/#{path}" unless path.start_with?('/')
907
+ elsif matchdata = IRI_PARTS.match(value)
890
908
  scheme, authority, path, query, fragment = matchdata[1..-1]
909
+ authority = nil if authority && authority.empty?
891
910
 
892
- if Gem.win_platform? && scheme && !authority && scheme.match?(/^[a-zA-Z]$/)
893
- # A drive letter, not a scheme
894
- scheme, path = nil, "#{scheme}:#{path}"
911
+ if scheme && scheme.match?(/^[A-Za-z]$/) && Gem.win_platform?
912
+ # On Windows treat D:/foo/bar as a path, not a scheme
913
+ scheme, authority, path = 'file', nil, "/#{scheme}:#{path}"
895
914
  end
915
+ end
896
916
 
917
+ if matchdata
897
918
  userinfo, hostport = authority.to_s.split('@', 2)
898
919
  hostport, userinfo = userinfo, nil unless hostport
899
920
  user, password = userinfo.to_s.split(':', 2)
@@ -30,7 +30,7 @@ module RDF::NTriples
30
30
  #
31
31
  # ** RDF=star
32
32
  #
33
- # Supports statements as resources using `<<s p o>>`.
33
+ # Supports statements as resources using `<<(s p o)>>`.
34
34
  #
35
35
  # @see http://www.w3.org/TR/rdf-testcases/#ntriples
36
36
  # @see http://www.w3.org/TR/n-triples/
@@ -40,8 +40,8 @@ module RDF::NTriples
40
40
 
41
41
  # @see http://www.w3.org/TR/rdf-testcases/#ntrip_strings
42
42
  ESCAPE_CHARS = ["\b", "\f", "\t", "\n", "\r", "\"", "'", "\\"].freeze
43
- UCHAR4 = /\\u([0-9A-Fa-f]{4,4})/.freeze
44
- UCHAR8 = /\\U([0-9A-Fa-f]{8,8})/.freeze
43
+ UCHAR4 = /(?<!\\)\\(?!\\)u([0-9A-Fa-f]{4,4})/.freeze
44
+ UCHAR8 = /(?<!\\)\\(?!\\)U([0-9A-Fa-f]{8,8})/.freeze
45
45
  UCHAR = Regexp.union(UCHAR4, UCHAR8).freeze
46
46
 
47
47
 
@@ -73,8 +73,8 @@ module RDF::NTriples
73
73
  TT_START = /^<<\(/.freeze
74
74
  TT_END = /^\s*\)>>/.freeze
75
75
 
76
- QT_START = /^<</.freeze
77
- QT_END = /^\s*>>/.freeze
76
+ QT_START = /^<</.freeze # DEPRECATED
77
+ QT_END = /^\s*>>/.freeze # DEPRECATED
78
78
 
79
79
  # @see http://www.w3.org/TR/rdf-testcases/#ntrip_grammar
80
80
  COMMENT = /^#\s*(.*)$/.freeze
@@ -187,22 +187,12 @@ module RDF::NTriples
187
187
  # Note: avoiding copying the input string when no escaping is needed
188
188
  # greatly reduces the number of allocations and the processing time.
189
189
  string = string.dup.force_encoding(Encoding::UTF_8) unless string.encoding == Encoding::UTF_8
190
- scanner = StringScanner.new(string)
191
-
192
- buffer = ""
193
-
194
- while !scanner.eos?
195
- buffer << if scanner.scan(ESCAPE_CHARS_ESCAPED_REGEXP)
196
- ESCAPE_CHARS_ESCAPED[scanner.matched]
197
- elsif scanner.scan(UCHAR)
198
- scanner.matched.sub(UCHAR) {[($1 || $2).hex].pack('U*')}
199
- else
200
- # Scan one character
201
- scanner.getch
202
- end
203
- end
204
190
 
205
- buffer
191
+ string
192
+ .gsub(UCHAR) do
193
+ [($1 || $2).hex].pack('U*')
194
+ end
195
+ .gsub(ESCAPE_CHARS_ESCAPED_REGEXP, ESCAPE_CHARS_ESCAPED)
206
196
  end
207
197
 
208
198
  ##
@@ -259,9 +249,9 @@ module RDF::NTriples
259
249
 
260
250
  ##
261
251
  # @return [RDF::Statement]
262
- # @deprecated Quoted triples are now deprecated
252
+ # @deprecated Quoted triples are now deprecated (not supported when validating)
263
253
  def read_quotedTriple
264
- if @options[:rdfstar] && !match(TT_START) && match(QT_START)
254
+ if @options[:rdfstar] && !match(TT_START) && match(QT_START) && !validate?
265
255
  warn "[DEPRECATION] RDF-star quoted triples are deprecated and will be removed in a future version.\n" +
266
256
  "Called from #{Gem.location_of_caller.join(':')}"
267
257
  subject = read_uriref || read_node || read_quotedTriple || fail_subject
@@ -230,7 +230,7 @@ module RDF::NTriples
230
230
  # @param [Hash{Symbol => Object}] options ({})
231
231
  # @return [String]
232
232
  def format_tripleTerm(statement, **options)
233
- "<<(%s %s %s)>>" % statement.to_a.map { |value| format_term(value, **options) }
233
+ "<<( %s %s %s )>>" % statement.to_a.map { |value| format_term(value, **options) }
234
234
  end
235
235
 
236
236
  ##
data/lib/rdf/reader.rb CHANGED
@@ -333,7 +333,7 @@ module RDF
333
333
  # Returns the base URI determined by this reader.
334
334
  #
335
335
  # @example
336
- # reader.prefixes[:dc] #=> RDF::URI('http://purl.org/dc/terms/')
336
+ # reader.base_uri #=> RDF::URI('http://example.com/')
337
337
  #
338
338
  # @return [RDF::URI]
339
339
  # @since 0.3.0
@@ -273,7 +273,7 @@ module RDF
273
273
  when :literal_equality then true
274
274
  when :atomic_write then true
275
275
  when :rdf_full then true
276
- when :quoted_triples then true
276
+ when :quoted_triples then true # DEPRECATED
277
277
  when :base_direction then true
278
278
  when :snapshots then true
279
279
  else false
data/lib/rdf/util/file.rb CHANGED
@@ -297,7 +297,6 @@ module RDF; module Util
297
297
  # @yieldreturn [Object] returned from open_file
298
298
  # @raise [IOError] if not found
299
299
  def self.open_file(filename_or_url, proxy: nil, headers: {}, verify_none: false, **options, &block)
300
- filename_or_url = $1 if filename_or_url.to_s.match(/^file:(.*)$/)
301
300
  remote_document = nil
302
301
 
303
302
  if filename_or_url.to_s.match?(/^https?/)
@@ -319,6 +318,16 @@ module RDF; module Util
319
318
  url_no_frag_or_query.query = nil
320
319
  url_no_frag_or_query.fragment = nil
321
320
  options[:encoding] ||= Encoding::UTF_8
321
+
322
+ # Just use path if there's a file scheme. This leaves out a potential host, which isn't supported anyway.
323
+ if url_no_frag_or_query.scheme == 'file'
324
+ url_no_frag_or_query = url_no_frag_or_query.path
325
+ if url_no_frag_or_query.match?(/^\/[A-Za-z]:/) && Gem.win_platform?
326
+ # Turns "/D:foo" into "D:foo"
327
+ url_no_frag_or_query = url_no_frag_or_query[1..-1]
328
+ end
329
+ end
330
+
322
331
  Kernel.open(url_no_frag_or_query, "r", **options) do |file|
323
332
  document_options = {
324
333
  base_uri: filename_or_url.to_s,
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.3.2
4
+ version: 3.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arto Bendiken
@@ -10,8 +10,42 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2024-07-05 00:00:00.000000000 Z
13
+ date: 2025-06-24 00:00:00.000000000 Z
14
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: bcp47_spec
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '0.2'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '0.2'
29
+ - !ruby/object:Gem::Dependency
30
+ name: bigdecimal
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '3.1'
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: 3.1.5
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - "~>"
44
+ - !ruby/object:Gem::Version
45
+ version: '3.1'
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: 3.1.5
15
49
  - !ruby/object:Gem::Dependency
16
50
  name: link_header
17
51
  requirement: !ruby/object:Gem::Requirement
@@ -33,39 +67,33 @@ dependencies:
33
67
  - !ruby/object:Gem::Version
34
68
  version: 0.0.8
35
69
  - !ruby/object:Gem::Dependency
36
- name: bcp47_spec
70
+ name: logger
37
71
  requirement: !ruby/object:Gem::Requirement
38
72
  requirements:
39
73
  - - "~>"
40
74
  - !ruby/object:Gem::Version
41
- version: '0.2'
75
+ version: '1.5'
42
76
  type: :runtime
43
77
  prerelease: false
44
78
  version_requirements: !ruby/object:Gem::Requirement
45
79
  requirements:
46
80
  - - "~>"
47
81
  - !ruby/object:Gem::Version
48
- version: '0.2'
82
+ version: '1.5'
49
83
  - !ruby/object:Gem::Dependency
50
- name: bigdecimal
84
+ name: ostruct
51
85
  requirement: !ruby/object:Gem::Requirement
52
86
  requirements:
53
87
  - - "~>"
54
88
  - !ruby/object:Gem::Version
55
- version: '3.1'
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- version: 3.1.5
89
+ version: '0.6'
59
90
  type: :runtime
60
91
  prerelease: false
61
92
  version_requirements: !ruby/object:Gem::Requirement
62
93
  requirements:
63
94
  - - "~>"
64
95
  - !ruby/object:Gem::Version
65
- version: '3.1'
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: 3.1.5
96
+ version: '0.6'
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: base64
71
99
  requirement: !ruby/object:Gem::Requirement
@@ -336,7 +364,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
336
364
  - !ruby/object:Gem::Version
337
365
  version: '0'
338
366
  requirements: []
339
- rubygems_version: 3.4.19
367
+ rubygems_version: 3.2.33
340
368
  signing_key:
341
369
  specification_version: 4
342
370
  summary: A Ruby library for working with Resource Description Framework (RDF) data.