rdf-dataset-fragmenter
Version:
Fragments an RDF dataset into multiple parts
53 lines • 2.25 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.QuadTransformerAppendQuadLink = void 0;
const rdf_data_factory_1 = require("rdf-data-factory");
const relative_to_absolute_iri_1 = require("relative-to-absolute-iri");
const DF = new rdf_data_factory_1.DataFactory();
/**
* A quad transformer that appends a link to matching quads.
*/
class QuadTransformerAppendQuadLink {
constructor(matcher, identifier, predicate, link, linkType, reverse, linkRemoveTrailingSlash) {
this.matcher = matcher;
this.identifier = identifier;
this.predicate = DF.namedNode(predicate);
this.link = link;
this.linkType = linkType ? DF.namedNode(linkType) : undefined;
this.reverse = reverse;
this.linkRemoveTrailingSlash = linkRemoveTrailingSlash;
}
transform(quad) {
const quads = [quad];
// Append to applicable quads
if (this.matcher.matches(quad)) {
this.appendQuads(quad, quads);
}
return quads;
}
appendQuads(original, results) {
const newSubject = original[this.identifier];
// Determine target IRI
const baseIri = newSubject.value.endsWith('/') ? newSubject.value : `${newSubject.value}/`;
let targetIri = (0, relative_to_absolute_iri_1.resolve)(this.link, baseIri);
if (this.linkRemoveTrailingSlash && targetIri.endsWith('/')) {
targetIri = targetIri.slice(0, -1);
}
const target = DF.namedNode(targetIri);
// Link from resource to target
if (this.reverse) {
results.push(DF.quad(target, this.predicate, newSubject));
}
else {
results.push(DF.quad(newSubject, this.predicate, target));
}
// Optionally define the type of the target
if (this.linkType) {
results.push(DF.quad(target, QuadTransformerAppendQuadLink.RDF_TYPE, this.linkType));
}
}
}
exports.QuadTransformerAppendQuadLink = QuadTransformerAppendQuadLink;
// eslint-disable-next-line ts/naming-convention
QuadTransformerAppendQuadLink.RDF_TYPE = DF.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type');
//# sourceMappingURL=QuadTransformerAppendQuadLink.js.map