http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/80faf06d/sail/rya.sail.impl/src/test/java/mvm/rya/rdftriplestore/evaluation/RdfCloudTripleStoreSelectivityEvaluationStatisticsTest.java ---------------------------------------------------------------------- diff --git a/sail/rya.sail.impl/src/test/java/mvm/rya/rdftriplestore/evaluation/RdfCloudTripleStoreSelectivityEvaluationStatisticsTest.java b/sail/rya.sail.impl/src/test/java/mvm/rya/rdftriplestore/evaluation/RdfCloudTripleStoreSelectivityEvaluationStatisticsTest.java deleted file mode 100644 index 14d532e..0000000 --- a/sail/rya.sail.impl/src/test/java/mvm/rya/rdftriplestore/evaluation/RdfCloudTripleStoreSelectivityEvaluationStatisticsTest.java +++ /dev/null @@ -1,303 +0,0 @@ -package mvm.rya.rdftriplestore.evaluation; - -/* - * #%L - * mvm.rya.rya.sail.impl - * %% - * Copyright (C) 2014 - 2015 Rya - * %% - * Licensed 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. - * #L% - */ - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.concurrent.TimeUnit; - -import mvm.rya.accumulo.AccumuloRdfConfiguration; -import mvm.rya.api.RdfCloudTripleStoreConfiguration; -import mvm.rya.api.layout.TablePrefixLayoutStrategy; -import mvm.rya.api.persist.RdfEvalStatsDAO; -import mvm.rya.joinselect.AccumuloSelectivityEvalDAO; -import mvm.rya.prospector.service.ProspectorServiceEvalStatsDAO; - -import org.apache.accumulo.core.client.AccumuloException; -import org.apache.accumulo.core.client.AccumuloSecurityException; -import org.apache.accumulo.core.client.BatchWriter; -import org.apache.accumulo.core.client.BatchWriterConfig; -import org.apache.accumulo.core.client.Connector; -import org.apache.accumulo.core.client.Instance; -import org.apache.accumulo.core.client.Scanner; -import org.apache.accumulo.core.client.TableExistsException; -import org.apache.accumulo.core.client.TableNotFoundException; -import org.apache.accumulo.core.client.mock.MockInstance; -import org.apache.accumulo.core.client.security.tokens.PasswordToken; -import org.apache.accumulo.core.data.Key; -import org.apache.accumulo.core.data.Mutation; -import org.apache.accumulo.core.data.Range; -import org.apache.accumulo.core.data.Value; -import org.apache.accumulo.core.security.Authorizations; -import org.apache.hadoop.io.Text; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.openrdf.query.MalformedQueryException; -import org.openrdf.query.algebra.TupleExpr; -import org.openrdf.query.parser.ParsedQuery; -import org.openrdf.query.parser.sparql.SPARQLParser; - -public class RdfCloudTripleStoreSelectivityEvaluationStatisticsTest { - - // TODO fix table names!!! - - private static final String DELIM = "\u0000"; - private final byte[] EMPTY_BYTE = new byte[0]; - private final Value EMPTY_VAL = new Value(EMPTY_BYTE); - - private String q1 = ""// - + "SELECT ?h " // - + "{" // - + " ?h <http://www.w3.org/2000/01/rdf-schema#label> <uri:dog> ."// - + " ?h <uri:barksAt> <uri:cat> ."// - + " ?h <uri:peesOn> <uri:hydrant> . "// - + "}";// - - private Connector conn; - AccumuloRdfConfiguration arc; - BatchWriterConfig config; - Instance mock; - - @Before - public void init() throws AccumuloException, AccumuloSecurityException, TableNotFoundException, TableExistsException { - - mock = new MockInstance("accumulo"); - PasswordToken pToken = new PasswordToken("pass".getBytes()); - conn = mock.getConnector("user", pToken); - - config = new BatchWriterConfig(); - config.setMaxMemory(1000); - config.setMaxLatency(1000, TimeUnit.SECONDS); - config.setMaxWriteThreads(10); - - if (conn.tableOperations().exists("rya_prospects")) { - conn.tableOperations().delete("rya_prospects"); - } - if (conn.tableOperations().exists("rya_selectivity")) { - conn.tableOperations().delete("rya_selectivity"); - } - - arc = new AccumuloRdfConfiguration(); - arc.setTableLayoutStrategy(new TablePrefixLayoutStrategy()); - arc.setMaxRangesForScanner(300); - - } - - @Test - public void testOptimizeQ1() throws Exception { - - RdfEvalStatsDAO<RdfCloudTripleStoreConfiguration> res = new ProspectorServiceEvalStatsDAO(conn, arc); - AccumuloSelectivityEvalDAO accc = new AccumuloSelectivityEvalDAO(); - accc.setConf(arc); - accc.setRdfEvalDAO(res); - accc.setConnector(conn); - accc.init(); - - BatchWriter bw1 = conn.createBatchWriter("rya_prospects", config); - BatchWriter bw2 = conn.createBatchWriter("rya_selectivity", config); - - String s1 = "predicateobject" + DELIM + "http://www.w3.org/2000/01/rdf-schema#label" + DELIM + "uri:dog"; - String s2 = "predicateobject" + DELIM + "uri:barksAt" + DELIM + "uri:cat"; - String s3 = "predicateobject" + DELIM + "uri:peesOn" + DELIM + "uri:hydrant"; - List<Mutation> mList = new ArrayList<Mutation>(); - List<Mutation> mList2 = new ArrayList<Mutation>(); - List<String> sList = Arrays.asList("subjectobject", "subjectpredicate", "subjectsubject", "predicateobject", "predicatepredicate", - "predicatesubject"); - Mutation m1, m2, m3, m4; - - m1 = new Mutation(s1 + DELIM + "1"); - m1.put(new Text("count"), new Text(""), new Value("1".getBytes())); - m2 = new Mutation(s2 + DELIM + "2"); - m2.put(new Text("count"), new Text(""), new Value("2".getBytes())); - m3 = new Mutation(s3 + DELIM + "3"); - m3.put(new Text("count"), new Text(""), new Value("3".getBytes())); - mList.add(m1); - mList.add(m2); - mList.add(m3); - - bw1.addMutations(mList); - bw1.close(); - -// Scanner scan = conn.createScanner("rya_prospects", new Authorizations()); -// scan.setRange(new Range()); - -// for (Map.Entry<Key, Value> entry : scan) { -// System.out.println("Key row string is " + entry.getKey().getRow().toString()); -// System.out.println("Key is " + entry.getKey()); -// System.out.println("Value is " + (new String(entry.getValue().get()))); -// } - - m1 = new Mutation(s1); - m2 = new Mutation(s2); - m3 = new Mutation(s3); - m4 = new Mutation(new Text("subjectpredicateobject" + DELIM + "FullTableCardinality")); - m4.put(new Text("FullTableCardinality"), new Text("100"), EMPTY_VAL); - int i = 2; - int j = 3; - int k = 4; - Long count1; - Long count2; - Long count3; - - for (String s : sList) { - count1 = (long) i; - count2 = (long) j; - count3 = (long) k; - m1.put(new Text(s), new Text(count1.toString()), EMPTY_VAL); - m2.put(new Text(s), new Text(count2.toString()), EMPTY_VAL); - m3.put(new Text(s), new Text(count3.toString()), EMPTY_VAL); - i = 2 * i; - j = 2 * j; - k = 2 * k; - } - mList2.add(m1); - mList2.add(m2); - mList2.add(m3); - mList2.add(m4); - bw2.addMutations(mList2); - bw2.close(); - -// scan = conn.createScanner("rya_selectivity", new Authorizations()); -// scan.setRange(new Range()); - -// for (Map.Entry<Key, Value> entry : scan) { -// System.out.println("Key row string is " + entry.getKey().getRow().toString()); -// System.out.println("Key is " + entry.getKey()); -// System.out.println("Value is " + (new String(entry.getKey().getColumnQualifier().toString()))); -// -// } - - TupleExpr te = getTupleExpr(q1); - System.out.println(te); - - RdfCloudTripleStoreSelectivityEvaluationStatistics ars = new RdfCloudTripleStoreSelectivityEvaluationStatistics(arc, res, accc); - double card = ars.getCardinality(te); - - Assert.assertEquals(6.3136, card, .0001); - - } - - @Test - public void testOptimizeQ1ZeroCard() throws Exception { - - RdfEvalStatsDAO<RdfCloudTripleStoreConfiguration> res = new ProspectorServiceEvalStatsDAO(conn, arc); - AccumuloSelectivityEvalDAO accc = new AccumuloSelectivityEvalDAO(); - accc.setConf(arc); - accc.setConnector(conn); - accc.setRdfEvalDAO(res); - accc.init(); - - BatchWriter bw1 = conn.createBatchWriter("rya_prospects", config); - BatchWriter bw2 = conn.createBatchWriter("rya_selectivity", config); - - String s1 = "predicateobject" + DELIM + "http://www.w3.org/2000/01/rdf-schema#label" + DELIM + "uri:dog"; - String s2 = "predicateobject" + DELIM + "uri:barksAt" + DELIM + "uri:cat"; - String s3 = "predicateobject" + DELIM + "uri:peesOn" + DELIM + "uri:hydrant"; - List<Mutation> mList = new ArrayList<Mutation>(); - List<Mutation> mList2 = new ArrayList<Mutation>(); - List<String> sList = Arrays.asList("subjectobject", "subjectpredicate", "subjectsubject", "predicateobject", "predicatepredicate", - "predicatesubject"); - Mutation m1, m2, m3, m4; - - m1 = new Mutation(s1 + DELIM + "1"); - m1.put(new Text("count"), new Text(""), new Value("1".getBytes())); - m2 = new Mutation(s2 + DELIM + "2"); - m2.put(new Text("count"), new Text(""), new Value("2".getBytes())); - // m3 = new Mutation(s3 + DELIM + "3"); - // m3.put(new Text("count"), new Text(""), new Value("3".getBytes())); - mList.add(m1); - mList.add(m2); - // mList.add(m3); - - bw1.addMutations(mList); - bw1.close(); - -// Scanner scan = conn.createScanner("rya_prospects", new Authorizations()); -// scan.setRange(new Range()); - -// for (Map.Entry<Key, Value> entry : scan) { -// System.out.println("Key row string is " + entry.getKey().getRow().toString()); -// System.out.println("Key is " + entry.getKey()); -// System.out.println("Value is " + (new String(entry.getValue().get()))); -// } - - m1 = new Mutation(s1); - m2 = new Mutation(s2); - m3 = new Mutation(s3); - m4 = new Mutation(new Text("subjectpredicateobject" + DELIM + "FullTableCardinality")); - m4.put(new Text("FullTableCardinality"), new Text("100"), EMPTY_VAL); - int i = 2; - int j = 3; - int k = 4; - Long count1; - Long count2; - Long count3; - - for (String s : sList) { - count1 = (long) i; - count2 = (long) j; - count3 = (long) k; - m1.put(new Text(s), new Text(count1.toString()), EMPTY_VAL); - m2.put(new Text(s), new Text(count2.toString()), EMPTY_VAL); - m3.put(new Text(s), new Text(count3.toString()), EMPTY_VAL); - i = 2 * i; - j = 2 * j; - k = 2 * k; - } - mList2.add(m1); - mList2.add(m2); - mList2.add(m3); - mList2.add(m4); - bw2.addMutations(mList2); - bw2.close(); - -// scan = conn.createScanner("rya_selectivity", new Authorizations()); -// scan.setRange(new Range()); - -// for (Map.Entry<Key, Value> entry : scan) { -// System.out.println("Key row string is " + entry.getKey().getRow().toString()); -// System.out.println("Key is " + entry.getKey()); -// System.out.println("Value is " + (new String(entry.getKey().getColumnQualifier().toString()))); -// -// } - - TupleExpr te = getTupleExpr(q1); - System.out.println(te); - - RdfCloudTripleStoreSelectivityEvaluationStatistics ars = new RdfCloudTripleStoreSelectivityEvaluationStatistics(arc, res, accc); - double card = ars.getCardinality(te); - - Assert.assertEquals(4.04, card, .0001); - - } - - private TupleExpr getTupleExpr(String query) throws MalformedQueryException { - - SPARQLParser sp = new SPARQLParser(); - ParsedQuery pq = sp.parseQuery(query, null); - - return pq.getTupleExpr(); - } - -}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/80faf06d/sail/rya.sail.impl/src/test/java/mvm/rya/triplestore/inference/SameAsTest.java ---------------------------------------------------------------------- diff --git a/sail/rya.sail.impl/src/test/java/mvm/rya/triplestore/inference/SameAsTest.java b/sail/rya.sail.impl/src/test/java/mvm/rya/triplestore/inference/SameAsTest.java deleted file mode 100644 index 66ba33a..0000000 --- a/sail/rya.sail.impl/src/test/java/mvm/rya/triplestore/inference/SameAsTest.java +++ /dev/null @@ -1,114 +0,0 @@ -package mvm.rya.triplestore.inference; - -/* - * #%L - * mvm.rya.rya.sail.impl - * %% - * Copyright (C) 2014 Rya - * %% - * Licensed 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. - * #L% - */ - -import info.aduna.iteration.Iterations; -import junit.framework.TestCase; -import mvm.rya.accumulo.AccumuloRdfConfiguration; -import mvm.rya.accumulo.AccumuloRyaDAO; -import mvm.rya.api.RdfCloudTripleStoreConstants; -import mvm.rya.api.resolver.RdfToRyaConversions; -import mvm.rya.rdftriplestore.RdfCloudTripleStore; -import mvm.rya.rdftriplestore.inference.InferenceEngine; - -import org.apache.accumulo.core.Constants; -import org.apache.accumulo.core.client.Connector; -import org.apache.accumulo.core.client.admin.SecurityOperations; -import org.apache.accumulo.core.client.mock.MockInstance; -import org.apache.accumulo.core.security.Authorizations; -import org.apache.accumulo.core.security.TablePermission; -import org.junit.Test; -import org.openrdf.model.Resource; -import org.openrdf.model.Statement; -import org.openrdf.model.URI; -import org.openrdf.model.ValueFactory; -import org.openrdf.model.impl.StatementImpl; -import org.openrdf.model.impl.ValueFactoryImpl; - -public class SameAsTest extends TestCase { - private String user = "user"; - private String pwd = "pwd"; - private String instance = "myinstance"; - private String tablePrefix = "t_"; - private Authorizations auths = Constants.NO_AUTHS; - private Connector connector; - private AccumuloRyaDAO ryaDAO; - private ValueFactory vf = new ValueFactoryImpl(); - private String namespace = "urn:test#"; - private AccumuloRdfConfiguration conf; - - @Override - public void setUp() throws Exception { - super.setUp(); - connector = new MockInstance(instance).getConnector(user, pwd.getBytes()); - connector.tableOperations().create(tablePrefix + RdfCloudTripleStoreConstants.TBL_SPO_SUFFIX); - connector.tableOperations().create(tablePrefix + RdfCloudTripleStoreConstants.TBL_PO_SUFFIX); - connector.tableOperations().create(tablePrefix + RdfCloudTripleStoreConstants.TBL_OSP_SUFFIX); - connector.tableOperations().create(tablePrefix + RdfCloudTripleStoreConstants.TBL_NS_SUFFIX); - SecurityOperations secOps = connector.securityOperations(); - secOps.createUser(user, pwd.getBytes(), auths); - secOps.grantTablePermission(user, tablePrefix + RdfCloudTripleStoreConstants.TBL_SPO_SUFFIX, TablePermission.READ); - secOps.grantTablePermission(user, tablePrefix + RdfCloudTripleStoreConstants.TBL_PO_SUFFIX, TablePermission.READ); - secOps.grantTablePermission(user, tablePrefix + RdfCloudTripleStoreConstants.TBL_OSP_SUFFIX, TablePermission.READ); - secOps.grantTablePermission(user, tablePrefix + RdfCloudTripleStoreConstants.TBL_NS_SUFFIX, TablePermission.READ); - - conf = new AccumuloRdfConfiguration(); - ryaDAO = new AccumuloRyaDAO(); - ryaDAO.setConnector(connector); - conf.setTablePrefix(tablePrefix); - ryaDAO.setConf(conf); - ryaDAO.init(); - } - - @Override - public void tearDown() throws Exception { - super.tearDown(); - connector.tableOperations().delete(tablePrefix + RdfCloudTripleStoreConstants.TBL_SPO_SUFFIX); - connector.tableOperations().delete(tablePrefix + RdfCloudTripleStoreConstants.TBL_PO_SUFFIX); - connector.tableOperations().delete(tablePrefix + RdfCloudTripleStoreConstants.TBL_OSP_SUFFIX); - connector.tableOperations().delete(tablePrefix + RdfCloudTripleStoreConstants.TBL_NS_SUFFIX); - } - - @Test - //This isn't a good test. It's simply a cut-and-paste from a test that was failing in a different package in the SameAsVisitor. - public void testGraphConfiguration() throws Exception { - URI a = vf.createURI(namespace, "a"); - Statement statement = new StatementImpl(a, vf.createURI(namespace, "p"), vf.createLiteral("l")); - Statement statement2 = new StatementImpl(a, vf.createURI(namespace, "p2"), vf.createLiteral("l")); - ryaDAO.add(RdfToRyaConversions.convertStatement(statement)); - ryaDAO.add(RdfToRyaConversions.convertStatement(statement2)); - ryaDAO.add(RdfToRyaConversions.convertStatement(new StatementImpl(vf.createURI(namespace, "b"), vf.createURI(namespace, "p"), vf.createLiteral("l")))); - ryaDAO.add(RdfToRyaConversions.convertStatement(new StatementImpl(vf.createURI(namespace, "c"), vf.createURI(namespace, "n"), vf.createLiteral("l")))); - - // build a connection - RdfCloudTripleStore store = new RdfCloudTripleStore(); - store.setConf(conf); - store.setRyaDAO(ryaDAO); - - InferenceEngine inferenceEngine = new InferenceEngine(); - inferenceEngine.setRyaDAO(ryaDAO); - store.setInferenceEngine(inferenceEngine); - - store.initialize(); - - System.out.println(Iterations.asList(store.getConnection().getStatements(a, vf.createURI(namespace, "p"), vf.createLiteral("l"), false, new Resource[0])).size()); - } -} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/80faf06d/sail/rya.sail.impl/src/test/resources/cdrdf.xml ---------------------------------------------------------------------- diff --git a/sail/rya.sail.impl/src/test/resources/cdrdf.xml b/sail/rya.sail.impl/src/test/resources/cdrdf.xml deleted file mode 100644 index 506b017..0000000 --- a/sail/rya.sail.impl/src/test/resources/cdrdf.xml +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0"?> -<!-- - #%L - mvm.rya.rya.sail.impl - %% - Copyright (C) 2014 Rya - %% - Licensed 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. - #L% - --> - -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:cd="http://www.recshop.fake/cd#"> - - <rdf:Description rdf:about="http://www.recshop.fake/cd/Empire_Burlesque"> - <cd:artist>Bob Dylan</cd:artist> - <cd:country>USA</cd:country> - <cd:company>Columbia</cd:company> - <cd:price>10.90</cd:price> - <cd:year>1985</cd:year> - </rdf:Description> - - <rdf:Description rdf:about="http://www.recshop.fake/cd/Hide_your_fingers"> - <cd:artist>Bonnie Tyler</cd:artist> - <cd:country>UK</cd:country> - <cd:company>CBS Records</cd:company> - <cd:price>9.90</cd:price> - <cd:year>1993</cd:year> - </rdf:Description> -</rdf:RDF> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/80faf06d/sail/rya.sail.impl/src/test/resources/namedgraphs.trig ---------------------------------------------------------------------- diff --git a/sail/rya.sail.impl/src/test/resources/namedgraphs.trig b/sail/rya.sail.impl/src/test/resources/namedgraphs.trig deleted file mode 100644 index 748d276..0000000 --- a/sail/rya.sail.impl/src/test/resources/namedgraphs.trig +++ /dev/null @@ -1,37 +0,0 @@ -@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . -@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . -@prefix swp: <http://www.w3.org/2004/03/trix/swp-1/> . -@prefix dc: <http://purl.org/dc/elements/1.1/> . -@prefix ex: <http://www.example.org/vocabulary#> . -@prefix : <http://www.example.org/exampleDocument#> . -:G1 { :Monica ex:name "Monica Murphy" . - :Monica ex:homepage <http://www.monicamurphy.org> . - :Monica ex:email <mailto:mon...@monicamurphy.org> . - :Monica ex:one <mailto:mon...@monicamurphy.org> . - :Monica ex:two <mailto:mon...@monicamurphy.org> . - :Monica ex:three <mailto:mon...@monicamurphy.org> . - :Monica ex:four <mailto:mon...@monicamurphy.org> . - :Monica ex:five <mailto:mon...@monicamurphy.org> . - :Monica ex:six <mailto:mon...@monicamurphy.org> . - :Monica ex:seven <mailto:mon...@monicamurphy.org> . - :Monica ex:eight <mailto:mon...@monicamurphy.org> . - :Monica ex:nine <mailto:mon...@monicamurphy.org> . - :Monica ex:ten <mailto:mon...@monicamurphy.org> . - :Monica ex:hasSkill ex:Management } - -:G2 { :Monica rdf:type ex:Person . - :Monica ex:hasSkill ex:Programming } - -:G4 { :Phobe ex:name "Phobe Buffet" } - -:G3 { :G1 swp:assertedBy _:w1 . - _:w1 swp:authority :Chris . - _:w1 dc:date "2003-10-02"^^xsd:date . - :G2 swp:quotedBy _:w2 . - :G4 swp:assertedBy _:w2 . - _:w2 dc:date "2003-09-03"^^xsd:date . - _:w2 swp:authority :Tom . - :Chris rdf:type ex:Person . - :Chris ex:email <mailto:ch...@bizer.de>. - :Tom rdf:type ex:Person . - :Tom ex:email <mailto:t...@bizer.de>} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/80faf06d/sail/rya.sail.impl/src/test/resources/ntriples ---------------------------------------------------------------------- diff --git a/sail/rya.sail.impl/src/test/resources/ntriples b/sail/rya.sail.impl/src/test/resources/ntriples deleted file mode 100644 index edf1190..0000000 --- a/sail/rya.sail.impl/src/test/resources/ntriples +++ /dev/null @@ -1 +0,0 @@ -<urn:lubm:rdfts#GraduateStudent> <http://www.w3.org/2000/01/rdf-schema#subPropertyOf> <urn:lubm:rdfts#Student> . \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/80faf06d/sail/rya.sail.impl/src/test/resources/reification.xml ---------------------------------------------------------------------- diff --git a/sail/rya.sail.impl/src/test/resources/reification.xml b/sail/rya.sail.impl/src/test/resources/reification.xml deleted file mode 100644 index 414800f..0000000 --- a/sail/rya.sail.impl/src/test/resources/reification.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0"?> -<!-- - #%L - mvm.rya.rya.sail.impl - %% - Copyright (C) 2014 Rya - %% - Licensed 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. - #L% - --> - -<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:cd="http://www.recshop.fake/cd#" - xmlns:mm="http://mvm.com/owl/2010/10/mm.owl#"> - - <rdf:Description rdf:nodeID="A4"> - <rdf:subject - rdf:resource="http://mvm.com/owl/2010/10/mm.owl#urn:mm:mvm:root/cimv2:Linux_Processor:0:CIM_ComputerSystem:nimbus02.bullpen.net"/> - <rdf:predicate rdf:resource="http://mvm.com/owl/2010/10/mm.owl#loadPercentage"/> - <rdf:object rdf:datatype="http://www.w3.org/2001/XMLSchema#int">1</rdf:object> - <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Statement"/> - <mm:reportedAt rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2011-01-07T21:29:45.545Z</mm:reportedAt> - </rdf:Description> - -</rdf:RDF> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/80faf06d/sail/rya.sail.impl/src/test/resources/univ-bench.owl ---------------------------------------------------------------------- diff --git a/sail/rya.sail.impl/src/test/resources/univ-bench.owl b/sail/rya.sail.impl/src/test/resources/univ-bench.owl deleted file mode 100644 index 691a330..0000000 --- a/sail/rya.sail.impl/src/test/resources/univ-bench.owl +++ /dev/null @@ -1,466 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<rdf:RDF - xmlns="urn:lubm:rdfts#" - xml:base="urn:lubm:rdfts#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" - xmlns:owl="http://www.w3.org/2002/07/owl#" -> - -<owl:Class rdf:ID="AdministrativeStaff"> - <rdfs:label>administrative staff worker</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Employee" /> -</owl:Class> - -<owl:Class rdf:ID="Article"> - <rdfs:label>article</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Publication" /> -</owl:Class> - -<owl:Class rdf:ID="AssistantProfessor"> - <rdfs:label>assistant professor</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Professor" /> -</owl:Class> - -<owl:Class rdf:ID="AssociateProfessor"> - <rdfs:label>associate professor</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Professor" /> -</owl:Class> - -<owl:Class rdf:ID="Book"> - <rdfs:label>book</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Publication" /> -</owl:Class> - -<owl:Class rdf:ID="Chair"> - <rdfs:label>chair</rdfs:label> - <owl:intersectionOf rdf:parseType="Collection"> - <owl:Class rdf:about="#Person" /> - <owl:Restriction> - <owl:onProperty rdf:resource="#headOf" /> - <owl:someValuesFrom> - <owl:Class rdf:about="#Department" /> - </owl:someValuesFrom> - </owl:Restriction> - </owl:intersectionOf> - <rdfs:subPropertyOf rdf:resource="#Professor" /> -</owl:Class> - -<owl:Class rdf:ID="ClericalStaff"> - <rdfs:label>clerical staff worker</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#AdministrativeStaff" /> -</owl:Class> - -<owl:Class rdf:ID="College"> - <rdfs:label>school</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Organization" /> -</owl:Class> - -<owl:Class rdf:ID="ConferencePaper"> - <rdfs:label>conference paper</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Article" /> -</owl:Class> - -<owl:Class rdf:ID="Course"> - <rdfs:label>teaching course</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Work" /> -</owl:Class> - -<owl:Class rdf:ID="Dean"> - <rdfs:label>dean</rdfs:label> - <owl:intersectionOf rdf:parseType="Collection"> - <owl:Class rdf:about="#Person" /> - <owl:Restriction> - <owl:onProperty rdf:resource="#headOf" /> - <owl:someValuesFrom> - <owl:Class rdf:about="#College" /> - </owl:someValuesFrom> - </owl:Restriction> - </owl:intersectionOf> - <rdfs:subPropertyOf rdf:resource="#Professor" /> -</owl:Class> - -<owl:Class rdf:ID="Department"> - <rdfs:label>university department</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Organization" /> -</owl:Class> - -<owl:Class rdf:ID="Director"> - <rdfs:label>director</rdfs:label> - <owl:intersectionOf rdf:parseType="Collection"> - <owl:Class rdf:about="#Person" /> - <owl:Restriction> - <owl:onProperty rdf:resource="#headOf" /> - <owl:someValuesFrom> - <owl:Class rdf:about="#Program" /> - </owl:someValuesFrom> - </owl:Restriction> - </owl:intersectionOf> -</owl:Class> - -<owl:Class rdf:ID="Employee"> - <rdfs:label>Employee</rdfs:label> - <owl:intersectionOf rdf:parseType="Collection"> - <owl:Class rdf:about="#Person" /> - <owl:Restriction> - <owl:onProperty rdf:resource="#worksFor" /> - <owl:someValuesFrom> - <owl:Class rdf:about="#Organization" /> - </owl:someValuesFrom> - </owl:Restriction> - </owl:intersectionOf> -</owl:Class> - -<owl:Class rdf:ID="Faculty"> - <rdfs:label>faculty member</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Employee" /> -</owl:Class> - -<owl:Class rdf:ID="FullProfessor"> - <rdfs:label>full professor</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Professor" /> -</owl:Class> - -<owl:Class rdf:ID="GraduateCourse"> - <rdfs:label>Graduate Level Courses</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Course" /> -</owl:Class> - -<owl:Class rdf:ID="GraduateStudent"> - <rdfs:label>graduate student</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Person" /> - <rdfs:subPropertyOf> - <owl:Restriction> - <owl:onProperty rdf:resource="#takesCourse" /> - <owl:someValuesFrom> - <owl:Class rdf:about="#GraduateCourse" /> - </owl:someValuesFrom> - </owl:Restriction> - </rdfs:subPropertyOf> -</owl:Class> - -<owl:Class rdf:ID="Institute"> - <rdfs:label>institute</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Organization" /> -</owl:Class> - -<owl:Class rdf:ID="JournalArticle"> - <rdfs:label>journal article</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Article" /> -</owl:Class> - -<owl:Class rdf:ID="Lecturer"> - <rdfs:label>lecturer</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Faculty" /> -</owl:Class> - -<owl:Class rdf:ID="Manual"> - <rdfs:label>manual</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Publication" /> -</owl:Class> - -<owl:Class rdf:ID="Organization"> - <rdfs:label>organization</rdfs:label> -</owl:Class> - -<owl:Class rdf:ID="Person"> - <rdfs:label>person</rdfs:label> -</owl:Class> - -<owl:Class rdf:ID="PostDoc"> - <rdfs:label>post doctorate</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Faculty" /> -</owl:Class> - -<owl:Class rdf:ID="Professor"> - <rdfs:label>professor</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Faculty" /> -</owl:Class> - -<owl:Class rdf:ID="Program"> - <rdfs:label>program</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Organization" /> -</owl:Class> - -<owl:Class rdf:ID="Publication"> - <rdfs:label>publication</rdfs:label> -</owl:Class> - -<owl:Class rdf:ID="Research"> - <rdfs:label>research work</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Work" /> -</owl:Class> - -<owl:Class rdf:ID="ResearchAssistant"> - <rdfs:label>university research assistant</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Student" /> - <rdfs:subPropertyOf> - <owl:Restriction> - <owl:onProperty rdf:resource="#worksFor" /> - <owl:someValuesFrom> - <owl:Class rdf:about="#ResearchGroup" /> - </owl:someValuesFrom> - </owl:Restriction> - </rdfs:subPropertyOf> -</owl:Class> - -<owl:Class rdf:ID="ResearchGroup"> - <rdfs:label>research group</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Organization" /> -</owl:Class> - -<owl:Class rdf:ID="Schedule"> - <rdfs:label>schedule</rdfs:label> -</owl:Class> - -<owl:Class rdf:ID="Software"> - <rdfs:label>software program</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Publication" /> -</owl:Class> - -<owl:Class rdf:ID="Specification"> - <rdfs:label>published specification</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Publication" /> -</owl:Class> - -<owl:Class rdf:ID="Student"> - <rdfs:label>student</rdfs:label> - <owl:intersectionOf rdf:parseType="Collection"> - <owl:Class rdf:about="#Person" /> - <owl:Restriction> - <owl:onProperty rdf:resource="#takesCourse" /> - <owl:someValuesFrom> - <owl:Class rdf:about="#Course" /> - </owl:someValuesFrom> - </owl:Restriction> - </owl:intersectionOf> -</owl:Class> - -<owl:Class rdf:ID="SystemsStaff"> - <rdfs:label>systems staff worker</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#AdministrativeStaff" /> -</owl:Class> - -<owl:Class rdf:ID="TeachingAssistant"> - <rdfs:label>university teaching assistant</rdfs:label> - <owl:intersectionOf rdf:parseType="Collection"> - <owl:Class rdf:about="#Person" /> - <owl:Restriction> - <owl:onProperty rdf:resource="#teachingAssistantOf" /> - <owl:someValuesFrom> - <owl:Class rdf:about="#Course" /> - </owl:someValuesFrom> - </owl:Restriction> - </owl:intersectionOf> -</owl:Class> - -<owl:Class rdf:ID="TechnicalReport"> - <rdfs:label>technical report</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Article" /> -</owl:Class> - -<owl:Class rdf:ID="UndergraduateStudent"> - <rdfs:label>undergraduate student</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Student" /> -</owl:Class> - -<owl:Class rdf:ID="University"> - <rdfs:label>university</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Organization" /> -</owl:Class> - -<owl:Class rdf:ID="UnofficialPublication"> - <rdfs:label>unnoficial publication</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Publication" /> -</owl:Class> - -<owl:Class rdf:ID="VisitingProfessor"> - <rdfs:label>visiting professor</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#Professor" /> -</owl:Class> - -<owl:Class rdf:ID="Work"> - <rdfs:label>Work</rdfs:label> -</owl:Class> - -<owl:ObjectProperty rdf:ID="advisor"> - <rdfs:label>is being advised by</rdfs:label> - <rdfs:domain rdf:resource="#Person" /> - <rdfs:range rdf:resource="#Professor" /> -</owl:ObjectProperty> - -<owl:ObjectProperty rdf:ID="affiliatedOrganizationOf"> - <rdfs:label>is affiliated with</rdfs:label> - <rdfs:domain rdf:resource="#Organization" /> - <rdfs:range rdf:resource="#Organization" /> -</owl:ObjectProperty> - -<owl:ObjectProperty rdf:ID="affiliateOf"> - <rdfs:label>is affiliated with</rdfs:label> - <rdfs:domain rdf:resource="#Organization" /> - <rdfs:range rdf:resource="#Person" /> -</owl:ObjectProperty> - -<owl:DatatypeProperty rdf:ID="age"> - <rdfs:label>is age</rdfs:label> - <rdfs:domain rdf:resource="#Person" /> -</owl:DatatypeProperty> - -<owl:ObjectProperty rdf:ID="degreeFrom"> - <rdfs:label>has a degree from</rdfs:label> - <rdfs:domain rdf:resource="#Person" /> - <rdfs:range rdf:resource="#University" /> - <owl:inverseOf rdf:resource="#hasAlumnus"/> -</owl:ObjectProperty> - -<owl:ObjectProperty rdf:ID="doctoralDegreeFrom"> - <rdfs:label>has a doctoral degree from</rdfs:label> - <rdfs:domain rdf:resource="#Person" /> - <rdfs:range rdf:resource="#University" /> - <rdfs:subPropertyOf rdf:resource="#degreeFrom" /> -</owl:ObjectProperty> - -<owl:DatatypeProperty rdf:ID="emailAddress"> - <rdfs:label>can be reached at</rdfs:label> - <rdfs:domain rdf:resource="#Person" /> -</owl:DatatypeProperty> - -<owl:ObjectProperty rdf:ID="hasAlumnus"> - <rdfs:label>has as an alumnus</rdfs:label> - <rdfs:domain rdf:resource="#University" /> - <rdfs:range rdf:resource="#Person" /> - <owl:inverseOf rdf:resource="#degreeFrom"/> -</owl:ObjectProperty> - -<owl:ObjectProperty rdf:ID="headOf"> - <rdfs:label>is the head of</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#worksFor"/> -</owl:ObjectProperty> - -<owl:ObjectProperty rdf:ID="listedCourse"> - <rdfs:label>lists as a course</rdfs:label> - <rdfs:domain rdf:resource="#Schedule" /> - <rdfs:range rdf:resource="#Course" /> -</owl:ObjectProperty> - -<owl:ObjectProperty rdf:ID="mastersDegreeFrom"> - <rdfs:label>has a masters degree from</rdfs:label> - <rdfs:domain rdf:resource="#Person" /> - <rdfs:range rdf:resource="#University" /> - <rdfs:subPropertyOf rdf:resource="#degreeFrom"/> -</owl:ObjectProperty> - -<owl:ObjectProperty rdf:ID="member"> - <rdfs:label>has as a member</rdfs:label> - <rdfs:domain rdf:resource="#Organization" /> - <rdfs:range rdf:resource="#Person" /> -</owl:ObjectProperty> - -<owl:ObjectProperty rdf:ID="memberOf"> -<rdfs:label>member of</rdfs:label> -<owl:inverseOf rdf:resource="#member" /> -</owl:ObjectProperty> - -<owl:DatatypeProperty rdf:ID="name"> -<rdfs:label>name</rdfs:label> -</owl:DatatypeProperty> - -<owl:DatatypeProperty rdf:ID="officeNumber"> - <rdfs:label>office room No.</rdfs:label> -</owl:DatatypeProperty> - -<owl:ObjectProperty rdf:ID="orgPublication"> - <rdfs:label>publishes</rdfs:label> - <rdfs:domain rdf:resource="#Organization" /> - <rdfs:range rdf:resource="#Publication" /> -</owl:ObjectProperty> - -<owl:ObjectProperty rdf:ID="publicationAuthor"> - <rdfs:label>was written by</rdfs:label> - <rdfs:domain rdf:resource="#Publication" /> - <rdfs:range rdf:resource="#Person" /> -</owl:ObjectProperty> - -<owl:ObjectProperty rdf:ID="publicationDate"> - <rdfs:label>was written on</rdfs:label> - <rdfs:domain rdf:resource="#Publication" /> -</owl:ObjectProperty> - -<owl:ObjectProperty rdf:ID="publicationResearch"> - <rdfs:label>is about</rdfs:label> - <rdfs:domain rdf:resource="#Publication" /> - <rdfs:range rdf:resource="#Research" /> -</owl:ObjectProperty> - -<owl:DatatypeProperty rdf:ID="researchInterest"> - <rdfs:label>is researching</rdfs:label> -</owl:DatatypeProperty> - -<owl:ObjectProperty rdf:ID="researchProject"> - <rdfs:label>has as a research project</rdfs:label> - <rdfs:domain rdf:resource="#ResearchGroup" /> - <rdfs:range rdf:resource="#Research" /> -</owl:ObjectProperty> - -<owl:ObjectProperty rdf:ID="softwareDocumentation"> - <rdfs:label>is documented in</rdfs:label> - <rdfs:domain rdf:resource="#Software" /> - <rdfs:range rdf:resource="#Publication" /> -</owl:ObjectProperty> - -<owl:ObjectProperty rdf:ID="softwareVersion"> - <rdfs:label>is version</rdfs:label> - <rdfs:domain rdf:resource="#Software" /> -</owl:ObjectProperty> - -<owl:TransitiveProperty rdf:ID="subOrganizationOf"> - <rdfs:label>is part of</rdfs:label> - <rdfs:domain rdf:resource="#Organization" /> - <rdfs:range rdf:resource="#Organization" /> -</owl:TransitiveProperty> - -<owl:ObjectProperty rdf:ID="takesCourse"> - <rdfs:label>is taking</rdfs:label> -</owl:ObjectProperty> - -<owl:ObjectProperty rdf:ID="teacherOf"> - <rdfs:label>teaches</rdfs:label> - <rdfs:domain rdf:resource="#Faculty" /> - <rdfs:range rdf:resource="#Course" /> -</owl:ObjectProperty> - -<owl:ObjectProperty rdf:ID="teachingAssistantOf"> - <rdfs:label>is a teaching assistant for</rdfs:label> - <rdfs:domain rdf:resource="#TeachingAssistant" /> - <rdfs:range rdf:resource="#Course" /> -</owl:ObjectProperty> - -<owl:DatatypeProperty rdf:ID="telephone"> - <rdfs:label>telephone number</rdfs:label> - <rdfs:domain rdf:resource="#Person" /> -</owl:DatatypeProperty> - -<owl:ObjectProperty rdf:ID="tenured"> - <rdfs:label>is tenured:</rdfs:label> - <rdfs:domain rdf:resource="#Professor" /> -</owl:ObjectProperty> - -<owl:DatatypeProperty rdf:ID="title"> - <rdfs:label>title</rdfs:label> - <rdfs:domain rdf:resource="#Person" /> -</owl:DatatypeProperty> - -<owl:ObjectProperty rdf:ID="undergraduateDegreeFrom"> - <rdfs:label>has an undergraduate degree from</rdfs:label> - <rdfs:domain rdf:resource="#Person" /> - <rdfs:range rdf:resource="#University" /> - <rdfs:subPropertyOf rdf:resource="#degreeFrom"/> -</owl:ObjectProperty> - -<owl:ObjectProperty rdf:ID="worksFor"> - <rdfs:label>Works For</rdfs:label> - <rdfs:subPropertyOf rdf:resource="#memberOf" /> -</owl:ObjectProperty> - -</rdf:RDF> - http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/80faf06d/sail/src/main/java/mvm/rya/rdftriplestore/RdfCloudTripleStore.java ---------------------------------------------------------------------- diff --git a/sail/src/main/java/mvm/rya/rdftriplestore/RdfCloudTripleStore.java b/sail/src/main/java/mvm/rya/rdftriplestore/RdfCloudTripleStore.java new file mode 100644 index 0000000..4fcc726 --- /dev/null +++ b/sail/src/main/java/mvm/rya/rdftriplestore/RdfCloudTripleStore.java @@ -0,0 +1,179 @@ +package mvm.rya.rdftriplestore; + +/* + * 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. + */ + + + +import mvm.rya.api.RdfCloudTripleStoreConfiguration; +import mvm.rya.api.persist.RdfEvalStatsDAO; +import mvm.rya.api.persist.RyaDAO; +import mvm.rya.api.persist.RyaDAOException; +import mvm.rya.api.persist.joinselect.SelectivityEvalDAO; +import mvm.rya.rdftriplestore.inference.InferenceEngine; +import mvm.rya.rdftriplestore.namespace.NamespaceManager; +import mvm.rya.rdftriplestore.provenance.ProvenanceCollector; + +import org.openrdf.model.ValueFactory; +import org.openrdf.model.impl.ValueFactoryImpl; +import org.openrdf.sail.SailConnection; +import org.openrdf.sail.SailException; +import org.openrdf.sail.helpers.SailBase; + +import static com.google.common.base.Preconditions.checkNotNull; + +public class RdfCloudTripleStore extends SailBase { + + private RdfCloudTripleStoreConfiguration conf; + + protected RyaDAO ryaDAO; + protected InferenceEngine inferenceEngine; + protected RdfEvalStatsDAO rdfEvalStatsDAO; + protected SelectivityEvalDAO selectEvalDAO; + private NamespaceManager namespaceManager; + protected ProvenanceCollector provenanceCollector; + + private ValueFactory vf = new ValueFactoryImpl(); + + @Override + protected SailConnection getConnectionInternal() throws SailException { + return new RdfCloudTripleStoreConnection(this, conf, vf); + } + + @Override + protected void initializeInternal() throws SailException { + checkNotNull(ryaDAO); + + if (this.conf == null) { + this.conf = ryaDAO.getConf(); + } + + checkNotNull(this.conf); + + try { + if (!ryaDAO.isInitialized()) { + ryaDAO.setConf(this.conf); + ryaDAO.init(); + } + } catch (RyaDAOException e) { + throw new SailException(e); + } + + if (rdfEvalStatsDAO != null && !rdfEvalStatsDAO.isInitialized()) { + rdfEvalStatsDAO.setConf(this.conf); + rdfEvalStatsDAO.init(); + } + + //TODO: Support inferencing with ryadao +// if (inferenceEngine != null && !inferenceEngine.isInitialized()) { +// inferenceEngine.setConf(this.conf); +// inferenceEngine.setRyaDAO(ryaDAO); +// inferenceEngine.init(); +// } + + if (namespaceManager == null) { + this.namespaceManager = new NamespaceManager(ryaDAO, this.conf); + } + } + + @Override + protected void shutDownInternal() throws SailException { + try { + if (namespaceManager != null) { + namespaceManager.shutdown(); + } + if (inferenceEngine != null) { + inferenceEngine.destroy(); + } + if (rdfEvalStatsDAO != null) { + rdfEvalStatsDAO.destroy(); + } + ryaDAO.destroy(); + } catch (Exception e) { + throw new SailException(e); + } + } + + @Override + public ValueFactory getValueFactory() { + return vf; + } + + @Override + public boolean isWritable() throws SailException { + return true; + } + + public RdfCloudTripleStoreConfiguration getConf() { + return conf; + } + + public void setConf(RdfCloudTripleStoreConfiguration conf) { + this.conf = conf; + } + + public RdfEvalStatsDAO getRdfEvalStatsDAO() { + return rdfEvalStatsDAO; + } + + public void setRdfEvalStatsDAO(RdfEvalStatsDAO rdfEvalStatsDAO) { + this.rdfEvalStatsDAO = rdfEvalStatsDAO; + } + + public SelectivityEvalDAO getSelectEvalDAO() { + return selectEvalDAO; + } + + public void setSelectEvalDAO(SelectivityEvalDAO selectEvalDAO) { + this.selectEvalDAO = selectEvalDAO; + } + + public RyaDAO getRyaDAO() { + return ryaDAO; + } + + public void setRyaDAO(RyaDAO ryaDAO) { + this.ryaDAO = ryaDAO; + } + + public InferenceEngine getInferenceEngine() { + return inferenceEngine; + } + + public void setInferenceEngine(InferenceEngine inferenceEngine) { + this.inferenceEngine = inferenceEngine; + } + + public NamespaceManager getNamespaceManager() { + return namespaceManager; + } + + public void setNamespaceManager(NamespaceManager namespaceManager) { + this.namespaceManager = namespaceManager; + } + + public ProvenanceCollector getProvenanceCollector() { + return provenanceCollector; + } + + public void setProvenanceCollector(ProvenanceCollector provenanceCollector) { + this.provenanceCollector = provenanceCollector; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/80faf06d/sail/src/main/java/mvm/rya/rdftriplestore/RdfCloudTripleStoreConnection.java ---------------------------------------------------------------------- diff --git a/sail/src/main/java/mvm/rya/rdftriplestore/RdfCloudTripleStoreConnection.java b/sail/src/main/java/mvm/rya/rdftriplestore/RdfCloudTripleStoreConnection.java new file mode 100644 index 0000000..24ec109 --- /dev/null +++ b/sail/src/main/java/mvm/rya/rdftriplestore/RdfCloudTripleStoreConnection.java @@ -0,0 +1,623 @@ +package mvm.rya.rdftriplestore; + +/* + * 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. + */ + + + +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; +import info.aduna.iteration.CloseableIteration; + +import java.lang.reflect.Constructor; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.NoSuchElementException; + +import mvm.rya.api.RdfCloudTripleStoreConfiguration; +import mvm.rya.api.RdfCloudTripleStoreConstants; +import mvm.rya.api.domain.RyaStatement; +import mvm.rya.api.domain.RyaURI; +import mvm.rya.api.persist.RdfEvalStatsDAO; +import mvm.rya.api.persist.RyaDAO; +import mvm.rya.api.persist.RyaDAOException; +import mvm.rya.api.persist.joinselect.SelectivityEvalDAO; +import mvm.rya.api.persist.utils.RyaDAOHelper; +import mvm.rya.api.resolver.RdfToRyaConversions; +import mvm.rya.rdftriplestore.evaluation.FilterRangeVisitor; +import mvm.rya.rdftriplestore.evaluation.ParallelEvaluationStrategyImpl; +import mvm.rya.rdftriplestore.evaluation.QueryJoinSelectOptimizer; +import mvm.rya.rdftriplestore.evaluation.RdfCloudTripleStoreEvaluationStatistics; +import mvm.rya.rdftriplestore.evaluation.RdfCloudTripleStoreSelectivityEvaluationStatistics; +import mvm.rya.rdftriplestore.evaluation.SeparateFilterJoinsVisitor; +import mvm.rya.rdftriplestore.inference.InferenceEngine; +import mvm.rya.rdftriplestore.inference.InverseOfVisitor; +import mvm.rya.rdftriplestore.inference.SameAsVisitor; +import mvm.rya.rdftriplestore.inference.SubClassOfVisitor; +import mvm.rya.rdftriplestore.inference.SubPropertyOfVisitor; +import mvm.rya.rdftriplestore.inference.SymmetricPropertyVisitor; +import mvm.rya.rdftriplestore.inference.TransitivePropertyVisitor; +import mvm.rya.rdftriplestore.namespace.NamespaceManager; +import mvm.rya.rdftriplestore.provenance.ProvenanceCollectionException; +import mvm.rya.rdftriplestore.provenance.ProvenanceCollector; +import mvm.rya.rdftriplestore.utils.DefaultStatistics; + +import org.apache.hadoop.conf.Configurable; +import org.openrdf.model.Namespace; +import org.openrdf.model.Resource; +import org.openrdf.model.Statement; +import org.openrdf.model.URI; +import org.openrdf.model.Value; +import org.openrdf.model.ValueFactory; +import org.openrdf.model.impl.ContextStatementImpl; +import org.openrdf.model.impl.StatementImpl; +import org.openrdf.query.Binding; +import org.openrdf.query.BindingSet; +import org.openrdf.query.Dataset; +import org.openrdf.query.QueryEvaluationException; +import org.openrdf.query.algebra.QueryRoot; +import org.openrdf.query.algebra.StatementPattern; +import org.openrdf.query.algebra.TupleExpr; +import org.openrdf.query.algebra.Var; +import org.openrdf.query.algebra.evaluation.EvaluationStrategy; +import org.openrdf.query.algebra.evaluation.QueryBindingSet; +import org.openrdf.query.algebra.evaluation.QueryOptimizer; +import org.openrdf.query.algebra.evaluation.TripleSource; +import org.openrdf.query.algebra.evaluation.impl.BindingAssigner; +import org.openrdf.query.algebra.evaluation.impl.CompareOptimizer; +import org.openrdf.query.algebra.evaluation.impl.ConjunctiveConstraintSplitter; +import org.openrdf.query.algebra.evaluation.impl.ConstantOptimizer; +import org.openrdf.query.algebra.evaluation.impl.DisjunctiveConstraintOptimizer; +import org.openrdf.query.algebra.evaluation.impl.EvaluationStatistics; +import org.openrdf.query.algebra.evaluation.impl.FilterOptimizer; +import org.openrdf.query.algebra.evaluation.impl.IterativeEvaluationOptimizer; +import org.openrdf.query.algebra.evaluation.impl.OrderLimitOptimizer; +import org.openrdf.query.algebra.evaluation.impl.QueryModelNormalizer; +import org.openrdf.query.algebra.evaluation.impl.SameTermFilterOptimizer; +import org.openrdf.query.impl.EmptyBindingSet; +import org.openrdf.sail.SailException; +import org.openrdf.sail.helpers.SailConnectionBase; + +public class RdfCloudTripleStoreConnection extends SailConnectionBase { + + private RdfCloudTripleStore store; + + private RdfEvalStatsDAO rdfEvalStatsDAO; + private SelectivityEvalDAO selectEvalDAO; + private RyaDAO ryaDAO; + private InferenceEngine inferenceEngine; + private NamespaceManager namespaceManager; + private RdfCloudTripleStoreConfiguration conf; + + + private ProvenanceCollector provenanceCollector; + + public RdfCloudTripleStoreConnection(RdfCloudTripleStore sailBase, RdfCloudTripleStoreConfiguration conf, ValueFactory vf) + throws SailException { + super(sailBase); + this.store = sailBase; + this.conf = conf; + initialize(); + } + + protected void initialize() throws SailException { + refreshConnection(); + } + + protected void refreshConnection() throws SailException { + try { + checkNotNull(store.getRyaDAO()); + checkArgument(store.getRyaDAO().isInitialized()); + checkNotNull(store.getNamespaceManager()); + + this.ryaDAO = store.getRyaDAO(); + this.rdfEvalStatsDAO = store.getRdfEvalStatsDAO(); + this.selectEvalDAO = store.getSelectEvalDAO(); + this.inferenceEngine = store.getInferenceEngine(); + this.namespaceManager = store.getNamespaceManager(); + this.provenanceCollector = store.getProvenanceCollector(); + + } catch (Exception e) { + throw new SailException(e); + } + } + + @Override + protected void addStatementInternal(Resource subject, URI predicate, + Value object, Resource... contexts) throws SailException { + try { + String cv_s = conf.getCv(); + byte[] cv = cv_s == null ? null : cv_s.getBytes(); + if (contexts != null && contexts.length > 0) { + for (Resource context : contexts) { + RyaStatement statement = new RyaStatement( + RdfToRyaConversions.convertResource(subject), + RdfToRyaConversions.convertURI(predicate), + RdfToRyaConversions.convertValue(object), + RdfToRyaConversions.convertResource(context), + null, cv); + + ryaDAO.add(statement); + } + } else { + RyaStatement statement = new RyaStatement( + RdfToRyaConversions.convertResource(subject), + RdfToRyaConversions.convertURI(predicate), + RdfToRyaConversions.convertValue(object), + null, null, cv); + + ryaDAO.add(statement); + } + } catch (RyaDAOException e) { + throw new SailException(e); + } + } + + + + + @Override + protected void clearInternal(Resource... aresource) throws SailException { + try { + RyaURI[] graphs = new RyaURI[aresource.length]; + for (int i = 0 ; i < graphs.length ; i++){ + graphs[i] = RdfToRyaConversions.convertResource(aresource[i]); + } + ryaDAO.dropGraph(conf, graphs); + } catch (RyaDAOException e) { + throw new SailException(e); + } + } + + @Override + protected void clearNamespacesInternal() throws SailException { + logger.error("Clear Namespace Repository method not implemented"); + } + + @Override + protected void closeInternal() throws SailException { + verifyIsOpen(); + } + + @Override + protected void commitInternal() throws SailException { + verifyIsOpen(); + //There is no transactional layer + } + + @Override + protected CloseableIteration<? extends BindingSet, QueryEvaluationException> evaluateInternal( + TupleExpr tupleExpr, Dataset dataset, BindingSet bindings, + boolean flag) throws SailException { + verifyIsOpen(); + logger.trace("Incoming query model:\n{}", tupleExpr.toString()); + if (provenanceCollector != null){ + try { + provenanceCollector.recordQuery(tupleExpr.toString()); + } catch (ProvenanceCollectionException e) { + // TODO silent fail + e.printStackTrace(); + } + } + tupleExpr = tupleExpr.clone(); + + RdfCloudTripleStoreConfiguration queryConf = store.getConf().clone(); + if (bindings != null) { + Binding dispPlan = bindings.getBinding(RdfCloudTripleStoreConfiguration.CONF_QUERYPLAN_FLAG); + if (dispPlan != null) { + queryConf.setDisplayQueryPlan(Boolean.parseBoolean(dispPlan.getValue().stringValue())); + } + + Binding authBinding = bindings.getBinding(RdfCloudTripleStoreConfiguration.CONF_QUERY_AUTH); + if (authBinding != null) { + queryConf.setAuths(authBinding.getValue().stringValue().split(",")); + } + + Binding ttlBinding = bindings.getBinding(RdfCloudTripleStoreConfiguration.CONF_TTL); + if (ttlBinding != null) { + queryConf.setTtl(Long.valueOf(ttlBinding.getValue().stringValue())); + } + + Binding startTimeBinding = bindings.getBinding(RdfCloudTripleStoreConfiguration.CONF_STARTTIME); + if (startTimeBinding != null) { + queryConf.setStartTime(Long.valueOf(startTimeBinding.getValue().stringValue())); + } + + Binding performantBinding = bindings.getBinding(RdfCloudTripleStoreConfiguration.CONF_PERFORMANT); + if (performantBinding != null) { + queryConf.setBoolean(RdfCloudTripleStoreConfiguration.CONF_PERFORMANT, Boolean.parseBoolean(performantBinding.getValue().stringValue())); + } + + Binding inferBinding = bindings.getBinding(RdfCloudTripleStoreConfiguration.CONF_INFER); + if (inferBinding != null) { + queryConf.setInfer(Boolean.parseBoolean(inferBinding.getValue().stringValue())); + } + + Binding useStatsBinding = bindings.getBinding(RdfCloudTripleStoreConfiguration.CONF_USE_STATS); + if (useStatsBinding != null) { + queryConf.setUseStats(Boolean.parseBoolean(useStatsBinding.getValue().stringValue())); + } + + Binding offsetBinding = bindings.getBinding(RdfCloudTripleStoreConfiguration.CONF_OFFSET); + if (offsetBinding != null) { + queryConf.setOffset(Long.parseLong(offsetBinding.getValue().stringValue())); + } + + Binding limitBinding = bindings.getBinding(RdfCloudTripleStoreConfiguration.CONF_LIMIT); + if (limitBinding != null) { + queryConf.setLimit(Long.parseLong(limitBinding.getValue().stringValue())); + } + } else { + bindings = new QueryBindingSet(); + } + + if (!(tupleExpr instanceof QueryRoot)) { + tupleExpr = new QueryRoot(tupleExpr); + } + + try { + List<Class<QueryOptimizer>> optimizers = queryConf.getOptimizers(); + Class<QueryOptimizer> pcjOptimizer = queryConf.getPcjOptimizer(); + + if(pcjOptimizer != null) { + QueryOptimizer opt = null; + try { + Constructor<QueryOptimizer> construct = pcjOptimizer.getDeclaredConstructor(new Class[] {}); + opt = construct.newInstance(); + } catch (Exception e) { + } + if (opt == null) { + throw new NoSuchMethodException("Could not find valid constructor for " + pcjOptimizer.getName()); + } + if (opt instanceof Configurable) { + ((Configurable) opt).setConf(conf); + } + opt.optimize(tupleExpr, dataset, bindings); + } + + final ParallelEvaluationStrategyImpl strategy = new ParallelEvaluationStrategyImpl( + new StoreTripleSource(queryConf), inferenceEngine, dataset, queryConf); + + (new BindingAssigner()).optimize(tupleExpr, dataset, bindings); + (new ConstantOptimizer(strategy)).optimize(tupleExpr, dataset, + bindings); + (new CompareOptimizer()).optimize(tupleExpr, dataset, bindings); + (new ConjunctiveConstraintSplitter()).optimize(tupleExpr, dataset, + bindings); + (new DisjunctiveConstraintOptimizer()).optimize(tupleExpr, dataset, + bindings); + (new SameTermFilterOptimizer()).optimize(tupleExpr, dataset, + bindings); + (new QueryModelNormalizer()).optimize(tupleExpr, dataset, bindings); + + (new IterativeEvaluationOptimizer()).optimize(tupleExpr, dataset, + bindings); + + if (!optimizers.isEmpty()) { + for (Class<QueryOptimizer> optclz : optimizers) { + QueryOptimizer result = null; + try { + Constructor<QueryOptimizer> meth = optclz.getDeclaredConstructor(new Class[] {}); + result = meth.newInstance(); + } catch (Exception e) { + } + try { + Constructor<QueryOptimizer> meth = optclz.getDeclaredConstructor(EvaluationStrategy.class); + result = meth.newInstance(strategy); + } catch (Exception e) { + } + if (result == null) { + throw new NoSuchMethodException("Could not find valid constructor for " + optclz.getName()); + } + if (result instanceof Configurable) { + ((Configurable) result).setConf(conf); + } + result.optimize(tupleExpr, dataset, bindings); + } + } + + (new FilterOptimizer()).optimize(tupleExpr, dataset, bindings); + (new OrderLimitOptimizer()).optimize(tupleExpr, dataset, bindings); + + logger.trace("Optimized query model:\n{}", tupleExpr.toString()); + + if (queryConf.isInfer() + && this.inferenceEngine != null + ) { + try { + tupleExpr.visit(new TransitivePropertyVisitor(queryConf, inferenceEngine)); + tupleExpr.visit(new SymmetricPropertyVisitor(queryConf, inferenceEngine)); + tupleExpr.visit(new InverseOfVisitor(queryConf, inferenceEngine)); + tupleExpr.visit(new SubPropertyOfVisitor(queryConf, inferenceEngine)); + tupleExpr.visit(new SubClassOfVisitor(queryConf, inferenceEngine)); + tupleExpr.visit(new SameAsVisitor(queryConf, inferenceEngine)); + } catch (Exception e) { + e.printStackTrace(); + } + } + if (queryConf.isPerformant()) { + tupleExpr.visit(new SeparateFilterJoinsVisitor()); +// tupleExpr.visit(new FilterTimeIndexVisitor(queryConf)); +// tupleExpr.visit(new PartitionFilterTimeIndexVisitor(queryConf)); + } + FilterRangeVisitor rangeVisitor = new FilterRangeVisitor(queryConf); + tupleExpr.visit(rangeVisitor); + tupleExpr.visit(rangeVisitor); //this has to be done twice to get replace the statementpatterns with the right ranges + EvaluationStatistics stats = null; + if (!queryConf.isUseStats() && queryConf.isPerformant() || rdfEvalStatsDAO == null) { + stats = new DefaultStatistics(); + } else if (queryConf.isUseStats()) { + + if (queryConf.isUseSelectivity()) { + stats = new RdfCloudTripleStoreSelectivityEvaluationStatistics(queryConf, rdfEvalStatsDAO, + selectEvalDAO); + } else { + stats = new RdfCloudTripleStoreEvaluationStatistics(queryConf, rdfEvalStatsDAO); + } + } + if (stats != null) { + + if (stats instanceof RdfCloudTripleStoreSelectivityEvaluationStatistics) { + + (new QueryJoinSelectOptimizer((RdfCloudTripleStoreSelectivityEvaluationStatistics) stats, + selectEvalDAO)).optimize(tupleExpr, dataset, bindings); + } else { + + (new mvm.rya.rdftriplestore.evaluation.QueryJoinOptimizer(stats)).optimize(tupleExpr, dataset, + bindings); // TODO: Make pluggable + } + } + + final CloseableIteration<BindingSet, QueryEvaluationException> iter = strategy + .evaluate(tupleExpr, EmptyBindingSet.getInstance()); + CloseableIteration<BindingSet, QueryEvaluationException> iterWrap = new CloseableIteration<BindingSet, QueryEvaluationException>() { + + @Override + public void remove() throws QueryEvaluationException { + iter.remove(); + } + + @Override + public BindingSet next() throws QueryEvaluationException { + return iter.next(); + } + + @Override + public boolean hasNext() throws QueryEvaluationException { + return iter.hasNext(); + } + + @Override + public void close() throws QueryEvaluationException { + iter.close(); + strategy.shutdown(); + } + }; + return iterWrap; + } catch (QueryEvaluationException e) { + throw new SailException(e); + } catch (Exception e) { + throw new SailException(e); + } + } + + @Override + protected CloseableIteration<? extends Resource, SailException> getContextIDsInternal() + throws SailException { + verifyIsOpen(); + + // iterate through all contextids + return null; + } + + @Override + protected String getNamespaceInternal(String s) throws SailException { + return namespaceManager.getNamespace(s); + } + + @Override + protected CloseableIteration<? extends Namespace, SailException> getNamespacesInternal() + throws SailException { + return namespaceManager.iterateNamespace(); + } + + @Override + protected CloseableIteration<? extends Statement, SailException> getStatementsInternal( + Resource subject, URI predicate, Value object, boolean flag, + Resource... contexts) throws SailException { +// try { + //have to do this to get the inferred values + //TODO: Will this method reduce performance? + final Var subjVar = decorateValue(subject, "s"); + final Var predVar = decorateValue(predicate, "p"); + final Var objVar = decorateValue(object, "o"); + StatementPattern sp = null; + final boolean hasContext = contexts != null && contexts.length > 0; + final Resource context = (hasContext) ? contexts[0] : null; + final Var cntxtVar = decorateValue(context, "c"); + //TODO: Only using one context here + sp = new StatementPattern(subjVar, predVar, objVar, cntxtVar); + //return new StoreTripleSource(store.getConf()).getStatements(resource, uri, value, contexts); + final CloseableIteration<? extends BindingSet, QueryEvaluationException> evaluate = evaluate(sp, null, null, false); + return new CloseableIteration<Statement, SailException>() { //TODO: Use a util class to do this + private boolean isClosed = false; + + @Override + public void close() throws SailException { + isClosed = true; + try { + evaluate.close(); + } catch (QueryEvaluationException e) { + throw new SailException(e); + } + } + + @Override + public boolean hasNext() throws SailException { + try { + return evaluate.hasNext(); + } catch (QueryEvaluationException e) { + throw new SailException(e); + } + } + + @Override + public Statement next() throws SailException { + if (!hasNext() || isClosed) { + throw new NoSuchElementException(); + } + + try { + BindingSet next = evaluate.next(); + Resource bs_subj = (Resource) ((subjVar.hasValue()) ? subjVar.getValue() : next.getBinding(subjVar.getName()).getValue()); + URI bs_pred = (URI) ((predVar.hasValue()) ? predVar.getValue() : next.getBinding(predVar.getName()).getValue()); + Value bs_obj = (objVar.hasValue()) ? objVar.getValue() : (Value) next.getBinding(objVar.getName()).getValue(); + Binding b_cntxt = next.getBinding(cntxtVar.getName()); + + //convert BindingSet to Statement + if (b_cntxt != null) { + return new ContextStatementImpl(bs_subj, bs_pred, bs_obj, (Resource) b_cntxt.getValue()); + } else { + return new StatementImpl(bs_subj, bs_pred, bs_obj); + } + } catch (QueryEvaluationException e) { + throw new SailException(e); + } + } + + @Override + public void remove() throws SailException { + try { + evaluate.remove(); + } catch (QueryEvaluationException e) { + throw new SailException(e); + } + } + }; +// } catch (QueryEvaluationException e) { +// throw new SailException(e); +// } + } + + protected Var decorateValue(Value val, String name) { + if (val == null) { + return new Var(name); + } else { + return new Var(name, val); + } + } + + @Override + protected void removeNamespaceInternal(String s) throws SailException { + namespaceManager.removeNamespace(s); + } + + @Override + protected void removeStatementsInternal(Resource subject, URI predicate, + Value object, Resource... contexts) throws SailException { + if (!(subject instanceof URI)) { + throw new SailException("Subject[" + subject + "] must be URI"); + } + + try { + if (contexts != null && contexts.length > 0) { + for (Resource context : contexts) { + if (!(context instanceof URI)) { + throw new SailException("Context[" + context + "] must be URI"); + } + RyaStatement statement = new RyaStatement( + RdfToRyaConversions.convertResource(subject), + RdfToRyaConversions.convertURI(predicate), + RdfToRyaConversions.convertValue(object), + RdfToRyaConversions.convertResource(context)); + + ryaDAO.delete(statement, conf); + } + } else { + RyaStatement statement = new RyaStatement( + RdfToRyaConversions.convertResource(subject), + RdfToRyaConversions.convertURI(predicate), + RdfToRyaConversions.convertValue(object), + null); + + ryaDAO.delete(statement, conf); + } + } catch (RyaDAOException e) { + throw new SailException(e); + } + } + + @Override + protected void rollbackInternal() throws SailException { + //TODO: No transactional layer as of yet + } + + @Override + protected void setNamespaceInternal(String s, String s1) + throws SailException { + namespaceManager.addNamespace(s, s1); + } + + @Override + protected long sizeInternal(Resource... contexts) throws SailException { + logger.error("Cannot determine size as of yet"); + + return 0; + } + + @Override + protected void startTransactionInternal() throws SailException { + //TODO: ? + } + + public class StoreTripleSource implements TripleSource { + + private RdfCloudTripleStoreConfiguration conf; + + public StoreTripleSource(RdfCloudTripleStoreConfiguration conf) { + this.conf = conf; + } + + public CloseableIteration<Statement, QueryEvaluationException> getStatements( + Resource subject, URI predicate, Value object, + Resource... contexts) throws QueryEvaluationException { + return RyaDAOHelper.query(ryaDAO, subject, predicate, object, conf, contexts); + } + + public CloseableIteration<? extends Entry<Statement, BindingSet>, QueryEvaluationException> getStatements( + Collection<Map.Entry<Statement, BindingSet>> statements, + Resource... contexts) throws QueryEvaluationException { + + return RyaDAOHelper.query(ryaDAO, statements, conf); + } + + public ValueFactory getValueFactory() { + return RdfCloudTripleStoreConstants.VALUE_FACTORY; + } + } + + public InferenceEngine getInferenceEngine() { + return inferenceEngine; + } + public RdfCloudTripleStoreConfiguration getConf() { + return conf; + } +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/80faf06d/sail/src/main/java/mvm/rya/rdftriplestore/RdfCloudTripleStoreFactory.java ---------------------------------------------------------------------- diff --git a/sail/src/main/java/mvm/rya/rdftriplestore/RdfCloudTripleStoreFactory.java b/sail/src/main/java/mvm/rya/rdftriplestore/RdfCloudTripleStoreFactory.java new file mode 100644 index 0000000..42f1aa4 --- /dev/null +++ b/sail/src/main/java/mvm/rya/rdftriplestore/RdfCloudTripleStoreFactory.java @@ -0,0 +1,56 @@ +package mvm.rya.rdftriplestore; + +/* + * 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. + */ + + + +import org.openrdf.sail.Sail; +import org.openrdf.sail.config.SailConfigException; +import org.openrdf.sail.config.SailFactory; +import org.openrdf.sail.config.SailImplConfig; + +public class RdfCloudTripleStoreFactory implements SailFactory { + + public static final String SAIL_TYPE = "openrdf:RdfCloudTripleStore"; + + @Override + public SailImplConfig getConfig() { + return new RdfCloudTripleStoreSailConfig(); + } + + @Override + public Sail getSail(SailImplConfig config) throws SailConfigException { +// RdfCloudTripleStore cbStore = new RdfCloudTripleStore(); +// RdfCloudTripleStoreSailConfig cbconfig = (RdfCloudTripleStoreSailConfig) config; +// cbStore.setServer(cbconfig.getServer()); +// cbStore.setPort(cbconfig.getPort()); +// cbStore.setInstance(cbconfig.getInstance()); +// cbStore.setPassword(cbconfig.getPassword()); +// cbStore.setUser(cbconfig.getUser()); +// return cbStore; + return null; //TODO: How? + } + + @Override + public String getSailType() { + return SAIL_TYPE; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/80faf06d/sail/src/main/java/mvm/rya/rdftriplestore/RdfCloudTripleStoreSailConfig.java ---------------------------------------------------------------------- diff --git a/sail/src/main/java/mvm/rya/rdftriplestore/RdfCloudTripleStoreSailConfig.java b/sail/src/main/java/mvm/rya/rdftriplestore/RdfCloudTripleStoreSailConfig.java new file mode 100644 index 0000000..6542b55 --- /dev/null +++ b/sail/src/main/java/mvm/rya/rdftriplestore/RdfCloudTripleStoreSailConfig.java @@ -0,0 +1,133 @@ +package mvm.rya.rdftriplestore; + +/* + * 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. + */ + + + +import org.openrdf.model.*; +import org.openrdf.model.impl.ValueFactoryImpl; +import org.openrdf.model.util.GraphUtil; +import org.openrdf.model.util.GraphUtilException; +import org.openrdf.sail.config.SailConfigException; +import org.openrdf.sail.config.SailImplConfigBase; + +public class RdfCloudTripleStoreSailConfig extends SailImplConfigBase { + + public static final String NAMESPACE = "http://www.openrdf.org/config/sail/cloudbasestore#"; + + public static final URI SERVER; + public static final URI PORT; + public static final URI INSTANCE; + public static final URI USER; + public static final URI PASSWORD; + + static { + ValueFactory factory = ValueFactoryImpl.getInstance(); + SERVER = factory.createURI(NAMESPACE, "server"); + PORT = factory.createURI(NAMESPACE, "port"); + INSTANCE = factory.createURI(NAMESPACE, "instance"); + USER = factory.createURI(NAMESPACE, "user"); + PASSWORD = factory.createURI(NAMESPACE, "password"); + } + + private String server = "stratus13"; + + private int port = 2181; + + private String user = "root"; + + private String password = "password"; + + private String instance = "stratus"; + + public String getServer() { + return server; + } + + public void setServer(String server) { + this.server = server; + } + + public int getPort() { + return port; + } + + public void setPort(int port) { + this.port = port; + } + + public String getUser() { + return user; + } + + public void setUser(String user) { + this.user = user; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getInstance() { + return instance; + } + + public void setInstance(String instance) { + this.instance = instance; + } + + @Override + public void parse(Graph graph, Resource implNode) + throws SailConfigException + { + super.parse(graph, implNode); + System.out.println("parsing"); + + try { + Literal serverLit = GraphUtil.getOptionalObjectLiteral(graph, implNode, SERVER); + if (serverLit != null) { + setServer(serverLit.getLabel()); + } + Literal portLit = GraphUtil.getOptionalObjectLiteral(graph, implNode, PORT); + if (portLit != null) { + setPort(Integer.parseInt(portLit.getLabel())); + } + Literal instList = GraphUtil.getOptionalObjectLiteral(graph, implNode, INSTANCE); + if (instList != null) { + setInstance(instList.getLabel()); + } + Literal userLit = GraphUtil.getOptionalObjectLiteral(graph, implNode, USER); + if (userLit != null) { + setUser(userLit.getLabel()); + } + Literal pwdLit = GraphUtil.getOptionalObjectLiteral(graph, implNode, PASSWORD); + if (pwdLit != null) { + setPassword(pwdLit.getLabel()); + } + } + catch (GraphUtilException e) { + throw new SailConfigException(e.getMessage(), e); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/80faf06d/sail/src/main/java/mvm/rya/rdftriplestore/RyaSailRepository.java ---------------------------------------------------------------------- diff --git a/sail/src/main/java/mvm/rya/rdftriplestore/RyaSailRepository.java b/sail/src/main/java/mvm/rya/rdftriplestore/RyaSailRepository.java new file mode 100644 index 0000000..7003398 --- /dev/null +++ b/sail/src/main/java/mvm/rya/rdftriplestore/RyaSailRepository.java @@ -0,0 +1,53 @@ +package mvm.rya.rdftriplestore; + +/* + * 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. + */ + + + +import org.openrdf.repository.RepositoryException; +import org.openrdf.repository.sail.SailRepository; +import org.openrdf.repository.sail.SailRepositoryConnection; +import org.openrdf.sail.Sail; +import org.openrdf.sail.SailException; + +/** + * Created by IntelliJ IDEA. + * User: RoshanP + * Date: 3/23/12 + * Time: 10:05 AM + * To change this template use File | Settings | File Templates. + */ +public class RyaSailRepository extends SailRepository{ + public RyaSailRepository(Sail sail) { + super(sail); + } + + @Override + public SailRepositoryConnection getConnection() throws RepositoryException { + try + { + return new RyaSailRepositoryConnection(this, this.getSail().getConnection()); + } + catch(SailException e) + { + throw new RepositoryException(e); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/80faf06d/sail/src/main/java/mvm/rya/rdftriplestore/RyaSailRepositoryConnection.java ---------------------------------------------------------------------- diff --git a/sail/src/main/java/mvm/rya/rdftriplestore/RyaSailRepositoryConnection.java b/sail/src/main/java/mvm/rya/rdftriplestore/RyaSailRepositoryConnection.java new file mode 100644 index 0000000..6261b8c --- /dev/null +++ b/sail/src/main/java/mvm/rya/rdftriplestore/RyaSailRepositoryConnection.java @@ -0,0 +1,109 @@ +package mvm.rya.rdftriplestore; + +/* + * 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. + */ + + + +import java.io.IOException; +import java.io.InputStream; +import java.io.Reader; + +import mvm.rya.rdftriplestore.utils.CombineContextsRdfInserter; + +import org.openrdf.OpenRDFUtil; +import org.openrdf.model.Resource; +import org.openrdf.repository.RepositoryException; +import org.openrdf.repository.sail.SailRepository; +import org.openrdf.repository.sail.SailRepositoryConnection; +import org.openrdf.repository.util.RDFLoader; +import org.openrdf.rio.RDFFormat; +import org.openrdf.rio.RDFHandlerException; +import org.openrdf.rio.RDFParseException; +import org.openrdf.sail.SailConnection; + +/** + * The real reason for this is so that we can combine contexts from an input stream/reader and the given contexts in the add function + */ +public class RyaSailRepositoryConnection extends SailRepositoryConnection { + + protected RyaSailRepositoryConnection(SailRepository repository, SailConnection sailConnection) { + super(repository, sailConnection); + } + + @Override + public void add(InputStream in, String baseURI, RDFFormat dataFormat, Resource... contexts) throws IOException, RDFParseException, + RepositoryException { + OpenRDFUtil.verifyContextNotNull(contexts); + + CombineContextsRdfInserter rdfInserter = new CombineContextsRdfInserter(this); + rdfInserter.enforceContext(contexts); + + boolean localTransaction = startLocalTransaction(); + try { + RDFLoader loader = new RDFLoader(getParserConfig(), getValueFactory()); + loader.load(in, baseURI, dataFormat, rdfInserter); + + conditionalCommit(localTransaction); + } catch (RDFHandlerException e) { + conditionalRollback(localTransaction); + + throw ((RepositoryException) e.getCause()); + } catch (RDFParseException e) { + conditionalRollback(localTransaction); + throw e; + } catch (IOException e) { + conditionalRollback(localTransaction); + throw e; + } catch (RuntimeException e) { + conditionalRollback(localTransaction); + throw e; + } + } + + @Override + public void add(Reader reader, String baseURI, RDFFormat dataFormat, Resource... contexts) throws IOException, RDFParseException, + RepositoryException { + OpenRDFUtil.verifyContextNotNull(contexts); + + CombineContextsRdfInserter rdfInserter = new CombineContextsRdfInserter(this); + rdfInserter.enforceContext(contexts); + + boolean localTransaction = startLocalTransaction(); + try { + RDFLoader loader = new RDFLoader(getParserConfig(), getValueFactory()); + loader.load(reader, baseURI, dataFormat, rdfInserter); + + conditionalCommit(localTransaction); + } catch (RDFHandlerException e) { + conditionalRollback(localTransaction); + + throw ((RepositoryException) e.getCause()); + } catch (RDFParseException e) { + conditionalRollback(localTransaction); + throw e; + } catch (IOException e) { + conditionalRollback(localTransaction); + throw e; + } catch (RuntimeException e) { + conditionalRollback(localTransaction); + throw e; + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/80faf06d/sail/src/main/java/mvm/rya/rdftriplestore/evaluation/ExternalBatchingIterator.java ---------------------------------------------------------------------- diff --git a/sail/src/main/java/mvm/rya/rdftriplestore/evaluation/ExternalBatchingIterator.java b/sail/src/main/java/mvm/rya/rdftriplestore/evaluation/ExternalBatchingIterator.java new file mode 100644 index 0000000..b84104a --- /dev/null +++ b/sail/src/main/java/mvm/rya/rdftriplestore/evaluation/ExternalBatchingIterator.java @@ -0,0 +1,33 @@ +package mvm.rya.rdftriplestore.evaluation; + +/* + * 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. + */ + + + +import info.aduna.iteration.CloseableIteration; + +import java.util.Collection; + +import org.openrdf.query.BindingSet; +import org.openrdf.query.QueryEvaluationException; + +public interface ExternalBatchingIterator { + public CloseableIteration<BindingSet, QueryEvaluationException> evaluate(Collection<BindingSet> bindingset) throws QueryEvaluationException; +}