From 0bfc918c7aae47597b0e5d55672e00ebaf60ae65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Kl=C3=ADma?= Date: Wed, 6 Aug 2025 10:49:31 +0200 Subject: [PATCH] Re-added filtering of duplicate quads --- library/options.ts | 1 - library/rdf.ts | 11 +++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/library/options.ts b/library/options.ts index 7aec8ce..7c453c7 100644 --- a/library/options.ts +++ b/library/options.ts @@ -24,7 +24,6 @@ const defaultOptions = { engine: new QueryEngine(), take: 1000, logQuery: () => {}, - distinctConstruct: true, // Needed for Comunica to filter duplicate quads on CONSTRUCT queries }; let globalOptions: Options = {}; diff --git a/library/rdf.ts b/library/rdf.ts index 0311b36..ac03d24 100644 --- a/library/rdf.ts +++ b/library/rdf.ts @@ -4,6 +4,8 @@ export type { RDF }; export { fromRdf, toRdf } from "npm:rdf-literal@^2"; +import { quadToStringQuad } from "npm:rdf-string@^2"; + import { DataFactory, DefaultGraph } from "npm:rdf-data-factory@^2"; export { DataFactory, DefaultGraph }; @@ -19,8 +21,17 @@ export type Graph = Map; export const quadsToGraph = (quadStream: RDF.ResultStream) => { return new Promise((resolve, reject) => { const graph: Graph = new Map(); + const included: Record = {}; quadStream.on("data", (quad) => { + const hash = Object.values(quadToStringQuad(quad)).join(" "); + + if (included[hash]) { + return; + } + + included[hash] = true; + const s = quad.subject.value; const p = quad.predicate.value;