package org.aksw.sparqlify.platform.config; import java.util.Collections; import java.util.List; import org.aksw.jena_sparql_api.core.QueryExecutionFactory; import org.apache.jena.query.QueryExecution; import org.apache.jena.rdf.model.Model; import org.apache.jena.rdf.model.Property; import org.apache.jena.rdf.model.Resource; import de.fuberlin.wiwiss.pubby.DataSource; /** * A data source backed by a QueryExecutionFactory. * * @author Claus Stadler */ public class QefDataSource implements DataSource { private String previousDescribeQuery; private QueryExecutionFactory qef; private String endpointURN; /* private String defaultGraphName; */ public QefDataSource(QueryExecutionFactory qef, String endpointURN) { this.qef = qef; this.endpointURN = endpointURN; } public String getEndpointURL() { return endpointURN; } public String getResourceDescriptionURL(String resourceURI) { return "DESCRIBE <" + resourceURI + ">"; /* try { StringBuffer result = new StringBuffer(); result.append(endpointURL); result.append("?"); if (defaultGraphName != null) { result.append("default-graph-uri="); result.append(URLEncoder.encode(defaultGraphName, "utf-8")); result.append("&"); } result.append("query="); result.append(URLEncoder.encode("DESCRIBE <" + resourceURI + ">", "utf-8")); return result.toString(); } catch (UnsupportedEncodingException ex) { // can't happen, utf-8 is always supported throw new RuntimeException(ex); } */ } public Model getResourceDescription(String resourceURI) { return execDescribeQuery("DESCRIBE <" + resourceURI + ">"); } public Model getAnonymousPropertyValues(String resourceURI, Property property, boolean isInverse) { String query = "DESCRIBE ?x WHERE { " + (isInverse ? "?x <" + property.getURI() + "> <" + resourceURI + "> . " : "<" + resourceURI + "> <" + property.getURI() + "> ?x . ") + "FILTER (isBlank(?x)) }"; Model result = execDescribeQuery(query); return result; } public String getPreviousDescribeQuery() { return previousDescribeQuery; } private Model execDescribeQuery(String query) { previousDescribeQuery = query; QueryExecution qe = qef.createQueryExecution(query); Model result = qe.execDescribe(); /* if (defaultGraphName != null) { endpoint.setDefaultGraphURIs(Collections .singletonList(defaultGraphName)); } */ return result; } @Override public List<Resource> getIndex() { return Collections.emptyList(); } }