@oml/markdown 0.11.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/out/md/md-execution.d.ts +16 -0
  2. package/out/md/md-executor.d.ts +1 -0
  3. package/out/md/md-executor.js +219 -35
  4. package/out/md/md-executor.js.map +1 -1
  5. package/out/renderers/diagram-renderer.js +160 -1
  6. package/out/renderers/diagram-renderer.js.map +1 -1
  7. package/out/renderers/graph-renderer.js +452 -18
  8. package/out/renderers/graph-renderer.js.map +1 -1
  9. package/out/renderers/matrix-renderer.d.ts +0 -2
  10. package/out/renderers/matrix-renderer.js +45 -40
  11. package/out/renderers/matrix-renderer.js.map +1 -1
  12. package/out/renderers/renderer.d.ts +4 -1
  13. package/out/renderers/renderer.js +98 -0
  14. package/out/renderers/renderer.js.map +1 -1
  15. package/out/renderers/table-renderer.d.ts +4 -2
  16. package/out/renderers/table-renderer.js +104 -38
  17. package/out/renderers/table-renderer.js.map +1 -1
  18. package/out/renderers/types.d.ts +16 -0
  19. package/out/renderers/wikilink-utils.d.ts +1 -0
  20. package/out/renderers/wikilink-utils.js +60 -32
  21. package/out/renderers/wikilink-utils.js.map +1 -1
  22. package/out/static/browser-runtime.bundle.js +7452 -1297
  23. package/out/static/browser-runtime.bundle.js.map +4 -4
  24. package/out/static/browser-runtime.js +15 -2
  25. package/out/static/browser-runtime.js.map +1 -1
  26. package/package.json +2 -2
  27. package/src/md/md-execution.ts +20 -0
  28. package/src/md/md-executor.ts +268 -40
  29. package/src/renderers/diagram-renderer.ts +167 -1
  30. package/src/renderers/graph-renderer.ts +512 -12
  31. package/src/renderers/matrix-renderer.ts +57 -44
  32. package/src/renderers/renderer.ts +105 -1
  33. package/src/renderers/table-renderer.ts +151 -39
  34. package/src/renderers/types.ts +20 -0
  35. package/src/renderers/wikilink-utils.ts +66 -31
  36. package/src/static/browser-runtime.ts +20 -2
  37. package/src/static/markdown-webview.css +44 -15
@@ -93,7 +93,6 @@ function applyWikilinks(scope, wikilinkIndex, iriAliasIndex, linkingEnabled) {
93
93
  const span = document.createElement('span');
94
94
  span.className = 'wikilink';
95
95
  span.setAttribute('iri', iri);
96
- span.title = iri;
97
96
  span.textContent = label;
98
97
  link.replaceWith(span);
99
98
  continue;
@@ -106,7 +105,6 @@ function applyWikilinks(scope, wikilinkIndex, iriAliasIndex, linkingEnabled) {
106
105
  const span = document.createElement('span');
107
106
  span.className = 'wikilink';
108
107
  span.setAttribute('iri', iri);
109
- span.title = iri;
110
108
  span.textContent = label;
111
109
  link.replaceWith(span);
112
110
  }
@@ -148,6 +146,20 @@ function setupDownloadHandler() {
148
146
  URL.revokeObjectURL(objectUrl);
149
147
  });
150
148
  }
149
+ function setupIriNavigationHandler(wikilinkIndex, iriAliasIndex, linkingEnabled) {
150
+ window.addEventListener('md-navigate-iri', (event) => {
151
+ const detail = event.detail;
152
+ const iri = typeof detail?.iri === 'string' ? detail.iri.trim() : '';
153
+ if (!iri || !linkingEnabled) {
154
+ return;
155
+ }
156
+ const href = resolveWikiHref(iri, wikilinkIndex, iriAliasIndex);
157
+ if (!href) {
158
+ return;
159
+ }
160
+ window.location.assign(href);
161
+ });
162
+ }
151
163
  function getMdKindFromCodeElement(code) {
152
164
  for (const className of Array.from(code.classList)) {
153
165
  if (!className.startsWith('language-')) {
@@ -182,6 +194,7 @@ async function applyExecutionResults() {
182
194
  applyWikilinks(document, wikilinkIndex, iriAliasIndex, linkingEnabled);
183
195
  // Re-apply wikilinks for dynamic renderer re-renders (tables, filters, paging, etc.).
184
196
  installWikilinkObserver(wikilinkIndex, iriAliasIndex, linkingEnabled);
197
+ setupIriNavigationHandler(wikilinkIndex, iriAliasIndex, linkingEnabled);
185
198
  const manifest = parseJsonNode('oml-md-block-manifest', []);
186
199
  if (!Array.isArray(manifest) || manifest.length === 0) {
187
200
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"browser-runtime.js","sourceRoot":"","sources":["../../src/static/browser-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-runtime.js","sourceRoot":"","sources":["../../src/static/browser-runtime.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@oml/markdown",
3
3
  "description": "Markdown runtime and execution contracts for OML",
4
- "version": "0.11.0",
4
+ "version": "0.13.0",
5
5
  "type": "module",
6
6
  "engines": {
7
7
  "node": ">=20.10.0",
@@ -56,7 +56,7 @@
56
56
  "dependencies": {
57
57
  "@antv/x6": "^3.1.6",
58
58
  "@dagrejs/dagre": "^2.0.4",
59
- "@oml/owl": "0.11.0",
59
+ "@oml/owl": "0.13.0",
60
60
  "chart.js": "^4.4.0",
61
61
  "markdown-it": "^14.1.1",
62
62
  "reflect-metadata": "^0.2.2",
@@ -31,9 +31,29 @@ export interface MdExecuteBlocksParams {
31
31
 
32
32
  export type MdExecutionStatus = 'ok' | 'error' | 'unimplemented';
33
33
 
34
+ export type MdTableCellValueKind = 'iri' | 'literal' | 'bnode' | 'unknown';
35
+
36
+ export interface MdTableCellValue {
37
+ kind: MdTableCellValueKind;
38
+ value: string;
39
+ datatype?: string;
40
+ language?: string;
41
+ }
42
+
43
+ export type MdTableCellKind = 'iri' | 'literal' | 'bnode' | 'unknown';
44
+
45
+ export interface MdTableCell {
46
+ kind: MdTableCellKind;
47
+ value: string;
48
+ values: MdTableCellValue[];
49
+ datatype?: string;
50
+ language?: string;
51
+ }
52
+
34
53
  export interface MdTablePayload {
35
54
  columns: string[];
36
55
  rows: string[][];
56
+ rowsTyped?: MdTableCell[][];
37
57
  }
38
58
 
39
59
  export interface MdBlockExecutionResult {
@@ -1,9 +1,15 @@
1
1
  // Copyright (c) 2026 Modelware. All rights reserved.
2
2
 
3
- import { deriveSelectQueryFromShape, type OwlConstructResult, type OwlQueryResult } from '@oml/owl';
3
+ import { deriveSelectQueryFromShape, type OwlConstructResult, type OwlQueryResult, type OwlQueryTerm } from '@oml/owl';
4
4
  import type { Term } from '@rdfjs/types';
5
5
  import { displayLabelFromIri } from '../renderers/renderer.js';
6
- import type { MdBlockExecutionResult, MdExecuteBlocksParams, MdExecuteBlocksResult } from './md-execution.js';
6
+ import type {
7
+ MdBlockExecutionResult,
8
+ MdExecuteBlocksParams,
9
+ MdExecuteBlocksResult,
10
+ MdTableCell,
11
+ MdTableCellValue
12
+ } from './md-execution.js';
7
13
 
8
14
  export interface MarkdownExecutionBackend {
9
15
  ensureContext(modelUri: string): Promise<void>;
@@ -11,6 +17,7 @@ export interface MarkdownExecutionBackend {
11
17
  countContextQuads?: (modelUri: string) => Promise<number>;
12
18
  query(modelUri: string, sparql: string): Promise<OwlQueryResult>;
13
19
  construct(modelUri: string, sparql: string): Promise<OwlConstructResult>;
20
+ isKnownOntologyIriNamespace?: (ontologyIri: string) => boolean;
14
21
  }
15
22
 
16
23
  export class MarkdownExecutor {
@@ -94,6 +101,7 @@ export class MarkdownExecutor {
94
101
  }
95
102
 
96
103
  const columns = extractSelectVariables(sparql);
104
+ const groupConcatAliases = extractGroupConcatAliases(sparql);
97
105
  const columnSet = new Set<string>(columns);
98
106
  for (const row of queryResult.rows) {
99
107
  for (const key of row.keys()) {
@@ -105,8 +113,11 @@ export class MarkdownExecutor {
105
113
  }
106
114
  }
107
115
 
108
- const rows = queryResult.rows.map((row) => columns.map((column) => row.get(column)?.value ?? ''));
109
- return okTable(blockId, 'matrix', columns, rows);
116
+ const rowsTyped = queryResult.rows.map((row) => columns.map((column) =>
117
+ selectTermToCell(row.get(column), groupConcatAliases.get(column), this.backend.isKnownOntologyIriNamespace)
118
+ ));
119
+ const rows = rowsTyped.map((row) => row.map((cell) => tableCellToDisplayValue(cell)));
120
+ return okTable(blockId, 'matrix', columns, rows, rowsTyped);
110
121
  }
111
122
 
112
123
  private async executeTableBlock(
@@ -140,6 +151,7 @@ export class MarkdownExecutor {
140
151
  const variableColumns = kind === 'table-editor'
141
152
  ? derivedQuery?.columnVariables.slice() ?? []
142
153
  : extractSelectVariables(sparql);
154
+ const groupConcatAliases = extractGroupConcatAliases(sparql);
143
155
  const labelByVariable = kind === 'table-editor'
144
156
  ? (derivedQuery?.columnLabels ?? new Map<string, string>())
145
157
  : new Map<string, string>();
@@ -159,9 +171,12 @@ export class MarkdownExecutor {
159
171
  }
160
172
  }
161
173
 
162
- const rows = queryResult.rows.map((row) => columns.map((column) => row.get(column)?.value ?? ''));
174
+ const rowsTyped = queryResult.rows.map((row) => columns.map((column) =>
175
+ selectTermToCell(row.get(column), groupConcatAliases.get(column), this.backend.isKnownOntologyIriNamespace)
176
+ ));
177
+ const rows = rowsTyped.map((row) => row.map((cell) => tableCellToDisplayValue(cell)));
163
178
  const displayColumns = columns.map((column) => labelByVariable.get(column) ?? column);
164
- return okTable(blockId, kind, displayColumns, rows);
179
+ return okTable(blockId, kind, displayColumns, rows, rowsTyped);
165
180
  }
166
181
 
167
182
  private async executeGraphBlock(
@@ -219,35 +234,45 @@ export class MarkdownExecutor {
219
234
  const containmentNames = extractContainmentPropertyNames(options);
220
235
  const focusOrder: string[] = [];
221
236
  const focusSet = new Set<string>();
222
- const valuesByFocus = new Map<string, Map<string, string[]>>();
237
+ const focusCellByKey = new Map<string, MdTableCell>();
238
+ const valuesByFocus = new Map<string, Map<string, MdTableCellValue[]>>();
223
239
  const predicateToColumn = new Map<string, string>();
224
240
  const usedColumns = new Set<string>(['focus']);
225
241
  const columnOrder: string[] = [];
226
242
  const columnLabelByVariable = new Map<string, string>([['focus', 'focus']]);
227
243
 
228
- const addFocus = (focus: string): void => {
229
- if (focusSet.has(focus)) {
244
+ const addFocus = (focusCell: MdTableCell): void => {
245
+ const key = treeFocusKey(focusCell);
246
+ if (focusSet.has(key)) {
230
247
  return;
231
248
  }
232
- focusSet.add(focus);
233
- focusOrder.push(focus);
234
- valuesByFocus.set(focus, new Map<string, string[]>());
249
+ focusSet.add(key);
250
+ focusOrder.push(key);
251
+ focusCellByKey.set(key, focusCell);
252
+ valuesByFocus.set(key, new Map<string, MdTableCellValue[]>());
235
253
  };
236
- const addCellValue = (focus: string, column: string, value: string): void => {
254
+ const addCellValue = (focus: string, column: string, valueCell: MdTableCell): void => {
237
255
  const byColumn = valuesByFocus.get(focus);
238
256
  if (!byColumn) {
239
257
  return;
240
258
  }
241
259
  const values = byColumn.get(column) ?? [];
242
- if (!values.includes(value)) {
260
+ const existing = new Set(values.map((value) => `${value.kind}\u0000${value.value}`));
261
+ for (const value of valueCell.values) {
262
+ const key = `${value.kind}\u0000${value.value}`;
263
+ if (existing.has(key)) {
264
+ continue;
265
+ }
266
+ existing.add(key);
243
267
  values.push(value);
244
- byColumn.set(column, values);
245
268
  }
269
+ byColumn.set(column, values);
246
270
  };
247
271
 
248
272
  for (const quad of constructResult.quads) {
249
- const focus = termToCellValue(quad.subject as Term);
250
- addFocus(focus);
273
+ const focusCell = termToTableCell(quad.subject as Term);
274
+ const focus = treeFocusKey(focusCell);
275
+ addFocus(focusCell);
251
276
 
252
277
  const predicateIri = quad.predicate.value;
253
278
  let column = predicateToColumn.get(predicateIri);
@@ -260,13 +285,13 @@ export class MarkdownExecutor {
260
285
  columnLabelByVariable.set(column, localName(predicateIri) || column);
261
286
  }
262
287
 
263
- const objectValue = termToCellValue(quad.object as Term);
264
- addCellValue(focus, column, objectValue);
288
+ const objectCell = termToTableCell(quad.object as Term);
289
+ addCellValue(focus, column, objectCell);
265
290
 
266
291
  if (containmentNames.size > 0
267
292
  && (quad.object.termType === 'NamedNode' || quad.object.termType === 'BlankNode')
268
293
  && containmentNames.has(normalizePropertyIdentifier(predicateIri))) {
269
- addFocus(objectValue);
294
+ addFocus(objectCell);
270
295
  }
271
296
  }
272
297
 
@@ -277,16 +302,25 @@ export class MarkdownExecutor {
277
302
 
278
303
  const columns = ['focus', ...columnOrder];
279
304
  const displayColumns = columns.map((column) => columnLabelByVariable.get(column) ?? column);
280
- const rows = focusOrder.map((focus) => {
281
- const byColumn = valuesByFocus.get(focus) ?? new Map<string, string[]>();
282
- return columns.map((column) => {
305
+ const rowsTyped: MdTableCell[][] = focusOrder.map((focus) => {
306
+ const byColumn = valuesByFocus.get(focus) ?? new Map<string, MdTableCellValue[]>();
307
+ return columns.map((column): MdTableCell => {
283
308
  if (column === 'focus') {
284
- return focus;
309
+ return focusCellByKey.get(focus) ?? unknownCell(focus);
310
+ }
311
+ const values = byColumn.get(column) ?? [];
312
+ if (values.length === 0) {
313
+ return unknownCell('');
285
314
  }
286
- return (byColumn.get(column) ?? []).join(', ');
315
+ const kind = values.every((value) => value.kind === 'iri')
316
+ ? 'iri'
317
+ : (values.every((value) => value.kind === 'bnode') ? 'bnode' : 'literal');
318
+ const value = values.map((entry) => entry.kind === 'bnode' ? `_:${entry.value}` : entry.value).join(', ');
319
+ return { kind, value, values, datatype: undefined, language: undefined };
287
320
  });
288
321
  });
289
- return okTable(blockId, 'tree', displayColumns, rows);
322
+ const rows = rowsTyped.map((row) => row.map((cell) => cell.kind === 'bnode' ? `_:${cell.value}` : cell.value));
323
+ return okTable(blockId, 'tree', displayColumns, rows, rowsTyped);
290
324
  }
291
325
 
292
326
  private async executeTextBlock(
@@ -311,6 +345,7 @@ export class MarkdownExecutor {
311
345
  }
312
346
 
313
347
  const columns = [firstVariable];
348
+ const groupConcatAliases = extractGroupConcatAliases(sparql);
314
349
  const columnSet = new Set<string>(columns);
315
350
  for (const row of queryResult.rows) {
316
351
  for (const key of row.keys()) {
@@ -321,8 +356,11 @@ export class MarkdownExecutor {
321
356
  columns.push(key);
322
357
  }
323
358
  }
324
- const rows = queryResult.rows.map((row) => columns.map((column) => row.get(column)?.value ?? ''));
325
- return okTable(blockId, 'text', columns, rows);
359
+ const rowsTyped = queryResult.rows.map((row) => columns.map((column) =>
360
+ selectTermToCell(row.get(column), groupConcatAliases.get(column), this.backend.isKnownOntologyIriNamespace)
361
+ ));
362
+ const rows = rowsTyped.map((row) => row.map((cell) => tableCellToDisplayValue(cell)));
363
+ return okTable(blockId, 'text', columns, rows, rowsTyped);
326
364
  }
327
365
 
328
366
  private async executeListBlock(
@@ -347,6 +385,7 @@ export class MarkdownExecutor {
347
385
  }
348
386
 
349
387
  const columns = [firstVariable];
388
+ const groupConcatAliases = extractGroupConcatAliases(sparql);
350
389
  const columnSet = new Set<string>(columns);
351
390
  for (const row of queryResult.rows) {
352
391
  for (const key of row.keys()) {
@@ -357,8 +396,11 @@ export class MarkdownExecutor {
357
396
  columns.push(key);
358
397
  }
359
398
  }
360
- const rows = queryResult.rows.map((row) => columns.map((column) => row.get(column)?.value ?? ''));
361
- return okTable(blockId, 'list', columns, rows);
399
+ const rowsTyped = queryResult.rows.map((row) => columns.map((column) =>
400
+ selectTermToCell(row.get(column), groupConcatAliases.get(column), this.backend.isKnownOntologyIriNamespace)
401
+ ));
402
+ const rows = rowsTyped.map((row) => row.map((cell) => tableCellToDisplayValue(cell)));
403
+ return okTable(blockId, 'list', columns, rows, rowsTyped);
362
404
  }
363
405
  }
364
406
 
@@ -383,13 +425,19 @@ function queryFailed(blockId: string, kind: MdBlockExecutionResult['kind'], mess
383
425
  };
384
426
  }
385
427
 
386
- function okTable(blockId: string, kind: MdBlockExecutionResult['kind'], columns: string[], rows: string[][]): MdBlockExecutionResult {
428
+ function okTable(
429
+ blockId: string,
430
+ kind: MdBlockExecutionResult['kind'],
431
+ columns: string[],
432
+ rows: string[][],
433
+ rowsTyped?: MdTableCell[][]
434
+ ): MdBlockExecutionResult {
387
435
  return {
388
436
  blockId,
389
437
  kind,
390
438
  status: 'ok',
391
439
  format: 'table',
392
- payload: { columns, rows },
440
+ payload: { columns, rows, rowsTyped },
393
441
  };
394
442
  }
395
443
 
@@ -403,13 +451,31 @@ function constructRowsResult(
403
451
  kind,
404
452
  ['subject', 'predicate', 'object'],
405
453
  constructResult.quads.map((quad) => [
406
- termToCellValue(quad.subject as Term),
407
- termToCellValue(quad.predicate as Term),
408
- termToCellValue(quad.object as Term),
454
+ termToRawCellValue(quad.subject as Term),
455
+ termToRawCellValue(quad.predicate as Term),
456
+ termToRawCellValue(quad.object as Term),
457
+ ]),
458
+ constructResult.quads.map((quad) => [
459
+ termToTableCell(quad.subject as Term),
460
+ termToTableCell(quad.predicate as Term),
461
+ termToTableCell(quad.object as Term),
409
462
  ]),
410
463
  );
411
464
  }
412
465
 
466
+ function termToRawCellValue(term: Term): string {
467
+ if (term.termType === 'NamedNode') {
468
+ return term.value;
469
+ }
470
+ if (term.termType === 'BlankNode') {
471
+ return `_:${term.value}`;
472
+ }
473
+ if (term.termType === 'Literal') {
474
+ return term.value;
475
+ }
476
+ return String((term as { value?: unknown }).value ?? '');
477
+ }
478
+
413
479
  function extractSelectVariables(sparql: string): string[] {
414
480
  const match = /select\s+(?:distinct\s+|reduced\s+)?([\s\S]*?)\bwhere\b/i.exec(sparql);
415
481
  if (!match) {
@@ -547,17 +613,179 @@ function normalizePropertyIdentifier(raw: string): string {
547
613
  return localName(trimmed).trim().toLowerCase();
548
614
  }
549
615
 
550
- function termToCellValue(term: Term): string {
616
+ function termToTableCell(term: Term): MdTableCell {
551
617
  if (term.termType === 'NamedNode') {
552
- return term.value;
618
+ return {
619
+ kind: 'iri',
620
+ value: term.value,
621
+ values: [{ kind: 'iri', value: term.value }]
622
+ };
553
623
  }
554
624
  if (term.termType === 'BlankNode') {
555
- return `_:${term.value}`;
625
+ return {
626
+ kind: 'bnode',
627
+ value: term.value,
628
+ values: [{ kind: 'bnode', value: term.value }]
629
+ };
556
630
  }
557
631
  if (term.termType === 'Literal') {
558
- return term.value;
632
+ return {
633
+ kind: 'literal',
634
+ value: term.value,
635
+ values: [{ kind: 'literal', value: term.value, datatype: term.datatype?.value, language: term.language }],
636
+ datatype: term.datatype?.value,
637
+ language: term.language
638
+ };
559
639
  }
560
- return String((term as { value?: unknown }).value ?? '');
640
+ const value = String((term as { value?: unknown }).value ?? '');
641
+ return {
642
+ kind: 'unknown',
643
+ value,
644
+ values: [{ kind: 'unknown', value }]
645
+ };
646
+ }
647
+
648
+ function treeFocusKey(cell: MdTableCell): string {
649
+ if (cell.kind === 'bnode') {
650
+ return `_:${cell.value}`;
651
+ }
652
+ return cell.value;
653
+ }
654
+
655
+ function unknownCell(value: string): MdTableCell {
656
+ return {
657
+ kind: 'unknown',
658
+ value,
659
+ values: [{ kind: 'unknown', value }]
660
+ };
661
+ }
662
+
663
+ function selectTermToCell(
664
+ term: OwlQueryTerm | undefined,
665
+ groupConcatSeparator: string | undefined,
666
+ isKnownOntologyIriNamespace?: (ontologyIri: string) => boolean
667
+ ): MdTableCell {
668
+ if (!term) {
669
+ return { kind: 'unknown', value: '', values: [{ kind: 'unknown', value: '' }] };
670
+ }
671
+ if (term.termType === 'NamedNode') {
672
+ return {
673
+ kind: 'iri',
674
+ value: term.value,
675
+ values: [{ kind: 'iri', value: term.value }]
676
+ };
677
+ }
678
+ if (term.termType === 'BlankNode') {
679
+ return {
680
+ kind: 'bnode',
681
+ value: term.value,
682
+ values: [{ kind: 'bnode', value: term.value }]
683
+ };
684
+ }
685
+ if (term.termType === 'Literal' && groupConcatSeparator !== undefined) {
686
+ const groupedValues = parseGroupConcatValues(term.value, groupConcatSeparator);
687
+ const values = groupedValues.map((value) =>
688
+ classifyGroupedValue(value, isKnownOntologyIriNamespace, term.datatype, term.language)
689
+ );
690
+ const kind = values.every((value) => value.kind === 'iri') ? 'iri' : 'literal';
691
+ return { kind, value: term.value, values, datatype: term.datatype, language: term.language };
692
+ }
693
+ return {
694
+ kind: 'literal',
695
+ value: term.value,
696
+ values: [{ kind: 'literal', value: term.value, datatype: term.datatype, language: term.language }],
697
+ datatype: term.datatype,
698
+ language: term.language
699
+ };
700
+ }
701
+
702
+ function tableCellToDisplayValue(cell: MdTableCell): string {
703
+ if (!Array.isArray(cell.values) || cell.values.length === 0) {
704
+ return cell.kind === 'bnode' ? `_:${cell.value}` : cell.value;
705
+ }
706
+ if (typeof cell.value === 'string' && cell.value.length > 0) {
707
+ return cell.kind === 'bnode' ? `_:${cell.value}` : cell.value;
708
+ }
709
+ return cell.values.map((entry) => entry.kind === 'bnode' ? `_:${entry.value}` : entry.value).join(' ');
710
+ }
711
+
712
+ function extractGroupConcatAliases(sparql: string): Map<string, string> {
713
+ const aliases = new Map<string, string>();
714
+ const match = /select\s+(?:distinct\s+|reduced\s+)?([\s\S]*?)\bwhere\b/i.exec(sparql);
715
+ if (!match) {
716
+ return aliases;
717
+ }
718
+ for (const term of splitTopLevelProjectionTerms(match[1])) {
719
+ if (!/\bgroup_concat\s*\(/i.test(term)) {
720
+ continue;
721
+ }
722
+ const alias = /\bas\s+\?([A-Za-z_][A-Za-z0-9_-]*)\b/i.exec(term);
723
+ if (!alias?.[1]) {
724
+ continue;
725
+ }
726
+ const separatorMatch = /\bseparator\s*=\s*["']([^"']*)["']/i.exec(term);
727
+ aliases.set(alias[1], separatorMatch?.[1] ?? ' ');
728
+ }
729
+ return aliases;
730
+ }
731
+
732
+ function parseGroupConcatValues(raw: string, separator: string): string[] {
733
+ if (separator.length === 0) {
734
+ const trimmed = raw.trim();
735
+ return trimmed ? [trimmed] : [];
736
+ }
737
+ const values = raw
738
+ .split(separator)
739
+ .map((entry) => entry.trim())
740
+ .filter((entry) => entry.length > 0);
741
+ return values;
742
+ }
743
+
744
+ function classifyGroupedValue(
745
+ value: string,
746
+ isKnownOntologyIriNamespace: ((ontologyIri: string) => boolean) | undefined,
747
+ datatype?: string,
748
+ language?: string
749
+ ): MdTableCellValue {
750
+ if (value.startsWith('_:')) {
751
+ return { kind: 'bnode', value: value.slice(2) };
752
+ }
753
+ if (!isAbsoluteIri(value)) {
754
+ return { kind: 'literal', value, datatype, language };
755
+ }
756
+ if (!isKnownOntologyIriNamespace) {
757
+ return { kind: 'iri', value };
758
+ }
759
+ const key = ontologyLookupKeyFromIri(value);
760
+ if (!key || !isKnownOntologyIriNamespace(key)) {
761
+ return { kind: 'literal', value, datatype, language };
762
+ }
763
+ return { kind: 'iri', value };
764
+ }
765
+
766
+ function isAbsoluteIri(value: string): boolean {
767
+ return /^[A-Za-z][A-Za-z0-9+.-]*:[^\s]+$/.test(value);
768
+ }
769
+
770
+ function ontologyLookupKeyFromIri(value: string): string | undefined {
771
+ const iri = String(value ?? '').trim().replace(/^<|>$/g, '');
772
+ if (!iri || !isAbsoluteIri(iri)) {
773
+ return undefined;
774
+ }
775
+ const hashIndex = iri.indexOf('#');
776
+ if (hashIndex >= 0) {
777
+ return normalizeOntologyLookupKey(iri.slice(0, hashIndex + 1));
778
+ }
779
+ const schemeIndex = iri.indexOf('://');
780
+ const slashIndex = iri.lastIndexOf('/');
781
+ if (slashIndex > schemeIndex + 2) {
782
+ return normalizeOntologyLookupKey(iri.slice(0, slashIndex + 1));
783
+ }
784
+ return normalizeOntologyLookupKey(iri);
785
+ }
786
+
787
+ function normalizeOntologyLookupKey(value: string): string {
788
+ return value.trim().replace(/^<|>$/g, '').replace(/[\/#]+$/, '');
561
789
  }
562
790
 
563
791
  function normalizeSparqlVariableName(raw: string): string {