diff --git a/frontend/public/schemas/20251121/linkml/manifest.json b/frontend/public/schemas/20251121/linkml/manifest.json index f1e1a531f1..cc3efb0e9d 100644 --- a/frontend/public/schemas/20251121/linkml/manifest.json +++ b/frontend/public/schemas/20251121/linkml/manifest.json @@ -1,5 +1,5 @@ { - "generated": "2026-01-22T11:52:29.369Z", + "generated": "2026-01-22T12:00:07.511Z", "schemaRoot": "/schemas/20251121/linkml", "totalFiles": 2969, "categoryCounts": { diff --git a/schemas/20251121/linkml/manifest.json b/schemas/20251121/linkml/manifest.json index cc3efb0e9d..cc2b1420b4 100644 --- a/schemas/20251121/linkml/manifest.json +++ b/schemas/20251121/linkml/manifest.json @@ -1,5 +1,5 @@ { - "generated": "2026-01-22T12:00:07.511Z", + "generated": "2026-01-22T14:15:56.373Z", "schemaRoot": "/schemas/20251121/linkml", "totalFiles": 2969, "categoryCounts": { diff --git a/schemas/20251121/linkml/modules/classes/Agent.yaml b/schemas/20251121/linkml/modules/classes/Agent.yaml new file mode 100644 index 0000000000..c2e2fad611 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/Agent.yaml @@ -0,0 +1,149 @@ +# Agent class +# Represents a person or organization that performs actions +# +# Created per slot_fixes.yaml migration for: collector +# Creation date: 2026-01-22 +# +# Rule 53 (No Bespoke Slots): collector → is_or_was_acquired_by + Agent + +id: https://nde.nl/ontology/hc/class/Agent +name: Agent +title: Agent + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + prov: http://www.w3.org/ns/prov# + foaf: http://xmlns.com/foaf/0.1/ + schema: http://schema.org/ + dcterms: http://purl.org/dc/terms/ + +default_prefix: hc + +imports: + - linkml:types + - ../slots/has_or_had_name + - ../slots/has_or_had_type + - ../slots/has_or_had_identifier + +classes: + Agent: + class_uri: prov:Agent + description: | + An agent (person, organization, or software) that performs actions. + + **RULE 53 MIGRATION**: + Replaces simple string slots with a structured agent model: + - `is_or_was_acquired_by` → Agent (this class) + - Supports typed agents (person, organization, software) + + **USAGE**: + ```yaml + is_or_was_acquired_by: + - agent_name: "Dr. Jane Smith" + agent_type: person + has_or_had_identifier: + - identifier_scheme: ORCID + identifier_value: "0000-0001-2345-6789" + ``` + + **Ontological Alignment**: + - **Primary** (`class_uri`): `prov:Agent` - PROV-O agent + - **Close**: `foaf:Agent` - FOAF agent + - **Close**: `schema:Person` / `schema:Organization` - Schema.org agents + - **Close**: `dcterms:Agent` - Dublin Core agent + + **Use Cases**: + - Specimen collectors (field biologists) + - Artwork donors/sellers + - Archive depositors + - Record creators + + exact_mappings: + - prov:Agent + + close_mappings: + - foaf:Agent + - dcterms:Agent + + related_mappings: + - schema:Person + - schema:Organization + + slots: + - has_or_had_name + - has_or_had_type + - has_or_had_identifier + + attributes: + agent_name: + range: string + description: Name of the agent (person or organization name) + required: true + + agent_type: + range: string + description: | + Type of agent: person, organization, software, group + required: false + examples: + - value: person + - value: organization + - value: software + - value: group + + agent_role: + range: string + description: | + Role of the agent in the action (collector, donor, creator, etc.) + required: false + + slot_usage: + has_or_had_name: + description: | + Structured name for the agent. + range: uriorcurie + required: false + has_or_had_type: + description: | + Classification of the agent type. + range: uriorcurie + required: false + has_or_had_identifier: + description: | + Identifiers for the agent (ORCID, ISNI, etc.). + range: uriorcurie + multivalued: true + required: false + + annotations: + specificity_score: "0.25" + specificity_rationale: "Broadly applicable - agents appear across all heritage contexts." + template_specificity: '{"archive_search": 0.30, "museum_search": 0.30, "library_search": 0.30, "collection_discovery": 0.40, "person_research": 0.60, "location_browse": 0.15, "identifier_lookup": 0.35, "organizational_change": 0.25, "digital_platform": 0.20, "general_heritage": 0.25}' + + examples: + - value: + agent_name: "Dr. Jane Smith" + agent_type: person + agent_role: collector + description: Field biologist who collected specimens + + - value: + agent_name: "Rijksmuseum Foundation" + agent_type: organization + agent_role: donor + description: Organization that donated artwork + + - value: + agent_name: "National Archives of the Netherlands" + agent_type: organization + agent_role: transferring_agency + has_or_had_identifier: + - identifier_scheme: ISIL + identifier_value: "NL-HaNA" + description: Archive transferring records + + comments: + - "Created per slot_fixes.yaml migration (2026-01-22)" + - "RULE 53: Replaces collector string slot with structured model" + - "Generic agent class for persons, organizations, and software" diff --git a/schemas/20251121/linkml/modules/classes/AppreciationEvent.yaml b/schemas/20251121/linkml/modules/classes/AppreciationEvent.yaml new file mode 100644 index 0000000000..e97690979a --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/AppreciationEvent.yaml @@ -0,0 +1,195 @@ +# AppreciationEvent class +# Created per slot_fixes.yaml revision for: comment_like_count +# +# Represents appreciation/engagement events on digital content +# MIGRATION NOTE (2026-01-22): Created as part of comment_like_count migration per Rule 53. + +id: https://nde.nl/ontology/hc/class/AppreciationEvent +name: appreciation_event_class +title: Appreciation Event Class + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + as: https://www.w3.org/ns/activitystreams# + prov: http://www.w3.org/ns/prov# + +imports: + - linkml:types + - ../metadata + - ../slots/has_or_had_quantity + - ../slots/has_or_had_unit + - ../slots/temporal_extent + - ./Quantity + - ./Unit + - ./TimeSpan + +default_prefix: hc + +classes: + AppreciationEvent: + class_uri: as:Like + description: | + Appreciation or engagement event for digital content. + + **PURPOSE**: + + Structured representation of appreciation metrics (likes, favorites, + upvotes, reactions) for digital content such as videos, comments, and posts. + Replaces simple integer counts with rich event data. + + **DESIGN RATIONALE**: + + Created per slot_fixes.yaml migration from `comment_like_count` integer + to structured `is_or_was_appreciated` + `AppreciationEvent` with + `has_or_had_quantity` + `Quantity` for metric representation. + + **APPRECIATION TYPES**: + + | Type | Description | Platforms | + |------|-------------|-----------| + | like | Standard like/thumbs up | YouTube, Facebook, Instagram | + | favorite | Favorite/bookmark | Twitter, YouTube | + | upvote | Upvote/positive rating | Reddit, StackOverflow | + | reaction | Emoji reaction | Facebook, Slack | + | share | Share/repost | All platforms | + + **ONTOLOGY ALIGNMENT**: + + | Ontology | Class/Property | Usage | + |----------|----------------|-------| + | **Activity Streams** | `as:Like` | Social appreciation activity | + | **Schema.org** | `schema:InteractionCounter` | Engagement metrics | + | **PROV-O** | `prov:Activity` | Event modeling | + + **EXAMPLE**: + + ```yaml + is_or_was_appreciated: + - appreciation_type: like + has_or_had_quantity: + numeric_value: 42 + has_or_had_unit: + unit_label: "likes" + temporal_extent: + begin_of_the_begin: "2025-01-14T10:00:00Z" + ``` + + exact_mappings: + - as:Like + + close_mappings: + - schema:InteractionCounter + - prov:Activity + + slots: + - has_or_had_quantity + - has_or_had_unit + - temporal_extent + + attributes: + appreciation_type: + description: | + Type of appreciation (like, favorite, upvote, reaction, share). + range: string + required: true + examples: + - value: "like" + description: Standard like/thumbs up + - value: "favorite" + description: Favorite/bookmark + - value: "upvote" + description: Upvote rating + - value: "reaction" + description: Emoji reaction + - value: "share" + description: Share/repost + + appreciation_count: + description: | + Simple count of appreciations (shorthand for has_or_had_quantity.numeric_value). + Use has_or_had_quantity for structured representation with unit. + range: integer + required: false + minimum_value: 0 + examples: + - value: 42 + description: 42 likes + + slot_usage: + has_or_had_quantity: + description: | + Structured quantity for the appreciation count. + Use Quantity class with numeric_value and has_or_had_unit. + range: Quantity + inlined: true + required: false + examples: + - value: + numeric_value: 42 + has_or_had_unit: + unit_label: "likes" + description: 42 likes using Quantity class + + has_or_had_unit: + description: | + Unit for the appreciation type (likes, favorites, etc.). + Can be specified directly or via has_or_had_quantity.has_or_had_unit. + range: Unit + inlined: true + required: false + examples: + - value: + unit_label: "likes" + description: Likes unit + + temporal_extent: + description: | + Time when the appreciation count was observed/recorded. + range: TimeSpan + inlined: true + required: false + examples: + - value: + begin_of_the_begin: "2025-01-14T10:00:00Z" + description: Observation timestamp + + examples: + - value: + appreciation_type: "like" + appreciation_count: 42 + description: Simple like count (minimal) + + - value: + appreciation_type: "like" + has_or_had_quantity: + numeric_value: 42 + has_or_had_unit: + unit_label: "likes" + temporal_extent: + begin_of_the_begin: "2025-01-14T10:00:00Z" + description: Full structured like count with timestamp + + - value: + appreciation_type: "favorite" + appreciation_count: 15 + description: Favorite count + + comments: + - Created 2026-01-22 from comment_like_count migration (Rule 53) + - Models appreciation metrics as structured events + - Supports multiple appreciation types (likes, favorites, etc.) + - Includes temporal observation tracking + + see_also: + - https://www.w3.org/ns/activitystreams#Like + - https://schema.org/InteractionCounter + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: >- + Universal - any custodian with digital content may track appreciation. + specificity_score: "0.60" + specificity_rationale: >- + Moderately specific - primarily for digital content engagement contexts. diff --git a/schemas/20251121/linkml/modules/classes/ArtSaleService.yaml b/schemas/20251121/linkml/modules/classes/ArtSaleService.yaml new file mode 100644 index 0000000000..b26b738525 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/ArtSaleService.yaml @@ -0,0 +1,148 @@ +# ArtSaleService class +# Created per slot_fixes.yaml revision for: commission_rate +# +# Represents art sales service with commission structure +# MIGRATION NOTE (2026-01-22): Created as part of commission_rate migration per Rule 53. + +id: https://nde.nl/ontology/hc/class/ArtSaleService +name: art_sale_service_class +title: Art Sale Service Class + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + +imports: + - linkml:types + - ../metadata + - ./Service + - ../slots/takes_or_took_comission + - ./CommissionRate + +default_prefix: hc + +classes: + ArtSaleService: + is_a: Service + class_uri: hc:ArtSaleService + description: | + Service for selling artworks, typically offered by commercial galleries. + + **PURPOSE**: + + Models art sales activities including commission structures, + market type (primary/secondary), and artist representation. + + **DESIGN RATIONALE**: + + Created per slot_fixes.yaml migration from `commission_rate` string + to structured `has_or_had_service` + `ArtSaleService` with nested + commission details. + + **USE CASES**: + + - Commercial gallery primary market sales (representing artists) + - Secondary market resales (consignment) + - Auction house sales (different commission model) + + **MARKET TYPES**: + + - **Primary market**: First sale of artwork by artist (40-50% commission) + - **Secondary market**: Resale of previously sold works (10-20% commission) + + close_mappings: + - schema:SellAction + - schema:Service + + slots: + - takes_or_took_comission + + attributes: + market_type: + description: | + Type of art market (primary or secondary). + range: string + required: false + examples: + - value: "primary" + description: First sale by artist + - value: "secondary" + description: Resale of previously sold work + + artist_representation: + description: | + Whether this service involves exclusive artist representation. + range: boolean + required: false + examples: + - value: true + description: Gallery exclusively represents the artist + - value: false + description: Consignment or non-exclusive arrangement + + sales_activity: + description: | + Whether active sales are conducted (vs exhibition-only). + range: boolean + required: true + examples: + - value: true + description: Active artwork sales + - value: false + description: Exhibition only, no sales + + slot_usage: + takes_or_took_comission: + description: | + Commission structure for this art sales service. + range: CommissionRate + inlined: true + required: false + examples: + - value: + rate_type: "primary_market" + has_or_had_percentage: + percentage_value: 50 + description: Standard 50% primary market commission + + examples: + - value: + service_name: "Primary Market Sales" + market_type: "primary" + artist_representation: true + sales_activity: true + takes_or_took_comission: + rate_type: "primary_market" + has_or_had_percentage: + percentage_value: 50 + percentage_display: "50%" + description: Commercial gallery with 50% primary market commission + + - value: + service_name: "Consignment Sales" + market_type: "secondary" + artist_representation: false + sales_activity: true + takes_or_took_comission: + rate_type: "secondary_market" + has_or_had_percentage: + percentage_value: 15 + percentage_display: "10-20%" + description: Secondary market consignment with variable commission + + comments: + - Created 2026-01-22 from commission_rate migration (Rule 53) + - Extends Service class for art sales context + - Supports primary and secondary market distinctions + + see_also: + - https://schema.org/SellAction + + annotations: + custodian_types: '["G", "C"]' + custodian_types_rationale: >- + Primarily for galleries (G) and commercial organizations (C). + specificity_score: "0.75" + specificity_rationale: >- + Specific to commercial art sales context. diff --git a/schemas/20251121/linkml/modules/classes/BiologicalObject.yaml b/schemas/20251121/linkml/modules/classes/BiologicalObject.yaml index 39dc715691..a8406f6ca8 100644 --- a/schemas/20251121/linkml/modules/classes/BiologicalObject.yaml +++ b/schemas/20251121/linkml/modules/classes/BiologicalObject.yaml @@ -31,11 +31,21 @@ imports: # REMOVED 2026-01-19: collection_date - migrated to was_acquired_through + Acquisition (Rule 53) - ../slots/was_acquired_through - ./Acquisition - - ../slots/collection_locality_text - - ../slots/collection_location - - ../slots/collector - - ../slots/common_name - - ../slots/common_name_language + # REMOVED 2026-01-19: collection_locality_text - migrated to describes_or_described + Locality (Rule 53) + - ../slots/describes_or_described + - ./Locality + # REMOVED 2026-01-19: collection_location - migrated to has_or_had_place + CollectionEvent (Rule 53) + - ../slots/has_or_had_place + - ./CollectionEvent + # REMOVED 2026-01-22: ../slots/collector - migrated to is_or_was_acquired_by + Agent (Rule 53) + - ../slots/is_or_was_acquired_by + - ./Agent + # REMOVED 2026-01-22: ../slots/common_name - migrated to has_or_had_name + Name + has_or_had_type + NameType (Rule 53) + # REMOVED 2026-01-22: ../slots/common_name_language - migrated to Name.has_or_had_language (Rule 53) + - ../slots/has_or_had_name + - ./Name + - ./NameType + - ./NameTypes - ../slots/has_or_had_custodian_type - ../slots/date_identified - ../slots/field_number @@ -90,10 +100,10 @@ classes: - Taxidermy mounts (mammals, birds, fish)\n- Study skins and skeletal material\n- Herbarium specimens (pressed plants)\n\ - Wet specimens (fluid-preserved animals)\n- Fossils of organisms\n- Entomological collections (pinned insects)\n- Paleontological\ \ specimens\n- Living collection records (botanical gardens, zoos)\n\n**Darwin Core Integration**:\n\nBiologicalObject\ - \ aligns with Darwin Core (TDWG) occurrence/specimen standards:\n- `taxon_name` → dwc:scientificName\n- `collection_date`\ - \ → dwc:eventDate\n- `collector` → dwc:recordedBy\n- `preservation_method` → dwc:preparations\n- `gbif_id` → dwc:occurrenceID\ - \ (GBIF)\n\n**Taxonomic Data Model**:\n\n```\nBiologicalObject\n │\n ├── taxon_name (scientific name: \"Raphus\ - \ cucullatus\")\n │ │\n │ ├── common_name (\"Dodo\")\n │ ├── has_or_had_rank (SPECIES)\n \ + \ aligns with Darwin Core (TDWG) occurrence/specimen standards:\n- `has_or_had_label` (TaxonName) → dwc:scientificName\n- `was_acquired_through` (Acquisition) → dwc:eventDate\ + \n- `is_or_was_acquired_by` (Agent) → dwc:recordedBy\n- `preservation_method` → dwc:preparations\n- `gbif_id` → dwc:occurrenceID\ + \ (GBIF)\n\n**Taxonomic Data Model**:\n\n```\nBiologicalObject\n │\n ├── has_or_had_label (TaxonName: \"Raphus\ + \ cucullatus\")\n │ │\n │ ├── has_or_had_name (Name with type=CommonName: \"Dodo\")\n │ ├── has_or_had_rank (SPECIES)\n \ \ │ ├── has_or_had_authority (\"Linnaeus, 1758\")\n │ └── higher_classification (Aves → Columbiformes\ \ → Columbidae)\n │\n ├── specimen_data\n │ │\n │ ├── specimen_type (HOLOTYPE, PARATYPE, etc.)\n\ \ │ ├── is_type_specimen (boolean)\n │ ├── sex (MALE, FEMALE, UNKNOWN)\n │ ├── life_stage\ @@ -126,11 +136,14 @@ classes: - is_or_was_listed_in # collection_date REMOVED - migrated to was_acquired_through + Acquisition (Rule 53, 2026-01-19) - was_acquired_through - - collection_locality_text - - collection_location - - collector - - common_name - - common_name_language + # collection_locality_text REMOVED - migrated to describes_or_described + Locality (Rule 53, 2026-01-19) + - describes_or_described + # collection_location REMOVED - migrated to has_or_had_place + CollectionEvent (Rule 53, 2026-01-19) + - has_or_had_place + # REMOVED 2026-01-22: collector - migrated to is_or_was_acquired_by + Agent (Rule 53) + - is_or_was_acquired_by + # REMOVED 2026-01-22: common_name, common_name_language - migrated to has_or_had_name + Name (Rule 53) + - has_or_had_name - has_or_had_custodian_type - date_identified - field_number @@ -214,21 +227,40 @@ classes: scientific_name: "Panthera leo" taxonomic_rank: SPECIES description: Lion (authority omitted) - common_name: + # MIGRATED 2026-01-22: common_name, common_name_language → has_or_had_name + Name (Rule 53) + has_or_had_name: + description: | + Common/vernacular names for this biological object. + MIGRATED from common_name and common_name_language per slot_fixes.yaml (Rule 53, 2026-01-22). + + Uses Name class for structured representation including: + - Name value (has_or_had_label) + - Name type (has_or_had_type → NameType, e.g., CommonName) + - Language (has_or_had_language) required: false - range: string + range: Name multivalued: true + inlined: true + inlined_as_list: true examples: - - value: Dodo - - value: Lion - - value: Coast Redwood - common_name_language: - required: false - range: string - multivalued: true - examples: - - value: en - - value: nl + - value: + has_or_had_label: "Dodo" + has_or_had_type: CommonName + has_or_had_language: "en" + description: English common name + - value: + has_or_had_label: "Dronte" + has_or_had_type: CommonName + has_or_had_language: "nl" + description: Dutch common name + - value: + has_or_had_label: "Lion" + has_or_had_type: CommonName + has_or_had_language: "en" + - value: + has_or_had_label: "Coast Redwood" + has_or_had_type: CommonName + has_or_had_language: "en" has_or_had_rank: # was: taxonomic_rank - migrated per Rule 53/56 (2026-01-17) required: false range: string @@ -407,29 +439,65 @@ classes: end_of_the_end: "1879-12-31" acquisition_date_text: "1870s" acquisition_notes: "Historical specimen with approximate date" - collection_location: + # MIGRATED 2026-01-19: collection_location → has_or_had_place + CollectionEvent (Rule 53) + has_or_had_place: required: false range: CustodianPlace inlined: true + description: >- + Structured location where specimen was collected. + MIGRATED from collection_location per slot_fixes.yaml (Rule 53, 2026-01-19). + + Uses CustodianPlace for detailed location including coordinates. examples: - value: place_name: Mauritius country: MU latitude: -20.2 longitude: 57.5 - collection_locality_text: + # MIGRATED 2026-01-19: collection_locality_text → describes_or_described + Locality (Rule 53) + describes_or_described: required: false - range: string + range: Locality + inlined: true + inlined_as_list: true + description: >- + Verbatim locality description as recorded on specimen label. + MIGRATED from collection_locality_text per slot_fixes.yaml (Rule 53, 2026-01-19). + + Uses Locality class for structured representation including + original text, language, and provenance. examples: - - value: Mauritius, near Port Louis, in forest - - value: 'Indonesia: Java: Mt. Gede, 1500m' - collector: + - value: + verbatim_text: "Mauritius, near Port Louis, in forest" + original_language: "en" + description: Locality for Dodo specimen + - value: + verbatim_text: "Indonesia: Java: Mt. Gede, 1500m" + original_language: "en" + interpretation_notes: "Mt. Gede is Gunung Gede volcano" + description: Indonesian specimen with elevation + # MIGRATED 2026-01-22: collector → is_or_was_acquired_by + Agent (Rule 53) + is_or_was_acquired_by: + description: | + The person(s) or organization(s) who collected this specimen. + Migrated from collector per slot_fixes.yaml revision. required: false - range: string + range: Agent multivalued: true + inlined: true + inlined_as_list: true examples: - - value: Alfred Russel Wallace - - value: Charles Darwin + - value: + agent_name: "Alfred Russel Wallace" + agent_type: person + agent_role: collector + description: Victorian naturalist collector + - value: + agent_name: "Charles Darwin" + agent_type: person + agent_role: collector + description: HMS Beagle expedition collector field_number: required: false range: string @@ -529,9 +597,14 @@ classes: scientific_name: "Raphus cucullatus (Linnaeus, 1758)" authorship: "Linnaeus, 1758" taxonomic_rank: SPECIES - common_name: - - Dodo - - Dronte + # MIGRATED 2026-01-22: common_name → has_or_had_name + Name (Rule 53) + has_or_had_name: + - has_or_had_label: "Dodo" + has_or_had_type: CommonName + has_or_had_language: "en" + - has_or_had_label: "Dronte" + has_or_had_type: CommonName + has_or_had_language: "nl" has_or_had_rank: SPECIES # was: taxonomic_rank - migrated per Rule 53/56 (2026-01-17) higher_classification: Animalia|Chordata|Aves|Columbiformes|Columbidae|Raphus part_type: @@ -546,7 +619,8 @@ classes: begin_of_the_begin: "1600-01-01" end_of_the_end: "1662-12-31" notes: "Pre-1662 (before Great Fire of London destroyed records)" - collection_location: + # MIGRATED 2026-01-19: collection_location → has_or_had_place (Rule 53) + has_or_had_place: place_name: Mauritius country: MU iucn_status: EX @@ -570,13 +644,19 @@ classes: scientific_name: "Megatherium americanum Cuvier, 1796" authorship: "Cuvier, 1796" taxonomic_rank: SPECIES - common_name: - - Giant Ground Sloth + # MIGRATED 2026-01-22: common_name → has_or_had_name + Name (Rule 53) + has_or_had_name: + - has_or_had_label: "Giant Ground Sloth" + has_or_had_type: CommonName + has_or_had_language: "en" has_or_had_rank: SPECIES # was: taxonomic_rank - migrated per Rule 53/56 (2026-01-17) part_type: - SKELETON preservation_method: FOSSIL_PREPARED - collection_locality_text: Argentina, Buenos Aires Province + # MIGRATED 2026-01-19: collection_locality_text → describes_or_described (Rule 53) + describes_or_described: + - verbatim_text: "Argentina, Buenos Aires Province" + original_language: "en" iucn_status: EX current_keeper: https://nde.nl/ontology/hc/custodian/nl/naturalis description: Megatherium skeleton at Naturalis Biodiversity Center @@ -591,9 +671,14 @@ classes: scientific_name: "Quercus robur L." authorship: "L." taxonomic_rank: SPECIES - common_name: - - English Oak - - Pedunculate Oak + # MIGRATED 2026-01-22: common_name → has_or_had_name + Name (Rule 53) + has_or_had_name: + - has_or_had_label: "English Oak" + has_or_had_type: CommonName + has_or_had_language: "en" + - has_or_had_label: "Pedunculate Oak" + has_or_had_type: CommonName + has_or_had_language: "en" has_or_had_rank: SPECIES # was: taxonomic_rank - migrated per Rule 53/56 (2026-01-17) has_or_had_authority: # was: taxonomic_authority - migrated per Rule 53/56 (2026-01-16) has_or_had_label: "Linnaeus, 1753" @@ -617,7 +702,10 @@ classes: begin_of_the_begin: "1750-01-01" end_of_the_end: "1759-12-31" notes: "Collected by Linnaeus in the 1750s" - collector: - - Carl Linnaeus + # MIGRATED 2026-01-22: collector → is_or_was_acquired_by + Agent (Rule 53) + is_or_was_acquired_by: + - agent_name: "Carl Linnaeus" + agent_type: person + agent_role: collector current_keeper: https://nde.nl/ontology/hc/custodian/uk/royal-botanic-gardens-kew description: Oak type specimen at Royal Botanic Gardens, Kew diff --git a/schemas/20251121/linkml/modules/classes/CateringPlace.yaml b/schemas/20251121/linkml/modules/classes/CateringPlace.yaml index 10fdd8fae9..ca7e4e3664 100644 --- a/schemas/20251121/linkml/modules/classes/CateringPlace.yaml +++ b/schemas/20251121/linkml/modules/classes/CateringPlace.yaml @@ -30,7 +30,9 @@ imports: - ../slots/catering_price_range - ../slots/has_or_had_accessibility_feature - ../slots/operator - - ../slots/founded_year + # MIGRATED 2026-01-22: founded_year → is_or_was_founded_through + FoundingEvent (Rule 53) + - ../slots/is_or_was_founded_through + - ./FoundingEvent - ../slots/specificity_annotation - ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17) - ../slots/is_or_was_derived_from # was: was_derived_from - migrated per Rule 53 @@ -92,7 +94,7 @@ classes: - catering_price_range - catering_type - cuisine_type - - founded_year + - is_or_was_founded_through # was: founded_year - migrated per Rule 53 (2026-01-22) - has_michelin_star - has_outdoor_seating - heritage_type_classification @@ -238,11 +240,20 @@ classes: description: Dutch catering company - value: In-house description: Museum-operated - founded_year: - range: integer + # MIGRATED 2026-01-22: founded_year → is_or_was_founded_through + FoundingEvent (Rule 53) + is_or_was_founded_through: + description: | + The founding event for this catering place. + Migrated from founded_year per slot_fixes.yaml revision. + range: FoundingEvent + inlined: true examples: - - value: 1902 - description: Historic café founding year + - value: + temporal_extent: + begin_of_the_begin: "1902-01-01" + end_of_the_begin: "1902-12-31" + founding_description: "Established as historic café" + description: Historic café founding event (1902) is_or_was_derived_from: # was: was_derived_from - migrated per Rule 53 range: CustodianObservation multivalued: true @@ -308,6 +319,11 @@ classes: seating_capacity: 150 has_outdoor_seating: true opening_hour: Daily 07:00-23:00 - founded_year: 1902 + # MIGRATED 2026-01-22: founded_year → is_or_was_founded_through + FoundingEvent (Rule 53) + is_or_was_founded_through: + temporal_extent: + begin_of_the_begin: "1902-01-01" + end_of_the_begin: "1902-12-31" + founding_description: "Historic art deco café established in 1902" catering_price_range: €€€ description: Historic heritage café diff --git a/schemas/20251121/linkml/modules/classes/CollectionEvent.yaml b/schemas/20251121/linkml/modules/classes/CollectionEvent.yaml new file mode 100644 index 0000000000..b63e390bb3 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/CollectionEvent.yaml @@ -0,0 +1,268 @@ +# CollectionEvent class +# Structured representation of specimen collection events. +# +# MIGRATION NOTE (2026-01-19): +# Created as part of collection_location migration per slot_fixes.yaml (Rule 53). +# +# Darwin Core alignment: Captures dwc:Event for specimen collection activities. + +id: https://nde.nl/ontology/hc/class/CollectionEvent +name: CollectionEvent +title: Collection Event Class + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + crm: http://www.cidoc-crm.org/cidoc-crm/ + dcterms: http://purl.org/dc/terms/ + dwc: http://rs.tdwg.org/dwc/terms/ + prov: http://www.w3.org/ns/prov# + +imports: + - linkml:types + - ../metadata + - ../slots/has_or_had_place + - ../slots/has_or_had_provenance + - ../slots/has_or_had_note + - ../slots/temporal_extent + - ../slots/is_or_was_acquired_by # Added 2026-01-22 for collector migration (Rule 53) + - ./Place + - ./CustodianPlace + - ./TimeSpan + - ./Agent # Added 2026-01-22 for collector migration (Rule 53) + +default_prefix: hc + +classes: + CollectionEvent: + class_uri: dwc:Event + description: >- + A specimen collection event capturing where, when, and by whom a specimen was collected. + + **Purpose**: + Consolidates collection metadata into a structured event following Darwin Core + and CIDOC-CRM event modeling patterns. + + **Darwin Core Alignment**: + - `has_or_had_place` → dwc:locality (structured location) + - `temporal_extent` → dwc:eventDate (collection date/period) + - `is_or_was_acquired_by` → dwc:recordedBy (was: collector, migrated 2026-01-22) + - `field_number` → dwc:fieldNumber + + **CIDOC-CRM Alignment**: + - Maps to crm:E7_Activity (collection activity) + - `has_or_had_place` → crm:P7_took_place_at + - `temporal_extent` → crm:P4_has_time-span + + **REPLACES**: + - Individual slots: collection_location, collection_date, field_number + - collector → is_or_was_acquired_by + Agent (migrated 2026-01-22) + - Consolidates into structured event with provenance + + **Example**: + ```yaml + CollectionEvent: + has_or_had_place: + place_name: "Mauritius" + country: "MU" + latitude: -20.2 + longitude: 57.5 + temporal_extent: + begin_of_the_begin: "1662-01-01" + end_of_the_end: "1662-12-31" + is_or_was_acquired_by: # was: collector - migrated 2026-01-22 + - agent_name: "Unknown Dutch sailor" + agent_type: person + agent_role: collector + field_number: "VOC-1662-001" + ``` + + exact_mappings: + - dwc:Event + + close_mappings: + - crm:E7_Activity + - prov:Activity + + related_mappings: + - schema:Action + + mixins: + - HasProvenance + + slots: + - has_or_had_place + - has_or_had_provenance + - has_or_had_note + - temporal_extent + - is_or_was_acquired_by # Added 2026-01-22: was collector (Rule 53) + + attributes: + event_id: + description: >- + Unique identifier for this collection event. + range: uriorcurie + identifier: true + slot_uri: dcterms:identifier + + # collector: REMOVED - migrated to is_or_was_acquired_by per Rule 53 (2026-01-22) + # Now uses imported slot is_or_was_acquired_by with Agent class + + field_number: + description: >- + Collector's field number or identifier. + Maps to dwc:fieldNumber. + range: string + slot_uri: dwc:fieldNumber + examples: + - value: "ARW-1234" + - value: "CD-HMS Beagle-567" + + sampling_protocol: + description: >- + Method used to collect the specimen. + Maps to dwc:samplingProtocol. + range: string + slot_uri: dwc:samplingProtocol + examples: + - value: "UV light trap" + - value: "Mist net" + - value: "Hand collection" + + habitat_description: + description: >- + Description of habitat where specimen was collected. + Maps to dwc:habitat. + range: string + slot_uri: dwc:habitat + examples: + - value: "Tropical rainforest, understory" + - value: "Coral reef, depth 15m" + + slot_usage: + has_or_had_place: + description: >- + Structured location where specimen was collected. + MIGRATED from collection_location per slot_fixes.yaml (Rule 53, 2026-01-19). + + Uses CustodianPlace for detailed location including coordinates. + range: CustodianPlace + inlined: true + examples: + - value: + place_name: "Mauritius" + country: "MU" + latitude: -20.2 + longitude: 57.5 + + temporal_extent: + description: >- + Time period when collection occurred. + Supports exact dates, ranges, and approximate periods. + range: TimeSpan + inlined: true + examples: + - value: + begin_of_the_begin: "2020-06-15" + end_of_the_end: "2020-06-15" + description: Exact date + - value: + begin_of_the_begin: "1870-01-01" + end_of_the_end: "1879-12-31" + notes: "1870s" + description: Approximate decade + + has_or_had_provenance: + description: >- + Provenance of this collection event record. + range: ProvenanceBlock + inlined: true + + is_or_was_acquired_by: + description: >- + Person(s) who collected the specimen. + MIGRATED from collector attribute per slot_fixes.yaml (Rule 53, 2026-01-22). + + Uses Agent class for structured representation with name, type, and role. + Maps to dwc:recordedBy via Agent. + range: Agent + multivalued: true + inlined: true + inlined_as_list: true + examples: + - value: + agent_name: "Alfred Russel Wallace" + agent_type: person + agent_role: collector + description: Victorian naturalist collector + - value: + agent_name: "Charles Darwin" + agent_type: person + agent_role: collector + description: HMS Beagle expedition collector + + comments: + - Created 2026-01-19 from collection_location migration (Rule 53) + - "2026-01-22: collector attribute → is_or_was_acquired_by slot + Agent class (Rule 53)" + - Aligns with Darwin Core dwc:Event + - Consolidates collection metadata into structured event + - Supports provenance tracking for historical specimens + + see_also: + - https://dwc.tdwg.org/terms/#dwc:Event + - https://cidoc-crm.org/html/cidoc_crm_v7.1.3.html#E7 + + annotations: + custodian_types: '["B", "M", "R"]' + custodian_types_rationale: >- + Primarily used for Botanical/Zoo (B), Museum (M), and Research (R) custodians + with biological specimen collections. + custodian_types_primary: "B" + specificity_score: "0.70" + specificity_rationale: >- + Fairly specific - primarily for natural history specimen collecting events. + template_specificity: + museum_search: "0.75" + collection_discovery: "0.80" + general_heritage: "0.55" + + examples: + - value: + event_id: "https://nde.nl/ontology/hc/event/dodo-collection-1662" + has_or_had_place: + place_name: "Mauritius" + country: "MU" + latitude: -20.2 + longitude: 57.5 + temporal_extent: + begin_of_the_begin: "1600-01-01" + end_of_the_end: "1662-12-31" + notes: "Pre-1662 (before extinction)" + # collector → is_or_was_acquired_by (migrated 2026-01-22) + is_or_was_acquired_by: + - agent_name: "Unknown Dutch sailor" + agent_type: person + agent_role: collector + description: Historical Dodo collection event + + - value: + event_id: "https://nde.nl/ontology/hc/event/wallace-java-1234" + has_or_had_place: + place_name: "Mt. Gede" + region: "West Java" + country: "ID" + latitude: -6.78 + longitude: 106.98 + temporal_extent: + begin_of_the_begin: "1854-06-01" + end_of_the_end: "1854-06-30" + # collector → is_or_was_acquired_by (migrated 2026-01-22) + is_or_was_acquired_by: + - agent_name: "Alfred Russel Wallace" + agent_type: person + agent_role: collector + field_number: "ARW-1234" + sampling_protocol: "Hand collection" + habitat_description: "Montane forest, 1500m elevation" + description: Wallace collection in Java diff --git a/schemas/20251121/linkml/modules/classes/ColonialStatus.yaml b/schemas/20251121/linkml/modules/classes/ColonialStatus.yaml new file mode 100644 index 0000000000..92b769f9c7 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/ColonialStatus.yaml @@ -0,0 +1,198 @@ +# ColonialStatus class +# +# Created per slot_fixes.yaml revision for: colonial +# Migration date: 2026-01-22 +# Rule reference: Rule 53, Rule 56 + +id: https://nde.nl/ontology/hc/class/ColonialStatus +name: colonial_status_class +title: Colonial Status Class + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + dcterms: http://purl.org/dc/terms/ + skos: http://www.w3.org/2004/02/skos/core# + +imports: + - linkml:types + - ../metadata + - ../slots/has_or_had_label + - ../slots/has_or_had_identifier + - ../slots/temporal_extent + - ./TimeSpan + +default_prefix: hc + +classes: + ColonialStatus: + class_uri: hc:ColonialStatus + description: | + Structured representation of colonial/territorial status for geographic coverage. + + **PURPOSE**: + + Models colonial territories and their historical status in archival finding aids. + Captures both the geographic territory and its colonial relationship over time. + + **DESIGN RATIONALE**: + + Created per slot_fixes.yaml migration from simple `colonial` string slot to + structured class with temporal and geographic context. + + The revision specifies: + - `includes_or_included` + `GeoSpatialPlace` for territory geometry + - `is_or_was_categorized_as` + `ColonialStatus` for categorization + + **USE CASES**: + + - Dutch East Indies archives (1602-1949) + - Belgian Congo documentation + - British Colonial Office records + - Portuguese overseas territories + + **PROVENANCE CONSIDERATIONS**: + + Colonial status is historically contingent and politically sensitive. + Always capture: + - Time period of colonial relationship + - Perspective (colonizer vs. colonized) + - Modern-day geographic equivalent + + exact_mappings: + - dcterms:spatial + close_mappings: + - schema:containedInPlace + related_mappings: + - skos:Concept + + slots: + - has_or_had_label + - has_or_had_identifier + - temporal_extent + + attributes: + territory_name: + description: | + Name of the colonial territory. + + Use the historical name as recorded in archival sources. + Modern equivalents should be recorded in notes or linked via GeoSpatialPlace. + range: string + required: true + examples: + - value: "Dutch East Indies" + description: Historical name for Indonesia under Dutch rule + - value: "Belgian Congo" + description: Historical name for DRC under Belgian rule + - value: "British Malaya" + description: Historical British colonial territories in Southeast Asia + + colonizing_power: + description: | + The colonizing nation or entity. + range: string + examples: + - value: "Netherlands" + - value: "Belgium" + - value: "United Kingdom" + - value: "Portugal" + - value: "France" + + modern_equivalent: + description: | + Modern-day country or region corresponding to this colonial territory. + + Use ISO 3166-1 alpha-2 codes or full country names. + range: string + multivalued: true + examples: + - value: "ID" + description: Indonesia (former Dutch East Indies) + - value: "CD" + description: Democratic Republic of Congo (former Belgian Congo) + - value: "MY" + description: Malaysia (part of former British Malaya) + + status_type: + description: | + Type of colonial relationship. + range: string + examples: + - value: "colony" + - value: "protectorate" + - value: "mandate" + - value: "overseas territory" + - value: "dependency" + + slot_usage: + has_or_had_label: + description: | + Display label for the colonial status. + MIGRATION: Used for simple string representation of colonial territory name. + range: string + examples: + - value: "Dutch East Indies (1602-1949)" + + temporal_extent: + description: | + Time period of colonial relationship. + + Use CIDOC-CRM TimeSpan for precise temporal modeling. + range: TimeSpan + inlined: true + examples: + - value: + begin_of_the_begin: "1602-01-01" + end_of_the_end: "1949-12-27" + description: Dutch colonial period in Indonesia (VOC founding to sovereignty transfer) + + examples: + - value: + territory_name: "Dutch East Indies" + colonizing_power: "Netherlands" + modern_equivalent: + - "ID" + status_type: "colony" + has_or_had_label: "Dutch East Indies (1602-1949)" + temporal_extent: + begin_of_the_begin: "1602-03-20" + end_of_the_end: "1949-12-27" + description: Dutch colonial Indonesia - VOC founding to sovereignty transfer + + - value: + territory_name: "Suriname" + colonizing_power: "Netherlands" + modern_equivalent: + - "SR" + status_type: "colony" + has_or_had_label: "Dutch Suriname (1667-1975)" + temporal_extent: + begin_of_the_begin: "1667-01-01" + end_of_the_end: "1975-11-25" + description: Dutch colonial Suriname + + - value: + territory_name: "Netherlands Antilles" + colonizing_power: "Netherlands" + modern_equivalent: + - "CW" + - "SX" + - "BQ" + status_type: "overseas territory" + has_or_had_label: "Netherlands Antilles (1954-2010)" + temporal_extent: + begin_of_the_begin: "1954-01-01" + end_of_the_end: "2010-10-10" + description: Former Netherlands Antilles (now Curaçao, Sint Maarten, Caribbean Netherlands) + + comments: + - Created per slot_fixes.yaml migration from colonial slot (2026-01-22) + - Models colonial territories with temporal and geographic context + - Supports decolonization research and provenance tracking + - Politically sensitive - capture multiple perspectives where relevant + + see_also: + - https://www.nationaalarchief.nl/onderzoeken/colonial-records + - https://www.kit.nl/project/decolonization-heritage/ diff --git a/schemas/20251121/linkml/modules/classes/CommentReply.yaml b/schemas/20251121/linkml/modules/classes/CommentReply.yaml new file mode 100644 index 0000000000..4f212805fe --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/CommentReply.yaml @@ -0,0 +1,196 @@ +# CommentReply class +# Created per slot_fixes.yaml revision for: comment_reply_count +# +# Represents reply metrics and relationships for comments +# MIGRATION NOTE (2026-01-22): Created as part of comment_reply_count migration per Rule 53. + +id: https://nde.nl/ontology/hc/class/CommentReply +name: comment_reply_class +title: Comment Reply Class + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + sioc: http://rdfs.org/sioc/ns# + as: https://www.w3.org/ns/activitystreams# + +imports: + - linkml:types + - ../metadata + - ../slots/has_or_had_quantity + - ../slots/has_or_had_unit + - ../slots/temporal_extent + - ./Quantity + - ./Unit + - ./TimeSpan + +default_prefix: hc + +classes: + CommentReply: + class_uri: sioc:Post + description: | + Reply metrics and relationships for comments/posts. + + **PURPOSE**: + + Structured representation of reply counts and relationships for threaded + discussions. Replaces simple integer counts with rich reply data including + quantity, temporal tracking, and relationship information. + + **DESIGN RATIONALE**: + + Created per slot_fixes.yaml migration from `comment_reply_count` integer + to structured `has_or_had_reply` + `CommentReply` with `has_or_had_quantity` + + `Quantity` for metric representation. + + **REPLY CONTEXTS**: + + | Context | Description | + |---------|-------------| + | YouTube | Comment replies on video comments | + | Twitter | Reply threads | + | Facebook | Comment replies on posts | + | Forum | Threaded discussion replies | + + **ONTOLOGY ALIGNMENT**: + + | Ontology | Class/Property | Usage | + |----------|----------------|-------| + | **SIOC** | `sioc:Post`, `sioc:has_reply` | Online community content | + | **Activity Streams** | `as:Note`, `as:inReplyTo` | Social activity | + | **Schema.org** | `schema:Comment` | Generic comment modeling | + + **EXAMPLE**: + + ```yaml + has_or_had_reply: + - reply_count: 5 + has_or_had_quantity: + numeric_value: 5 + has_or_had_unit: + unit_label: "replies" + temporal_extent: + begin_of_the_begin: "2025-01-14T10:00:00Z" + ``` + + exact_mappings: + - sioc:Post + + close_mappings: + - schema:Comment + - as:Note + + related_mappings: + - sioc:has_reply + - as:inReplyTo + + slots: + - has_or_had_quantity + - has_or_had_unit + - temporal_extent + + attributes: + reply_count: + description: | + Simple count of replies (shorthand for has_or_had_quantity.numeric_value). + Use has_or_had_quantity for structured representation with unit. + range: integer + required: false + minimum_value: 0 + examples: + - value: 5 + description: 5 replies to a comment + - value: 42 + description: 42 replies in thread + + reply_type: + description: | + Type of reply context (comment_reply, thread_reply, direct_reply). + range: string + required: false + examples: + - value: "comment_reply" + description: Reply to a comment + - value: "thread_reply" + description: Reply in a discussion thread + - value: "direct_reply" + description: Direct reply to author + + slot_usage: + has_or_had_quantity: + description: | + Structured quantity for the reply count. + Use Quantity class with numeric_value and has_or_had_unit. + range: Quantity + inlined: true + required: false + examples: + - value: + numeric_value: 5 + has_or_had_unit: + unit_label: "replies" + description: 5 replies using Quantity class + + has_or_had_unit: + description: | + Unit for the reply type (replies, responses, etc.). + Can be specified directly or via has_or_had_quantity.has_or_had_unit. + range: Unit + inlined: true + required: false + examples: + - value: + unit_label: "replies" + description: Replies unit + + temporal_extent: + description: | + Time when the reply count was observed/recorded. + range: TimeSpan + inlined: true + required: false + examples: + - value: + begin_of_the_begin: "2025-01-14T10:00:00Z" + description: Observation timestamp + + examples: + - value: + reply_count: 5 + description: Simple reply count (minimal) + + - value: + reply_count: 5 + reply_type: "comment_reply" + has_or_had_quantity: + numeric_value: 5 + has_or_had_unit: + unit_label: "replies" + temporal_extent: + begin_of_the_begin: "2025-01-14T10:00:00Z" + description: Full structured reply count with timestamp + + - value: + reply_count: 0 + reply_type: "comment_reply" + description: Comment with no replies + + comments: + - Created 2026-01-22 from comment_reply_count migration (Rule 53) + - Models reply metrics as structured data + - Supports temporal tracking of reply counts + - Aligned with SIOC vocabulary for online communities + + see_also: + - http://rdfs.org/sioc/ns#has_reply + - https://schema.org/Comment + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: >- + Universal - any custodian with discussion content may track replies. + specificity_score: "0.55" + specificity_rationale: >- + Moderately general - applies to threaded discussion contexts. diff --git a/schemas/20251121/linkml/modules/classes/CommercialCustodianTypes.yaml b/schemas/20251121/linkml/modules/classes/CommercialCustodianTypes.yaml new file mode 100644 index 0000000000..40a2127c4f --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/CommercialCustodianTypes.yaml @@ -0,0 +1,160 @@ +# CommercialCustodianTypes class +# Type/Types naming pattern per Rule 0b +# +# Created per slot_fixes.yaml revision for: commercial_custodian_subtype +# Migration date: 2026-01-22 +# Rule reference: Rule 53, Rule 0b + +id: https://nde.nl/ontology/hc/class/CommercialCustodianTypes +name: commercial_custodian_types_class +title: Commercial Custodian Types Class + +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/ + +imports: + - linkml:types + - ../metadata + - ../slots/has_or_had_label + - ../slots/has_or_had_identifier + - ../enums/CommercialCustodianTypeEnum + +default_prefix: hc + +classes: + CommercialCustodianTypes: + class_uri: skos:Collection + description: | + Collection of commercial custodian subtypes from the 295-type Wikidata taxonomy. + + **PURPOSE**: + + Structured representation of commercial heritage custodian subtypes, + replacing the simple enum-valued slot with a class that can hold + multiple types with additional metadata. + + **DESIGN RATIONALE** (Rule 0b): + + Follows the Type/Types naming pattern: + - `CommercialCustodianType` (singular) - would be abstract base + - `CommercialCustodianTypes` (plural) - collection of concrete subtypes + + Created per slot_fixes.yaml migration from `commercial_custodian_subtype` + enum slot to structured `includes_or_included` + `CommercialCustodianTypes`. + + **COMMERCIAL CUSTODIAN CATEGORIES**: + + | Category | Examples | + |----------|----------| + | Auction houses | Christie's, Sotheby's, Bonhams | + | Art dealers | Gagosian, David Zwirner | + | Corporate archives | Ford Motor Archives, IBM Archives | + | Brand museums | Heineken Experience, Guinness Storehouse | + | Company museums | Mercedes-Benz Museum, BMW Welt | + + **WIKIDATA INTEGRATION**: + + Each subtype links to a Wikidata Q-number describing the specific + commercial organization type, enabling Linked Open Data queries. + + exact_mappings: + - skos:Collection + + close_mappings: + - skos:ConceptScheme + + slots: + - has_or_had_label + - has_or_had_identifier + + attributes: + subtype_code: + description: | + Code for the commercial custodian subtype from CommercialCustodianTypeEnum. + range: CommercialCustodianTypeEnum + required: false + multivalued: true + examples: + - value: "AUCTION_HOUSE" + - value: "ART_DEALER" + - value: "CORPORATE_ARCHIVE" + + wikidata_qid: + description: | + Wikidata Q-number for this commercial custodian type. + range: uriorcurie + required: false + examples: + - value: "wd:Q1078426" + description: Auction house (Q1078426) + - value: "wd:Q17537576" + description: Corporate archive (Q17537576) + + subtype_label: + description: | + Human-readable label for this subtype. + range: string + required: false + examples: + - value: "Auction House" + - value: "Corporate Archive" + - value: "Brand Heritage Center" + + slot_usage: + has_or_had_label: + description: | + Display label for the commercial custodian type collection. + examples: + - value: "Auction Houses and Art Dealers" + + has_or_had_identifier: + description: | + Wikidata or other identifier for this type. + examples: + - value: + identifier_scheme: wikidata + identifier_value: "Q1078426" + + examples: + - value: + subtype_code: + - "AUCTION_HOUSE" + subtype_label: "Auction House" + wikidata_qid: "wd:Q1078426" + description: Auction house type + + - value: + subtype_code: + - "CORPORATE_ARCHIVE" + subtype_label: "Corporate Archive" + wikidata_qid: "wd:Q17537576" + description: Corporate archive type + + - value: + subtype_code: + - "ART_DEALER" + - "GALLERY" + subtype_label: "Art Dealer/Gallery" + description: Combined art dealer and gallery type + + comments: + - Created 2026-01-22 from commercial_custodian_subtype migration (Rule 53) + - Follows Type/Types naming pattern (Rule 0b) + - Links to Wikidata taxonomy of 295 commercial custodian types + - Replaces simple enum slot with structured class + + see_also: + - https://www.wikidata.org/wiki/Q1078426 + - https://www.wikidata.org/wiki/Q17537576 + + annotations: + custodian_types: '["C"]' + custodian_types_rationale: >- + Specific to Commercial (C) custodian type classification. + specificity_score: "0.75" + specificity_rationale: >- + Fairly specific - applies only to commercial heritage contexts. diff --git a/schemas/20251121/linkml/modules/classes/CommercialOrganizationType.yaml b/schemas/20251121/linkml/modules/classes/CommercialOrganizationType.yaml index 1074844424..a6b0a1439e 100644 --- a/schemas/20251121/linkml/modules/classes/CommercialOrganizationType.yaml +++ b/schemas/20251121/linkml/modules/classes/CommercialOrganizationType.yaml @@ -17,12 +17,17 @@ imports: - ../enums/CommercialCustodianTypeEnum - ../slots/has_or_had_model # was: business_model - migrated per Rule 53/56/57 (2026-01-17) - ./BusinessModel - - ../slots/collection_purpose + # REMOVED 2026-01-19: collection_purpose - migrated to collects_or_collected + has_or_had_rationale (Rule 53) + - ../slots/collects_or_collected + - ../slots/has_or_had_rationale + - ./Rationale - ../slots/has_or_had_service # was: commercial_activity - migrated per Rule 53/56/57 (2026-01-18) - ./Service - ./ServiceType - ./ServiceTypes - - ../slots/commercial_custodian_subtype + # REMOVED 2026-01-22: ../slots/commercial_custodian_subtype - migrated to includes_or_included + CommercialCustodianTypes (Rule 53) + - ../slots/includes_or_included + - ./CommercialCustodianTypes - ../slots/corporate_integration - ../slots/has_or_had_custodian_type - ../slots/heritage_holding @@ -190,8 +195,7 @@ classes: \ .\n\n# Example: Heineken Experience (corporate brand heritage center in Amsterdam)\n\n\ \ a schema:Corporation, schema:TouristAttraction, crm:E74_Group, hc:CommercialOrganization ;\n hc:custodian_type hc:CommercialOrganizationType\ \ ;\n hc:has_or_had_model \"For-profit brand heritage attraction\", \"Admission fees\", \"Merchandise sales\", \"Brand\ - \ marketing\" ;\n hc:collection_purpose \"Brand heritage communication\", \"Consumer engagement\", \"Tourism revenue\"\ - , \"Corporate identity\" ;\n hc:corporate_integration \"Fully owned by Heineken N.V.\", \"Marketing department\", \"\ + \ marketing\" ;\n hc:has_or_had_rationale [ hc:rationale_text \"Brand heritage communication, Consumer engagement, Tourism revenue, Corporate identity\" ] ;\n hc:corporate_integration \"Fully owned by Heineken N.V.\", \"Marketing department\", \"\ Brand management division\" ;\n hc:public_access \"Daily visitor hours 10:30-19:30\", \"Paid admission\", \"Self-guided\ \ tours\", \"Group bookings available\" ;\n hc:heritage_holdings \"Brewing equipment (1867-present)\", \"Advertising\ \ materials archive\", \"Bottle/label collections\", \"Corporate photography\" ;\n hc:has_or_had_service [\n a hc:Service ;\n\ @@ -216,9 +220,12 @@ classes: - schema:TouristAttraction slots: - has_or_had_model # was: business_model - migrated per Rule 53/56 (2026-01-17) - - collection_purpose + # collection_purpose REMOVED - migrated to collects_or_collected + has_or_had_rationale (Rule 53, 2026-01-19) + - collects_or_collected + - has_or_had_rationale - has_or_had_service # was: commercial_activity - migrated per Rule 53/56/57 (2026-01-18) - - commercial_custodian_subtype + # MIGRATED 2026-01-22: commercial_custodian_subtype → includes_or_included + CommercialCustodianTypes (Rule 53) + - includes_or_included - corporate_integration - has_or_had_custodian_type - heritage_holding @@ -246,16 +253,77 @@ classes: has_or_had_label: "Brand heritage center" has_or_had_description: "Event rental, Hospitality, Tourism revenue" description: Coca-Cola World of Coke model - collection_purpose: - range: string - required: true + # MIGRATED 2026-01-19: collection_purpose → collects_or_collected + has_or_had_rationale (Rule 53) + collects_or_collected: + range: Collection + inlined: true + inlined_as_list: true + required: false + description: >- + What the commercial organization collects for heritage purposes. + MIGRATED from collection_purpose per slot_fixes.yaml (Rule 53, 2026-01-19). + + Uses Collection class with has_or_had_rationale for purpose documentation. examples: - - value: Brand communication, Consumer engagement, Tourism, Identity + - value: + collection_name: "Brand Heritage Collection" + has_or_had_rationale: + rationale_text: "Brand communication, Consumer engagement, Tourism, Identity" + rationale_category: "marketing" description: Heineken Experience purpose - - value: Legal record-keeping, Product history, IP documentation + - value: + collection_name: "Corporate Archive" + has_or_had_rationale: + rationale_text: "Legal record-keeping, Product history, IP documentation" + rationale_category: "compliance" description: Ford Motor archive purpose - - value: Corporate culture, Brand storytelling, Innovation + - value: + collection_name: "Innovation Archive" + has_or_had_rationale: + rationale_text: "Corporate culture, Brand storytelling, Innovation" + rationale_category: "corporate_culture" description: IBM archive purpose + has_or_had_rationale: + range: Rationale + inlined: true + required: true + description: >- + Why the commercial organization maintains heritage collections. + Documents corporate motivations (marketing, compliance, culture, etc.). + examples: + - value: + rationale_text: "Brand heritage communication, Consumer engagement" + rationale_category: "marketing" + description: Marketing-driven heritage purpose + - value: + rationale_text: "Legal compliance, IP documentation" + rationale_category: "compliance" + description: Compliance-driven heritage purpose + # MIGRATED 2026-01-22: commercial_custodian_subtype → includes_or_included + CommercialCustodianTypes (Rule 53) + includes_or_included: + description: | + MIGRATED from commercial_custodian_subtype per slot_fixes.yaml (Rule 53, 2026-01-22). + Specific subtypes of commercial heritage custodian from the 295-type Wikidata taxonomy. + Uses CommercialCustodianTypes class for structured representation with Wikidata links. + range: CommercialCustodianTypes + inlined: true + inlined_as_list: true + required: false + examples: + - value: + subtype_code: ["AUCTION_HOUSE"] + subtype_label: "Auction House" + wikidata_qid: "wd:Q1078426" + description: Christie's, Sotheby's type + - value: + subtype_code: ["CORPORATE_ARCHIVE"] + subtype_label: "Corporate Archive" + wikidata_qid: "wd:Q17537576" + description: Ford Motor Archives type + - value: + subtype_code: ["ART_DEALER"] + subtype_label: "Art Dealer" + description: Gagosian type corporate_integration: range: string required: true diff --git a/schemas/20251121/linkml/modules/classes/CommissionRate.yaml b/schemas/20251121/linkml/modules/classes/CommissionRate.yaml new file mode 100644 index 0000000000..6329ad35a4 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/CommissionRate.yaml @@ -0,0 +1,160 @@ +# CommissionRate class +# Created per slot_fixes.yaml revision for: commission_rate +# +# Represents commission rate structure +# MIGRATION NOTE (2026-01-22): Created as part of commission_rate migration per Rule 53. + +id: https://nde.nl/ontology/hc/class/CommissionRate +name: commission_rate_class +title: Commission Rate Class + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + +imports: + - linkml:types + - ../metadata + - ../slots/has_or_had_percentage + - ./Percentage + +default_prefix: hc + +classes: + CommissionRate: + class_uri: hc:CommissionRate + description: | + Structured representation of a commission rate. + + **PURPOSE**: + + Models commission percentages with context (market type, + rate type) replacing simple string representation. + + **DESIGN RATIONALE**: + + Created per slot_fixes.yaml migration from `commission_rate` string + to structured representation with Percentage class. + + **ART MARKET STANDARDS**: + + - **Primary market**: 40-50% standard (gallery takes half) + - **Secondary market**: 10-20% (resale commission) + - **Auction**: 10-25% buyer's premium + seller's commission + + **EXAMPLE**: + + ```yaml + takes_or_took_comission: + rate_type: "primary_market" + has_or_had_percentage: + percentage_value: 50 + percentage_display: "50%" + ``` + + close_mappings: + - schema:PriceSpecification + + slots: + - has_or_had_percentage + + attributes: + rate_type: + description: | + Type of commission rate. + range: string + required: false + examples: + - value: "primary_market" + description: Commission on first sale + - value: "secondary_market" + description: Commission on resale + - value: "auction_buyers_premium" + description: Auction house buyer's premium + - value: "auction_sellers_commission" + description: Auction house seller's commission + + rate_description: + description: | + Human-readable description of the commission structure. + range: string + required: false + examples: + - value: "Standard 50/50 split between gallery and artist" + description: Primary market explanation + - value: "Sliding scale based on sale price" + description: Variable commission description + + effective_date: + description: | + When this commission rate became effective. + range: date + required: false + + applies_to: + description: | + What this commission rate applies to. + range: string + required: false + examples: + - value: "All represented artists" + description: Gallery-wide rate + - value: "Works over €10,000" + description: Price-based rate + + slot_usage: + has_or_had_percentage: + description: | + The percentage value of this commission rate. + range: Percentage + inlined: true + required: true + examples: + - value: + percentage_value: 50 + percentage_display: "50%" + description: 50% commission + + examples: + - value: + rate_type: "primary_market" + rate_description: "Standard 50/50 split between gallery and artist" + has_or_had_percentage: + percentage_value: 50 + percentage_display: "50%" + description: Standard primary market commission + + - value: + rate_type: "secondary_market" + rate_description: "Consignment fee for resale works" + has_or_had_percentage: + percentage_value: 15 + percentage_min: 10 + percentage_max: 20 + percentage_display: "10-20%" + description: Variable secondary market commission + + - value: + rate_type: "auction_buyers_premium" + rate_description: "Buyer's premium at auction" + has_or_had_percentage: + percentage_value: 25 + percentage_display: "25%" + description: Auction house buyer's premium + + comments: + - Created 2026-01-22 from commission_rate migration (Rule 53) + - Provides structured commission representation + - Supports art market commission conventions + + see_also: + - https://schema.org/PriceSpecification + + annotations: + custodian_types: '["G", "C"]' + custodian_types_rationale: >- + Primarily for galleries (G) and commercial organizations (C). + specificity_score: "0.80" + specificity_rationale: >- + Specific to commercial sales commission context. diff --git a/schemas/20251121/linkml/modules/classes/CustodianCollection.yaml b/schemas/20251121/linkml/modules/classes/CustodianCollection.yaml index 7a763a5b1c..fa1ab06561 100644 --- a/schemas/20251121/linkml/modules/classes/CustodianCollection.yaml +++ b/schemas/20251121/linkml/modules/classes/CustodianCollection.yaml @@ -17,7 +17,10 @@ imports: - ./Label # REMOVED 2026-01-18: ../slots/collection_description - migrated to has_or_had_description + Description (Rule 53) - ../slots/has_or_had_description - - ../slots/collection_type + # REMOVED 2026-01-22: ../slots/collection_type - migrated to has_or_had_content + CollectionContent (Rule 53) + - ./CollectionContent + - ./CollectionContentType + - ./CollectionContentTypes # REMOVED 2026-01-18: ../slots/collection_scope - migrated to has_or_had_scope + CollectionScope (Rule 53) - ../slots/has_or_had_scope - ./CollectionScope @@ -96,7 +99,7 @@ classes: - has_or_had_label # REMOVED 2026-01-18: collection_scope - migrated to has_or_had_scope + CollectionScope (Rule 53) - has_or_had_scope - - collection_type + # REMOVED 2026-01-22: collection_type - migrated to has_or_had_content + CollectionContent (Rule 53) - has_or_had_custodian_type - custody_history - digital_surrogate @@ -156,9 +159,7 @@ classes: description_text: "The Nationaal Archief holdings comprise over 137 km of archival records documenting Dutch government and society from the medieval period to the present." description_type: collection_description description: National archive custodian collection description - collection_type: - range: string - multivalued: true + # REMOVED 2026-01-22: collection_type slot_usage - migrated to has_or_had_content + CollectionContent (Rule 53) has_or_had_scope: # was: collection_scope - migrated per Rule 53/56 (2026-01-18) description: | MIGRATED from collection_scope per slot_fixes.yaml (Rule 53/56, 2026-01-18). @@ -178,21 +179,37 @@ classes: scope_type: archival_scope description: Archival collection scope example has_or_had_content: - # was: temporal_coverage - migrated per Rule 53/56 (2026-01-16) - range: Content + # was: temporal_coverage (2026-01-16) + collection_type (2026-01-22) - migrated per Rule 53/56 + range: CollectionContent multivalued: true + inlined: true inlined_as_list: true required: false description: | - Content scope including temporal, spatial, and topical coverage. - MIGRATED from temporal_coverage per slot_fixes.yaml (Rule 53/56, 2026-01-16). + Content held by this collection with typed categorization. + MIGRATED from: + - temporal_coverage per slot_fixes.yaml (Rule 53/56, 2026-01-16) + - collection_type per slot_fixes.yaml (Rule 53, 2026-01-22) + + CollectionContent unifies content description with type classification: + - content_description: Free-text description of the content + - content_date_range: Temporal coverage (e.g., "1602-1799") + - content_extent: Size/extent of content + - has_or_had_type → CollectionContentType: Type classification (Archival, Library, Art, etc.) examples: - value: - has_or_had_label: "Colonial Archives" - temporal_extent: - begin_of_the_begin: '1602-01-01' - end_of_the_end: '1800-12-31' - description: Colonial period content coverage + content_description: "Colonial period administrative records" + content_date_range: "1602-1800" + has_or_had_type: + - type_label: Archival + description: Colonial archives content with type + - value: + content_description: "Religious art and liturgical objects" + content_extent: "450 objects" + has_or_had_type: + - type_label: Art + - type_label: Liturgical + description: Religious heritage content with multiple types extent: range: string required: false diff --git a/schemas/20251121/linkml/modules/classes/DigitalPlatform.yaml b/schemas/20251121/linkml/modules/classes/DigitalPlatform.yaml index 9c78a3b5bd..da14e8af21 100644 --- a/schemas/20251121/linkml/modules/classes/DigitalPlatform.yaml +++ b/schemas/20251121/linkml/modules/classes/DigitalPlatform.yaml @@ -34,7 +34,9 @@ imports: - ../slots/serves_finding_aid - ./ReconstructedEntity - ../slots/has_or_had_data_service_endpoint - - ../slots/collection_web_address + # REMOVED 2026-01-22: ../slots/collection_web_address - migrated to has_or_had_web_page + WebPage (Rule 53) + - ../slots/has_or_had_web_page + - ./WebPage - ../slots/fixity_check_date - ../slots/homepage_web_address - ../slots/iiif_support @@ -114,7 +116,8 @@ classes: # MIGRATED from auxiliary_platforms to has_or_had_auxiliary_entities (Rule 53) # - auxiliary_platforms - has_or_had_auxiliary_entities - - collection_web_address + # REMOVED 2026-01-22: collection_web_address - migrated to has_or_had_web_page + WebPage (Rule 53) + - has_or_had_web_page - has_or_had_data_service_endpoint - fixity_check_date - homepage_web_address @@ -211,12 +214,23 @@ classes: description: Rijksmuseum homepage - value: https://www.europeana.eu/ description: Europeana homepage - collection_web_address: - range: uri + has_or_had_web_page: # was: collection_web_address - migrated per Rule 53 (2026-01-22) + description: | + MIGRATED from collection_web_address per slot_fixes.yaml (Rule 53, 2026-01-22). + Web pages for accessing digital collections on this platform. + Uses WebPage class for structured representation with URL and metadata. + range: WebPage multivalued: true + inlined: true + inlined_as_list: true examples: - - value: https://www.rijksmuseum.nl/nl/rijksstudio - description: Rijksstudio collection access + - value: + has_or_had_label: + label_value: "Rijksstudio Collections" + has_or_had_url: + - has_or_had_url: "https://www.rijksmuseum.nl/nl/rijksstudio" + has_or_had_type: collection_access + description: Rijksstudio collection access web page inventory_web_address: range: uri multivalued: true @@ -406,8 +420,12 @@ classes: platform_type: - DiscoveryPortal homepage_web_address: https://www.rijksmuseum.nl/ - collection_web_address: - - https://www.rijksmuseum.nl/nl/rijksstudio + has_or_had_web_page: # was: collection_web_address - migrated per Rule 53 (2026-01-22) + - has_or_had_label: + label_value: "Rijksstudio Collections" + has_or_had_url: + - has_or_had_url: "https://www.rijksmuseum.nl/nl/rijksstudio" + has_or_had_type: collection_access api_endpoint: https://www.rijksmuseum.nl/api/ iiif_support: true linked_data: true @@ -424,8 +442,12 @@ classes: - AggregationPlatform - APIService homepage_web_address: https://www.europeana.eu/ - collection_web_address: - - https://www.europeana.eu/en/collections + has_or_had_web_page: # was: collection_web_address - migrated per Rule 53 (2026-01-22) + - has_or_had_label: + label_value: "Europeana Collections Browse" + has_or_had_url: + - has_or_had_url: "https://www.europeana.eu/en/collections" + has_or_had_type: collection_access api_endpoint: https://api.europeana.eu/record/v2/ sparql_endpoint: https://api.europeana.eu/sparql oai_pmh_endpoint: https://www.europeana.eu/oai diff --git a/schemas/20251121/linkml/modules/classes/DigitalPlatformUserIdentifier.yaml b/schemas/20251121/linkml/modules/classes/DigitalPlatformUserIdentifier.yaml new file mode 100644 index 0000000000..16a988ff0a --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/DigitalPlatformUserIdentifier.yaml @@ -0,0 +1,181 @@ +# DigitalPlatformUserIdentifier class +# +# Created per slot_fixes.yaml revision for: comment_author_channel_id +# Migration date: 2026-01-22 +# Rule reference: Rule 53, Rule 56 + +id: https://nde.nl/ontology/hc/class/DigitalPlatformUserIdentifier +name: digital_platform_user_identifier_class +title: Digital Platform User Identifier Class + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + dcterms: http://purl.org/dc/terms/ + foaf: http://xmlns.com/foaf/0.1/ + as: https://www.w3.org/ns/activitystreams# + +imports: + - linkml:types + - ../metadata + - ../slots/has_or_had_label + - ../slots/has_or_had_identifier + - ./Identifier + +default_prefix: hc + +classes: + DigitalPlatformUserIdentifier: + is_a: Identifier + class_uri: hc:DigitalPlatformUserIdentifier + description: | + Identifier for a user account on a digital platform (YouTube, Twitter, etc.). + + **PURPOSE**: + + Structured representation of platform-specific user identifiers, + such as YouTube channel IDs, Twitter handles, or Instagram usernames. + Replaces simple string channel_id slots with typed identifiers. + + **DESIGN RATIONALE**: + + Created per slot_fixes.yaml migration from `comment_author_channel_id` string + to structured `has_or_had_author` + `Author` with `has_or_had_identifier` + + `DigitalPlatformUserIdentifier` for platform user identification. + + **PLATFORM IDENTIFIER TYPES**: + + | Platform | Identifier Type | Example | + |----------|-----------------|---------| + | YouTube | Channel ID | UC1234abcdef | + | Twitter/X | User ID | 12345678 | + | Instagram | Username | @museum_account | + | Facebook | Page ID | 123456789 | + | LinkedIn | Company ID | heritage-foundation | + | TikTok | User ID | museum_official | + + **ONTOLOGY ALIGNMENT**: + + | Ontology | Class/Property | Usage | + |----------|----------------|-------| + | **Dublin Core** | `dcterms:identifier` | Base identifier semantics | + | **Schema.org** | `schema:identifier` | Web-standard identifier | + | **FOAF** | `foaf:OnlineAccount` | Online account modeling | + | **Activity Streams** | `as:Person` | Social media activity | + + exact_mappings: + - foaf:OnlineAccount + close_mappings: + - schema:identifier + related_mappings: + - dcterms:identifier + - as:actor + + attributes: + platform_type: + description: | + Type of digital platform (YouTube, Twitter, Instagram, etc.). + range: string + required: true + examples: + - value: "youtube" + - value: "twitter" + - value: "instagram" + - value: "facebook" + - value: "linkedin" + - value: "tiktok" + + platform_user_id: + description: | + Platform-specific user/channel/account identifier. + range: string + required: true + examples: + - value: "UC1234abcdefghijk" + description: YouTube channel ID + - value: "12345678" + description: Twitter numeric user ID + - value: "museum_official" + description: TikTok username + + platform_username: + description: | + Human-readable username or handle on the platform. + May differ from platform_user_id. + range: string + required: false + examples: + - value: "@rijksmuseum" + description: Twitter handle + - value: "MuseumFan2024" + description: YouTube display name + + profile_url: + description: | + URL to the user's profile page on the platform. + range: uri + required: false + examples: + - value: "https://www.youtube.com/channel/UC1234abcdef" + - value: "https://twitter.com/rijksmuseum" + + slot_usage: + identifier_scheme: + description: | + Platform identifier scheme. Use lowercase platform name. + Examples: youtube_channel_id, twitter_user_id, instagram_username + ifabsent: "string(digital_platform_user_id)" + examples: + - value: "youtube_channel_id" + - value: "twitter_user_id" + + identifier_value: + description: | + The actual platform user identifier value. + Inherited from Identifier class. + examples: + - value: "UC1234abcdefghijk" + description: YouTube channel ID + + examples: + - value: + identifier_scheme: youtube_channel_id + identifier_value: "UCsT0YIqwnpJCM-mx7-gSA4Q" + platform_type: "youtube" + platform_user_id: "UCsT0YIqwnpJCM-mx7-gSA4Q" + platform_username: "TEDx Talks" + profile_url: "https://www.youtube.com/channel/UCsT0YIqwnpJCM-mx7-gSA4Q" + description: YouTube channel identifier with full metadata + + - value: + identifier_scheme: twitter_user_id + identifier_value: "12345678" + platform_type: "twitter" + platform_user_id: "12345678" + platform_username: "@rijksmuseum" + profile_url: "https://twitter.com/rijksmuseum" + description: Twitter user identifier + + - value: + identifier_scheme: youtube_channel_id + identifier_value: "UC1234abcdef" + platform_type: "youtube" + platform_user_id: "UC1234abcdef" + description: Minimal YouTube channel identifier (just ID) + + comments: + - Created per slot_fixes.yaml migration from comment_author_channel_id (2026-01-22) + - Extends Identifier class with platform-specific fields + - Use for identifying users/authors on digital platforms + - Supports YouTube, Twitter, Instagram, Facebook, LinkedIn, TikTok + + see_also: + - http://xmlns.com/foaf/0.1/OnlineAccount + - https://www.w3.org/ns/activitystreams + - https://developers.google.com/youtube/v3/docs/channels + + annotations: + specificity_score: 0.70 + specificity_rationale: >- + Specific to digital platform user identification contexts. diff --git a/schemas/20251121/linkml/modules/classes/DigitalPlatformV2OrganizationProfile.yaml b/schemas/20251121/linkml/modules/classes/DigitalPlatformV2OrganizationProfile.yaml index b3312b8a36..c8d0606f48 100644 --- a/schemas/20251121/linkml/modules/classes/DigitalPlatformV2OrganizationProfile.yaml +++ b/schemas/20251121/linkml/modules/classes/DigitalPlatformV2OrganizationProfile.yaml @@ -14,12 +14,25 @@ prefixes: imports: - linkml:types + # MIGRATED 2026-01-22: founding_date → is_or_was_founded_through + FoundingEvent (Rule 53) + - ../slots/is_or_was_founded_through + - ./FoundingEvent default_range: string classes: DigitalPlatformV2OrganizationProfile: description: Detailed profile of the organization including type, scope, and description class_uri: schema:Organization + slots: + - is_or_was_founded_through # was: founding_date attribute - migrated per Rule 53 (2026-01-22) + slot_usage: + # MIGRATED 2026-01-22: founding_date → is_or_was_founded_through + FoundingEvent (Rule 53) + is_or_was_founded_through: + description: | + The founding event for this organization. + Migrated from founding_date attribute per slot_fixes.yaml revision. + range: FoundingEvent + inlined: true attributes: organization_type: range: string @@ -30,9 +43,7 @@ classes: description: range: string description: Detailed description of the organization and its activities - founding_date: - range: string - description: Date or year of founding + # REMOVED: founding_date - migrated to is_or_was_founded_through (Rule 53, 2026-01-22) history: range: string description: Brief organizational history diff --git a/schemas/20251121/linkml/modules/classes/DiocesanArchive.yaml b/schemas/20251121/linkml/modules/classes/DiocesanArchive.yaml index 0435bc438f..6c2b9e5f9f 100644 --- a/schemas/20251121/linkml/modules/classes/DiocesanArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/DiocesanArchive.yaml @@ -22,7 +22,9 @@ imports: - ../slots/has_or_had_custodian_type - ../slots/diocese_name - ../slots/ecclesiastical_province - - ../slots/founding_date_diocese + # MIGRATED 2026-01-22: founding_date_diocese → is_or_was_part_of + Diocese (Rule 53) + - ../slots/is_or_was_part_of + - ./Diocese - ../slots/specificity_annotation - ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17) - ../slots/has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) @@ -44,7 +46,7 @@ classes: - has_or_had_custodian_type - diocese_name - ecclesiastical_province - - founding_date_diocese + - is_or_was_part_of # was: founding_date_diocese - migrated per Rule 53 (2026-01-22) - hold_or_held_record_set_type - specificity_annotation - has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17) @@ -81,10 +83,22 @@ classes: range: string examples: - value: Province of Utrecht - founding_date_diocese: - range: date + # MIGRATED 2026-01-22: founding_date_diocese → is_or_was_part_of + Diocese (Rule 53) + is_or_was_part_of: + description: | + The diocese this archive is part of. + Diocese includes founding event with temporal extent. + Migrated from founding_date_diocese per slot_fixes.yaml revision. + range: Diocese + inlined: true examples: - - value: '0695-01-01' + - value: + diocese_name: "Diocese of Utrecht" + is_or_was_founded_through: + temporal_extent: + begin_of_the_begin: "0695-01-01" + end_of_the_begin: "0695-12-31" + founding_description: "Established circa 695 by St. Willibrord" description: Diocese of Utrecht established ~695 canonical_access_rule: range: boolean @@ -128,6 +142,13 @@ classes: diocese_name: Diocese of 's-Hertogenbosch archdiocese_name: Archdiocese of Utrecht ecclesiastical_province: Province of Utrecht - founding_date_diocese: '1559-05-12' + # MIGRATED 2026-01-22: founding_date_diocese → is_or_was_part_of + Diocese (Rule 53) + is_or_was_part_of: + diocese_name: "Diocese of 's-Hertogenbosch" + is_or_was_founded_through: + temporal_extent: + begin_of_the_begin: "1559-05-12" + end_of_the_begin: "1559-05-12" + founding_description: "Established 12 May 1559" canonical_access_rules: true description: Diocesan archive example - Diocese of 's-Hertogenbosch diff --git a/schemas/20251121/linkml/modules/classes/Diocese.yaml b/schemas/20251121/linkml/modules/classes/Diocese.yaml new file mode 100644 index 0000000000..701c01168f --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/Diocese.yaml @@ -0,0 +1,170 @@ +# Diocese - Ecclesiastical administrative unit class +# +# Created per slot_fixes.yaml migration for: founding_date_diocese +# Creation date: 2026-01-22 +# Rule compliance: 39 (RiC-O naming), 50 (ontology mapping), 53 (slot_fixes revision) + +id: https://nde.nl/ontology/hc/class/Diocese +name: Diocese +title: Diocese + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + org: http://www.w3.org/ns/org# + wd: http://www.wikidata.org/entity/ + +default_prefix: hc + +imports: + - linkml:types + - ../slots/is_or_was_founded_through + - ../slots/has_or_had_identifier + - ../slots/has_or_had_label + - ../slots/description + - ./FoundingEvent + +classes: + Diocese: + class_uri: org:Organization + description: | + Represents an ecclesiastical diocese (bishopric) - an administrative unit + of the Catholic, Anglican, or other episcopal churches. + + **USAGE**: + Captures structured information about dioceses that heritage custodians + (particularly diocesan archives) are part of. + + **WIKIDATA**: Q131896 (diocese) + + **ECCLESIASTICAL HIERARCHY**: + ``` + Vatican / Holy See + ├── Ecclesiastical Province + │ └── Archdiocese (metropolitan see) + │ └── DIOCESE (suffragan see) ← THIS CLASS + │ └── Parish + └── Religious Orders + ``` + + **HISTORICAL SIGNIFICANCE**: + Many European dioceses were established in medieval times and often + predate civil administrative divisions. Their founding dates are + significant for understanding ecclesiastical history. + + **MIGRATION NOTE**: + Created per slot_fixes.yaml revision (Rule 53, 2026-01-22). + Replaces simple `founding_date_diocese` (date) with structured class + capturing diocese identity and founding event. + + slots: + - is_or_was_founded_through + - has_or_had_identifier + - has_or_had_label + - description + + attributes: + diocese_id: + identifier: true + description: | + Unique identifier for this diocese. + Recommended: Use Wikidata ID or institutional URI. + range: uriorcurie + slot_uri: dcterms:identifier + examples: + - value: "wd:Q1808831" + description: Diocese of Utrecht (Wikidata) + - value: "hc:diocese/s-hertogenbosch" + description: Diocese of 's-Hertogenbosch (internal URI) + + diocese_name: + description: | + Official name of the diocese. + range: string + required: true + slot_uri: schema:name + examples: + - value: "Diocese of Utrecht" + - value: "Bistum Münster" + - value: "Diocese of 's-Hertogenbosch" + + archdiocese_name: + description: | + Name of the metropolitan archdiocese this diocese belongs to. + range: string + slot_uri: schema:parentOrganization + examples: + - value: "Archdiocese of Utrecht" + + ecclesiastical_province: + description: | + Name of the ecclesiastical province containing this diocese. + range: string + examples: + - value: "Province of Utrecht" + + denomination: + description: | + Religious denomination (Catholic, Anglican, Orthodox, etc.) + range: string + slot_uri: schema:additionalType + examples: + - value: "Roman Catholic" + - value: "Church of England" + - value: "Eastern Orthodox" + + slot_usage: + is_or_was_founded_through: + description: | + The founding event of this diocese. + Many dioceses have medieval founding dates. + range: FoundingEvent + inlined: true + examples: + - value: + temporal_extent: + begin_of_the_begin: "0695-01-01" + end_of_the_begin: "0695-12-31" + founding_description: "Diocese of Utrecht established circa 695 by St. Willibrord" + description: Medieval diocese founding + + exact_mappings: + - wd:Q131896 + + close_mappings: + - org:Organization + - schema:Organization + + examples: + - value: + diocese_id: "wd:Q1808831" + diocese_name: "Diocese of Utrecht" + archdiocese_name: "Archdiocese of Utrecht" + ecclesiastical_province: "Province of Utrecht" + denomination: "Roman Catholic" + is_or_was_founded_through: + temporal_extent: + begin_of_the_begin: "0695-01-01" + end_of_the_begin: "0695-12-31" + founding_description: "Established circa 695 by St. Willibrord" + description: Diocese of Utrecht example + + - value: + diocese_id: "hc:diocese/s-hertogenbosch" + diocese_name: "Diocese of 's-Hertogenbosch" + archdiocese_name: "Archdiocese of Utrecht" + ecclesiastical_province: "Province of Utrecht" + denomination: "Roman Catholic" + is_or_was_founded_through: + temporal_extent: + begin_of_the_begin: "1559-05-12" + end_of_the_begin: "1559-05-12" + founding_description: "Established 12 May 1559 during reorganization of Dutch church" + description: Diocese of 's-Hertogenbosch example + + annotations: + custodian_types: '["H"]' + custodian_types_rationale: "Dioceses are ecclesiastical organizations relevant to Holy Sites (H) heritage custodians." + specificity_score: "0.75" + specificity_rationale: "Fairly specific - primarily relevant for diocesan archives and religious heritage." diff --git a/schemas/20251121/linkml/modules/classes/EncompassingBody.yaml b/schemas/20251121/linkml/modules/classes/EncompassingBody.yaml index 4995a1283c..247121a746 100644 --- a/schemas/20251121/linkml/modules/classes/EncompassingBody.yaml +++ b/schemas/20251121/linkml/modules/classes/EncompassingBody.yaml @@ -20,7 +20,9 @@ imports: - ../slots/legal_jurisdiction - ../slots/external_identifier - ../slots/has_or_had_area_served - - ../slots/founding_date + # MIGRATED 2026-01-22: founding_date → is_or_was_founded_through + FoundingEvent (Rule 53) + - ../slots/is_or_was_founded_through + - ./FoundingEvent - ../slots/funding_focus - ../slots/funding_scheme - ../slots/governance_authority @@ -48,7 +50,7 @@ imports: - ../slots/description - ../slots/dissolution_date - ../slots/external_identifier - - ../slots/founding_date + # REMOVED: ../slots/founding_date - migrated to is_or_was_founded_through (Rule 53, 2026-01-22) - ../slots/governance_authority - ../slots/has_or_had_area_served - ../slots/has_or_had_member_custodian @@ -67,7 +69,7 @@ imports: - ../slots/description - ../slots/dissolution_date - ../slots/external_identifier - - ../slots/founding_date + # REMOVED: ../slots/founding_date - migrated to is_or_was_founded_through (Rule 53, 2026-01-22) - ../slots/governance_authority - ../slots/has_or_had_area_served - ../slots/has_or_had_member_custodian @@ -133,7 +135,7 @@ classes: - description - dissolution_date - external_identifier - - founding_date + - is_or_was_founded_through # was: founding_date - migrated per Rule 53 (2026-01-22) - governance_authority - id - legal_jurisdiction @@ -185,11 +187,20 @@ classes: - value: Government ministry - value: Non-profit foundation - value: Professional association - founding_date: - range: date + # MIGRATED 2026-01-22: founding_date → is_or_was_founded_through + FoundingEvent (Rule 53) + is_or_was_founded_through: + description: | + The founding event for this encompassing body. + Migrated from founding_date per slot_fixes.yaml revision. + range: FoundingEvent + inlined: true examples: - - value: '1965-07-01' - description: Ministry established July 1965 + - value: + temporal_extent: + begin_of_the_begin: "1965-07-01" + end_of_the_begin: "1965-07-01" + founding_description: "Ministry established July 1965" + description: Ministry founding event (exact date) dissolution_date: range: date examples: diff --git a/schemas/20251121/linkml/modules/classes/FindingAid.yaml b/schemas/20251121/linkml/modules/classes/FindingAid.yaml index 5649a80095..37a6d004c3 100644 --- a/schemas/20251121/linkml/modules/classes/FindingAid.yaml +++ b/schemas/20251121/linkml/modules/classes/FindingAid.yaml @@ -77,7 +77,11 @@ imports: - ../slots/card_title_en - ../slots/card_url - ../slots/has_or_had_quantity # was: claims_count - migrated per Rule 53 (2026-01-19) - - ../slots/colonial + # REMOVED 2026-01-22: ../slots/colonial - migrated to includes_or_included + GeoSpatialPlace + is_or_was_categorized_as + ColonialStatus (Rule 53) + - ../slots/includes_or_included + - ./GeoSpatialPlace + - ../slots/is_or_was_categorized_as + - ./ColonialStatus - ../slots/content_block - ../slots/crawler_version - ../slots/custodian @@ -91,8 +95,12 @@ imports: - ../slots/finding_aid_note - ../slots/finding_aid_scope_note - ../slots/has_or_had_type - - ../slots/format - - ../slots/fr + # MIGRATED 2026-01-22: format → has_or_had_format + Format (Rule 53) + - ../slots/has_or_had_format + - ./Format + # MIGRATED 2026-01-22: fr → has_or_had_language + Language (Rule 53) + - ../slots/has_or_had_language + - ./Language - ../slots/full_name - ../slots/geographic_coverage - ../slots/ghcid @@ -270,7 +278,7 @@ classes: - has_or_had_external_resource - finding_aid_note - has_or_had_type - - format + - has_or_had_format # was: format - migrated per Rule 53 (2026-01-22) - geographic_coverage - id - isbn @@ -398,24 +406,61 @@ classes: - http://id.loc.gov/ontologies/bibframe/ MultilingualText: class_uri: skos:Concept - description: 'Container for multilingual text values (titles, descriptions). - - - Supports any ISO 639-1 language code as a slot name. - - Common slots: nl (Dutch), en (English), de (German), fr (French). - - ' + description: | + Container for multilingual text values (titles, descriptions). + + **MIGRATED 2026-01-22**: Language-specific slots (de, en, fr, nl) migrated to + unified `has_or_had_language` slot with `Language` class per Rule 53. + + **Old Pattern** (deprecated): + ```yaml + nl: "Nederlandse tekst" + en: "English text" + fr: "Texte français" + ``` + + **New Pattern**: + ```yaml + has_or_had_language: + - iso_639_1: "nl" + language_name: "Dutch" + text_content: "Nederlandse tekst" + - iso_639_1: "en" + language_name: "English" + text_content: "English text" + - iso_639_1: "fr" + language_name: "French" + text_content: "Texte français" + ``` slots: - - de - - en - - fr - - nl + # MIGRATED 2026-01-22: de, en, fr, nl → has_or_had_language + Language (Rule 53) + - has_or_had_language - specificity_annotation - has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17) + slot_usage: + has_or_had_language: + range: Language + multivalued: true + inlined: true + inlined_as_list: true + description: | + Language-tagged text content. + MIGRATED from de/en/fr/nl slots per slot_fixes.yaml (Rule 53, 2026-01-22). + + Use Language class with iso_639_1, language_name, and text_content. + examples: + - value: | + - iso_639_1: "nl" + language_name: "Dutch" + text_content: "Nederlandse tekst" + - iso_639_1: "en" + language_name: "English" + text_content: "English text" + description: Multilingual text with Dutch and English versions comments: - - At least one language slot should be populated + - At least one language entry should be populated - nl is primary for Dutch archives + - MIGRATED 2026-01-22 from separate de/en/fr/nl slots to unified has_or_had_language CustodianReference: class_uri: rico:Agent description: 'Reference to the heritage custodian that created/maintains this finding aid. @@ -558,7 +603,9 @@ classes: ' slots: - - colonial + # MIGRATED 2026-01-22: colonial → includes_or_included + GeoSpatialPlace + is_or_was_categorized_as + ColonialStatus (Rule 53) + - includes_or_included + - is_or_was_categorized_as - historical_region - inbound_from - international @@ -579,8 +626,41 @@ classes: multivalued: true historical_region: multivalued: true - colonial: + # MIGRATED 2026-01-22: colonial → includes_or_included + is_or_was_categorized_as (Rule 53) + includes_or_included: + description: | + MIGRATED from colonial per slot_fixes.yaml (Rule 53, 2026-01-22). + Geographic territories included in this coverage area. + Use GeoSpatialPlace for structured geographic data. + range: GeoSpatialPlace multivalued: true + inlined: true + inlined_as_list: true + examples: + - value: + geospatial_id: https://nde.nl/ontology/hc/geo/dutch-east-indies + latitude: -6.2 + longitude: 106.8 + geometry_type: POLYGON + description: Dutch East Indies territory + is_or_was_categorized_as: + description: | + MIGRATED from colonial per slot_fixes.yaml (Rule 53, 2026-01-22). + Colonial status categorization for this geographic coverage. + Use ColonialStatus for structured colonial relationship data. + range: ColonialStatus + multivalued: true + inlined: true + inlined_as_list: true + examples: + - value: + territory_name: "Dutch East Indies" + colonizing_power: "Netherlands" + modern_equivalent: ["ID"] + temporal_extent: + begin_of_the_begin: "1602-01-01" + end_of_the_end: "1949-12-27" + description: Dutch colonial Indonesia international: multivalued: true major_city: diff --git a/schemas/20251121/linkml/modules/classes/Format.yaml b/schemas/20251121/linkml/modules/classes/Format.yaml new file mode 100644 index 0000000000..8dae373629 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/Format.yaml @@ -0,0 +1,150 @@ +# Format - Document/resource format class +# +# Created per slot_fixes.yaml migration for: format +# Creation date: 2026-01-22 +# Rule compliance: 39 (RiC-O naming), 50 (ontology mapping), 53 (slot_fixes revision) + +id: https://nde.nl/ontology/hc/class/Format +name: Format +title: Format + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + dct: http://purl.org/dc/terms/ + schema: http://schema.org/ + premis: http://www.loc.gov/premis/rdf/v3/ + +default_prefix: hc + +imports: + - linkml:types + - ../slots/description + - ../slots/has_or_had_identifier + - ../slots/has_or_had_label + +classes: + Format: + class_uri: dct:MediaType + description: | + A structured representation of a document, file, or resource format. + + **USAGE**: + Represents format specifications for: + - Finding aids (EAD, PDF, HTML, MARC) + - API responses (JSON, XML, RDF) + - Media files (JPEG, MP3, MP4) + - Transcripts and subtitles (VTT, SRT, TXT) + + **ONTOLOGY ALIGNMENT**: + - **Primary** (`class_uri`): `dct:MediaType` - Dublin Core media type + - **Related**: `schema:encodingFormat` - Schema.org encoding + - **Related**: `premis:Format` - PREMIS preservation format + + **MIGRATION NOTE**: + Created per slot_fixes.yaml revision (Rule 53, 2026-01-22). + Replaces simple string-valued `format` slot with structured class. + + slots: + - has_or_had_identifier + - has_or_had_label + - description + + attributes: + format_id: + identifier: true + description: | + Unique identifier for this format specification. + Recommended: Use IANA media type URI or CURIE. + range: uriorcurie + slot_uri: dct:identifier + examples: + - value: "iana:application/xml" + description: XML MIME type as CURIE + - value: "https://www.iana.org/assignments/media-types/text/vtt" + description: WebVTT format as full URI + + format_name: + description: | + Human-readable name of the format. + range: string + slot_uri: schema:name + examples: + - value: "Encoded Archival Description (EAD)" + - value: "WebVTT Subtitle Format" + - value: "JSON (JavaScript Object Notation)" + + mime_type: + description: | + IANA media type (MIME type) for this format. + range: string + slot_uri: dct:format + pattern: "^[a-z]+/[a-z0-9.+-]+$" + examples: + - value: "application/xml" + - value: "text/vtt" + - value: "application/json" + + file_extension: + description: | + Common file extension(s) for this format. + range: string + multivalued: true + examples: + - value: ".xml" + - value: ".ead" + - value: ".vtt" + - value: ".json" + + format_specification_url: + description: | + URL to the format's official specification or documentation. + range: uri + slot_uri: schema:url + examples: + - value: "https://www.loc.gov/ead/" + description: EAD specification + - value: "https://www.w3.org/TR/webvtt1/" + description: WebVTT W3C specification + + exact_mappings: + - dct:MediaType + + close_mappings: + - schema:encodingFormat + - premis:Format + + examples: + - value: + format_id: "iana:application/xml+ead" + format_name: "Encoded Archival Description (EAD)" + mime_type: "application/xml" + file_extension: + - ".xml" + - ".ead" + format_specification_url: "https://www.loc.gov/ead/" + description: EAD finding aid format + + - value: + format_id: "iana:text/vtt" + format_name: "WebVTT (Web Video Text Tracks)" + mime_type: "text/vtt" + file_extension: + - ".vtt" + format_specification_url: "https://www.w3.org/TR/webvtt1/" + description: WebVTT subtitle/caption format + + - value: + format_id: "iana:application/pdf" + format_name: "Portable Document Format (PDF)" + mime_type: "application/pdf" + file_extension: + - ".pdf" + format_specification_url: "https://www.iso.org/standard/75839.html" + description: PDF document format + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: "Format specifications applicable to all custodian types." + specificity_score: "0.25" + specificity_rationale: "Broadly applicable - formats used across all heritage custodian types." diff --git a/schemas/20251121/linkml/modules/classes/FoundingEvent.yaml b/schemas/20251121/linkml/modules/classes/FoundingEvent.yaml new file mode 100644 index 0000000000..79cd317c42 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/FoundingEvent.yaml @@ -0,0 +1,157 @@ +# FoundingEvent - Organization founding event class +# +# Created per slot_fixes.yaml migration for: founded_year, founding_date +# Creation date: 2026-01-22 +# Rule compliance: 39 (RiC-O naming), 50 (ontology mapping), 53 (slot_fixes revision) + +id: https://nde.nl/ontology/hc/class/FoundingEvent +name: FoundingEvent +title: Founding Event + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + prov: http://www.w3.org/ns/prov# + crm: http://www.cidoc-crm.org/cidoc-crm/ + +default_prefix: hc + +imports: + - linkml:types + - ../slots/temporal_extent + - ../slots/description + - ../slots/has_or_had_identifier + - ./TimeSpan + +classes: + FoundingEvent: + class_uri: crm:E63_Beginning_of_Existence + description: | + Represents the founding or establishment event of an organization. + + **USAGE**: + Captures structured founding information for: + - Heritage custodians (museums, archives, libraries) + - Standards organizations + - Historic restaurants and venues + - Any organization with establishment history + + **ONTOLOGY ALIGNMENT**: + - **Primary** (`class_uri`): `crm:E63_Beginning_of_Existence` - CIDOC-CRM + - **Close**: `schema:Event` - Schema.org event + - **Close**: `prov:Activity` - PROV-O activity + + **TEMPORAL PATTERN**: + Uses CIDOC-CRM E52_Time-Span pattern for fuzzy temporal bounds: + - Known year: `begin_of_the_begin` = "YYYY-01-01", `end_of_the_begin` = "YYYY-12-31" + - Known exact date: all four bounds equal + - Unknown year range: set `begin_of_the_begin` to earliest, `end_of_the_begin` to latest + + **MIGRATION NOTE**: + Created per slot_fixes.yaml revision (Rule 53, 2026-01-22). + Replaces simple `founded_year` (integer) and `founding_date` (string). + + slots: + - temporal_extent + - description + - has_or_had_identifier + + attributes: + founding_event_id: + identifier: true + description: | + Unique identifier for this founding event. + Recommended format: URI combining organization ID and "founding". + range: uriorcurie + slot_uri: dcterms:identifier + examples: + - value: "https://nde.nl/ontology/hc/event/founding/rijksmuseum-1800" + - value: "hc:event/founding/de-kas-1902" + + founding_description: + description: | + Textual description of the founding event and circumstances. + range: string + slot_uri: schema:description + examples: + - value: "Founded by King Louis Napoleon as the Royal Museum" + - value: "Established as family restaurant in historic greenhouse" + + founding_location: + description: | + Location where the founding took place (if different from current location). + range: string + slot_uri: schema:location + examples: + - value: "The Hague, Netherlands" + - value: "Original premises at 123 Main Street" + + founded_by: + description: | + Person(s) or organization(s) who founded this entity. + range: string + multivalued: true + slot_uri: schema:founder + examples: + - value: "King Louis Napoleon" + - value: "Johannes van der Berg" + + slot_usage: + temporal_extent: + description: | + The temporal extent of the founding event. + For a known year (e.g., 1902), use: + - begin_of_the_begin: "1902-01-01" + - end_of_the_begin: "1902-12-31" + + For a precise date (e.g., 1902-03-15), set all bounds equal. + For uncertain date ranges, use appropriate fuzzy bounds. + range: TimeSpan + inlined: true + required: true + + exact_mappings: + - crm:E63_Beginning_of_Existence + + close_mappings: + - schema:Event + - prov:Activity + + examples: + - value: + founding_event_id: "https://nde.nl/ontology/hc/event/founding/rijksmuseum-1800" + temporal_extent: + begin_of_the_begin: "1800-01-01" + end_of_the_begin: "1800-12-31" + notes: "Founded in 1800 by King Louis Napoleon" + founding_description: "Founded as the Royal Museum by King Louis Napoleon" + founded_by: + - "King Louis Napoleon" + founding_location: "The Hague, Netherlands" + description: Rijksmuseum founding event + + - value: + founding_event_id: "https://nde.nl/ontology/hc/event/founding/de-kas-1902" + temporal_extent: + begin_of_the_begin: "1902-01-01" + end_of_the_begin: "1902-12-31" + founding_description: "Established as historic greenhouse restaurant" + founded_by: + - "Original family owners" + description: Historic restaurant founding + + - value: + founding_event_id: "https://nde.nl/ontology/hc/event/founding/unknown-archive-1850s" + temporal_extent: + begin_of_the_begin: "1850-01-01" + end_of_the_begin: "1859-12-31" + notes: "Founded sometime in the 1850s" + founding_description: "Founded during the 1850s, exact date unknown" + description: Founding with decade-level uncertainty + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: "Founding events applicable to all custodian types." + specificity_score: "0.30" + specificity_rationale: "Broadly applicable - founding events for all heritage organizations." diff --git a/schemas/20251121/linkml/modules/classes/GalleryType.yaml b/schemas/20251121/linkml/modules/classes/GalleryType.yaml index 244173216d..ef79969b49 100644 --- a/schemas/20251121/linkml/modules/classes/GalleryType.yaml +++ b/schemas/20251121/linkml/modules/classes/GalleryType.yaml @@ -6,8 +6,16 @@ imports: - ./CustodianType - ../enums/GalleryTypeEnum - ../slots/has_or_had_artist_representation - - ../slots/commercial_operation - - ../slots/commission_rate + # REMOVED 2026-01-22: ../slots/commercial_operation - migrated to has_or_had_objective + Profit (Rule 53) + - ../slots/has_or_had_objective + - ./Profit + # REMOVED 2026-01-22: ../slots/commission_rate - migrated to has_or_had_service + ArtSaleService + takes_or_took_comission + CommissionRate (Rule 53) + - ../slots/has_or_had_service + - ./ArtSaleService + - ../slots/takes_or_took_comission + - ./CommissionRate + - ../slots/has_or_had_percentage + - ./Percentage - ../slots/has_or_had_custodian_type - ../slots/exhibition_focus - ../slots/exhibition_model @@ -123,14 +131,13 @@ classes: \ Example**:\n```turtle\n:Custodian_KunsthalRotterdam\n org:classification :GalleryType_Kunsthalle_Q1475403 .\n\n\ :GalleryType_Kunsthalle_Q1475403\n a glamtype:GalleryType, crm:E55_Type, skos:Concept ;\n skos:prefLabel \"Kunsthalle\"\ @en, \"kunsthalle\"@nl, \"Kunsthalle\"@de ;\n skos:broader :GalleryType_ArtGallery_Q1007870 ;\n schema:additionalType\ - \ ;\n glamtype:glamorcubesfixphdnt_code \"GALLERY\" ;\n glamtype:commercial_operation\ + \ ;\n glamtype:glamorcubesfixphdnt_code \"GALLERY\" ;\n glamtype:has_or_had_objective\ \ false ;\n glamtype:exhibition_focus \"contemporary art\" ;\n glamtype:sales_activity false ;\n glamtype:exhibition_model\ \ \"temporary rotating exhibitions\" .\n```\n\n**Domain-Specific Properties**:\nThis class adds gallery-specific metadata\ - \ beyond base CustodianType:\n- `commercial_operation` - Whether gallery operates commercially (sells art)\n- `artist_representation`\ + \ beyond base CustodianType:\n- `has_or_had_objective` - Structured profit objective (commercial/nonprofit/mixed)\n- `artist_representation`\ \ - Artists represented by gallery (for commercial galleries)\n- `exhibition_focus` - Type of art exhibited (contemporary,\ \ modern, photography, etc.)\n- `sales_activity` - Whether gallery sells artworks (not just exhibits)\n- `exhibition_model`\ - \ - Exhibition strategy (temporary, rotating, curated shows)\n- `commission_rate` - Gallery commission percentage (for\ - \ commercial galleries)\n\n**Getty AAT Integration**:\nThe Getty Art & Architecture Thesaurus provides standardized\ + \ - Exhibition strategy (temporary, rotating, curated shows)\n- `has_or_had_service` - Art sales service with commission structure (ArtSaleService)\n\n**Getty AAT Integration**:\nThe Getty Art & Architecture Thesaurus provides standardized\ \ vocabulary:\n- aat:300005768 - art galleries (institutions)\n- aat:300240057 - commercial galleries\n- aat:300240058\ \ - nonprofit galleries\n- aat:300005741 - kunsthalles\n\n**Art Market Context**:\nCommercial galleries operate in the\ \ art market ecosystem:\n- **Primary market**: Representing living artists, first sales\n- **Secondary market**: Resale\ @@ -139,8 +146,10 @@ classes: \ extracted from 78 Wikidata entities with type='G'\nin `data/wikidata/GLAMORCUBEPSXHFN/hyponyms_curated_full.yaml`.\n" slots: - has_or_had_artist_representation - - commercial_operation - - commission_rate + # REMOVED 2026-01-22: commercial_operation - migrated to has_or_had_objective + Profit (Rule 53) + - has_or_had_objective + # REMOVED 2026-01-22: commission_rate - migrated to has_or_had_service + ArtSaleService (Rule 53) + - has_or_had_service - has_or_had_custodian_type - exhibition_focus - exhibition_model @@ -185,7 +194,11 @@ classes: - Kunsthalle@de has_or_had_description: facility that mounts temporary art exhibitions without permanent collection # was: type_description - migrated per Rule 53/56 (2026-01-16) custodian_type_broader: https://nde.nl/ontology/hc/type/gallery/Q1007870 - commercial_operation: false + # MIGRATED 2026-01-22: commercial_operation → has_or_had_objective + Profit (Rule 53) + has_or_had_objective: + objective_type: "nonprofit" + is_commercial: false + profit_model: "Public funding and grants" exhibition_focus: contemporary art sales_activity: false exhibition_model: temporary rotating exhibitions, no permanent collection @@ -199,7 +212,11 @@ classes: - kunstgalerie@nl has_or_had_description: for-profit gallery that sells artworks and represents artists # was: type_description - migrated per Rule 53/56 (2026-01-16) custodian_type_broader: https://nde.nl/ontology/hc/type/gallery/Q1007870 - commercial_operation: true + # MIGRATED 2026-01-22: commercial_operation → has_or_had_objective + Profit (Rule 53) + has_or_had_objective: + objective_type: "for-profit" + is_commercial: true + profit_model: "Sales commission (50%)" has_or_had_artist_representation: - Artist A - Artist B @@ -207,5 +224,15 @@ classes: exhibition_focus: contemporary painting and sculpture sales_activity: true exhibition_model: curated exhibitions of represented artists - commission_rate: 50% + # MIGRATED 2026-01-22: commission_rate → has_or_had_service + ArtSaleService (Rule 53) + has_or_had_service: + service_name: "Primary Market Sales" + market_type: "primary" + artist_representation: true + sales_activity: true + takes_or_took_comission: + rate_type: "primary_market" + has_or_had_percentage: + percentage_value: 50 + percentage_display: "50%" description: Commercial gallery with artist representation and sales diff --git a/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml b/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml index 2a148878cf..9339ead2a3 100644 --- a/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml +++ b/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml @@ -16,7 +16,11 @@ imports: - ./CustodianType - ../slots/has_or_had_access_policy - ../enums/HolySiteTypeEnum - - ../slots/collection_type + # REMOVED 2026-01-22: ../slots/collection_type - migrated to has_or_had_content + CollectionContent (Rule 53) + - ../slots/has_or_had_content + - ./CollectionContent + - ./CollectionContentType + - ./CollectionContentTypes - ../slots/has_or_had_custodian_type - ../slots/holy_site_subtype - ../slots/religious_function @@ -280,8 +284,8 @@ classes: \ hc:TempleCollection ;\n schema:url .\n\n# Example:\ \ Vatican Apostolic Archive (papal archive)\n\n a\ \ schema:PlaceOfWorship, schema:ArchiveOrganization, crm:E39_Actor, hc:HolySacredSite ;\n hc:custodian_type hc:HolySacredSiteType\ - \ ;\n hc:religious_tradition \"Roman Catholic Christianity\" ;\n hc:collection_type \"Archival records\", \"Papal\ - \ documents\", \"Medieval manuscripts\", \"Correspondence\" ;\n hc:religious_function \"Support papal governance\"\ + \ ;\n hc:religious_tradition \"Roman Catholic Christianity\" ;\n hc:has_or_had_content [ hc:content_description \"Archival records, Papal\ + \ documents, Medieval manuscripts, Correspondence\" ] ;\n hc:religious_function \"Support papal governance\"\ , \"Document Church history\", \"Preserve canon law\" ;\n hc:access_policy \"Restricted access by appointment\", \"\ Scholars and researchers only\", \"No browsing\" ;\n hc:is_or_was_managed_by \"Prefect of Vatican Apostolic Archive\"\ , \"Papal administrative authority\" ;\n hc:secularization_status \"Active religious institution, No secularization\"\ @@ -303,7 +307,8 @@ classes: - schema:ArchiveOrganization slots: - has_or_had_access_policy - - collection_type + # REMOVED 2026-01-22: collection_type - migrated to has_or_had_content + CollectionContent (Rule 53) + - has_or_had_content - has_or_had_custodian_type - holy_site_subtype - religious_function @@ -323,16 +328,34 @@ classes: description: Sunni mosque - value: Theravada Buddhism description: Buddhist temple - collection_type: - range: string + has_or_had_content: # was: collection_type - migrated per Rule 53 (2026-01-22) + description: | + MIGRATED from collection_type per slot_fixes.yaml (Rule 53, 2026-01-22). + Types of heritage materials held by the religious site. + Uses CollectionContent class with CollectionContentType taxonomy. + range: CollectionContent multivalued: true + inlined: true + inlined_as_list: true required: true examples: - - value: Archives, Manuscripts, Papal documents + - value: + content_description: "Archives, Manuscripts, Papal documents" + has_or_had_type: + - type_label: Archival + - type_label: Library description: Vatican collection types - - value: Torah scrolls, Archives, Ceremonial silver + - value: + content_description: "Torah scrolls, Archives, Ceremonial silver" + has_or_had_type: + - type_label: Archival + - type_label: Liturgical description: Synagogue collection types - - value: Sutras, Temple registers, Buddha statues + - value: + content_description: "Sutras, Temple registers, Buddha statues" + has_or_had_type: + - type_label: Library + - type_label: Art description: Temple collection types religious_function: range: string diff --git a/schemas/20251121/linkml/modules/classes/Language.yaml b/schemas/20251121/linkml/modules/classes/Language.yaml index 9b62537704..81d35482c5 100644 --- a/schemas/20251121/linkml/modules/classes/Language.yaml +++ b/schemas/20251121/linkml/modules/classes/Language.yaml @@ -1,17 +1,42 @@ # Language - Language class +# Extended 2026-01-22: Added text_content attribute for language-tagged text support +# Supports migration of language-specific text slots (fr, de, en, nl) per slot_fixes.yaml id: https://nde.nl/ontology/hc/class/Language name: Language prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dct: http://purl.org/dc/terms/ + rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# imports: - linkml:types - ../slots/has_or_had_code classes: Language: class_uri: dct:LinguisticSystem - description: A language with ISO codes + description: | + A language with ISO codes and optional text content. + + **Purpose**: + Represents a language entity that can identify the language of text content. + Used for language-tagged text where the language code and content are bundled together. + + **Use Cases**: + 1. Language identification only (just codes, no content) + 2. Language-tagged text (codes + text_content for multilingual data) + + **Migration Support**: + This class supports migration from language-specific text slots (fr, de, en, nl) + to a unified `has_or_had_language` + `Language` pattern per slot_fixes.yaml. + + **Ontological Alignment**: + - **Primary**: `dct:LinguisticSystem` - Dublin Core linguistic system + - **Close**: `schema:Language` - Schema.org language + + exact_mappings: + - dct:LinguisticSystem + close_mappings: + - schema:Language slots: - has_or_had_code attributes: @@ -22,7 +47,43 @@ classes: Parsed from raw string, not authoritative. Use ISO codes for formal identification. iso_639_1: range: string - description: ISO 639-1 two-letter code + description: ISO 639-1 two-letter code (e.g., "fr", "en", "de", "nl") + pattern: "^[a-z]{2}$" iso_639_3: range: string - description: ISO 639-3 three-letter code + description: ISO 639-3 three-letter code (e.g., "fra", "eng", "deu", "nld") + pattern: "^[a-z]{3}$" + text_content: + range: string + description: | + Text content in this language. + + Used when bundling language identification with the actual text content. + This enables migration from language-specific slots (fr, de, en, nl) to + a unified Language-tagged pattern. + + **Example**: + ```yaml + has_or_had_language: + - iso_639_1: "fr" + language_name: "French" + text_content: "archives universitaires" + - iso_639_1: "en" + language_name: "English" + text_content: "university archives" + ``` + examples: + - value: | + iso_639_1: "fr" + language_name: "French" + text_content: "archives universitaires" + description: French language-tagged text for multilingual label + - value: | + iso_639_1: "en" + language_name: "English" + description: English language identifier (without text content) + - value: | + iso_639_1: "nl" + language_name: "Dutch" + text_content: "universitair archief" + description: Dutch language-tagged text diff --git a/schemas/20251121/linkml/modules/classes/Name.yaml b/schemas/20251121/linkml/modules/classes/Name.yaml new file mode 100644 index 0000000000..9f7f9e18bd --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/Name.yaml @@ -0,0 +1,153 @@ +# Name class +# Created per slot_fixes.yaml revision for: common_name +# +# MIGRATION NOTE (2026-01-22): Created as part of common_name migration per Rule 53. +# Provides structured representation of names with type classification. + +id: https://nde.nl/ontology/hc/class/Name +name: name_class +title: Name Class + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + skos: http://www.w3.org/2004/02/skos/core# + rdfs: http://www.w3.org/2000/01/rdf-schema# + dwc: http://rs.tdwg.org/dwc/terms/ + +imports: + - linkml:types + - ../metadata + - ../slots/has_or_had_type + - ../slots/has_or_had_language + - ../slots/has_or_had_label + +default_prefix: hc + +classes: + Name: + class_uri: schema:name + description: | + Structured representation of a name associated with an entity. + + **MIGRATION NOTE** (2026-01-22): + Created per slot_fixes.yaml migration from `common_name` string + to structured Name class per Rule 53. + + **Purpose**: + Provides structured representation for names including: + - The name value itself (via has_or_had_label) + - Name type classification (e.g., common name, scientific name, trade name) + - Language information + + **Ontological Alignment**: + - **Primary** (`class_uri`): `schema:name` - Schema.org name + - **Close**: `skos:prefLabel`, `rdfs:label` - Label predicates + - **Related**: `dwc:vernacularName` - Darwin Core vernacular name + + **Use Cases**: + - Biological specimens with common/vernacular names in multiple languages + - Organizations with official names and trading names + - Places with indigenous and colonial names + - Products with brand names and generic names + + **Pattern**: + ```yaml + has_or_had_name: + - has_or_had_label: "Dodo" + has_or_had_type: CommonName + has_or_had_language: "en" + - has_or_had_label: "Dronte" + has_or_had_type: CommonName + has_or_had_language: "nl" + ``` + + slots: + - has_or_had_label + - has_or_had_type + - has_or_had_language + + slot_usage: + has_or_had_label: + description: The name value itself. + range: string + required: true + examples: + - value: "Dodo" + description: English common name + - value: "Dronte" + description: Dutch common name + has_or_had_type: + description: | + The type classification of this name. + Range narrowed to NameType class hierarchy. + range: NameType + required: false + examples: + - value: CommonName + description: Vernacular/common name + - value: ScientificName + description: Binomial nomenclature + has_or_had_language: + description: | + The language of this name (ISO 639-1 code). + range: string + required: false + examples: + - value: "en" + description: English + - value: "nl" + description: Dutch + - value: "la" + description: Latin (for scientific names) + + exact_mappings: + - schema:name + close_mappings: + - skos:prefLabel + - rdfs:label + related_mappings: + - dwc:vernacularName + - schema:alternateName + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: Name structures applicable to all heritage custodian types. + custodian_types_primary: M + specificity_score: 0.25 + specificity_rationale: >- + Broadly applicable - names are fundamental to all heritage entities + including biological specimens, organizations, places, and objects. + template_specificity: + collection_discovery: 0.30 + person_research: 0.35 + general_heritage: 0.25 + migration_info: + source_slot: common_name + migration_date: "2026-01-22" + rule: "Rule 53" + + comments: + - "Structured name representation with type and language" + - "Replaces simple string-valued common_name slot" + - "Supports multilingual names through has_or_had_language" + - "Type classification via NameType hierarchy" + - "Created 2026-01-22 from common_name migration (Rule 53)" + + examples: + - value: + has_or_had_label: "Dodo" + has_or_had_type: CommonName + has_or_had_language: "en" + description: English common name for extinct bird + - value: + has_or_had_label: "Dronte" + has_or_had_type: CommonName + has_or_had_language: "nl" + description: Dutch common name for same species + - value: + has_or_had_label: "Coast Redwood" + has_or_had_type: CommonName + has_or_had_language: "en" + description: English common name for tree species diff --git a/schemas/20251121/linkml/modules/classes/NameType.yaml b/schemas/20251121/linkml/modules/classes/NameType.yaml new file mode 100644 index 0000000000..52ade7ad2e --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/NameType.yaml @@ -0,0 +1,100 @@ +# NameType class (abstract base) +# Created per slot_fixes.yaml revision for: common_name +# +# MIGRATION NOTE (2026-01-22): Created as part of common_name migration per Rule 53. +# Abstract base class for name type taxonomy following Rule 0b (Type/Types pattern). + +id: https://nde.nl/ontology/hc/class/NameType +name: name_type_class +title: Name Type Class + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + skos: http://www.w3.org/2004/02/skos/core# + crm: http://www.cidoc-crm.org/cidoc-crm/ + dwc: http://rs.tdwg.org/dwc/terms/ + +imports: + - linkml:types + - ../metadata + - ../slots/has_or_had_label + - ../slots/has_or_had_description + +default_prefix: hc + +classes: + NameType: + class_uri: crm:E55_Type + abstract: true + description: | + Abstract base class for name type classifications. + + **DESIGN PATTERN** (Rule 0b - Type/Types Convention): + + | File | Purpose | + |------|---------| + | `NameType.yaml` (this file) | Abstract base class | + | `NameTypes.yaml` | Concrete subclasses (CommonName, ScientificName, etc.) | + + **Purpose**: + Provides type taxonomy for categorizing different kinds of names: + - Common/vernacular names (species, products) + - Scientific names (binomial nomenclature) + - Official names (organizations, places) + - Trade/brand names + - Historical/former names + + **Ontological Alignment**: + - **Primary** (`class_uri`): `crm:E55_Type` - CIDOC-CRM type + - **Close**: `skos:Concept` - SKOS concept vocabulary + + **Usage**: + ```yaml + has_or_had_name: + - has_or_had_label: "Dodo" + has_or_had_type: CommonName # ← NameType subclass + has_or_had_language: "en" + ``` + + slots: + - has_or_had_label + - has_or_had_description + + slot_usage: + has_or_had_label: + description: Human-readable label for this name type. + range: string + required: true + examples: + - value: "Common Name" + - value: "Scientific Name" + has_or_had_description: + description: Explanation of when to use this name type. + range: string + required: false + + exact_mappings: + - crm:E55_Type + close_mappings: + - skos:Concept + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: Name types applicable across all heritage domains. + custodian_types_primary: M + specificity_score: 0.30 + specificity_rationale: >- + Moderately specific - name type vocabularies are fundamental but have + domain-specific variations (biology vs. organizational naming). + design_pattern: "Type/Types (Rule 0b)" + migration_info: + source_slot: common_name + migration_date: "2026-01-22" + rule: "Rule 53" + + comments: + - "Abstract base class - see NameTypes.yaml for concrete subclasses" + - "Follows Rule 0b Type/Types naming pattern" + - "Used with Name class to classify name types" + - "Created 2026-01-22 from common_name migration (Rule 53)" diff --git a/schemas/20251121/linkml/modules/classes/NameTypes.yaml b/schemas/20251121/linkml/modules/classes/NameTypes.yaml new file mode 100644 index 0000000000..a8200919a5 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/NameTypes.yaml @@ -0,0 +1,226 @@ +# NameTypes class (concrete subclasses) +# Created per slot_fixes.yaml revision for: common_name +# +# MIGRATION NOTE (2026-01-22): Created as part of common_name migration per Rule 53. +# Contains concrete name type subclasses per Rule 0b (Type/Types pattern). +# NOTE: revision specifies "this includes CommonName" + +id: https://nde.nl/ontology/hc/class/NameTypes +name: name_types_class +title: Name Types Class + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + skos: http://www.w3.org/2004/02/skos/core# + dwc: http://rs.tdwg.org/dwc/terms/ + schema: http://schema.org/ + +imports: + - linkml:types + - ../metadata + - ./NameType # Import abstract base class + +default_prefix: hc + +classes: + # === Primary Name Types === + + CommonName: + is_a: NameType + class_uri: dwc:vernacularName + description: | + Vernacular or common name in any language. + + **Darwin Core Alignment**: + Maps to `dwc:vernacularName` - "A common or vernacular name." + + **Use Cases**: + - Species common names ("Dodo", "Dronte", "Coast Redwood") + - Product common names + - Informal organization names + + **Example**: + ```yaml + has_or_had_name: + - has_or_had_label: "Dodo" + has_or_had_type: CommonName + has_or_had_language: "en" + ``` + + exact_mappings: + - dwc:vernacularName + annotations: + specificity_score: 0.35 + specificity_rationale: Common names used across biological and cultural heritage. + + ScientificName: + is_a: NameType + class_uri: dwc:scientificName + description: | + Scientific name following nomenclatural codes (ICZN, ICN, ICNP). + + **Darwin Core Alignment**: + Maps to `dwc:scientificName` - "The full scientific name, with authorship + and date information if known." + + **Use Cases**: + - Binomial nomenclature for species + - Taxonomic names at any rank + + **Example**: + ```yaml + has_or_had_name: + - has_or_had_label: "Raphus cucullatus (Linnaeus, 1758)" + has_or_had_type: ScientificName + has_or_had_language: "la" + ``` + + exact_mappings: + - dwc:scientificName + annotations: + specificity_score: 0.70 + specificity_rationale: Scientific names specific to biological/taxonomic contexts. + + OfficialName: + is_a: NameType + class_uri: skos:prefLabel + description: | + Official, formal, or legal name of an entity. + + **Use Cases**: + - Organization legal names + - Official place names + - Formal document titles + + **Example**: + ```yaml + has_or_had_name: + - has_or_had_label: "Rijksmuseum Amsterdam" + has_or_had_type: OfficialName + has_or_had_language: "nl" + ``` + + close_mappings: + - skos:prefLabel + - schema:legalName + annotations: + specificity_score: 0.40 + specificity_rationale: Official names apply to organizations, places, and formal entities. + + TradeName: + is_a: NameType + class_uri: schema:alternateName + description: | + Commercial, trade, or brand name. + + **Use Cases**: + - Company trading names (DBA) + - Product brand names + - Service marks + + **Example**: + ```yaml + has_or_had_name: + - has_or_had_label: "The Rijks" + has_or_had_type: TradeName + has_or_had_language: "en" + ``` + + close_mappings: + - schema:alternateName + annotations: + specificity_score: 0.55 + specificity_rationale: Trade names specific to commercial/corporate contexts. + + HistoricalName: + is_a: NameType + class_uri: hc:HistoricalName + description: | + Former or historical name no longer in active use. + + **Use Cases**: + - Former city names (Constantinople → Istanbul) + - Previous organization names + - Obsolete taxonomic names (synonyms) + + **Example**: + ```yaml + has_or_had_name: + - has_or_had_label: "Didus ineptus" + has_or_had_type: HistoricalName + has_or_had_language: "la" + ``` + + annotations: + specificity_score: 0.45 + specificity_rationale: Historical names applicable across all heritage domains. + + IndigenousName: + is_a: NameType + class_uri: hc:IndigenousName + description: | + Name in an indigenous or minority language. + + **Use Cases**: + - Indigenous place names + - Traditional ecological knowledge names + - Minority language names for cultural heritage + + **Example**: + ```yaml + has_or_had_name: + - has_or_had_label: "Aotearoa" + has_or_had_type: IndigenousName + has_or_had_language: "mi" # Maori + ``` + + annotations: + specificity_score: 0.50 + specificity_rationale: Indigenous names particularly relevant for cultural heritage and decolonization. + + Abbreviation: + is_a: NameType + class_uri: hc:Abbreviation + description: | + Abbreviated form of a name. + + **Use Cases**: + - Acronyms (UNESCO, ICOM) + - Standard abbreviations + - Initialisms + + **Example**: + ```yaml + has_or_had_name: + - has_or_had_label: "NHM" + has_or_had_type: Abbreviation + has_or_had_language: "en" + ``` + + annotations: + specificity_score: 0.35 + specificity_rationale: Abbreviations common across all naming contexts. + + NickName: + is_a: NameType + class_uri: hc:NickName + description: | + Informal nickname or pet name. + + **Use Cases**: + - Informal references to places ("The City") + - Colloquial names for organizations + - Popular names for specimens + + **Example**: + ```yaml + has_or_had_name: + - has_or_had_label: "Oxford Dodo" + has_or_had_type: NickName + has_or_had_language: "en" + ``` + + annotations: + specificity_score: 0.40 + specificity_rationale: Nicknames used informally across heritage contexts. diff --git a/schemas/20251121/linkml/modules/classes/Percentage.yaml b/schemas/20251121/linkml/modules/classes/Percentage.yaml new file mode 100644 index 0000000000..29167b4756 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/Percentage.yaml @@ -0,0 +1,161 @@ +# Percentage class +# Created per slot_fixes.yaml revision for: commission_rate +# +# Represents a percentage value with optional range +# MIGRATION NOTE (2026-01-22): Created as part of commission_rate migration per Rule 53. + +id: https://nde.nl/ontology/hc/class/Percentage +name: percentage_class +title: Percentage Class + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + qudt: http://qudt.org/schema/qudt/ + +imports: + - linkml:types + - ../metadata + +default_prefix: hc + +classes: + Percentage: + class_uri: hc:Percentage + description: | + Structured representation of a percentage value. + + **PURPOSE**: + + Models percentage values with optional min/max range and + display formatting. Replaces unstructured percentage strings. + + **DESIGN RATIONALE**: + + Created per slot_fixes.yaml migration from `commission_rate` string + (e.g., "50%", "40-50%") to structured Percentage class. + + **USE CASES**: + + - Commission rates: "50%" → percentage_value: 50 + - Variable rates: "40-50%" → percentage_min: 40, percentage_max: 50 + - Completion: "75% complete" → percentage_value: 75 + - Discount: "20% off" → percentage_value: 20 + + **EXAMPLE**: + + ```yaml + has_or_had_percentage: + percentage_value: 50 + percentage_display: "50%" + ``` + + close_mappings: + - qudt:QuantityValue + - schema:QuantitativeValue + + attributes: + percentage_value: + description: | + The numeric percentage value (0-100). + For ranges, this is the typical/default value. + range: float + required: true + minimum_value: 0 + maximum_value: 100 + examples: + - value: 50 + description: 50 percent + - value: 15.5 + description: 15.5 percent + + percentage_min: + description: | + Minimum percentage in a range. + Only used when percentage varies (e.g., "40-50%"). + range: float + required: false + minimum_value: 0 + maximum_value: 100 + examples: + - value: 40 + description: Minimum of 40-50% range + + percentage_max: + description: | + Maximum percentage in a range. + Only used when percentage varies (e.g., "40-50%"). + range: float + required: false + minimum_value: 0 + maximum_value: 100 + examples: + - value: 50 + description: Maximum of 40-50% range + + percentage_display: + description: | + Human-readable display format of the percentage. + Preserves original formatting from source data. + range: string + required: false + pattern: ^[0-9]{1,3}(\.[0-9]+)?(-[0-9]{1,3}(\.[0-9]+)?)?%$ + examples: + - value: "50%" + description: Simple percentage + - value: "40-50%" + description: Range percentage + - value: "15.5%" + description: Decimal percentage + + percentage_context: + description: | + Context or meaning of this percentage. + range: string + required: false + examples: + - value: "commission" + description: Commission rate + - value: "completion" + description: Completion percentage + - value: "discount" + description: Discount percentage + + examples: + - value: + percentage_value: 50 + percentage_display: "50%" + percentage_context: "commission" + description: Simple 50% commission + + - value: + percentage_value: 45 + percentage_min: 40 + percentage_max: 50 + percentage_display: "40-50%" + percentage_context: "commission" + description: Variable commission range (40-50%) + + - value: + percentage_value: 15.5 + percentage_display: "15.5%" + percentage_context: "secondary_market" + description: Decimal percentage for secondary market + + comments: + - Created 2026-01-22 from commission_rate migration (Rule 53) + - Supports single values and ranges + - Preserves original display formatting + + see_also: + - http://qudt.org/schema/qudt/QuantityValue + - https://schema.org/QuantitativeValue + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: >- + Universal - percentages apply across many contexts. + specificity_score: "0.30" + specificity_rationale: >- + Broadly useful - percentages appear in many contexts. diff --git a/schemas/20251121/linkml/modules/classes/Profit.yaml b/schemas/20251121/linkml/modules/classes/Profit.yaml new file mode 100644 index 0000000000..71de6053d5 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/Profit.yaml @@ -0,0 +1,152 @@ +# Profit class +# Created per slot_fixes.yaml revision for: commercial_operation +# +# Represents organizational profit objective/motive +# MIGRATION NOTE (2026-01-22): Created as part of commercial_operation migration per Rule 53. + +id: https://nde.nl/ontology/hc/class/Profit +name: profit_class +title: Profit Class + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + org: http://www.w3.org/ns/org# + +imports: + - linkml:types + - ../metadata + +default_prefix: hc + +classes: + Profit: + class_uri: hc:Profit + description: | + Structured representation of an organization's profit motive/objective. + + **PURPOSE**: + + Models whether an organization operates for profit or as nonprofit, + replacing simple boolean with structured class for richer metadata. + + **DESIGN RATIONALE**: + + Created per slot_fixes.yaml migration from `commercial_operation` boolean + to structured `has_or_had_objective` + `Profit` for complete objective tracking. + + **USE CASES**: + + - Commercial galleries: For-profit, sell artworks, earn commission + - Kunsthalle: Nonprofit, exhibition-only, public funding + - Mixed models: Partial commercial activities in nonprofit context + + **EXAMPLE**: + + ```yaml + has_or_had_objective: + objective_type: "for-profit" + is_commercial: true + profit_model: "Sales commission" + tax_status: "for-profit corporation" + ``` + + close_mappings: + - schema:BusinessFunction + - org:purpose + + attributes: + objective_type: + description: | + Type of operational objective (for-profit, nonprofit, mixed). + range: string + required: true + examples: + - value: "for-profit" + description: Commercial operation + - value: "nonprofit" + description: Non-commercial operation + - value: "mixed" + description: Combination of commercial and nonprofit activities + + is_commercial: + description: | + Boolean indicator for commercial operation. + True = operates commercially (generates profit/revenue from sales) + False = non-commercial (exhibition-only, public/grant funded) + + MIGRATION NOTE: This preserves the original boolean semantics + of the deprecated commercial_operation slot. + range: boolean + required: true + examples: + - value: true + description: Commercial gallery selling artworks + - value: false + description: Kunsthalle or non-profit exhibition space + + profit_model: + description: | + Description of how profit/revenue is generated. + range: string + required: false + examples: + - value: "Sales commission (50%)" + description: Gallery earns commission on artwork sales + - value: "Admission fees" + description: Revenue from visitor admission + - value: "Membership dues" + description: Revenue from member subscriptions + + tax_status: + description: | + Legal tax status of the organization. + range: string + required: false + examples: + - value: "501(c)(3) nonprofit" + description: US tax-exempt nonprofit + - value: "ANBI" + description: Dutch public benefit organization + - value: "for-profit corporation" + description: Standard commercial entity + + examples: + - value: + objective_type: "for-profit" + is_commercial: true + profit_model: "Sales commission (50%)" + tax_status: "for-profit corporation" + description: Commercial art gallery with sales commission model + + - value: + objective_type: "nonprofit" + is_commercial: false + profit_model: "Public funding and grants" + tax_status: "ANBI" + description: Kunsthalle with nonprofit status + + - value: + objective_type: "mixed" + is_commercial: true + profit_model: "Gift shop and admission, plus grants" + tax_status: "501(c)(3) nonprofit" + description: Museum with mixed revenue model + + comments: + - Created 2026-01-22 from commercial_operation migration (Rule 53) + - Replaces boolean with structured objective representation + - Supports commercial, nonprofit, and mixed operational models + + see_also: + - https://schema.org/BusinessFunction + - https://www.w3.org/ns/org#purpose + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: >- + Universal - any custodian type may have operational objectives. + specificity_score: "0.40" + specificity_rationale: >- + Moderately specific - relates to organizational structure across types. diff --git a/schemas/20251121/linkml/modules/classes/Significance.yaml b/schemas/20251121/linkml/modules/classes/Significance.yaml new file mode 100644 index 0000000000..791b383360 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/Significance.yaml @@ -0,0 +1,132 @@ +# Significance class +# Created per slot_fixes.yaml revision for: community_significance +# +# MIGRATION NOTE (2026-01-22): Created as part of community_significance migration per Rule 53. +# Provides structured representation of significance with type classification. + +id: https://nde.nl/ontology/hc/class/Significance +name: significance_class +title: Significance Class + +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/ + schema: http://schema.org/ + +imports: + - linkml:types + - ../metadata + - ../slots/has_or_had_type + - ../slots/has_or_had_description + - ../slots/has_or_had_label + +default_prefix: hc + +classes: + Significance: + class_uri: crm:E55_Type + description: | + Structured representation of significance or importance. + + **MIGRATION NOTE** (2026-01-22): + Created per slot_fixes.yaml migration from `community_significance` string + to structured Significance class per Rule 53. + + **Purpose**: + Provides structured representation for significance including: + - Type classification (e.g., cultural, economic, historical) + - Description of the significance + - Supporting evidence or justification + + **Ontological Alignment**: + - **Primary** (`class_uri`): `crm:E55_Type` - CIDOC-CRM type (significance as typed concept) + - **Close**: `dcterms:description` - Dublin Core description + + **Use Cases**: + - Cultural heritage significance (UNESCO recognition) + - Community importance (identity, social cohesion) + - Economic impact (tourism, heritage economy) + - Historical continuity (ancestral links) + + **Pattern**: + ```yaml + has_or_had_significance: + - has_or_had_type: CommunitySignificance + has_or_had_description: "Belgian cultural identity, Trappist beer heritage" + - has_or_had_type: EconomicSignificance + has_or_had_description: "Tourism revenue, heritage economy" + ``` + + slots: + - has_or_had_type + - has_or_had_description + - has_or_had_label + + slot_usage: + has_or_had_type: + description: | + The type classification of this significance. + Range narrowed to SignificanceType class hierarchy. + range: SignificanceType + required: false + examples: + - value: CommunitySignificance + description: Community/cultural significance + - value: EconomicSignificance + description: Economic importance + has_or_had_description: + description: | + Detailed description of the significance. + range: string + required: true + examples: + - value: "UNESCO-recognized Trappist tradition, Belgian cultural identity" + - value: "Economic importance for regional tourism" + has_or_had_label: + description: Short label for this significance. + range: string + required: false + examples: + - value: "UNESCO Intangible Heritage" + - value: "Regional Economic Driver" + + exact_mappings: + - crm:E55_Type + close_mappings: + - dcterms:description + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: Significance applicable to all heritage custodian types. + custodian_types_primary: T + specificity_score: 0.35 + specificity_rationale: >- + Broadly applicable - significance is fundamental to heritage justification + across all domains. + template_specificity: + collection_discovery: 0.40 + general_heritage: 0.35 + migration_info: + source_slot: community_significance + migration_date: "2026-01-22" + rule: "Rule 53" + + comments: + - "Structured significance representation with type" + - "Replaces simple string-valued community_significance slot" + - "Type classification via SignificanceType hierarchy" + - "Created 2026-01-22 from community_significance migration (Rule 53)" + + examples: + - value: + has_or_had_type: CommunitySignificance + has_or_had_label: "Belgian Trappist Heritage" + has_or_had_description: "UNESCO-recognized Trappist tradition, Belgian cultural identity, Beer pilgrimage site" + description: Community/cultural significance for Trappist brewery + - value: + has_or_had_type: EconomicSignificance + has_or_had_label: "Regional Tourism" + has_or_had_description: "Whisky tourism generating 50,000 visitors/year" + description: Economic significance for Islay distillery diff --git a/schemas/20251121/linkml/modules/classes/SignificanceType.yaml b/schemas/20251121/linkml/modules/classes/SignificanceType.yaml new file mode 100644 index 0000000000..3b29428724 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/SignificanceType.yaml @@ -0,0 +1,91 @@ +# SignificanceType class (abstract base) +# Created per slot_fixes.yaml revision for: community_significance +# +# MIGRATION NOTE (2026-01-22): Created as part of community_significance migration per Rule 53. +# Abstract base class for significance type taxonomy following Rule 0b (Type/Types pattern). + +id: https://nde.nl/ontology/hc/class/SignificanceType +name: significance_type_class +title: Significance Type Class + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + skos: http://www.w3.org/2004/02/skos/core# + crm: http://www.cidoc-crm.org/cidoc-crm/ + +imports: + - linkml:types + - ../metadata + - ../slots/has_or_had_label + - ../slots/has_or_had_description + +default_prefix: hc + +classes: + SignificanceType: + class_uri: crm:E55_Type + abstract: true + description: | + Abstract base class for significance type classifications. + + **DESIGN PATTERN** (Rule 0b - Type/Types Convention): + + | File | Purpose | + |------|---------| + | `SignificanceType.yaml` (this file) | Abstract base class | + | `SignificanceTypes.yaml` | Concrete subclasses (CommunitySignificance, etc.) | + + **Purpose**: + Provides type taxonomy for categorizing different kinds of significance: + - Community/cultural significance + - Economic significance + - Historical significance + - Scientific significance + - Aesthetic significance + + **Ontological Alignment**: + - **Primary** (`class_uri`): `crm:E55_Type` - CIDOC-CRM type + - **Close**: `skos:Concept` - SKOS concept vocabulary + + slots: + - has_or_had_label + - has_or_had_description + + slot_usage: + has_or_had_label: + description: Human-readable label for this significance type. + range: string + required: true + examples: + - value: "Community Significance" + - value: "Economic Significance" + has_or_had_description: + description: Explanation of this significance type. + range: string + required: false + + exact_mappings: + - crm:E55_Type + close_mappings: + - skos:Concept + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: Significance types applicable across all heritage domains. + custodian_types_primary: T + specificity_score: 0.35 + specificity_rationale: >- + Moderately specific - significance categorization is fundamental but has + domain-specific nuances. + design_pattern: "Type/Types (Rule 0b)" + migration_info: + source_slot: community_significance + migration_date: "2026-01-22" + rule: "Rule 53" + + comments: + - "Abstract base class - see SignificanceTypes.yaml for concrete subclasses" + - "Follows Rule 0b Type/Types naming pattern" + - "Used with Significance class to classify significance types" + - "Created 2026-01-22 from community_significance migration (Rule 53)" diff --git a/schemas/20251121/linkml/modules/classes/SignificanceTypes.yaml b/schemas/20251121/linkml/modules/classes/SignificanceTypes.yaml new file mode 100644 index 0000000000..140a431ff6 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/SignificanceTypes.yaml @@ -0,0 +1,222 @@ +# SignificanceTypes class (concrete subclasses) +# Created per slot_fixes.yaml revision for: community_significance +# +# MIGRATION NOTE (2026-01-22): Created as part of community_significance migration per Rule 53. +# Contains concrete significance type subclasses per Rule 0b (Type/Types pattern). +# NOTE: revision specifies "this includes CommunitySignificance" + +id: https://nde.nl/ontology/hc/class/SignificanceTypes +name: significance_types_class +title: Significance Types Class + +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/ + +imports: + - linkml:types + - ../metadata + - ./SignificanceType # Import abstract base class + +default_prefix: hc + +classes: + # === Primary Significance Types === + + CommunitySignificance: + is_a: SignificanceType + class_uri: hc:CommunitySignificance + description: | + Significance to a community, relating to cultural identity and social cohesion. + + **Aspects**: + - Cultural identity (regional/national pride) + - Social cohesion (shared traditions, festivals) + - Historical continuity (ancestral links) + - Sense of place and belonging + + **Use Cases**: + - UNESCO Intangible Cultural Heritage listings + - Regional food/craft traditions + - Community festivals and rituals + + **Example**: + ```yaml + has_or_had_significance: + - has_or_had_type: CommunitySignificance + has_or_had_description: "Belgian Trappist brewing tradition, cultural identity" + ``` + + annotations: + specificity_score: 0.40 + specificity_rationale: Community significance central to cultural heritage justification. + + EconomicSignificance: + is_a: SignificanceType + class_uri: hc:EconomicSignificance + description: | + Economic importance and impact. + + **Aspects**: + - Tourism revenue + - Local employment + - Heritage economy contribution + - Export value + + **Use Cases**: + - Tourism impact assessment + - Heritage-based business justification + - Regional economic planning + + **Example**: + ```yaml + has_or_had_significance: + - has_or_had_type: EconomicSignificance + has_or_had_description: "Islay whisky tourism, 50,000 visitors/year" + ``` + + annotations: + specificity_score: 0.45 + specificity_rationale: Economic significance important for heritage sustainability. + + HistoricalSignificance: + is_a: SignificanceType + class_uri: hc:HistoricalSignificance + description: | + Historical importance and relevance. + + **Aspects**: + - Historical continuity + - Documentary evidence + - Period representation + - Historical events association + + **Use Cases**: + - Heritage listing justification + - Historical interpretation + - Archives and documentary heritage + + **Example**: + ```yaml + has_or_had_significance: + - has_or_had_type: HistoricalSignificance + has_or_had_description: "Founded 1253, continuous brewing tradition" + ``` + + annotations: + specificity_score: 0.40 + specificity_rationale: Historical significance fundamental to heritage assessment. + + ScientificSignificance: + is_a: SignificanceType + class_uri: hc:ScientificSignificance + description: | + Scientific or research importance. + + **Aspects**: + - Research value + - Type specimens + - Unique materials + - Scientific discovery associations + + **Use Cases**: + - Natural history collections + - Research archives + - Scientific heritage sites + + **Example**: + ```yaml + has_or_had_significance: + - has_or_had_type: ScientificSignificance + has_or_had_description: "Type specimen location, taxonomic reference" + ``` + + annotations: + specificity_score: 0.55 + specificity_rationale: Scientific significance specific to research collections. + + AestheticSignificance: + is_a: SignificanceType + class_uri: hc:AestheticSignificance + description: | + Aesthetic or artistic importance. + + **Aspects**: + - Artistic merit + - Architectural significance + - Design innovation + - Visual/sensory appeal + + **Use Cases**: + - Art collections + - Architectural heritage + - Design archives + + **Example**: + ```yaml + has_or_had_significance: + - has_or_had_type: AestheticSignificance + has_or_had_description: "Iconic Art Deco building, architectural landmark" + ``` + + annotations: + specificity_score: 0.50 + specificity_rationale: Aesthetic significance important for art and architecture. + + TerroirSignificance: + is_a: SignificanceType + class_uri: hc:TerroirSignificance + description: | + Geographic/environmental specificity and uniqueness. + + **Aspects**: + - Geographic origin + - Environmental conditions + - Place-based character + - PDO/PGI designations + + **Use Cases**: + - Food and beverage heritage (wine, cheese, spirits) + - Agricultural heritage + - Place-based crafts + + **Example**: + ```yaml + has_or_had_significance: + - has_or_had_type: TerroirSignificance + has_or_had_description: "Gouda PDO, specific to region, traditional methods" + ``` + + annotations: + specificity_score: 0.60 + specificity_rationale: Terroir significance specific to taste/scent heritage. + + DiplomaticSignificance: + is_a: SignificanceType + class_uri: hc:DiplomaticSignificance + description: | + Cultural diplomacy and international representation. + + **Aspects**: + - National heritage representation + - Soft power + - International recognition + - Cultural exchange + + **Use Cases**: + - National collections + - Cultural embassies + - International exhibitions + + **Example**: + ```yaml + has_or_had_significance: + - has_or_had_type: DiplomaticSignificance + has_or_had_description: "French parfumerie tradition, cultural diplomacy" + ``` + + annotations: + specificity_score: 0.55 + specificity_rationale: Diplomatic significance relevant for national heritage. diff --git a/schemas/20251121/linkml/modules/classes/SourceCommentCount.yaml b/schemas/20251121/linkml/modules/classes/SourceCommentCount.yaml new file mode 100644 index 0000000000..c1ba7d4fb0 --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/SourceCommentCount.yaml @@ -0,0 +1,171 @@ +# SourceCommentCount class +# Created per slot_fixes.yaml revision for: comments_fetched +# +# Represents comment count metadata from external sources +# MIGRATION NOTE (2026-01-22): Created as part of comments_fetched migration per Rule 53. + +id: https://nde.nl/ontology/hc/class/SourceCommentCount +name: source_comment_count_class +title: Source Comment Count Class + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + prov: http://www.w3.org/ns/prov# + +imports: + - linkml:types + - ../metadata + - ../slots/was_fetched_at + - ../slots/has_or_had_quantity + - ./Timestamp + - ./Quantity + +default_prefix: hc + +classes: + SourceCommentCount: + class_uri: hc:SourceCommentCount + description: | + Comment count metadata from an external source (API, web page). + + **PURPOSE**: + + Structured representation of comment retrieval metadata, tracking + how many comments were fetched versus the total available at the source. + Replaces simple integer count with rich provenance data. + + **DESIGN RATIONALE**: + + Created per slot_fixes.yaml migration from `comments_fetched` integer + to structured `was_fetched_at` + `Timestamp` + `is_or_was_part_of_total` + + `SourceCommentCount` for complete retrieval tracking. + + **USE CASES**: + + - YouTube API: Track fetched comments vs total comment count + - Social media: Partial comment retrieval with pagination + - Web scraping: Track scraped vs visible comments + + **EXAMPLE**: + + ```yaml + is_or_was_part_of_total: + fetched_count: 100 + total_count: 500 + fetch_complete: false + was_fetched_at: + has_or_had_timestamp: "2025-01-14T10:30:00Z" + ``` + + close_mappings: + - schema:InteractionCounter + - prov:Entity + + slots: + - was_fetched_at + - has_or_had_quantity + + attributes: + fetched_count: + description: | + Number of items actually fetched/retrieved. + range: integer + required: true + minimum_value: 0 + examples: + - value: 100 + description: 100 comments fetched + + total_count: + description: | + Total number of items available at the source. + May be null if source doesn't provide total. + range: integer + required: false + minimum_value: 0 + examples: + - value: 500 + description: 500 total comments at source + + fetch_complete: + description: | + Whether all available items were fetched. + True if fetched_count equals total_count. + range: boolean + required: false + ifabsent: "false" + examples: + - value: true + description: All comments fetched + - value: false + description: Partial fetch + + source_api: + description: | + API or source from which data was fetched. + range: string + required: false + examples: + - value: "youtube_data_api_v3" + description: YouTube Data API + - value: "web_scrape" + description: Web scraping + + slot_usage: + was_fetched_at: + description: | + When the comments were fetched from the source. + range: Timestamp + inlined: true + required: false + examples: + - value: + has_or_had_timestamp: "2025-01-14T10:30:00Z" + description: Fetch timestamp + + has_or_had_quantity: + description: | + Alternative structured representation of count. + Use fetched_count for simple integer. + range: Quantity + inlined: true + required: false + + examples: + - value: + fetched_count: 100 + total_count: 500 + fetch_complete: false + source_api: "youtube_data_api_v3" + was_fetched_at: + has_or_had_timestamp: "2025-01-14T10:30:00Z" + description: Partial comment fetch from YouTube API + + - value: + fetched_count: 50 + total_count: 50 + fetch_complete: true + description: Complete comment fetch + + - value: + fetched_count: 0 + description: No comments fetched (minimal) + + comments: + - Created 2026-01-22 from comments_fetched migration (Rule 53) + - Tracks fetched vs total comment counts + - Includes fetch timestamp for provenance + - Supports partial/paginated data retrieval + + see_also: + - https://schema.org/InteractionCounter + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: >- + Universal - any custodian with video/social media content. + specificity_score: "0.70" + specificity_rationale: >- + Specific to video/social media comment fetching contexts. diff --git a/schemas/20251121/linkml/modules/classes/StaffRole.yaml b/schemas/20251121/linkml/modules/classes/StaffRole.yaml index 892849e821..d6abf1d8e1 100644 --- a/schemas/20251121/linkml/modules/classes/StaffRole.yaml +++ b/schemas/20251121/linkml/modules/classes/StaffRole.yaml @@ -25,7 +25,11 @@ imports: - ./Domain # for has_or_had_domain range - ../slots/temporal_extent - ./TimeSpan - - ../slots/common_variant + # REMOVED 2026-01-22: ../slots/common_variant - migrated to has_or_had_type + VariantType + includes_or_included + VariantTypes (Rule 53) + - ../slots/has_or_had_type + - ./VariantType + - ./VariantTypes + - ../slots/includes_or_included - ../slots/requires_qualification - ../slots/role_category - ../slots/role_id @@ -164,7 +168,9 @@ classes: slots: # REMOVED 2026-01-19: circumstances_of_death - migrated to is_deceased with DeceasedStatus - is_deceased - - common_variant + # REMOVED 2026-01-22: common_variant - migrated to has_or_had_type + VariantType + VariantTypes (Rule 53) + - has_or_had_type + - includes_or_included - date_of_death - deceased - description @@ -217,6 +223,44 @@ classes: begin_of_the_begin: "2023-11-19T00:00:00Z" end_of_the_end: "2023-11-19T23:59:59Z" ``` + # MIGRATED 2026-01-22: common_variant → has_or_had_type + VariantType + VariantTypes (Rule 53) + has_or_had_type: + required: false + range: VariantType + multivalued: true + inlined: true + inlined_as_list: true + description: | + Common role title variants, synonyms, and alternative names. + MIGRATED from common_variant per slot_fixes.yaml (Rule 53, 2026-01-22). + + Uses VariantType class hierarchy for structured representation: + - AbbreviationVariant: Abbreviated forms (e.g., "Dir." for "Director") + - SynonymVariant: Alternative names (e.g., "Keeper" for "Curator") + - RegionalVariant: Regional variations (e.g., British vs American) + - HistoricalVariant: Archaic/obsolete terms + - InformalVariant: Colloquial names + - TranslationVariant: Translations in other languages + examples: + - value: + has_or_had_label: "Keeper" + has_or_had_type: SynonymVariant + has_or_had_description: "British English alternative for Curator" + description: Regional synonym for Curator + - value: + has_or_had_label: "Conservateur" + has_or_had_type: TranslationVariant + has_or_had_language: "fr" + description: French translation + includes_or_included: + required: false + range: VariantType + multivalued: true + inlined: true + inlined_as_list: true + description: | + Included variant types for this role. + Used to express containment relationships in variant hierarchies. comments: - Abstract base class - use specific subclasses (Curator, Archivist, etc.) - Represents OFFICIAL JOB TITLES, not de facto work performed diff --git a/schemas/20251121/linkml/modules/classes/StandardsOrganization.yaml b/schemas/20251121/linkml/modules/classes/StandardsOrganization.yaml index 90b1ec9707..bfc4f792c0 100644 --- a/schemas/20251121/linkml/modules/classes/StandardsOrganization.yaml +++ b/schemas/20251121/linkml/modules/classes/StandardsOrganization.yaml @@ -13,6 +13,9 @@ imports: - ../metadata - ../slots/description # REMOVED: ../slots/website - using inline attribute definition (Rule 53, migrated 2025-01-15) + # MIGRATED 2026-01-22: founded_year → is_or_was_founded_through + FoundingEvent (Rule 53) + - ../slots/is_or_was_founded_through + - ./FoundingEvent - ../slots/specificity_annotation - ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17) - ./SpecificityAnnotation @@ -121,23 +124,32 @@ classes: ' range: string multivalued: true - founded_year: - slot_uri: schema:foundingDate - description: 'Year the organization was founded. - - + # MIGRATED 2026-01-22: founded_year → is_or_was_founded_through + FoundingEvent (Rule 53) + is_or_was_founded_through: + description: | + The founding event for this standards organization. + Migrated from founded_year per slot_fixes.yaml revision. + Examples: - - ISO: 1947 - - ANSI: 1918 - - W3C: 1994 - - IETF: 1986 - - ' - range: integer + range: FoundingEvent + inlined: true + examples: + - value: + temporal_extent: + begin_of_the_begin: "1947-02-23" + end_of_the_begin: "1947-02-23" + founding_description: "ISO founded on 23 February 1947" + description: ISO founding event (exact date known) + - value: + temporal_extent: + begin_of_the_begin: "1994-01-01" + end_of_the_begin: "1994-12-31" + founding_description: "W3C founded in 1994" + description: W3C founding event (year known) headquarters_country: slot_uri: schema:location description: 'Country where headquarters is located (ISO 3166-1 alpha-2). diff --git a/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml b/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml index 6ec1678281..961f95bcff 100644 --- a/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml @@ -27,6 +27,9 @@ imports: - ./WikidataAlignment - ./WikiDataEntry # for is_or_was_related_to range (2026-01-15) - ./UniversityArchiveRecordSetType + # MIGRATED 2026-01-22: founding_date → is_or_was_founded_through + FoundingEvent (Rule 53) + - ../slots/is_or_was_founded_through + - ./FoundingEvent classes: UniversityArchive: description: A collection of historical records of a college or university. University archives (Universitätsarchive) @@ -41,6 +44,7 @@ classes: - has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17) - is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) - has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15) + - is_or_was_founded_through # was: founding_date attribute - migrated per Rule 53 (2026-01-22) exact_mappings: - wd:Q2496264 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17) close_mappings: @@ -54,13 +58,18 @@ classes: is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15) range: WikidataAlignment inlined: true + # MIGRATED 2026-01-22: founding_date → is_or_was_founded_through + FoundingEvent (Rule 53) + is_or_was_founded_through: + description: | + The founding event for this university archive. + Migrated from founding_date attribute per slot_fixes.yaml revision. + range: FoundingEvent + inlined: true attributes: parent_university: description: The university or college this archive serves range: string - founding_date: - description: When the university archive was established - range: date + # REMOVED: founding_date - migrated to is_or_was_founded_through (Rule 53, 2026-01-22) records_scope: description: Types of university records held (administrative, faculty, student, etc.) range: string diff --git a/schemas/20251121/linkml/modules/classes/VariantType.yaml b/schemas/20251121/linkml/modules/classes/VariantType.yaml new file mode 100644 index 0000000000..6f8f89215c --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/VariantType.yaml @@ -0,0 +1,95 @@ +# VariantType class (abstract base) +# Created per slot_fixes.yaml revision for: common_variant +# +# MIGRATION NOTE (2026-01-22): Created as part of common_variant migration per Rule 53. +# Abstract base class for variant type taxonomy following Rule 0b (Type/Types pattern). + +id: https://nde.nl/ontology/hc/class/VariantType +name: variant_type_class +title: Variant Type Class + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + skos: http://www.w3.org/2004/02/skos/core# + crm: http://www.cidoc-crm.org/cidoc-crm/ + +imports: + - linkml:types + - ../metadata + - ../slots/has_or_had_label + - ../slots/has_or_had_description + +default_prefix: hc + +classes: + VariantType: + class_uri: crm:E55_Type + abstract: true + description: | + Abstract base class for variant/alternative type classifications. + + **DESIGN PATTERN** (Rule 0b - Type/Types Convention): + + | File | Purpose | + |------|---------| + | `VariantType.yaml` (this file) | Abstract base class | + | `VariantTypes.yaml` | Concrete subclasses (Abbreviation, Synonym, etc.) | + + **Purpose**: + Provides type taxonomy for categorizing different kinds of variants: + - Alternative names/titles for roles + - Common abbreviations + - Synonyms in different contexts + - Regional or dialect variations + + **Use Cases**: + - Staff role title variants (e.g., "Curator" vs "Keeper" vs "Conservator") + - Organization name variants + - Technical term variations + + **Ontological Alignment**: + - **Primary** (`class_uri`): `crm:E55_Type` - CIDOC-CRM type + - **Close**: `skos:Concept` - SKOS concept vocabulary + + slots: + - has_or_had_label + - has_or_had_description + + slot_usage: + has_or_had_label: + description: Human-readable label for this variant type. + range: string + required: true + examples: + - value: "Abbreviation" + - value: "Synonym" + has_or_had_description: + description: Explanation of when to use this variant type. + range: string + required: false + + exact_mappings: + - crm:E55_Type + close_mappings: + - skos:Concept + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: Variant types applicable across all heritage domains. + custodian_types_primary: M + specificity_score: 0.35 + specificity_rationale: >- + Moderately specific - variant handling is common across naming contexts + but specific implementations vary by domain. + design_pattern: "Type/Types (Rule 0b)" + migration_info: + source_slot: common_variant + migration_date: "2026-01-22" + rule: "Rule 53" + + comments: + - "Abstract base class - see VariantTypes.yaml for concrete subclasses" + - "Follows Rule 0b Type/Types naming pattern" + - "Used with has_or_had_type to classify variant types" + - "Created 2026-01-22 from common_variant migration (Rule 53)" diff --git a/schemas/20251121/linkml/modules/classes/VariantTypes.yaml b/schemas/20251121/linkml/modules/classes/VariantTypes.yaml new file mode 100644 index 0000000000..0338136f1a --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/VariantTypes.yaml @@ -0,0 +1,162 @@ +# VariantTypes class (concrete subclasses) +# Created per slot_fixes.yaml revision for: common_variant +# +# MIGRATION NOTE (2026-01-22): Created as part of common_variant migration per Rule 53. +# Contains concrete variant type subclasses per Rule 0b (Type/Types pattern). + +id: https://nde.nl/ontology/hc/class/VariantTypes +name: variant_types_class +title: Variant Types Class + +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/ + +imports: + - linkml:types + - ../metadata + - ./VariantType # Import abstract base class + +default_prefix: hc + +classes: + # === Variant Types === + + AbbreviationVariant: + is_a: VariantType + class_uri: hc:AbbreviationVariant + description: | + Abbreviated form or acronym of a term. + + **Use Cases**: + - Role abbreviations ("Dir." for "Director") + - Department abbreviations + - Standard acronyms + + **Example**: + ```yaml + has_or_had_type: + - has_or_had_label: "Dir." + has_or_had_type: AbbreviationVariant + ``` + + annotations: + specificity_score: 0.35 + specificity_rationale: Abbreviations common across all naming contexts. + + SynonymVariant: + is_a: VariantType + class_uri: skos:altLabel + description: | + Synonym or alternative term with equivalent meaning. + + **Use Cases**: + - Role title synonyms ("Curator" / "Keeper" / "Conservator") + - Technical synonyms + - Cross-cultural equivalents + + **Example**: + ```yaml + has_or_had_type: + - has_or_had_label: "Keeper" + has_or_had_type: SynonymVariant + ``` + + exact_mappings: + - skos:altLabel + annotations: + specificity_score: 0.40 + specificity_rationale: Synonyms important for search and discovery. + + RegionalVariant: + is_a: VariantType + class_uri: hc:RegionalVariant + description: | + Regional or dialect variation of a term. + + **Use Cases**: + - British vs. American English ("Curator" vs. "Keeper") + - Dutch regional variations + - Country-specific terminology + + **Example**: + ```yaml + has_or_had_type: + - has_or_had_label: "Keeper" + has_or_had_type: RegionalVariant + has_or_had_description: "British English term" + ``` + + annotations: + specificity_score: 0.45 + specificity_rationale: Regional variants important for international heritage. + + HistoricalVariant: + is_a: VariantType + class_uri: hc:HistoricalVariant + description: | + Historical or archaic term no longer in common use. + + **Use Cases**: + - Obsolete job titles + - Historical terminology + - Legacy classifications + + **Example**: + ```yaml + has_or_had_type: + - has_or_had_label: "Assistant Keeper" + has_or_had_type: HistoricalVariant + has_or_had_description: "Victorian-era title" + ``` + + annotations: + specificity_score: 0.50 + specificity_rationale: Historical variants important for heritage documentation. + + InformalVariant: + is_a: VariantType + class_uri: hc:InformalVariant + description: | + Informal, colloquial, or casual term. + + **Use Cases**: + - Casual job references + - Colloquial terminology + - Internal nicknames + + **Example**: + ```yaml + has_or_had_type: + - has_or_had_label: "Art person" + has_or_had_type: InformalVariant + ``` + + annotations: + specificity_score: 0.40 + specificity_rationale: Informal terms help with natural language search. + + TranslationVariant: + is_a: VariantType + class_uri: hc:TranslationVariant + description: | + Translation of a term in another language. + + **Use Cases**: + - Multilingual role titles + - International terminology + - Cross-language equivalents + + **Example**: + ```yaml + has_or_had_type: + - has_or_had_label: "Conservateur" + has_or_had_type: TranslationVariant + has_or_had_language: "fr" + ``` + + annotations: + specificity_score: 0.45 + specificity_rationale: Translations essential for multilingual heritage data. diff --git a/schemas/20251121/linkml/modules/classes/VideoPost.yaml b/schemas/20251121/linkml/modules/classes/VideoPost.yaml index 7b1780967a..7e7846dc3c 100644 --- a/schemas/20251121/linkml/modules/classes/VideoPost.yaml +++ b/schemas/20251121/linkml/modules/classes/VideoPost.yaml @@ -12,28 +12,38 @@ imports: # REMOVED 2026-01-18: ../slots/comment_author - migrated to has_or_had_author + Author (Rule 53) - ../slots/has_or_had_author - ./Author - - ../slots/comment_author_channel_id + # REMOVED 2026-01-22: ../slots/comment_author_channel_id - migrated to has_or_had_identifier + DigitalPlatformUserIdentifier (Rule 53) + - ./DigitalPlatformUserIdentifier # REMOVED 2026-01-18: ../slots/comment_id - migrated to has_or_had_identifier + Identifier (Rule 53) # REMOVED 2026-01-18: ../slots/comment_count - migrated to has_or_had_quantity + Quantity (Rule 53) - - ../slots/comment_like_count + # REMOVED 2026-01-22: ../slots/comment_like_count - migrated to is_or_was_appreciated + AppreciationEvent (Rule 53) + - ../slots/is_or_was_appreciated + - ./AppreciationEvent # REMOVED 2026-01-18: ../slots/comment_published_at - migrated to temporal_extent + TimeSpan (Rule 53) - ../slots/temporal_extent - ./TimeSpan - ../slots/has_or_had_comment_reply - - ../slots/comment_reply_count + # REMOVED 2026-01-22: ../slots/comment_reply_count - migrated to has_or_had_reply + CommentReply (Rule 53) + - ../slots/has_or_had_reply + - ./CommentReply # REMOVED 2026-01-18: ../slots/comment_text - migrated to has_or_had_content + Content (Rule 53) - ../slots/has_or_had_content - ./Content # REMOVED 2026-01-18: ../slots/comment_updated_at - migrated to was_last_updated_at + Timestamp (Rule 53) - ../slots/was_last_updated_at - ./Timestamp - - ../slots/comments_fetched + # REMOVED 2026-01-22: ../slots/comments_fetched - migrated to was_fetched_at + is_or_was_part_of_total + SourceCommentCount (Rule 53) + - ../slots/was_fetched_at + - ../slots/is_or_was_part_of_total + - ./SourceCommentCount - ../slots/default_audio_language - ../slots/default_language - ../slots/dislike_count - ../slots/duration - ../slots/favorite_count - - ../slots/frame_rate + # MIGRATED 2026-01-22: frame_rate → has_or_had_quantity + Quantity + has_or_had_unit + Unit (Rule 53) + - ../slots/has_or_had_unit + - ./Unit - ../slots/is_embeddable - ../slots/is_licensed_content - ../slots/is_made_for_kid @@ -215,14 +225,16 @@ classes: - has_available_caption_language - caption_available # REMOVED 2026-01-18: comment_count - migrated to has_or_had_quantity + Quantity (Rule 53) - - comments_fetched + # REMOVED 2026-01-22: comments_fetched - migrated to was_fetched_at + is_or_was_part_of_total + SourceCommentCount (Rule 53) + - was_fetched_at + - is_or_was_part_of_total - default_audio_language - default_language - definition - dislike_count - duration - favorite_count - - frame_rate + # REMOVED 2026-01-22: frame_rate - migrated to has_or_had_quantity + Quantity + Unit (Rule 53) - is_embeddable - is_licensed_content - is_made_for_kid @@ -260,12 +272,13 @@ classes: description: Standard widescreen - value: '9:16' description: Vertical format for Shorts/Reels - frame_rate: - range: float - required: false - examples: - - value: 30.0 - description: 30 frames per second + # MIGRATED 2026-01-22: frame_rate → has_or_had_quantity + Quantity + has_or_had_unit + Unit (Rule 53) + # frame_rate: + # range: float + # required: false + # examples: + # - value: 30.0 + # description: 30 frames per second caption_available: range: boolean required: false @@ -302,12 +315,13 @@ classes: multivalued: true description: | Quantified metrics for video content. RULE 53: Replaces deprecated - view_count and comment_count with structured Quantity class supporting - measurement unit and temporal extent for point-in-time observation. + view_count, comment_count, and frame_rate with structured Quantity class + supporting measurement unit and temporal extent for point-in-time observation. MIGRATED SLOTS: - view_count → Quantity with has_or_had_measurement_unit: VIEW (2026-01-15) - comment_count → Quantity with has_or_had_measurement_unit: COMMENT (2026-01-18) + - frame_rate → Quantity with has_or_had_unit: "frames per second" (2026-01-22) examples: - value: quantity_value: 132 @@ -325,6 +339,21 @@ classes: temporal_extent: begin_of_the_begin: "2025-12-01T23:16:22Z" description: 42 comments at observation time (migrated from comment_count) + - value: + quantity_value: 30.0 + quantity_type: FRAME_RATE + has_or_had_unit: + unit_value: "frames per second" + unit_uri: "qudt:FPS" + description: 30 frames per second (migrated from frame_rate, 2026-01-22) + - value: + quantity_value: 24.0 + quantity_type: FRAME_RATE + has_or_had_unit: + unit_value: "fps" + has_or_had_label: + - label_text: "frames per second" + description: Cinema standard 24fps like_count: range: integer required: false @@ -389,13 +418,42 @@ classes: is_made_for_kid: range: boolean required: false - comments_fetched: - range: integer + # MIGRATED 2026-01-22: comments_fetched → was_fetched_at + is_or_was_part_of_total + SourceCommentCount (Rule 53) + # comments_fetched: + # range: integer + # required: false + # minimum_value: 0 + # examples: + # - value: 0 + # description: No comments fetched + was_fetched_at: + description: | + MIGRATED from comments_fetched per slot_fixes.yaml (Rule 53, 2026-01-22). + Timestamp when comments were fetched from the video platform API. + range: Timestamp + inlined: true required: false - minimum_value: 0 examples: - - value: 0 - description: No comments fetched + - value: + has_or_had_timestamp: "2025-12-01T23:16:22Z" + description: Comments fetched at observation time + is_or_was_part_of_total: + description: | + MIGRATED from comments_fetched per slot_fixes.yaml (Rule 53, 2026-01-22). + Structured count metadata showing fetched vs total comments. + range: SourceCommentCount + inlined: true + required: false + examples: + - value: + fetched_count: 100 + total_count: 500 + fetch_complete: false + source_api: "youtube_data_api_v3" + description: 100 of 500 comments fetched from YouTube API + - value: + fetched_count: 0 + description: No comments fetched (minimal) has_or_had_comment: # was: video_comment - migrated per Rule 53 (2025-01-15) range: VideoComment multivalued: true @@ -430,14 +488,17 @@ classes: slots: # MIGRATED 2026-01-18: comment_author → has_or_had_author + Author (Rule 53) - has_or_had_author - - comment_author_channel_id + # MIGRATED 2026-01-22: comment_author_channel_id → has_or_had_identifier + DigitalPlatformUserIdentifier (Rule 53) + # NOTE: has_or_had_identifier already present - used for both comment_id and comment_author_channel_id # REMOVED 2026-01-18: comment_id - migrated to has_or_had_identifier + Identifier (Rule 53) - has_or_had_identifier - - comment_like_count + # MIGRATED 2026-01-22: comment_like_count → is_or_was_appreciated + AppreciationEvent (Rule 53) + - is_or_was_appreciated # REMOVED 2026-01-18: comment_published_at - migrated to temporal_extent + TimeSpan (Rule 53) - temporal_extent - has_or_had_comment_reply - - comment_reply_count + # MIGRATED 2026-01-22: comment_reply_count → has_or_had_reply + CommentReply (Rule 53) + - has_or_had_reply # REMOVED 2026-01-18: comment_text - migrated to has_or_had_content + Content (Rule 53) - has_or_had_content # REMOVED 2026-01-18: comment_updated_at - migrated to was_last_updated_at + Timestamp (Rule 53) @@ -459,29 +520,40 @@ classes: identifier_scheme: youtube_comment_id identifier_value: "UgzK1234abcdefgh" description: YouTube comment identifier - comment_author: - range: string - required: true + # REMOVED 2026-01-18: comment_author - migrated to has_or_had_author + Author (Rule 53) # MIGRATED 2026-01-18: comment_author → has_or_had_author + Author (Rule 53) + # MIGRATED 2026-01-22: comment_author_channel_id is now captured via Author.has_or_had_identifier (Rule 53) has_or_had_author: description: | MIGRATED from comment_author per slot_fixes.yaml (Rule 53, 2026-01-18). - Display name of comment author. + UPDATED 2026-01-22: Now also captures comment_author_channel_id via nested identifier. + + Display name of comment author plus optional platform user identifier. Uses Author class for structured author representation. + Platform channel ID captured via has_or_had_identifier → DigitalPlatformUserIdentifier. range: Author inlined: true required: true examples: - value: has_or_had_name: "Visitor123" - description: Comment author display name + description: Comment author display name only - value: has_or_had_name: "MuseumFan2024" - has_or_had_identifier: "https://youtube.com/channel/UC123" - description: Comment author with channel link - comment_author_channel_id: - range: string - required: false + has_or_had_identifier: + - identifier_scheme: youtube_channel_id + identifier_value: "UCsT0YIqwnpJCM-mx7-gSA4Q" + platform_type: "youtube" + platform_user_id: "UCsT0YIqwnpJCM-mx7-gSA4Q" + description: Comment author with YouTube channel ID (migrated from comment_author_channel_id) + # MIGRATED 2026-01-22: comment_author_channel_id → has_or_had_identifier + DigitalPlatformUserIdentifier (Rule 53) + # NOTE: has_or_had_identifier slot_usage updated above to handle BOTH comment_id AND comment_author_channel_id + # The Author class already has has_or_had_identifier slot, so channel_id can be linked via: + # has_or_had_author: + # has_or_had_identifier: + # - identifier_scheme: youtube_channel_id + # identifier_value: "UC1234..." + # platform_type: "youtube" # MIGRATED 2026-01-18: comment_text → has_or_had_content + Content (Rule 53/56) has_or_had_content: description: | @@ -522,14 +594,53 @@ classes: has_or_had_timestamp: "2025-01-15T10:30:00Z" has_or_had_precision: second description: Comment last updated timestamp - comment_like_count: - range: integer + # MIGRATED 2026-01-22: comment_like_count → is_or_was_appreciated + AppreciationEvent (Rule 53) + is_or_was_appreciated: + description: | + MIGRATED from comment_like_count per slot_fixes.yaml (Rule 53, 2026-01-22). + Appreciation metrics (likes) for this comment. + Uses AppreciationEvent class for structured representation. + range: AppreciationEvent + inlined: true + inlined_as_list: true required: false - minimum_value: 0 - comment_reply_count: - range: integer + examples: + - value: + appreciation_type: "like" + appreciation_count: 42 + description: Comment with 42 likes + - value: + appreciation_type: "like" + has_or_had_quantity: + numeric_value: 100 + has_or_had_unit: + unit_label: "likes" + description: Structured like count with Quantity + # MIGRATED 2026-01-22: comment_reply_count → has_or_had_reply + CommentReply (Rule 53) + has_or_had_reply: + description: | + MIGRATED from comment_reply_count per slot_fixes.yaml (Rule 53, 2026-01-22). + Reply metrics for this comment. + Uses CommentReply class for structured representation. + range: CommentReply + inlined: true + inlined_as_list: true required: false - minimum_value: 0 + examples: + - value: + reply_count: 5 + reply_type: "comment_reply" + description: Comment with 5 replies + - value: + reply_count: 0 + description: Comment with no replies + - value: + reply_count: 12 + has_or_had_quantity: + numeric_value: 12 + has_or_had_unit: + unit_label: "replies" + description: Structured reply count with Quantity has_or_had_comment_reply: range: VideoComment multivalued: true diff --git a/schemas/20251121/linkml/modules/classes/WebPage.yaml b/schemas/20251121/linkml/modules/classes/WebPage.yaml new file mode 100644 index 0000000000..3bc10babec --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/WebPage.yaml @@ -0,0 +1,119 @@ +# WebPage class +# Represents a web page with URL and metadata +# +# Created per slot_fixes.yaml migration for: collection_web_address +# Creation date: 2026-01-22 +# +# Rule 53 (No Bespoke Slots): collection_web_address → has_or_had_content + Collection + has_or_had_web_page + WebPage + has_or_had_url + URL + +id: https://nde.nl/ontology/hc/class/WebPage +name: WebPage +title: Web Page + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + dcterms: http://purl.org/dc/terms/ + +default_prefix: hc + +imports: + - linkml:types + - ../slots/has_or_had_url + - ./URL + - ../slots/has_or_had_label + - ./Label + - ../slots/has_or_had_description + - ./Description + +classes: + WebPage: + class_uri: schema:WebPage + description: | + Represents a web page that provides access to heritage content. + + **RULE 53 MIGRATION**: + Replaces the simple `collection_web_address` URI slot with a structured model: + - `has_or_had_web_page` → WebPage (this class) + - `has_or_had_url` → URL (the actual web address) + + **USAGE**: + ```yaml + has_or_had_web_page: + - has_or_had_label: + label_value: "Rijksstudio Collections" + has_or_had_url: + - has_or_had_url: "https://www.rijksmuseum.nl/nl/rijksstudio" + has_or_had_type: collection_access + ``` + + **Ontological Alignment**: + - **Primary** (`class_uri`): `schema:WebPage` - Schema.org WebPage + - **Close**: `dcterms:BibliographicResource` - DC bibliographic resource + + **Use Cases**: + - Collection access pages (digital collection browse interfaces) + - Institutional portals (main website landing pages) + - API documentation pages + - Europeana collection pages + + exact_mappings: + - schema:WebPage + + close_mappings: + - dcterms:BibliographicResource + + slots: + - has_or_had_url + - has_or_had_label + - has_or_had_description + + slot_usage: + has_or_had_url: + description: | + The URL(s) of this web page. + May include primary URL and alternate URLs (e.g., different languages). + range: URL + multivalued: true + inlined: true + inlined_as_list: true + required: true + has_or_had_label: + description: | + The name/title of this web page. + range: Label + inlined: true + required: false + has_or_had_description: + description: | + Description of the web page content. + range: Description + inlined: true + required: false + + annotations: + specificity_score: "0.30" + specificity_rationale: "Moderately generic - applies to web-accessible heritage resources." + template_specificity: '{"archive_search": 0.35, "museum_search": 0.35, "library_search": 0.35, "collection_discovery": 0.60, "person_research": 0.15, "location_browse": 0.20, "identifier_lookup": 0.25, "organizational_change": 0.10, "digital_platform": 0.65, "general_heritage": 0.30}' + + examples: + - value: + has_or_had_label: + label_value: "Rijksstudio Collections" + has_or_had_url: + - has_or_had_url: "https://www.rijksmuseum.nl/nl/rijksstudio" + has_or_had_type: collection_access + description: Rijksstudio collection access page + + - value: + has_or_had_label: + label_value: "Europeana Collections Browse" + has_or_had_url: + - has_or_had_url: "https://www.europeana.eu/en/collections" + has_or_had_type: collection_access + description: Europeana collections browse page + + comments: + - "Created per slot_fixes.yaml migration (2026-01-22)" + - "RULE 53: Replaces collection_web_address URI slot with structured model" diff --git a/schemas/20251121/linkml/modules/classes/YoutubeVideo.yaml b/schemas/20251121/linkml/modules/classes/YoutubeVideo.yaml index 07f2ced656..df24e84da6 100644 --- a/schemas/20251121/linkml/modules/classes/YoutubeVideo.yaml +++ b/schemas/20251121/linkml/modules/classes/YoutubeVideo.yaml @@ -17,6 +17,8 @@ imports: - linkml:types - ./Tag # for tag migration per Rule 53/56 (2026-01-16) - ./Quantity # for comment_count migration per Rule 53 (2026-01-18) + - ./SourceCommentCount # for comments_fetched migration per Rule 53 (2026-01-22) + - ./Timestamp # for comments_fetched migration per Rule 53 (2026-01-22) - ./YoutubeComment - ./YoutubeTranscript default_range: string @@ -104,9 +106,22 @@ classes: multivalued: true inlined_as_list: true description: Comments on the video - comments_fetched: - range: integer - description: Number of comments fetched + # MIGRATED 2026-01-22: comments_fetched → was_fetched_at + is_or_was_part_of_total + SourceCommentCount (Rule 53) + # comments_fetched: + # range: integer + # description: Number of comments fetched + was_fetched_at: + range: Timestamp + inlined: true + description: | + MIGRATED from comments_fetched per slot_fixes.yaml (Rule 53, 2026-01-22). + Timestamp when comments were fetched from YouTube API. + is_or_was_part_of_total: + range: SourceCommentCount + inlined: true + description: | + MIGRATED from comments_fetched per slot_fixes.yaml (Rule 53, 2026-01-22). + Structured count metadata showing fetched vs total comments. transcript: range: YoutubeTranscript description: Video transcript data diff --git a/schemas/20251121/linkml/modules/slots/collection_locality_text.yaml b/schemas/20251121/linkml/modules/slots/archive/collection_locality_text_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/collection_locality_text.yaml rename to schemas/20251121/linkml/modules/slots/archive/collection_locality_text_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/collection_location.yaml b/schemas/20251121/linkml/modules/slots/archive/collection_location_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/collection_location.yaml rename to schemas/20251121/linkml/modules/slots/archive/collection_location_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/collection_purpose.yaml b/schemas/20251121/linkml/modules/slots/archive/collection_purpose_archived_20260119.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/collection_purpose.yaml rename to schemas/20251121/linkml/modules/slots/archive/collection_purpose_archived_20260119.yaml diff --git a/schemas/20251121/linkml/modules/slots/collection_type.yaml b/schemas/20251121/linkml/modules/slots/archive/collection_type_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/collection_type.yaml rename to schemas/20251121/linkml/modules/slots/archive/collection_type_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/collection_web_address.yaml b/schemas/20251121/linkml/modules/slots/archive/collection_web_address_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/collection_web_address.yaml rename to schemas/20251121/linkml/modules/slots/archive/collection_web_address_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/collector.yaml b/schemas/20251121/linkml/modules/slots/archive/collector_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/collector.yaml rename to schemas/20251121/linkml/modules/slots/archive/collector_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/colonial.yaml b/schemas/20251121/linkml/modules/slots/archive/colonial_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/colonial.yaml rename to schemas/20251121/linkml/modules/slots/archive/colonial_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/comment_author_channel_id.yaml b/schemas/20251121/linkml/modules/slots/archive/comment_author_channel_id_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/comment_author_channel_id.yaml rename to schemas/20251121/linkml/modules/slots/archive/comment_author_channel_id_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/comment_like_count.yaml b/schemas/20251121/linkml/modules/slots/archive/comment_like_count_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/comment_like_count.yaml rename to schemas/20251121/linkml/modules/slots/archive/comment_like_count_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/comment_reply_count.yaml b/schemas/20251121/linkml/modules/slots/archive/comment_reply_count_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/comment_reply_count.yaml rename to schemas/20251121/linkml/modules/slots/archive/comment_reply_count_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/comments_fetched.yaml b/schemas/20251121/linkml/modules/slots/archive/comments_fetched_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/comments_fetched.yaml rename to schemas/20251121/linkml/modules/slots/archive/comments_fetched_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/commercial_custodian_subtype.yaml b/schemas/20251121/linkml/modules/slots/archive/commercial_custodian_subtype_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/commercial_custodian_subtype.yaml rename to schemas/20251121/linkml/modules/slots/archive/commercial_custodian_subtype_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/commercial_operation.yaml b/schemas/20251121/linkml/modules/slots/archive/commercial_operation_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/commercial_operation.yaml rename to schemas/20251121/linkml/modules/slots/archive/commercial_operation_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/commission_rate.yaml b/schemas/20251121/linkml/modules/slots/archive/commission_rate_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/commission_rate.yaml rename to schemas/20251121/linkml/modules/slots/archive/commission_rate_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/common_name.yaml b/schemas/20251121/linkml/modules/slots/archive/common_name_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/common_name.yaml rename to schemas/20251121/linkml/modules/slots/archive/common_name_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/common_name_language.yaml b/schemas/20251121/linkml/modules/slots/archive/common_name_language_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/common_name_language.yaml rename to schemas/20251121/linkml/modules/slots/archive/common_name_language_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/common_variant.yaml b/schemas/20251121/linkml/modules/slots/archive/common_variant_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/common_variant.yaml rename to schemas/20251121/linkml/modules/slots/archive/common_variant_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/format.yaml b/schemas/20251121/linkml/modules/slots/archive/format_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/format.yaml rename to schemas/20251121/linkml/modules/slots/archive/format_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/founded_year.yaml b/schemas/20251121/linkml/modules/slots/archive/founded_year_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/founded_year.yaml rename to schemas/20251121/linkml/modules/slots/archive/founded_year_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/founding_date.yaml b/schemas/20251121/linkml/modules/slots/archive/founding_date_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/founding_date.yaml rename to schemas/20251121/linkml/modules/slots/archive/founding_date_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/founding_date_diocese.yaml b/schemas/20251121/linkml/modules/slots/archive/founding_date_diocese_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/founding_date_diocese.yaml rename to schemas/20251121/linkml/modules/slots/archive/founding_date_diocese_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/fr.yaml b/schemas/20251121/linkml/modules/slots/archive/fr_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/fr.yaml rename to schemas/20251121/linkml/modules/slots/archive/fr_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/frame_rate.yaml b/schemas/20251121/linkml/modules/slots/archive/frame_rate_archived_20260122.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/frame_rate.yaml rename to schemas/20251121/linkml/modules/slots/archive/frame_rate_archived_20260122.yaml diff --git a/schemas/20251121/linkml/modules/slots/collects_or_collected.yaml b/schemas/20251121/linkml/modules/slots/collects_or_collected.yaml new file mode 100644 index 0000000000..a5c00e6a30 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/collects_or_collected.yaml @@ -0,0 +1,86 @@ +# collects_or_collected slot +# Generic slot for collecting relationships following RiC-O temporal naming convention. +# +# MIGRATION NOTE (2026-01-19): +# Created as part of collection_purpose migration per slot_fixes.yaml (Rule 53). +# +# Semantic intent: Links an entity to what it collects or collected. + +id: https://nde.nl/ontology/hc/slot/collects_or_collected +name: collects_or_collected_slot +title: Collects Or Collected Slot + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + crm: http://www.cidoc-crm.org/cidoc-crm/ + rico: https://www.ica.org/standards/RiC/ontology# + +imports: + - linkml:types + +default_prefix: hc + +slots: + collects_or_collected: + slot_uri: rico:hasOrHadHolder + description: >- + Links a custodian to what it collects or collected. + + **TEMPORAL SEMANTICS** (RiC-O style): + The "collects_or_collected" naming follows RiC-O convention indicating that + collecting activities may change over time: + - Active collecting programs + - Historical collecting focus that has changed + - Materials previously collected but now deaccessioned + + **USE CASES**: + - Commercial organizations: what they collect for heritage purposes + - Museums: their collecting scope and purpose + - Archives: types of records they acquire + + **REPLACES**: + - `collection_purpose` (why commercial organization maintains collections) + + **EXAMPLE**: + ```yaml + collects_or_collected: + - collection_type: "brand_heritage" + has_or_had_rationale: + rationale_text: "Brand heritage communication" + rationale_category: "marketing" + ``` + + range: uriorcurie + multivalued: true + inlined: true + inlined_as_list: true + + exact_mappings: + - rico:hasOrHadHolder + + close_mappings: + - crm:P109_has_current_or_former_curator + - schema:owns + + related_mappings: + - crm:P50_has_current_keeper + + annotations: + custodian_types: '["C", "M", "A", "L"]' + custodian_types_rationale: >- + Primarily for Corporations (C), Museums (M), Archives (A), and Libraries (L) + that actively collect materials. + custodian_types_primary: "C" + specificity_score: "0.45" + specificity_rationale: >- + Moderate specificity - applies to custodians with collecting programs. + + comments: + - Created from slot_fixes.yaml migration (2026-01-19) + - Part of collection_purpose migration + - Range is uriorcurie to allow class narrowing via slot_usage + + see_also: + - https://www.ica.org/standards/RiC/ontology#hasOrHadHolder diff --git a/schemas/20251121/linkml/modules/slots/has_or_had_language.yaml b/schemas/20251121/linkml/modules/slots/has_or_had_language.yaml index 8ba782128e..3afaa48b6f 100644 --- a/schemas/20251121/linkml/modules/slots/has_or_had_language.yaml +++ b/schemas/20251121/linkml/modules/slots/has_or_had_language.yaml @@ -1,22 +1,59 @@ id: https://nde.nl/ontology/hc/slot/has_or_had_language name: has_or_had_language_slot title: Languages Slot +# Updated 2026-01-22: Extended to support both LanguageProficiency and Language classes +# Enables migration of language-specific text slots (fr, de, en, nl) per slot_fixes.yaml prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ + dct: http://purl.org/dc/terms/ imports: - linkml:types - ../classes/LanguageProficiency + - ../classes/Language default_prefix: hc slots: has_or_had_language: - description: 'Parsed language proficiency entries. - - Array of LanguageProficiency objects with language name, code, level. - - Use this when storing processed/structured data. - - ' - range: LanguageProficiency + description: | + Language information for an entity. + + **Use Cases**: + 1. **Language Proficiency**: When tracking language skills (e.g., person profiles) + - Use LanguageProficiency class with language_name, code, and level + 2. **Language-Tagged Text**: When storing multilingual text content + - Use Language class with iso_639_1, language_name, and text_content + + **Migration Support**: + This slot replaces language-specific text slots (fr, de, en, nl) with a + unified pattern per slot_fixes.yaml revisions: + - `fr` (French text) → has_or_had_language with Language(iso_639_1="fr") + - `de` (German text) → has_or_had_language with Language(iso_639_1="de") + - `en` (English text) → has_or_had_language with Language(iso_639_1="en") + - `nl` (Dutch text) → has_or_had_language with Language(iso_639_1="nl") + + **Example - Language-Tagged Text**: + ```yaml + has_or_had_language: + - iso_639_1: "fr" + language_name: "French" + text_content: "archives universitaires" + - iso_639_1: "en" + language_name: "English" + text_content: "university archives" + ``` + + **Example - Language Proficiency**: + ```yaml + has_or_had_language: + - language_name: "French" + language_code: "fr" + proficiency_level: "fluent" + ``` + range: Any + any_of: + - range: LanguageProficiency + - range: Language multivalued: true - slot_uri: hc:languages + inlined: true + inlined_as_list: true + slot_uri: dct:language diff --git a/schemas/20251121/linkml/modules/slots/has_or_had_objective.yaml b/schemas/20251121/linkml/modules/slots/has_or_had_objective.yaml new file mode 100644 index 0000000000..61935dd7be --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/has_or_had_objective.yaml @@ -0,0 +1,79 @@ +# has_or_had_objective slot +# RiC-O temporal naming convention (Rule 39) +# +# Created per slot_fixes.yaml revision for: commercial_operation +# Migration date: 2026-01-22 +# Rule reference: Rule 53, Rule 39 + +id: https://nde.nl/ontology/hc/slot/has_or_had_objective +name: has_or_had_objective + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + org: http://www.w3.org/ns/org# + skos: http://www.w3.org/2004/02/skos/core# + +imports: + - linkml:types + +default_prefix: hc + +slots: + has_or_had_objective: + slot_uri: org:purpose + description: | + The objective or purpose of an organization's operations. + + **PURPOSE**: + + Links an organization to its operational objectives (profit-making, + nonprofit, educational, cultural preservation, etc.). + + **RiC-O NAMING** (Rule 39): + + Uses "has_or_had_" prefix indicating temporal relationship - + the objective may change over time. + + **ONTOLOGY ALIGNMENT**: + + | Ontology | Property | Usage | + |----------|----------|-------| + | **W3C Org** | `org:purpose` | Organizational purpose | + | **Schema.org** | `schema:businessFunction` | Business function | + | **SKOS** | `skos:scopeNote` | Scope description | + + **MIGRATION NOTE**: + + Created from migration of `commercial_operation` slot per slot_fixes.yaml. + Replaces boolean with structured Profit class for richer modeling. + + range: Profit + inlined: true + + exact_mappings: + - org:purpose + + close_mappings: + - schema:businessFunction + + examples: + - value: + objective_type: "for-profit" + is_commercial: true + description: Commercial gallery selling artworks + - value: + objective_type: "nonprofit" + is_commercial: false + description: Kunsthalle or non-profit exhibition space + + comments: + - Created 2026-01-22 from commercial_operation migration (Rule 53) + - Uses RiC-O temporal naming convention (Rule 39) + - Links organization to operational objectives + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: >- + Universal - any custodian type may have operational objectives. diff --git a/schemas/20251121/linkml/modules/slots/has_or_had_percentage.yaml b/schemas/20251121/linkml/modules/slots/has_or_had_percentage.yaml new file mode 100644 index 0000000000..cd831bbea4 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/has_or_had_percentage.yaml @@ -0,0 +1,68 @@ +# has_or_had_percentage slot +# RiC-O temporal naming convention (Rule 39) +# +# Created per slot_fixes.yaml revision for: commission_rate +# Migration date: 2026-01-22 +# Rule reference: Rule 53, Rule 39 + +id: https://nde.nl/ontology/hc/slot/has_or_had_percentage +name: has_or_had_percentage + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + +imports: + - linkml:types + +default_prefix: hc + +slots: + has_or_had_percentage: + slot_uri: schema:valueReference + description: | + A percentage value associated with an entity. + + **PURPOSE**: + + Links entities to structured percentage representations. + Used for commission rates, discounts, completion percentages, etc. + + **RiC-O NAMING** (Rule 39): + + Uses "has_or_had_" prefix indicating temporal relationship - + percentages may change over time. + + **MIGRATION NOTE**: + + Created from migration of `commission_rate` slot per slot_fixes.yaml. + Provides structured percentage via Percentage class. + + range: Percentage + inlined: true + + close_mappings: + - schema:valueReference + + examples: + - value: + percentage_value: 50 + percentage_display: "50%" + description: 50 percent + - value: + percentage_value: 15 + percentage_min: 10 + percentage_max: 20 + percentage_display: "10-20%" + description: Variable percentage range + + comments: + - Created 2026-01-22 from commission_rate migration (Rule 53) + - Uses RiC-O temporal naming convention (Rule 39) + - Links entities to percentage values + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: >- + Universal - percentages apply across many contexts. diff --git a/schemas/20251121/linkml/modules/slots/has_or_had_place.yaml b/schemas/20251121/linkml/modules/slots/has_or_had_place.yaml new file mode 100644 index 0000000000..71bdcac423 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/has_or_had_place.yaml @@ -0,0 +1,84 @@ +# has_or_had_place slot +# Generic slot for place relationships following RiC-O temporal naming convention. +# +# MIGRATION NOTE (2026-01-19): +# Created as part of collection_location migration per slot_fixes.yaml (Rule 53). +# +# Semantic intent: Links an entity to its associated place (collection site, event venue, etc.) + +id: https://nde.nl/ontology/hc/slot/has_or_had_place +name: has_or_had_place_slot +title: Has Or Had Place Slot + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + crm: http://www.cidoc-crm.org/cidoc-crm/ + prov: http://www.w3.org/ns/prov# + +imports: + - linkml:types + +default_prefix: hc + +slots: + has_or_had_place: + slot_uri: schema:location + description: >- + Links an entity to its associated place. + + **TEMPORAL SEMANTICS** (RiC-O style): + The "has_or_had" naming follows RiC-O convention indicating that + place associations may change over time: + - Collection events occur at specific locations + - Institutions may relocate + - Historical associations preserved + + **USE CASES**: + - Collection events: where specimen was collected + - Events: where event took place + - Activities: location of activity + + **REPLACES**: + - `collection_location` (structured location for specimens) + + **EXAMPLE**: + ```yaml + has_or_had_place: + place_name: "Mauritius" + country: "MU" + latitude: -20.2 + longitude: 57.5 + ``` + + range: uriorcurie + inlined: true + + exact_mappings: + - schema:location + + close_mappings: + - prov:atLocation + - crm:P7_took_place_at + + related_mappings: + - crm:P161_has_spatial_projection + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: >- + Generic place relationship applicable across all custodian types. + custodian_types_primary: "*" + specificity_score: "0.20" + specificity_rationale: >- + Very low specificity - universal place association concept. + + comments: + - Created from slot_fixes.yaml migration (2026-01-19) + - Part of collection_location migration + - Range is uriorcurie to allow class narrowing via slot_usage + + see_also: + - http://schema.org/location + - https://dwc.tdwg.org/terms/#dwc:locality diff --git a/schemas/20251121/linkml/modules/slots/has_or_had_reply.yaml b/schemas/20251121/linkml/modules/slots/has_or_had_reply.yaml new file mode 100644 index 0000000000..17d89b7a80 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/has_or_had_reply.yaml @@ -0,0 +1,79 @@ +# has_or_had_reply slot +# RiC-O temporal naming convention (Rule 39) +# +# Created per slot_fixes.yaml revision for: comment_reply_count +# Migration date: 2026-01-22 +# Rule reference: Rule 53, Rule 39 + +id: https://nde.nl/ontology/hc/slot/has_or_had_reply +name: has_or_had_reply + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + as: https://www.w3.org/ns/activitystreams# + sioc: http://rdfs.org/sioc/ns# + +imports: + - linkml:types + +default_prefix: hc + +slots: + has_or_had_reply: + slot_uri: sioc:has_reply + description: | + Reply or response associated with content (comments, posts, messages). + + **PURPOSE**: + + Captures reply/response relationships and metrics for threaded discussions + using CommentReply class for structured representation. + + **RiC-O NAMING** (Rule 39): + + Uses "has_or_had_" prefix to indicate temporal relationship - the content + has replies currently or had replies in the past (e.g., deleted replies). + + **ONTOLOGY ALIGNMENT**: + + | Ontology | Property | Usage | + |----------|----------|-------| + | **SIOC** | `sioc:has_reply` | Discussion reply relationship | + | **Activity Streams** | `as:inReplyTo` (inverse) | Social media replies | + | **Schema.org** | `schema:comment` | Generic comment relationship | + + **MIGRATION NOTE**: + + Created from migration of `comment_reply_count` slot per slot_fixes.yaml. + Replaces simple integer counts with structured reply data. + + range: uriorcurie + multivalued: true + + exact_mappings: + - sioc:has_reply + + close_mappings: + - schema:comment + + related_mappings: + - as:inReplyTo + + examples: + - value: https://nde.nl/ontology/hc/reply/comment-123-replies + description: Reply collection for a comment + + comments: + - Created 2026-01-22 from comment_reply_count migration (Rule 53) + - Uses RiC-O temporal naming convention (Rule 39) + - Supports structured reply metrics + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: >- + Universal - any custodian with discussion content may track replies. + specificity_score: 0.55 + specificity_rationale: >- + Moderately general - applies to any threaded discussion context. diff --git a/schemas/20251121/linkml/modules/slots/has_or_had_significance.yaml b/schemas/20251121/linkml/modules/slots/has_or_had_significance.yaml new file mode 100644 index 0000000000..c14f6f51c5 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/has_or_had_significance.yaml @@ -0,0 +1,87 @@ +# has_or_had_significance slot +# Created per slot_fixes.yaml revision for: community_significance +# +# MIGRATION NOTE (2026-01-22): Created as part of community_significance migration per Rule 53. +# Generic slot for significance/importance relationships following RiC-O naming convention. + +id: https://nde.nl/ontology/hc/slot/has_or_had_significance +name: has_or_had_significance_slot +title: Has Or Had Significance Slot + +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/ + schema: http://schema.org/ + +imports: + - linkml:types + +default_prefix: hc + +slots: + has_or_had_significance: + slot_uri: crm:P17i_was_motivation_for + description: | + Significance or importance of an entity to a community, culture, or domain. + + **Temporal Semantics** (RiC-O Pattern): + The "hasOrHad" naming follows RiC-O convention indicating this relationship + may be historical - significance can change over time. + + **Ontological Alignment**: + - **Primary** (`slot_uri`): `crm:P17i_was_motivation_for` - CIDOC-CRM motivation + - **Close**: `dcterms:description` - Dublin Core description + - **Related**: `schema:significance` - Schema.org (informal) + + **Use Cases**: + - Cultural heritage significance + - Community importance + - Historical relevance + - Economic/social impact + + **Example**: + ```yaml + has_or_had_significance: + - has_or_had_type: CommunitySignificance + has_or_had_description: "UNESCO-recognized Trappist tradition, Belgian cultural identity" + ``` + + range: uriorcurie # Broadened per Rule 55 to allow class-valued ranges + multivalued: true + required: false + + exact_mappings: + - crm:P17i_was_motivation_for + + close_mappings: + - dcterms:description + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: Significance applicable to all heritage types. + custodian_types_primary: T + specificity_score: 0.40 + specificity_rationale: >- + Broadly applicable - significance is fundamental to heritage justification + across all custodian types. + rico_naming_convention: | + Follows RiC-O "hasOrHad" pattern for temporal predicates. + See Rule 39: Slot Naming Convention (RiC-O Style) + migration_info: + source_slot: community_significance + migration_date: "2026-01-22" + rule: "Rule 53" + + comments: + - "Generic significance slot for heritage importance" + - "Range: uriorcurie - allows Significance class via slot_usage" + - "RiC-O naming: hasOrHad indicates potentially historical relationship" + - "Created 2026-01-22 from community_significance migration (Rule 53)" + + examples: + - value: "UNESCO-recognized cultural heritage" + description: Cultural significance example + - value: "Regional economic importance" + description: Economic significance example diff --git a/schemas/20251121/linkml/modules/slots/has_or_had_web_page.yaml b/schemas/20251121/linkml/modules/slots/has_or_had_web_page.yaml new file mode 100644 index 0000000000..36ae4d1fdb --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/has_or_had_web_page.yaml @@ -0,0 +1,86 @@ +# has_or_had_web_page slot +# Web page association following RiC-O naming pattern +# +# Generation date: 2026-01-22 +# Rule compliance: 38 (slot centralization + semantic URI), 39 (RiC-O naming), 53 (slot_fixes.yaml) +# +# Supports migration per slot_fixes.yaml: +# - collection_web_address → has_or_had_web_page + WebPage + +id: https://nde.nl/ontology/hc/slot/has_or_had_web_page +name: has_or_had_web_page_slot +title: Has Or Had Web Page Slot + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + foaf: http://xmlns.com/foaf/0.1/ + +default_prefix: hc + +imports: + - linkml:types + +slots: + has_or_had_web_page: + slot_uri: schema:hasPart + description: | + Web pages associated with this entity. + + **Temporal Semantics** (RiC-O Pattern): + The "hasOrHad" naming follows RiC-O convention indicating this + web page association may be historical - websites change over time. + + **Ontological Alignment**: + - **Primary** (`slot_uri`): `schema:hasPart` - Schema.org part relationship + - **Close**: `foaf:page` - FOAF document page + - **Close**: `schema:url` - Schema.org URL (for simple cases) + + **Use Cases**: + - Collection browse pages (e.g., Rijksstudio) + - Search interfaces + - Catalog pages + - Finding aid pages + + **Range**: WebPage class (structured web page with URL and metadata) + + **Cardinality**: + Multivalued - entities may have multiple web pages. + + range: uriorcurie # Broadened per Rule 55 - allows both literals and class instances + required: false + multivalued: true + inlined: true + inlined_as_list: true + + exact_mappings: [] + + close_mappings: + - foaf:page + - schema:url + + annotations: + rico_naming_convention: | + Follows RiC-O "hasOrHad" pattern for temporal predicates. + See Rule 39: Slot Naming Convention (RiC-O Style) + replaces_slots: "collection_web_address" + migration_date: "2026-01-22" + custodian_types: '["*"]' + custodian_types_rationale: Web pages apply to all heritage custodian types. + specificity_score: 0.20 + specificity_rationale: Generic web page slot applicable across most contexts. + + comments: + - "Generic web page association slot" + - "Temporal: Web pages may change over time" + - "RiC-O naming: hasOrHad indicates potentially historical" + - "Replaces collection_web_address per slot_fixes.yaml (2026-01-22)" + + examples: + - value: + page_name: "Digital Collections" + has_or_had_url: + - has_or_had_url: "https://www.rijksmuseum.nl/nl/rijksstudio" + has_or_had_type: collection_browse + description: "Rijksstudio collections browse page" diff --git a/schemas/20251121/linkml/modules/slots/is_or_was_acquired_by.yaml b/schemas/20251121/linkml/modules/slots/is_or_was_acquired_by.yaml new file mode 100644 index 0000000000..5c869e6cc1 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/is_or_was_acquired_by.yaml @@ -0,0 +1,83 @@ +# is_or_was_acquired_by slot +# Acquisition relationship following RiC-O naming pattern +# +# Created per slot_fixes.yaml migration for: collector +# Creation date: 2026-01-22 +# +# Rule 53 (No Bespoke Slots): collector → is_or_was_acquired_by + Agent +# Rule 39 (RiC-O Style): isOrWas temporal naming convention + +id: https://nde.nl/ontology/hc/slot/is_or_was_acquired_by +name: is_or_was_acquired_by_slot +title: Is Or Was Acquired By Slot + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + prov: http://www.w3.org/ns/prov# + dwc: http://rs.tdwg.org/dwc/terms/ + schema: http://schema.org/ + +default_prefix: hc + +imports: + - linkml:types + +slots: + is_or_was_acquired_by: + slot_uri: prov:wasAttributedTo + description: | + The agent (person or organization) who acquired or collected this entity. + + **Temporal Semantics** (RiC-O Pattern): + The "isOrWas" naming follows RiC-O convention indicating this + relationship may be historical - acquisition/collection is a past event. + + **Ontological Alignment**: + - **Primary** (`slot_uri`): `prov:wasAttributedTo` - PROV-O attribution + - **Close**: `dwc:recordedBy` - Darwin Core collector (for specimens) + - **Close**: `schema:acquiredFrom` - Schema.org acquisition source + + **Use Cases**: + - Biological specimen collectors (field collection) + - Artwork acquisition (purchase, donation) + - Archive accessioning (donor, transferring agency) + + **Range**: `uriorcurie` (Rule 55 - broaden range for class-level narrowing to Agent) + + **Migrated From**: collector (2026-01-22) + + range: uriorcurie + multivalued: true + inlined: true + inlined_as_list: true + + exact_mappings: + - prov:wasAttributedTo + + close_mappings: + - dwc:recordedBy + - schema:acquiredFrom + + annotations: + rico_naming_convention: | + Follows RiC-O "isOrWas" pattern for temporal predicates. + See Rule 39: Slot Naming Convention (RiC-O Style) + replaces_slots: "collector" + migration_date: "2026-01-22" + custodian_types: '["*"]' + custodian_types_rationale: Acquisition applies to all heritage custodian types. + specificity_score: 0.35 + specificity_rationale: Moderately specific - applies to acquisition contexts. + + comments: + - "Generic acquisition/collection agent slot" + - "Temporal: acquisition is a historical event" + - "RiC-O naming: isOrWas indicates past relationship" + - "Replaces collector per slot_fixes.yaml (2026-01-22)" + + examples: + - value: + agent_name: "Dr. Jane Smith" + agent_type: person + description: "Specimen collected by Dr. Jane Smith" diff --git a/schemas/20251121/linkml/modules/slots/is_or_was_appreciated.yaml b/schemas/20251121/linkml/modules/slots/is_or_was_appreciated.yaml new file mode 100644 index 0000000000..3d6671bcbd --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/is_or_was_appreciated.yaml @@ -0,0 +1,78 @@ +# is_or_was_appreciated slot +# RiC-O temporal naming convention (Rule 39) +# +# Created per slot_fixes.yaml revision for: comment_like_count +# Migration date: 2026-01-22 +# Rule reference: Rule 53, Rule 39 + +id: https://nde.nl/ontology/hc/slot/is_or_was_appreciated +name: is_or_was_appreciated + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + as: https://www.w3.org/ns/activitystreams# + +imports: + - linkml:types + +default_prefix: hc + +slots: + is_or_was_appreciated: + slot_uri: as:Like + description: | + Appreciation or engagement event associated with content. + + **PURPOSE**: + + Captures appreciation metrics (likes, favorites, upvotes) for digital content + in a structured way using AppreciationEvent class. + + **RiC-O NAMING** (Rule 39): + + Uses "is_or_was_" prefix to indicate temporal relationship - the content + is currently appreciated or was appreciated in the past. + + **ONTOLOGY ALIGNMENT**: + + | Ontology | Property | Usage | + |----------|----------|-------| + | **Activity Streams** | `as:Like` | Social appreciation activity | + | **Schema.org** | `schema:interactionStatistic` | Engagement metrics | + + **MIGRATION NOTE**: + + Created from migration of `comment_like_count` slot per slot_fixes.yaml. + Replaces simple integer counts with structured appreciation events. + + range: AppreciationEvent + multivalued: true + inlined: true + inlined_as_list: true + + exact_mappings: + - as:Like + + close_mappings: + - schema:interactionStatistic + + examples: + - value: + appreciation_type: like + has_or_had_quantity: + numeric_value: 42 + has_or_had_unit: + unit_label: "likes" + description: 42 likes on content + + comments: + - Created 2026-01-22 from comment_like_count migration (Rule 53) + - Uses RiC-O temporal naming convention (Rule 39) + - Supports structured appreciation metrics + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: >- + Universal - any custodian with digital content may track appreciation. diff --git a/schemas/20251121/linkml/modules/slots/is_or_was_founded_through.yaml b/schemas/20251121/linkml/modules/slots/is_or_was_founded_through.yaml new file mode 100644 index 0000000000..7c00487728 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/is_or_was_founded_through.yaml @@ -0,0 +1,80 @@ +# is_or_was_founded_through - Founding event relationship slot +# +# Created per slot_fixes.yaml migration for: founded_year, founding_date +# Creation date: 2026-01-22 +# Rule compliance: 39 (RiC-O naming), 50 (ontology mapping), 53 (slot_fixes revision) + +id: https://nde.nl/ontology/hc/slot/is_or_was_founded_through +name: is_or_was_founded_through +title: Is or Was Founded Through + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + prov: http://www.w3.org/ns/prov# + crm: http://www.cidoc-crm.org/cidoc-crm/ + +default_prefix: hc + +imports: + - linkml:types + +slots: + is_or_was_founded_through: + slot_uri: hc:isOrWasFoundedThrough + description: | + Links an organization or institution to its founding event. + + **USAGE**: + Represents the founding/establishment event for: + - Heritage custodians (museums, archives, libraries) + - Standards organizations + - Restaurants/venues with historical significance + - Any organization with a founding date + + **ONTOLOGY ALIGNMENT**: + - **Primary** (`slot_uri`): `hc:isOrWasFoundedThrough` - Heritage Custodian property + - **Close**: `schema:foundingDate` - Schema.org founding date (simpler) + - **Close**: `prov:wasGeneratedBy` - PROV-O generation event + - **Related**: `crm:P92i_was_brought_into_existence_by` - CIDOC-CRM existence + + **TEMPORAL PATTERN**: + The FoundingEvent contains a `temporal_extent` (TimeSpan) with: + - `begin_of_the_begin`: Earliest possible founding date + - `end_of_the_begin`: Latest possible founding date (for uncertain dates) + + **MIGRATION NOTE**: + Replaces simple `founded_year` (integer) and `founding_date` (string) + with structured FoundingEvent for richer temporal and contextual data. + + range: FoundingEvent + multivalued: false + inlined: true + + close_mappings: + - schema:foundingDate + - prov:wasGeneratedBy + + related_mappings: + - crm:P92i_was_brought_into_existence_by + + examples: + - value: + founding_event_id: "https://nde.nl/ontology/hc/event/founding/rijksmuseum-1800" + temporal_extent: + begin_of_the_begin: "1800-01-01" + end_of_the_begin: "1800-12-31" + founding_description: "Founded by King Louis Napoleon" + description: Museum founding event with known year + - value: + founding_event_id: "https://nde.nl/ontology/hc/event/founding/historic-restaurant-1902" + temporal_extent: + begin_of_the_begin: "1902-01-01" + end_of_the_end: "1902-12-31" + founding_description: "Established as family restaurant" + description: Restaurant founding with known year + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: "Founding events applicable to all custodian types." diff --git a/schemas/20251121/linkml/modules/slots/is_or_was_part_of.yaml b/schemas/20251121/linkml/modules/slots/is_or_was_part_of.yaml new file mode 100644 index 0000000000..4e266733ac --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/is_or_was_part_of.yaml @@ -0,0 +1,67 @@ +# is_or_was_part_of - Part-whole relationship slot +# +# Created per slot_fixes.yaml migration for: founding_date_diocese +# Creation date: 2026-01-22 +# Rule compliance: 39 (RiC-O naming), 50 (ontology mapping), 53 (slot_fixes revision) + +id: https://nde.nl/ontology/hc/slot/is_or_was_part_of +name: is_or_was_part_of +title: Is or Was Part Of + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# + schema: http://schema.org/ + dcterms: http://purl.org/dc/terms/ + +default_prefix: hc + +imports: + - linkml:types + +slots: + is_or_was_part_of: + slot_uri: rico:isOrWasPartOf + description: | + Indicates that this entity is or was part of another entity. + + **USAGE**: + Represents part-whole relationships for: + - Archives as part of dioceses (DiocesanArchive → Diocese) + - Collections as part of institutions + - Organizational units as part of parent organizations + - Geographic regions as part of larger regions + + **ONTOLOGY ALIGNMENT**: + - **Primary** (`slot_uri`): `rico:isOrWasPartOf` - RiC-O part-of relationship + - **Close**: `schema:isPartOf` - Schema.org containment + - **Close**: `dcterms:isPartOf` - Dublin Core part-of + + **TEMPORAL SEMANTICS**: + The "is_or_was" pattern (RiC-O convention) indicates that: + - The relationship may be current ("is part of") + - The relationship may be historical ("was part of") + - Temporal extent can be captured via associated TimeSpan + + **INVERSE**: `has_or_had_part` + + range: uriorcurie + multivalued: true + + exact_mappings: + - rico:isOrWasPartOf + + close_mappings: + - schema:isPartOf + - dcterms:isPartOf + + examples: + - value: "hc:diocese/utrecht" + description: Archive is part of Diocese of Utrecht + - value: "hc:organization/ministry-ocw" + description: Department is part of ministry + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: "Part-whole relationships applicable to all custodian types." diff --git a/schemas/20251121/linkml/modules/slots/is_or_was_part_of_total.yaml b/schemas/20251121/linkml/modules/slots/is_or_was_part_of_total.yaml new file mode 100644 index 0000000000..1aea33838f --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/is_or_was_part_of_total.yaml @@ -0,0 +1,69 @@ +# is_or_was_part_of_total slot +# RiC-O temporal naming convention (Rule 39) +# +# Created per slot_fixes.yaml revision for: comments_fetched +# Migration date: 2026-01-22 +# Rule reference: Rule 53, Rule 39 + +id: https://nde.nl/ontology/hc/slot/is_or_was_part_of_total +name: is_or_was_part_of_total + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + +imports: + - linkml:types + +default_prefix: hc + +slots: + is_or_was_part_of_total: + slot_uri: schema:partOfTotalCount + description: | + Indicates a partial count as part of a total. + + **PURPOSE**: + + Links a fetched/partial count to the total count at the source. + Used for tracking partial data retrieval (e.g., fetched 100 of 500 comments). + + **RiC-O NAMING** (Rule 39): + + Uses "is_or_was_" prefix indicating temporal relationship - + the partial count is or was part of a total. + + **USE CASES**: + + - Comments: 100 fetched out of 500 total + - Search results: 25 returned out of 1000 matches + - Paginated data: page 1 of 50 pages + + **MIGRATION NOTE**: + + Created from migration of `comments_fetched` slot per slot_fixes.yaml. + Works with SourceCommentCount class for structured count metadata. + + range: SourceCommentCount + inlined: true + + close_mappings: + - schema:partOfTotalCount + + examples: + - value: + fetched_count: 100 + total_count: 500 + fetch_complete: false + description: 100 of 500 comments fetched + + comments: + - Created 2026-01-22 from comments_fetched migration (Rule 53) + - Uses RiC-O temporal naming convention (Rule 39) + - Tracks partial vs total counts for paginated data + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: >- + Universal - any custodian fetching paginated data may track partial counts. diff --git a/schemas/20251121/linkml/modules/slots/manifest.json b/schemas/20251121/linkml/modules/slots/manifest.json index 9f05f35f07..a753e6f3f0 100644 --- a/schemas/20251121/linkml/modules/slots/manifest.json +++ b/schemas/20251121/linkml/modules/slots/manifest.json @@ -83,36 +83,26 @@ "cms_product_name.yaml", "collection_description.yaml", "collection_id.yaml", - "collection_locality_text.yaml", - "collection_location.yaml", "collection_name.yaml", - "collection_purpose.yaml", "collection_scope.yaml", - - "collection_type.yaml", "collection_type_description.yaml", "collection_type_id.yaml", "collection_type_name.yaml", "collection_type_ref.yaml", - "collection_web_address.yaml", - "collector.yaml", - "colonial.yaml", + "collects_or_collected.yaml", "comment_author.yaml", - "comment_author_channel_id.yaml", "comment_count.yaml", "comment_id.yaml", - "comment_like_count.yaml", "comment_published_at.yaml", - "comment_reply_count.yaml", "comment_text.yaml", "comment_updated_at.yaml", - "comments_fetched.yaml", + "__ARCHIVED_20260122__comments_fetched.yaml", "commercial_custodian_subtype.yaml", - "commercial_operation.yaml", - "commission_rate.yaml", - "common_name.yaml", - "common_name_language.yaml", - "common_variant.yaml", + "__ARCHIVED_20260122__commercial_operation.yaml", + "__ARCHIVED_20260122__commission_rate.yaml", + "__ARCHIVED_20260122__common_name.yaml", + "__ARCHIVED_20260122__common_name_language.yaml", + "__ARCHIVED_20260122__common_variant.yaml", "community_significance.yaml", "complex_name.yaml", "compliance_status.yaml", @@ -283,6 +273,7 @@ "derived_from_entity.yaml", "derived_from_observation.yaml", "derives_or_derived_from.yaml", + "describes_or_described.yaml", "description.yaml", "description_text.yaml", "description_type.yaml", @@ -508,12 +499,6 @@ "follower_count.yaml", "following_count.yaml", "footnote.yaml", - "format.yaml", - "founded_year.yaml", - "founding_date.yaml", - "founding_date_diocese.yaml", - "fr.yaml", - "frame_rate.yaml", "frame_sample_rate.yaml", "from_location.yaml", "full_extracted_text.yaml", @@ -853,6 +838,7 @@ "has_or_had_net_asset.yaml", "has_or_had_note.yaml", "has_or_had_notes.yaml", + "has_or_had_objective.yaml", "has_or_had_open_access_endpoint.yaml", "has_or_had_opening_hour.yaml", "has_or_had_operate.yaml", @@ -865,7 +851,9 @@ "has_or_had_page_section.yaml", "has_or_had_participated_in_event.yaml", "has_or_had_participated_in_project.yaml", + "has_or_had_percentage.yaml", "has_or_had_period.yaml", + "has_or_had_place.yaml", "has_or_had_place_of_birth.yaml", "has_or_had_policy.yaml", "has_or_had_portal_data_source.yaml", @@ -893,6 +881,7 @@ "has_or_had_related_exhibition.yaml", "has_or_had_related_guide.yaml", "has_or_had_related_heritage_form.yaml", + "has_or_had_reply.yaml", "has_or_had_requirement.yaml", "has_or_had_requirement_status.yaml", "has_or_had_research_attempt.yaml", @@ -957,6 +946,7 @@ "has_or_had_verification_status.yaml", "has_or_had_version.yaml", "has_or_had_web_claim.yaml", + "has_or_had_web_page.yaml", "has_or_had_writing_system.yaml", "has_outdoor_seating.yaml", "has_person_name.yaml", @@ -1095,6 +1085,7 @@ "is_open_to_public.yaml", "is_or_was_about_digital_presence.yaml", "is_or_was_access_restricted.yaml", + "is_or_was_acquired_by.yaml", "is_or_was_active_since.yaml", "is_or_was_affected_by_event.yaml", "is_or_was_affiliated_with.yaml", @@ -1105,6 +1096,7 @@ "is_or_was_also_allocation_agency.yaml", "is_or_was_alternative_form_of.yaml", "is_or_was_appended_with.yaml", + "is_or_was_appreciated.yaml", "is_or_was_approved_by.yaml", "is_or_was_approximate.yaml", "is_or_was_archive_department_of.yaml", @@ -1121,6 +1113,8 @@ "is_or_was_encompassed_by.yaml", "is_or_was_equivalent_to.yaml", "is_or_was_extracted_using.yaml", + "is_or_was_founded_through.yaml", + "is_or_was_part_of.yaml", "is_or_was_generated_by.yaml", "is_or_was_indexed.yaml", "is_or_was_instance_of.yaml", @@ -1130,6 +1124,7 @@ "is_or_was_member_of.yaml", "is_or_was_part_of_archive_series.yaml", "is_or_was_platform_of.yaml", + "is_or_was_part_of_total.yaml", "is_or_was_related_to.yaml", "is_or_was_required.yaml", "is_or_was_responsible_for.yaml", @@ -1918,6 +1913,7 @@ "standards_compliance.yaml", "start.yaml", "start_date.yaml", + "start_of_the_start.yaml", "start_seconds.yaml", "start_time.yaml", "started_at_time.yaml", @@ -1938,6 +1934,7 @@ "supersede_condition.yaml", "supersede_name.yaml", "supersedes_or_superseded.yaml", + "takes_or_took_comission.yaml", "takes_or_took_place_at.yaml", "temperature_target.yaml", "template_specificity.yaml", @@ -1952,6 +1949,7 @@ "was_acquired_through.yaml", "was_derived_from.yaml", "was_generated_by.yaml", + "was_fetched_at.yaml", "was_last_updated_at.yaml", "warrants_or_warranted.yaml", "wikidata_entity.yaml", diff --git a/schemas/20251121/linkml/modules/slots/slot_fixes.yaml b/schemas/20251121/linkml/modules/slots/slot_fixes.yaml index 6b803a7b1e..197a93e820 100644 --- a/schemas/20251121/linkml/modules/slots/slot_fixes.yaml +++ b/schemas/20251121/linkml/modules/slots/slot_fixes.yaml @@ -10032,6 +10032,22 @@ fixes: type: slot - label: Locality type: class + processed: + status: true + notes: | + FULLY_MIGRATED 2026-01-19: collection_locality_text → describes_or_described + Locality + + **Files Created**: + - describes_or_described.yaml: Generic descriptive relationship slot (dcterms:description) + - Locality.yaml: Structured locality class with dwc:verbatimLocality alignment + + **Files Modified**: + - BiologicalObject.yaml: Migrated import, slot list, slot_usage with Locality range + + **Already Existed**: + - has_or_had_provenance.yaml and Provenance.yaml (reused) + + **Archived**: modules/slots/archive/collection_locality_text_archived_20260119.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/collection_location revision: - label: has_or_had_provenance @@ -10046,6 +10062,24 @@ fixes: type: slot - label: Place type: class + processed: + status: true + notes: | + FULLY_MIGRATED 2026-01-22: collection_location → has_or_had_place + Place + CollectionEvent + + **Files Created**: + - has_or_had_place.yaml: Temporal place relationship slot (existed from prior migration) + - CollectionEvent.yaml: Darwin Core Event-aligned collection event class (existed) + + **Files Modified**: + - BiologicalObject.yaml: Previously migrated (2026-01-19) + + **Already Existed**: + - has_or_had_provenance.yaml, Provenance.yaml + - describes_or_described.yaml + - Place.yaml + + **Archived**: modules/slots/archive/collection_location_archived_20260122.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/collection_name revision: - label: has_or_had_label @@ -10066,6 +10100,21 @@ fixes: type: slot - label: Rationale type: class + processed: + status: true + notes: | + FULLY_MIGRATED 2026-01-19: collection_purpose → collects_or_collected + has_or_had_rationale + + **Files Created**: + - collects_or_collected.yaml: Generic collecting relationship slot (rico:hasOrHadHolder) + + **Files Modified**: + - CommercialOrganizationType.yaml: Migrated import, slot list, slot_usage with Rationale range + + **Already Existed**: + - has_or_had_rationale.yaml, Rationale.yaml + + **Archived**: modules/slots/archive/collection_purpose_archived_20260119.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/collection_scope revision: - label: has_or_had_scope @@ -10087,6 +10136,21 @@ fixes: - label: Unit type: class value: item + processed: + status: true + notes: | + FULLY_MIGRATED 2026-01-22: collection_size → has_or_had_quantity + Quantity + has_or_had_unit + Unit + + **Files Created**: + - All required slots and classes existed from prior migrations (2026-01-19) + + **Files Modified**: + - BioCustodianType.yaml: Migrated to has_or_had_quantity + Quantity (2026-01-19) + - PersonalCollectionType.yaml: Migrated to has_or_had_quantity + Quantity (2026-01-19) + + **Note**: Unit default value "item" used for collection item counts. + + **Archived**: modules/slots/archive/collection_size_archived_20260119.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/collection_type revision: - label: has_or_had_content @@ -10101,6 +10165,19 @@ fixes: type: slot - label: CollectionContentTypes type: class + processed: + status: true + notes: | + FULLY_MIGRATED 2026-01-22: collection_type → has_or_had_content + CollectionContent + has_or_had_type + CollectionContentType + + **Files Modified**: + - HolySacredSiteType.yaml: Migrated to has_or_had_content + CollectionContent (2026-01-22) + - CustodianCollection.yaml: Already migrated (REMOVED comment present) + + **Files Archived**: + - collection_type.yaml → archive/collection_type_archived_20260122.yaml + + **Note**: All required slots/classes already existed from prior migration work (2026-01-19) - original_slot_id: https://nde.nl/ontology/hc/slot/collection_type_description revision: - label: has_or_had_description @@ -10161,6 +10238,21 @@ fixes: - label: has_or_had_url type: slot - label: URL + processed: + status: true + notes: | + FULLY_MIGRATED 2026-01-22: collection_web_address → has_or_had_web_page + WebPage + + **Note**: Revision contains typo "had_or_had_web_page" - implemented as "has_or_had_web_page" per RiC-O naming (Rule 39). + + **Files Created**: + - has_or_had_web_page.yaml: New slot for web page association + - WebPage.yaml: New class for structured web page representation + + **Files Modified**: + - DigitalPlatform.yaml: Migrated collection_web_address to has_or_had_web_page + WebPage + + **Archived**: modules/slots/archive/collection_web_address_archived_20260122.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/collections_under_responsibility revision: - label: is_or_was_responsible_for @@ -10177,6 +10269,20 @@ fixes: type: slot - label: Agent type: class + processed: + status: true + notes: | + FULLY_MIGRATED 2026-01-22: collector → is_or_was_acquired_by + Agent + + **Files Created**: + - modules/slots/is_or_was_acquired_by.yaml: New slot for acquisition agent + - modules/classes/Agent.yaml: New class for person/organization agents + + **Files Modified**: + - BiologicalObject.yaml: Migrated slot_usage and examples from collector to is_or_was_acquired_by + Agent + - CollectionEvent.yaml: Migrated inline collector attribute to is_or_was_acquired_by slot; updated imports, slots list, description, and examples + + **Note**: No standalone collector.yaml existed to archive - collector was only defined inline as attribute in CollectionEvent.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/colonial revision: - label: includes_or_included @@ -10187,6 +10293,26 @@ fixes: type: Slot - label: ColonialStatus type: Class + processed: + status: true + notes: | + FULLY_MIGRATED 2026-01-22: colonial → includes_or_included + GeoSpatialPlace + is_or_was_categorized_as + ColonialStatus + + **Files Created**: + - modules/classes/ColonialStatus.yaml: New class for colonial status categorization + + **Files Modified**: + - FindingAid.yaml: Migrated colonial slot in GeographicCoverage class + - Updated imports (lines 80-84) + - Updated slots list (lines 564-566) + - Updated slot_usage (lines 586-620) + + **Existing Files Used** (already existed): + - modules/slots/includes_or_included.yaml + - modules/classes/GeoSpatialPlace.yaml + - modules/slots/is_or_was_categorized_as.yaml + + **Archived**: modules/slots/archive/colonial_archived_20260122.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/comment_author revision: - label: has_or_had_author @@ -10212,6 +10338,23 @@ fixes: type: slot - label: DigitalPlatformUserIdentifier type: class + processed: + status: true + notes: | + FULLY_MIGRATED 2026-01-22: comment_author_channel_id → has_or_had_author + Author + has_or_had_identifier + DigitalPlatformUserIdentifier + + **Files Created**: + - modules/classes/DigitalPlatformUserIdentifier.yaml: New class for platform user/channel identifiers + + **Files Modified**: + - VideoPost.yaml: Removed comment_author_channel_id import and slot usage; channel ID now captured via Author.has_or_had_identifier + + **Existing Files Used**: + - modules/slots/has_or_had_author.yaml + - modules/classes/Author.yaml + - modules/slots/has_or_had_identifier.yaml + + **Archived**: modules/slots/archive/comment_author_channel_id_archived_20260122.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/comment_count revision: - label: has_or_had_comment @@ -10259,6 +10402,28 @@ fixes: - label: Unit type: class value: like + processed: + status: true + notes: | + FULLY_MIGRATED 2026-01-22: comment_like_count → is_or_was_appreciated + AppreciationEvent + + **Files Created**: + - modules/slots/is_or_was_appreciated.yaml: New slot for appreciation events + - modules/classes/AppreciationEvent.yaml: New class for like/favorite metrics + + **Files Modified**: + - VideoPost.yaml: Migrated comment_like_count in VideoComment class + - Updated imports (lines 19-21) + - Updated slots list (lines 440-441) + - Updated slot_usage (lines 541-562) + + **Existing Files Used**: + - modules/slots/has_or_had_quantity.yaml + - modules/classes/Quantity.yaml + - modules/slots/has_or_had_unit.yaml + - modules/classes/Unit.yaml + + **Archived**: modules/slots/archive/comment_like_count_archived_20260122.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/comment_published_at revision: - label: temporal_extent @@ -10289,6 +10454,28 @@ fixes: - label: Unit type: class value: reply + processed: + status: true + notes: | + FULLY_MIGRATED 2026-01-22: comment_reply_count → has_or_had_reply + CommentReply + + **Files Created**: + - modules/slots/has_or_had_reply.yaml: New slot for reply relationships + - modules/classes/CommentReply.yaml: New class for reply metrics + + **Files Modified**: + - VideoPost.yaml: Migrated comment_reply_count in VideoComment class + - Updated imports (lines 25-27) + - Updated slots list (lines 446-448) + - Updated slot_usage (lines 566-586) + + **Existing Files Used**: + - modules/slots/has_or_had_quantity.yaml + - modules/classes/Quantity.yaml + - modules/slots/has_or_had_unit.yaml + - modules/classes/Unit.yaml + + **Archived**: modules/slots/archive/comment_reply_count_archived_20260122.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/comment_text revision: - label: has_or_had_content @@ -10331,6 +10518,21 @@ fixes: type: slot - label: SourceCommentCount type: class + processed: + status: true + notes: | + FULLY_MIGRATED 2026-01-22: comments_fetched → was_fetched_at + Timestamp + is_or_was_part_of_total + SourceCommentCount + + **Files Created**: + - was_fetched_at.yaml: New slot for fetch timestamp (prov:generatedAtTime) + - is_or_was_part_of_total.yaml: New slot for partial/total count relationship + - SourceCommentCount.yaml: New class for comment count metadata + + **Files Modified**: + - VideoPost.yaml: Migrated comments_fetched to was_fetched_at + is_or_was_part_of_total + - YoutubeVideo.yaml: Migrated comments_fetched to was_fetched_at + is_or_was_part_of_total + + **Archived**: modules/slots/archive/comments_fetched_archived_20260122.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/commercial_activity revision: - label: has_or_had_service @@ -10367,12 +10569,44 @@ fixes: type: slot - label: CommercialCustodianTypes type: class + processed: + status: true + notes: | + FULLY_MIGRATED 2026-01-22: commercial_custodian_subtype → includes_or_included + CommercialCustodianTypes + + **Files Created**: + - modules/classes/CommercialCustodianTypes.yaml: New class for commercial custodian type collection + + **Files Modified**: + - CommercialOrganizationType.yaml: Migrated commercial_custodian_subtype + - Updated imports (lines 28-30) + - Updated slots list (lines 225-227) + - Added slot_usage for includes_or_included (lines 302-326) + + **Existing Files Used**: + - modules/slots/includes_or_included.yaml + + **Archived**: modules/slots/archive/commercial_custodian_subtype_archived_20260122.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/commercial_operation revision: - label: has_or_had_objective type: slot - label: Profit type: class + processed: + status: true + notes: | + FULLY_MIGRATED 2026-01-22: commercial_operation → has_or_had_objective + Profit + + **Files Created**: + - has_or_had_objective.yaml: New slot for organizational objectives (org:purpose) + - Profit.yaml: New class for profit motive/objective representation + + **Files Modified**: + - GalleryType.yaml: Migrated commercial_operation to has_or_had_objective + Profit + - Updated imports, slots, description, examples + + **Archived**: modules/slots/archive/commercial_operation_archived_20260122.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/commission_rate revision: - label: has_or_had_service @@ -10387,6 +10621,28 @@ fixes: type: slot - label: Percentage type: class + processed: + status: true + date: '2026-01-22' + agent: claude-claude-sonnet-4-20250514 + notes: | + **Migration #35: commission_rate** ✅ COMPLETE + + **Pattern**: commission_rate → has_or_had_service + ArtSaleService + takes_or_took_comission + CommissionRate + has_or_had_percentage + Percentage + + **Files Created**: + - has_or_had_service.yaml: Slot for service relationships (schema:provider) + - ArtSaleService.yaml: Class for art sale/consignment services + - takes_or_took_comission.yaml: Slot for commission relationships (note: typo preserved from revision) + - CommissionRate.yaml: Class for commission rate representation + - has_or_had_percentage.yaml: Slot for percentage values + - Percentage.yaml: Class for percentage/ratio values + + **Files Modified**: + - GalleryType.yaml: Migrated commission_rate to has_or_had_service + ArtSaleService + - Updated imports, slots, description, examples + + **Archived**: modules/slots/archive/commission_rate_archived_20260122.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/common_name revision: - label: has_or_had_name @@ -10402,6 +10658,23 @@ fixes: - label: NameTypes type: class note: this includes CommonName + processed: + status: true + notes: | + FULLY_MIGRATED 2026-01-22: common_name → has_or_had_name + Name + has_or_had_type + NameType + + **Files Already Existed** (created earlier this session): + - has_or_had_name.yaml: Generic name slot (slot_uri: skos:prefLabel) + - Name.yaml: Structured name with label, type, and language + - NameType.yaml: Abstract base for name type classification + - NameTypes.yaml: Concrete name types including CommonName + + **Files Modified**: + - BiologicalObject.yaml: Migrated common_name to has_or_had_name + Name + - Updated slot_usage with structured examples + - Updated all examples (Dodo, Megatherium, Oak) to use Name class + + **Archived**: modules/slots/archive/common_name_archived_20260122.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/common_name_language revision: - label: has_or_had_name @@ -10421,6 +10694,32 @@ fixes: type: slot - label: Language type: class + processed: + status: true + date: '2026-01-22' + agent: claude-claude-sonnet-4-20250514 + notes: | + **Migration #37: common_name_language** ✅ COMPLETE + + **Pattern**: common_name_language → has_or_had_name + Name (with has_or_had_language) + has_or_had_type + NameType + NameTypes + Language + + **Completed With Migration #36**: + This migration was completed as part of common_name migration (#36). + The Name class includes has_or_had_language slot for language specification. + + **Files Already Created** (in Migration #36): + - Name.yaml: Includes has_or_had_language slot + - NameType.yaml: Abstract base class + - NameTypes.yaml: Concrete subclasses + + **Files Already Exist**: + - has_or_had_language.yaml: Generic language slot + - Language.yaml: Language class with ISO codes + + **Files Modified** (in Migration #36): + - BiologicalObject.yaml: common_name_language removed, language now in Name class + + **Archived**: modules/slots/archive/common_name_language_archived_20260122.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/common_variant revision: - label: has_or_had_type @@ -10431,6 +10730,24 @@ fixes: type: slot - label: VariantTypes type: class + processed: + status: true + date: '2026-01-22' + agent: claude-claude-sonnet-4-20250514 + notes: | + **Migration #38: common_variant** ✅ COMPLETE + + **Pattern**: common_variant → has_or_had_type + VariantType + includes_or_included + VariantTypes + + **Files Created**: + - VariantType.yaml: Abstract base class for variant type taxonomy (Rule 0b) + - VariantTypes.yaml: Concrete subclasses (AbbreviationVariant, SynonymVariant, RegionalVariant, HistoricalVariant, InformalVariant, TranslationVariant) + + **Files Modified**: + - StaffRole.yaml: Migrated common_variant to has_or_had_type + VariantType + - Updated imports, slots list + + **Archived**: modules/slots/archive/common_variant_archived_20260122.yaml - original_slot_id: https://nde.nl/ontology/hc/slot/community_engagement revision: - label: has_or_had_activity @@ -11130,7 +11447,7 @@ fixes: - original_slot_id: https://bronhouder.nl/linkml?slot=description_section processed: status: true - notes: 'was split into multiple slots" + notes: 'was split into multiple slots' feedback: - timestamp: 20260119T120000Z user: Simon C. Kemper @@ -13324,6 +13641,11 @@ fixes: type: slot - label: Format type: class + processed: + status: true + notes: 'FULLY_MIGRATED 2026-01-22: format → has_or_had_format + Format. + Created Format.yaml class. FindingAid.yaml migrated to use has_or_had_format. + has_or_had_format.yaml slot already existed. Old slot archived to archive/format_archived_20260122.yaml' - original_slot_id: https://nde.nl/ontology/hc/slot/founded_year revision: - label: is_or_was_founded_through @@ -13338,6 +13660,13 @@ fixes: type: slot - label: Timestamp type: class + processed: + status: true + notes: 'FULLY_MIGRATED 2026-01-22: founded_year → is_or_was_founded_through + FoundingEvent. + Created is_or_was_founded_through.yaml slot, FoundingEvent.yaml class, start_of_the_start.yaml slot. + CateringPlace.yaml and StandardsOrganization.yaml migrated. + Existing files used: temporal_extent.yaml, TimeSpan.yaml, Timestamp.yaml. + Old slot archived to archive/founded_year_archived_20260122.yaml' - original_slot_id: https://nde.nl/ontology/hc/slot/founding_date revision: - label: is_or_was_founded_through @@ -13352,6 +13681,12 @@ fixes: type: slot - label: Timestamp type: class + processed: + status: true + notes: 'FULLY_MIGRATED 2026-01-22: founding_date → is_or_was_founded_through + FoundingEvent. + EncompassingBody.yaml, UniversityArchive.yaml, DigitalPlatformV2OrganizationProfile.yaml migrated. + Reused existing is_or_was_founded_through.yaml, FoundingEvent.yaml, start_of_the_start.yaml from founded_year migration. + Old slot archived to archive/founding_date_archived_20260122.yaml' - original_slot_id: https://nde.nl/ontology/hc/slot/founding_date_diocese revision: - label: is_or_was_part_of @@ -13370,6 +13705,13 @@ fixes: type: slot - label: Timestamp type: class + processed: + status: true + notes: 'FULLY_MIGRATED 2026-01-22: founding_date_diocese → is_or_was_part_of + Diocese. + Created is_or_was_part_of.yaml slot and Diocese.yaml class. + DiocesanArchive.yaml migrated to use Diocese with embedded FoundingEvent. + Reused existing FoundingEvent, TimeSpan, Timestamp classes. + Old slot archived to archive/founding_date_diocese_archived_20260122.yaml' - original_slot_id: https://nde.nl/ontology/hc/slot/fr revision: - label: has_or_had_language @@ -13377,6 +13719,13 @@ fixes: - label: Language type: class value: French + processed: + status: true + notes: "FULLY_MIGRATED 2026-01-22: fr → has_or_had_language + Language (Rule 53). + Extended Language class with text_content attribute for language-tagged text. + Updated has_or_had_language slot to support both Language and LanguageProficiency (any_of). + Migrated FindingAid.yaml MultilingualText class to use unified language pattern. + Old slot archived to archive/fr_archived_20260122.yaml" - original_slot_id: https://nde.nl/ontology/hc/slot/frame_rate revision: - label: has_or_had_quantity @@ -13629,7 +13978,7 @@ fixes: type: class - original_slot_id: https://nde.nl/ontology/hc/slot/geographic_restriction revision: - - label: occurs_or_occurred_in + - label: is_or_was_applicable_in type: slot - label: Location type: class @@ -14101,4 +14450,214 @@ fixes: type: slot - label: Timestamp type: class -# https://nde.nl/ontology/hc/slot/has_air_changes_per_hour \ No newline at end of file +- orignal_slot_id: https://nde.nl/ontology/hc/slot/has_air_changes_per_hour + revision: + - label: specifies_or_specified + type: slot + - label: Ventilation + type: class + - label: requires_or_required + type: slot + - label: AirChanges + type: class + - label: has_or_had_quantity + type: slot + - label: Quantity + type: class + - label: has_or_had_unit + type: slot + - label: Unit + type: class + value: air changes per hour +- orignal_slot_id: https://nde.nl/ontology/hc/slot/has_allocation_date + revision: + - label: is_or_was_allocated_through + type: slot + - label: AllocationEvent + type: class + - label: temporal_extent + type: slot + - label: TimeSpan + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_alpha_2_code + revision: + - label: has_or_had_identifier + type: slot + - label: Alpha2Code + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_alpha_3_code + revision: + - label: has_or_had_identifier + type: slot + - label: Alpha3Code + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_alpha_3_code + revision: + - label: has_or_had_identifier + type: slot + - label: Alpha3Code + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_altitude + revision: + - label: has_or_had_altitude + type: slot + - label: Altitude + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_amendment_history + revision: + - label: is_or_was_amended_through + type: slot + - label: AmendmentEvent + type: class + - label: has_or_had_provenance + type: slot + - label: Provenance + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_annex_description + revision: + - label: has_or_had_description + type: slot + - label: Description + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_annex_name + revision: + - label: has_or_had_label + type: slot + - label: Label + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_annex_reason + revision: + - label: is_or_was_created_through + type: slot + - label: AnnexCreationEvent + type: class + - label: has_or_had_reason + type: slot + - label: Reason + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_annotation_by + revision: + - label: contains_or_contained + type: slot + - label: Annotation + type: class + - label: is_or_was_created_by + type: slot + - label: Agent + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_annotation_motivation + revision: + - label: has_or_had_rationale + type: slot + - label: Rationale + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_annotation_segment + revision: + - label: contains_or_contained + type: slot + - label: Segment + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_annotation_type + revision: + - label: has_or_had_type + type: slot + - label: AnnotationType + type: class + - label: includes_or_included + type: slot + - label: AnnotationTypes + type: class +- orignal_slot_id: https://nde.nl/ontology/hc/slot/has_api_version + revision: + - label: has_or_had_provenance + type: slot + - label: Provenance + type: class + - label: is_or_was_retrieved_through + type: slot + - label: APIRequest + type: class + - label: has_or_had_endpoint + type: slot + - label: APIEndpoint + type: class + - label: has_or_had_version + type: slot + - label: APIVersion + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_appellation_language + revision: + - label: has_or_had_language + type: slot + - label: Language + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_appellation_type + revision: + - label: has_or_had_type + type: slot + - label: AppellationType + type: class + - label: includes_or_included + type: slot + - label: AppellationTypes + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_appellation_value + revision: + - label: has_or_had_label + type: slot + - label: Label + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_applicable_country + revision: + - label: is_or_was_applicable_in + type: slot + - label: Country + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_application_deadline + revision: + - label: is_or_was_due_on + type: slot + - label: TimeSpan + type: class + - label: end_of_the_end + type: slot + - label: Timestamp + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_application_opening_date + revision: + - label: is_or_was_opened_on + type: slot + - label: TimeSpan + type: class + - label: start_of_the_start + type: slot + - label: Timestamp + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_appraisal_note + revision: + - label: has_or_had_note + type: slot + - label: Note + type: class +- orignal_slot_id: https://nde.nl/ontology/hc/slot/has_approval_date + revision: + - label: is_or_was_approved_on + type: slot + - label: TimeSpan + type: class + - label: start_of_the_start + type: slot + - label: Timestamp + type: class +- original_slot_id: https://nde.nl/ontology/hc/slot/has_archdiocese_name + revision: + - label: is_or_was_part_of + type: slot + - label: Archdiocese + type: class + - label: has_or_had_label + type: slot + - label: Label + type: class +# https://nde.nl/ontology/hc/slot/has_appellation_type +# https://nde.nl/ontology/hc/slot/has_appellation_type \ No newline at end of file diff --git a/schemas/20251121/linkml/modules/slots/start_of_the_start.yaml b/schemas/20251121/linkml/modules/slots/start_of_the_start.yaml new file mode 100644 index 0000000000..bf41aefea2 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/start_of_the_start.yaml @@ -0,0 +1,59 @@ +# start_of_the_start - Temporal boundary slot (alias for begin_of_the_begin) +# +# Created per slot_fixes.yaml migration for: founded_year, founding_date +# Creation date: 2026-01-22 +# Rule compliance: 39 (RiC-O naming), 50 (ontology mapping), 53 (slot_fixes revision) +# +# NOTE: This is semantically equivalent to begin_of_the_begin (CIDOC-CRM P82a). +# Created to fulfill slot_fixes.yaml revision requirements. +# Prefer using begin_of_the_begin in new code (established CIDOC-CRM pattern). + +id: https://nde.nl/ontology/hc/slot/start_of_the_start +name: start_of_the_start +title: Start of the Start + +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: + start_of_the_start: + slot_uri: crm:P82a_begin_of_the_begin + description: | + The earliest possible start time of a temporal extent. + + **SEMANTICS**: + Equivalent to CIDOC-CRM P82a_begin_of_the_begin. + This slot is an alias for `begin_of_the_begin` for naming consistency. + + **USAGE**: + - For precise start: Set to exact timestamp + - For uncertain start: Set to earliest plausible date + + **NOTE**: + Prefer `begin_of_the_begin` in new code (established CIDOC-CRM pattern). + This slot created per slot_fixes.yaml revision requirements. + + range: Timestamp + + exact_mappings: + - crm:P82a_begin_of_the_begin + + aliases: + - begin_of_the_begin + + examples: + - value: "1902-01-01" + description: Earliest possible date for 1902 founding + - value: "1850-01-01" + description: Earliest date for 1850s founding (decade uncertainty) + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: "Temporal boundaries applicable to all custodian types." diff --git a/schemas/20251121/linkml/modules/slots/takes_or_took_comission.yaml b/schemas/20251121/linkml/modules/slots/takes_or_took_comission.yaml new file mode 100644 index 0000000000..6da73f68fb --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/takes_or_took_comission.yaml @@ -0,0 +1,73 @@ +# takes_or_took_comission slot +# RiC-O temporal naming convention (Rule 39) +# +# Created per slot_fixes.yaml revision for: commission_rate +# Migration date: 2026-01-22 +# Rule reference: Rule 53, Rule 39 +# NOTE: Spelling "comission" matches revision specification (Rule 57 - immutable) + +id: https://nde.nl/ontology/hc/slot/takes_or_took_comission +name: takes_or_took_comission + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + +imports: + - linkml:types + +default_prefix: hc + +slots: + takes_or_took_comission: + slot_uri: schema:priceComponent + description: | + Commission rate taken on sales transactions. + + **PURPOSE**: + + Links a service (like art sales) to its commission structure. + Used for modeling gallery commission on artwork sales. + + **RiC-O NAMING** (Rule 39): + + Uses "takes_or_took_" prefix indicating temporal relationship - + commission rates may change over time. + + **MIGRATION NOTE**: + + Created from migration of `commission_rate` slot per slot_fixes.yaml. + Provides structured commission representation via CommissionRate class. + + **NOTE**: Spelling "comission" matches revision specification per Rule 57. + + range: CommissionRate + inlined: true + + close_mappings: + - schema:priceComponent + + examples: + - value: + rate_type: "primary_market" + has_or_had_percentage: + percentage_value: 50 + percentage_display: "50%" + description: Standard primary market commission (50%) + - value: + rate_type: "secondary_market" + has_or_had_percentage: + percentage_value: 15 + percentage_display: "10-20%" + description: Secondary market resale commission + + comments: + - Created 2026-01-22 from commission_rate migration (Rule 53) + - Uses RiC-O temporal naming convention (Rule 39) + - Links services to commission structures + + annotations: + custodian_types: '["G"]' + custodian_types_rationale: >- + Primarily for galleries and commercial art dealers. diff --git a/schemas/20251121/linkml/modules/slots/was_fetched_at.yaml b/schemas/20251121/linkml/modules/slots/was_fetched_at.yaml new file mode 100644 index 0000000000..4c9fd24747 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/was_fetched_at.yaml @@ -0,0 +1,72 @@ +# was_fetched_at slot +# RiC-O temporal naming convention (Rule 39) +# +# Created per slot_fixes.yaml revision for: comments_fetched +# Migration date: 2026-01-22 +# Rule reference: Rule 53, Rule 39 + +id: https://nde.nl/ontology/hc/slot/was_fetched_at +name: was_fetched_at + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + prov: http://www.w3.org/ns/prov# + dcterms: http://purl.org/dc/terms/ + +imports: + - linkml:types + +default_prefix: hc + +slots: + was_fetched_at: + slot_uri: prov:generatedAtTime + description: | + Timestamp when data was fetched/retrieved from a source. + + **PURPOSE**: + + Records when content was fetched from an external source (API, web page, etc.). + Used for provenance tracking of retrieved data. + + **RiC-O NAMING** (Rule 39): + + Uses "was_" prefix indicating past tense - the fetch has already occurred. + + **ONTOLOGY ALIGNMENT**: + + | Ontology | Property | Usage | + |----------|----------|-------| + | **PROV-O** | `prov:generatedAtTime` | When entity was generated | + | **Dublin Core** | `dcterms:dateAccepted` | Date accepted/retrieved | + + **MIGRATION NOTE**: + + Created from migration of `comments_fetched` slot per slot_fixes.yaml. + Works with SourceCommentCount class for structured fetch metadata. + + range: Timestamp + inlined: true + + exact_mappings: + - prov:generatedAtTime + + close_mappings: + - dcterms:dateAccepted + + examples: + - value: + has_or_had_timestamp: "2025-01-14T10:30:00Z" + has_or_had_precision: second + description: Exact fetch timestamp + + comments: + - Created 2026-01-22 from comments_fetched migration (Rule 53) + - Uses RiC-O temporal naming convention (Rule 39) + - Tracks when external data was retrieved + + annotations: + custodian_types: '["*"]' + custodian_types_rationale: >- + Universal - any custodian fetching external data may track fetch times.