Skip to content

CarbonLDP/sparqler

Repository files navigation

SPARQLER

npm version

CircleCI

SPARQL query buildER for JavaScript/TypeScript.

SPARQLER offers a fluent interface to help you construct queries and prevent errors by malformed patterns.

Installation

With npm installed, run

npm install sparqler

Usage examples

import { SPARQLER } from "sparqler";
// const SPARQLER = require( "sparqler" ).SPARQLER // With Node.js

let query = new SPARQLER()
    .base( "https://example.com/resource/" )
    .prefix( "ex", "https://example.com/ns#" )
    .select( _ => [
        _.var( "bar" )
    ] )
    .where( _ => [
        _.resource( "" ) 
            .has( _.resource( "ex:foo" ), _.var( "bar" ) )
            .and( _.resource( "ex:baz" ), _.literal( 10 ) ),
    ] )
    .orderBy( _ => [
        _.desc( _.var( "bar" ) )
    ] )
    .toPrettyString();
    // .toCompactString(); // Minimal query size, but difficult to read

console.log( query );

Output:

BASE <https://example.com/resource/>
PREFIX ex: <https://example.com/ns#>
SELECT ?bar
WHERE {
    <> ex:foo ?bar;
       ex:baz 10
}
ORDER BY DESC (?bar)

Every method generates a different object with the corresponding methods available in that step. This means that, if you store a query reference and modify it afterwards, printing the reference will not have the modification. However, this also means that you can generate different queries using a shared base without mutating it:

import { SPARQLER } from "sparqler";

let query1 = new SPARQLER()
    .base( "https://example.com/resource/" )
    .prefix( "ex", "https://example.com/ns#" )
    .select( _ => _.var( "bar" ) )
    .where( _ => _.resource( "" ).has( _.resource( "ex:foo" ), _.var( "bar" ) ) );

// Add an order
let query2 = query1
    .orderBy( _ => [
        _.desc( _.var( "bar" ) )
    ] );

console.log( query1.toPrettyString() );
console.log( query2.toPrettyString() );

Output:

# query1
BASE <https://example.com/resource/>
PREFIX ex: <https://example.com/ns#>
SELECT ?bar
WHERE { <> ex:foo ?bar }

# query2
BASE <https://example.com/resource/>
PREFIX ex: <https://example.com/ns#>
SELECT ?bar
WHERE { <> ex:foo ?bar }
ORDER BY DESC (?bar) # The added order

API Documentation

See https://carbonldp.github.io/sparqler/ for the API documentation.

License

Copyright (c) 2015-present, Base22 Technology Group, LLC.
All rights reserved.

This source code is licensed under the BSD-style license found in the
LICENSE file in the root directory of this source tree.