json-ld 3.0.1 → 3.0.2
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 +4 -4
- data/VERSION +1 -1
- data/lib/json/ld/compact.rb +4 -1
- data/lib/json/ld/context.rb +16 -9
- data/lib/json/ld/expand.rb +12 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 970e177e4a776881601b87546f04cfad8c616b533d322a985f6ce588c5572c19
|
4
|
+
data.tar.gz: 9d8388137478a542d0e42f143ed36d90efe27fa7ff649410af35d651fafce836
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 70b363dafd7632225a082e0ea5113ceba39779e27593f25f18f78df62bed9a202b0f2a62627096186113888cbd5bf3583e4f33b85cf94d1bbf8ca10d1d02059f
|
7
|
+
data.tar.gz: c6186a16b4fac554ff6893926f23c729fb1194ab3423e801d9d40915c978330a39c251645bb8775e1d46a94add2cf9f905c579f47085d2d42aafb1cd04971a61
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.0.
|
1
|
+
3.0.2
|
data/lib/json/ld/compact.rb
CHANGED
@@ -4,6 +4,9 @@ module JSON::LD
|
|
4
4
|
module Compact
|
5
5
|
include Utils
|
6
6
|
|
7
|
+
# The following constant is used to reduce object allocations in #compact below
|
8
|
+
CONTAINER_MAPPING_LANGUAGE_INDEX_ID_TYPE = Set.new(%w(@language @index @id @type)).freeze
|
9
|
+
|
7
10
|
##
|
8
11
|
# This algorithm compacts a JSON-LD document, such that the given context is applied. This must result in shortening any applicable IRIs to terms or compact IRIs, any applicable keywords to keyword aliases, and any applicable JSON-LD values expressed in expanded form to simple values such as strings or numbers.
|
9
12
|
#
|
@@ -234,7 +237,7 @@ module JSON::LD
|
|
234
237
|
add_value(nest_result, item_active_property, compacted_item,
|
235
238
|
property_is_array: as_array)
|
236
239
|
end
|
237
|
-
elsif
|
240
|
+
elsif container.any? { |key| CONTAINER_MAPPING_LANGUAGE_INDEX_ID_TYPE.include?(key) } && !container.include?('@graph')
|
238
241
|
map_object = nest_result[item_active_property] ||= {}
|
239
242
|
c = container.first
|
240
243
|
container_key = context.compact_iri(c, vocab: true, quiet: true)
|
data/lib/json/ld/context.rb
CHANGED
@@ -527,6 +527,11 @@ module JSON::LD
|
|
527
527
|
self
|
528
528
|
end
|
529
529
|
|
530
|
+
# The following constants are used to reduce object allocations in #create_term_definition below
|
531
|
+
ID_NULL_OBJECT = { '@id' => nil }.freeze
|
532
|
+
JSON_LD_10_EXPECTED_KEYS = Set.new(%w(@container @id @language @reverse @type)).freeze
|
533
|
+
JSON_LD_EXPECTED_KEYS = Set.new(%w(@container @context @id @language @nest @prefix @reverse @type)).freeze
|
534
|
+
|
530
535
|
##
|
531
536
|
# Create Term Definition
|
532
537
|
#
|
@@ -570,7 +575,7 @@ module JSON::LD
|
|
570
575
|
value = {'@id' => value} if simple_term
|
571
576
|
|
572
577
|
case value
|
573
|
-
when nil,
|
578
|
+
when nil, ID_NULL_OBJECT
|
574
579
|
# If value equals null or value is a JSON object containing the key-value pair (@id-null), then set the term definition in active context to null, set the value associated with defined's key term to true, and return.
|
575
580
|
#log_debug("") {"=> nil"}
|
576
581
|
term_definitions[term] = TermDefinition.new(term)
|
@@ -581,14 +586,16 @@ module JSON::LD
|
|
581
586
|
definition = TermDefinition.new(term)
|
582
587
|
definition.simple = simple_term
|
583
588
|
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
589
|
+
if options[:validate]
|
590
|
+
expected_keys = case processingMode
|
591
|
+
when "json-ld-1.0", nil then JSON_LD_10_EXPECTED_KEYS
|
592
|
+
else JSON_LD_EXPECTED_KEYS
|
593
|
+
end
|
588
594
|
|
589
|
-
|
590
|
-
|
591
|
-
|
595
|
+
if value.any? { |key, _| !expected_keys.include?(key) }
|
596
|
+
extra_keys = value.keys - expected_keys.to_a
|
597
|
+
raise JsonLdError::InvalidTermDefinition, "Term definition for #{term.inspect} has unexpected keys: #{extra_keys.join(', ')}"
|
598
|
+
end
|
592
599
|
end
|
593
600
|
|
594
601
|
if value.has_key?('@type')
|
@@ -650,7 +657,7 @@ module JSON::LD
|
|
650
657
|
|
651
658
|
# If id ends with a gen-delim, it may be used as a prefix for simple terms
|
652
659
|
definition.prefix = true if !term.include?(':') &&
|
653
|
-
definition.id.to_s.end_with?(
|
660
|
+
definition.id.to_s.end_with?(':', '/', '?', '#', '[', ']', '@') &&
|
654
661
|
simple_term
|
655
662
|
elsif term.include?(':')
|
656
663
|
# If term is a compact IRI with a prefix that is a key in local context then a dependency has been found. Use this algorithm recursively passing active context, local context, the prefix as term, and defined.
|
data/lib/json/ld/expand.rb
CHANGED
@@ -347,7 +347,7 @@ module JSON::LD
|
|
347
347
|
term_context = context.term_definitions[key].context if context.term_definitions[key]
|
348
348
|
active_context = term_context ? context.parse(term_context) : context
|
349
349
|
container = active_context.container(key)
|
350
|
-
expanded_value = if container ==
|
350
|
+
expanded_value = if container.length == 1 && container.first == '@language' && value.is_a?(Hash)
|
351
351
|
# Otherwise, if key's container mapping in active context is @language and value is a JSON object then value is expanded from a language map as follows:
|
352
352
|
|
353
353
|
# Set multilingual array to an empty array.
|
@@ -370,7 +370,7 @@ module JSON::LD
|
|
370
370
|
end
|
371
371
|
|
372
372
|
ary
|
373
|
-
elsif
|
373
|
+
elsif container.any? { |key| CONTAINER_MAPPING_INDEX_ID_TYPE.include?(key) } && value.is_a?(Hash)
|
374
374
|
# Otherwise, if key's container mapping in active context contains @index, @id, @type and value is a JSON object then value is expanded from an index map as follows:
|
375
375
|
|
376
376
|
# Set ary to an empty array.
|
@@ -426,14 +426,14 @@ module JSON::LD
|
|
426
426
|
#log_debug {" => #{expanded_value.inspect}"}
|
427
427
|
|
428
428
|
# If the container mapping associated to key in active context is @list and expanded value is not already a list object, convert expanded value to a list object by first setting it to an array containing only expanded value if it is not already an array, and then by setting it to a JSON object containing the key-value pair @list-expanded value.
|
429
|
-
if
|
429
|
+
if container.first == '@list' && container.length == 1 && !list?(expanded_value)
|
430
430
|
#log_debug(" => ") { "convert #{expanded_value.inspect} to list"}
|
431
431
|
expanded_value = {'@list' => as_array(expanded_value)}
|
432
432
|
end
|
433
433
|
#log_debug {" => #{expanded_value.inspect}"}
|
434
434
|
|
435
435
|
# convert expanded value to @graph if container specifies it
|
436
|
-
if
|
436
|
+
if container.first == '@graph' && container.length == 1
|
437
437
|
#log_debug(" => ") { "convert #{expanded_value.inspect} to list"}
|
438
438
|
expanded_value = as_array(expanded_value).map do |v|
|
439
439
|
graph?(v) ? v : {'@graph' => as_array(v)}
|
@@ -457,7 +457,14 @@ module JSON::LD
|
|
457
457
|
else
|
458
458
|
# Otherwise, if key is not a reverse property:
|
459
459
|
# If result does not have an expanded property member, create one and initialize its value to an empty array.
|
460
|
-
(output_object[expanded_property] ||= []).
|
460
|
+
(output_object[expanded_property] ||= []).tap do |memo|
|
461
|
+
# expanded_value is either Array[Hash] or Hash; in both case append to memo without flatten
|
462
|
+
if expanded_value.is_a?(Array)
|
463
|
+
memo.concat(expanded_value)
|
464
|
+
else # Hash
|
465
|
+
memo << expanded_value
|
466
|
+
end
|
467
|
+
end
|
461
468
|
end
|
462
469
|
end
|
463
470
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json-ld
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregg Kellogg
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-09-
|
11
|
+
date: 2018-09-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rdf
|