Skip to content

Commit 90f2da6

Browse files
committed
Add '@any' to inverse context, and set as type/language value for an empty list so that a list term will be selected for an empty list.
See json-ld/json-ld.org#508.
1 parent 4118197 commit 90f2da6

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

example-files/pr-509.jsonld

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"@context": {
3+
"name": {
4+
"@type": "@id",
5+
"@container": "@list",
6+
"@id": "https://schema.org/name"
7+
}
8+
},
9+
"name": []
10+
}

lib/json/ld/context.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1052,7 +1052,7 @@ def compact_iri(iri, value: nil, vocab: nil, reverse: false, quiet: false, **opt
10521052

10531053
if vocab && inverse_context.has_key?(iri)
10541054
#log_debug("") {"vocab and key in inverse context"} unless quiet
1055-
default_language = self.default_language || @none
1055+
default_language = self.default_language || "@none"
10561056
containers = []
10571057
tl, tl_value = "@language", "@null"
10581058

@@ -1136,7 +1136,8 @@ def compact_iri(iri, value: nil, vocab: nil, reverse: false, quiet: false, **opt
11361136
preferred_values.concat(%w(@id @vocab @none))
11371137
end
11381138
else
1139-
preferred_values.concat([tl_value, '@none'])
1139+
tl = '@any' if list?(value) && value['@list'].empty?
1140+
preferred_values.concat([tl_value, '@none'].compact)
11401141
end
11411142
#log_debug("") {"preferred_values: #{preferred_values.inspect}"} unless quiet
11421143
if p_term = select_term(iri, containers, tl, preferred_values)
@@ -1483,9 +1484,11 @@ def inverse_context
14831484
next unless td = term_definitions[term]
14841485
container = td.container_mapping || (td.as_set ? '@set' : '@none')
14851486
container_map = result[td.id.to_s] ||= {}
1486-
tl_map = container_map[container] ||= {'@language' => {}, '@type' => {}}
1487+
tl_map = container_map[container] ||= {'@language' => {}, '@type' => {}, '@any' => {}}
14871488
type_map = tl_map['@type']
14881489
language_map = tl_map['@language']
1490+
any_map = tl_map['@any']
1491+
any_map['@none'] ||= term
14891492
if td.reverse_property
14901493
type_map['@reverse'] ||= term
14911494
elsif td.type_mapping

lib/json/ld/frame.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,6 @@ def cleanup_preserve(input, bnodes_to_clear)
224224
output = Hash.new
225225
input.each do |key, value|
226226
if key == '@preserve'
227-
#require 'byebug'; byebug
228227
# replace all key-value pairs where the key is @preserve with the value from the key-pair
229228
output = cleanup_preserve(value, bnodes_to_clear)
230229
elsif context.expand_iri(key) == '@id' && bnodes_to_clear.include?(value)

0 commit comments

Comments
 (0)