Skip to content

Repository files navigation

LDflex makes Linked Data in JavaScript fun

LDflex is a domain-specific language for querying Linked Data on the Web as if you were browsing a local JavaScript graph.

npm versionBuild StatusCoverage StatusDependency Status

You can write things like person.friends.firstName to get a list of your friends. Thanks to the power of JSON-LD contexts and JavaScript's Proxy, these properties are not hard-coded in LDflex, but can be chosen at runtime. They feel as if you're traversing a local object, while you're actually querying the Web—without pulling in all data first.

Tim Berners-Lee came up with the idea for such a fluid JavaScript interface to Linked Data, in a discussion on how to make Linked Data easier for developers.

Installation

npm install ldflex

In order to execute queries, you will also need a query engine:

npm install ldflex-comunica

Usage

When you have obtained a starting subject, you can navigate through its properties using standard JavaScript dot property syntax.

In order to query for the result, use await if you want a single value, or for await to iterate over all values.

Initialization

const{ PathFactory }=require('ldflex');const{default: ComunicaEngine}=require('ldflex-comunica');const{ namedNode }=require('@rdfjs/data-model');// The JSON-LD context for resolving propertiesconstcontext={"@context": {"@vocab": "http://xmlns.com/foaf/0.1/","friends": "knows","label": "http://www.w3.org/2000/01/rdf-schema#label",}};// The query engine and its sourceconstqueryEngine=newComunicaEngine('https://ruben.verborgh.org/profile/');// The object that can create new pathsconstpath=newPathFactory({ context, queryEngine });

Looking up data on the Web

construben=path.create({subject: namedNode('https://ruben.verborgh.org/profile/#me')});showPerson(ruben);asyncfunctionshowPerson(person){console.log(`This person is ${awaitperson.name}`);console.log(`${awaitperson.givenName} is interested in:`);forawait(constnameofperson.interest.label)console.log(`- ${name}`);console.log(`${awaitperson.givenName} is friends with:`);forawait(constnameofperson.friends.givenName)console.log(`- ${name}`);}

Inspecting the generated path expression

(asyncperson=>{console.log(awaitperson.friends.givenName.pathExpression);})(ruben);

Getting all subjects of a document

(asyncdocument=>{forawait(constsubjectofdocument.subjects)console.log(`${subject}`);})(ruben);

Getting all properties of a subject

(asyncsubject=>{forawait(constpropertyofsubject.properties)console.log(`${property}`);})(ruben);

Converting an LDflex expression into a SPARQL query

(asyncperson=>{console.log(awaitperson.friends.givenName.sparql);})(ruben);

License

©2018–present Ruben Verborgh, Ruben Taelman. MIT License.

About

A JavaScript DSL for querying Linked Data on the Web

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages