com.github.anno4j.querying.evaluation.EvalQuery Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of anno4j-core Show documentation
Show all versions of anno4j-core Show documentation
Read and write API for W3C Web Annotation Data Model (http://www.w3.org/TR/annotation-model/) and W3C Open Annotation Data Model (http://www.openannotation.org/spec/core/)
package com.github.anno4j.querying.evaluation;
import com.github.anno4j.model.impl.ResourceObject;
import com.github.anno4j.querying.Criteria;
import com.github.anno4j.querying.QueryServiceConfiguration;
import com.github.anno4j.querying.evaluation.ldpath.LDPathEvaluator;
import com.hp.hpl.jena.graph.NodeFactory;
import com.hp.hpl.jena.graph.Triple;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.sparql.core.Var;
import com.hp.hpl.jena.sparql.syntax.ElementGroup;
import com.hp.hpl.jena.vocabulary.RDF;
import org.apache.marmotta.ldpath.backend.sesame.SesameValueBackend;
import org.apache.marmotta.ldpath.parser.LdPathParser;
import org.apache.marmotta.ldpath.parser.ParseException;
import org.openrdf.model.URI;
import java.io.StringReader;
public class EvalQuery {
public static Query evaluate(QueryServiceConfiguration queryServiceDTO, URI rootType) throws ParseException {
Query query = QueryFactory.make();
query.setQuerySelectType();
ElementGroup elementGroup = new ElementGroup();
Var objectVar = Var.alloc("root");
// Creating and adding the first triple - could be something like: "?objectVar rdf:type oa:Annotation
Triple t1 = new Triple(objectVar, RDF.type.asNode(), NodeFactory.createURI(rootType.toString()));
elementGroup.addTriplePattern(t1);
// Evaluating the criteria
for (Criteria c : queryServiceDTO.getCriteria()) {
SesameValueBackend backend = new SesameValueBackend();
LdPathParser parser = new LdPathParser(backend, queryServiceDTO.getConfiguration(), new StringReader(c.getLdpath()));
Var var = LDPathEvaluator.evaluate(parser.parseSelector(queryServiceDTO.getPrefixes()), elementGroup, objectVar, queryServiceDTO.getEvaluatorConfiguration());
if (c.getConstraint() != null) {
EvalComparison.evaluate(elementGroup, c, var);
}
}
// Adding all generated patterns to the query object
query.setQueryPattern(elementGroup);
// Choose what we want so select - SELECT ?annotation in this case
query.addResultVar(objectVar);
// Setting the default prefixes, like rdf: or dc:
query.getPrefixMapping().setNsPrefixes(queryServiceDTO.getPrefixes());
return query;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy