/* * The contents of this file are subject to the Mozilla Public License * Version 1.1 (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.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is the Kowari Metadata Store. * * The Initial Developer of the Original Code is Plugged In Software Pty * Ltd (http://www.pisoftware.com, mailto:info@pisoftware.com). Portions * created by Plugged In Software Pty Ltd are Copyright (C) 2001,2002 * Northrop Grumman Corporation. All Rights Reserved. * * This file is an original work and contains no Original Code. It was * developed by Netymon Pty Ltd under contract to the Australian * Commonwealth Government, Defense Science and Technology Organisation * under contract #4500507038 and is contributed back to the Kowari/Mulgara * Project as per clauses 4.1.3 and 4.1.4 of the above contract. * * Contributor(s): N/A. * * Copyright: * The copyright on this file is held by: * The Australian Commonwealth Government * Department of Defense * Developed by Netymon Pty Ltd * Copyright (C) 2006 * The Australian Commonwealth Government * Department of Defense * * [NOTE: The text of this Exhibit A may differ slightly from the text * of the notices in the Source Code files of the Original Code. You * should use the text of this Exhibit A rather than the text found in the * Original Code Source Code for Your Modifications.] * */ package org.mulgara.resolver.relational; // Java 2 standard packages import java.io.File; import java.net.URI; import java.net.URISyntaxException; import java.util.*; import java.sql.*; // Third party packages import junit.framework.*; // JUnit import org.apache.log4j.Logger; // Log4J import org.jrdf.vocabulary.RDF; // JRDF // Locally written packages import org.mulgara.query.*; import org.mulgara.query.rdf.URIReferenceImpl; import org.mulgara.query.rdf.LiteralImpl; import org.mulgara.query.rdf.XSD; import org.mulgara.server.Session; import org.mulgara.util.FileUtil; import org.mulgara.util.TempDir; import org.mulgara.resolver.JotmTransactionManagerFactory; import org.mulgara.resolver.Database; /** * Test case for the {@link RelationalResolver}. * * @created 2004-04-27 * @author <a href="http://staff.pisoftware.com/raboczi">Simon Raboczi</a> * @version $Revision: 1.1.1.1 $ * @modified $Date: 2005/10/30 19:21:14 $ by $Author: prototypo $ * All rights reserved. * @licence <a href="{@docRoot}/../../LICENCE">Mozilla Public License v1.1</a> */ public class RelationalResolverUnitTest extends TestCase { private static final URI databaseURI; private static final URI systemModelURI; private static final URI testModelURI; private static final URI testModelDefURI; private static final URI testModel2URI; private static final URI testModel2DefURI; private static final URI relationalModelTypeURI; static { try { databaseURI = new URI("rmi://localhost/database"); systemModelURI = new URI("rmi://localhost/database#"); testModelURI = new URI("rmi://localhost/database#test"); testModelDefURI = new URI("rmi://localhost/database?def#test"); testModel2URI = new URI("rmi://localhost/database#test2"); testModel2DefURI = new URI("rmi://localhost/database?def#test2"); relationalModelTypeURI = new URI("http://mulgara.org/mulgara#RelationalModel"); } catch (URISyntaxException e) { throw new Error("Bad hardcoded URI", e); } } /** create the temporary directory */ @SuppressWarnings("unused") private static final File tmpDir = TempDir.getTempDir(); /** Logger. */ @SuppressWarnings("unused") private static Logger logger = Logger.getLogger(RelationalResolverUnitTest.class.getName()); /** * In-memory test {@link Database} used to generate {@link DatabaseSession}s * for testing. * * This is assigned a value by the {@link #setUp} method. */ private static Database database = null; /** * Constructs a new test with the given name. * * @param testcase the bundled parameters for the test */ public RelationalResolverUnitTest(String name) { super(name); } /** * Hook for test runner to obtain a test suite from. * * @return the test suite */ public static Test suite() { TestSuite suite = new TestSuite(); suite.addTest(new RelationalResolverUnitTest("testSetupSQLDatabase")); suite.addTest(new RelationalResolverUnitTest("testCreateRelationalModel")); suite.addTest(new RelationalResolverUnitTest("testLoadRelationalDef")); suite.addTest(new RelationalResolverUnitTest("testBasicClassQuery")); suite.addTest(new RelationalResolverUnitTest("testBasicPropertyQuery")); suite.addTest(new RelationalResolverUnitTest("testDatePropertyQuery")); suite.addTest(new RelationalResolverUnitTest("testBoundPropertyQuery")); suite.addTest(new RelationalResolverUnitTest("testBoundSubjectQuery")); suite.addTest(new RelationalResolverUnitTest("testConjPropertyQuery")); suite.addTest(new RelationalResolverUnitTest("testURIPatternQuery")); suite.addTest(new RelationalResolverUnitTest("testURIPatternPropertyQuery")); suite.addTest(new RelationalResolverUnitTest("testBasicPredicateQuery")); suite.addTest(new RelationalResolverUnitTest("testBasicPredicateObjectQuery")); suite.addTest(new RelationalResolverUnitTest("testCompoundPredicateVoidQuery")); suite.addTest(new RelationalResolverUnitTest("testCompoundPredicateQuery")); suite.addTest(new RelationalResolverUnitTest("testCompoundPredicateObjectQuery")); suite.addTest(new RelationalResolverUnitTest("testBasicPatternPropertyQuery")); suite.addTest(new RelationalResolverUnitTest("testBoundPatternPropertyQuery")); suite.addTest(new RelationalResolverUnitTest("testBoundPatternSubjectQuery")); suite.addTest(new RelationalResolverUnitTest("testBasicReferWithJoinQuery")); suite.addTest(new RelationalResolverUnitTest("testBasicReferWithJoinQueryAndPropPattern")); suite.addTest(new RelationalResolverUnitTest("testBasicReferWithPropPattern")); suite.addTest(new RelationalResolverUnitTest("testObjectReferWithMNJoin")); suite.addTest(new RelationalResolverUnitTest("testObjectReferWithPK")); suite.addTest(new RelationalResolverUnitTest("testBasicQueryWithAdditionalProperty")); suite.addTest(new RelationalResolverUnitTest("testCreateRelationalModel2")); suite.addTest(new RelationalResolverUnitTest("testLoadRelationalDef2")); suite.addTest(new RelationalResolverUnitTest("testDualDatabaseQuery")); suite.addTest(new RelationalResolverUnitTest("testDeleteDatabase")); return suite; } /** * Create test objects. */ @SuppressWarnings("deprecation") public void setUp() throws Exception { if (database == null) { // Create the persistence directory File persistenceDirectory = new File(new File(System.getProperty("cvs.root")), "testDatabase"); if (persistenceDirectory.isDirectory()) { if (!FileUtil.deleteDirectory(persistenceDirectory)) { throw new RuntimeException( "Unable to remove old directory " + persistenceDirectory ); } } if (!persistenceDirectory.mkdirs()) { throw new Exception("Unable to create directory "+persistenceDirectory); } // Define the the node pool factory String nodePoolFactoryClassName = "org.mulgara.store.nodepool.xa.XANodePoolFactory"; // Define the string pool factory String stringPoolFactoryClassName = "org.mulgara.store.stringpool.xa.XAStringPoolFactory"; String tempNodePoolFactoryClassName = "org.mulgara.store.nodepool.memory.MemoryNodePoolFactory"; // Define the string pool factory String tempStringPoolFactoryClassName = "org.mulgara.store.stringpool.memory.MemoryStringPoolFactory"; // Define the resolver factory used to manage system models String systemResolverFactoryClassName = "org.mulgara.resolver.store.StatementStoreResolverFactory"; // Define the resolver factory used to manage system models String tempResolverFactoryClassName = "org.mulgara.resolver.memory.MemoryResolverFactory"; // Create a database which keeps its system models on the Java heap database = new Database( databaseURI, persistenceDirectory, null, // no security domain new JotmTransactionManagerFactory(), 0, // default transaction timeout 0, // default idle timeout nodePoolFactoryClassName, // persistent new File(persistenceDirectory, "xaNodePool"), stringPoolFactoryClassName, // persistent new File(persistenceDirectory, "xaStringPool"), systemResolverFactoryClassName, // persistent new File(persistenceDirectory, "xaStatementStore"), tempNodePoolFactoryClassName, // temporary nodes null, // no dir for temp nodes tempStringPoolFactoryClassName, // temporary strings null, // no dir for temp strings tempResolverFactoryClassName, // temporary models null, // no dir for temp models "", // no rule loader "org.mulgara.content.rdfxml.RDFXMLContentHandler"); database.addResolverFactory("org.mulgara.resolver.url.URLResolverFactory", null); database.addResolverFactory("org.mulgara.resolver.relational.RelationalResolverFactory", null); } } /** * The teardown method for JUnit */ public void tearDown() { // database.delete(); } // // Test cases // public void testSetupSQLDatabase() throws Exception { File sqlDir = new File(new File(System.getProperty("cvs.root")), "sqltest"); if (sqlDir.isDirectory()) { if (!FileUtil.deleteDirectory(sqlDir)) { throw new RuntimeException("Unable to remove old directory " + sqlDir); } } // Class.forName( "smallsql.database.SSDriver" ); Class.forName( "org.apache.derby.jdbc.EmbeddedDriver" ); String url = "jdbc:derby:sqltest;create=true"; Connection con = DriverManager.getConnection(url); Statement stmt = con.createStatement(); stmt.execute("CREATE TABLE Persons (" + "PersonID integer, " + "FirstName varchar(50), " + "LastName varchar(50), " + "Address varchar(50), " + "Email varchar(50), " + "Homepage varchar(50), " + "Phone varchar(50), " + "URI varchar(50), " + "Photo varchar(50))"); stmt.execute("INSERT INTO Persons (PersonID, FirstName, LastName, URI, Email) " + " VALUES ( 1, 'Albert', 'Smith', 'http://www.smith.id/albert', 'albert@email.com')"); stmt.execute("INSERT INTO Persons (PersonID, FirstName, LastName, URI, Email) " + " VALUES ( 2, 'Brian', 'Carson', 'http://www.carson.id/brian', 'brian@email.com')"); stmt.execute("CREATE TABLE Conferences (" + "ConfID integer, " + "Name varchar(50), " + "URI varchar(50), " + "Date date, " + "Location varchar(50))"); stmt.execute("INSERT INTO Conferences (ConfID, Name, URI, Date, Location) " + " VALUES (1, 'Apes and Bears', 'http://www.apes.conf.au/bears', '2008-02-01', 'Brisbane')"); stmt.execute("INSERT INTO Conferences (ConfID, Name, URI, Date, Location) " + " VALUES (2, 'Cats and Donkeys', 'http://www.cats.conf.au/donkeys', '2008-04-03', 'Dublin')"); stmt.execute("CREATE TABLE Papers (" + "PaperID integer, " + "Title varchar(50), " + "Abstract varchar(50), " + "URI varchar(50), " + "PubYear varchar(50), " + "Conference integer, " + "Publish integer)"); stmt.execute("INSERT INTO Papers (PaperID, Title, Abstract, URI, PubYear, Conference, Publish) " + "VALUES (1, 'Apes and their Friends', 'We like Apes', 'http://www.welikeapes.com/', '2008', 1, 1)"); stmt.execute("INSERT INTO Papers (PaperID, Title, Abstract, URI, PubYear, Conference, Publish) " + "VALUES (2, 'Bears like us too', 'Do we like Bears?', 'http://www.bearspetition.com/', '2008', 1, 1)"); stmt.execute("INSERT INTO Papers (PaperID, Title, Abstract, URI, PubYear, Conference, Publish) " + "VALUES (3, 'Why Cats?', 'I prefer Donkeys', 'http://www.bizare.org/', '2007', 2, 1)"); stmt.execute("INSERT INTO Papers (PaperID, Title, Abstract, URI, PubYear, Conference, Publish) " + "VALUES (4, 'Miscellaneous Donkeys', 'Donkeys in Myth and Legend', 'http://www.bray.org/', '2009', 2, 0)"); stmt.execute("CREATE TABLE Topics (" + "TopicID integer, " + "TopicName varchar(50), " + "URI varchar(50))"); stmt.execute("INSERT INTO Topics (TopicID, TopicName, URI) " + "VALUES (1, 'Apes', 'http://topics.org/apes')"); stmt.execute("INSERT INTO Topics (TopicID, TopicName, URI) " + "VALUES (2, 'Bears', 'http://topics.org/bears')"); stmt.execute("INSERT INTO Topics (TopicID, TopicName, URI) " + "VALUES (3, 'Cats', null)"); stmt.execute("INSERT INTO Topics (TopicID, TopicName, URI) " + "VALUES (4, 'Donkeys', 'http://topics.org/donkeys')"); stmt.execute("CREATE TABLE Rel_Person_Paper (" + "PersonID integer, " + "PaperID integer)"); stmt.execute("INSERT INTO Rel_Person_Paper (PersonID, PaperID) " + "VALUES (1, 1)"); stmt.execute("INSERT INTO Rel_Person_Paper (PersonID, PaperID) " + "VALUES (1, 2)"); stmt.execute("INSERT INTO Rel_Person_Paper (PersonID, PaperID) " + "VALUES (2, 2)"); stmt.execute("INSERT INTO Rel_Person_Paper (PersonID, PaperID) " + "VALUES (2, 3)"); ResultSet test; test = stmt.executeQuery("SELECT Persons.URI FROM Persons WHERE Persons.PersonID = 2"); assertTrue(test.next()); assertEquals("http://www.carson.id/brian", test.getString(1)); } public void testCreateRelationalModel() throws Exception { Session session = database.newSession(); try { session.createModel(testModelURI, relationalModelTypeURI); } finally { session.close(); } } public void testLoadRelationalDef() throws Exception { Session session = database.newSession(); try { session.setModel(testModelDefURI, new File("data/ISWC-d2rq.rdf").toURI()); } finally { session.close(); } } public void testBasicClassQuery() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Collections.singletonList(new Variable("s")); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintImpl(new Variable("s"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Person")), new URIReferenceImpl(testModelURI)), null, // HAVING Collections.singletonList(new Order(new Variable("s"), true)), // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.carson.id/brian")), answer.getObject(0)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.smith.id/albert")), answer.getObject(0)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testBasicPropertyQuery() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("s"), new Variable("fn") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("s"), true), new Order(new Variable("fn"), true) }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction( new ConstraintImpl(new Variable("s"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Person")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#firstName")), new Variable("fn"), new URIReferenceImpl(testModelURI))), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.carson.id/brian")), answer.getObject(0)); assertEquals(new LiteralImpl("Brian"), answer.getObject(1)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.smith.id/albert")), answer.getObject(0)); assertEquals(new LiteralImpl("Albert"), answer.getObject(1)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testDatePropertyQuery() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("title"), new Variable("date") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("title"), true), new Order(new Variable("date"), true) }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction(Arrays.asList(new ConstraintExpression[] { new ConstraintImpl(new Variable("conf"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Conference")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("conf"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#eventTitle")), new Variable("title"), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("conf"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#date")), new Variable("date"), new URIReferenceImpl(testModelURI)) })), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new LiteralImpl("Apes and Bears"), answer.getObject(0)); assertEquals(new LiteralImpl("2008-02-01", XSD.DATE_URI), answer.getObject(1)); assertTrue(answer.next()); assertEquals(new LiteralImpl("Cats and Donkeys"), answer.getObject(0)); assertEquals(new LiteralImpl("2008-04-03", XSD.DATE_URI), answer.getObject(1)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testBoundPropertyQuery() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("s") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("s"), true), }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction(Arrays.asList(new ConstraintExpression[] { new ConstraintImpl(new Variable("s"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Person")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#lastName")), new LiteralImpl("Smith"), new URIReferenceImpl(testModelURI)), })), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.smith.id/albert")), answer.getObject(0)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testBoundSubjectQuery() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("o") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("o"), true), }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction(Arrays.asList(new ConstraintExpression[] { new ConstraintImpl(new URIReferenceImpl(new URI("http://www.smith.id/albert")), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Person")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new URIReferenceImpl(new URI("http://www.smith.id/albert")), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#lastName")), new Variable("o"), new URIReferenceImpl(testModelURI)), })), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new LiteralImpl("Smith"), answer.getObject(0)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testConjPropertyQuery() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("s"), new Variable("fn") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("s"), true), new Order(new Variable("fn"), true) }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction(Arrays.asList(new ConstraintExpression[] { new ConstraintImpl(new Variable("s"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Person")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#firstName")), new Variable("fn"), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#lastName")), new LiteralImpl("Smith"), new URIReferenceImpl(testModelURI)), })), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); // assertTrue(answer.next()); // assertEquals(new URIReferenceImpl(new URI("http://www.carson.id/brian")), answer.getObject(0)); // assertEquals(new LiteralImpl("Brian"), answer.getObject(1)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.smith.id/albert")), answer.getObject(0)); assertEquals(new LiteralImpl("Albert"), answer.getObject(1)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testURIPatternQuery() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Collections.singletonList(new Variable("s")); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintImpl(new Variable("s"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Conference")), new URIReferenceImpl(testModelURI)), null, // HAVING Collections.singletonList(new Order(new Variable("s"), true)), // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://conferences.org/comp/confno1")), answer.getObject(0)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://conferences.org/comp/confno2")), answer.getObject(0)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testURIPatternPropertyQuery() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("s"), new Variable("loc") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("s"), true), new Order(new Variable("loc"), true) }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction( new ConstraintImpl(new Variable("s"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Conference")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#location")), new Variable("loc"), new URIReferenceImpl(testModelURI))), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://conferences.org/comp/confno1")), answer.getObject(0)); assertEquals(new LiteralImpl("Brisbane"), answer.getObject(1)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://conferences.org/comp/confno2")), answer.getObject(0)); assertEquals(new LiteralImpl("Dublin"), answer.getObject(1)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testBasicPredicateQuery() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("s"), new Variable("p") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("s"), true), new Order(new Variable("p"), true) }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction( new ConstraintImpl(new Variable("s"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Person")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new Variable("p"), new LiteralImpl("Brian"), new URIReferenceImpl(testModelURI))), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.carson.id/brian")), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#firstName")), answer.getObject(1)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testBasicPredicateObjectQuery() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("s"), new Variable("p"), new Variable("o") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("s"), true), new Order(new Variable("p"), true), new Order(new Variable("o"), true) }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction( new ConstraintImpl(new Variable("s"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Person")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new Variable("p"), new Variable("o"), new URIReferenceImpl(testModelURI))), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.carson.id/brian")), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#author_of")), answer.getObject(1)); assertEquals(new URIReferenceImpl(new URI("http://www.conference.org/conf02004/paper#Paper2")), answer.getObject(2)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.carson.id/brian")), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#author_of")), answer.getObject(1)); assertEquals(new URIReferenceImpl(new URI("http://www.conference.org/conf02004/paper#Paper3")), answer.getObject(2)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.carson.id/brian")), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#eMail")), answer.getObject(1)); assertEquals(new URIReferenceImpl(new URI("mailto:brian@email.com")), answer.getObject(2)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.carson.id/brian")), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#firstName")), answer.getObject(1)); assertEquals(new LiteralImpl("Brian"), answer.getObject(2)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.carson.id/brian")), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#lastName")), answer.getObject(1)); assertEquals(new LiteralImpl("Carson"), answer.getObject(2)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.smith.id/albert")), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#author_of")), answer.getObject(1)); assertEquals(new URIReferenceImpl(new URI("http://www.conference.org/conf02004/paper#Paper1")), answer.getObject(2)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.smith.id/albert")), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#author_of")), answer.getObject(1)); assertEquals(new URIReferenceImpl(new URI("http://www.conference.org/conf02004/paper#Paper2")), answer.getObject(2)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.smith.id/albert")), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#eMail")), answer.getObject(1)); assertEquals(new URIReferenceImpl(new URI("mailto:albert@email.com")), answer.getObject(2)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.smith.id/albert")), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#firstName")), answer.getObject(1)); assertEquals(new LiteralImpl("Albert"), answer.getObject(2)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.smith.id/albert")), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#lastName")), answer.getObject(1)); assertEquals(new LiteralImpl("Smith"), answer.getObject(2)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testCompoundPredicateVoidQuery() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("s"), new Variable("p"), new Variable("q") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("s"), true), new Order(new Variable("p"), true), new Order(new Variable("q"), true) }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction(Arrays.asList(new ConstraintExpression[] { new ConstraintImpl(new Variable("s"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Person")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new Variable("p"), new LiteralImpl("Brian"), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new Variable("q"), new LiteralImpl("Smith"), new URIReferenceImpl(testModelURI)), })), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testCompoundPredicateQuery() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("s"), new Variable("p"), new Variable("q") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("s"), true), new Order(new Variable("p"), true), new Order(new Variable("q"), true) }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction(Arrays.asList(new ConstraintExpression[] { new ConstraintImpl(new Variable("s"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Person")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new Variable("p"), new LiteralImpl("Brian"), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new Variable("q"), new LiteralImpl("Carson"), new URIReferenceImpl(testModelURI)), })), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.carson.id/brian")), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#firstName")), answer.getObject(1)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#lastName")), answer.getObject(2)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testCompoundPredicateObjectQuery() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("s"), new Variable("p"), new Variable("o") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("s"), true), new Order(new Variable("p"), true), new Order(new Variable("o"), true) }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction(Arrays.asList(new ConstraintExpression[] { new ConstraintImpl(new Variable("s"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Person")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new Variable("p"), new Variable("o"), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new Variable("q"), new LiteralImpl("Carson"), new URIReferenceImpl(testModelURI)), })), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.carson.id/brian")), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#author_of")), answer.getObject(1)); assertEquals(new URIReferenceImpl(new URI("http://www.conference.org/conf02004/paper#Paper2")), answer.getObject(2)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.carson.id/brian")), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#author_of")), answer.getObject(1)); assertEquals(new URIReferenceImpl(new URI("http://www.conference.org/conf02004/paper#Paper3")), answer.getObject(2)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.carson.id/brian")), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#eMail")), answer.getObject(1)); assertEquals(new URIReferenceImpl(new URI("mailto:brian@email.com")), answer.getObject(2)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.carson.id/brian")), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#firstName")), answer.getObject(1)); assertEquals(new LiteralImpl("Brian"), answer.getObject(2)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.carson.id/brian")), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#lastName")), answer.getObject(1)); assertEquals(new LiteralImpl("Carson"), answer.getObject(2)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testBasicPatternPropertyQuery() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("s"), new Variable("title") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("s"), true), new Order(new Variable("title"), true) }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction( new ConstraintImpl(new Variable("s"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#InProceedings")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#title")), new Variable("title"), new URIReferenceImpl(testModelURI))), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.conference.org/conf02004/paper#Paper1")), answer.getObject(0)); assertEquals(new LiteralImpl("Titel of the Paper: Apes and their Friends", "en"), answer.getObject(1)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.conference.org/conf02004/paper#Paper2")), answer.getObject(0)); assertEquals(new LiteralImpl("Titel of the Paper: Bears like us too", "en"), answer.getObject(1)); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.conference.org/conf02004/paper#Paper3")), answer.getObject(0)); assertEquals(new LiteralImpl("Titel of the Paper: Why Cats?", "en"), answer.getObject(1)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testBoundPatternPropertyQuery() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("s") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("s"), true), }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction(Arrays.asList(new ConstraintExpression[] { new ConstraintImpl(new Variable("s"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#InProceedings")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#title")), new LiteralImpl("Titel of the Paper: Why Cats?"), new URIReferenceImpl(testModelURI)), })), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://www.conference.org/conf02004/paper#Paper3")), answer.getObject(0)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testBoundPatternSubjectQuery() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("o") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("o"), true), }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction(Arrays.asList(new ConstraintExpression[] { new ConstraintImpl(new URIReferenceImpl(new URI("http://www.conference.org/conf02004/paper#Paper3")), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#InProceedings")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new URIReferenceImpl(new URI("http://www.conference.org/conf02004/paper#Paper3")), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#title")), new Variable("o"), new URIReferenceImpl(testModelURI)), })), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new LiteralImpl("Titel of the Paper: Why Cats?", "en"), answer.getObject(0)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testBasicReferWithJoinQuery() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("name"), new Variable("abstract") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("name"), true), new Order(new Variable("abstract"), true), }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction(Arrays.asList(new ConstraintExpression[] { new ConstraintImpl(new Variable("s"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Conference")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#eventTitle")), new Variable("name"), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("p"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#InProceedings")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("p"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#conference")), new Variable("s"), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("p"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#abstract")), new Variable("abstract"), new URIReferenceImpl(testModelURI)), })), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new LiteralImpl("Apes and Bears"), answer.getObject(0)); assertEquals(new LiteralImpl("Do we like Bears?"), answer.getObject(1)); assertTrue(answer.next()); assertEquals(new LiteralImpl("Apes and Bears"), answer.getObject(0)); assertEquals(new LiteralImpl("We like Apes"), answer.getObject(1)); assertTrue(answer.next()); assertEquals(new LiteralImpl("Cats and Donkeys"), answer.getObject(0)); assertEquals(new LiteralImpl("I prefer Donkeys"), answer.getObject(1)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testBasicReferWithJoinQueryAndPropPattern() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("name"), new Variable("abstract"), new Variable("title"), }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("name"), true), new Order(new Variable("abstract"), true), new Order(new Variable("title"), true), }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction(Arrays.asList(new ConstraintExpression[] { new ConstraintImpl(new Variable("s"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Conference")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#eventTitle")), new Variable("name"), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("p"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#InProceedings")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("p"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#conference")), new Variable("s"), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("p"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#abstract")), new Variable("abstract"), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("p"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#title")), new Variable("title"), new URIReferenceImpl(testModelURI)), })), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new LiteralImpl("Apes and Bears"), answer.getObject(0)); assertEquals(new LiteralImpl("Do we like Bears?"), answer.getObject(1)); assertEquals(new LiteralImpl("Titel of the Paper: Bears like us too", "en"), answer.getObject(2)); assertTrue(answer.next()); assertEquals(new LiteralImpl("Apes and Bears"), answer.getObject(0)); assertEquals(new LiteralImpl("We like Apes"), answer.getObject(1)); assertEquals(new LiteralImpl("Titel of the Paper: Apes and their Friends", "en"), answer.getObject(2)); assertTrue(answer.next()); assertEquals(new LiteralImpl("Cats and Donkeys"), answer.getObject(0)); assertEquals(new LiteralImpl("I prefer Donkeys"), answer.getObject(1)); assertEquals(new LiteralImpl("Titel of the Paper: Why Cats?", "en"), answer.getObject(2)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testBasicReferWithPropPattern() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("abstract"), new Variable("title"), }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("abstract"), true), new Order(new Variable("title"), true), }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction(Arrays.asList(new ConstraintExpression[] { new ConstraintImpl(new Variable("p"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#InProceedings")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("p"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#abstract")), new Variable("abstract"), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("p"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#title")), new Variable("title"), new URIReferenceImpl(testModelURI)), })), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new LiteralImpl("Do we like Bears?"), answer.getObject(0)); assertEquals(new LiteralImpl("Titel of the Paper: Bears like us too", "en"), answer.getObject(1)); assertTrue(answer.next()); assertEquals(new LiteralImpl("I prefer Donkeys"), answer.getObject(0)); assertEquals(new LiteralImpl("Titel of the Paper: Why Cats?", "en"), answer.getObject(1)); assertTrue(answer.next()); assertEquals(new LiteralImpl("We like Apes"), answer.getObject(0)); assertEquals(new LiteralImpl("Titel of the Paper: Apes and their Friends", "en"), answer.getObject(1)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testObjectReferWithMNJoin() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("title"), new Variable("author") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("title"), true), new Order(new Variable("author"), true), }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction(Arrays.asList(new ConstraintExpression[] { new ConstraintImpl(new Variable("per"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Person")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("pap"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#InProceedings")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("pap"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#title")), new Variable("title"), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("per"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#author_of")), new Variable("pap"), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("per"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#lastName")), new Variable("author"), new URIReferenceImpl(testModelURI)), })), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new LiteralImpl("Titel of the Paper: Apes and their Friends", "en"), answer.getObject(0)); assertEquals(new LiteralImpl("Smith"), answer.getObject(1)); assertTrue(answer.next()); assertEquals(new LiteralImpl("Titel of the Paper: Bears like us too", "en"), answer.getObject(0)); assertEquals(new LiteralImpl("Carson"), answer.getObject(1)); assertTrue(answer.next()); assertEquals(new LiteralImpl("Titel of the Paper: Bears like us too", "en"), answer.getObject(0)); assertEquals(new LiteralImpl("Smith"), answer.getObject(1)); assertTrue(answer.next()); assertEquals(new LiteralImpl("Titel of the Paper: Why Cats?", "en"), answer.getObject(0)); assertEquals(new LiteralImpl("Carson"), answer.getObject(1)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testObjectReferWithPK() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("author"), new Variable("paper") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("author"), true), new Order(new Variable("paper"), true), }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction(Arrays.asList(new ConstraintExpression[] { new ConstraintImpl(new Variable("per"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Person")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("per"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#lastName")), new Variable("author"), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("per"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#author_of")), new Variable("paper"), new URIReferenceImpl(testModelURI)), })), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new LiteralImpl("Carson"), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://www.conference.org/conf02004/paper#Paper2")), answer.getObject(1)); assertTrue(answer.next()); assertEquals(new LiteralImpl("Carson"), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://www.conference.org/conf02004/paper#Paper3")), answer.getObject(1)); assertTrue(answer.next()); assertEquals(new LiteralImpl("Smith"), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://www.conference.org/conf02004/paper#Paper1")), answer.getObject(1)); assertTrue(answer.next()); assertEquals(new LiteralImpl("Smith"), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://www.conference.org/conf02004/paper#Paper2")), answer.getObject(1)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testBasicQueryWithAdditionalProperty() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("title"), new Variable("seeAlso") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("title"), true), new Order(new Variable("seeAlso"), true), }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction(Arrays.asList(new ConstraintExpression[] { new ConstraintImpl(new Variable("s"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Conference")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new URIReferenceImpl(new URI("http://www.w3.org/1999/02/22-rdf-syntax-ns#seeAlso")), new Variable("seeAlso"), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#eventTitle")), new Variable("title"), new URIReferenceImpl(testModelURI)), })), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new LiteralImpl("Apes and Bears"), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml")), answer.getObject(1)); assertTrue(answer.next()); assertEquals(new LiteralImpl("Cats and Donkeys"), answer.getObject(0)); assertEquals(new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml")), answer.getObject(1)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testCreateRelationalModel2() throws Exception { Session session = database.newSession(); try { session.createModel(testModel2URI, relationalModelTypeURI); } finally { session.close(); } } public void testLoadRelationalDef2() throws Exception { Session session = database.newSession(); try { session.setModel(testModel2DefURI, new File("data/ISWC-d2rq.rdf").toURI()); } finally { session.close(); } } public void testDualDatabaseQuery() throws Exception { Session session = database.newSession(); try { List<Variable> selectList = Arrays.asList(new Variable[] { new Variable("s"), new Variable("loc") }); List<Order> orderList = Arrays.asList(new Order[] { new Order(new Variable("s"), true), new Order(new Variable("loc"), true) }); Answer answer = session.query(new Query( selectList, // SELECT new GraphResource(systemModelURI), // FROM new ConstraintConjunction(Arrays.asList(new ConstraintExpression[] { new ConstraintImpl(new Variable("s"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Conference")), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#eventTitle")), new LiteralImpl("Apes and Bears"), new URIReferenceImpl(testModelURI)), new ConstraintImpl(new Variable("s"), new URIReferenceImpl(RDF.TYPE), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#Conference")), new URIReferenceImpl(testModel2URI)), new ConstraintImpl(new Variable("s"), new URIReferenceImpl(new URI("http://annotation.semanticweb.org/iswc/iswc.daml#location")), new Variable("loc"), new URIReferenceImpl(testModel2URI))})), null, // HAVING orderList, // ORDER BY null, // LIMIT 0, // OFFSET true, // DISTINCT new UnconstrainedAnswer() // GIVEN )); answer.beforeFirst(); assertTrue(answer.next()); assertEquals(new URIReferenceImpl(new URI("http://conferences.org/comp/confno1")), answer.getObject(0)); assertEquals(new LiteralImpl("Brisbane"), answer.getObject(1)); assertFalse(answer.next()); answer.close(); } finally { session.close(); } } public void testDeleteDatabase() { database.delete(); database = null; } }