SPARQL query engine for servers and web browsers.
npm install @jahed/sparql-engine

SPARQL query engine for servers and web browsers.
This project is a continuation of Callidon/sparql-engine which is no longer maintained. For additional history, check out that project's repository.
The aim of this project is to use newer Web APIs, language features, and make the project easier to use and maintain.
``sh`
npm install @jahed/sparql-engine sparqljs
Override rdf-data-factory to use v2 in your package.json.
`json`
{
"overrides": {
"sparqljs": {
"rdf-data-factory": "^2"
}
}
}
`ts
import type { ExecutionContext } from "@jahed/sparql-engine/engine/context/execution-context.js";
import type { PipelineInput } from "@jahed/sparql-engine/engine/pipeline/pipeline-engine.js";
import SparqlEngineGraph from "@jahed/sparql-engine/rdf/graph.js";
import HashMapDataset from "@jahed/sparql-engine/rdf/hashmap-dataset.js";
import { RDF } from "@jahed/sparql-engine/utils/rdf.js";
import type { EngineTriple } from "@jahed/sparql-engine/types.js";
import { Parser } from "sparqljs";
export class MySparqlGraph extends SparqlEngineGraph {
*find(
triple: EngineTriple,
context: ExecutionContext
): PipelineInput
yield RDF.quad(
RDF.namedNode("subject"),
RDF.namedNode("predicate"),
RDF.namedNode("object")
);
}
async insert(triple: EngineTriple): Promise
async delete(triple: EngineTriple): Promise
async clear(): Promise
}
const defaultGraph = new MySparqlGraph();
const dataset = new HashMapDataset(defaultGraph);
const planner = new PlanBuilder(dataset);
const parser = new Parser({ factory: RDF });
const query = parser.parse("
try {
for await (const row of planner.build(query)) {
// row found
}
// query completed
} catch (error) {
// query has errored
}
`
Pipelines are used to process results. To use an alternative pipeline, change it before doing anything else with the engine.
`ts
import { Pipeline } from "@jahed/sparql-engine/engine/pipeline/pipeline.ts"
import RxjsPipeline from from "@jahed/sparql-engine/engine/pipeline/rxjs-pipeline.ts"
// Install rxjs to use the RxjsPipeline.
Pipeline.setInstance(new RxjsPipeline());
``
MIT.