UNPKG

rdf-dataset-fragmenter

Version:
60 lines 2.35 kB
"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 { // eslint-disable-next-line ts/naming-convention static RDF_TYPE = DF.namedNode('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'); matcher; identifier; predicate; link; linkType; reverse; linkRemoveTrailingSlash; 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; //# sourceMappingURL=QuadTransformerAppendQuadLink.js.map