package org.openrdf.query.algebra.evaluation.impl;
import junit.framework.TestCase;
import org.openrdf.model.BNode;
import org.openrdf.model.Literal;
import org.openrdf.model.URI;
import org.openrdf.model.ValueFactory;
import org.openrdf.query.QueryLanguage;
import org.openrdf.query.TupleQuery;
import org.openrdf.query.TupleQueryResult;
import org.openrdf.repository.Repository;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.sail.SailRepository;
import org.openrdf.sail.memory.MemoryStore;
public class SparqlRegexTest extends TestCase {
public String queryInline = "PREFIX foaf: <http://xmlns.com/foaf/0.1/>\n"
+ "SELECT ?name ?mbox\n" + " WHERE { ?x foaf:name ?name ;\n"
+ " foaf:mbox ?mbox .\n"
+ " FILTER regex(str(?mbox), \"@Work.example\", \"i\") }";
public String queryBinding = "PREFIX foaf: <http://xmlns.com/foaf/0.1/>\n"
+ "SELECT ?name ?mbox\n" + " WHERE { ?x foaf:name ?name ;\n"
+ " foaf:mbox ?mbox .\n"
+ " FILTER regex(str(?mbox), ?pattern) }";
public String queryBindingFlags = "PREFIX foaf: <http://xmlns.com/foaf/0.1/>\n"
+ "SELECT ?name ?mbox\n"
+ " WHERE { ?x foaf:name ?name ;\n"
+ " foaf:mbox ?mbox .\n"
+ " FILTER regex(str(?mbox), ?pattern, ?flags) }";
public String queryExpr = "PREFIX foaf: <http://xmlns.com/foaf/0.1/>\n"
+ "SELECT ?name ?mbox\n" + " WHERE { ?x foaf:name ?name ;\n"
+ " foaf:mbox ?mbox .\n"
+ " ?y <http://example.org/ns#pattern> ?pattern .\n"
+ " ?y <http://example.org/ns#flags> ?flags .\n"
+ " FILTER regex(str(?mbox), ?pattern, ?flags) }";
private Repository repository;
private RepositoryConnection conn;
private ValueFactory vf;
private Literal hunt;
public void testInline() throws Exception {
TupleQuery query = conn.prepareTupleQuery(QueryLanguage.SPARQL,
queryInline);
TupleQueryResult result = query.evaluate();
assertEquals(hunt, result.next().getValue("name"));
assertFalse(result.hasNext());
result.close();
}
public void testBinding() throws Exception {
TupleQuery query = conn.prepareTupleQuery(QueryLanguage.SPARQL,
queryBinding);
query.setBinding("pattern", vf.createLiteral("@work.example"));
TupleQueryResult result = query.evaluate();
assertEquals(hunt, result.next().getValue("name"));
assertFalse(result.hasNext());
result.close();
}
public void testBindingFlags() throws Exception {
TupleQuery query = conn.prepareTupleQuery(QueryLanguage.SPARQL,
queryBindingFlags);
query.setBinding("pattern", vf.createLiteral("@Work.example"));
query.setBinding("flags", vf.createLiteral("i"));
TupleQueryResult result = query.evaluate();
assertEquals(hunt, result.next().getValue("name"));
assertFalse(result.hasNext());
result.close();
}
public void testExpr() throws Exception {
URI pattern = vf.createURI("http://example.org/ns#", "pattern");
URI flags = vf.createURI("http://example.org/ns#", "flags");
BNode bnode = vf.createBNode();
conn.add(bnode, pattern, vf.createLiteral("@Work.example"));
conn.add(bnode, flags, vf.createLiteral("i"));
TupleQuery query = conn.prepareTupleQuery(QueryLanguage.SPARQL,
queryExpr);
TupleQueryResult result = query.evaluate();
assertEquals(hunt, result.next().getValue("name"));
assertFalse(result.hasNext());
result.close();
}
@Override
protected void setUp() throws Exception {
repository = new SailRepository(new MemoryStore());
repository.initialize();
vf = repository.getValueFactory();
hunt = vf.createLiteral("James Leigh Hunt");
createUser("james", "James Leigh", "james@leigh");
createUser("megan", "Megan Leigh", "megan@leigh");
createUser("hunt", "James Leigh Hunt", "james@work.example");
conn = repository.getConnection();
}
@Override
protected void tearDown() throws Exception {
conn.close();
repository.shutDown();
}
private void createUser(String id, String name, String email)
throws RepositoryException {
RepositoryConnection conn = repository.getConnection();
URI subj = vf.createURI("http://example.org/ns#", id);
URI foafName = vf.createURI("http://xmlns.com/foaf/0.1/", "name");
URI foafMbox = vf.createURI("http://xmlns.com/foaf/0.1/", "mbox");
conn.add(subj, foafName, vf.createLiteral(name));
conn.add(subj, foafMbox, vf.createURI("mailto:", email));
conn.close();
}
}