Querying over RDF/JS sources
On this page
Two of the different types of sources that are supported by Comunica
are the RDF/JS Source
interface and the RDF/JS DatasetCore
interface.
These allow you to pass objects as source to Comunica as long as they implement one of the interfaces.
An RDF/JS Source
exposes the match
method
that allows quad pattern queries to be executed,
and matching quads to be returned as a stream. An RDF/JS DatasetCore
also exposes a match
method which returns a Dataset
instead of a stream.
Several implementations of these Source
and DatasetCore
interfaces exist.
In the example below, we make use of the Store
from N3.js
(which implements both interfaces),
that offers one possible implementation when you want to query over it with Comunica within a JavaScript application:
const store = new N3.Store(); store.addQuad( namedNode('http://ex.org/Pluto'), namedNode('http://ex.org/type'), namedNode('http://ex.org/Dog') ); store.addQuad( namedNode('http://ex.org/Mickey'), namedNode('http://ex.org/type'), namedNode('http://ex.org/Mouse') ); const bindingsStream = await myEngine.queryBindings(`SELECT * WHERE { ?s ?p ?o }`, { sources: [store], });
@comunica/query-sparql
),
the Comunica SPARQL RDF/JS (@comunica/query-sparql-rdfjs
)
can also be used as a more lightweight alternative
that only allows querying over RDF/JS sources.
Store
interface,
then it is also supports update queries to add, change or delete quads in the store.
Optional: query optimization
The RDFJS Source interface by default only exposed the match
method.
In order to allow Comunica to produce more efficient query plans,
you can optionally expose a countQuads
method that has the same signature as match
,
but returns a number
or Promise<number>
that represents (an estimate of)
the number of quads that would match the given quad pattern.
Certain Source
implementations may be able to provide an efficient implementation of this method,
which would lead to better query performance.
If Comunica does not detect a countQuads
method, it will fallback to a sub-optimal counting mechanism
where match
will be called again to manually count the number of matches.