rdf-dataset-fragmenter
Version:
Fragments an RDF dataset into multiple parts
33 lines • 1.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.QuadTransformerBlankToFragment = void 0;
const rdf_data_factory_1 = require("rdf-data-factory");
const DF = new rdf_data_factory_1.DataFactory();
/**
* A quad transformer that maps BlankNodes to fragments on the subject URI,
* based on the first subject that blank node appears with as an object.
*/
class QuadTransformerBlankToFragment {
constructor() {
this.mappings = {};
}
transform(quad) {
if (quad.subject.termType === 'NamedNode' &&
quad.object.termType === 'BlankNode' &&
this.mappings[quad.object.value] === undefined) {
const target = DF.namedNode(`${quad.subject.value.split('#')[0]}#${quad.object.value}`);
this.mappings[quad.object.value] = target;
return [DF.quad(quad.subject, quad.predicate, target, quad.graph)];
}
if (quad.subject.termType === 'BlankNode') {
const target = this.mappings[quad.subject.value];
if (target === undefined) {
throw new Error(`Unmapped blank node: ${quad.subject.value}`);
}
return [DF.quad(target, quad.predicate, quad.object, quad.graph)];
}
return [quad];
}
}
exports.QuadTransformerBlankToFragment = QuadTransformerBlankToFragment;
//# sourceMappingURL=QuadTransformerBlankToFragment.js.map