This library serializes RDF/JS quad streams to RDF streams based on content type.
This is useful in situations where have a stream of RDF/JS quads, and you want to serialize them to a certain RDF serialization.
The following RDF serializations are supported:
Name | Content type | Extensions |
---|---|---|
TriG | application/trig |
.trig |
N-Quads | application/n-quads |
.nq , .nquads |
Turtle | text/turtle |
.ttl , .turtle |
N-Triples | application/n-triples |
.nt , .ntriples |
Notation3 | text/n3 |
.n3 |
JSON-LD | application/ld+json |
.jsonld |
SHACL Compact Syntax | text/shaclc |
.shaclc , .shc |
Extended SHACL Compact Syntax | text/shaclc-ext |
.shaclce , .shce |
Internally, this library makes use of RDF serializers from the Comunica framework, which enable streaming processing of RDF.
Internally, the following fully spec-compliant serializers are used:
$ npm install rdf-serialize
or
$ yarn add rdf-serialize
This package also works out-of-the-box in browsers via tools such as webpack and browserify.
import rdfSerializer from "rdf-serialize";
or
const rdfSerializer = require("rdf-serialize").default;
The rdfSerializer.serialize
method takes in an RDFJS stream emitting RDF quads,
and an options object, and outputs text stream containing RDF in a certain serialization.
const streamifyArray = require('streamify-array');
const stringifyStream = require('stream-to-string');
const quad = require('rdf-quad');
const quadStream = streamifyArray([
quad('http://ex.org/s', 'http://ex.org/p', 'http://ex.org/o1'),
quad('http://ex.org/s', 'http://ex.org/p', 'http://ex.org/o2'),
]);
const textStream = rdfSerializer.serialize(quadStream, { contentType: 'text/turtle' });
// Handle the serialization in the streaming manner
textStream.pipe(process.stdout)
.on('error', (error) => console.error(error))
.on('end', () => console.log('All done!'));
// Or merge it in a single string.
console.log(await stringifyStream(textStream));
Sometimes, you know the desired path/URL of the serialized RDF document, but not the content type. For those cases, this library allows you to provide the path/URL of the RDF document, using which the content type will be determined.
For example, Turtle documents can be detected using the .ttl
extension.
const quadStream = streamifyArray([
quad('http://ex.org/s', 'http://ex.org/p', 'http://ex.org/o1'),
quad('http://ex.org/s', 'http://ex.org/p', 'http://ex.org/o2'),
]);
const textStream = rdfSerializer.serialize(quadStream, { path: 'http://example.org/myfile.ttl' });
With rdfSerializer.getContentTypes()
, you can retrieve a list of all content types for which a serializer is available.
Note that this method returns a promise that can be await
-ed.
rdfSerializer.getContentTypesPrioritized()
returns an object instead,
with content types as keys, and numerical priorities as values.
// An array of content types
console.log(await rdfSerializer.getContentTypes());
// An object of prioritized content types
console.log(await rdfSerializer.getContentTypesPrioritized());
This software is written by Ruben Taelman.
This code is released under the MIT license.