{"library":"rdf-parser-csvw","title":"RDF/JS CSV on the Web Parser","description":"rdf-parser-csvw is a JavaScript library designed to parse CSV (Comma Separated Values) data according to the CSV on the Web (CSVW) W3C recommendation, converting it into RDF/JS Quads. It leverages the RDF/JS Stream interface, allowing for efficient, asynchronous processing of large CSV files by consuming a stream of strings and emitting a stream of parsed RDF quads. The library's current stable version is 1.1.0, with releases typically following a feature-driven cadence rather than strict timeboxes. A key differentiator is its strict adherence to the RDF/JS specification for data factories and stream interfaces, ensuring broad compatibility within the RDF/JS ecosystem. It requires explicit CSVW metadata (as an RDF/JS Dataset) and a base IRI for proper conversion. Options include specifying a custom RDF/JS data factory, an alternative timezone for date/time parsing, and error-handling preferences such as `relaxColumnCount` to ignore column count mismatches or `skipLinesWithError` for debugging noisy datasets, though the latter is advised against for production use.","language":"javascript","status":"active","last_verified":"Tue Apr 21","install":{"commands":["npm install rdf-parser-csvw"],"cli":null},"imports":["import { Parser } from 'rdf-parser-csvw'","const { Parser } = require('rdf-parser-csvw')","import type { Parser } from 'rdf-parser-csvw'"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import { Readable } from 'stream';\nimport { Parser } from 'rdf-parser-csvw';\nimport rdf from 'rdf-ext'; // A common RDF/JS implementation for DataFactory and Dataset\n\nasync function parseCsvw() {\n  const csvString = `Name,Age\\nAlice,30\\nBob,25\\nCharlie,35`;\n  const baseIRI = 'http://example.org/data/';\n\n  // Construct a minimal CSVW metadata Dataset using rdf-ext\n  const metadataDataset = rdf.dataset();\n  const ex = rdf.namedNode(baseIRI);\n  const csvw = rdf.namedNode('http://www.w3.org/ns/csvw#');\n  const rdfType = rdf.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type');\n\n  const tableGroup = rdf.blankNode();\n  const table = rdf.blankNode();\n  const column1 = rdf.blankNode();\n  const column2 = rdf.blankNode();\n\n  metadataDataset.add(rdf.quad(ex.file, rdfType, csvw.TableGroup));\n  metadataDataset.add(rdf.quad(ex.file, csvw.table, table));\n  metadataDataset.add(rdf.quad(table, rdfType, csvw.Table));\n  metadataDataset.add(rdf.quad(table, csvw.url, rdf.namedNode(`${baseIRI}data.csv`)));\n\n  // Define columns based on CSV headers\n  metadataDataset.add(rdf.quad(table, csvw.column, column1));\n  metadataDataset.add(rdf.quad(column1, csvw.name, rdf.literal('Name')));\n  metadataDataset.add(rdf.quad(column1, csvw.datatype, csvw.string));\n\n  metadataDataset.add(rdf.quad(table, csvw.column, column2));\n  metadataDataset.add(rdf.quad(column2, csvw.name, rdf.literal('Age')));\n  metadataDataset.add(rdf.quad(column2, csvw.datatype, csvw.integer));\n\n  // Instantiate the parser with required options\n  const parser = new Parser({\n    metadata: metadataDataset,\n    baseIRI: baseIRI,\n    factory: rdf // Use rdf-ext's data factory\n  });\n\n  // Create a readable stream from the CSV string\n  const csvStream = Readable.from([csvString]);\n\n  console.log('Starting CSVW parsing...');\n  // Import the CSV stream and get a stream of RDF quads\n  const quadStream = parser.import(csvStream);\n\n  // Consume and log the parsed quads\n  for await (const quad of quadStream) {\n    console.log(quad.toString());\n  }\n  console.log('Finished parsing.');\n}\n\nparseCsvw().catch(console.error);","lang":"typescript","description":"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.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":null}