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

Source Code of com.google.refine.test.org.deri.reconcile.endpoints.PlainSparqlEndpointTest

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

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

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

import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import com.google.common.collect.ImmutableList;
import com.google.refine.org.deri.reconcile.model.ReconciliationCandidate;
import com.google.refine.org.deri.reconcile.model.ReconciliationRequest;
import com.google.refine.org.deri.reconcile.model.SearchResultItem;
import com.google.refine.org.deri.reconcile.rdf.endpoints.PlainSparqlQueryEndpoint;
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.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;

public class PlainSparqlEndpointTest {

  QueryExecutor executor;
  PlainSparqlQueryFactory factory;
  PlainSparqlQueryEndpoint endpoint;
 
  //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");
 
  @BeforeMethod
  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();
    endpoint = new PlainSparqlQueryEndpoint(factory, executor);
  }
 
  @Test
  public void executeSimpleReconciliationQuery(){
    ReconciliationRequest request = new ReconciliationRequest(queryString, limit);
    List<ReconciliationCandidate> candidates = endpoint.reconcileEntities(request, searchPropertyUris, 1.0);
    assertResultInOrder(null,candidates,"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 executeSimpleReconciliationQueryWithType(){
    ReconciliationRequest request = new ReconciliationRequest(queryString, limit);
    request.setTypes(new String[] {"http://data.linkedmdb.org/resource/movie/film"});
    List<ReconciliationCandidate> candidates = endpoint.reconcileEntities(request, searchPropertyUris, 1.0);
    assertResultInOrder("http://data.linkedmdb.org/resource/film_series/261",candidates,"http://data.linkedmdb.org/resource/film/930","http://data.linkedmdb.org/resource/film/329");
  }
 
  @Test
  public void executeExactMatchReconciliationQueryWithType(){
    ReconciliationRequest request = new ReconciliationRequest(exactMatchQueryString, limit);
    request.setTypes(new String[] {"http://data.linkedmdb.org/resource/movie/film"});
    List<ReconciliationCandidate> candidates = endpoint.reconcileEntities(request, searchPropertyUris, 1.0);
    assertTrue(candidates.size()>0);
    asserrtResultContainsWithScoreOne(candidates,"http://data.linkedmdb.org/resource/film/930");
  }
 
  @Test
  public void executeExactMatchReconciliationQuery(){
    ReconciliationRequest request = new ReconciliationRequest(exactMatchQueryString, limit);
    List<ReconciliationCandidate> candidates = endpoint.reconcileEntities(request, searchPropertyUris, 1.0);
    asserrtResultContainsWithScoreOne(candidates,"http://data.linkedmdb.org/resource/film/930");
  }
 
  @Test
  public void noMoreThanOneMatch(){
    ReconciliationRequest request = new ReconciliationRequest("Anjali", limit);
    request.setTypes(new String[] {"http://data.linkedmdb.org/resource/movie/film"});
    List<ReconciliationCandidate> candidates = endpoint.reconcileEntities(request, searchPropertyUris, 1.0);
    assertResultContainsWithScoreOneButNoMatch(candidates,"http://data.linkedmdb.org/resource/film/2410","http://data.linkedmdb.org/resource/film/test/2410");
  }
 
  private void assertResultInOrder(String notContainedUri, List<ReconciliationCandidate> candidates, String... containedUris){
    List<String> urisList = new ArrayList<String>(Arrays.asList(containedUris));
    List<String> actuals = new ArrayList<String>();
    for(ReconciliationCandidate candidate: candidates){
      String uri = candidate.getId();
      actuals.add(uri);
      if(urisList.get(0).equals(uri)){
        urisList.remove(0);
        if(urisList.isEmpty()){
          //all are removed ==> success
          break;
        }
      }
      if(uri.equals(notContainedUri)){
        fail(notContainedUri + " was found in the result") ;
      }
    }
   
    assertTrue(urisList.isEmpty(), urisList + " were not found in the result or were not in the correct order we got this list instead " + actuals);
  }
 
  private void asserrtResultContainsWithScoreOne(List<ReconciliationCandidate> candidates, String containedUri){
   
    for(ReconciliationCandidate candidate: candidates){
      String uri = candidate.getId();
      if(uri.equals(containedUri)){
        if(candidate.equals(uri)){
          //make sure the score is one
          assertEquals(candidate.getScore(), 1.0d);
        }
        return;
      }
    }
    fail(containedUri + " was not found!");
  }
 
  private void assertResultContainsWithScoreOneButNoMatch(List<ReconciliationCandidate> candidates, String... containedUri){
    Set<String> urisSet = new HashSet<String>(Arrays.asList(containedUri));
    for(ReconciliationCandidate candidate: candidates){
      String uri = candidate.getId();
      if(urisSet.contains(uri)){
        //assure score = 1 and match = false
        assertEquals(candidate.getScore(), 1.0d);
        assertFalse(candidate.isMatch());
       
        urisSet.remove(uri);
      }
    }
    assertTrue(urisSet.isEmpty());
  }
 
  /*
   * Guess type
   */
  /*@Test
  public void guessTypeTest(){
    Model m = ModelFactory.createDefaultModel();
    InputStream in = this.getClass().getResourceAsStream("../files/sample.ttl");
    m.read(in,null,"TTL");
   
    DumpQueryExecutor executor = new DumpQueryExecutor(m);
    PlainSparqlQueryFactory factory = new PlainSparqlQueryFactory();
   
    QueryEndpoint endpoint = new QueryEndpointImpl(factory, executor);
    ImmutableList<String> searchPropertyUris = ImmutableList.of("http://www.w3.org/2000/01/rdf-schema#label");
   
    LinkedHashMultimap<String, String> typesMap = endpoint.guessType("sample", searchPropertyUris, 3);
    //TODO testing.. the dump way
    Set<String> keys = typesMap.keySet();
    //order is significant, thus toArray
    assertEquals(keys.toArray(new String[keys.size()]), new String[] {"http://example.org/resource/film/137",
                                "http://example.org/resource/film/200",
                                "http://example.org/resource/film/110"});
   
    //for types, order is insignificant
    Set<String> expectedTypes = new HashSet<String>();
    expectedTypes.add("http://example.org/sample/Movie");expectedTypes.add("http://data.linkedmdb.org/resource/movie/film");
    assertEquals(typesMap.get("http://example.org/resource/film/137"),expectedTypes);
   
    expectedTypes = new HashSet<String>();
    expectedTypes.add("http://data.linkedmdb.org/resource/movie/film_series");
    assertEquals(typesMap.get("http://example.org/resource/film/200"),expectedTypes);
   
    expectedTypes = new HashSet<String>();
    expectedTypes.add("http://example.org/sample/Show");expectedTypes.add("http://data.linkedmdb.org/resource/movie/film");
    assertEquals(typesMap.get("http://example.org/resource/film/110"),expectedTypes);
  }*/
 
  /*
   * suggest type
   */
  @Test
  public void sugestTypeTest(){
    String prefix = "fil";
    List<SearchResultItem> results = endpoint.suggestType(prefix, limit);
    assertEquals(results.size(),1);
    SearchResultItem item;
    item = results.get(0);
    assertResultItem(item,"http://data.linkedmdb.org/resource/movie/film","film");
  }
 
  private void assertResultItem(SearchResultItem item, String expectedId, String expectedName){
    assertEquals(item.getId(), expectedId);
    assertEquals(item.getName(), expectedName);
  }
 
  /*
   * suggest property
   */
  @Test
  public void suggestPropertyTest(){
    String prefix = "initi";
    List<SearchResultItem> results = endpoint.suggestProperty(prefix, limit);
    assertEquals(results.size(),1);
    SearchResultItem item;
    item = results.get(0);
    assertResultItem(item,"http://data.linkedmdb.org/resource/movie/initial_release_date","initial release date");
  }
 
  @Test
  public void suggestPropertyEmptyResultTest(){
    String prefix = "initi";
    String typeUri = "http://data.linkedmdb.org/resource/movie/film_series";
    List<SearchResultItem> results = endpoint.suggestProperty(prefix, typeUri, limit);
    assertEquals(results.size(),0);
  }
}
TOP

Related Classes of com.google.refine.test.org.deri.reconcile.endpoints.PlainSparqlEndpointTest

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.