levelgraph-n3
Version:
LevelGraph plugin that add the ability to load and store n3/turtle files.
100 lines (75 loc) • 2.5 kB
JavaScript
var levelgraph = require('levelgraph')
, level = require('level')
, levelgraphN3 = require('./')
, fs = require('fs')
, path = require('path')
, mkdirp = require('mkdirp')
, progressStream = require('progress-stream')
, eos = require('end-of-stream');
var cli = require('cli')
.enable('glob');
var options = cli.parse({
output: ['o', 'Specify output folder', 'path', './db'],
quiet: ['q', 'Do not show progress information']
});
// create db output folder
try {
var dbPath, dbCreate;
dbPath = path.resolve(options.output);
if (path.extname(dbPath) !== '') {
console.log('Error: bad output folder specified.')
process.exit(0);
}
dbCreate = mkdirp.sync(dbPath);
if (!dbCreate) {
if (!options.quiet) console.log('\nExisting LevelGraph database at: ' + dbPath);
} else {
if (!options.quiet) console.log('\nLevelGraph database created at: ' + dbPath);
}
// initialize levelgraph-n3
var db = levelgraphN3(levelgraph(level(dbPath)));
} catch (err) {
console.error(err);
process.exit(1);
}
try {
// importing files
var inputfiles = cli.args.slice(0);
if (inputfiles.length === 0) {
console.log('\nNo input file(s) specified.');
process.exit(0);
} else {
if(!options.quiet) console.log('\nNumber of files to be imported: ' + inputfiles.length.toString());
}
inputfiles.forEach(function (filepath) {
// normalize and resolve given file path
var n3file = path.resolve(filepath);
// must be .nt or .n3 file
if (path.extname(n3file) !== '.nt' && path.extname(n3file) !== '.n3') {
console.log('Invalid file. Must be .nt or .n3 file.');
} else {
if (!options.quiet) console.log('\nImporting RDF N-triple file: ' + n3file);
var fileStats = fs.statSync(n3file);
var progstr = progressStream({
length: fileStats.size,
time: 1000
}).on('progress', function (progress) {
if(!options.quiet) {
console.log('\n');
console.log(progress);
}
});
var stream = fs.createReadStream(n3file)
.pipe(progstr)
.pipe(db.n3.putStream());
eos(stream, function (err) {
if (err) return console.log('\nError in streaming ' + path.basename(n3file) + ' encountered.');
if (!options.quiet) console.log('\n' + path.basename(n3file) + ' imported to levelgraph-n3 database at: ' + dbPath);
});
}
});
} catch (err) {
console.error(err);
process.exit(1);
}