rdf 3.2.5 → 3.2.8

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: acd1a596fac04633e2c78342c0d8ec7b6e8b6763160627987df59f9011863ac3
4
- data.tar.gz: cd0b61a753cafe097b3c77de95dc457968661545db2a27482cd68d19facfd068
3
+ metadata.gz: 9a11f72b598d08137366e7d9d0796dc7a0f6bf822484c6809a9e7905270b0b06
4
+ data.tar.gz: 67a7699bef7b127a327ba1dd3b5d53c7155325da9d8520ccf91fe51f4688cca3
5
5
  SHA512:
6
- metadata.gz: 7a1f7d6d0fd7ee8b70c6ccdcf31468b856008f2f3c7d19203ef8b3fd0a5bf86db6a63b876492b78ce521675d88563f59ce58cda96e5f6ca38b547d14d5ca7e7a
7
- data.tar.gz: 6b3fe1371aca25a13f44aabdfc94bc9d9914c076ad760056dc57f0b89bf3bfa06aaad5c53cf2ea0ea5f0da164e23e7033f73c2d0e503674e7b7f818c16cac1a0
6
+ metadata.gz: 46f34b3fd322934aa324b3977714d7a456a4fef2d9aa28c340c484abf2b593ffe3b753b1d4a82e4aa9837321c5232d1d6fce1f46f114bad37dd3f4bf3e6a0b85
7
+ data.tar.gz: 2f07ef6e2c199240232d7185153b0b9fa41dc885bbc0fed2b616fa061440ccb6439eb993ab463f81e6535b946d4e8301d2b6a76fb397c3d5b9ee048fa58654e0
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.2.5
1
+ 3.2.8
data/lib/rdf/cli.rb CHANGED
@@ -572,7 +572,8 @@ module RDF
572
572
  # @param [Hash{Symbol => Object}] options already set
573
573
  # @return [Array<String>] list of executable commands
574
574
  # @overload commands(format: :json, **options)
575
- # @param [:json] format (:json)
575
+ # Returns commands as JSON, for API usage.
576
+ # @param [:json] format
576
577
  # @param [Hash{Symbol => Object}] options already set
577
578
  # @return [Array{Object}]
578
579
  # Returns an array of commands including the command symbol
@@ -593,7 +594,7 @@ module RDF
593
594
  # Subset commands based on filter options
594
595
  cmds = COMMANDS.reject do |k, c|
595
596
  c.fetch(:filter, {}).any? do |opt, val|
596
- options[opt].to_s != val.to_s
597
+ options.merge(format: format)[opt].to_s != val.to_s
597
598
  end
598
599
  end
599
600
 
data/lib/rdf/format.rb CHANGED
@@ -23,7 +23,9 @@ module RDF
23
23
  #
24
24
  # @example Defining a new RDF serialization format class
25
25
  # class RDF::NTriples::Format < RDF::Format
26
- # content_type 'application/n-triples', extension: :nt
26
+ # content_type 'application/n-triples',
27
+ # extension: :nt,
28
+ # uri: RDF::URI("http://www.w3.org/ns/formats/N-Triples")
27
29
  # content_encoding 'utf-8'
28
30
  #
29
31
  # reader RDF::NTriples::Reader
@@ -222,6 +224,19 @@ module RDF
222
224
  @@file_extensions
223
225
  end
224
226
 
227
+ ##
228
+ # Returns the unique URI for the format.
229
+ #
230
+ # @example retrieving a list of supported file format URIs
231
+ #
232
+ # RDF::Format.uris.keys
233
+ #
234
+ # @see https://www.w3.org/ns/formats/
235
+ # @return [Hash{Symbol => URI}]
236
+ def self.uris
237
+ @@uris
238
+ end
239
+
225
240
  ##
226
241
  # Returns the set of format symbols for available RDF::Reader subclasses.
227
242
  #
@@ -465,6 +480,7 @@ module RDF
465
480
  # @option options [Array<String>] :aliases (nil)
466
481
  # @option options [Symbol] :extension (nil)
467
482
  # @option options [Array<Symbol>] :extensions (nil)
483
+ # @option options [URI] :uri (nil)
468
484
  # @return [void]
469
485
  #
470
486
  # @overload content_type
@@ -504,6 +520,10 @@ module RDF
504
520
  @@content_types[aa] << self unless @@content_types[aa].include?(self)
505
521
  end
506
522
  end
523
+ # URI identifying this format
524
+ if uri = options[:uri]
525
+ @@uris[RDF::URI(uri)] = self
526
+ end
507
527
  end
508
528
  end
509
529
 
@@ -517,7 +537,7 @@ module RDF
517
537
  end
518
538
 
519
539
  ##
520
- # Retrieves or defines file extensions for this RDF serialization format.
540
+ # Retrieves file extensions for this RDF serialization format.
521
541
  #
522
542
  # The return is an array where the first element is the cannonical
523
543
  # file extension for the format and following elements are alias file extensions.
@@ -527,6 +547,17 @@ module RDF
527
547
  @@file_extensions.map {|ext, formats| ext if formats.include?(self)}.compact
528
548
  end
529
549
 
550
+ ##
551
+ # Retrieves any format URI defined for this format..
552
+ #
553
+ # @return [URI]
554
+ def self.uri
555
+ @@uris.invert[self]
556
+ end
557
+ class << self
558
+ alias_method :to_uri, :uri
559
+ end
560
+
530
561
  protected
531
562
 
532
563
  ##
@@ -568,6 +599,7 @@ module RDF
568
599
  @@readers = {} # @private
569
600
  @@writers = {} # @private
570
601
  @@subclasses = [] # @private
602
+ @@uris = {} # @private
571
603
 
572
604
  ##
573
605
  # @private
@@ -79,7 +79,7 @@ module RDF
79
79
  #
80
80
  # @return [String]
81
81
  def inspect
82
- sprintf("#<%s:%#0x(%s)>", self.class.name, __id__, uri.to_s)
82
+ sprintf("#<%s:%#0x(%s)>", self.class.name, __id__, count.to_s)
83
83
  end
84
84
 
85
85
  ##
@@ -128,7 +128,7 @@ module RDF; class Literal
128
128
  #
129
129
  # @return [String]
130
130
  def to_s
131
- @string || (@object.strftime(self.class.const_get(:FORMAT)).sub('.000', '') + self.tz)
131
+ @string ||= (@object.strftime(self.class.const_get(:FORMAT)).sub('.000', '') + self.tz)
132
132
  end
133
133
 
134
134
  ##
@@ -146,18 +146,18 @@ module RDF; class Literal
146
146
  #
147
147
  # Otherwise, the timezone is set based on the difference between the current timezone offset (if any) and `zone`.
148
148
  #
149
- # @param [String] zone (nil) In the form of {ZONE_GRAMMAR}.
149
+ # @param [DayTimeDuration, String] zone (nil) In the form of {ZONE_GRAMMAR}.
150
150
  # @return [Temporal] `self`
151
151
  # @raise [RangeError] if `zone < -14*60` or `zone > 14*60`
152
152
  # @see https://www.w3.org/TR/xpath-functions/#func-adjust-dateTime-to-timezone
153
153
  def adjust_to_timezone!(*args)
154
154
  zone = args.empty? ? '+00:00' : args.first
155
- if zone.nil?
155
+ if zone.to_s.empty?
156
156
  # Remove timezone component
157
157
  @object = self.class.new(@object.strftime(self.class.const_get(:FORMAT))).object
158
158
  @zone = nil
159
159
  else
160
- md = zone.match(ZONE_GRAMMAR)
160
+ md = zone.to_s.match(ZONE_GRAMMAR)
161
161
  raise ArgumentError,
162
162
  "expected #{zone.inspect} to be a xsd:dayTimeDuration or +/-HH:MM" unless md
163
163
 
@@ -39,7 +39,10 @@ module RDF; class Literal
39
39
  end
40
40
  # Normalize 24:00:00 to 00:00:00
41
41
  hr, mi, se = tm.split(':')
42
- hr = "%.2i" % (hr.to_i % 24) if hr.to_i > 23
42
+ if hr.to_i > 23
43
+ hr = "%.2i" % (hr.to_i % 24)
44
+ @string = nil
45
+ end
43
46
  value = "#{hr}:#{mi}:#{se}"
44
47
  # Normalize to 1972-12-31 dateTime base
45
48
  ::DateTime.parse("1972-12-31T#{hr}:#{mi}:#{se}#{@zone}")
data/lib/rdf/model/uri.rb CHANGED
@@ -76,6 +76,7 @@ module RDF
76
76
  IRI = Regexp.compile("^#{SCHEME}:(?:#{IHIER_PART})(?:\\?#{IQUERY})?(?:\\##{IFRAGMENT})?$").freeze
77
77
 
78
78
  # Split an IRI into it's component parts
79
+ # scheme, authority, path, query, fragment
79
80
  IRI_PARTS = /^(?:([^:\/?#]+):)?(?:\/\/([^\/?#]*))?([^?#]*)(\?[^#]*)?(#.*)?$/.freeze
80
81
 
81
82
  # Remove dot expressions regular expressions
@@ -872,6 +873,12 @@ module RDF
872
873
  parts = {}
873
874
  if matchdata = IRI_PARTS.match(value)
874
875
  scheme, authority, path, query, fragment = matchdata[1..-1]
876
+
877
+ if Gem.win_platform? && scheme && !authority && scheme.match?(/^[a-zA-Z]$/)
878
+ # A drive letter, not a scheme
879
+ scheme, path = nil, "#{scheme}:#{path}"
880
+ end
881
+
875
882
  userinfo, hostport = authority.to_s.split('@', 2)
876
883
  hostport, userinfo = userinfo, nil unless hostport
877
884
  user, password = userinfo.to_s.split(':', 2)
data/lib/rdf/nquads.rb CHANGED
@@ -20,7 +20,10 @@ module RDF
20
20
  # @see http://www.w3.org/TR/n-quads/
21
21
  # @since 0.4.0
22
22
  class Format < RDF::Format
23
- content_type 'application/n-quads', extension: :nq, alias: 'text/x-nquads;q=0.2'
23
+ content_type 'application/n-quads',
24
+ extension: :nq,
25
+ alias: 'text/x-nquads;q=0.2',
26
+ uri: RDF::URI("http://www.w3.org/ns/formats/N-Quads")
24
27
  content_encoding 'utf-8'
25
28
 
26
29
  reader { RDF::NQuads::Reader }
@@ -16,7 +16,10 @@ module RDF::NTriples
16
16
  # @see http://www.w3.org/TR/rdf-testcases/#ntriples
17
17
  # @see http://www.w3.org/TR/n-triples/
18
18
  class Format < RDF::Format
19
- content_type 'application/n-triples', extension: :nt, alias: 'text/plain;q=0.2'
19
+ content_type 'application/n-triples',
20
+ extension: :nt,
21
+ alias: 'text/plain;q=0.2',
22
+ uri: RDF::URI("http://www.w3.org/ns/formats/N-Triples")
20
23
  content_encoding 'utf-8'
21
24
 
22
25
  reader { RDF::NTriples::Reader }
@@ -160,7 +160,7 @@ module RDF; class Query
160
160
  #
161
161
  # @param [RDF::Queryable] queryable
162
162
  # the graph or repository to query
163
- # @param [Hash{Symbol => RDF::Term}] bindings
163
+ # @param [Hash{Symbol => RDF::Term}, RDF::Query::Solution] bindings
164
164
  # optional variable bindings to use
165
165
  # @yield [statement]
166
166
  # each matching statement
@@ -171,6 +171,7 @@ module RDF; class Query
171
171
  # @see RDF::Queryable#query
172
172
  # @since 0.3.0
173
173
  def execute(queryable, bindings = {}, &block)
174
+ bindings = bindings.to_h if bindings.is_a?(Solution)
174
175
  query = {
175
176
  subject: subject.is_a?(Variable) && bindings[subject.to_sym] ? bindings[subject.to_sym] : subject,
176
177
  predicate: predicate.is_a?(Variable) && bindings[predicate.to_sym] ? bindings[predicate.to_sym] : predicate,
@@ -317,13 +317,12 @@ class RDF::Query
317
317
  def hash
318
318
  @bindings.hash
319
319
  end
320
-
320
+
321
321
  ##
322
322
  # Equivalence of solution
323
323
  def eql?(other)
324
324
  other.is_a?(Solution) && @bindings.eql?(other.bindings)
325
325
  end
326
- alias_method :==, :eql?
327
326
 
328
327
  ##
329
328
  # Equals of solution
@@ -77,6 +77,15 @@ module RDF; class Query
77
77
  end
78
78
  end
79
79
 
80
+ ##
81
+ # Sets variable names used in these solutions. If not set, the default is determined by the variables used in each solution.
82
+ #
83
+ # @param [Array<Symbol, RDF::Query::Variable>] vars
84
+ # @return [Array<Symbol>]
85
+ def variable_names=(vars)
86
+ @variable_names = vars.map(&:to_sym)
87
+ end
88
+
80
89
  ##
81
90
  # @overload variable?
82
91
  # Returns `false`.
@@ -294,5 +303,17 @@ module RDF; class Query
294
303
  self
295
304
  end
296
305
  alias_method :limit!, :limit
306
+
307
+ ##
308
+ # Equivalence of solution
309
+ def eql?(other)
310
+ super && (!other.respond_to?(:variable_names) || variable_names.eql?(other.variable_names))
311
+ end
312
+
313
+ ##
314
+ # Equals of solution
315
+ def ==(other)
316
+ super && (!other.respond_to?(:variable_names) || variable_names.eql?(other.variable_names))
317
+ end
297
318
  end # Solutions
298
319
  end; end # RDF::Query
data/lib/rdf/query.rb CHANGED
@@ -294,7 +294,7 @@ module RDF
294
294
  # Alias for `:graph_name`.
295
295
  # @param [Hash{Symbol => Object}] options
296
296
  # any additional keyword options
297
- # @option options [Hash{Symbol => RDF::Term}] bindings
297
+ # @option options [Hash{Symbol => RDF::Term}, RDF::Query::Solution] bindings
298
298
  # optional variable bindings to use
299
299
  # @option options [Boolean] :optimize
300
300
  # Optimize query before execution.
@@ -313,6 +313,7 @@ module RDF
313
313
  # Otherwise, a quick empty solution simplifies the logic below; no special case for
314
314
  # the first pattern
315
315
  @solutions = Query::Solutions(solutions)
316
+ bindings = bindings.to_h if bindings.is_a?(Solution)
316
317
 
317
318
  # If there are no patterns, just return the empty solution
318
319
  if empty?
@@ -341,7 +342,7 @@ module RDF
341
342
  bindings.each_key do |variable|
342
343
  if pattern.variables.include?(variable)
343
344
  unbound_solutions, old_solutions = old_solutions, Query::Solutions()
344
- bindings[variable].each do |binding|
345
+ Array(bindings[variable]).each do |binding|
345
346
  unbound_solutions.each do |solution|
346
347
  old_solutions << solution.merge(variable => binding)
347
348
  end
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.2.5
4
+ version: 3.2.8
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: 2022-02-22 00:00:00.000000000 Z
13
+ date: 2022-05-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: link_header