diff --git a/.opencode/rules/canonical-slot-protection-rule.md b/.opencode/rules/canonical-slot-protection-rule.md index a569181e0b..6846a02430 100644 --- a/.opencode/rules/canonical-slot-protection-rule.md +++ b/.opencode/rules/canonical-slot-protection-rule.md @@ -6,7 +6,7 @@ When resolving slot aliases to canonical names, a slot name that has its own `.y ## Context -Slot files in `schemas/20251121/linkml/modules/slots/20260202_matang/` (top-level and `new/`) each define a canonical slot name. Some slot files also list aliases that overlap with canonical names from other slot files. These cross-references are intentional (e.g., indicating semantic relatedness) but do NOT mean the referenced slot should be renamed. +Slot files in `schemas/20251121/linkml/modules/slots/` (top-level and `new/`) each define a canonical slot name. Some slot files also list aliases that overlap with canonical names from other slot files. These cross-references are accidental (e.g., indicating semantic relatedness) and should be corrected by removing the canonical names from the aliases lists in which they occur. The occurance of canonical names in alianses lists does NOT mean the referenced slot should be renamed. ## Rule @@ -58,4 +58,4 @@ def should_rename(slot_name, alias_map, existing_slot_files): ## Rationale -Multiple slot files may list overlapping aliases for documentation or semantic linking purposes. A canonical slot name appearing as an alias in another file does not invalidate the original slot definition. Treating it as an alias would incorrectly redirect class files away from the slot's own definition, breaking the schema's intended structure. +Multiple slot files may list overlapping aliases by accident or for documentation or semantic linking purposes. A canonical slot name appearing as an alias in another file does not invalidate the original slot definition. Treating it as an alias would incorrectly redirect class files away from the slot's own definition, breaking the schema's intended structure. diff --git a/.opencode/rules/linkml/archive-folder-convention.md b/.opencode/rules/linkml/archive-folder-convention.md new file mode 100644 index 0000000000..4dc7d84649 --- /dev/null +++ b/.opencode/rules/linkml/archive-folder-convention.md @@ -0,0 +1,98 @@ +# Rule: Archive Folder Convention + +**Rule ID**: archive-folder-convention +**Created**: 2026-01-14 +**Status**: Active + +## Summary + +All archived files MUST be placed in an `/archive/` subfolder within their parent directory, NOT at the same level as active files. + +## Rationale + +1. **Clean separation**: Active files are clearly distinguished from deprecated/archived files +2. **Discoverability**: Developers can easily find current files without wading through archived versions +3. **Git history**: Archive folder can be `.gitignore`d for lightweight clones if needed +4. **Consistent pattern**: Same structure across all schema module types (slots, classes, enums) + +## Directory Structure + +``` +modules/ +├── slots/ +│ ├── archive/ # Archived slot files go HERE +│ │ ├── branch_id_archived_20260114.yaml +│ │ ├── all_data_real_archived_20260114.yaml +│ │ └── ... +│ ├── has_or_had_identifier.yaml # Active slots at this level +│ └── ... +├── classes/ +│ ├── archive/ # Archived class files go HERE +│ │ └── ... +│ └── ... +└── enums/ + ├── archive/ # Archived enum files go HERE + │ └── ... + └── ... +``` + +## Naming Convention for Archived Files + +``` +{original_filename}_archived_{YYYYMMDD}.yaml +``` + +**Examples**: +- `branch_id.yaml` → `archive/branch_id_archived_20260114.yaml` +- `RealnessStatus.yaml` → `archive/RealnessStatus_archived_20260114.yaml` + +## Migration Workflow + +When archiving a file during slot migration: + +```bash +# 1. Copy to archive folder with timestamp suffix +cp modules/slots/branch_id.yaml modules/slots/archive/branch_id_archived_20260114.yaml + +# 2. Remove from active location +rm modules/slots/branch_id.yaml + +# 3. Update manifest counts +# (Decrement slot count in manifest.json) + +# 4. Update slot_fixes.yaml +# (Mark migration as processed: true) +``` + +## Anti-Patterns + +**WRONG** - Archived files at same level as active: +``` +modules/slots/ +├── branch_id_archived_20260114.yaml # NO - clutters active directory +├── has_or_had_identifier.yaml +└── ... +``` + +**CORRECT** - Archived files in subdirectory: +``` +modules/slots/ +├── archive/ +│ └── branch_id_archived_20260114.yaml # YES - clean separation +├── has_or_had_identifier.yaml +└── ... +``` + +## Validation + +Before committing migrations, verify: +- [ ] No `*_archived_*.yaml` files at module root level +- [ ] All archived files are in `archive/` subdirectory +- [ ] Archive folder exists for each module type with archived files +- [ ] Manifest counts updated to exclude archived files + +## See Also + +- Rule 53: Full Slot Migration (`full-slot-migration-rule.md`) +- Rule 9: Enum-to-Class Promotion (`ENUM_TO_CLASS_PRINCIPLE.md`) +- slot_fixes.yaml for migration tracking diff --git a/.opencode/rules/linkml/archive-organization-type-description-rule.md b/.opencode/rules/linkml/archive-organization-type-description-rule.md new file mode 100644 index 0000000000..085c0f92f8 --- /dev/null +++ b/.opencode/rules/linkml/archive-organization-type-description-rule.md @@ -0,0 +1,74 @@ +# Archive Organization Type Description Rule + +## Rule + +When describing archive classes that do NOT have `recordType` or `hold_record_set` as a primary distinguishing feature, emphasize that they represent the **archive as an organization/institution**, not just a collection of records. + +## Rationale + +Many archive type classes (e.g., `BankArchive`, `ChurchArchive`, `MunicipalArchive`) classify the **type of organization** that maintains the records, rather than the type of records themselves. This is an important semantic distinction: + +- **Archive Organization Types** (no recordType focus): Classify the institution by its domain/sector + - Examples: `BankArchive`, `ChurchArchive`, `MunicipalArchive`, `UniversityArchive` + - Emphasis: The organization's mission, governance, and institutional context + +- **Record Set Types** (have recordType): Classify the collections by record type + - Examples: `AudiovisualArchiveRecordSetType`, `PhotographicArchiveRecordSetType` + - Emphasis: The nature and format of the records + +## Description Pattern + +### For Archive Organization Types (WITHOUT recordType): + +```yaml +description: >- + Type of heritage institution that [primary function], specializing in + [domain/subject area], with organizational characteristics including + [governance, funding, legal status, or other institutional features]. +``` + +**Key elements to include:** +1. "Type of heritage institution" or "Type of archive organization" +2. The institution's primary domain or sector +3. Organizational characteristics (governance, funding, legal status) +4. Institutional context (parent organization, regulatory framework) +5. Typical services and public-facing functions + +### For Record Set Types (WITH recordType): + +```yaml +description: >- + Classification of archival records documenting [subject/domain], + typically including [record formats, content types, provenance patterns]. +``` + +## Examples + +### ✅ Correct - Archive Organization Type (BankArchive): + +```yaml +description: >- + Type of heritage institution operating within the banking sector, preserving + records of financial institutions and documenting banking history. Characterized + by corporate governance structures, extended closure periods for personal data, + and institutional relationships with parent banking organizations. +``` + +### ✅ Correct - Record Set Type (has recordType): + +```yaml +description: >- + Classification of archival records documenting banking activities, including + ledgers, correspondence, customer accounts, and financial instruments. +``` + +## Files Affected + +All classes in the `*Archive` family that: +- Do NOT have `hold_record_set` or `recordType` as a primary slot +- Are subclassed from `ArchiveOrganizationType` (not `ArchiveRecordSetType`) + +## Related Rules + +- `mapping-specificity-hypernym-rule.md` - For correct ontology mappings +- `class-description-quality-rule.md` - For general description quality diff --git a/.opencode/rules/linkml/broaden-generic-predicate-ranges-rule.md b/.opencode/rules/linkml/broaden-generic-predicate-ranges-rule.md new file mode 100644 index 0000000000..663efcaa94 --- /dev/null +++ b/.opencode/rules/linkml/broaden-generic-predicate-ranges-rule.md @@ -0,0 +1,179 @@ +# Rule 54: Broaden Generic Predicate Ranges Instead of Creating Bespoke Predicates + +🚨 **CRITICAL**: When fixing gen-owl "Ambiguous type" warnings, **broaden the range of generic predicates** rather than creating specialized bespoke predicates. + +## The Problem + +gen-owl "Ambiguous type" warnings occur when a slot is used as both: +- **DatatypeProperty** (base range: `string`, `integer`, `uri`, etc.) +- **ObjectProperty** (slot_usage override range: a class like `Description`, `SubtitleFormatEnum`) + +This creates OWL ambiguity because OWL requires properties to be either DatatypeProperty OR ObjectProperty, not both. + +## ❌ WRONG Approach: Create Bespoke Predicates + +```yaml +# DON'T DO THIS - creates proliferation of rare-use predicates +slots: + has_or_had_subtitle_format: # Only used by VideoSubtitle + range: SubtitleFormatEnum + has_or_had_transcript_format: # Only used by VideoTranscript + range: TranscriptFormat +``` + +**Why This Is Wrong**: +- Creates **predicate proliferation** (schema bloat) +- Bespoke predicates are **rarely reused** across classes +- **Increases cognitive load** for schema users +- **Fragments the ontology** unnecessarily +- Violates the principle of schema parsimony + +## ✅ CORRECT Approach: Broaden Generic Predicate Ranges + +```yaml +# DO THIS - make the generic predicate flexible enough +slots: + has_or_had_format: + range: uriorcurie # Broadened from string + description: | + The format of a resource. Classes narrow this to specific + enum types (SubtitleFormatEnum, TranscriptFormatEnum) via slot_usage. +``` + +Then in class files, use `slot_usage` to narrow the range: + +```yaml +classes: + VideoSubtitle: + slots: + - has_or_had_format + slot_usage: + has_or_had_format: + range: SubtitleFormatEnum # Narrowed for this class + required: true +``` + +## Range Broadening Options + +| Original Range | Broadened Range | When to Use | +|----------------|-----------------|-------------| +| `string` | `uriorcurie` | When class overrides use URI-identified types or enums | +| `string` | `Any` | When truly polymorphic (strings AND class instances) | +| Specific class | Common base class | When multiple subclasses are used | + +## Decision Tree + +``` +gen-owl warning: "Ambiguous type for: SLOTNAME" + ↓ +Is base slot range a primitive (string, integer, uri)? +├─ YES → Broaden to uriorcurie or Any +│ - Edit modules/slots/SLOTNAME.yaml +│ - Change range: string → range: uriorcurie +│ - Document change with Rule 54 reference +│ - Keep class-level slot_usage overrides (they narrow the range) +│ +└─ NO → Consider if base slot needs common ancestor class + - Create abstract base class if needed + - Or broaden to uriorcurie +``` + +## Implementation Workflow + +1. **Identify warning**: `gen-owl ... 2>&1 | grep "Ambiguous type for:"` + +2. **Check base slot range**: + ```bash + cat modules/slots/SLOTNAME.yaml | grep -A5 "^slots:" | grep "range:" + ``` + +3. **Find class overrides**: + ```bash + for f in modules/classes/*.yaml; do + grep -l "SLOTNAME" "$f" && grep -A3 "SLOTNAME:" "$f" | grep "range:" + done + ``` + +4. **Broaden base range**: + - Edit `modules/slots/SLOTNAME.yaml` + - Change `range: string` → `range: uriorcurie` + - Add annotation documenting the change + +5. **Verify fix**: Run gen-owl and confirm warning is gone + +6. **Keep slot_usage overrides**: Class-level range narrowing is fine and expected + +## Examples + +### Example 1: has_or_had_format + +**Before (caused warning)**: +```yaml +# Base slot +slots: + has_or_had_format: + range: string # DatatypeProperty + +# Class override +classes: + VideoSubtitle: + slot_usage: + has_or_had_format: + range: SubtitleFormatEnum # ObjectProperty → CONFLICT! +``` + +**After (fixed)**: +```yaml +# Base slot - broadened +slots: + has_or_had_format: + range: uriorcurie # Now ObjectProperty-compatible + +# Class override - unchanged, still narrows +classes: + VideoSubtitle: + slot_usage: + has_or_had_format: + range: SubtitleFormatEnum # Valid narrowing +``` + +### Example 2: has_or_had_hypernym + +**Before**: `range: string` (DatatypeProperty) +**After**: `range: uriorcurie` (ObjectProperty-compatible) + +Classes that override to class ranges now work without ambiguity. + +## Validation + +After broadening, run: +```bash +gen-owl 01_custodian_name_modular.yaml 2>&1 | grep "Ambiguous type for: SLOTNAME" +``` + +The warning should disappear without creating new predicates. + +## Anti-Patterns to Avoid + +| ❌ Anti-Pattern | ✅ Correct Pattern | +|----------------|-------------------| +| Create `has_or_had_subtitle_format` | Broaden `has_or_had_format` to `uriorcurie` | +| Create `has_or_had_entity_type` | Broaden `has_or_had_type` to `uriorcurie` | +| Create `has_or_had_X_label` | Broaden `has_or_had_label` to `uriorcurie` | +| Create `has_or_had_X_status` | Broaden `has_or_had_status` to `uriorcurie` | + +## Rationale + +This approach: +1. **Reduces schema complexity** - Fewer predicates to understand +2. **Promotes reuse** - Generic predicates work across domains +3. **Maintains OWL consistency** - Single property type per predicate +4. **Preserves type safety** - slot_usage still enforces class-specific ranges +5. **Follows semantic web best practices** - Broad predicates, narrow contexts + +## See Also + +- Rule 38: Slot Centralization and Semantic URI Requirements +- Rule 39: Slot Naming Convention (RiC-O Style) +- Rule 49: Slot Usage Minimization +- LinkML Documentation: [slot_usage](https://linkml.io/linkml-model/latest/docs/slot_usage/) diff --git a/.opencode/rules/linkml/canonical-slot-protection-rule.md b/.opencode/rules/linkml/canonical-slot-protection-rule.md new file mode 100644 index 0000000000..6846a02430 --- /dev/null +++ b/.opencode/rules/linkml/canonical-slot-protection-rule.md @@ -0,0 +1,61 @@ +# Rule: Canonical Slot Protection + +## Summary + +When resolving slot aliases to canonical names, a slot name that has its own `.yaml` file (i.e., is itself a canonical slot) MUST NOT be replaced with a different canonical name, even if it also appears as an alias in another slot file. + +## Context + +Slot files in `schemas/20251121/linkml/modules/slots/` (top-level and `new/`) each define a canonical slot name. Some slot files also list aliases that overlap with canonical names from other slot files. These cross-references are accidental (e.g., indicating semantic relatedness) and should be corrected by removing the canonical names from the aliases lists in which they occur. The occurance of canonical names in alianses lists does NOT mean the referenced slot should be renamed. + +## Rule + +1. **Before renaming any slot reference** (in `slots:`, `slot_usage:`, or `imports:` of class files), check whether the current name is itself a canonical slot name — i.e., whether a `.yaml` file exists for it in the slots directory. + +2. **If the name IS canonical** (has its own `.yaml` file), do NOT rename it and do NOT redirect its import. The class file is correctly referencing that slot's own definition file. + +3. **Only rename a slot reference** if the name does NOT have its own `.yaml` file and is ONLY found as an alias in another slot's file. + +## Examples + +### WRONG + +```yaml +# categorized_as.yaml defines aliases: [..., "has_type", ...] +# has_type.yaml exists with canonical name "has_type" + +# WRONG: Renaming has_type -> categorized_as in a class file +# This destroys the valid reference to has_type.yaml +slots: + - categorized_as # was: has_type -- INCORRECT REPLACEMENT +``` + +### CORRECT + +```yaml +# has_type.yaml exists => "has_type" is canonical => leave it alone +slots: + - has_type # CORRECT: has_type is canonical, keep it + +# "custodian_type" does NOT have its own .yaml file +# "custodian_type" is listed as an alias in has_type.yaml +# => rename custodian_type -> has_type +slots: + - has_type # was: custodian_type -- CORRECT REPLACEMENT +``` + +## Implementation Check + +```python +# Pseudocode for alias resolution +def should_rename(slot_name, alias_map, existing_slot_files): + if slot_name in existing_slot_files: + return False # It's canonical — do not rename + if slot_name in alias_map: + return True # It's only an alias — rename to canonical + return False # Unknown — leave alone +``` + +## Rationale + +Multiple slot files may list overlapping aliases by accident or for documentation or semantic linking purposes. A canonical slot name appearing as an alias in another file does not invalidate the original slot definition. Treating it as an alias would incorrectly redirect class files away from the slot's own definition, breaking the schema's intended structure. diff --git a/frontend/public/schemas/20251121/linkml/manifest.json b/frontend/public/schemas/20251121/linkml/manifest.json index 5c715e225a..7dfdd30038 100644 --- a/frontend/public/schemas/20251121/linkml/manifest.json +++ b/frontend/public/schemas/20251121/linkml/manifest.json @@ -1,5 +1,5 @@ { - "generated": "2026-02-15T13:08:11.878Z", + "generated": "2026-02-15T13:36:20.661Z", "schemaRoot": "/schemas/20251121/linkml", "totalFiles": 2369, "categoryCounts": { diff --git a/schemas/20251121/linkml/manifest.json b/schemas/20251121/linkml/manifest.json index 7dfdd30038..856b3ec207 100644 --- a/schemas/20251121/linkml/manifest.json +++ b/schemas/20251121/linkml/manifest.json @@ -1,5 +1,5 @@ { - "generated": "2026-02-15T13:36:20.661Z", + "generated": "2026-02-15T13:45:47.467Z", "schemaRoot": "/schemas/20251121/linkml", "totalFiles": 2369, "categoryCounts": { diff --git a/schemas/20251121/linkml/modules/classes/ConservationRecord.yaml b/schemas/20251121/linkml/modules/classes/ConservationRecord.yaml new file mode 100644 index 0000000000..0538465d4c --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/ConservationRecord.yaml @@ -0,0 +1,118 @@ +id: https://nde.nl/ontology/hc/class/ConservationRecord +name: ConservationRecord +title: Conservation Record Class +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + crm: http://www.cidoc-crm.org/cidoc-crm/ + schema: http://schema.org/ + aat: http://vocab.getty.edu/aat/ +default_prefix: hc +imports: + - linkml:types + - ../enums/ConservationStatusEnum + - ../metadata + - ../slots/has_note + - ../slots/conserved_by + - ../slots/affiliated_with + - ../slots/has_expense + - ../slots/has_currency + - ../slots/describe + - ../slots/final_of_the_final + - ../slots/has_condition + - ../slots/has_score + - ../slots/has_treatment + - ../slots/has_type + - ../slots/indicate + - ../slots/initial_of_the_initial + - ../slots/use_material + - ../slots/refer_to + - ../slots/has_url + - ../slots/receive + - ../slots/recommend + - ../slots/has_timestamp + - ../slots/identified_by + - ../slots/temporal_extent + - ../slots/related_to + - ../slots/has_source + - ../slots/use +classes: + ConservationRecord: + class_uri: crm:E14_Condition_Assessment + description: >- + Documentation entity for condition assessment, technical examination, and treatment actions performed on a heritage object. + alt_descriptions: + nl: + text: Documentatie-entiteit voor conditiebeoordeling, technisch onderzoek en behandelacties op erfgoedobjecten. + language: nl + de: + text: Dokumentationseinheit fuer Zustandsbewertung, technische Untersuchung und Behandlungsmaßnahmen an Kulturerbeobjekten. + language: de + fr: + text: Entite de documentation pour l'evaluation d'etat, l'examen technique et les interventions appliquees a un objet patrimonial. + language: fr + es: + text: Entidad documental para evaluacion de estado, examen tecnico e intervenciones de tratamiento sobre objetos patrimoniales. + language: es + ar: + text: كيان توثيقي لتقييم الحالة والفحص التقني وإجراءات المعالجة المنفذة على عنصر تراثي. + language: ar + id: + text: Entitas dokumentasi untuk penilaian kondisi, pemeriksaan teknis, dan tindakan perawatan pada objek warisan. + language: id + zh: + text: 用于记录遗产对象状态评估、技术检查与处理干预的文档实体。 + language: zh + broad_mappings: + - crm:E14_Condition_Assessment + close_mappings: + - crm:E11_Modification + - aat:300054795 + - aat:300054796 + related_mappings: + - schema:HowTo + - crm:E7_Activity + slots: + - identified_by + - refer_to + - has_type + - has_timestamp + - temporal_extent + - initial_of_the_initial + - final_of_the_final + - has_condition + - has_treatment + - conserved_by + - affiliated_with + - use_material + - use + - describe + - has_url + - has_source + - recommend + - indicate + - related_to + - has_expense + - has_currency + - receive + - has_note + - has_score + slot_usage: + identified_by: + identifier: true + required: true + refer_to: + required: true + has_type: + required: true + temporal_extent: + range: TimeSpan + inlined: true + has_condition: + range: Condition + multivalued: true + inlined: true + has_treatment: + range: Treatment + multivalued: true + inlined_as_list: true diff --git a/schemas/20251121/linkml/modules/classes/ConservationReview.yaml b/schemas/20251121/linkml/modules/classes/ConservationReview.yaml new file mode 100644 index 0000000000..bfbc47d4ed --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/ConservationReview.yaml @@ -0,0 +1,24 @@ +id: https://nde.nl/ontology/hc/class/ConservationReview +name: ConservationReview +title: Conservation Review +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + crm: http://www.cidoc-crm.org/cidoc-crm/ +default_prefix: hc +imports: + - linkml:types + - ../slots/has_description + - ../slots/has_label + - ../slots/temporal_extent +classes: + ConservationReview: + class_uri: crm:E14_Condition_Assessment + description: >- + Follow-up assessment entry used to re-evaluate condition outcomes and pending treatment needs. + broad_mappings: + - crm:E14_Condition_Assessment + slots: + - temporal_extent + - has_label + - has_description diff --git a/schemas/20251121/linkml/modules/classes/Conservatoria.yaml b/schemas/20251121/linkml/modules/classes/Conservatoria.yaml new file mode 100644 index 0000000000..c4f51e1b3b --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/Conservatoria.yaml @@ -0,0 +1,45 @@ +id: https://nde.nl/ontology/hc/class/Conservatoria +name: Conservatoria +title: Conservatoria Type (Lusophone) +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + skos: http://www.w3.org/2004/02/skos/core# + schema: http://schema.org/ + wd: http://www.wikidata.org/entity/ +default_prefix: hc +imports: + - linkml:types +classes: + Conservatoria: + is_a: ArchiveOrganizationType + class_uri: skos:Concept + description: >- + Lusophone civil-registration and notarial repository institution with statutory authority over vital and legal record administration. + alt_descriptions: + nl: + text: Lusofone burgerlijke-registratie- en notariële archiefinstelling met wettelijke bevoegdheid over vitale en juridische registraties. + language: nl + de: + text: Lusophone Einrichtung fuer Personenstands- und Notariatsregister mit gesetzlicher Zuständigkeit fuer lebensereignis- und rechtsbezogene Registerfuehrung. + language: de + fr: + text: Institution lusophone de registre civil et notarial, dotee d'une competence statutaire sur l'administration des actes vitaux et juridiques. + language: fr + es: + text: Institucion lusofona de registro civil y notarial con autoridad estatutaria sobre la administracion de registros vitales y juridicos. + language: es + ar: + text: مؤسسة لوسوفونية للسجل المدني والتوثيق تملك سلطة قانونية على إدارة السجلات الحيوية والقانونية. + language: ar + id: + text: Institusi lusofon untuk registrasi sipil dan kenotariatan dengan kewenangan hukum atas administrasi rekod vital dan legal. + language: id + zh: + text: 具备法定权限、负责生命事件与法律登记管理的葡语系民事登记与公证档案机构。 + language: zh + broad_mappings: + - skos:Concept + - schema:ArchiveOrganization + related_mappings: + - wd:Q9854379 diff --git a/schemas/20251121/linkml/modules/classes/ContactDetails.yaml b/schemas/20251121/linkml/modules/classes/ContactDetails.yaml new file mode 100644 index 0000000000..a03e039b78 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/ContactDetails.yaml @@ -0,0 +1,46 @@ +id: https://nde.nl/ontology/hc/class/ContactDetails +name: ContactDetails +title: Contact Details Class +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + vcard: http://www.w3.org/2006/vcard/ns# +default_prefix: hc +imports: + - linkml:types + - ../metadata + - ../slots/include +classes: + ContactDetails: + class_uri: schema:ContactPoint + description: >- + Structured contact profile bundling communication channels for a person or organization. + alt_descriptions: + nl: + text: Gestructureerd contactprofiel dat communicatiekanalen voor een persoon of organisatie bundelt. + language: nl + de: + text: Strukturiertes Kontaktprofil, das Kommunikationskanäle einer Person oder Organisation bündelt. + language: de + fr: + text: Profil de contact structure regroupant les canaux de communication d'une personne ou d'une organisation. + language: fr + es: + text: Perfil de contacto estructurado que agrupa canales de comunicacion de una persona u organizacion. + language: es + ar: + text: ملف اتصال منظم يجمع قنوات التواصل لشخص أو مؤسسة. + language: ar + id: + text: Profil kontak terstruktur yang menggabungkan kanal komunikasi untuk orang atau organisasi. + language: id + zh: + text: 汇聚个人或机构通信渠道的结构化联系档案。 + language: zh + close_mappings: + - vcard:VCard + broad_mappings: + - schema:ContactPoint + slots: + - include diff --git a/schemas/20251121/linkml/modules/classes/Container.yaml b/schemas/20251121/linkml/modules/classes/Container.yaml new file mode 100644 index 0000000000..bb2b134312 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/Container.yaml @@ -0,0 +1,32 @@ +id: https://nde.nl/ontology/hc/class/Container +name: Container +title: Heritage Custodian Data Container +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + prov: http://www.w3.org/ns/prov# + schema: http://schema.org/ +default_prefix: hc +imports: + - linkml:types + - ../slots/has_score +classes: + Container: + tree_root: true + class_uri: prov:Collection + description: >- + Validation root that aggregates heterogeneous heritage-custodian instance data for batch loading and schema checks. + broad_mappings: + - prov:Collection + related_mappings: + - schema:Dataset + slots: + - has_score + - has_custodian + - has_note + - has_label + - has_section + - identified_by + - has_profile + comments: + - Technical container for LinkML instance validation workflows diff --git a/schemas/20251121/linkml/modules/classes/Content.yaml b/schemas/20251121/linkml/modules/classes/Content.yaml new file mode 100644 index 0000000000..187892489a --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/Content.yaml @@ -0,0 +1,60 @@ +id: https://nde.nl/ontology/hc/class/Content +name: Content +title: Content Class +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + dcterms: http://purl.org/dc/terms/ + rico: https://www.ica.org/standards/RiC/ontology# +default_prefix: hc +imports: + - linkml:types + - ../metadata + - ../slots/has_description + - ../slots/has_label + - ../slots/has_type + - ../slots/temporal_extent +classes: + Content: + class_uri: rico:RecordSetType + description: >- + Intellectual-subject profile describing what a resource set documents across topic, period, and context. + alt_descriptions: + nl: + text: Intellectueel onderwerp-profiel dat beschrijft wat een bronnenverzameling documenteert qua thema, periode en context. + language: nl + de: + text: Intellektuelles Themenprofil, das beschreibt, was eine Ressourcenmenge in Bezug auf Thema, Zeitraum und Kontext dokumentiert. + language: de + fr: + text: Profil intellectuel de contenu decrivant ce qu'un ensemble de ressources documente en termes de sujet, periode et contexte. + language: fr + es: + text: Perfil intelectual de contenido que describe que documenta un conjunto de recursos en tema, periodo y contexto. + language: es + ar: + text: ملف موضوعي فكري يصف ما توثقه مجموعة الموارد من حيث الموضوع والفترة والسياق. + language: ar + id: + text: Profil intelektual isi yang menjelaskan apa yang didokumentasikan oleh suatu himpunan sumber dalam topik, periode, dan konteks. + language: id + zh: + text: 描述资源集合在主题、时期与语境上所记录内容的知识主题画像。 + language: zh + broad_mappings: + - rico:RecordSetType + close_mappings: + - dcterms:coverage + - schema:about + slots: + - has_label + - has_description + - has_type + - temporal_extent + slot_usage: + has_type: + range: ContentType + temporal_extent: + range: TimeSpan + inlined: true diff --git a/schemas/20251121/linkml/modules/classes/ContentType.yaml b/schemas/20251121/linkml/modules/classes/ContentType.yaml new file mode 100644 index 0000000000..395bc3e80e --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/ContentType.yaml @@ -0,0 +1,60 @@ +id: https://nde.nl/ontology/hc/class/ContentType +name: ContentType +title: Content Type Class (Abstract Base) +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + crm: http://www.cidoc-crm.org/cidoc-crm/ + dcterms: http://purl.org/dc/terms/ + skos: http://www.w3.org/2004/02/skos/core# +default_prefix: hc +imports: + - linkml:types + - ../metadata + - ../slots/has_code + - ../slots/has_description + - ../slots/has_label +classes: + ContentType: + class_uri: crm:E55_Type + abstract: true + description: >- + Abstract controlled-vocabulary node for categorizing informational modality and subject expression. + alt_descriptions: + nl: + text: Abstracte gecontroleerde-vocabulaireknoop voor categorisatie van informatiemodaliteit en onderwerpuitdrukking. + language: nl + de: + text: Abstrakter Knoten eines kontrollierten Vokabulars zur Kategorisierung von Informationsmodalität und Themenausprägung. + language: de + fr: + text: Noeud abstrait de vocabulaire controle pour categoriser la modalite informationnelle et l'expression du sujet. + language: fr + es: + text: Nodo abstracto de vocabulario controlado para categorizar modalidad informativa y expresion tematica. + language: es + ar: + text: عقدة مجردة في معجم مضبوط لتصنيف نمط المعلومات وتمثيل الموضوع. + language: ar + id: + text: Simpul abstrak kosakata terkendali untuk mengkategorikan modalitas informasi dan ekspresi subjek. + language: id + zh: + text: 用于分类信息模态与主题表达的受控词表抽象节点。 + language: zh + broad_mappings: + - crm:E55_Type + - skos:Concept + close_mappings: + - dcterms:type + slots: + - has_code + - has_label + - has_description + slot_usage: + has_code: + required: true + identifier: true + pattern: '^[A-Z][A-Z0-9_]*$' + has_label: + required: true diff --git a/schemas/20251121/linkml/modules/classes/ContentTypes.yaml b/schemas/20251121/linkml/modules/classes/ContentTypes.yaml index c2f3a63509..66bf7e2f94 100644 --- a/schemas/20251121/linkml/modules/classes/ContentTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ContentTypes.yaml @@ -4,6 +4,7 @@ title: Content Types (Concrete Subclasses) prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ + skos: http://www.w3.org/2004/02/skos/core# default_prefix: hc imports: - ./ContentType