SesameAPI Compliance

From Blazegraph
Jump to: navigation, search

This page contains some notes on the compliance with the Sesame API.

Operation API: getBindings()/setBinding()

Sesame supports the injection of a binding into a SPARQL query using the Operation API. Injection is possible via the
Operation.setBinding()
method. The idea is that this API allows to inject a predefined value at "global scope", see the following discussion in the Sesame Developers Group.

Blazegraph supports the Operations API with minor modifications, as described in the following:

  • Being inline with the Sesame Operation API, variable bindings that are injected via the API are globally scoped for the top-level query. This means (amongst others) that you may use such variables within statement patterns or FILTERs anywhere within the top-level query, even if these usages are placed in (possibly nested) subgroups
  • There are two minor differences to the intended semantics of the Operation API:
    • When passing in a binding for a variable ?x via the setBinding() API, the binding is *not* visible to subqueries unless the respective subqueries contain a projection variable labelled ?x
    • Sesame foresees an override semantics though BIND nodes for injected bindings, i.e. when injecting a value X for variable ?x and re-binding ?x as Y using e.g. BIND(Y AS ?x) in the query, then the value of ?x that is passed in via the API will be overriden in scopes to which the BIND applies. In Blazegraph, we consider this a conflicting situation and, as a consequence, will not return results for the parts of the query to which the BIND applies to.