Socket
Socket
Sign inDemoInstall

sparqlalgebrajs

Package Overview
Dependencies
Maintainers
1
Versions
70
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sparqlalgebrajs

Convert SPARQL to SPARL algebra


Version published
Weekly downloads
10K
decreased by-8.02%
Maintainers
1
Weekly downloads
 
Created
Source

SPARQL to SPARQL Algebra converter

2 components get exposed: the translate function and the Algebra object, which contains all the output types that can occur.

Note that this is still a work in progress so naming conventions could change.

Translate

Input for the translate function should either be a SPARQL string or a result from calling SPARQL.js.

const { translate } = require('sparqlalgebrajs');
translate('SELECT * WHERE { ?x ?y ?z }');

Returns:

{ type: 'project',
  input: { type: 'bgp', patterns: [ 
    { type: 'pattern', subject: '?x', predicate: '?y', object: '?z' } ] },
  variables: [ '?x', '?y', '?z' ] }

Algebra object

The algebra object contains a types object, which contains all possible values for the type field in the output results. Besides that it also contains all the TypeScript interfaces of the possible output results. The output of the translate function will always be an Algebra.Operation instance.

Deviations from the spec

This implementation tries to stay as close to the SPARQL 1.1 specification, but some changes were made for ease of use. These are mostly based on the Jena ARQ implementation. What follows is a non-exhaustive list of deviations:

Named parameters

This is the biggest visual change. The functions no longer take an ordered list of parameters but a named list instead. The reason for this is to prevent having to memorize the order of parameters and also due to seeing some differences between the spec and the Jena ARQ SSE output when ordering parameters.

Multiset/List conversion

The functions toMultiset and toList have been removed for brevity. Conversions between the two are implied by the operations used.

Quads

The translate function has an optional second parameter indicating whether patterns should be translated to triple or quad patterns. In the case of quads the graph operation will be removed and embedded into the patterns it contained. The default value for this parameter is false.

PREFIX : <http://www.example.org/>

SELECT ?x WHERE {
    GRAPH ?g {?x ?y ?z}
}

Default result:

{ type: 'project',
  input: { type: 'graph', graph: '?g', input:  
    { type: 'bgp', patterns: 
      [ { type: 'pattern', subject: '?x', predicate: '?y', object: '?z' } ] } },
  variables: [ '?x' ] }

With quads:

{ type: 'project',
  input: { type: 'bgp', patterns: 
    [ { type: 'pattern', subject: '?x', predicate: '?y', object: '?z', graph: '?g' } ] },
  variables: [ '?x' ] }
VALUES

For the VALUES block we return the following output:

PREFIX dc:   <http://purl.org/dc/elements/1.1/> 
PREFIX :     <http://example.org/book/> 
PREFIX ns:   <http://example.org/ns#> 

SELECT ?book ?title ?price
{
   VALUES ?book { :book1 :book3 }
   ?book dc:title ?title ;
         ns:price ?price .
}
{ type: 'project',
  input: 
   { type: 'join',
     left: { type: 'values', 
             variables: ['?book'],
             bindings: [
               { '?book': 'http://example.org/book/book1' },
               { '?book': 'http://example.org/book/book3' },
             ] },
     right: { type: 'bgp', 
              patterns: [
                {
                  type: 'pattern',
                  subject: '?book',
                  predicate: 'http://purl.org/dc/elements/1.1/title',
                  object: '?title'
                },
                {
                  type: 'pattern',
                  subject: '?book',
                  predicate: 'http://example.org/ns#price',
                  object: '?price'
                }
              ] } },
  variables: [ '?book', '?title', '?price' ] }
Differences from Jena ARQ

Some differences from Jena (again, non-exhaustive): no prefixes are used (all uris get expanded) and the project operation always gets used (even in the case of SELECT *).

FAQs

Package last updated on 30 Nov 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc