| /* |
| * 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.osgi.test; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertTrue; |
| import static org.ops4j.pax.exam.CoreOptions.maven; |
| import static org.ops4j.pax.exam.CoreOptions.options; |
| import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.features; |
| import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.karafDistributionConfiguration; |
| |
| import java.io.OutputStream; |
| import java.io.StringWriter; |
| import java.io.Writer; |
| import java.nio.file.Files; |
| import java.nio.file.Path; |
| |
| import org.apache.jena.iri.IRI; |
| import org.apache.jena.iri.IRIFactory; |
| import org.apache.jena.ontology.Individual; |
| import org.apache.jena.ontology.ObjectProperty; |
| import org.apache.jena.ontology.OntModel; |
| import org.apache.jena.ontology.OntModelSpec; |
| import org.apache.jena.query.Dataset; |
| import org.apache.jena.query.DatasetFactory; |
| import org.apache.jena.query.Query; |
| import org.apache.jena.query.QueryExecution; |
| import org.apache.jena.query.QueryExecutionFactory; |
| import org.apache.jena.query.QueryFactory; |
| import org.apache.jena.query.QuerySolution; |
| import org.apache.jena.query.ReadWrite; |
| import org.apache.jena.query.ResultSet; |
| import org.apache.jena.rdf.model.Model; |
| import org.apache.jena.rdf.model.ModelFactory; |
| import org.apache.jena.rdf.model.Property; |
| import org.apache.jena.rdf.model.Resource; |
| import org.apache.jena.riot.Lang; |
| import org.apache.jena.riot.RDFDataMgr; |
| import org.apache.jena.tdb.TDBFactory; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.ops4j.pax.exam.Configuration; |
| import org.ops4j.pax.exam.Option; |
| import org.ops4j.pax.exam.junit.PaxExam; |
| import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy; |
| import org.ops4j.pax.exam.spi.reactors.PerClass; |
| |
| /** |
| * Brief tests of the Jena modules covered by jena-osgi |
| * |
| */ |
| @RunWith(PaxExam.class) |
| @ExamReactorStrategy(PerClass.class) |
| public class JenaOSGITest { |
| |
| @Configuration |
| public Option[] config() { |
| return options( |
| // OSGi container configuration |
| karafDistributionConfiguration().frameworkUrl( |
| maven().groupId("org.apache.karaf") |
| .artifactId("apache-karaf").type("zip") |
| /* |
| * Version 4.0.4 does not work at the moment: |
| * Error: Could not find or load main class |
| * org.apache.karaf.main.Main (layout of the |
| * archive/file naming changed). |
| */ |
| .version("3.0.6")).useDeployFolder(false), |
| // Install core Jena feature |
| features( |
| maven().groupId("org.apache.jena") |
| .artifactId("jena-osgi-features").type("xml") |
| .classifier("features") |
| .version("3.1.0-SNAPSHOT"), "jena")); |
| |
| } |
| |
| private static final String EXAMPLE_COM_GRAPH = "http://example.com/graph"; |
| private Resource alice; |
| private Property knows; |
| private Resource bob; |
| |
| @Test |
| public void testJenaCore() throws Exception { |
| Model model = makeModel(); |
| Writer writer = new StringWriter(); |
| model.write(writer, "N-Triples"); |
| |
| assertEquals( |
| "<http://example.com/alice> <http://xmlns.com/foaf/0.1/knows> <http://example.com/bob> .", |
| writer.toString().trim()); |
| |
| OntModel ontModel = ModelFactory |
| .createOntologyModel(OntModelSpec.OWL_DL_MEM_RULE_INF); |
| ObjectProperty knowsObjProp = ontModel.createObjectProperty(knows |
| .getURI()); |
| ObjectProperty hasFriend = ontModel |
| .createObjectProperty("http://example.com/has_friend"); |
| hasFriend.addSuperProperty(knowsObjProp); |
| |
| Individual aliceIndividual = ontModel.createIndividual(alice); |
| Individual bobIndividiual = ontModel.createIndividual(bob); |
| ontModel.add(aliceIndividual, hasFriend, bobIndividiual); |
| assertTrue(aliceIndividual.hasProperty(knowsObjProp, bobIndividiual)); |
| } |
| |
| @Test |
| public void testJenaArq1() throws Exception { |
| Dataset dataset = DatasetFactory.create(); |
| testJenaARQ(dataset) ; |
| } |
| |
| @Test |
| public void testJenaArq2() throws Exception { |
| Dataset dataset = DatasetFactory.createTxnMem(); |
| } |
| |
| public void testJenaARQ(Dataset dataset) throws Exception { |
| dataset.addNamedModel(EXAMPLE_COM_GRAPH, makeModel()); |
| |
| // We test JSON-LD as it involves multiple other bundles |
| Path path = Files.createTempFile("example", ".jsonld"); |
| path.toFile().deleteOnExit(); |
| |
| try (OutputStream output = Files.newOutputStream(path)) { |
| RDFDataMgr.write(output, dataset, Lang.JSONLD); |
| } |
| Dataset dataset2 = RDFDataMgr.loadDataset(path.toUri().toString()); |
| assertTrue(dataset2.containsNamedModel(EXAMPLE_COM_GRAPH)); |
| |
| runQuery(dataset2); |
| |
| } |
| |
| private void runQuery(Dataset dataset) { |
| Query query = QueryFactory.create("" |
| + "PREFIX foaf: <http://xmlns.com/foaf/0.1/>" |
| + "SELECT ?bob WHERE { " |
| + " GRAPH <http://example.com/graph> { " |
| + " ?alice foaf:knows ?bob . " + " }" + "}"); |
| try (QueryExecution qexec = QueryExecutionFactory |
| .create(query, dataset)) { |
| ResultSet results = qexec.execSelect(); |
| assertTrue(results.hasNext()); |
| QuerySolution r = results.next(); |
| assertEquals(bob, r.get("bob").asResource()); |
| } |
| } |
| |
| @Test |
| public void testJenaIRI() throws Exception { |
| IRIFactory iriFactory = IRIFactory.iriImplementation() ; |
| IRI iri = iriFactory.create("http://example.com/"); |
| assertEquals("http://example.com/", iri.toASCIIString()); |
| } |
| |
| @Test |
| public void testJenaTdb() throws Exception { |
| Path tdbDir = Files.createTempDirectory("jena-tdb-test"); |
| Dataset dataset = TDBFactory.createDataset(tdbDir.toString()); |
| |
| dataset.begin(ReadWrite.WRITE); |
| dataset.addNamedModel(EXAMPLE_COM_GRAPH, makeModel()); |
| dataset.commit(); |
| dataset.end(); |
| |
| dataset.begin(ReadWrite.READ); |
| runQuery(dataset); |
| dataset.end(); |
| } |
| |
| @Test |
| public void testMaking() { |
| DatasetFactory.createTxnMem() ; |
| DatasetFactory.create() ; |
| ModelFactory.createDefaultModel(); |
| } |
| |
| private Model makeModel() { |
| Model model = ModelFactory.createDefaultModel(); |
| alice = model.createResource("http://example.com/alice"); |
| knows = model.createProperty("http://xmlns.com/foaf/0.1/knows"); |
| bob = model.createResource("http://example.com/bob"); |
| model.add(model.createStatement(alice, knows, bob)); |
| return model; |
| } |
| } |