argahsuknesib / RSP-JS

An RDF Stream Processing Library for Typescript

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

About

An RDF Stream Processing Library for Typescript

License:Other


Languages

Language:TypeScript 91.8%Language:JavaScript 8.2%