/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jena.riot.system; import static org.apache.jena.riot.RDFLanguages.JSONLD ; import java.io.ByteArrayInputStream ; import java.io.ByteArrayOutputStream ; import java.util.Iterator ; import java.util.Map ; import org.apache.jena.atlas.junit.BaseTest ; import org.apache.jena.query.Dataset ; import org.apache.jena.query.DatasetFactory ; import org.apache.jena.rdf.model.Model ; import org.apache.jena.rdf.model.ModelFactory ; import org.apache.jena.riot.RDFDataMgr ; import org.apache.jena.sparql.sse.SSE ; import org.apache.jena.sparql.util.IsoMatcher ; import org.junit.Assert ; import org.junit.Test ; /** tests : JSONLD->RDF ; JSONLD->RDF->JSONLD */ public class TestJsonLDReadWrite extends BaseTest { private static String DIR = "testing/RIOT/jsonld/" ; @Test public void read_g01() { graphJ2R("graph1.jsonld", "graph1.ttl") ; } @Test public void read_g02() { graphJ2R("graph2.jsonld", "graph2.ttl") ; } @Test public void read_ds01() { datasetJ2R("graph1.jsonld", "graph1.ttl") ; } @Test public void read_ds02() { datasetJ2R("graph2.jsonld", "graph2.ttl") ; } @Test public void read_ds03() { datasetJ2R("dataset1.jsonld", "dataset1.trig") ; } private void graphJ2R(String inFile, String outFile) { inFile = DIR+inFile ; outFile = DIR+outFile ; Model model1 = RDFDataMgr.loadModel(inFile) ; Model model2 = RDFDataMgr.loadModel(outFile) ; assertTrue(model1.isIsomorphicWith(model2)) ; } private void datasetJ2R(String inFile, String outFile) { inFile = DIR+inFile ; outFile = DIR+outFile ; RDFDataMgr.loadDataset(inFile) ; RDFDataMgr.loadDataset(outFile) ; } @Test public void roundtrip_01() { rtRJRg("graph1.ttl") ; } @Test public void roundtrip_02() { rtRJRds("graph1.ttl") ; } @Test public void roundtrip_03() { rtRJRds("dataset1.trig") ; } static void rtRJRg(String filename) { filename = DIR+filename ; // Read in Model model = RDFDataMgr.loadModel(filename) ; // Write a JSON-LD ByteArrayOutputStream out = new ByteArrayOutputStream() ; RDFDataMgr.write(out, model, JSONLD) ; ByteArrayInputStream r = new ByteArrayInputStream(out.toByteArray()) ; // System.out.println(); // System.out.println(new String(out.toByteArray())); // System.out.println(); // Read as JSON-LD Model model2 = ModelFactory.createDefaultModel() ; RDFDataMgr.read(model2, r, null, JSONLD) ; // Compare if ( ! model.isIsomorphicWith(model2) ) System.out.println("## ---- DIFFERENT") ; assertTrue(model.isIsomorphicWith(model2)); // Check namespaces in parsed graph match the original data checkNamespaces(model2, model.getNsPrefixMap()); } static void rtRJRds(String filename) { filename = DIR+filename ; Dataset ds1 = RDFDataMgr.loadDataset(filename) ; // Write a JSON-LD ByteArrayOutputStream out = new ByteArrayOutputStream() ; RDFDataMgr.write(out, ds1, JSONLD) ; ByteArrayInputStream r = new ByteArrayInputStream(out.toByteArray()) ; // System.out.println(); // System.out.println(new String(out.toByteArray())); // System.out.println(); // Read as JSON-LD @SuppressWarnings("deprecation") Dataset ds2 = DatasetFactory.createMem() ; RDFDataMgr.read(ds2, r, null, JSONLD) ; if ( ! isIsomorphic(ds1, ds2) ) { SSE.write(ds1) ; SSE.write(ds2) ; } assertTrue(isIsomorphic(ds1, ds2) ) ; // Check namespaces in the parsed dataset match those in the original data checkNamespaces(ds2.getDefaultModel(), ds1.getDefaultModel().getNsPrefixMap()); Iterator<String> graphNames = ds2.listNames(); while (graphNames.hasNext()) { String gn = graphNames.next(); checkNamespaces(ds2.getNamedModel(gn), ds1.getNamedModel(gn).getNsPrefixMap()); } } private static boolean isIsomorphic(Dataset ds1, Dataset ds2) { return IsoMatcher.isomorphic(ds1.asDatasetGraph(), ds2.asDatasetGraph()) ; } private static void checkNamespaces(Model m, Map<String, String> namespaces) { if (namespaces == null) return; for (String prefix : namespaces.keySet()) { if ( ! prefix.isEmpty() ) Assert.assertEquals("Model does contain expected namespace " + prefix + ": <" + namespaces.get(prefix) + ">", namespaces.get(prefix), m.getNsPrefixURI(prefix)); } } }