rdf-dataset-fragmenter
Version:
Fragments an RDF dataset into multiple parts
30 lines • 1.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FragmentationStrategyObject = void 0;
const FragmentationBlankNodeBuffer_1 = require("./FragmentationBlankNodeBuffer");
const FragmentationStrategyStreamAdapter_1 = require("./FragmentationStrategyStreamAdapter");
/**
* A fragmentation strategy that places quads into their object's document.
*/
class FragmentationStrategyObject extends FragmentationStrategyStreamAdapter_1.FragmentationStrategyStreamAdapter {
constructor(eagerFlushing = true) {
super();
this.blankNodeBuffer = new FragmentationBlankNodeBuffer_1.FragmentationBlankNodeBuffer('object', 'subject', eagerFlushing);
}
async handleQuad(quad, quadSink) {
// Only accept IRI subjects.
if (quad.object.termType === 'NamedNode') {
// If the subject is a named node, add the quad to the subject's document.
await quadSink.push(quad.object.value, quad);
// Save the object in our blank node buffer, as it may be needed to identify documents for other quads.
await this.blankNodeBuffer.materializeValueForNamedKey(quad.subject, quad.object, quadSink);
}
await this.blankNodeBuffer.push(quad, quadSink);
}
async flush(quadSink) {
await super.flush(quadSink);
await this.blankNodeBuffer.flush(quadSink);
}
}
exports.FragmentationStrategyObject = FragmentationStrategyObject;
//# sourceMappingURL=FragmentationStrategyObject.js.map