blob: bc707a0a56221eed12a15db3c9eef99d6f0208c8 [file] [log] [blame]
/*
* 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;
}
}