@jahed/sparql-engine
Version:
SPARQL query engine for servers and web browsers.
26 lines • 1.13 kB
JavaScript
import { Pipeline } from "../engine/pipeline/pipeline.js";
import { SPARQLExpression, } from "./expressions/sparql-expression.js";
import { Bindings } from "../rdf/bindings.js";
import { literalIsBoolean, termIsLiteral, termToValue } from "../utils/rdf.js";
/**
* Evaluate SPARQL Filter clauses
* @see {@link https://www.w3.org/TR/sparql11-query/#expressions}
* @param source - Input {@link PipelineStage}
* @param expression - FILTER expression
* @param customFunctions - User-defined SPARQL functions (optional)
* @return A {@link PipelineStage} which evaluate the FILTER operation
*/
export default function sparqlFilter(source, expression, customFunctions) {
const expr = new SPARQLExpression(expression, customFunctions);
return Pipeline.getInstance().filterAsync(source, async (bindings) => {
const result = await expr.evaluate(bindings);
if (result &&
"datatype" in result &&
termIsLiteral(result) &&
literalIsBoolean(result)) {
return termToValue(result);
}
return false;
});
}
//# sourceMappingURL=sparql-filter.js.map