/* * 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.core; import static org.junit.Assert.assertEquals ; import static org.junit.Assert.assertFalse ; import static org.junit.Assert.assertNotNull ; import static org.junit.Assert.assertTrue ; import java.util.Iterator ; import java.util.List ; import java.util.Set ; import org.apache.jena.atlas.iterator.Iter ; import org.apache.jena.graph.Graph ; import org.apache.jena.graph.Node ; import org.apache.jena.graph.NodeFactory ; import org.apache.jena.graph.Triple ; import org.apache.jena.sparql.core.DatasetGraph ; import org.apache.jena.sparql.core.Quad ; import org.apache.jena.sparql.graph.GraphFactory ; import org.apache.jena.sparql.sse.SSE ; import org.junit.Test ; public abstract class AbstractDatasetGraphTests { protected abstract DatasetGraph emptyDataset() ; @Test public void create_1() { DatasetGraph dsg = emptyDataset() ; assertNotNull(dsg) ; assertNotNull(dsg.getDefaultGraph()) ; assertTrue(dsg.getDefaultGraph().isEmpty()) ; } // Quad operations /* * void add(Quad quad) * void delete(Quad quad) * void deleteAny(Node g, Node s, Node p, Node o) * Iterator<Quad> find(Quad quad) * Iterator<Quad> find(Node g, Node s, Node p , Node o) * boolean contains(Node g, Node s, Node p , Node o) * boolean contains(Quad quad) */ @Test public void quad_01() { DatasetGraph dsg = emptyDataset() ; assertNotNull(dsg) ; Quad quad = SSE.parseQuad("(quad <g> <s> <p> <o>)") ; dsg.add(quad) ; assertTrue(dsg.contains(quad)) ; Iterator<Quad> iter = dsg.find(quad) ; assertTrue(iter.hasNext()) ; Quad quad2 = iter.next(); assertFalse(iter.hasNext()) ; assertEquals(quad, quad2) ; // and the graph view. assertTrue(dsg.getDefaultGraph().isEmpty()) ; assertFalse(dsg.getGraph(NodeFactory.createURI("g")).isEmpty()) ; } @Test public void quad_02() { DatasetGraph dsg = emptyDataset() ; assertNotNull(dsg) ; Quad quad = SSE.parseQuad("(quad <g> <s> <p> <o>)") ; dsg.add(quad) ; dsg.containsGraph(NodeFactory.createURI("g")) ; dsg.delete(quad) ; assertTrue(dsg.isEmpty()) ; assertTrue(dsg.getDefaultGraph().isEmpty()) ; assertTrue(dsg.getGraph(NodeFactory.createURI("g")).isEmpty()) ; } @Test public void quad_03() { DatasetGraph dsg = emptyDataset() ; assertNotNull(dsg) ; Quad quad1 = SSE.parseQuad("(quad <g> <s> <p> <o1>)") ; Quad quad2 = SSE.parseQuad("(quad <g> <s> <p> <o2>)") ; dsg.add(quad1) ; dsg.add(quad2) ; dsg.deleteAny(NodeFactory.createURI("g"), NodeFactory.createURI("s"), null, null) ; assertFalse(dsg.contains(quad1)) ; assertFalse(dsg.contains(quad2)) ; } @Test public void quad_04() { DatasetGraph dsg = emptyDataset() ; assertNotNull(dsg) ; Quad quad1 = SSE.parseQuad("(quad <g> <s> <p> <o1>)") ; Quad quad2 = SSE.parseQuad("(quad <g> <s> <p> <o2>)") ; dsg.add(quad1) ; dsg.add(quad2) ; Iterator<Quad> iter = dsg.find(NodeFactory.createURI("g"), NodeFactory.createURI("s"), null, null) ; assertTrue(iter.hasNext()) ; Set<Quad> x = Iter.iter(iter).toSet() ; assertEquals(2, x.size()) ; assertTrue(x.contains(quad1)) ; assertTrue(x.contains(quad2)) ; } @Test public void quad_05() { DatasetGraph dsg = emptyDataset() ; assertNotNull(dsg) ; Quad quad1 = SSE.parseQuad("(quad <g> <s> <p> <o1>)") ; Quad quad2 = SSE.parseQuad("(quad <g> <s> <p> <o2>)") ; Node g = SSE.parseNode("<g>") ; Node s = SSE.parseNode("<s>") ; Node p = SSE.parseNode("<p>") ; Node o1 = SSE.parseNode("<o1>") ; Node o2 = SSE.parseNode("<o2>") ; dsg.add(g,s,p,o1) ; assertTrue(dsg.contains(quad1)) ; assertTrue(dsg.contains(g,s,p,o1)) ; assertFalse(dsg.contains(g,s,p,o2)) ; } /* * getDefaultGraph() * getGraph(Node) * containsGraph(Node) * ???? setDefaultGraph(Graph) * addGraph(Node, Graph) * removeGraph(Node) * listGraphNodes() */ // Graph centric operations @Test public void graph_00() { DatasetGraph dsg = emptyDataset() ; assertNotNull(dsg) ; Node gn = NodeFactory.createURI("g") ; Graph g = GraphFactory.createDefaultGraph() ; g.add(SSE.parseTriple("(<s> <p> <o>)")) ; // So the graph is not empty. dsg.addGraph(gn, g); assertTrue(dsg.containsGraph(gn)) ; } // Graph centric operations @Test public void graph_01() { DatasetGraph dsg = emptyDataset() ; assertNotNull(dsg) ; Node g = NodeFactory.createURI("g") ; Triple t = SSE.parseTriple("(<s> <p> <o>)") ; dsg.getGraph(g).add(t) ; assertTrue(dsg.getGraph(g).contains(t)) ; Quad quad = SSE.parseQuad("(quad <g> <s> <p> <o>)") ; Iterator<Quad> iter = dsg.find(null, null, null, null) ; assertTrue(iter.hasNext()) ; Quad quad2 = iter.next(); assertFalse(iter.hasNext()) ; assertEquals(quad, quad2) ; assertTrue(dsg.getDefaultGraph().isEmpty()) ; assertFalse(dsg.getGraph(NodeFactory.createURI("g")).isEmpty()) ; } @Test public void graph_02() { Node g = NodeFactory.createURI("g") ; DatasetGraph dsg = emptyDataset() ; assertNotNull(dsg) ; Quad quad = SSE.parseQuad("(quad <g> <s> <p> <o>)") ; dsg.add(quad) ; Triple t = SSE.parseTriple("(<s> <p> <o>)") ; dsg.getGraph(g).delete(t) ; assertTrue(dsg.getDefaultGraph().isEmpty()) ; assertTrue(dsg.getGraph(NodeFactory.createURI("g")).isEmpty()) ; assertFalse(dsg.find(Node.ANY, Node.ANY, Node.ANY, Node.ANY).hasNext()) ; } @Test public void graph_03() { Node g = NodeFactory.createURI("g") ; DatasetGraph dsg = emptyDataset() ; Graph data = SSE.parseGraph("(graph (<s> <p> <o>))") ; dsg.addGraph(g, data) ; Quad quad = SSE.parseQuad("(quad <g> <s> <p> <o>)") ; assertTrue(dsg.contains(quad)) ; } @Test public void find_01() { Node g1 = NodeFactory.createURI("g1") ; DatasetGraph dsg = emptyDataset() ; Quad quad1 = SSE.parseQuad("(quad <g1> <s1> <p1> <o1>)") ; Quad quad2 = SSE.parseQuad("(quad <g2> <s2> <p2> <o2>)") ; dsg.add(quad1) ; dsg.add(quad2) ; List<Quad> quads = Iter.toList(dsg.find(g1, null, null, null)) ; assertEquals(1, quads.size()) ; Quad q = quads.get(0) ; assertEquals(quad1, q) ; } @Test public void deleteAny_01() { DatasetGraph dsg = emptyDataset() ; Node subject = NodeFactory.createURI("http://example/s"); Node predicate = NodeFactory.createURI("http://example/p"); Node object = NodeFactory.createBlankNode(); dsg.add(new Quad(Quad.defaultGraphIRI, subject, predicate, object)); dsg.deleteAny(Node.ANY, subject, null, null); } @Test public void deleteAny_02() { DatasetGraph dsg = emptyDataset() ; Node subject = NodeFactory.createURI("http://example/s"); Node predicate = NodeFactory.createURI("http://example/p"); Node object1 = NodeFactory.createBlankNode(); Node object2 = NodeFactory.createBlankNode(); Node graph = NodeFactory.createURI("http://example/g") ; dsg.add(graph, subject, predicate, object1); dsg.add(graph, subject, predicate, object2); dsg.deleteAny(Quad.defaultGraphIRI, null, null, null); List<Quad> quads = Iter.toList(dsg.find(graph, null, null, null)) ; assertEquals(2, quads.size()) ; dsg.deleteAny(graph, null, null, null); quads = Iter.toList(dsg.find(graph, null, null, null)) ; assertEquals(0, quads.size()) ; } @Test public void clear_01() { DatasetGraph dsg = emptyDataset() ; Quad quad = SSE.parseQuad("(quad <g> <s> <p> <o>)") ; Node gn = SSE.parseNode("<g>") ; assertTrue(dsg.isEmpty()) ; dsg.add(quad) ; assertFalse(dsg.isEmpty()) ; assertTrue(dsg.containsGraph(gn)) ; dsg.clear() ; assertTrue(dsg.isEmpty()) ; assertFalse(dsg.containsGraph(gn)) ; } }