@Test public void testAddWhileQuerying() throws Exception { // Add some data to the repository con.begin(); con.addStatement(painter, RDF.TYPE, RDFS.CLASS); con.addStatement(painting, RDF.TYPE, RDFS.CLASS); con.addStatement(picasso, RDF.TYPE, painter); con.addStatement(guernica, RDF.TYPE, painting); con.addStatement(picasso, paints, guernica); con.commit(); ParsedTupleQuery tupleQuery = QueryParserUtil.parseTupleQuery(QueryLanguage.SERQL, "SELECT C FROM {} rdf:type {C}", null); CloseableIteration<? extends BindingSet, QueryEvaluationException> iter; iter = con.evaluate(tupleQuery.getTupleExpr(), null, EmptyBindingSet.getInstance(), false); con.begin(); while (iter.hasNext()) { BindingSet bindings = iter.next(); Value c = bindings.getValue("C"); if (c instanceof Resource) { con.addStatement((Resource) c, RDF.TYPE, RDFS.CLASS); } } con.commit(); assertEquals(3, countElements(con.getStatements(null, RDF.TYPE, RDFS.CLASS, false))); // simulate auto-commit tupleQuery = QueryParserUtil.parseTupleQuery(QueryLanguage.SERQL, "SELECT P FROM {} P {}", null); iter = con.evaluate(tupleQuery.getTupleExpr(), null, EmptyBindingSet.getInstance(), false); while (iter.hasNext()) { BindingSet bindings = iter.next(); Value p = bindings.getValue("P"); if (p instanceof URI) { con.begin(); con.addStatement((URI) p, RDF.TYPE, RDF.PROPERTY); con.commit(); } } assertEquals(2, countElements(con.getStatements(null, RDF.TYPE, RDF.PROPERTY, false))); }
protected void testValueRoundTrip(Resource subj, URI pred, Value obj) throws Exception { con.begin(); con.addStatement(subj, pred, obj); con.commit(); CloseableIteration<? extends Statement, SailException> stIter = con.getStatements(null, null, null, false); try { assertTrue(stIter.hasNext()); Statement st = stIter.next(); assertEquals(subj, st.getSubject()); assertEquals(pred, st.getPredicate()); assertEquals(obj, st.getObject()); assertTrue(!stIter.hasNext()); } finally { stIter.close(); } ParsedTupleQuery tupleQuery = QueryParserUtil.parseTupleQuery( QueryLanguage.SERQL, "SELECT S, P, O FROM {S} P {O} WHERE P = <" + pred.stringValue() + ">", null); CloseableIteration<? extends BindingSet, QueryEvaluationException> iter; iter = con.evaluate(tupleQuery.getTupleExpr(), null, EmptyBindingSet.getInstance(), false); try { assertTrue(iter.hasNext()); BindingSet bindings = iter.next(); assertEquals(subj, bindings.getValue("S")); assertEquals(pred, bindings.getValue("P")); assertEquals(obj, bindings.getValue("O")); assertTrue(!iter.hasNext()); } finally { iter.close(); } }
@Test public void testContexts() throws Exception { con.begin(); // Add schema data to the repository, no context con.addStatement(painter, RDF.TYPE, RDFS.CLASS); con.addStatement(painting, RDF.TYPE, RDFS.CLASS); // Add stuff about picasso to context1 con.addStatement(picasso, RDF.TYPE, painter, context1); con.addStatement(guernica, RDF.TYPE, painting, context1); con.addStatement(picasso, paints, guernica, context1); // Add stuff about rembrandt to context2 con.addStatement(rembrandt, RDF.TYPE, painter, context2); con.addStatement(nightwatch, RDF.TYPE, painting, context2); con.addStatement(rembrandt, paints, nightwatch, context2); con.commit(); assertEquals("context1 should contain 3 statements", 3, countContext1Elements()); assertEquals( "context2 should contain 3 statements", 3, countElements(con.getStatements(null, null, null, false, context2))); assertEquals("Repository should contain 8 statements", 8, countAllElements()); assertEquals( "statements without context should equal 2", 2, countElements(con.getStatements(null, null, null, false, (Resource) null))); assertEquals( "Statements without context and statements in context 1 together should total 5", 5, countElements(con.getStatements(null, null, null, false, null, context1))); assertEquals( "Statements without context and statements in context 2 together should total 5", 5, countElements(con.getStatements(null, null, null, false, null, context2))); assertEquals( "Statements in context 1 and in context 2 together should total 6", 6, countElements(con.getStatements(null, null, null, false, context1, context2))); // remove two statements from context1. con.begin(); con.removeStatements(picasso, null, null, context1); con.commit(); assertEquals("context1 should contain 1 statements", 1, countContext1Elements()); assertEquals("Repository should contain 6 statements", 6, countAllElements()); assertEquals( "Statements without context and statements in context 1 together should total 3", 3, countElements(con.getStatements(null, null, null, false, null, context1))); assertEquals( "Statements without context and statements in context 2 together should total 5", 5, countElements(con.getStatements(null, null, null, false, context2, null))); assertEquals( "Statements in context 1 and in context 2 together should total 4", 4, countElements(con.getStatements(null, null, null, false, context1, context2))); }
protected int countAllElements() throws Exception, SailException { return countElements(con.getStatements(null, null, null, false)); }
protected int countContext1Elements() throws Exception, SailException { return countElements(con.getStatements(null, null, null, false, context1)); }