Serializes to any RDF serialization
npm install rdf-serialize


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 1.2 | application/trig | .trig |
| N-Quads 1.2 | application/n-quads | .nq, .nquads |
| Turtle 1.2 | text/turtle | .ttl, .turtle |
| N-Triples 1.2 | application/n-triples | .nt, .ntriples |
| Notation3 | text/n3 | .n3 |
| JSON-LD 1.1 | application/ld+json, application/json | .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:
* N3.js
* jsonld-streaming-serializer.js
* shaclc-writer
``bash`
$ npm install rdf-serialize
or
`bash`
$ yarn add rdf-serialize
This package also works out-of-the-box in browsers via tools such as webpack and browserify.
`typescript`
import { rdfSerializer } from "rdf-serialize";
_or_
`javascript`
const { rdfSerializer } = require("rdf-serialize");
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.
`javascript
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));
`
You may optionally pass prefixes to the serializer:
`javascript`
rdfSerializer.serialize(quadStream, { contentType: 'text/turtle', prefixes: { ex: 'http://ex.org/' } });
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.
`javascript
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.await
Note that this method returns a promise that can be -ed.
rdfSerializer.getContentTypesPrioritized() returns an object instead,
with content types as keys, and numerical priorities as values.
`javascript
// An array of content types
console.log(await rdfSerializer.getContentTypes());
// An object of prioritized content types
console.log(await rdfSerializer.getContentTypesPrioritized());
``
This code is released under the MIT license.