blob: 99d400d672eeaae04fe695eb484fa3556c0357da [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.rya;
import java.util.GregorianCalendar;
import java.util.List;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import org.apache.accumulo.core.client.Connector;
import org.apache.accumulo.core.client.mock.MockInstance;
import org.apache.rya.accumulo.AccumuloRdfConfiguration;
import org.apache.rya.accumulo.AccumuloRyaDAO;
import org.apache.rya.api.RdfCloudTripleStoreConstants;
import org.apache.rya.rdftriplestore.RdfCloudTripleStore;
import org.eclipse.rdf4j.model.Namespace;
import org.eclipse.rdf4j.model.Statement;
import org.eclipse.rdf4j.model.ValueFactory;
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
import org.eclipse.rdf4j.query.BindingSet;
import org.eclipse.rdf4j.query.QueryLanguage;
import org.eclipse.rdf4j.query.QueryResultHandlerException;
import org.eclipse.rdf4j.query.TupleQuery;
import org.eclipse.rdf4j.query.TupleQueryResultHandler;
import org.eclipse.rdf4j.query.TupleQueryResultHandlerException;
import org.eclipse.rdf4j.repository.RepositoryException;
import org.eclipse.rdf4j.repository.RepositoryResult;
import org.eclipse.rdf4j.repository.sail.SailRepository;
import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection;
import junit.framework.TestCase;
/**
* Class PartitionConnectionTest
* Date: Jul 6, 2011
* Time: 5:24:07 PM
*/
public class RdfCloudTripleStoreTest extends TestCase {
public static final String NAMESPACE = "http://here/2010/tracked-data-provenance/ns#";//44 len
public static final String RDF_NS = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
public static final String HBNAMESPACE = "http://here/2010/tracked-data-provenance/heartbeat/ns#";
public static final String HB_TIMESTAMP = HBNAMESPACE + "timestamp";
private SailRepository repository;
private SailRepositoryConnection connection;
private static final ValueFactory VF = SimpleValueFactory.getInstance();
private String objectUuid = "objectuuid1";
private String ancestor = "ancestor1";
private String descendant = "descendant1";
private static final long START = 1309532965000l;
private static final long END = 1310566686000l;
private Connector connector;
@Override
protected void setUp() throws Exception {
super.setUp();
connector = new MockInstance().getConnector("", "");
RdfCloudTripleStore sail = new RdfCloudTripleStore();
AccumuloRdfConfiguration conf = new AccumuloRdfConfiguration();
conf.setTablePrefix("lubm_");
sail.setConf(conf);
AccumuloRyaDAO crdfdao = new AccumuloRyaDAO();
crdfdao.setConnector(connector);
crdfdao.setConf(conf);
sail.setRyaDAO(crdfdao);
repository = new SailRepository(sail);
repository.initialize();
connection = repository.getConnection();
loadData();
}
private void loadData() throws RepositoryException, DatatypeConfigurationException {
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, objectUuid), VF.createIRI(NAMESPACE, "name"), VF.createLiteral("objUuid")));
//created
String uuid = "uuid1";
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(RDF_NS, "type"), VF.createIRI(NAMESPACE, "Created")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "createdItem"), VF.createIRI(NAMESPACE, objectUuid)));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "performedBy"), VF.createIRI("urn:system:A")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "stringLit"), VF.createLiteral("stringLit1")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "stringLit"), VF.createLiteral("stringLit2")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "stringLit"), VF.createLiteral("stringLit3")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "stringLit"), VF.createLiteral("stringLit4")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "strLit1"), VF.createLiteral("strLit1")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "strLit1"), VF.createLiteral("strLit2")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "strLit1"), VF.createLiteral("strLit3")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "performedAt"), VF.createLiteral(DatatypeFactory.newInstance().newXMLGregorianCalendar(2011, 7, 12, 6, 0, 0, 0, 0))));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "reportedAt"), VF.createLiteral(DatatypeFactory.newInstance().newXMLGregorianCalendar(2011, 7, 12, 6, 1, 0, 0, 0))));
//clicked
uuid = "uuid2";
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(RDF_NS, "type"), VF.createIRI(NAMESPACE, "Clicked")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "clickedItem"), VF.createIRI(NAMESPACE, objectUuid)));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "performedBy"), VF.createIRI("urn:system:B")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "performedAt"), VF.createLiteral(DatatypeFactory.newInstance().newXMLGregorianCalendar(2011, 7, 12, 6, 2, 0, 0, 0))));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "reportedAt"), VF.createLiteral(DatatypeFactory.newInstance().newXMLGregorianCalendar(2011, 7, 12, 6, 3, 0, 0, 0))));
//deleted
uuid = "uuid3";
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(RDF_NS, "type"), VF.createIRI(NAMESPACE, "Deleted")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "deletedItem"), VF.createIRI(NAMESPACE, objectUuid)));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "performedBy"), VF.createIRI("urn:system:C")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "performedAt"), VF.createLiteral(DatatypeFactory.newInstance().newXMLGregorianCalendar(2011, 7, 12, 6, 4, 0, 0, 0))));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "reportedAt"), VF.createLiteral(DatatypeFactory.newInstance().newXMLGregorianCalendar(2011, 7, 12, 6, 5, 0, 0, 0))));
//dropped
uuid = "uuid4";
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(RDF_NS, "type"), VF.createIRI(NAMESPACE, "Dropped")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "droppedItem"), VF.createIRI(NAMESPACE, objectUuid)));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "performedBy"), VF.createIRI("urn:system:D")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "performedAt"), VF.createLiteral(DatatypeFactory.newInstance().newXMLGregorianCalendar(2011, 7, 12, 6, 6, 0, 0, 0))));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "reportedAt"), VF.createLiteral(DatatypeFactory.newInstance().newXMLGregorianCalendar(2011, 7, 12, 6, 7, 0, 0, 0))));
//received
uuid = "uuid5";
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(RDF_NS, "type"), VF.createIRI(NAMESPACE, "Received")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "receivedItem"), VF.createIRI(NAMESPACE, objectUuid)));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "performedBy"), VF.createIRI("urn:system:E")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "performedAt"), VF.createLiteral(DatatypeFactory.newInstance().newXMLGregorianCalendar(2011, 7, 12, 6, 8, 0, 0, 0))));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "reportedAt"), VF.createLiteral(DatatypeFactory.newInstance().newXMLGregorianCalendar(2011, 7, 12, 6, 9, 0, 0, 0))));
//sent
uuid = "uuid6";
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(RDF_NS, "type"), VF.createIRI(NAMESPACE, "Sent")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "sentItem"), VF.createIRI(NAMESPACE, objectUuid)));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "performedBy"), VF.createIRI("urn:system:F")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "performedAt"), VF.createLiteral(DatatypeFactory.newInstance().newXMLGregorianCalendar(2011, 7, 12, 6, 10, 0, 0, 0))));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "reportedAt"), VF.createLiteral(DatatypeFactory.newInstance().newXMLGregorianCalendar(2011, 7, 12, 6, 11, 0, 0, 0))));
//stored
uuid = "uuid7";
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(RDF_NS, "type"), VF.createIRI(NAMESPACE, "Stored")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "storedItem"), VF.createIRI(NAMESPACE, objectUuid)));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "performedBy"), VF.createIRI("urn:system:G")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "performedAt"), VF.createLiteral(DatatypeFactory.newInstance().newXMLGregorianCalendar(2011, 7, 12, 6, 12, 0, 0, 0))));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, uuid), VF.createIRI(NAMESPACE, "reportedAt"), VF.createLiteral(DatatypeFactory.newInstance().newXMLGregorianCalendar(2011, 7, 12, 6, 13, 0, 0, 0))));
//derivedFrom
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, descendant), VF.createIRI(NAMESPACE, "derivedFrom"), VF.createIRI(NAMESPACE, ancestor)));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, descendant), VF.createIRI(NAMESPACE, "name"), VF.createLiteral("descendantOne")));
connection.add(VF.createStatement(VF.createIRI(NAMESPACE, ancestor), VF.createIRI(NAMESPACE, "name"), VF.createLiteral("ancestor1")));
//heartbeats
String hbuuid = "hbuuid1";
connection.add(VF.createStatement(VF.createIRI(HBNAMESPACE, hbuuid), VF.createIRI(RDF_NS, "type"), VF.createIRI(HBNAMESPACE, "HeartbeatMeasurement")));
connection.add(VF.createStatement(VF.createIRI(HBNAMESPACE, hbuuid), VF.createIRI(HB_TIMESTAMP), VF.createLiteral((START + 1) + "")));
connection.add(VF.createStatement(VF.createIRI(HBNAMESPACE, hbuuid), VF.createIRI(HBNAMESPACE, "count"), VF.createLiteral(1 + "")));
connection.add(VF.createStatement(VF.createIRI(HBNAMESPACE, hbuuid), VF.createIRI(HBNAMESPACE, "systemName"), VF.createIRI("urn:system:A")));
connection.add(VF.createStatement(VF.createIRI("urn:system:A"), VF.createIRI(HBNAMESPACE, "heartbeat"), VF.createIRI(HBNAMESPACE, hbuuid)));
hbuuid = "hbuuid2";
connection.add(VF.createStatement(VF.createIRI(HBNAMESPACE, hbuuid), VF.createIRI(RDF_NS, "type"), VF.createIRI(HBNAMESPACE, "HeartbeatMeasurement")));
connection.add(VF.createStatement(VF.createIRI(HBNAMESPACE, hbuuid), VF.createIRI(HB_TIMESTAMP), VF.createLiteral((START + 2) + "")));
connection.add(VF.createStatement(VF.createIRI(HBNAMESPACE, hbuuid), VF.createIRI(HBNAMESPACE, "count"), VF.createLiteral(2 + "")));
connection.add(VF.createStatement(VF.createIRI(HBNAMESPACE, hbuuid), VF.createIRI(HBNAMESPACE, "systemName"), VF.createIRI("urn:system:B")));
connection.add(VF.createStatement(VF.createIRI("urn:system:B"), VF.createIRI(HBNAMESPACE, "heartbeat"), VF.createIRI(HBNAMESPACE, hbuuid)));
hbuuid = "hbuuid3";
connection.add(VF.createStatement(VF.createIRI(HBNAMESPACE, hbuuid), VF.createIRI(RDF_NS, "type"), VF.createIRI(HBNAMESPACE, "HeartbeatMeasurement")));
connection.add(VF.createStatement(VF.createIRI(HBNAMESPACE, hbuuid), VF.createIRI(HB_TIMESTAMP), VF.createLiteral((START + 3) + "")));
connection.add(VF.createStatement(VF.createIRI(HBNAMESPACE, hbuuid), VF.createIRI(HBNAMESPACE, "count"), VF.createLiteral(3 + "")));
connection.add(VF.createStatement(VF.createIRI(HBNAMESPACE, hbuuid), VF.createIRI(HBNAMESPACE, "systemName"), VF.createIRI("urn:system:C")));
connection.add(VF.createStatement(VF.createIRI("urn:system:C"), VF.createIRI(HBNAMESPACE, "heartbeat"), VF.createIRI(HBNAMESPACE, hbuuid)));
connection.add(VF.createStatement(VF.createIRI("urn:subj1"), VF.createIRI("urn:pred"), VF.createLiteral("obj1")));
connection.add(VF.createStatement(VF.createIRI("urn:subj1"), VF.createIRI("urn:pred"), VF.createLiteral("obj2")));
connection.add(VF.createStatement(VF.createIRI("urn:subj1"), VF.createIRI("urn:pred"), VF.createLiteral("obj3")));
connection.add(VF.createStatement(VF.createIRI("urn:subj1"), VF.createIRI("urn:pred"), VF.createLiteral("obj4")));
connection.add(VF.createStatement(VF.createIRI("urn:subj2"), VF.createIRI("urn:pred"), VF.createLiteral("obj1")));
connection.add(VF.createStatement(VF.createIRI("urn:subj2"), VF.createIRI("urn:pred"), VF.createLiteral("obj2")));
connection.add(VF.createStatement(VF.createIRI("urn:subj2"), VF.createIRI("urn:pred"), VF.createLiteral("obj3")));
connection.add(VF.createStatement(VF.createIRI("urn:subj2"), VF.createIRI("urn:pred"), VF.createLiteral("obj4")));
connection.add(VF.createStatement(VF.createIRI("urn:subj3"), VF.createIRI("urn:pred"), VF.createLiteral("obj1")));
connection.add(VF.createStatement(VF.createIRI("urn:subj3"), VF.createIRI("urn:pred"), VF.createLiteral("obj4")));
//Foreign Chars
connection.add(VF.createStatement(VF.createIRI("urn:subj1"), VF.createIRI("urn:pred"), VF.createLiteral(FAN_CH_SIM)));
connection.add(VF.createStatement(VF.createIRI("urn:subj1"), VF.createIRI("urn:pred"), VF.createLiteral(FAN_CH_TRAD)));
connection.add(VF.createStatement(VF.createIRI("urn:subj1"), VF.createIRI("urn:pred"), VF.createLiteral(FAN_TH)));
connection.add(VF.createStatement(VF.createIRI("urn:subj1"), VF.createIRI("urn:pred"), VF.createLiteral(FAN_RN)));
connection.add(VF.createStatement(VF.createIRI("urn:subj2"), VF.createIRI("urn:pred"), VF.createLiteral(FAN_CH_SIM)));
connection.add(VF.createStatement(VF.createIRI("urn:subj2"), VF.createIRI("urn:pred"), VF.createLiteral(FAN_CH_TRAD)));
connection.add(VF.createStatement(VF.createIRI("urn:subj2"), VF.createIRI("urn:pred"), VF.createLiteral(FAN_TH)));
connection.add(VF.createStatement(VF.createIRI("urn:subj2"), VF.createIRI("urn:pred"), VF.createLiteral(FAN_RN)));
connection.add(VF.createStatement(VF.createIRI("urn:subj3"), VF.createIRI("urn:pred"), VF.createLiteral(FAN_CH_SIM)));
connection.add(VF.createStatement(VF.createIRI("urn:subj3"), VF.createIRI("urn:pred"), VF.createLiteral(FAN_CH_TRAD)));
connection.commit();
}
private static final String FAN_CH_SIM = "风扇";
private static final String FAN_CH_TRAD = "風扇";
private static final String FAN_TH = "แฟน";
private static final String FAN_RN = "вентилятор";
@Override
protected void tearDown() throws Exception {
super.tearDown();
connection.close();
repository.shutDown();
}
protected String getXmlDate(long ts) throws DatatypeConfigurationException {
GregorianCalendar gregorianCalendar = new GregorianCalendar();
gregorianCalendar.setTimeInMillis(ts);
//"2011-07-12T05:12:00.000Z"^^xsd:dateTime
return "\"" + VF.createLiteral(DatatypeFactory.newInstance().newXMLGregorianCalendar(gregorianCalendar)).stringValue() + "\"^^xsd:dateTime";
}
// public void testScanAll() throws Exception {
// Scanner sc = connector.createScanner("lubm_spo", Constants.NO_AUTHS);
// for (Map.Entry<Key, Value> aSc : sc) System.out.println(aSc.getKey().getRow());
// }
public void testNamespace() throws Exception {
String namespace = "urn:testNamespace#";
String prefix = "pfx";
connection.setNamespace(prefix, namespace);
assertEquals(namespace, connection.getNamespace(prefix));
}
public void testValues() throws Exception {
String query = "SELECT DISTINCT ?entity WHERE {"
+ "VALUES (?entity) { (<http://test/entity>) }"
+ "}";
TupleQuery tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
CountTupleHandler tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(1, tupleHandler.getCount());
}
public void testGetNamespaces() throws Exception {
String namespace = "urn:testNamespace#";
String prefix = "pfx";
connection.setNamespace(prefix, namespace);
namespace = "urn:testNamespace2#";
prefix = "pfx2";
connection.setNamespace(prefix, namespace);
RepositoryResult<Namespace> result = connection.getNamespaces();
int count = 0;
while (result.hasNext()) {
result.next();
count++;
}
assertEquals(2, count);
}
public void testAddCommitStatement() throws Exception {
Statement stmt = VF.createStatement(VF.createIRI("urn:namespace#subj"), VF.createIRI("urn:namespace#pred"), VF.createLiteral("object"));
connection.add(stmt);
connection.commit();
}
public void testSelectOnlyQuery() throws Exception {
String query = "PREFIX ns:<" + NAMESPACE + ">\n" +
"select * where {\n" +
"ns:uuid1 ns:createdItem ?cr.\n" +
"ns:uuid1 ns:reportedAt ?ra.\n" +
"ns:uuid1 ns:performedAt ?pa.\n" +
"}\n";
TupleQuery tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
// tupleQuery.evaluate(new PrintTupleHandler());
CountTupleHandler tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(1, tupleHandler.getCount());
}
public void testForeignSelectOnlyQuery() throws Exception {
String query;
query = "select * where { ?s <urn:pred> ?o }"; // hits po
TupleQuery tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
CountTupleHandler tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(20, tupleHandler.getCount());
query = "select * where { <urn:subj1> <urn:pred> ?o }"; //hits spo
tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(8, tupleHandler.getCount());
query = "select * where { ?s ?p '"+FAN_CH_SIM+"' }"; //hits osp
tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(3, tupleHandler.getCount());
}
//provenance Queries//////////////////////////////////////////////////////////////////////
public void testEventInfo() throws Exception {
String query = "PREFIX ns:<" + NAMESPACE + ">\n" +
"select * where {\n" +
" ns:uuid1 ?p ?o.\n" +
"}\n";
TupleQuery tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
// tupleQuery.evaluate(new PrintTupleHandler());
CountTupleHandler tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(12, tupleHandler.getCount());
}
public void testAllAncestors() throws Exception {
String query = "PREFIX ns:<" + NAMESPACE + ">\n" +
"select * where {\n" +
"ns:" + descendant + " ns:derivedFrom ?dr.\n" +
"}\n";
TupleQuery tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
// tupleQuery.evaluate(new PrintTupleHandler());
CountTupleHandler tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(1, tupleHandler.getCount());
}
public void testAllDescendants() throws Exception {
String query = "PREFIX ns:<" + NAMESPACE + ">\n" +
"select * where {\n" +
"?ds ns:derivedFrom ns:" + ancestor + ".\n" +
"}\n";
TupleQuery tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
// tupleQuery.evaluate(new PrintTupleHandler());
CountTupleHandler tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(1, tupleHandler.getCount());
}
public void testEventsForUri() throws Exception {
String query = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" +
"PREFIX ns:<" + NAMESPACE + ">\n" +
"PREFIX org.apachepart: <urn:org.apache.mmrts.partition.rdf/08/2011#>\n" +
"PREFIX org.apache: <" + RdfCloudTripleStoreConstants.NAMESPACE + ">\n" +
"PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n" +
"select * where {\n" +
"{" +
" ?s rdf:type ns:Created.\n" +
" ?s ns:createdItem ns:objectuuid1.\n" +
" ?s ns:performedBy ?pb.\n" +
" ?s ns:performedAt ?pa.\n" +
" FILTER(org.apache:range(?pa, " + getXmlDate(START) + ", " + getXmlDate(END) + "))\n" +
"}\n" +
"UNION {" +
" ?s rdf:type ns:Clicked.\n" +
" ?s ns:clickedItem ns:objectuuid1.\n" +
" ?s ns:performedBy ?pb.\n" +
" ?s ns:performedAt ?pa.\n" +
" FILTER(org.apache:range(?pa, " + getXmlDate(START) + ", " + getXmlDate(END) + "))\n" +
"}\n" +
"UNION {" +
" ?s rdf:type ns:Deleted.\n" +
" ?s ns:deletedItem ns:objectuuid1.\n" +
" ?s ns:performedBy ?pb.\n" +
" ?s ns:performedAt ?pa.\n" +
" FILTER(org.apache:range(?pa, " + getXmlDate(START) + ", " + getXmlDate(END) + "))\n" +
"}\n" +
"UNION {" +
" ?s rdf:type ns:Dropped.\n" +
" ?s ns:droppedItem ns:objectuuid1.\n" +
" ?s ns:performedBy ?pb.\n" +
" ?s ns:performedAt ?pa.\n" +
" FILTER(org.apache:range(?pa, " + getXmlDate(START) + ", " + getXmlDate(END) + "))\n" +
"}\n" +
"UNION {" +
" ?s rdf:type ns:Received.\n" +
" ?s ns:receivedItem ns:objectuuid1.\n" +
" ?s ns:performedBy ?pb.\n" +
" ?s ns:performedAt ?pa.\n" +
" FILTER(org.apache:range(?pa, " + getXmlDate(START) + ", " + getXmlDate(END) + "))\n" +
"}\n" +
"UNION {" +
" ?s rdf:type ns:Stored.\n" +
" ?s ns:storedItem ns:objectuuid1.\n" +
" ?s ns:performedBy ?pb.\n" +
" ?s ns:performedAt ?pa.\n" +
" FILTER(org.apache:range(?pa, " + getXmlDate(START) + ", " + getXmlDate(END) + "))\n" +
"}\n" +
"UNION {" +
" ?s rdf:type ns:Sent.\n" +
" ?s ns:sentItem ns:objectuuid1.\n" +
" ?s ns:performedBy ?pb.\n" +
" ?s ns:performedAt ?pa.\n" +
" FILTER(org.apache:range(?pa, " + getXmlDate(START) + ", " + getXmlDate(END) + "))\n" +
"}\n" +
"}\n";
TupleQuery tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
// tupleQuery.setBinding(START_BINDING, vf.createLiteral(START));
// tupleQuery.setBinding(END_BINDING, vf.createLiteral(END));
// tupleQuery.setBinding(TIME_PREDICATE, vf.createIRI(NAMESPACE, "performedAt"));
// tupleQuery.evaluate(new PrintTupleHandler());
CountTupleHandler tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(7, tupleHandler.getCount());
}
public void testAllEvents() throws Exception {
String query = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" +
"PREFIX ns:<" + NAMESPACE + ">\n" +
"PREFIX org.apachepart: <urn:org.apache.mmrts.partition.rdf/08/2011#>\n" +
"PREFIX org.apache: <" + RdfCloudTripleStoreConstants.NAMESPACE + ">\n" +
"PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n" +
"select * where {\n" +
"{" +
" ?s rdf:type ns:Created.\n" +
" ?s ns:performedBy ?pb.\n" +
" ?s ns:performedAt ?pa.\n" +
" FILTER(org.apache:range(?pa, " + getXmlDate(START) + ", " + getXmlDate(END) + "))\n" +
"}\n" +
"UNION {" +
" ?s rdf:type ns:Clicked.\n" +
" ?s ns:performedBy ?pb.\n" +
" ?s ns:performedAt ?pa.\n" +
" FILTER(org.apache:range(?pa, " + getXmlDate(START) + ", " + getXmlDate(END) + "))\n" +
"}\n" +
"UNION {" +
" ?s rdf:type ns:Deleted.\n" +
" ?s ns:performedBy ?pb.\n" +
" ?s ns:performedAt ?pa.\n" +
" FILTER(org.apache:range(?pa, " + getXmlDate(START) + ", " + getXmlDate(END) + "))\n" +
"}\n" +
"UNION {" +
" ?s rdf:type ns:Dropped.\n" +
" ?s ns:performedBy ?pb.\n" +
" ?s ns:performedAt ?pa.\n" +
" FILTER(org.apache:range(?pa, " + getXmlDate(START) + ", " + getXmlDate(END) + "))\n" +
"}\n" +
"UNION {" +
" ?s rdf:type ns:Received.\n" +
" ?s ns:performedBy ?pb.\n" +
" ?s ns:performedAt ?pa.\n" +
" FILTER(org.apache:range(?pa, " + getXmlDate(START) + ", " + getXmlDate(END) + "))\n" +
"}\n" +
"UNION {" +
" ?s rdf:type ns:Stored.\n" +
" ?s ns:performedBy ?pb.\n" +
" ?s ns:performedAt ?pa.\n" +
" FILTER(org.apache:range(?pa, " + getXmlDate(START) + ", " + getXmlDate(END) + "))\n" +
"}\n" +
"UNION {" +
" ?s rdf:type ns:Sent.\n" +
" ?s ns:performedBy ?pb.\n" +
" ?s ns:performedAt ?pa.\n" +
" FILTER(org.apache:range(?pa, " + getXmlDate(START) + ", " + getXmlDate(END) + "))\n" +
"}\n" +
"}\n";
TupleQuery tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
// tupleQuery.setBinding(START_BINDING, vf.createLiteral(START));
// tupleQuery.setBinding(END_BINDING, vf.createLiteral(END));
// tupleQuery.setBinding(TIME_PREDICATE, vf.createIRI(NAMESPACE, "performedAt"));
// tupleQuery.evaluate(new PrintTupleHandler());
CountTupleHandler tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(7, tupleHandler.getCount());
// System.out.println(tupleHandler.getCount());
}
public void testEventsBtwnSystems() throws Exception { //TODO: How to do XMLDateTime ranges
String query = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" +
"PREFIX ns:<" + NAMESPACE + ">\n" +
"PREFIX org.apachepart: <urn:org.apache.mmrts.partition.rdf/08/2011#>\n" +
"PREFIX org.apache: <" + RdfCloudTripleStoreConstants.NAMESPACE + ">\n" +
"PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n" +
"select * where {\n" +
" ?sendEvent rdf:type ns:Sent;\n" +
" ns:sentItem ?objUuid;\n" +
" ns:performedBy <urn:system:F>;\n" +
" ns:performedAt ?spa.\n" +
" ?recEvent rdf:type ns:Received;\n" +
" ns:receivedItem ?objUuid;\n" +
" ns:performedBy <urn:system:E>;\n" +
" ns:performedAt ?rpa.\n" +
// " FILTER(org.apache:range(?spa, \"2011-07-12T05:12:00.000Z\"^^xsd:dateTime, \"2011-07-12T07:12:00.000Z\"^^xsd:dateTime))\n" +
" FILTER(org.apache:range(?spa, " + getXmlDate(START) + ", " + getXmlDate(END) + "))\n" +
" FILTER(org.apache:range(?rpa, " + getXmlDate(START) + ", " + getXmlDate(END) + "))\n" +
"}\n";
TupleQuery tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
// tupleQuery.setBinding(START_BINDING, vf.createLiteral(START));
// tupleQuery.setBinding(END_BINDING, vf.createLiteral(END));
// tupleQuery.setBinding(TIME_PREDICATE, vf.createIRI(NAMESPACE, "performedAt"));
// tupleQuery.evaluate(new PrintTupleHandler());
CountTupleHandler tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(1, tupleHandler.getCount());
}
public void testHeartbeatCounts() throws Exception {
String query = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" +
"PREFIX hns:<" + HBNAMESPACE + ">\n" +
"PREFIX org.apachepart: <urn:org.apache.mmrts.partition.rdf/08/2011#>\n" +
"PREFIX org.apache: <" + RdfCloudTripleStoreConstants.NAMESPACE + ">\n" +
"PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n" +
"select * where {\n" +
" ?hb rdf:type hns:HeartbeatMeasurement;\n" +
" hns:count ?count;\n" +
" hns:timestamp ?ts;\n" +
" hns:systemName ?systemName.\n" +
" FILTER(org.apache:range(?ts, \"" + START + "\", \"" + (START + 3) + "\"))\n" +
"}\n";
// System.out.println(query);
TupleQuery tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
// tupleQuery.setBinding(RdfCloudTripleStoreConfiguration.CONF_QUERYPLAN_FLAG, vf.createLiteral(true));
// tupleQuery.evaluate(new PrintTupleHandler());
CountTupleHandler tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(2, tupleHandler.getCount());
}
//provenance Queries//////////////////////////////////////////////////////////////////////
public void testCreatedEvents() throws Exception {
String query = "PREFIX ns:<" + NAMESPACE + ">\n" +
"select * where {\n" +
" ?s ns:createdItem ns:objectuuid1.\n" +
" ?s ns:reportedAt ?ra.\n" +
"}\n";
TupleQuery tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
CountTupleHandler tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(1, tupleHandler.getCount());
}
public void testSelectAllAfterFilter() throws Exception {
String query = "PREFIX ns:<" + NAMESPACE + ">\n" +
"select * where {\n" +
" ?s ns:createdItem ns:objectuuid1.\n" +
" ?s ?p ?o.\n" +
"}\n";
TupleQuery tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
CountTupleHandler tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(12, tupleHandler.getCount());
}
public void testFilterQuery() throws Exception {
String query = "PREFIX ns:<" + NAMESPACE + ">\n" +
"select * where {\n" +
"ns:uuid1 ns:createdItem ?cr.\n" +
"ns:uuid1 ns:stringLit ?sl.\n" +
"FILTER regex(?sl, \"stringLit1\")" +
"ns:uuid1 ns:reportedAt ?ra.\n" +
"ns:uuid1 ns:performedAt ?pa.\n" +
"}\n";
TupleQuery tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
// tupleQuery.evaluate(new PrintTupleHandler());
CountTupleHandler tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(1, tupleHandler.getCount());
}
public void testMultiplePredicatesMultipleBindingSets() throws Exception {
//MMRTS-121
String query = "PREFIX ns:<" + NAMESPACE + ">\n" +
"select * where {\n" +
"?id ns:createdItem ns:objectuuid1.\n" +
"?id ns:stringLit ?sl.\n" +
"?id ns:strLit1 ?s2.\n" +
"}\n";
TupleQuery tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
// tupleQuery.evaluate(new PrintTupleHandler());
CountTupleHandler tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(12, tupleHandler.getCount());
}
public void testMultiShardLookupTimeRange() throws Exception {
//MMRTS-113
String query = "PREFIX hb: <http://here/2010/tracked-data-provenance/heartbeat/ns#>\n" +
"PREFIX org.apachepart: <urn:org.apache.mmrts.partition.rdf/08/2011#>\n" +
"SELECT * WHERE\n" +
"{\n" +
"?id hb:timestamp ?timestamp.\n" +
// "FILTER(org.apachepart:timeRange(?id, hb:timestamp, " + START + " , " + (START + 2) + " , 'TIMESTAMP'))\n" +
"?id hb:count ?count.\n" +
"?system hb:heartbeat ?id.\n" +
"}";
TupleQuery tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
// tupleQuery.evaluate(new PrintTupleHandler());
CountTupleHandler tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(3, tupleHandler.getCount());
}
public void testMultiShardLookupTimeRangeValueConst() throws Exception {
//MMRTS-113
String query = "PREFIX hb: <http://here/2010/tracked-data-provenance/heartbeat/ns#>\n" +
"PREFIX org.apachepart: <urn:org.apache.mmrts.partition.rdf/08/2011#>\n" +
"SELECT * WHERE\n" +
"{\n" +
"<http://here/2010/tracked-data-provenance/heartbeat/ns#hbuuid2> hb:timestamp ?timestamp.\n" +
// "FILTER(org.apachepart:timeRange(<http://here/2010/tracked-data-provenance/heartbeat/ns#hbuuid2>, hb:timestamp, " + START + " , " + END + " , 'TIMESTAMP'))\n" +
"<http://here/2010/tracked-data-provenance/heartbeat/ns#hbuuid2> hb:count ?count.\n" +
"?system hb:heartbeat <http://here/2010/tracked-data-provenance/heartbeat/ns#hbuuid2>.\n" +
"}";
TupleQuery tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
// tupleQuery.evaluate(new PrintTupleHandler());
CountTupleHandler tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(1, tupleHandler.getCount());
}
public void testLinkQuery() throws Exception {
String query = "PREFIX ns:<" + NAMESPACE + ">\n" +
"SELECT * WHERE {\n" +
" <http://here/2010/tracked-data-provenance/ns#uuid1> ns:createdItem ?o .\n" +
" ?o ns:name ?n .\n" +
"}";
TupleQuery tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
// tupleQuery.evaluate(new PrintTupleHandler());
CountTupleHandler tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(1, tupleHandler.getCount());
}
public void testRangeOverDuplicateItems() throws Exception {
String query = "PREFIX ns:<" + NAMESPACE + ">\n" +
"SELECT * WHERE {\n" +
" ?subj <urn:pred> \"obj2\" .\n" +
"}";
TupleQuery tupleQuery = connection.prepareTupleQuery(QueryLanguage.SPARQL, query);
// tupleQuery.evaluate(new PrintTupleHandler());
CountTupleHandler tupleHandler = new CountTupleHandler();
tupleQuery.evaluate(tupleHandler);
assertEquals(2, tupleHandler.getCount());
}
private static class PrintTupleHandler implements TupleQueryResultHandler {
@Override
public void startQueryResult(List<String> strings) throws TupleQueryResultHandlerException {
}
@Override
public void endQueryResult() throws TupleQueryResultHandlerException {
}
@Override
public void handleSolution(BindingSet bindingSet) throws TupleQueryResultHandlerException {
System.out.println(bindingSet);
}
@Override
public void handleBoolean(boolean paramBoolean) throws QueryResultHandlerException {
}
@Override
public void handleLinks(List<String> paramList) throws QueryResultHandlerException {
}
}
private static class CountTupleHandler implements TupleQueryResultHandler {
int count = 0;
@Override
public void startQueryResult(List<String> strings) throws TupleQueryResultHandlerException {
}
@Override
public void endQueryResult() throws TupleQueryResultHandlerException {
}
@Override
public void handleSolution(BindingSet bindingSet) throws TupleQueryResultHandlerException {
count++;
}
public int getCount() {
return count;
}
@Override
public void handleBoolean(boolean paramBoolean) throws QueryResultHandlerException {
}
@Override
public void handleLinks(List<String> paramList) throws QueryResultHandlerException {
}
}
}