1.1.2 • Published 11 months ago

rsp-js v1.1.2

Weekly downloads
-
License
MIT
Repository
-
Last release
11 months ago

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
1.1.1

11 months ago

1.1.0

11 months ago

1.1.2

11 months ago

1.0.1

1 year ago

1.0.0

1 year ago