Skip to content

Commit 98ea808

Browse files
committed
Disallow @reverse within an embedded node (flattening can't handle it).
1 parent 2c7d988 commit 98ea808

File tree

2 files changed

+16
-22
lines changed

2 files changed

+16
-22
lines changed

lib/json/ld/expand.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,10 @@ def expand_object(input, active_property, context, output_object,
298298
elsif @options[:rdfstar]
299299
# Result must have just a single statement
300300
rei_node = expand(value, nil, context, log_depth: log_depth.to_i + 1)
301+
302+
# Node must not contain @reverse
303+
raise JsonLdError::InvalidEmbeddedNode,
304+
"Embedded node with @reverse" if rei_node && rei_node.key?('@reverse')
301305
statements = to_enum(:item_to_rdf, rei_node)
302306
raise JsonLdError::InvalidEmbeddedNode,
303307
"Embedded node with #{statements.size} statements" unless

spec/expand_spec.rb

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3851,15 +3851,7 @@
38513851
},
38523852
"ex:prop": "value2"
38533853
}),
3854-
output: %([{
3855-
"@id": {
3856-
"@id": "ex:rei",
3857-
"@reverse": {
3858-
"ex:rel": [{"@id": "ex:value"}]
3859-
}
3860-
},
3861-
"ex:prop": [{"@value": "value2"}]
3862-
}])
3854+
exception: JSON::LD::JsonLdError::InvalidEmbeddedNode
38633855
},
38643856
"embedded node with expanded reverse relationship": {
38653857
input: %({
@@ -3871,15 +3863,7 @@
38713863
},
38723864
"ex:prop": "value2"
38733865
}),
3874-
output: %([{
3875-
"@id": {
3876-
"@id": "ex:rei",
3877-
"@reverse": {
3878-
"ex:rel": [{"@id": "ex:value"}]
3879-
}
3880-
},
3881-
"ex:prop": [{"@value": "value2"}]
3882-
}])
3866+
exception: JSON::LD::JsonLdError::InvalidEmbeddedNode
38833867
},
38843868
"embedded node used as subject in reverse relationship": {
38853869
input: %({
@@ -3909,16 +3893,22 @@
39093893
},
39103894
"@id": "ex:subj",
39113895
"rel": {
3912-
"@id": "ex:rei",
3913-
"ex:prop": {"@id": "ex:value"}
3896+
"@id": {
3897+
"@id": "ex:rei",
3898+
"ex:prop": {"@id": "ex:value"}
3899+
},
3900+
"ex:prop": {"@id": "ex:value2"}
39143901
}
39153902
}),
39163903
output: %([{
39173904
"@id": "ex:subj",
39183905
"@reverse": {
39193906
"ex:rel": [{
3920-
"@id": "ex:rei",
3921-
"ex:prop": [{"@id": "ex:value"}]
3907+
"@id": {
3908+
"@id": "ex:rei",
3909+
"ex:prop": [{"@id": "ex:value"}]
3910+
},
3911+
"ex:prop": [{"@id": "ex:value2"}]
39223912
}]
39233913
}
39243914
}])

0 commit comments

Comments
 (0)