package com.google.refine.test.org.deri.reconcile.factories;
import static org.testng.Assert.assertEquals;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import com.google.refine.org.deri.reconcile.model.ReconciliationRequest;
import com.google.refine.org.deri.reconcile.model.ReconciliationRequestContext;
import com.google.refine.org.deri.reconcile.model.ReconciliationRequestContext.IdentifiedValueContext;
import com.google.refine.org.deri.reconcile.model.ReconciliationRequestContext.PropertyContext;
import com.google.refine.org.deri.reconcile.model.ReconciliationRequestContext.TextualValueContext;
import com.google.refine.org.deri.reconcile.rdf.factories.BigOwlImSparqlQueryFactory;
import com.google.refine.org.deri.reconcile.rdf.factories.SparqlQueryFactory;
public class BigOwlImSparqlQueryFactoryTest {
int limit = 10;
String query = "Fadi Maali";
SparqlQueryFactory factory ;
@BeforeMethod
public void setUp(){
factory = new BigOwlImSparqlQueryFactory();
}
@Test
public void oneLabelTest(){
ReconciliationRequest request = new ReconciliationRequest(query, limit);
//this will assure that empty string for type is ignored
request.setTypes(new String[] {""});
ImmutableList<String> searchPropertyUris = ImmutableList.of("http://www.w3.org/2000/01/rdf-schema#label");
String sparql = factory.getReconciliationSparqlQuery(request, searchPropertyUris);
String expected =
"PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "+
"SELECT ?entity ?label " +
"WHERE" +
"{" +
"?entity <http://www.w3.org/2000/01/rdf-schema#label> ?label. " +
"?entity <http://www.ontotext.com/luceneQuery> \"" + query + "\". " +
"FILTER (isIRI(?entity))" +
"}LIMIT " + String.valueOf(limit * searchPropertyUris.size());
assertEquals(sparql, expected);
}
@Test
public void oneLabelWithTypeTest(){
ReconciliationRequest request = new ReconciliationRequest(query, limit);
//this will assure that empty string for type is ignored
request.setTypes(new String[] {"http://xmlns.com/foaf/0.1/Person" , "http://example.org/ontology/Person"});
ImmutableList<String> searchPropertyUris = ImmutableList.of("http://www.w3.org/2000/01/rdf-schema#label");
String sparql = factory.getReconciliationSparqlQuery(request, searchPropertyUris);
String expected =
"PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "+
"SELECT ?entity ?label " +
"WHERE" +
"{" +
"?entity <http://www.w3.org/2000/01/rdf-schema#label> ?label. " +
"?entity <http://www.ontotext.com/luceneQuery> \"" + query + "\". " +
"{" +
"{?entity rdf:type <http://xmlns.com/foaf/0.1/Person>. } " +
"UNION " +
"{?entity rdf:type <http://example.org/ontology/Person>. }" +
"} " +
"FILTER (isIRI(?entity))" +
"}LIMIT " + String.valueOf(limit * searchPropertyUris.size());
assertEquals(sparql, expected);
}
@Test
public void oneLabelWithTypeWithContextTest(){
ReconciliationRequest request = new ReconciliationRequest(query, limit);
//this will assure that empty string for type is ignored
request.setTypes(new String[] {"http://xmlns.com/foaf/0.1/Person" , "http://example.org/ontology/Person"});
PropertyContext prop1 = new PropertyContext("http://example.org/ontology/worksFor", new IdentifiedValueContext("http://example.org/resource/DERI"));
PropertyContext prop2 = new PropertyContext("http://xmlns.com/foaf/0.1/nick", new TextualValueContext("fadmaa"));
request.setContext(new ReconciliationRequestContext(prop1, prop2));
ImmutableList<String> searchPropertyUris = ImmutableList.of("http://www.w3.org/2000/01/rdf-schema#label");
String sparql = factory.getReconciliationSparqlQuery(request, searchPropertyUris);
String expected =
"PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "+
"SELECT ?entity ?label " +
"WHERE" +
"{" +
"?entity <http://www.w3.org/2000/01/rdf-schema#label> ?label. " +
"?entity <http://www.ontotext.com/luceneQuery> \"" + query + "\". " +
"{" +
"{?entity rdf:type <http://xmlns.com/foaf/0.1/Person>. } " +
"UNION " +
"{?entity rdf:type <http://example.org/ontology/Person>. }" +
"}" +
"?entity <http://example.org/ontology/worksFor> <http://example.org/resource/DERI>. " +
"?entity <http://xmlns.com/foaf/0.1/nick> 'fadmaa'. " +
" FILTER (isIRI(?entity))" +
"}LIMIT " + String.valueOf(limit * searchPropertyUris.size());
assertEquals(sparql, expected);
}
@Test
public void multiLabelsTest(){
ReconciliationRequest request = new ReconciliationRequest(query, limit);
ImmutableList<String> searchPropertyUris = ImmutableList.of("http://www.w3.org/2000/01/rdf-schema#label" ,
"http://www.w3.org/2004/02/skos/core#prefLabel");
String sparql = factory.getReconciliationSparqlQuery(request, searchPropertyUris);
String expected =
"PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "+
"SELECT ?entity ?label " +
"WHERE" +
"{" +
"?entity ?p ?label. " +
"?entity <http://www.ontotext.com/luceneQuery> \"" + query + "\". " +
"FILTER (?p=<http://www.w3.org/2000/01/rdf-schema#label> || ?p=<http://www.w3.org/2004/02/skos/core#prefLabel>) " +
"FILTER (isIRI(?entity))" +
"}LIMIT " + String.valueOf(limit * searchPropertyUris.size());
assertEquals(sparql, expected);
}
@Test
public void multiLabelsWithTypeTest(){
ReconciliationRequest request = new ReconciliationRequest(query, limit);
request.setTypes(new String[] {"http://xmlns.com/foaf/0.1/Person" });
ImmutableList<String> searchPropertyUris = ImmutableList.of("http://www.w3.org/2000/01/rdf-schema#label" ,
"http://www.w3.org/2004/02/skos/core#prefLabel");
String sparql = factory.getReconciliationSparqlQuery(request, searchPropertyUris);
String expected =
"PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "+
"SELECT ?entity ?label " +
"WHERE" +
"{" +
"?entity ?p ?label. " +
"?entity <http://www.ontotext.com/luceneQuery> \"" + query + "\". " +
"FILTER (?p=<http://www.w3.org/2000/01/rdf-schema#label> || ?p=<http://www.w3.org/2004/02/skos/core#prefLabel>) " +
"{" +
"{?entity rdf:type <http://xmlns.com/foaf/0.1/Person>. }" +
"} " +
"FILTER (isIRI(?entity))" +
"}LIMIT " + String.valueOf(limit * searchPropertyUris.size());
assertEquals(sparql, expected);
}
/*
* SUGGEST TYPE TESTS
*/
@Test
public void suggestTypeTest(){
String prefix = "Person";
String sparql = factory.getTypeSuggestSparqlQuery(prefix, limit);
String expected =
"SELECT DISTINCT ?type ?label1 " +
"WHERE{" +
"[] a ?type. " +
"?type <http://www.w3.org/2000/01/rdf-schema#label> ?label1. " +
"?type <http://www.ontotext.com/luceneQuery> \"" + prefix + "*\". " +
"} LIMIT " + limit;
assertEquals(sparql, expected);
}
/*
* SUGGEST PROPERTY TESTS
*/
@Test
public void suggestPropertyTest(){
String prefix = "firstn";
String typeUri = "http://xmlns.com/foaf/0.1/Person";
String sparql = factory.getPropertySuggestSparqlQuery(prefix, typeUri, limit);
String expected =
"SELECT DISTINCT ?p ?label1 " +
"WHERE{" +
"[] a <" + typeUri + ">;" +
"?p ?o. " +
"?p <http://www.w3.org/2000/01/rdf-schema#label> ?label1. " +
"?p <http://www.ontotext.com/luceneQuery> \"" + prefix + "*\". " +
"} LIMIT " + limit;
assertEquals(sparql, expected);
}
}