sig
  type error =
      Parse_error of Rdf_loc.loc * string
    | Value_error of Rdf_dt.error
    | Eval_error of Rdf_sparql_eval.error
    | Algebra_error of Rdf_sparql_algebra.error
    | Not_select
    | Not_ask
    | Not_construct
    | Not_describe
  exception Error of Rdf_sparql.error
  val string_of_error : Rdf_sparql.error -> string
  type query = Rdf_sparql_types.query
  val parse_from_string : string -> Rdf_sparql.query
  val parse_from_file : string -> Rdf_sparql.query
  val string_of_query : Rdf_sparql.query -> string
  type solution
  val get_term : Rdf_sparql.solution -> string -> Rdf_node.node
  val is_bound : Rdf_sparql.solution -> string -> bool
  val solution_fold :
    (string -> Rdf_node.node -> '-> 'a) -> Rdf_sparql.solution -> '-> 'a
  val solution_iter :
    (string -> Rdf_node.node -> unit) -> Rdf_sparql.solution -> unit
  type query_result =
      Bool of bool
    | Solutions of Rdf_sparql.solution list
    | Graph of Rdf_graph.graph
  val execute :
    ?graph:Rdf_graph.graph ->
    base:Rdf_uri.uri ->
    Rdf_ds.dataset -> Rdf_sparql.query -> Rdf_sparql.query_result
  val select :
    base:Rdf_uri.uri ->
    Rdf_ds.dataset -> Rdf_sparql.query -> Rdf_sparql.solution list
  val construct :
    ?graph:Rdf_graph.graph ->
    base:Rdf_uri.uri -> Rdf_ds.dataset -> Rdf_sparql.query -> Rdf_graph.graph
  val ask : base:Rdf_uri.uri -> Rdf_ds.dataset -> Rdf_sparql.query -> bool
  val describe :
    ?graph:Rdf_graph.graph ->
    base:Rdf_uri.uri -> Rdf_ds.dataset -> Rdf_sparql.query -> Rdf_graph.graph
  type uri_fun = Rdf_dt.value list -> Rdf_dt.value
  val uri_funs : unit -> Rdf_sparql.uri_fun Rdf_uri.Urimap.t
  val add_uri_fun : Rdf_uri.uri -> Rdf_sparql.uri_fun -> unit
end