You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2022/07/20 22:32:56 UTC

[jena] branch main updated: GH-1451: Set base when parsing JSON-LD 1.1

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 <an...@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