Parses RDF from any serialization
npm install rdf-parse


This library parses _RDF streams_ based on _content type_ (or file name)
and outputs RDF/JS-compliant quads as a stream.
This is useful in situations where you have _RDF in some serialization_,
and you just need the _parsed triples/quads_,
without having to concern yourself with picking the correct parser.
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 |
| RDF/XML 1.2 | application/rdf+xml | .rdf, .rdfxml, .owl |
| RDFa 1.1 and script RDF data tags HTML/XHTML | text/html, application/xhtml+xml | .html, .htm, .xhtml, .xht |
| Microdata | text/html, application/xhtml+xml | .html, .htm, .xhtml, .xht |
| RDFa 1.1 in SVG/XML | image/svg+xml,application/xml | .xml, .svg, .svgz |
| SHACL Compact Syntax | text/shaclc | .shaclc, .shc |
| Extended SHACL Compact Syntax | text/shaclc-ext | .shaclce, .shce |
Internally, this library makes use of RDF parsers from the Comunica framework,
which enable streaming processing of RDF.
Internally, the following fully spec-compliant parsers are used:
* N3.js
* jsonld-streaming-parser.js
* microdata-rdf-streaming-parser.js
* rdfa-streaming-parser.js
* rdfxml-streaming-parser.js
* shaclcjs
``bash`
$ npm install rdf-parse
or
`bash`
$ yarn add rdf-parse
This package also works out-of-the-box in browsers via tools such as webpack and browserify.
`typescript`
import { rdfParser } from "rdf-parse";
_or_
`javascript`
const { rdfParser } = require("rdf-parse");
The rdfParser.parse method takes in a text stream containing RDF in any serialization,
and an options object, and outputs an RDFJS stream that emits RDF quads.
`javascript
const textStream = require('streamify-string')();
rdfParser.parse(textStream, { contentType: 'text/turtle', baseIRI: 'http://example.org' })
.on('data', (quad) => console.log(quad))
.on('error', (error) => console.error(error))
.on('end', () => console.log('All done!'));
`
Sometimes, the content type of an RDF document may be unknown,
for those cases, this library allows you to provide the path/URL of the RDF document,
using which the extension will be determined.
For example, Turtle documents can be detected using the .ttl extension.
`javascript
const textStream = require('streamify-string')();
rdfParser.parse(textStream, { path: 'http://example.org/myfile.ttl', baseIRI: 'http://example.org' })
.on('data', (quad) => console.log(quad))
.on('error', (error) => console.error(error))
.on('end', () => console.log('All done!'));
`
With rdfParser.getContentTypes(), you can retrieve a list of all content types for which a parser is available.await
Note that this method returns a promise that can be -ed.
rdfParser.getContentTypesPrioritized() returns an object instead,
with content types as keys, and numerical priorities as values.
`javascript
// An array of content types
console.log(await rdfParser.getContentTypes());
// An object of prioritized content types
console.log(await rdfParser.getContentTypesPrioritized());
`
Since RDF 1.2, serializations support optional version announcement
to make parsers fail early on unsupported versions.
By default, in-band version announcements (such as VERSION in Turtle) will be detected.
Optionally, you can also pass versions out-of-band, for example when they are detected as media type parameter:
`javascript`
rdfParser.parse(textStream, { version: '1.2', path: 'http://example.org/myfile.ttl', baseIRI: 'http://example.org' })
By default, this library is strict on its supported versions, and will emit an error on unsupported versions.
This behaviour can be disabled by setting parseUnsupportedVersions to false:
`javascript`
rdfParser.parse(textStream, { parseUnsupportedVersions: false, path: 'http://example.org/myfile.ttl', baseIRI: 'http://example.org' })
Using the 'prefix' event, you can obtain the prefixes that were available when parsing from documents in formats such as Turtle and TriG.
`javascript`
rdfParser.parse(textStream, { contentType: 'text/turtle' })
.on('prefix', (prefix, iri) => console.log(prefix + ':' + iri))
Using the 'context' event, you can obtain all contexts (@context) when parsing JSON-LD documents.
Multiple contexts can be found, and the context values that are emitted correspond exactly to the context value as included in the JSON-LD document.
`javascript``
rdfParser.parse(textStream, { contentType: 'application/ld+json' })
.on('context', (context) => console.log(context))
This code is released under the MIT license.