json-ld 3.0.0 → 3.0.1

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: 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