rdf-dataset-fragmenter
Version:
Fragments an RDF dataset into multiple parts
49 lines • 2.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.QuadTransformerAppendResourceLink = void 0;
const rdf_data_factory_1 = require("rdf-data-factory");
const relative_to_absolute_iri_1 = require("relative-to-absolute-iri");
const QuadTransformerAppendResourceAdapter_1 = require("./QuadTransformerAppendResourceAdapter");
const DF = new rdf_data_factory_1.DataFactory();
/**
* A quad transformer that appends a link to resources of the given type.
*/
class QuadTransformerAppendResourceLink extends QuadTransformerAppendResourceAdapter_1.QuadTransformerAppendResourceAdapter {
// eslint-disable-next-line ts/naming-convention
static RDF_TYPE = DF.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type');
predicate;
link;
linkType;
reverse;
linkRemoveTrailingSlash;
constructor(typeRegex, predicate, link, linkType, reverse, linkRemoveTrailingSlash) {
super(typeRegex);
this.predicate = DF.namedNode(predicate);
this.link = link;
this.linkType = linkType ? DF.namedNode(linkType) : undefined;
this.reverse = reverse;
this.linkRemoveTrailingSlash = linkRemoveTrailingSlash;
}
appendQuads(original, results) {
// Determine target IRI
const baseIri = original.subject.value.endsWith('/') ? original.subject.value : `${original.subject.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, original.subject));
}
else {
results.push(DF.quad(original.subject, this.predicate, target));
}
// Optionally define the type of the target
if (this.linkType) {
results.push(DF.quad(target, QuadTransformerAppendResourceLink.RDF_TYPE, this.linkType));
}
}
}
exports.QuadTransformerAppendResourceLink = QuadTransformerAppendResourceLink;
//# sourceMappingURL=QuadTransformerAppendResourceLink.js.map