use of com.bigdata.rdf.sparql.ast.TermNode in project wikidata-query-rdf by wikimedia.
the class GeoService method getRequiredBound.
@Override
public Set<IVariable<?>> getRequiredBound(final ServiceNode serviceNode) {
/**
* This method extracts exactly those variables that are incoming,
* i.e. must be bound before executing the execution of the service.
*
* Those can be only in service parameters.
*/
final Set<IVariable<?>> requiredBound = new HashSet<>();
for (StatementPatternNode sp : getStatementPatterns(serviceNode)) {
final TermNode subj = sp.s();
final IVariableOrConstant<?> object = sp.o().getValueExpression();
if (subj.isConstant() && BD.SERVICE_PARAM.equals(subj.getValue()) && object instanceof IVariable<?>) {
// the subject var is what we return
requiredBound.add((IVariable<?>) object);
}
}
return requiredBound;
}
use of com.bigdata.rdf.sparql.ast.TermNode in project wikidata-query-rdf by wikimedia.
the class MWApiServiceFactory method serviceParamsFromNode.
/**
* Get service params from Service Node.
* FIXME: copypaste from ServiceParams.java, should be integrated there
*/
private ServiceParams serviceParamsFromNode(final ServiceNode serviceNode) {
requireNonNull(serviceNode, "Service node is null?");
final GraphPatternGroup<IGroupMemberNode> group = serviceNode.getGraphPattern();
requireNonNull(group, "Group node is null?");
final ServiceParams serviceParams = new ServiceParams();
for (IGroupMemberNode node : group) {
if (node instanceof StatementPatternNode) {
final StatementPatternNode sp = (StatementPatternNode) node;
final TermNode s = sp.s();
if (s.isConstant() && BD.SERVICE_PARAM.equals(s.getValue())) {
if (sp.p().isVariable()) {
throw new RuntimeException("not a valid service param triple pattern, " + "predicate must be constant: " + sp);
}
final URI param = (URI) sp.p().getValue();
serviceParams.add(param, sp.o());
}
}
}
return serviceParams;
}
use of com.bigdata.rdf.sparql.ast.TermNode in project wikidata-query-rdf by wikimedia.
the class MWApiServiceFactory method getLimitsFromParams.
/**
* Get limit configuration from service node params.
* @return Limits object/tracker
*/
MWApiLimits getLimitsFromParams(final ServiceParams serviceParams) {
int limitResults = -1;
int limitContinuations = getSettingFromParams(serviceParams, LIMIT_CONTINUATIONS_KEY, -1);
int limitEmptyContinuations = getSettingFromParams(serviceParams, LIMIT_EMPTY_CONTINUATIONS_KEY, 25);
TermNode limitResultsNode = serviceParams.get(LIMIT_RESULTS_KEY, null);
if (limitResultsNode != null) {
serviceParams.clear(LIMIT_RESULTS_KEY);
String s = limitResultsNode.getValue().stringValue();
if (s.equals("once")) {
// backwards compatibility, there used to be just one limit
limitContinuations = 0;
} else {
limitResults = Integer.parseInt(s);
}
}
return clampLimitsByConfig(limitResults, limitContinuations, limitEmptyContinuations);
}
use of com.bigdata.rdf.sparql.ast.TermNode in project wikidata-query-rdf by wikimedia.
the class GeoAroundService method buildServiceNode.
@Override
protected JoinGroupNode buildServiceNode(ServiceCallCreateParams params, ServiceParams serviceParams) {
final AbstractTripleStore store = params.getTripleStore();
final Vocabulary voc = store.getVocabulary();
BigdataValueFactory vf = store.getValueFactory();
final StatementPatternNode pattern = getPatternNode(params);
final TermNode searchVar = pattern.s();
final TermNode predicate = pattern.p();
final TermNode locationVar = pattern.o();
final JoinGroupNode newGroup = new JoinGroupNode();
// ?var geo:search "inCircle" .
newGroup.addArg(new StatementPatternNode(searchVar, new DummyConstantNode(vf.asValue(GeoSpatial.SEARCH)), new DummyConstantNode(vf.createLiteral(GeoFunction.IN_CIRCLE.toString()))));
// ?var geo:predicate wdt:P625 .
newGroup.addArg(new StatementPatternNode(searchVar, new DummyConstantNode(vf.asValue(GeoSpatial.PREDICATE)), predicate));
// ?var geo:searchDatatype ogc:wktLiteral .
newGroup.addArg(new StatementPatternNode(searchVar, new DummyConstantNode(vf.asValue(GeoSpatial.SEARCH_DATATYPE)), new ConstantNode(voc.getConstant(new URIImpl(GeoSparql.WKT_LITERAL)))));
// ?var geo:spatialCircleCenter ?parisLoc .
newGroup.addArg(new StatementPatternNode(searchVar, new DummyConstantNode(vf.asValue(GeoSpatial.SPATIAL_CIRCLE_CENTER)), getParam(serviceParams, CENTER_PARAM)));
// ?var geo:spatialCircleRadius "1" .
newGroup.addArg(new StatementPatternNode(searchVar, new DummyConstantNode(vf.asValue(GeoSpatial.SPATIAL_CIRCLE_RADIUS)), getParam(serviceParams, RADIUS_PARAM)));
// ?var geo:locationValue ?location .
newGroup.addArg(new StatementPatternNode(searchVar, new DummyConstantNode(vf.asValue(GeoSpatial.LOCATION_VALUE)), locationVar));
// ?var geo:coordSystem "0" .
newGroup.addArg(new StatementPatternNode(searchVar, new DummyConstantNode(vf.asValue(GeoSpatial.COORD_SYSTEM)), getGlobeNode(vf, serviceParams)));
final TermNode distance = serviceParams.get(DISTANCE_PARAM, null);
if (distance != null) {
// ?var geo:distanceValue ?distance .
newGroup.addArg(new StatementPatternNode(searchVar, new DummyConstantNode(vf.asValue(GeoSpatial.DISTANCE_VALUE)), distance));
}
return newGroup;
}
use of com.bigdata.rdf.sparql.ast.TermNode in project wikidata-query-rdf by wikimedia.
the class MWApiServiceFactory method getServiceHost.
/**
* Get service host and check if it's valid.
* @return Service endpoint.
* @throws MalformedURLException on bad URL
*/
private Endpoint getServiceHost(final ServiceParams serviceParams) throws MalformedURLException {
TermNode hostNode = serviceParams.get(ENDPOINT_KEY, null);
requireNonNull(hostNode, "Service name (wikibase:endpoint) should be supplied");
serviceParams.clear(ENDPOINT_KEY);
return Endpoint.create(hostNode.getValueExpression(), config);
}
Aggregations