From 98b0a46234f1b50fde13a8fb0e55a85af3cf1ca0 Mon Sep 17 00:00:00 2001 From: Max Burri Date: Tue, 10 Nov 2026 11:51:53 +0100 Subject: [PATCH] fix: use schema:creator only as fallback in cube metadata Assisted-By: Devin --- CHANGELOG.md | 3 +++ app/rdf/query-cube-metadata.spec.ts | 15 +++++++++++++++ app/rdf/query-cube-metadata.ts | 1 + 3 files changed, 19 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d6f06c2d4..a86b5e2bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,9 @@ You can also check the ## Next Release +- Fixes + - Cube metadata no longer fails for datasets whose`dcterms:creator` and `schema:creator` point to different organizations; `schema:creator` is now only a fallback, fixing broken chart previews and dataset pages (e.g. the FOEN NFI datasets) + ## 6.5.6 - 2026-11-10 - Features diff --git a/app/rdf/query-cube-metadata.spec.ts b/app/rdf/query-cube-metadata.spec.ts index a1f234ffd..8e5d9190e 100644 --- a/app/rdf/query-cube-metadata.spec.ts +++ b/app/rdf/query-cube-metadata.spec.ts @@ -119,4 +119,19 @@ describe("getCubeMetadata creator", () => { expect(query).toContain("schema:creator"); expect(query).toContain("dcterms:creator"); }); + + it("should only use schema:creator as fallback to avoid multiple creators", async () => { + let query = ""; + await getCubeMetadata("https://example.com/cube", { + locale: "de", + sparqlClient: mockClient(buildRow(), (q) => (query = q)), + }); + + // Cubes may have different organizations as dcterms:creator and + // schema:creator. Without this guard the query returns one row per + // creator and getCubeMetadata fails with "Multiple cubes found". + expect(query).toContain( + "FILTER NOT EXISTS { ?iri dcterms:creator ?dctermsCreatorIri . }" + ); + }); }); diff --git a/app/rdf/query-cube-metadata.ts b/app/rdf/query-cube-metadata.ts index e3322fbc0..fa1cb57be 100644 --- a/app/rdf/query-cube-metadata.ts +++ b/app/rdf/query-cube-metadata.ts @@ -120,6 +120,7 @@ export const getCubeMetadata = async ( ?iri ${ns.dcterms.creator} ?creatorIri . } UNION { ?iri ${ns.schema.creator} ?creatorIri . + FILTER NOT EXISTS { ?iri ${ns.dcterms.creator} ?dctermsCreatorIri . } } VALUES ?creatorGraph {