Package com.google.refine.test.org.deri.reconcile.executors

Source Code of com.google.refine.test.org.deri.reconcile.executors.PlainSparqlQueryExecutorTest

package com.google.refine.test.org.deri.reconcile.executors;

import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;

import java.io.InputStream;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

import org.testng.annotations.BeforeClass;
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.executors.DumpQueryExecutor;
import com.google.refine.org.deri.reconcile.rdf.executors.QueryExecutor;
import com.google.refine.org.deri.reconcile.rdf.factories.PlainSparqlQueryFactory;
import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Resource;

public class PlainSparqlQueryExecutorTest {

  QueryExecutor executor;
  PlainSparqlQueryFactory factory;
 
  //query
  int limit =8;
  String queryString = "godfather";
  String exactMatchQueryString = "Godfather";
  ImmutableList<String> searchPropertyUris = ImmutableList.of("http://www.w3.org/2000/01/rdf-schema#label",
                            "http://www.w3.org/2004/02/skos/core#prefLabel");
 
  @BeforeClass
  public void setUp(){
    Model m = ModelFactory.createDefaultModel();
    InputStream in = this.getClass().getResourceAsStream("../files/films.ttl");
    m.read(in,null,"TTL");
   
    executor = new DumpQueryExecutor(m);
    factory = new PlainSparqlQueryFactory();
  }
 
  @Test
  public void executeSimpleReconciliationQuery(){
    ReconciliationRequest request = new ReconciliationRequest(queryString, limit);
    String sparql = factory.getReconciliationSparqlQuery(request, searchPropertyUris);
    ResultSet resultset = executor.sparql(sparql);
    assertResult(null,resultset,"http://data.linkedmdb.org/resource/film/930","http://data.linkedmdb.org/resource/film/329",
    "http://data.linkedmdb.org/resource/film_series/261");
  }
 
  @Test
  public void executeOneLabelOneTypeReconciliationQuery(){
    ReconciliationRequest request = new ReconciliationRequest(queryString, limit);
    request.setTypes(new String[] {"http://data.linkedmdb.org/resource/movie/film"});
    String sparql = factory.getReconciliationSparqlQuery(request, ImmutableList.of("http://www.w3.org/2000/01/rdf-schema#label"));
    ResultSet resultset = executor.sparql(sparql);
    assertResult(null,resultset,"http://data.linkedmdb.org/resource/film/930","http://data.linkedmdb.org/resource/film/329");
  }
 
  @Test
  public void executeReconciliationQueryWithType(){
    ReconciliationRequest request = new ReconciliationRequest(queryString, limit);
    request.setTypes(new String[] {"http://data.linkedmdb.org/resource/movie/film"});
    String sparql = factory.getReconciliationSparqlQuery(request, searchPropertyUris);
    ResultSet resultset = executor.sparql(sparql);
    assertResult("http://data.linkedmdb.org/resource/film_series/261", resultset,"http://data.linkedmdb.org/resource/film/930","http://data.linkedmdb.org/resource/film/329");
  }
 
  @Test
  public void executeSimpleExactMatchReconciliationQuery(){
    ReconciliationRequest request = new ReconciliationRequest(exactMatchQueryString, limit);
    String sparql = factory.getExactMatchReconciliationSparqlQuery(request, searchPropertyUris);
    ResultSet resultset = executor.sparql(sparql);
    assertResult("http://data.linkedmdb.org/resource/film/329",resultset,"http://data.linkedmdb.org/resource/film/930");
  }
 
  @Test
  public void executeOneLabelOneTypeExactMatchReconciliationQuery(){
    ReconciliationRequest request = new ReconciliationRequest(exactMatchQueryString, limit);
    request.setTypes(new String[] {"http://data.linkedmdb.org/resource/movie/film"});
    String sparql = factory.getExactMatchReconciliationSparqlQuery(request, ImmutableList.of("http://www.w3.org/2000/01/rdf-schema#label"));
    ResultSet resultset = executor.sparql(sparql);
    assertResult("http://data.linkedmdb.org/resource/film/329",resultset,"http://data.linkedmdb.org/resource/film/930");
  }
 
  @Test
  public void executeExactMatchReconciliationQueryWithType(){
    ReconciliationRequest request = new ReconciliationRequest(exactMatchQueryString, limit);
    request.setTypes(new String[] {"http://data.linkedmdb.org/resource/movie/film"});
    String sparql = factory.getExactMatchReconciliationSparqlQuery(request, searchPropertyUris);
    ResultSet resultset = executor.sparql(sparql);
    assertResult("http://data.linkedmdb.org/resource/film_series/261", resultset,"http://data.linkedmdb.org/resource/film/930");
  }

  @Test
  public void executeExactMatchWithContextReconciliationQueryWithType(){
    ReconciliationRequest request = new ReconciliationRequest(exactMatchQueryString, limit);
    request.setTypes(new String[] {"http://data.linkedmdb.org/resource/movie/film"});
    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));
    String sparql = factory.getExactMatchReconciliationSparqlQuery(request, searchPropertyUris);
    ResultSet resultset = executor.sparql(sparql);
    assertTrue(!resultset.hasNext());//empty result
  }
 
  private void assertResult(String notContainedUri, ResultSet resultset, String... containedUris){
    Set<String> urisSet = new HashSet<String>(Arrays.asList(containedUris));
    while(resultset.hasNext()){
      QuerySolution solution = resultset.nextSolution();
      Resource r = solution.getResource("entity");
      String uri = r.getURI();
      urisSet.remove(uri);
      if(uri.equals(notContainedUri)){
        fail(notContainedUri + " was found in the result") ;
      }
    }
   
    assertTrue(urisSet.isEmpty(), urisSet + " were not found in the result");
  }
 
 
  /*
   * Suggest type
   */
  @Test
  public void sugestTypeTest(){
    String prefix = "fil";
    String sparql = factory.getTypeSuggestSparqlQuery(prefix, limit);
    ResultSet resultset = executor.sparql(sparql);
    assertResultsetExact("type",resultset,"http://data.linkedmdb.org/resource/movie/film");
  }
 
  private void assertResultsetExact(String propertyName, ResultSet resultset, String... containedUris){
    Set<String> urisSet = new HashSet<String>(Arrays.asList(containedUris));
    while(resultset.hasNext()){
      QuerySolution solution = resultset.nextSolution();
      Resource r = solution.getResource(propertyName);
      String uri = r.getURI();
      assertTrue(urisSet.remove(uri));
    }
   
    assertTrue(urisSet.isEmpty(), urisSet + " were not found in the result");
  }
 
  /*
   * Suggest property
   */
  @Test
  public void sugestPropertyTest(){
    String prefix = "init";
    String sparql = factory.getPropertySuggestSparqlQuery(prefix, "http://data.linkedmdb.org/resource/movie/film", limit);
    ResultSet resultset = executor.sparql(sparql);
    assertResultsetExact("p", resultset,"http://data.linkedmdb.org/resource/movie/initial_release_date");
  }
 
  /*
   * search entity
   */
  @Test
  public void searchEntityTest(){
    String prefix = "godf";
    String sparql = factory.getEntitySearchSparqlQuery(prefix, searchPropertyUris, limit);
    ResultSet resultset = executor.sparql(sparql);
    assertResult(null,resultset,"http://data.linkedmdb.org/resource/film/930","http://data.linkedmdb.org/resource/film/329",
    "http://data.linkedmdb.org/resource/film_series/261");
  }
}
TOP

Related Classes of com.google.refine.test.org.deri.reconcile.executors.PlainSparqlQueryExecutorTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.