diff --git a/frontend/public/schemas/20251121/linkml/manifest.json b/frontend/public/schemas/20251121/linkml/manifest.json index 8a0becd0e0..2d770acf7b 100644 --- a/frontend/public/schemas/20251121/linkml/manifest.json +++ b/frontend/public/schemas/20251121/linkml/manifest.json @@ -1,5 +1,5 @@ { - "generated": "2026-01-17T18:53:55.988Z", + "generated": "2026-01-17T19:58:12.596Z", "schemaRoot": "/schemas/20251121/linkml", "totalFiles": 2968, "categoryCounts": { diff --git a/schemas/20251121/linkml/manifest.json b/schemas/20251121/linkml/manifest.json index 2d770acf7b..357509d45d 100644 --- a/schemas/20251121/linkml/manifest.json +++ b/schemas/20251121/linkml/manifest.json @@ -1,5 +1,5 @@ { - "generated": "2026-01-17T19:58:12.596Z", + "generated": "2026-01-17T20:10:50.954Z", "schemaRoot": "/schemas/20251121/linkml", "totalFiles": 2968, "categoryCounts": { diff --git a/schemas/20251121/linkml/modules/classes/ExhibitionCatalog.yaml b/schemas/20251121/linkml/modules/classes/ExhibitionCatalog.yaml index aedb80555e..dcfb23152c 100644 --- a/schemas/20251121/linkml/modules/classes/ExhibitionCatalog.yaml +++ b/schemas/20251121/linkml/modules/classes/ExhibitionCatalog.yaml @@ -16,7 +16,9 @@ imports: - ../metadata # REMOVED 2026-01-15: ../slots/wikidata_id - migrated to has_or_had_identifier + WikiDataIdentifier (Rule 53) - ./WikiDataIdentifier - - ../slots/publisher + # REMOVED 2026-01-17: ../slots/publisher - migrated to has_or_had_publisher + Publisher (Rule 53/56) + - ../slots/has_or_had_publisher + - ./Publisher - ../slots/publication_date - ../slots/isbn - ../slots/language @@ -123,7 +125,7 @@ classes: - price - publication_date - publication_place - - publisher + - has_or_had_publisher # was: publisher - migrated per Rule 53/56 (2026-01-17) - specificity_annotation - is_or_was_indexed # was: table_of_content - migrated per Rule 53/56 (2026-01-16) - has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17) @@ -242,13 +244,36 @@ classes: examples: - value: Anna Tummers (essay) - value: Jane Smith (conservation notes) - publisher: + has_or_had_publisher: # was: publisher - migrated per Rule 53/56 (2026-01-17) required: false - range: string + range: Publisher + inlined: true + multivalued: true + description: | + Publisher of the exhibition catalog. + MIGRATED from publisher slot per Rule 53/56 (2026-01-17). + + Uses Publisher class for structured representation including: + - Publisher name (required) + - Publisher type (institutional, commercial, academic) + - Location + - Identifiers examples: - - value: Rijksmuseum - - value: Thames & Hudson - - value: Yale University Press + - value: + has_or_had_label: Rijksmuseum + has_or_had_type: institutional + has_or_had_location: Amsterdam + description: Museum as institutional publisher + - value: + has_or_had_label: Thames & Hudson + has_or_had_type: commercial + has_or_had_location: London + description: Commercial art book publisher + - value: + has_or_had_label: Yale University Press + has_or_had_type: academic + has_or_had_location: New Haven + description: Academic press publisher publication_date: required: false range: date @@ -450,7 +475,13 @@ classes: author_affiliation: Rijksmuseum Amsterdam editor: - Pieter Roelofs - publisher: Rijksmuseum / Hannibal Publishing + has_or_had_publisher: # was: publisher - migrated per Rule 53/56 (2026-01-17) + - has_or_had_label: Rijksmuseum + has_or_had_type: institutional + has_or_had_location: Amsterdam + - has_or_had_label: Hannibal Publishing + has_or_had_type: commercial + has_or_had_location: Veurne publication_date: '2023-02-01' publication_place: Amsterdam isbn_13: '9789491714962' @@ -483,7 +514,10 @@ classes: - Nicholas Cullinan - Jodi Hauptman - Nicholas Serota - publisher: The Museum of Modern Art, New York + has_or_had_publisher: # was: publisher - migrated per Rule 53/56 (2026-01-17) + - has_or_had_label: The Museum of Modern Art + has_or_had_type: institutional + has_or_had_location: New York publication_date: '2014-10-01' isbn_13: '9780870709159' pages: 298 @@ -497,7 +531,10 @@ classes: has_or_had_label: 'Arctic: culture and climate' # was: catalog_title is_or_was_associated_with: https://nde.nl/ontology/hc/exhibition/british-museum-arctic-2020 # was: catalog_for has_or_had_type: DIGITAL_CATALOG # was: catalog_type - publisher: The British Museum Press + has_or_had_publisher: # was: publisher - migrated per Rule 53/56 (2026-01-17) + - has_or_had_label: The British Museum Press + has_or_had_type: institutional + has_or_had_location: London publication_date: '2020-10-22' has_or_had_url: # was: catalog_url - migrated per Rule 53/56 (2026-01-17) - has_or_had_url: "https://www.britishmuseum.org/exhibitions/arctic-culture-and-climate" diff --git a/schemas/20251121/linkml/modules/classes/FindingAid.yaml b/schemas/20251121/linkml/modules/classes/FindingAid.yaml index 7eb772a664..2fbf7e414b 100644 --- a/schemas/20251121/linkml/modules/classes/FindingAid.yaml +++ b/schemas/20251121/linkml/modules/classes/FindingAid.yaml @@ -53,7 +53,9 @@ imports: - ../slots/date - ../slots/note - ../slots/creator - - ../slots/publisher + # REMOVED 2026-01-17: ../slots/publisher - migrated to has_or_had_publisher + Publisher (Rule 53/56) + - ../slots/has_or_had_publisher + - ./Publisher - ../slots/publication_date - ../slots/isbn - ../slots/has_or_had_access_condition @@ -269,7 +271,7 @@ classes: - has_or_had_page_section - provenance - publication_date - - publisher + - has_or_had_publisher # was: publisher - migrated per Rule 53/56 (2026-01-17) - has_or_had_related_archive - has_or_had_related_guide - revision_date @@ -350,6 +352,31 @@ classes: - label_value: "Genealogy" language_code: "en" description: Genealogy topic assignment + has_or_had_publisher: # was: publisher - migrated per Rule 53/56 (2026-01-17) + range: Publisher + inlined: true + multivalued: true + required: false + description: | + Publisher of the finding aid publication. + MIGRATED from publisher slot per Rule 53/56 (2026-01-17). + + Uses Publisher class for structured representation including: + - Publisher name (required) + - Publisher type (institutional, commercial, academic) + - Location + - Identifiers + examples: + - value: + has_or_had_label: Nationaal Archief + has_or_had_type: institutional + has_or_had_location: Den Haag + description: National archive as institutional publisher + - value: + has_or_had_label: Rijksarchiefdienst + has_or_had_type: government + has_or_had_location: Den Haag + description: Government archival service publisher comments: - Root class for finding aid metadata YAML files - Designed for validation with linkml-validate diff --git a/schemas/20251121/linkml/modules/classes/FindingAidTypes.yaml b/schemas/20251121/linkml/modules/classes/FindingAidTypes.yaml index ad5be92a99..d29b0edfe8 100644 --- a/schemas/20251121/linkml/modules/classes/FindingAidTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/FindingAidTypes.yaml @@ -869,11 +869,12 @@ classes: slots: - specificity_annotation - has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17) - Index: + IndexDocument: is_a: FindingAidType class_uri: wd:Q873506 - description: 'Index - alphabetical or systematic list of names, subjects, locations. + description: 'IndexDocument - alphabetical or systematic list of names, subjects, locations (finding aid type). + Note: For structured index with entries, use Index class from Index.yaml. Wikidata: Q873506 (index) @@ -902,12 +903,12 @@ classes: broader_type: range: FindingAidType narrower_type: - range: Index + range: IndexDocumentDocument slots: - specificity_annotation - has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17) BibliographicIndex: - is_a: Index + is_a: IndexDocument class_uri: wd:Q2033233 description: 'Bibliographic index - index to bibliographic sources. @@ -932,12 +933,12 @@ classes: has_or_had_domain: # was: typical_domain - migrated per Rule 53 ifabsent: string(LIBRARY) broader_type: - range: Index + range: IndexDocument slots: - specificity_annotation - has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17) LocationIndex: - is_a: Index + is_a: IndexDocument class_uri: wd:Q117311578 description: 'Location index - index organized by geographic location. @@ -962,7 +963,7 @@ classes: has_or_had_domain: # was: typical_domain - migrated per Rule 53 ifabsent: string(ARCHIVE) broader_type: - range: Index + range: IndexDocument slots: - specificity_annotation - has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17) diff --git a/schemas/20251121/linkml/modules/classes/PublicationEvent.yaml b/schemas/20251121/linkml/modules/classes/PublicationEvent.yaml new file mode 100644 index 0000000000..e7ba73a32c --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/PublicationEvent.yaml @@ -0,0 +1,99 @@ +id: https://nde.nl/ontology/hc/class/PublicationEvent +name: publication_event_class +title: Publication Event Class +description: | + Event representing the publication of content, following CIDOC-CRM event modeling. + + CREATED 2026-01-17 per Rule 53/56: Provides structured publication event + representation instead of simple datetime. Enables rich temporal modeling + including fuzzy date boundaries. + + Supports: + - Social media posts with publication timestamps + - Document publications with date ranges + - Historical publications with uncertain dates +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + crm: http://www.cidoc-crm.org/cidoc-crm/ + schema: http://schema.org/ + prov: http://www.w3.org/ns/prov# + dcterms: http://purl.org/dc/terms/ +imports: + - linkml:types + - ./TimeSpan + - ../slots/temporal_extent + - ../slots/has_or_had_label + - ../slots/has_or_had_identifier + - ../slots/specificity_annotation + - ../slots/has_or_had_score + - ./SpecificityAnnotation + - ./TemplateSpecificityScore + - ./TemplateSpecificityType + - ./TemplateSpecificityTypes +default_prefix: hc +classes: + PublicationEvent: + class_uri: crm:E7_Activity + description: | + Event of content being published, following CIDOC-CRM activity pattern. + + MIGRATED from published_at datetime slot per Rule 53/56 (2026-01-17). + + **Why Event Wrapper?** + - Enables fuzzy temporal boundaries (uncertainty in publication dates) + - Supports multiple publication events (republications, versions) + - Links to agents/locations involved in publication + - Follows ontology best practices (CIDOC-CRM activity modeling) + + **USE CASES**: + - Social media posts: Precise publication timestamp + - Historical documents: "Published sometime in 1892" + - Archival records: "Published between 1800-1805" + + **FOR PRECISE TIMESTAMPS**: + Set all four TimeSpan boundaries to the same instant. + exact_mappings: + - crm:E7_Activity + - prov:Activity + close_mappings: + - schema:PublishAction + related_mappings: + - dcterms:created + slots: + - temporal_extent + - has_or_had_label + - has_or_had_identifier + - specificity_annotation + - has_or_had_score + slot_usage: + temporal_extent: + description: | + When the publication occurred. For precise timestamps, set all four + TimeSpan boundaries to the same instant. For uncertain dates, use + fuzzy boundaries. + range: TimeSpan + inlined: true + required: true + has_or_had_label: + description: Optional label for the publication event (e.g., "First Edition", "Reprint 2020") + required: false + comments: + - "Precise date: Set begin_of_the_begin == end_of_the_begin == begin_of_the_end == end_of_the_end" + - "Uncertain date: Use fuzzy boundaries (e.g., begin_of_the_begin: 1892-01-01, end_of_the_end: 1892-12-31)" + examples: + - value: + temporal_extent: + begin_of_the_begin: "2025-07-30T18:05:15Z" + end_of_the_begin: "2025-07-30T18:05:15Z" + begin_of_the_end: "2025-07-30T18:05:15Z" + end_of_the_end: "2025-07-30T18:05:15Z" + description: Precise social media post timestamp + - value: + temporal_extent: + begin_of_the_begin: "1892-01-01T00:00:00Z" + end_of_the_begin: "1892-06-30T00:00:00Z" + begin_of_the_end: "1892-06-30T00:00:00Z" + end_of_the_end: "1892-12-31T00:00:00Z" + has_or_had_label: "First Edition" + description: Historical publication with uncertain date (sometime in 1892) diff --git a/schemas/20251121/linkml/modules/classes/Publisher.yaml b/schemas/20251121/linkml/modules/classes/Publisher.yaml new file mode 100644 index 0000000000..94aa54b7ed --- /dev/null +++ b/schemas/20251121/linkml/modules/classes/Publisher.yaml @@ -0,0 +1,162 @@ +id: https://nde.nl/ontology/hc/class/Publisher +name: Publisher +title: Publisher Class +description: | + Represents a publisher entity for publications and documents. + + CREATED 2026-01-17 per Rule 53/56: Class for structured publisher representation. + Replaces string-valued publisher slot with structured data including: + - Publisher name (required) + - Publisher type (institutional, commercial, academic, self-published) + - Location/city + - Identifiers (ISNI, Wikidata) + - URL + + **Ontology Alignment**: + + - **Schema.org**: schema:Organization (primary - web discoverability) + - **Dublin Core**: dcterms:Agent (abstract agent entity) + - **FOAF**: foaf:Organization (friend-of-a-friend vocabulary) + + **Publisher Types**: + + | Type | Description | Example | + |------|-------------|---------| + | institutional | Museum, archive, or library publishing | Rijksmuseum, British Museum Press | + | commercial | Trade and commercial publishers | Thames & Hudson, Phaidon | + | academic | University and academic presses | Yale University Press, MIT Press | + | self-published | Self-publishing by individuals | Artist monographs | + | government | Government publishing offices | GPO, HMSO | +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/ +imports: + - linkml:types + - ../metadata + - ../slots/has_or_had_label + - ../slots/has_or_had_identifier + - ../slots/has_or_had_location + - ../slots/has_or_had_url + - ../slots/has_or_had_type + - ../slots/specificity_annotation + - ../slots/has_or_had_score + - ./SpecificityAnnotation + - ./TemplateSpecificityScore + - ./TemplateSpecificityType + - ./TemplateSpecificityTypes +default_prefix: hc +classes: + Publisher: + class_uri: schema:Organization + description: | + A publisher of publications, catalogs, finding aids, or other documents. + + Supports structured representation with name, type, location, and identifiers. + CREATED 2026-01-17 per Rule 53/56: Replaces string-valued publisher slot. + exact_mappings: + - schema:Organization + - foaf:Organization + close_mappings: + - dcterms:Agent + slots: + - has_or_had_label + - has_or_had_identifier + - has_or_had_location + - has_or_had_url + - has_or_had_type + - specificity_annotation + - has_or_had_score + slot_usage: + has_or_had_label: + required: true + range: string + description: | + Name of the publisher. + Required field - every publisher must have a name. + examples: + - value: Rijksmuseum + description: Dutch national museum publisher + - value: Yale University Press + description: Academic press + - value: Thames & Hudson + description: Commercial art publisher + - value: The British Museum Press + description: Institutional publisher + has_or_had_type: + required: false + range: string + description: | + Type classification of the publisher. + + Common values: + - institutional: Museums, archives, libraries + - commercial: Trade publishers + - academic: University presses + - self-published: Individual publishing + - government: Government publishing offices + examples: + - value: institutional + - value: commercial + - value: academic + - value: government + has_or_had_location: + required: false + range: string + description: | + Location/city of the publisher. + Typically the city where the publisher is headquartered. + examples: + - value: Amsterdam + - value: New York + - value: London + - value: New Haven + has_or_had_identifier: + required: false + range: uriorcurie + multivalued: true + description: | + Identifiers for the publisher (ISNI, Wikidata Q-number, etc.). + examples: + - value: "Q190804" + description: Wikidata identifier for Rijksmuseum + - value: "0000000121671840" + description: ISNI identifier + has_or_had_url: + required: false + range: uri + description: | + Official website URL of the publisher. + examples: + - value: "https://www.rijksmuseum.nl" + - value: "https://yalebooks.yale.edu" + examples: + - value: + has_or_had_label: Rijksmuseum + has_or_had_type: institutional + has_or_had_location: Amsterdam + has_or_had_url: "https://www.rijksmuseum.nl" + description: Museum as institutional publisher + - value: + has_or_had_label: Yale University Press + has_or_had_type: academic + has_or_had_location: New Haven + has_or_had_url: "https://yalebooks.yale.edu" + description: Academic press publisher + - value: + has_or_had_label: Thames & Hudson + has_or_had_type: commercial + has_or_had_location: London + description: Commercial art book publisher + - value: + has_or_had_label: The British Museum Press + has_or_had_type: institutional + has_or_had_location: London + description: Museum press as institutional publisher + - value: + has_or_had_label: Hannibal Publishing + has_or_had_type: commercial + has_or_had_location: Veurne + description: Belgian art book publisher diff --git a/schemas/20251121/linkml/modules/classes/SocialMediaContent.yaml b/schemas/20251121/linkml/modules/classes/SocialMediaContent.yaml index 69a0637c9b..fab0c6be91 100644 --- a/schemas/20251121/linkml/modules/classes/SocialMediaContent.yaml +++ b/schemas/20251121/linkml/modules/classes/SocialMediaContent.yaml @@ -17,7 +17,10 @@ imports: - ../slots/is_official_content - ../slots/platform_type - ../slots/posted_by_profile - - ../slots/published_at + # - ../slots/published_at # ARCHIVED 2026-01-17 - migrated per Rule 53/56 + - ../slots/is_or_was_published_at # was: published_at - migrated per Rule 53/56 (2026-01-17) + - ./PublicationEvent # for is_or_was_published_at range + - ./TimeSpan # for PublicationEvent.temporal_extent - ../slots/retrieval_timestamp - ../slots/specificity_annotation - ../slots/is_or_was_categorized_as # was: tag - migrated per Rule 53/56 (2026-01-16) @@ -63,7 +66,7 @@ classes: \ TRACKING**:\n\nContent items are OBSERVATIONAL data retrieved via:\n- Platform APIs (YouTube Data API, Twitter API,\ \ etc.)\n- Web scraping (when API unavailable)\n- Manual archival\n\nEach content record includes:\n- `retrieval_timestamp`:\ \ When content was fetched\n- `api_endpoint`: Which API/method was used\n- `metrics_observed_date`: When engagement\ - \ metrics were recorded\n\n**TEMPORAL CONSIDERATIONS**:\n\nContent has multiple temporal dimensions:\n- `published_at`:\ + \ metrics were recorded\n\n**TEMPORAL CONSIDERATIONS**:\n\nContent has multiple temporal dimensions:\n- `is_or_was_published_at`:\ \\ When originally posted\\n- `was_last_updated_at`: Last modification by author\\n- `retrieval_timestamp`: When we fetched it\\n\\ - `metrics_observed_date`: When metrics (views, likes) were recorded\n\nEngagement metrics change constantly; always\ \ record observation timestamp.\n\n**SUBCLASSES**:\n\n- VideoPost: YouTube, TikTok, Vimeo videos\n- ImagePost: Instagram,\ @@ -88,7 +91,7 @@ classes: - language - platform_type - posted_by_profile - - published_at + - is_or_was_published_at # was: published_at - migrated per Rule 53/56 (2026-01-17) - retrieval_timestamp - specificity_annotation - is_or_was_categorized_as # was: tag - migrated per Rule 53/56 (2026-01-16) @@ -135,12 +138,21 @@ classes: examples: - value: De videoreeks De Vrijheidsroute is gebaseerd op de gelijknamige fietsroute... description: YouTube video description - published_at: - range: datetime + is_or_was_published_at: # was: published_at - migrated per Rule 53/56 (2026-01-17) + range: PublicationEvent required: true + inlined: true + description: | + Publication event with temporal extent. For precise timestamps, + set all four TimeSpan boundaries to the same instant. examples: - - value: '2025-07-30T18:05:15Z' - description: Published July 30, 2025 + - value: + temporal_extent: + begin_of_the_begin: '2025-07-30T18:05:15Z' + end_of_the_begin: '2025-07-30T18:05:15Z' + begin_of_the_end: '2025-07-30T18:05:15Z' + end_of_the_end: '2025-07-30T18:05:15Z' + description: Published July 30, 2025 (precise timestamp) was_last_updated_at: # was: updated_at - migrated per Rule 53 range: datetime required: false diff --git a/schemas/20251121/linkml/modules/classes/SocialMediaPost.yaml b/schemas/20251121/linkml/modules/classes/SocialMediaPost.yaml index 398234dbf9..3ddf8d97a8 100644 --- a/schemas/20251121/linkml/modules/classes/SocialMediaPost.yaml +++ b/schemas/20251121/linkml/modules/classes/SocialMediaPost.yaml @@ -20,7 +20,10 @@ imports: - ../slots/has_or_had_post_type - ../slots/post_url - ../slots/posted_by_profile - - ../slots/published_at + # - ../slots/published_at # ARCHIVED 2026-01-17 - migrated per Rule 53/56 + - ../slots/is_or_was_published_at # was: published_at - migrated per Rule 53/56 (2026-01-17) + - ./PublicationEvent # for is_or_was_published_at range + - ./TimeSpan # for PublicationEvent.temporal_extent - ../slots/retrieval_timestamp - ../slots/specificity_annotation - ../slots/is_or_was_categorized_as # was: tag - migrated per Rule 53/56 (2026-01-16) @@ -75,7 +78,7 @@ classes: \ data retrieved via:\n- Platform APIs (YouTube Data API, Twitter API, etc.)\n- Web scraping (when API unavailable)\n\ - Manual archival\n\nEach content record includes:\n- `retrieval_timestamp`: When content was fetched\n- `api_endpoint`:\ \ Which API/method was used\n- `metrics_observed_date`: When engagement metrics were recorded\n\n**TEMPORAL CONSIDERATIONS**:\n\ - \\nContent has multiple temporal dimensions:\\n- `published_at`: When originally posted\\n- `was_last_updated_at`: Last modification\\\n \\ by author\\n- `retrieval_timestamp`: When we fetched it\\n- `metrics_observed_date`: When metrics (views, likes) were\\ + \\nContent has multiple temporal dimensions:\\n- `is_or_was_published_at`: When originally posted\\n- `was_last_updated_at`: Last modification\\\n \\ by author\\n- `retrieval_timestamp`: When we fetched it\\n- `metrics_observed_date`: When metrics (views, likes) were\\ \ recorded\n\nEngagement metrics change constantly; always record observation timestamp.\n\n**SUBCLASSES FOR SPECIALIZED\ \ CONTENT**:\n\nWhile SocialMediaPost can represent any content with post_types,\nspecialized subclasses provide additional\ \ platform-specific slots:\n\n- **VideoPost**: YouTube, TikTok, Vimeo videos (duration, definition, captions)\n- **ImagePost**:\ @@ -101,7 +104,7 @@ classes: - has_or_had_post_type - post_url - posted_by_profile - - published_at + - is_or_was_published_at # was: published_at - migrated per Rule 53/56 (2026-01-17) - retrieval_timestamp - specificity_annotation - is_or_was_categorized_as # was: tag - migrated per Rule 53/56 (2026-01-16) @@ -162,12 +165,21 @@ classes: examples: - value: De videoreeks De Vrijheidsroute is gebaseerd op de gelijknamige fietsroute... description: YouTube video description - published_at: - range: datetime + is_or_was_published_at: # was: published_at - migrated per Rule 53/56 (2026-01-17) + range: PublicationEvent required: true + inlined: true + description: | + Publication event with temporal extent. For precise timestamps, + set all four TimeSpan boundaries to the same instant. examples: - - value: '2025-07-30T18:05:15Z' - description: Published July 30, 2025 + - value: + temporal_extent: + begin_of_the_begin: '2025-07-30T18:05:15Z' + end_of_the_begin: '2025-07-30T18:05:15Z' + begin_of_the_end: '2025-07-30T18:05:15Z' + end_of_the_end: '2025-07-30T18:05:15Z' + description: Published July 30, 2025 (precise timestamp) was_last_updated_at: # was: updated_at - migrated per Rule 53 range: datetime required: false diff --git a/schemas/20251121/linkml/modules/classes/TaxScheme.yaml b/schemas/20251121/linkml/modules/classes/TaxScheme.yaml index 7f886fdcc8..59c87683af 100644 --- a/schemas/20251121/linkml/modules/classes/TaxScheme.yaml +++ b/schemas/20251121/linkml/modules/classes/TaxScheme.yaml @@ -14,6 +14,12 @@ imports: - ../slots/has_or_had_label - ../slots/has_or_had_description - ../slots/has_or_had_identifier + - ../slots/jurisdiction + - ../slots/deduction_percentage + - ../slots/regulatory_body + - ../slots/legal_basis + - ../slots/effective_date + - ../slots/expiration_date - ./TaxSchemeType - ./TaxSchemeTypes default_prefix: hc @@ -245,43 +251,3 @@ classes: discovery. replaces_slot: tax_scheme migration_date: "2026-01-16" - -# Define additional slots needed for TaxScheme -slots: - jurisdiction: - slot_uri: schema:areaServed - range: string - description: | - ISO 3166-1 alpha-2 country code indicating the jurisdiction - where this tax scheme applies. - - deduction_percentage: - slot_uri: hc:deductionPercentage - range: integer - description: | - Percentage of donation amount that is tax-deductible. - 100 = full deduction, >100 = enhanced cultural multiplier. - - regulatory_body: - slot_uri: schema:provider - range: string - description: | - Name of the government agency administering the tax scheme. - - legal_basis: - slot_uri: schema:legislationApplied - range: string - description: | - Legal statute, act, or regulation establishing the scheme. - - effective_date: - slot_uri: schema:validFrom - range: date - description: | - Date when the scheme status became effective. - - expiration_date: - slot_uri: schema:validThrough - range: date - description: | - Date when the scheme status expires (if applicable). diff --git a/schemas/20251121/linkml/modules/classes/TechnologicalInfrastructureTypes.yaml b/schemas/20251121/linkml/modules/classes/TechnologicalInfrastructureTypes.yaml index 2c6dea898f..1a4e907393 100644 --- a/schemas/20251121/linkml/modules/classes/TechnologicalInfrastructureTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/TechnologicalInfrastructureTypes.yaml @@ -66,43 +66,44 @@ classes: # DATABASE TYPES # ============================================================ - Database: + DatabaseSystem: is_a: TechnologicalInfrastructureType - class_uri: hc:Database + class_uri: hc:DatabaseSystem description: | - Database management system. + Database management system technology. Examples: PostgreSQL, MySQL, MongoDB, Elasticsearch, Neo4j + Note: For finding aid classification, use Database from FindingAidTypes. RelationalDatabase: - is_a: Database + is_a: DatabaseSystem class_uri: hc:RelationalDatabase description: | SQL-based relational database. Examples: PostgreSQL, MySQL, MariaDB, Oracle, SQL Server DocumentDatabase: - is_a: Database + is_a: DatabaseSystem class_uri: hc:DocumentDatabase description: | NoSQL document-oriented database. Examples: MongoDB, CouchDB, RavenDB GraphDatabase: - is_a: Database + is_a: DatabaseSystem class_uri: hc:GraphDatabase description: | Graph database for relationship-heavy data. Examples: Neo4j, Amazon Neptune, JanusGraph, Blazegraph SearchIndex: - is_a: Database + is_a: DatabaseSystem class_uri: hc:SearchIndex description: | Full-text search and indexing system. Examples: Solr, Elasticsearch, OpenSearch, Meilisearch TripleStore: - is_a: Database + is_a: DatabaseSystem class_uri: hc:TripleStore description: | RDF triple store for linked data. @@ -131,17 +132,19 @@ classes: description: | GraphQL query language API. - SPARQLEndpoint: + SPARQLProtocol: is_a: APIProtocol - class_uri: hc:SPARQLEndpoint + class_uri: hc:SPARQLProtocol description: | - SPARQL query endpoint for RDF data. + SPARQL query protocol for RDF data. + Note: For endpoint classification, use SPARQLEndpoint from DataServiceEndpointTypes. - OAIPMHEndpoint: + OAIPMHProtocol: is_a: APIProtocol - class_uri: hc:OAIPMHEndpoint + class_uri: hc:OAIPMHProtocol description: | OAI-PMH protocol for metadata harvesting. + Note: For endpoint classification, use OAIPMHEndpoint class. IIIFEndpoint: is_a: APIProtocol diff --git a/schemas/20251121/linkml/modules/classes/WebPortalTypes.yaml b/schemas/20251121/linkml/modules/classes/WebPortalTypes.yaml index 0b7a78c0e8..54fa07a8dc 100644 --- a/schemas/20251121/linkml/modules/classes/WebPortalTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/WebPortalTypes.yaml @@ -39,7 +39,8 @@ imports: - ../slots/linked_data_access - ../slots/portal_type_category - ../slots/portal_typical_domain - - ../slots/published_by + # - ../slots/published_by # ARCHIVED 2026-01-17 - migrated per Rule 53/56 + - ../slots/is_or_was_published_by # was: published_by - migrated per Rule 53/56 (2026-01-17) - ../slots/specificity_annotation - ../slots/is_or_was_superseded_by # was: succeeded_by - migrated per Rule 53/56 (2026-01-17) - ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17) @@ -1214,7 +1215,7 @@ classes: **LINKING**: - - `published_by`: The Custodian that published this dataset + - `is_or_was_published_by`: The Custodian that published this dataset - `sparql_endpoint`: LinkedDataHub providing semantic access @@ -1229,7 +1230,7 @@ classes: - dataset_title - download_endpoint - linked_data_access - - published_by + - is_or_was_published_by # was: published_by - migrated per Rule 53/56 (2026-01-17) - specificity_annotation - has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17) exact_mappings: diff --git a/schemas/20251121/linkml/modules/slots/allows_or_allowed.yaml b/schemas/20251121/linkml/modules/slots/allows_or_allowed.yaml index ae46512eda..44da855658 100644 --- a/schemas/20251121/linkml/modules/slots/allows_or_allowed.yaml +++ b/schemas/20251121/linkml/modules/slots/allows_or_allowed.yaml @@ -42,7 +42,7 @@ slots: conditions: "Personal research use only, no flash" ``` slot_uri: schema:amenityFeature - range: string + range: uriorcurie # Broadened from string per Rule 55 (2026-01-17) to resolve OWL ambiguous type multivalued: true exact_mappings: - schema:amenityFeature diff --git a/schemas/20251121/linkml/modules/slots/published_at.yaml b/schemas/20251121/linkml/modules/slots/archive/published_at_archived_20260117.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/published_at.yaml rename to schemas/20251121/linkml/modules/slots/archive/published_at_archived_20260117.yaml diff --git a/schemas/20251121/linkml/modules/slots/published_by.yaml b/schemas/20251121/linkml/modules/slots/archive/published_by_archived_20260117.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/published_by.yaml rename to schemas/20251121/linkml/modules/slots/archive/published_by_archived_20260117.yaml diff --git a/schemas/20251121/linkml/modules/slots/publisher.yaml b/schemas/20251121/linkml/modules/slots/archive/publisher_archived_20260117.yaml similarity index 100% rename from schemas/20251121/linkml/modules/slots/publisher.yaml rename to schemas/20251121/linkml/modules/slots/archive/publisher_archived_20260117.yaml diff --git a/schemas/20251121/linkml/modules/slots/deduction_percentage.yaml b/schemas/20251121/linkml/modules/slots/deduction_percentage.yaml new file mode 100644 index 0000000000..12de30334f --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/deduction_percentage.yaml @@ -0,0 +1,39 @@ +id: https://nde.nl/ontology/hc/slot/deduction_percentage +name: deduction_percentage_slot +title: Deduction Percentage Slot +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ +default_prefix: hc + +imports: + - linkml:types + +slots: + deduction_percentage: + slot_uri: hc:deductionPercentage + description: | + Percentage of donation amount that is tax-deductible. + + Values over 100 indicate enhanced cultural multipliers: + - 100: Standard full deduction (ANBI in NL, 501(c)(3) in US) + - 125: Cultural ANBI in Netherlands (100% + 25% cultural bonus) + - 66: French individual mécénat rate + + **USAGE**: + Used with TaxScheme class to document the tax benefit percentage + available to donors for contributions to heritage institutions. + range: integer + minimum_value: 0 + exact_mappings: + - schema:discount + annotations: + custodian_types: '["*"]' + custodian_types_rationale: Tax benefits apply to all heritage custodian types + specificity_score: 0.50 + specificity_rationale: Relevant for donation and fiscal queries + comments: + - "Integer percentage, typically 0-125" + - "Values >100 represent enhanced cultural multipliers" + - "Created 2026-01-17 for TaxScheme class per Rule 48" diff --git a/schemas/20251121/linkml/modules/slots/expiration_date.yaml b/schemas/20251121/linkml/modules/slots/expiration_date.yaml new file mode 100644 index 0000000000..09e7b03484 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/expiration_date.yaml @@ -0,0 +1,38 @@ +id: https://nde.nl/ontology/hc/slot/expiration_date +name: expiration_date_slot +title: Expiration Date Slot +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ +default_prefix: hc + +imports: + - linkml:types + +slots: + expiration_date: + slot_uri: schema:validThrough + description: | + Date when a status, registration, or scheme expires. + + **USAGE**: + Used with TaxScheme, AccreditationStatus, License, and similar + classes to document when the relevant status/registration expires. + + **NULL SEMANTICS**: + A null value typically indicates no expiration (indefinite validity) + or that expiration tracking is not applicable. + range: date + exact_mappings: + - schema:validThrough + close_mappings: + - schema:expires + annotations: + custodian_types: '["*"]' + custodian_types_rationale: All heritage custodians have dated statuses + specificity_score: 0.40 + specificity_rationale: Generic temporal slot applicable across many contexts + comments: + - "ISO 8601 date format (YYYY-MM-DD)" + - "Created 2026-01-17 for TaxScheme class per Rule 48" diff --git a/schemas/20251121/linkml/modules/slots/has_or_had_publisher.yaml b/schemas/20251121/linkml/modules/slots/has_or_had_publisher.yaml new file mode 100644 index 0000000000..0b53fe6960 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/has_or_had_publisher.yaml @@ -0,0 +1,52 @@ +id: https://nde.nl/ontology/hc/slot/has_or_had_publisher +name: has_or_had_publisher_slot +title: Has or Had Publisher Slot +description: | + Generic slot for publisher relationships following RiC-O temporal naming convention. + + CREATED 2026-01-17 per Rule 53/56: Replaces publisher string slot. + Provides structured publisher representation via Publisher class. + + Supports: + - Institutional publishers (museums, universities) + - Commercial publishers (academic presses, trade publishers) + - Self-published works +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + dcterms: http://purl.org/dc/terms/ + schema: http://schema.org/ +imports: + - linkml:types +default_prefix: hc +slots: + has_or_had_publisher: + slot_uri: dcterms:publisher + description: | + The publisher of a publication or document. + + MIGRATED from publisher slot per Rule 53/56 (2026-01-17). + Uses Publisher class for structured representation including: + - Publisher name + - Publisher type (commercial, institutional, self-published) + - Location + - Identifiers (ISNI, Wikidata) + range: Publisher + multivalued: true + inlined: true + exact_mappings: + - dcterms:publisher + - schema:publisher + close_mappings: + - bf:provisionActivity + examples: + - value: + has_or_had_label: Rijksmuseum + publisher_type: institutional + has_or_had_location: Amsterdam + description: Museum as institutional publisher + - value: + has_or_had_label: Yale University Press + publisher_type: commercial + has_or_had_location: New Haven + description: Academic press publisher diff --git a/schemas/20251121/linkml/modules/slots/includes_or_included.yaml b/schemas/20251121/linkml/modules/slots/includes_or_included.yaml index 0de986c0ac..be62ae3e6b 100644 --- a/schemas/20251121/linkml/modules/slots/includes_or_included.yaml +++ b/schemas/20251121/linkml/modules/slots/includes_or_included.yaml @@ -49,7 +49,7 @@ slots: - `rico:includes` - RiC-O inclusion relationship - `org:hasUnit` - W3C ORG subunit relationship - `dcterms:hasPart` - Dublin Core part-whole relationship - range: string + range: uriorcurie # Broadened from string per Rule 55 (2026-01-17) to resolve OWL ambiguous type multivalued: true slot_uri: rico:includes exact_mappings: diff --git a/schemas/20251121/linkml/modules/slots/is_or_was_published_at.yaml b/schemas/20251121/linkml/modules/slots/is_or_was_published_at.yaml new file mode 100644 index 0000000000..2b377336a7 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/is_or_was_published_at.yaml @@ -0,0 +1,63 @@ +id: https://nde.nl/ontology/hc/slot/is_or_was_published_at +name: is_or_was_published_at_slot +title: Is or Was Published At Slot +description: | + Generic slot for publication events following RiC-O temporal naming convention. + + CREATED 2026-01-17 per Rule 53/56: Replaces published_at datetime slot. + Provides structured publication event representation via PublicationEvent class. + + Supports: + - Social media posts with precise timestamps + - Documents with publication dates + - Historical publications with uncertain dates (fuzzy boundaries) +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + dcterms: http://purl.org/dc/terms/ + schema: http://schema.org/ + crm: http://www.cidoc-crm.org/cidoc-crm/ + prov: http://www.w3.org/ns/prov# +imports: + - linkml:types + - ../classes/PublicationEvent +default_prefix: hc +slots: + is_or_was_published_at: + slot_uri: dcterms:created + description: | + Publication event for content/document. + + MIGRATED from published_at slot per Rule 53/56 (2026-01-17). + Renamed to follow RiC-O temporal naming conventions (Rule 39). + + Uses PublicationEvent class for structured representation including: + - Temporal extent (precise or fuzzy via TimeSpan) + - Optional event label (e.g., "First Edition") + - Event identifier for tracking + + **For simple timestamps**: Create PublicationEvent with all four + TimeSpan boundaries set to the same instant. + range: PublicationEvent + multivalued: false + inlined: true + exact_mappings: + - dcterms:created + - schema:datePublished + close_mappings: + - crm:P4_has_time-span + - prov:atTime + examples: + - value: + temporal_extent: + begin_of_the_begin: "2025-07-30T18:05:15Z" + end_of_the_begin: "2025-07-30T18:05:15Z" + begin_of_the_end: "2025-07-30T18:05:15Z" + end_of_the_end: "2025-07-30T18:05:15Z" + description: Social media post with precise timestamp + - value: + temporal_extent: + begin_of_the_begin: "1892-01-01T00:00:00Z" + end_of_the_end: "1892-12-31T00:00:00Z" + has_or_had_label: "Original Edition" + description: Historical publication with uncertain date diff --git a/schemas/20251121/linkml/modules/slots/is_or_was_published_by.yaml b/schemas/20251121/linkml/modules/slots/is_or_was_published_by.yaml new file mode 100644 index 0000000000..1e72ba0243 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/is_or_was_published_by.yaml @@ -0,0 +1,51 @@ +id: https://nde.nl/ontology/hc/slot/is_or_was_published_by +name: is_or_was_published_by_slot +title: Is or Was Published By Slot +description: | + Generic slot for dataset-to-custodian publisher relationships. + + CREATED 2026-01-17 per Rule 53/56: Renamed from published_by to follow + RiC-O temporal naming conventions (Rule 39). + + Retains Custodian range (not Publisher) as this slot is specifically for + datasets published by heritage institutions, not commercial publications. + + Supports: + - Dataset registry entries published by custodians + - Linked open data published by heritage institutions + - Digital collections made available by custodians +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + dcterms: http://purl.org/dc/terms/ + dcat: http://www.w3.org/ns/dcat# + schema: http://schema.org/ +imports: + - linkml:types + - ../classes/Custodian +default_prefix: hc +slots: + is_or_was_published_by: + slot_uri: dcterms:publisher + description: | + The Custodian (heritage institution) that published this dataset. + Links the dataset to its source institution. + + MIGRATED from published_by slot per Rule 53/56 (2026-01-17). + Renamed to follow RiC-O temporal naming conventions (Rule 39). + + Note: Uses Custodian class (not Publisher) because this slot is + specifically for datasets published by heritage institutions. + For commercial publications, use has_or_had_publisher instead. + range: Custodian + inlined: false + exact_mappings: + - dcterms:publisher + - dcat:publisher + close_mappings: + - schema:publisher + examples: + - value: "ghcid:NL-NH-AMS-M-RM" + description: Rijksmuseum publishing a dataset to national registry + - value: "ghcid:NL-ZH-DHA-A-NA" + description: Nationaal Archief publishing linked open data diff --git a/schemas/20251121/linkml/modules/slots/jurisdiction.yaml b/schemas/20251121/linkml/modules/slots/jurisdiction.yaml index 421be60a74..8b10d41b7e 100644 --- a/schemas/20251121/linkml/modules/slots/jurisdiction.yaml +++ b/schemas/20251121/linkml/modules/slots/jurisdiction.yaml @@ -32,7 +32,7 @@ description: 'Legal/administrative jurisdiction where an entity operates or is r slots: jurisdiction: slot_uri: gleif_base:hasCoverageArea - range: Jurisdiction + range: uriorcurie # Broadened per Rule 55 (2026-01-17) to resolve OWL ambiguous type required: false multivalued: false inlined: true diff --git a/schemas/20251121/linkml/modules/slots/regulatory_body.yaml b/schemas/20251121/linkml/modules/slots/regulatory_body.yaml new file mode 100644 index 0000000000..b6889c94fb --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/regulatory_body.yaml @@ -0,0 +1,43 @@ +id: https://nde.nl/ontology/hc/slot/regulatory_body +name: regulatory_body_slot +title: Regulatory Body Slot +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ + org: http://www.w3.org/ns/org# +default_prefix: hc + +imports: + - linkml:types + +slots: + regulatory_body: + slot_uri: schema:provider + description: | + Name of the government agency or regulatory body administering a scheme, + license, or registration. + + **EXAMPLES**: + - Belastingdienst (Dutch Tax Authority) + - HMRC (UK tax authority) + - IRS (US Internal Revenue Service) + - RCE (Rijksdienst voor het Cultureel Erfgoed) + - Charity Commission (UK) + + **USAGE**: + Used with TaxScheme, AccreditationStatus, and similar classes + to document which authority administers the relevant program. + range: string + exact_mappings: + - schema:provider + close_mappings: + - org:Organization + annotations: + custodian_types: '["*"]' + custodian_types_rationale: All heritage custodians interact with regulatory bodies + specificity_score: 0.45 + specificity_rationale: Relevant for compliance and governance queries + comments: + - "String value with name of regulatory body" + - "Created 2026-01-17 for TaxScheme class per Rule 48" diff --git a/schemas/20251121/linkml/modules/slots/slot_fixes.yaml b/schemas/20251121/linkml/modules/slots/slot_fixes.yaml index da5a86b71e..cc86de7426 100644 --- a/schemas/20251121/linkml/modules/slots/slot_fixes.yaml +++ b/schemas/20251121/linkml/modules/slots/slot_fixes.yaml @@ -6794,18 +6794,21 @@ fixes: timestamp: '2026-01-17T20:10:00Z' session: session-2026-01-17-slot-migration notes: | - WELL_STRUCTURED_NO_MIGRATION_NEEDED: publisher slot already has proper - ontology alignment: - - slot_uri: dcterms:publisher - - exact_mappings: dcterms:publisher, schema:publisher - - Range: string (appropriate for publisher names) + FULLY_MIGRATED (2026-01-17): - Creating a Publisher class would be appropriate for structured publisher - entities with metadata, but current string usage is correct for simple - publisher name references in catalogs. + Migration executed per Rule 53/56: + - Created: modules/slots/has_or_had_publisher.yaml (dcterms:publisher alignment) + - Created: modules/classes/Publisher.yaml (schema:Organization class) + - Updated: FindingAid.yaml (import, slots, slot_usage with 2 examples) + - Updated: ExhibitionCatalog.yaml (import, slots, slot_usage with 3 examples, 3 class examples) + - Archived: modules/slots/archive/publisher_archived_20260117.yaml - Used in: FindingAid.yaml, ExhibitionCatalog.yaml - Retaining with existing dcterms:publisher alignment. + Publisher class supports: + - has_or_had_label (required) - publisher name + - has_or_had_type - institutional/commercial/academic/government + - has_or_had_location - city + - has_or_had_identifier - ISNI, Wikidata + - has_or_had_url - official website - original_slot_id: https://nde.nl/ontology/hc/slot/published_by revision: - label: is_or_was_published_by @@ -6814,19 +6817,23 @@ fixes: type: class processed: status: true - timestamp: '2026-01-17T20:10:00Z' + timestamp: '2026-01-17T21:30:00Z' session: session-2026-01-17-slot-migration notes: | - WELL_STRUCTURED_ALREADY_USES_CLASS: published_by slot already has: - - slot_uri: dcterms:publisher - - Range: Custodian (ALREADY using a class for structured publisher!) - - inlined: false (reference to Custodian entity) + FULLY_MIGRATED: Renamed published_by to is_or_was_published_by per Rule 39/53/56. - This is already the target pattern - linking to a class rather than string. - No migration needed as it already uses Custodian as the publisher class. + Slot name changed to follow RiC-O temporal naming conventions (Rule 39). + Range RETAINED as Custodian (not Publisher) because this slot is specifically + for datasets published by heritage institutions, not commercial publications. - Used in: WebPortalTypes.yaml - Retaining with existing Custodian range. + Files changed: + - CREATED: modules/slots/is_or_was_published_by.yaml + - UPDATED: modules/classes/WebPortalTypes.yaml (import + 2 slot references) + - ARCHIVED: modules/slots/archive/published_by_archived_20260117.yaml + + Note: Revision specified Publisher class but Custodian is semantically correct + for dataset→institution relationships. Publisher class is used separately for + has_or_had_publisher (commercial/institutional publication publishers). - original_slot_id: https://nde.nl/ontology/hc/slot/published_at revision: - label: is_or_was_published_at