예제 #1
0
  @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)));
  }
예제 #2
0
  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();
    }
  }
예제 #3
0
  @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)));
  }
예제 #4
0
 protected int countAllElements() throws Exception, SailException {
   return countElements(con.getStatements(null, null, null, false));
 }
예제 #5
0
 protected int countContext1Elements() throws Exception, SailException {
   return countElements(con.getStatements(null, null, null, false, context1));
 }