Skip to content

Latest commit

 

History

History
99 lines (79 loc) · 2.47 KB

README.md

File metadata and controls

99 lines (79 loc) · 2.47 KB

RSP.js

An RDF Stream Processing Library for Javascript built on top of N3.js and Comunica

Installation

The library is available on npm. To install it, run the following command:

npm i rsp-js

Usage

You can define a query using the RSP-QL syntax. An example query is shown below:

let query = `PREFIX : <https://rsp.js/>
    REGISTER RStream <output> AS
    SELECT *
    FROM NAMED WINDOW :w1 ON STREAM :stream1 [RANGE 10 STEP 2]
    WHERE{
        WINDOW :w1 { ?s ?p ?o}
    }`;

You can then create an instance of the RSPEngine and pass the query to it, as shown below:

let rspEngine = new RSPEngine(query);

You can add stream elements to the RSPEngine using the add method. The method takes in a stream element and a timestamp

stream.add(quad(
                namedNode('https://rsp.js/test_subject_'),
                namedNode('http://rsp.js/test_property'),
                namedNode('http://rsp.js/test_object'),
                defaultGraph(),
            ), timestamp_value);

In the following example, we will use a function generate_data to mock the stream.

import { RSPEngine, RDFStream } from "rsp4js";

async function RSP() {
  let query = `PREFIX : <https://rsp.js/>
    REGISTER RStream <output> AS
    SELECT *
    FROM NAMED WINDOW :w1 ON STREAM :stream1 [RANGE 10 STEP 2]
    WHERE{
        WINDOW :w1 { ?s ?p ?o}
    }`;

  let rspEngine = new RSPEngine(query);
  let stream = rspEngine.getStream("https://rsp.js/stream1");
  let emitter = rspEngine.register();
  let results = new Array<string>();
  emitter.on("RStream", (object: any) => {
    console.log("received results");
    results.push(object.bindings.toString());
  });
  if (stream) {
    generate_data(10, [stream]);
  }
  console.log(results);
}

RSP();
const N3 = require("n3");
const { DataFactory } = N3;
const { namedNode, defaultGraph, quad } = DataFactory;

async function generate_data(num_events: number, rdfStreams: RDFStream[]) {
  for (let i = 0; i < num_events; i++) {
    rdfStreams.forEach((stream: any) => {
      const stream_element = quad(
        namedNode("https://rsp.js/test_subject_" + i),
        namedNode("http://rsp.js/test_property"),
        namedNode("http://rsp.js/test_object"),
        defaultGraph()
      );
      stream.add(stream_element, i);
    });
  }
}

Current Features:

  • RSP-QL support
  • Support multiple windows
  • Support for stream and static data joins