use of org.apache.stanbol.entityhub.query.sparql.SparqlFieldQuery in project stanbol by apache.
the class SparqlSearcher method find.
@Override
public final QueryResultList<Representation> find(FieldQuery parsedQuery) throws IOException {
long start = System.currentTimeMillis();
final SparqlFieldQuery query = SparqlFieldQueryFactory.getSparqlFieldQuery(parsedQuery);
String sparqlQuery = query.toSparqlConstruct();
long initEnd = System.currentTimeMillis();
log.debug(" > InitTime: " + (initEnd - start));
log.debug(" > SPARQL query:\n" + sparqlQuery);
InputStream in = SparqlEndpointUtils.sendSparqlRequest(getQueryUri(), sparqlQuery, DEFAULT_RDF_CONTENT_TYPE);
long queryEnd = System.currentTimeMillis();
log.debug(" > QueryTime: " + (queryEnd - initEnd));
if (in != null) {
Graph graph;
Graph rdfData = parser.parse(in, DEFAULT_RDF_CONTENT_TYPE, new IRI(getBaseUri()));
if (rdfData instanceof Graph) {
graph = (Graph) rdfData;
} else {
graph = new IndexedGraph(rdfData);
}
long parseEnd = System.currentTimeMillis();
log.debug(" > ParseTime: " + (parseEnd - queryEnd));
return new RdfQueryResultList(query, graph);
} else {
return null;
}
}
use of org.apache.stanbol.entityhub.query.sparql.SparqlFieldQuery in project stanbol by apache.
the class VirtuosoSearcher method findEntities.
@Override
public final QueryResultList<String> findEntities(FieldQuery parsedQuery) throws IOException {
final SparqlFieldQuery query = SparqlFieldQueryFactory.getSparqlFieldQuery(parsedQuery);
query.setSparqlEndpointType(SparqlEndpointTypeEnum.Virtuoso);
String sparqlQuery = query.toSparqlSelect(false);
log.trace("Sending Sparql request [{}].", sparqlQuery);
InputStream in = sendSparqlRequest(getQueryUri(), sparqlQuery, SparqlSearcher.DEFAULT_SPARQL_RESULT_CONTENT_TYPE);
// Move to util class!
final List<String> entities = extractEntitiesFromJsonResult(in, query.getRootVariableName());
return new QueryResultListImpl<String>(query, entities.iterator(), String.class);
}
use of org.apache.stanbol.entityhub.query.sparql.SparqlFieldQuery in project stanbol by apache.
the class SparqlQueryUtilsTest method testMultiWordTextConstraints.
/**
* Tests word level matching for {@link TextConstraint}s (STANBOL-1277)
*/
@Test
public void testMultiWordTextConstraints() {
//queries for a TextConstraint with {text1} or {text2} in the languages
// {lang1} or {lang2} are expected to look like:
//
// select ?entity, ?label where {
// ?entity rdfs:label ?label
// FILTER((regex(str(?label),"\\b{text1}\\b","i") || regex(str(?label),"\\b{text2}\\b","i"))
// && ((lang(?label) = "{lang1}") || (lang(?label) = "{lang2}"))) .
// }
//first test a pattern type NONE
SparqlFieldQuery query = SparqlFieldQueryFactory.getInstance().createFieldQuery();
query.setConstraint("urn:field4", new TextConstraint(Arrays.asList("Global", "Toy"), PatternType.none, false, "en", null));
String queryString = SparqlQueryUtils.createSparqlSelectQuery(query, true, 0, SparqlEndpointTypeEnum.Standard);
Assert.assertTrue(queryString.contains("regex(str(?tmp1),\"\\\\bGlobal\\\\b\",\"i\") " + "|| regex(str(?tmp1),\"\\\\bToy\\\\b\",\"i\")"));
//also test for pattern type WILDCARD
query = SparqlFieldQueryFactory.getInstance().createFieldQuery();
query.setConstraint("urn:field4", new TextConstraint(Arrays.asList("Glo?al", "Toy"), PatternType.wildcard, false, "en", null));
queryString = SparqlQueryUtils.createSparqlSelectQuery(query, true, 0, SparqlEndpointTypeEnum.Standard);
Assert.assertTrue(queryString.contains("regex(str(?tmp1),\"\\\\bGlo.al\\\\b\",\"i\") " + "|| regex(str(?tmp1),\"\\\\bToy\\\\b\",\"i\")"));
}
use of org.apache.stanbol.entityhub.query.sparql.SparqlFieldQuery in project stanbol by apache.
the class SesameYard method findReferences.
@Override
public QueryResultList<String> findReferences(FieldQuery parsedQuery) throws YardException, IllegalArgumentException {
if (parsedQuery == null) {
throw new IllegalArgumentException("The parsed query MUST NOT be NULL!");
}
final SparqlFieldQuery query = SparqlFieldQueryFactory.getSparqlFieldQuery(parsedQuery);
RepositoryConnection con = null;
TupleQueryResult results = null;
try {
con = repository.getConnection();
con.begin();
//execute the query
int limit = QueryUtils.getLimit(query, getConfig().getDefaultQueryResultNumber(), getConfig().getMaxQueryResultNumber());
results = executeSparqlFieldQuery(con, query, limit, false);
//parse the results
List<String> ids = limit > 0 ? new ArrayList<String>(limit) : new ArrayList<String>();
while (results.hasNext()) {
BindingSet result = results.next();
Value value = result.getValue(query.getRootVariableName());
if (value instanceof Resource) {
ids.add(value.stringValue());
}
}
con.commit();
return new QueryResultListImpl<String>(query, ids, String.class);
} catch (RepositoryException e) {
throw new YardException("Unable to execute findReferences query", e);
} catch (QueryEvaluationException e) {
throw new YardException("Unable to execute findReferences query", e);
} finally {
if (results != null) {
//close the result if present
try {
results.close();
} catch (QueryEvaluationException ignore) {
/* ignore */
}
}
if (con != null) {
try {
con.close();
} catch (RepositoryException ignore) {
/* ignore */
}
}
}
}
use of org.apache.stanbol.entityhub.query.sparql.SparqlFieldQuery in project stanbol by apache.
the class SesameYard method findRepresentation.
@Override
public QueryResultList<Representation> findRepresentation(FieldQuery parsedQuery) throws YardException, IllegalArgumentException {
if (parsedQuery == null) {
throw new IllegalArgumentException("The parsed query MUST NOT be NULL!");
}
final SparqlFieldQuery query = SparqlFieldQueryFactory.getSparqlFieldQuery(parsedQuery);
RepositoryConnection con = null;
TupleQueryResult results = null;
try {
con = repository.getConnection();
con.begin();
//execute the query
int limit = QueryUtils.getLimit(query, getConfig().getDefaultQueryResultNumber(), getConfig().getMaxQueryResultNumber());
results = executeSparqlFieldQuery(con, query, limit, false);
//parse the results and generate the Representations
//create an own valueFactors so that all the data of the query results
//are added to the same Sesame Model
Model model = new TreeModel();
RdfValueFactory valueFactory = new RdfValueFactory(model, sesameFactory);
List<Representation> representations = limit > 0 ? new ArrayList<Representation>(limit) : new ArrayList<Representation>();
while (results.hasNext()) {
BindingSet result = results.next();
Value value = result.getValue(query.getRootVariableName());
if (value instanceof URI) {
//copy all data to the model and create the representation
RdfRepresentation rep = createRepresentationGraph(con, valueFactory, (URI) value);
//link the result with the query result
model.add(queryRoot, queryResult, value);
representations.add(rep);
}
//ignore non URI results
}
con.commit();
return new SesameQueryResultList(model, query, representations);
} catch (RepositoryException e) {
throw new YardException("Unable to execute findReferences query", e);
} catch (QueryEvaluationException e) {
throw new YardException("Unable to execute findReferences query", e);
} finally {
if (results != null) {
//close the result if present
try {
results.close();
} catch (QueryEvaluationException ignore) {
/* ignore */
}
}
if (con != null) {
try {
con.close();
} catch (RepositoryException ignore) {
/* ignore */
}
}
}
}
Aggregations