package com.mysema.rdfbean.sesame; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.io.StringWriter; import java.util.Arrays; import java.util.Map; import org.junit.Before; import org.junit.Test; import com.mysema.commons.lang.CloseableIterator; import com.mysema.rdfbean.TEST; import com.mysema.rdfbean.domains.EntityRevisionTermDomain; import com.mysema.rdfbean.domains.EntityRevisionTermDomain.Entity; import com.mysema.rdfbean.domains.EntityRevisionTermDomain.EntityRevision; import com.mysema.rdfbean.domains.EntityRevisionTermDomain.Term; import com.mysema.rdfbean.model.Format; import com.mysema.rdfbean.model.NODE; import com.mysema.rdfbean.model.QueryLanguage; import com.mysema.rdfbean.model.RDF; import com.mysema.rdfbean.model.SPARQLQuery; import com.mysema.rdfbean.model.STMT; import com.mysema.rdfbean.model.UID; import com.mysema.rdfbean.testutil.SessionConfig; @SessionConfig({ Entity.class, EntityRevision.class, Term.class }) public class SPARQLQueryTest extends SessionTestBase implements EntityRevisionTermDomain { @Before public void setUp() { Entity entity = new Entity(); EntityRevision revision = new EntityRevision(); Term term = new Term(); session.saveAll(entity, revision, term); session.flush(); } @Test public void Ask() { SPARQLQuery query = session.createQuery(QueryLanguage.SPARQL, "ASK { ?s ?p ?o }"); assertEquals(SPARQLQuery.ResultType.BOOLEAN, query.getResultType()); assertTrue(query.getBoolean()); } @Test public void Ask_with_False_result() { SPARQLQuery query = session.createQuery(QueryLanguage.SPARQL, "ASK { ?s <test:test> ?o }"); assertEquals(SPARQLQuery.ResultType.BOOLEAN, query.getResultType()); assertFalse(query.getBoolean()); } @Test public void Select() { SPARQLQuery query = session.createQuery(QueryLanguage.SPARQL, "SELECT ?s ?p ?o WHERE {?s ?p ?o}"); assertEquals(SPARQLQuery.ResultType.TUPLES, query.getResultType()); assertEquals(Arrays.asList("s", "p", "o"), query.getVariables()); CloseableIterator<Map<String, NODE>> rows = query.getTuples(); assertTrue(rows.hasNext()); while (rows.hasNext()) { Map<String, NODE> row = rows.next(); System.out.println(row.get("s") + " " + row.get("p") + " " + row.get("o")); } rows.close(); } @Test public void Select_with_QueryTime() { SPARQLQuery query = session.createQuery(QueryLanguage.SPARQL, "SELECT ?s ?p ?o WHERE {?s ?p ?o}"); query.setMaxQueryTime(1); CloseableIterator<Map<String, NODE>> rows = query.getTuples(); assertTrue(rows.hasNext()); while (rows.hasNext()) { rows.next(); } rows.close(); } @Test public void Select_with_Bindings() { SPARQLQuery query = session.createQuery(QueryLanguage.SPARQL, "SELECT ?s ?p ?o WHERE {?s ?p ?o}"); query.setBinding("p", RDF.type); CloseableIterator<Map<String, NODE>> rows = query.getTuples(); assertTrue(rows.hasNext()); while (rows.hasNext()) { Map<String, NODE> row = rows.next(); assertEquals(RDF.type, row.get("p")); } rows.close(); } @Test public void Select_with_Bindings_no_Match() { SPARQLQuery query = session.createQuery(QueryLanguage.SPARQL, "SELECT ?s ?p ?o WHERE {?s ?p ?o} LIMIT 10"); query.setBinding("p", new UID(TEST.NS, "p" + System.currentTimeMillis())); CloseableIterator<Map<String, NODE>> rows = query.getTuples(); try { assertFalse(rows.hasNext()); } finally { rows.close(); } } @Test public void Select_with_Bindings_in_Projection() { SPARQLQuery query = session.createQuery(QueryLanguage.SPARQL, "SELECT ?s ?type ?o WHERE {?s ?p ?o}"); query.setBinding("type", RDF.type); CloseableIterator<Map<String, NODE>> rows = query.getTuples(); assertTrue(rows.hasNext()); while (rows.hasNext()) { Map<String, NODE> row = rows.next(); assertEquals(RDF.type, row.get("type")); } rows.close(); } @Test public void Construct() { SPARQLQuery query = session.createQuery(QueryLanguage.SPARQL, "CONSTRUCT { ?s ?p ?o } WHERE {?s ?p ?o}"); assertEquals(SPARQLQuery.ResultType.TRIPLES, query.getResultType()); CloseableIterator<STMT> triples = query.getTriples(); assertTrue(triples.hasNext()); while (triples.hasNext()) { STMT triple = triples.next(); System.out.println(triple); } triples.close(); } @Test public void Construct_Multiple_Patterns() { SPARQLQuery query = session.createQuery(QueryLanguage.SPARQL, "CONSTRUCT { ?s ?p ?o . ?s ?p2 ?type } " + "WHERE {?s ?p ?o . ?s ?p2 ?type } LIMIT 10"); assertEquals(SPARQLQuery.ResultType.TRIPLES, query.getResultType()); CloseableIterator<STMT> triples = query.getTriples(); assertTrue(triples.hasNext()); while (triples.hasNext()) { STMT triple = triples.next(); System.out.println(triple); } triples.close(); } @Test public void Construct_Stream_Triples() { SPARQLQuery query = session.createQuery(QueryLanguage.SPARQL, "CONSTRUCT { ?s ?p ?o } WHERE {?s ?p ?o}"); assertEquals(SPARQLQuery.ResultType.TRIPLES, query.getResultType()); StringWriter w = new StringWriter(); query.streamTriples(w, Format.RDFXML.getMimetype()); assertTrue(w.toString().contains("rdf:RDF")); } @Test public void Select_and_Describe() { SPARQLQuery query = session.createQuery(QueryLanguage.SPARQL, "SELECT ?s WHERE {?s ?p ?o}"); CloseableIterator<Map<String, NODE>> rows = query.getTuples(); assertEquals(Arrays.asList("s"), query.getVariables()); assertTrue(rows.hasNext()); while (rows.hasNext()) { Map<String, NODE> row = rows.next(); NODE subject = row.get("s"); if (subject.isURI()) { SPARQLQuery describe = session.createQuery(QueryLanguage.SPARQL, "DESCRIBE <" + subject.getValue() + ">"); CloseableIterator<STMT> triples = describe.getTriples(); assertTrue(triples.hasNext()); while (triples.hasNext()) { STMT triple = triples.next(); System.out.println(triple); } triples.close(); } } } }