@glossarist/concept-browser 0.3.7 → 0.4.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 (54) hide show
  1. package/README.md +3 -2
  2. package/cli/index.mjs +2 -1
  3. package/env.d.ts +5 -0
  4. package/package.json +4 -3
  5. package/scripts/build-edges.js +78 -10
  6. package/scripts/generate-data.mjs +152 -20
  7. package/scripts/generate-ontology-data.mjs +184 -0
  8. package/scripts/generate-ontology-schema.mjs +315 -0
  9. package/src/__tests__/concept-card.test.ts +1 -1
  10. package/src/__tests__/concept-detail-interaction.test.ts +40 -18
  11. package/src/__tests__/concept-formats.test.ts +32 -30
  12. package/src/__tests__/concept-timeline.test.ts +108 -83
  13. package/src/__tests__/concept-view.test.ts +15 -2
  14. package/src/__tests__/dataset-adapter.test.ts +172 -23
  15. package/src/__tests__/dataset-view.test.ts +6 -5
  16. package/src/__tests__/designation-registry.test.ts +161 -0
  17. package/src/__tests__/graph.test.ts +62 -0
  18. package/src/__tests__/language-detail.test.ts +117 -60
  19. package/src/__tests__/ontology-registry.test.ts +109 -0
  20. package/src/__tests__/relationship-categories.test.ts +62 -0
  21. package/src/__tests__/test-helpers.ts +11 -8
  22. package/src/adapters/DatasetAdapter.ts +171 -48
  23. package/src/adapters/model-bridge.ts +277 -0
  24. package/src/adapters/ontology-registry.ts +75 -0
  25. package/src/adapters/ontology-schema.ts +100 -0
  26. package/src/adapters/types.ts +52 -77
  27. package/src/components/AppSidebar.vue +1 -1
  28. package/src/components/CitationDisplay.vue +35 -0
  29. package/src/components/ConceptDetail.vue +334 -93
  30. package/src/components/ConceptRdfView.vue +397 -0
  31. package/src/components/ConceptTimeline.vue +56 -52
  32. package/src/components/GraphPanel.vue +96 -31
  33. package/src/components/LanguageDetail.vue +45 -37
  34. package/src/components/NavIcon.vue +1 -0
  35. package/src/components/NonVerbalRepDisplay.vue +38 -0
  36. package/src/components/RelationshipList.vue +99 -0
  37. package/src/config/use-site-config.ts +3 -0
  38. package/src/data/ontology-schema.json +1551 -0
  39. package/src/data/taxonomies.json +543 -0
  40. package/src/graph/GraphEngine.ts +7 -4
  41. package/src/router/index.ts +5 -0
  42. package/src/shims/empty.ts +1 -0
  43. package/src/shims/node-crypto.ts +6 -0
  44. package/src/shims/node-path.ts +10 -0
  45. package/src/stores/vocabulary.ts +75 -25
  46. package/src/style.css +74 -20
  47. package/src/utils/concept-formats.ts +22 -20
  48. package/src/utils/concept-helpers.ts +43 -23
  49. package/src/utils/designation-registry.ts +124 -0
  50. package/src/utils/relationship-categories.ts +84 -0
  51. package/src/views/OntologySchemaView.vue +302 -0
  52. package/src/views/PageView.vue +28 -17
  53. package/src/views/StatsView.vue +34 -12
  54. package/vite.config.ts +8 -0
@@ -0,0 +1,543 @@
1
+ {
2
+ "conceptStatus": {
3
+ "scheme": "gloss:status",
4
+ "schemeLabel": "Concept Status",
5
+ "schemeDefinition": "Lifecycle status of a managed terminology concept.",
6
+ "concepts": {
7
+ "draft": {
8
+ "id": "draft",
9
+ "iri": "gloss:status/draft",
10
+ "prefLabel": "draft",
11
+ "definition": "The concept is in draft form and has not yet been submitted."
12
+ },
13
+ "submitted": {
14
+ "id": "submitted",
15
+ "iri": "gloss:status/submitted",
16
+ "prefLabel": "submitted",
17
+ "definition": "The concept has been submitted for review."
18
+ },
19
+ "not_valid": {
20
+ "id": "not_valid",
21
+ "iri": "gloss:status/not_valid",
22
+ "prefLabel": "not valid",
23
+ "definition": "The concept has been reviewed and is not valid."
24
+ },
25
+ "invalid": {
26
+ "id": "invalid",
27
+ "iri": "gloss:status/invalid",
28
+ "prefLabel": "invalid",
29
+ "definition": "The concept is invalid."
30
+ },
31
+ "valid": {
32
+ "id": "valid",
33
+ "iri": "gloss:status/valid",
34
+ "prefLabel": "valid",
35
+ "definition": "The concept has been reviewed and is valid."
36
+ },
37
+ "superseded": {
38
+ "id": "superseded",
39
+ "iri": "gloss:status/superseded",
40
+ "prefLabel": "superseded",
41
+ "definition": "The concept has been superseded by a newer version."
42
+ },
43
+ "retired": {
44
+ "id": "retired",
45
+ "iri": "gloss:status/retired",
46
+ "prefLabel": "retired",
47
+ "definition": "The concept has been retired from active use."
48
+ }
49
+ }
50
+ },
51
+ "entryStatus": {
52
+ "scheme": "gloss:entstatus",
53
+ "schemeLabel": "Entry Status",
54
+ "schemeDefinition": "Lifecycle status of a localized concept entry within a glossary.",
55
+ "concepts": {
56
+ "valid": {
57
+ "id": "valid",
58
+ "iri": "gloss:entstatus/valid",
59
+ "prefLabel": "valid",
60
+ "definition": "The localized entry is valid and current."
61
+ },
62
+ "not_valid": {
63
+ "id": "not_valid",
64
+ "iri": "gloss:entstatus/not_valid",
65
+ "prefLabel": "not valid",
66
+ "definition": "The localized entry is not valid."
67
+ },
68
+ "superseded": {
69
+ "id": "superseded",
70
+ "iri": "gloss:entstatus/superseded",
71
+ "prefLabel": "superseded",
72
+ "definition": "The localized entry has been superseded by a newer version."
73
+ },
74
+ "retired": {
75
+ "id": "retired",
76
+ "iri": "gloss:entstatus/retired",
77
+ "prefLabel": "retired",
78
+ "definition": "The localized entry has been retired from active use."
79
+ }
80
+ }
81
+ },
82
+ "normativeStatus": {
83
+ "scheme": "gloss:norm",
84
+ "schemeLabel": "Normative Status",
85
+ "schemeDefinition": "Normative status of a designation within a concept entry.",
86
+ "concepts": {
87
+ "preferred": {
88
+ "id": "preferred",
89
+ "iri": "gloss:norm/preferred",
90
+ "prefLabel": "preferred",
91
+ "definition": "The preferred designation for this concept in this language."
92
+ },
93
+ "admitted": {
94
+ "id": "admitted",
95
+ "iri": "gloss:norm/admitted",
96
+ "prefLabel": "admitted",
97
+ "definition": "An admitted (accepted but not preferred) designation."
98
+ },
99
+ "deprecated": {
100
+ "id": "deprecated",
101
+ "iri": "gloss:norm/deprecated",
102
+ "prefLabel": "deprecated",
103
+ "definition": "A deprecated designation that should no longer be used."
104
+ },
105
+ "superseded": {
106
+ "id": "superseded",
107
+ "iri": "gloss:norm/superseded",
108
+ "prefLabel": "superseded",
109
+ "definition": "A superseded designation that has been replaced."
110
+ }
111
+ }
112
+ },
113
+ "sourceType": {
114
+ "scheme": "gloss:srctype",
115
+ "schemeLabel": "Source Type",
116
+ "schemeDefinition": "Type of bibliographic source for a concept or designation.",
117
+ "concepts": {
118
+ "authoritative": {
119
+ "id": "authoritative",
120
+ "iri": "gloss:srctype/authoritative",
121
+ "prefLabel": "authoritative",
122
+ "definition": "The concept is directly sourced from an authoritative standard or document."
123
+ },
124
+ "lineage": {
125
+ "id": "lineage",
126
+ "iri": "gloss:srctype/lineage",
127
+ "prefLabel": "lineage",
128
+ "definition": "The concept's lineage or historical reference."
129
+ }
130
+ }
131
+ },
132
+ "sourceStatus": {
133
+ "scheme": "gloss:srcstatus",
134
+ "schemeLabel": "Source Status",
135
+ "schemeDefinition": "Status of the concept relative to the bibliographic source.",
136
+ "concepts": {
137
+ "identical": {
138
+ "id": "identical",
139
+ "iri": "gloss:srcstatus/identical",
140
+ "prefLabel": "identical",
141
+ "definition": "The concept is identical to the source."
142
+ },
143
+ "similar": {
144
+ "id": "similar",
145
+ "iri": "gloss:srcstatus/similar",
146
+ "prefLabel": "similar",
147
+ "definition": "The concept is similar to the source."
148
+ },
149
+ "modified": {
150
+ "id": "modified",
151
+ "iri": "gloss:srcstatus/modified",
152
+ "prefLabel": "modified",
153
+ "definition": "The concept has been modified from the source."
154
+ },
155
+ "restyle": {
156
+ "id": "restyle",
157
+ "iri": "gloss:srcstatus/restyle",
158
+ "prefLabel": "restyle",
159
+ "definition": "The concept has been restyled from the source (editorial changes only)."
160
+ },
161
+ "context_added": {
162
+ "id": "context_added",
163
+ "iri": "gloss:srcstatus/context_added",
164
+ "prefLabel": "context added",
165
+ "definition": "Context has been added to the concept beyond the source."
166
+ },
167
+ "generalisation": {
168
+ "id": "generalisation",
169
+ "iri": "gloss:srcstatus/generalisation",
170
+ "prefLabel": "generalisation",
171
+ "definition": "The concept is a generalisation of the source concept."
172
+ },
173
+ "specialisation": {
174
+ "id": "specialisation",
175
+ "iri": "gloss:srcstatus/specialisation",
176
+ "prefLabel": "specialisation",
177
+ "definition": "The concept is a specialisation of the source concept."
178
+ },
179
+ "unspecified": {
180
+ "id": "unspecified",
181
+ "iri": "gloss:srcstatus/unspecified",
182
+ "prefLabel": "unspecified",
183
+ "definition": "The relationship to the source is unspecified."
184
+ },
185
+ "related": {
186
+ "id": "related",
187
+ "iri": "gloss:srcstatus/related",
188
+ "prefLabel": "related",
189
+ "definition": "The concept is related to the source."
190
+ },
191
+ "not_equal": {
192
+ "id": "not_equal",
193
+ "iri": "gloss:srcstatus/not_equal",
194
+ "prefLabel": "not equal",
195
+ "definition": "The concept is not equal to the source."
196
+ }
197
+ }
198
+ },
199
+ "relationshipType": {
200
+ "scheme": "gloss:rel",
201
+ "schemeLabel": "Relationship Type",
202
+ "schemeDefinition": "Typed relationships between concepts that have no standard SKOS or ISO 25964 equivalent. Standard relationship types (broader, narrower, exactMatch, etc.) are reused directly from SKOS and iso-thes vocabularies.",
203
+ "concepts": {
204
+ "deprecates": {
205
+ "id": "deprecates",
206
+ "iri": "gloss:rel/deprecates",
207
+ "prefLabel": "deprecates",
208
+ "definition": "This concept deprecates another concept."
209
+ },
210
+ "supersedes": {
211
+ "id": "supersedes",
212
+ "iri": "gloss:rel/supersedes",
213
+ "prefLabel": "supersedes",
214
+ "definition": "This concept supersedes another concept."
215
+ },
216
+ "superseded_by": {
217
+ "id": "superseded_by",
218
+ "iri": "gloss:rel/superseded_by",
219
+ "prefLabel": "superseded by",
220
+ "definition": "This concept has been superseded by another concept."
221
+ },
222
+ "compare": {
223
+ "id": "compare",
224
+ "iri": "gloss:rel/compare",
225
+ "prefLabel": "compare",
226
+ "definition": "This concept is compared to another concept (ISO 10241-1)."
227
+ },
228
+ "contrast": {
229
+ "id": "contrast",
230
+ "iri": "gloss:rel/contrast",
231
+ "prefLabel": "contrast",
232
+ "definition": "This concept contrasts with another concept (ISO 10241-1)."
233
+ },
234
+ "related_concept_broader": {
235
+ "id": "related_concept_broader",
236
+ "iri": "gloss:rel/related_concept_broader",
237
+ "prefLabel": "related concept (broader)",
238
+ "definition": "Associative relationship to a concept with broader scope (ISO 25964 / TBX)."
239
+ },
240
+ "related_concept_narrower": {
241
+ "id": "related_concept_narrower",
242
+ "iri": "gloss:rel/related_concept_narrower",
243
+ "prefLabel": "related concept (narrower)",
244
+ "definition": "Associative relationship to a concept with narrower scope (ISO 25964 / TBX)."
245
+ },
246
+ "sequentially_related": {
247
+ "id": "sequentially_related",
248
+ "iri": "gloss:rel/sequentially_related",
249
+ "prefLabel": "sequentially related",
250
+ "definition": "Sequential spatiotemporal relationship (ISO 25964 / TBX)."
251
+ },
252
+ "spatially_related": {
253
+ "id": "spatially_related",
254
+ "iri": "gloss:rel/spatially_related",
255
+ "prefLabel": "spatially related",
256
+ "definition": "Spatial relationship (ISO 25964 / TBX)."
257
+ },
258
+ "temporally_related": {
259
+ "id": "temporally_related",
260
+ "iri": "gloss:rel/temporally_related",
261
+ "prefLabel": "temporally related",
262
+ "definition": "Temporal relationship (ISO 25964 / TBX)."
263
+ },
264
+ "homograph": {
265
+ "id": "homograph",
266
+ "iri": "gloss:rel/homograph",
267
+ "prefLabel": "homograph",
268
+ "definition": "This concept has a homograph in another entry (ISO 12620 / TBX)."
269
+ },
270
+ "false_friend": {
271
+ "id": "false_friend",
272
+ "iri": "gloss:rel/false_friend",
273
+ "prefLabel": "false friend",
274
+ "definition": "This concept has a false friend in another language (ISO 12620 / TBX)."
275
+ },
276
+ "abbreviated_form_for": {
277
+ "id": "abbreviated_form_for",
278
+ "iri": "gloss:rel/abbreviated_form_for",
279
+ "prefLabel": "abbreviated form for",
280
+ "definition": "This designation is an abbreviated form of another designation."
281
+ },
282
+ "short_form_for": {
283
+ "id": "short_form_for",
284
+ "iri": "gloss:rel/short_form_for",
285
+ "prefLabel": "short form for",
286
+ "definition": "This designation is a short form of another designation."
287
+ }
288
+ }
289
+ },
290
+ "designationType": {
291
+ "scheme": "gloss:desig",
292
+ "schemeLabel": "Designation Type",
293
+ "schemeDefinition": "Type of designation (term, symbol, abbreviation) for a concept.",
294
+ "concepts": {
295
+ "expression": {
296
+ "id": "expression",
297
+ "iri": "gloss:desig/expression",
298
+ "prefLabel": "expression",
299
+ "definition": "A word or phrase used as a designation."
300
+ },
301
+ "abbreviation": {
302
+ "id": "abbreviation",
303
+ "iri": "gloss:desig/abbreviation",
304
+ "prefLabel": "abbreviation",
305
+ "definition": "A shortened form of a word or phrase (acronym, initialism, or truncation).",
306
+ "broader": "expression"
307
+ },
308
+ "symbol": {
309
+ "id": "symbol",
310
+ "iri": "gloss:desig/symbol",
311
+ "prefLabel": "symbol",
312
+ "definition": "A non-letter symbol representing a concept."
313
+ },
314
+ "letter_symbol": {
315
+ "id": "letter_symbol",
316
+ "iri": "gloss:desig/letter_symbol",
317
+ "prefLabel": "letter symbol",
318
+ "definition": "A single letter used as a symbol.",
319
+ "broader": "symbol"
320
+ },
321
+ "graphical_symbol": {
322
+ "id": "graphical_symbol",
323
+ "iri": "gloss:desig/graphical_symbol",
324
+ "prefLabel": "graphical symbol",
325
+ "definition": "An iconic or graphical symbol.",
326
+ "broader": "symbol"
327
+ }
328
+ }
329
+ },
330
+ "termType": {
331
+ "scheme": "gloss:termtype",
332
+ "schemeLabel": "Term Type",
333
+ "schemeDefinition": "ISO 12620 term type classification for designations. A categorization of a term with respect to formal representations or where/how it is used.",
334
+ "concepts": {
335
+ "abbreviation": {
336
+ "id": "abbreviation",
337
+ "iri": "gloss:termtype/abbreviation",
338
+ "prefLabel": "abbreviation",
339
+ "definition": "A shortened form of a word or phrase."
340
+ },
341
+ "acronym": {
342
+ "id": "acronym",
343
+ "iri": "gloss:termtype/acronym",
344
+ "prefLabel": "acronym",
345
+ "definition": "An abbreviation formed from initial letters, pronounced as a word.",
346
+ "broader": "abbreviation"
347
+ },
348
+ "clipped_term": {
349
+ "id": "clipped_term",
350
+ "iri": "gloss:termtype/clipped_term",
351
+ "prefLabel": "clipped term",
352
+ "definition": "A term formed by shortening a longer term."
353
+ },
354
+ "full_form": {
355
+ "id": "full_form",
356
+ "iri": "gloss:termtype/full_form",
357
+ "prefLabel": "full form",
358
+ "definition": "The complete, unabbreviated form of a term."
359
+ },
360
+ "initialism": {
361
+ "id": "initialism",
362
+ "iri": "gloss:termtype/initialism",
363
+ "prefLabel": "initialism",
364
+ "definition": "An abbreviation formed from initial letters, each pronounced separately.",
365
+ "broader": "abbreviation"
366
+ },
367
+ "short_form": {
368
+ "id": "short_form",
369
+ "iri": "gloss:termtype/short_form",
370
+ "prefLabel": "short form",
371
+ "definition": "A shortened form of a term."
372
+ },
373
+ "transliterated_form": {
374
+ "id": "transliterated_form",
375
+ "iri": "gloss:termtype/transliterated_form",
376
+ "prefLabel": "transliterated form",
377
+ "definition": "A term that has been converted from one script to another."
378
+ },
379
+ "transcribed_form": {
380
+ "id": "transcribed_form",
381
+ "iri": "gloss:termtype/transcribed_form",
382
+ "prefLabel": "transcribed form",
383
+ "definition": "A term that has been phonetically transcribed into another script."
384
+ },
385
+ "variant": {
386
+ "id": "variant",
387
+ "iri": "gloss:termtype/variant",
388
+ "prefLabel": "variant",
389
+ "definition": "An alternative spelling or form of a term."
390
+ },
391
+ "equation": {
392
+ "id": "equation",
393
+ "iri": "gloss:termtype/equation",
394
+ "prefLabel": "equation",
395
+ "definition": "A mathematical equation used as a term."
396
+ },
397
+ "formula": {
398
+ "id": "formula",
399
+ "iri": "gloss:termtype/formula",
400
+ "prefLabel": "formula",
401
+ "definition": "A mathematical formula used as a term."
402
+ },
403
+ "logical_expression": {
404
+ "id": "logical_expression",
405
+ "iri": "gloss:termtype/logical_expression",
406
+ "prefLabel": "logical expression",
407
+ "definition": "A logical expression used as a term."
408
+ },
409
+ "symbol": {
410
+ "id": "symbol",
411
+ "iri": "gloss:termtype/symbol",
412
+ "prefLabel": "symbol",
413
+ "definition": "A symbol used as a term."
414
+ },
415
+ "common_name": {
416
+ "id": "common_name",
417
+ "iri": "gloss:termtype/common_name",
418
+ "prefLabel": "common name",
419
+ "definition": "A non-scientific, commonly used name."
420
+ },
421
+ "entry_term": {
422
+ "id": "entry_term",
423
+ "iri": "gloss:termtype/entry_term",
424
+ "prefLabel": "entry term",
425
+ "definition": "The primary term for a concept entry."
426
+ },
427
+ "internationalism": {
428
+ "id": "internationalism",
429
+ "iri": "gloss:termtype/internationalism",
430
+ "prefLabel": "internationalism",
431
+ "definition": "A term that is used internationally across multiple languages."
432
+ },
433
+ "international_scientific_term": {
434
+ "id": "international_scientific_term",
435
+ "iri": "gloss:termtype/international_scientific_term",
436
+ "prefLabel": "international scientific term",
437
+ "definition": "A term established by an international scientific body."
438
+ },
439
+ "part_number": {
440
+ "id": "part_number",
441
+ "iri": "gloss:termtype/part_number",
442
+ "prefLabel": "part number",
443
+ "definition": "A part number used as a term."
444
+ },
445
+ "phraseological_unit": {
446
+ "id": "phraseological_unit",
447
+ "iri": "gloss:termtype/phraseological_unit",
448
+ "prefLabel": "phraseological unit",
449
+ "definition": "A fixed phrase or collocation used as a term."
450
+ },
451
+ "shortcut": {
452
+ "id": "shortcut",
453
+ "iri": "gloss:termtype/shortcut",
454
+ "prefLabel": "shortcut",
455
+ "definition": "A shortcut or quick reference used as a term."
456
+ },
457
+ "sku": {
458
+ "id": "sku",
459
+ "iri": "gloss:termtype/sku",
460
+ "prefLabel": "SKU",
461
+ "definition": "A stock keeping unit identifier used as a term."
462
+ },
463
+ "standard_text": {
464
+ "id": "standard_text",
465
+ "iri": "gloss:termtype/standard_text",
466
+ "prefLabel": "standard text",
467
+ "definition": "Standardized text used as a term."
468
+ },
469
+ "synonym": {
470
+ "id": "synonym",
471
+ "iri": "gloss:termtype/synonym",
472
+ "prefLabel": "synonym",
473
+ "definition": "A synonym of the primary term."
474
+ },
475
+ "synonymous_phrase": {
476
+ "id": "synonymous_phrase",
477
+ "iri": "gloss:termtype/synonymous_phrase",
478
+ "prefLabel": "synonymous phrase",
479
+ "definition": "A phrase that is synonymous with the primary term."
480
+ }
481
+ }
482
+ },
483
+ "grammarGender": {
484
+ "scheme": "gloss:gender",
485
+ "schemeLabel": "Grammar Gender",
486
+ "schemeDefinition": "Grammatical gender classification for designations.",
487
+ "concepts": {
488
+ "m": {
489
+ "id": "m",
490
+ "iri": "gloss:gender/m",
491
+ "prefLabel": "masculine",
492
+ "altLabel": "m",
493
+ "definition": "Masculine grammatical gender."
494
+ },
495
+ "f": {
496
+ "id": "f",
497
+ "iri": "gloss:gender/f",
498
+ "prefLabel": "feminine",
499
+ "altLabel": "f",
500
+ "definition": "Feminine grammatical gender."
501
+ },
502
+ "n": {
503
+ "id": "n",
504
+ "iri": "gloss:gender/n",
505
+ "prefLabel": "neuter",
506
+ "altLabel": "n",
507
+ "definition": "Neuter grammatical gender."
508
+ },
509
+ "c": {
510
+ "id": "c",
511
+ "iri": "gloss:gender/c",
512
+ "prefLabel": "common",
513
+ "altLabel": "c",
514
+ "definition": "Common grammatical gender (combined masculine/feminine)."
515
+ }
516
+ }
517
+ },
518
+ "grammarNumber": {
519
+ "scheme": "gloss:number",
520
+ "schemeLabel": "Grammar Number",
521
+ "schemeDefinition": "Grammatical number classification for designations.",
522
+ "concepts": {
523
+ "singular": {
524
+ "id": "singular",
525
+ "iri": "gloss:number/singular",
526
+ "prefLabel": "singular",
527
+ "definition": "Singular grammatical number (one item)."
528
+ },
529
+ "dual": {
530
+ "id": "dual",
531
+ "iri": "gloss:number/dual",
532
+ "prefLabel": "dual",
533
+ "definition": "Dual grammatical number (two items)."
534
+ },
535
+ "plural": {
536
+ "id": "plural",
537
+ "iri": "gloss:number/plural",
538
+ "prefLabel": "plural",
539
+ "definition": "Plural grammatical number (more than one item)."
540
+ }
541
+ }
542
+ }
543
+ }
@@ -22,7 +22,7 @@ export class GraphEngine {
22
22
  }
23
23
 
24
24
  addEdge(edge: GraphEdge): void {
25
- const key = `${edge.source}\0${edge.target}\0${edge.type}`;
25
+ const key = `${edge.source}\0${edge.target}\0${edge.type}\0${edge.lang ?? ''}`;
26
26
  if (this.edgeKeys.has(key)) return;
27
27
  this.edgeKeys.add(key);
28
28
 
@@ -39,13 +39,15 @@ export class GraphEngine {
39
39
  });
40
40
  }
41
41
  if (!this.nodes.has(edge.target)) {
42
+ const isDomain = edge.type === 'domain';
42
43
  this.nodes.set(edge.target, {
43
44
  uri: edge.target,
44
- register: parsed?.registerId ?? '',
45
- conceptId: parsed?.conceptId ?? '',
45
+ register: isDomain ? edge.register : (parsed?.registerId ?? ''),
46
+ conceptId: isDomain ? '' : (parsed?.conceptId ?? ''),
46
47
  designations: {},
47
- status: 'stub',
48
+ status: isDomain ? 'domain' : 'stub',
48
49
  loaded: false,
50
+ nodeType: isDomain ? 'domain' : undefined,
49
51
  });
50
52
  }
51
53
 
@@ -106,6 +108,7 @@ export class GraphEngine {
106
108
 
107
109
  const node = this.nodes.get(uri);
108
110
  if (node) collectedNodes.push(node);
111
+ if (node?.nodeType === 'domain') continue;
109
112
 
110
113
  const outEdges = this.getEdges(uri);
111
114
  for (const e of outEdges) {
@@ -40,6 +40,11 @@ export const routes: RouteRecordRaw[] = [
40
40
  name: 'graph',
41
41
  component: () => import('../views/GraphView.vue'),
42
42
  },
43
+ {
44
+ path: '/ontology',
45
+ name: 'ontology',
46
+ component: () => import('../views/OntologySchemaView.vue'),
47
+ },
43
48
  {
44
49
  path: '/news',
45
50
  name: 'news',
@@ -0,0 +1 @@
1
+ export default {};
@@ -0,0 +1,6 @@
1
+ export function createHash() {
2
+ return { update: () => ({ digest: () => '' }) };
3
+ }
4
+ export function randomUUID() {
5
+ return crypto.randomUUID();
6
+ }
@@ -0,0 +1,10 @@
1
+ const path = {
2
+ resolve: (..._args: string[]) => '',
3
+ dirname: (_p: string) => '',
4
+ basename: (_p: string) => '',
5
+ extname: (_p: string) => '',
6
+ join: (..._args: string[]) => '',
7
+ sep: '/',
8
+ };
9
+ export default path;
10
+ export const { resolve, dirname, basename, extname, join, sep } = path;