This is an automated email from the ASF dual-hosted git repository. andy pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/jena.git
The following commit(s) were added to refs/heads/main by this push: new 99cf635191 GH-1451: Set base when parsing JSON-LD 1.1 new 4a69791217 Merge pull request #1452 from afs/jsonld-base 99cf635191 is described below commit 99cf63519196081781d803b3fadb0913a31d4a6f Author: Andy Seaborne <a...@apache.org> AuthorDate: Wed Jul 20 22:09:32 2022 +0100 GH-1451: Set base when parsing JSON-LD 1.1 --- .../org/apache/jena/riot/lang/LangJSONLD11.java | 8 ++++---- .../org/apache/jena/riot/TestJsonLDReader.java | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangJSONLD11.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangJSONLD11.java index 1c79c9f4a8..1b98cd7e24 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/lang/LangJSONLD11.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/LangJSONLD11.java @@ -62,7 +62,7 @@ public class LangJSONLD11 implements ReaderRIOT { public void read(InputStream input, String baseURI, ContentType ct, StreamRDF output, Context context) { try { Document document = JsonDocument.of(input); - read(document, output, context); + read(document, baseURI, output, context); } catch (JsonLdError ex) { handleJsonLdError(ex); } catch (Exception ex) { @@ -86,7 +86,7 @@ public class LangJSONLD11 implements ReaderRIOT { public void read(Reader in, String baseURI, ContentType ct, StreamRDF output, Context context) { try { Document document = JsonDocument.of(in); - read(document, output, context); + read(document, baseURI, output, context); } catch (JsonLdError ex) { ex.printStackTrace(); handleJsonLdError(ex); @@ -96,9 +96,9 @@ public class LangJSONLD11 implements ReaderRIOT { } } - private void read(Document document, StreamRDF output, Context context) throws JsonLdError { + private void read(Document document, String baseURI, StreamRDF output, Context context) throws JsonLdError { // JSON-LD to RDF - RdfDataset dataset = JsonLd.toRdf(document).get(); + RdfDataset dataset = JsonLd.toRdf(document).base(baseURI).get(); extractPrefixes(document, output::prefix); JenaTitanium.convert(dataset, output); } diff --git a/jena-arq/src/test/java/org/apache/jena/riot/TestJsonLDReader.java b/jena-arq/src/test/java/org/apache/jena/riot/TestJsonLDReader.java index 3875497c16..e1b6966628 100644 --- a/jena-arq/src/test/java/org/apache/jena/riot/TestJsonLDReader.java +++ b/jena-arq/src/test/java/org/apache/jena/riot/TestJsonLDReader.java @@ -18,6 +18,7 @@ package org.apache.jena.riot; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.IOException; @@ -26,6 +27,8 @@ import com.fasterxml.jackson.core.JsonGenerationException; import com.github.jsonldjava.core.DocumentLoader; import com.github.jsonldjava.core.JsonLdOptions; +import org.apache.jena.graph.Graph; +import org.apache.jena.graph.Triple; import org.apache.jena.query.Dataset; import org.apache.jena.query.DatasetFactory; import org.apache.jena.rdf.model.Model; @@ -33,6 +36,7 @@ import org.apache.jena.rdf.model.Property; import org.apache.jena.rdf.model.Resource; import org.apache.jena.rdf.model.ResourceFactory; import org.apache.jena.riot.system.ErrorHandlerFactory; +import org.apache.jena.sparql.sse.SSE; import org.apache.jena.sparql.util.Context; import org.apache.jena.vocabulary.RDF; import org.junit.Test; @@ -92,6 +96,24 @@ public class TestJsonLDReader { assertJohnDoeIsOK(ds.getDefaultModel()); } + // JSONLD 1.1 : Titanium-json-ld + + @Test + public void testJsonLdBase() { + // GH-1451 + // { + // "@id": "./relative", + // "@type": "RelType", + // "http://example/p": { "@id" : "#frag" } + // } + String jsonld = "{ '@id': './relative', '@type': 'RelType', 'http://example/p': { '@id' : '#frag' } }"; + jsonld = jsonld.replaceAll("'", "\""); + Graph g = RDFParser.fromString(jsonld).lang(Lang.JSONLD).base("http://base/abc").toGraph(); + assertNotNull(g); + Triple t = SSE.parseTriple("( <http://base/relative> <http://example/p> <http://base/abc#frag> )"); + assertTrue(g.contains(t)); + } + /** * Reading some jsonld String, using a Context * @return a new Dataset