Install & Compatibility
Where this runs
tested against v? · npm install
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
muslnode 18–226 runs
build_error
glibcnode 18–226 runs
build_error
Code
Verified usage
Verified import paths — ran on the pinned version, not inferred.
Parser
✓ import { Parser } from 'rdf-parser-csvw'
✗ import Parser from 'rdf-parser-csvw'
The parser is exported as a named class `Parser` in ESM. Do not use default import.
Parser (CommonJS)
✓ const { Parser } = require('rdf-parser-csvw')
✗ const Parser = require('rdf-parser-csvw')
For CommonJS, access the `Parser` class as a named property from the module export.
Parser (Type Import)
✓ import type { Parser } from 'rdf-parser-csvw'
When only importing the type for TypeScript, use `import type` for clarity and bundler optimization.
Demonstrates how to instantiate the `Parser` class, construct a minimal CSVW metadata RDF/JS Dataset, and parse a CSV string into RDF quads using streams.
import { Readable } from 'stream';
import { Parser } from 'rdf-parser-csvw';
import rdf from 'rdf-ext'; // A common RDF/JS implementation for DataFactory and Dataset
async function parseCsvw() {
const csvString = `Name,Age\nAlice,30\nBob,25\nCharlie,35`;
const baseIRI = 'http://example.org/data/';
// Construct a minimal CSVW metadata Dataset using rdf-ext
const metadataDataset = rdf.dataset();
const ex = rdf.namedNode(baseIRI);
const csvw = rdf.namedNode('http://www.w3.org/ns/csvw#');
const rdfType = rdf.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type');
const tableGroup = rdf.blankNode();
const table = rdf.blankNode();
const column1 = rdf.blankNode();
const column2 = rdf.blankNode();
metadataDataset.add(rdf.quad(ex.file, rdfType, csvw.TableGroup));
metadataDataset.add(rdf.quad(ex.file, csvw.table, table));
metadataDataset.add(rdf.quad(table, rdfType, csvw.Table));
metadataDataset.add(rdf.quad(table, csvw.url, rdf.namedNode(`${baseIRI}data.csv`)));
// Define columns based on CSV headers
metadataDataset.add(rdf.quad(table, csvw.column, column1));
metadataDataset.add(rdf.quad(column1, csvw.name, rdf.literal('Name')));
metadataDataset.add(rdf.quad(column1, csvw.datatype, csvw.string));
metadataDataset.add(rdf.quad(table, csvw.column, column2));
metadataDataset.add(rdf.quad(column2, csvw.name, rdf.literal('Age')));
metadataDataset.add(rdf.quad(column2, csvw.datatype, csvw.integer));
// Instantiate the parser with required options
const parser = new Parser({
metadata: metadataDataset,
baseIRI: baseIRI,
factory: rdf // Use rdf-ext's data factory
});
// Create a readable stream from the CSV string
const csvStream = Readable.from([csvString]);
console.log('Starting CSVW parsing...');
// Import the CSV stream and get a stream of RDF quads
const quadStream = parser.import(csvStream);
// Consume and log the parsed quads
for await (const quad of quadStream) {
console.log(quad.toString());
}
console.log('Finished parsing.');
}
parseCsvw().catch(console.error);
Errors
Common errors & fixes
Error: The metadata option is required
The `metadata` option was not provided during parser instantiation or the `.import` call.
fixPass an RDF/JS `Dataset` object containing CSVW metadata to the `metadata` option.
Error: The baseIRI option is required
The `baseIRI` option was not provided, which is essential for resolving relative IRIs.
fixProvide a string value for `baseIRI` in the parser options, e.g., `new Parser({ baseIRI: 'http://example.org/' })`. Error: Column count mismatch in row X
A row in the CSV stream has a different number of columns than expected, and `relaxColumnCount` is not enabled.
fixEither fix the malformed CSV data, or set `relaxColumnCount: true` in the parser options to ignore these errors.
TypeError: parser.import is not a function
The `Parser` class was not correctly instantiated, or `import` was called on the class itself instead of an instance.
fixEnsure you create an instance of the `Parser` class using `new Parser(options)` before calling `.import()`.
Audit
Dependencies
@rdfjs/data-modeloptionalDefault RDF/JS data factory, can be overridden.
@rdfjs/datasetrequiredRequired for creating the `metadata` Dataset, or `rdf-ext` as a common alternative.
rdf-extoptionalCommonly used for RDF/JS data factory and dataset implementation in the ecosystem, often used alongside this parser. Can substitute for @rdfjs/data-model and @rdfjs/dataset.