From 91222d5847d186b4d2314557aa1b9ba2647084f4 Mon Sep 17 00:00:00 2001 From: Lorenzo Gabriele Date: Fri, 17 Nov 2023 23:49:23 +0100 Subject: [PATCH] Fix #257 Frame aliasing `@graph` with omitGraph=true --- .../jsonld/processor/FramingProcessor.java | 15 +++++++-------- .../jsonld/test/issue257-2-frame.json | 5 +++++ .../apicatalog/jsonld/test/issue257-2-in.json | 4 ++++ .../apicatalog/jsonld/test/issue257-2-out.json | 11 +++++++++++ .../apicatalog/jsonld/test/issue257-frame.json | 5 +++++ .../apicatalog/jsonld/test/issue257-in.json | 12 ++++++++++++ .../apicatalog/jsonld/test/issue257-out.json | 15 +++++++++++++++ .../com/apicatalog/jsonld/test/manifest.json | 18 ++++++++++++++++++ 8 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 src/test/resources/com/apicatalog/jsonld/test/issue257-2-frame.json create mode 100644 src/test/resources/com/apicatalog/jsonld/test/issue257-2-in.json create mode 100644 src/test/resources/com/apicatalog/jsonld/test/issue257-2-out.json create mode 100644 src/test/resources/com/apicatalog/jsonld/test/issue257-frame.json create mode 100644 src/test/resources/com/apicatalog/jsonld/test/issue257-in.json create mode 100644 src/test/resources/com/apicatalog/jsonld/test/issue257-out.json diff --git a/src/main/java/com/apicatalog/jsonld/processor/FramingProcessor.java b/src/main/java/com/apicatalog/jsonld/processor/FramingProcessor.java index 80b0dc50..6b4cc9fe 100644 --- a/src/main/java/com/apicatalog/jsonld/processor/FramingProcessor.java +++ b/src/main/java/com/apicatalog/jsonld/processor/FramingProcessor.java @@ -137,10 +137,12 @@ public static final JsonObject frame(final Document input, final Document frame, .newContext() .create(context, contextBase); + final String graphKey = activeContext.uriCompaction().vocab(true).compact(Keywords.GRAPH); + // 13. boolean frameDefault = false; for (final String key : frameObject.keySet()) { - if(activeContext.uriExpansion().vocab(true).expand(key).equals(Keywords.GRAPH)) { + if(key.equals(graphKey)) { frameDefault = true; break; } @@ -209,10 +211,8 @@ public static final JsonObject frame(final Document input, final Document frame, // 19.2. } else if (JsonUtils.isArray(compactedResults)) { - final String key = activeContext.uriCompaction().vocab(true).compact(Keywords.GRAPH); - compactedResults = JsonProvider.instance().createObjectBuilder() - .add(key, compactedResults).build(); + .add(graphKey, compactedResults).build(); } @@ -230,17 +230,16 @@ public static final JsonObject frame(final Document input, final Document frame, } // 21. - if (!omitGraph && !compactedResults.asJsonObject().containsKey(Keywords.GRAPH)) { - + if (!omitGraph && !compactedResults.asJsonObject().containsKey(graphKey)) { if (compactedResults.asJsonObject().isEmpty()) { - compactedResults = JsonProvider.instance().createObjectBuilder().add(Keywords.GRAPH, + compactedResults = JsonProvider.instance().createObjectBuilder().add(graphKey, JsonValue.EMPTY_JSON_ARRAY ).build(); } else { - compactedResults = JsonProvider.instance().createObjectBuilder().add(Keywords.GRAPH, + compactedResults = JsonProvider.instance().createObjectBuilder().add(graphKey, JsonProvider.instance().createArrayBuilder().add(compactedResults) ).build(); } diff --git a/src/test/resources/com/apicatalog/jsonld/test/issue257-2-frame.json b/src/test/resources/com/apicatalog/jsonld/test/issue257-2-frame.json new file mode 100644 index 00000000..f93e0d7d --- /dev/null +++ b/src/test/resources/com/apicatalog/jsonld/test/issue257-2-frame.json @@ -0,0 +1,5 @@ +{ + "@context": { + "data": "@graph" + } +} \ No newline at end of file diff --git a/src/test/resources/com/apicatalog/jsonld/test/issue257-2-in.json b/src/test/resources/com/apicatalog/jsonld/test/issue257-2-in.json new file mode 100644 index 00000000..4da55ae6 --- /dev/null +++ b/src/test/resources/com/apicatalog/jsonld/test/issue257-2-in.json @@ -0,0 +1,4 @@ +{ + "@id": "http://example.org/foo", + "http://example.org/name": "Foo" +} \ No newline at end of file diff --git a/src/test/resources/com/apicatalog/jsonld/test/issue257-2-out.json b/src/test/resources/com/apicatalog/jsonld/test/issue257-2-out.json new file mode 100644 index 00000000..fdf8fcd5 --- /dev/null +++ b/src/test/resources/com/apicatalog/jsonld/test/issue257-2-out.json @@ -0,0 +1,11 @@ +{ + "@context": { + "data": "@graph" + }, + "data": [ + { + "@id": "http://example.org/foo", + "http://example.org/name": "Foo" + } + ] +} \ No newline at end of file diff --git a/src/test/resources/com/apicatalog/jsonld/test/issue257-frame.json b/src/test/resources/com/apicatalog/jsonld/test/issue257-frame.json new file mode 100644 index 00000000..f93e0d7d --- /dev/null +++ b/src/test/resources/com/apicatalog/jsonld/test/issue257-frame.json @@ -0,0 +1,5 @@ +{ + "@context": { + "data": "@graph" + } +} \ No newline at end of file diff --git a/src/test/resources/com/apicatalog/jsonld/test/issue257-in.json b/src/test/resources/com/apicatalog/jsonld/test/issue257-in.json new file mode 100644 index 00000000..d7992f83 --- /dev/null +++ b/src/test/resources/com/apicatalog/jsonld/test/issue257-in.json @@ -0,0 +1,12 @@ +{ + "@graph": [ + { + "@id": "http://example.org/foo", + "http://example.org/name": "Foo" + }, + { + "@id": "http://example.org/bar", + "http://example.org/name": "Bar" + } + ] +} \ No newline at end of file diff --git a/src/test/resources/com/apicatalog/jsonld/test/issue257-out.json b/src/test/resources/com/apicatalog/jsonld/test/issue257-out.json new file mode 100644 index 00000000..11fa0303 --- /dev/null +++ b/src/test/resources/com/apicatalog/jsonld/test/issue257-out.json @@ -0,0 +1,15 @@ +{ + "@context": { + "data": "@graph" + }, + "data": [ + { + "@id": "http://example.org/bar", + "http://example.org/name": "Bar" + }, + { + "@id": "http://example.org/foo", + "http://example.org/name": "Foo" + } + ] +} \ No newline at end of file diff --git a/src/test/resources/com/apicatalog/jsonld/test/manifest.json b/src/test/resources/com/apicatalog/jsonld/test/manifest.json index 262b473e..723080ee 100644 --- a/src/test/resources/com/apicatalog/jsonld/test/manifest.json +++ b/src/test/resources/com/apicatalog/jsonld/test/manifest.json @@ -121,6 +121,24 @@ "input": "issue198-in.json", "expect": "issue198-out.json", "option": { "expandContext" : "issue198-context.json", "base": "http://leanix.net/" } + }, + { + "@id": "#t0015", + "@type": ["jld:PositiveEvaluationTest", "jld:FrameTest"], + "name": "Issue #257: Frame aliasing @graph", + "input": "issue257-in.json", + "expect": "issue257-out.json", + "frame": "issue257-frame.json", + "option": { "omitGraph" : false } + }, + { + "@id": "#t0016", + "@type": ["jld:PositiveEvaluationTest", "jld:FrameTest"], + "name": "Issue #257: Frame aliasing @graph compact input", + "input": "issue257-2-in.json", + "expect": "issue257-2-out.json", + "frame": "issue257-2-frame.json", + "option": { "omitGraph" : false } } ] }