Compare commits
2 commits
0e157cf1e0
...
ca3ce0bd11
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ca3ce0bd11 | ||
|
|
ea5beabb61 |
11 changed files with 2751 additions and 5239 deletions
|
|
@ -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": {
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
@ -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
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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:
|
||||
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Reference in a new issue