/* * 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.sparql.graph; import java.util.Iterator ; import org.apache.jena.atlas.iterator.Iter ; import org.apache.jena.atlas.junit.BaseTest ; import org.apache.jena.graph.Node ; import org.apache.jena.graph.Triple ; import org.apache.jena.query.* ; import org.apache.jena.rdf.model.Model ; import org.apache.jena.rdf.model.ModelFactory ; import org.apache.jena.sparql.core.Quad ; import org.apache.jena.sparql.sse.SSE ; import org.junit.Test ; /** Test API use of models, including some union graph cases : see also DatasetGraphTests */ public abstract class GraphsTests extends BaseTest { // These graphs must exist. protected static final String graph1 = "http://example/g1" ; protected static final String graph2 = "http://example/g2" ; protected static final String graph3 = "http://example/g3" ; private Dataset dataset ; private Model calcUnion = ModelFactory.createDefaultModel() ; protected abstract Dataset createDataset() ; protected Dataset getDataset() { if ( dataset == null ) { dataset = createDataset() ; fillDataset(dataset) ; } return dataset ; } protected void fillDataset(Dataset dataset) { // Load default model. // Load graph 1 // Load graph 2. dataset.getDefaultModel().getGraph().add(SSE.parseTriple("(<x> <p> 'Default graph')")) ; Model m1 = dataset.getNamedModel(graph1) ; m1.getGraph().add(SSE.parseTriple("(<x> <p> 'Graph 1')")) ; m1.getGraph().add(SSE.parseTriple("(<x> <p> 'ZZZ')")) ; Model m2 = dataset.getNamedModel(graph2) ; m2.getGraph().add(SSE.parseTriple("(<x> <p> 'Graph 2')")) ; m2.getGraph().add(SSE.parseTriple("(<x> <p> 'ZZZ')")) ; calcUnion.add(m1) ; calcUnion.add(m2) ; } String queryString = "SELECT * {?s ?p ?o}" ; @Test public void graph1() { Dataset ds = getDataset() ; int x = query(queryString, ds.getDefaultModel()) ; assertEquals(1,x) ; } @Test public void graph2() { Dataset ds = getDataset() ; int x = query(queryString, ds.getNamedModel(graph1)) ; assertEquals(2,x) ; } @Test public void graph3() { Dataset ds = getDataset() ; int x = query(queryString, ds.getNamedModel(graph3)) ; assertEquals(0,x) ; } @Test public void graph4() { Dataset ds = getDataset() ; int x = query(queryString, ds.getNamedModel(Quad.unionGraph.getURI())) ; assertEquals(3,x) ; Model m = ds.getNamedModel(Quad.unionGraph.getURI()) ; m.isIsomorphicWith(calcUnion) ; } @Test public void graph5() { Dataset ds = getDataset() ; int x = query(queryString, ds.getNamedModel(Quad.defaultGraphIRI.getURI())) ; assertEquals(1,x) ; } @Test public void graph6() { Dataset ds = getDataset() ; int x = query(queryString, ds.getNamedModel(Quad.defaultGraphNodeGenerated.getURI())) ; assertEquals(1,x) ; } @Test public void graph_count1() { Dataset ds = getDataset() ; long x = count(ds.getDefaultModel()) ; assertEquals(1,x) ; } @Test public void graph_count2() { Dataset ds = getDataset() ; long x = count(ds.getNamedModel(graph1)) ; assertEquals(2,x) ; } @Test public void graph_count3() { Dataset ds = getDataset() ; long x = count(ds.getNamedModel(graph3)) ; assertEquals(0,x) ; } @Test public void graph_count4() { Dataset ds = getDataset() ; long x = count(ds.getNamedModel(Quad.unionGraph.getURI())) ; assertEquals(3,x) ; } @Test public void graph_count5() { Dataset ds = getDataset() ; long x = count(ds.getNamedModel(Quad.defaultGraphIRI.getURI())) ; assertEquals(1,x) ; } @Test public void graph_count6() { Dataset ds = getDataset() ; long x = count(ds.getNamedModel(Quad.defaultGraphNodeGenerated.getURI())) ; assertEquals(1,x) ; } @Test public void graph_count7() { Dataset ds = getDataset() ; Model m = ds.getNamedModel("http://example/no-such-graph") ; long x = m.size() ; assertEquals(0, x) ; } @Test public void graph_api1() { Dataset ds = getDataset() ; int x = api(ds.getDefaultModel()) ; assertEquals(1,x) ; } @Test public void graph_api2() { Dataset ds = getDataset() ; int x = api(ds.getNamedModel(graph1)) ; assertEquals(2,x) ; } @Test public void graph_api3() { Dataset ds = getDataset() ; int x = api(ds.getNamedModel(graph3)) ; assertEquals(0,x) ; } @Test public void graph_api4() { Dataset ds = getDataset() ; int x = api(ds.getNamedModel(Quad.unionGraph.getURI())) ; assertEquals(3,x) ; Model m = ds.getNamedModel(Quad.unionGraph.getURI()) ; m.isIsomorphicWith(calcUnion) ; } @Test public void graph_api5() { Dataset ds = getDataset() ; int x = api(ds.getNamedModel(Quad.defaultGraphIRI.getURI())) ; assertEquals(1,x) ; } @Test public void graph_api6() { Dataset ds = getDataset() ; int x = api(ds.getNamedModel(Quad.defaultGraphNodeGenerated.getURI())) ; assertEquals(1,x) ; } private int query(String str, Model model) { Query q = QueryFactory.create(str, Syntax.syntaxARQ) ; try(QueryExecution qexec = QueryExecutionFactory.create(q, model)) { ResultSet rs = qexec.execSelect() ; return ResultSetFormatter.consume(rs) ; } } private int api(Model model) { Iterator<Triple> iter = model.getGraph().find(Node.ANY, Node.ANY, Node.ANY) ; int x = (int)Iter.count(iter) ; return x ; } private long count(Model model) { return model.size() ; } }