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 | 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, application/json |
.json, .jsonld |
| RDF/XML | application/rdf+xml |
.rdf, .rdfxml, .owl |
| RDFa 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 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
$ npm install rdf-parseor
$ yarn add rdf-parseThis package also works out-of-the-box in browsers via tools such as webpack and browserify.
import { rdfParser } from "rdf-parse";or
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.
const textStream = require('streamify-string')(`
<http://ex.org/s> <http://ex.org/p> <http://ex.org/o1>, <http://ex.org/o2>.
`);
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.
const textStream = require('streamify-string')(`
<http://ex.org/s> <http://ex.org/p> <http://ex.org/o1>, <http://ex.org/o2>.
`);
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.
Note that this method returns a promise that can be await-ed.
rdfParser.getContentTypesPrioritized() returns an object instead,
with content types as keys, and numerical priorities as values.
// An array of content types
console.log(await rdfParser.getContentTypes());
// An object of prioritized content types
console.log(await rdfParser.getContentTypesPrioritized());Using the 'prefix' event, you can obtain the prefixes that were available when parsing from documents in formats such as Turtle and TriG.
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.
rdfParser.parse(textStream, { contentType: 'application/ld+json' })
.on('context', (context) => console.log(context))This software is written by Ruben Taelman.
This code is released under the MIT license.