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