import type { BaseQuad, Dataset, Quad } from "@rdfjs/types"; import { quad as createQuad } from "@rdfjs/data-model"; import { datasetToString } from "./datasetConverters"; /** * An interface representing the changes made */ export interface DatasetChanges { added?: Dataset; removed?: Dataset; } /** * Takes Dataset Changes and converts them to SPARQL UPDATE * @param changes: Dataset Changes * @returns String SPARQL Update */ export async function changesToSparqlUpdate(changes: DatasetChanges) { let output = ""; if (changes.removed) { const removedTriples = changes.removed.map((quad) => createQuad(quad.subject, quad.predicate, quad.object), ); output += `DELETE DATA { ${await datasetToString(removedTriples, { format: "N-Triples", })} }`; } if (changes.added && changes.removed) { output += "; "; } if (changes.added) { const addedTriples = changes.added.map((quad) => createQuad(quad.subject, quad.predicate, quad.object), ); output += `INSERT DATA { ${await datasetToString(addedTriples, { format: "N-Triples", })} }`; } return output.replaceAll("\n", " "); }