
Query and explore RDF Data Cubes with a JavaScript API,
without writing SPARQL.
Installation
npm install @zazuko/query-rdf-data-cube
Documentation
See https://zazuko.github.io/query-rdf-data-cube/
Changelog: https://github.com/zazuko/query-rdf-data-cube/blob/master/CHANGELOG.md
Examples
See the examples/
folder at the root of this repository.
Working Locally
git clone
npm ci
npm run build
Running the Tests
Building and Publishing Documentation
npm run docs:compile
npm run docs:publish
Running the Examples
node examples/introspect-and-query.js
Features and Usage
This library has two main use cases: exploring an RDF Data Cube and querying an RDF Data Cube.
Both usually go hand in hand.
Instantiating a Data Cube lets you access its DataSets:
const { DataCube } = require("query-rdf-data-cube");
const datacube = new DataCube("https://ld.stadt-zuerich.ch/query");
const datasets = await datacube.datasets();
const dataset = datasets[3];
You could also directly instantiate a DataSet.
A DataSet can retrieve its Components, ie. its Dimensions, Measures and Attributes:
const dimensions = await dataset.dimensions();
const measures = await dataset.measures();
const attributes = await dataset.attributes();
const zeitDimension = dimensions[0];
const raumDimension = new Dimension({
label: "Raum",
iri: "https://ld.stadt-zuerich.ch/statistics/property/RAUM"
});
const betriebsartDimension = dimensions[2];
const geschlechtDimension = dimensions[3];
const beschaeftigteMeasure = measures[0];
const quelleAttribute = attributes[0];
const glossarAttribute = attributes[1];
const erwarteteAktualisierungAttribute = attributes[4];
const korrekturAttribute = attributes[5];
This setup is quite exhaustive, in many situations you won't want to create all of these or get all of these and rely on this lib to properly guess what to query.
const query = dataset
.query()
.select({
betriebsart: betriebsartDimension,
geschlecht: geschlechtDimension,
raum: raumDimension,
zeit: zeitDimension,
bep: beschaeftigteMeasure.avg(),
quelle: quelleAttribute,
glossar: glossarAttribute,
erwarteteAktualisierung: erwarteteAktualisierungAttribute,
korrektur: korrekturAttribute,
})
.filter(raumDimension.equals("https://ld.stadt-zuerich.ch/statistics/code/R30000"))
.groupBy("zeit")
.having(({ bep }) => bep.gte(10000))
.limit(3);
Now that we built a query, we can generate SPARQL out of it:
const sparql = await query.toSparql();
Or execute the SPARQL query against the SPARQL endpoint:
const results = await query.execute();