Compare commits

..

2 commits

Author SHA1 Message Date
kempersc
ca3ce0bd11 align datamap targetSlot values with formal schema slot module names
All checks were successful
Deploy Frontend / build-and-deploy (push) Successful in 2m36s
2026-02-11 14:28:51 +01:00
kempersc
ea5beabb61 Update manifest.json timestamp, enhance LinkML interfaces with structured aliases and multilingual metadata, and improve CSS for aliases and translations sections 2026-02-11 13:57:50 +01:00
11 changed files with 2751 additions and 5239 deletions

View file

@ -1,5 +1,5 @@
{
"generated": "2026-02-11T11:22:25.461Z",
"generated": "2026-02-11T12:59:36.637Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 2369,
"categoryCounts": {

View file

@ -27,7 +27,7 @@ slots:
- This property connects observations and reconstructions back to the abstract Custodian hub, allowing multiple views of the same entity to be linked together.
- Range is Custodian (not uriorcurie) to create explicit relationship in UML diagrams and enable schema validation.
broad_mappings:
- schema:organization
- schema:Organization
annotations:
custodian_types: '["*"]'
exact_mappings:

View file

@ -142,5 +142,5 @@ slots:
| DCTerms | dcterms:identifier | 1395-1418 | close | Unambiguous reference |
| Schema.org | schema:identifier | 21325-346 | close | Any identifier for Thing |
| CIDOC-CRM | crm:P1_is_identified_by | 1172-1187 | broad | General identification |
| CIDOC-CRM | crm:P48_has_preferred_id | 2353-2369 | narrow | Preferred identifier |
| CIDOC-CRM | crm:P48_has_preferred_identifier | 2353-2369 | narrow | Preferred identifier |
- Updated 2026-02-03 with verified ontology mappings and translations.

File diff suppressed because it is too large Load diff

View file

@ -52,6 +52,12 @@ export interface SlotExample {
description?: string;
}
export interface StructuredAlias {
literal_form: string;
predicate?: string; // e.g., "EXACT_SYNONYM"
in_language?: string; // e.g., "nl", "de", "fr"
}
export interface SlotDefinition {
name: string;
description?: string;
@ -70,6 +76,10 @@ export interface SlotDefinition {
narrow_mappings?: string[];
broad_mappings?: string[];
related_mappings?: string[];
// Aliases and multilingual metadata
aliases?: string[];
alt_descriptions?: Record<string, string>;
structured_aliases?: StructuredAlias[];
}
export interface ClassDefinition {
@ -88,6 +98,10 @@ export interface ClassDefinition {
related_mappings?: string[];
comments?: string[];
annotations?: Record<string, unknown>;
// Aliases and multilingual metadata
aliases?: string[];
alt_descriptions?: Record<string, string>;
structured_aliases?: StructuredAlias[];
}
export interface EnumValueDefinition {

View file

@ -15,6 +15,12 @@ export interface SlotExample {
description?: string;
}
export interface StructuredAlias {
literal_form: string;
predicate?: string; // e.g., "EXACT_SYNONYM"
in_language?: string; // e.g., "nl", "de", "fr"
}
export interface LinkMLSlot {
name: string;
description?: string;
@ -32,6 +38,10 @@ export interface LinkMLSlot {
narrow_mappings?: string[];
broad_mappings?: string[];
related_mappings?: string[];
// Aliases and multilingual metadata
aliases?: string[];
alt_descriptions?: Record<string, string>;
structured_aliases?: StructuredAlias[];
}
export interface LinkMLClass {
@ -44,6 +54,10 @@ export interface LinkMLClass {
exact_mappings?: string[];
close_mappings?: string[];
comments?: string[];
// Aliases and multilingual metadata
aliases?: string[];
alt_descriptions?: Record<string, string>;
structured_aliases?: StructuredAlias[];
}
export interface LinkMLEnum {

View file

@ -2117,6 +2117,101 @@
font-style: italic;
}
/* Aliases section */
.linkml-viewer__aliases {
margin: 0.75rem 0;
}
.linkml-viewer__tag--alias {
background: #e8eaf6;
border-color: #5c6bc0;
color: #283593;
}
/* Alt Descriptions (translations) section */
.linkml-viewer__alt-descriptions {
margin: 0.75rem 0;
}
.linkml-viewer__alt-descriptions-list {
margin-top: 0.25rem;
display: flex;
flex-direction: column;
gap: 0.375rem;
}
.linkml-viewer__alt-description-item {
display: flex;
align-items: flex-start;
gap: 0.5rem;
padding: 0.375rem 0.5rem;
background: var(--surface-secondary, #f5f5f5);
border-radius: 4px;
font-size: 0.8125rem;
line-height: 1.4;
}
.linkml-viewer__alt-description-item--active {
background: #e3f2fd;
border-left: 3px solid #1976d2;
}
.linkml-viewer__lang-badge {
display: inline-block;
min-width: 1.75rem;
padding: 0.125rem 0.375rem;
background: #455a64;
color: white;
border-radius: 3px;
font-size: 0.6875rem;
font-weight: 600;
text-align: center;
text-transform: uppercase;
flex-shrink: 0;
line-height: 1.3;
}
.linkml-viewer__alt-description-text {
color: var(--text-primary, #212121);
flex: 1;
}
/* Structured Aliases section */
.linkml-viewer__structured-aliases {
margin: 0.75rem 0;
}
.linkml-viewer__structured-aliases-list {
margin-top: 0.25rem;
display: flex;
flex-direction: column;
gap: 0.25rem;
}
.linkml-viewer__structured-alias-item {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.25rem 0.5rem;
background: var(--surface-secondary, #f5f5f5);
border-radius: 4px;
font-size: 0.8125rem;
}
.linkml-viewer__structured-alias-form {
font-weight: 500;
color: var(--text-primary, #212121);
}
.linkml-viewer__structured-alias-predicate {
font-size: 0.6875rem;
padding: 0.125rem 0.375rem;
background: #e0e0e0;
border-radius: 3px;
color: #616161;
font-family: 'Monaco', 'Menlo', monospace;
}
/* Dark mode support for new slot elements */
[data-theme="dark"] .linkml-viewer__uri-value {
background: #374151;
@ -2172,6 +2267,45 @@
color: white;
}
/* Dark mode: Aliases */
[data-theme="dark"] .linkml-viewer__tag--alias {
background: #1a237e;
border-color: #7986cb;
color: #c5cae9;
}
/* Dark mode: Alt Descriptions */
[data-theme="dark"] .linkml-viewer__alt-description-item {
background: #1f2937;
}
[data-theme="dark"] .linkml-viewer__alt-description-item--active {
background: #1e3a5f;
border-left-color: #60a5fa;
}
[data-theme="dark"] .linkml-viewer__lang-badge {
background: #607d8b;
}
[data-theme="dark"] .linkml-viewer__alt-description-text {
color: #e5e7eb;
}
/* Dark mode: Structured Aliases */
[data-theme="dark"] .linkml-viewer__structured-alias-item {
background: #1f2937;
}
[data-theme="dark"] .linkml-viewer__structured-alias-form {
color: #e5e7eb;
}
[data-theme="dark"] .linkml-viewer__structured-alias-predicate {
background: #374151;
color: #9ca3af;
}
/* Enum Values */
.linkml-viewer__enum-values {
margin-top: 0.75rem;

View file

@ -1145,6 +1145,10 @@ const TEXT = {
broadMappings: { nl: 'Bredere mappings:', en: 'Broad Mappings:' },
relatedMappings: { nl: 'Gerelateerde mappings:', en: 'Related Mappings:' },
comments: { nl: 'Opmerkingen:', en: 'Comments:' },
// Aliases and multilingual metadata
aliases: { nl: 'Aliassen:', en: 'Aliases:' },
altDescriptions: { nl: 'Vertalingen:', en: 'Translations:' },
structuredAliases: { nl: 'Gestructureerde aliassen:', en: 'Structured Aliases:' },
// Slot usage indicator
slotUsageBadge: { nl: 'Slot Usage', en: 'Slot Usage' },
slotUsageTooltip: {
@ -2694,6 +2698,46 @@ const LinkMLViewerPage: React.FC = () => {
</div>
</div>
)}
{/* Aliases section */}
{cls.aliases && cls.aliases.length > 0 && (
<div className="linkml-viewer__aliases">
<span className="linkml-viewer__label">{t('aliases')}</span>
<div className="linkml-viewer__tag-list">
{cls.aliases.map(alias => (
<span key={alias} className="linkml-viewer__tag linkml-viewer__tag--alias">{alias}</span>
))}
</div>
</div>
)}
{/* Alt Descriptions (translations) section */}
{cls.alt_descriptions && Object.keys(cls.alt_descriptions).length > 0 && (
<div className="linkml-viewer__alt-descriptions">
<span className="linkml-viewer__label">{t('altDescriptions')}</span>
<div className="linkml-viewer__alt-descriptions-list">
{Object.entries(cls.alt_descriptions).map(([lang, desc]) => (
<div key={lang} className={`linkml-viewer__alt-description-item ${lang === language ? 'linkml-viewer__alt-description-item--active' : ''}`}>
<span className="linkml-viewer__lang-badge">{lang}</span>
<span className="linkml-viewer__alt-description-text">{desc}</span>
</div>
))}
</div>
</div>
)}
{/* Structured Aliases section */}
{cls.structured_aliases && cls.structured_aliases.length > 0 && (
<div className="linkml-viewer__structured-aliases">
<span className="linkml-viewer__label">{t('structuredAliases')}</span>
<div className="linkml-viewer__structured-aliases-list">
{cls.structured_aliases.map((sa, idx) => (
<div key={idx} className="linkml-viewer__structured-alias-item">
{sa.in_language && <span className="linkml-viewer__lang-badge">{sa.in_language}</span>}
<span className="linkml-viewer__structured-alias-form">{sa.literal_form}</span>
{sa.predicate && <span className="linkml-viewer__structured-alias-predicate">{sa.predicate}</span>}
</div>
))}
</div>
</div>
)}
{/* Imports Section - Shows forward dependencies (what this class depends on) */}
{isSchemaServiceComplete && (
<div className="linkml-viewer__imports-section">
@ -3453,6 +3497,47 @@ const LinkMLViewerPage: React.FC = () => {
</div>
)}
{/* Aliases section */}
{slot.aliases && slot.aliases.length > 0 && (
<div className="linkml-viewer__aliases">
<span className="linkml-viewer__label"><OverrideMarker property="aliases" />{t('aliases')}</span>
<div className="linkml-viewer__tag-list">
{slot.aliases.map(alias => (
<span key={alias} className="linkml-viewer__tag linkml-viewer__tag--alias">{alias}</span>
))}
</div>
</div>
)}
{/* Alt Descriptions (translations) section */}
{slot.alt_descriptions && Object.keys(slot.alt_descriptions).length > 0 && (
<div className="linkml-viewer__alt-descriptions">
<span className="linkml-viewer__label"><OverrideMarker property="alt_descriptions" />{t('altDescriptions')}</span>
<div className="linkml-viewer__alt-descriptions-list">
{Object.entries(slot.alt_descriptions).map(([lang, desc]) => (
<div key={lang} className={`linkml-viewer__alt-description-item ${lang === language ? 'linkml-viewer__alt-description-item--active' : ''}`}>
<span className="linkml-viewer__lang-badge">{lang}</span>
<span className="linkml-viewer__alt-description-text">{desc}</span>
</div>
))}
</div>
</div>
)}
{/* Structured Aliases section */}
{slot.structured_aliases && slot.structured_aliases.length > 0 && (
<div className="linkml-viewer__structured-aliases">
<span className="linkml-viewer__label"><OverrideMarker property="structured_aliases" />{t('structuredAliases')}</span>
<div className="linkml-viewer__structured-aliases-list">
{slot.structured_aliases.map((sa, idx) => (
<div key={idx} className="linkml-viewer__structured-alias-item">
{sa.in_language && <span className="linkml-viewer__lang-badge">{sa.in_language}</span>}
<span className="linkml-viewer__structured-alias-form">{sa.literal_form}</span>
{sa.predicate && <span className="linkml-viewer__structured-alias-predicate">{sa.predicate}</span>}
</div>
))}
</div>
</div>
)}
{/* Imports Section - Shows forward dependencies (what this slot depends on) */}
{!className && isSchemaServiceComplete && (
<div className="linkml-viewer__imports-section">

File diff suppressed because it is too large Load diff

View file

@ -27,7 +27,7 @@ slots:
- This property connects observations and reconstructions back to the abstract Custodian hub, allowing multiple views of the same entity to be linked together.
- Range is Custodian (not uriorcurie) to create explicit relationship in UML diagrams and enable schema validation.
broad_mappings:
- schema:organization
- schema:Organization
annotations:
custodian_types: '["*"]'
exact_mappings:

View file

@ -142,5 +142,5 @@ slots:
| DCTerms | dcterms:identifier | 1395-1418 | close | Unambiguous reference |
| Schema.org | schema:identifier | 21325-346 | close | Any identifier for Thing |
| CIDOC-CRM | crm:P1_is_identified_by | 1172-1187 | broad | General identification |
| CIDOC-CRM | crm:P48_has_preferred_id | 2353-2369 | narrow | Preferred identifier |
| CIDOC-CRM | crm:P48_has_preferred_identifier | 2353-2369 | narrow | Preferred identifier |
- Updated 2026-02-03 with verified ontology mappings and translations.