UNPKG

rdf-dataset-fragmenter

Version:
34 lines 1.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FragmentationStrategySubject = void 0; const relative_to_absolute_iri_1 = require("relative-to-absolute-iri"); const FragmentationBlankNodeBuffer_1 = require("./FragmentationBlankNodeBuffer"); const FragmentationStrategyStreamAdapter_1 = require("./FragmentationStrategyStreamAdapter"); /** * A fragmentation strategy that places quads into their subject's document. */ class FragmentationStrategySubject extends FragmentationStrategyStreamAdapter_1.FragmentationStrategyStreamAdapter { constructor(eagerFlushing = true, relativePath) { super(); this.blankNodeBuffer = new FragmentationBlankNodeBuffer_1.FragmentationBlankNodeBuffer('subject', 'object', eagerFlushing); this.relativePath = relativePath; } async handleQuad(quad, quadSink) { // Only accept IRI subjects. if (quad.subject.termType === 'NamedNode') { // If the subject is a named node, add the quad to the subject's document. const baseIri = quad.subject.value.endsWith('/') ? quad.subject.value : `${quad.subject.value}/`; const iri = this.relativePath ? (0, relative_to_absolute_iri_1.resolve)(this.relativePath, baseIri) : quad.subject.value; await quadSink.push(iri, quad); // Save the subject in our blank node buffer, as it may be needed to identify documents for other quads. await this.blankNodeBuffer.materializeValueForNamedKey(quad.object, quad.subject, quadSink); } await this.blankNodeBuffer.push(quad, quadSink); } async flush(quadSink) { await super.flush(quadSink); await this.blankNodeBuffer.flush(quadSink); } } exports.FragmentationStrategySubject = FragmentationStrategySubject; //# sourceMappingURL=FragmentationStrategySubject.js.map