Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

n3

Package Overview
Dependencies
Maintainers
1
Versions
125
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

n3

Lightning fast, asynchronous, streaming Turtle / N3 / RDF library.

  • 0.1.6
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

Lightning fast, asynchronous, streaming Turtle / N3 / RDF

Notation3 or N3 is a superset of RDF, the Semantic Web language. This library will provide a high-performance N3 store, parser, and generator (when finished).

Currently implemented:

Parsing Turtle from a string or stream

The node-n3 library can parse Turtle strings.

var parser = new n3.Parser();
parser.parse('@prefix c: <http://example.org/cartoons#>.\n' +
             'c:Tom a c:Cat.\n' +
             'c:Jerry a c:Mouse;\n' +
             '        c:smarterThan c:Tom.',
             function (error, triple) {
               if (triple)
                 console.log(triple.subject, triple.predicate, triple.object, '.');
               else
                 console.log("# That's all, folks!")
             });

Additionally, it can parse streams as they grow, returning triples as soon as they're ready.
This behavior sets node-n3 apart from most other Turtle libraries.

var parser = new n3.Parser(),
    turtleStream = fs.createReadStream('cartoons.ttl');
parser.parse(turtleStream, console.log);

Transforming a stream into triples

node-n3 offers a Transform interface to the Node Stream system, so you can transform Turtle streams and pipe them to anywhere. This solution is ideal if your consumer is slower, as it avoids backpressure from the parser.

var transform = new n3.Transform(),
    turtleStream = fs.createReadStream('cartoons.ttl');
turtleStream.pipe(transform);
transform.pipe(new SlowWriter());

function SlowWriter() {
  var writer = new Writable({ objectMode: true });
  writer._write = function (triple, encoding, done) {
    console.log(triple);
    setTimeout(done, 1000);
  };
  return writer;
}

Storing and finding items

In this example below, we create a new store and add the triples :Pluto a :Dog. and :Mickey a :Mouse. Then, we find a triple with :Mickey as subject.

var n3 = require('n3');

var store = new n3.Store();
store.add(':Pluto', 'a', ':Dog');
store.add(':Mickey', 'a', ':Mouse');

var mickey = store.find(':Mickey', null, null)[0];
console.log(mickey.subject, mickey.predicate, mickey.object, '.');
// :Mickey a :Mouse .

Representing URIs and literals

node-n3 has a special syntax to represent URIs and literals, making code efficient to write and execute.
As URIs are most common, they are represented as simple strings:

var N3Util = require('n3').Util;
N3Util.isUri('http://example.org/cartoons#Mickey'); // true

Literals are represented as double quoted strings:

N3Util.isLiteral('"Mickey Mouse"'); // true
N3Util.isLiteral('"Mickey Mouse"@en'); // true
N3Util.isLiteral('"3"^^<http://www.w3.org/2001/XMLSchema#integer>'); // true
N3Util.isLiteral('"http://example.org/"'); // true

Note the difference between 'http://example.org/' (URI) and '"http://example.org/"' (literal).
Also note that the double quoted literals are not raw Turtle syntax:

N3Util.isLiteral('"This word is "quoted"!"'); // true

The above string represents the string This word is "quoted"!, even though the correct Turtle syntax for that is "This word is \"quoted\"!" node-n3 thus always parses literals, but adds quotes to differentiate from URIs:

new n3.Parser().parse('<a> <b> "This word is \\"quoted\\"!".', console.log);
// { subject: 'a', predicate: 'b', object: '"This word is "quoted"!"' }

For convenience, N3Util can also be loaded globally:

require('n3').Util(global);
isUri('http://example.org/cartoons#Mickey'); // true
isLiteral('"Mickey Mouse"'); // true

If desired, the methods can even be added directly on all strings:

require('n3').Util(String, true);
'http://example.org/cartoons#Mickey'.isUri(); // true
'"Mickey Mouse"'.isLiteral(); // true

Installation

You can install the n3 library as an npm package.

$ npm install n3

Learn more

The Bringing reasoning to the Web page explains the origins of this project and provides pointers to related resources.

Keywords

FAQs

Package last updated on 03 Nov 2013

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