rdf 3.2.5 → 3.2.8

Sign up to get free protection for your applications and to get access to all the features.
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