UNPKG

rdf-dataset-fragmenter

Version:
49 lines 2.25 kB
"use strict"; 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