0.0.17 • Published 3 years ago

@swymbase/sparql-protocol-client v0.0.17

Weekly downloads
-
License
BSD-3-Clause
Repository
gitlab
Last release
3 years ago

TypeScript SPARQL protocol client

This package defines a SPARQL Protocol client in TypeScript. This is a low-level interface, which marshals between various RDF syntaxes and HTTP messages.

Dependencies

  • node-fetch

Motivation

This fills a niche not currently occupied by any available package:

  • provide first-class TypeScript interface
  • hew very close to spec
  • PROVISIONAL: special support for Amazon Neptune implementation where necessary (e.g. detailed error code definitions).

Usage

send is a low-level function that formats and sends a request to a SPARQL Protocol service. It returns a response object with the result in an indicated format.

import { send } from "../sparql-protocol-client/src/index";

const result = await send({
  request: {
    query: "SELECT ?s WHERE { ?s ?p ?o } LIMIT 10",
  },
  endpoint: "http://example.com/sparql",
});

if (result.success && result.response.format === "results")
  log(result.response.value);

formatted is a somewhat higer-level function that ensures that the response matches a given format (and otherwise does the same thing as send).

import { formatted } from "../sparql-protocol-client/src/index";

const result = await formatted("select_results", {
  request: {
    query: "SELECT ?s WHERE { ?s ?p ?o } LIMIT 10",
  },
  endpoint: "http://example.com/sparql",
});

if (result) {
  // This is known to be formed as SELECT results bindings
  log(result);
}

Prior art

The sparql-http-client by Thomas Bergwinkl is a partial implementation of a SPARQL Protocol client in plain JavaScript.

Roadmap

Consider a Neptune extension for requesting execution plans, which is done by adding an explain={mode}

Use dependency injection for HTTP client

This package uses a Fetch API client with the idea that it could be usable from browser environments. However, as things stand, it currently takes a hard dependency on node-fetch.

Related to this, it should also be possible to provide some of the core functionality as mappings between SPARL Protocol requests and HTTP requests in an implementation-agnostic form.

0.0.17

3 years ago