quadstore
Version:
Quadstore is a LevelDB-backed RDF graph database / triplestore for JavaScript runtimes (browsers, Node.js, Deno, Bun, ...) that implements the RDF/JS interfaces and supports SPARQL queries and querying across named graphs.
45 lines • 1.85 kB
JavaScript
import { separator } from '../utils/constants.js';
import { termReader, termWriter } from './terms.js';
import { encodeQuadLength, decodeQuadLength, LENGTH_OF_ENCODED_QUAD_LENGTH } from './utils.js';
export const twoStepsQuadWriter = {
subject: { type: '', value: '', lengths: '' },
predicate: { type: '', value: '', lengths: '' },
object: { type: '', value: '', lengths: '' },
graph: { type: '', value: '', lengths: '' },
ingest(quad, prefixes) {
termWriter.write(quad.subject, this.subject, prefixes);
termWriter.write(quad.predicate, this.predicate, prefixes);
termWriter.write(quad.object, this.object, prefixes);
termWriter.write(quad.graph, this.graph, prefixes);
return this;
},
write(prefix, termNames) {
let key = prefix;
let lengths = '';
for (let t = 0, term; t < termNames.length; t += 1) {
term = this[termNames[t]];
key += term.value + separator;
lengths += term.type + term.lengths;
}
return key + lengths + encodeQuadLength(lengths.length);
},
};
export const quadReader = {
subject: null,
predicate: null,
object: null,
graph: null,
keyOffset: 0,
lengthsOffset: 0,
read(key, keyOffset, termNames, factory, prefixes) {
this.lengthsOffset = key.length - decodeQuadLength(key.slice(-LENGTH_OF_ENCODED_QUAD_LENGTH)) - LENGTH_OF_ENCODED_QUAD_LENGTH;
this.keyOffset = keyOffset;
for (let t = 0, termName; t < termNames.length; t += 1) {
termName = termNames[t];
this[termName] = termReader.read(key, this, factory, prefixes);
this.keyOffset += separator.length;
}
return factory.quad(this.subject, this.predicate, this.object, this.graph);
},
};
//# sourceMappingURL=quads.js.map