Package org.deri.grefine.reconcile.sindice

Source Code of org.deri.grefine.reconcile.sindice.SindiceQueryEndpoint

package org.deri.grefine.reconcile.sindice;

import java.util.ArrayList;
import java.util.List;

import org.deri.grefine.reconcile.model.ReconciliationCandidate;
import org.deri.grefine.reconcile.model.ReconciliationRequest;
import org.deri.grefine.reconcile.rdf.executors.DumpQueryExecutor;
import org.deri.grefine.reconcile.rdf.executors.QueryExecutor;
import org.deri.grefine.reconcile.rdf.factories.SparqlQueryFactory;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Multimap;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.rdf.model.Model;

public class SindiceQueryEndpoint {

  private SparqlQueryFactory queryFactory;
 
  public SindiceQueryEndpoint(SparqlQueryFactory factory){
    this.queryFactory = factory;
  }
 
  public boolean hasResult(Model model, String queryString, ImmutableList<String> searchPropertyUris, int limit) {
    //reconcile then get types for each element in the reconciliation result assure that order is preserved
    ReconciliationRequest request = new ReconciliationRequest(queryString, limit);
    QueryExecutor queryExecutor = new DumpQueryExecutor(model);
    List<ReconciliationCandidate> candidates = reconcileEntities(queryExecutor, request, searchPropertyUris, 2.0);
    return ! candidates.isEmpty();
  }
 
  public LinkedHashMultimap<String, String> guessType(Model model, String queryString, ImmutableList<String> searchPropertyUris, int limit) {
    //reconcile then get types for each element in the reconciliation result assure that order is preserved
    ReconciliationRequest request = new ReconciliationRequest(queryString, limit);
    QueryExecutor queryExecutor = new DumpQueryExecutor(model);
    List<ReconciliationCandidate> candidates = reconcileEntities(queryExecutor, request, searchPropertyUris, 2.0);
    List<String> entities = new ArrayList<String>();
    for(ReconciliationCandidate candidate:candidates){
      entities.add(candidate.getId());
    }
    if(entities.isEmpty()){
      //return empty result
      return LinkedHashMultimap.create();
    }
    String sparql = this.queryFactory.getTypesOfEntitiesQuery(ImmutableList.copyOf(entities));
    ResultSet resultSet = queryExecutor.sparql(sparql);
    Multimap<String, String> typesMap = this.queryFactory.wrapTypesOfEntities(resultSet);
    //order
    LinkedHashMultimap<String, String> result = LinkedHashMultimap.create();
    for(String uri:entities){
      result.putAll(uri, typesMap.get(uri));
    }
    return result;
  }
 
  private List<ReconciliationCandidate> reconcileEntities(QueryExecutor queryExecutor, ReconciliationRequest request, ImmutableList<String> searchPropertyUris, double matchThreshold) {
    String sparql = this.queryFactory.getReconciliationSparqlQuery(request, searchPropertyUris);
    ResultSet resultSet = queryExecutor.sparql(sparql);
    List<ReconciliationCandidate> candidates = this.queryFactory.wrapReconciliationResultset(resultSet, request.getQueryString(), searchPropertyUris, request.getLimit(), matchThreshold);
    return candidates;
  }

}
TOP

Related Classes of org.deri.grefine.reconcile.sindice.SindiceQueryEndpoint

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.