json-ld 3.0.0 → 3.0.1

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: 33d72fb295b05e075532454ade144d79cf15458946492639f9a941a62668c510
4
- data.tar.gz: a382b3bdf08bc1b377d5d01f8d2bae93631e7f9077161fd6bbddfd7477a4c775
3
+ metadata.gz: e6f16239f3f6fc54a6a0e1e6a68d097ba97bb268893f3160df3fe86b4ac6170e
4
+ data.tar.gz: f21243bfcf58a41dd1a091ac9a92664be80e4e8a813ed9630285f1f96ead4f4e
5
5
  SHA512:
6
- metadata.gz: fea935d4ce21a779b4d6eb2bd38eaf8f0859b4e312b8baa509e3325663597cffcef934e3210dda62e339b08d86dc689458fc331b5edf86e500b28ffbe4679548
7
- data.tar.gz: 1d589f193efd2725ac4ac4d200de04fea6d13296fa7ad3989cf40cfed30424dd91dfb27ced0eda4ce88d0f5676e90b36e5b4cff8185afac9644fd3cc7edd7c0a
6
+ metadata.gz: 9890153889067a1d87707aac9b52cc6b914dcf0372253d51ba3e496b97f87f5b0bfaa07091513c1f3e3e8b23852151f7b221ef21e5d83e94f59cff3079120fd9
7
+ data.tar.gz: 0e6240f1d3e02b145a7a786a14770c181700e777d99bf7af924d50af221074ccf2e0fb20659cfc5c061ef9c5550acb397c433b029f115f1eba89dd25aa60378e
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.0.0
1
+ 3.0.1
@@ -71,6 +71,8 @@ module JSON::LD
71
71
  # A context that is used to initialize the active context when expanding a document.
72
72
  # @option options [Boolean, String, RDF::URI] :flatten
73
73
  # If set to a value that is not `false`, the JSON-LD processor must modify the output of the Compaction Algorithm or the Expansion Algorithm by coalescing all properties associated with each subject via the Flattening Algorithm. The value of `flatten must` be either an _IRI_ value representing the name of the graph to flatten, or `true`. If the value is `true`, then the first graph encountered in the input document is selected and flattened.
74
+ # @option options [String] :language
75
+ # When set, this has the effect of inserting a context definition with `@language` set to the associated value, creating a default language for interpreting string values.
74
76
  # @option options [String] :processingMode
75
77
  # Processing mode, json-ld-1.0 or json-ld-1.1.
76
78
  # If `processingMode` is not specified, a mode of `json-ld-1.0` or `json-ld-1.1` is set, the context used for `expansion` or `compaction`.
@@ -80,12 +82,15 @@ module JSON::LD
80
82
  # Use unique bnode identifiers, defaults to using the identifier which the node was originally initialized with (if any).
81
83
  # @option options [Symbol] :adapter used with MultiJson
82
84
  # @option options [Boolean] :validate Validate input, if a string or readable object.
85
+ # @option options [Boolean] :ordered (true)
86
+ # Order traversal of dictionary members by key when performing algorithms.
83
87
  # @yield [api]
84
88
  # @yieldparam [API]
85
89
  # @raise [JsonLdError]
86
90
  def initialize(input, context, rename_bnodes: true, unique_bnodes: false, **options, &block)
87
91
  @options = {
88
92
  compactArrays: true,
93
+ ordered: false,
89
94
  documentLoader: self.class.method(:documentLoader)
90
95
  }.merge(options)
91
96
  @namer = unique_bnodes ? BlankNodeUniqer.new : (rename_bnodes ? BlankNodeNamer.new("b") : BlankNodeMapper.new)
@@ -161,11 +166,11 @@ module JSON::LD
161
166
  # @return [Object, Array<Hash>]
162
167
  # If a block is given, the result of evaluating the block is returned, otherwise, the expanded JSON-LD document
163
168
  # @see http://json-ld.org/spec/latest/json-ld-api/#expansion-algorithm
164
- def self.expand(input, ordered: true, framing: false, **options, &block)
169
+ def self.expand(input, framing: false, **options, &block)
165
170
  result, doc_base = nil
166
171
  API.new(input, options[:expandContext], options) do
167
172
  result = self.expand(self.value, nil, self.context,
168
- ordered: ordered,
173
+ ordered: @options[:ordered],
169
174
  framing: framing)
170
175
  doc_base = @options[:base]
171
176
  end
@@ -216,14 +221,14 @@ module JSON::LD
216
221
 
217
222
  # 1) Perform the Expansion Algorithm on the JSON-LD input.
218
223
  # This removes any existing context to allow the given context to be cleanly applied.
219
- expanded_input = expanded ? input : API.expand(input, options) do |res, base_iri|
224
+ expanded_input = expanded ? input : API.expand(input, options.merge(ordered: false)) do |res, base_iri|
220
225
  options[:base] ||= base_iri if options[:compactToRelative]
221
226
  res
222
227
  end
223
228
 
224
229
  API.new(expanded_input, context, no_default_base: true, **options) do
225
230
  log_debug(".compact") {"expanded input: #{expanded_input.to_json(JSON_STATE) rescue 'malformed json'}"}
226
- result = compact(value)
231
+ result = compact(value, ordered: @options[:ordered])
227
232
 
228
233
  # xxx) Add the given context to the output
229
234
  ctx = self.context.serialize
@@ -274,23 +279,23 @@ module JSON::LD
274
279
  create_node_map(value, graph_maps)
275
280
 
276
281
  default_graph = graph_maps['@default']
277
- graph_maps.keys.sort.each do |graph_name|
282
+ graph_maps.keys.opt_sort(ordered: @options[:ordered]).each do |graph_name|
278
283
  next if graph_name == '@default'
279
284
 
280
285
  graph = graph_maps[graph_name]
281
286
  entry = default_graph[graph_name] ||= {'@id' => graph_name}
282
287
  nodes = entry['@graph'] ||= []
283
- graph.keys.sort.each do |id|
288
+ graph.keys.opt_sort(ordered: @options[:ordered]).each do |id|
284
289
  nodes << graph[id] unless node_reference?(graph[id])
285
290
  end
286
291
  end
287
- default_graph.keys.sort.each do |id|
292
+ default_graph.keys.opt_sort(ordered: @options[:ordered]).each do |id|
288
293
  flattened << default_graph[id] unless node_reference?(default_graph[id])
289
294
  end
290
295
 
291
296
  if context && !flattened.empty?
292
297
  # Otherwise, return the result of compacting flattened according the Compaction algorithm passing context ensuring that the compaction result uses the @graph keyword (or its alias) at the top-level, even if the context is empty or if there is only one element to put in the @graph array. This ensures that the returned document has a deterministic structure.
293
- compacted = as_array(compact(flattened))
298
+ compacted = as_array(compact(flattened, ordered: @options[:ordered]))
294
299
  kwgraph = self.context.compact_iri('@graph', quiet: true)
295
300
  flattened = self.context.serialize.merge(kwgraph => compacted)
296
301
  end
@@ -337,7 +342,6 @@ module JSON::LD
337
342
  explicit: false,
338
343
  requireAll: true,
339
344
  omitDefault: false,
340
- omitGraph: false,
341
345
  documentLoader: method(:documentLoader)
342
346
  }.merge(options)
343
347
 
@@ -361,19 +365,24 @@ module JSON::LD
361
365
  end
362
366
 
363
367
  # Expand input to simplify processing
364
- expanded_input = expanded ? input : API.expand(input, options) do |res, base_iri|
368
+ expanded_input = expanded ? input : API.expand(input, options.merge(ordered: false)) do |res, base_iri|
365
369
  options[:base] ||= base_iri if options[:compactToRelative]
366
370
  res
367
371
  end
368
372
 
369
373
  # Expand frame to simplify processing
370
- expanded_frame = API.expand(frame, framing: true, **options)
374
+ expanded_frame = API.expand(frame, options.merge(framing: true, ordered: false))
371
375
 
372
376
  # Initialize input using frame as context
373
377
  API.new(expanded_input, frame['@context'], no_default_base: true, **options) do
374
378
  log_debug(".frame") {"expanded input: #{expanded_input.to_json(JSON_STATE) rescue 'malformed json'}"}
375
379
  log_debug(".frame") {"expanded frame: #{expanded_frame.to_json(JSON_STATE) rescue 'malformed json'}"}
376
380
 
381
+ # Set omitGraph option, if not present, based on processingMode
382
+ unless options.has_key?(:omitGraph)
383
+ options[:omitGraph] = @options[:processingMode] != 'json-ld-1.0'
384
+ end
385
+
377
386
  # Get framing nodes from expanded input, replacing Blank Node identifiers as necessary
378
387
  create_node_map(value, framing_state[:graphMap], active_graph: '@default')
379
388
 
@@ -391,7 +400,7 @@ module JSON::LD
391
400
  framing_state[:subjects] = framing_state[:graphMap][framing_state[:graph]]
392
401
 
393
402
  result = []
394
- frame(framing_state, framing_state[:subjects].keys.sort, (expanded_frame.first || {}), parent: result, **options)
403
+ frame(framing_state, framing_state[:subjects].keys.opt_sort(ordered: @options[:ordered]), (expanded_frame.first || {}), parent: result, **options)
395
404
 
396
405
  # Count blank node identifiers used in the document, if pruning
397
406
  unless @options[:processingMode] == 'json-ld-1.0'
@@ -402,7 +411,7 @@ module JSON::LD
402
411
  # Initalize context from frame
403
412
  @context = @context.parse(frame['@context'])
404
413
  # Compact result
405
- compacted = compact(result)
414
+ compacted = compact(result, ordered: @options[:ordered])
406
415
  compacted = [compacted] unless options[:omitGraph] || compacted.is_a?(Array)
407
416
 
408
417
  # Add the given context to the output
@@ -443,7 +452,7 @@ module JSON::LD
443
452
  end
444
453
 
445
454
  # Expand input to simplify processing
446
- expanded_input = expanded ? input : API.expand(input, ordered: false, **options)
455
+ expanded_input = expanded ? input : API.expand(input, options.merge(ordered: false))
447
456
 
448
457
  API.new(expanded_input, nil, options) do
449
458
  # 1) Perform the Expansion Algorithm on the JSON-LD input.
@@ -487,8 +496,11 @@ module JSON::LD
487
496
  def self.fromRdf(input, useRdfType: false, useNativeTypes: false, **options, &block)
488
497
  result = nil
489
498
 
490
- API.new(nil, nil, options) do |api|
491
- result = api.from_statements(input, useRdfType: useRdfType, useNativeTypes: useNativeTypes)
499
+ API.new(nil, nil, options) do
500
+ result = from_statements(input,
501
+ useRdfType: useRdfType,
502
+ useNativeTypes: useNativeTypes,
503
+ ordered: @options[:ordered])
492
504
  end
493
505
 
494
506
  block_given? ? yield(result) : result
@@ -9,8 +9,10 @@ module JSON::LD
9
9
  #
10
10
  # @param [Array, Hash] element
11
11
  # @param [String] property (nil)
12
+ # @param [Boolean] ordered (true)
13
+ # Ensure output objects have keys ordered properly
12
14
  # @return [Array, Hash]
13
- def compact(element, property: nil)
15
+ def compact(element, property: nil, ordered: false)
14
16
  #if property.nil?
15
17
  # log_debug("compact") {"element: #{element.inspect}, ec: #{context.inspect}"}
16
18
  #else
@@ -25,7 +27,7 @@ module JSON::LD
25
27
  case element
26
28
  when Array
27
29
  #log_debug("") {"Array #{element.inspect}"}
28
- result = element.map {|item| compact(item, property: property)}.compact
30
+ result = element.map {|item| compact(item, property: property, ordered: ordered)}.compact
29
31
 
30
32
  # If element has a single member and the active property has no
31
33
  # @container mapping to @list or @set, the compacted value is that
@@ -54,7 +56,7 @@ module JSON::LD
54
56
 
55
57
  # If expanded property is @list and we're contained within a list container, recursively compact this item to an array
56
58
  if list?(element) && context.container(property) == %w(@list)
57
- return compact(element['@list'], property: property)
59
+ return compact(element['@list'], property: property, ordered: ordered)
58
60
  end
59
61
 
60
62
 
@@ -71,7 +73,7 @@ module JSON::LD
71
73
  self.context = context.parse(term_context) if term_context
72
74
  end
73
75
 
74
- element.keys.sort.each do |expanded_property|
76
+ element.keys.opt_sort(ordered: ordered).each do |expanded_property|
75
77
  expanded_value = element[expanded_property]
76
78
  #log_debug("") {"#{expanded_property}: #{expanded_value.inspect}"}
77
79
 
@@ -89,7 +91,7 @@ module JSON::LD
89
91
  end
90
92
 
91
93
  if expanded_property == '@reverse'
92
- compacted_value = compact(expanded_value, property: '@reverse')
94
+ compacted_value = compact(expanded_value, property: '@reverse', ordered: ordered)
93
95
  #log_debug("@reverse") {"compacted_value: #{compacted_value.inspect}"}
94
96
  # handle double-reversed properties
95
97
  compacted_value.each do |prop, value|
@@ -110,7 +112,7 @@ module JSON::LD
110
112
 
111
113
  if expanded_property == '@preserve'
112
114
  # Compact using `property`
113
- compacted_value = compact(expanded_value, property: property)
115
+ compacted_value = compact(expanded_value, property: property, ordered: ordered)
114
116
  #log_debug("@preserve") {"compacted_value: #{compacted_value.inspect}"}
115
117
 
116
118
  unless compacted_value.is_a?(Array) && compacted_value.empty?
@@ -176,7 +178,7 @@ module JSON::LD
176
178
  else expanded_item
177
179
  end
178
180
 
179
- compacted_item = compact(value, property: item_active_property)
181
+ compacted_item = compact(value, property: item_active_property, ordered: ordered)
180
182
  #log_debug("") {" => compacted key: #{item_active_property.inspect} for #{compacted_item.inspect}"}
181
183
 
182
184
  # handle @list
@@ -267,8 +269,7 @@ module JSON::LD
267
269
  end
268
270
  end
269
271
 
270
- # Re-order result keys
271
- result.keys.sort.each_with_object({}) {|kk, memo| memo[kk] = result[kk]}
272
+ result
272
273
  else
273
274
  # For other types, the compacted value is the element value
274
275
  #log_debug("compact") {element.class.to_s}
@@ -750,7 +750,7 @@ module JSON::LD
750
750
  ctx['@vocab'] = vocab.to_s if vocab
751
751
 
752
752
  # Term Definitions
753
- term_definitions.keys.sort.each do |term|
753
+ term_definitions.keys.each do |term|
754
754
  defn = term_definitions[term].to_context_definition(self)
755
755
  ctx[term] = defn if defn
756
756
  end
@@ -1201,7 +1201,7 @@ module JSON::LD
1201
1201
  candidates << ciri unless value && term_definitions.has_key?(ciri)
1202
1202
  end
1203
1203
 
1204
- return candidates.term_sort.first if !candidates.empty?
1204
+ return candidates.sort.first if !candidates.empty?
1205
1205
 
1206
1206
  # If we still don't have any terms and we're using standard_prefixes,
1207
1207
  # try those, and add to mapping
@@ -1214,7 +1214,7 @@ module JSON::LD
1214
1214
  iri.sub(v.to_uri.to_s, "#{prefix}:").sub(/:$/, '')
1215
1215
  end
1216
1216
 
1217
- return candidates.term_sort.first if !candidates.empty?
1217
+ return candidates.sort.first if !candidates.empty?
1218
1218
  end
1219
1219
 
1220
1220
  if !vocab
@@ -19,7 +19,7 @@ module JSON::LD
19
19
  # @param [Boolean] framing (false)
20
20
  # Special rules for expanding a frame
21
21
  # @return [Array<Hash{String => Object}>]
22
- def expand(input, active_property, context, ordered: true, framing: false)
22
+ def expand(input, active_property, context, ordered: false, framing: false)
23
23
  #log_debug("expand") {"input: #{input.inspect}, active_property: #{active_property.inspect}, context: #{context.inspect}"}
24
24
  framing = false if active_property == '@default'
25
25
  result = case input
@@ -43,11 +43,11 @@ module RDF
43
43
  end
44
44
 
45
45
  class Array
46
- # Order terms, length first, then lexographically
47
- def term_sort
48
- self.sort do |a, b|
49
- len_diff = a.length <=> b.length
50
- len_diff == 0 ? a <=> b : len_diff
51
- end
46
+ # Optionally order items
47
+ #
48
+ # @param [Boolean] ordered
49
+ # @return [Array]
50
+ def opt_sort(ordered: false)
51
+ ordered ? self.sort : self
52
52
  end
53
53
  end
@@ -18,6 +18,8 @@ module JSON::LD
18
18
  # Property within current node
19
19
  # @param [Array] list (nil)
20
20
  # Used when property value is a list
21
+ # @param [Boolean] ordered (true)
22
+ # Ensure output objects have keys ordered properly
21
23
  def create_node_map(element, graph_map,
22
24
  active_graph: '@default',
23
25
  active_subject: nil,
@@ -110,7 +112,7 @@ module JSON::LD
110
112
  active_graph: id)
111
113
  end
112
114
 
113
- element.keys.sort.each do |property|
115
+ element.keys.each do |property|
114
116
  value = element[property]
115
117
 
116
118
  property = namer.get_name(property) if blank_node?(property)
@@ -14,13 +14,15 @@ module JSON::LD
14
14
  # @param [Array<String>] subjects
15
15
  # The subjects to filter
16
16
  # @param [Hash{String => Object}] frame
17
- # @param [Hash{Symbol => Object}] options ({})
18
- # @option options [Hash{String => Object}] :parent (nil)
19
- # Parent subject or top-level array
20
- # @option options [String] :property (nil)
17
+ # @param [String] property (nil)
21
18
  # The parent property.
19
+ # @param [Hash{String => Object}] parent (nil)
20
+ # Parent subject or top-level array
21
+ # @param [Boolean] ordered (true)
22
+ # Ensure output objects have keys ordered properly
23
+ # @param [Hash{Symbol => Object}] options ({})
22
24
  # @raise [JSON::LD::InvalidFrame]
23
- def frame(state, subjects, frame, parent: nil, property: nil, **options)
25
+ def frame(state, subjects, frame, parent: nil, property: nil, ordered: false, **options)
24
26
  #log_depth do
25
27
  #log_debug("frame") {"subjects: #{subjects.inspect}"}
26
28
  #log_debug("frame") {"frame: #{frame.to_json(JSON_STATE)}"}
@@ -45,7 +47,7 @@ module JSON::LD
45
47
  matches = filter_subjects(state, subjects, frame, flags)
46
48
 
47
49
  # For each id and node from the set of matched subjects ordered by id
48
- matches.keys.sort.each do |id|
50
+ matches.keys.opt_sort(ordered: ordered).each do |id|
49
51
  subject = matches[id]
50
52
 
51
53
  # Note: In order to treat each top-level match as a compartmentalized result, clear the unique embedded subjects map when the property is nil, which only occurs at the top-level.
@@ -110,7 +112,7 @@ module JSON::LD
110
112
  end
111
113
 
112
114
  # iterate over subject properties in order
113
- subject.keys.sort.each do |prop|
115
+ subject.keys.opt_sort(ordered: ordered).each do |prop|
114
116
  objects = subject[prop]
115
117
 
116
118
  # copy keywords to output
@@ -153,7 +155,7 @@ module JSON::LD
153
155
  end
154
156
 
155
157
  # handle defaults in order
156
- frame.keys.sort.each do |prop|
158
+ frame.keys.opt_sort(ordered: ordered).each do |prop|
157
159
  next if prop.start_with?('@')
158
160
 
159
161
  # if omit default is off, then include default values for properties that appear in the next frame but are not in the matching subject
@@ -14,8 +14,10 @@ module JSON::LD
14
14
  # @param [Boolean] useRdfType (false)
15
15
  # If set to `true`, the JSON-LD processor will treat `rdf:type` like a normal property instead of using `@type`.
16
16
  # @param [Boolean] useNativeTypes (false) use native representations
17
+ # @param [Boolean] ordered (true)
18
+ # Ensure output objects have keys ordered properly
17
19
  # @return [Array<Hash>] the JSON-LD document in normalized form
18
- def from_statements(dataset, useRdfType: false, useNativeTypes: false)
20
+ def from_statements(dataset, useRdfType: false, useNativeTypes: false, ordered: false)
19
21
  default_graph = {}
20
22
  graph_map = {'@default' => default_graph}
21
23
  referenced_once = {}
@@ -118,11 +120,11 @@ module JSON::LD
118
120
  end
119
121
 
120
122
  result = []
121
- default_graph.keys.sort.each do |subject|
123
+ default_graph.keys.opt_sort(ordered: ordered).each do |subject|
122
124
  node = default_graph[subject]
123
125
  if graph_map.has_key?(subject)
124
126
  node['@graph'] = []
125
- graph_map[subject].keys.sort.each do |s|
127
+ graph_map[subject].keys.opt_sort(ordered: ordered).each do |s|
126
128
  n = graph_map[subject][s]
127
129
  n.delete(:usages)
128
130
  node['@graph'] << n unless node_reference?(n)
@@ -21,7 +21,7 @@ module JSON::LD
21
21
  on: ["--expand-context CONTEXT"],
22
22
  description: "Context to use when expanding.") {|arg| RDF::URI(arg)},
23
23
  RDF::CLI::Option.new(
24
- symbol: :processing_mode,
24
+ symbol: :processingMode,
25
25
  datatype: %w(json-ld-1.0 json-ld-1.1),
26
26
  control: :radio,
27
27
  on: ["--processingMode MODE", %w(json-ld-1.0 json-ld-1.1)],
@@ -75,15 +75,17 @@ module JSON::LD
75
75
  RDF::CLI::Option.new(
76
76
  symbol: :compactArrays,
77
77
  datatype: TrueClass,
78
+ default: true,
78
79
  control: :checkbox,
79
- on: ["--compact-arrays"],
80
- description: "Replaces arrays with just one element with that element during compaction.") {true},
80
+ on: ["--[no-]compact-arrays"],
81
+ description: "Replaces arrays with just one element with that element during compaction. Default is `true` use --no-compact-arrays to disable.") {|arg| arg},
81
82
  RDF::CLI::Option.new(
82
83
  symbol: :compactToRelative,
83
84
  datatype: TrueClass,
85
+ default: true,
84
86
  control: :checkbox,
85
- on: ["--compact-to-relative"],
86
- description: "Creates document relative IRIs when compacting, if `true`, otherwise leaves expanded. Default is `true` use --no-compact-to-relative to disable.") {true},
87
+ on: ["--[no-]compact-to-relative"],
88
+ description: "Creates document relative IRIs when compacting, if `true`, otherwise leaves expanded. Default is `true` use --no-compact-to-relative to disable.") {|arg| arg},
87
89
  RDF::CLI::Option.new(
88
90
  symbol: :context,
89
91
  datatype: RDF::URI,
@@ -93,6 +95,7 @@ module JSON::LD
93
95
  RDF::CLI::Option.new(
94
96
  symbol: :embed,
95
97
  datatype: %w(@always @last @never),
98
+ default: '@last',
96
99
  control: :select,
97
100
  on: ["--embed EMBED"],
98
101
  description: "How to embed matched objects (@last).") {|arg| RDF::URI(arg)},
@@ -100,16 +103,22 @@ module JSON::LD
100
103
  symbol: :explicit,
101
104
  datatype: TrueClass,
102
105
  control: :checkbox,
103
- on: ["--explicit"],
104
- description: "Only include explicitly declared properties in output (false)") {|arg| RDF::URI(arg)},
106
+ on: ["--[no-]explicit"],
107
+ description: "Only include explicitly declared properties in output (false)") {|arg| arg},
105
108
  RDF::CLI::Option.new(
106
109
  symbol: :omitDefault,
107
110
  datatype: TrueClass,
108
111
  control: :checkbox,
109
- on: ["--omitDefault"],
110
- description: "Omit missing properties from output (false)") {|arg| RDF::URI(arg)},
112
+ on: ["--[no-]omitDefault"],
113
+ description: "Omit missing properties from output (false)") {|arg| arg},
111
114
  RDF::CLI::Option.new(
112
- symbol: :processing_mode,
115
+ symbol: :ordered,
116
+ datatype: TrueClass,
117
+ control: :checkbox,
118
+ on: ["--[no-]ordered"],
119
+ description: "Order object member processing lexographically.") {|arg| arg},
120
+ RDF::CLI::Option.new(
121
+ symbol: :processingMode,
113
122
  datatype: %w(json-ld-1.0 json-ld-1.1),
114
123
  control: :radio,
115
124
  on: ["--processingMode MODE", %w(json-ld-1.0 json-ld-1.1)],
@@ -117,21 +126,22 @@ module JSON::LD
117
126
  RDF::CLI::Option.new(
118
127
  symbol: :requireAll,
119
128
  datatype: TrueClass,
129
+ default: true,
120
130
  control: :checkbox,
121
- on: ["--requireAll"],
122
- description: "Require all properties to match (true)") {|arg| RDF::URI(arg)},
131
+ on: ["--[no-]requireAll"],
132
+ description: "Require all properties to match (true). Default is `true` use --no-compact-to-relative to disable.") {|arg| arg},
123
133
  RDF::CLI::Option.new(
124
134
  symbol: :stream,
125
135
  datatype: TrueClass,
126
136
  control: :checkbox,
127
- on: ["--stream"],
128
- description: "Do not attempt to optimize graph presentation, suitable for streaming large graphs.") {true},
137
+ on: ["--[no-]stream"],
138
+ description: "Do not attempt to optimize graph presentation, suitable for streaming large graphs.") {|arg| arg},
129
139
  RDF::CLI::Option.new(
130
140
  symbol: :useRdfType,
131
141
  datatype: TrueClass,
132
142
  control: :checkbox,
133
- on: ["--use-rdf-type"],
134
- description: "Treat `rdf:type` like a normal property instead of using `@type`.") {true},
143
+ on: ["--[no-]use-rdf-type"],
144
+ description: "Treat `rdf:type` like a normal property instead of using `@type`.") {|arg| arg},
135
145
  ]
136
146
  end
137
147