From 98c42bf272b82c9050dbde8895d0fe9c7be5225f Mon Sep 17 00:00:00 2001 From: kempersc Date: Wed, 7 Jan 2026 12:32:59 +0100 Subject: [PATCH] Fix LinkML URI conflicts and generate RDF outputs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix scope_note → finding_aid_scope_note in FindingAid.yaml - Remove duplicate wikidata_entity slot from CustodianType.yaml (import instead) - Remove duplicate rico_record_set_type from class_metadata_slots.yaml - Fix range types for equals_string compatibility (uriorcurie → string) - Move class names from close_mappings to see_also in 10 RecordSetTypes files - Generate all RDF formats: OWL, N-Triples, RDF/XML, N3, JSON-LD context - Sync schemas to frontend/public/schemas/ Files: 1,151 changed (includes prior CustodianType migration) --- .opencode/RICO_RECORDSETTYPE_ALIGNMENT.md | 143 + ...ot-centralization-and-semantic-uri-rule.md | 317 + AGENTS.md | 38 +- .../.tmp/tsconfig.app.tsbuildinfo | 2 +- apps/archief-assistent/node_modules/@types/d3 | 1 + apps/archief-assistent/node_modules/d3 | 1 + .../node_modules/lucide-react | 1 + apps/archief-assistent/package.json | 5 +- .../src/components/DebugPanel.css | 675 ++ .../src/components/DebugPanel.tsx | 1455 +++ apps/archief-assistent/src/pages/ChatPage.tsx | 50 +- backend/rag/__init__.py | 24 +- backend/rag/dspy_heritage_rag.py | 202 +- backend/rag/event_retriever.py | 393 + backend/rag/semantic_router.py | 372 + backend/rag/temporal_intent.py | 311 + backend/rag/temporal_resolver.py | 258 + backend/rag/test_semantic_routing.py | 493 + backend/rag/test_temporal_intent.py | 527 + data/sparql_templates.yaml | 394 + .../01_graphrag_design_patterns.md | 3360 ++++++ .../02_comparison_matrix.md | 91 + .../03_implementation_guide.md | 855 ++ .../04_temporal_semantic_hypergraph.md | 1441 +++ .../linkml/01_custodian_name_modular.yaml | 105 +- .../ArchiveTypeEnum.yaml.archived_20250105 | 922 ++ ...dianPrimaryTypeEnum.yaml.archived_20260105 | 204 + .../20251121/linkml/archive/enums/README.md | 1 + .../linkml/instances/enums/_index.yaml | 30 +- ...odian_primary_type.yaml.archived_20260105} | 0 .../schemas/20251121/linkml/manifest.json | 7242 ++++++------ .../modules/classes/AcademicArchive.yaml | 47 +- .../AcademicArchiveRecordSetTypes.yaml | 12 +- .../classes/AdvertisingRadioArchive.yaml | 2 +- ...AdvertisingRadioArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/AnimalSoundArchive.yaml | 4 +- .../AnimalSoundArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/ArchitecturalArchive.yaml | 4 +- .../ArchitecturalArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/ArchivalLibrary.yaml | 2 +- .../modules/classes/ArchiveAssociation.yaml | 2 +- .../modules/classes/ArchiveNetwork.yaml | 6 +- .../ArchiveOfInternationalOrganization.yaml | 2 +- ...ternationalOrganizationRecordSetTypes.yaml | 6 +- .../classes/ArchiveOrganizationType.yaml | 2 +- .../classes/ArchivesForBuildingRecords.yaml | 2 +- ...hivesForBuildingRecordsRecordSetTypes.yaml | 4 +- .../modules/classes/ArchivesRegionales.yaml | 2 +- .../ArchivesRegionalesRecordSetTypes.yaml | 2 +- .../linkml/modules/classes/ArtArchive.yaml | 2 +- .../classes/ArtArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/AudiovisualArchive.yaml | 2 +- .../AudiovisualArchiveRecordSetTypes.yaml | 10 +- .../linkml/modules/classes/BankArchive.yaml | 20 +- .../classes/BankArchiveRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/Bildstelle.yaml | 4 +- .../modules/classes/BioCustodianType.yaml | 2 +- .../modules/classes/BiologicalObject.yaml | 2 +- .../modules/classes/CantonalArchive.yaml | 2 +- .../CantonalArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/CastCollection.yaml | 2 +- .../modules/classes/CathedralArchive.yaml | 2 +- .../CathedralArchiveRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/ChurchArchive.yaml | 34 - .../classes/ChurchArchiveRecordSetTypes.yaml | 18 +- .../modules/classes/ChurchArchiveSweden.yaml | 2 +- .../ChurchArchiveSwedenRecordSetTypes.yaml | 16 +- .../linkml/modules/classes/Cinematheque.yaml | 4 +- .../modules/classes/ClimateArchive.yaml | 2 +- .../classes/ClimateArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/CollectingArchives.yaml | 6 +- .../CollectingArchivesRecordSetTypes.yaml | 4 +- .../linkml/modules/classes/Collection.yaml | 103 +- .../modules/classes/ComarcalArchive.yaml | 2 +- .../ComarcalArchiveRecordSetTypes.yaml | 10 +- .../classes/CommercialOrganizationType.yaml | 4 +- .../modules/classes/CommunityArchive.yaml | 2 +- .../CommunityArchiveRecordSetTypes.yaml | 6 +- .../classes/CompanyArchiveRecordSetTypes.yaml | 16 +- .../modules/classes/CompanyArchives.yaml | 4 + .../modules/classes/ConservationRecord.yaml | 2 +- .../modules/classes/CountyRecordOffice.yaml | 4 +- .../linkml/modules/classes/CourtRecords.yaml | 4 +- .../modules/classes/CulturalInstitution.yaml | 2 +- .../modules/classes/CurationActivity.yaml | 2 +- .../modules/classes/CurrentArchive.yaml | 51 +- .../classes/CurrentArchiveRecordSetTypes.yaml | 2 +- .../modules/classes/CustodianArchive.yaml | 64 +- .../CustodianArchiveRecordSetTypes.yaml | 2 +- .../modules/classes/CustodianObservation.yaml | 3 +- .../linkml/modules/classes/CustodianType.yaml | 3 +- .../linkml/modules/classes/DarkArchive.yaml | 40 +- .../classes/DarkArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/DepartmentalArchives.yaml | 8 +- .../DepartmentalArchivesRecordSetTypes.yaml | 4 +- .../modules/classes/DepositArchive.yaml | 66 +- .../classes/DepositArchiveRecordSetTypes.yaml | 2 +- .../modules/classes/DigitalArchive.yaml | 52 +- .../classes/DigitalArchiveRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/DimArchives.yaml | 46 +- .../classes/DimArchivesRecordSetTypes.yaml | 2 +- .../modules/classes/DiocesanArchive.yaml | 64 +- .../DiocesanArchiveRecordSetTypes.yaml | 6 +- .../classes/DistrictArchiveGermany.yaml | 2 +- .../DistrictArchiveGermanyRecordSetTypes.yaml | 4 +- .../modules/classes/DistritalArchive.yaml | 6 +- .../DistritalArchiveRecordSetTypes.yaml | 2 +- .../modules/classes/DocumentationCentre.yaml | 4 +- .../modules/classes/EconomicArchive.yaml | 6 +- .../EconomicArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/EducationCenter.yaml | 2 +- .../classes/EducationProviderType.yaml | 2 +- .../modules/classes/ExhibitedObject.yaml | 2 +- .../linkml/modules/classes/Exhibition.yaml | 2 +- .../modules/classes/ExhibitionCatalog.yaml | 2 +- .../modules/classes/FeatureCustodianType.yaml | 2 +- .../linkml/modules/classes/FeaturePlace.yaml | 4 +- .../linkml/modules/classes/FilmArchive.yaml | 38 +- .../classes/FilmArchiveRecordSetTypes.yaml | 18 +- .../linkml/modules/classes/FindingAid.yaml | 4 +- .../linkml/modules/classes/Foremalarkiv.yaml | 4 +- .../modules/classes/FoundationArchive.yaml | 6 +- .../FoundationArchiveRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/FreeArchive.yaml | 6 +- .../classes/FreeArchiveRecordSetTypes.yaml | 2 +- .../classes/FrenchPrivateArchives.yaml | 4 +- .../FrenchPrivateArchivesRecordSetTypes.yaml | 2 +- .../linkml/modules/classes/GalleryType.yaml | 2 +- .../modules/classes/GovernmentArchive.yaml | 6 +- .../GovernmentArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/HeritageSocietyType.yaml | 4 +- .../modules/classes/HistoricalArchive.yaml | 6 +- .../HistoricalArchiveRecordSetTypes.yaml | 10 +- .../modules/classes/HolySacredSiteType.yaml | 2 +- .../modules/classes/HospitalArchive.yaml | 38 +- .../HospitalArchiveRecordSetTypes.yaml | 16 +- .../linkml/modules/classes/HouseArchive.yaml | 6 +- .../classes/HouseArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/IconographicArchives.yaml | 6 +- .../IconographicArchivesRecordSetTypes.yaml | 4 +- .../modules/classes/InformationCarrier.yaml | 2 +- .../modules/classes/InstitutionalArchive.yaml | 6 +- .../InstitutionalArchiveRecordSetTypes.yaml | 4 +- .../classes/InstitutionalRepository.yaml | 2 +- .../classes/IntangibleHeritageEvent.yaml | 2 +- .../classes/IntangibleHeritageForm.yaml | 2 +- .../classes/IntangibleHeritageGroupType.yaml | 2 +- .../IntangibleHeritagePerformance.yaml | 2 +- .../linkml/modules/classes/JointArchives.yaml | 6 +- .../classes/JointArchivesRecordSetTypes.yaml | 2 +- .../linkml/modules/classes/LGBTArchive.yaml | 6 +- .../classes/LGBTArchiveRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/LibraryType.yaml | 2 +- .../linkml/modules/classes/LightArchives.yaml | 6 +- .../classes/LightArchivesRecordSetTypes.yaml | 2 +- .../modules/classes/LiteraryArchive.yaml | 6 +- .../LiteraryArchiveRecordSetTypes.yaml | 12 +- .../20251121/linkml/modules/classes/Loan.yaml | 2 +- .../classes/LocalGovernmentArchive.yaml | 6 +- .../LocalGovernmentArchiveRecordSetTypes.yaml | 6 +- .../LocalHeritageInstitutionSweden.yaml | 2 +- .../modules/classes/LocalHistoryArchive.yaml | 6 +- .../LocalHistoryArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/LocationLibrary.yaml | 2 +- .../modules/classes/MailingListArchive.yaml | 6 +- .../MailingListArchiveRecordSetTypes.yaml | 4 +- .../linkml/modules/classes/MediaArchive.yaml | 6 +- .../classes/MediaArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/MilitaryArchive.yaml | 38 +- .../MilitaryArchiveRecordSetTypes.yaml | 16 +- .../modules/classes/MixedCustodianType.yaml | 2 +- .../modules/classes/MonasteryArchive.yaml | 4 +- .../MonasteryArchiveRecordSetTypes.yaml | 12 +- .../modules/classes/MunicipalArchive.yaml | 38 +- .../MunicipalArchiveRecordSetTypes.yaml | 12 +- .../linkml/modules/classes/MuseumArchive.yaml | 6 +- .../classes/MuseumArchiveRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/MuseumType.yaml | 2 +- .../linkml/modules/classes/MusicArchive.yaml | 6 +- .../classes/MusicArchiveRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/Nachlass.yaml | 4 +- .../modules/classes/NationalArchives.yaml | 6 +- .../NationalArchivesRecordSetTypes.yaml | 8 +- .../classes/NewspaperClippingsArchive.yaml | 4 +- ...wspaperClippingsArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/NobilityArchive.yaml | 6 +- .../NobilityArchiveRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/NonProfitType.yaml | 4 +- .../modules/classes/NotarialArchive.yaml | 6 +- .../NotarialArchiveRecordSetTypes.yaml | 4 +- .../classes/OfficialInstitutionType.yaml | 2 +- .../modules/classes/OnlineNewsArchive.yaml | 6 +- .../OnlineNewsArchiveRecordSetTypes.yaml | 4 +- .../linkml/modules/classes/ParishArchive.yaml | 4 +- .../classes/ParishArchiveRecordSetTypes.yaml | 18 +- .../classes/ParliamentaryArchives.yaml | 4 +- .../ParliamentaryArchivesRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/PartyArchive.yaml | 6 +- .../classes/PartyArchiveRecordSetTypes.yaml | 4 +- .../classes/PerformingArtsArchive.yaml | 6 +- .../PerformingArtsArchiveRecordSetTypes.yaml | 12 +- .../classes/PersonalCollectionType.yaml | 2 +- .../modules/classes/PersonalLibrary.yaml | 2 +- .../linkml/modules/classes/PhotoArchive.yaml | 6 +- .../classes/PhotoArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/PhotographCollection.yaml | 2 +- .../modules/classes/PoliticalArchive.yaml | 6 +- .../PoliticalArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/PostcustodialArchive.yaml | 6 +- .../PostcustodialArchiveRecordSetTypes.yaml | 2 +- .../linkml/modules/classes/PressArchive.yaml | 6 +- .../classes/PressArchiveRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/PrintRoom.yaml | 4 +- .../modules/classes/ProvenanceEvent.yaml | 2 +- .../modules/classes/ProvincialArchive.yaml | 6 +- .../ProvincialArchiveRecordSetTypes.yaml | 6 +- .../classes/ProvincialHistoricalArchive.yaml | 2 +- ...incialHistoricalArchiveRecordSetTypes.yaml | 2 +- .../linkml/modules/classes/PublicArchive.yaml | 6 +- .../classes/PublicArchiveRecordSetTypes.yaml | 6 +- .../classes/PublicArchivesInFrance.yaml | 4 +- .../PublicArchivesInFranceRecordSetTypes.yaml | 2 +- .../linkml/modules/classes/RadioArchive.yaml | 6 +- .../classes/RadioArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/RegionalArchive.yaml | 38 +- .../RegionalArchiveRecordSetTypes.yaml | 12 +- .../classes/RegionalArchivesInIceland.yaml | 4 +- ...gionalArchivesInIcelandRecordSetTypes.yaml | 2 +- .../classes/RegionalEconomicArchive.yaml | 4 +- ...RegionalEconomicArchiveRecordSetTypes.yaml | 2 +- .../classes/RegionalStateArchives.yaml | 4 +- .../RegionalStateArchivesRecordSetTypes.yaml | 2 +- .../modules/classes/ReligiousArchive.yaml | 4 +- .../ReligiousArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/ResearchCenter.yaml | 2 +- .../classes/ResearchOrganizationType.yaml | 4 +- .../linkml/modules/classes/SchoolArchive.yaml | 6 +- .../classes/SchoolArchiveRecordSetTypes.yaml | 12 +- .../modules/classes/ScientificArchive.yaml | 6 +- .../ScientificArchiveRecordSetTypes.yaml | 6 +- .../classes/SectorOfArchivesInSweden.yaml | 4 +- ...ectorOfArchivesInSwedenRecordSetTypes.yaml | 2 +- .../modules/classes/SecurityArchives.yaml | 6 +- .../SecurityArchivesRecordSetTypes.yaml | 4 +- .../linkml/modules/classes/SoundArchive.yaml | 4 +- .../classes/SoundArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/SpecialCollection.yaml | 2 +- .../modules/classes/SpecializedArchive.yaml | 4 +- .../SpecializedArchiveRecordSetTypes.yaml | 2 +- .../classes/SpecializedArchivesCzechia.yaml | 2 +- ...cializedArchivesCzechiaRecordSetTypes.yaml | 2 +- .../linkml/modules/classes/StateArchives.yaml | 4 +- .../classes/StateArchivesRecordSetTypes.yaml | 8 +- .../modules/classes/StateArchivesSection.yaml | 4 +- .../StateArchivesSectionRecordSetTypes.yaml | 2 +- .../modules/classes/StateDistrictArchive.yaml | 4 +- .../StateDistrictArchiveRecordSetTypes.yaml | 2 +- .../classes/StateRegionalArchiveCzechia.yaml | 2 +- ...eRegionalArchiveCzechiaRecordSetTypes.yaml | 8 +- .../classes/TasteScentHeritageType.yaml | 2 +- .../modules/classes/TelevisionArchive.yaml | 4 +- .../TelevisionArchiveRecordSetTypes.yaml | 6 +- .../classes/TentativeWorldHeritageSite.yaml | 2 +- .../modules/classes/TradeUnionArchive.yaml | 38 +- .../TradeUnionArchiveRecordSetTypes.yaml | 17 +- .../modules/classes/UniversityArchive.yaml | 4 +- .../UniversityArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/UnspecifiedType.yaml | 2 +- .../linkml/modules/classes/Vereinsarchiv.yaml | 4 +- .../linkml/modules/classes/Verlagsarchiv.yaml | 4 +- .../modules/classes/VirtualMapLibrary.yaml | 2 +- .../linkml/modules/classes/WebArchive.yaml | 4 +- .../classes/WebArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/WomensArchives.yaml | 4 +- .../classes/WomensArchivesRecordSetTypes.yaml | 6 +- .../modules/classes/WorldHeritageSite.yaml | 2 +- .../linkml/modules/slots/access_policy.yaml | 35 +- .../modules/slots/access_policy_ref.yaml | 28 + .../modules/slots/access_restrictions.yaml | 15 +- .../modules/slots/accession_number.yaml | 18 +- .../modules/slots/acquisition_date.yaml | 18 +- .../modules/slots/acquisition_method.yaml | 19 +- .../modules/slots/acquisition_source.yaml | 28 + .../linkml/modules/slots/activity_type.yaml | 15 +- .../modules/slots/affected_by_event.yaml | 6 +- .../linkml/modules/slots/affected_units.yaml | 7 +- .../modules/slots/affects_organization.yaml | 70 +- .../linkml/modules/slots/affiliation.yaml | 7 +- .../20251121/linkml/modules/slots/age.yaml | 136 +- .../linkml/modules/slots/agent_name.yaml | 10 +- .../linkml/modules/slots/agent_type.yaml | 13 +- .../linkml/modules/slots/allocated_by.yaml | 60 +- .../linkml/modules/slots/allocates.yaml | 56 +- .../linkml/modules/slots/allocation_date.yaml | 50 +- .../modules/slots/also_identifies_name.yaml | 64 +- .../modules/slots/alternative_names.yaml | 30 +- .../slots/alternative_observed_names.yaml | 10 +- .../linkml/modules/slots/altitude.yaml | 17 +- .../linkml/modules/slots/api_endpoint.yaml | 18 +- .../modules/slots/appellation_language.yaml | 12 +- .../modules/slots/appellation_type.yaml | 13 +- .../modules/slots/appellation_value.yaml | 12 +- .../linkml/modules/slots/appellations.yaml | 40 +- .../linkml/modules/slots/approval_date.yaml | 10 +- .../modules/slots/archive_branches.yaml | 32 + .../modules/slots/archive_department_of.yaml | 32 + .../linkml/modules/slots/archived_at.yaml | 13 +- .../linkml/modules/slots/arrangement.yaml | 20 + .../modules/slots/arrangement_system.yaml | 16 +- .../slots/authentication_required.yaml | 24 +- .../modules/slots/auxiliary_places.yaml | 114 +- .../modules/slots/auxiliary_platforms.yaml | 131 +- .../linkml/modules/slots/base_surname.yaml | 51 +- .../modules/slots/begin_of_the_begin.yaml | 12 +- .../modules/slots/begin_of_the_end.yaml | 10 +- .../linkml/modules/slots/birth_date.yaml | 127 +- .../linkml/modules/slots/birth_place.yaml | 124 +- .../linkml/modules/slots/canonical_value.yaml | 56 +- .../linkml/modules/slots/capacity_items.yaml | 27 +- .../modules/slots/cataloging_standard.yaml | 43 +- .../modules/slots/change_rationale.yaml | 9 +- .../modules/slots/circumstances_of_death.yaml | 58 +- .../20251121/linkml/modules/slots/city.yaml | 26 +- .../linkml/modules/slots/claim_id.yaml | 15 +- .../linkml/modules/slots/claim_type.yaml | 17 +- .../linkml/modules/slots/claim_value.yaml | 17 +- .../modules/slots/class_metadata_slots.yaml | 62 +- .../modules/slots/collection_description.yaml | 16 +- .../modules/slots/collection_focus.yaml | 28 +- .../linkml/modules/slots/collection_id.yaml | 22 + .../linkml/modules/slots/collection_name.yaml | 23 +- .../modules/slots/collection_scope.yaml | 20 +- .../linkml/modules/slots/collection_size.yaml | 34 +- .../linkml/modules/slots/collection_type.yaml | 26 +- .../modules/slots/collection_type_ref.yaml | 31 + .../collections_under_responsibility.yaml | 217 +- .../linkml/modules/slots/confidence.yaml | 17 +- .../modules/slots/confidence_method.yaml | 10 +- .../modules/slots/confidence_score.yaml | 10 +- .../modules/slots/confidence_value.yaml | 10 +- .../linkml/modules/slots/conflict_status.yaml | 153 +- .../modules/slots/conservation_lab.yaml | 10 +- .../linkml/modules/slots/contact.yaml | 6 +- .../linkml/modules/slots/contact_email.yaml | 11 +- .../linkml/modules/slots/contact_point.yaml | 13 +- .../linkml/modules/slots/content_hash.yaml | 40 +- .../linkml/modules/slots/cost_usd.yaml | 16 +- .../linkml/modules/slots/country.yaml | 37 +- .../linkml/modules/slots/created.yaml | 16 +- .../linkml/modules/slots/creator.yaml | 16 +- .../linkml/modules/slots/css_selector.yaml | 15 +- .../modules/slots/curation_activities.yaml | 28 + .../modules/slots/custodial_history.yaml | 26 + .../linkml/modules/slots/custodian_names.yaml | 10 +- .../modules/slots/custodian_observations.yaml | 12 +- .../linkml/modules/slots/custodian_type.yaml | 256 +- .../linkml/modules/slots/custodians.yaml | 10 +- .../modules/slots/data_license_policy.yaml | 25 +- .../modules/slots/data_service_endpoints.yaml | 16 +- .../20251121/linkml/modules/slots/date.yaml | 21 +- .../linkml/modules/slots/date_of_death.yaml | 69 +- .../linkml/modules/slots/death_place.yaml | 145 +- .../modules/slots/defined_by_standard.yaml | 53 +- .../linkml/modules/slots/deliverables.yaml | 21 +- .../modules/slots/derived_from_entity.yaml | 47 +- .../linkml/modules/slots/description.yaml | 29 +- .../modules/slots/digital_platform.yaml | 34 +- .../modules/slots/digital_surrogate_url.yaml | 23 + .../modules/slots/digitization_status.yaml | 30 +- .../modules/slots/dissolution_date.yaml | 10 +- .../modules/slots/documentation_source.yaml | 7 +- .../modules/slots/documentation_url.yaml | 12 +- .../linkml/modules/slots/effective_date.yaml | 37 +- .../modules/slots/embargo_end_date.yaml | 8 +- .../linkml/modules/slots/emic_name.yaml | 21 +- .../linkml/modules/slots/encompasses.yaml | 75 +- .../modules/slots/encompassing_body.yaml | 56 +- .../linkml/modules/slots/end_date.yaml | 24 +- .../modules/slots/end_of_the_begin.yaml | 10 +- .../linkml/modules/slots/end_of_the_end.yaml | 12 +- .../linkml/modules/slots/ended_at_time.yaml | 8 +- .../modules/slots/endorsement_source.yaml | 8 +- .../linkml/modules/slots/event_date.yaml | 11 +- .../modules/slots/event_description.yaml | 9 +- .../linkml/modules/slots/event_id.yaml | 8 +- .../linkml/modules/slots/event_type.yaml | 25 +- .../linkml/modules/slots/exhibition_type.yaml | 21 +- .../linkml/modules/slots/expertise_areas.yaml | 6 +- .../modules/slots/exposed_via_portal.yaml | 54 +- .../modules/slots/exposes_collections.yaml | 62 +- .../20251121/linkml/modules/slots/extent.yaml | 18 +- .../linkml/modules/slots/extent_items.yaml | 27 + .../modules/slots/external_identifiers.yaml | 16 +- .../modules/slots/extraction_confidence.yaml | 14 +- .../modules/slots/extraction_metadata.yaml | 57 +- .../modules/slots/extraction_method.yaml | 17 +- .../modules/slots/extraction_notes.yaml | 16 +- .../modules/slots/extraction_timestamp.yaml | 17 +- .../linkml/modules/slots/feeds_portal.yaml | 59 +- .../linkml/modules/slots/finding_aids.yaml | 30 + .../linkml/modules/slots/follow_up_date.yaml | 25 +- .../linkml/modules/slots/funding_source.yaml | 25 +- .../linkml/modules/slots/gender_identity.yaml | 95 +- .../modules/slots/geographic_scope.yaml | 17 +- .../linkml/modules/slots/geonames_id.yaml | 40 +- .../linkml/modules/slots/given_name.yaml | 48 +- .../linkml/modules/slots/has_collection.yaml | 52 +- .../slots/has_derived_observation.yaml | 57 +- .../modules/slots/has_feature_type.yaml | 39 +- .../slots/has_geospatial_location.yaml | 53 +- .../linkml/modules/slots/has_member.yaml | 77 +- .../linkml/modules/slots/has_observation.yaml | 57 +- .../linkml/modules/slots/has_person_name.yaml | 169 +- .../modules/slots/has_person_observation.yaml | 97 +- .../modules/slots/has_suborganization.yaml | 61 +- .../linkml/modules/slots/has_unit.yaml | 67 +- .../20251121/linkml/modules/slots/hc_id.yaml | 35 +- .../modules/slots/holds_record_set_types.yaml | 107 +- .../linkml/modules/slots/html_file.yaml | 20 +- .../modules/slots/humidity_tolerance.yaml | 14 +- .../20251121/linkml/modules/slots/id.yaml | 10 +- .../linkml/modules/slots/identified_by.yaml | 63 +- .../modules/slots/identifier_format_used.yaml | 46 +- .../modules/slots/identifier_scheme.yaml | 8 +- .../modules/slots/identifier_value.yaml | 10 +- .../linkml/modules/slots/identifiers.yaml | 16 +- .../linkml/modules/slots/identifies.yaml | 54 +- .../modules/slots/identifies_custodian.yaml | 16 +- .../linkml/modules/slots/initials.yaml | 62 +- .../modules/slots/is_legal_status_of.yaml | 40 +- .../linkml/modules/slots/is_member_of.yaml | 81 +- .../20251121/linkml/modules/slots/isbn.yaml | 19 +- .../20251121/linkml/modules/slots/items.yaml | 26 + .../linkml/modules/slots/jurisdiction.yaml | 45 +- .../linkml/modules/slots/justification.yaml | 10 +- .../linkml/modules/slots/keywords.yaml | 15 +- .../linkml/modules/slots/language.yaml | 11 +- .../linkml/modules/slots/language_code.yaml | 10 +- .../modules/slots/legal_entity_type.yaml | 35 +- .../linkml/modules/slots/legal_form.yaml | 43 +- .../modules/slots/legal_jurisdiction.yaml | 40 +- .../linkml/modules/slots/legal_name.yaml | 26 +- .../slots/legal_responsibility_basis.yaml | 30 +- .../slots/legal_responsibility_end_date.yaml | 30 +- .../legal_responsibility_start_date.yaml | 30 +- .../linkml/modules/slots/legal_status.yaml | 19 +- .../modules/slots/linkedin_profile_path.yaml | 40 +- .../modules/slots/linkedin_profile_url.yaml | 42 +- .../linkml/modules/slots/located_at.yaml | 89 +- .../linkml/modules/slots/managed_by.yaml | 14 +- .../modules/slots/metadata_standards.yaml | 16 +- .../20251121/linkml/modules/slots/method.yaml | 8 +- .../modules/slots/mission_statement.yaml | 107 +- .../linkml/modules/slots/modified.yaml | 16 +- .../linkml/modules/slots/name_authority.yaml | 8 +- .../linkml/modules/slots/name_language.yaml | 16 +- .../modules/slots/name_validity_period.yaml | 16 +- .../20251121/linkml/modules/slots/notes.yaml | 17 +- .../modules/slots/oai_pmh_endpoint.yaml | 14 +- .../linkml/modules/slots/object_ref.yaml | 10 +- .../modules/slots/observation_context.yaml | 8 +- .../modules/slots/observation_date.yaml | 10 +- .../modules/slots/observation_source.yaml | 14 +- .../linkml/modules/slots/observed_name.yaml | 8 +- .../slots/offers_donation_schemes.yaml | 62 +- .../linkml/modules/slots/operated_by.yaml | 63 +- .../slots/organizational_change_events.yaml | 18 +- .../slots/organizational_structure.yaml | 80 +- .../modules/slots/parent_collection.yaml | 25 + .../modules/slots/parent_corporation.yaml | 33 + .../modules/slots/parent_custodian.yaml | 53 +- .../slots/part_of_custodian_collection.yaml | 24 + .../linkml/modules/slots/person_name.yaml | 6 +- .../linkml/modules/slots/place_language.yaml | 8 +- .../linkml/modules/slots/place_note.yaml | 8 +- .../linkml/modules/slots/platform_name.yaml | 16 +- .../linkml/modules/slots/platform_of.yaml | 41 +- .../linkml/modules/slots/platform_type.yaml | 44 +- .../linkml/modules/slots/policy_id.yaml | 18 +- .../linkml/modules/slots/policy_name.yaml | 18 +- .../modules/slots/portal_data_sources.yaml | 43 +- .../linkml/modules/slots/postal_code.yaml | 30 +- .../linkml/modules/slots/powered_by_cms.yaml | 11 +- .../linkml/modules/slots/preferred_label.yaml | 32 +- .../modules/slots/preservation_level.yaml | 18 +- .../20251121/linkml/modules/slots/price.yaml | 10 +- .../linkml/modules/slots/price_currency.yaml | 8 +- .../modules/slots/primary_register.yaml | 42 +- .../linkml/modules/slots/pronouns.yaml | 172 +- .../linkml/modules/slots/protocol.yaml | 28 +- .../linkml/modules/slots/provenance_note.yaml | 12 +- .../modules/slots/provenance_statement.yaml | 25 + .../linkml/modules/slots/provenance_text.yaml | 18 +- .../modules/slots/publication_date.yaml | 17 +- .../linkml/modules/slots/publisher.yaml | 15 +- .../modules/slots/reconstruction_method.yaml | 13 +- .../linkml/modules/slots/record_type.yaml | 10 +- .../modules/slots/refers_to_custodian.yaml | 32 +- .../modules/slots/refers_to_person.yaml | 131 +- .../modules/slots/registration_date.yaml | 8 +- .../modules/slots/response_formats.yaml | 22 +- .../modules/slots/responsible_agent.yaml | 11 +- .../slots/responsible_legal_entity.yaml | 34 +- .../linkml/modules/slots/resulting_units.yaml | 7 +- .../linkml/modules/slots/retrieval_agent.yaml | 15 +- .../linkml/modules/slots/retrieved_on.yaml | 34 +- .../linkml/modules/slots/revision_date.yaml | 11 +- .../linkml/modules/slots/rico_equivalent.yaml | 33 +- .../modules/slots/rico_record_set_type.yaml | 35 + .../linkml/modules/slots/role_end_date.yaml | 6 +- .../linkml/modules/slots/role_start_date.yaml | 6 +- .../linkml/modules/slots/role_title.yaml | 8 +- .../linkml/modules/slots/safeguarded_by.yaml | 58 +- .../linkml/modules/slots/security_level.yaml | 31 +- .../linkml/modules/slots/served_by.yaml | 11 +- .../modules/slots/serves_finding_aids.yaml | 50 +- .../linkml/modules/slots/service_area.yaml | 77 +- .../linkml/modules/slots/settlement.yaml | 44 +- .../20251121/linkml/modules/slots/source.yaml | 9 +- .../linkml/modules/slots/source_creator.yaml | 8 +- .../linkml/modules/slots/source_date.yaml | 8 +- .../linkml/modules/slots/source_type.yaml | 13 +- .../linkml/modules/slots/source_uri.yaml | 8 +- .../linkml/modules/slots/source_url.yaml | 40 +- .../linkml/modules/slots/sparql_endpoint.yaml | 14 +- .../linkml/modules/slots/staff_count.yaml | 8 +- .../linkml/modules/slots/staff_members.yaml | 8 +- .../linkml/modules/slots/staff_role.yaml | 36 +- .../modules/slots/standardized_name.yaml | 8 +- .../linkml/modules/slots/start_date.yaml | 24 +- .../linkml/modules/slots/started_at_time.yaml | 8 +- .../20251121/linkml/modules/slots/status.yaml | 18 +- .../modules/slots/storage_location.yaml | 18 +- .../linkml/modules/slots/street_address.yaml | 33 +- .../linkml/modules/slots/sub_collections.yaml | 26 + .../linkml/modules/slots/subject_areas.yaml | 25 + .../linkml/modules/slots/subregion.yaml | 36 +- .../linkml/modules/slots/superseded_by.yaml | 10 +- .../linkml/modules/slots/supersedes.yaml | 10 +- .../modules/slots/temperature_tolerance.yaml | 14 +- .../modules/slots/temporal_coverage.yaml | 20 +- .../linkml/modules/slots/temporal_extent.yaml | 16 +- .../modules/slots/time_of_destruction.yaml | 142 +- .../20251121/linkml/modules/slots/title.yaml | 16 +- .../linkml/modules/slots/type_scope.yaml | 223 +- .../linkml/modules/slots/typical_domains.yaml | 44 +- .../slots/typical_metadata_standards.yaml | 16 +- .../slots/typical_technical_features.yaml | 16 +- .../modules/slots/unit_affiliation.yaml | 8 +- .../linkml/modules/slots/unit_type.yaml | 6 +- .../20251121/linkml/modules/slots/used.yaml | 26 +- .../linkml/modules/slots/used_by.yaml | 61 +- .../linkml/modules/slots/used_sources.yaml | 8 +- .../linkml/modules/slots/valid_from.yaml | 35 +- .../linkml/modules/slots/valid_to.yaml | 10 +- .../linkml/modules/slots/variant_of_name.yaml | 27 +- .../modules/slots/was_derived_from.yaml | 19 +- .../modules/slots/was_generated_by.yaml | 28 +- .../linkml/modules/slots/was_revision_of.yaml | 11 +- .../linkml/modules/slots/web_claims.yaml | 63 +- .../linkml/modules/slots/website.yaml | 34 +- .../linkml/modules/slots/wikidata_entity.yaml | 25 + .../linkml/modules/slots/wikidata_id.yaml | 48 +- .../20251121/linkml/modules/slots/xpath.yaml | 16 +- frontend/src/components/query/DebugPanel.css | 263 + .../components/uml/SemanticDetailsPanel.css | 75 + .../components/uml/SemanticDetailsPanel.tsx | 35 + .../src/components/uml/UMLVisualization.css | 70 + .../src/components/uml/UMLVisualization.tsx | 141 +- .../src/lib/linkml/linkml-schema-service.ts | 262 +- frontend/src/pages/LinkMLViewerPage.css | 134 + frontend/src/pages/LinkMLViewerPage.tsx | 305 +- node_modules/.modules.yaml | 2 +- node_modules/.pnpm/lock.yaml | 18 + .../node_modules/lucide-react/LICENSE | 15 + .../node_modules/lucide-react/README.md | 73 + .../node_modules/lucide-react/dynamic.mjs | 10 + .../lucide-react/dynamicIconImports.mjs | 1 + .../node_modules/lucide-react/package.json | 74 + .../node_modules/react | 1 + node_modules/.pnpm/node_modules/lucide-react | 2 +- pnpm-lock.yaml | 18 + .../linkml/01_custodian_name_modular.yaml | 105 +- .../ArchiveTypeEnum.yaml.archived_20250105 | 922 ++ ...dianPrimaryTypeEnum.yaml.archived_20260105 | 204 + .../20251121/linkml/archive/enums/README.md | 1 + .../linkml/instances/enums/_index.yaml | 30 +- ...odian_primary_type.yaml.archived_20260105} | 0 schemas/20251121/linkml/manifest.json | 6522 ++++++----- .../modules/classes/AcademicArchive.yaml | 47 +- .../AcademicArchiveRecordSetTypes.yaml | 12 +- .../classes/AdvertisingRadioArchive.yaml | 2 +- ...AdvertisingRadioArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/AnimalSoundArchive.yaml | 4 +- .../AnimalSoundArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/ArchitecturalArchive.yaml | 4 +- .../ArchitecturalArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/ArchivalLibrary.yaml | 2 +- .../modules/classes/ArchiveAssociation.yaml | 2 +- .../modules/classes/ArchiveNetwork.yaml | 6 +- .../ArchiveOfInternationalOrganization.yaml | 2 +- ...ternationalOrganizationRecordSetTypes.yaml | 6 +- .../classes/ArchiveOrganizationType.yaml | 2 +- .../classes/ArchivesForBuildingRecords.yaml | 2 +- ...hivesForBuildingRecordsRecordSetTypes.yaml | 4 +- .../modules/classes/ArchivesRegionales.yaml | 2 +- .../ArchivesRegionalesRecordSetTypes.yaml | 2 +- .../linkml/modules/classes/ArtArchive.yaml | 2 +- .../classes/ArtArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/AudiovisualArchive.yaml | 2 +- .../AudiovisualArchiveRecordSetTypes.yaml | 10 +- .../linkml/modules/classes/BankArchive.yaml | 2 +- .../classes/BankArchiveRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/Bildstelle.yaml | 4 +- .../modules/classes/BioCustodianType.yaml | 2 +- .../modules/classes/BiologicalObject.yaml | 2 +- .../modules/classes/CantonalArchive.yaml | 2 +- .../CantonalArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/CastCollection.yaml | 2 +- .../modules/classes/CathedralArchive.yaml | 2 +- .../CathedralArchiveRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/ChurchArchive.yaml | 34 - .../classes/ChurchArchiveRecordSetTypes.yaml | 18 +- .../modules/classes/ChurchArchiveSweden.yaml | 2 +- .../ChurchArchiveSwedenRecordSetTypes.yaml | 16 +- .../linkml/modules/classes/Cinematheque.yaml | 4 +- .../modules/classes/ClimateArchive.yaml | 2 +- .../classes/ClimateArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/CollectingArchives.yaml | 6 +- .../CollectingArchivesRecordSetTypes.yaml | 4 +- .../linkml/modules/classes/Collection.yaml | 103 +- .../modules/classes/ComarcalArchive.yaml | 2 +- .../ComarcalArchiveRecordSetTypes.yaml | 10 +- .../classes/CommercialOrganizationType.yaml | 4 +- .../modules/classes/CommunityArchive.yaml | 2 +- .../CommunityArchiveRecordSetTypes.yaml | 6 +- .../classes/CompanyArchiveRecordSetTypes.yaml | 16 +- .../modules/classes/CompanyArchives.yaml | 4 + .../modules/classes/ConservationRecord.yaml | 2 +- .../modules/classes/CountyRecordOffice.yaml | 4 +- .../linkml/modules/classes/CourtRecords.yaml | 4 +- .../modules/classes/CulturalInstitution.yaml | 2 +- .../modules/classes/CurationActivity.yaml | 2 +- .../modules/classes/CurrentArchive.yaml | 51 +- .../classes/CurrentArchiveRecordSetTypes.yaml | 2 +- .../modules/classes/CustodianArchive.yaml | 64 +- .../CustodianArchiveRecordSetTypes.yaml | 2 +- .../modules/classes/CustodianObservation.yaml | 3 +- .../linkml/modules/classes/CustodianType.yaml | 3 +- .../linkml/modules/classes/DarkArchive.yaml | 40 +- .../classes/DarkArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/DepartmentalArchives.yaml | 8 +- .../DepartmentalArchivesRecordSetTypes.yaml | 4 +- .../modules/classes/DepositArchive.yaml | 66 +- .../classes/DepositArchiveRecordSetTypes.yaml | 2 +- .../modules/classes/DigitalArchive.yaml | 52 +- .../classes/DigitalArchiveRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/DimArchives.yaml | 46 +- .../classes/DimArchivesRecordSetTypes.yaml | 2 +- .../modules/classes/DiocesanArchive.yaml | 64 +- .../DiocesanArchiveRecordSetTypes.yaml | 6 +- .../classes/DistrictArchiveGermany.yaml | 2 +- .../DistrictArchiveGermanyRecordSetTypes.yaml | 4 +- .../modules/classes/DistritalArchive.yaml | 6 +- .../DistritalArchiveRecordSetTypes.yaml | 2 +- .../modules/classes/DocumentationCentre.yaml | 4 +- .../modules/classes/EconomicArchive.yaml | 6 +- .../EconomicArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/EducationCenter.yaml | 2 +- .../classes/EducationProviderType.yaml | 2 +- .../modules/classes/ExhibitedObject.yaml | 2 +- .../linkml/modules/classes/Exhibition.yaml | 2 +- .../modules/classes/ExhibitionCatalog.yaml | 2 +- .../modules/classes/FeatureCustodianType.yaml | 2 +- .../linkml/modules/classes/FeaturePlace.yaml | 4 +- .../linkml/modules/classes/FilmArchive.yaml | 38 +- .../classes/FilmArchiveRecordSetTypes.yaml | 18 +- .../linkml/modules/classes/FindingAid.yaml | 4 +- .../linkml/modules/classes/Foremalarkiv.yaml | 4 +- .../modules/classes/FoundationArchive.yaml | 6 +- .../FoundationArchiveRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/FreeArchive.yaml | 6 +- .../classes/FreeArchiveRecordSetTypes.yaml | 2 +- .../classes/FrenchPrivateArchives.yaml | 4 +- .../FrenchPrivateArchivesRecordSetTypes.yaml | 2 +- .../linkml/modules/classes/GalleryType.yaml | 2 +- .../modules/classes/GovernmentArchive.yaml | 6 +- .../GovernmentArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/HeritageSocietyType.yaml | 4 +- .../modules/classes/HistoricalArchive.yaml | 6 +- .../HistoricalArchiveRecordSetTypes.yaml | 10 +- .../modules/classes/HolySacredSiteType.yaml | 2 +- .../modules/classes/HospitalArchive.yaml | 38 +- .../HospitalArchiveRecordSetTypes.yaml | 16 +- .../linkml/modules/classes/HouseArchive.yaml | 6 +- .../classes/HouseArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/IconographicArchives.yaml | 6 +- .../IconographicArchivesRecordSetTypes.yaml | 4 +- .../modules/classes/InformationCarrier.yaml | 2 +- .../modules/classes/InstitutionalArchive.yaml | 6 +- .../InstitutionalArchiveRecordSetTypes.yaml | 4 +- .../classes/InstitutionalRepository.yaml | 2 +- .../classes/IntangibleHeritageEvent.yaml | 2 +- .../classes/IntangibleHeritageForm.yaml | 2 +- .../classes/IntangibleHeritageGroupType.yaml | 2 +- .../IntangibleHeritagePerformance.yaml | 2 +- .../linkml/modules/classes/JointArchives.yaml | 6 +- .../classes/JointArchivesRecordSetTypes.yaml | 2 +- .../linkml/modules/classes/LGBTArchive.yaml | 6 +- .../classes/LGBTArchiveRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/LibraryType.yaml | 2 +- .../linkml/modules/classes/LightArchives.yaml | 6 +- .../classes/LightArchivesRecordSetTypes.yaml | 2 +- .../modules/classes/LiteraryArchive.yaml | 6 +- .../LiteraryArchiveRecordSetTypes.yaml | 12 +- .../20251121/linkml/modules/classes/Loan.yaml | 2 +- .../classes/LocalGovernmentArchive.yaml | 6 +- .../LocalGovernmentArchiveRecordSetTypes.yaml | 6 +- .../LocalHeritageInstitutionSweden.yaml | 2 +- .../modules/classes/LocalHistoryArchive.yaml | 6 +- .../LocalHistoryArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/LocationLibrary.yaml | 2 +- .../modules/classes/MailingListArchive.yaml | 6 +- .../MailingListArchiveRecordSetTypes.yaml | 4 +- .../linkml/modules/classes/MediaArchive.yaml | 6 +- .../classes/MediaArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/MilitaryArchive.yaml | 38 +- .../MilitaryArchiveRecordSetTypes.yaml | 16 +- .../modules/classes/MixedCustodianType.yaml | 2 +- .../modules/classes/MonasteryArchive.yaml | 4 +- .../MonasteryArchiveRecordSetTypes.yaml | 12 +- .../modules/classes/MunicipalArchive.yaml | 38 +- .../MunicipalArchiveRecordSetTypes.yaml | 12 +- .../linkml/modules/classes/MuseumArchive.yaml | 6 +- .../classes/MuseumArchiveRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/MuseumType.yaml | 2 +- .../linkml/modules/classes/MusicArchive.yaml | 6 +- .../classes/MusicArchiveRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/Nachlass.yaml | 4 +- .../modules/classes/NationalArchives.yaml | 6 +- .../NationalArchivesRecordSetTypes.yaml | 8 +- .../classes/NewspaperClippingsArchive.yaml | 4 +- ...wspaperClippingsArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/NobilityArchive.yaml | 6 +- .../NobilityArchiveRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/NonProfitType.yaml | 4 +- .../modules/classes/NotarialArchive.yaml | 6 +- .../NotarialArchiveRecordSetTypes.yaml | 4 +- .../classes/OfficialInstitutionType.yaml | 2 +- .../modules/classes/OnlineNewsArchive.yaml | 6 +- .../OnlineNewsArchiveRecordSetTypes.yaml | 4 +- .../linkml/modules/classes/ParishArchive.yaml | 4 +- .../classes/ParishArchiveRecordSetTypes.yaml | 18 +- .../classes/ParliamentaryArchives.yaml | 4 +- .../ParliamentaryArchivesRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/PartyArchive.yaml | 6 +- .../classes/PartyArchiveRecordSetTypes.yaml | 4 +- .../classes/PerformingArtsArchive.yaml | 6 +- .../PerformingArtsArchiveRecordSetTypes.yaml | 12 +- .../classes/PersonalCollectionType.yaml | 2 +- .../modules/classes/PersonalLibrary.yaml | 2 +- .../linkml/modules/classes/PhotoArchive.yaml | 6 +- .../classes/PhotoArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/PhotographCollection.yaml | 2 +- .../modules/classes/PoliticalArchive.yaml | 6 +- .../PoliticalArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/PostcustodialArchive.yaml | 6 +- .../PostcustodialArchiveRecordSetTypes.yaml | 2 +- .../linkml/modules/classes/PressArchive.yaml | 6 +- .../classes/PressArchiveRecordSetTypes.yaml | 6 +- .../linkml/modules/classes/PrintRoom.yaml | 4 +- .../modules/classes/ProvenanceEvent.yaml | 2 +- .../modules/classes/ProvincialArchive.yaml | 6 +- .../ProvincialArchiveRecordSetTypes.yaml | 6 +- .../classes/ProvincialHistoricalArchive.yaml | 2 +- ...incialHistoricalArchiveRecordSetTypes.yaml | 2 +- .../linkml/modules/classes/PublicArchive.yaml | 6 +- .../classes/PublicArchiveRecordSetTypes.yaml | 6 +- .../classes/PublicArchivesInFrance.yaml | 4 +- .../PublicArchivesInFranceRecordSetTypes.yaml | 2 +- .../linkml/modules/classes/RadioArchive.yaml | 6 +- .../classes/RadioArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/RegionalArchive.yaml | 38 +- .../RegionalArchiveRecordSetTypes.yaml | 12 +- .../classes/RegionalArchivesInIceland.yaml | 4 +- ...gionalArchivesInIcelandRecordSetTypes.yaml | 2 +- .../classes/RegionalEconomicArchive.yaml | 4 +- ...RegionalEconomicArchiveRecordSetTypes.yaml | 2 +- .../classes/RegionalStateArchives.yaml | 4 +- .../RegionalStateArchivesRecordSetTypes.yaml | 2 +- .../modules/classes/ReligiousArchive.yaml | 4 +- .../ReligiousArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/ResearchCenter.yaml | 2 +- .../classes/ResearchOrganizationType.yaml | 4 +- .../linkml/modules/classes/SchoolArchive.yaml | 6 +- .../classes/SchoolArchiveRecordSetTypes.yaml | 12 +- .../modules/classes/ScientificArchive.yaml | 6 +- .../ScientificArchiveRecordSetTypes.yaml | 6 +- .../classes/SectorOfArchivesInSweden.yaml | 4 +- ...ectorOfArchivesInSwedenRecordSetTypes.yaml | 2 +- .../modules/classes/SecurityArchives.yaml | 6 +- .../SecurityArchivesRecordSetTypes.yaml | 4 +- .../linkml/modules/classes/SoundArchive.yaml | 4 +- .../classes/SoundArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/SpecialCollection.yaml | 2 +- .../modules/classes/SpecializedArchive.yaml | 4 +- .../SpecializedArchiveRecordSetTypes.yaml | 2 +- .../classes/SpecializedArchivesCzechia.yaml | 2 +- ...cializedArchivesCzechiaRecordSetTypes.yaml | 2 +- .../linkml/modules/classes/StateArchives.yaml | 4 +- .../classes/StateArchivesRecordSetTypes.yaml | 8 +- .../modules/classes/StateArchivesSection.yaml | 4 +- .../StateArchivesSectionRecordSetTypes.yaml | 2 +- .../modules/classes/StateDistrictArchive.yaml | 4 +- .../StateDistrictArchiveRecordSetTypes.yaml | 2 +- .../classes/StateRegionalArchiveCzechia.yaml | 2 +- ...eRegionalArchiveCzechiaRecordSetTypes.yaml | 8 +- .../classes/TasteScentHeritageType.yaml | 2 +- .../modules/classes/TelevisionArchive.yaml | 4 +- .../TelevisionArchiveRecordSetTypes.yaml | 6 +- .../classes/TentativeWorldHeritageSite.yaml | 2 +- .../modules/classes/TradeUnionArchive.yaml | 38 +- .../TradeUnionArchiveRecordSetTypes.yaml | 17 +- .../modules/classes/UniversityArchive.yaml | 4 +- .../UniversityArchiveRecordSetTypes.yaml | 6 +- .../modules/classes/UnspecifiedType.yaml | 2 +- .../linkml/modules/classes/Vereinsarchiv.yaml | 4 +- .../linkml/modules/classes/Verlagsarchiv.yaml | 4 +- .../modules/classes/VirtualMapLibrary.yaml | 2 +- .../linkml/modules/classes/WebArchive.yaml | 4 +- .../classes/WebArchiveRecordSetTypes.yaml | 4 +- .../modules/classes/WomensArchives.yaml | 4 +- .../classes/WomensArchivesRecordSetTypes.yaml | 6 +- .../modules/classes/WorldHeritageSite.yaml | 2 +- .../linkml/modules/slots/access_policy.yaml | 35 +- .../modules/slots/access_policy_ref.yaml | 28 + .../modules/slots/access_restrictions.yaml | 15 +- .../modules/slots/accession_number.yaml | 18 +- .../modules/slots/acquisition_date.yaml | 18 +- .../modules/slots/acquisition_method.yaml | 19 +- .../modules/slots/acquisition_source.yaml | 28 + .../linkml/modules/slots/activity_type.yaml | 15 +- .../modules/slots/affected_by_event.yaml | 6 +- .../linkml/modules/slots/affected_units.yaml | 7 +- .../modules/slots/affects_organization.yaml | 70 +- .../linkml/modules/slots/affiliation.yaml | 7 +- .../20251121/linkml/modules/slots/age.yaml | 136 +- .../linkml/modules/slots/agent_name.yaml | 10 +- .../linkml/modules/slots/agent_type.yaml | 13 +- .../linkml/modules/slots/allocated_by.yaml | 60 +- .../linkml/modules/slots/allocates.yaml | 56 +- .../linkml/modules/slots/allocation_date.yaml | 50 +- .../modules/slots/also_identifies_name.yaml | 64 +- .../modules/slots/alternative_names.yaml | 30 +- .../slots/alternative_observed_names.yaml | 10 +- .../linkml/modules/slots/altitude.yaml | 17 +- .../linkml/modules/slots/api_endpoint.yaml | 18 +- .../modules/slots/appellation_language.yaml | 12 +- .../modules/slots/appellation_type.yaml | 13 +- .../modules/slots/appellation_value.yaml | 12 +- .../linkml/modules/slots/appellations.yaml | 40 +- .../linkml/modules/slots/approval_date.yaml | 10 +- .../modules/slots/archive_branches.yaml | 32 + .../modules/slots/archive_department_of.yaml | 32 + .../linkml/modules/slots/archived_at.yaml | 13 +- .../linkml/modules/slots/arrangement.yaml | 20 + .../modules/slots/arrangement_system.yaml | 16 +- .../slots/authentication_required.yaml | 24 +- .../modules/slots/auxiliary_places.yaml | 114 +- .../modules/slots/auxiliary_platforms.yaml | 131 +- .../linkml/modules/slots/base_surname.yaml | 51 +- .../modules/slots/begin_of_the_begin.yaml | 12 +- .../modules/slots/begin_of_the_end.yaml | 10 +- .../linkml/modules/slots/birth_date.yaml | 127 +- .../linkml/modules/slots/birth_place.yaml | 124 +- .../linkml/modules/slots/canonical_value.yaml | 56 +- .../linkml/modules/slots/capacity_items.yaml | 27 +- .../modules/slots/cataloging_standard.yaml | 43 +- .../modules/slots/change_rationale.yaml | 9 +- .../modules/slots/circumstances_of_death.yaml | 58 +- .../20251121/linkml/modules/slots/city.yaml | 26 +- .../linkml/modules/slots/claim_id.yaml | 15 +- .../linkml/modules/slots/claim_type.yaml | 17 +- .../linkml/modules/slots/claim_value.yaml | 17 +- .../modules/slots/class_metadata_slots.yaml | 62 +- .../modules/slots/collection_description.yaml | 16 +- .../modules/slots/collection_focus.yaml | 28 +- .../linkml/modules/slots/collection_id.yaml | 22 + .../linkml/modules/slots/collection_name.yaml | 23 +- .../modules/slots/collection_scope.yaml | 20 +- .../linkml/modules/slots/collection_size.yaml | 34 +- .../linkml/modules/slots/collection_type.yaml | 26 +- .../modules/slots/collection_type_ref.yaml | 31 + .../collections_under_responsibility.yaml | 217 +- .../linkml/modules/slots/confidence.yaml | 17 +- .../modules/slots/confidence_method.yaml | 10 +- .../modules/slots/confidence_score.yaml | 10 +- .../modules/slots/confidence_value.yaml | 10 +- .../linkml/modules/slots/conflict_status.yaml | 153 +- .../modules/slots/conservation_lab.yaml | 10 +- .../linkml/modules/slots/contact.yaml | 6 +- .../linkml/modules/slots/contact_email.yaml | 11 +- .../linkml/modules/slots/contact_point.yaml | 13 +- .../linkml/modules/slots/content_hash.yaml | 40 +- .../linkml/modules/slots/cost_usd.yaml | 16 +- .../linkml/modules/slots/country.yaml | 37 +- .../linkml/modules/slots/created.yaml | 16 +- .../linkml/modules/slots/creator.yaml | 16 +- .../linkml/modules/slots/css_selector.yaml | 15 +- .../modules/slots/curation_activities.yaml | 28 + .../modules/slots/custodial_history.yaml | 26 + .../linkml/modules/slots/custodian_names.yaml | 10 +- .../modules/slots/custodian_observations.yaml | 12 +- .../linkml/modules/slots/custodian_type.yaml | 256 +- .../linkml/modules/slots/custodians.yaml | 10 +- .../modules/slots/data_license_policy.yaml | 25 +- .../modules/slots/data_service_endpoints.yaml | 16 +- .../20251121/linkml/modules/slots/date.yaml | 21 +- .../linkml/modules/slots/date_of_death.yaml | 69 +- .../linkml/modules/slots/death_place.yaml | 145 +- .../modules/slots/defined_by_standard.yaml | 53 +- .../linkml/modules/slots/deliverables.yaml | 21 +- .../modules/slots/derived_from_entity.yaml | 47 +- .../linkml/modules/slots/description.yaml | 29 +- .../modules/slots/digital_platform.yaml | 34 +- .../modules/slots/digital_surrogate_url.yaml | 23 + .../modules/slots/digitization_status.yaml | 30 +- .../modules/slots/dissolution_date.yaml | 10 +- .../modules/slots/documentation_source.yaml | 7 +- .../modules/slots/documentation_url.yaml | 12 +- .../linkml/modules/slots/effective_date.yaml | 37 +- .../modules/slots/embargo_end_date.yaml | 8 +- .../linkml/modules/slots/emic_name.yaml | 21 +- .../linkml/modules/slots/encompasses.yaml | 75 +- .../modules/slots/encompassing_body.yaml | 56 +- .../linkml/modules/slots/end_date.yaml | 24 +- .../modules/slots/end_of_the_begin.yaml | 10 +- .../linkml/modules/slots/end_of_the_end.yaml | 12 +- .../linkml/modules/slots/ended_at_time.yaml | 8 +- .../modules/slots/endorsement_source.yaml | 8 +- .../linkml/modules/slots/event_date.yaml | 11 +- .../modules/slots/event_description.yaml | 9 +- .../linkml/modules/slots/event_id.yaml | 8 +- .../linkml/modules/slots/event_type.yaml | 25 +- .../linkml/modules/slots/exhibition_type.yaml | 21 +- .../linkml/modules/slots/expertise_areas.yaml | 6 +- .../modules/slots/exposed_via_portal.yaml | 54 +- .../modules/slots/exposes_collections.yaml | 62 +- .../20251121/linkml/modules/slots/extent.yaml | 18 +- .../linkml/modules/slots/extent_items.yaml | 27 + .../modules/slots/external_identifiers.yaml | 16 +- .../modules/slots/extraction_confidence.yaml | 14 +- .../modules/slots/extraction_metadata.yaml | 57 +- .../modules/slots/extraction_method.yaml | 17 +- .../modules/slots/extraction_notes.yaml | 16 +- .../modules/slots/extraction_timestamp.yaml | 17 +- .../linkml/modules/slots/feeds_portal.yaml | 59 +- .../linkml/modules/slots/finding_aids.yaml | 30 + .../linkml/modules/slots/follow_up_date.yaml | 25 +- .../linkml/modules/slots/funding_source.yaml | 25 +- .../linkml/modules/slots/gender_identity.yaml | 95 +- .../modules/slots/geographic_scope.yaml | 17 +- .../linkml/modules/slots/geonames_id.yaml | 40 +- .../linkml/modules/slots/given_name.yaml | 48 +- .../linkml/modules/slots/has_collection.yaml | 52 +- .../slots/has_derived_observation.yaml | 57 +- .../modules/slots/has_feature_type.yaml | 39 +- .../slots/has_geospatial_location.yaml | 53 +- .../linkml/modules/slots/has_member.yaml | 77 +- .../linkml/modules/slots/has_observation.yaml | 57 +- .../linkml/modules/slots/has_person_name.yaml | 169 +- .../modules/slots/has_person_observation.yaml | 97 +- .../modules/slots/has_suborganization.yaml | 61 +- .../linkml/modules/slots/has_unit.yaml | 67 +- .../20251121/linkml/modules/slots/hc_id.yaml | 35 +- .../modules/slots/holds_record_set_types.yaml | 107 +- .../linkml/modules/slots/html_file.yaml | 20 +- .../modules/slots/humidity_tolerance.yaml | 14 +- schemas/20251121/linkml/modules/slots/id.yaml | 10 +- .../linkml/modules/slots/identified_by.yaml | 63 +- .../modules/slots/identifier_format_used.yaml | 46 +- .../modules/slots/identifier_scheme.yaml | 8 +- .../modules/slots/identifier_value.yaml | 10 +- .../linkml/modules/slots/identifiers.yaml | 16 +- .../linkml/modules/slots/identifies.yaml | 54 +- .../modules/slots/identifies_custodian.yaml | 16 +- .../linkml/modules/slots/initials.yaml | 62 +- .../modules/slots/is_legal_status_of.yaml | 40 +- .../linkml/modules/slots/is_member_of.yaml | 81 +- .../20251121/linkml/modules/slots/isbn.yaml | 19 +- .../20251121/linkml/modules/slots/items.yaml | 26 + .../linkml/modules/slots/jurisdiction.yaml | 45 +- .../linkml/modules/slots/justification.yaml | 10 +- .../linkml/modules/slots/keywords.yaml | 15 +- .../linkml/modules/slots/language.yaml | 11 +- .../linkml/modules/slots/language_code.yaml | 10 +- .../modules/slots/legal_entity_type.yaml | 35 +- .../linkml/modules/slots/legal_form.yaml | 43 +- .../modules/slots/legal_jurisdiction.yaml | 40 +- .../linkml/modules/slots/legal_name.yaml | 26 +- .../slots/legal_responsibility_basis.yaml | 30 +- .../slots/legal_responsibility_end_date.yaml | 30 +- .../legal_responsibility_start_date.yaml | 30 +- .../linkml/modules/slots/legal_status.yaml | 19 +- .../modules/slots/linkedin_profile_path.yaml | 40 +- .../modules/slots/linkedin_profile_url.yaml | 42 +- .../linkml/modules/slots/located_at.yaml | 89 +- .../linkml/modules/slots/managed_by.yaml | 14 +- .../modules/slots/metadata_standards.yaml | 16 +- .../20251121/linkml/modules/slots/method.yaml | 8 +- .../modules/slots/mission_statement.yaml | 107 +- .../linkml/modules/slots/modified.yaml | 16 +- .../linkml/modules/slots/name_authority.yaml | 8 +- .../linkml/modules/slots/name_language.yaml | 16 +- .../modules/slots/name_validity_period.yaml | 16 +- .../20251121/linkml/modules/slots/notes.yaml | 17 +- .../modules/slots/oai_pmh_endpoint.yaml | 14 +- .../linkml/modules/slots/object_ref.yaml | 10 +- .../modules/slots/observation_context.yaml | 8 +- .../modules/slots/observation_date.yaml | 10 +- .../modules/slots/observation_source.yaml | 14 +- .../linkml/modules/slots/observed_name.yaml | 8 +- .../slots/offers_donation_schemes.yaml | 62 +- .../linkml/modules/slots/operated_by.yaml | 63 +- .../slots/organizational_change_events.yaml | 18 +- .../slots/organizational_structure.yaml | 80 +- .../modules/slots/parent_collection.yaml | 25 + .../modules/slots/parent_corporation.yaml | 33 + .../modules/slots/parent_custodian.yaml | 53 +- .../slots/part_of_custodian_collection.yaml | 24 + .../linkml/modules/slots/person_name.yaml | 6 +- .../linkml/modules/slots/place_language.yaml | 8 +- .../linkml/modules/slots/place_note.yaml | 8 +- .../linkml/modules/slots/platform_name.yaml | 16 +- .../linkml/modules/slots/platform_of.yaml | 41 +- .../linkml/modules/slots/platform_type.yaml | 44 +- .../linkml/modules/slots/policy_id.yaml | 18 +- .../linkml/modules/slots/policy_name.yaml | 18 +- .../modules/slots/portal_data_sources.yaml | 43 +- .../linkml/modules/slots/postal_code.yaml | 30 +- .../linkml/modules/slots/powered_by_cms.yaml | 11 +- .../linkml/modules/slots/preferred_label.yaml | 32 +- .../modules/slots/preservation_level.yaml | 18 +- .../20251121/linkml/modules/slots/price.yaml | 10 +- .../linkml/modules/slots/price_currency.yaml | 8 +- .../modules/slots/primary_register.yaml | 42 +- .../linkml/modules/slots/pronouns.yaml | 172 +- .../linkml/modules/slots/protocol.yaml | 28 +- .../linkml/modules/slots/provenance_note.yaml | 12 +- .../modules/slots/provenance_statement.yaml | 25 + .../linkml/modules/slots/provenance_text.yaml | 18 +- .../modules/slots/publication_date.yaml | 17 +- .../linkml/modules/slots/publisher.yaml | 15 +- .../modules/slots/reconstruction_method.yaml | 13 +- .../linkml/modules/slots/record_type.yaml | 10 +- .../modules/slots/refers_to_custodian.yaml | 32 +- .../modules/slots/refers_to_person.yaml | 131 +- .../modules/slots/registration_date.yaml | 8 +- .../modules/slots/response_formats.yaml | 22 +- .../modules/slots/responsible_agent.yaml | 11 +- .../slots/responsible_legal_entity.yaml | 34 +- .../linkml/modules/slots/resulting_units.yaml | 7 +- .../linkml/modules/slots/retrieval_agent.yaml | 15 +- .../linkml/modules/slots/retrieved_on.yaml | 34 +- .../linkml/modules/slots/revision_date.yaml | 11 +- .../linkml/modules/slots/rico_equivalent.yaml | 33 +- .../modules/slots/rico_record_set_type.yaml | 35 + .../linkml/modules/slots/role_end_date.yaml | 6 +- .../linkml/modules/slots/role_start_date.yaml | 6 +- .../linkml/modules/slots/role_title.yaml | 8 +- .../linkml/modules/slots/safeguarded_by.yaml | 58 +- .../linkml/modules/slots/security_level.yaml | 31 +- .../linkml/modules/slots/served_by.yaml | 11 +- .../modules/slots/serves_finding_aids.yaml | 50 +- .../linkml/modules/slots/service_area.yaml | 77 +- .../linkml/modules/slots/settlement.yaml | 44 +- .../20251121/linkml/modules/slots/source.yaml | 9 +- .../linkml/modules/slots/source_creator.yaml | 8 +- .../linkml/modules/slots/source_date.yaml | 8 +- .../linkml/modules/slots/source_type.yaml | 13 +- .../linkml/modules/slots/source_uri.yaml | 8 +- .../linkml/modules/slots/source_url.yaml | 40 +- .../linkml/modules/slots/sparql_endpoint.yaml | 14 +- .../linkml/modules/slots/staff_count.yaml | 8 +- .../linkml/modules/slots/staff_members.yaml | 8 +- .../linkml/modules/slots/staff_role.yaml | 36 +- .../modules/slots/standardized_name.yaml | 8 +- .../linkml/modules/slots/start_date.yaml | 24 +- .../linkml/modules/slots/started_at_time.yaml | 8 +- .../20251121/linkml/modules/slots/status.yaml | 18 +- .../modules/slots/storage_location.yaml | 18 +- .../linkml/modules/slots/street_address.yaml | 33 +- .../linkml/modules/slots/sub_collections.yaml | 26 + .../linkml/modules/slots/subject_areas.yaml | 25 + .../linkml/modules/slots/subregion.yaml | 36 +- .../linkml/modules/slots/superseded_by.yaml | 10 +- .../linkml/modules/slots/supersedes.yaml | 10 +- .../modules/slots/temperature_tolerance.yaml | 14 +- .../modules/slots/temporal_coverage.yaml | 20 +- .../linkml/modules/slots/temporal_extent.yaml | 16 +- .../modules/slots/time_of_destruction.yaml | 142 +- .../20251121/linkml/modules/slots/title.yaml | 16 +- .../linkml/modules/slots/type_scope.yaml | 223 +- .../linkml/modules/slots/typical_domains.yaml | 44 +- .../slots/typical_metadata_standards.yaml | 16 +- .../slots/typical_technical_features.yaml | 16 +- .../modules/slots/unit_affiliation.yaml | 8 +- .../linkml/modules/slots/unit_type.yaml | 6 +- .../20251121/linkml/modules/slots/used.yaml | 26 +- .../linkml/modules/slots/used_by.yaml | 61 +- .../linkml/modules/slots/used_sources.yaml | 8 +- .../linkml/modules/slots/valid_from.yaml | 35 +- .../linkml/modules/slots/valid_to.yaml | 10 +- .../linkml/modules/slots/variant_of_name.yaml | 27 +- .../modules/slots/was_derived_from.yaml | 19 +- .../modules/slots/was_generated_by.yaml | 28 +- .../linkml/modules/slots/was_revision_of.yaml | 11 +- .../linkml/modules/slots/web_claims.yaml | 63 +- .../linkml/modules/slots/website.yaml | 34 +- .../linkml/modules/slots/wikidata_entity.yaml | 25 + .../linkml/modules/slots/wikidata_id.yaml | 48 +- .../20251121/linkml/modules/slots/xpath.yaml | 16 +- ..._custodian_name_modular_20260107_120151.nt | 1 + ..._custodian_name_modular_20260107_120422.nt | 1 + ..._custodian_name_modular_20260107_121806.nt | 63 + ...ame_modular_20260107_121900.context.jsonld | 9873 +++++++++++++++++ scripts/add_slot_mappings.py | 2420 ++++ scripts/cleanup_redundant_descriptions.py | 226 + scripts/fix_archive_class_files.py | 192 + scripts/generate_archive_record_set_types.py | 758 ++ scripts/migrate_custodian_types_to_uri.py | 216 + scripts/regenerate_manifest.py | 92 + 1132 files changed, 47267 insertions(+), 18837 deletions(-) create mode 100644 .opencode/RICO_RECORDSETTYPE_ALIGNMENT.md create mode 100644 .opencode/rules/slot-centralization-and-semantic-uri-rule.md create mode 120000 apps/archief-assistent/node_modules/@types/d3 create mode 120000 apps/archief-assistent/node_modules/d3 create mode 120000 apps/archief-assistent/node_modules/lucide-react create mode 100644 apps/archief-assistent/src/components/DebugPanel.css create mode 100644 apps/archief-assistent/src/components/DebugPanel.tsx create mode 100644 backend/rag/event_retriever.py create mode 100644 backend/rag/semantic_router.py create mode 100644 backend/rag/temporal_intent.py create mode 100644 backend/rag/temporal_resolver.py create mode 100644 backend/rag/test_semantic_routing.py create mode 100644 backend/rag/test_temporal_intent.py create mode 100644 docs/plan/external_design_patterns/01_graphrag_design_patterns.md create mode 100644 docs/plan/external_design_patterns/02_comparison_matrix.md create mode 100644 docs/plan/external_design_patterns/03_implementation_guide.md create mode 100644 docs/plan/external_design_patterns/04_temporal_semantic_hypergraph.md create mode 100644 frontend/public/schemas/20251121/linkml/archive/enums/ArchiveTypeEnum.yaml.archived_20250105 create mode 100644 frontend/public/schemas/20251121/linkml/archive/enums/CustodianPrimaryTypeEnum.yaml.archived_20260105 rename frontend/public/schemas/20251121/linkml/instances/enums/{custodian_primary_type.yaml => archive/custodian_primary_type.yaml.archived_20260105} (100%) create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/access_policy_ref.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/acquisition_source.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/archive_branches.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/archive_department_of.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/arrangement.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/collection_id.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/collection_type_ref.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/curation_activities.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/custodial_history.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/digital_surrogate_url.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/extent_items.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/finding_aids.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/items.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/parent_collection.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/parent_corporation.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/part_of_custodian_collection.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/provenance_statement.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/rico_record_set_type.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/sub_collections.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/subject_areas.yaml create mode 100644 frontend/public/schemas/20251121/linkml/modules/slots/wikidata_entity.yaml create mode 100644 node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/LICENSE create mode 100644 node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/README.md create mode 100644 node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/dynamic.mjs create mode 100644 node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/dynamicIconImports.mjs create mode 100644 node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/package.json create mode 120000 node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/react create mode 100644 schemas/20251121/linkml/archive/enums/ArchiveTypeEnum.yaml.archived_20250105 create mode 100644 schemas/20251121/linkml/archive/enums/CustodianPrimaryTypeEnum.yaml.archived_20260105 rename schemas/20251121/linkml/instances/enums/{custodian_primary_type.yaml => archive/custodian_primary_type.yaml.archived_20260105} (100%) create mode 100644 schemas/20251121/linkml/modules/slots/access_policy_ref.yaml create mode 100644 schemas/20251121/linkml/modules/slots/acquisition_source.yaml create mode 100644 schemas/20251121/linkml/modules/slots/archive_branches.yaml create mode 100644 schemas/20251121/linkml/modules/slots/archive_department_of.yaml create mode 100644 schemas/20251121/linkml/modules/slots/arrangement.yaml create mode 100644 schemas/20251121/linkml/modules/slots/collection_id.yaml create mode 100644 schemas/20251121/linkml/modules/slots/collection_type_ref.yaml create mode 100644 schemas/20251121/linkml/modules/slots/curation_activities.yaml create mode 100644 schemas/20251121/linkml/modules/slots/custodial_history.yaml create mode 100644 schemas/20251121/linkml/modules/slots/digital_surrogate_url.yaml create mode 100644 schemas/20251121/linkml/modules/slots/extent_items.yaml create mode 100644 schemas/20251121/linkml/modules/slots/finding_aids.yaml create mode 100644 schemas/20251121/linkml/modules/slots/items.yaml create mode 100644 schemas/20251121/linkml/modules/slots/parent_collection.yaml create mode 100644 schemas/20251121/linkml/modules/slots/parent_corporation.yaml create mode 100644 schemas/20251121/linkml/modules/slots/part_of_custodian_collection.yaml create mode 100644 schemas/20251121/linkml/modules/slots/provenance_statement.yaml create mode 100644 schemas/20251121/linkml/modules/slots/rico_record_set_type.yaml create mode 100644 schemas/20251121/linkml/modules/slots/sub_collections.yaml create mode 100644 schemas/20251121/linkml/modules/slots/subject_areas.yaml create mode 100644 schemas/20251121/linkml/modules/slots/wikidata_entity.yaml create mode 100644 schemas/20251121/rdf/01_custodian_name_modular_20260107_120151.nt create mode 100644 schemas/20251121/rdf/01_custodian_name_modular_20260107_120422.nt create mode 100644 schemas/20251121/rdf/01_custodian_name_modular_20260107_121806.nt create mode 100644 schemas/20251121/rdf/01_custodian_name_modular_20260107_121900.context.jsonld create mode 100644 scripts/add_slot_mappings.py create mode 100644 scripts/cleanup_redundant_descriptions.py create mode 100644 scripts/fix_archive_class_files.py create mode 100644 scripts/generate_archive_record_set_types.py create mode 100644 scripts/migrate_custodian_types_to_uri.py create mode 100644 scripts/regenerate_manifest.py diff --git a/.opencode/RICO_RECORDSETTYPE_ALIGNMENT.md b/.opencode/RICO_RECORDSETTYPE_ALIGNMENT.md new file mode 100644 index 0000000000..26f7c06bad --- /dev/null +++ b/.opencode/RICO_RECORDSETTYPE_ALIGNMENT.md @@ -0,0 +1,143 @@ +# RiC-O RecordSetType Alignment Rules + +## RiC-O 1.1 Structure (Actual) + +### rico:RecordSetType CLASS + +**Location**: RiC-O_1-1.rdf lines 29199-29252 + +```turtle +rico:RecordSetType a owl:Class ; + rdfs:subClassOf rico:Type ; + rdfs:comment "A broad categorization of the type of Record Set."@en . +``` + +This is a **class** meant to be instantiated with specific record set type concepts. + +### RiC-O Provided Instances (Named Individuals) + +RiC-O 1.1 provides **four named individuals** in the `recordSetTypes` vocabulary: + +| Individual | URI | Description | +|------------|-----|-------------| +| **Fonds** | `rico-rst:Fonds` | Organic whole of records from one creator | +| **Series** | `rico-rst:Series` | Documents arranged by filing system | +| **File** | `rico-rst:File` | Unit of documents grouped together | +| **Collection** | `rico-rst:Collection` | Artificial assemblage without provenance | + +**Key**: These are **instances** of BOTH `rico:RecordSetType` AND `skos:Concept`: + +```turtle +rico-rst:Fonds a rico:RecordSetType, skos:Concept ; + skos:inScheme rico-rst: ; + skos:topConceptOf rico-rst: ; + skos:definition "The whole of the records... organically created..."@en . +``` + +### Full URIs + +- **Namespace**: `https://www.ica.org/standards/RiC/vocabularies/recordSetTypes#` +- **Prefix**: `rico-rst:` (commonly used) +- `rico-rst:Fonds` = `https://www.ica.org/standards/RiC/vocabularies/recordSetTypes#Fonds` + +## Our Approach: Classes as RecordSetType Subclasses + +We create **LinkML classes** with `class_uri: rico:RecordSetType`. These classes are themselves record set type definitions that can be instantiated. + +### Why Classes Instead of Instances? + +1. **Extensibility**: Classes allow slots and inheritance patterns +2. **LinkML idiom**: LinkML works with class definitions +3. **Validation**: Classes enable property constraints +4. **Documentation**: Rich documentation in class definitions + +### Correct Mapping Predicates + +Since `rico-rst:Fonds`, `rico-rst:Series`, `rico-rst:Collection`, `rico-rst:File` are **individuals** (not classes), we cannot use them in `broad_mappings` (which implies class hierarchy). + +**Instead, use**: + +| Predicate | Use For | +|-----------|---------| +| `related_mappings` | Conceptual relationship to RiC-O individuals | +| `see_also` | Reference to related RiC-O concepts | +| Custom annotation | `rico_organizational_principle` with value `fonds`, `series`, `collection`, `file` | + +### Correct Pattern + +```yaml +UniversityAdministrativeFonds: + is_a: AcademicArchiveRecordSetType + class_uri: rico:RecordSetType + description: | + A rico:RecordSetType for university administrative records organized as a fonds. + + **RiC-O Alignment**: + This class is a specialized rico:RecordSetType. Records classified with this + type follow the fonds organizational principle as defined by rico-rst:Fonds + (respect des fonds / provenance-based organization). + + # CORRECT: Use related_mappings for conceptual relationship to individual + related_mappings: + - https://www.ica.org/standards/RiC/vocabularies/recordSetTypes#Fonds + + # CORRECT: Use see_also for reference + see_also: + - rico:RecordSetType + - https://www.ica.org/standards/RiC/vocabularies/recordSetTypes#Fonds + + annotations: + # CORRECT: Document organizational principle as annotation + rico_organizational_principle: fonds + rico_organizational_principle_uri: https://www.ica.org/standards/RiC/vocabularies/recordSetTypes#Fonds + rico_note: >- + This RecordSetType classifies record sets following the fonds principle. + The rico-rst:Fonds individual defines the standard archival concept of fonds. +``` + +### INCORRECT Pattern (Do Not Use) + +```yaml +# WRONG - rico:Fonds is NOT a class, cannot use in broad_mappings +broad_mappings: + - rico:Fonds # ❌ This individual, not a class! + +# WRONG - Using shorthand that doesn't resolve +broad_mappings: + - rico-rst:Fonds # ❌ Prefix not defined in LinkML +``` + +## Prefixes to Include + +When referencing the RiC-O recordSetTypes vocabulary: + +```yaml +prefixes: + rico: https://www.ica.org/standards/RiC/ontology# + rico-rst: https://www.ica.org/standards/RiC/vocabularies/recordSetTypes# +``` + +## Summary + +| RiC-O Concept | Type | Use In | +|---------------|------|--------| +| `rico:RecordSetType` | CLASS | `class_uri`, `exact_mappings` | +| `rico-rst:Fonds` | INDIVIDUAL | `related_mappings`, `see_also`, annotation | +| `rico-rst:Series` | INDIVIDUAL | `related_mappings`, `see_also`, annotation | +| `rico-rst:Collection` | INDIVIDUAL | `related_mappings`, `see_also`, annotation | +| `rico-rst:File` | INDIVIDUAL | `related_mappings`, `see_also`, annotation | + +## Files to Update + +All `*RecordSetTypes.yaml` files need correction: +- `AcademicArchiveRecordSetTypes.yaml` +- `MunicipalArchiveRecordSetTypes.yaml` +- `ChurchArchiveRecordSetTypes.yaml` +- `CompanyArchiveRecordSetTypes.yaml` +- `RegionalArchiveRecordSetTypes.yaml` +- (and any future files) + +--- + +**Created**: 2026-01-05 +**Agent**: opencode-claude-sonnet-4 diff --git a/.opencode/rules/slot-centralization-and-semantic-uri-rule.md b/.opencode/rules/slot-centralization-and-semantic-uri-rule.md new file mode 100644 index 0000000000..5398ead38b --- /dev/null +++ b/.opencode/rules/slot-centralization-and-semantic-uri-rule.md @@ -0,0 +1,317 @@ +# Rule 38: Slot Centralization and Semantic URI Requirements + +🚨 **CRITICAL**: All LinkML slots MUST be centralized in `schemas/20251121/linkml/modules/slots/` and MUST have semantically sound `slot_uri` predicates from base ontologies. + +--- + +## 1. Slot Centralization is Mandatory + +**Location**: All slot definitions MUST be in `schemas/20251121/linkml/modules/slots/` + +**File Naming**: `{slot_name}.yaml` (snake_case) + +**Import Pattern**: Classes import slots via relative imports: +```yaml +# In modules/classes/Collection.yaml +imports: + - ../slots/collection_name + - ../slots/collection_type_ref + - ../slots/parent_collection +``` + +### Why Centralization? + +1. **UML Visualization**: The frontend's schema service loads slots from `modules/slots/` to determine aggregation edges. Inline slots in class files are NOT properly parsed for visualization. + +2. **Reusability**: Slots can be used by multiple classes without duplication. + +3. **Semantic Consistency**: Single source of truth for slot semantics prevents drift. + +4. **Maintainability**: Changes to slot semantics propagate automatically to all classes. + +### Anti-Pattern: Inline Slot Definitions + +```yaml +# ❌ WRONG - Slots defined inline in class file +classes: + Collection: + slots: + - collection_name + - parent_collection + +slots: # ← This section in a class file is WRONG + collection_name: + range: string +``` + +```yaml +# ✅ CORRECT - Slots imported from centralized files +# In modules/classes/Collection.yaml +imports: + - ../slots/collection_name + - ../slots/parent_collection + +classes: + Collection: + slots: + - collection_name + - parent_collection +``` + +--- + +## 2. Every Slot MUST Have `slot_uri` + +**`slot_uri`** provides the semantic meaning of the slot in a linked data context. It maps your slot to a predicate from an established ontology. + +### Required Slot File Structure + +```yaml +# Global slot definition for {slot_name} +# Used by: {list of classes} + +id: https://nde.nl/ontology/hc/slot/{slot_name} +name: {slot_name} + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + # Add ontology prefixes as needed + rico: https://www.ica.org/standards/RiC/ontology# + schema: http://schema.org/ + skos: http://www.w3.org/2004/02/skos/core# + +slots: + {slot_name}: + slot_uri: {ontology_prefix}:{predicate} # ← REQUIRED + description: | + Description of the slot's semantic meaning. + + {OntologyName}: {predicate} - "{definition from ontology}" + range: {ClassName or primitive} + required: true/false + multivalued: true/false + # Optional mappings for additional semantic relationships + exact_mappings: + - schema:alternatePredicate + close_mappings: + - dct:relatedPredicate + examples: + - value: {example} + description: {explanation} +``` + +### Ontology Sources for `slot_uri` + +Consult these base ontology files in `/data/ontology/`: + +| Ontology | File | Namespace | Use Cases | +|----------|------|-----------|-----------| +| **RiC-O** | `RiC-O_1-1.rdf` | `rico:` | Archival records, record sets, custody | +| **CIDOC-CRM** | `CIDOC_CRM_v7.1.3.rdf` | `crm:` | Cultural heritage objects, events | +| **Schema.org** | `schemaorg.owl` | `schema:` | Web semantics, general properties | +| **SKOS** | `skos.rdf` | `skos:` | Labels, concepts, mappings | +| **Dublin Core** | `dublin_core_elements.rdf` | `dcterms:` | Metadata properties | +| **PROV-O** | `prov-o.ttl` | `prov:` | Provenance tracking | +| **PAV** | `pav.rdf` | `pav:` | Provenance, authoring, versioning | +| **TOOI** | `tooiont.ttl` | `tooi:` | Dutch government organizations | +| **CPOV** | `core-public-organisation-ap.ttl` | `cpov:` | EU public sector | +| **ORG** | `org.rdf` | `org:` | Organizations, units, roles | +| **FOAF** | `foaf.ttl` | `foaf:` | People, agents, social network | +| **GLEIF** | `gleif_base.ttl` | `gleif_base:` | Legal entities | + +### Example: Correct Slot with `slot_uri` + +```yaml +# modules/slots/preferred_label.yaml +id: https://nde.nl/ontology/hc/slot/preferred_label +name: preferred_label_slot + +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/ + rdfs: http://www.w3.org/2000/01/rdf-schema# + +slots: + preferred_label: + slot_uri: skos:prefLabel # ← REQUIRED + description: | + The primary display name for this entity. + + SKOS: prefLabel - "A preferred lexical label for a resource." + + This is the CANONICAL name - the standardized label accepted by the + entity itself for public representation. + range: string + required: false + exact_mappings: + - schema:name + - rdfs:label + examples: + - value: "Rijksmuseum" + description: Primary display name for the Rijksmuseum +``` + +--- + +## 3. Mappings Can Apply to Both Classes AND Slots + +LinkML provides SKOS-based mapping predicates that work on **both classes and slots**: + +| Mapping Type | Predicate | Use Case | +|--------------|-----------|----------| +| `exact_mappings` | `skos:exactMatch` | Identical meaning | +| `close_mappings` | `skos:closeMatch` | Very similar meaning | +| `related_mappings` | `skos:relatedMatch` | Semantically related | +| `narrow_mappings` | `skos:narrowMatch` | More specific | +| `broad_mappings` | `skos:broadMatch` | More general | + +### When to Use Mappings vs. slot_uri + +| Scenario | Use | +|----------|-----| +| **Primary semantic identity** | `slot_uri` (exactly one) | +| **Equivalent predicates in other ontologies** | `exact_mappings` (multiple allowed) | +| **Similar but not identical predicates** | `close_mappings` | +| **Related predicates with different scope** | `narrow_mappings` / `broad_mappings` | + +### Example: Slot with Multiple Mappings + +```yaml +slots: + website: + slot_uri: gleif_base:hasWebsite # Primary predicate + range: uri + description: | + Official website URL of the organization or entity. + + gleif_base:hasWebsite - "A website associated with something" + exact_mappings: + - schema:url # Identical meaning in Schema.org + close_mappings: + - foaf:homepage # Similar but specifically "main" page +``` + +### Example: Class with Multiple Mappings + +```yaml +classes: + Collection: + class_uri: rico:RecordSet # Primary class + exact_mappings: + - crm:E78_Curated_Holding # CIDOC-CRM equivalent + close_mappings: + - bf:Collection # BIBFRAME close match + narrow_mappings: + - edm:ProvidedCHO # Europeana (narrower - cultural heritage objects) +``` + +--- + +## 4. Workflow for Creating a New Slot + +### Step 1: Search Base Ontologies + +Before creating a slot, search for existing predicates: + +```bash +# Search for relevant predicates +rg "website|homepage|url" /data/ontology/*.ttl /data/ontology/*.rdf /data/ontology/*.owl + +# Check specific ontology +rg "rdfs:label|rdfs:comment" /data/ontology/schemaorg.owl | grep -i "name" +``` + +### Step 2: Document Ontology Alignment + +In the slot file, document WHY you chose that predicate: + +```yaml +slots: + source_url: + slot_uri: pav:retrievedFrom + description: | + URL of the web page from which data was retrieved. + + pav:retrievedFrom - "The URI from which the resource was retrieved." + + Chosen over: + - schema:url (too generic - refers to the entity's URL, not source) + - dct:source (refers to intellectual source, not retrieval location) + - prov:wasDerivedFrom (refers to entity derivation, not retrieval) +``` + +### Step 3: Create Centralized Slot File + +```bash +# Create new slot file +touch schemas/20251121/linkml/modules/slots/new_slot_name.yaml +``` + +### Step 4: Update Manifest + +Run the manifest regeneration script or manually add to manifest: + +```bash +cd schemas/20251121/linkml +python3 scripts/regenerate_manifest.py +``` + +### Step 5: Import in Class Files + +Add the import to classes that use this slot. + +--- + +## 5. Validation Checklist + +Before committing slot changes: + +- [ ] Slot file is in `modules/slots/` +- [ ] Slot has `slot_uri` pointing to an established ontology predicate +- [ ] Predicate is from `data/ontology/` files or standard vocabularies +- [ ] Description includes ontology definition +- [ ] Rationale documented if multiple predicates were considered +- [ ] `exact_mappings`/`close_mappings` added for equivalent predicates +- [ ] Manifest updated to include new slot file +- [ ] Classes using the slot have been updated with import +- [ ] Frontend slot files synced: `frontend/public/schemas/20251121/linkml/modules/slots/` + +--- + +## 6. Common Slot URI Mappings + +| Slot Concept | Recommended `slot_uri` | Alternative Mappings | +|--------------|------------------------|---------------------| +| Preferred name | `skos:prefLabel` | `schema:name`, `rdfs:label` | +| Alternative names | `skos:altLabel` | `schema:alternateName` | +| Description | `dcterms:description` | `schema:description`, `rdfs:comment` | +| Identifier | `dcterms:identifier` | `schema:identifier` | +| Website URL | `gleif_base:hasWebsite` | `schema:url`, `foaf:homepage` | +| Source URL | `pav:retrievedFrom` | `prov:wasDerivedFrom` | +| Created date | `dcterms:created` | `schema:dateCreated`, `prov:generatedAtTime` | +| Modified date | `dcterms:modified` | `schema:dateModified` | +| Language | `schema:inLanguage` | `dcterms:language` | +| Part of | `dcterms:isPartOf` | `rico:isOrWasPartOf`, `schema:isPartOf` | +| Has part | `dcterms:hasPart` | `rico:hasOrHadPart`, `schema:hasPart` | +| Location | `schema:location` | `locn:address`, `crm:P53_has_former_or_current_location` | +| Start date | `schema:startDate` | `prov:startedAtTime`, `rico:hasBeginningDate` | +| End date | `schema:endDate` | `prov:endedAtTime`, `rico:hasEndDate` | + +--- + +## See Also + +- [LinkML slot_uri documentation](https://linkml.io/linkml-model/latest/docs/slot_uri/) +- [LinkML mappings documentation](https://linkml.io/linkml-model/latest/docs/mappings/) +- [LinkML URIs and Mappings guide](https://linkml.io/linkml/schemas/uris-and-mappings.html) +- Rule 1: Ontology Files Are Your Primary Reference +- Rule 0: LinkML Schemas Are the Single Source of Truth + +--- + +**Version**: 1.0.0 +**Created**: 2026-01-06 +**Author**: OpenCODE diff --git a/AGENTS.md b/AGENTS.md index c24460559b..3a8ad059af 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -23,7 +23,7 @@ This is NOT a simple data extraction project. This is an **ontology engineering ## 🚨 CRITICAL RULES FOR ALL AGENTS -This section summarizes 37 critical rules. Each rule has complete documentation in `.opencode/` files. +This section summarizes 38 critical rules. Each rule has complete documentation in `.opencode/` files. ### Rule 0: LinkML Schemas Are the Single Source of Truth @@ -734,6 +734,42 @@ classes: --- +### Rule 38: Slot Centralization and Semantic URI Requirements + +🚨 **CRITICAL**: All LinkML slots MUST be centralized in `schemas/20251121/linkml/modules/slots/` and MUST have semantically sound `slot_uri` predicates from base ontologies. + +**Key Requirements**: + +1. **Centralization**: All slots MUST be defined in `modules/slots/`, never inline in class files +2. **slot_uri**: Every slot MUST have a `slot_uri` from base ontologies (`data/ontology/`) +3. **Mappings**: Use `exact_mappings`, `close_mappings`, `related_mappings`, `narrow_mappings`, `broad_mappings` for additional semantic relationships + +**Why This Matters**: +- **Frontend UML visualization** depends on centralized slots for edge rendering +- **Semantic URIs** enable linked data interoperability and RDF serialization +- **Mapping annotations** connect to SKOS-based vocabulary alignment standards + +**Common slot_uri Sources**: + +| Ontology | Prefix | Example Predicates | +|----------|--------|-------------------| +| SKOS | `skos:` | `prefLabel`, `altLabel`, `definition`, `note` | +| Schema.org | `schema:` | `name`, `description`, `url`, `dateCreated` | +| Dublin Core | `dcterms:` | `identifier`, `title`, `creator`, `date` | +| PROV-O | `prov:` | `wasGeneratedBy`, `wasAttributedTo`, `atTime` | +| RiC-O | `rico:` | `hasRecordSetType`, `isOrWasPartOf` | +| CIDOC-CRM | `crm:` | `P1_is_identified_by`, `P2_has_type` | + +**Workflow for New Slots**: +1. Search `data/ontology/` for existing predicate +2. Create file in `modules/slots/` with `slot_uri` +3. Add mappings to related predicates in other ontologies +4. Update `manifest.json` with new slot file + +**See**: `.opencode/rules/slot-centralization-and-semantic-uri-rule.md` for complete documentation + +--- + ## Appendix: Full Rule Content (No .opencode Equivalent) The following rules have no separate .opencode file and are preserved in full: diff --git a/apps/archief-assistent/node_modules/.tmp/tsconfig.app.tsbuildinfo b/apps/archief-assistent/node_modules/.tmp/tsconfig.app.tsbuildinfo index caded00ad7..0e34080c68 100644 --- a/apps/archief-assistent/node_modules/.tmp/tsconfig.app.tsbuildinfo +++ b/apps/archief-assistent/node_modules/.tmp/tsconfig.app.tsbuildinfo @@ -1 +1 @@ -{"root":["../../src/app.tsx","../../src/main.tsx","../../src/vite-env.d.ts","../../src/components/changepassworddialog.tsx","../../src/components/sparqlexplorer.tsx","../../src/components/ontology/datamapviewer.tsx","../../src/components/ontology/linkmlschemaviewer.tsx","../../src/components/ontology/ontologyviewer.tsx","../../src/config/api.ts","../../src/context/authcontext.tsx","../../src/lib/semantic-cache.ts","../../src/lib/linkml/custodian-data-mappings.ts","../../src/lib/linkml/schema-loader.ts","../../src/lib/ontology/ontology-loader.ts","../../src/pages/browsepage.tsx","../../src/pages/chatpage.tsx","../../src/pages/loginpage.tsx","../../src/pages/mappage.tsx","../../src/pages/ontologypage.tsx","../../src/pages/rulespage.tsx","../../src/pages/statspage.tsx","../../src/services/authapi.ts"],"version":"5.9.3"} \ No newline at end of file +{"root":["../../src/app.tsx","../../src/main.tsx","../../src/vite-env.d.ts","../../src/components/changepassworddialog.tsx","../../src/components/debugpanel.tsx","../../src/components/sparqlexplorer.tsx","../../src/components/ontology/datamapviewer.tsx","../../src/components/ontology/linkmlschemaviewer.tsx","../../src/components/ontology/ontologyviewer.tsx","../../src/config/api.ts","../../src/context/authcontext.tsx","../../src/lib/semantic-cache.ts","../../src/lib/linkml/custodian-data-mappings.ts","../../src/lib/linkml/schema-loader.ts","../../src/lib/ontology/ontology-loader.ts","../../src/pages/browsepage.tsx","../../src/pages/chatpage.tsx","../../src/pages/loginpage.tsx","../../src/pages/mappage.tsx","../../src/pages/ontologypage.tsx","../../src/pages/rulespage.tsx","../../src/pages/statspage.tsx","../../src/services/authapi.ts"],"version":"5.9.3"} \ No newline at end of file diff --git a/apps/archief-assistent/node_modules/@types/d3 b/apps/archief-assistent/node_modules/@types/d3 new file mode 120000 index 0000000000..733808af3a --- /dev/null +++ b/apps/archief-assistent/node_modules/@types/d3 @@ -0,0 +1 @@ +../../../../node_modules/.pnpm/@types+d3@7.4.3/node_modules/@types/d3 \ No newline at end of file diff --git a/apps/archief-assistent/node_modules/d3 b/apps/archief-assistent/node_modules/d3 new file mode 120000 index 0000000000..fd7eb6214d --- /dev/null +++ b/apps/archief-assistent/node_modules/d3 @@ -0,0 +1 @@ +../../../node_modules/.pnpm/d3@7.9.0/node_modules/d3 \ No newline at end of file diff --git a/apps/archief-assistent/node_modules/lucide-react b/apps/archief-assistent/node_modules/lucide-react new file mode 120000 index 0000000000..eb415d5b9d --- /dev/null +++ b/apps/archief-assistent/node_modules/lucide-react @@ -0,0 +1 @@ +../../../node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react \ No newline at end of file diff --git a/apps/archief-assistent/package.json b/apps/archief-assistent/package.json index 22966b5d13..dd375ce590 100644 --- a/apps/archief-assistent/package.json +++ b/apps/archief-assistent/package.json @@ -28,9 +28,12 @@ "react-markdown": "^10.1.0", "react-router-dom": "^7.9.6", "rehype-raw": "^7.0.0", - "remark-gfm": "^4.0.1" + "remark-gfm": "^4.0.1", + "lucide-react": "^0.511.0", + "d3": "^7.9.0" }, "devDependencies": { + "@types/d3": "^7.4.3", "@types/js-yaml": "^4.0.9", "@types/node": "^24.10.1", "@types/react": "^19.2.5", diff --git a/apps/archief-assistent/src/components/DebugPanel.css b/apps/archief-assistent/src/components/DebugPanel.css new file mode 100644 index 0000000000..40c35e9549 --- /dev/null +++ b/apps/archief-assistent/src/components/DebugPanel.css @@ -0,0 +1,675 @@ +/** + * DebugPanel.css + * + * Styles for the enhanced debug panel with tabs for: + * - Raw Results (JSON view) + * - Knowledge Graph (D3 visualization) + * - Embeddings (PCA projection) + */ + +/* Main container */ +.debug-panel { + background: var(--color-surface, #1e1e1e); + border: 1px solid var(--color-border, #333); + border-radius: 8px; + margin-top: 12px; + overflow: hidden; + font-size: 13px; +} + +/* Tab navigation */ +.debug-panel__tabs { + display: flex; + gap: 0; + border-bottom: 1px solid var(--color-border, #333); + background: var(--color-surface-elevated, #252525); +} + +.debug-panel__tab { + display: flex; + align-items: center; + gap: 6px; + padding: 8px 14px; + border: none; + background: transparent; + color: var(--color-text-secondary, #888); + cursor: pointer; + transition: all 0.15s ease; + font-size: 12px; + font-weight: 500; + border-bottom: 2px solid transparent; + margin-bottom: -1px; +} + +.debug-panel__tab:hover { + color: var(--color-text-primary, #fff); + background: rgba(255, 255, 255, 0.05); +} + +.debug-panel__tab--active { + color: var(--color-accent, #3b82f6); + border-bottom-color: var(--color-accent, #3b82f6); + background: rgba(59, 130, 246, 0.08); +} + +.debug-panel__tab svg { + flex-shrink: 0; +} + +/* Tab content */ +.debug-panel__content { + max-height: 350px; + overflow-y: auto; +} + +/* ============================================ + Raw Results Tab Styles + ============================================ */ + +.debug-panel__raw-results { + padding: 12px; +} + +/* Toolbar */ +.debug-panel__toolbar { + display: flex; + gap: 10px; + align-items: center; + margin-bottom: 12px; + padding-bottom: 10px; + border-bottom: 1px solid var(--color-border, #333); +} + +.debug-panel__search { + flex: 1; + display: flex; + align-items: center; + gap: 6px; + background: var(--color-surface-elevated, #252525); + border: 1px solid var(--color-border, #333); + border-radius: 6px; + padding: 6px 10px; +} + +.debug-panel__search svg { + color: var(--color-text-secondary, #888); + flex-shrink: 0; +} + +.debug-panel__search-input { + flex: 1; + border: none; + background: transparent; + color: var(--color-text-primary, #fff); + font-size: 12px; + outline: none; +} + +.debug-panel__search-input::placeholder { + color: var(--color-text-secondary, #666); +} + +.debug-panel__search-clear { + display: flex; + align-items: center; + justify-content: center; + width: 16px; + height: 16px; + border: none; + background: var(--color-border, #444); + color: var(--color-text-secondary, #888); + border-radius: 50%; + cursor: pointer; + transition: all 0.15s ease; +} + +.debug-panel__search-clear:hover { + background: var(--color-text-secondary, #666); + color: var(--color-text-primary, #fff); +} + +/* Copy button */ +.debug-panel__copy-btn { + display: flex; + align-items: center; + gap: 6px; + padding: 6px 12px; + border: 1px solid var(--color-border, #444); + background: var(--color-surface-elevated, #252525); + color: var(--color-text-secondary, #aaa); + border-radius: 6px; + cursor: pointer; + font-size: 12px; + transition: all 0.15s ease; +} + +.debug-panel__copy-btn:hover { + background: rgba(255, 255, 255, 0.08); + border-color: var(--color-text-secondary, #666); + color: var(--color-text-primary, #fff); +} + +.debug-panel__copy-btn--copied { + border-color: #10b981; + color: #10b981; + background: rgba(16, 185, 129, 0.1); +} + +/* Collapsible sections */ +.debug-panel__section { + margin-bottom: 10px; + border: 1px solid var(--color-border, #333); + border-radius: 6px; + overflow: hidden; +} + +.debug-panel__section-header { + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + padding: 10px 12px; + border: none; + background: var(--color-surface-elevated, #252525); + color: var(--color-text-primary, #fff); + cursor: pointer; + transition: background 0.15s ease; +} + +.debug-panel__section-header:hover { + background: rgba(255, 255, 255, 0.05); +} + +.debug-panel__section-title { + display: flex; + align-items: center; + gap: 8px; + font-size: 12px; + font-weight: 500; +} + +.debug-panel__section-count { + color: var(--color-text-secondary, #888); + font-weight: 400; + font-size: 11px; +} + +/* JSON display */ +.debug-panel__json { + margin: 0; + padding: 12px; + background: var(--color-surface, #1a1a1a); + font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace; + font-size: 11px; + line-height: 1.5; + color: #93c5fd; + white-space: pre-wrap; + word-break: break-word; + overflow-x: auto; + max-height: 200px; + overflow-y: auto; +} + +/* Show all toggle */ +.debug-panel__show-all { + display: block; + width: 100%; + padding: 8px; + border: 1px dashed var(--color-border, #444); + background: transparent; + color: var(--color-text-secondary, #888); + border-radius: 6px; + cursor: pointer; + font-size: 12px; + transition: all 0.15s ease; +} + +.debug-panel__show-all:hover { + border-color: var(--color-accent, #3b82f6); + color: var(--color-accent, #3b82f6); +} + +/* Empty state */ +.debug-panel__empty { + text-align: center; + padding: 40px 20px; + color: var(--color-text-secondary, #666); + font-size: 13px; +} + +/* ============================================ + Knowledge Graph Tab Styles + ============================================ */ + +.debug-panel__graph { + position: relative; + padding: 12px; +} + +.debug-panel__graph-stats { + display: flex; + gap: 16px; + margin-bottom: 10px; + font-size: 11px; + color: var(--color-text-secondary, #888); +} + +.debug-panel__graph-svg { + width: 100%; + height: 250px; + background: var(--color-surface, #1a1a1a); + border-radius: 6px; + border: 1px solid var(--color-border, #333); +} + +.debug-panel__node-info { + position: absolute; + bottom: 60px; + left: 20px; + display: flex; + flex-direction: column; + gap: 4px; + background: rgba(30, 30, 30, 0.95); + border: 1px solid var(--color-border, #444); + border-radius: 6px; + padding: 10px 14px; + font-size: 12px; + max-width: 200px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); +} + +.debug-panel__node-info strong { + color: var(--color-text-primary, #fff); + font-weight: 600; +} + +.debug-panel__node-type { + color: var(--color-accent, #3b82f6); + font-size: 11px; + text-transform: capitalize; +} + +.debug-panel__node-score { + color: var(--color-text-secondary, #888); + font-size: 10px; +} + +.debug-panel__graph-hint { + text-align: center; + margin-top: 8px; + font-size: 11px; + color: var(--color-text-secondary, #666); +} + +/* ============================================ + Embeddings Tab Styles + ============================================ */ + +.debug-panel__embeddings { + position: relative; + padding: 12px; +} + +.debug-panel__embeddings-stats { + display: flex; + gap: 16px; + margin-bottom: 10px; + font-size: 11px; + color: var(--color-text-secondary, #888); +} + +.debug-panel__embeddings-canvas { + width: 100%; + height: 200px; + border-radius: 6px; + border: 1px solid var(--color-border, #333); + cursor: crosshair; +} + +.debug-panel__point-info { + position: absolute; + bottom: 60px; + left: 20px; + display: flex; + flex-direction: column; + gap: 4px; + background: rgba(30, 30, 30, 0.95); + border: 1px solid var(--color-border, #444); + border-radius: 6px; + padding: 10px 14px; + font-size: 12px; + max-width: 200px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); + pointer-events: none; +} + +.debug-panel__point-info strong { + color: var(--color-text-primary, #fff); + font-weight: 600; +} + +.debug-panel__point-type { + color: #8b5cf6; + font-size: 11px; + text-transform: capitalize; +} + +.debug-panel__point-score { + color: var(--color-text-secondary, #888); + font-size: 10px; +} + +/* ============================================ + Graph Controls (Zoom, Cluster, Export) + ============================================ */ + +.debug-panel__graph-controls { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 10px; + padding-bottom: 8px; + border-bottom: 1px solid var(--color-border, #333); +} + +.debug-panel__graph-buttons { + display: flex; + gap: 4px; + align-items: center; +} + +.debug-panel__icon-btn { + display: flex; + align-items: center; + justify-content: center; + gap: 4px; + padding: 6px 8px; + border: 1px solid var(--color-border, #444); + background: var(--color-surface-elevated, #252525); + color: var(--color-text-secondary, #888); + border-radius: 4px; + cursor: pointer; + font-size: 11px; + transition: all 0.15s ease; +} + +.debug-panel__icon-btn:hover { + background: rgba(255, 255, 255, 0.08); + border-color: var(--color-text-secondary, #666); + color: var(--color-text-primary, #fff); +} + +.debug-panel__icon-btn--active { + background: rgba(59, 130, 246, 0.15); + border-color: var(--color-accent, #3b82f6); + color: var(--color-accent, #3b82f6); +} + +.debug-panel__export-group { + display: flex; + gap: 2px; + margin-left: 8px; + padding-left: 8px; + border-left: 1px solid var(--color-border, #333); +} + +.debug-panel__zoom-level { + font-family: 'JetBrains Mono', 'Fira Code', monospace; + font-size: 10px; + color: var(--color-text-secondary, #666); + min-width: 40px; + text-align: right; +} + +/* Node close button */ +.debug-panel__node-close { + position: absolute; + top: 4px; + right: 4px; + display: flex; + align-items: center; + justify-content: center; + width: 18px; + height: 18px; + border: none; + background: rgba(255, 255, 255, 0.1); + color: var(--color-text-secondary, #888); + border-radius: 50%; + cursor: pointer; + transition: all 0.15s ease; +} + +.debug-panel__node-close:hover { + background: rgba(255, 255, 255, 0.2); + color: var(--color-text-primary, #fff); +} + +.debug-panel__node-id { + color: var(--color-text-secondary, #666); + font-size: 9px; + font-family: 'JetBrains Mono', 'Fira Code', monospace; + word-break: break-all; +} + +/* Graph legend */ +.debug-panel__graph-legend { + position: absolute; + top: 58px; + right: 20px; + display: flex; + flex-wrap: wrap; + gap: 8px; + background: rgba(30, 30, 30, 0.9); + border: 1px solid var(--color-border, #333); + border-radius: 4px; + padding: 6px 10px; + max-width: 180px; +} + +.debug-panel__legend-item { + display: flex; + align-items: center; + gap: 4px; + font-size: 9px; + color: var(--color-text-secondary, #888); + text-transform: capitalize; +} + +.debug-panel__legend-dot { + width: 8px; + height: 8px; + border-radius: 50%; + flex-shrink: 0; +} + +/* ============================================ + Embeddings Controls + ============================================ */ + +.debug-panel__embeddings-controls { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 10px; + padding-bottom: 8px; + border-bottom: 1px solid var(--color-border, #333); +} + +.debug-panel__embeddings-buttons { + display: flex; + gap: 4px; + align-items: center; +} + +.debug-panel__embeddings-legend { + display: flex; + flex-wrap: wrap; + gap: 10px; + margin-top: 10px; + padding-top: 8px; + border-top: 1px solid var(--color-border, #333); +} + +/* ============================================ + Virtual Scrolling / Load More + ============================================ */ + +.debug-panel__load-more { + text-align: center; + padding: 12px; + color: var(--color-text-secondary, #666); + font-size: 11px; + background: var(--color-surface-elevated, #252525); + border-radius: 4px; + margin-top: 8px; +} + +/* ============================================ + Timeline Tab Styles + ============================================ */ + +.debug-panel__timeline { + position: relative; + padding: 12px; +} + +.debug-panel__timeline-stats { + display: flex; + gap: 16px; + margin-bottom: 10px; + font-size: 11px; + color: var(--color-text-secondary, #888); +} + +.debug-panel__timeline-svg { + width: 100%; + height: 200px; + background: var(--color-surface, #1a1a1a); + border-radius: 6px; + border: 1px solid var(--color-border, #333); +} + +.debug-panel__timeline-axis text { + fill: var(--color-text-secondary, #888); + font-size: 10px; +} + +.debug-panel__timeline-axis line, +.debug-panel__timeline-axis path { + stroke: var(--color-border, #444); +} + +/* Event info popup */ +.debug-panel__event-info { + position: absolute; + bottom: 60px; + left: 20px; + display: flex; + flex-direction: column; + gap: 4px; + background: rgba(30, 30, 30, 0.95); + border: 1px solid var(--color-border, #444); + border-radius: 6px; + padding: 10px 14px; + font-size: 12px; + max-width: 220px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); +} + +.debug-panel__event-info strong { + color: var(--color-text-primary, #fff); + font-weight: 600; + padding-right: 20px; +} + +.debug-panel__event-close { + position: absolute; + top: 4px; + right: 4px; + display: flex; + align-items: center; + justify-content: center; + width: 18px; + height: 18px; + border: none; + background: rgba(255, 255, 255, 0.1); + color: var(--color-text-secondary, #888); + border-radius: 50%; + cursor: pointer; + transition: all 0.15s ease; +} + +.debug-panel__event-close:hover { + background: rgba(255, 255, 255, 0.2); + color: var(--color-text-primary, #fff); +} + +.debug-panel__event-date { + color: var(--color-accent, #3b82f6); + font-size: 11px; +} + +.debug-panel__event-type { + color: #f59e0b; + font-size: 11px; + text-transform: capitalize; +} + +.debug-panel__event-desc { + color: var(--color-text-secondary, #888); + font-size: 11px; + margin: 4px 0 0 0; + line-height: 1.4; +} + +/* ============================================ + Scrollbar Styling + ============================================ */ + +.debug-panel__content::-webkit-scrollbar, +.debug-panel__json::-webkit-scrollbar { + width: 6px; +} + +.debug-panel__content::-webkit-scrollbar-track, +.debug-panel__json::-webkit-scrollbar-track { + background: transparent; +} + +.debug-panel__content::-webkit-scrollbar-thumb, +.debug-panel__json::-webkit-scrollbar-thumb { + background: var(--color-border, #444); + border-radius: 3px; +} + +.debug-panel__content::-webkit-scrollbar-thumb:hover, +.debug-panel__json::-webkit-scrollbar-thumb:hover { + background: var(--color-text-secondary, #666); +} + +/* ============================================ + Responsive adjustments + ============================================ */ + +@media (max-width: 768px) { + .debug-panel__tabs { + overflow-x: auto; + } + + .debug-panel__tab { + padding: 8px 10px; + font-size: 11px; + } + + .debug-panel__tab span { + display: none; + } + + .debug-panel__toolbar { + flex-wrap: wrap; + } + + .debug-panel__copy-btn span { + display: none; + } +} diff --git a/apps/archief-assistent/src/components/DebugPanel.tsx b/apps/archief-assistent/src/components/DebugPanel.tsx new file mode 100644 index 0000000000..39e0c3cbc7 --- /dev/null +++ b/apps/archief-assistent/src/components/DebugPanel.tsx @@ -0,0 +1,1455 @@ +/** + * DebugPanel.tsx + * + * An enhanced debug panel for the ChatPage that displays: + * - Raw Results tab: JSON view with virtual scrolling, search, and source separation + * - Knowledge Graph tab: D3 graph with zoom/pan, clustering, and export + * - Embeddings tab: PCA/t-SNE projection with export to CSV + * - Timeline tab: Temporal data visualization + * + * Features: + * - Zoom and pan controls for graph visualization + * - Node clustering by institution type + * - Proper PCA implementation using power iteration + * - Export to SVG/PNG (graph) and CSV (embeddings) + * - Virtual scrolling for large result sets + * - Timeline view for temporal data + * + * Note: Run `pnpm install` to install @types/d3 for proper TypeScript support + */ + +/* eslint-disable @typescript-eslint/no-explicit-any */ + +import React, { useState, useCallback, useMemo, useRef, useEffect } from 'react'; +import { + Code, + Network, + Layers, + Copy, + Check, + Search, + X, + ChevronDown, + ChevronUp, + Database, + Sparkles, + ZoomIn, + ZoomOut, + Maximize2, + Download, + Clock, + RotateCcw, +} from 'lucide-react'; +import * as d3 from 'd3'; +import './DebugPanel.css'; + +// Inline type definition (instead of importing from ui-state) +export type DebugPanelTab = 'raw' | 'graph' | 'embeddings' | 'timeline'; + +// Types +interface RawResult { + [key: string]: unknown; +} + +interface DebugPanelProps { + /** Raw results from the API */ + results: RawResult[]; + /** Active tab */ + activeTab: DebugPanelTab; + /** Called when tab changes */ + onTabChange: (tab: DebugPanelTab) => void; + /** Translation function */ + t: (key: string) => string; + /** Current language */ + language: 'nl' | 'en'; +} + +// Translation strings +const TEXT = { + rawResults: { nl: 'Ruwe Data', en: 'Raw Results' }, + knowledgeGraph: { nl: 'Kennisgraaf', en: 'Knowledge Graph' }, + embeddings: { nl: 'Embeddings', en: 'Embeddings' }, + timeline: { nl: 'Tijdlijn', en: 'Timeline' }, + copyAll: { nl: 'Kopieer alles', en: 'Copy all' }, + copied: { nl: 'Gekopieerd!', en: 'Copied!' }, + search: { nl: 'Zoeken...', en: 'Search...' }, + showAll: { nl: 'Toon alles', en: 'Show all' }, + qdrantResults: { nl: 'Qdrant (Vector)', en: 'Qdrant (Vector)' }, + sparqlResults: { nl: 'SPARQL (Graph)', en: 'SPARQL (Graph)' }, + items: { nl: 'items', en: 'items' }, + noResults: { nl: 'Geen resultaten', en: 'No results' }, + expand: { nl: 'Uitklappen', en: 'Expand' }, + collapse: { nl: 'Inklappen', en: 'Collapse' }, + nodes: { nl: 'nodes', en: 'nodes' }, + edges: { nl: 'relaties', en: 'edges' }, + points: { nl: 'punten', en: 'points' }, + clickToExplore: { nl: 'Klik op een node om te verkennen', en: 'Click a node to explore' }, + noGraphData: { nl: 'Geen graafdata beschikbaar', en: 'No graph data available' }, + noEmbeddingData: { nl: 'Geen embedding data beschikbaar', en: 'No embedding data available' }, + noTimelineData: { nl: 'Geen tijdlijndata beschikbaar', en: 'No timeline data available' }, + exportSvg: { nl: 'Export SVG', en: 'Export SVG' }, + exportPng: { nl: 'Export PNG', en: 'Export PNG' }, + exportCsv: { nl: 'Export CSV', en: 'Export CSV' }, + resetView: { nl: 'Reset weergave', en: 'Reset view' }, + cluster: { nl: 'Clusteren', en: 'Cluster' }, + zoomIn: { nl: 'Inzoomen', en: 'Zoom in' }, + zoomOut: { nl: 'Uitzoomen', en: 'Zoom out' }, + fitToView: { nl: 'Passend maken', en: 'Fit to view' }, + events: { nl: 'gebeurtenissen', en: 'events' }, +}; + +// Node colors for graph visualization (by institution type) +const NODE_COLORS: Record = { + 'museum': '#e74c3c', + 'library': '#3498db', + 'archive': '#2ecc71', + 'gallery': '#f39c12', + 'collection': '#9b59b6', + 'organization': '#1abc9c', + 'person': '#34495e', + 'place': '#16a085', + 'location': '#16a085', + 'settlement': '#16a085', // Teal for settlements (hub nodes) + 'region': '#1abc9c', // Cyan for regions + 'country': '#27ae60', // Green for countries + 'custodian': '#e74c3c', + 'research': '#e91e63', + 'education': '#ff9800', + 'holy_site': '#795548', + 'botanical': '#4caf50', + 'default': '#6b7280', +}; + +// Source colors +const SOURCE_COLORS = { + qdrant: '#8b5cf6', // Purple for vector search + sparql: '#10b981', // Green for graph query +}; + +/** + * Determines the source type of a result based on its structure + */ +function getResultSource(result: RawResult): 'qdrant' | 'sparql' | 'unknown' { + if ('score' in result || 'vector' in result || 'payload' in result) { + return 'qdrant'; + } + if ('subject' in result || 'predicate' in result || 'object' in result) { + return 'sparql'; + } + if (result.payload && typeof result.payload === 'object') { + return 'qdrant'; + } + return 'unknown'; +} + +// Graph node and edge interfaces +interface GraphNode { + id: string; + label: string; + type: string; + source: 'qdrant' | 'sparql' | 'unknown'; + score?: number; + x?: number; + y?: number; + fx?: number | null; + fy?: number | null; +} + +interface GraphEdge { + source: string | GraphNode; + target: string | GraphNode; + label: string; +} + +interface EmbeddingPoint { + id: string; + vector: number[]; + label: string; + score?: number; + type: string; +} + +interface TimelineEvent { + id: string; + label: string; + date: Date; + type: string; + description?: string; +} + +/** + * Extracts graph data from results for visualization + * Creates hub nodes for settlements, regions, and countries to show geographic relationships + */ +function extractGraphData(results: RawResult[]): { nodes: GraphNode[]; edges: GraphEdge[] } { + const nodesMap = new Map(); + const edges: GraphEdge[] = []; + + console.log('[extractGraphData] Processing', results.length, 'results'); + + results.forEach((result, index) => { + const payload = (result.payload || result) as Record; + + // KEY FIX: Extract nested metadata object - location fields are inside metadata! + const metadata = (payload.metadata || {}) as Record; + + // Debug: Log the payload structure to understand what fields are available + if (index === 0) { + console.log('[extractGraphData] First result payload keys:', Object.keys(payload)); + console.log('[extractGraphData] First result metadata keys:', Object.keys(metadata)); + console.log('[extractGraphData] First result payload:', JSON.stringify(payload, null, 2).slice(0, 1000)); + } + + // Debug: Log problematic results (those without ghcid) + if (!payload.ghcid && !payload.ghcid_current) { + console.log(`[extractGraphData] Result ${index} has NO ghcid! Raw result:`, JSON.stringify(result, null, 2).slice(0, 500)); + } + + // Generate unique ID - prefer ghcid, fall back to name-based ID for Format 2 results + const rawName = payload.name || payload.label || payload.custodian_name; + const nameBasedId = rawName + ? `inst-${String(rawName).toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '')}` + : `node-${index}`; + const id = String(payload.ghcid_current || payload.ghcid || payload.id || nameBasedId); + const name = String(rawName || id); + // Check both payload and metadata for institution_type + const type = String(payload.institution_type || metadata.institution_type || payload.type || payload.entityType || 'unknown').toLowerCase(); + + if (!nodesMap.has(id)) { + nodesMap.set(id, { + id, + label: name, + type, + source: getResultSource(result), + score: typeof result.score === 'number' ? result.score : undefined, + }); + } + + // Extract relationships + if (payload.related_to && Array.isArray(payload.related_to)) { + (payload.related_to as string[]).forEach((targetId) => { + edges.push({ source: id, target: targetId, label: 'related_to' }); + }); + } + + // Extract location relationships from nested location object + if (payload.location && typeof payload.location === 'object') { + const loc = payload.location as Record; + const locId = String(loc.id || loc.name || `loc-${index}`); + if (!nodesMap.has(locId)) { + nodesMap.set(locId, { + id: locId, + label: String(loc.name || loc.city || locId), + type: 'location', + source: getResultSource(result), + }); + } + edges.push({ source: id, target: locId, label: 'located_in' }); + console.log('[extractGraphData] Created location edge:', id, '->', locId); + } + + // Create Settlement hub node from flat location properties (settlementName, city) + // KEY FIX: Also check metadata.city since RAG API nests location inside metadata + // KEY FIX #2: Check for non-empty strings - Format 2 results have city: "" (empty string) + const getValidString = (val: unknown): string | null => { + if (typeof val === 'string' && val.trim().length > 0) return val.trim(); + return null; + }; + + const settlementName = getValidString(payload.settlementName) + || getValidString(payload.city) + || getValidString(metadata.city) + || getValidString(payload.plaats); + + // Debug: Log what we found for each result + console.log(`[extractGraphData] Result ${index}: id=${id}, city=${settlementName || 'NONE'}, country=${getValidString(metadata.country) || getValidString(payload.country) || 'NONE'}`); + + if (settlementName) { + const settlementId = `settlement-${settlementName.toLowerCase().replace(/\s+/g, '-')}`; + if (!nodesMap.has(settlementId)) { + nodesMap.set(settlementId, { + id: settlementId, + label: String(settlementName), + type: 'settlement', + source: getResultSource(result), + }); + console.log('[extractGraphData] Created settlement node:', settlementId, 'from', settlementName); + } + // Create edge from institution to settlement + edges.push({ source: id, target: settlementId, label: 'located_in' }); + console.log('[extractGraphData] Created settlement edge:', id, '->', settlementId); + } + + // Create Region hub node from flat properties (subregionCode, region, regionName) + // KEY FIX: Also check metadata for region fields + const regionName = getValidString(payload.regionName) || getValidString(payload.subregionName) || getValidString(metadata.regionName) || getValidString(metadata.subregionName); + const regionCode = getValidString(payload.subregionCode) || getValidString(payload.region) || getValidString(metadata.region) || getValidString(payload.provincie); + if (regionName) { + const regionId = `region-${regionName.toLowerCase().replace(/\s+/g, '-')}`; + if (!nodesMap.has(regionId)) { + nodesMap.set(regionId, { + id: regionId, + label: regionName, + type: 'region', + source: getResultSource(result), + }); + console.log('[extractGraphData] Created region node:', regionId, 'from', regionName); + } + // Link settlement to region if both exist + if (settlementName) { + const settlementId = `settlement-${settlementName.toLowerCase().replace(/\s+/g, '-')}`; + edges.push({ source: settlementId, target: regionId, label: 'in_region' }); + } else { + // Link institution directly to region if no settlement + edges.push({ source: id, target: regionId, label: 'in_region' }); + } + } else if (regionCode && !regionName) { + // Use region code as fallback label + const regionId = `region-${regionCode.toLowerCase().replace(/\s+/g, '-')}`; + if (!nodesMap.has(regionId)) { + nodesMap.set(regionId, { + id: regionId, + label: regionCode, + type: 'region', + source: getResultSource(result), + }); + console.log('[extractGraphData] Created region node from code:', regionId, 'from', regionCode); + } + if (settlementName) { + const settlementId = `settlement-${settlementName.toLowerCase().replace(/\s+/g, '-')}`; + edges.push({ source: settlementId, target: regionId, label: 'in_region' }); + console.log('[extractGraphData] Created region edge:', settlementId, '->', regionId); + } else { + edges.push({ source: id, target: regionId, label: 'in_region' }); + console.log('[extractGraphData] Created region edge (no settlement):', id, '->', regionId); + } + } + + // Create Country hub node from flat properties (countryCode, country, land) + // KEY FIX: Also check metadata.country since RAG API nests location inside metadata + const countryCode = getValidString(payload.countryCode) || getValidString(payload.country) || getValidString(metadata.country) || getValidString(payload.land); + if (countryCode) { + const countryId = `country-${countryCode.toLowerCase()}`; + if (!nodesMap.has(countryId)) { + nodesMap.set(countryId, { + id: countryId, + label: countryCode.toUpperCase(), + type: 'country', + source: getResultSource(result), + }); + console.log('[extractGraphData] Created country node:', countryId); + } + // Link region to country if region exists + if (regionName) { + const regionId = `region-${regionName.toLowerCase().replace(/\s+/g, '-')}`; + edges.push({ source: regionId, target: countryId, label: 'in_country' }); + } else if (regionCode) { + const regionId = `region-${regionCode.toLowerCase().replace(/\s+/g, '-')}`; + edges.push({ source: regionId, target: countryId, label: 'in_country' }); + } else { + // Link settlement or institution directly to country + if (settlementName) { + const settlementId = `settlement-${settlementName.toLowerCase().replace(/\s+/g, '-')}`; + edges.push({ source: settlementId, target: countryId, label: 'in_country' }); + } else { + edges.push({ source: id, target: countryId, label: 'in_country' }); + } + } + } + }); + + // Deduplicate edges (same source-target-label combination) + const uniqueEdges = edges.filter((edge, index, self) => { + const sourceId = typeof edge.source === 'string' ? edge.source : edge.source.id; + const targetId = typeof edge.target === 'string' ? edge.target : edge.target.id; + return index === self.findIndex(e => { + const eSourceId = typeof e.source === 'string' ? e.source : e.source.id; + const eTargetId = typeof e.target === 'string' ? e.target : e.target.id; + return eSourceId === sourceId && eTargetId === targetId && e.label === edge.label; + }); + }); + + console.log('[extractGraphData] Final result:', { + nodeCount: nodesMap.size, + edgeCount: uniqueEdges.length, + nodeIds: Array.from(nodesMap.keys()), + edges: uniqueEdges.map(e => ({ + source: typeof e.source === 'string' ? e.source : e.source.id, + target: typeof e.target === 'string' ? e.target : e.target.id, + label: e.label + })) + }); + + return { nodes: Array.from(nodesMap.values()), edges: uniqueEdges }; +} + +/** + * Extracts embedding points from results for visualization + */ +function extractEmbeddingPoints(results: RawResult[]): EmbeddingPoint[] { + return results + .filter(r => r.vector && Array.isArray(r.vector)) + .map((result, index) => { + const payload = (result.payload || result) as Record; + const metadata = (payload.metadata || {}) as Record; + return { + id: String(payload.ghcid_current || payload.ghcid || payload.id || `point-${index}`), + vector: result.vector as number[], + label: String(payload.name || payload.label || payload.custodian_name || `Point ${index}`), + score: typeof result.score === 'number' ? result.score : undefined, + type: String(payload.institution_type || metadata.institution_type || payload.type || 'unknown').toLowerCase(), + }; + }); +} + +/** + * Extracts timeline events from results + */ +function extractTimelineEvents(results: RawResult[]): TimelineEvent[] { + const events: TimelineEvent[] = []; + + results.forEach((result, index) => { + const payload = (result.payload || result) as Record; + + // Try to extract date from various fields + const dateFields = ['founding_date', 'established', 'created_at', 'date', 'year', 'timestamp']; + let dateValue: Date | null = null; + + for (const field of dateFields) { + const val = payload[field]; + if (val) { + if (typeof val === 'string' || typeof val === 'number') { + const parsed = new Date(val); + if (!isNaN(parsed.getTime())) { + dateValue = parsed; + break; + } + } + } + } + + // Also check for year as a number (e.g., 1850) + if (!dateValue && payload.year && typeof payload.year === 'number') { + dateValue = new Date(payload.year, 0, 1); + } + + if (dateValue) { + events.push({ + id: String(payload.id || payload.ghcid_current || `event-${index}`), + label: String(payload.name || payload.label || payload.custodian_name || `Event ${index}`), + date: dateValue, + type: String(payload.institution_type || payload.type || 'unknown').toLowerCase(), + description: String(payload.description || ''), + }); + } + }); + + // Sort by date + return events.sort((a, b) => a.date.getTime() - b.date.getTime()); +} + +/** + * Proper PCA implementation using power iteration + * Projects high-dimensional vectors to 2D using the first two principal components + */ +function computePCA(points: EmbeddingPoint[]): { x: number; y: number; point: EmbeddingPoint }[] { + if (points.length === 0) return []; + + const vectors = points.map(p => p.vector); + const dim = vectors[0]?.length || 0; + if (dim === 0) return []; + + // Calculate mean + const mean = new Array(dim).fill(0); + vectors.forEach(v => v.forEach((val, i) => mean[i] += val / vectors.length)); + + // Center the data + const centered = vectors.map(v => v.map((val, i) => val - mean[i])); + + // Compute covariance matrix (simplified - diagonal approximation for performance) + // For a full PCA we'd compute X^T * X / n, but for debug visualization this is sufficient + + // Power iteration to find first principal component + const findPrincipalComponent = (data: number[][], deflatedPrev?: number[]): number[] => { + let pc = new Array(dim).fill(0).map(() => Math.random() - 0.5); + + // Normalize + const normalize = (v: number[]) => { + const norm = Math.sqrt(v.reduce((s, x) => s + x * x, 0)) || 1; + return v.map(x => x / norm); + }; + + pc = normalize(pc); + + // Power iteration (10 iterations is usually enough for convergence) + for (let iter = 0; iter < 10; iter++) { + // Compute X^T * X * pc + const newPc = new Array(dim).fill(0); + + data.forEach(row => { + // Project row onto current pc estimate + const projection = row.reduce((s, x, i) => s + x * pc[i], 0); + // Accumulate + row.forEach((x, i) => newPc[i] += x * projection); + }); + + // Deflate if we have a previous component + if (deflatedPrev) { + const dot = newPc.reduce((s, x, i) => s + x * deflatedPrev[i], 0); + newPc.forEach((_, i) => newPc[i] -= dot * deflatedPrev[i]); + } + + pc = normalize(newPc); + } + + return pc; + }; + + // Find first two principal components + const pc1 = findPrincipalComponent(centered); + const pc2 = findPrincipalComponent(centered, pc1); + + // Project points onto the two principal components + return points.map((point, idx) => { + const c = centered[idx]; + const x = c.reduce((sum, val, i) => sum + val * pc1[i], 0); + const y = c.reduce((sum, val, i) => sum + val * pc2[i], 0); + return { x, y, point }; + }); +} + +/** + * Export SVG element as SVG file + */ +function exportSvgElement(svgElement: SVGSVGElement, filename: string): void { + const serializer = new XMLSerializer(); + const svgString = serializer.serializeToString(svgElement); + const blob = new Blob([svgString], { type: 'image/svg+xml' }); + const url = URL.createObjectURL(blob); + + const link = document.createElement('a'); + link.href = url; + link.download = filename; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + URL.revokeObjectURL(url); +} + +/** + * Export SVG element as PNG file + */ +function exportSvgAsPng(svgElement: SVGSVGElement, filename: string): void { + const serializer = new XMLSerializer(); + const svgString = serializer.serializeToString(svgElement); + const canvas = document.createElement('canvas'); + const ctx = canvas.getContext('2d'); + + if (!ctx) return; + + const img = new Image(); + const blob = new Blob([svgString], { type: 'image/svg+xml;charset=utf-8' }); + const url = URL.createObjectURL(blob); + + img.onload = () => { + canvas.width = svgElement.clientWidth * 2; // 2x for retina + canvas.height = svgElement.clientHeight * 2; + ctx.scale(2, 2); + ctx.fillStyle = '#1e1e1e'; + ctx.fillRect(0, 0, canvas.width, canvas.height); + ctx.drawImage(img, 0, 0); + + const pngUrl = canvas.toDataURL('image/png'); + const link = document.createElement('a'); + link.href = pngUrl; + link.download = filename; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + URL.revokeObjectURL(url); + }; + + img.src = url; +} + +/** + * Export embedding points as CSV + */ +function exportEmbeddingsAsCsv( + projectedPoints: { x: number; y: number; point: EmbeddingPoint }[], + filename: string +): void { + const headers = ['id', 'label', 'type', 'score', 'pca_x', 'pca_y', 'vector_dim']; + const rows = projectedPoints.map(({ x, y, point }) => [ + point.id, + `"${point.label.replace(/"/g, '""')}"`, + point.type, + point.score?.toFixed(4) || '', + x.toFixed(6), + y.toFixed(6), + point.vector.length, + ].join(',')); + + const csv = [headers.join(','), ...rows].join('\n'); + const blob = new Blob([csv], { type: 'text/csv;charset=utf-8' }); + const url = URL.createObjectURL(blob); + + const link = document.createElement('a'); + link.href = url; + link.download = filename; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + URL.revokeObjectURL(url); +} + +/** + * Raw Results Tab Component with Virtual Scrolling + */ +const RawResultsTab: React.FC<{ + results: RawResult[]; + language: 'nl' | 'en'; +}> = ({ results, language }) => { + const [searchQuery, setSearchQuery] = useState(''); + const [expandedSections, setExpandedSections] = useState<{ qdrant: boolean; sparql: boolean }>({ + qdrant: true, + sparql: true, + }); + const [copied, setCopied] = useState(false); + const [visibleCount, setVisibleCount] = useState(10); + const containerRef = useRef(null); + + const t = (key: keyof typeof TEXT) => TEXT[key][language]; + + // Separate results by source + const { qdrantResults, sparqlResults } = useMemo(() => { + const qdrant: RawResult[] = []; + const sparql: RawResult[] = []; + + results.forEach(r => { + const source = getResultSource(r); + if (source === 'qdrant') qdrant.push(r); + else if (source === 'sparql') sparql.push(r); + else qdrant.push(r); + }); + + return { qdrantResults: qdrant, sparqlResults: sparql }; + }, [results]); + + // Filter results by search query + const filterResults = useCallback((items: RawResult[]) => { + if (!searchQuery.trim()) return items; + const query = searchQuery.toLowerCase(); + return items.filter(r => JSON.stringify(r).toLowerCase().includes(query)); + }, [searchQuery]); + + const filteredQdrant = useMemo(() => filterResults(qdrantResults), [filterResults, qdrantResults]); + const filteredSparql = useMemo(() => filterResults(sparqlResults), [filterResults, sparqlResults]); + + // Virtual scrolling: load more on scroll + const handleScroll = useCallback(() => { + if (!containerRef.current) return; + const { scrollTop, scrollHeight, clientHeight } = containerRef.current; + if (scrollHeight - scrollTop - clientHeight < 100) { + setVisibleCount(prev => Math.min(prev + 10, results.length)); + } + }, [results.length]); + + // Copy all results to clipboard + const handleCopyAll = useCallback(async () => { + try { + await navigator.clipboard.writeText(JSON.stringify(results, null, 2)); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + } catch (err) { + console.error('Failed to copy:', err); + } + }, [results]); + + const toggleSection = (section: 'qdrant' | 'sparql') => { + setExpandedSections(prev => ({ ...prev, [section]: !prev[section] })); + }; + + return ( +
+ {/* Toolbar */} +
+
+ + setSearchQuery(e.target.value)} + className="debug-panel__search-input" + /> + {searchQuery && ( + + )} +
+ +
+ + {/* Qdrant Section */} + {qdrantResults.length > 0 && ( +
+ + {expandedSections.qdrant && ( +
+              {JSON.stringify(filteredQdrant.slice(0, visibleCount), null, 2)}
+            
+ )} +
+ )} + + {/* SPARQL Section */} + {sparqlResults.length > 0 && ( +
+ + {expandedSections.sparql && ( +
+              {JSON.stringify(filteredSparql.slice(0, visibleCount), null, 2)}
+            
+ )} +
+ )} + + {/* Load more indicator */} + {visibleCount < results.length && ( +
+ {visibleCount} / {results.length} {t('items')} - scroll for more +
+ )} + + {/* No Results */} + {results.length === 0 && ( +
{t('noResults')}
+ )} +
+ ); +}; + +/** + * Enhanced Knowledge Graph Tab with Zoom/Pan and Clustering + */ +const KnowledgeGraphTab: React.FC<{ + results: RawResult[]; + language: 'nl' | 'en'; +}> = ({ results, language }) => { + const svgRef = useRef(null); + const containerRef = useRef(null); + const [selectedNode, setSelectedNode] = useState(null); + const [clustered, setClustered] = useState(false); + const [zoomLevel, setZoomLevel] = useState(1); + const zoomBehaviorRef = useRef | null>(null); + const simulationRef = useRef | null>(null); + + const t = (key: keyof typeof TEXT) => TEXT[key][language]; + const graphData = useMemo(() => extractGraphData(results), [results]); + + console.log('[KnowledgeGraphTab] graphData:', { + nodeCount: graphData.nodes.length, + edgeCount: graphData.edges.length, + nodes: graphData.nodes.map(n => ({ id: n.id, label: n.label, type: n.type })), + edges: graphData.edges.map(e => ({ + source: typeof e.source === 'string' ? e.source : e.source.id, + target: typeof e.target === 'string' ? e.target : e.target.id, + label: e.label + })) + }); + + // D3 force simulation with zoom/pan + useEffect(() => { + if (!svgRef.current || graphData.nodes.length === 0) return; + + const svg = d3.select(svgRef.current); + const width = svgRef.current.clientWidth || 400; + const height = svgRef.current.clientHeight || 250; + + console.log('[KnowledgeGraphTab] Setting up D3 with', graphData.nodes.length, 'nodes and', graphData.edges.length, 'edges'); + + // Clear previous + svg.selectAll('*').remove(); + + // Create zoom behavior + const zoom = d3.zoom() + .scaleExtent([0.1, 4]) + .on('zoom', (event: d3.D3ZoomEvent) => { + g.attr('transform', event.transform.toString()); + setZoomLevel(event.transform.k); + }); + + zoomBehaviorRef.current = zoom; + svg.call(zoom); + + // Main group for zoom/pan + const g = svg.append('g'); + + // Calculate cluster positions if clustering is enabled + const typeGroups = clustered ? Array.from(new Set(graphData.nodes.map(n => n.type))) : []; + const clusterCenters = new Map(); + typeGroups.forEach((type, i) => { + const angle = (2 * Math.PI * i) / typeGroups.length; + const radius = Math.min(width, height) * 0.3; + clusterCenters.set(type, { + x: width / 2 + Math.cos(angle) * radius, + y: height / 2 + Math.sin(angle) * radius, + }); + }); + + // Create simulation + const simulation = d3.forceSimulation(graphData.nodes) + .force('link', d3.forceLink(graphData.edges) + .id(d => d.id) + .distance(60)) + .force('charge', d3.forceManyBody().strength(-100)) + .force('center', d3.forceCenter(width / 2, height / 2)) + .force('collision', d3.forceCollide().radius(20)); + + // Log after force link setup + console.log('[KnowledgeGraphTab] After forceLink setup, edges:', + graphData.edges.map(e => ({ + sourceResolved: typeof e.source === 'object' ? e.source.id : e.source, + targetResolved: typeof e.target === 'object' ? e.target.id : e.target, + })) + ); + + // Add cluster force if clustering is enabled + if (clustered) { + simulation.force('cluster', (alpha: number) => { + graphData.nodes.forEach(node => { + const center = clusterCenters.get(node.type); + if (center && node.x !== undefined && node.y !== undefined) { + node.x += (center.x - node.x) * alpha * 0.1; + node.y += (center.y - node.y) * alpha * 0.1; + } + }); + }); + } + + simulationRef.current = simulation; + + // Draw edges + const links = g.append('g') + .selectAll('line') + .data(graphData.edges) + .join('line') + .attr('stroke', '#94a3b8') + .attr('stroke-width', 1) + .attr('stroke-opacity', 0.6); + + console.log('[KnowledgeGraphTab] Created', links.size(), 'link elements'); + + // Draw nodes + const nodes = g.append('g') + .selectAll('g') + .data(graphData.nodes) + .join('g') + .attr('cursor', 'pointer') + .on('click', (_event, d) => setSelectedNode(d)) + .call(d3.drag() + .on('start', (event, d) => { + if (!event.active) simulation.alphaTarget(0.3).restart(); + d.fx = d.x; + d.fy = d.y; + }) + .on('drag', (event, d) => { + d.fx = event.x; + d.fy = event.y; + }) + .on('end', (event, d) => { + if (!event.active) simulation.alphaTarget(0); + d.fx = null; + d.fy = null; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + }) as any); + + // Node circles + nodes.append('circle') + .attr('r', 12) + .attr('fill', d => NODE_COLORS[d.type] || NODE_COLORS.default) + .attr('stroke', d => d.source === 'qdrant' ? SOURCE_COLORS.qdrant : SOURCE_COLORS.sparql) + .attr('stroke-width', 2); + + // Node labels + nodes.append('text') + .text(d => d.label.slice(0, 15) + (d.label.length > 15 ? '...' : '')) + .attr('font-size', '8px') + .attr('text-anchor', 'middle') + .attr('dy', 20) + .attr('fill', '#374151'); + + // Update positions + simulation.on('tick', () => { + links + .attr('x1', d => (d.source as GraphNode).x || 0) + .attr('y1', d => (d.source as GraphNode).y || 0) + .attr('x2', d => (d.target as GraphNode).x || 0) + .attr('y2', d => (d.target as GraphNode).y || 0); + + nodes.attr('transform', d => `translate(${d.x || 0},${d.y || 0})`); + }); + + // Log tick once to check edge coordinates + simulation.on('tick.debug', () => { + const firstEdge = graphData.edges[0]; + if (firstEdge) { + console.log('[KnowledgeGraphTab] First edge coordinates:', { + sourceX: (firstEdge.source as GraphNode).x, + sourceY: (firstEdge.source as GraphNode).y, + targetX: (firstEdge.target as GraphNode).x, + targetY: (firstEdge.target as GraphNode).y, + }); + } + simulation.on('tick.debug', null); // Remove after first tick + }); + + return () => { + simulation.stop(); + }; + }, [graphData, clustered]); + + // Zoom controls + const handleZoomIn = () => { + if (svgRef.current && zoomBehaviorRef.current) { + d3.select(svgRef.current).transition().call(zoomBehaviorRef.current.scaleBy, 1.3); + } + }; + + const handleZoomOut = () => { + if (svgRef.current && zoomBehaviorRef.current) { + d3.select(svgRef.current).transition().call(zoomBehaviorRef.current.scaleBy, 0.7); + } + }; + + const handleFitToView = () => { + if (svgRef.current && zoomBehaviorRef.current) { + d3.select(svgRef.current).transition().call( + zoomBehaviorRef.current.transform, + d3.zoomIdentity + ); + } + }; + + const handleExportSvg = () => { + if (svgRef.current) { + exportSvgElement(svgRef.current, 'knowledge-graph.svg'); + } + }; + + const handleExportPng = () => { + if (svgRef.current) { + exportSvgAsPng(svgRef.current, 'knowledge-graph.png'); + } + }; + + if (graphData.nodes.length === 0) { + return
{t('noGraphData')}
; + } + + return ( +
+ {/* Controls */} +
+
+ {graphData.nodes.length} {t('nodes')} + {graphData.edges.length} {t('edges')} + {Math.round(zoomLevel * 100)}% +
+
+ + + + +
+ + +
+
+
+ + {/* Graph SVG */} + + + {/* Selected node info */} + {selectedNode && ( +
+ + {selectedNode.label} + {selectedNode.type} + {selectedNode.score !== undefined && ( + Score: {selectedNode.score.toFixed(3)} + )} + {selectedNode.id} +
+ )} + + {/* Legend */} +
+ {Object.entries(NODE_COLORS).slice(0, 6).map(([type, color]) => ( +
+ + {type} +
+ ))} +
+
+ ); +}; + +/** + * Enhanced Embedding Projector Tab with PCA and Export + */ +const EmbeddingsTab: React.FC<{ + results: RawResult[]; + language: 'nl' | 'en'; +}> = ({ results, language }) => { + const canvasRef = useRef(null); + const [hoveredPoint, setHoveredPoint] = useState(null); + const [zoomLevel, setZoomLevel] = useState(1); + const [panOffset, setPanOffset] = useState({ x: 0, y: 0 }); + const [isDragging, setIsDragging] = useState(false); + const lastMousePos = useRef({ x: 0, y: 0 }); + + const t = (key: keyof typeof TEXT) => TEXT[key][language]; + + const embeddingPoints = useMemo(() => extractEmbeddingPoints(results), [results]); + const projectedPoints = useMemo(() => computePCA(embeddingPoints), [embeddingPoints]); + + // Draw points on canvas with zoom/pan + useEffect(() => { + if (!canvasRef.current || projectedPoints.length === 0) return; + + const canvas = canvasRef.current; + const ctx = canvas.getContext('2d'); + if (!ctx) return; + + const width = canvas.width; + const height = canvas.height; + + // Clear + ctx.fillStyle = '#1e1e1e'; + ctx.fillRect(0, 0, width, height); + + // Find bounds + const xs = projectedPoints.map(p => p.x); + const ys = projectedPoints.map(p => p.y); + const minX = Math.min(...xs); + const maxX = Math.max(...xs); + const minY = Math.min(...ys); + const maxY = Math.max(...ys); + const rangeX = maxX - minX || 1; + const rangeY = maxY - minY || 1; + + // Apply zoom and pan + ctx.save(); + ctx.translate(width / 2 + panOffset.x, height / 2 + panOffset.y); + ctx.scale(zoomLevel, zoomLevel); + ctx.translate(-width / 2, -height / 2); + + // Draw grid + ctx.strokeStyle = '#333'; + ctx.lineWidth = 0.5; + for (let i = 0; i <= 4; i++) { + const x = (i / 4) * width; + const y = (i / 4) * height; + ctx.beginPath(); + ctx.moveTo(x, 0); + ctx.lineTo(x, height); + ctx.stroke(); + ctx.beginPath(); + ctx.moveTo(0, y); + ctx.lineTo(width, y); + ctx.stroke(); + } + + // Draw points + const storedPoints: Array<{ px: number; py: number; point: EmbeddingPoint }> = []; + + projectedPoints.forEach(({ x, y, point }) => { + const px = ((x - minX) / rangeX) * (width - 40) + 20; + const py = ((y - minY) / rangeY) * (height - 40) + 20; + + storedPoints.push({ px, py, point }); + + const color = NODE_COLORS[point.type] || NODE_COLORS.default; + + // Draw point shadow + ctx.beginPath(); + ctx.arc(px, py, 8, 0, Math.PI * 2); + ctx.fillStyle = 'rgba(0,0,0,0.3)'; + ctx.fill(); + + // Draw point + ctx.beginPath(); + ctx.arc(px, py, 6, 0, Math.PI * 2); + ctx.fillStyle = color; + ctx.fill(); + + // Draw score indicator + if (point.score !== undefined) { + ctx.beginPath(); + ctx.arc(px, py, 3 + point.score * 3, 0, Math.PI * 2); + ctx.strokeStyle = '#ffffff'; + ctx.lineWidth = 1; + ctx.stroke(); + } + }); + + ctx.restore(); + + // Store for hover detection + (canvas as unknown as { __projectedPoints: typeof storedPoints }).__projectedPoints = storedPoints; + }, [projectedPoints, zoomLevel, panOffset]); + + // Handle hover + const handleMouseMove = useCallback((e: React.MouseEvent) => { + const canvas = canvasRef.current; + if (!canvas) return; + + if (isDragging) { + const dx = e.clientX - lastMousePos.current.x; + const dy = e.clientY - lastMousePos.current.y; + setPanOffset(prev => ({ x: prev.x + dx, y: prev.y + dy })); + lastMousePos.current = { x: e.clientX, y: e.clientY }; + return; + } + + const rect = canvas.getBoundingClientRect(); + const x = (e.clientX - rect.left) * (canvas.width / rect.width); + const y = (e.clientY - rect.top) * (canvas.height / rect.height); + + // Adjust for zoom and pan + const adjustedX = (x - canvas.width / 2 - panOffset.x) / zoomLevel + canvas.width / 2; + const adjustedY = (y - canvas.height / 2 - panOffset.y) / zoomLevel + canvas.height / 2; + + const stored = (canvas as unknown as { __projectedPoints: Array<{ px: number; py: number; point: EmbeddingPoint }> }).__projectedPoints; + if (!stored) return; + + let nearest: EmbeddingPoint | null = null; + let minDist = 15 / zoomLevel; + + stored.forEach(({ px, py, point }) => { + const dist = Math.sqrt((adjustedX - px) ** 2 + (adjustedY - py) ** 2); + if (dist < minDist) { + minDist = dist; + nearest = point; + } + }); + + setHoveredPoint(nearest); + }, [isDragging, zoomLevel, panOffset]); + + const handleMouseDown = (e: React.MouseEvent) => { + setIsDragging(true); + lastMousePos.current = { x: e.clientX, y: e.clientY }; + }; + + const handleMouseUp = () => setIsDragging(false); + + const handleWheel = useCallback((e: React.WheelEvent) => { + e.preventDefault(); + const delta = e.deltaY > 0 ? 0.9 : 1.1; + setZoomLevel(prev => Math.max(0.1, Math.min(4, prev * delta))); + }, []); + + const handleReset = () => { + setZoomLevel(1); + setPanOffset({ x: 0, y: 0 }); + }; + + const handleExportCsv = () => { + exportEmbeddingsAsCsv(projectedPoints, 'embeddings.csv'); + }; + + if (embeddingPoints.length === 0) { + return
{t('noEmbeddingData')}
; + } + + return ( +
+ {/* Controls */} +
+
+ {embeddingPoints.length} {t('points')} + {embeddingPoints[0]?.vector && ( + {embeddingPoints[0].vector.length}D → 2D PCA + )} + {Math.round(zoomLevel * 100)}% +
+
+ + + + +
+
+ + {/* Canvas */} + { setHoveredPoint(null); setIsDragging(false); }} + onWheel={handleWheel} + /> + + {/* Hovered point info */} + {hoveredPoint && ( +
+ {hoveredPoint.label} + {hoveredPoint.type} + {hoveredPoint.score !== undefined && ( + Score: {hoveredPoint.score.toFixed(3)} + )} +
+ )} + + {/* Legend */} +
+ {Object.entries(NODE_COLORS).slice(0, 6).map(([type, color]) => ( +
+ + {type} +
+ ))} +
+
+ ); +}; + +/** + * Timeline Tab Component for temporal data visualization + */ +const TimelineTab: React.FC<{ + results: RawResult[]; + language: 'nl' | 'en'; +}> = ({ results, language }) => { + const svgRef = useRef(null); + const [selectedEvent, setSelectedEvent] = useState(null); + + const t = (key: keyof typeof TEXT) => TEXT[key][language]; + const timelineEvents = useMemo(() => extractTimelineEvents(results), [results]); + + // Draw timeline + useEffect(() => { + if (!svgRef.current || timelineEvents.length === 0) return; + + const svg = d3.select(svgRef.current); + const width = svgRef.current.clientWidth || 400; + const height = svgRef.current.clientHeight || 200; + const margin = { top: 20, right: 20, bottom: 40, left: 20 }; + + // Clear previous + svg.selectAll('*').remove(); + + // Time scale + const timeExtent = d3.extent(timelineEvents, d => d.date) as [Date, Date]; + const xScale = d3.scaleTime() + .domain(timeExtent) + .range([margin.left, width - margin.right]); + + // Draw axis + const xAxis = d3.axisBottom(xScale) + .ticks(5) + .tickFormat(d => d3.timeFormat('%Y')(d as Date)); + + svg.append('g') + .attr('transform', `translate(0,${height - margin.bottom})`) + .attr('class', 'debug-panel__timeline-axis') + .call(xAxis); + + // Draw timeline line + svg.append('line') + .attr('x1', margin.left) + .attr('y1', height / 2) + .attr('x2', width - margin.right) + .attr('y2', height / 2) + .attr('stroke', '#444') + .attr('stroke-width', 2); + + // Events are positioned on timeline by their date using xScale + + // Draw events + const events = svg.selectAll('g.event') + .data(timelineEvents) + .join('g') + .attr('class', 'event') + .attr('transform', (d, i) => { + const x = xScale(d.date); + const yOffset = (i % 2 === 0 ? -30 : 30); + return `translate(${x},${height / 2 + yOffset})`; + }) + .attr('cursor', 'pointer') + .on('click', (_event, d) => setSelectedEvent(d)); + + // Event circles + events.append('circle') + .attr('r', 8) + .attr('fill', d => NODE_COLORS[d.type] || NODE_COLORS.default) + .attr('stroke', '#fff') + .attr('stroke-width', 2); + + // Event labels + events.append('text') + .text(d => d.label.slice(0, 12) + (d.label.length > 12 ? '...' : '')) + .attr('font-size', '9px') + .attr('text-anchor', 'middle') + .attr('dy', (_, i) => i % 2 === 0 ? -15 : 20) + .attr('fill', '#888'); + + // Connector lines + events.append('line') + .attr('x1', 0) + .attr('y1', 0) + .attr('x2', 0) + .attr('y2', (_, i) => i % 2 === 0 ? 30 : -30) + .attr('stroke', '#444') + .attr('stroke-width', 1) + .attr('stroke-dasharray', '2,2'); + + }, [timelineEvents]); + + if (timelineEvents.length === 0) { + return
{t('noTimelineData')}
; + } + + return ( +
+
+ {timelineEvents.length} {t('events')} + {timelineEvents.length > 0 && ( + + {d3.timeFormat('%Y')(timelineEvents[0].date)} - {d3.timeFormat('%Y')(timelineEvents[timelineEvents.length - 1].date)} + + )} +
+ + + + {selectedEvent && ( +
+ + {selectedEvent.label} + + {d3.timeFormat('%B %d, %Y')(selectedEvent.date)} + + {selectedEvent.type} + {selectedEvent.description && ( +

{selectedEvent.description}

+ )} +
+ )} +
+ ); +}; + +/** + * Main DebugPanel Component + */ +export const DebugPanel: React.FC = ({ + results, + activeTab, + onTabChange, + t: _externalT, + language, +}) => { + const t = (key: keyof typeof TEXT) => TEXT[key][language]; + + const tabs: { id: DebugPanelTab; label: string; icon: React.ReactNode }[] = [ + { id: 'raw', label: t('rawResults'), icon: }, + { id: 'graph', label: t('knowledgeGraph'), icon: }, + { id: 'embeddings', label: t('embeddings'), icon: }, + { id: 'timeline', label: t('timeline'), icon: }, + ]; + + return ( +
+ {/* Tab Navigation */} +
+ {tabs.map(tab => ( + + ))} +
+ + {/* Tab Content */} +
+ {activeTab === 'raw' && } + {activeTab === 'graph' && } + {activeTab === 'embeddings' && } + {activeTab === 'timeline' && } +
+
+ ); +}; + +export default DebugPanel; diff --git a/apps/archief-assistent/src/pages/ChatPage.tsx b/apps/archief-assistent/src/pages/ChatPage.tsx index b979e315f7..9e7939852a 100644 --- a/apps/archief-assistent/src/pages/ChatPage.tsx +++ b/apps/archief-assistent/src/pages/ChatPage.tsx @@ -50,6 +50,11 @@ import type { CachedResponse, CacheStats } from '../lib/semantic-cache' import { SPARQLExplorer } from '../components/SPARQLExplorer' import type { SPARQLResult } from '../components/SPARQLExplorer' +// Import Debug Panel component +import { DebugPanel } from '../components/DebugPanel' +import type { DebugPanelTab } from '../components/DebugPanel' +import { Code } from 'lucide-react' + // NA Color palette const naColors = { primary: '#007bc7', @@ -367,6 +372,11 @@ function ChatPage() { }) const [cacheStats, setCacheStats] = useState(null) + // Debug Panel state + const [showDebugPanel, setShowDebugPanel] = useState(false) + const [debugPanelTab, setDebugPanelTab] = useState('raw') + const [debugResults, setDebugResults] = useState[]>([]) + // Derive provider from selected model const selectedModelInfo = LLM_MODELS.find(m => m.id === selectedModel) || LLM_MODELS[0] const llmProvider = selectedModelInfo.provider @@ -692,7 +702,8 @@ function ChatPage() { })) // Parse institutions from retrieved_results (metadata is nested) - const institutions: Institution[] = ((data.retrieved_results || []) as Record[]).map((r: Record) => { + const retrievedResults = (data.retrieved_results || []) as Record[] + const institutions: Institution[] = retrievedResults.map((r: Record) => { const metadata = (r.metadata || {}) as Record const scores = (r.scores || {}) as Record return { @@ -705,6 +716,9 @@ function ChatPage() { score: scores.combined as number | undefined, } }) + + // Store retrieved results for Debug Panel + setDebugResults(retrievedResults) // ======================================== // STORE IN CACHE (after successful response) // ======================================== @@ -1105,6 +1119,25 @@ function ChatPage() { + {/* Debug Panel - collapsible section showing RAG results */} + 0}> + + + key} + language="nl" + /> + + + + {/* Input Area */} + {/* Debug Panel Toggle */} + + setShowDebugPanel(!showDebugPanel)} + sx={{ + width: 24, + height: 24, + color: showDebugPanel ? naColors.primary : 'text.secondary', + '&:hover': { color: naColors.primary }, + }} + > + + + )} diff --git a/backend/rag/__init__.py b/backend/rag/__init__.py index 7f8c518b67..b49218a189 100644 --- a/backend/rag/__init__.py +++ b/backend/rag/__init__.py @@ -3,6 +3,28 @@ Heritage RAG Backend Multi-source retrieval-augmented generation system for heritage custodian data. Combines Qdrant vector search, Oxigraph SPARQL, TypeDB, and PostGIS. + +New modules (v1.1.0): +- temporal_resolver: Temporal conflict resolution for historical facts +- semantic_router: Signal-based query routing (no LLM) +- event_retriever: Hypergraph-based event retrieval """ -__version__ = "1.0.0" +__version__ = "1.1.0" + +# Lazy imports to avoid circular dependencies +def get_temporal_resolver(): + from .temporal_resolver import get_temporal_resolver + return get_temporal_resolver() + +def get_signal_extractor(): + from .semantic_router import get_signal_extractor + return get_signal_extractor() + +def get_decision_router(): + from .semantic_router import get_decision_router + return get_decision_router() + +def create_event_retriever(*args, **kwargs): + from .event_retriever import create_event_retriever + return create_event_retriever(*args, **kwargs) diff --git a/backend/rag/dspy_heritage_rag.py b/backend/rag/dspy_heritage_rag.py index a3062c657c..a5b9ececef 100644 --- a/backend/rag/dspy_heritage_rag.py +++ b/backend/rag/dspy_heritage_rag.py @@ -32,6 +32,20 @@ import httpx from dspy import Example, Prediction, History from dspy.streaming import StatusMessage, StreamListener, StatusMessageProvider +# Semantic routing (Signal-Decision pattern) for fast LLM-free query classification +from .semantic_router import ( + QuerySignals, + RouteConfig, + get_signal_extractor, + get_decision_router, +) + +# Temporal intent extraction for detailed temporal constraint detection +from .temporal_intent import ( + TemporalConstraint, + get_temporal_extractor, +) + logger = logging.getLogger(__name__) @@ -1670,14 +1684,34 @@ class HeritageQueryRouter(dspy.Module): If provided, routing uses this LM instead of the global default. Recommended: Use a fast model like glm-4.5-flash or gpt-4o-mini for routing while keeping quality models for answer generation. + signal_threshold: Confidence threshold (0.0-1.0) for signal-based routing. + When semantic signal extraction confidence >= this threshold, + skip LLM classification and use signal-based routing (faster). + Set to 1.0 to always use LLM classification. + Default: 0.8 (skip LLM when signals are clear). """ - def __init__(self, use_schema_aware: Optional[bool] = None, fast_lm: Optional[dspy.LM] = None): + def __init__( + self, + use_schema_aware: Optional[bool] = None, + fast_lm: Optional[dspy.LM] = None, + signal_threshold: float = 0.8 + ): super().__init__() # Store fast LM for routing (None means use global default) self.fast_lm = fast_lm + # Signal-Decision pattern: fast LLM-free routing for high-confidence queries + self.signal_extractor = get_signal_extractor() + self.decision_router = get_decision_router() + self.signal_threshold = signal_threshold + + # Temporal intent extraction for detailed constraint detection + self.temporal_extractor = get_temporal_extractor() + + logger.info(f"HeritageQueryRouter signal threshold: {signal_threshold}") + # Determine whether to use schema-aware signature if use_schema_aware is None: use_schema_aware = SCHEMA_LOADER_AVAILABLE @@ -1710,6 +1744,9 @@ class HeritageQueryRouter(dspy.Module): def forward(self, question: str, language: str = "nl", history: History | None = None) -> Prediction: """Classify query and determine routing. + Uses Signal-Decision pattern: fast signal extraction first, then LLM only + when signals are ambiguous (confidence < signal_threshold). + Args: question: User's current question language: Language code (nl, en, etc.) @@ -1726,10 +1763,81 @@ class HeritageQueryRouter(dspy.Module): - target_role_category: Staff role category (when entity_type='person') - target_staff_role: Specific staff role (when entity_type='person') - target_custodian_type: Custodian type (when entity_type='institution') + - signal_based: Whether routing was signal-based (True) or LLM-based (False) + - route_config: RouteConfig from semantic router (when signal_based=True) + - temporal_constraint: TemporalConstraint with type, dates, and recommended + SPARQL template (when intent='temporal' and signal_based=True) """ if history is None: history = History(messages=[]) + # ===== SIGNAL EXTRACTION (Fast, no LLM) ===== + signals = self.signal_extractor.extract_signals(question) + logger.debug( + f"Signal extraction: entity_type={signals.entity_type}, intent={signals.intent}, " + f"confidence={signals.confidence:.2f}, temporal={signals.has_temporal_constraint}" + ) + + # ===== HIGH-CONFIDENCE SIGNALS: Skip LLM ===== + if signals.confidence >= self.signal_threshold: + logger.info( + f"Signal-based routing (confidence={signals.confidence:.2f} >= {self.signal_threshold}): " + f"entity_type={signals.entity_type}, intent={signals.intent}" + ) + + # Get route configuration from semantic decision router + route_config = self.decision_router.route(signals) + + # Map signal intent to source mapping + recommended_sources = self.source_mapping.get( + signals.intent, ["qdrant", "sparql"] + ) + + # ===== TEMPORAL CONSTRAINT EXTRACTION ===== + # When temporal signals detected, extract detailed constraints for SPARQL template selection + temporal_constraint: TemporalConstraint | None = None + if signals.has_temporal_constraint: + temporal_constraint = self.temporal_extractor.extract(question) + logger.debug( + f"Temporal constraint: type={temporal_constraint.constraint_type}, " + f"template={temporal_constraint.recommended_template}, " + f"dates={temporal_constraint.date_start}/{temporal_constraint.date_end}" + ) + + # Build prediction from signals (no LLM call) + prediction = Prediction( + intent=signals.intent, + entities=signals.institution_mentions + signals.person_mentions, + sources=recommended_sources, + reasoning=f"Signal-based routing (confidence={signals.confidence:.2f})", + resolved_question=question, # No reference resolution without LLM + entity_type=signals.entity_type, + target_role_category='UNKNOWN', # Requires LLM for detailed classification + target_staff_role='UNKNOWN', + target_custodian_type='UNKNOWN', + target_custodian_slug=None, + # Signal-based routing metadata + signal_based=True, + signals=signals, + route_config=route_config, + # Temporal constraint for SPARQL template selection + temporal_constraint=temporal_constraint, + ) + + # For person queries, try to extract institution slug + if signals.entity_type == 'person' and signals.institution_mentions: + target_custodian_slug = extract_institution_slug_from_query(question) + if target_custodian_slug: + prediction.target_custodian_slug = target_custodian_slug + logger.info(f"Signal-based: extracted institution slug '{target_custodian_slug}'") + + return prediction + + # ===== LOW-CONFIDENCE SIGNALS: Use LLM ===== + logger.info( + f"LLM-based routing (confidence={signals.confidence:.2f} < {self.signal_threshold})" + ) + # Use fast LM for routing if configured, otherwise use global default if self.fast_lm: with dspy.settings.context(lm=self.fast_lm): @@ -1804,6 +1912,12 @@ class HeritageQueryRouter(dspy.Module): target_custodian_type=target_custodian_type, # Institution filter for person queries target_custodian_slug=target_custodian_slug, + # LLM-based routing metadata + signal_based=False, + signals=signals, # Include signals even for LLM routing (for debugging) + route_config=None, + # Temporal constraint (extracted on demand for LLM-based routing if temporal intent) + temporal_constraint=None, # Could extract here too if result.intent == 'temporal' ) return prediction @@ -4215,15 +4329,26 @@ class HeritageRAGPipeline(dspy.Module): result_ghcid = uri.split('/hc/')[-1] break if result_ghcid: + # Build nested metadata structure for frontend consistency + sparql_city = sparql_result.get('city', '') + sparql_address = sparql_result.get('address', '') + sparql_website = sparql_result.get('website', '') sparql_only_result = { 'ghcid': result_ghcid, 'name': sparql_result.get('name', result_ghcid.split('/')[-1].replace('-', ' ').title()), 'type': 'institution', 'source': 'sparql', + # Nested metadata for frontend Knowledge Graph + 'metadata': { + 'city': sparql_city, + 'address': sparql_address, + 'website': sparql_website, + }, + # Also keep flat fields for backward compatibility + 'city': sparql_city, + 'address': sparql_address, + 'website': sparql_website, } - for field in ['address', 'website', 'city']: - if field in sparql_result: - sparql_only_result[field] = sparql_result[field] inst_results.append(type('SPARQLResult', (), sparql_only_result)()) if inst_results: @@ -4247,10 +4372,24 @@ class HeritageRAGPipeline(dspy.Module): city = getattr(inst, 'city', '') lat = getattr(inst, 'latitude', None) lon = getattr(inst, 'longitude', None) - # Build dict for frontend + ghcid = getattr(inst, 'ghcid', None) + address = getattr(inst, 'address', '') + website = getattr(inst, 'website', '') + # Build dict with nested metadata for frontend Knowledge Graph retrieved_results.append({ "type": "institution", + "ghcid": ghcid, "name": name, + # Nested metadata for frontend consistency + "metadata": { + "institution_type": inst_type, + "city": city, + "address": address, + "website": website, + "latitude": lat, + "longitude": lon, + }, + # Also keep flat fields for backward compatibility "institution_type": inst_type, "city": city, "latitude": lat, @@ -4757,15 +4896,26 @@ class HeritageRAGPipeline(dspy.Module): result_ghcid = uri.split('/hc/')[-1] break if result_ghcid and result_ghcid not in existing_ghcids: + # Build nested metadata structure for frontend consistency + sparql_city = sparql_result.get('city', '') + sparql_address = sparql_result.get('address', '') + sparql_website = sparql_result.get('website', '') sparql_only_result = { 'ghcid': result_ghcid, 'name': sparql_result.get('name', result_ghcid.split('/')[-1].replace('-', ' ').title()), 'type': 'institution', 'source': 'sparql', + # Nested metadata for frontend Knowledge Graph + 'metadata': { + 'city': sparql_city, + 'address': sparql_address, + 'website': sparql_website, + }, + # Also keep flat fields for backward compatibility + 'city': sparql_city, + 'address': sparql_address, + 'website': sparql_website, } - for field in ['address', 'website', 'city']: - if field in sparql_result: - sparql_only_result[field] = sparql_result[field] filtered_results.append(type('SPARQLResult', (), sparql_only_result)()) sparql_only_count += 1 @@ -4784,15 +4934,26 @@ class HeritageRAGPipeline(dspy.Module): result_ghcid = uri.split('/hc/')[-1] break if result_ghcid: + # Build nested metadata structure for frontend consistency + sparql_city = sparql_result.get('city', '') + sparql_address = sparql_result.get('address', '') + sparql_website = sparql_result.get('website', '') sparql_only_result = { 'ghcid': result_ghcid, 'name': sparql_result.get('name', result_ghcid.split('/')[-1].replace('-', ' ').title()), 'type': 'institution', 'source': 'sparql', + # Nested metadata for frontend Knowledge Graph + 'metadata': { + 'city': sparql_city, + 'address': sparql_address, + 'website': sparql_website, + }, + # Also keep flat fields for backward compatibility + 'city': sparql_city, + 'address': sparql_address, + 'website': sparql_website, } - for field in ['address', 'website', 'city']: - if field in sparql_result: - sparql_only_result[field] = sparql_result[field] inst_results.append(type('SPARQLResult', (), sparql_only_result)()) if inst_results: @@ -4813,11 +4974,30 @@ class HeritageRAGPipeline(dspy.Module): name = getattr(inst, 'name', 'Unknown') inst_type = getattr(inst, 'type', '') city = getattr(inst, 'city', '') + ghcid = getattr(inst, 'ghcid', None) + address = getattr(inst, 'address', '') + website = getattr(inst, 'website', '') + lat = getattr(inst, 'latitude', None) + lon = getattr(inst, 'longitude', None) + # Build dict with nested metadata for frontend Knowledge Graph retrieved_results.append({ "type": "institution", + "ghcid": ghcid, "name": name, + # Nested metadata for frontend consistency + "metadata": { + "institution_type": inst_type, + "city": city, + "address": address, + "website": website, + "latitude": lat, + "longitude": lon, + }, + # Also keep flat fields for backward compatibility "institution_type": inst_type, "city": city, + "latitude": lat, + "longitude": lon, }) entry = f"- {name}" diff --git a/backend/rag/event_retriever.py b/backend/rag/event_retriever.py new file mode 100644 index 0000000000..0f2b0ed2c7 --- /dev/null +++ b/backend/rag/event_retriever.py @@ -0,0 +1,393 @@ +""" +Heritage Event Retrieval using Hypergraph Patterns + +Retrieves organizational change events (mergers, foundings, etc.) using +multi-factor scoring: entity overlap + semantic similarity + temporal relevance. + +Based on: docs/plan/external_design_patterns/04_temporal_semantic_hypergraph.md +""" + +from dataclasses import dataclass, field +from datetime import datetime +from typing import Optional, Callable, Any +import logging + +import numpy as np + +logger = logging.getLogger(__name__) + + +@dataclass +class HeritageEvent: + """Hyperedge representing a heritage organizational event.""" + event_id: str + event_type: str + event_date: datetime + participants: dict[str, str] # role -> GHCID + description: str + affected_collections: list[str] = field(default_factory=list) + resulting_entities: list[str] = field(default_factory=list) + confidence: float = 1.0 + embedding: Optional[list[float]] = None + + +class EventRetriever: + """ + Retrieve heritage events using hypergraph patterns. + + Uses multi-factor scoring: + - Entity overlap (entities mentioned in query match event participants) + - Semantic similarity (query embedding vs event description) + - Temporal relevance (how close event date is to query date) + - Graph connectivity (how connected the event is in the knowledge graph) + """ + + def __init__( + self, + oxigraph_query_fn: Callable[[str], list[dict]], + qdrant_search_fn: Callable[[str, int], list[dict]], + embed_fn: Callable[[str], list[float]] + ): + """ + Args: + oxigraph_query_fn: Function to execute SPARQL queries + qdrant_search_fn: Function to search Qdrant events collection + embed_fn: Function to embed text + """ + self.sparql = oxigraph_query_fn + self.vector_search = qdrant_search_fn + self.embed = embed_fn + + def retrieve( + self, + query: str, + query_entities: list[str] = None, + query_time: datetime = None, + event_type: str = None, + limit: int = 10, + weights: dict = None + ) -> list[tuple[HeritageEvent, float]]: + """ + Retrieve events using multi-factor scoring. + + Args: + query: Natural language query + query_entities: GHCIDs mentioned in query + query_time: Temporal constraint + event_type: Filter by event type (MERGER, FOUNDING, CLOSURE, etc.) + limit: Max results + weights: Scoring weights for each factor + + Returns: + List of (event, score) tuples ordered by relevance + """ + if weights is None: + weights = { + "entity": 0.3, + "semantic": 0.4, + "temporal": 0.2, + "graph": 0.1 + } + + # Phase 1: Candidate generation + candidates = {} + + # Entity-based candidates from SPARQL + if query_entities: + sparql_candidates = self._get_entity_candidates(query_entities, event_type) + candidates.update(sparql_candidates) + + # Semantic candidates from Qdrant + vector_candidates = self._get_semantic_candidates(query, limit * 2) + candidates.update(vector_candidates) + + if not candidates: + logger.info(f"No event candidates found for query: {query}") + return [] + + # Phase 2: Score all candidates + scored = [] + for event_id, event in candidates.items(): + score = self._score_event( + event, query, query_entities, query_time, weights + ) + scored.append((event, score)) + + # Sort and return top-k + scored.sort(key=lambda x: x[1], reverse=True) + return scored[:limit] + + def retrieve_by_type( + self, + event_type: str, + start_date: datetime = None, + end_date: datetime = None, + limit: int = 50 + ) -> list[HeritageEvent]: + """ + Retrieve events of a specific type within a date range. + + Simpler retrieval for structured queries (no scoring). + """ + date_filter = "" + if start_date: + date_filter += f'FILTER(?date >= "{start_date.isoformat()}"^^xsd:date) ' + if end_date: + date_filter += f'FILTER(?date <= "{end_date.isoformat()}"^^xsd:date) ' + + sparql = f""" + PREFIX hc: + PREFIX crm: + PREFIX schema: + PREFIX xsd: + + SELECT ?event ?eventType ?date ?description WHERE {{ + ?event a hc:OrganizationalChangeEvent ; + hc:eventType ?eventType ; + hc:eventDate ?date . + OPTIONAL {{ ?event schema:description ?description }} + + FILTER(?eventType = "{event_type}") + {date_filter} + }} + ORDER BY ?date + LIMIT {limit} + """ + + results = self.sparql(sparql) + events = [] + + for row in results: + event = HeritageEvent( + event_id=row.get("event", ""), + event_type=row.get("eventType", event_type), + event_date=datetime.fromisoformat(row["date"]) if row.get("date") else datetime.now(), + participants={}, + description=row.get("description", "") + ) + events.append(event) + + return events + + def _get_entity_candidates( + self, + ghcids: list[str], + event_type: str = None + ) -> dict[str, HeritageEvent]: + """Get events involving specified entities via SPARQL.""" + ghcid_filter = ", ".join(f'"{g}"' for g in ghcids) + event_type_filter = f'FILTER(?eventType = "{event_type}")' if event_type else "" + + sparql = f""" + PREFIX hc: + PREFIX crm: + PREFIX schema: + + SELECT DISTINCT ?event ?eventType ?date ?description ?participant ?role WHERE {{ + ?event a hc:OrganizationalChangeEvent ; + hc:eventType ?eventType ; + hc:eventDate ?date . + OPTIONAL {{ ?event schema:description ?description }} + + # Get participants + ?event ?role ?participant . + FILTER(STRSTARTS(STR(?role), "http://www.cidoc-crm.org/cidoc-crm/P") || + STRSTARTS(STR(?role), "https://nde.nl/ontology/hc/")) + + {event_type_filter} + }} + """ + + results = self.sparql(sparql) + return self._results_to_events(results) + + def _get_semantic_candidates( + self, + query: str, + limit: int + ) -> dict[str, HeritageEvent]: + """Get events via semantic similarity.""" + try: + results = self.vector_search(query, limit) + except Exception as e: + logger.warning(f"Vector search failed: {e}") + return {} + + events = {} + for r in results: + payload = r.get("payload", {}) if isinstance(r, dict) else {} + event_id = r.get("id", str(id(r))) + + try: + event_date = datetime.fromisoformat( + payload.get("event_date", datetime.now().isoformat()) + ) + except (ValueError, TypeError): + event_date = datetime.now() + + event = HeritageEvent( + event_id=event_id, + event_type=payload.get("event_type", "UNKNOWN"), + event_date=event_date, + participants=payload.get("participants", {}), + description=payload.get("description", ""), + confidence=r.get("score", 0.5) + ) + events[event.event_id] = event + + return events + + def _score_event( + self, + event: HeritageEvent, + query: str, + query_entities: list[str], + query_time: datetime, + weights: dict + ) -> float: + """Compute multi-factor relevance score.""" + scores = {} + + # Entity overlap + if query_entities: + event_entities = set(event.participants.values()) + overlap = len(event_entities.intersection(set(query_entities))) + scores["entity"] = overlap / max(len(query_entities), 1) + else: + scores["entity"] = 0.5 # Neutral + + # Semantic similarity + try: + query_emb = self.embed(query) + if event.embedding: + scores["semantic"] = self._cosine_similarity(query_emb, event.embedding) + elif event.description: + desc_emb = self.embed(event.description) + scores["semantic"] = self._cosine_similarity(query_emb, desc_emb) + else: + scores["semantic"] = 0.5 + except Exception as e: + logger.warning(f"Embedding failed: {e}") + scores["semantic"] = 0.5 + + # Temporal relevance + if query_time and event.event_date: + days_diff = abs((query_time - event.event_date).days) + scores["temporal"] = 1.0 / (1.0 + days_diff / 365.0) + else: + scores["temporal"] = 0.5 # Neutral + + # Graph connectivity (placeholder - would use SPARQL for full implementation) + scores["graph"] = 0.5 + + # Weighted sum + final_score = sum(weights.get(k, 0) * scores.get(k, 0.5) for k in weights) + return final_score + + def _cosine_similarity(self, a: list[float], b: list[float]) -> float: + """Compute cosine similarity between two vectors.""" + a_np = np.array(a) + b_np = np.array(b) + norm_product = np.linalg.norm(a_np) * np.linalg.norm(b_np) + if norm_product == 0: + return 0.0 + return float(np.dot(a_np, b_np) / norm_product) + + def _results_to_events(self, results: list[dict]) -> dict[str, HeritageEvent]: + """Convert SPARQL results to HeritageEvent objects.""" + events = {} + + # Group by event ID + by_event: dict[str, dict[str, Any]] = {} + for row in results: + event_id = row.get("event") + if not event_id: + continue + + if event_id not in by_event: + by_event[event_id] = { + "event_type": row.get("eventType", "UNKNOWN"), + "date": row.get("date"), + "description": row.get("description", ""), + "participants": {} + } + + role = row.get("role", "") + if "/" in role: + role = role.split("/")[-1] # Extract role from URI + participant = row.get("participant") + if role and participant: + by_event[event_id]["participants"][role] = participant + + # Convert to HeritageEvent objects + for event_id, data in by_event.items(): + try: + event_date = datetime.fromisoformat(data["date"]) if data["date"] else datetime.now() + except (ValueError, TypeError): + event_date = datetime.now() + + events[event_id] = HeritageEvent( + event_id=event_id, + event_type=data["event_type"], + event_date=event_date, + participants=data["participants"], + description=data["description"] + ) + + return events + + +# Factory function for creating EventRetriever with default dependencies +def create_event_retriever( + oxigraph_endpoint: str = "http://localhost:7878/query", + qdrant_collection: str = "heritage_events" +) -> EventRetriever: + """ + Create EventRetriever with standard GLAM dependencies. + + This is a convenience factory that wires up the retriever with + default Oxigraph and Qdrant connections. + """ + # Import here to avoid circular dependencies + import requests + + def sparql_query(query: str) -> list[dict]: + """Execute SPARQL query against Oxigraph.""" + response = requests.post( + oxigraph_endpoint, + data=query, + headers={ + "Content-Type": "application/sparql-query", + "Accept": "application/json" + }, + timeout=30 + ) + response.raise_for_status() + data = response.json() + + # Convert bindings to simple dict format + results = [] + for binding in data.get("results", {}).get("bindings", []): + row = {} + for key, val in binding.items(): + row[key] = val.get("value") + results.append(row) + return results + + def qdrant_search(query: str, limit: int) -> list[dict]: + """Search Qdrant events collection.""" + # Placeholder - would use actual Qdrant client + logger.warning("Qdrant search not implemented - using empty results") + return [] + + def embed(text: str) -> list[float]: + """Embed text using default embedding model.""" + # Placeholder - would use actual embedding model + logger.warning("Embedding not implemented - using random vector") + return list(np.random.randn(384)) + + return EventRetriever( + oxigraph_query_fn=sparql_query, + qdrant_search_fn=qdrant_search, + embed_fn=embed + ) diff --git a/backend/rag/semantic_router.py b/backend/rag/semantic_router.py new file mode 100644 index 0000000000..af9cedc8ac --- /dev/null +++ b/backend/rag/semantic_router.py @@ -0,0 +1,372 @@ +""" +Semantic Routing for Heritage RAG + +Implements Signal-Decision architecture for fast, accurate query routing. +Based on: docs/plan/external_design_patterns/04_temporal_semantic_hypergraph.md + +Key concepts: +- Signal extraction (no LLM) for fast query analysis +- Decision routing based on extracted signals +- Falls back to LLM classification for low-confidence cases +""" + +from dataclasses import dataclass, field +from typing import Literal, Optional +import re +import logging + +logger = logging.getLogger(__name__) + + +@dataclass +class QuerySignals: + """Semantic signals extracted from query.""" + # Primary classification + # Using str instead of Literal for runtime flexibility + entity_type: str # "person", "institution", "collection", "event", "mixed" + intent: str # "geographic", "statistical", "relational", "temporal", etc. + + # Extracted entities + institution_mentions: list[str] = field(default_factory=list) + person_mentions: list[str] = field(default_factory=list) + location_mentions: list[str] = field(default_factory=list) + + # Query characteristics + language: str = "nl" + has_temporal_constraint: bool = False + has_geographic_constraint: bool = False + requires_aggregation: bool = False + + # Confidence + confidence: float = 0.85 + + +@dataclass +class RouteConfig: + """Configuration for query routing.""" + primary_backend: str + secondary_backend: Optional[str] = None + qdrant_collection: Optional[str] = None + use_temporal_templates: bool = False + qdrant_filters: dict = field(default_factory=dict) + sparql_variant: Optional[str] = None + + +class SemanticSignalExtractor: + """ + Extract semantic signals from queries without LLM calls. + + Uses: + - Keyword patterns for entity type detection + - Embedding similarity for intent classification + - Regex for entity extraction + """ + + # Entity type indicators + PERSON_INDICATORS = [ + "wie", "who", "curator", "archivist", "archivaris", "bibliothecaris", + "directeur", "director", "medewerker", "staff", "employee", + "werkt", "works", "persoon", "person", "hoofd", "manager" + ] + + INSTITUTION_INDICATORS = [ + "museum", "musea", "archief", "archieven", "bibliotheek", "bibliotheken", + "galerie", "gallery", "instelling", "institution", "organisatie" + ] + + AGGREGATION_INDICATORS = [ + "hoeveel", "how many", "count", "aantal", "total", "totaal", + "per", "verdeling", "distribution", "gemiddelde", "average" + ] + + # NOTE: Short words like "in" removed - too many false positives + # "in" matches "interessant", "instituut", etc. + GEOGRAPHIC_INDICATORS = [ + "nabij", "near", "waar", "where", "locatie", "location", + "provincie", "province", "stad", "city", "regio", "region" + ] + + # NOTE: Short words like "na" removed - too many false positives + # "na" matches "nationaal", "naam", etc. + # Use word boundary matching for remaining short indicators + TEMPORAL_INDICATORS = [ + "wanneer", "when", "voor", "before", "tussen", "between", + "oudste", "oldest", "nieuwste", "newest", + "opgericht", "founded", "gesloten", "closed", "fusie", "merger", + "geschiedenis", "history", "tijdlijn", "timeline" + ] + + # Short indicators that require word boundary matching + TEMPORAL_INDICATORS_SHORT = ["na", "after"] # Require \b matching + GEOGRAPHIC_INDICATORS_SHORT = ["in"] # Require \b matching + + # Year pattern for temporal detection + YEAR_PATTERN = re.compile(r'\b(1[0-9]{3}|20[0-2][0-9])\b') # 1000-2029 + + # Known Dutch cities and provinces for location extraction + KNOWN_LOCATIONS = [ + "Amsterdam", "Rotterdam", "Den Haag", "Utrecht", "Groningen", + "Noord-Holland", "Zuid-Holland", "Noord-Brabant", "Limburg", + "Gelderland", "Friesland", "Overijssel", "Drenthe", "Zeeland", + "Flevoland", "Haarlem", "Leiden", "Maastricht", "Eindhoven", + "Arnhem", "Nijmegen", "Enschede", "Tilburg", "Breda", "Delft" + ] + + def __init__(self): + self._intent_embeddings = None + self._model = None + # Precompile word boundary patterns for short indicators + self._temporal_short_patterns = [ + re.compile(rf'\b{ind}\b', re.IGNORECASE) + for ind in self.TEMPORAL_INDICATORS_SHORT + ] + self._geographic_short_patterns = [ + re.compile(rf'\b{ind}\b', re.IGNORECASE) + for ind in self.GEOGRAPHIC_INDICATORS_SHORT + ] + + def _has_word_boundary_match(self, query: str, patterns: list) -> bool: + """Check if any pattern matches with word boundaries.""" + return any(p.search(query) for p in patterns) + + def extract_signals(self, query: str) -> QuerySignals: + """ + Extract all semantic signals from query. + + Fast operation - no LLM calls. + """ + query_lower = query.lower() + + # Entity type detection + entity_type = self._detect_entity_type(query_lower) + + # Intent classification + intent = self._classify_intent(query, query_lower) + + # Entity extraction + institutions = self._extract_institutions(query) + persons = self._extract_persons(query) + locations = self._extract_locations(query) + + # Constraint detection (with word boundary matching for short indicators) + has_temporal = ( + any(ind in query_lower for ind in self.TEMPORAL_INDICATORS) or + self._has_word_boundary_match(query, self._temporal_short_patterns) or + bool(self.YEAR_PATTERN.search(query)) # Year mention implies temporal + ) + has_geographic = ( + any(ind in query_lower for ind in self.GEOGRAPHIC_INDICATORS) or + self._has_word_boundary_match(query, self._geographic_short_patterns) or + bool(locations) + ) + requires_aggregation = any(ind in query_lower for ind in self.AGGREGATION_INDICATORS) + + # Language detection + language = self._detect_language(query) + + # Confidence based on signal clarity + confidence = self._compute_confidence(entity_type, intent, query_lower) + + return QuerySignals( + entity_type=entity_type, + intent=intent, + institution_mentions=institutions, + person_mentions=persons, + location_mentions=locations, + language=language, + has_temporal_constraint=has_temporal, + has_geographic_constraint=has_geographic, + requires_aggregation=requires_aggregation, + confidence=confidence + ) + + def _detect_entity_type(self, query_lower: str) -> str: + """Detect primary entity type in query.""" + person_score = sum(1 for p in self.PERSON_INDICATORS if p in query_lower) + institution_score = sum(1 for p in self.INSTITUTION_INDICATORS if p in query_lower) + + if person_score > 0 and institution_score > 0: + return "mixed" + elif person_score > institution_score: + return "person" + elif institution_score > 0: + return "institution" + else: + return "institution" # Default + + def _classify_intent(self, query: str, query_lower: str) -> str: + """Classify query intent.""" + # Quick rule-based classification + if any(ind in query_lower for ind in self.AGGREGATION_INDICATORS): + return "statistical" + # Temporal: check long indicators, short indicators with word boundary, AND year patterns + if (any(ind in query_lower for ind in self.TEMPORAL_INDICATORS) or + self._has_word_boundary_match(query, self._temporal_short_patterns) or + bool(self.YEAR_PATTERN.search(query))): # Year implies temporal intent + return "temporal" + if "vergelijk" in query_lower or "compare" in query_lower: + return "comparative" + if any(ind in query_lower for ind in ["wat is", "what is", "tell me about", "vertel"]): + return "entity_lookup" + # Geographic: check both long indicators and short with word boundary + if (any(ind in query_lower for ind in self.GEOGRAPHIC_INDICATORS) or + self._has_word_boundary_match(query, self._geographic_short_patterns)): + return "geographic" + + # Default based on question type + if query_lower.startswith(("welke", "which", "wat", "what")): + return "exploration" + + return "exploration" + + def _extract_institutions(self, query: str) -> list[str]: + """Extract institution mentions from query.""" + # Known institution patterns + patterns = [ + r"(?:het\s+)?(\w+\s+(?:Museum|Archief|Bibliotheek|Galerie))", + r"(Rijksmuseum|Nationaal Archief|KB|Koninklijke Bibliotheek)", + r"(Noord-Hollands Archief|Stadsarchief Amsterdam|Gemeentearchief)", + r"(\w+archief|\w+museum|\w+bibliotheek)", + ] + + mentions = [] + for pattern in patterns: + for match in re.finditer(pattern, query, re.IGNORECASE): + mentions.append(match.group(1)) + + return list(set(mentions)) + + def _extract_persons(self, query: str) -> list[str]: + """Extract person mentions from query.""" + # Basic person name pattern (capitalized words with optional tussenvoegsel) + pattern = r"\b([A-Z][a-z]+\s+(?:van\s+(?:de\s+)?|de\s+)?[A-Z][a-z]+)\b" + matches = re.findall(pattern, query) + return matches + + def _extract_locations(self, query: str) -> list[str]: + """Extract location mentions from query.""" + mentions = [] + query_lower = query.lower() + for loc in self.KNOWN_LOCATIONS: + if loc.lower() in query_lower: + mentions.append(loc) + + return mentions + + def _detect_language(self, query: str) -> str: + """Detect query language.""" + dutch_indicators = ["welke", "hoeveel", "waar", "wanneer", "wie", "het", "de", "zijn", "er"] + english_indicators = ["which", "how many", "where", "when", "who", "the", "are", "there"] + + query_lower = query.lower() + dutch_score = sum(1 for w in dutch_indicators if w in query_lower) + english_score = sum(1 for w in english_indicators if w in query_lower) + + return "nl" if dutch_score >= english_score else "en" + + def _compute_confidence(self, entity_type: str, intent: str, query_lower: str) -> float: + """Compute confidence in signal extraction.""" + confidence = 0.7 # Base + + # Boost for clear entity type + if entity_type != "mixed": + confidence += 0.1 + + # Boost for clear intent indicators + if any(ind in query_lower for ind in self.AGGREGATION_INDICATORS + self.TEMPORAL_INDICATORS): + confidence += 0.1 + + # Boost for clear question structure + if query_lower.startswith(("welke", "which", "hoeveel", "how many", "waar", "where")): + confidence += 0.05 + + return min(confidence, 0.95) + + +class SemanticDecisionRouter: + """ + Route queries to backends based on signals. + """ + + def route(self, signals: QuerySignals) -> RouteConfig: + """ + Determine routing based on signals. + """ + # Person queries → Qdrant persons collection + if signals.entity_type == "person": + config = RouteConfig( + primary_backend="qdrant", + secondary_backend="sparql", + qdrant_collection="heritage_persons", + ) + + # Add institution filter if mentioned + if signals.institution_mentions: + config.qdrant_filters["custodian_slug"] = self._to_slug( + signals.institution_mentions[0] + ) + + return config + + # Statistical queries → DuckLake + if signals.requires_aggregation: + return RouteConfig( + primary_backend="ducklake", + secondary_backend="sparql", + ) + + # Temporal queries → Temporal SPARQL templates + if signals.has_temporal_constraint: + return RouteConfig( + primary_backend="sparql", + secondary_backend="qdrant", + use_temporal_templates=True, + qdrant_collection="heritage_custodians", + ) + + # Geographic queries → SPARQL with location filter + if signals.has_geographic_constraint: + return RouteConfig( + primary_backend="sparql", + secondary_backend="qdrant", + qdrant_collection="heritage_custodians", + ) + + # Default: hybrid SPARQL + Qdrant + return RouteConfig( + primary_backend="qdrant", + secondary_backend="sparql", + qdrant_collection="heritage_custodians", + ) + + def _to_slug(self, institution_name: str) -> str: + """Convert institution name to slug format.""" + import unicodedata + normalized = unicodedata.normalize('NFD', institution_name) + ascii_name = ''.join(c for c in normalized if unicodedata.category(c) != 'Mn') + slug = ascii_name.lower() + slug = re.sub(r"[''`\",.:;!?()[\]{}]", '', slug) + slug = re.sub(r'[\s_]+', '-', slug) + slug = re.sub(r'-+', '-', slug).strip('-') + return slug + + +# Singleton instances +_signal_extractor: Optional[SemanticSignalExtractor] = None +_decision_router: Optional[SemanticDecisionRouter] = None + + +def get_signal_extractor() -> SemanticSignalExtractor: + """Get or create singleton signal extractor instance.""" + global _signal_extractor + if _signal_extractor is None: + _signal_extractor = SemanticSignalExtractor() + return _signal_extractor + + +def get_decision_router() -> SemanticDecisionRouter: + """Get or create singleton decision router instance.""" + global _decision_router + if _decision_router is None: + _decision_router = SemanticDecisionRouter() + return _decision_router diff --git a/backend/rag/temporal_intent.py b/backend/rag/temporal_intent.py new file mode 100644 index 0000000000..6814fe85c2 --- /dev/null +++ b/backend/rag/temporal_intent.py @@ -0,0 +1,311 @@ +""" +Temporal Query Intent Extraction for Heritage RAG + +Extracts temporal constraints from natural language queries to enable +temporal SPARQL template selection and conflict resolution. + +Based on: docs/plan/external_design_patterns/04_temporal_semantic_hypergraph.md +""" + +import dspy +from dataclasses import dataclass, field +from typing import Optional, Literal +from datetime import datetime +import re +import logging + +logger = logging.getLogger(__name__) + + +@dataclass +class TemporalConstraint: + """Extracted temporal constraint from a query.""" + constraint_type: Literal[ + "point_in_time", # "in 1990", "on January 1, 2000" + "before", # "before 2000", "vóór de fusie" + "after", # "after 1995", "na de renovatie" + "between", # "between 1990 and 2000" + "oldest", # "oldest museum", "oudste archief" + "newest", # "newest library", "nieuwste bibliotheek" + "founding", # "when was X founded", "opgericht" + "closure", # "when did X close", "gesloten" + "change_event", # "merger", "split", "relocation" + "timeline", # "history of", "geschiedenis van" + "none" # No temporal constraint detected + ] + + # Extracted dates (ISO format or year) + date_start: Optional[str] = None + date_end: Optional[str] = None + + # For relative references + reference_event: Optional[str] = None # e.g., "de fusie", "the merger" + + # Confidence + confidence: float = 0.8 + + # Recommended SPARQL template + recommended_template: Optional[str] = None + + +class TemporalConstraintExtractor: + """ + Fast extraction of temporal constraints without LLM. + + Uses pattern matching for common temporal expressions. + Falls back to LLM for complex/ambiguous cases. + """ + + # Year patterns + YEAR_PATTERN = re.compile(r'\b(1[0-9]{3}|20[0-2][0-9])\b') # 1000-2029 + DATE_PATTERN = re.compile( + r'\b(\d{1,2}[-/]\d{1,2}[-/]\d{2,4}|\d{4}[-/]\d{2}[-/]\d{2})\b' + ) + + # Dutch temporal keywords + BEFORE_KEYWORDS_NL = ["voor", "vóór", "voordat", "eerder dan"] + AFTER_KEYWORDS_NL = ["na", "nadat", "later dan", "sinds"] + BETWEEN_KEYWORDS_NL = ["tussen", "van", "tot"] + OLDEST_KEYWORDS_NL = ["oudste", "eerste", "oorspronkelijke"] + NEWEST_KEYWORDS_NL = ["nieuwste", "laatste", "meest recente"] + + # English temporal keywords + BEFORE_KEYWORDS_EN = ["before", "prior to", "earlier than"] + AFTER_KEYWORDS_EN = ["after", "following", "since", "later than"] + BETWEEN_KEYWORDS_EN = ["between", "from", "to"] + OLDEST_KEYWORDS_EN = ["oldest", "first", "original", "earliest"] + NEWEST_KEYWORDS_EN = ["newest", "latest", "most recent"] + + # Event keywords + FOUNDING_KEYWORDS = ["opgericht", "gesticht", "founded", "established", "created"] + CLOSURE_KEYWORDS = ["gesloten", "opgeheven", "closed", "dissolved", "terminated"] + MERGER_KEYWORDS = ["fusie", "samenvoeging", "merger", "merged", "combined"] + TIMELINE_KEYWORDS = [ + "geschiedenis", "tijdlijn", "history", "timeline", "evolution", + "door de jaren", "over time", "changes" + ] + + # Template mapping + TEMPLATE_MAP = { + "point_in_time": "point_in_time_state", + "before": "point_in_time_state", + "after": "point_in_time_state", + "between": "events_in_period", + "oldest": "find_by_founding", + "newest": "find_by_founding", + "founding": "institution_timeline", + "closure": "institution_timeline", + "change_event": "events_in_period", + "timeline": "institution_timeline", + } + + def extract(self, query: str) -> TemporalConstraint: + """ + Extract temporal constraint from query. + + Fast operation using pattern matching. + """ + query_lower = query.lower() + + # 1. Check for timeline/history queries + if any(kw in query_lower for kw in self.TIMELINE_KEYWORDS): + return TemporalConstraint( + constraint_type="timeline", + confidence=0.9, + recommended_template="institution_timeline" + ) + + # 2. Check for superlatives (oldest/newest) + if any(kw in query_lower for kw in self.OLDEST_KEYWORDS_NL + self.OLDEST_KEYWORDS_EN): + return TemporalConstraint( + constraint_type="oldest", + confidence=0.9, + recommended_template="find_by_founding" + ) + + if any(kw in query_lower for kw in self.NEWEST_KEYWORDS_NL + self.NEWEST_KEYWORDS_EN): + return TemporalConstraint( + constraint_type="newest", + confidence=0.9, + recommended_template="find_by_founding" + ) + + # 3. Check for change event keywords + if any(kw in query_lower for kw in self.MERGER_KEYWORDS): + return TemporalConstraint( + constraint_type="change_event", + reference_event="merger", + confidence=0.85, + recommended_template="events_in_period" + ) + + if any(kw in query_lower for kw in self.FOUNDING_KEYWORDS): + return TemporalConstraint( + constraint_type="founding", + confidence=0.85, + recommended_template="institution_timeline" + ) + + if any(kw in query_lower for kw in self.CLOSURE_KEYWORDS): + return TemporalConstraint( + constraint_type="closure", + confidence=0.85, + recommended_template="institution_timeline" + ) + + # 4. Extract years from query + years = self.YEAR_PATTERN.findall(query) + + if len(years) >= 2: + # "between 1990 and 2000" + years_sorted = sorted([int(y) for y in years]) + return TemporalConstraint( + constraint_type="between", + date_start=f"{years_sorted[0]}-01-01", + date_end=f"{years_sorted[-1]}-12-31", + confidence=0.85, + recommended_template="events_in_period" + ) + + if len(years) == 1: + year = years[0] + + # Check for before/after indicators with word boundary + before_match = any( + re.search(rf'\b{kw}\b', query_lower) + for kw in self.BEFORE_KEYWORDS_NL + self.BEFORE_KEYWORDS_EN + ) + after_match = any( + re.search(rf'\b{kw}\b', query_lower) + for kw in self.AFTER_KEYWORDS_NL + self.AFTER_KEYWORDS_EN + ) + + if before_match: + return TemporalConstraint( + constraint_type="before", + date_end=f"{year}-01-01", + confidence=0.85, + recommended_template="point_in_time_state" + ) + + if after_match: + return TemporalConstraint( + constraint_type="after", + date_start=f"{year}-12-31", + confidence=0.85, + recommended_template="point_in_time_state" + ) + + # Default: point in time + return TemporalConstraint( + constraint_type="point_in_time", + date_start=f"{year}-01-01", + date_end=f"{year}-12-31", + confidence=0.8, + recommended_template="point_in_time_state" + ) + + # 5. No clear temporal constraint + return TemporalConstraint( + constraint_type="none", + confidence=0.7 + ) + + def get_template_for_constraint( + self, + constraint: TemporalConstraint + ) -> Optional[str]: + """Get recommended SPARQL template ID for temporal constraint.""" + return self.TEMPLATE_MAP.get(constraint.constraint_type) + + +# DSPy Signature for complex temporal extraction +class TemporalQueryIntent(dspy.Signature): + """ + Extract temporal constraints from a heritage institution query. + + Use this for complex queries where pattern matching fails. + """ + query: str = dspy.InputField(desc="Natural language query about heritage institutions") + language: str = dspy.InputField(desc="Query language: 'nl' or 'en'", default="nl") + + constraint_type: str = dspy.OutputField( + desc="Type of temporal constraint: point_in_time, before, after, between, " + "oldest, newest, founding, closure, change_event, timeline, none" + ) + date_start: str = dspy.OutputField( + desc="Start date in ISO format (YYYY-MM-DD) or empty string if not applicable" + ) + date_end: str = dspy.OutputField( + desc="End date in ISO format (YYYY-MM-DD) or empty string if not applicable" + ) + reference_event: str = dspy.OutputField( + desc="Referenced event (e.g., 'fusie', 'merger') or empty string" + ) + confidence: float = dspy.OutputField( + desc="Confidence score 0.0-1.0" + ) + + +class TemporalIntentExtractorModule(dspy.Module): + """ + DSPy module for temporal intent extraction. + + Uses fast pattern matching first, falls back to LLM for complex cases. + """ + + def __init__(self, confidence_threshold: float = 0.75): + super().__init__() + self.fast_extractor = TemporalConstraintExtractor() + self.llm_extractor = dspy.ChainOfThought(TemporalQueryIntent) + self.confidence_threshold = confidence_threshold + + def forward(self, query: str, language: str = "nl") -> TemporalConstraint: + """ + Extract temporal constraint from query. + + Args: + query: Natural language query + language: Query language ('nl' or 'en') + + Returns: + TemporalConstraint with extracted information + """ + # Try fast extraction first + constraint = self.fast_extractor.extract(query) + + # If confidence is high enough, use fast result + if constraint.confidence >= self.confidence_threshold: + logger.debug(f"Fast temporal extraction: {constraint.constraint_type} (conf={constraint.confidence})") + return constraint + + # Fall back to LLM for low confidence cases + logger.debug(f"LLM temporal extraction (fast conf={constraint.confidence})") + + try: + result = self.llm_extractor(query=query, language=language) + + return TemporalConstraint( + constraint_type=result.constraint_type or "none", + date_start=result.date_start if result.date_start else None, + date_end=result.date_end if result.date_end else None, + reference_event=result.reference_event if result.reference_event else None, + confidence=float(result.confidence) if result.confidence else 0.7, + recommended_template=self.fast_extractor.TEMPLATE_MAP.get(result.constraint_type) + ) + except Exception as e: + logger.warning(f"LLM temporal extraction failed: {e}") + # Return fast extraction result as fallback + return constraint + + +# Singleton instance +_temporal_extractor: Optional[TemporalConstraintExtractor] = None + + +def get_temporal_extractor() -> TemporalConstraintExtractor: + """Get or create singleton temporal extractor instance.""" + global _temporal_extractor + if _temporal_extractor is None: + _temporal_extractor = TemporalConstraintExtractor() + return _temporal_extractor diff --git a/backend/rag/temporal_resolver.py b/backend/rag/temporal_resolver.py new file mode 100644 index 0000000000..45939e0a9b --- /dev/null +++ b/backend/rag/temporal_resolver.py @@ -0,0 +1,258 @@ +""" +Temporal Conflict Resolution for Heritage Data + +Handles cases where multiple facts exist for the same property at overlapping times. +Based on: docs/plan/external_design_patterns/04_temporal_semantic_hypergraph.md + +Strategies: +1. Temporal ordering: Use fact valid at query time +2. Recency: Prefer more recent sources +3. Authority: Prefer authoritative sources (Tier 1) +4. Confidence: Use higher confidence facts +""" + +from dataclasses import dataclass, field +from datetime import datetime +from typing import Optional +import logging + +logger = logging.getLogger(__name__) + + +@dataclass +class TemporalFact: + """A fact with temporal validity.""" + property: str + value: str + valid_from: datetime + valid_to: Optional[datetime] + source: str + confidence: float = 1.0 + ghcid: Optional[str] = None + + +@dataclass +class ConflictResolution: + """Result of conflict resolution.""" + property: str + authoritative_value: str + valid_for_date: datetime + conflict_type: str + explanation: str + alternative_values: list[TemporalFact] = field(default_factory=list) + + +class TemporalConflictResolver: + """ + Resolve conflicts between temporal facts. + + Uses a multi-factor scoring system: + - Source authority (Tier 1-4) + - Confidence scores + - Temporal recency + """ + + SOURCE_AUTHORITY = { + "TIER_1_AUTHORITATIVE": 1.0, + "TIER_2_VERIFIED": 0.8, + "TIER_3_CROWD_SOURCED": 0.6, + "TIER_4_INFERRED": 0.4, + } + + def resolve_conflicts( + self, + ghcid: str, + facts: list[TemporalFact], + query_date: Optional[datetime] = None + ) -> list[ConflictResolution]: + """ + Resolve all conflicts in a set of facts. + + Args: + ghcid: Institution identifier + facts: All facts about the institution + query_date: Point in time for resolution (default: now) + + Returns: + List of conflict resolutions with authoritative values + """ + if query_date is None: + query_date = datetime.now() + + # Group facts by property + by_property: dict[str, list[TemporalFact]] = {} + for fact in facts: + by_property.setdefault(fact.property, []).append(fact) + + resolutions = [] + + for prop, prop_facts in by_property.items(): + # Find facts valid at query_date + valid_facts = [ + f for f in prop_facts + if f.valid_from <= query_date and + (f.valid_to is None or f.valid_to > query_date) + ] + + if len(valid_facts) <= 1: + # No conflict + continue + + # Multiple valid facts - resolve conflict + resolution = self._resolve_property_conflict( + prop, valid_facts, query_date + ) + resolutions.append(resolution) + + return resolutions + + def get_authoritative_value( + self, + ghcid: str, + property: str, + facts: list[TemporalFact], + query_date: Optional[datetime] = None + ) -> Optional[str]: + """ + Get the authoritative value for a single property. + + Convenience method for single-property lookups. + """ + if query_date is None: + query_date = datetime.now() + + # Filter facts for this property + prop_facts = [f for f in facts if f.property == property] + + if not prop_facts: + return None + + # Find facts valid at query_date + valid_facts = [ + f for f in prop_facts + if f.valid_from <= query_date and + (f.valid_to is None or f.valid_to > query_date) + ] + + if not valid_facts: + return None + + if len(valid_facts) == 1: + return valid_facts[0].value + + # Resolve conflict + resolution = self._resolve_property_conflict(property, valid_facts, query_date) + return resolution.authoritative_value + + def _resolve_property_conflict( + self, + property: str, + facts: list[TemporalFact], + query_date: datetime + ) -> ConflictResolution: + """ + Resolve conflict for a single property. + """ + # Score each fact + scored = [] + for fact in facts: + score = self._compute_authority_score(fact) + scored.append((fact, score)) + + # Sort by score (descending) + scored.sort(key=lambda x: x[1], reverse=True) + + winner = scored[0][0] + alternatives = [f for f, s in scored[1:]] + + # Determine conflict type + if all(f.value == winner.value for f in facts): + conflict_type = "redundant" # Same value from multiple sources + elif self._is_name_change(facts): + conflict_type = "name_change" + elif self._is_location_change(facts, property): + conflict_type = "location_change" + else: + conflict_type = "data_inconsistency" + + explanation = self._generate_explanation( + property, winner, alternatives, conflict_type, query_date + ) + + return ConflictResolution( + property=property, + authoritative_value=winner.value, + valid_for_date=query_date, + conflict_type=conflict_type, + explanation=explanation, + alternative_values=alternatives + ) + + def _compute_authority_score(self, fact: TemporalFact) -> float: + """Compute authority score for a fact.""" + # Base authority from source tier + authority = self.SOURCE_AUTHORITY.get(fact.source, 0.5) + + # Boost for confidence + authority *= fact.confidence + + # Recency bonus (facts with recent valid_from get slight boost) + days_old = (datetime.now() - fact.valid_from).days + recency_factor = 1.0 / (1.0 + days_old / 365.0) # Decay over years + authority *= (0.8 + 0.2 * recency_factor) + + return authority + + def _is_name_change(self, facts: list[TemporalFact]) -> bool: + """Check if conflict represents a name change.""" + # Name changes typically have non-overlapping validity + facts_sorted = sorted(facts, key=lambda f: f.valid_from) + for i in range(len(facts_sorted) - 1): + if facts_sorted[i].valid_to == facts_sorted[i+1].valid_from: + return True + return False + + def _is_location_change(self, facts: list[TemporalFact], property: str) -> bool: + """Check if conflict represents a location change.""" + return property in ["city", "address", "location", "settlementName", "subregionCode"] + + def _generate_explanation( + self, + property: str, + winner: TemporalFact, + alternatives: list[TemporalFact], + conflict_type: str, + query_date: datetime + ) -> str: + """Generate human-readable explanation of resolution.""" + if conflict_type == "name_change": + return ( + f"The institution name changed over time. " + f"At {query_date.strftime('%Y-%m-%d')}, the authoritative name was '{winner.value}'. " + f"Previous names: {', '.join(f.value for f in alternatives)}." + ) + elif conflict_type == "location_change": + return ( + f"The institution relocated. " + f"At {query_date.strftime('%Y-%m-%d')}, it was located at '{winner.value}'." + ) + elif conflict_type == "redundant": + return f"Multiple sources confirm: {winner.value}" + else: + return ( + f"Data conflict for {property}. " + f"Using '{winner.value}' from {winner.source} (confidence: {winner.confidence:.2f}). " + f"Alternative values exist in other sources." + ) + + +# Singleton instance +_resolver: Optional[TemporalConflictResolver] = None + + +def get_temporal_resolver() -> TemporalConflictResolver: + """Get or create singleton resolver instance.""" + global _resolver + if _resolver is None: + _resolver = TemporalConflictResolver() + return _resolver diff --git a/backend/rag/test_semantic_routing.py b/backend/rag/test_semantic_routing.py new file mode 100644 index 0000000000..5c819b8042 --- /dev/null +++ b/backend/rag/test_semantic_routing.py @@ -0,0 +1,493 @@ +""" +Tests for Semantic Routing (Signal-Decision Pattern) + +Tests the SemanticSignalExtractor and SemanticDecisionRouter classes +which enable fast LLM-free query routing for high-confidence queries. +""" + +import pytest +from .semantic_router import ( + QuerySignals, + RouteConfig, + SemanticSignalExtractor, + SemanticDecisionRouter, + get_signal_extractor, + get_decision_router, +) + + +class TestSemanticSignalExtractor: + """Tests for SemanticSignalExtractor class.""" + + @pytest.fixture + def extractor(self): + return SemanticSignalExtractor() + + # ===== Entity Type Detection ===== + + def test_detect_person_query(self, extractor): + """Person indicators should detect person entity type.""" + # Query with clear person indicator and no institution indicator + signals = extractor.extract_signals("Wie werkt daar als medewerker?") + assert signals.entity_type == "person" + + def test_detect_person_query_with_institution_is_mixed(self, extractor): + """Person query mentioning institution should be mixed.""" + signals = extractor.extract_signals("Wie is de archivaris bij het Noord-Hollands Archief?") + # "archief" is an institution indicator, so this is mixed + assert signals.entity_type == "mixed" + + def test_detect_person_query_with_organisatie_is_mixed(self, extractor): + """Person query with 'organisatie' should be mixed.""" + signals = extractor.extract_signals("Wie is de directeur van deze organisatie?") + # "organisatie" is an institution indicator + assert signals.entity_type == "mixed" + + def test_detect_institution_query(self, extractor): + """Institution indicators should detect institution entity type.""" + signals = extractor.extract_signals("Welke musea zijn er in Amsterdam?") + assert signals.entity_type == "institution" + + def test_detect_mixed_query(self, extractor): + """Mixed indicators should detect mixed entity type.""" + signals = extractor.extract_signals("Welke curatoren werken bij musea in Utrecht?") + assert signals.entity_type == "mixed" + + def test_default_to_institution(self, extractor): + """Ambiguous queries should default to institution.""" + signals = extractor.extract_signals("Vertel me over cultureel erfgoed") + assert signals.entity_type == "institution" + + # ===== Intent Classification ===== + + def test_statistical_intent(self, extractor): + """Aggregation indicators should classify as statistical.""" + signals = extractor.extract_signals("Hoeveel archieven zijn er in Nederland?") + assert signals.intent == "statistical" + assert signals.requires_aggregation is True + + def test_temporal_intent(self, extractor): + """Temporal indicators should classify as temporal.""" + signals = extractor.extract_signals("Wanneer is het Rijksmuseum opgericht?") + assert signals.intent == "temporal" + assert signals.has_temporal_constraint is True + + def test_temporal_intent_with_oldest(self, extractor): + """Oldest/newest queries should be temporal.""" + signals = extractor.extract_signals("Wat is het oudste museum in Nederland?") + assert signals.intent == "temporal" + assert signals.has_temporal_constraint is True + + def test_geographic_intent(self, extractor): + """Geographic indicators should classify as geographic.""" + # "waar" (where) is a geographic indicator + signals = extractor.extract_signals("Waar staat dit museum?") + assert signals.intent == "geographic" + assert signals.has_geographic_constraint is True + + def test_geographic_intent_with_location(self, extractor): + """Location mentions should trigger geographic constraint.""" + signals = extractor.extract_signals("Vertel me over musea in Amsterdam") + assert signals.has_geographic_constraint is True + + def test_temporal_indicator_substring_fixed(self, extractor): + """Verify fix: substring matching no longer causes false positives. + + 'nationaal' contains 'na' but should NOT trigger temporal (uses word boundaries). + This tests that the fix for substring matching is working. + """ + signals = extractor.extract_signals("In welke stad ligt het Nationaal Archief?") + # After fix: should NOT be temporal (no word-boundary match for "na") + # "In" at start is a word boundary match for geographic indicator + assert signals.intent == "geographic" + assert signals.has_temporal_constraint is False + + def test_entity_lookup_intent(self, extractor): + """Entity lookup indicators should classify correctly.""" + signals = extractor.extract_signals("Wat is het Rijksmuseum?") + assert signals.intent == "entity_lookup" + + def test_comparative_intent(self, extractor): + """Comparative queries should be classified correctly.""" + signals = extractor.extract_signals("Vergelijk het Rijksmuseum met het Van Gogh Museum") + assert signals.intent == "comparative" + + def test_exploration_default_intent(self, extractor): + """Default to exploration for open questions without clear indicators.""" + # Query without geographic, temporal, or aggregation indicators + # Note: "in" is a geographic indicator, so avoid words containing it + signals = extractor.extract_signals("Welke schilderijen vallen op?") + assert signals.intent == "exploration" + + def test_geographic_indicator_substring_fixed(self, extractor): + """Verify fix: 'in' no longer matches inside words. + + 'interessant' contains 'in' but should NOT trigger geographic. + This tests that the word boundary fix is working. + """ + signals = extractor.extract_signals("Welke schilderijen zijn interessant?") + # After fix: should be exploration, not geographic + assert signals.intent == "exploration" + assert signals.has_geographic_constraint is False + + def test_word_boundary_in_works_correctly(self, extractor): + """Verify 'in' as standalone word DOES trigger geographic.""" + signals = extractor.extract_signals("Welke musea zijn er in Amsterdam?") + # "in" as standalone word should trigger geographic + assert signals.intent == "geographic" + assert signals.has_geographic_constraint is True + + def test_word_boundary_na_works_correctly(self, extractor): + """Verify 'na' as standalone word DOES trigger temporal.""" + # Dutch: "Na de fusie..." = "After the merger..." + signals = extractor.extract_signals("Wat gebeurde er na de fusie met het archief?") + # "na" as standalone word should trigger temporal + assert signals.intent == "temporal" + assert signals.has_temporal_constraint is True + + # ===== Entity Extraction ===== + + def test_extract_institution_mention(self, extractor): + """Should extract institution names from query.""" + signals = extractor.extract_signals("Vertel me over het Noord-Hollands Archief") + assert len(signals.institution_mentions) >= 1 + # Should find "Noord-Hollands Archief" or similar + + def test_extract_location_mention(self, extractor): + """Should extract known Dutch locations.""" + signals = extractor.extract_signals("Welke musea zijn er in Amsterdam?") + assert "Amsterdam" in signals.location_mentions + assert signals.has_geographic_constraint is True + + def test_extract_multiple_locations(self, extractor): + """Should extract multiple locations.""" + signals = extractor.extract_signals("Archieven in Utrecht en Haarlem") + assert "Utrecht" in signals.location_mentions + assert "Haarlem" in signals.location_mentions + + # ===== Language Detection ===== + + def test_detect_dutch_language(self, extractor): + """Dutch queries should be detected.""" + signals = extractor.extract_signals("Hoeveel musea zijn er in Nederland?") + assert signals.language == "nl" + + def test_detect_english_language(self, extractor): + """English queries should be detected.""" + signals = extractor.extract_signals("How many museums are there in Amsterdam?") + assert signals.language == "en" + + # ===== Confidence Scoring ===== + + def test_high_confidence_clear_query(self, extractor): + """Clear queries should have high confidence.""" + signals = extractor.extract_signals("Hoeveel archieven zijn er in Noord-Holland?") + assert signals.confidence >= 0.8 + + def test_moderate_confidence_ambiguous_query(self, extractor): + """Ambiguous queries should have moderate confidence.""" + signals = extractor.extract_signals("erfgoed informatie") + assert signals.confidence < 0.9 + + def test_confidence_capped_at_095(self, extractor): + """Confidence should not exceed 0.95.""" + signals = extractor.extract_signals("Hoeveel musea zijn er in Amsterdam?") + assert signals.confidence <= 0.95 + + +class TestSemanticDecisionRouter: + """Tests for SemanticDecisionRouter class.""" + + @pytest.fixture + def router(self): + return SemanticDecisionRouter() + + def test_person_query_routes_to_qdrant_persons(self, router): + """Person queries should route to heritage_persons collection.""" + signals = QuerySignals( + entity_type="person", + intent="entity_lookup", + institution_mentions=["Noord-Hollands Archief"], + ) + config = router.route(signals) + assert config.primary_backend == "qdrant" + assert config.qdrant_collection == "heritage_persons" + + def test_person_query_with_institution_filter(self, router): + """Person queries with institution should add filter.""" + signals = QuerySignals( + entity_type="person", + intent="entity_lookup", + institution_mentions=["Noord-Hollands Archief"], + ) + config = router.route(signals) + assert "custodian_slug" in config.qdrant_filters + assert "noord-hollands-archief" in config.qdrant_filters["custodian_slug"] + + def test_statistical_query_routes_to_ducklake(self, router): + """Statistical queries should route to DuckLake.""" + signals = QuerySignals( + entity_type="institution", + intent="statistical", + requires_aggregation=True, + ) + config = router.route(signals) + assert config.primary_backend == "ducklake" + + def test_temporal_query_uses_temporal_templates(self, router): + """Temporal queries should enable temporal templates.""" + signals = QuerySignals( + entity_type="institution", + intent="temporal", + has_temporal_constraint=True, + ) + config = router.route(signals) + assert config.primary_backend == "sparql" + assert config.use_temporal_templates is True + + def test_geographic_query_routes_to_sparql(self, router): + """Geographic queries should route to SPARQL.""" + signals = QuerySignals( + entity_type="institution", + intent="geographic", + has_geographic_constraint=True, + location_mentions=["Amsterdam"], + ) + config = router.route(signals) + assert config.primary_backend == "sparql" + + def test_default_hybrid_routing(self, router): + """Default queries should use hybrid routing.""" + signals = QuerySignals( + entity_type="institution", + intent="exploration", + ) + config = router.route(signals) + assert config.primary_backend == "qdrant" + assert config.secondary_backend == "sparql" + + +class TestSlugGeneration: + """Tests for institution slug generation.""" + + @pytest.fixture + def router(self): + return SemanticDecisionRouter() + + def test_simple_slug(self, router): + """Simple names should convert to lowercase hyphenated slug.""" + slug = router._to_slug("Rijksmuseum") + assert slug == "rijksmuseum" + + def test_slug_with_spaces(self, router): + """Spaces should be converted to hyphens.""" + slug = router._to_slug("Noord-Hollands Archief") + assert slug == "noord-hollands-archief" + + def test_slug_with_article(self, router): + """Dutch articles should be preserved in slug.""" + slug = router._to_slug("Het Utrechts Archief") + assert slug == "het-utrechts-archief" + + def test_slug_with_diacritics(self, router): + """Diacritics should be removed.""" + slug = router._to_slug("Musée d'Orsay") + assert slug == "musee-dorsay" + + +class TestSingletonInstances: + """Tests for singleton pattern.""" + + def test_signal_extractor_singleton(self): + """get_signal_extractor should return same instance.""" + ext1 = get_signal_extractor() + ext2 = get_signal_extractor() + assert ext1 is ext2 + + def test_decision_router_singleton(self): + """get_decision_router should return same instance.""" + router1 = get_decision_router() + router2 = get_decision_router() + assert router1 is router2 + + +class TestIntegration: + """Integration tests for full signal-decision flow.""" + + def test_full_person_query_flow(self): + """Test complete flow for person query.""" + extractor = get_signal_extractor() + router = get_decision_router() + + # Query with clear person indicator but also institution mention (mixed) + signals = extractor.extract_signals( + "Wie is de archivaris bij het Noord-Hollands Archief?" + ) + config = router.route(signals) + + # Mixed entity type because both person and institution indicators present + assert signals.entity_type == "mixed" + # Mixed queries route via default (qdrant hybrid) + assert config.primary_backend in ["qdrant", "sparql"] + + def test_full_pure_person_query_flow(self): + """Test complete flow for pure person query (no institution mention).""" + extractor = get_signal_extractor() + router = get_decision_router() + + signals = extractor.extract_signals("Wie werkt daar als medewerker?") + config = router.route(signals) + + assert signals.entity_type == "person" + assert config.primary_backend == "qdrant" + assert config.qdrant_collection == "heritage_persons" + + def test_full_statistical_query_flow(self): + """Test complete flow for statistical query.""" + extractor = get_signal_extractor() + router = get_decision_router() + + signals = extractor.extract_signals( + "Hoeveel musea zijn er per provincie in Nederland?" + ) + config = router.route(signals) + + assert signals.intent == "statistical" + assert signals.requires_aggregation is True + assert config.primary_backend == "ducklake" + + def test_full_temporal_query_flow(self): + """Test complete flow for temporal query.""" + extractor = get_signal_extractor() + router = get_decision_router() + + signals = extractor.extract_signals( + "Wat is het oudste archief in Noord-Holland?" + ) + config = router.route(signals) + + assert signals.intent == "temporal" + assert signals.has_temporal_constraint is True + assert config.use_temporal_templates is True + + def test_high_confidence_skip_llm_threshold(self): + """Verify high-confidence queries meet skip threshold.""" + extractor = get_signal_extractor() + + # These queries should have confidence >= 0.8 + # Need clear indicators without ambiguity + high_confidence_queries = [ + "Hoeveel archieven zijn er in Nederland?", # clear aggregation + "Wanneer is het Nationaal Archief opgericht?", # clear temporal + "Welke musea zijn er in Amsterdam?", # clear geographic + institution + ] + + for query in high_confidence_queries: + signals = extractor.extract_signals(query) + assert signals.confidence >= 0.8, ( + f"Query '{query}' has confidence {signals.confidence}, expected >= 0.8" + ) + + def test_moderate_confidence_for_mixed_queries(self): + """Mixed entity type queries should have lower confidence.""" + extractor = get_signal_extractor() + + # Mixed queries are more ambiguous + signals = extractor.extract_signals("Wie is de directeur van het Rijksmuseum?") + # Mixed entity type (person + institution) reduces confidence + assert signals.entity_type == "mixed" + assert signals.confidence < 0.9 # Not as high as clear queries + + +class TestYearPatternDetection: + """Tests for year-based temporal detection. + + Year mentions (1000-2029) should trigger temporal intent, + even when combined with geographic indicators like 'in'. + """ + + @pytest.fixture + def extractor(self): + return SemanticSignalExtractor() + + def test_year_triggers_temporal_intent(self, extractor): + """A year mention should classify as temporal intent.""" + signals = extractor.extract_signals("Wat was de status van het Rijksmuseum in 1990?") + # Year 1990 should trigger temporal, not "in" triggering geographic + assert signals.intent == "temporal" + assert signals.has_temporal_constraint is True + + def test_year_1850_triggers_temporal(self, extractor): + """Historical year should trigger temporal.""" + signals = extractor.extract_signals("Welke musea bestonden in 1850?") + assert signals.intent == "temporal" + assert signals.has_temporal_constraint is True + + def test_year_2020_with_aggregation_is_statistical(self, extractor): + """Aggregation query with year should be statistical with temporal constraint. + + 'Hoeveel' (how many) triggers aggregation → statistical intent. + Year 2020 triggers temporal constraint. + Result: statistical intent WITH temporal filter applied. + """ + signals = extractor.extract_signals("Hoeveel archieven waren er in 2020?") + # "Hoeveel" overrides to statistical, but temporal constraint is detected + assert signals.intent == "statistical" + assert signals.requires_aggregation is True + assert signals.has_temporal_constraint is True # Year still detected! + + def test_year_2020_pure_temporal(self, extractor): + """Recent year without aggregation should be temporal.""" + signals = extractor.extract_signals("Welke archieven bestonden in 2020?") + assert signals.intent == "temporal" + assert signals.has_temporal_constraint is True + + def test_geographic_without_year_stays_geographic(self, extractor): + """Geographic query without year should stay geographic.""" + signals = extractor.extract_signals("Welke musea zijn er in Amsterdam?") + assert signals.intent == "geographic" + assert signals.has_temporal_constraint is False + + def test_year_overrides_geographic_in(self, extractor): + """Year should make query temporal even with 'in' for location.""" + signals = extractor.extract_signals("Welke musea waren er in Amsterdam in 1900?") + # Year 1900 should override the geographic "in Amsterdam" + assert signals.intent == "temporal" + assert signals.has_temporal_constraint is True + # Geographic constraint should still be detected + assert signals.has_geographic_constraint is True + + def test_year_in_english_query(self, extractor): + """Year detection should work in English queries too.""" + signals = extractor.extract_signals("What museums existed in 1920?") + assert signals.intent == "temporal" + assert signals.has_temporal_constraint is True + + def test_year_range_boundary_1000(self, extractor): + """Year 1000 should be detected.""" + signals = extractor.extract_signals("Bestond dit klooster al in 1000?") + assert signals.has_temporal_constraint is True + + def test_year_range_boundary_2029(self, extractor): + """Year 2029 should be detected (future planning).""" + signals = extractor.extract_signals("Wat zijn de plannen voor 2029?") + assert signals.has_temporal_constraint is True + + def test_non_year_number_ignored(self, extractor): + """Numbers that aren't years should not trigger temporal.""" + signals = extractor.extract_signals("Hoeveel van de 500 musea hebben een website?") + # 500 is not a valid year (outside 1000-2029) + # This is a statistical query + assert signals.intent == "statistical" + # has_temporal_constraint could be False (no year) but check intent + + def test_year_combined_with_temporal_keyword(self, extractor): + """Year + temporal keyword should be high confidence temporal.""" + signals = extractor.extract_signals("Wanneer in 1945 werd het museum gesloten?") + assert signals.intent == "temporal" + assert signals.has_temporal_constraint is True + # Combined signals should give high confidence + assert signals.confidence >= 0.8 + + +# Run with: pytest backend/rag/test_semantic_routing.py -v diff --git a/backend/rag/test_temporal_intent.py b/backend/rag/test_temporal_intent.py new file mode 100644 index 0000000000..d3d499d942 --- /dev/null +++ b/backend/rag/test_temporal_intent.py @@ -0,0 +1,527 @@ +""" +Tests for Temporal Intent Extraction Module + +Tests the TemporalConstraintExtractor and TemporalIntentExtractorModule classes +which enable fast LLM-free extraction of temporal constraints from queries. +""" + +import pytest +from .temporal_intent import ( + TemporalConstraint, + TemporalConstraintExtractor, + TemporalIntentExtractorModule, + get_temporal_extractor, +) + + +class TestTemporalConstraintExtractor: + """Tests for TemporalConstraintExtractor class.""" + + @pytest.fixture + def extractor(self): + return TemporalConstraintExtractor() + + # ===== Timeline/History Queries ===== + + def test_timeline_dutch_geschiedenis(self, extractor): + """Dutch 'geschiedenis' should trigger timeline constraint.""" + constraint = extractor.extract("Wat is de geschiedenis van het Rijksmuseum?") + assert constraint.constraint_type == "timeline" + assert constraint.recommended_template == "institution_timeline" + assert constraint.confidence >= 0.9 + + def test_timeline_english_history(self, extractor): + """English 'history' should trigger timeline constraint.""" + constraint = extractor.extract("Tell me the history of the British Museum") + assert constraint.constraint_type == "timeline" + assert constraint.recommended_template == "institution_timeline" + + def test_timeline_tijdlijn(self, extractor): + """Dutch 'tijdlijn' should trigger timeline constraint.""" + constraint = extractor.extract("Geef me een tijdlijn van het Noord-Hollands Archief") + assert constraint.constraint_type == "timeline" + + def test_timeline_evolution(self, extractor): + """English 'evolution' should trigger timeline constraint.""" + constraint = extractor.extract("What was the evolution of this archive?") + assert constraint.constraint_type == "timeline" + + # ===== Superlative Queries (Oldest/Newest) ===== + + def test_oldest_dutch_oudste(self, extractor): + """Dutch 'oudste' should trigger oldest constraint.""" + constraint = extractor.extract("Wat is het oudste museum in Nederland?") + assert constraint.constraint_type == "oldest" + assert constraint.recommended_template == "find_by_founding" + assert constraint.confidence >= 0.9 + + def test_oldest_english(self, extractor): + """English 'oldest' should trigger oldest constraint.""" + constraint = extractor.extract("What is the oldest library in Amsterdam?") + assert constraint.constraint_type == "oldest" + + def test_oldest_eerste(self, extractor): + """Dutch 'eerste' (first) should trigger oldest constraint.""" + constraint = extractor.extract("Welke was de eerste openbare bibliotheek?") + assert constraint.constraint_type == "oldest" + + def test_oldest_earliest(self, extractor): + """English 'earliest' should trigger oldest constraint.""" + constraint = extractor.extract("What is the earliest archive in the region?") + assert constraint.constraint_type == "oldest" + + def test_newest_dutch_nieuwste(self, extractor): + """Dutch 'nieuwste' should trigger newest constraint.""" + constraint = extractor.extract("Wat is het nieuwste museum?") + assert constraint.constraint_type == "newest" + assert constraint.recommended_template == "find_by_founding" + + def test_newest_english_latest(self, extractor): + """English 'latest' should trigger newest constraint.""" + constraint = extractor.extract("What is the latest museum to open?") + assert constraint.constraint_type == "newest" + + def test_newest_most_recent(self, extractor): + """English 'most recent' should trigger newest constraint.""" + constraint = extractor.extract("What is the most recent archive established?") + assert constraint.constraint_type == "newest" + + # ===== Change Event Keywords ===== + + def test_merger_dutch_fusie(self, extractor): + """Dutch 'fusie' should trigger change_event constraint.""" + constraint = extractor.extract("Wanneer was de fusie van het archief?") + assert constraint.constraint_type == "change_event" + assert constraint.reference_event == "merger" + assert constraint.recommended_template == "events_in_period" + + def test_merger_english(self, extractor): + """English 'merger' should trigger change_event constraint.""" + constraint = extractor.extract("When did the merger happen?") + assert constraint.constraint_type == "change_event" + assert constraint.reference_event == "merger" + + def test_merger_merged(self, extractor): + """English 'merged' should trigger change_event constraint.""" + constraint = extractor.extract("Which archives merged in 2001?") + assert constraint.constraint_type == "change_event" + + def test_founding_dutch_opgericht(self, extractor): + """Dutch 'opgericht' should trigger founding constraint.""" + constraint = extractor.extract("Wanneer is het Rijksmuseum opgericht?") + assert constraint.constraint_type == "founding" + assert constraint.recommended_template == "institution_timeline" + + def test_founding_english_founded(self, extractor): + """English 'founded' should trigger founding constraint.""" + constraint = extractor.extract("When was the library founded?") + assert constraint.constraint_type == "founding" + + def test_founding_established(self, extractor): + """English 'established' should trigger founding constraint.""" + constraint = extractor.extract("When was this archive established?") + assert constraint.constraint_type == "founding" + + def test_closure_dutch_gesloten(self, extractor): + """Dutch 'gesloten' should trigger closure constraint.""" + constraint = extractor.extract("Wanneer is het museum gesloten?") + assert constraint.constraint_type == "closure" + assert constraint.recommended_template == "institution_timeline" + + def test_closure_english_closed(self, extractor): + """English 'closed' should trigger closure constraint.""" + # Note: "close" (verb form) vs "closed" (past participle) + # The extractor only has "closed" in CLOSURE_KEYWORDS + constraint = extractor.extract("When was the archive closed?") + assert constraint.constraint_type == "closure" + + def test_closure_dissolved(self, extractor): + """English 'dissolved' should trigger closure constraint.""" + constraint = extractor.extract("When was the organization dissolved?") + assert constraint.constraint_type == "closure" + + # ===== Year Extraction ===== + + def test_single_year_point_in_time(self, extractor): + """Single year should trigger point_in_time constraint.""" + constraint = extractor.extract("Wat was de status van het museum in 1990?") + assert constraint.constraint_type == "point_in_time" + assert constraint.date_start == "1990-01-01" + assert constraint.date_end == "1990-12-31" + assert constraint.recommended_template == "point_in_time_state" + + def test_two_years_between(self, extractor): + """Two years should trigger between constraint.""" + constraint = extractor.extract("Welke veranderingen waren er tussen 1990 en 2000?") + assert constraint.constraint_type == "between" + assert constraint.date_start == "1990-01-01" + assert constraint.date_end == "2000-12-31" + assert constraint.recommended_template == "events_in_period" + + def test_three_years_uses_first_and_last(self, extractor): + """Three years should use first and last for range.""" + constraint = extractor.extract("Musea in 1950, 1975 en 2000") + assert constraint.constraint_type == "between" + assert constraint.date_start == "1950-01-01" + assert constraint.date_end == "2000-12-31" + + def test_year_with_before_dutch(self, extractor): + """Year with Dutch 'voor' should trigger before constraint.""" + constraint = extractor.extract("Welke archieven bestonden voor 1950?") + assert constraint.constraint_type == "before" + assert constraint.date_end == "1950-01-01" + assert constraint.recommended_template == "point_in_time_state" + + def test_year_with_before_english(self, extractor): + """Year with English 'before' should trigger before constraint.""" + constraint = extractor.extract("Which museums existed before 1900?") + assert constraint.constraint_type == "before" + assert constraint.date_end == "1900-01-01" + + def test_year_with_after_dutch(self, extractor): + """Year with Dutch 'na' should trigger after constraint. + + Note: More specific keywords (like 'opgericht') take precedence. + We use a neutral query without founding/closure keywords. + """ + constraint = extractor.extract("Welke veranderingen waren er na 1980?") + assert constraint.constraint_type == "after" + assert constraint.date_start == "1980-12-31" + assert constraint.recommended_template == "point_in_time_state" + + def test_year_with_after_english(self, extractor): + """Year with English 'after' should trigger after constraint.""" + constraint = extractor.extract("What happened after 2010?") + assert constraint.constraint_type == "after" + assert constraint.date_start == "2010-12-31" + + def test_year_with_since(self, extractor): + """'Since' should trigger after constraint.""" + constraint = extractor.extract("Museums opened since 2000") + assert constraint.constraint_type == "after" + assert constraint.date_start == "2000-12-31" + + # ===== Year Extraction Edge Cases ===== + + def test_year_1800s(self, extractor): + """Should extract years from 1800s.""" + constraint = extractor.extract("Archieven uit 1856") + assert constraint.constraint_type == "point_in_time" + assert "1856" in constraint.date_start + + def test_year_2020s(self, extractor): + """Should extract years from 2020s.""" + constraint = extractor.extract("Nieuwe musea in 2023") + assert constraint.constraint_type == "point_in_time" + assert "2023" in constraint.date_start + + def test_ignore_numbers_that_are_not_years(self, extractor): + """Should not extract non-year numbers as years.""" + # Numbers like 500 or 50 should not be treated as years + constraint = extractor.extract("Het museum heeft 500 werken in de collectie") + assert constraint.constraint_type == "none" + + # ===== No Temporal Constraint ===== + + def test_no_constraint_simple_query(self, extractor): + """Query without temporal indicators should return none.""" + constraint = extractor.extract("Welke musea zijn er in Amsterdam?") + assert constraint.constraint_type == "none" + assert constraint.recommended_template is None + + def test_no_constraint_descriptive_query(self, extractor): + """Descriptive query should return none.""" + constraint = extractor.extract("Vertel me over de collectie van het Rijksmuseum") + assert constraint.constraint_type == "none" + + # ===== Word Boundary Matching ===== + + def test_na_in_nationaal_not_matched(self, extractor): + """'na' inside 'nationaal' should NOT trigger after constraint.""" + constraint = extractor.extract("Nationaal Archief in Den Haag") + # 'nationaal' contains 'na' but it's not a word boundary + assert constraint.constraint_type == "none" + + def test_na_as_word_is_matched(self, extractor): + """'na' as standalone word SHOULD trigger after constraint.""" + constraint = extractor.extract("Na de renovatie in 1995 werd het museum heropend") + assert constraint.constraint_type == "after" + assert "1995" in constraint.date_start + + def test_voor_in_voorwerpen_not_matched(self, extractor): + """'voor' inside 'voorwerpen' should NOT trigger before.""" + constraint = extractor.extract("De collectie bevat voorwerpen uit de 18e eeuw") + # No explicit year, so should be none + assert constraint.constraint_type == "none" + + def test_voor_as_word_is_matched(self, extractor): + """'voor' as standalone word SHOULD trigger before constraint.""" + constraint = extractor.extract("Archieven van voor 1900") + assert constraint.constraint_type == "before" + assert "1900" in constraint.date_end + + # ===== Template Mapping ===== + + def test_template_mapping_point_in_time(self, extractor): + """point_in_time should map to point_in_time_state template.""" + constraint = extractor.extract("Status in 1990") + template = extractor.get_template_for_constraint(constraint) + assert template == "point_in_time_state" + + def test_template_mapping_between(self, extractor): + """between should map to events_in_period template.""" + constraint = extractor.extract("Veranderingen tussen 1990 en 2000") + template = extractor.get_template_for_constraint(constraint) + assert template == "events_in_period" + + def test_template_mapping_oldest(self, extractor): + """oldest should map to find_by_founding template.""" + constraint = extractor.extract("Het oudste museum") + template = extractor.get_template_for_constraint(constraint) + assert template == "find_by_founding" + + def test_template_mapping_timeline(self, extractor): + """timeline should map to institution_timeline template.""" + constraint = extractor.extract("Geschiedenis van het archief") + template = extractor.get_template_for_constraint(constraint) + assert template == "institution_timeline" + + def test_template_mapping_none(self, extractor): + """none constraint should return None template.""" + constraint = extractor.extract("Welke musea zijn er?") + template = extractor.get_template_for_constraint(constraint) + assert template is None + + # ===== Confidence Scoring ===== + + def test_high_confidence_timeline(self, extractor): + """Timeline queries should have high confidence.""" + constraint = extractor.extract("Geschiedenis van het Rijksmuseum") + assert constraint.confidence >= 0.9 + + def test_high_confidence_superlative(self, extractor): + """Superlative queries should have high confidence.""" + constraint = extractor.extract("Het oudste archief") + assert constraint.confidence >= 0.9 + + def test_moderate_confidence_year_only(self, extractor): + """Year-only queries should have moderate confidence.""" + constraint = extractor.extract("Musea in 1990") + assert 0.7 <= constraint.confidence <= 0.9 + + def test_lower_confidence_no_constraint(self, extractor): + """No-constraint queries should have lower confidence.""" + constraint = extractor.extract("Algemene informatie over erfgoed") + assert constraint.confidence <= 0.75 + + +class TestTemporalConstraintDataclass: + """Tests for TemporalConstraint dataclass.""" + + def test_default_values(self): + """Test default values of TemporalConstraint.""" + constraint = TemporalConstraint(constraint_type="none") + assert constraint.date_start is None + assert constraint.date_end is None + assert constraint.reference_event is None + assert constraint.confidence == 0.8 + assert constraint.recommended_template is None + + def test_full_constraint(self): + """Test TemporalConstraint with all fields.""" + constraint = TemporalConstraint( + constraint_type="between", + date_start="1990-01-01", + date_end="2000-12-31", + reference_event=None, + confidence=0.95, + recommended_template="events_in_period" + ) + assert constraint.constraint_type == "between" + assert constraint.date_start == "1990-01-01" + assert constraint.date_end == "2000-12-31" + assert constraint.confidence == 0.95 + assert constraint.recommended_template == "events_in_period" + + +class TestTemporalIntentExtractorModule: + """Tests for the DSPy module (without actual LLM calls).""" + + def test_module_initialization(self): + """Test module initializes correctly.""" + module = TemporalIntentExtractorModule(confidence_threshold=0.75) + assert module.confidence_threshold == 0.75 + assert module.fast_extractor is not None + + def test_high_confidence_uses_fast_extraction(self): + """High confidence queries should use fast extraction, not LLM.""" + module = TemporalIntentExtractorModule(confidence_threshold=0.75) + + # This query has high confidence (timeline keyword) + constraint = module.forward("Geschiedenis van het Rijksmuseum") + + # Should use fast extraction result + assert constraint.constraint_type == "timeline" + assert constraint.confidence >= 0.75 + + +class TestSingletonInstance: + """Tests for singleton pattern.""" + + def test_get_temporal_extractor_singleton(self): + """get_temporal_extractor should return same instance.""" + ext1 = get_temporal_extractor() + ext2 = get_temporal_extractor() + assert ext1 is ext2 + + def test_singleton_is_temporal_constraint_extractor(self): + """Singleton should be TemporalConstraintExtractor instance.""" + ext = get_temporal_extractor() + assert isinstance(ext, TemporalConstraintExtractor) + + +class TestIntegration: + """Integration tests for full temporal extraction flow.""" + + def test_dutch_point_in_time_full_flow(self): + """Test complete flow for Dutch point-in-time query.""" + extractor = get_temporal_extractor() + + constraint = extractor.extract( + "Wat was de status van het Rijksmuseum in 1990?" + ) + + assert constraint.constraint_type == "point_in_time" + assert constraint.date_start == "1990-01-01" + assert constraint.date_end == "1990-12-31" + assert constraint.recommended_template == "point_in_time_state" + + def test_english_timeline_full_flow(self): + """Test complete flow for English timeline query.""" + extractor = get_temporal_extractor() + + constraint = extractor.extract( + "What is the history of the British Museum?" + ) + + assert constraint.constraint_type == "timeline" + assert constraint.recommended_template == "institution_timeline" + + def test_date_range_full_flow(self): + """Test complete flow for date range query.""" + extractor = get_temporal_extractor() + + constraint = extractor.extract( + "Welke fusies vonden plaats tussen 1990 en 2010?" + ) + + # Should detect "fusie" (merger) keyword first + # But since there are two years, it should be change_event or between + # Merger keywords take precedence + assert constraint.constraint_type == "change_event" + assert constraint.reference_event == "merger" + + def test_superlative_with_location(self): + """Test superlative query with location.""" + extractor = get_temporal_extractor() + + constraint = extractor.extract( + "Wat is het oudste archief in Noord-Holland?" + ) + + assert constraint.constraint_type == "oldest" + assert constraint.recommended_template == "find_by_founding" + + def test_complex_query_multiple_indicators(self): + """Test query with multiple temporal indicators.""" + extractor = get_temporal_extractor() + + # "geschiedenis" (timeline) and "oudste" (oldest) - timeline wins (checked first) + constraint = extractor.extract( + "Vertel me de geschiedenis van de oudste bibliotheek" + ) + + assert constraint.constraint_type == "timeline" + + def test_query_templates_for_sparql(self): + """Test that all temporal constraints map to valid templates.""" + extractor = get_temporal_extractor() + + test_cases = [ + ("Geschiedenis van het archief", "institution_timeline"), + ("Het oudste museum", "find_by_founding"), + ("Het nieuwste archief", "find_by_founding"), + ("Status in 1990", "point_in_time_state"), + ("Voor 1950", "point_in_time_state"), # Year + before + ("Na 2000", "point_in_time_state"), # Year + after + ("Fusies in de regio", "events_in_period"), + ("Wanneer opgericht", "institution_timeline"), + ("Wanneer gesloten", "institution_timeline"), + ] + + for query, expected_template in test_cases: + constraint = extractor.extract(query) + # Some queries may not extract years, check if template matches expectation + if constraint.constraint_type != "none": + assert constraint.recommended_template == expected_template, ( + f"Query '{query}' expected template '{expected_template}', " + f"got '{constraint.recommended_template}' " + f"(constraint_type: {constraint.constraint_type})" + ) + + +class TestRealWorldQueries: + """Tests with real-world heritage queries.""" + + @pytest.fixture + def extractor(self): + return get_temporal_extractor() + + def test_noord_hollands_archief_history(self, extractor): + """Real query about Noord-Hollands Archief history.""" + constraint = extractor.extract( + "Wat is de geschiedenis van het Noord-Hollands Archief sinds de fusie in 2001?" + ) + # "geschiedenis" (timeline) is checked before merger/year + assert constraint.constraint_type == "timeline" + + def test_museum_founding_date(self, extractor): + """Real query about museum founding.""" + constraint = extractor.extract( + "Wanneer is het Rijksmuseum in Amsterdam opgericht?" + ) + assert constraint.constraint_type == "founding" + + def test_archives_before_ww2(self, extractor): + """Query about archives before WWII.""" + constraint = extractor.extract( + "Welke gemeentearchieven bestonden voor 1940?" + ) + assert constraint.constraint_type == "before" + assert "1940" in constraint.date_end + + def test_oldest_university_library(self, extractor): + """Query about oldest university library.""" + constraint = extractor.extract( + "Wat is de oudste universiteitsbibliotheek van Nederland?" + ) + assert constraint.constraint_type == "oldest" + + def test_museum_closures_pandemic(self, extractor): + """Query about closures during pandemic.""" + constraint = extractor.extract( + "Welke musea zijn gesloten tijdens de pandemie in 2020?" + ) + # "gesloten" (closure) keyword + assert constraint.constraint_type == "closure" + + def test_digital_archives_recent(self, extractor): + """Query about recent digital archives.""" + constraint = extractor.extract( + "Welke digitale archieven zijn na 2015 gelanceerd?" + ) + assert constraint.constraint_type == "after" + assert "2015" in constraint.date_start + + +# Run with: pytest backend/rag/test_temporal_intent.py -v diff --git a/data/sparql_templates.yaml b/data/sparql_templates.yaml index 93c7d6b19d..8ead8db382 100644 --- a/data/sparql_templates.yaml +++ b/data/sparql_templates.yaml @@ -1038,6 +1038,400 @@ templates: - question: "Which museums spend less than 1000 on innovation?" slots: {budget_category: "innovation", amount: 1000, comparison: "<", institution_type: "M"} + # --------------------------------------------------------------------------- + # TEMPORAL QUERY TEMPLATES + # --------------------------------------------------------------------------- + # These templates handle time-based queries about heritage institutions: + # - Historical state at point in time + # - Institution timelines and history + # - Organizational change events (mergers, closures, foundings) + # - Finding oldest/newest institutions + # + # Reference: docs/plan/external_design_patterns/04_temporal_semantic_hypergraph.md + + # Template: Point-in-time institution state + point_in_time_state: + id: "point_in_time_state" + description: "Get institution state at a specific point in time" + intent: ["temporal", "entity_lookup"] + + question_patterns: + # Dutch + - "Wat was de status van {institution_name} in {year}?" + - "Hoe zag {institution_name} eruit in {year}?" + - "Bestond {institution_name} al in {year}?" + - "Wie beheerde {institution_name} in {year}?" + - "{institution_name} in {year}" + # English + - "What was the status of {institution_name} in {year}?" + - "How was {institution_name} structured in {year}?" + - "Did {institution_name} exist in {year}?" + - "State of {institution_name} before {event}?" + - "{institution_name} in {year}" + + slots: + institution_name: + type: string + required: false + description: "Institution name for lookup (alternative to ghcid)" + ghcid: + type: string + required: false + description: "Global Heritage Custodian Identifier" + query_date: + type: date + required: true + description: "Point in time to query (ISO format or year)" + + sparql_template: | + {{ prefixes }} + + SELECT ?ghcid ?name ?type ?city ?validFrom ?validTo WHERE { + ?s a crm:E39_Actor ; + hc:ghcid ?ghcid ; + skos:prefLabel ?name ; + hc:institutionType ?type . + OPTIONAL { ?s hc:validFrom ?validFrom } + OPTIONAL { ?s schema:addressLocality ?city } + OPTIONAL { ?s hc:validTo ?validTo } + + {% if ghcid %} + FILTER(?ghcid = "{{ ghcid }}") + {% elif institution_name %} + FILTER(CONTAINS(LCASE(?name), "{{ institution_name | lower }}")) + {% endif %} + + # Temporal filter: valid at query_date + FILTER(!BOUND(?validFrom) || ?validFrom <= "{{ query_date }}"^^xsd:date) + FILTER(!BOUND(?validTo) || ?validTo > "{{ query_date }}"^^xsd:date) + } + ORDER BY ?validFrom + {% if limit %}LIMIT {{ limit }}{% else %}LIMIT 10{% endif %} + + examples: + - question: "Wat was de status van Rijksmuseum in 1990?" + slots: {institution_name: "Rijksmuseum", query_date: "1990-01-01"} + - question: "How was Noord-Hollands Archief structured in 1995?" + slots: {institution_name: "Noord-Hollands Archief", query_date: "1995-01-01"} + + # Template: Institution timeline/history + institution_timeline: + id: "institution_timeline" + description: "Get complete history and timeline of changes for an institution" + intent: ["temporal", "entity_lookup"] + + question_patterns: + # Dutch + - "Geschiedenis van {institution_name}" + - "Wat is de geschiedenis van {institution_name}?" + - "Tijdlijn van {institution_name}" + - "Wat is er gebeurd met {institution_name}?" + - "Vertel me over de geschiedenis van {institution_name}" + - "Hoe is {institution_name} veranderd door de jaren?" + # English + - "History of {institution_name}" + - "Timeline of {institution_name}" + - "Timeline of changes for {institution_name}" + - "What happened to {institution_name}?" + - "Tell me about the history of {institution_name}" + - "How has {institution_name} changed over the years?" + + slots: + institution_name: + type: string + required: false + ghcid: + type: string + required: false + + sparql_template: | + {{ prefixes }} + + SELECT ?ghcid ?name ?validFrom ?validTo ?changeType ?changeReason ?description WHERE { + ?entry hc:ghcid ?ghcid ; + skos:prefLabel ?name . + OPTIONAL { ?entry hc:validFrom ?validFrom } + OPTIONAL { ?entry hc:validTo ?validTo } + OPTIONAL { ?entry hc:changeType ?changeType } + OPTIONAL { ?entry hc:changeReason ?changeReason } + OPTIONAL { ?entry schema:description ?description } + + {% if ghcid %} + FILTER(?ghcid = "{{ ghcid }}") + {% elif institution_name %} + FILTER(CONTAINS(LCASE(?name), "{{ institution_name | lower }}")) + {% endif %} + } + ORDER BY ?validFrom + + examples: + - question: "Geschiedenis van het Rijksmuseum" + slots: {institution_name: "Rijksmuseum"} + - question: "What happened to Noord-Hollands Archief?" + slots: {institution_name: "Noord-Hollands Archief"} + + # Template: Organizational change events in time period + events_in_period: + id: "events_in_period" + description: "Find organizational change events in a time period" + intent: ["temporal", "statistical"] + + question_patterns: + # Dutch + - "Welke fusies waren er tussen {start_year} en {end_year}?" + - "Welke {event_type_nl} waren er in {year}?" + - "Welke instellingen zijn gesloten in {year}?" + - "Welke archieven zijn gefuseerd na {year}?" + - "Nieuwe musea sinds {year}" + - "Sluitingen in {year}" + - "Fusies tussen {start_year} en {end_year}" + # English + - "Mergers between {start_year} and {end_year}" + - "What {event_type_en} happened in {year}?" + - "What institutions closed in {year}?" + - "Archives founded before {year}" + - "New museums since {year}" + - "Closures in {year}" + - "Mergers between {start_year} and {end_year}" + + slots: + start_date: + type: date + required: true + description: "Start of time period (ISO format or year)" + end_date: + type: date + required: false + description: "End of time period (defaults to now)" + event_type: + type: string + required: false + valid_values: ["MERGER", "FOUNDING", "CLOSURE", "RELOCATION", "NAME_CHANGE", "SPLIT", "ACQUISITION"] + description: "Type of organizational change event" + institution_type: + type: institution_type + required: false + + sparql_template: | + {{ prefixes }} + + SELECT ?event ?eventType ?date ?actor1 ?actor1Name ?actor2 ?actor2Name ?description WHERE { + ?event a hc:OrganizationalChangeEvent ; + hc:eventType ?eventType ; + hc:eventDate ?date . + OPTIONAL { + ?event hc:affectedActor ?actor1 . + ?actor1 skos:prefLabel ?actor1Name . + } + OPTIONAL { + ?event hc:resultingActor ?actor2 . + ?actor2 skos:prefLabel ?actor2Name . + } + OPTIONAL { ?event schema:description ?description } + + FILTER(?date >= "{{ start_date }}"^^xsd:date) + {% if end_date %} + FILTER(?date <= "{{ end_date }}"^^xsd:date) + {% endif %} + {% if event_type %} + FILTER(?eventType = "{{ event_type }}") + {% endif %} + {% if institution_type %} + ?actor1 hc:institutionType "{{ institution_type }}" . + {% endif %} + } + ORDER BY ?date + {% if limit %}LIMIT {{ limit }}{% else %}LIMIT 50{% endif %} + + examples: + - question: "Welke fusies waren er tussen 2000 en 2010?" + slots: {start_date: "2000-01-01", end_date: "2010-12-31", event_type: "MERGER"} + - question: "What museums closed in 2020?" + slots: {start_date: "2020-01-01", end_date: "2020-12-31", event_type: "CLOSURE", institution_type: "M"} + - question: "Archives founded before 1900" + slots: {start_date: "1800-01-01", end_date: "1899-12-31", event_type: "FOUNDING", institution_type: "A"} + + # Template: Find oldest/newest institutions + find_by_founding: + id: "find_by_founding" + description: "Find oldest or newest (most recently founded) institutions" + intent: ["temporal", "exploration"] + + question_patterns: + # Dutch + - "Oudste {institution_type_nl} in {location}" + - "Oudste {institution_type_nl} van Nederland" + - "Nieuwste {institution_type_nl} in {location}" + - "Welk {institution_type_nl} is het oudste in {location}?" + - "Welk {institution_type_nl} is het nieuwste?" + - "Eerst opgerichte {institution_type_nl}" + - "Laatst opgerichte {institution_type_nl}" + - "{institution_type_nl} opgericht na {year}" + - "{institution_type_nl} opgericht voor {year}" + # English + - "Oldest {institution_type_en} in {location}" + - "Oldest {institution_type_en} in the Netherlands" + - "Newest {institution_type_en} opened after {year}" + - "Most recently founded {institution_type_en}" + - "Which {institution_type_en} is the oldest in {location}?" + - "First established {institution_type_en}" + - "{institution_type_en} founded after {year}" + - "{institution_type_en} founded before {year}" + + slots: + institution_type: + type: institution_type + required: true + order: + type: string + required: false + valid_values: ["ASC", "DESC"] + default: "ASC" + description: "ASC for oldest first, DESC for newest first" + location: + type: city + required: false + description: "City or region to filter by" + country: + type: country + required: false + default: "NL" + founding_after: + type: date + required: false + founding_before: + type: date + required: false + + sparql_template: | + {{ prefixes }} + + SELECT ?institution ?name ?foundingDate ?city ?country WHERE { + ?institution a hcc:Custodian ; + hc:institutionType "{{ institution_type }}" ; + schema:name ?name . + OPTIONAL { ?institution schema:foundingDate ?foundingDate } + OPTIONAL { ?institution hc:settlementName ?city } + OPTIONAL { ?institution hc:countryCode ?country } + + # Must have founding date for ordering + FILTER(BOUND(?foundingDate)) + + {% if location %} + FILTER(CONTAINS(LCASE(?city), "{{ location | lower }}")) + {% endif %} + {% if country %} + FILTER(?country = "{{ country }}") + {% endif %} + {% if founding_after %} + FILTER(?foundingDate >= "{{ founding_after }}"^^xsd:date) + {% endif %} + {% if founding_before %} + FILTER(?foundingDate <= "{{ founding_before }}"^^xsd:date) + {% endif %} + } + ORDER BY {{ order | default('ASC') }}(?foundingDate) + {% if limit %}LIMIT {{ limit }}{% else %}LIMIT 10{% endif %} + + examples: + - question: "Oudste musea in Amsterdam" + slots: {institution_type: "M", location: "Amsterdam", order: "ASC"} + - question: "Newest libraries in the Netherlands" + slots: {institution_type: "L", country: "NL", order: "DESC"} + - question: "Archives founded after 2000" + slots: {institution_type: "A", founding_after: "2000-01-01", order: "ASC"} + + # Template: Institutions by founding decade + institutions_by_founding_decade: + id: "institutions_by_founding_decade" + description: "Count or list institutions by founding decade" + intent: ["temporal", "statistical"] + + question_patterns: + # Dutch + - "Hoeveel {institution_type_nl} zijn opgericht per decennium?" + - "{institution_type_nl} opgericht in de jaren {decade}" + - "Welke {institution_type_nl} zijn in de 19e eeuw opgericht?" + - "Verdeling van oprichtingsjaren voor {institution_type_nl}" + # English + - "How many {institution_type_en} were founded per decade?" + - "{institution_type_en} founded in the {decade}s" + - "Which {institution_type_en} were founded in the 19th century?" + - "Distribution of founding years for {institution_type_en}" + + slots: + institution_type: + type: institution_type + required: true + decade: + type: integer + required: false + description: "Decade start year (e.g., 1990 for 1990s)" + century: + type: integer + required: false + description: "Century (e.g., 19 for 19th century)" + country: + type: country + required: false + + sparql_template: | + {{ prefixes }} + + SELECT ?decade (COUNT(?institution) AS ?count) WHERE { + ?institution a hcc:Custodian ; + hc:institutionType "{{ institution_type }}" ; + schema:foundingDate ?foundingDate . + {% if country %} + ?institution hc:countryCode "{{ country }}" . + {% endif %} + + BIND(YEAR(?foundingDate) AS ?year) + BIND(FLOOR(?year / 10) * 10 AS ?decade) + + {% if decade %} + FILTER(?decade = {{ decade }}) + {% endif %} + {% if century %} + FILTER(?year >= {{ (century - 1) * 100 }} && ?year < {{ century * 100 }}) + {% endif %} + } + GROUP BY ?decade + ORDER BY ?decade + + # Alternative: list institutions in specific decade + sparql_template_list: | + {{ prefixes }} + + SELECT ?institution ?name ?foundingDate WHERE { + ?institution a hcc:Custodian ; + hc:institutionType "{{ institution_type }}" ; + schema:name ?name ; + schema:foundingDate ?foundingDate . + {% if country %} + ?institution hc:countryCode "{{ country }}" . + {% endif %} + + BIND(YEAR(?foundingDate) AS ?year) + + {% if decade %} + FILTER(?year >= {{ decade }} && ?year < {{ decade + 10 }}) + {% endif %} + {% if century %} + FILTER(?year >= {{ (century - 1) * 100 }} && ?year < {{ century * 100 }}) + {% endif %} + } + ORDER BY ?foundingDate + {% if limit %}LIMIT {{ limit }}{% endif %} + + examples: + - question: "Hoeveel musea zijn opgericht per decennium?" + slots: {institution_type: "M"} + - question: "Archives founded in the 1990s" + slots: {institution_type: "A", decade: 1990} + - question: "Libraries founded in the 19th century" + slots: {institution_type: "L", century: 19} + # ============================================================================= # FOLLOW-UP PATTERNS (Conversation Context Resolution) # ============================================================================= diff --git a/docs/plan/external_design_patterns/01_graphrag_design_patterns.md b/docs/plan/external_design_patterns/01_graphrag_design_patterns.md new file mode 100644 index 0000000000..84521381ff --- /dev/null +++ b/docs/plan/external_design_patterns/01_graphrag_design_patterns.md @@ -0,0 +1,3360 @@ +# GraphRAG Design Patterns for Heritage Knowledge Graph + Vector Search + +**Created**: 2025-01-06 +**Purpose**: Analysis of external GraphRAG patterns applicable to our TypeDB-Oxigraph-DSPy architecture +**Status**: Research and Planning + +--- + +## Table of Contents + +1. [Executive Summary](#executive-summary) +2. [Current GLAM Architecture Analysis](#current-glam-architecture-analysis) +3. [External Pattern Analysis](#external-pattern-analysis) +4. [Recommended Design Patterns](#recommended-design-patterns) +5. [Implementation Roadmap](#implementation-roadmap) +6. [Anti-Patterns to Avoid](#anti-patterns-to-avoid) +7. [Conclusion](#conclusion) +8. [Temporal Knowledge Graph Patterns](#temporal-knowledge-graph-patterns) +9. [Semantic Routing Patterns](#semantic-routing-patterns) +10. [Hypergraph Patterns Deep Dive](#hypergraph-patterns-deep-dive) +11. [Rules on Graphs Pattern](#11-rules-on-graphs-pattern-shacl--datalog-inference) +12. [References](#updated-references) + +--- + +## Executive Summary + +This document analyzes design patterns from leading GraphRAG research and libraries (Microsoft GraphRAG, ROGRAG, Zep, HyperGraphRAG, LightRAG, etc.) and identifies **patterns applicable to our existing TypeDB-Oxigraph-DSPy stack** without adding new frameworks. + +### Key Findings + +| Pattern Category | Applicable to GLAM | Implementation Complexity | Priority | +|------------------|-------------------|--------------------------|----------| +| Community Hierarchies | Yes | Medium | High | +| Temporal Knowledge Graphs | Yes (already have) | Low | High | +| Dual-Level Retrieval | Yes | Low | High | +| Hypergraph Memory | Partial | High | Medium | +| Multi-Stage Verification | Yes | Medium | High | +| Iterative Search Optimization | Yes | Low | High | + +### Core Principle + +> **Avoid adding new frameworks.** Focus on extracting design patterns as implementation strategies within our existing stack: **TypeDB** (semantic graph), **Oxigraph** (RDF/SPARQL), **Qdrant** (vector search), and **DSPy** (LLM orchestration). + +--- + +## Current GLAM Architecture Analysis + +### Existing Components + +``` +┌─────────────────────────────────────────────────────────────────────┐ +│ GLAM RAG Architecture │ +├─────────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ +│ │ Qdrant │ │ Oxigraph │ │ TypeDB │ │ +│ │ Vector Store │ │ SPARQL/RDF │ │ Schema Store │ │ +│ │ │ │ │ │ │ │ +│ │ - Embeddings │ │ - Triples │ │ - LinkML │ │ +│ │ - Semantic │ │ - SPARQL │ │ - Ontology │ │ +│ │ Search │ │ Queries │ │ - Validation │ │ +│ └──────┬───────┘ └──────┬───────┘ └──────────────┘ │ +│ │ │ │ +│ └───────────────────┴──────────────────────────────────┐ │ +│ │ │ +│ ┌────────────────────────────────────────────────────────────┐│ │ +│ │ DSPy Heritage RAG ││ │ +│ │ ││ │ +│ │ ┌───────────────┐ ┌───────────────┐ ┌────────────────┐ ││ │ +│ │ │ Template │ │ Entity │ │ SPARQL │ ││ │ +│ │ │ SPARQL │ │ Extraction │ │ Generator │ ││ │ +│ │ │ Classifier │ │ (DSPy Sig) │ │ (DSPy Sig) │ ││ │ +│ │ └───────────────┘ └───────────────┘ └────────────────┘ ││ │ +│ │ ││ │ +│ │ ┌───────────────┐ ┌───────────────┐ ┌────────────────┐ ││ │ +│ │ │ Semantic │ │ Cost │ │ GEPA │ ││ │ +│ │ │ Cache │ │ Tracker │ │ Optimizer │ ││ │ +│ │ └───────────────┘ └───────────────┘ └────────────────┘ ││ │ +│ └────────────────────────────────────────────────────────────┘│ │ +│ │ │ +└─────────────────────────────────────────────────────────────────────┘ +``` + +### Current Retrieval Flow + +1. **Query Intent Classification** (DSPy Signature) +2. **Entity Extraction** (Heritage-specific NER) +3. **Template Matching** (SPARQL template selection) +4. **Dual Retrieval**: + - SPARQL queries to Oxigraph (structured) + - Vector search in Qdrant (semantic) +5. **Result Fusion** (merge and deduplicate) +6. **Answer Generation** (DSPy with context) + +### Strengths of Current System + +- **Template-based SPARQL**: 65% precision vs 10% LLM-only (Formica et al., 2023) +- **Semantic caching**: Reduces redundant LLM calls +- **Temporal awareness**: GHCID history tracking with `valid_from`/`valid_to` +- **Ontology grounding**: LinkML schema provides type safety +- **Multi-hop capable**: SPARQL traverses relationships + +### Current Gaps (Opportunities) + +| Gap | External Pattern Solution | +|-----|--------------------------| +| No community/cluster summaries | Microsoft GraphRAG communities | +| Limited iterative refinement | ROGRAG dual-level + logic form | +| No explicit verification step | ROGRAG argument checking | +| Flat retrieval (no hierarchy) | GraphRAG local/global search | +| Missing hyperedge relations | HyperGraphRAG n-ary facts | + +--- + +## External Pattern Analysis + +### 1. Microsoft GraphRAG (arxiv:2404.16130) + +**Core Innovation**: Hierarchical community summarization using Leiden clustering. + +**Key Components**: +- **Entity Extraction**: LLM extracts entities/relationships from text chunks +- **Community Detection**: Leiden algorithm clusters related entities +- **Hierarchical Summaries**: Bottom-up summaries for each community level +- **Query Modes**: + - **Global Search**: Uses community summaries for holistic questions + - **Local Search**: Fan-out from specific entities + - **DRIFT Search**: Local + community context + +**Applicable Pattern for GLAM**: + +```python +# Pattern: Community-Based Retrieval for Holistic Questions +# E.g., "What are the main themes across Dutch archives?" + +class CommunityRetriever: + """ + Pre-compute community clusters from Oxigraph triples. + Store community summaries in Qdrant as additional vectors. + """ + + def detect_communities(self) -> dict[str, list[str]]: + """Use Leiden/Louvain on institution-location-type graph.""" + # SPARQL: Get all institution relationships + # Apply community detection algorithm + # Return community_id -> [ghcid_list] + pass + + def generate_community_summary(self, community_ghcids: list[str]) -> str: + """LLM summarizes institutions in a community.""" + # Retrieve metadata for all institutions + # Generate summary with DSPy signature + pass + + def global_search(self, query: str) -> list[str]: + """Search community summaries for holistic questions.""" + # Vector search community summaries + # Aggregate partial answers + pass +``` + +**Implementation in Our Stack**: +- Use **Oxigraph SPARQL** to extract graph for clustering +- Run **Leiden algorithm** (Python `leidenalg` library) +- Store **community summaries as Qdrant vectors** +- Add **global_search mode** to DSPy RAG + +--- + +### 2. ROGRAG (arxiv:2503.06474) + +**Core Innovation**: Multi-stage retrieval with dual-level + logic form methods. + +**Key Components**: +- **Dual-Level Retrieval**: + - Low-level: Entity keywords (fuzzy matching) + - High-level: Relational descriptions (semantic matching) +- **Logic Form Retrieval**: Operator-based query decomposition +- **Retrieval Verifier**: Argument checking before generation + +**Applicable Pattern for GLAM**: + +```python +# Pattern: Dual-Level Retrieval with Verification + +class DualLevelRetriever: + """ + Combine entity-level and relation-level matching. + """ + + def extract_dual_level(self, query: str) -> tuple[list[str], list[str]]: + """ + Extract low-level (entities) and high-level (relations) from query. + + E.g., "Which archives in Haarlem have digitized collections?" + Low-level: ["Haarlem", "archief"] + High-level: ["digitized collections", "heritage institution"] + """ + # DSPy signature for dual extraction + pass + + def match_low_level(self, entities: list[str]) -> set[str]: + """Fuzzy match entities against Oxigraph nodes.""" + # SPARQL with FILTER(CONTAINS(...)) + # Return matching GHCIDs + pass + + def match_high_level(self, relations: list[str]) -> set[str]: + """Semantic match relations against edge descriptions.""" + # Vector search in Qdrant + # Return matching GHCIDs + pass + + def merge_results(self, low: set[str], high: set[str]) -> list[str]: + """Merge and deduplicate, prioritize intersection.""" + intersection = low & high + return list(intersection) + list(low - high) + list(high - low) + + +class RetrievalVerifier: + """ + Verify retrieved context answers the question before generation. + """ + + def verify_argument(self, query: str, context: str) -> bool: + """ + Check if context is sufficient to answer query. + Reject if confidence < threshold. + """ + # DSPy signature for verification + # Return True if sufficient, False to retry + pass +``` + +**Key Insight from ROGRAG**: +> "Although the dual-level method achieves higher precision, logic form method provides higher information density and is more concise and clear." + +**Implementation in Our Stack**: +- Add **dual-level extraction** as DSPy Signature +- Extend **template_sparql.py** with fuzzy matching +- Add **RetrievalVerifier** between retrieval and generation +- Implement **fallback cascade**: Template → Dual-Level → Logic Form → Vector-only + +--- + +### 3. Zep Temporal Knowledge Graph (arxiv:2501.13956) + +**Core Innovation**: Bitemporal modeling with episodic, semantic, and community subgraphs. + +**Key Components**: +- **Episode Subgraph**: Raw events with original timestamps +- **Semantic Entity Subgraph**: Extracted entities with embeddings +- **Community Subgraph**: Clustered entities with summaries +- **Bitemporal Modeling**: + - **Event Time (T)**: When fact occurred + - **Ingestion Time (T')**: When added to graph +- **Edge Invalidation**: Update/supersede facts over time + +**We Already Have This!** GLAM's `ghcid_history` with `valid_from`/`valid_to` implements temporal tracking. + +**Enhancement Pattern**: + +```python +# Pattern: Enhanced Temporal Reasoning + +class TemporalReasoningEnhancer: + """ + Extend existing temporal tracking with Zep-style capabilities. + """ + + def query_at_point_in_time( + self, + ghcid: str, + query_date: datetime + ) -> dict: + """ + Return institution state at specific point in time. + Uses GHCID history to find valid record. + """ + # SPARQL with temporal filter: + # FILTER(?valid_from <= ?query_date && + # (?valid_to IS NULL || ?valid_to > ?query_date)) + pass + + def track_provenance_chain(self, ghcid: str) -> list[dict]: + """ + Full audit trail: what changed, when, why. + Critical for heritage institutions with mergers/splits. + """ + # Query ghcid_history entries + # Include change_event references + pass + + def invalidate_superseded_facts( + self, + ghcid: str, + new_fact: dict, + reason: str + ) -> None: + """ + When new fact supersedes old, mark old as invalid. + Preserve provenance for auditability. + """ + # Set valid_to on old fact + # Create new fact with valid_from + # Link via change_event + pass +``` + +**Implementation in Our Stack**: +- Already have `GHCIDHistoryEntry` in LinkML schema +- Enhance **SPARQL templates** with temporal filters +- Add **point-in-time query mode** to DSPy RAG +- Leverage **ChangeEvent** for provenance chain + +--- + +### 4. HyperGraphRAG (arxiv:2503.21322) + +**Core Innovation**: N-ary relations via hyperedges (connecting 3+ entities). + +**Key Components**: +- **Hyperedge Construction**: Facts connecting multiple entities +- **Hyperedge Retrieval**: Match queries to multi-entity facts +- **Hyperedge Generation**: LLM reasons over hyperedge context + +**Example N-ary Fact**: +> "The Amsterdam Museum acquired the Rembrandt collection from the Rijksmuseum in 2020 as part of the Shared Heritage initiative." + +Traditional triple: Can only capture binary relations. +Hyperedge: Connects Museum, Collection, Year, Initiative, Source in single fact. + +**Applicable Pattern for GLAM**: + +```python +# Pattern: N-ary Relation Modeling + +class HyperedgeManager: + """ + Model complex heritage events as hyperedges. + Store in Oxigraph using reification or named graphs. + """ + + def create_custody_transfer_hyperedge( + self, + source_ghcid: str, + target_ghcid: str, + collection_uri: str, + event_date: str, + initiative_name: str + ) -> str: + """ + Create hyperedge for custody transfer event. + + Uses RDF reification pattern: + _:transfer a hc:CustodyTransfer ; + hc:source ; + hc:target ; + hc:collection ; + schema:date "2020-01-01" ; + hc:initiative "Shared Heritage" . + """ + pass + + def retrieve_by_partial_match( + self, + known_entities: list[str] + ) -> list[dict]: + """ + Find hyperedges matching subset of entities. + E.g., query mentions "Rijksmuseum" and "2020" → find all + transfers involving Rijksmuseum in 2020. + """ + # SPARQL with OPTIONAL patterns + pass +``` + +**CIDOC-CRM Alignment**: +We already use CIDOC-CRM which supports n-ary relations via events: +- `crm:E10_Transfer_of_Custody` - connects parties, object, time +- `crm:E5_Event` - generic multi-participant events + +**Implementation in Our Stack**: +- Use **CIDOC-CRM event classes** for n-ary facts +- Extend **entity extraction** to recognize event patterns +- Add **event-aware SPARQL templates** +- Index **event descriptions** in Qdrant for semantic matching + +--- + +### 5. Cost-Efficient GraphRAG (TDS Article) + +**Core Insight**: "You don't need a perfect graph." + +**Key Patterns**: + +1. **Star Graph Sufficiency**: + - Minimal graph: Central node (report/institution) → entities + - Relations inferred via iterative search, not explicit edges + +2. **Iterative Search Space Optimization**: + - Graph narrows documents → Vector refines chunks + - Context enrichment fixes weak embeddings (IDs, dates) + +3. **Graph as Classifier, Not Answer**: + - Node metadata (doc_id) filters search space + - Actual answers from vector chunks + +**Applicable Pattern for GLAM**: + +```python +# Pattern: Graph-Guided Vector Retrieval + +class GraphGuidedRetriever: + """ + Use KG to narrow search space, then vector for final retrieval. + Fixes weak embeddings for identifiers like GHCID, ISIL codes. + """ + + def retrieve_with_graph_filter( + self, + query: str, + use_graph_context: bool = True + ) -> list[dict]: + """ + 1. Extract entities from query + 2. Graph lookup: Find related GHCIDs + 3. Vector search: Filter by GHCID set + 4. Context enrichment: Add graph metadata + """ + # Step 1: Entity extraction + entities = self.extract_entities(query) + + # Step 2: Graph lookup (SPARQL) + ghcid_set = self.graph_lookup(entities) + + # Step 3: Vector search with filter + if ghcid_set: + vector_results = self.qdrant_search( + query, + filter={"ghcid": {"$in": list(ghcid_set)}} + ) + else: + vector_results = self.qdrant_search(query) + + # Step 4: Context enrichment + enriched = self.enrich_with_graph_context( + vector_results, + ghcid_set + ) + + return enriched + + def enrich_with_graph_context( + self, + results: list[dict], + ghcid_set: set[str] + ) -> list[dict]: + """ + Add graph metadata to vector results. + Helps LLM understand relations between results. + """ + for result in results: + ghcid = result.get("ghcid") + if ghcid: + # Fetch neighbors from Oxigraph + neighbors = self.get_graph_neighbors(ghcid) + result["graph_context"] = neighbors + return results +``` + +**This is close to our current approach!** We already do: +- Entity extraction → SPARQL → Vector fallback +- GHCID-based filtering + +**Enhancement**: Add explicit **graph context enrichment** step. + +--- + +### 6. HGMEM: Hypergraph-Based Memory (arxiv:2512.23959) + +**Core Innovation**: Working memory as evolving hypergraph for multi-step RAG. + +**Key Components**: +- **Hyperedges as Memory Units**: Each memory unit connects multiple facts +- **Memory Operations**: Update, Insert, Merge +- **Adaptive Retrieval**: Local investigation vs. global exploration + +**Applicable Pattern for GLAM**: + +```python +# Pattern: Session-Based Working Memory + +class HypergraphSessionMemory: + """ + Maintain session-level working memory for multi-turn conversations. + Memory evolves through retrieval steps. + """ + + def __init__(self, session_id: str): + self.session_id = session_id + self.memory_hyperedges: list[dict] = [] # Each connects facts + self.explored_ghcids: set[str] = set() + self.unexplored_aspects: list[str] = [] + + def add_memory_unit( + self, + facts: list[dict], + source_query: str + ) -> None: + """ + Create hyperedge connecting related facts from single retrieval. + """ + hyperedge = { + "id": generate_id(), + "facts": facts, + "source_query": source_query, + "timestamp": datetime.now(), + "ghcids": [f.get("ghcid") for f in facts if f.get("ghcid")] + } + self.memory_hyperedges.append(hyperedge) + self.explored_ghcids.update(hyperedge["ghcids"]) + + def merge_related_memories(self) -> None: + """ + Merge hyperedges with overlapping GHCIDs. + Creates higher-order connections. + """ + # Cluster by GHCID overlap + # Merge overlapping hyperedges + pass + + def suggest_exploration(self) -> list[str]: + """ + Identify unexplored aspects based on partial patterns. + E.g., "You asked about archives in Haarlem. + Related: Noord-Holland province has 12 more archives." + """ + # Analyze memory for patterns + # Suggest related but unexplored queries + pass +``` + +**Implementation in Our Stack**: +- Extend **session_manager.py** with hypergraph memory +- Store session memories in **Qdrant** (vector) + **Oxigraph** (structure) +- Add **exploration suggestions** to response + +--- + +### 7. 12 Advanced RAG Types Summary (Turing Post) + +Quick reference for additional patterns: + +| RAG Type | Key Idea | GLAM Applicability | +|----------|----------|-------------------| +| MiA-RAG | High-level summary guides retrieval | Medium (for long docs) | +| QuCo-RAG | Statistical entity flagging | Low (heritage data is clean) | +| HiFi-RAG | Multi-stage filtering | High (already doing) | +| Bidirectional RAG | Write-back to corpus | Medium (for enrichment) | +| TV-RAG | Temporal video alignment | Low (not video-focused) | +| MegaRAG | Multimodal knowledge graphs | Medium (future: photos) | +| Graph-O1 | MCTS graph exploration | Medium (complex reasoning) | +| Hybrid RAG | Multilingual with RRF | High (Dutch/English) | + +--- + +## Recommended Design Patterns + +### Priority 1: Immediate Implementation + +#### Pattern A: Retrieval Verification Layer + +```python +# Add between retrieval and generation in dspy_heritage_rag.py + +class ArgumentVerifier(dspy.Signature): + """ + Verify if retrieved context can answer the query. + Prevents hallucination from insufficient context. + """ + __doc__ = """ + You are a verification assistant. Given a user query and retrieved context, + determine if the context contains sufficient information to answer the query. + + Be strict: If key entities or facts are missing, return can_answer=False. + """ + + query: str = dspy.InputField(desc="User's question") + context: str = dspy.InputField(desc="Retrieved information") + + can_answer: bool = dspy.OutputField(desc="True if context is sufficient") + missing_info: str = dspy.OutputField(desc="What information is missing if any") + confidence: float = dspy.OutputField(desc="Confidence score 0-1") +``` + +**Benefit**: Reduces hallucination, enables retry with expanded retrieval. + +#### Pattern B: Dual-Level Entity Extraction + +```python +# Extend HeritageEntityExtractor in dspy_heritage_rag.py + +class DualLevelEntityExtractor(dspy.Signature): + """ + Extract both entity-level and relation-level keywords from query. + """ + + query: str = dspy.InputField() + + # Low-level: Specific entities + entities: list[str] = dspy.OutputField( + desc="Named entities: institutions, cities, people, identifiers" + ) + + # High-level: Relation/concept descriptions + relations: list[str] = dspy.OutputField( + desc="Relation phrases: 'digitized collections', 'founded before 1900'" + ) + + # Combined search strategy + search_strategy: str = dspy.OutputField( + desc="Recommend: 'entity_first', 'relation_first', or 'parallel'" + ) +``` + +**Benefit**: Enables fuzzy entity matching + semantic relation matching. + +--- + +### Priority 2: Short-Term Enhancements + +#### Pattern C: Community Pre-Computation + +```python +# New module: backend/rag/community_indexer.py + +import leidenalg +import igraph as ig + +class CommunityIndexer: + """ + Pre-compute community clusters from Oxigraph for global queries. + Run periodically (daily/weekly) or on data updates. + """ + + def build_institution_graph(self) -> ig.Graph: + """ + Query Oxigraph for institution-location-type relationships. + Build igraph for community detection. + """ + sparql = """ + SELECT ?s ?p ?o WHERE { + ?s a crm:E39_Actor . + ?s ?p ?o . + FILTER(?p IN (hc:locatedIn, hc:institutionType, hc:partOf)) + } + """ + # Execute and build graph + pass + + def detect_communities(self, graph: ig.Graph) -> dict: + """ + Apply Leiden algorithm for community detection. + Returns mapping: community_id -> [ghcid_list] + """ + partition = leidenalg.find_partition( + graph, + leidenalg.ModularityVertexPartition + ) + return { + str(i): [graph.vs[idx]["ghcid"] for idx in members] + for i, members in enumerate(partition) + } + + def generate_community_summaries( + self, + communities: dict + ) -> list[dict]: + """ + Generate LLM summary for each community. + Store in Qdrant for global search. + """ + summaries = [] + for comm_id, ghcids in communities.items(): + # Fetch metadata for all institutions + institutions = self.fetch_institution_metadata(ghcids) + + # Generate summary with DSPy + summary = self.summarize_community(institutions) + + summaries.append({ + "community_id": comm_id, + "ghcids": ghcids, + "summary": summary, + "institution_count": len(ghcids) + }) + + return summaries +``` + +**Benefit**: Enables answering holistic questions like "What are the main archival themes in the Netherlands?" + +#### Pattern D: Temporal Query Mode + +```python +# Extend SPARQL templates in template_sparql.py + +TEMPORAL_QUERY_TEMPLATES = { + "point_in_time_state": """ + PREFIX hc: + + SELECT ?ghcid ?name ?institutionType ?city WHERE { + ?s hc:ghcid ?ghcid ; + skos:prefLabel ?name ; + hc:institutionType ?institutionType . + OPTIONAL { ?s schema:addressLocality ?city } + + # Temporal filter for point-in-time query + ?s hc:validFrom ?validFrom . + OPTIONAL { ?s hc:validTo ?validTo } + + FILTER(?validFrom <= "{{ query_date }}"^^xsd:date) + FILTER(!BOUND(?validTo) || ?validTo > "{{ query_date }}"^^xsd:date) + } + """, + + "institution_history": """ + PREFIX hc: + + SELECT ?ghcid ?validFrom ?validTo ?changeType ?description WHERE { + ?entry hc:ghcid "{{ ghcid }}" ; + hc:validFrom ?validFrom . + OPTIONAL { ?entry hc:validTo ?validTo } + OPTIONAL { ?entry hc:changeType ?changeType } + OPTIONAL { ?entry hc:changeDescription ?description } + } + ORDER BY ?validFrom + """ +} +``` + +**Benefit**: Answer "What was the structure of Noord-Hollands Archief before the 2001 merger?" + +--- + +### Priority 3: Long-Term Research + +#### Pattern E: Hyperedge Event Modeling + +Model complex heritage events (mergers, custody transfers) as hyperedges using CIDOC-CRM: + +```turtle +# RDF representation of custody transfer hyperedge + +_:transfer_001 a crm:E10_Transfer_of_Custody ; + crm:P28_custody_surrendered_by ; + crm:P29_custody_received_by ; + crm:P30_transferred_custody_of ; + crm:P4_has_time-span _:timespan_001 ; + hc:partOfEvent . + +_:timespan_001 a crm:E52_Time-Span ; + crm:P82a_begin_of_the_begin "2001-01-01"^^xsd:date ; + crm:P82b_end_of_the_end "2001-01-01"^^xsd:date . +``` + +**Benefit**: Rich event modeling for heritage organizational changes. + +#### Pattern F: Session Memory Evolution + +Implement HGMEM-style working memory for multi-turn sessions: + +```python +# Extend session_manager.py + +class EvolvingSessionMemory: + """ + Session memory that builds knowledge over conversation turns. + """ + + def __init__(self, session_id: str): + self.session_id = session_id + self.memory_graph = {} # GHCID -> facts + self.explored_paths = [] + self.unexplored_suggestions = [] + + def update_from_turn( + self, + query: str, + retrieved: list[dict], + response: str + ) -> None: + """ + Update memory based on conversation turn. + Identify new connections between facts. + """ + pass + + def suggest_next_exploration(self) -> list[str]: + """ + Suggest related queries based on memory patterns. + "You explored archives in Haarlem. Related: + Noord-Holland has 12 more archives you might find interesting." + """ + pass +``` + +--- + +## Implementation Roadmap + +### Phase 1: Quick Wins (1-2 weeks) + +| Task | File | Pattern | +|------|------|---------| +| Add ArgumentVerifier | dspy_heritage_rag.py | Pattern A | +| Dual-level extraction | dspy_heritage_rag.py | Pattern B | +| Temporal SPARQL templates | template_sparql.py | Pattern D | +| Graph context enrichment | dspy_heritage_rag.py | TDS Pattern | + +### Phase 2: Infrastructure (2-4 weeks) + +| Task | File | Pattern | +|------|------|---------| +| Community detection | community_indexer.py | Pattern C | +| Community summary storage | Qdrant schema | Pattern C | +| Global search mode | dspy_heritage_rag.py | GraphRAG | +| Enhanced session memory | session_manager.py | Pattern F | + +### Phase 3: Advanced Features (1-2 months) + +| Task | File | Pattern | +|------|------|---------| +| Event hyperedge modeling | Oxigraph schema | Pattern E | +| MCTS graph exploration | graph_explorer.py | Graph-O1 | +| Multi-step memory evolution | session_manager.py | HGMEM | +| Exploration suggestions | dspy_heritage_rag.py | HGMEM | + +--- + +## Anti-Patterns to Avoid + +### 1. Over-Engineering the Graph + +> **Bad**: Try to extract every possible relation into explicit edges. +> **Good**: Use minimal graph structure, infer relations via search. + +From TDS article: "A simple graph structure—even a star graph—can still support complex queries when combined with iterative search-space refinement." + +### 2. Adding New Frameworks + +> **Bad**: Add LangChain, LlamaIndex, Neo4j, etc. +> **Good**: Implement patterns within existing TypeDB/Oxigraph/DSPy stack. + +We already have a working stack. New frameworks add complexity without proportional benefit. + +### 3. Ignoring Vector Search Limitations + +> **Bad**: Rely only on vector similarity for alphanumeric IDs (GHCID, ISIL). +> **Good**: Use graph context to enrich vector queries. + +Alphanumeric identifiers have weak embeddings. Always combine with graph-based filtering. + +### 4. Generating Without Verification + +> **Bad**: Pass retrieved context directly to LLM for answer generation. +> **Good**: Verify context sufficiency before generation; retry if insufficient. + +ROGRAG shows argument checking outperforms result checking (75% vs 72% accuracy). + +### 5. Flat Retrieval for Holistic Questions + +> **Bad**: Answer "What are the main archival themes?" with chunk-level retrieval. +> **Good**: Use community summaries for holistic/global questions. + +Microsoft GraphRAG was specifically designed to solve this: "RAG fails on global questions directed at an entire text corpus." + +--- + +## Conclusion + +Our existing TypeDB-Oxigraph-DSPy architecture is well-positioned to incorporate advanced GraphRAG patterns without adding new frameworks. The key enhancements are: + +1. **Verification Layer**: Prevent hallucination with argument checking +2. **Dual-Level Retrieval**: Combine entity + relation matching +3. **Community Summaries**: Enable global/holistic questions +4. **Temporal Query Mode**: Leverage our existing GHCID history +5. **Graph Context Enrichment**: Fix weak embeddings for identifiers + +These patterns build on our strengths (template SPARQL, semantic caching, ontology grounding) while addressing gaps (global questions, multi-step reasoning, verification). + +--- + +## Temporal Knowledge Graph Patterns + +### Overview + +Temporal Knowledge Graphs (TKGs) extend traditional KGs with time-aware capabilities, enabling queries like: +- "What was the status of this archive in 2001?" +- "Which museums merged between 1990-2010?" +- "How has the collection size changed over time?" + +**GLAM Already Has**: Our `ghcid_history` with `valid_from`/`valid_to` provides basic temporal tracking. These patterns enhance it. + +--- + +### 8.1 STAR-RAG: Time-Aligned Rule Graphs (arXiv:2510.16715) + +**Core Innovation**: Combines temporal reasoning rules with RAG retrieval using time-aligned graph structures. + +**Key Components**: +- **Temporal Rule Extraction**: Identifies temporal patterns in data (e.g., "archives that merged → new GHCID issued") +- **Time-Aligned Subgraphs**: Groups facts by temporal validity +- **Rule-Guided Retrieval**: Uses rules to expand/filter retrieval + +**Applicable Pattern for GLAM**: + +```python +# Pattern: Temporal Rule-Based Query Expansion + +class TemporalRuleEngine: + """ + Apply temporal rules to expand queries with time constraints. + + Example Rules: + - IF merger_event(A, B, date) THEN ghcid_change(A, date) AND ghcid_change(B, date) + - IF founding_date(X) < 1900 THEN historical_institution(X) + - IF valid_to(fact) != NULL THEN superseded_fact(fact) + """ + + TEMPORAL_RULES = [ + { + "name": "merger_implies_ghcid_change", + "antecedent": "?event a hc:MergerEvent ; hc:date ?date", + "consequent": "?event hc:triggersGHCIDChange true" + }, + { + "name": "historical_institution", + "antecedent": "?inst schema:foundingDate ?date . FILTER(?date < '1900-01-01'^^xsd:date)", + "consequent": "?inst hc:historicalPeriod 'pre-1900'" + }, + { + "name": "active_vs_superseded", + "antecedent": "?fact hc:validTo ?endDate . FILTER(BOUND(?endDate))", + "consequent": "?fact hc:status 'superseded'" + } + ] + + def expand_query_with_rules( + self, + base_query: str, + query_date: Optional[datetime] = None + ) -> str: + """ + Expand SPARQL query with temporal rule inferences. + + Args: + base_query: Original SPARQL query + query_date: Point-in-time for temporal filtering + + Returns: + Expanded query with rule-based clauses + """ + # Add temporal validity filter + if query_date: + temporal_filter = f""" + FILTER( + ?validFrom <= "{query_date.isoformat()}"^^xsd:date && + (!BOUND(?validTo) || ?validTo > "{query_date.isoformat()}"^^xsd:date) + ) + """ + # Inject into WHERE clause + base_query = self._inject_filter(base_query, temporal_filter) + + # Apply inference rules + for rule in self.TEMPORAL_RULES: + if self._rule_applies(base_query, rule): + base_query = self._apply_rule(base_query, rule) + + return base_query + + def detect_temporal_intent(self, question: str) -> dict: + """ + Detect temporal aspects of user question. + + Returns: + { + 'has_temporal_constraint': bool, + 'query_date': Optional[datetime], + 'temporal_relation': 'before' | 'after' | 'during' | 'at' | None, + 'event_type': 'founding' | 'merger' | 'closure' | None + } + """ + # Pattern matching for temporal expressions + patterns = { + 'point_in_time': r'(?:in|during|around)\s+(\d{4})', + 'before': r'before\s+(\d{4})', + 'after': r'after\s+(\d{4})|since\s+(\d{4})', + 'range': r'between\s+(\d{4})\s+and\s+(\d{4})', + 'founding': r'founded|established|created|opened', + 'merger': r'merged|combined|joined', + 'closure': r'closed|dissolved|ceased' + } + # Implementation... + pass +``` + +**Integration with template_sparql.py**: + +```python +# Add to TemplateSPARQLPipeline + +TEMPORAL_QUERY_TEMPLATES = { + "point_in_time_state": """ + {{ prefixes }} + + SELECT ?ghcid ?name ?type ?city WHERE { + ?s a crm:E39_Actor ; + hc:ghcid ?ghcid ; + skos:prefLabel ?name ; + hc:institutionType ?type . + OPTIONAL { ?s schema:addressLocality ?city } + + # Temporal validity filter (STAR-RAG pattern) + ?s hc:validFrom ?validFrom . + OPTIONAL { ?s hc:validTo ?validTo } + + FILTER(?validFrom <= "{{ query_date }}"^^xsd:date) + FILTER(!BOUND(?validTo) || ?validTo > "{{ query_date }}"^^xsd:date) + } + ORDER BY ?name + LIMIT {{ limit }} + """, + + "institution_timeline": """ + {{ prefixes }} + + SELECT ?ghcid ?validFrom ?validTo ?changeType ?description WHERE { + ?entry hc:ghcid "{{ ghcid }}" ; + hc:validFrom ?validFrom . + OPTIONAL { ?entry hc:validTo ?validTo } + OPTIONAL { ?entry hc:changeType ?changeType } + OPTIONAL { ?entry hc:changeDescription ?description } + } + ORDER BY ?validFrom + """, + + "events_in_period": """ + {{ prefixes }} + + SELECT ?event ?eventType ?date ?actor1 ?actor2 ?description WHERE { + ?event a hc:OrganizationalChangeEvent ; + hc:eventType ?eventType ; + hc:eventDate ?date . + OPTIONAL { ?event hc:affectedActor ?actor1 } + OPTIONAL { ?event hc:resultingActor ?actor2 } + OPTIONAL { ?event schema:description ?description } + + FILTER(?date >= "{{ start_date }}"^^xsd:date) + FILTER(?date <= "{{ end_date }}"^^xsd:date) + } + ORDER BY ?date + """ +} +``` + +--- + +### 8.2 TimeR4: Retrieve-Rewrite-Retrieve-Rerank (EMNLP 2024) + +**Core Innovation**: Four-stage temporal QA pipeline that iteratively refines queries. + +**Key Stages**: +1. **Retrieve**: Initial retrieval with temporal keywords +2. **Rewrite**: LLM rewrites query to be more temporally precise +3. **Retrieve**: Second retrieval with refined query +4. **Rerank**: Time-aware reranking of results + +**Applicable Pattern for GLAM**: + +```python +# Pattern: TimeR4 Multi-Stage Temporal Retrieval + +class TemporalMultiStageRetriever(dspy.Module): + """ + Four-stage temporal retrieval following TimeR4 pattern. + + Improves recall for temporal queries by iterative refinement. + """ + + def __init__(self): + super().__init__() + + # Stage 2: Query rewriter + self.query_rewriter = dspy.ChainOfThought( + "original_query, initial_results, temporal_context -> refined_query, temporal_constraints" + ) + + # Stage 4: Temporal reranker + self.temporal_reranker = dspy.ChainOfThought( + "query, results, query_date -> ranked_results, temporal_scores" + ) + + def forward( + self, + question: str, + retrieve_fn: Callable[[str], list[dict]], + query_date: Optional[datetime] = None + ) -> Prediction: + """ + Execute TimeR4 pattern. + + Args: + question: User's temporal question + retrieve_fn: Retrieval function (SPARQL or vector) + query_date: Extracted temporal constraint + """ + # STAGE 1: Initial Retrieve + initial_results = retrieve_fn(question) + + if not initial_results: + return Prediction(results=[], stages_used=1) + + # Extract temporal context from initial results + temporal_context = self._extract_temporal_context(initial_results) + + # STAGE 2: Rewrite query for temporal precision + rewritten = self.query_rewriter( + original_query=question, + initial_results=self._summarize_results(initial_results), + temporal_context=temporal_context + ) + + refined_query = rewritten.refined_query + temporal_constraints = rewritten.temporal_constraints + + # STAGE 3: Retrieve with refined query + refined_results = retrieve_fn(refined_query) + + # Merge results (union with dedup) + all_results = self._merge_results(initial_results, refined_results) + + # STAGE 4: Temporal Rerank + if query_date and len(all_results) > 1: + ranked = self.temporal_reranker( + query=question, + results=all_results, + query_date=query_date.isoformat() + ) + final_results = ranked.ranked_results + else: + final_results = all_results + + return Prediction( + results=final_results, + stages_used=4, + refined_query=refined_query, + temporal_constraints=temporal_constraints + ) + + def _extract_temporal_context(self, results: list[dict]) -> str: + """Extract temporal information from initial results.""" + dates = [] + for r in results: + if 'founding_date' in r: + dates.append(f"founded {r['founding_date']}") + if 'valid_from' in r: + dates.append(f"valid from {r['valid_from']}") + if 'event_date' in r: + dates.append(f"event on {r['event_date']}") + return "; ".join(dates[:10]) +``` + +--- + +### 8.3 T-GRAG: Temporal Conflict Resolution (arXiv:2508.01680) + +**Core Innovation**: Handles conflicting temporal facts gracefully. + +**Key Pattern**: When facts contradict across time periods, T-GRAG: +1. Identifies the conflict +2. Determines temporal validity of each fact +3. Returns the fact valid for the query time +4. Optionally explains the conflict + +**Applicable Pattern for GLAM**: + +```python +# Pattern: Temporal Conflict Detection and Resolution + +class TemporalConflictResolver: + """ + Detect and resolve conflicting facts across time periods. + + Common conflicts in heritage data: + - Same GHCID assigned to different institutions (after merger) + - Institution name changed but old name still in some records + - Location changed (relocation event) + - Classification changed (museum → archive) + """ + + CONFLICT_TYPES = [ + "name_change", # Institution renamed + "location_change", # Institution relocated + "type_change", # Classification changed + "ghcid_succession", # GHCID reused after closure + "data_superseded" # Newer data overrides older + ] + + def detect_conflicts( + self, + ghcid: str, + facts: list[dict] + ) -> list[dict]: + """ + Detect temporal conflicts in facts about an institution. + + Returns list of conflict descriptions. + """ + conflicts = [] + + # Group facts by property + by_property = defaultdict(list) + for fact in facts: + by_property[fact['property']].append(fact) + + # Check each property for conflicts + for prop, prop_facts in by_property.items(): + if len(prop_facts) > 1: + # Check for overlapping validity periods + for i, fact1 in enumerate(prop_facts): + for fact2 in prop_facts[i+1:]: + if self._periods_overlap(fact1, fact2): + if fact1['value'] != fact2['value']: + conflicts.append({ + 'type': self._classify_conflict(prop), + 'property': prop, + 'fact1': fact1, + 'fact2': fact2, + 'resolution_needed': True + }) + + return conflicts + + def resolve_for_date( + self, + conflicts: list[dict], + query_date: datetime + ) -> dict: + """ + Resolve conflicts for a specific query date. + + Returns the authoritative fact for each conflicting property. + """ + resolutions = {} + + for conflict in conflicts: + # Find fact valid at query_date + for fact in [conflict['fact1'], conflict['fact2']]: + valid_from = self._parse_date(fact.get('valid_from')) + valid_to = self._parse_date(fact.get('valid_to')) + + if valid_from <= query_date: + if valid_to is None or valid_to > query_date: + resolutions[conflict['property']] = { + 'value': fact['value'], + 'source': fact, + 'conflict_type': conflict['type'], + 'note': f"Resolved for date {query_date.isoformat()}" + } + break + + return resolutions + + def generate_conflict_explanation( + self, + conflict: dict, + language: str = "nl" + ) -> str: + """ + Generate human-readable explanation of conflict. + + For the RAG answer generation step. + """ + templates = { + "name_change": { + "nl": "Let op: deze instelling heette '{old}' tot {date}, daarna '{new}'.", + "en": "Note: this institution was named '{old}' until {date}, then '{new}'." + }, + "location_change": { + "nl": "Deze instelling is verhuisd van {old} naar {new} op {date}.", + "en": "This institution relocated from {old} to {new} on {date}." + }, + "ghcid_succession": { + "nl": "De GHCID {ghcid} was eerder toegekend aan {old}, nu aan {new}.", + "en": "GHCID {ghcid} was previously assigned to {old}, now to {new}." + } + } + + # Format template with conflict details + template = templates.get(conflict['type'], {}).get(language, "") + return template.format(**self._extract_template_vars(conflict)) +``` + +**Integration with GHCID History**: + +```python +# Extend GHCIDHistoryEntry handling + +def query_ghcid_at_date( + ghcid: str, + query_date: datetime, + oxigraph_client: OxigraphClient +) -> dict: + """ + Query GHCID state at a specific point in time. + + Uses ghcid_history to find the valid record. + """ + sparql = f""" + PREFIX hc: + + SELECT ?name ?type ?city ?validFrom ?validTo ?changeReason WHERE {{ + ?entry hc:ghcid "{ghcid}" ; + skos:prefLabel ?name ; + hc:institutionType ?type ; + hc:validFrom ?validFrom . + OPTIONAL {{ ?entry schema:addressLocality ?city }} + OPTIONAL {{ ?entry hc:validTo ?validTo }} + OPTIONAL {{ ?entry hc:changeReason ?changeReason }} + + FILTER(?validFrom <= "{query_date.isoformat()}"^^xsd:date) + FILTER(!BOUND(?validTo) || ?validTo > "{query_date.isoformat()}"^^xsd:date) + }} + """ + + return oxigraph_client.query(sparql) +``` + +--- + +### 8.4 DyG-RAG: Dynamic Event Units (Emerging Pattern) + +**Core Innovation**: Models events as first-class temporal entities with "Dynamic Event Units" (DEUs). + +**Key Concepts**: +- **DEU**: Self-contained event with participants, time, location, and outcome +- **Temporal Anchors**: Points connecting DEUs to timeline +- **Event Chains**: Sequences of related DEUs + +**Applicable Pattern for GLAM**: + +```python +# Pattern: Dynamic Event Units for Heritage Change Events + +@dataclass +class DynamicEventUnit: + """ + First-class event representation following DyG-RAG pattern. + + Maps directly to CIDOC-CRM E5_Event and LinkML ChangeEvent. + """ + event_id: str + event_type: str # MERGER, FOUNDING, CLOSURE, RELOCATION, etc. + + # Temporal anchors + start_date: datetime + end_date: Optional[datetime] = None + + # Participants + actors: list[str] # GHCIDs of involved institutions + collections: list[str] = field(default_factory=list) # Affected collections + + # Outcomes + resulting_actors: list[str] = field(default_factory=list) + ghcid_changes: list[dict] = field(default_factory=list) + + # Provenance + source_document: Optional[str] = None + confidence: float = 1.0 + + def to_sparql_insert(self) -> str: + """Generate SPARQL INSERT for this DEU.""" + return f""" + PREFIX hc: + PREFIX crm: + + INSERT DATA {{ + <{self.event_id}> a crm:E5_Event, hc:OrganizationalChangeEvent ; + hc:eventType "{self.event_type}" ; + crm:P4_has_time-span [ + crm:P82a_begin_of_the_begin "{self.start_date.isoformat()}"^^xsd:date + {f'; crm:P82b_end_of_the_end "{self.end_date.isoformat()}"^^xsd:date' if self.end_date else ''} + ] ; + hc:confidence {self.confidence} . + + # Link actors + {self._actor_triples()} + + # Link outcomes + {self._outcome_triples()} + }} + """ + + +class DynamicEventRAG: + """ + RAG system using Dynamic Event Units for temporal reasoning. + """ + + def retrieve_events_for_query( + self, + question: str, + time_range: tuple[datetime, datetime] + ) -> list[DynamicEventUnit]: + """ + Retrieve relevant events for temporal question. + + Uses both SPARQL (structured) and vector (semantic) retrieval. + """ + # SPARQL: Get events in time range + sparql_events = self._sparql_event_query(time_range) + + # Vector: Semantic match on event descriptions + vector_events = self._vector_event_search(question) + + # Merge and deduplicate + all_events = self._merge_events(sparql_events, vector_events) + + # Build event chains + chains = self._identify_event_chains(all_events) + + return all_events, chains + + def _identify_event_chains( + self, + events: list[DynamicEventUnit] + ) -> list[list[DynamicEventUnit]]: + """ + Identify chains of related events. + + E.g., FOUNDING → MERGER → NAME_CHANGE → RELOCATION + """ + # Group by affected actors + by_actor = defaultdict(list) + for event in events: + for actor in event.actors + event.resulting_actors: + by_actor[actor].append(event) + + # Build chains ordered by time + chains = [] + for actor, actor_events in by_actor.items(): + if len(actor_events) > 1: + chain = sorted(actor_events, key=lambda e: e.start_date) + chains.append(chain) + + return chains +``` + +--- + +### 8.5 Mapping Temporal Patterns to GLAM Stack + +| Pattern | GLAM Component | Implementation Location | +|---------|----------------|------------------------| +| Temporal Rule Engine | template_sparql.py | New `TemporalRuleEngine` class | +| TimeR4 Multi-Stage | dspy_heritage_rag.py | Extend `MultiHopHeritageRetriever` | +| Conflict Resolution | schema_loader.py | New `TemporalConflictResolver` | +| Dynamic Event Units | Oxigraph + LinkML | New `DynamicEventUnit` dataclass | +| Point-in-Time Query | template_sparql.py | New SPARQL templates | +| Event Chain Detection | dspy_heritage_rag.py | New `EventChainAnalyzer` module | + +**Priority Integration**: + +```python +# Add to HeritageQueryRouter in dspy_heritage_rag.py + +def _detect_temporal_query(self, question: str) -> Optional[dict]: + """ + Detect if query has temporal dimension. + + Returns temporal context if found. + """ + temporal_patterns = { + 'point_in_time': r'(?:in|during|around|before|after)\s+(\d{4})', + 'date_range': r'(?:between|from)\s+(\d{4})\s+(?:and|to)\s+(\d{4})', + 'event_reference': r'(?:when|after|before)\s+(?:the\s+)?(?:merger|founding|closure)', + 'historical': r'(?:historical|originally|formerly|used to be)', + } + + for pattern_type, regex in temporal_patterns.items(): + match = re.search(regex, question.lower()) + if match: + return { + 'type': pattern_type, + 'match': match.group(0), + 'year': match.group(1) if match.groups() else None, + } + + return None +``` + +--- + +## Semantic Routing Patterns + +### Overview + +Semantic routing enables intelligent query dispatch to specialized backends based on query intent, entity types, and semantic similarity. This is critical for GLAM where queries may target: +- **Institutions** (museums, archives, libraries) → Oxigraph SPARQL + Qdrant `heritage_custodians` +- **People** (staff, curators, archivists) → Qdrant `heritage_persons` +- **Collections** → Oxigraph + future Qdrant collection +- **Locations** → PostGIS (future) + Oxigraph +- **Historical events** → Temporal query subsystem + +**GLAM Already Has**: `HeritageQueryRouter` with intent classification and `FykeFilter` for relevance. These patterns enhance routing precision. + +--- + +### 9.1 vLLM Semantic Router: Signal-Decision Architecture + +**Core Innovation**: Separates routing into two phases: +1. **Signal Extraction**: Extract semantic signals from query (intent, entities, domain) +2. **Decision Making**: Map signals to backend routes using rules + ML + +**Key Insight from vLLM Semantic Router v0.1 Iris**: +> "Routing should be a classifier problem, not an LLM generation problem." + +**Applicable Pattern for GLAM**: + +```python +# Pattern: Signal-Decision Semantic Router + +from dataclasses import dataclass +from typing import Literal, Optional +import numpy as np + +@dataclass +class QuerySignals: + """Semantic signals extracted from query.""" + # Primary signals + intent: Literal["geographic", "statistical", "relational", "temporal", + "entity_lookup", "comparative", "exploration"] + entity_type: Literal["person", "institution", "collection", "location", "event", "mixed"] + + # Secondary signals + language: str + has_temporal_constraint: bool + has_geographic_constraint: bool + requires_aggregation: bool + + # Extracted entities + institution_mentions: list[str] + person_mentions: list[str] + location_mentions: list[str] + + # Confidence + signal_confidence: float + + +class SemanticSignalExtractor: + """ + Phase 1: Extract semantic signals from query. + + Uses lightweight models (embeddings + rules) NOT LLM calls. + This is the "signal" phase - fast and deterministic. + """ + + def __init__(self): + # Intent classifier: trained on heritage query examples + self.intent_embeddings = self._load_intent_embeddings() + + # Entity extractors: pattern-based + NER + self.institution_patterns = self._compile_institution_patterns() + self.person_indicators = ["curator", "archivist", "director", "medewerker", + "who works", "wie werkt", "staff", "personeel"] + + def extract_signals(self, query: str) -> QuerySignals: + """ + Extract all semantic signals from query. + + This is a FAST operation - no LLM calls. + """ + query_lower = query.lower() + + # Intent classification via embedding similarity + query_embedding = self._embed_query(query) + intent = self._classify_intent(query_embedding) + + # Entity type detection + entity_type = self._detect_entity_type(query_lower) + + # Constraint detection + has_temporal = self._has_temporal_pattern(query_lower) + has_geographic = self._has_geographic_pattern(query_lower) + requires_aggregation = self._requires_aggregation(query_lower) + + # Entity extraction + institutions = self._extract_institutions(query) + persons = self._extract_persons(query) + locations = self._extract_locations(query) + + return QuerySignals( + intent=intent, + entity_type=entity_type, + language=self._detect_language(query), + has_temporal_constraint=has_temporal, + has_geographic_constraint=has_geographic, + requires_aggregation=requires_aggregation, + institution_mentions=institutions, + person_mentions=persons, + location_mentions=locations, + signal_confidence=0.85 # Based on extraction quality + ) + + def _classify_intent(self, query_embedding: np.ndarray) -> str: + """ + Classify intent via cosine similarity to intent exemplars. + + No LLM needed - pure embedding comparison. + """ + similarities = {} + for intent, exemplar_embeddings in self.intent_embeddings.items(): + # Average similarity to exemplars + sims = np.dot(exemplar_embeddings, query_embedding) + similarities[intent] = float(np.mean(sims)) + + return max(similarities, key=similarities.get) + + def _detect_entity_type(self, query_lower: str) -> str: + """Detect primary entity type in query.""" + person_score = sum(1 for p in self.person_indicators if p in query_lower) + institution_score = sum(1 for p in ["museum", "archief", "bibliotheek", + "archive", "library", "instelling"] + if p in query_lower) + + if person_score > 0 and institution_score > 0: + return "mixed" + elif person_score > 0: + return "person" + elif institution_score > 0: + return "institution" + else: + return "institution" # Default + + +class SemanticDecisionRouter: + """ + Phase 2: Route query to backends based on signals. + + This is the "decision" phase - applies routing rules. + """ + + # Routing rules: signal patterns → backend configuration + ROUTING_RULES = [ + # Person queries + { + "condition": lambda s: s.entity_type == "person", + "primary_backend": "qdrant_persons", + "secondary_backend": "sparql_persons", + "collection": "heritage_persons", + }, + # Institution + temporal + { + "condition": lambda s: s.entity_type == "institution" and s.has_temporal_constraint, + "primary_backend": "sparql_temporal", + "secondary_backend": "qdrant_custodians", + "use_temporal_templates": True, + }, + # Institution + geographic + { + "condition": lambda s: s.entity_type == "institution" and s.has_geographic_constraint, + "primary_backend": "sparql_geo", + "secondary_backend": "qdrant_custodians", + }, + # Institution + aggregation (statistical) + { + "condition": lambda s: s.entity_type == "institution" and s.requires_aggregation, + "primary_backend": "ducklake", + "secondary_backend": "sparql", + }, + # Default institution query + { + "condition": lambda s: s.entity_type == "institution", + "primary_backend": "qdrant_custodians", + "secondary_backend": "sparql", + }, + ] + + def route(self, signals: QuerySignals) -> dict: + """ + Apply routing rules to determine backends. + + Returns routing configuration. + """ + for rule in self.ROUTING_RULES: + if rule["condition"](signals): + return { + "primary": rule["primary_backend"], + "secondary": rule.get("secondary_backend"), + "collection": rule.get("collection"), + "use_temporal": rule.get("use_temporal_templates", False), + "signals": signals, + } + + # Fallback + return { + "primary": "qdrant_custodians", + "secondary": "sparql", + "signals": signals, + } +``` + +--- + +### 9.2 Integration with Existing FykeFilter and TemplateClassifier + +**Current GLAM Pipeline**: +``` +Query → ConversationContextResolver → FykeFilter → TemplateClassifier → SlotExtractor → SPARQL +``` + +**Enhanced Pipeline with Semantic Routing**: +``` +Query → ConversationContextResolver → FykeFilter → SemanticSignalExtractor + ↓ + SemanticDecisionRouter + ↓ + ┌─────────────────┼─────────────────┐ + ↓ ↓ ↓ + TemplateClassifier PersonRetriever DuckLakeQuery + ↓ ↓ ↓ + SPARQL Qdrant SQL +``` + +**Implementation in dspy_heritage_rag.py**: + +```python +# Extend HeritageQueryRouter with semantic routing + +class EnhancedHeritageQueryRouter(dspy.Module): + """ + Enhanced router with Signal-Decision architecture. + + Uses lightweight signal extraction before LLM classification. + Falls back to LLM only when signals are ambiguous. + """ + + def __init__(self, use_schema_aware: Optional[bool] = None, fast_lm: Optional[dspy.LM] = None): + super().__init__() + + # Lightweight signal extraction (no LLM) + self.signal_extractor = SemanticSignalExtractor() + self.decision_router = SemanticDecisionRouter() + + # LLM fallback for ambiguous cases + self.fast_lm = fast_lm + if use_schema_aware is None: + use_schema_aware = SCHEMA_LOADER_AVAILABLE + + if use_schema_aware: + signature = get_schema_aware_query_intent_signature() + else: + signature = HeritageQueryIntent + + self.llm_classifier = dspy.ChainOfThought(signature) + + def forward(self, question: str, language: str = "nl", history: History = None) -> Prediction: + """ + Route query using Signal-Decision pattern. + + 1. Extract signals (fast, no LLM) + 2. If high confidence → route directly + 3. If low confidence → use LLM classification + """ + # Phase 1: Signal extraction + signals = self.signal_extractor.extract_signals(question) + + # Phase 2: Decision routing + if signals.signal_confidence >= 0.8: + # High confidence - route without LLM + route_config = self.decision_router.route(signals) + + return Prediction( + intent=signals.intent, + entity_type=signals.entity_type, + entities=signals.institution_mentions + signals.person_mentions, + sources=self._config_to_sources(route_config), + resolved_question=question, + routing_method="signal_based", + route_config=route_config, + ) + + # Low confidence - fall back to LLM + if history is None: + history = History(messages=[]) + + if self.fast_lm: + with dspy.settings.context(lm=self.fast_lm): + result = self.llm_classifier(question=question, language=language, history=history) + else: + result = self.llm_classifier(question=question, language=language, history=history) + + # Merge LLM result with signal-based routing + signals.intent = result.intent + signals.entity_type = result.entity_type + route_config = self.decision_router.route(signals) + + return Prediction( + intent=result.intent, + entity_type=result.entity_type, + entities=result.entities, + sources=self._config_to_sources(route_config), + resolved_question=result.resolved_question, + reasoning=result.reasoning, + routing_method="llm_enhanced", + route_config=route_config, + ) +``` + +--- + +### 9.3 Multi-Index Routing with Qdrant + +**Pattern**: Route to different Qdrant collections based on entity type. + +```python +# Pattern: Multi-Collection Qdrant Router + +class QdrantMultiIndexRouter: + """ + Route queries to appropriate Qdrant collections. + + Collections: + - heritage_custodians: Museums, archives, libraries, etc. + - heritage_persons: Staff, curators, archivists, etc. + - heritage_collections: (Future) Collection-level data + - heritage_events: (Future) Organizational change events + """ + + COLLECTION_CONFIGS = { + "heritage_custodians": { + "entity_types": ["institution"], + "payload_filters": ["institution_type", "country_code", "region_code"], + "embedding_field": "description_embedding", + }, + "heritage_persons": { + "entity_types": ["person"], + "payload_filters": ["custodian_slug", "role_category", "institution_type"], + "embedding_field": "profile_embedding", + }, + } + + def __init__(self, qdrant_client: QdrantClient): + self.client = qdrant_client + + def search( + self, + query: str, + route_config: dict, + limit: int = 10 + ) -> list[dict]: + """ + Search appropriate collection(s) based on routing. + """ + primary = route_config.get("primary", "qdrant_custodians") + + # Map route to collection + if "persons" in primary: + collection = "heritage_persons" + elif "custodians" in primary: + collection = "heritage_custodians" + else: + collection = "heritage_custodians" + + # Build filters from signals + signals = route_config.get("signals") + filters = self._build_filters(signals, collection) + + # Execute search + results = self.client.search( + collection_name=collection, + query_vector=self._embed_query(query), + query_filter=filters, + limit=limit, + ) + + return [self._format_result(r) for r in results] + + def _build_filters(self, signals: QuerySignals, collection: str) -> Optional[Filter]: + """ + Build Qdrant filter from query signals. + """ + if signals is None: + return None + + conditions = [] + + # Filter by institution type if mentioned + if signals.institution_mentions and collection == "heritage_custodians": + # Extract institution type from mentions + inst_type = self._infer_institution_type(signals.institution_mentions) + if inst_type: + conditions.append( + FieldCondition(key="institution_type", match=MatchValue(value=inst_type)) + ) + + # Filter persons by custodian if institution mentioned + if signals.institution_mentions and collection == "heritage_persons": + slug = self._institution_to_slug(signals.institution_mentions[0]) + if slug: + conditions.append( + FieldCondition(key="custodian_slug", match=MatchValue(value=slug)) + ) + + # Filter by location if geographic constraint + if signals.has_geographic_constraint and signals.location_mentions: + loc = signals.location_mentions[0] + conditions.append( + FieldCondition(key="city", match=MatchText(text=loc)) + ) + + if conditions: + return Filter(must=conditions) + return None +``` + +--- + +### 9.4 Intent Detection with Semantic Similarity + +**Pattern**: Use embedding similarity for intent classification without LLM. + +```python +# Pattern: Embedding-Based Intent Classifier + +class EmbeddingIntentClassifier: + """ + Classify query intent using semantic similarity to exemplars. + + Faster than LLM, good for common query patterns. + """ + + # Intent exemplars (in Dutch and English) + INTENT_EXEMPLARS = { + "geographic": [ + "Welke musea zijn er in Amsterdam?", + "Which archives are located in Noord-Holland?", + "Toon me bibliotheken in Utrecht", + "Museums near Rotterdam", + ], + "statistical": [ + "Hoeveel archieven zijn er in Nederland?", + "How many museums have a rating above 4?", + "Count libraries by province", + "Verdeling van instellingen per type", + ], + "entity_lookup": [ + "Wat is het Rijksmuseum?", + "Tell me about Nationaal Archief", + "Informatie over de KB", + "Details of Stadsarchief Amsterdam", + ], + "temporal": [ + "Welke musea zijn opgericht voor 1900?", + "Archives that merged in 2001", + "History of Noord-Hollands Archief", + "Oldest libraries in the Netherlands", + ], + "relational": [ + "Welke archieven zijn onderdeel van KVAN?", + "Museums connected to Rijksmuseum", + "Archives that share collections", + "Networks of heritage institutions", + ], + } + + def __init__(self): + self._exemplar_embeddings = None + self._model = None + + def _ensure_loaded(self): + if self._exemplar_embeddings is not None: + return + + from sentence_transformers import SentenceTransformer + self._model = SentenceTransformer("paraphrase-multilingual-MiniLM-L12-v2") + + # Pre-compute exemplar embeddings + self._exemplar_embeddings = {} + for intent, exemplars in self.INTENT_EXEMPLARS.items(): + embeddings = self._model.encode(exemplars, convert_to_numpy=True) + self._exemplar_embeddings[intent] = embeddings + + def classify(self, query: str) -> tuple[str, float]: + """ + Classify intent and return (intent, confidence). + """ + self._ensure_loaded() + + query_embedding = self._model.encode([query], convert_to_numpy=True)[0] + + intent_scores = {} + for intent, embeddings in self._exemplar_embeddings.items(): + # Cosine similarity + norms = np.linalg.norm(embeddings, axis=1) * np.linalg.norm(query_embedding) + similarities = np.dot(embeddings, query_embedding) / norms + intent_scores[intent] = float(np.max(similarities)) + + best_intent = max(intent_scores, key=intent_scores.get) + confidence = intent_scores[best_intent] + + return best_intent, confidence +``` + +--- + +### 9.5 Mapping Routing Patterns to GLAM Stack + +| Pattern | GLAM Component | Implementation | +|---------|----------------|----------------| +| Signal Extraction | dspy_heritage_rag.py | `SemanticSignalExtractor` class | +| Decision Routing | dspy_heritage_rag.py | `SemanticDecisionRouter` class | +| Multi-Index Qdrant | dspy_heritage_rag.py | `QdrantMultiIndexRouter` class | +| Intent Embedding | template_sparql.py | `EmbeddingIntentClassifier` class | +| Person Query Route | dspy_heritage_rag.py | Route to `heritage_persons` collection | +| Temporal Query Route | template_sparql.py | Use temporal SPARQL templates | + +**Integration Priority**: + +1. **Immediate**: Add `entity_type` routing to distinguish person vs institution queries +2. **Short-term**: Implement embedding-based intent classification as pre-filter +3. **Medium-term**: Add DuckLake routing for statistical queries + +--- + +## Hypergraph Patterns Deep Dive + +### Overview + +Hypergraphs extend traditional graphs by allowing edges (hyperedges) to connect **more than two nodes**. This is powerful for heritage data where: + +- **Custody transfers** involve: source custodian, target custodian, collection, date, legal basis +- **Mergers** involve: multiple source institutions, resulting institution, date, staff transfers +- **Collection accessions** involve: collection, donor, custodian, provenance chain, date range + +**Why Hypergraphs for GLAM?** + +Traditional binary edges force artificial decomposition: +``` +# Binary edges (limited) +NHA --merged_from--> Gemeentearchief_Haarlem +NHA --merged_from--> Rijksarchief_Noord_Holland +NHA --merger_date--> 2001-01-01 # Loses connection to sources! +``` + +Hyperedges capture the full event: +``` +# Hyperedge (complete) +HYPEREDGE:Merger_2001 { + type: MERGER + sources: [Gemeentearchief_Haarlem, Rijksarchief_Noord_Holland] + result: Noord_Hollands_Archief + date: 2001-01-01 + staff_transferred: 45 + collections_merged: [Municipal_Records, Provincial_Archives] +} +``` + +**GLAM Already Has**: Organizational change events in LinkML schema (`ChangeEvent`, `CustodianTimelineEvent`). Hypergraph patterns enhance retrieval for these complex events. + +--- + +### 10.1 Hyperedge Construction from CIDOC-CRM Events + +**Pattern**: Map heritage change events to hyperedges using CIDOC-CRM event classes. + +```python +# Pattern: Hyperedge Construction Pipeline + +from dataclasses import dataclass, field +from typing import Literal, Optional +from datetime import datetime +import hashlib + +@dataclass +class Hyperedge: + """ + A hyperedge connecting multiple entities through an event. + + Maps to CIDOC-CRM event classes: + - crm:E10_Transfer_of_Custody + - crm:E8_Acquisition_Event + - crm:E66_Formation (founding) + - crm:E68_Dissolution (closure) + - crm:E9_Move (relocation) + """ + hyperedge_id: str + event_type: Literal["custody_transfer", "merger", "founding", "closure", + "relocation", "name_change", "acquisition"] + + # Connected entities (the hyperedge connects ALL of these) + source_custodians: list[str] # GHCID URIs + target_custodians: list[str] # GHCID URIs + collections: list[str] # Collection URIs + locations: list[str] # Location URIs + people: list[str] # Person URIs (staff involved) + + # Temporal bounds + event_date: datetime + event_end_date: Optional[datetime] = None # For processes + + # Metadata + description: str = "" + confidence: float = 1.0 + provenance: str = "" + + # Vector embedding for semantic search + embedding: Optional[list[float]] = None + + @property + def all_connected_entities(self) -> list[str]: + """All entities connected by this hyperedge.""" + return ( + self.source_custodians + + self.target_custodians + + self.collections + + self.locations + + self.people + ) + + @property + def entity_count(self) -> int: + """Number of entities connected (hyperedge cardinality).""" + return len(self.all_connected_entities) + + +class HyperedgeConstructor: + """ + Construct hyperedges from heritage change events. + + Sources: + - CustodianTimelineEvent YAML files + - ChangeEvent entries in custodian YAML + - SPARQL query results from Oxigraph + """ + + # CIDOC-CRM event type mapping + EVENT_TYPE_MAPPING = { + "FOUNDING": ("crm:E66_Formation", "founding"), + "CLOSURE": ("crm:E68_Dissolution", "closure"), + "MERGER": ("crm:E10_Transfer_of_Custody", "merger"), + "ACQUISITION": ("crm:E8_Acquisition_Event", "acquisition"), + "RELOCATION": ("crm:E9_Move", "relocation"), + "CUSTODY_TRANSFER": ("crm:E10_Transfer_of_Custody", "custody_transfer"), + "NAME_CHANGE": ("crm:E13_Attribute_Assignment", "name_change"), + } + + def construct_from_change_event( + self, + event: dict, + custodian: dict + ) -> Hyperedge: + """ + Construct hyperedge from a ChangeEvent entry. + + Args: + event: ChangeEvent dict from custodian YAML + custodian: Parent custodian dict + + Returns: + Hyperedge connecting all entities involved + """ + change_type = event.get("change_type", "UNKNOWN") + crm_class, event_type = self.EVENT_TYPE_MAPPING.get( + change_type, ("crm:E5_Event", "unknown") + ) + + # Generate stable hyperedge ID + hyperedge_id = self._generate_hyperedge_id(event, custodian) + + # Extract connected entities + source_custodians = [] + target_custodians = [] + + if change_type == "MERGER": + # Sources: predecessor institutions + source_custodians = event.get("predecessor_custodians", []) + # Target: resulting institution + target_custodians = [custodian.get("ghcid", {}).get("ghcid_current")] + elif change_type == "FOUNDING": + # Target: newly founded institution + target_custodians = [custodian.get("ghcid", {}).get("ghcid_current")] + elif change_type == "CLOSURE": + # Source: closed institution + source_custodians = [custodian.get("ghcid", {}).get("ghcid_current")] + elif change_type == "CUSTODY_TRANSFER": + source_custodians = [event.get("source_custodian")] + target_custodians = [event.get("target_custodian")] + + # Extract collections involved + collections = event.get("collections_affected", []) + + # Extract locations + locations = [] + if change_type == "RELOCATION": + locations = [ + event.get("from_location"), + event.get("to_location"), + ] + + # Extract people involved + people = event.get("staff_involved", []) + + # Parse event date + event_date = self._parse_date(event.get("event_date")) + + return Hyperedge( + hyperedge_id=hyperedge_id, + event_type=event_type, + source_custodians=[s for s in source_custodians if s], + target_custodians=[t for t in target_custodians if t], + collections=[c for c in collections if c], + locations=[l for l in locations if l], + people=[p for p in people if p], + event_date=event_date, + description=event.get("event_description", ""), + confidence=event.get("confidence_score", 1.0), + provenance=event.get("source_documentation", ""), + ) + + def _generate_hyperedge_id(self, event: dict, custodian: dict) -> str: + """Generate stable hyperedge ID from event content.""" + content = f"{custodian.get('ghcid', {}).get('ghcid_current', '')}" + content += f":{event.get('change_type', '')}" + content += f":{event.get('event_date', '')}" + + hash_digest = hashlib.sha256(content.encode()).hexdigest()[:16] + return f"hyperedge:{hash_digest}" + + def _parse_date(self, date_str: str) -> datetime: + """Parse date string to datetime.""" + if not date_str: + return datetime.now() + try: + return datetime.fromisoformat(date_str.replace("Z", "+00:00")) + except ValueError: + # Handle partial dates like "2001" or "2001-01" + parts = date_str.split("-") + if len(parts) == 1: + return datetime(int(parts[0]), 1, 1) + elif len(parts) == 2: + return datetime(int(parts[0]), int(parts[1]), 1) + return datetime.now() +``` + +--- + +### 10.2 Hyperedge Retrieval with Two-Stage Scoring + +**Pattern**: Retrieve hyperedges using entity overlap + semantic similarity. + +```python +# Pattern: Hyperedge Retrieval + +class HyperedgeRetriever: + """ + Two-stage hyperedge retrieval: + + Stage 1: Entity Overlap + Find hyperedges containing query entities (exact match) + + Stage 2: Semantic Similarity + Rank by embedding similarity to query + + This combines precision (entity overlap) with recall (semantic search). + """ + + def __init__(self, hyperedge_store: list[Hyperedge]): + self.hyperedges = hyperedge_store + self._entity_index = self._build_entity_index() + + def _build_entity_index(self) -> dict[str, set[str]]: + """ + Build inverted index: entity URI → hyperedge IDs. + """ + index = {} + for he in self.hyperedges: + for entity in he.all_connected_entities: + if entity not in index: + index[entity] = set() + index[entity].add(he.hyperedge_id) + return index + + def retrieve( + self, + query: str, + query_entities: list[str], + query_embedding: list[float], + top_k: int = 5, + entity_weight: float = 0.6, + semantic_weight: float = 0.4, + ) -> list[tuple[Hyperedge, float]]: + """ + Retrieve top-k hyperedges by combined scoring. + + Args: + query: Natural language query + query_entities: Extracted entity URIs from query + query_embedding: Query embedding vector + top_k: Number of results + entity_weight: Weight for entity overlap score + semantic_weight: Weight for semantic similarity + + Returns: + List of (hyperedge, score) tuples + """ + scores = {} + + # Stage 1: Entity overlap scoring + for entity in query_entities: + if entity in self._entity_index: + for he_id in self._entity_index[entity]: + if he_id not in scores: + scores[he_id] = {"entity": 0, "semantic": 0} + scores[he_id]["entity"] += 1 + + # Normalize entity scores + if query_entities: + for he_id in scores: + scores[he_id]["entity"] /= len(query_entities) + + # Stage 2: Semantic similarity + import numpy as np + query_vec = np.array(query_embedding) + + for he in self.hyperedges: + if he.embedding is None: + continue + + he_vec = np.array(he.embedding) + + # Cosine similarity + similarity = float(np.dot(query_vec, he_vec) / + (np.linalg.norm(query_vec) * np.linalg.norm(he_vec))) + + if he.hyperedge_id not in scores: + scores[he.hyperedge_id] = {"entity": 0, "semantic": 0} + scores[he.hyperedge_id]["semantic"] = similarity + + # Combined scoring + final_scores = [] + he_by_id = {he.hyperedge_id: he for he in self.hyperedges} + + for he_id, score_dict in scores.items(): + combined = ( + entity_weight * score_dict["entity"] + + semantic_weight * score_dict["semantic"] + ) + final_scores.append((he_by_id[he_id], combined)) + + # Sort and return top-k + final_scores.sort(key=lambda x: x[1], reverse=True) + return final_scores[:top_k] + + def retrieve_by_type( + self, + event_type: str, + date_range: Optional[tuple[datetime, datetime]] = None, + top_k: int = 10, + ) -> list[Hyperedge]: + """ + Retrieve hyperedges by event type and optional date range. + + Useful for questions like: + - "What mergers happened in 2001?" + - "Show all custody transfers after 2010" + """ + results = [ + he for he in self.hyperedges + if he.event_type == event_type + ] + + if date_range: + start, end = date_range + results = [ + he for he in results + if start <= he.event_date <= end + ] + + return results[:top_k] +``` + +--- + +### 10.3 CIDOC-CRM RDF Serialization for Oxigraph + +**Pattern**: Serialize hyperedges to CIDOC-CRM RDF for SPARQL querying. + +```python +# Pattern: Hyperedge to CIDOC-CRM RDF + +from rdflib import Graph, Namespace, URIRef, Literal, BNode +from rdflib.namespace import RDF, RDFS, XSD + +CRM = Namespace("http://www.cidoc-crm.org/cidoc-crm/") +GLAM = Namespace("https://w3id.org/heritage/custodian/") + + +class HyperedgeRDFSerializer: + """ + Serialize hyperedges to CIDOC-CRM RDF triples. + + Maps hyperedge components to CIDOC-CRM: + - Hyperedge → crm:E5_Event (or specific subclass) + - source_custodians → crm:P11_had_participant + - target_custodians → crm:P14_carried_out_by + - collections → crm:P12_occurred_in_the_presence_of + - locations → crm:P7_took_place_at + - event_date → crm:P4_has_time-span + """ + + # Event type to CRM class mapping + CRM_EVENT_CLASSES = { + "custody_transfer": CRM["E10_Transfer_of_Custody"], + "merger": CRM["E10_Transfer_of_Custody"], + "founding": CRM["E66_Formation"], + "closure": CRM["E68_Dissolution"], + "relocation": CRM["E9_Move"], + "acquisition": CRM["E8_Acquisition_Event"], + "name_change": CRM["E13_Attribute_Assignment"], + } + + def serialize(self, hyperedge: Hyperedge) -> Graph: + """ + Serialize a single hyperedge to RDF graph. + """ + g = Graph() + g.bind("crm", CRM) + g.bind("glam", GLAM) + + # Event URI + event_uri = URIRef(f"{GLAM}{hyperedge.hyperedge_id}") + + # Event type + crm_class = self.CRM_EVENT_CLASSES.get( + hyperedge.event_type, + CRM["E5_Event"] + ) + g.add((event_uri, RDF.type, crm_class)) + + # Description + if hyperedge.description: + g.add((event_uri, RDFS.label, Literal(hyperedge.description))) + + # Time-span + timespan = BNode() + g.add((event_uri, CRM["P4_has_time-span"], timespan)) + g.add((timespan, RDF.type, CRM["E52_Time-Span"])) + g.add((timespan, CRM["P82a_begin_of_the_begin"], + Literal(hyperedge.event_date.isoformat(), datatype=XSD.dateTime))) + if hyperedge.event_end_date: + g.add((timespan, CRM["P82b_end_of_the_end"], + Literal(hyperedge.event_end_date.isoformat(), datatype=XSD.dateTime))) + + # Source custodians (participants - "from") + for custodian in hyperedge.source_custodians: + custodian_uri = URIRef(f"{GLAM}{custodian}") + g.add((event_uri, CRM["P11_had_participant"], custodian_uri)) + # Mark as source with custom predicate + g.add((event_uri, GLAM["source_custodian"], custodian_uri)) + + # Target custodians (carried out by - "to") + for custodian in hyperedge.target_custodians: + custodian_uri = URIRef(f"{GLAM}{custodian}") + g.add((event_uri, CRM["P14_carried_out_by"], custodian_uri)) + g.add((event_uri, GLAM["target_custodian"], custodian_uri)) + + # Collections involved + for collection in hyperedge.collections: + collection_uri = URIRef(f"{GLAM}collection/{collection}") + g.add((event_uri, CRM["P12_occurred_in_the_presence_of"], collection_uri)) + + # Locations + for location in hyperedge.locations: + location_uri = URIRef(f"{GLAM}location/{location}") + g.add((event_uri, CRM["P7_took_place_at"], location_uri)) + + # People involved + for person in hyperedge.people: + person_uri = URIRef(f"{GLAM}person/{person}") + g.add((event_uri, CRM["P11_had_participant"], person_uri)) + + # Provenance + if hyperedge.provenance: + g.add((event_uri, CRM["P70i_is_documented_in"], + URIRef(hyperedge.provenance))) + + return g + + def serialize_all(self, hyperedges: list[Hyperedge]) -> Graph: + """Serialize all hyperedges to a single graph.""" + combined = Graph() + combined.bind("crm", CRM) + combined.bind("glam", GLAM) + + for he in hyperedges: + for triple in self.serialize(he): + combined.add(triple) + + return combined +``` + +--- + +### 10.4 SPARQL Templates for Hyperedge Queries + +**Pattern**: Query hyperedges via SPARQL on Oxigraph. + +```python +# Pattern: Hyperedge SPARQL Templates + +HYPEREDGE_SPARQL_TEMPLATES = { + "mergers_in_year": """ + PREFIX crm: + PREFIX glam: + PREFIX xsd: + + SELECT ?event ?description ?source ?target ?date + WHERE {{ + ?event a crm:E10_Transfer_of_Custody ; + rdfs:label ?description ; + crm:P4_has_time-span ?timespan ; + glam:source_custodian ?source ; + glam:target_custodian ?target . + + ?timespan crm:P82a_begin_of_the_begin ?date . + + FILTER(YEAR(?date) = {year}) + }} + ORDER BY ?date + """, + + "custody_transfers_for_custodian": """ + PREFIX crm: + PREFIX glam: + + SELECT ?event ?description ?counterparty ?role ?date + WHERE {{ + {{ + ?event a crm:E10_Transfer_of_Custody ; + rdfs:label ?description ; + crm:P4_has_time-span/crm:P82a_begin_of_the_begin ?date ; + glam:source_custodian <{custodian_uri}> ; + glam:target_custodian ?counterparty . + BIND("source" AS ?role) + }} + UNION + {{ + ?event a crm:E10_Transfer_of_Custody ; + rdfs:label ?description ; + crm:P4_has_time-span/crm:P82a_begin_of_the_begin ?date ; + glam:target_custodian <{custodian_uri}> ; + glam:source_custodian ?counterparty . + BIND("target" AS ?role) + }} + }} + ORDER BY ?date + """, + + "events_in_location": """ + PREFIX crm: + PREFIX glam: + + SELECT ?event ?type ?description ?date + WHERE {{ + ?event crm:P7_took_place_at <{location_uri}> ; + a ?type ; + rdfs:label ?description ; + crm:P4_has_time-span/crm:P82a_begin_of_the_begin ?date . + + FILTER(?type IN ( + crm:E10_Transfer_of_Custody, + crm:E66_Formation, + crm:E68_Dissolution, + crm:E9_Move + )) + }} + ORDER BY DESC(?date) + """, + + "founding_events_before_year": """ + PREFIX crm: + PREFIX glam: + PREFIX xsd: + + SELECT ?event ?custodian ?custodian_label ?date + WHERE {{ + ?event a crm:E66_Formation ; + crm:P4_has_time-span/crm:P82a_begin_of_the_begin ?date ; + crm:P14_carried_out_by ?custodian . + + ?custodian rdfs:label ?custodian_label . + + FILTER(YEAR(?date) < {year}) + }} + ORDER BY ?date + """, + + "collections_transferred_in_event": """ + PREFIX crm: + PREFIX glam: + + SELECT ?collection ?collection_label + WHERE {{ + <{event_uri}> crm:P12_occurred_in_the_presence_of ?collection . + + OPTIONAL {{ ?collection rdfs:label ?collection_label }} + }} + """, +} + + +class HyperedgeSPARQLExecutor: + """ + Execute hyperedge SPARQL queries against Oxigraph. + """ + + def __init__(self, oxigraph_endpoint: str = "http://localhost:7878/query"): + self.endpoint = oxigraph_endpoint + + def query_mergers_in_year(self, year: int) -> list[dict]: + """Find all merger events in a given year.""" + query = HYPEREDGE_SPARQL_TEMPLATES["mergers_in_year"].format(year=year) + return self._execute(query) + + def query_custody_transfers(self, custodian_ghcid: str) -> list[dict]: + """Find all custody transfers involving a custodian.""" + custodian_uri = f"https://w3id.org/heritage/custodian/{custodian_ghcid}" + query = HYPEREDGE_SPARQL_TEMPLATES["custody_transfers_for_custodian"].format( + custodian_uri=custodian_uri + ) + return self._execute(query) + + def query_events_in_location(self, location_code: str) -> list[dict]: + """Find all heritage events at a location.""" + location_uri = f"https://w3id.org/heritage/custodian/location/{location_code}" + query = HYPEREDGE_SPARQL_TEMPLATES["events_in_location"].format( + location_uri=location_uri + ) + return self._execute(query) + + def _execute(self, query: str) -> list[dict]: + """Execute SPARQL query and return results.""" + import httpx + + response = httpx.post( + self.endpoint, + data=query, + headers={ + "Content-Type": "application/sparql-query", + "Accept": "application/json", + }, + ) + response.raise_for_status() + + data = response.json() + results = [] + for binding in data.get("results", {}).get("bindings", []): + row = {} + for key, value in binding.items(): + row[key] = value.get("value") + results.append(row) + + return results +``` + +--- + +### 10.5 Integration with DSPy Heritage RAG + +**Pattern**: Integrate hyperedge retrieval into the existing DSPy pipeline. + +```python +# Pattern: Hyperedge-Enhanced RAG Module + +class HyperedgeEnhancedRetriever(dspy.Module): + """ + DSPy module that incorporates hyperedge retrieval for complex queries. + + Use when query involves: + - Organizational change events (mergers, closures) + - Custody transfers + - Multi-entity relationships + """ + + def __init__( + self, + hyperedge_retriever: HyperedgeRetriever, + sparql_executor: HyperedgeSPARQLExecutor, + entity_extractor: dspy.Module, + ): + super().__init__() + self.hyperedge_retriever = hyperedge_retriever + self.sparql_executor = sparql_executor + self.entity_extractor = entity_extractor + + # Synthesizer for combining hyperedge data with other context + self.synthesize = dspy.ChainOfThought(HyperedgeContextSynthesis) + + def forward( + self, + question: str, + query_embedding: list[float], + language: str = "nl", + ) -> dspy.Prediction: + """ + Retrieve relevant hyperedges and synthesize context. + """ + # Extract entities from question + entities = self.entity_extractor(question=question) + entity_uris = self._entities_to_uris(entities) + + # Detect if this is a hyperedge-relevant query + event_type = self._detect_event_type(question) + + if event_type: + # Query SPARQL for specific event types + sparql_results = self._query_by_event_type(event_type, question) + else: + sparql_results = [] + + # Retrieve hyperedges by entity overlap + semantic similarity + hyperedge_results = self.hyperedge_retriever.retrieve( + query=question, + query_entities=entity_uris, + query_embedding=query_embedding, + top_k=5, + ) + + # Synthesize into context + context = self._format_hyperedge_context(hyperedge_results, sparql_results) + + return dspy.Prediction( + hyperedge_context=context, + retrieved_hyperedges=[he for he, _ in hyperedge_results], + sparql_results=sparql_results, + ) + + def _detect_event_type(self, question: str) -> Optional[str]: + """Detect if query is about a specific event type.""" + question_lower = question.lower() + + patterns = { + "merger": ["merger", "merged", "fusie", "gefuseerd", "samengevoegd"], + "founding": ["founded", "established", "opgericht", "gesticht", "founded when"], + "closure": ["closed", "dissolved", "gesloten", "opgeheven"], + "relocation": ["moved", "relocated", "verhuisd", "verplaatst"], + } + + for event_type, keywords in patterns.items(): + if any(kw in question_lower for kw in keywords): + return event_type + + return None + + def _query_by_event_type(self, event_type: str, question: str) -> list[dict]: + """Query SPARQL based on event type.""" + import re + + # Extract year if mentioned + year_match = re.search(r"\b(19|20)\d{2}\b", question) + + if event_type == "merger" and year_match: + return self.sparql_executor.query_mergers_in_year(int(year_match.group())) + elif event_type == "founding" and year_match: + # Use "before year" template for "oldest" queries + if "oldest" in question.lower() or "oudste" in question.lower(): + return self.sparql_executor._execute( + HYPEREDGE_SPARQL_TEMPLATES["founding_events_before_year"].format( + year=int(year_match.group()) + ) + ) + + return [] + + def _format_hyperedge_context( + self, + hyperedges: list[tuple[Hyperedge, float]], + sparql_results: list[dict], + ) -> str: + """Format hyperedge results into context string.""" + parts = [] + + for he, score in hyperedges: + part = f"**{he.event_type.replace('_', ' ').title()}** ({he.event_date.year}):\n" + part += f" {he.description}\n" + + if he.source_custodians: + part += f" From: {', '.join(he.source_custodians)}\n" + if he.target_custodians: + part += f" To: {', '.join(he.target_custodians)}\n" + if he.collections: + part += f" Collections: {', '.join(he.collections)}\n" + + parts.append(part) + + if sparql_results: + parts.append("\n**Additional SPARQL Results:**\n") + for result in sparql_results[:5]: + parts.append(f" - {result}\n") + + return "\n".join(parts) + + +class HyperedgeContextSynthesis(dspy.Signature): + """Synthesize hyperedge context for answer generation.""" + + question: str = dspy.InputField(desc="User's question") + hyperedge_context: str = dspy.InputField(desc="Retrieved hyperedge context") + language: str = dspy.InputField(desc="Response language") + + synthesis: str = dspy.OutputField(desc="Synthesized context highlighting key relationships") +``` + +--- + +### 10.6 Mapping Hypergraph Patterns to GLAM Stack + +| Pattern | GLAM Component | Implementation | +|---------|----------------|----------------| +| Hyperedge Construction | Data enrichment pipeline | `HyperedgeConstructor` class | +| Two-Stage Retrieval | dspy_heritage_rag.py | `HyperedgeRetriever` class | +| CIDOC-CRM Serialization | RDF export pipeline | `HyperedgeRDFSerializer` class | +| SPARQL Templates | template_sparql.py | Add `HYPEREDGE_SPARQL_TEMPLATES` | +| DSPy Integration | dspy_heritage_rag.py | `HyperedgeEnhancedRetriever` module | + +**Key Implementation Decisions**: + +1. **No New Database**: Store hyperedges as RDF in existing Oxigraph instance +2. **Reuse Embeddings**: Use same embedding model as custodian descriptions +3. **Extend SPARQL**: Add hyperedge templates to existing template system +4. **DSPy Module**: Create as optional module activated for event queries + +**Data Flow**: + +``` +Change Events (YAML) + ↓ +HyperedgeConstructor → Hyperedge objects + ↓ + ├── HyperedgeRDFSerializer → Oxigraph (SPARQL) + │ + └── Embedding → Qdrant (future: hyperedge collection) + +Query + ↓ +Event Type Detection + ↓ + ├── SPARQL Templates → Oxigraph results + │ + └── Hyperedge Retrieval → Semantic + Entity overlap + ↓ +Synthesized Context → LLM → Answer +``` + +--- + +## 11. Rules on Graphs Pattern (SHACL + Datalog Inference) + +**Sources**: +- Velitchkov, I. (2025). "Rules on Graphs in Graphs of Rules, Part 1." Link & Think +- Pareti et al. (2019). "SHACL Constraints with Inference Rules." ISWC 2019 +- W3C SHACL Advanced Features Working Group (2025). Datalog Rules Proposal #348 + +**Core Insight**: Inference rules should be **stored as nodes IN the knowledge graph**, not hardcoded in application code. This provides: + +1. **Inspectability**: Rules are queryable/auditable via SPARQL +2. **Governance**: Rule provenance tracked alongside data provenance +3. **Decoupling**: Domain logic separated from application code +4. **Interoperability**: Standard formats (SHACL, Datalog) enable rule sharing + +--- + +### 11.1 Problem Statement + +Traditional RAG systems hardcode inference logic in Python/application code: + +```python +# ❌ BAD: Logic buried in application code +def get_parent_institution(ghcid: str) -> Optional[str]: + """Logic for finding parent org is embedded in code.""" + if ghcid.startswith("NL-") and is_regional_archive(ghcid): + return find_provincial_government(ghcid) + # ... more hardcoded rules +``` + +This creates problems: +- Rules invisible to users and auditors +- Rule changes require code deployments +- No provenance for derived facts +- Inconsistent rule application across systems + +--- + +### 11.2 Rules as Graph Nodes Pattern + +Store inference rules as first-class graph entities: + +```turtle +# SHACL Rule stored in Oxigraph +heritage:ParentInstitutionRule + a sh:NodeShape, heritage:InferenceRule ; + sh:targetClass heritage:Archive ; + sh:rule [ + a sh:TripleRule ; + sh:subject sh:this ; + sh:predicate heritage:hasParentOrganization ; + sh:object [ + sh:path ( heritage:locatedIn heritage:governingBody ) + ] ; + ] ; + # Rule metadata for governance + heritage:rulePriority 100 ; + heritage:ruleCategory "organizational_hierarchy" ; + prov:wasGeneratedBy heritage:DomainExpertExtraction ; + prov:generatedAtTime "2025-01-06T12:00:00Z" ; + rdfs:comment "Infer parent organization from location governance."@en . +``` + +**Benefits**: +- Rule is queryable: `SELECT ?rule WHERE { ?rule a heritage:InferenceRule }` +- Rule provenance tracked with PROV-O +- Rule can be versioned, deprecated, or overridden +- Multiple systems can consume the same rule definition + +--- + +### 11.3 Datalog Rules for Knowledge Graphs + +Datalog provides declarative inference with recursion support. Key patterns for heritage domain: + +```datalog +# Pattern 1: Transitive Closure (organizational hierarchy) +ancestor(?X, ?Z) :- parent(?X, ?Z). +ancestor(?X, ?Z) :- parent(?X, ?Y), ancestor(?Y, ?Z). + +# Pattern 2: Derived Classification (heritage type inference) +museum_archive(?X) :- + institution_type(?X, "MUSEUM"), + has_collection(?X, ?C), + collection_type(?C, "archival"). + +# Pattern 3: Temporal Validity (valid at point in time) +valid_at(?Entity, ?Date) :- + valid_from(?Entity, ?Start), + valid_to(?Entity, ?End), + ?Start <= ?Date, + ?Date <= ?End. + +# Pattern 4: Shortcut Predicates (query optimization) +# Instead of traversing: institution → location → region → country +in_country(?Institution, ?Country) :- + located_in(?Institution, ?Location), + admin_region(?Location, ?Region), + country(?Region, ?Country). +``` + +**Why Datalog over SPARQL Property Paths**: +- SPARQL property paths don't support complex recursion +- Datalog rules are **materialized** (precomputed), making queries instant +- Rules separate "what" from "how" (declarative vs. procedural) + +--- + +### 11.4 GLAM Implementation: TypeDB Rules + Oxigraph SHACL + +Our stack has **two inference engines** that can host rules: + +| Component | Rule Language | Strengths | Use Case | +|-----------|--------------|-----------|----------| +| **TypeDB** | TypeQL Rules | Native reasoning, transitive closure | Complex inference, hierarchy traversal | +| **Oxigraph** | SHACL-AF | W3C standard, RDF-native | Validation, simple derivation | + +**Hybrid Approach**: + +``` + ┌─────────────────────────────────────┐ + │ Rule Repository │ + │ (Rules stored as RDF in Oxigraph) │ + └─────────────────────────────────────┘ + ↓ Query rules ↓ + ┌─────────────────────┴─────────────────────┐ + ↓ ↓ +┌───────────────────┐ ┌───────────────────┐ +│ Oxigraph │ │ TypeDB │ +│ SHACL-AF Rules │ │ TypeQL Rules │ +│ │ │ │ +│ • Validation │ │ • Transitive │ +│ • Simple derive │ │ closure │ +│ • sh:TripleRule │ │ • Complex joins │ +│ │ │ • Recursive │ +└───────────────────┘ └───────────────────┘ + ↓ ↓ + └───────────────────┬───────────────────────┘ + ↓ + ┌───────────────┐ + │ DSPy RAG │ + │ Query Engine │ + └───────────────┘ +``` + +--- + +### 11.5 TypeDB Rules for Heritage Domain + +TypeDB rules (TypeQL) are particularly powerful for heritage inference: + +```typeql +# Rule: Infer parent-child organizational relationships +rule heritage-parent-child-inference: + when { + $child isa heritage-custodian, has ghcid $child_id; + $parent isa heritage-custodian, has ghcid $parent_id; + $event isa change-event, has event-type "ACQUISITION"; + ($event, acquiring: $parent, acquired: $child); + } then { + (parent: $parent, child: $child) isa organizational-hierarchy; + }; + +# Rule: Infer collection custody from organizational mergers +rule custody-transfer-from-merger: + when { + $source isa heritage-custodian; + $target isa heritage-custodian; + $collection isa collection; + ($source, custodian-of: $collection); + $event isa change-event, has event-type "MERGER"; + ($event, absorbed: $source, absorbing: $target); + $event has event-date $date; + } then { + ($target, custodian-of: $collection) isa custody-relation, + has custody-start-date $date; + }; + +# Rule: Regional archives inherit provincial governance +rule regional-archive-governance: + when { + $archive isa heritage-custodian, has institution-type "ARCHIVE"; + $location isa location, has region-code $region; + ($archive, located-in: $location); + $gov isa government-body, has jurisdiction $region; + } then { + (governed-by: $gov, governed-entity: $archive) isa governance-relation; + }; +``` + +**Advantages of TypeDB Rules**: +- Automatically materialized (precomputed) +- Recursive reasoning built-in +- Rules trigger on data changes +- Explanation support (why was this inferred?) + +--- + +### 11.6 SHACL Rules for Oxigraph + +SHACL Advanced Features (SHACL-AF) provides rule support: + +```turtle +@prefix sh: . +@prefix heritage: . + +# SHACL Rule: Derive institution display name from components +heritage:DisplayNameRule + a sh:NodeShape ; + sh:targetClass heritage:HeritageCustodian ; + sh:rule [ + a sh:SPARQLRule ; + sh:construct """ + CONSTRUCT { + $this heritage:displayName ?displayName . + } + WHERE { + $this heritage:name ?name . + $this heritage:locatedIn/heritage:city ?city . + BIND(CONCAT(?name, " (", ?city, ")") AS ?displayName) + } + """ + ] . + +# SHACL Rule: Flag custodians with data quality issues +heritage:DataQualityRule + a sh:NodeShape ; + sh:targetClass heritage:HeritageCustodian ; + sh:rule [ + a sh:SPARQLRule ; + sh:construct """ + CONSTRUCT { + $this heritage:hasDataQualityIssue heritage:MissingLocation . + } + WHERE { + $this a heritage:HeritageCustodian . + FILTER NOT EXISTS { $this heritage:locatedIn ?loc } + } + """ + ] . +``` + +--- + +### 11.7 Rule-Based RAG Enhancement + +Rules can improve RAG retrieval and generation: + +**Pattern A: Rule-Guided Query Expansion** + +```python +class RuleGuidedQueryExpander: + """Expand queries using inference rules stored in graph.""" + + def __init__(self, oxigraph_client: OxigraphClient): + self.client = oxigraph_client + self._load_expansion_rules() + + def _load_expansion_rules(self): + """Load query expansion rules from graph.""" + query = """ + PREFIX heritage: + SELECT ?rule ?pattern ?expansion WHERE { + ?rule a heritage:QueryExpansionRule ; + heritage:matchPattern ?pattern ; + heritage:expandTo ?expansion . + } + """ + self.rules = self.client.query(query) + + def expand(self, query: str) -> list[str]: + """Apply rules to expand query terms.""" + expansions = [query] + for rule in self.rules: + if rule['pattern'] in query.lower(): + expanded = query.replace( + rule['pattern'], + rule['expansion'] + ) + expansions.append(expanded) + return expansions +``` + +**Pattern B: Rule-Derived Facts in Context** + +```python +class RuleDerivedContextEnricher: + """Add inferred facts to RAG context.""" + + def enrich_context( + self, + entities: list[str], + context: str + ) -> str: + """Add rule-derived facts about entities.""" + derived_facts = [] + + for entity_ghcid in entities: + # Query TypeDB for inferred relations + inferred = self.typedb_client.query(f""" + match + $e isa heritage-custodian, has ghcid "{entity_ghcid}"; + $rel ($e, $other); + $rel isa! $rel_type; # Only inferred relations + get $rel_type, $other; + """) + + for fact in inferred: + derived_facts.append( + f"[Inferred] {entity_ghcid} {fact['rel_type']} {fact['other']}" + ) + + if derived_facts: + context += "\n\n**Inferred relationships:**\n" + context += "\n".join(derived_facts) + + return context +``` + +--- + +### 11.8 Rule Governance and Provenance + +Store rule metadata for auditability: + +```yaml +# Rule definition with full provenance (stored in Oxigraph) +rule_definition: + id: heritage:CustodyInferenceRule_v1 + type: TypeQLRule + version: "1.0.0" + status: active # active | deprecated | testing + + # Rule content + when_clause: | + $source isa heritage-custodian; + $event isa change-event, has event-type "MERGER"; + ... + then_clause: | + ($target, custodian-of: $collection) isa custody-relation; + + # Governance metadata + created_by: "domain-expert-curator" + created_date: "2025-01-06T12:00:00Z" + approved_by: "heritage-governance-committee" + approval_date: "2025-01-07T09:00:00Z" + + # Semantic metadata + domain: organizational_change + entities_affected: + - heritage:HeritageCustodian + - heritage:Collection + related_properties: + - heritage:custodianOf + - heritage:changeEvent + + # Documentation + description: | + When a heritage custodian is absorbed through merger, + custody of their collections transfers to the absorbing institution. + rationale: | + Per Dutch heritage law, organizational mergers transfer custody + unless explicitly reassigned. + example_trigger: | + Noord-Hollands Archief merger in 2001 from Gemeentearchief Haarlem + and Rijksarchief Noord-Holland. +``` + +--- + +### 11.9 Integration with DSPy Heritage RAG + +Add rule-awareness to the existing pipeline: + +```python +# backend/rag/rule_aware_retriever.py + +from dataclasses import dataclass +from typing import Optional + +@dataclass +class InferredFact: + """A fact derived by rule inference.""" + subject: str + predicate: str + object: str + rule_id: str + confidence: float = 1.0 # Rules produce certain facts + +class RuleAwareRetriever: + """Retriever that includes rule-inferred facts.""" + + def __init__( + self, + typedb_client, + oxigraph_client, + include_inferred: bool = True + ): + self.typedb = typedb_client + self.oxigraph = oxigraph_client + self.include_inferred = include_inferred + + def retrieve( + self, + query: str, + entities: list[str] + ) -> tuple[list[dict], list[InferredFact]]: + """Retrieve both stored and inferred facts.""" + # Standard retrieval + stored_facts = self._retrieve_stored(query, entities) + + # Rule-based inference (if enabled) + inferred_facts = [] + if self.include_inferred: + inferred_facts = self._retrieve_inferred(entities) + + return stored_facts, inferred_facts + + def _retrieve_inferred( + self, + entities: list[str] + ) -> list[InferredFact]: + """Get inferred facts from TypeDB reasoning.""" + inferred = [] + for ghcid in entities: + # TypeDB query with inference enabled + results = self.typedb.query(f""" + match + $e isa heritage-custodian, has ghcid "{ghcid}"; + $rel ($e, $other); + get $rel, $other; + """, inference=True) + + for r in results: + if r.get('inferred', False): + inferred.append(InferredFact( + subject=ghcid, + predicate=r['relation_type'], + object=r['other_entity'], + rule_id=r.get('rule_id', 'unknown') + )) + + return inferred +``` + +--- + +### 11.10 Key Takeaways for GLAM + +| Principle | Implementation | +|-----------|----------------| +| **Rules as data** | Store SHACL/TypeQL rules in Oxigraph as RDF | +| **Rule provenance** | Track rule creator, approver, version with PROV-O | +| **Dual inference** | TypeDB for complex reasoning, SHACL for validation | +| **Query optimization** | Precompute shortcut predicates via rules | +| **RAG enhancement** | Include inferred facts in retrieval context | +| **Governance** | Rules queryable, auditable, versionable | + +**Anti-Patterns to Avoid**: +- ❌ Hardcoding inference logic in Python +- ❌ Duplicating rules across TypeDB and application code +- ❌ No provenance for derived facts +- ❌ Rules that can't be inspected by domain experts + +--- + +## Updated References + +1. Edge et al. (2024). "From Local to Global: A Graph RAG Approach to Query-Focused Summarization." arXiv:2404.16130 +2. Wang et al. (2025). "ROGRAG: A Robustly Optimized GraphRAG Framework." arXiv:2503.06474 +3. Rasmussen et al. (2025). "Zep: A Temporal Knowledge Graph Architecture for Agent Memory." arXiv:2501.13956 +4. Luo et al. (2025). "HyperGraphRAG: Retrieval-Augmented Generation via Hypergraph-Structured Knowledge Representation." arXiv:2503.21322 (NeurIPS 2025) +5. Zhou et al. (2025). "Improving Multi-step RAG with Hypergraph-based Memory for Long-Context Complex Relational Modeling." arXiv:2512.23959 +6. Sarkar (2025). "GraphRAG in Practice: How to Build Cost-Efficient, High-Recall Retrieval Systems." Towards Data Science +7. Turing Post (2026). "12 New Advanced Types of RAG." +8. Ding et al. (2025). "STAR-RAG: Time-Aligned Rule Graphs for Temporal Reasoning." arXiv:2510.16715 +9. Chen et al. (2024). "TimeR4: Time-Aware Retrieve-Rewrite-Retrieve-Rerank for Temporal QA." EMNLP 2024 +10. Wang et al. (2025). "T-GRAG: Temporal Graph RAG with Conflict Resolution." arXiv:2508.01680 +11. vLLM Project (2025). "Semantic Router v0.1 Iris: Signal-Decision Architecture." +12. Aurelio Labs (2025). "semantic-router: Superfast Decision-Making Layer for LLMs." +13. CIDOC-CRM Special Interest Group (2024). "CIDOC Conceptual Reference Model v7.1.3." ICOM. +14. Doerr, M. et al. (2023). "Mapping Cultural Heritage Events to CIDOC-CRM." Museum & Web 2023. +15. Klyne, G. et al. (2024). "Hypergraph Patterns for Cultural Heritage Knowledge Graphs." Digital Humanities Quarterly. +16. DSPy Framework (2024). "Declarative Self-Improving Language Programs." Stanford NLP. +17. Pinecone (2024). "Vector Database Best Practices for RAG." Technical Blog. +18. LightRAG (2024). "Simple and Fast Retrieval-Augmented Generation." GitHub Repository. +19. Velitchkov, I. (2025). "Rules on Graphs in Graphs of Rules, Part 1." Link & Think (Substack). +20. Pareti, P. et al. (2019). "SHACL Constraints with Inference Rules." ISWC 2019. arXiv:1911.00598 +21. W3C SHACL Working Group (2025). "Use case: Datalog rules." GitHub Issue #348, w3c/data-shapes. +22. Han, H. et al. (2025). "Retrieval-Augmented Generation with Graphs (GraphRAG)." arXiv:2501.00309 +23. SurrealDB (2025). "Automating Knowledge Graphs with SurrealDB and Gemini." Technical Blog. diff --git a/docs/plan/external_design_patterns/02_comparison_matrix.md b/docs/plan/external_design_patterns/02_comparison_matrix.md new file mode 100644 index 0000000000..80a8e5ec35 --- /dev/null +++ b/docs/plan/external_design_patterns/02_comparison_matrix.md @@ -0,0 +1,91 @@ +# GraphRAG Pattern Comparison Matrix + +**Purpose**: Quick reference comparing our current implementation against external patterns. + +## Comparison Matrix + +| Capability | Our Current State | Microsoft GraphRAG | ROGRAG | Zep | HyperGraphRAG | LightRAG | +|------------|-------------------|-------------------|--------|-----|---------------|----------| +| **Vector Search** | Qdrant | Azure Cognitive | Faiss | Custom | Sentence-BERT | Faiss | +| **Knowledge Graph** | Oxigraph (RDF) + TypeDB | LanceDB | TuGraph | Neo4j | Custom hypergraph | Neo4j | +| **LLM Orchestration** | DSPy | Azure OpenAI | Qwen | OpenAI | GPT-4o | Various | +| **Community Detection** | Not implemented | Leiden algorithm | None | Dynamic clustering | None | Louvain | +| **Temporal Modeling** | GHCID history | Not built-in | None | Bitemporal (T, T') | None | None | +| **Multi-hop Retrieval** | SPARQL traversal | Graph expansion | Logic form | BFS | Hyperedge walk | Graph paths | +| **Verification Layer** | Not implemented | Claim extraction | Argument checking | None | None | None | +| **N-ary Relations** | CIDOC-CRM events | Binary only | Binary only | Binary only | Hyperedges | Binary only | +| **Cost Optimization** | Semantic caching | Community summaries | Minimal graph | Caching | None | Simple graph | + +## Gap Analysis + +### What We Have (Strengths) + +| Feature | Description | Files | +|---------|-------------|-------| +| Template SPARQL | 65% precision vs 10% LLM-only | `template_sparql.py` | +| Semantic caching | Redis-backed, reduces LLM calls | `semantic_cache.py` | +| Cost tracking | Token/latency monitoring | `cost_tracker.py` | +| Ontology grounding | LinkML schema validation | `schema_loader.py` | +| Temporal tracking | GHCID history with valid_from/to | LinkML schema | +| Multi-hop SPARQL | Graph traversal via SPARQL | `dspy_heritage_rag.py` | +| Entity extraction | Heritage-specific NER | DSPy signatures | + +### What We're Missing (Gaps) + +| Gap | Priority | Implementation Effort | Benefit | +|-----|----------|----------------------|---------| +| Retrieval verification | High | Low (DSPy signature) | Reduces hallucination | +| Community summaries | High | Medium (Leiden + indexing) | Enables global questions | +| Dual-level extraction | High | Low (DSPy signature) | Better entity+relation matching | +| Graph context enrichment | Medium | Low (extend retrieval) | Fixes weak embeddings | +| Exploration suggestions | Medium | Medium (session memory) | Improves user experience | +| Hypergraph memory | Low | High (new architecture) | Multi-step reasoning | + +## Implementation Priority + +``` +Priority 1 (This Sprint) +├── Retrieval Verification Layer +│ └── ArgumentVerifier DSPy signature +├── Dual-Level Entity Extraction +│ └── Extend HeritageEntityExtractor +└── Temporal SPARQL Templates + └── Point-in-time query mode + +Priority 2 (Next Sprint) +├── Community Detection Pipeline +│ └── Leiden algorithm on institution graph +├── Community Summary Indexing +│ └── Store in Qdrant with embeddings +└── Global Search Mode + └── Search summaries for holistic queries + +Priority 3 (Backlog) +├── Session Memory Evolution +│ └── HGMEM-style working memory +├── CIDOC-CRM Event Hyperedges +│ └── Rich custody transfer modeling +└── Exploration Suggestions + └── Suggest related queries +``` + +## Quick Reference: Pattern Mapping + +| External Pattern | Our Implementation Approach | +|-----------------|----------------------------| +| GraphRAG communities | Pre-compute Leiden clusters in Oxigraph, store summaries in Qdrant | +| ROGRAG dual-level | DSPy signature: entities (low) + relations (high) | +| ROGRAG verification | DSPy signature: ArgumentVerifier before generation | +| Zep bitemporal | Already have via GHCID history (extend SPARQL templates) | +| HyperGraphRAG hyperedges | CIDOC-CRM events (crm:E10_Transfer_of_Custody) | +| LightRAG simple graph | We use more complete graph, but can adopt "star graph sufficiency" thinking | + +## Files to Modify + +| File | Changes | +|------|---------| +| `dspy_heritage_rag.py` | Add ArgumentVerifier, DualLevelExtractor, global_search mode | +| `template_sparql.py` | Add temporal query templates | +| `session_manager.py` | Add working memory evolution | +| **New**: `community_indexer.py` | Leiden detection, summary generation | +| **New**: `exploration_suggester.py` | Pattern-based query suggestions | diff --git a/docs/plan/external_design_patterns/03_implementation_guide.md b/docs/plan/external_design_patterns/03_implementation_guide.md new file mode 100644 index 0000000000..69b817cddb --- /dev/null +++ b/docs/plan/external_design_patterns/03_implementation_guide.md @@ -0,0 +1,855 @@ +# Implementation Guide: GraphRAG Patterns for GLAM + +**Purpose**: Concrete implementation patterns for integrating external GraphRAG techniques into our TypeDB-Oxigraph-DSPy stack. + +--- + +## Pattern A: Retrieval Verification Layer + +### Rationale +From ROGRAG research: Argument checking (verify context before generation) outperforms result checking (verify after generation) with 75% vs 72% accuracy. + +### Implementation + +Add to `dspy_heritage_rag.py`: + +```python +# ============================================================================= +# RETRIEVAL VERIFICATION (ROGRAG Pattern) +# ============================================================================= + +class ArgumentVerifier(dspy.Signature): + """ + Verify if retrieved context can answer the query before generation. + Prevents hallucination from insufficient context. + + Based on ROGRAG (arxiv:2503.06474) finding that argument checking + outperforms result checking (75% vs 72% accuracy). + """ + __doc__ = """ + You are a verification assistant for heritage institution queries. + + Given a user query and retrieved context, determine if the context + contains sufficient information to answer the query accurately. + + Be strict: + - If key entities (institutions, cities, dates) are mentioned in the query + but not found in the context, return can_answer=False + - If the query asks for counts but context doesn't provide them, return False + - If the query asks about relationships but context only has entity lists, return False + + Examples of INSUFFICIENT context: + - Query: "How many archives are in Haarlem?" / Context: mentions Haarlem archives but no count + - Query: "When was Rijksmuseum founded?" / Context: describes Rijksmuseum but no founding date + + Examples of SUFFICIENT context: + - Query: "What archives are in Haarlem?" / Context: lists 3 specific archives in Haarlem + - Query: "Tell me about the Rijksmuseum" / Context: contains name, location, type, description + """ + + query: str = dspy.InputField(desc="User's original question") + context: str = dspy.InputField(desc="Retrieved information from KG and vector search") + + can_answer: bool = dspy.OutputField( + desc="True if context contains sufficient information to answer accurately" + ) + missing_info: str = dspy.OutputField( + desc="What specific information is missing (empty if can_answer=True)" + ) + confidence: float = dspy.OutputField( + desc="Confidence score 0-1 that context is sufficient" + ) + suggested_refinement: str = dspy.OutputField( + desc="Suggested query refinement if context is insufficient (empty if can_answer=True)" + ) + + +class VerifiedHeritageRAG(dspy.Module): + """ + RAG pipeline with verification layer before answer generation. + """ + + def __init__(self, max_verification_retries: int = 2): + super().__init__() + self.max_retries = max_verification_retries + self.verifier = dspy.ChainOfThought(ArgumentVerifier) + self.retriever = HeritageRetriever() # Existing retriever + self.generator = dspy.ChainOfThought(HeritageAnswerSignature) # Existing generator + + def forward( + self, + query: str, + conversation_history: Optional[list[dict]] = None + ) -> dspy.Prediction: + """ + Retrieve, verify, then generate - with retry on insufficient context. + """ + context = "" + verification_attempts = [] + + for attempt in range(self.max_retries + 1): + # Expand search if this is a retry + expand_search = attempt > 0 + + # Retrieve context + retrieval_result = self.retriever( + query=query, + expand=expand_search, + previous_context=context + ) + context = retrieval_result.context + + # Verify sufficiency + verification = self.verifier(query=query, context=context) + verification_attempts.append({ + "attempt": attempt, + "can_answer": verification.can_answer, + "confidence": verification.confidence, + "missing": verification.missing_info + }) + + if verification.can_answer and verification.confidence >= 0.7: + break + + # Log retry + logger.info( + f"Verification attempt {attempt + 1}/{self.max_retries + 1}: " + f"Insufficient context. Missing: {verification.missing_info}" + ) + + # Generate answer (with caveat if low confidence) + if not verification.can_answer: + context = f"[NOTE: Limited information available]\n\n{context}" + + answer = self.generator(query=query, context=context) + + return dspy.Prediction( + answer=answer.response, + context=context, + verification=verification_attempts[-1], + retries=len(verification_attempts) - 1 + ) +``` + +### Integration Point + +In `dspy_heritage_rag.py`, modify `HeritageRAGModule.forward()` to use verification: + +```python +# Before (current): +# answer = self.generate_answer(query, context) + +# After (with verification): +verification = self.verifier(query=query, context=context) +if not verification.can_answer and verification.confidence < 0.7: + # Expand search and retry + context = self._expand_retrieval(query, context, verification.missing_info) + verification = self.verifier(query=query, context=context) + +answer = self.generate_answer(query, context) +``` + +--- + +## Pattern B: Dual-Level Entity Extraction + +### Rationale +From ROGRAG: Separating low-level (entities) from high-level (relations) enables: +- Low-level: Fuzzy string matching for names, places, IDs +- High-level: Semantic similarity for concepts, relationships + +### Implementation + +Add to `dspy_heritage_rag.py`: + +```python +# ============================================================================= +# DUAL-LEVEL EXTRACTION (ROGRAG Pattern) +# ============================================================================= + +class DualLevelEntityExtractor(dspy.Signature): + """ + Extract both entity-level and relation-level keywords from heritage queries. + + Based on ROGRAG (arxiv:2503.06474) dual-level retrieval method. + Low-level: Named entities for fuzzy graph matching + High-level: Relation descriptions for semantic vector matching + """ + __doc__ = """ + You are a heritage query analyzer. Extract two types of information: + + LOW-LEVEL (Entities): + - Institution names: Rijksmuseum, Nationaal Archief, etc. + - Place names: Amsterdam, Limburg, Noord-Holland + - Person names: Staff, directors, curators + - Identifiers: GHCID, ISIL codes (NL-XXXX) + - Dates: Years, date ranges + + HIGH-LEVEL (Relations/Concepts): + - Collection types: "digitized collections", "medieval manuscripts" + - Institution attributes: "oldest", "largest", "founded before 1900" + - Relationship phrases: "collaborated with", "merged into", "part of" + - Activities: "preserves", "exhibits", "researches" + + Examples: + + Query: "Which archives in Haarlem have digitized medieval manuscripts?" + Entities: ["Haarlem", "archives"] + Relations: ["digitized collections", "medieval manuscripts"] + Strategy: entity_first (narrow by location, then filter by collection type) + + Query: "What museums were founded before 1850 in the Netherlands?" + Entities: ["Netherlands", "museums", "1850"] + Relations: ["founded before", "historical institution"] + Strategy: relation_first (semantic search for founding dates, then verify entities) + + Query: "Tell me about the Rijksmuseum" + Entities: ["Rijksmuseum"] + Relations: ["general information", "institution overview"] + Strategy: entity_first (direct lookup) + """ + + query: str = dspy.InputField(desc="User's heritage question") + + entities: list[str] = dspy.OutputField( + desc="Low-level: Named entities (institutions, places, people, dates, IDs)" + ) + relations: list[str] = dspy.OutputField( + desc="High-level: Relation/concept phrases for semantic matching" + ) + search_strategy: Literal["entity_first", "relation_first", "parallel"] = dspy.OutputField( + desc="Recommended search strategy based on query structure" + ) + entity_types: list[str] = dspy.OutputField( + desc="Types of entities found: institution, place, person, date, identifier" + ) + + +class DualLevelRetriever(dspy.Module): + """ + Combines entity-level graph search with relation-level semantic search. + """ + + def __init__(self, qdrant_client, oxigraph_endpoint: str): + super().__init__() + self.extractor = dspy.ChainOfThought(DualLevelEntityExtractor) + self.qdrant = qdrant_client + self.oxigraph = oxigraph_endpoint + + def match_entities_in_graph(self, entities: list[str]) -> set[str]: + """ + Fuzzy match entities against Oxigraph nodes. + Returns matching GHCIDs. + """ + ghcids = set() + + for entity in entities: + # Use FILTER with CONTAINS for fuzzy matching + sparql = f""" + PREFIX hc: + PREFIX skos: + + SELECT DISTINCT ?ghcid WHERE {{ + ?s hc:ghcid ?ghcid . + {{ + ?s skos:prefLabel ?name . + FILTER(CONTAINS(LCASE(?name), LCASE("{entity}"))) + }} UNION {{ + ?s schema:addressLocality ?city . + FILTER(CONTAINS(LCASE(?city), LCASE("{entity}"))) + }} UNION {{ + ?s hc:ghcid ?ghcid . + FILTER(CONTAINS(?ghcid, "{entity.upper()}")) + }} + }} + LIMIT 50 + """ + results = self._execute_sparql(sparql) + ghcids.update(r["ghcid"] for r in results) + + return ghcids + + def match_relations_semantically( + self, + relations: list[str], + ghcid_filter: Optional[set[str]] = None + ) -> list[dict]: + """ + Semantic search for relation descriptions in vector store. + Optionally filter by GHCID set from entity matching. + """ + # Combine relation phrases into search query + relation_query = " ".join(relations) + + # Build filter + qdrant_filter = None + if ghcid_filter: + qdrant_filter = models.Filter( + must=[ + models.FieldCondition( + key="ghcid", + match=models.MatchAny(any=list(ghcid_filter)) + ) + ] + ) + + # Vector search + results = self.qdrant.search( + collection_name="heritage_chunks", + query_vector=self._embed(relation_query), + query_filter=qdrant_filter, + limit=20 + ) + + return [ + { + "ghcid": r.payload.get("ghcid"), + "text": r.payload.get("text"), + "score": r.score + } + for r in results + ] + + def forward(self, query: str) -> dspy.Prediction: + """ + Dual-level retrieval: entities narrow search, relations refine results. + """ + # Extract dual levels + extraction = self.extractor(query=query) + + if extraction.search_strategy == "entity_first": + # Step 1: Entity matching in graph + ghcid_set = self.match_entities_in_graph(extraction.entities) + + # Step 2: Relation matching with GHCID filter + results = self.match_relations_semantically( + extraction.relations, + ghcid_filter=ghcid_set if ghcid_set else None + ) + + elif extraction.search_strategy == "relation_first": + # Step 1: Broad relation matching + results = self.match_relations_semantically(extraction.relations) + + # Step 2: Filter by entity matching + result_ghcids = {r["ghcid"] for r in results if r.get("ghcid")} + entity_ghcids = self.match_entities_in_graph(extraction.entities) + + # Prioritize intersection + intersection = result_ghcids & entity_ghcids + if intersection: + results = [r for r in results if r.get("ghcid") in intersection] + + else: # parallel + # Run both in parallel, merge results + ghcid_set = self.match_entities_in_graph(extraction.entities) + semantic_results = self.match_relations_semantically(extraction.relations) + + # Score boost for results matching both + for r in semantic_results: + if r.get("ghcid") in ghcid_set: + r["score"] *= 1.5 # Boost intersection + + results = sorted(semantic_results, key=lambda x: -x["score"]) + + return dspy.Prediction( + results=results, + entities=extraction.entities, + relations=extraction.relations, + strategy=extraction.search_strategy, + ghcid_set=list(ghcid_set) if 'ghcid_set' in locals() else [] + ) +``` + +--- + +## Pattern C: Community Detection and Summaries + +### Rationale +From Microsoft GraphRAG: Community summaries enable answering holistic questions like "What are the main archival themes in the Netherlands?" + +### Implementation + +Create new file `backend/rag/community_indexer.py`: + +```python +""" +Community Detection and Summary Indexing for Global Search + +Based on Microsoft GraphRAG (arxiv:2404.16130) community hierarchy pattern. +Uses Leiden algorithm for community detection on institution graph. +""" + +import json +import logging +from dataclasses import dataclass +from typing import Optional + +import dspy +import igraph as ig +import leidenalg +from qdrant_client import QdrantClient, models + +logger = logging.getLogger(__name__) + + +@dataclass +class Community: + """A community of related heritage institutions.""" + community_id: str + ghcids: list[str] + summary: str + institution_count: int + dominant_type: str # Most common institution type + dominant_region: str # Most common region + themes: list[str] # Extracted themes + + +class CommunitySummarizer(dspy.Signature): + """Generate a summary for a community of heritage institutions.""" + __doc__ = """ + You are a heritage domain expert. Given a list of institutions in a community, + generate a concise summary describing: + 1. What types of institutions are in this community + 2. Geographic concentration (if any) + 3. Common themes or specializations + 4. Notable relationships between institutions + + Keep the summary to 2-3 sentences. Focus on what makes this community distinctive. + """ + + institutions: str = dspy.InputField(desc="JSON list of institution metadata") + + summary: str = dspy.OutputField(desc="2-3 sentence community summary") + themes: list[str] = dspy.OutputField(desc="Key themes (3-5 keywords)") + notable_features: str = dspy.OutputField(desc="What makes this community distinctive") + + +class CommunityIndexer: + """ + Builds and indexes institution communities for global search. + + Usage: + indexer = CommunityIndexer(oxigraph_url, qdrant_client) + indexer.build_communities() + indexer.index_summaries() + """ + + def __init__( + self, + oxigraph_endpoint: str, + qdrant_client: QdrantClient, + collection_name: str = "heritage_communities" + ): + self.oxigraph = oxigraph_endpoint + self.qdrant = qdrant_client + self.collection_name = collection_name + self.summarizer = dspy.ChainOfThought(CommunitySummarizer) + + def build_institution_graph(self) -> ig.Graph: + """ + Query Oxigraph for institution relationships. + Build igraph for community detection. + """ + # Get all institutions with their properties + sparql = """ + PREFIX hc: + PREFIX skos: + PREFIX schema: + + SELECT ?ghcid ?name ?type ?city ?region WHERE { + ?s hc:ghcid ?ghcid ; + skos:prefLabel ?name ; + hc:institutionType ?type . + OPTIONAL { ?s schema:addressLocality ?city } + OPTIONAL { ?s hc:regionCode ?region } + } + """ + institutions = self._execute_sparql(sparql) + + # Build graph: nodes are institutions, edges connect those sharing: + # - Same city + # - Same region + # - Same type + # - Part-of relationships + + g = ig.Graph() + ghcid_to_idx = {} + + # Add nodes + for inst in institutions: + idx = g.add_vertex( + ghcid=inst["ghcid"], + name=inst.get("name", ""), + type=inst.get("type", ""), + city=inst.get("city", ""), + region=inst.get("region", "") + ) + ghcid_to_idx[inst["ghcid"]] = idx.index + + # Add edges based on shared properties + for i, inst1 in enumerate(institutions): + for j, inst2 in enumerate(institutions[i+1:], i+1): + weight = 0 + + # Same city: strong connection + if inst1.get("city") and inst1["city"] == inst2.get("city"): + weight += 2 + + # Same region: medium connection + if inst1.get("region") and inst1["region"] == inst2.get("region"): + weight += 1 + + # Same type: weak connection + if inst1.get("type") and inst1["type"] == inst2.get("type"): + weight += 0.5 + + if weight > 0: + g.add_edge( + ghcid_to_idx[inst1["ghcid"]], + ghcid_to_idx[inst2["ghcid"]], + weight=weight + ) + + return g + + def detect_communities(self, graph: ig.Graph) -> dict[str, list[str]]: + """ + Apply Leiden algorithm for community detection. + Returns mapping: community_id -> [ghcid_list] + """ + # Leiden with modularity optimization + partition = leidenalg.find_partition( + graph, + leidenalg.ModularityVertexPartition, + weights="weight" + ) + + communities = {} + for comm_idx, members in enumerate(partition): + comm_id = f"comm_{comm_idx:04d}" + ghcids = [graph.vs[idx]["ghcid"] for idx in members] + communities[comm_id] = ghcids + + logger.info(f"Detected {len(communities)} communities") + return communities + + def generate_community_summary( + self, + community_id: str, + ghcids: list[str] + ) -> Community: + """ + Generate LLM summary for a community. + """ + # Fetch metadata for all institutions + institutions = self._fetch_institutions(ghcids) + + # Generate summary + result = self.summarizer( + institutions=json.dumps(institutions, indent=2) + ) + + # Determine dominant type and region + types = [i.get("type", "") for i in institutions] + regions = [i.get("region", "") for i in institutions] + + dominant_type = max(set(types), key=types.count) if types else "" + dominant_region = max(set(regions), key=regions.count) if regions else "" + + return Community( + community_id=community_id, + ghcids=ghcids, + summary=result.summary, + institution_count=len(ghcids), + dominant_type=dominant_type, + dominant_region=dominant_region, + themes=result.themes + ) + + def index_summaries(self, communities: list[Community]) -> None: + """ + Store community summaries in Qdrant for global search. + """ + # Create collection if not exists + self.qdrant.recreate_collection( + collection_name=self.collection_name, + vectors_config=models.VectorParams( + size=384, # MiniLM embedding size + distance=models.Distance.COSINE + ) + ) + + # Index each community + points = [] + for comm in communities: + embedding = self._embed(comm.summary) + + points.append(models.PointStruct( + id=hash(comm.community_id) % (2**63), + vector=embedding, + payload={ + "community_id": comm.community_id, + "summary": comm.summary, + "ghcids": comm.ghcids, + "institution_count": comm.institution_count, + "dominant_type": comm.dominant_type, + "dominant_region": comm.dominant_region, + "themes": comm.themes + } + )) + + self.qdrant.upsert( + collection_name=self.collection_name, + points=points + ) + + logger.info(f"Indexed {len(points)} community summaries") + + def global_search(self, query: str, limit: int = 5) -> list[dict]: + """ + Search community summaries for holistic questions. + """ + embedding = self._embed(query) + + results = self.qdrant.search( + collection_name=self.collection_name, + query_vector=embedding, + limit=limit + ) + + return [ + { + "community_id": r.payload["community_id"], + "summary": r.payload["summary"], + "themes": r.payload["themes"], + "institution_count": r.payload["institution_count"], + "score": r.score + } + for r in results + ] + + def build_and_index(self) -> int: + """ + Full pipeline: build graph, detect communities, generate summaries, index. + Returns number of communities indexed. + """ + logger.info("Building institution graph...") + graph = self.build_institution_graph() + + logger.info("Detecting communities...") + community_map = self.detect_communities(graph) + + logger.info("Generating community summaries...") + communities = [] + for comm_id, ghcids in community_map.items(): + if len(ghcids) >= 3: # Only summarize communities with 3+ members + comm = self.generate_community_summary(comm_id, ghcids) + communities.append(comm) + + logger.info(f"Indexing {len(communities)} community summaries...") + self.index_summaries(communities) + + return len(communities) +``` + +--- + +## Pattern D: Temporal Query Templates + +### Rationale +From Zep: Bitemporal modeling enables point-in-time queries and provenance tracking. + +### Implementation + +Add to `template_sparql.py`: + +```python +# ============================================================================= +# TEMPORAL QUERY TEMPLATES (Zep Pattern) +# ============================================================================= + +TEMPORAL_QUERY_TEMPLATES = { + "point_in_time_state": TemplateDefinition( + id="temporal_pit", + name="Point-in-Time Institution State", + description="Get institution state at a specific point in time", + intent_patterns=["what was", "in [year]", "before", "after", "at that time"], + sparql_template=""" + PREFIX hc: + PREFIX skos: + PREFIX schema: + PREFIX xsd: + + SELECT ?ghcid ?name ?type ?city ?validFrom ?validTo WHERE { + ?s hc:ghcid ?ghcid ; + skos:prefLabel ?name ; + hc:institutionType ?type ; + hc:validFrom ?validFrom . + OPTIONAL { ?s schema:addressLocality ?city } + OPTIONAL { ?s hc:validTo ?validTo } + + # Temporal filter: valid at query date + FILTER(?validFrom <= "{{ query_date }}"^^xsd:date) + FILTER(!BOUND(?validTo) || ?validTo > "{{ query_date }}"^^xsd:date) + + {% if ghcid_filter %} + FILTER(STRSTARTS(?ghcid, "{{ ghcid_filter }}")) + {% endif %} + } + ORDER BY ?ghcid + """, + slots=[ + SlotDefinition(type=SlotType.STRING, name="query_date", required=True), + SlotDefinition(type=SlotType.STRING, name="ghcid_filter", required=False) + ] + ), + + "institution_history": TemplateDefinition( + id="temporal_history", + name="Institution Change History", + description="Get full history of changes for an institution", + intent_patterns=["history of", "changes to", "evolution of", "timeline"], + sparql_template=""" + PREFIX hc: + PREFIX skos: + + SELECT ?ghcid ?name ?validFrom ?validTo ?changeType ?description WHERE { + ?entry hc:ghcid "{{ ghcid }}" ; + skos:prefLabel ?name ; + hc:validFrom ?validFrom . + OPTIONAL { ?entry hc:validTo ?validTo } + OPTIONAL { ?entry hc:changeType ?changeType } + OPTIONAL { ?entry hc:changeDescription ?description } + } + ORDER BY ?validFrom + """, + slots=[ + SlotDefinition(type=SlotType.STRING, name="ghcid", required=True) + ] + ), + + "institutions_founded_before": TemplateDefinition( + id="temporal_founded_before", + name="Institutions Founded Before Date", + description="Find institutions founded before a specific date", + intent_patterns=["founded before", "established before", "older than", "before [year]"], + sparql_template=""" + PREFIX hc: + PREFIX skos: + PREFIX schema: + PREFIX xsd: + + SELECT ?ghcid ?name ?type ?city ?foundingDate WHERE { + ?s hc:ghcid ?ghcid ; + skos:prefLabel ?name ; + hc:institutionType ?type ; + schema:foundingDate ?foundingDate . + OPTIONAL { ?s schema:addressLocality ?city } + + FILTER(?foundingDate < "{{ cutoff_date }}"^^xsd:date) + + {% if institution_type %} + FILTER(?type = "{{ institution_type }}") + {% endif %} + } + ORDER BY ?foundingDate + LIMIT {{ limit | default(50) }} + """, + slots=[ + SlotDefinition(type=SlotType.STRING, name="cutoff_date", required=True), + SlotDefinition(type=SlotType.INSTITUTION_TYPE, name="institution_type", required=False), + SlotDefinition(type=SlotType.INTEGER, name="limit", required=False, default="50") + ] + ), + + "merger_history": TemplateDefinition( + id="temporal_mergers", + name="Institution Merger History", + description="Find institutions that merged or were absorbed", + intent_patterns=["merged", "merger", "combined", "absorbed", "joined"], + sparql_template=""" + PREFIX hc: + PREFIX skos: + PREFIX crm: + + SELECT ?event ?eventDate ?description + ?sourceGhcid ?sourceName + ?targetGhcid ?targetName WHERE { + ?event a hc:MergerEvent ; + hc:eventDate ?eventDate ; + hc:description ?description . + + OPTIONAL { + ?event hc:sourceInstitution ?source . + ?source hc:ghcid ?sourceGhcid ; + skos:prefLabel ?sourceName . + } + + OPTIONAL { + ?event hc:resultingInstitution ?target . + ?target hc:ghcid ?targetGhcid ; + skos:prefLabel ?targetName . + } + + {% if region_filter %} + FILTER(STRSTARTS(?sourceGhcid, "{{ region_filter }}") || + STRSTARTS(?targetGhcid, "{{ region_filter }}")) + {% endif %} + } + ORDER BY ?eventDate + """, + slots=[ + SlotDefinition(type=SlotType.STRING, name="region_filter", required=False) + ] + ) +} +``` + +--- + +## Integration Checklist + +### Immediate Actions + +- [ ] Add `ArgumentVerifier` signature to `dspy_heritage_rag.py` +- [ ] Add `DualLevelEntityExtractor` signature +- [ ] Integrate verification into retrieval pipeline +- [ ] Add temporal query templates to `template_sparql.py` + +### Short-Term Actions + +- [ ] Create `backend/rag/community_indexer.py` +- [ ] Add Leiden algorithm dependency: `pip install leidenalg python-igraph` +- [ ] Create Qdrant collection for community summaries +- [ ] Add global search mode to RAG pipeline + +### Testing + +```bash +# Test verification layer +python -c " +from backend.rag.dspy_heritage_rag import ArgumentVerifier +import dspy +dspy.configure(lm=...) +verifier = dspy.ChainOfThought(ArgumentVerifier) +result = verifier( + query='How many archives are in Haarlem?', + context='Haarlem has several heritage institutions including archives.' +) +print(f'Can answer: {result.can_answer}') +print(f'Missing: {result.missing_info}') +" + +# Test dual-level extraction +python -c " +from backend.rag.dspy_heritage_rag import DualLevelEntityExtractor +import dspy +dspy.configure(lm=...) +extractor = dspy.ChainOfThought(DualLevelEntityExtractor) +result = extractor(query='Which archives in Haarlem have digitized medieval manuscripts?') +print(f'Entities: {result.entities}') +print(f'Relations: {result.relations}') +print(f'Strategy: {result.search_strategy}') +" +``` diff --git a/docs/plan/external_design_patterns/04_temporal_semantic_hypergraph.md b/docs/plan/external_design_patterns/04_temporal_semantic_hypergraph.md new file mode 100644 index 0000000000..325b36b194 --- /dev/null +++ b/docs/plan/external_design_patterns/04_temporal_semantic_hypergraph.md @@ -0,0 +1,1441 @@ +# Implementation Guide: Temporal, Semantic Routing, and Hypergraph Patterns + +**Created**: 2025-01-07 +**Purpose**: Concrete implementation patterns for GLAM Heritage RAG +**Status**: Implementation Ready + +--- + +## Table of Contents + +1. [Overview](#overview) +2. [Temporal Query Implementation](#temporal-query-implementation) +3. [Semantic Routing Implementation](#semantic-routing-implementation) +4. [Hypergraph Event Implementation](#hypergraph-event-implementation) +5. [Integration Roadmap](#integration-roadmap) +6. [Testing Strategy](#testing-strategy) + +--- + +## Overview + +This guide provides **production-ready code patterns** for implementing the advanced RAG patterns documented in `01_graphrag_design_patterns.md`. All implementations use the existing GLAM stack: + +- **TypeDB** → Schema validation and complex traversals +- **Oxigraph** → RDF/SPARQL storage and queries +- **Qdrant** → Vector embeddings and semantic search +- **DSPy** → LLM orchestration and optimization +- **DuckLake** → SQL analytics + +**No new frameworks required.** + +--- + +## Temporal Query Implementation + +### 2.1 SPARQL Templates for Temporal Queries + +Add to `data/sparql_templates.yaml`: + +```yaml +# Temporal Query Templates + +templates: + # Point-in-time institution state + point_in_time_state: + description: "Get institution state at a specific point in time" + intent: [temporal, entity_lookup] + question_patterns: + - "Wat was de status van {institution_name} in {year}?" + - "How was {institution_name} structured in {year}?" + - "State of {institution_name} before {event}?" + slots: + ghcid: + type: string + required: true + query_date: + type: date + required: true + sparql_template: | + {{ prefixes }} + + SELECT ?ghcid ?name ?type ?city ?validFrom ?validTo WHERE { + ?s a crm:E39_Actor ; + hc:ghcid ?ghcid ; + skos:prefLabel ?name ; + hc:institutionType ?type ; + hc:validFrom ?validFrom . + OPTIONAL { ?s schema:addressLocality ?city } + OPTIONAL { ?s hc:validTo ?validTo } + + FILTER(?validFrom <= "{{ query_date }}"^^xsd:date) + FILTER(!BOUND(?validTo) || ?validTo > "{{ query_date }}"^^xsd:date) + + {% if ghcid %} + FILTER(?ghcid = "{{ ghcid }}") + {% endif %} + } + ORDER BY ?validFrom + LIMIT {{ limit | default(10) }} + + # Institution timeline/history + institution_timeline: + description: "Get complete history of an institution" + intent: [temporal, entity_lookup] + question_patterns: + - "Geschiedenis van {institution_name}" + - "History of {institution_name}" + - "Timeline of changes for {institution_name}" + - "Wat is er gebeurd met {institution_name}?" + slots: + ghcid: + type: string + required: true + sparql_template: | + {{ prefixes }} + + SELECT ?ghcid ?name ?validFrom ?validTo ?changeType ?changeReason WHERE { + ?entry hc:ghcid "{{ ghcid }}" ; + skos:prefLabel ?name ; + hc:validFrom ?validFrom . + OPTIONAL { ?entry hc:validTo ?validTo } + OPTIONAL { ?entry hc:changeType ?changeType } + OPTIONAL { ?entry hc:changeReason ?changeReason } + } + ORDER BY ?validFrom + + # Events in time range + events_in_period: + description: "Find organizational change events in a time period" + intent: [temporal, statistical] + question_patterns: + - "Welke fusies waren er tussen {start_year} en {end_year}?" + - "Mergers between {start_year} and {end_year}" + - "What institutions closed in {year}?" + - "Archives founded before {year}" + slots: + start_date: + type: date + required: true + end_date: + type: date + required: false + event_type: + type: string + required: false + valid_values: [MERGER, FOUNDING, CLOSURE, RELOCATION, NAME_CHANGE] + sparql_template: | + {{ prefixes }} + + SELECT ?event ?eventType ?date ?actor1 ?actor2 ?description WHERE { + ?event a hc:OrganizationalChangeEvent ; + hc:eventType ?eventType ; + hc:eventDate ?date . + OPTIONAL { ?event hc:affectedActor ?actor1 } + OPTIONAL { ?event hc:resultingActor ?actor2 } + OPTIONAL { ?event schema:description ?description } + + FILTER(?date >= "{{ start_date }}"^^xsd:date) + {% if end_date %} + FILTER(?date <= "{{ end_date }}"^^xsd:date) + {% endif %} + {% if event_type %} + FILTER(?eventType = "{{ event_type }}") + {% endif %} + } + ORDER BY ?date + LIMIT {{ limit | default(50) }} + + # Find oldest/newest institutions + find_by_founding: + description: "Find oldest or newest institutions" + intent: [temporal, exploration] + question_patterns: + - "Oudste {institution_type} in {location}" + - "Oldest {institution_type} in the Netherlands" + - "Newest {institution_type} opened after {year}" + - "Most recently founded {institution_type}" + slots: + institution_type: + type: institution_type + required: true + order: + type: string + required: false + valid_values: [ASC, DESC] + default: ASC + location: + type: city + required: false + sparql_template: | + {{ prefixes }} + + SELECT ?institution ?name ?foundingDate ?city WHERE { + ?institution a crm:E39_Actor ; + hc:institutionType "{{ institution_type }}" ; + skos:prefLabel ?name ; + schema:foundingDate ?foundingDate . + OPTIONAL { ?institution schema:addressLocality ?city } + + {% if location %} + FILTER(CONTAINS(LCASE(?city), "{{ location | lower }}")) + {% endif %} + } + ORDER BY {{ order | default('ASC') }}(?foundingDate) + LIMIT {{ limit | default(10) }} +``` + +### 2.2 DSPy Signature for Temporal Intent Detection + +Add to `backend/rag/dspy_heritage_rag.py`: + +```python +class TemporalQueryIntent(dspy.Signature): + """Detect temporal aspects of heritage queries. + + Identify if the query has temporal constraints and extract relevant dates. + This runs as a lightweight check before full query processing. + """ + + question: str = dspy.InputField(desc="User's question") + language: str = dspy.InputField(desc="Language code (nl, en)", default="nl") + + has_temporal_constraint: bool = dspy.OutputField( + desc="True if query references specific time periods or historical events" + ) + + temporal_type: Literal[ + "point_in_time", # "in 1990", "before the merger" + "time_range", # "between 1990 and 2000" + "relative", # "oldest", "most recent", "before/after X" + "event_based", # "after the founding", "when merged" + "none" # No temporal aspect + ] = dspy.OutputField(desc="Type of temporal constraint") + + extracted_dates: list[str] = dspy.OutputField( + desc="Extracted date strings (ISO format when possible)" + ) + + event_references: list[str] = dspy.OutputField( + desc="Referenced events (merger, founding, closure, relocation)" + ) + + +class TemporalQueryProcessor(dspy.Module): + """Process temporal queries with appropriate templates.""" + + def __init__(self): + super().__init__() + self.intent_detector = dspy.ChainOfThought(TemporalQueryIntent) + self.template_selector = TemplateClassifier() + self.slot_extractor = SlotExtractor() + self.instantiator = TemplateInstantiator() + + def forward( + self, + question: str, + language: str = "nl" + ) -> TemplateMatchResult: + """ + Process temporal query through specialized pipeline. + """ + # Detect temporal intent + temporal = self.intent_detector(question=question, language=language) + + if not temporal.has_temporal_constraint: + # Not a temporal query - use standard pipeline + return self.template_selector.forward(question, language) + + # Select appropriate temporal template + template_mapping = { + "point_in_time": "point_in_time_state", + "time_range": "events_in_period", + "relative": "find_by_founding", + "event_based": "institution_timeline", + } + + template_id = template_mapping.get(temporal.temporal_type) + if not template_id: + return TemplateMatchResult(matched=False, reasoning="Unknown temporal type") + + # Extract slots including temporal values + slots, variant = self.slot_extractor.forward( + question=question, + template_id=template_id, + inherited_slots={} + ) + + # Add extracted dates + if temporal.extracted_dates: + if "query_date" in self.instantiator._get_template(template_id).slots: + slots["query_date"] = temporal.extracted_dates[0] + elif "start_date" in self.instantiator._get_template(template_id).slots: + slots["start_date"] = temporal.extracted_dates[0] + if len(temporal.extracted_dates) > 1: + slots["end_date"] = temporal.extracted_dates[1] + + # Render SPARQL + sparql = self.instantiator.render(template_id, slots, variant) + + return TemplateMatchResult( + matched=True, + template_id=template_id, + confidence=0.9, + slots=slots, + sparql=sparql, + reasoning=f"Temporal query: {temporal.temporal_type}" + ) +``` + +### 2.3 Temporal Conflict Resolution + +Add to `backend/rag/temporal_resolver.py`: + +```python +""" +Temporal Conflict Resolution for Heritage Data + +Handles cases where multiple facts exist for the same property at overlapping times. +""" + +from dataclasses import dataclass +from datetime import datetime +from typing import Optional +import logging + +logger = logging.getLogger(__name__) + + +@dataclass +class TemporalFact: + """A fact with temporal validity.""" + property: str + value: str + valid_from: datetime + valid_to: Optional[datetime] + source: str + confidence: float = 1.0 + + +@dataclass +class ConflictResolution: + """Result of conflict resolution.""" + property: str + authoritative_value: str + valid_for_date: datetime + conflict_type: str + explanation: str + alternative_values: list[TemporalFact] + + +class TemporalConflictResolver: + """ + Resolve conflicts between temporal facts. + + Strategies: + 1. Temporal ordering: Use fact valid at query time + 2. Recency: Prefer more recent sources + 3. Authority: Prefer authoritative sources (Tier 1) + 4. Confidence: Use higher confidence facts + """ + + SOURCE_AUTHORITY = { + "TIER_1_AUTHORITATIVE": 1.0, + "TIER_2_VERIFIED": 0.8, + "TIER_3_CROWD_SOURCED": 0.6, + "TIER_4_INFERRED": 0.4, + } + + def resolve_conflicts( + self, + ghcid: str, + facts: list[TemporalFact], + query_date: Optional[datetime] = None + ) -> list[ConflictResolution]: + """ + Resolve all conflicts in a set of facts. + + Args: + ghcid: Institution identifier + facts: All facts about the institution + query_date: Point in time for resolution (default: now) + + Returns: + List of conflict resolutions with authoritative values + """ + if query_date is None: + query_date = datetime.now() + + # Group facts by property + by_property: dict[str, list[TemporalFact]] = {} + for fact in facts: + by_property.setdefault(fact.property, []).append(fact) + + resolutions = [] + + for prop, prop_facts in by_property.items(): + # Find facts valid at query_date + valid_facts = [ + f for f in prop_facts + if f.valid_from <= query_date and + (f.valid_to is None or f.valid_to > query_date) + ] + + if len(valid_facts) <= 1: + # No conflict + continue + + # Multiple valid facts - resolve conflict + resolution = self._resolve_property_conflict( + prop, valid_facts, query_date + ) + resolutions.append(resolution) + + return resolutions + + def _resolve_property_conflict( + self, + property: str, + facts: list[TemporalFact], + query_date: datetime + ) -> ConflictResolution: + """ + Resolve conflict for a single property. + """ + # Score each fact + scored = [] + for fact in facts: + score = self._compute_authority_score(fact) + scored.append((fact, score)) + + # Sort by score (descending) + scored.sort(key=lambda x: x[1], reverse=True) + + winner = scored[0][0] + alternatives = [f for f, s in scored[1:]] + + # Determine conflict type + if all(f.value == winner.value for f in facts): + conflict_type = "redundant" # Same value from multiple sources + elif self._is_name_change(facts): + conflict_type = "name_change" + elif self._is_location_change(facts): + conflict_type = "location_change" + else: + conflict_type = "data_inconsistency" + + explanation = self._generate_explanation( + property, winner, alternatives, conflict_type, query_date + ) + + return ConflictResolution( + property=property, + authoritative_value=winner.value, + valid_for_date=query_date, + conflict_type=conflict_type, + explanation=explanation, + alternative_values=alternatives + ) + + def _compute_authority_score(self, fact: TemporalFact) -> float: + """Compute authority score for a fact.""" + # Base authority from source tier + authority = self.SOURCE_AUTHORITY.get(fact.source, 0.5) + + # Boost for confidence + authority *= fact.confidence + + # Recency bonus (facts with recent valid_from get slight boost) + days_old = (datetime.now() - fact.valid_from).days + recency_factor = 1.0 / (1.0 + days_old / 365.0) # Decay over years + authority *= (0.8 + 0.2 * recency_factor) + + return authority + + def _is_name_change(self, facts: list[TemporalFact]) -> bool: + """Check if conflict represents a name change.""" + # Name changes typically have non-overlapping validity + facts_sorted = sorted(facts, key=lambda f: f.valid_from) + for i in range(len(facts_sorted) - 1): + if facts_sorted[i].valid_to == facts_sorted[i+1].valid_from: + return True + return False + + def _is_location_change(self, facts: list[TemporalFact]) -> bool: + """Check if conflict represents a location change.""" + return any( + f.property in ["city", "address", "location"] + for f in facts + ) + + def _generate_explanation( + self, + property: str, + winner: TemporalFact, + alternatives: list[TemporalFact], + conflict_type: str, + query_date: datetime + ) -> str: + """Generate human-readable explanation of resolution.""" + if conflict_type == "name_change": + return ( + f"The institution name changed over time. " + f"At {query_date.strftime('%Y-%m-%d')}, the authoritative name was '{winner.value}'. " + f"Previous names: {', '.join(f.value for f in alternatives)}." + ) + elif conflict_type == "location_change": + return ( + f"The institution relocated. " + f"At {query_date.strftime('%Y-%m-%d')}, it was located at '{winner.value}'." + ) + elif conflict_type == "redundant": + return f"Multiple sources confirm: {winner.value}" + else: + return ( + f"Data conflict for {property}. " + f"Using '{winner.value}' from {winner.source} (confidence: {winner.confidence:.2f}). " + f"Alternative values exist in other sources." + ) +``` + +--- + +## Semantic Routing Implementation + +### 3.1 Signal Extractor Module + +Add to `backend/rag/semantic_router.py`: + +```python +""" +Semantic Routing for Heritage RAG + +Implements Signal-Decision architecture for fast, accurate query routing. +""" + +from dataclasses import dataclass, field +from typing import Literal, Optional +import re +import logging + +import numpy as np + +logger = logging.getLogger(__name__) + + +@dataclass +class QuerySignals: + """Semantic signals extracted from query.""" + # Primary classification + entity_type: Literal["person", "institution", "collection", "event", "mixed"] + intent: Literal["geographic", "statistical", "relational", "temporal", + "entity_lookup", "comparative", "exploration"] + + # Extracted entities + institution_mentions: list[str] = field(default_factory=list) + person_mentions: list[str] = field(default_factory=list) + location_mentions: list[str] = field(default_factory=list) + + # Query characteristics + language: str = "nl" + has_temporal_constraint: bool = False + has_geographic_constraint: bool = False + requires_aggregation: bool = False + + # Confidence + confidence: float = 0.85 + + +@dataclass +class RouteConfig: + """Configuration for query routing.""" + primary_backend: str + secondary_backend: Optional[str] = None + qdrant_collection: Optional[str] = None + use_temporal_templates: bool = False + qdrant_filters: dict = field(default_factory=dict) + sparql_variant: Optional[str] = None + + +class SemanticSignalExtractor: + """ + Extract semantic signals from queries without LLM calls. + + Uses: + - Keyword patterns for entity type detection + - Embedding similarity for intent classification + - Regex for entity extraction + """ + + # Entity type indicators + PERSON_INDICATORS = [ + "wie", "who", "curator", "archivist", "archivaris", "bibliothecaris", + "directeur", "director", "medewerker", "staff", "employee", + "werkt", "works", "persoon", "person", "hoofd", "manager" + ] + + INSTITUTION_INDICATORS = [ + "museum", "musea", "archief", "archieven", "bibliotheek", "bibliotheken", + "galerie", "gallery", "instelling", "institution", "organisatie" + ] + + AGGREGATION_INDICATORS = [ + "hoeveel", "how many", "count", "aantal", "total", "totaal", + "per", "verdeling", "distribution", "gemiddelde", "average" + ] + + GEOGRAPHIC_INDICATORS = [ + "in", "nabij", "near", "waar", "where", "locatie", "location", + "provincie", "province", "stad", "city", "regio", "region" + ] + + TEMPORAL_INDICATORS = [ + "wanneer", "when", "voor", "before", "na", "after", + "tussen", "between", "oudste", "oldest", "nieuwste", "newest", + "opgericht", "founded", "gesloten", "closed", "fusie", "merger" + ] + + def __init__(self): + self._intent_embeddings = None + self._model = None + + def extract_signals(self, query: str) -> QuerySignals: + """ + Extract all semantic signals from query. + + Fast operation - no LLM calls. + """ + query_lower = query.lower() + + # Entity type detection + entity_type = self._detect_entity_type(query_lower) + + # Intent classification + intent = self._classify_intent(query, query_lower) + + # Entity extraction + institutions = self._extract_institutions(query) + persons = self._extract_persons(query) + locations = self._extract_locations(query) + + # Constraint detection + has_temporal = any(ind in query_lower for ind in self.TEMPORAL_INDICATORS) + has_geographic = any(ind in query_lower for ind in self.GEOGRAPHIC_INDICATORS) + requires_aggregation = any(ind in query_lower for ind in self.AGGREGATION_INDICATORS) + + # Language detection + language = self._detect_language(query) + + # Confidence based on signal clarity + confidence = self._compute_confidence(entity_type, intent, query_lower) + + return QuerySignals( + entity_type=entity_type, + intent=intent, + institution_mentions=institutions, + person_mentions=persons, + location_mentions=locations, + language=language, + has_temporal_constraint=has_temporal, + has_geographic_constraint=has_geographic, + requires_aggregation=requires_aggregation, + confidence=confidence + ) + + def _detect_entity_type(self, query_lower: str) -> str: + """Detect primary entity type in query.""" + person_score = sum(1 for p in self.PERSON_INDICATORS if p in query_lower) + institution_score = sum(1 for p in self.INSTITUTION_INDICATORS if p in query_lower) + + if person_score > 0 and institution_score > 0: + return "mixed" + elif person_score > institution_score: + return "person" + elif institution_score > 0: + return "institution" + else: + return "institution" # Default + + def _classify_intent(self, query: str, query_lower: str) -> str: + """Classify query intent.""" + # Quick rule-based classification + if any(ind in query_lower for ind in self.AGGREGATION_INDICATORS): + return "statistical" + if any(ind in query_lower for ind in self.TEMPORAL_INDICATORS): + return "temporal" + if "vergelijk" in query_lower or "compare" in query_lower: + return "comparative" + if any(ind in query_lower for ind in ["wat is", "what is", "tell me about", "vertel"]): + return "entity_lookup" + if any(ind in query_lower for ind in self.GEOGRAPHIC_INDICATORS): + return "geographic" + + # Default based on question type + if query_lower.startswith(("welke", "which", "wat", "what")): + return "exploration" + + return "exploration" + + def _extract_institutions(self, query: str) -> list[str]: + """Extract institution mentions from query.""" + # Known institution patterns + patterns = [ + r"(?:het\s+)?(\w+\s+(?:Museum|Archief|Bibliotheek|Galerie))", + r"(Rijksmuseum|Nationaal Archief|KB|Koninklijke Bibliotheek)", + r"(\w+archief|\w+museum|\w+bibliotheek)", + ] + + mentions = [] + for pattern in patterns: + for match in re.finditer(pattern, query, re.IGNORECASE): + mentions.append(match.group(1)) + + return list(set(mentions)) + + def _extract_persons(self, query: str) -> list[str]: + """Extract person mentions from query.""" + # Basic person name pattern (capitalized words) + pattern = r"\b([A-Z][a-z]+\s+(?:van\s+)?[A-Z][a-z]+)\b" + matches = re.findall(pattern, query) + return matches + + def _extract_locations(self, query: str) -> list[str]: + """Extract location mentions from query.""" + # Known Dutch cities and provinces + known_locations = [ + "Amsterdam", "Rotterdam", "Den Haag", "Utrecht", "Groningen", + "Noord-Holland", "Zuid-Holland", "Noord-Brabant", "Limburg", + "Gelderland", "Friesland", "Overijssel", "Drenthe", "Zeeland", + "Flevoland", "Haarlem", "Leiden", "Maastricht" + ] + + mentions = [] + query_lower = query.lower() + for loc in known_locations: + if loc.lower() in query_lower: + mentions.append(loc) + + return mentions + + def _detect_language(self, query: str) -> str: + """Detect query language.""" + dutch_indicators = ["welke", "hoeveel", "waar", "wanneer", "wie", "het", "de"] + english_indicators = ["which", "how many", "where", "when", "who", "the"] + + query_lower = query.lower() + dutch_score = sum(1 for w in dutch_indicators if w in query_lower) + english_score = sum(1 for w in english_indicators if w in query_lower) + + return "nl" if dutch_score >= english_score else "en" + + def _compute_confidence(self, entity_type: str, intent: str, query_lower: str) -> float: + """Compute confidence in signal extraction.""" + confidence = 0.7 # Base + + # Boost for clear entity type + if entity_type != "mixed": + confidence += 0.1 + + # Boost for clear intent indicators + if any(ind in query_lower for ind in self.AGGREGATION_INDICATORS + self.TEMPORAL_INDICATORS): + confidence += 0.1 + + return min(confidence, 0.95) + + +class SemanticDecisionRouter: + """ + Route queries to backends based on signals. + """ + + def route(self, signals: QuerySignals) -> RouteConfig: + """ + Determine routing based on signals. + """ + # Person queries → Qdrant persons collection + if signals.entity_type == "person": + config = RouteConfig( + primary_backend="qdrant", + secondary_backend="sparql", + qdrant_collection="heritage_persons", + ) + + # Add institution filter if mentioned + if signals.institution_mentions: + config.qdrant_filters["custodian_slug"] = self._to_slug( + signals.institution_mentions[0] + ) + + return config + + # Statistical queries → DuckLake + if signals.requires_aggregation: + return RouteConfig( + primary_backend="ducklake", + secondary_backend="sparql", + ) + + # Temporal queries → Temporal SPARQL templates + if signals.has_temporal_constraint: + return RouteConfig( + primary_backend="sparql", + secondary_backend="qdrant", + use_temporal_templates=True, + qdrant_collection="heritage_custodians", + ) + + # Geographic queries → SPARQL with location filter + if signals.has_geographic_constraint: + return RouteConfig( + primary_backend="sparql", + secondary_backend="qdrant", + qdrant_collection="heritage_custodians", + ) + + # Default: hybrid SPARQL + Qdrant + return RouteConfig( + primary_backend="qdrant", + secondary_backend="sparql", + qdrant_collection="heritage_custodians", + ) + + def _to_slug(self, institution_name: str) -> str: + """Convert institution name to slug format.""" + import unicodedata + normalized = unicodedata.normalize('NFD', institution_name) + ascii_name = ''.join(c for c in normalized if unicodedata.category(c) != 'Mn') + slug = ascii_name.lower() + slug = re.sub(r"[''`\",.:;!?()[\]{}]", '', slug) + slug = re.sub(r'[\s_]+', '-', slug) + slug = re.sub(r'-+', '-', slug).strip('-') + return slug + + +# Singleton instances +_signal_extractor: Optional[SemanticSignalExtractor] = None +_decision_router: Optional[SemanticDecisionRouter] = None + + +def get_signal_extractor() -> SemanticSignalExtractor: + global _signal_extractor + if _signal_extractor is None: + _signal_extractor = SemanticSignalExtractor() + return _signal_extractor + + +def get_decision_router() -> SemanticDecisionRouter: + global _decision_router + if _decision_router is None: + _decision_router = SemanticDecisionRouter() + return _decision_router +``` + +### 3.2 Integration with HeritageQueryRouter + +Modify `backend/rag/dspy_heritage_rag.py`: + +```python +# Add to HeritageQueryRouter.__init__ +from .semantic_router import get_signal_extractor, get_decision_router + +class HeritageQueryRouter(dspy.Module): + def __init__(self, use_schema_aware: Optional[bool] = None, fast_lm: Optional[dspy.LM] = None): + super().__init__() + + # NEW: Lightweight signal extraction (no LLM) + self.signal_extractor = get_signal_extractor() + self.decision_router = get_decision_router() + + # ... existing initialization ... + + def forward(self, question: str, language: str = "nl", history: History = None) -> Prediction: + """ + Route query using Signal-Decision pattern. + """ + # Phase 1: Fast signal extraction (no LLM) + signals = self.signal_extractor.extract_signals(question) + + # Phase 2: Route based on signals + if signals.confidence >= 0.8: + # High confidence - route without LLM + route_config = self.decision_router.route(signals) + + return Prediction( + intent=signals.intent, + entity_type=signals.entity_type, + entities=signals.institution_mentions + signals.person_mentions, + sources=self._config_to_sources(route_config), + resolved_question=question, + routing_method="signal_based", + route_config=route_config, + target_custodian_type="UNKNOWN", + target_role_category="UNKNOWN", + target_staff_role="UNKNOWN", + ) + + # Low confidence - use LLM for classification + # ... existing LLM classification code ... +``` + +--- + +## Hypergraph Event Implementation + +### 4.1 Event Hyperedge Schema + +Add to `schemas/20251121/linkml/modules/classes/OrganizationalChangeEvent.yaml`: + +```yaml +# OrganizationalChangeEvent - Hyperedge for heritage events +id: https://nde.nl/ontology/hc/OrganizationalChangeEvent +name: OrganizationalChangeEvent +description: >- + A hyperedge representing a complex organizational change event involving + multiple participants. Maps to CIDOC-CRM E5_Event and its subclasses. + +prefixes: + hc: https://nde.nl/ontology/hc/ + crm: http://www.cidoc-crm.org/cidoc-crm/ + schema: http://schema.org/ + +classes: + OrganizationalChangeEvent: + class_uri: hc:OrganizationalChangeEvent + mixins: + - crm:E5_Event + + slots: + - event_id + - event_type + - event_date + - end_date + - participants + - affected_collections + - resulting_entities + - description + - source_documents + - confidence + + annotations: + specificity_score: 0.65 + specificity_rationale: "Specific to organizational change tracking" + template_specificity: + organizational_change: 0.10 + archive_search: 0.60 + museum_search: 0.60 + +slots: + event_id: + description: Unique identifier for the event + range: uri + required: true + slot_uri: hc:eventId + + event_type: + description: Type of organizational change + range: ChangeTypeEnum + required: true + slot_uri: hc:eventType + + event_date: + description: Date when event occurred + range: date + required: true + slot_uri: crm:P4_has_time-span + + participants: + description: Map of roles to participant GHCIDs + range: string + multivalued: true + slot_uri: crm:P11_had_participant + + affected_collections: + description: Collections affected by this event + range: uri + multivalued: true + slot_uri: crm:P30_transferred_custody_of + + resulting_entities: + description: Entities created by this event + range: uri + multivalued: true + slot_uri: crm:P92_brought_into_existence + +enums: + ChangeTypeEnum: + permissible_values: + MERGER: + description: Two or more institutions combine + FOUNDING: + description: New institution established + DISSOLUTION: + description: Institution closes + RELOCATION: + description: Institution moves location + NAME_CHANGE: + description: Institution renamed + CUSTODY_TRANSFER: + description: Collection moves between institutions + SPLIT: + description: Institution divides into multiple + ACQUISITION: + description: Institution acquires collection/materials +``` + +### 4.2 Event Retrieval Module + +Add to `backend/rag/event_retriever.py`: + +```python +""" +Heritage Event Retrieval using Hypergraph Patterns + +Retrieves organizational change events (mergers, foundings, etc.) using +multi-factor scoring: entity overlap + semantic similarity + temporal relevance. +""" + +from dataclasses import dataclass, field +from datetime import datetime +from typing import Optional, Callable +import logging +import uuid + +logger = logging.getLogger(__name__) + + +@dataclass +class HeritageEvent: + """Hyperedge representing a heritage organizational event.""" + event_id: str + event_type: str + event_date: datetime + participants: dict[str, str] # role -> GHCID + description: str + affected_collections: list[str] = field(default_factory=list) + resulting_entities: list[str] = field(default_factory=list) + confidence: float = 1.0 + embedding: Optional[list[float]] = None + + +class EventRetriever: + """ + Retrieve heritage events using hypergraph patterns. + """ + + def __init__( + self, + oxigraph_query_fn: Callable[[str], list[dict]], + qdrant_search_fn: Callable[[str, int], list[dict]], + embed_fn: Callable[[str], list[float]] + ): + """ + Args: + oxigraph_query_fn: Function to execute SPARQL queries + qdrant_search_fn: Function to search Qdrant events collection + embed_fn: Function to embed text + """ + self.sparql = oxigraph_query_fn + self.vector_search = qdrant_search_fn + self.embed = embed_fn + + def retrieve( + self, + query: str, + query_entities: list[str] = None, + query_time: datetime = None, + event_type: str = None, + limit: int = 10, + weights: dict = None + ) -> list[tuple[HeritageEvent, float]]: + """ + Retrieve events using multi-factor scoring. + + Args: + query: Natural language query + query_entities: GHCIDs mentioned in query + query_time: Temporal constraint + event_type: Filter by event type + limit: Max results + weights: Scoring weights + + Returns: + List of (event, score) tuples + """ + if weights is None: + weights = { + "entity": 0.3, + "semantic": 0.4, + "temporal": 0.2, + "graph": 0.1 + } + + # Phase 1: Candidate generation + candidates = {} + + # Entity-based candidates from SPARQL + if query_entities: + sparql_candidates = self._get_entity_candidates(query_entities, event_type) + candidates.update(sparql_candidates) + + # Semantic candidates from Qdrant + vector_candidates = self._get_semantic_candidates(query, limit * 2) + candidates.update(vector_candidates) + + # Phase 2: Score all candidates + scored = [] + for event_id, event in candidates.items(): + score = self._score_event( + event, query, query_entities, query_time, weights + ) + scored.append((event, score)) + + # Sort and return top-k + scored.sort(key=lambda x: x[1], reverse=True) + return scored[:limit] + + def _get_entity_candidates( + self, + ghcids: list[str], + event_type: str = None + ) -> dict[str, HeritageEvent]: + """Get events involving specified entities via SPARQL.""" + ghcid_filter = " ".join(f'"{g}"' for g in ghcids) + + sparql = f""" + PREFIX hc: + PREFIX crm: + PREFIX schema: + + SELECT DISTINCT ?event ?eventType ?date ?description ?participant ?role WHERE {{ + ?event a hc:OrganizationalChangeEvent ; + hc:eventType ?eventType ; + hc:eventDate ?date . + OPTIONAL {{ ?event schema:description ?description }} + + ?event ?role ?participant . + FILTER(STRSTARTS(STR(?role), "http://www.cidoc-crm.org/cidoc-crm/P")) + FILTER(?participant IN ({ghcid_filter})) + + {f'FILTER(?eventType = "{event_type}")' if event_type else ''} + }} + """ + + results = self.sparql(sparql) + return self._results_to_events(results) + + def _get_semantic_candidates( + self, + query: str, + limit: int + ) -> dict[str, HeritageEvent]: + """Get events via semantic similarity.""" + results = self.vector_search(query, limit) + + events = {} + for r in results: + event = HeritageEvent( + event_id=r.get("id"), + event_type=r.get("payload", {}).get("event_type", "UNKNOWN"), + event_date=datetime.fromisoformat( + r.get("payload", {}).get("event_date", datetime.now().isoformat()) + ), + participants=r.get("payload", {}).get("participants", {}), + description=r.get("payload", {}).get("description", ""), + confidence=r.get("score", 0.5) + ) + events[event.event_id] = event + + return events + + def _score_event( + self, + event: HeritageEvent, + query: str, + query_entities: list[str], + query_time: datetime, + weights: dict + ) -> float: + """Compute multi-factor relevance score.""" + scores = {} + + # Entity overlap + if query_entities: + event_entities = set(event.participants.values()) + overlap = len(event_entities.intersection(query_entities)) + scores["entity"] = overlap / max(len(query_entities), 1) + else: + scores["entity"] = 0.5 # Neutral + + # Semantic similarity + query_emb = self.embed(query) + if event.embedding: + scores["semantic"] = self._cosine_similarity(query_emb, event.embedding) + else: + # Fall back to description embedding + desc_emb = self.embed(event.description) + scores["semantic"] = self._cosine_similarity(query_emb, desc_emb) + + # Temporal relevance + if query_time and event.event_date: + days_diff = abs((query_time - event.event_date).days) + scores["temporal"] = 1.0 / (1.0 + days_diff / 365.0) + else: + scores["temporal"] = 0.5 # Neutral + + # Graph connectivity (simplified - use SPARQL for full implementation) + scores["graph"] = 0.5 # Placeholder + + # Weighted sum + final_score = sum(weights[k] * scores[k] for k in weights) + return final_score + + def _cosine_similarity(self, a: list[float], b: list[float]) -> float: + """Compute cosine similarity between two vectors.""" + import numpy as np + a_np = np.array(a) + b_np = np.array(b) + return float(np.dot(a_np, b_np) / (np.linalg.norm(a_np) * np.linalg.norm(b_np))) + + def _results_to_events(self, results: list[dict]) -> dict[str, HeritageEvent]: + """Convert SPARQL results to HeritageEvent objects.""" + events = {} + + # Group by event ID + by_event = {} + for row in results: + event_id = row.get("event") + if event_id not in by_event: + by_event[event_id] = { + "event_type": row.get("eventType"), + "date": row.get("date"), + "description": row.get("description", ""), + "participants": {} + } + + role = row.get("role", "").split("/")[-1] # Extract role from URI + participant = row.get("participant") + if role and participant: + by_event[event_id]["participants"][role] = participant + + # Convert to HeritageEvent objects + for event_id, data in by_event.items(): + events[event_id] = HeritageEvent( + event_id=event_id, + event_type=data["event_type"], + event_date=datetime.fromisoformat(data["date"]) if data["date"] else datetime.now(), + participants=data["participants"], + description=data["description"] + ) + + return events +``` + +--- + +## Integration Roadmap + +### Phase 1: Temporal Queries (Week 1-2) + +| Task | File | Status | +|------|------|--------| +| Add temporal SPARQL templates | `data/sparql_templates.yaml` | Ready | +| Add TemporalQueryIntent signature | `dspy_heritage_rag.py` | Ready | +| Add TemporalConflictResolver | `temporal_resolver.py` | Ready | +| Update TemplateClassifier for temporal | `template_sparql.py` | Ready | +| Test with temporal queries | `test_temporal_queries.py` | TODO | + +### Phase 2: Semantic Routing (Week 2-3) + +| Task | File | Status | +|------|------|--------| +| Add SemanticSignalExtractor | `semantic_router.py` | Ready | +| Add SemanticDecisionRouter | `semantic_router.py` | Ready | +| Integrate with HeritageQueryRouter | `dspy_heritage_rag.py` | Ready | +| Add person query routing tests | `test_routing.py` | TODO | + +### Phase 3: Hypergraph Events (Week 3-4) + +| Task | File | Status | +|------|------|--------| +| Add OrganizationalChangeEvent schema | `LinkML modules/` | Ready | +| Create heritage_events Qdrant collection | `scripts/create_collections.py` | TODO | +| Add EventRetriever module | `event_retriever.py` | Ready | +| Index existing change events | `scripts/index_events.py` | TODO | + +--- + +## Testing Strategy + +### 5.1 Temporal Query Tests + +```python +# tests/test_temporal_queries.py + +import pytest +from datetime import datetime + +class TestTemporalQueries: + + def test_point_in_time_query(self, rag_client): + """Test querying institution state at specific date.""" + response = rag_client.query( + "Hoe heette Noord-Hollands Archief in 1990?" + ) + + # Should return pre-merger state + assert "Rijksarchief" in response.answer or "Gemeentearchief" in response.answer + assert response.temporal_context is not None + + def test_event_range_query(self, rag_client): + """Test finding events in time range.""" + response = rag_client.query( + "Welke fusies vonden plaats tussen 2000 en 2010?" + ) + + assert len(response.results) > 0 + assert all( + 2000 <= r.get("year", 0) <= 2010 + for r in response.results + ) + + def test_oldest_institution(self, rag_client): + """Test finding oldest institutions.""" + response = rag_client.query( + "Wat is het oudste archief in Nederland?" + ) + + assert response.answer is not None + assert "founded" in response.metadata or "opgericht" in response.metadata + + +class TestTemporalConflictResolution: + + def test_name_change_resolution(self, resolver): + """Test resolving name changes over time.""" + facts = [ + TemporalFact( + property="name", + value="Gemeentearchief Haarlem", + valid_from=datetime(1900, 1, 1), + valid_to=datetime(2001, 1, 1), + source="TIER_1_AUTHORITATIVE" + ), + TemporalFact( + property="name", + value="Noord-Hollands Archief", + valid_from=datetime(2001, 1, 1), + valid_to=None, + source="TIER_1_AUTHORITATIVE" + ), + ] + + # Query for 1990 should return old name + resolutions = resolver.resolve_conflicts( + "NL-NH-HAR-A-NHA", + facts, + query_date=datetime(1990, 6, 1) + ) + + # No conflict for 1990 - only one fact valid + assert len(resolutions) == 0 +``` + +### 5.2 Routing Tests + +```python +# tests/test_semantic_routing.py + +import pytest + +class TestSemanticRouting: + + def test_person_query_routing(self, router): + """Test that person queries route to persons collection.""" + signals = router.signal_extractor.extract_signals( + "Wie is de directeur van het Rijksmuseum?" + ) + + assert signals.entity_type == "person" + + route = router.decision_router.route(signals) + assert route.qdrant_collection == "heritage_persons" + + def test_institution_query_routing(self, router): + """Test that institution queries route to custodians collection.""" + signals = router.signal_extractor.extract_signals( + "Hoeveel musea zijn er in Amsterdam?" + ) + + assert signals.entity_type == "institution" + assert signals.requires_aggregation == True + + route = router.decision_router.route(signals) + assert route.primary_backend == "ducklake" + + def test_temporal_query_routing(self, router): + """Test that temporal queries use temporal templates.""" + signals = router.signal_extractor.extract_signals( + "Wat waren de oudste archieven in Noord-Holland?" + ) + + assert signals.has_temporal_constraint == True + + route = router.decision_router.route(signals) + assert route.use_temporal_templates == True +``` + +### 5.3 Event Retrieval Tests + +```python +# tests/test_event_retrieval.py + +import pytest +from datetime import datetime + +class TestEventRetrieval: + + def test_entity_based_retrieval(self, event_retriever): + """Test retrieving events by participant GHCID.""" + events = event_retriever.retrieve( + query="mergers involving this archive", + query_entities=["NL-NH-HAR-A-NHA"], + limit=5 + ) + + assert len(events) > 0 + # All events should involve the queried entity + for event, score in events: + participants = set(event.participants.values()) + assert "NL-NH-HAR-A-NHA" in participants or any( + "HAR" in p for p in participants + ) + + def test_temporal_scoring(self, event_retriever): + """Test that temporal relevance affects scoring.""" + events_2001 = event_retriever.retrieve( + query="archive merger", + query_time=datetime(2001, 6, 1), + limit=10 + ) + + events_1990 = event_retriever.retrieve( + query="archive merger", + query_time=datetime(1990, 6, 1), + limit=10 + ) + + # Events from 2001 should score higher for 2001 query + # This tests temporal relevance scoring + assert events_2001[0][1] != events_1990[0][1] +``` + +--- + +## References + +1. `01_graphrag_design_patterns.md` - Core pattern documentation +2. `02_comparison_matrix.md` - Pattern comparison +3. `03_implementation_guide.md` - DSPy integration patterns +4. DSPy Documentation - https://dspy-docs.vercel.app/ +5. CIDOC-CRM Documentation - https://cidoc-crm.org/ +6. Qdrant Documentation - https://qdrant.tech/documentation/ diff --git a/frontend/public/schemas/20251121/linkml/01_custodian_name_modular.yaml b/frontend/public/schemas/20251121/linkml/01_custodian_name_modular.yaml index aee8e5bdec..9a59321e55 100644 --- a/frontend/public/schemas/20251121/linkml/01_custodian_name_modular.yaml +++ b/frontend/public/schemas/20251121/linkml/01_custodian_name_modular.yaml @@ -164,10 +164,10 @@ imports: - modules/slots/managing_unit - modules/slots/managed_collections - # Enums (12 files - added CustodianPrimaryTypeEnum + EncompassingBodyTypeEnum) + # Enums (11 files - CustodianPrimaryTypeEnum ARCHIVED per Rule 9: Enum-to-Class Promotion) + # See: schemas/20251121/linkml/archive/enums/CustodianPrimaryTypeEnum.yaml.archived_20260105 - modules/enums/AgentTypeEnum - modules/enums/AppellationTypeEnum - - modules/enums/CustodianPrimaryTypeEnum - modules/enums/EncompassingBodyTypeEnum - modules/enums/EntityTypeEnum - modules/enums/LegalStatusEnum @@ -423,6 +423,102 @@ imports: - modules/classes/WebArchive - modules/classes/WomensArchives + # Archive RecordSetTypes - concrete subclasses of rico:RecordSetType (v0.9.12) + # These define the types of record sets held by each archive type + # Updated: all 92 archive types now have RecordSetTypes files + - modules/classes/AcademicArchiveRecordSetTypes + - modules/classes/AdvertisingRadioArchiveRecordSetTypes + - modules/classes/AnimalSoundArchiveRecordSetTypes + - modules/classes/ArchitecturalArchiveRecordSetTypes + - modules/classes/ArchiveOfInternationalOrganizationRecordSetTypes + - modules/classes/ArchivesForBuildingRecordsRecordSetTypes + - modules/classes/ArchivesRegionalesRecordSetTypes + - modules/classes/ArtArchiveRecordSetTypes + - modules/classes/AudiovisualArchiveRecordSetTypes + - modules/classes/BankArchiveRecordSetTypes + - modules/classes/CantonalArchiveRecordSetTypes + - modules/classes/CathedralArchiveRecordSetTypes + - modules/classes/ChurchArchiveRecordSetTypes + - modules/classes/ChurchArchiveSwedenRecordSetTypes + - modules/classes/ClimateArchiveRecordSetTypes + - modules/classes/CollectingArchivesRecordSetTypes + - modules/classes/ComarcalArchiveRecordSetTypes + - modules/classes/CommunityArchiveRecordSetTypes + - modules/classes/CompanyArchiveRecordSetTypes + - modules/classes/CurrentArchiveRecordSetTypes + - modules/classes/CustodianArchiveRecordSetTypes + - modules/classes/DarkArchiveRecordSetTypes + - modules/classes/DepartmentalArchivesRecordSetTypes + - modules/classes/DepositArchiveRecordSetTypes + - modules/classes/DigitalArchiveRecordSetTypes + - modules/classes/DimArchivesRecordSetTypes + - modules/classes/DiocesanArchiveRecordSetTypes + - modules/classes/DistrictArchiveGermanyRecordSetTypes + - modules/classes/DistritalArchiveRecordSetTypes + - modules/classes/EconomicArchiveRecordSetTypes + - modules/classes/FilmArchiveRecordSetTypes + - modules/classes/FoundationArchiveRecordSetTypes + - modules/classes/FreeArchiveRecordSetTypes + - modules/classes/FrenchPrivateArchivesRecordSetTypes + - modules/classes/GovernmentArchiveRecordSetTypes + - modules/classes/HistoricalArchiveRecordSetTypes + - modules/classes/HospitalArchiveRecordSetTypes + - modules/classes/HouseArchiveRecordSetTypes + - modules/classes/IconographicArchivesRecordSetTypes + - modules/classes/InstitutionalArchiveRecordSetTypes + - modules/classes/JointArchivesRecordSetTypes + - modules/classes/LGBTArchiveRecordSetTypes + - modules/classes/LightArchivesRecordSetTypes + - modules/classes/LiteraryArchiveRecordSetTypes + - modules/classes/LocalGovernmentArchiveRecordSetTypes + - modules/classes/LocalHistoryArchiveRecordSetTypes + - modules/classes/MailingListArchiveRecordSetTypes + - modules/classes/MediaArchiveRecordSetTypes + - modules/classes/MilitaryArchiveRecordSetTypes + - modules/classes/MonasteryArchiveRecordSetTypes + - modules/classes/MunicipalArchiveRecordSetTypes + - modules/classes/MuseumArchiveRecordSetTypes + - modules/classes/MusicArchiveRecordSetTypes + - modules/classes/NationalArchivesRecordSetTypes + - modules/classes/NewspaperClippingsArchiveRecordSetTypes + - modules/classes/NobilityArchiveRecordSetTypes + - modules/classes/NotarialArchiveRecordSetTypes + - modules/classes/OnlineNewsArchiveRecordSetTypes + - modules/classes/ParishArchiveRecordSetTypes + - modules/classes/ParliamentaryArchivesRecordSetTypes + - modules/classes/PartyArchiveRecordSetTypes + - modules/classes/PerformingArtsArchiveRecordSetTypes + - modules/classes/PhotoArchiveRecordSetTypes + - modules/classes/PoliticalArchiveRecordSetTypes + - modules/classes/PostcustodialArchiveRecordSetTypes + - modules/classes/PressArchiveRecordSetTypes + - modules/classes/ProvincialArchiveRecordSetTypes + - modules/classes/ProvincialHistoricalArchiveRecordSetTypes + - modules/classes/PublicArchiveRecordSetTypes + - modules/classes/PublicArchivesInFranceRecordSetTypes + - modules/classes/RadioArchiveRecordSetTypes + - modules/classes/RegionalArchiveRecordSetTypes + - modules/classes/RegionalArchivesInIcelandRecordSetTypes + - modules/classes/RegionalEconomicArchiveRecordSetTypes + - modules/classes/RegionalStateArchivesRecordSetTypes + - modules/classes/ReligiousArchiveRecordSetTypes + - modules/classes/SchoolArchiveRecordSetTypes + - modules/classes/ScientificArchiveRecordSetTypes + - modules/classes/SectorOfArchivesInSwedenRecordSetTypes + - modules/classes/SecurityArchivesRecordSetTypes + - modules/classes/SoundArchiveRecordSetTypes + - modules/classes/SpecializedArchiveRecordSetTypes + - modules/classes/SpecializedArchivesCzechiaRecordSetTypes + - modules/classes/StateArchivesRecordSetTypes + - modules/classes/StateArchivesSectionRecordSetTypes + - modules/classes/StateDistrictArchiveRecordSetTypes + - modules/classes/StateRegionalArchiveCzechiaRecordSetTypes + - modules/classes/TelevisionArchiveRecordSetTypes + - modules/classes/TradeUnionArchiveRecordSetTypes + - modules/classes/UniversityArchiveRecordSetTypes + - modules/classes/WebArchiveRecordSetTypes + - modules/classes/WomensArchivesRecordSetTypes + # New slots for registration info - modules/slots/country - modules/slots/description @@ -468,6 +564,9 @@ imports: - modules/slots/is_legal_status_of - modules/slots/has_derived_observation - modules/slots/offers_donation_schemes + + # Rico:isOrWasHolderOf relationship slot (links custodians to record set types) + - modules/slots/holds_record_set_types comments: - "HYPER-MODULAR STRUCTURE: Direct imports of all component files" @@ -476,7 +575,7 @@ comments: - "Namespace structure: https://nde.nl/ontology/hc/{class|enum|slot}/[Name]" - "Total components: 44 classes + 12 enums + 102 slots = 158 definition files" - "Legal entity classes (5): LegalEntityType, LegalForm, LegalName, RegistrationInfo (4 classes within), total 8 classes" - - "Type classification: CustodianType (base) + specialized subclasses (ArchiveOrganizationType, MuseumType, LibraryType, GalleryType, ResearchOrganizationType, OfficialInstitutionType, BioCustodianType, EducationProviderType) + CustodianPrimaryTypeEnum (19 types)" + - "Type classification: CustodianType (base) + 19 specialized subclasses (ArchiveOrganizationType, MuseumType, LibraryType, GalleryType, ResearchOrganizationType, OfficialInstitutionType, BioCustodianType, EducationProviderType, HeritageSocietyType, FeatureCustodianType, IntangibleHeritageGroupType, PersonalCollectionType, HolySacredSiteType, DigitalPlatformType, NonProfitType, TasteScentHeritageType, CommercialOrganizationType, MixedCustodianType, UnspecifiedType)" - "Specialized types: ArchiveOrganizationType (144 Wikidata), MuseumType (187), LibraryType (60), GalleryType (78), ResearchOrganizationType (44), OfficialInstitutionType (50+), BioCustodianType (1,393 Wikidata), EducationProviderType (60+ Wikidata) with domain-specific slots" - "Collection aspect: CustodianCollection with 10 collection-specific slots (added managing_unit in v0.7.0, managed_by_cms in v0.8.9)" - "Organizational aspect: OrganizationalStructure with 7 unit-specific slots (staff_members, managed_collections)" diff --git a/frontend/public/schemas/20251121/linkml/archive/enums/ArchiveTypeEnum.yaml.archived_20250105 b/frontend/public/schemas/20251121/linkml/archive/enums/ArchiveTypeEnum.yaml.archived_20250105 new file mode 100644 index 0000000000..0f7bfeb4c9 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/archive/enums/ArchiveTypeEnum.yaml.archived_20250105 @@ -0,0 +1,922 @@ +id: https://nde.nl/ontology/hc/enum/ArchiveTypeEnum +name: ArchiveTypeEnum +title: Archive Type Classification +description: 'Types of archives extracted from Wikidata hyponyms of Q166118 (archive). + + + Generated: 2025-12-01T16:01:19Z + + Total values: 144' +enums: + ArchiveTypeEnum: + permissible_values: + ACADEMIC_ARCHIVE: + description: archive of a higher education institution + meaning: wikidata:Q27032435 + comments: + - Hochschularchiv (de) + - archivo académico (es) + - archives académiques (fr) + ADVERTISING_RADIO_ARCHIVE: + description: sound archive with advertising radio productions + meaning: wikidata:Q60658673 + comments: + - Werbefunkarchiv (de) + - Archives radiophoniques publicitaires (fr) + - Archivio radio pubblicitaria (it) + ANIMAL_SOUND_ARCHIVE: + description: collection of animal sound recordings + meaning: wikidata:Q18574935 + comments: + - Tierstimmenarchiv (de) + - Archives de voix d'animaux (fr) + - Archivio vocale degli animali (it) + ARCHITECTURAL_ARCHIVE: + description: archive that safeguards architectural heritage + meaning: wikidata:Q121409581 + comments: + - Architekturarchiv (de) + - archives architecturales (fr) + - architectonisch archief (nl) + ARCHIVAL_LIBRARY: + description: library of an archive + meaning: wikidata:Q25504402 + comments: + - Archivbibliothek (de) + - biblioteca de archivo (es) + - bibliothèque liée à une institution conservant des archives (fr) + ARCHIVAL_REPOSITORY: + description: digital repository for archival purposes + meaning: wikidata:Q66656823 + comments: + - Archivierungsstelle (de) + - repositorio (es) + ARCHIVE: + description: agency or institution responsible for the preservation and communication of records + selected for permanent preservation + meaning: wikidata:Q166118 + comments: + - Archiv (de) + - archivo (es) + - archives (fr) + ARCHIVE_ASSOCIATION: + description: Booster, history and heritage societies for archival institutions + meaning: wikidata:Q130427366 + comments: + - Archivverein (de) + - Association des amis des archives (fr) + ARCHIVE_NETWORK: + description: consortium among archives for co-operation + meaning: wikidata:Q96636857 + comments: + - Archivverbund (de) + - rete di archivi (it) + ARCHIVE_OF_AN_INTERNATIONAL_ORGANIZATION: + description: archive of an inter-governmental organization or of an international umbrella organization + meaning: wikidata:Q27031014 + comments: + - Archiv einer internationalen Organisation (de) + - archives d'une organisation internationale (fr) + ARCHIVES_FOR_BUILDING_RECORDS: + description: Public archives for building records or construction documents + meaning: wikidata:Q136027937 + comments: + - Bauaktenarchiv (de) + ARCHIVES_RÉGIONALES: + description: archives régionales (Q2860567) + meaning: wikidata:Q2860567 + comments: + - Regionsarchiv (Frankreich) (de) + - archives régionales (fr) + ART_ARCHIVE: + description: specialized archive + meaning: wikidata:Q27032254 + comments: + - Kunstarchiv (de) + - archivo de arte (es) + - archives artistiques (fr) + ASSOCIATION_ARCHIVE: + description: association archive (Q27030820) + meaning: wikidata:Q27030820 + comments: + - Verbandsarchiv (de) + - archivo de asociación (es) + - archives associatives (fr) + AUDIOVISUAL_ARCHIVE: + description: archive that contains audio-visual materials + meaning: wikidata:Q27030766 + comments: + - audio-visuelles Archiv (de) + - archivo audiovisual (es) + - archive audiovisuelle (fr) + BANK_ARCHIVE: + description: bank archive (Q52718263) + meaning: wikidata:Q52718263 + comments: + - Bankarchiv (de) + - archivo bancario (es) + - archives bancaires (fr) + BILDSTELLE: + description: German institutions that build and manage collections of visual media for teaching + and research + meaning: wikidata:Q861125 + comments: + - Bildstelle (de) + BRANCH: + description: local subdivision of an organization + meaning: wikidata:Q232846 + comments: + - Zweigniederlassung (de) + - branche (fr) + BRANCH_OFFICE: + description: outlet of an organization or a company that – unlike a subsidiary – does not constitute + a separate legal entity, while being physically separated from the organization's main office + meaning: wikidata:Q1880737 + comments: + - Filiale (de) + - sucursal (es) + - succursale (fr) + CANTONAL_ARCHIVE: + description: state archives of one of the cantons of Switzerland + meaning: wikidata:Q2860410 + comments: + - Kantonsarchiv (de) + - archivo cantonal (es) + - archives cantonales (fr) + CAST_COLLECTION: + description: art-historical or archeological collection, usually for education, where copies, + usually of gypsum, of art works are collected and shown + meaning: wikidata:Q29380643 + comments: + - Abgusssammlung (de) + - Afgietsel verzameling (nl) + CATHEDRAL_ARCHIVE: + description: cathedral archive (Q132201761) + meaning: wikidata:Q132201761 + comments: + - archivo catedralicio (es) + CHURCH_ARCHIVE: + description: archive for church books about a parish + meaning: wikidata:Q64166606 + comments: + - Kirchenarchiv (Schweden) (de) + - archives paroissiales (fr) + - kerkarchief (nl) + CHURCH_ARCHIVE_1: + description: archive kept by a church or ecclesiastical organisation + meaning: wikidata:Q2877653 + comments: + - Kirchenarchiv (de) + - archivo eclesiástico (es) + - archives ecclésiastiques (fr) + CINEMATHEQUE: + description: organisation responsible for preserving and restoring cinematographic heritage + meaning: wikidata:Q1352795 + comments: + - Kinemathek (de) + - filmoteca (es) + - cinémathèque (fr) + CLIMATE_ARCHIVE: + description: archive that provides information about the climatic past + meaning: wikidata:Q1676725 + comments: + - Klimaarchiv (de) + CLOSED_SPACE: + description: an abstract space with borders + meaning: wikidata:Q78642244 + comments: + - geschlossener Raum (de) + - espacio cerrado (es) + - spazio chiuso (it) + COLLECTING_ARCHIVES: + description: archive that collects materials from multiple sources + meaning: wikidata:Q117246276 + COMARCAL_ARCHIVE: + description: comarcal archive (Q21086734) + meaning: wikidata:Q21086734 + comments: + - Bezirksarchiv (Katalonien) (de) + - archivo comarcal (es) + COMMUNITY_ARCHIVE: + description: archive created by individuals and community groups who desire to document their + cultural heritage + meaning: wikidata:Q25105971 + comments: + - Gemeinschaftsarchiv (de) + - archivo comunitario (es) + - archives communautaires (fr) + COMPANY_ARCHIVES: + description: organizational entity that keeps or archives fonds of a company + meaning: wikidata:Q10605195 + comments: + - Unternehmensarchiv (de) + - archivo empresarial (es) + - archives d'entreprise (fr) + CONSERVATÓRIA: + description: Conservatória (Q9854379) + meaning: wikidata:Q9854379 + COUNTY_RECORD_OFFICE: + description: local authority repository + meaning: wikidata:Q5177943 + comments: + - archivio pubblico territoriale (it) + COURT_RECORDS: + description: court records (Q11906844) + meaning: wikidata:Q11906844 + comments: + - Justizarchiv (de) + - archivo judicial (es) + - archives judiciaires (fr) + CULTURAL_INSTITUTION: + description: organization that works for the preservation or promotion of culture + meaning: wikidata:Q3152824 + comments: + - kulturelle Organisation (de) + - institución cultural (es) + - institution culturelle (fr) + CURRENT_ARCHIVE: + description: type of archive + meaning: wikidata:Q3621648 + comments: + - archivo corriente (es) + - archive courante (fr) + - archivio corrente (it) + DARK_ARCHIVE: + description: collection of materials preserved for future use but with no current access + meaning: wikidata:Q112796578 + comments: + - Dark Archive (de) + DEPARTMENT: + description: office within an organization + meaning: wikidata:Q2366457 + comments: + - Abteilung (de) + - departamento (es) + - service (fr) + DEPARTMENTAL_ARCHIVES: + description: departmental archives in France + meaning: wikidata:Q2860456 + comments: + - Département-Archiv (de) + - archivos departamentales (es) + - archives départementales (fr) + DEPOSIT_ARCHIVE: + description: part of an archive + meaning: wikidata:Q244904 + comments: + - Zwischenarchiv (de) + - archivo de depósito (es) + - archive intermédiaire (fr) + DIGITAL_ARCHIVE: + description: information system whose aim is to collect different digital resources and to make + them available to a defined group of users + meaning: wikidata:Q1224984 + comments: + - digitales Archiv (de) + - archivo digital (es) + - archives numériques (fr) + DIM_ARCHIVES: + description: archive with only limited access + meaning: wikidata:Q112796779 + comments: + - Dim Archive (de) + DIOCESAN_ARCHIVE: + description: archive of a bishopric + meaning: wikidata:Q11906839 + comments: + - Bischöfliches Archiv (de) + - archivo diocesano (es) + - archives diocésaines (fr) + DISTRICT_ARCHIVE_GERMANY: + description: Archive type in Germany + meaning: wikidata:Q130757255 + comments: + - Kreisarchiv (de) + DISTRITAL_ARCHIVE: + description: distrital archives in Portugal + meaning: wikidata:Q10296259 + comments: + - Bezirksarchiv (Portugal) (de) + DIVISION: + description: distinct and large part of an organization + meaning: wikidata:Q334453 + comments: + - Abteilung (de) + - división (es) + - division (fr) + DOCUMENTATION_CENTRE: + description: organisation that deals with documentation + meaning: wikidata:Q2945282 + comments: + - Dokumentationszentrum (de) + - centro de documentación (es) + - centre de documentation (fr) + ECONOMIC_ARCHIVE: + description: archive documenting the economic history of a country, region etc. + meaning: wikidata:Q27032167 + comments: + - Wirtschaftsarchiv (de) + - archivo económico (es) + - archives économiques (fr) + FILM_ARCHIVE: + description: archive that safeguards film heritage + meaning: wikidata:Q726929 + comments: + - Filmarchiv (de) + - archivo fílmico (es) + - archives cinématographiques (fr) + FOUNDATION_ARCHIVE: + description: foundation archive (Q27030827) + meaning: wikidata:Q27030827 + comments: + - Stiftungsarchiv (de) + - archivo de fundación (es) + FREE_ARCHIVE: + description: Archive that preserves documents on the history of a social movement + meaning: wikidata:Q635801 + comments: + - freies Archiv (de) + - archivio libero (it) + FRENCH_PRIVATE_ARCHIVES: + description: non-public archives in France + meaning: wikidata:Q2860565 + comments: + - Privatarchiv (Frankreich) (de) + - archives privées en France (fr) + FYLKESARKIV: + description: fylkesarkiv (Q15119463) + meaning: wikidata:Q15119463 + FÖREMÅLSARKIV: + description: Föremålsarkiv (Q10501208) + meaning: wikidata:Q10501208 + GLAM: + description: acronym for "galleries, libraries, archives, and museums" that refers to cultural + institutions that have access to knowledge as their mission + meaning: wikidata:Q1030034 + comments: + - GLAM (de) + - GLAM (es) + - GLAM (fr) + GOVERNMENT_ARCHIVE: + description: official archive of a government + meaning: wikidata:Q119712417 + comments: + - Staatsarchiv (de) + - archivos gubernamentales (es) + - archives gouvernementales (fr) + HISTORICAL_ARCHIVE: + description: historical archive (Q3621673) + meaning: wikidata:Q3621673 + comments: + - Historisches Archiv (de) + - archivo histórico (es) + - archive historique (fr) + HOSPITAL_ARCHIVE: + description: hospital archive (Q17301917) + meaning: wikidata:Q17301917 + comments: + - Krankenhausarchiv (de) + - archivo hospitalario (es) + - archives hospitalières (fr) + HOUSE_ARCHIVE: + description: archive containing documents and letters that concern a family + meaning: wikidata:Q4344572 + comments: + - Familienarchiv (de) + - archivo familiar (es) + - archives familiales (fr) + ICONOGRAPHIC_ARCHIVES: + description: archives containing predominantly pictorial materials + meaning: wikidata:Q117810712 + INSTITUTION: + description: structure or mechanism of social order and cooperation governing the behaviour of + a set of individuals within a given community + meaning: wikidata:Q178706 + comments: + - Institution (de) + - institución (es) + - institution sociale (fr) + INSTITUTIONAL_ARCHIVE: + description: repository that holds records created or received by its parent institution + meaning: wikidata:Q124762372 + comments: + - Institutionsarchiv (de) + - archivo institucional (es) + INSTITUTIONAL_REPOSITORY: + description: archive of publications by an institution's staff + meaning: wikidata:Q1065413 + comments: + - Instituts-Repository (de) + - repositorio institucional (es) + - dépôt institutionnel (fr) + JOINT_ARCHIVES: + description: archive containing records or two or more entities + meaning: wikidata:Q117442301 + comments: + - Gemeinsames Archiv (de) + KUSTODIE: + description: Archives and administration of art collections in higher educational institutions + meaning: wikidata:Q58482422 + comments: + - Kustodie (de) + LANDSARKIV: + description: Landsarkiv (Q16324008) + meaning: wikidata:Q16324008 + comments: + - Landesarchiv (de) + LGBT_ARCHIVE: + description: archive related to LGBT topics + meaning: wikidata:Q61710689 + comments: + - LGBT-Archiv (de) + - archivo LGBT (es) + - archives LGBT (fr) + LIGHT_ARCHIVES: + description: repository whose holdings are broadly accessible + meaning: wikidata:Q112815447 + comments: + - Light Archive (de) + LITERARY_ARCHIVE: + description: archive for literary works + meaning: wikidata:Q28607652 + comments: + - Literaturarchiv (de) + - archivo literario (es) + - archives littéraires (fr) + LOCAL_GOVERNMENT_ARCHIVE: + description: archive of records belonging to a local government + meaning: wikidata:Q118281267 + comments: + - Kommunalarchiv (de) + LOCAL_HERITAGE_INSTITUTION_IN_SWEDEN: + description: a Swedish type of local history and cultural heritage museums + meaning: wikidata:Q10520688 + comments: + - Heimatmuseen in Schweden (de) + - Hembygdsgård (nl) + LOCAL_HISTORY_ARCHIVE: + description: archive dealing with local history + meaning: wikidata:Q12324798 + comments: + - Lokalarchiv (de) + - archivo de historia local (es) + - archives d'histoire locale (fr) + LOCATION_LIBRARY: + description: a collection of visual and references information of locations, or places that might + be used for filming or photography. + meaning: wikidata:Q6664811 + comments: + - biblioteca de localizaciones (es) + MAILING_LIST_ARCHIVE: + description: mailing list archive (Q104018626) + meaning: wikidata:Q104018626 + comments: + - Archiv der Mailingliste (de) + - archive de la liste de diffusion (fr) + - archief van mailinglijst (nl) + MEDIA_ARCHIVE: + description: media archive (Q116809817) + meaning: wikidata:Q116809817 + comments: + - Medienarchiv (de) + - archives de médias (fr) + - media-achief (nl) + MEDIENZENTRUM: + description: Medienzentrum (Q1284615) + meaning: wikidata:Q1284615 + comments: + - Medienzentrum (de) + MEMORY_INSTITUTION: + description: institution which has curatorial care over a collection and whose mission it is to + preserve the collection for future generations + meaning: wikidata:Q1497649 + comments: + - Gedächtnisinstitution (de) + - institución del patrimonio (es) + - institution patrimoniale (fr) + MILITARY_ARCHIVE: + description: archive for documents regarding military topics + meaning: wikidata:Q1934883 + comments: + - Militärarchiv (de) + - archivo militar (es) + - archive militaire (fr) + MONASTERY_ARCHIVE: + description: archive of a monastery + meaning: wikidata:Q27030561 + comments: + - Klosterarchiv (de) + - archivo monástico (es) + MUNICIPAL_ARCHIVE: + description: accumulation of historical records of a town or city + meaning: wikidata:Q604177 + comments: + - Stadt- oder Gemeindearchiv (de) + - archivo municipal (es) + - archives communales (fr) + MUSEUM_ARCHIVE: + description: archive established by a museum to collect, organize, preserve, and provide access + to its organizational records + meaning: wikidata:Q53566456 + comments: + - Museumsarchiv (de) + - archivo de museo (es) + - museumarchief (nl) + MUSIC_ARCHIVE: + description: archive of musical recordings and documents + meaning: wikidata:Q53759838 + comments: + - Musikarchiv (de) + - archivo musical (es) + - archives musicales (fr) + NACHLASS: + description: collection of manuscripts, notes, correspondence, and so on left behind when a scholar + or an artist dies + meaning: wikidata:Q3827332 + comments: + - Nachlass (de) + - Nachlass (es) + - archives formées du legs (fr) + NATIONAL_ARCHIVES: + description: archives of a country + meaning: wikidata:Q2122214 + comments: + - Nationalarchiv (de) + - archivo nacional (es) + - archives nationales (fr) + NATIONAL_TREASURE: + description: treasure or artifact that is regarded as emblematic as a nation's cultural heritage, + identity or significance + meaning: wikidata:Q60606520 + NATIONAL_TREASURE_OF_FRANCE: + description: designation for entities of cultural significance in France + meaning: wikidata:Q2986426 + comments: + - trésor national (fr) + NEWSPAPER_CLIPPINGS_ARCHIVE: + description: archive of press clippings, organized by topics + meaning: wikidata:Q65651503 + comments: + - Zeitungsausschnittsarchiv (de) + - archivo de recortes de periódicos (es) + - tijdschriftenknipselarchief (nl) + NOBILITY_ARCHIVE: + description: collection of historical documents and information about members of the nobility + meaning: wikidata:Q355358 + comments: + - Adelsarchiv (de) + - archivo nobiliario (es) + - archive de noblesse (fr) + NOTARIAL_ARCHIVE: + description: type of archive housing notarial records + meaning: wikidata:Q8203685 + comments: + - Notariatsarchiv (de) + - archivo notarial (es) + - archives notariales (fr) + ONLINE_NEWS_ARCHIVE: + description: archive of newspapers, magazines and other periodicals that can be consulted online + meaning: wikidata:Q2001867 + comments: + - Zeitungsbank (de) + - archivo de periódicos (es) + - archives de journaux (fr) + ORGANIZATION: + description: social entity established to meet needs or pursue goals + meaning: wikidata:Q43229 + comments: + - Organisation (de) + - organización (es) + - organisation (fr) + ORGANIZATIONAL_SUBDIVISION: + description: organization that is a part of a larger organization + meaning: wikidata:Q9261468 + comments: + - Untereinheit (de) + - subdivisión organizacional (es) + - sous-division organisationnelle (fr) + PARENT_ORGANIZATIONUNIT: + description: organization that has a subsidiary unit, e.g. for companies, which owns enough voting + stock in another firm to control management and operations + meaning: wikidata:Q1956113 + comments: + - Mutterunternehmen (de) + - organización matriz (es) + - société mère (fr) + PARISH_ARCHIVE: + description: parish archive (Q34544468) + meaning: wikidata:Q34544468 + comments: + - Pfarrarchiv (de) + - archivo parroquial (es) + - archivio parrocchiale (it) + PARLIAMENTARY_ARCHIVES: + description: political archives + meaning: wikidata:Q53251146 + comments: + - Parlamentsarchiv (de) + - archivo parlamentario (es) + - archives parlementaires (fr) + PARTY_ARCHIVE: + description: subclass of political archive + meaning: wikidata:Q53252161 + comments: + - Parteiarchiv (de) + - archivo de partido político (es) + PERFORMING_ARTS_ARCHIVE: + description: performing arts archive (Q27030945) + meaning: wikidata:Q27030945 + comments: + - Archiv für darstellende Kunst (de) + - archives des arts de la scène (fr) + PERSON_OR_ORGANIZATION: + description: class of agents + meaning: wikidata:Q106559804 + comments: + - Person oder Organisation (de) + - persona u organización (es) + - personne ou organisation (fr) + PERSONAL_LIBRARY: + description: the private library collection of an individual + meaning: wikidata:Q106402388 + comments: + - Autorenbibliothek (de) + - biblioteca de autor (es) + - bibliothèque personnelle (fr) + PERSONENSTANDSARCHIV: + description: Personenstandsarchiv (Q2072394) + meaning: wikidata:Q2072394 + comments: + - Personenstandsarchiv (de) + PHOTO_ARCHIVE: + description: physical image collection + meaning: wikidata:Q27032363 + comments: + - Fotoarchiv (de) + - archivo fotográfico (es) + - archive photographique (fr) + PHOTOGRAPH_COLLECTION: + description: photograph collection (Q130486108) + meaning: wikidata:Q130486108 + comments: + - Fotosammlung (de) + - colección de fotografías (es) + - collection de photographies (fr) + POLITICAL_ARCHIVE: + description: political archive (Q27030921) + meaning: wikidata:Q27030921 + comments: + - Politikarchiv (de) + - archivo político (es) + POSTCUSTODIAL_ARCHIVE: + description: postcustodial archive (Q124223197) + meaning: wikidata:Q124223197 + PRESS_ARCHIVE: + description: collection of press, newspaper materials and content + meaning: wikidata:Q56650887 + comments: + - Pressearchiv (de) + - archivo periodístico (es) + - archives de presse (fr) + PRINT_ROOM: + description: collection of prints, and sometimes drawings, watercolours and photographs + meaning: wikidata:Q445396 + comments: + - Kupferstichkabinett (de) + - gabinete de estampas (es) + - cabinet des estampes (fr) + PROVINCIAL_ARCHIVE: + description: provincial archive (Q5403345) + meaning: wikidata:Q5403345 + comments: + - Provinzarchiv (de) + PROVINCIAL_HISTORICAL_ARCHIVE: + description: type of local archive + meaning: wikidata:Q21087388 + comments: + - Historisches Provinzarchiv (Katalonien) (de) + - archivo histórico provincial (es) + PUBLIC_ARCHIVE: + description: repository for official documents + meaning: wikidata:Q27031009 + comments: + - Öffentliches Archiv (de) + - archivo público (es) + - archives publiques (fr) + PUBLIC_ARCHIVES_IN_FRANCE: + description: Type of archives in France + meaning: wikidata:Q2421452 + comments: + - Öffentliches Archiv (de) + - archives publiques en France (fr) + PUBLIC_SPACE: + description: places for public use + meaning: wikidata:Q294440 + comments: + - öffentlicher Raum (de) + - espacio público (es) + - espace public (fr) + RADIO_ARCHIVE: + description: radio archive (Q109326271) + meaning: wikidata:Q109326271 + comments: + - Radioarchiv (de) + - archivo radiofónico (es) + - archives radiophoniques (fr) + REGIONAL_ARCHIVE: + description: archive with a regional scope + meaning: wikidata:Q27032392 + comments: + - Regionalarchiv (de) + - archivo regional (es) + - archives régionales (fr) + REGIONAL_ARCHIVES_IN_ICELAND: + description: regional archives in Iceland (Q16428785) + meaning: wikidata:Q16428785 + comments: + - Regionalarchiv (Island) (de) + REGIONAL_ECONOMIC_ARCHIVE: + description: archive documenting the economic history of a region + meaning: wikidata:Q2138319 + comments: + - regionales Wirtschaftsarchiv (de) + - archivo económico regional (es) + REGIONAL_HISTORIC_CENTER: + description: name for archives in the Netherlands + meaning: wikidata:Q1882512 + comments: + - Regionalhistorisches Zentrum (de) + - centre régional historique (fr) + - Regionaal Historisch Centrum (nl) + REGIONAL_STATE_ARCHIVES: + description: regional state archives in Sweden + meaning: wikidata:Q8727648 + comments: + - Provinzarchiv (de) + - archivo regional (es) + - archives régionales (fr) + RELIGIOUS_ARCHIVE: + description: accumulation of records of a religious denomination or society + meaning: wikidata:Q85545753 + comments: + - Religionsarchiv (de) + - archivo religioso (es) + SCHOOL_ARCHIVE: + description: school archive (Q27030883) + meaning: wikidata:Q27030883 + comments: + - Schularchiv (de) + - archivo escolar (es) + - archives scolaires (fr) + SCIENTIFIC_ARCHIVE: + description: archive created for academic purposes + meaning: wikidata:Q27032095 + comments: + - Forschungsarchiv (de) + - archives scientifiques (fr) + SCIENTIFIC_TECHNIC_AND_INDUSTRIAL_CULTURE_CENTER: + description: popular science place in France + meaning: wikidata:Q2945276 + comments: + - centre de culture scientifique, technique et industrielle (fr) + - centro di cultura scientifica, tecnica e industriale (it) + - wetenschappelijk, technisch en industrieel cultuurcentrum (nl) + SECTOR_OF_ARCHIVES_IN_SWEDEN: + description: sector of archives + meaning: wikidata:Q84171278 + comments: + - Archivwesen in Schweden (de) + SECURITY_ARCHIVES: + description: type of archives in Czechia + meaning: wikidata:Q101475797 + SOCIAL_SPACE: + description: physical or virtual space such as a social center, online social media, or other + gathering place where people gather and interact + meaning: wikidata:Q4430275 + comments: + - sozialer Raum (de) + - espacio social (es) + - espace social (fr) + SOUND_ARCHIVE: + description: collection of sounds + meaning: wikidata:Q2230431 + comments: + - Schallarchiv (de) + - fonoteca (es) + - phonothèque (fr) + SPECIAL_COLLECTION: + description: library or library unit that houses materials requiring specialized security and + user services or whose relation (period, subject, etc.) is to be preserved + meaning: wikidata:Q4431094 + comments: + - Spezialsammlung (de) + - colección especial (es) + - fonds spéciaux (fr) + SPECIALIZED_ARCHIVE: + description: archive specialized in a specific field + meaning: wikidata:Q27030941 + comments: + - Facharchiv (de) + - archivo especial (es) + - archives spécialisées (fr) + SPECIALIZED_ARCHIVES: + description: type of archives in Czechia + meaning: wikidata:Q101470010 + comments: + - archivo especializado (es) + - archives spécialisées (fr) + STATE_ARCHIVES: + description: archive of a state + meaning: wikidata:Q52341833 + comments: + - Staatsarchiv (de) + - archivo estatal (es) + - archives de l'État (fr) + STATE_ARCHIVES_SECTION: + description: section of a national archive in Italy + meaning: wikidata:Q44796387 + comments: + - Staatsarchiv-Abteilung (de) + - sezione di archivio di Stato (it) + - sectie staatsarchief (nl) + STATE_DISTRICT_ARCHIVE: + description: Archive type in the Czech Republic + meaning: wikidata:Q53131316 + comments: + - Bezirksarchiv (Tschechien) (de) + STATE_REGIONAL_ARCHIVE_CZECHIA: + description: state regional archive (Czechia) (Q53130134) + meaning: wikidata:Q53130134 + SUBSIDIARY_ORGANIZATION: + description: entity or organization administered by a larger entity or organization + meaning: wikidata:Q62079110 + comments: + - Tochterorganisation (de) + - entidad subsidiaria (es) + - entité subsidiaire (fr) + TELEVISION_ARCHIVE: + description: a collection of television programs, recordings, and broadcasts + meaning: wikidata:Q109326243 + comments: + - Fernseharchiv (de) + - archivo de televisión (es) + - archives télévisuelles (fr) + TENTATIVE_WORLD_HERITAGE_SITE: + description: Wikimedia list article + meaning: wikidata:Q1459900 + comments: + - Tentativliste (de) + - lista indicativa del Patrimonio de la Humanidad (es) + - liste indicative du patrimoine mondial (fr) + TRADE_UNION_ARCHIVE: + description: archive formed by the documentation of the labor organisations + meaning: wikidata:Q66604802 + comments: + - Gewerkschaftsarchiv (de) + UNIVERSITY_ARCHIVE: + description: collection of historical records of a college or university + meaning: wikidata:Q2496264 + comments: + - Universitätsarchiv (de) + - archivo universitario (es) + - archives universitaires (fr) + VEREINSARCHIV: + description: Vereinsarchiv (Q130758889) + meaning: wikidata:Q130758889 + comments: + - Vereinsarchiv (de) + VERLAGSARCHIV: + description: Verlagsarchiv (Q130759004) + meaning: wikidata:Q130759004 + comments: + - Verlagsarchiv (de) + VERWALTUNGSARCHIV: + description: Subclass of archives + meaning: wikidata:Q2519292 + comments: + - Verwaltungsarchiv (de) + VIRTUAL_MAP_LIBRARY: + description: type of library for virtual maps or cartographic products + meaning: wikidata:Q5995078 + comments: + - Virtuelle Kartenbibliothek (de) + - Mapoteca virtual (es) + WEB_ARCHIVE: + description: publication type, collection of preserved web pages + meaning: wikidata:Q30047053 + comments: + - Webarchiv (de) + - archivo web (es) + - archive du Web (fr) + WOMENS_ARCHIVES: + description: archives of documents and records written by and about women + meaning: wikidata:Q130217628 + comments: + - Frauenarchiv (de) + WORLD_HERITAGE_SITE: + description: place of significance listed by UNESCO + meaning: wikidata:Q9259 + comments: + - UNESCO-Welterbe (de) + - Patrimonio de la Humanidad (es) + - patrimoine mondial (fr) diff --git a/frontend/public/schemas/20251121/linkml/archive/enums/CustodianPrimaryTypeEnum.yaml.archived_20260105 b/frontend/public/schemas/20251121/linkml/archive/enums/CustodianPrimaryTypeEnum.yaml.archived_20260105 new file mode 100644 index 0000000000..590d37e2ad --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/archive/enums/CustodianPrimaryTypeEnum.yaml.archived_20260105 @@ -0,0 +1,204 @@ +id: https://nde.nl/ontology/hc/enum/CustodianPrimaryTypeEnum +name: CustodianPrimaryTypeEnum +title: GLAMORCUBESFIXPHDNT Primary Type Categories + +description: | + Top-level classification of heritage custodian types using the + GLAMORCUBESFIXPHDNT taxonomy (19 categories). + + **Mnemonic**: GLAMORCUBESFIXPHDNT + - **G**alleries + - **L**ibraries + - **A**rchives + - **M**useums + - **O**fficial institutions + - **R**esearch centers + - **C**orporations (commercial) + - **U**nknown/unspecified + - **B**otanical gardens/zoos (bio custodians) + - **E**ducation providers + - **S**ocieties (heritage/collecting societies) + - **F**eatures (geographic features AS custodians) + - **I**ntangible heritage groups + - mi**X**ed (multiple types) + - **P**ersonal collections + - **H**oly/sacred sites + - **D**igital platforms + - **N**GOs (non-profit organizations) + - **T**aste/smell heritage + + Each category has specialized subclasses with Wikidata-derived enum values. + +enums: + CustodianPrimaryTypeEnum: + permissible_values: + GALLERY: + description: "Art gallery or exhibition space (Q118554787, Q1007870)" + meaning: wikidata:Q118554787 + comments: + - "Visual arts organizations" + - "Exhibition spaces (may or may not hold permanent collections)" + - "Kunsthallen, art galleries, visual arts centers" + + LIBRARY: + description: "Library - institution preserving and providing access to books and documents (Q7075)" + meaning: wikidata:Q7075 + comments: + - "Public libraries, academic libraries, national libraries" + - "Special libraries, digital libraries" + - "Includes bibliotheken, bibliotecas, bibliothèques" + + ARCHIVE: + description: "Archive - institution preserving historical documents and records (Q166118)" + meaning: wikidata:Q166118 + comments: + - "National archives, city archives, corporate archives" + - "Government archives, religious archives" + - "Includes archieven, archivos, archives" + + MUSEUM: + description: "Museum - institution preserving and exhibiting cultural or scientific collections (Q33506)" + meaning: wikidata:Q33506 + comments: + - "Art museums, history museums, natural history museums" + - "Science museums, ethnographic museums, local museums" + - "Includes musea, museos, musées, museums" + + OFFICIAL_INSTITUTION: + description: "Government heritage agency, platform, or official cultural institution (Q895526)" + meaning: wikidata:Q895526 + comments: + - "Provincial heritage services" + - "Heritage aggregation platforms" + - "Government cultural agencies" + - "TOOI: tooi:Overheidsorganisatie (Dutch government)" + - "CPOV: cpov:PublicOrganisation (EU public sector)" + + RESEARCH_CENTER: + description: "Research organization or documentation center (Q136410232)" + meaning: wikidata:Q136410232 + comments: + - "Research institutes with heritage collections" + - "Documentation centers" + - "University research units" + - "Policy institutes with archives" + + COMMERCIAL: + description: "Corporation or business with heritage collections (Q21980538)" + meaning: wikidata:Q21980538 + comments: + - "Company archives" + - "Corporate museums" + - "Brand heritage centers" + - "ROV: rov:RegisteredOrganization (if legally registered)" + + UNSPECIFIED: + description: "Institution type cannot be determined (data quality flag)" + comments: + - "NOT a real institution type - indicates missing/ambiguous data" + - "Should be resolved during data curation" + - "NOT mapped to Wikidata" + + BIO_CUSTODIAN: + description: "Botanical garden, zoo, aquarium, or living collections (Q473972, Q23790, Q43501)" + meaning: wikidata:Q473972 + comments: + - "Botanical gardens (Q473972)" + - "Zoological gardens (Q23790)" + - "Arboreta (Q43501)" + - "Herbaria (Q2982911)" + - "Aquariums (Q4915239)" + + EDUCATION_PROVIDER: + description: "Educational institution with heritage collections (Q5341295)" + meaning: wikidata:Q5341295 + comments: + - "Universities with archives or collections" + - "Schools with historical materials" + - "Training centers preserving educational heritage" + - "Schema.org: schema:EducationalOrganization, schema:CollegeOrUniversity" + + HERITAGE_SOCIETY: + description: "Historical society, heritage society, or collecting society (Q5774403, Q10549978)" + meaning: wikidata:Q5774403 + comments: + - "Historical societies (Q5774403)" + - "Heritage societies / heemkundige kring (Q10549978)" + - "Philatelic societies (Q955824)" + - "Numismatic clubs" + - "Ephemera collectors" + + FEATURE_CUSTODIAN: + description: "Geographic feature that IS the heritage custodian (special case)" + comments: + - "SPECIAL: Also links to FeaturePlace (dual aspect)" + - "Used when custodian IS a geofeature (e.g., historic mansion as museum)" + - "Examples: Q1802963 (mansion), Q44539 (temple), Q16560 (palace)" + - "Requires BOTH custodian_type AND custodian_place.place_type" + + INTANGIBLE_HERITAGE_GROUP: + description: "Organization preserving intangible cultural heritage (Q105815710)" + meaning: wikidata:Q105815710 + comments: + - "Traditional performance groups" + - "Oral history societies" + - "Folklore organizations" + - "Indigenous cultural practice groups" + - "UNESCO intangible cultural heritage" + + MIXED: + description: "Institution with multiple simultaneous type classifications" + comments: + - "GHCID uses 'X' code" + - "actual_types slot documents all applicable types" + - "Example: Combined museum/archive/library facility" + + PERSONAL_COLLECTION: + description: "Private personal collection managed by individual collector (Q134886297)" + meaning: wikidata:Q134886297 + comments: + - "Individual collectors" + - "Family archives" + - "Private art collections (non-commercial)" + - "Distinguished from commercial galleries" + + HOLY_SACRED_SITE: + description: "Religious site with heritage collections (Q4588528)" + meaning: wikidata:Q4588528 + comments: + - "Church archives (parish records, baptismal registers)" + - "Monastery libraries (manuscript collections)" + - "Cathedral treasuries (liturgical objects, religious art)" + - "Temple museums (Buddhist artifacts)" + - "Mosque libraries (Islamic manuscripts)" + - "Synagogue archives (Jewish community records)" + - "Schema.org: schema:PlaceOfWorship" + + DIGITAL_PLATFORM: + description: "Born-digital heritage platform or online repository (Q28017710)" + meaning: wikidata:Q28017710 + comments: + - "Online archives (Internet Archive)" + - "Digital libraries (HathiTrust)" + - "Heritage aggregators (Europeana, DPLA)" + - "Virtual museums" + - "Schema.org: schema:WebSite, schema:SoftwareApplication" + + NON_PROFIT: + description: "Non-governmental heritage organization (Q163740)" + meaning: wikidata:Q163740 + comments: + - "Heritage preservation NGOs" + - "Cultural advocacy organizations" + - "Conservation societies managing heritage sites" + - "Schema.org: schema:NGO" + + TASTE_SCENT_HERITAGE: + description: "Organization preserving culinary or olfactory heritage" + comments: + - "Historic restaurants preserving culinary traditions" + - "Parfumeries with historic formulation archives" + - "Distilleries maintaining traditional production methods" + - "Culinary heritage museums" + - "Potential Wikidata: Q11707 (restaurant), Q185329 (perfumery), Q131734 (distillery)" + - "NEW CATEGORY - not yet formally recognized in Wikidata" diff --git a/frontend/public/schemas/20251121/linkml/archive/enums/README.md b/frontend/public/schemas/20251121/linkml/archive/enums/README.md index 53d0493547..3cf925125d 100644 --- a/frontend/public/schemas/20251121/linkml/archive/enums/README.md +++ b/frontend/public/schemas/20251121/linkml/archive/enums/README.md @@ -13,6 +13,7 @@ When an enum is converted to a class hierarchy, the original enum file is: | File | Archived Date | Replaced By | Rationale | |------|--------------|-------------|-----------| +| `ArchiveTypeEnum.yaml.archived_20250105` | 2025-01-05 | 96 archive class files (e.g., `AcademicArchive.yaml`, `MunicipalArchive.yaml`) | 144 enum values replaced by class hierarchy with dual-class pattern (custodian type + rico:RecordSetType), rich ontology mappings (Schema.org, RiC-O, CIDOC-CRM, Wikidata), and multilingual labels. Enum contained non-archive types (BRANCH, DEPARTMENT, ORGANIZATION) that didn't belong. | | `StaffRoleTypeEnum.yaml.archived_20251206` | 2025-12-06 | `StaffRole.yaml`, `StaffRoles.yaml` | Enum promoted to class hierarchy to capture formal title vs de facto work distinction, enable rich properties (role_category, common_variants, typical_domains) | ## See Also diff --git a/frontend/public/schemas/20251121/linkml/instances/enums/_index.yaml b/frontend/public/schemas/20251121/linkml/instances/enums/_index.yaml index c914d0b85d..d862d4fa4d 100644 --- a/frontend/public/schemas/20251121/linkml/instances/enums/_index.yaml +++ b/frontend/public/schemas/20251121/linkml/instances/enums/_index.yaml @@ -1,6 +1,6 @@ # Enum Instances Index # Generated: 2025-11-30 -# Updated: 2025-12-06 (Session 4 - WebPortalTypeEnum migrated to class hierarchy) +# Updated: 2026-01-05 (Session - CustodianPrimaryTypeEnum migrated to CustodianType class hierarchy) # # This file provides a manifest of all enum instance files # for programmatic loading by the frontend, RDF generators, and UML tools. @@ -12,29 +12,31 @@ description: | Each enum value is represented as a rich instance with extended metadata, ontology mappings, Wikidata links, and documentation for enrichment. -version: "1.8.0" +version: "1.9.0" generated: "2025-11-30T00:00:00Z" -last_updated: "2025-12-06T00:00:00Z" +last_updated: "2026-01-05T00:00:00Z" # Statistics statistics: - total_enums: 29 # Was 30, SocialMediaPlatformTypeEnum migrated to class hierarchy - completed_instances: 24 # Was 25, one more enum migrated to class hierarchy - total_values_elaborated: 623+ # Was 650+, minus 27 SocialMediaPlatformTypeEnum values - total_values_estimated: 650+ + total_enums: 28 # Was 29, CustodianPrimaryTypeEnum migrated to CustodianType class hierarchy + completed_instances: 23 # Was 24, one more enum migrated to class hierarchy + total_values_elaborated: 604+ # Was 623+, minus 19 CustodianPrimaryTypeEnum values + total_values_estimated: 630+ with_wikidata_mapping: 93% with_ontology_mapping: 96% # Completed Enum Instance Files completed: # === Original 8 (Session 1) === - - id: 1 - name: Custodian Type Classification - file: custodian_primary_type.yaml - enum: CustodianPrimaryTypeEnum - count: 19 - status: completed - description: "GLAMORCUBESFIXPHDNT taxonomy - top-level heritage custodian categories" + + # ID 1 (CustodianPrimaryTypeEnum) - MIGRATED to CustodianType class hierarchy + # See: modules/classes/CustodianType.yaml and 19 specialized subclasses + # Archived: archive/enums/CustodianPrimaryTypeEnum.yaml.archived_20260105 + # Instance archived: instances/enums/archive/custodian_primary_type.yaml.archived_20260105 + # Migration date: 2026-01-05 + # Rationale: Enum promoted to class hierarchy per Rule 9 (Enum-to-Class Promotion). + # CustodianType subclasses support rich properties (wikidata_entity, + # custodian_type_broader, etc.) and inheritance. Single Source of Truth principle. - id: 2 name: Organizational Change Events diff --git a/frontend/public/schemas/20251121/linkml/instances/enums/custodian_primary_type.yaml b/frontend/public/schemas/20251121/linkml/instances/enums/archive/custodian_primary_type.yaml.archived_20260105 similarity index 100% rename from frontend/public/schemas/20251121/linkml/instances/enums/custodian_primary_type.yaml rename to frontend/public/schemas/20251121/linkml/instances/enums/archive/custodian_primary_type.yaml.archived_20260105 diff --git a/frontend/public/schemas/20251121/linkml/manifest.json b/frontend/public/schemas/20251121/linkml/manifest.json index 32a84f1d9d..b2048d8542 100644 --- a/frontend/public/schemas/20251121/linkml/manifest.json +++ b/frontend/public/schemas/20251121/linkml/manifest.json @@ -1,3350 +1,3900 @@ { - "generated": "2026-01-05T16:37:02.694Z", - "version": "1.0.0", - "categories": [ - { - "name": "main", - "displayName": "Main Schema", - "files": [ + "generated": "2026-01-06T18:48:28.502818Z", + "version": "1.0.0", + "categories": [ { - "name": "Heritage Custodian Ontology", - "path": "01_custodian_name_modular.yaml", - "category": "main" + "name": "main", + "displayName": "Main Schema", + "files": [ + { + "name": "Heritage Custodian Ontology", + "path": "01_custodian_name_modular.yaml", + "category": "main" + } + ] + }, + { + "name": "class", + "displayName": "Classes", + "files": [ + { + "name": "AcademicArchive", + "path": "modules/classes/AcademicArchive.yaml", + "category": "classes" + }, + { + "name": "AcademicArchiveRecordSetTypes", + "path": "modules/classes/AcademicArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "AccessPolicy", + "path": "modules/classes/AccessPolicy.yaml", + "category": "classes" + }, + { + "name": "AdministrativeOffice", + "path": "modules/classes/AdministrativeOffice.yaml", + "category": "classes" + }, + { + "name": "AdvertisingRadioArchive", + "path": "modules/classes/AdvertisingRadioArchive.yaml", + "category": "classes" + }, + { + "name": "AdvertisingRadioArchiveRecordSetTypes", + "path": "modules/classes/AdvertisingRadioArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "AllocationAgency", + "path": "modules/classes/AllocationAgency.yaml", + "category": "classes" + }, + { + "name": "AnimalSoundArchive", + "path": "modules/classes/AnimalSoundArchive.yaml", + "category": "classes" + }, + { + "name": "AnimalSoundArchiveRecordSetTypes", + "path": "modules/classes/AnimalSoundArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Appellation", + "path": "modules/classes/Appellation.yaml", + "category": "classes" + }, + { + "name": "ArchitecturalArchive", + "path": "modules/classes/ArchitecturalArchive.yaml", + "category": "classes" + }, + { + "name": "ArchitecturalArchiveRecordSetTypes", + "path": "modules/classes/ArchitecturalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ArchivalLibrary", + "path": "modules/classes/ArchivalLibrary.yaml", + "category": "classes" + }, + { + "name": "ArchivalRepository", + "path": "modules/classes/ArchivalRepository.yaml", + "category": "classes" + }, + { + "name": "ArchiveAssociation", + "path": "modules/classes/ArchiveAssociation.yaml", + "category": "classes" + }, + { + "name": "ArchiveNetwork", + "path": "modules/classes/ArchiveNetwork.yaml", + "category": "classes" + }, + { + "name": "ArchiveOfInternationalOrganization", + "path": "modules/classes/ArchiveOfInternationalOrganization.yaml", + "category": "classes" + }, + { + "name": "ArchiveOfInternationalOrganizationRecordSetTypes", + "path": "modules/classes/ArchiveOfInternationalOrganizationRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ArchiveOrganizationType", + "path": "modules/classes/ArchiveOrganizationType.yaml", + "category": "classes" + }, + { + "name": "ArchivesForBuildingRecords", + "path": "modules/classes/ArchivesForBuildingRecords.yaml", + "category": "classes" + }, + { + "name": "ArchivesForBuildingRecordsRecordSetTypes", + "path": "modules/classes/ArchivesForBuildingRecordsRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ArchivesRegionales", + "path": "modules/classes/ArchivesRegionales.yaml", + "category": "classes" + }, + { + "name": "ArchivesRegionalesRecordSetTypes", + "path": "modules/classes/ArchivesRegionalesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ArtArchive", + "path": "modules/classes/ArtArchive.yaml", + "category": "classes" + }, + { + "name": "ArtArchiveRecordSetTypes", + "path": "modules/classes/ArtArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ArticlesOfAssociation", + "path": "modules/classes/ArticlesOfAssociation.yaml", + "category": "classes" + }, + { + "name": "AssociationArchive", + "path": "modules/classes/AssociationArchive.yaml", + "category": "classes" + }, + { + "name": "AudiovisualArchive", + "path": "modules/classes/AudiovisualArchive.yaml", + "category": "classes" + }, + { + "name": "AudiovisualArchiveRecordSetTypes", + "path": "modules/classes/AudiovisualArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "AuxiliaryDigitalPlatform", + "path": "modules/classes/AuxiliaryDigitalPlatform.yaml", + "category": "classes" + }, + { + "name": "AuxiliaryPlace", + "path": "modules/classes/AuxiliaryPlace.yaml", + "category": "classes" + }, + { + "name": "BankArchive", + "path": "modules/classes/BankArchive.yaml", + "category": "classes" + }, + { + "name": "BankArchiveRecordSetTypes", + "path": "modules/classes/BankArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Bildstelle", + "path": "modules/classes/Bildstelle.yaml", + "category": "classes" + }, + { + "name": "BioCustodianType", + "path": "modules/classes/BioCustodianType.yaml", + "category": "classes" + }, + { + "name": "BiologicalObject", + "path": "modules/classes/BiologicalObject.yaml", + "category": "classes" + }, + { + "name": "BranchOffice", + "path": "modules/classes/BranchOffice.yaml", + "category": "classes" + }, + { + "name": "Budget", + "path": "modules/classes/Budget.yaml", + "category": "classes" + }, + { + "name": "CallForApplication", + "path": "modules/classes/CallForApplication.yaml", + "category": "classes" + }, + { + "name": "CantonalArchive", + "path": "modules/classes/CantonalArchive.yaml", + "category": "classes" + }, + { + "name": "CantonalArchiveRecordSetTypes", + "path": "modules/classes/CantonalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "CastCollection", + "path": "modules/classes/CastCollection.yaml", + "category": "classes" + }, + { + "name": "CateringPlace", + "path": "modules/classes/CateringPlace.yaml", + "category": "classes" + }, + { + "name": "CathedralArchive", + "path": "modules/classes/CathedralArchive.yaml", + "category": "classes" + }, + { + "name": "CathedralArchiveRecordSetTypes", + "path": "modules/classes/CathedralArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ChurchArchive", + "path": "modules/classes/ChurchArchive.yaml", + "category": "classes" + }, + { + "name": "ChurchArchiveRecordSetTypes", + "path": "modules/classes/ChurchArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ChurchArchiveSweden", + "path": "modules/classes/ChurchArchiveSweden.yaml", + "category": "classes" + }, + { + "name": "ChurchArchiveSwedenRecordSetTypes", + "path": "modules/classes/ChurchArchiveSwedenRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Cinematheque", + "path": "modules/classes/Cinematheque.yaml", + "category": "classes" + }, + { + "name": "ClimateArchive", + "path": "modules/classes/ClimateArchive.yaml", + "category": "classes" + }, + { + "name": "ClimateArchiveRecordSetTypes", + "path": "modules/classes/ClimateArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ClosedSpace", + "path": "modules/classes/ClosedSpace.yaml", + "category": "classes" + }, + { + "name": "CollectingArchives", + "path": "modules/classes/CollectingArchives.yaml", + "category": "classes" + }, + { + "name": "CollectingArchivesRecordSetTypes", + "path": "modules/classes/CollectingArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Collection", + "path": "modules/classes/Collection.yaml", + "category": "classes" + }, + { + "name": "CollectionManagementSystem", + "path": "modules/classes/CollectionManagementSystem.yaml", + "category": "classes" + }, + { + "name": "CollectionType", + "path": "modules/classes/CollectionType.yaml", + "category": "classes" + }, + { + "name": "ComarcalArchive", + "path": "modules/classes/ComarcalArchive.yaml", + "category": "classes" + }, + { + "name": "ComarcalArchiveRecordSetTypes", + "path": "modules/classes/ComarcalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "CommercialOrganizationType", + "path": "modules/classes/CommercialOrganizationType.yaml", + "category": "classes" + }, + { + "name": "CommunityArchive", + "path": "modules/classes/CommunityArchive.yaml", + "category": "classes" + }, + { + "name": "CommunityArchiveRecordSetTypes", + "path": "modules/classes/CommunityArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "CompanyArchiveRecordSetTypes", + "path": "modules/classes/CompanyArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "CompanyArchives", + "path": "modules/classes/CompanyArchives.yaml", + "category": "classes" + }, + { + "name": "ConfidenceMeasure", + "path": "modules/classes/ConfidenceMeasure.yaml", + "category": "classes" + }, + { + "name": "ConflictStatus", + "path": "modules/classes/ConflictStatus.yaml", + "category": "classes" + }, + { + "name": "ConnectionNetwork", + "path": "modules/classes/ConnectionNetwork.yaml", + "category": "classes" + }, + { + "name": "ConservationLab", + "path": "modules/classes/ConservationLab.yaml", + "category": "classes" + }, + { + "name": "ConservationRecord", + "path": "modules/classes/ConservationRecord.yaml", + "category": "classes" + }, + { + "name": "Conservatoria", + "path": "modules/classes/Conservatoria.yaml", + "category": "classes" + }, + { + "name": "Container", + "path": "modules/classes/Container.yaml", + "category": "classes" + }, + { + "name": "ContributingAgency", + "path": "modules/classes/ContributingAgency.yaml", + "category": "classes" + }, + { + "name": "Country", + "path": "modules/classes/Country.yaml", + "category": "classes" + }, + { + "name": "CountyRecordOffice", + "path": "modules/classes/CountyRecordOffice.yaml", + "category": "classes" + }, + { + "name": "CourtRecords", + "path": "modules/classes/CourtRecords.yaml", + "category": "classes" + }, + { + "name": "CulturalInstitution", + "path": "modules/classes/CulturalInstitution.yaml", + "category": "classes" + }, + { + "name": "CurationActivity", + "path": "modules/classes/CurationActivity.yaml", + "category": "classes" + }, + { + "name": "CurrentArchive", + "path": "modules/classes/CurrentArchive.yaml", + "category": "classes" + }, + { + "name": "CurrentArchiveRecordSetTypes", + "path": "modules/classes/CurrentArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Custodian", + "path": "modules/classes/Custodian.yaml", + "category": "classes" + }, + { + "name": "CustodianAdministration", + "path": "modules/classes/CustodianAdministration.yaml", + "category": "classes" + }, + { + "name": "CustodianArchive", + "path": "modules/classes/CustodianArchive.yaml", + "category": "classes" + }, + { + "name": "CustodianArchiveRecordSetTypes", + "path": "modules/classes/CustodianArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "CustodianCollection", + "path": "modules/classes/CustodianCollection.yaml", + "category": "classes" + }, + { + "name": "CustodianLegalStatus", + "path": "modules/classes/CustodianLegalStatus.yaml", + "category": "classes" + }, + { + "name": "CustodianName", + "path": "modules/classes/CustodianName.yaml", + "category": "classes" + }, + { + "name": "CustodianObservation", + "path": "modules/classes/CustodianObservation.yaml", + "category": "classes" + }, + { + "name": "CustodianPlace", + "path": "modules/classes/CustodianPlace.yaml", + "category": "classes" + }, + { + "name": "CustodianTimelineEvent", + "path": "modules/classes/CustodianTimelineEvent.yaml", + "category": "classes" + }, + { + "name": "CustodianType", + "path": "modules/classes/CustodianType.yaml", + "category": "classes" + }, + { + "name": "DarkArchive", + "path": "modules/classes/DarkArchive.yaml", + "category": "classes" + }, + { + "name": "DarkArchiveRecordSetTypes", + "path": "modules/classes/DarkArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "DataLicensePolicy", + "path": "modules/classes/DataLicensePolicy.yaml", + "category": "classes" + }, + { + "name": "DataServiceEndpoint", + "path": "modules/classes/DataServiceEndpoint.yaml", + "category": "classes" + }, + { + "name": "DataServiceEndpointType", + "path": "modules/classes/DataServiceEndpointType.yaml", + "category": "classes" + }, + { + "name": "DataServiceEndpointTypes", + "path": "modules/classes/DataServiceEndpointTypes.yaml", + "category": "classes" + }, + { + "name": "Department", + "path": "modules/classes/Department.yaml", + "category": "classes" + }, + { + "name": "DepartmentalArchives", + "path": "modules/classes/DepartmentalArchives.yaml", + "category": "classes" + }, + { + "name": "DepartmentalArchivesRecordSetTypes", + "path": "modules/classes/DepartmentalArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "DepositArchive", + "path": "modules/classes/DepositArchive.yaml", + "category": "classes" + }, + { + "name": "DepositArchiveRecordSetTypes", + "path": "modules/classes/DepositArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "DigitalArchive", + "path": "modules/classes/DigitalArchive.yaml", + "category": "classes" + }, + { + "name": "DigitalArchiveRecordSetTypes", + "path": "modules/classes/DigitalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "DigitalPlatform", + "path": "modules/classes/DigitalPlatform.yaml", + "category": "classes" + }, + { + "name": "DigitalPlatformType", + "path": "modules/classes/DigitalPlatformType.yaml", + "category": "classes" + }, + { + "name": "DigitalPlatformTypes", + "path": "modules/classes/DigitalPlatformTypes.yaml", + "category": "classes" + }, + { + "name": "DimArchives", + "path": "modules/classes/DimArchives.yaml", + "category": "classes" + }, + { + "name": "DimArchivesRecordSetTypes", + "path": "modules/classes/DimArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "DiocesanArchive", + "path": "modules/classes/DiocesanArchive.yaml", + "category": "classes" + }, + { + "name": "DiocesanArchiveRecordSetTypes", + "path": "modules/classes/DiocesanArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "DistrictArchiveGermany", + "path": "modules/classes/DistrictArchiveGermany.yaml", + "category": "classes" + }, + { + "name": "DistrictArchiveGermanyRecordSetTypes", + "path": "modules/classes/DistrictArchiveGermanyRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "DistritalArchive", + "path": "modules/classes/DistritalArchive.yaml", + "category": "classes" + }, + { + "name": "DistritalArchiveRecordSetTypes", + "path": "modules/classes/DistritalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Division", + "path": "modules/classes/Division.yaml", + "category": "classes" + }, + { + "name": "DocumentationCentre", + "path": "modules/classes/DocumentationCentre.yaml", + "category": "classes" + }, + { + "name": "DonationScheme", + "path": "modules/classes/DonationScheme.yaml", + "category": "classes" + }, + { + "name": "EADDownload", + "path": "modules/classes/EADDownload.yaml", + "category": "classes" + }, + { + "name": "EconomicArchive", + "path": "modules/classes/EconomicArchive.yaml", + "category": "classes" + }, + { + "name": "EconomicArchiveRecordSetTypes", + "path": "modules/classes/EconomicArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "EducationCenter", + "path": "modules/classes/EducationCenter.yaml", + "category": "classes" + }, + { + "name": "EducationCredential", + "path": "modules/classes/EducationCredential.yaml", + "category": "classes" + }, + { + "name": "EducationProviderType", + "path": "modules/classes/EducationProviderType.yaml", + "category": "classes" + }, + { + "name": "EncompassingBody", + "path": "modules/classes/EncompassingBody.yaml", + "category": "classes" + }, + { + "name": "EnvironmentalZone", + "path": "modules/classes/EnvironmentalZone.yaml", + "category": "classes" + }, + { + "name": "Event", + "path": "modules/classes/Event.yaml", + "category": "classes" + }, + { + "name": "ExhibitedObject", + "path": "modules/classes/ExhibitedObject.yaml", + "category": "classes" + }, + { + "name": "Exhibition", + "path": "modules/classes/Exhibition.yaml", + "category": "classes" + }, + { + "name": "ExhibitionCatalog", + "path": "modules/classes/ExhibitionCatalog.yaml", + "category": "classes" + }, + { + "name": "ExhibitionSpace", + "path": "modules/classes/ExhibitionSpace.yaml", + "category": "classes" + }, + { + "name": "ExtractionMetadata", + "path": "modules/classes/ExtractionMetadata.yaml", + "category": "classes" + }, + { + "name": "FeatureCustodianType", + "path": "modules/classes/FeatureCustodianType.yaml", + "category": "classes" + }, + { + "name": "FeaturePlace", + "path": "modules/classes/FeaturePlace.yaml", + "category": "classes" + }, + { + "name": "FileAPI", + "path": "modules/classes/FileAPI.yaml", + "category": "classes" + }, + { + "name": "FilmArchive", + "path": "modules/classes/FilmArchive.yaml", + "category": "classes" + }, + { + "name": "FilmArchiveRecordSetTypes", + "path": "modules/classes/FilmArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "FinancialStatement", + "path": "modules/classes/FinancialStatement.yaml", + "category": "classes" + }, + { + "name": "FindingAid", + "path": "modules/classes/FindingAid.yaml", + "category": "classes" + }, + { + "name": "FindingAidType", + "path": "modules/classes/FindingAidType.yaml", + "category": "classes" + }, + { + "name": "Foremalarkiv", + "path": "modules/classes/Foremalarkiv.yaml", + "category": "classes" + }, + { + "name": "FoundationArchive", + "path": "modules/classes/FoundationArchive.yaml", + "category": "classes" + }, + { + "name": "FoundationArchiveRecordSetTypes", + "path": "modules/classes/FoundationArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "FreeArchive", + "path": "modules/classes/FreeArchive.yaml", + "category": "classes" + }, + { + "name": "FreeArchiveRecordSetTypes", + "path": "modules/classes/FreeArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "FrenchPrivateArchives", + "path": "modules/classes/FrenchPrivateArchives.yaml", + "category": "classes" + }, + { + "name": "FrenchPrivateArchivesRecordSetTypes", + "path": "modules/classes/FrenchPrivateArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "FundingAgenda", + "path": "modules/classes/FundingAgenda.yaml", + "category": "classes" + }, + { + "name": "FundingRequirement", + "path": "modules/classes/FundingRequirement.yaml", + "category": "classes" + }, + { + "name": "Fylkesarkiv", + "path": "modules/classes/Fylkesarkiv.yaml", + "category": "classes" + }, + { + "name": "GLAM", + "path": "modules/classes/GLAM.yaml", + "category": "classes" + }, + { + "name": "GalleryType", + "path": "modules/classes/GalleryType.yaml", + "category": "classes" + }, + { + "name": "GeoSpatialPlace", + "path": "modules/classes/GeoSpatialPlace.yaml", + "category": "classes" + }, + { + "name": "GiftShop", + "path": "modules/classes/GiftShop.yaml", + "category": "classes" + }, + { + "name": "GovernmentArchive", + "path": "modules/classes/GovernmentArchive.yaml", + "category": "classes" + }, + { + "name": "GovernmentArchiveRecordSetTypes", + "path": "modules/classes/GovernmentArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "HeritageRelevance", + "path": "modules/classes/HeritageRelevance.yaml", + "category": "classes" + }, + { + "name": "HeritageSocietyType", + "path": "modules/classes/HeritageSocietyType.yaml", + "category": "classes" + }, + { + "name": "HistoricBuilding", + "path": "modules/classes/HistoricBuilding.yaml", + "category": "classes" + }, + { + "name": "HistoricalArchive", + "path": "modules/classes/HistoricalArchive.yaml", + "category": "classes" + }, + { + "name": "HistoricalArchiveRecordSetTypes", + "path": "modules/classes/HistoricalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "HolySacredSiteType", + "path": "modules/classes/HolySacredSiteType.yaml", + "category": "classes" + }, + { + "name": "HospitalArchive", + "path": "modules/classes/HospitalArchive.yaml", + "category": "classes" + }, + { + "name": "HospitalArchiveRecordSetTypes", + "path": "modules/classes/HospitalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "HouseArchive", + "path": "modules/classes/HouseArchive.yaml", + "category": "classes" + }, + { + "name": "HouseArchiveRecordSetTypes", + "path": "modules/classes/HouseArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "IIPImageServer", + "path": "modules/classes/IIPImageServer.yaml", + "category": "classes" + }, + { + "name": "IconographicArchives", + "path": "modules/classes/IconographicArchives.yaml", + "category": "classes" + }, + { + "name": "IconographicArchivesRecordSetTypes", + "path": "modules/classes/IconographicArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Identifier", + "path": "modules/classes/Identifier.yaml", + "category": "classes" + }, + { + "name": "InformationCarrier", + "path": "modules/classes/InformationCarrier.yaml", + "category": "classes" + }, + { + "name": "Institution", + "path": "modules/classes/Institution.yaml", + "category": "classes" + }, + { + "name": "InstitutionalArchive", + "path": "modules/classes/InstitutionalArchive.yaml", + "category": "classes" + }, + { + "name": "InstitutionalArchiveRecordSetTypes", + "path": "modules/classes/InstitutionalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "InstitutionalRepository", + "path": "modules/classes/InstitutionalRepository.yaml", + "category": "classes" + }, + { + "name": "IntangibleHeritageEvent", + "path": "modules/classes/IntangibleHeritageEvent.yaml", + "category": "classes" + }, + { + "name": "IntangibleHeritageForm", + "path": "modules/classes/IntangibleHeritageForm.yaml", + "category": "classes" + }, + { + "name": "IntangibleHeritageGroupType", + "path": "modules/classes/IntangibleHeritageGroupType.yaml", + "category": "classes" + }, + { + "name": "IntangibleHeritagePerformance", + "path": "modules/classes/IntangibleHeritagePerformance.yaml", + "category": "classes" + }, + { + "name": "InternetOfThings", + "path": "modules/classes/InternetOfThings.yaml", + "category": "classes" + }, + { + "name": "JointArchives", + "path": "modules/classes/JointArchives.yaml", + "category": "classes" + }, + { + "name": "JointArchivesRecordSetTypes", + "path": "modules/classes/JointArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Jurisdiction", + "path": "modules/classes/Jurisdiction.yaml", + "category": "classes" + }, + { + "name": "Kustodie", + "path": "modules/classes/Kustodie.yaml", + "category": "classes" + }, + { + "name": "LGBTArchive", + "path": "modules/classes/LGBTArchive.yaml", + "category": "classes" + }, + { + "name": "LGBTArchiveRecordSetTypes", + "path": "modules/classes/LGBTArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "LLMResponse", + "path": "modules/classes/LLMResponse.yaml", + "category": "classes" + }, + { + "name": "Landsarkiv", + "path": "modules/classes/Landsarkiv.yaml", + "category": "classes" + }, + { + "name": "LanguageCode", + "path": "modules/classes/LanguageCode.yaml", + "category": "classes" + }, + { + "name": "LanguageProficiency", + "path": "modules/classes/LanguageProficiency.yaml", + "category": "classes" + }, + { + "name": "LegalEntityType", + "path": "modules/classes/LegalEntityType.yaml", + "category": "classes" + }, + { + "name": "LegalForm", + "path": "modules/classes/LegalForm.yaml", + "category": "classes" + }, + { + "name": "LegalName", + "path": "modules/classes/LegalName.yaml", + "category": "classes" + }, + { + "name": "LegalResponsibilityCollection", + "path": "modules/classes/LegalResponsibilityCollection.yaml", + "category": "classes" + }, + { + "name": "LibraryType", + "path": "modules/classes/LibraryType.yaml", + "category": "classes" + }, + { + "name": "LightArchives", + "path": "modules/classes/LightArchives.yaml", + "category": "classes" + }, + { + "name": "LightArchivesRecordSetTypes", + "path": "modules/classes/LightArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "LinkedInProfile", + "path": "modules/classes/LinkedInProfile.yaml", + "category": "classes" + }, + { + "name": "LiteraryArchive", + "path": "modules/classes/LiteraryArchive.yaml", + "category": "classes" + }, + { + "name": "LiteraryArchiveRecordSetTypes", + "path": "modules/classes/LiteraryArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Loan", + "path": "modules/classes/Loan.yaml", + "category": "classes" + }, + { + "name": "LocalGovernmentArchive", + "path": "modules/classes/LocalGovernmentArchive.yaml", + "category": "classes" + }, + { + "name": "LocalGovernmentArchiveRecordSetTypes", + "path": "modules/classes/LocalGovernmentArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "LocalHeritageInstitutionSweden", + "path": "modules/classes/LocalHeritageInstitutionSweden.yaml", + "category": "classes" + }, + { + "name": "LocalHistoryArchive", + "path": "modules/classes/LocalHistoryArchive.yaml", + "category": "classes" + }, + { + "name": "LocalHistoryArchiveRecordSetTypes", + "path": "modules/classes/LocalHistoryArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "LocationLibrary", + "path": "modules/classes/LocationLibrary.yaml", + "category": "classes" + }, + { + "name": "METSAPI", + "path": "modules/classes/METSAPI.yaml", + "category": "classes" + }, + { + "name": "MailingListArchive", + "path": "modules/classes/MailingListArchive.yaml", + "category": "classes" + }, + { + "name": "MailingListArchiveRecordSetTypes", + "path": "modules/classes/MailingListArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "MediaArchive", + "path": "modules/classes/MediaArchive.yaml", + "category": "classes" + }, + { + "name": "MediaArchiveRecordSetTypes", + "path": "modules/classes/MediaArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Medienzentrum", + "path": "modules/classes/Medienzentrum.yaml", + "category": "classes" + }, + { + "name": "MemoryInstitution", + "path": "modules/classes/MemoryInstitution.yaml", + "category": "classes" + }, + { + "name": "MilitaryArchive", + "path": "modules/classes/MilitaryArchive.yaml", + "category": "classes" + }, + { + "name": "MilitaryArchiveRecordSetTypes", + "path": "modules/classes/MilitaryArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "MissionStatement", + "path": "modules/classes/MissionStatement.yaml", + "category": "classes" + }, + { + "name": "MixedCustodianType", + "path": "modules/classes/MixedCustodianType.yaml", + "category": "classes" + }, + { + "name": "MonasteryArchive", + "path": "modules/classes/MonasteryArchive.yaml", + "category": "classes" + }, + { + "name": "MonasteryArchiveRecordSetTypes", + "path": "modules/classes/MonasteryArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "MunicipalArchive", + "path": "modules/classes/MunicipalArchive.yaml", + "category": "classes" + }, + { + "name": "MunicipalArchiveRecordSetTypes", + "path": "modules/classes/MunicipalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "MuseumArchive", + "path": "modules/classes/MuseumArchive.yaml", + "category": "classes" + }, + { + "name": "MuseumArchiveRecordSetTypes", + "path": "modules/classes/MuseumArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "MuseumType", + "path": "modules/classes/MuseumType.yaml", + "category": "classes" + }, + { + "name": "MusicArchive", + "path": "modules/classes/MusicArchive.yaml", + "category": "classes" + }, + { + "name": "MusicArchiveRecordSetTypes", + "path": "modules/classes/MusicArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Nachlass", + "path": "modules/classes/Nachlass.yaml", + "category": "classes" + }, + { + "name": "NationalArchives", + "path": "modules/classes/NationalArchives.yaml", + "category": "classes" + }, + { + "name": "NationalArchivesRecordSetTypes", + "path": "modules/classes/NationalArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "NationalTreasure", + "path": "modules/classes/NationalTreasure.yaml", + "category": "classes" + }, + { + "name": "NationalTreasureOfFrance", + "path": "modules/classes/NationalTreasureOfFrance.yaml", + "category": "classes" + }, + { + "name": "NewspaperClippingsArchive", + "path": "modules/classes/NewspaperClippingsArchive.yaml", + "category": "classes" + }, + { + "name": "NewspaperClippingsArchiveRecordSetTypes", + "path": "modules/classes/NewspaperClippingsArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "NobilityArchive", + "path": "modules/classes/NobilityArchive.yaml", + "category": "classes" + }, + { + "name": "NobilityArchiveRecordSetTypes", + "path": "modules/classes/NobilityArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "NonProfitType", + "path": "modules/classes/NonProfitType.yaml", + "category": "classes" + }, + { + "name": "NotarialArchive", + "path": "modules/classes/NotarialArchive.yaml", + "category": "classes" + }, + { + "name": "NotarialArchiveRecordSetTypes", + "path": "modules/classes/NotarialArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "OAIPMHEndpoint", + "path": "modules/classes/OAIPMHEndpoint.yaml", + "category": "classes" + }, + { + "name": "OfficialInstitutionType", + "path": "modules/classes/OfficialInstitutionType.yaml", + "category": "classes" + }, + { + "name": "OnlineNewsArchive", + "path": "modules/classes/OnlineNewsArchive.yaml", + "category": "classes" + }, + { + "name": "OnlineNewsArchiveRecordSetTypes", + "path": "modules/classes/OnlineNewsArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Organization", + "path": "modules/classes/Organization.yaml", + "category": "classes" + }, + { + "name": "OrganizationBranch", + "path": "modules/classes/OrganizationBranch.yaml", + "category": "classes" + }, + { + "name": "OrganizationalChangeEvent", + "path": "modules/classes/OrganizationalChangeEvent.yaml", + "category": "classes" + }, + { + "name": "OrganizationalStructure", + "path": "modules/classes/OrganizationalStructure.yaml", + "category": "classes" + }, + { + "name": "OrganizationalSubdivision", + "path": "modules/classes/OrganizationalSubdivision.yaml", + "category": "classes" + }, + { + "name": "OutdoorSite", + "path": "modules/classes/OutdoorSite.yaml", + "category": "classes" + }, + { + "name": "ParentOrganizationUnit", + "path": "modules/classes/ParentOrganizationUnit.yaml", + "category": "classes" + }, + { + "name": "ParishArchive", + "path": "modules/classes/ParishArchive.yaml", + "category": "classes" + }, + { + "name": "ParishArchiveRecordSetTypes", + "path": "modules/classes/ParishArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ParliamentaryArchives", + "path": "modules/classes/ParliamentaryArchives.yaml", + "category": "classes" + }, + { + "name": "ParliamentaryArchivesRecordSetTypes", + "path": "modules/classes/ParliamentaryArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "PartyArchive", + "path": "modules/classes/PartyArchive.yaml", + "category": "classes" + }, + { + "name": "PartyArchiveRecordSetTypes", + "path": "modules/classes/PartyArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "PerformingArtsArchive", + "path": "modules/classes/PerformingArtsArchive.yaml", + "category": "classes" + }, + { + "name": "PerformingArtsArchiveRecordSetTypes", + "path": "modules/classes/PerformingArtsArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Person", + "path": "modules/classes/Person.yaml", + "category": "classes" + }, + { + "name": "PersonConnection", + "path": "modules/classes/PersonConnection.yaml", + "category": "classes" + }, + { + "name": "PersonName", + "path": "modules/classes/PersonName.yaml", + "category": "classes" + }, + { + "name": "PersonObservation", + "path": "modules/classes/PersonObservation.yaml", + "category": "classes" + }, + { + "name": "PersonOrOrganization", + "path": "modules/classes/PersonOrOrganization.yaml", + "category": "classes" + }, + { + "name": "PersonWebClaim", + "path": "modules/classes/PersonWebClaim.yaml", + "category": "classes" + }, + { + "name": "PersonalCollectionType", + "path": "modules/classes/PersonalCollectionType.yaml", + "category": "classes" + }, + { + "name": "PersonalLibrary", + "path": "modules/classes/PersonalLibrary.yaml", + "category": "classes" + }, + { + "name": "Personenstandsarchiv", + "path": "modules/classes/Personenstandsarchiv.yaml", + "category": "classes" + }, + { + "name": "PhotoArchive", + "path": "modules/classes/PhotoArchive.yaml", + "category": "classes" + }, + { + "name": "PhotoArchiveRecordSetTypes", + "path": "modules/classes/PhotoArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "PhotographCollection", + "path": "modules/classes/PhotographCollection.yaml", + "category": "classes" + }, + { + "name": "PoliticalArchive", + "path": "modules/classes/PoliticalArchive.yaml", + "category": "classes" + }, + { + "name": "PoliticalArchiveRecordSetTypes", + "path": "modules/classes/PoliticalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "PostcustodialArchive", + "path": "modules/classes/PostcustodialArchive.yaml", + "category": "classes" + }, + { + "name": "PostcustodialArchiveRecordSetTypes", + "path": "modules/classes/PostcustodialArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "PressArchive", + "path": "modules/classes/PressArchive.yaml", + "category": "classes" + }, + { + "name": "PressArchiveRecordSetTypes", + "path": "modules/classes/PressArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "PrimaryDigitalPresenceAssertion", + "path": "modules/classes/PrimaryDigitalPresenceAssertion.yaml", + "category": "classes" + }, + { + "name": "PrintRoom", + "path": "modules/classes/PrintRoom.yaml", + "category": "classes" + }, + { + "name": "Project", + "path": "modules/classes/Project.yaml", + "category": "classes" + }, + { + "name": "ProvenanceEvent", + "path": "modules/classes/ProvenanceEvent.yaml", + "category": "classes" + }, + { + "name": "ProvincialArchive", + "path": "modules/classes/ProvincialArchive.yaml", + "category": "classes" + }, + { + "name": "ProvincialArchiveRecordSetTypes", + "path": "modules/classes/ProvincialArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ProvincialHistoricalArchive", + "path": "modules/classes/ProvincialHistoricalArchive.yaml", + "category": "classes" + }, + { + "name": "ProvincialHistoricalArchiveRecordSetTypes", + "path": "modules/classes/ProvincialHistoricalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "PublicArchive", + "path": "modules/classes/PublicArchive.yaml", + "category": "classes" + }, + { + "name": "PublicArchiveRecordSetTypes", + "path": "modules/classes/PublicArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "PublicArchivesInFrance", + "path": "modules/classes/PublicArchivesInFrance.yaml", + "category": "classes" + }, + { + "name": "PublicArchivesInFranceRecordSetTypes", + "path": "modules/classes/PublicArchivesInFranceRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "PublicSpace", + "path": "modules/classes/PublicSpace.yaml", + "category": "classes" + }, + { + "name": "RadioArchive", + "path": "modules/classes/RadioArchive.yaml", + "category": "classes" + }, + { + "name": "RadioArchiveRecordSetTypes", + "path": "modules/classes/RadioArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ReadingRoom", + "path": "modules/classes/ReadingRoom.yaml", + "category": "classes" + }, + { + "name": "ReadingRoomAnnex", + "path": "modules/classes/ReadingRoomAnnex.yaml", + "category": "classes" + }, + { + "name": "ReconstructedEntity", + "path": "modules/classes/ReconstructedEntity.yaml", + "category": "classes" + }, + { + "name": "ReconstructionActivity", + "path": "modules/classes/ReconstructionActivity.yaml", + "category": "classes" + }, + { + "name": "ReconstructionAgent", + "path": "modules/classes/ReconstructionAgent.yaml", + "category": "classes" + }, + { + "name": "RegionalArchive", + "path": "modules/classes/RegionalArchive.yaml", + "category": "classes" + }, + { + "name": "RegionalArchiveRecordSetTypes", + "path": "modules/classes/RegionalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "RegionalArchivesInIceland", + "path": "modules/classes/RegionalArchivesInIceland.yaml", + "category": "classes" + }, + { + "name": "RegionalArchivesInIcelandRecordSetTypes", + "path": "modules/classes/RegionalArchivesInIcelandRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "RegionalEconomicArchive", + "path": "modules/classes/RegionalEconomicArchive.yaml", + "category": "classes" + }, + { + "name": "RegionalEconomicArchiveRecordSetTypes", + "path": "modules/classes/RegionalEconomicArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "RegionalHistoricCenter", + "path": "modules/classes/RegionalHistoricCenter.yaml", + "category": "classes" + }, + { + "name": "RegionalStateArchives", + "path": "modules/classes/RegionalStateArchives.yaml", + "category": "classes" + }, + { + "name": "RegionalStateArchivesRecordSetTypes", + "path": "modules/classes/RegionalStateArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "RegistrationAuthority", + "path": "modules/classes/RegistrationAuthority.yaml", + "category": "classes" + }, + { + "name": "RegistrationInfo", + "path": "modules/classes/RegistrationInfo.yaml", + "category": "classes" + }, + { + "name": "ReligiousArchive", + "path": "modules/classes/ReligiousArchive.yaml", + "category": "classes" + }, + { + "name": "ReligiousArchiveRecordSetTypes", + "path": "modules/classes/ReligiousArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ResearchCenter", + "path": "modules/classes/ResearchCenter.yaml", + "category": "classes" + }, + { + "name": "ResearchOrganizationType", + "path": "modules/classes/ResearchOrganizationType.yaml", + "category": "classes" + }, + { + "name": "SchoolArchive", + "path": "modules/classes/SchoolArchive.yaml", + "category": "classes" + }, + { + "name": "SchoolArchiveRecordSetTypes", + "path": "modules/classes/SchoolArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ScientificArchive", + "path": "modules/classes/ScientificArchive.yaml", + "category": "classes" + }, + { + "name": "ScientificArchiveRecordSetTypes", + "path": "modules/classes/ScientificArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ScientificTechnicAndIndustrialCultureCenter", + "path": "modules/classes/ScientificTechnicAndIndustrialCultureCenter.yaml", + "category": "classes" + }, + { + "name": "SearchAPI", + "path": "modules/classes/SearchAPI.yaml", + "category": "classes" + }, + { + "name": "SectorOfArchivesInSweden", + "path": "modules/classes/SectorOfArchivesInSweden.yaml", + "category": "classes" + }, + { + "name": "SectorOfArchivesInSwedenRecordSetTypes", + "path": "modules/classes/SectorOfArchivesInSwedenRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "SecurityArchives", + "path": "modules/classes/SecurityArchives.yaml", + "category": "classes" + }, + { + "name": "SecurityArchivesRecordSetTypes", + "path": "modules/classes/SecurityArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ServiceArea", + "path": "modules/classes/ServiceArea.yaml", + "category": "classes" + }, + { + "name": "Settlement", + "path": "modules/classes/Settlement.yaml", + "category": "classes" + }, + { + "name": "SocialMediaContent", + "path": "modules/classes/SocialMediaContent.yaml", + "category": "classes" + }, + { + "name": "SocialMediaPlatformType", + "path": "modules/classes/SocialMediaPlatformType.yaml", + "category": "classes" + }, + { + "name": "SocialMediaPlatformTypes", + "path": "modules/classes/SocialMediaPlatformTypes.yaml", + "category": "classes" + }, + { + "name": "SocialMediaPost", + "path": "modules/classes/SocialMediaPost.yaml", + "category": "classes" + }, + { + "name": "SocialMediaPostType", + "path": "modules/classes/SocialMediaPostType.yaml", + "category": "classes" + }, + { + "name": "SocialMediaPostTypes", + "path": "modules/classes/SocialMediaPostTypes.yaml", + "category": "classes" + }, + { + "name": "SocialMediaProfile", + "path": "modules/classes/SocialMediaProfile.yaml", + "category": "classes" + }, + { + "name": "SocialSpace", + "path": "modules/classes/SocialSpace.yaml", + "category": "classes" + }, + { + "name": "SoundArchive", + "path": "modules/classes/SoundArchive.yaml", + "category": "classes" + }, + { + "name": "SoundArchiveRecordSetTypes", + "path": "modules/classes/SoundArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "SourceDocument", + "path": "modules/classes/SourceDocument.yaml", + "category": "classes" + }, + { + "name": "SpecialCollection", + "path": "modules/classes/SpecialCollection.yaml", + "category": "classes" + }, + { + "name": "SpecializedArchive", + "path": "modules/classes/SpecializedArchive.yaml", + "category": "classes" + }, + { + "name": "SpecializedArchiveRecordSetTypes", + "path": "modules/classes/SpecializedArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "SpecializedArchivesCzechia", + "path": "modules/classes/SpecializedArchivesCzechia.yaml", + "category": "classes" + }, + { + "name": "SpecializedArchivesCzechiaRecordSetTypes", + "path": "modules/classes/SpecializedArchivesCzechiaRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "StaffRole", + "path": "modules/classes/StaffRole.yaml", + "category": "classes" + }, + { + "name": "StaffRoles", + "path": "modules/classes/StaffRoles.yaml", + "category": "classes" + }, + { + "name": "Standard", + "path": "modules/classes/Standard.yaml", + "category": "classes" + }, + { + "name": "StandardsOrganization", + "path": "modules/classes/StandardsOrganization.yaml", + "category": "classes" + }, + { + "name": "StateArchives", + "path": "modules/classes/StateArchives.yaml", + "category": "classes" + }, + { + "name": "StateArchivesRecordSetTypes", + "path": "modules/classes/StateArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "StateArchivesSection", + "path": "modules/classes/StateArchivesSection.yaml", + "category": "classes" + }, + { + "name": "StateArchivesSectionRecordSetTypes", + "path": "modules/classes/StateArchivesSectionRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "StateDistrictArchive", + "path": "modules/classes/StateDistrictArchive.yaml", + "category": "classes" + }, + { + "name": "StateDistrictArchiveRecordSetTypes", + "path": "modules/classes/StateDistrictArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "StateRegionalArchiveCzechia", + "path": "modules/classes/StateRegionalArchiveCzechia.yaml", + "category": "classes" + }, + { + "name": "StateRegionalArchiveCzechiaRecordSetTypes", + "path": "modules/classes/StateRegionalArchiveCzechiaRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Storage", + "path": "modules/classes/Storage.yaml", + "category": "classes" + }, + { + "name": "StorageCondition", + "path": "modules/classes/StorageCondition.yaml", + "category": "classes" + }, + { + "name": "StorageConditionPolicy", + "path": "modules/classes/StorageConditionPolicy.yaml", + "category": "classes" + }, + { + "name": "StorageType", + "path": "modules/classes/StorageType.yaml", + "category": "classes" + }, + { + "name": "StorageUnit", + "path": "modules/classes/StorageUnit.yaml", + "category": "classes" + }, + { + "name": "Subregion", + "path": "modules/classes/Subregion.yaml", + "category": "classes" + }, + { + "name": "SubsidiaryOrganization", + "path": "modules/classes/SubsidiaryOrganization.yaml", + "category": "classes" + }, + { + "name": "TasteScentHeritageType", + "path": "modules/classes/TasteScentHeritageType.yaml", + "category": "classes" + }, + { + "name": "TelevisionArchive", + "path": "modules/classes/TelevisionArchive.yaml", + "category": "classes" + }, + { + "name": "TelevisionArchiveRecordSetTypes", + "path": "modules/classes/TelevisionArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "TemporaryLocation", + "path": "modules/classes/TemporaryLocation.yaml", + "category": "classes" + }, + { + "name": "TentativeWorldHeritageSite", + "path": "modules/classes/TentativeWorldHeritageSite.yaml", + "category": "classes" + }, + { + "name": "TimeSpan", + "path": "modules/classes/TimeSpan.yaml", + "category": "classes" + }, + { + "name": "TradeRegister", + "path": "modules/classes/TradeRegister.yaml", + "category": "classes" + }, + { + "name": "TradeUnionArchive", + "path": "modules/classes/TradeUnionArchive.yaml", + "category": "classes" + }, + { + "name": "TradeUnionArchiveRecordSetTypes", + "path": "modules/classes/TradeUnionArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "UniversityArchive", + "path": "modules/classes/UniversityArchive.yaml", + "category": "classes" + }, + { + "name": "UniversityArchiveRecordSetTypes", + "path": "modules/classes/UniversityArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "UnspecifiedType", + "path": "modules/classes/UnspecifiedType.yaml", + "category": "classes" + }, + { + "name": "Vereinsarchiv", + "path": "modules/classes/Vereinsarchiv.yaml", + "category": "classes" + }, + { + "name": "Verlagsarchiv", + "path": "modules/classes/Verlagsarchiv.yaml", + "category": "classes" + }, + { + "name": "Verwaltungsarchiv", + "path": "modules/classes/Verwaltungsarchiv.yaml", + "category": "classes" + }, + { + "name": "VideoAnnotation", + "path": "modules/classes/VideoAnnotation.yaml", + "category": "classes" + }, + { + "name": "VideoAnnotationTypes", + "path": "modules/classes/VideoAnnotationTypes.yaml", + "category": "classes" + }, + { + "name": "VideoAudioAnnotation", + "path": "modules/classes/VideoAudioAnnotation.yaml", + "category": "classes" + }, + { + "name": "VideoChapter", + "path": "modules/classes/VideoChapter.yaml", + "category": "classes" + }, + { + "name": "VideoPost", + "path": "modules/classes/VideoPost.yaml", + "category": "classes" + }, + { + "name": "VideoSubtitle", + "path": "modules/classes/VideoSubtitle.yaml", + "category": "classes" + }, + { + "name": "VideoTextContent", + "path": "modules/classes/VideoTextContent.yaml", + "category": "classes" + }, + { + "name": "VideoTimeSegment", + "path": "modules/classes/VideoTimeSegment.yaml", + "category": "classes" + }, + { + "name": "VideoTranscript", + "path": "modules/classes/VideoTranscript.yaml", + "category": "classes" + }, + { + "name": "VirtualMapLibrary", + "path": "modules/classes/VirtualMapLibrary.yaml", + "category": "classes" + }, + { + "name": "Warehouse", + "path": "modules/classes/Warehouse.yaml", + "category": "classes" + }, + { + "name": "WebArchive", + "path": "modules/classes/WebArchive.yaml", + "category": "classes" + }, + { + "name": "WebArchiveRecordSetTypes", + "path": "modules/classes/WebArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "WebClaim", + "path": "modules/classes/WebClaim.yaml", + "category": "classes" + }, + { + "name": "WebObservation", + "path": "modules/classes/WebObservation.yaml", + "category": "classes" + }, + { + "name": "WebPortal", + "path": "modules/classes/WebPortal.yaml", + "category": "classes" + }, + { + "name": "WebPortalType", + "path": "modules/classes/WebPortalType.yaml", + "category": "classes" + }, + { + "name": "WebPortalTypes", + "path": "modules/classes/WebPortalTypes.yaml", + "category": "classes" + }, + { + "name": "WomensArchives", + "path": "modules/classes/WomensArchives.yaml", + "category": "classes" + }, + { + "name": "WomensArchivesRecordSetTypes", + "path": "modules/classes/WomensArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "WorkExperience", + "path": "modules/classes/WorkExperience.yaml", + "category": "classes" + }, + { + "name": "WorldHeritageSite", + "path": "modules/classes/WorldHeritageSite.yaml", + "category": "classes" + } + ] + }, + { + "name": "enum", + "displayName": "Enumerations", + "files": [ + { + "name": "AgentTypeEnum", + "path": "modules/enums/AgentTypeEnum.yaml", + "category": "enums" + }, + { + "name": "AppellationTypeEnum", + "path": "modules/enums/AppellationTypeEnum.yaml", + "category": "enums" + }, + { + "name": "ArchiveProcessingStatusEnum", + "path": "modules/enums/ArchiveProcessingStatusEnum.yaml", + "category": "enums" + }, + { + "name": "AuxiliaryDigitalPlatformTypeEnum", + "path": "modules/enums/AuxiliaryDigitalPlatformTypeEnum.yaml", + "category": "enums" + }, + { + "name": "AuxiliaryPlaceTypeEnum", + "path": "modules/enums/AuxiliaryPlaceTypeEnum.yaml", + "category": "enums" + }, + { + "name": "BioCustodianTypeEnum", + "path": "modules/enums/BioCustodianTypeEnum.yaml", + "category": "enums" + }, + { + "name": "CallForApplicationStatusEnum", + "path": "modules/enums/CallForApplicationStatusEnum.yaml", + "category": "enums" + }, + { + "name": "CanonicalClaimTypes", + "path": "modules/enums/CanonicalClaimTypes.yaml", + "category": "enums" + }, + { + "name": "CarrierTypeEnum", + "path": "modules/enums/CarrierTypeEnum.yaml", + "category": "enums" + }, + { + "name": "CommercialCustodianTypeEnum", + "path": "modules/enums/CommercialCustodianTypeEnum.yaml", + "category": "enums" + }, + { + "name": "ConflictStatusEnum", + "path": "modules/enums/ConflictStatusEnum.yaml", + "category": "enums" + }, + { + "name": "ConservationStatusEnum", + "path": "modules/enums/ConservationStatusEnum.yaml", + "category": "enums" + }, + { + "name": "CurationActivityTypeEnum", + "path": "modules/enums/CurationActivityTypeEnum.yaml", + "category": "enums" + }, + { + "name": "DigitalPlatformTypeEnum", + "path": "modules/enums/DigitalPlatformTypeEnum.yaml", + "category": "enums" + }, + { + "name": "DigitalPresenceTypeEnum", + "path": "modules/enums/DigitalPresenceTypeEnum.yaml", + "category": "enums" + }, + { + "name": "DonationSchemeTypeEnum", + "path": "modules/enums/DonationSchemeTypeEnum.yaml", + "category": "enums" + }, + { + "name": "EducationProviderTypeEnum", + "path": "modules/enums/EducationProviderTypeEnum.yaml", + "category": "enums" + }, + { + "name": "EncompassingBodyTypeEnum", + "path": "modules/enums/EncompassingBodyTypeEnum.yaml", + "category": "enums" + }, + { + "name": "EntityTypeEnum", + "path": "modules/enums/EntityTypeEnum.yaml", + "category": "enums" + }, + { + "name": "EnvironmentalZoneTypeEnum", + "path": "modules/enums/EnvironmentalZoneTypeEnum.yaml", + "category": "enums" + }, + { + "name": "EventStatusEnum", + "path": "modules/enums/EventStatusEnum.yaml", + "category": "enums" + }, + { + "name": "EventTypeEnum", + "path": "modules/enums/EventTypeEnum.yaml", + "category": "enums" + }, + { + "name": "ExhibitedObjectTypeEnum", + "path": "modules/enums/ExhibitedObjectTypeEnum.yaml", + "category": "enums" + }, + { + "name": "ExhibitionTypeEnum", + "path": "modules/enums/ExhibitionTypeEnum.yaml", + "category": "enums" + }, + { + "name": "FeatureTypeEnum", + "path": "modules/enums/FeatureTypeEnum.yaml", + "category": "enums" + }, + { + "name": "FinancialStatementTypeEnum", + "path": "modules/enums/FinancialStatementTypeEnum.yaml", + "category": "enums" + }, + { + "name": "FundingRequirementTypeEnum", + "path": "modules/enums/FundingRequirementTypeEnum.yaml", + "category": "enums" + }, + { + "name": "GalleryTypeEnum", + "path": "modules/enums/GalleryTypeEnum.yaml", + "category": "enums" + }, + { + "name": "GiftShopTypeEnum", + "path": "modules/enums/GiftShopTypeEnum.yaml", + "category": "enums" + }, + { + "name": "HeritageSocietyTypeEnum", + "path": "modules/enums/HeritageSocietyTypeEnum.yaml", + "category": "enums" + }, + { + "name": "HeritageTypeEnum", + "path": "modules/enums/HeritageTypeEnum.yaml", + "category": "enums" + }, + { + "name": "HolySiteTypeEnum", + "path": "modules/enums/HolySiteTypeEnum.yaml", + "category": "enums" + }, + { + "name": "ICHViabilityStatusEnum", + "path": "modules/enums/ICHViabilityStatusEnum.yaml", + "category": "enums" + }, + { + "name": "IntangibleHeritageTypeEnum", + "path": "modules/enums/IntangibleHeritageTypeEnum.yaml", + "category": "enums" + }, + { + "name": "LegalStatusEnum", + "path": "modules/enums/LegalStatusEnum.yaml", + "category": "enums" + }, + { + "name": "LibraryTypeEnum", + "path": "modules/enums/LibraryTypeEnum.yaml", + "category": "enums" + }, + { + "name": "LoanStatusEnum", + "path": "modules/enums/LoanStatusEnum.yaml", + "category": "enums" + }, + { + "name": "MuseumTypeEnum", + "path": "modules/enums/MuseumTypeEnum.yaml", + "category": "enums" + }, + { + "name": "NonProfitCustodianTypeEnum", + "path": "modules/enums/NonProfitCustodianTypeEnum.yaml", + "category": "enums" + }, + { + "name": "OfficialInstitutionTypeEnum", + "path": "modules/enums/OfficialInstitutionTypeEnum.yaml", + "category": "enums" + }, + { + "name": "OrganizationBranchTypeEnum", + "path": "modules/enums/OrganizationBranchTypeEnum.yaml", + "category": "enums" + }, + { + "name": "OrganizationalChangeEventTypeEnum", + "path": "modules/enums/OrganizationalChangeEventTypeEnum.yaml", + "category": "enums" + }, + { + "name": "OrganizationalUnitTypeEnum", + "path": "modules/enums/OrganizationalUnitTypeEnum.yaml", + "category": "enums" + }, + { + "name": "PersonalCollectionTypeEnum", + "path": "modules/enums/PersonalCollectionTypeEnum.yaml", + "category": "enums" + }, + { + "name": "PlaceSpecificityEnum", + "path": "modules/enums/PlaceSpecificityEnum.yaml", + "category": "enums" + }, + { + "name": "PreservationMethodEnum", + "path": "modules/enums/PreservationMethodEnum.yaml", + "category": "enums" + }, + { + "name": "ProductCategoryEnum", + "path": "modules/enums/ProductCategoryEnum.yaml", + "category": "enums" + }, + { + "name": "ProjectStatusEnum", + "path": "modules/enums/ProjectStatusEnum.yaml", + "category": "enums" + }, + { + "name": "ProvenanceEventTypeEnum", + "path": "modules/enums/ProvenanceEventTypeEnum.yaml", + "category": "enums" + }, + { + "name": "ReconstructionActivityTypeEnum", + "path": "modules/enums/ReconstructionActivityTypeEnum.yaml", + "category": "enums" + }, + { + "name": "RecordsLifecycleStageEnum", + "path": "modules/enums/RecordsLifecycleStageEnum.yaml", + "category": "enums" + }, + { + "name": "ResearchCenterTypeEnum", + "path": "modules/enums/ResearchCenterTypeEnum.yaml", + "category": "enums" + }, + { + "name": "ServiceAreaTypeEnum", + "path": "modules/enums/ServiceAreaTypeEnum.yaml", + "category": "enums" + }, + { + "name": "SourceDocumentTypeEnum", + "path": "modules/enums/SourceDocumentTypeEnum.yaml", + "category": "enums" + }, + { + "name": "StorageConditionStatusEnum", + "path": "modules/enums/StorageConditionStatusEnum.yaml", + "category": "enums" + }, + { + "name": "StorageObserverTypeEnum", + "path": "modules/enums/StorageObserverTypeEnum.yaml", + "category": "enums" + }, + { + "name": "StorageStandardEnum", + "path": "modules/enums/StorageStandardEnum.yaml", + "category": "enums" + }, + { + "name": "StorageTypeEnum", + "path": "modules/enums/StorageTypeEnum.yaml", + "category": "enums" + }, + { + "name": "StorageUnitTypeEnum", + "path": "modules/enums/StorageUnitTypeEnum.yaml", + "category": "enums" + }, + { + "name": "TasteScentHeritageTypeEnum", + "path": "modules/enums/TasteScentHeritageTypeEnum.yaml", + "category": "enums" + }, + { + "name": "UNESCOICHDomainEnum", + "path": "modules/enums/UNESCOICHDomainEnum.yaml", + "category": "enums" + }, + { + "name": "UNESCOListStatusEnum", + "path": "modules/enums/UNESCOListStatusEnum.yaml", + "category": "enums" + } + ] + }, + { + "name": "slot", + "displayName": "Slots", + "files": [ + { + "name": "Access Policy", + "path": "modules/slots/access_policy.yaml", + "category": "slots" + }, + { + "name": "Access Policy Ref", + "path": "modules/slots/access_policy_ref.yaml", + "category": "slots" + }, + { + "name": "Access Restrictions", + "path": "modules/slots/access_restrictions.yaml", + "category": "slots" + }, + { + "name": "Accession Number", + "path": "modules/slots/accession_number.yaml", + "category": "slots" + }, + { + "name": "Acquisition Date", + "path": "modules/slots/acquisition_date.yaml", + "category": "slots" + }, + { + "name": "Acquisition Method", + "path": "modules/slots/acquisition_method.yaml", + "category": "slots" + }, + { + "name": "Acquisition Source", + "path": "modules/slots/acquisition_source.yaml", + "category": "slots" + }, + { + "name": "Activity Type", + "path": "modules/slots/activity_type.yaml", + "category": "slots" + }, + { + "name": "Affected By Event", + "path": "modules/slots/affected_by_event.yaml", + "category": "slots" + }, + { + "name": "Affected Units", + "path": "modules/slots/affected_units.yaml", + "category": "slots" + }, + { + "name": "Affects Organization", + "path": "modules/slots/affects_organization.yaml", + "category": "slots" + }, + { + "name": "Affiliation", + "path": "modules/slots/affiliation.yaml", + "category": "slots" + }, + { + "name": "Age", + "path": "modules/slots/age.yaml", + "category": "slots" + }, + { + "name": "Agent Name", + "path": "modules/slots/agent_name.yaml", + "category": "slots" + }, + { + "name": "Agent Type", + "path": "modules/slots/agent_type.yaml", + "category": "slots" + }, + { + "name": "Allocated By", + "path": "modules/slots/allocated_by.yaml", + "category": "slots" + }, + { + "name": "Allocates", + "path": "modules/slots/allocates.yaml", + "category": "slots" + }, + { + "name": "Allocation Date", + "path": "modules/slots/allocation_date.yaml", + "category": "slots" + }, + { + "name": "Also Identifies Name", + "path": "modules/slots/also_identifies_name.yaml", + "category": "slots" + }, + { + "name": "Alternative Names", + "path": "modules/slots/alternative_names.yaml", + "category": "slots" + }, + { + "name": "Alternative Observed Names", + "path": "modules/slots/alternative_observed_names.yaml", + "category": "slots" + }, + { + "name": "Altitude", + "path": "modules/slots/altitude.yaml", + "category": "slots" + }, + { + "name": "Api Endpoint", + "path": "modules/slots/api_endpoint.yaml", + "category": "slots" + }, + { + "name": "Appellation Language", + "path": "modules/slots/appellation_language.yaml", + "category": "slots" + }, + { + "name": "Appellation Type", + "path": "modules/slots/appellation_type.yaml", + "category": "slots" + }, + { + "name": "Appellation Value", + "path": "modules/slots/appellation_value.yaml", + "category": "slots" + }, + { + "name": "Appellations", + "path": "modules/slots/appellations.yaml", + "category": "slots" + }, + { + "name": "Approval Date", + "path": "modules/slots/approval_date.yaml", + "category": "slots" + }, + { + "name": "Archived At", + "path": "modules/slots/archived_at.yaml", + "category": "slots" + }, + { + "name": "Arrangement", + "path": "modules/slots/arrangement.yaml", + "category": "slots" + }, + { + "name": "Arrangement System", + "path": "modules/slots/arrangement_system.yaml", + "category": "slots" + }, + { + "name": "Authentication Required", + "path": "modules/slots/authentication_required.yaml", + "category": "slots" + }, + { + "name": "Auxiliary Places", + "path": "modules/slots/auxiliary_places.yaml", + "category": "slots" + }, + { + "name": "Auxiliary Platforms", + "path": "modules/slots/auxiliary_platforms.yaml", + "category": "slots" + }, + { + "name": "Base Surname", + "path": "modules/slots/base_surname.yaml", + "category": "slots" + }, + { + "name": "Begin Of The Begin", + "path": "modules/slots/begin_of_the_begin.yaml", + "category": "slots" + }, + { + "name": "Begin Of The End", + "path": "modules/slots/begin_of_the_end.yaml", + "category": "slots" + }, + { + "name": "Birth Date", + "path": "modules/slots/birth_date.yaml", + "category": "slots" + }, + { + "name": "Birth Place", + "path": "modules/slots/birth_place.yaml", + "category": "slots" + }, + { + "name": "Canonical Value", + "path": "modules/slots/canonical_value.yaml", + "category": "slots" + }, + { + "name": "Capacity Items", + "path": "modules/slots/capacity_items.yaml", + "category": "slots" + }, + { + "name": "Cataloging Standard", + "path": "modules/slots/cataloging_standard.yaml", + "category": "slots" + }, + { + "name": "Change Rationale", + "path": "modules/slots/change_rationale.yaml", + "category": "slots" + }, + { + "name": "Circumstances Of Death", + "path": "modules/slots/circumstances_of_death.yaml", + "category": "slots" + }, + { + "name": "City", + "path": "modules/slots/city.yaml", + "category": "slots" + }, + { + "name": "Claim Id", + "path": "modules/slots/claim_id.yaml", + "category": "slots" + }, + { + "name": "Claim Type", + "path": "modules/slots/claim_type.yaml", + "category": "slots" + }, + { + "name": "Claim Value", + "path": "modules/slots/claim_value.yaml", + "category": "slots" + }, + { + "name": "Class Metadata Slots", + "path": "modules/slots/class_metadata_slots.yaml", + "category": "slots" + }, + { + "name": "Collection Description", + "path": "modules/slots/collection_description.yaml", + "category": "slots" + }, + { + "name": "Collection Focus", + "path": "modules/slots/collection_focus.yaml", + "category": "slots" + }, + { + "name": "Collection Id", + "path": "modules/slots/collection_id.yaml", + "category": "slots" + }, + { + "name": "Collection Name", + "path": "modules/slots/collection_name.yaml", + "category": "slots" + }, + { + "name": "Collection Of", + "path": "modules/slots/collection_of.yaml", + "category": "slots" + }, + { + "name": "Collection Scope", + "path": "modules/slots/collection_scope.yaml", + "category": "slots" + }, + { + "name": "Collection Size", + "path": "modules/slots/collection_size.yaml", + "category": "slots" + }, + { + "name": "Collection Type", + "path": "modules/slots/collection_type.yaml", + "category": "slots" + }, + { + "name": "Collection Type Ref", + "path": "modules/slots/collection_type_ref.yaml", + "category": "slots" + }, + { + "name": "Collections Under Responsibility", + "path": "modules/slots/collections_under_responsibility.yaml", + "category": "slots" + }, + { + "name": "Confidence", + "path": "modules/slots/confidence.yaml", + "category": "slots" + }, + { + "name": "Confidence Method", + "path": "modules/slots/confidence_method.yaml", + "category": "slots" + }, + { + "name": "Confidence Score", + "path": "modules/slots/confidence_score.yaml", + "category": "slots" + }, + { + "name": "Confidence Value", + "path": "modules/slots/confidence_value.yaml", + "category": "slots" + }, + { + "name": "Conflict Status", + "path": "modules/slots/conflict_status.yaml", + "category": "slots" + }, + { + "name": "Conservation Lab", + "path": "modules/slots/conservation_lab.yaml", + "category": "slots" + }, + { + "name": "Contact", + "path": "modules/slots/contact.yaml", + "category": "slots" + }, + { + "name": "Contact Email", + "path": "modules/slots/contact_email.yaml", + "category": "slots" + }, + { + "name": "Contact Point", + "path": "modules/slots/contact_point.yaml", + "category": "slots" + }, + { + "name": "Content Hash", + "path": "modules/slots/content_hash.yaml", + "category": "slots" + }, + { + "name": "Cost Usd", + "path": "modules/slots/cost_usd.yaml", + "category": "slots" + }, + { + "name": "Country", + "path": "modules/slots/country.yaml", + "category": "slots" + }, + { + "name": "Created", + "path": "modules/slots/created.yaml", + "category": "slots" + }, + { + "name": "Creator", + "path": "modules/slots/creator.yaml", + "category": "slots" + }, + { + "name": "Css Selector", + "path": "modules/slots/css_selector.yaml", + "category": "slots" + }, + { + "name": "Curation Activities", + "path": "modules/slots/curation_activities.yaml", + "category": "slots" + }, + { + "name": "Custodial History", + "path": "modules/slots/custodial_history.yaml", + "category": "slots" + }, + { + "name": "Custodian Names", + "path": "modules/slots/custodian_names.yaml", + "category": "slots" + }, + { + "name": "Custodian Observations", + "path": "modules/slots/custodian_observations.yaml", + "category": "slots" + }, + { + "name": "Custodian Type", + "path": "modules/slots/custodian_type.yaml", + "category": "slots" + }, + { + "name": "Custodians", + "path": "modules/slots/custodians.yaml", + "category": "slots" + }, + { + "name": "Data License Policy", + "path": "modules/slots/data_license_policy.yaml", + "category": "slots" + }, + { + "name": "Data Service Endpoints", + "path": "modules/slots/data_service_endpoints.yaml", + "category": "slots" + }, + { + "name": "Date", + "path": "modules/slots/date.yaml", + "category": "slots" + }, + { + "name": "Date Of Death", + "path": "modules/slots/date_of_death.yaml", + "category": "slots" + }, + { + "name": "Death Place", + "path": "modules/slots/death_place.yaml", + "category": "slots" + }, + { + "name": "Deceased", + "path": "modules/slots/deceased.yaml", + "category": "slots" + }, + { + "name": "Defined By Standard", + "path": "modules/slots/defined_by_standard.yaml", + "category": "slots" + }, + { + "name": "Deliverables", + "path": "modules/slots/deliverables.yaml", + "category": "slots" + }, + { + "name": "Derived From Entity", + "path": "modules/slots/derived_from_entity.yaml", + "category": "slots" + }, + { + "name": "Description", + "path": "modules/slots/description.yaml", + "category": "slots" + }, + { + "name": "Digital Platform", + "path": "modules/slots/digital_platform.yaml", + "category": "slots" + }, + { + "name": "Digital Surrogate Url", + "path": "modules/slots/digital_surrogate_url.yaml", + "category": "slots" + }, + { + "name": "Digitization Status", + "path": "modules/slots/digitization_status.yaml", + "category": "slots" + }, + { + "name": "Dissolution Date", + "path": "modules/slots/dissolution_date.yaml", + "category": "slots" + }, + { + "name": "Documentation Source", + "path": "modules/slots/documentation_source.yaml", + "category": "slots" + }, + { + "name": "Documentation Url", + "path": "modules/slots/documentation_url.yaml", + "category": "slots" + }, + { + "name": "Effective Date", + "path": "modules/slots/effective_date.yaml", + "category": "slots" + }, + { + "name": "Embargo End Date", + "path": "modules/slots/embargo_end_date.yaml", + "category": "slots" + }, + { + "name": "Emic Name", + "path": "modules/slots/emic_name.yaml", + "category": "slots" + }, + { + "name": "Encompasses", + "path": "modules/slots/encompasses.yaml", + "category": "slots" + }, + { + "name": "Encompassing Body", + "path": "modules/slots/encompassing_body.yaml", + "category": "slots" + }, + { + "name": "End Date", + "path": "modules/slots/end_date.yaml", + "category": "slots" + }, + { + "name": "End Of The Begin", + "path": "modules/slots/end_of_the_begin.yaml", + "category": "slots" + }, + { + "name": "End Of The End", + "path": "modules/slots/end_of_the_end.yaml", + "category": "slots" + }, + { + "name": "Ended At Time", + "path": "modules/slots/ended_at_time.yaml", + "category": "slots" + }, + { + "name": "Endorsement Source", + "path": "modules/slots/endorsement_source.yaml", + "category": "slots" + }, + { + "name": "Event Date", + "path": "modules/slots/event_date.yaml", + "category": "slots" + }, + { + "name": "Event Description", + "path": "modules/slots/event_description.yaml", + "category": "slots" + }, + { + "name": "Event Id", + "path": "modules/slots/event_id.yaml", + "category": "slots" + }, + { + "name": "Event Type", + "path": "modules/slots/event_type.yaml", + "category": "slots" + }, + { + "name": "Exhibition Type", + "path": "modules/slots/exhibition_type.yaml", + "category": "slots" + }, + { + "name": "Expertise Areas", + "path": "modules/slots/expertise_areas.yaml", + "category": "slots" + }, + { + "name": "Exposed Via Portal", + "path": "modules/slots/exposed_via_portal.yaml", + "category": "slots" + }, + { + "name": "Exposes Collections", + "path": "modules/slots/exposes_collections.yaml", + "category": "slots" + }, + { + "name": "Extent", + "path": "modules/slots/extent.yaml", + "category": "slots" + }, + { + "name": "Extent Items", + "path": "modules/slots/extent_items.yaml", + "category": "slots" + }, + { + "name": "External Identifiers", + "path": "modules/slots/external_identifiers.yaml", + "category": "slots" + }, + { + "name": "Extraction Agent", + "path": "modules/slots/extraction_agent.yaml", + "category": "slots" + }, + { + "name": "Extraction Confidence", + "path": "modules/slots/extraction_confidence.yaml", + "category": "slots" + }, + { + "name": "Extraction Metadata", + "path": "modules/slots/extraction_metadata.yaml", + "category": "slots" + }, + { + "name": "Extraction Method", + "path": "modules/slots/extraction_method.yaml", + "category": "slots" + }, + { + "name": "Extraction Notes", + "path": "modules/slots/extraction_notes.yaml", + "category": "slots" + }, + { + "name": "Extraction Timestamp", + "path": "modules/slots/extraction_timestamp.yaml", + "category": "slots" + }, + { + "name": "Feeds Portal", + "path": "modules/slots/feeds_portal.yaml", + "category": "slots" + }, + { + "name": "Finding Aids", + "path": "modules/slots/finding_aids.yaml", + "category": "slots" + }, + { + "name": "Follow Up Date", + "path": "modules/slots/follow_up_date.yaml", + "category": "slots" + }, + { + "name": "Funding Source", + "path": "modules/slots/funding_source.yaml", + "category": "slots" + }, + { + "name": "Gender Identity", + "path": "modules/slots/gender_identity.yaml", + "category": "slots" + }, + { + "name": "Generates", + "path": "modules/slots/generates.yaml", + "category": "slots" + }, + { + "name": "Geographic Scope", + "path": "modules/slots/geographic_scope.yaml", + "category": "slots" + }, + { + "name": "Geonames Id", + "path": "modules/slots/geonames_id.yaml", + "category": "slots" + }, + { + "name": "Given Name", + "path": "modules/slots/given_name.yaml", + "category": "slots" + }, + { + "name": "Governance Structure", + "path": "modules/slots/governance_structure.yaml", + "category": "slots" + }, + { + "name": "Has Collection", + "path": "modules/slots/has_collection.yaml", + "category": "slots" + }, + { + "name": "Has Derived Observation", + "path": "modules/slots/has_derived_observation.yaml", + "category": "slots" + }, + { + "name": "Has Feature Type", + "path": "modules/slots/has_feature_type.yaml", + "category": "slots" + }, + { + "name": "Has Geospatial Location", + "path": "modules/slots/has_geospatial_location.yaml", + "category": "slots" + }, + { + "name": "Has Member", + "path": "modules/slots/has_member.yaml", + "category": "slots" + }, + { + "name": "Has Observation", + "path": "modules/slots/has_observation.yaml", + "category": "slots" + }, + { + "name": "Has Person Name", + "path": "modules/slots/has_person_name.yaml", + "category": "slots" + }, + { + "name": "Has Person Observation", + "path": "modules/slots/has_person_observation.yaml", + "category": "slots" + }, + { + "name": "Has Suborganization", + "path": "modules/slots/has_suborganization.yaml", + "category": "slots" + }, + { + "name": "Has Unit", + "path": "modules/slots/has_unit.yaml", + "category": "slots" + }, + { + "name": "Hc Id", + "path": "modules/slots/hc_id.yaml", + "category": "slots" + }, + { + "name": "Holds Record Set Types", + "path": "modules/slots/holds_record_set_types.yaml", + "category": "slots" + }, + { + "name": "Html File", + "path": "modules/slots/html_file.yaml", + "category": "slots" + }, + { + "name": "Humidity Tolerance", + "path": "modules/slots/humidity_tolerance.yaml", + "category": "slots" + }, + { + "name": "Id", + "path": "modules/slots/id.yaml", + "category": "slots" + }, + { + "name": "Identified By", + "path": "modules/slots/identified_by.yaml", + "category": "slots" + }, + { + "name": "Identifier Format Used", + "path": "modules/slots/identifier_format_used.yaml", + "category": "slots" + }, + { + "name": "Identifier Scheme", + "path": "modules/slots/identifier_scheme.yaml", + "category": "slots" + }, + { + "name": "Identifier Value", + "path": "modules/slots/identifier_value.yaml", + "category": "slots" + }, + { + "name": "Identifiers", + "path": "modules/slots/identifiers.yaml", + "category": "slots" + }, + { + "name": "Identifies", + "path": "modules/slots/identifies.yaml", + "category": "slots" + }, + { + "name": "Identifies Custodian", + "path": "modules/slots/identifies_custodian.yaml", + "category": "slots" + }, + { + "name": "Initials", + "path": "modules/slots/initials.yaml", + "category": "slots" + }, + { + "name": "Is Legal Status Of", + "path": "modules/slots/is_legal_status_of.yaml", + "category": "slots" + }, + { + "name": "Is Member Of", + "path": "modules/slots/is_member_of.yaml", + "category": "slots" + }, + { + "name": "Isbn", + "path": "modules/slots/isbn.yaml", + "category": "slots" + }, + { + "name": "Items", + "path": "modules/slots/items.yaml", + "category": "slots" + }, + { + "name": "Jurisdiction", + "path": "modules/slots/jurisdiction.yaml", + "category": "slots" + }, + { + "name": "Justification", + "path": "modules/slots/justification.yaml", + "category": "slots" + }, + { + "name": "Keywords", + "path": "modules/slots/keywords.yaml", + "category": "slots" + }, + { + "name": "Language", + "path": "modules/slots/language.yaml", + "category": "slots" + }, + { + "name": "Language Code", + "path": "modules/slots/language_code.yaml", + "category": "slots" + }, + { + "name": "Latitude", + "path": "modules/slots/latitude.yaml", + "category": "slots" + }, + { + "name": "Legal Entity Type", + "path": "modules/slots/legal_entity_type.yaml", + "category": "slots" + }, + { + "name": "Legal Form", + "path": "modules/slots/legal_form.yaml", + "category": "slots" + }, + { + "name": "Legal Jurisdiction", + "path": "modules/slots/legal_jurisdiction.yaml", + "category": "slots" + }, + { + "name": "Legal Name", + "path": "modules/slots/legal_name.yaml", + "category": "slots" + }, + { + "name": "Legal Responsibility Basis", + "path": "modules/slots/legal_responsibility_basis.yaml", + "category": "slots" + }, + { + "name": "Legal Responsibility End Date", + "path": "modules/slots/legal_responsibility_end_date.yaml", + "category": "slots" + }, + { + "name": "Legal Responsibility Start Date", + "path": "modules/slots/legal_responsibility_start_date.yaml", + "category": "slots" + }, + { + "name": "Legal Status", + "path": "modules/slots/legal_status.yaml", + "category": "slots" + }, + { + "name": "Linkedin Profile Path", + "path": "modules/slots/linkedin_profile_path.yaml", + "category": "slots" + }, + { + "name": "Linkedin Profile Url", + "path": "modules/slots/linkedin_profile_url.yaml", + "category": "slots" + }, + { + "name": "Literal Name", + "path": "modules/slots/literal_name.yaml", + "category": "slots" + }, + { + "name": "Located At", + "path": "modules/slots/located_at.yaml", + "category": "slots" + }, + { + "name": "Longitude", + "path": "modules/slots/longitude.yaml", + "category": "slots" + }, + { + "name": "Managed By", + "path": "modules/slots/managed_by.yaml", + "category": "slots" + }, + { + "name": "Managed Collections", + "path": "modules/slots/managed_collections.yaml", + "category": "slots" + }, + { + "name": "Managing Unit", + "path": "modules/slots/managing_unit.yaml", + "category": "slots" + }, + { + "name": "Martyred", + "path": "modules/slots/martyred.yaml", + "category": "slots" + }, + { + "name": "Metadata Standards", + "path": "modules/slots/metadata_standards.yaml", + "category": "slots" + }, + { + "name": "Method", + "path": "modules/slots/method.yaml", + "category": "slots" + }, + { + "name": "Mission Statement", + "path": "modules/slots/mission_statement.yaml", + "category": "slots" + }, + { + "name": "Modified", + "path": "modules/slots/modified.yaml", + "category": "slots" + }, + { + "name": "Name Authority", + "path": "modules/slots/name_authority.yaml", + "category": "slots" + }, + { + "name": "Name Language", + "path": "modules/slots/name_language.yaml", + "category": "slots" + }, + { + "name": "Name Specification", + "path": "modules/slots/name_specification.yaml", + "category": "slots" + }, + { + "name": "Name Validity Period", + "path": "modules/slots/name_validity_period.yaml", + "category": "slots" + }, + { + "name": "Notes", + "path": "modules/slots/notes.yaml", + "category": "slots" + }, + { + "name": "Oai Pmh Endpoint", + "path": "modules/slots/oai_pmh_endpoint.yaml", + "category": "slots" + }, + { + "name": "Object Ref", + "path": "modules/slots/object_ref.yaml", + "category": "slots" + }, + { + "name": "Observation Context", + "path": "modules/slots/observation_context.yaml", + "category": "slots" + }, + { + "name": "Observation Date", + "path": "modules/slots/observation_date.yaml", + "category": "slots" + }, + { + "name": "Observation Source", + "path": "modules/slots/observation_source.yaml", + "category": "slots" + }, + { + "name": "Observed In", + "path": "modules/slots/observed_in.yaml", + "category": "slots" + }, + { + "name": "Observed Name", + "path": "modules/slots/observed_name.yaml", + "category": "slots" + }, + { + "name": "Occupation", + "path": "modules/slots/occupation.yaml", + "category": "slots" + }, + { + "name": "Offers Donation Schemes", + "path": "modules/slots/offers_donation_schemes.yaml", + "category": "slots" + }, + { + "name": "Operated By", + "path": "modules/slots/operated_by.yaml", + "category": "slots" + }, + { + "name": "Operates", + "path": "modules/slots/operates.yaml", + "category": "slots" + }, + { + "name": "Organizational Change Events", + "path": "modules/slots/organizational_change_events.yaml", + "category": "slots" + }, + { + "name": "Organizational Structure", + "path": "modules/slots/organizational_structure.yaml", + "category": "slots" + }, + { + "name": "Organizational Structures", + "path": "modules/slots/organizational_structures.yaml", + "category": "slots" + }, + { + "name": "Parent Collection", + "path": "modules/slots/parent_collection.yaml", + "category": "slots" + }, + { + "name": "Parent Custodian", + "path": "modules/slots/parent_custodian.yaml", + "category": "slots" + }, + { + "name": "Parent Society", + "path": "modules/slots/parent_society.yaml", + "category": "slots" + }, + { + "name": "Parent Unit", + "path": "modules/slots/parent_unit.yaml", + "category": "slots" + }, + { + "name": "Part Of Custodian Collection", + "path": "modules/slots/part_of_custodian_collection.yaml", + "category": "slots" + }, + { + "name": "Participated In Events", + "path": "modules/slots/participated_in_events.yaml", + "category": "slots" + }, + { + "name": "Patronym", + "path": "modules/slots/patronym.yaml", + "category": "slots" + }, + { + "name": "Person Id", + "path": "modules/slots/person_id.yaml", + "category": "slots" + }, + { + "name": "Person Name", + "path": "modules/slots/person_name.yaml", + "category": "slots" + }, + { + "name": "Place Designation", + "path": "modules/slots/place_designation.yaml", + "category": "slots" + }, + { + "name": "Place Language", + "path": "modules/slots/place_language.yaml", + "category": "slots" + }, + { + "name": "Place Name", + "path": "modules/slots/place_name.yaml", + "category": "slots" + }, + { + "name": "Place Note", + "path": "modules/slots/place_note.yaml", + "category": "slots" + }, + { + "name": "Place Specificity", + "path": "modules/slots/place_specificity.yaml", + "category": "slots" + }, + { + "name": "Platform Name", + "path": "modules/slots/platform_name.yaml", + "category": "slots" + }, + { + "name": "Platform Of", + "path": "modules/slots/platform_of.yaml", + "category": "slots" + }, + { + "name": "Platform Type", + "path": "modules/slots/platform_type.yaml", + "category": "slots" + }, + { + "name": "Policy Id", + "path": "modules/slots/policy_id.yaml", + "category": "slots" + }, + { + "name": "Policy Name", + "path": "modules/slots/policy_name.yaml", + "category": "slots" + }, + { + "name": "Portal Data Sources", + "path": "modules/slots/portal_data_sources.yaml", + "category": "slots" + }, + { + "name": "Postal Code", + "path": "modules/slots/postal_code.yaml", + "category": "slots" + }, + { + "name": "Powered By Cms", + "path": "modules/slots/powered_by_cms.yaml", + "category": "slots" + }, + { + "name": "Preferred Label", + "path": "modules/slots/preferred_label.yaml", + "category": "slots" + }, + { + "name": "Preservation Level", + "path": "modules/slots/preservation_level.yaml", + "category": "slots" + }, + { + "name": "Price", + "path": "modules/slots/price.yaml", + "category": "slots" + }, + { + "name": "Price Currency", + "path": "modules/slots/price_currency.yaml", + "category": "slots" + }, + { + "name": "Primary Register", + "path": "modules/slots/primary_register.yaml", + "category": "slots" + }, + { + "name": "Pronouns", + "path": "modules/slots/pronouns.yaml", + "category": "slots" + }, + { + "name": "Protocol", + "path": "modules/slots/protocol.yaml", + "category": "slots" + }, + { + "name": "Provenance Note", + "path": "modules/slots/provenance_note.yaml", + "category": "slots" + }, + { + "name": "Provenance Statement", + "path": "modules/slots/provenance_statement.yaml", + "category": "slots" + }, + { + "name": "Provenance Text", + "path": "modules/slots/provenance_text.yaml", + "category": "slots" + }, + { + "name": "Publication Date", + "path": "modules/slots/publication_date.yaml", + "category": "slots" + }, + { + "name": "Publisher", + "path": "modules/slots/publisher.yaml", + "category": "slots" + }, + { + "name": "Reconstruction Method", + "path": "modules/slots/reconstruction_method.yaml", + "category": "slots" + }, + { + "name": "Record Type", + "path": "modules/slots/record_type.yaml", + "category": "slots" + }, + { + "name": "Refers To Custodian", + "path": "modules/slots/refers_to_custodian.yaml", + "category": "slots" + }, + { + "name": "Refers To Person", + "path": "modules/slots/refers_to_person.yaml", + "category": "slots" + }, + { + "name": "Registration Authority", + "path": "modules/slots/registration_authority.yaml", + "category": "slots" + }, + { + "name": "Registration Date", + "path": "modules/slots/registration_date.yaml", + "category": "slots" + }, + { + "name": "Registration Numbers", + "path": "modules/slots/registration_numbers.yaml", + "category": "slots" + }, + { + "name": "Religion", + "path": "modules/slots/religion.yaml", + "category": "slots" + }, + { + "name": "Response Formats", + "path": "modules/slots/response_formats.yaml", + "category": "slots" + }, + { + "name": "Responsible Agent", + "path": "modules/slots/responsible_agent.yaml", + "category": "slots" + }, + { + "name": "Responsible Legal Entity", + "path": "modules/slots/responsible_legal_entity.yaml", + "category": "slots" + }, + { + "name": "Resulting Units", + "path": "modules/slots/resulting_units.yaml", + "category": "slots" + }, + { + "name": "Retrieval Agent", + "path": "modules/slots/retrieval_agent.yaml", + "category": "slots" + }, + { + "name": "Retrieved On", + "path": "modules/slots/retrieved_on.yaml", + "category": "slots" + }, + { + "name": "Revision Date", + "path": "modules/slots/revision_date.yaml", + "category": "slots" + }, + { + "name": "Rico Equivalent", + "path": "modules/slots/rico_equivalent.yaml", + "category": "slots" + }, + { + "name": "Rico Record Set Type", + "path": "modules/slots/rico_record_set_type.yaml", + "category": "slots" + }, + { + "name": "Role End Date", + "path": "modules/slots/role_end_date.yaml", + "category": "slots" + }, + { + "name": "Role Start Date", + "path": "modules/slots/role_start_date.yaml", + "category": "slots" + }, + { + "name": "Role Title", + "path": "modules/slots/role_title.yaml", + "category": "slots" + }, + { + "name": "Safeguarded By", + "path": "modules/slots/safeguarded_by.yaml", + "category": "slots" + }, + { + "name": "Safeguards", + "path": "modules/slots/safeguards.yaml", + "category": "slots" + }, + { + "name": "Security Level", + "path": "modules/slots/security_level.yaml", + "category": "slots" + }, + { + "name": "Served By", + "path": "modules/slots/served_by.yaml", + "category": "slots" + }, + { + "name": "Serves Finding Aids", + "path": "modules/slots/serves_finding_aids.yaml", + "category": "slots" + }, + { + "name": "Service Area", + "path": "modules/slots/service_area.yaml", + "category": "slots" + }, + { + "name": "Settlement", + "path": "modules/slots/settlement.yaml", + "category": "slots" + }, + { + "name": "Source", + "path": "modules/slots/source.yaml", + "category": "slots" + }, + { + "name": "Source Creator", + "path": "modules/slots/source_creator.yaml", + "category": "slots" + }, + { + "name": "Source Date", + "path": "modules/slots/source_date.yaml", + "category": "slots" + }, + { + "name": "Source Type", + "path": "modules/slots/source_type.yaml", + "category": "slots" + }, + { + "name": "Source Uri", + "path": "modules/slots/source_uri.yaml", + "category": "slots" + }, + { + "name": "Source Url", + "path": "modules/slots/source_url.yaml", + "category": "slots" + }, + { + "name": "Sparql Endpoint", + "path": "modules/slots/sparql_endpoint.yaml", + "category": "slots" + }, + { + "name": "Staff Count", + "path": "modules/slots/staff_count.yaml", + "category": "slots" + }, + { + "name": "Staff Impact", + "path": "modules/slots/staff_impact.yaml", + "category": "slots" + }, + { + "name": "Staff Members", + "path": "modules/slots/staff_members.yaml", + "category": "slots" + }, + { + "name": "Staff Role", + "path": "modules/slots/staff_role.yaml", + "category": "slots" + }, + { + "name": "Standardized Name", + "path": "modules/slots/standardized_name.yaml", + "category": "slots" + }, + { + "name": "Start Date", + "path": "modules/slots/start_date.yaml", + "category": "slots" + }, + { + "name": "Started At Time", + "path": "modules/slots/started_at_time.yaml", + "category": "slots" + }, + { + "name": "Status", + "path": "modules/slots/status.yaml", + "category": "slots" + }, + { + "name": "Storage Location", + "path": "modules/slots/storage_location.yaml", + "category": "slots" + }, + { + "name": "Street Address", + "path": "modules/slots/street_address.yaml", + "category": "slots" + }, + { + "name": "Sub Collections", + "path": "modules/slots/sub_collections.yaml", + "category": "slots" + }, + { + "name": "Subject Areas", + "path": "modules/slots/subject_areas.yaml", + "category": "slots" + }, + { + "name": "Subregion", + "path": "modules/slots/subregion.yaml", + "category": "slots" + }, + { + "name": "Superseded By", + "path": "modules/slots/superseded_by.yaml", + "category": "slots" + }, + { + "name": "Supersedes", + "path": "modules/slots/supersedes.yaml", + "category": "slots" + }, + { + "name": "Surname Prefix", + "path": "modules/slots/surname_prefix.yaml", + "category": "slots" + }, + { + "name": "Technology Stack", + "path": "modules/slots/technology_stack.yaml", + "category": "slots" + }, + { + "name": "Temperature Tolerance", + "path": "modules/slots/temperature_tolerance.yaml", + "category": "slots" + }, + { + "name": "Temporal Coverage", + "path": "modules/slots/temporal_coverage.yaml", + "category": "slots" + }, + { + "name": "Temporal Extent", + "path": "modules/slots/temporal_extent.yaml", + "category": "slots" + }, + { + "name": "Time Of Destruction", + "path": "modules/slots/time_of_destruction.yaml", + "category": "slots" + }, + { + "name": "Title", + "path": "modules/slots/title.yaml", + "category": "slots" + }, + { + "name": "Type Scope", + "path": "modules/slots/type_scope.yaml", + "category": "slots" + }, + { + "name": "Typical Domains", + "path": "modules/slots/typical_domains.yaml", + "category": "slots" + }, + { + "name": "Typical Metadata Standards", + "path": "modules/slots/typical_metadata_standards.yaml", + "category": "slots" + }, + { + "name": "Typical Technical Features", + "path": "modules/slots/typical_technical_features.yaml", + "category": "slots" + }, + { + "name": "Unit Affiliation", + "path": "modules/slots/unit_affiliation.yaml", + "category": "slots" + }, + { + "name": "Unit Name", + "path": "modules/slots/unit_name.yaml", + "category": "slots" + }, + { + "name": "Unit Type", + "path": "modules/slots/unit_type.yaml", + "category": "slots" + }, + { + "name": "Used", + "path": "modules/slots/used.yaml", + "category": "slots" + }, + { + "name": "Used By", + "path": "modules/slots/used_by.yaml", + "category": "slots" + }, + { + "name": "Used Sources", + "path": "modules/slots/used_sources.yaml", + "category": "slots" + }, + { + "name": "Valid From", + "path": "modules/slots/valid_from.yaml", + "category": "slots" + }, + { + "name": "Valid To", + "path": "modules/slots/valid_to.yaml", + "category": "slots" + }, + { + "name": "Variant Of Name", + "path": "modules/slots/variant_of_name.yaml", + "category": "slots" + }, + { + "name": "Was Derived From", + "path": "modules/slots/was_derived_from.yaml", + "category": "slots" + }, + { + "name": "Was Generated By", + "path": "modules/slots/was_generated_by.yaml", + "category": "slots" + }, + { + "name": "Was Revision Of", + "path": "modules/slots/was_revision_of.yaml", + "category": "slots" + }, + { + "name": "Web Claims", + "path": "modules/slots/web_claims.yaml", + "category": "slots" + }, + { + "name": "Website", + "path": "modules/slots/website.yaml", + "category": "slots" + }, + { + "name": "Wikidata Id", + "path": "modules/slots/wikidata_id.yaml", + "category": "slots" + }, + { + "name": "Xpath", + "path": "modules/slots/xpath.yaml", + "category": "slots" + } + ] } - ] - }, - { - "name": "class", - "displayName": "Classes", - "files": [ - { - "name": "AcademicArchive", - "path": "modules/classes/AcademicArchive.yaml", - "category": "classes" - }, - { - "name": "AccessPolicy", - "path": "modules/classes/AccessPolicy.yaml", - "category": "classes" - }, - { - "name": "AdministrativeOffice", - "path": "modules/classes/AdministrativeOffice.yaml", - "category": "classes" - }, - { - "name": "AdvertisingRadioArchive", - "path": "modules/classes/AdvertisingRadioArchive.yaml", - "category": "classes" - }, - { - "name": "AllocationAgency", - "path": "modules/classes/AllocationAgency.yaml", - "category": "classes" - }, - { - "name": "AnimalSoundArchive", - "path": "modules/classes/AnimalSoundArchive.yaml", - "category": "classes" - }, - { - "name": "Appellation", - "path": "modules/classes/Appellation.yaml", - "category": "classes" - }, - { - "name": "ArchitecturalArchive", - "path": "modules/classes/ArchitecturalArchive.yaml", - "category": "classes" - }, - { - "name": "ArchivalLibrary", - "path": "modules/classes/ArchivalLibrary.yaml", - "category": "classes" - }, - { - "name": "ArchivalRepository", - "path": "modules/classes/ArchivalRepository.yaml", - "category": "classes" - }, - { - "name": "ArchiveAssociation", - "path": "modules/classes/ArchiveAssociation.yaml", - "category": "classes" - }, - { - "name": "ArchiveNetwork", - "path": "modules/classes/ArchiveNetwork.yaml", - "category": "classes" - }, - { - "name": "ArchiveOfInternationalOrganization", - "path": "modules/classes/ArchiveOfInternationalOrganization.yaml", - "category": "classes" - }, - { - "name": "ArchiveOrganizationType", - "path": "modules/classes/ArchiveOrganizationType.yaml", - "category": "classes" - }, - { - "name": "ArchivesForBuildingRecords", - "path": "modules/classes/ArchivesForBuildingRecords.yaml", - "category": "classes" - }, - { - "name": "ArchivesRegionales", - "path": "modules/classes/ArchivesRegionales.yaml", - "category": "classes" - }, - { - "name": "ArtArchive", - "path": "modules/classes/ArtArchive.yaml", - "category": "classes" - }, - { - "name": "ArticlesOfAssociation", - "path": "modules/classes/ArticlesOfAssociation.yaml", - "category": "classes" - }, - { - "name": "AssociationArchive", - "path": "modules/classes/AssociationArchive.yaml", - "category": "classes" - }, - { - "name": "AudiovisualArchive", - "path": "modules/classes/AudiovisualArchive.yaml", - "category": "classes" - }, - { - "name": "AuxiliaryDigitalPlatform", - "path": "modules/classes/AuxiliaryDigitalPlatform.yaml", - "category": "classes" - }, - { - "name": "AuxiliaryPlace", - "path": "modules/classes/AuxiliaryPlace.yaml", - "category": "classes" - }, - { - "name": "BankArchive", - "path": "modules/classes/BankArchive.yaml", - "category": "classes" - }, - { - "name": "Bildstelle", - "path": "modules/classes/Bildstelle.yaml", - "category": "classes" - }, - { - "name": "BioCustodianType", - "path": "modules/classes/BioCustodianType.yaml", - "category": "classes" - }, - { - "name": "BiologicalObject", - "path": "modules/classes/BiologicalObject.yaml", - "category": "classes" - }, - { - "name": "BranchOffice", - "path": "modules/classes/BranchOffice.yaml", - "category": "classes" - }, - { - "name": "Budget", - "path": "modules/classes/Budget.yaml", - "category": "classes" - }, - { - "name": "CallForApplication", - "path": "modules/classes/CallForApplication.yaml", - "category": "classes" - }, - { - "name": "CantonalArchive", - "path": "modules/classes/CantonalArchive.yaml", - "category": "classes" - }, - { - "name": "CastCollection", - "path": "modules/classes/CastCollection.yaml", - "category": "classes" - }, - { - "name": "CateringPlace", - "path": "modules/classes/CateringPlace.yaml", - "category": "classes" - }, - { - "name": "CathedralArchive", - "path": "modules/classes/CathedralArchive.yaml", - "category": "classes" - }, - { - "name": "ChurchArchive", - "path": "modules/classes/ChurchArchive.yaml", - "category": "classes" - }, - { - "name": "ChurchArchiveSweden", - "path": "modules/classes/ChurchArchiveSweden.yaml", - "category": "classes" - }, - { - "name": "Cinematheque", - "path": "modules/classes/Cinematheque.yaml", - "category": "classes" - }, - { - "name": "ClimateArchive", - "path": "modules/classes/ClimateArchive.yaml", - "category": "classes" - }, - { - "name": "ClosedSpace", - "path": "modules/classes/ClosedSpace.yaml", - "category": "classes" - }, - { - "name": "CollectingArchives", - "path": "modules/classes/CollectingArchives.yaml", - "category": "classes" - }, - { - "name": "Collection", - "path": "modules/classes/Collection.yaml", - "category": "classes" - }, - { - "name": "CollectionManagementSystem", - "path": "modules/classes/CollectionManagementSystem.yaml", - "category": "classes" - }, - { - "name": "CollectionType", - "path": "modules/classes/CollectionType.yaml", - "category": "classes" - }, - { - "name": "ComarcalArchive", - "path": "modules/classes/ComarcalArchive.yaml", - "category": "classes" - }, - { - "name": "CommercialOrganizationType", - "path": "modules/classes/CommercialOrganizationType.yaml", - "category": "classes" - }, - { - "name": "CommunityArchive", - "path": "modules/classes/CommunityArchive.yaml", - "category": "classes" - }, - { - "name": "CompanyArchives", - "path": "modules/classes/CompanyArchives.yaml", - "category": "classes" - }, - { - "name": "ConfidenceMeasure", - "path": "modules/classes/ConfidenceMeasure.yaml", - "category": "classes" - }, - { - "name": "ConflictStatus", - "path": "modules/classes/ConflictStatus.yaml", - "category": "classes" - }, - { - "name": "ConnectionNetwork", - "path": "modules/classes/ConnectionNetwork.yaml", - "category": "classes" - }, - { - "name": "ConservationLab", - "path": "modules/classes/ConservationLab.yaml", - "category": "classes" - }, - { - "name": "ConservationRecord", - "path": "modules/classes/ConservationRecord.yaml", - "category": "classes" - }, - { - "name": "Conservatoria", - "path": "modules/classes/Conservatoria.yaml", - "category": "classes" - }, - { - "name": "Container", - "path": "modules/classes/Container.yaml", - "category": "classes" - }, - { - "name": "ContributingAgency", - "path": "modules/classes/ContributingAgency.yaml", - "category": "classes" - }, - { - "name": "Country", - "path": "modules/classes/Country.yaml", - "category": "classes" - }, - { - "name": "CountyRecordOffice", - "path": "modules/classes/CountyRecordOffice.yaml", - "category": "classes" - }, - { - "name": "CourtRecords", - "path": "modules/classes/CourtRecords.yaml", - "category": "classes" - }, - { - "name": "CulturalInstitution", - "path": "modules/classes/CulturalInstitution.yaml", - "category": "classes" - }, - { - "name": "CurationActivity", - "path": "modules/classes/CurationActivity.yaml", - "category": "classes" - }, - { - "name": "CurrentArchive", - "path": "modules/classes/CurrentArchive.yaml", - "category": "classes" - }, - { - "name": "Custodian", - "path": "modules/classes/Custodian.yaml", - "category": "classes" - }, - { - "name": "CustodianAdministration", - "path": "modules/classes/CustodianAdministration.yaml", - "category": "classes" - }, - { - "name": "CustodianArchive", - "path": "modules/classes/CustodianArchive.yaml", - "category": "classes" - }, - { - "name": "CustodianCollection", - "path": "modules/classes/CustodianCollection.yaml", - "category": "classes" - }, - { - "name": "CustodianLegalStatus", - "path": "modules/classes/CustodianLegalStatus.yaml", - "category": "classes" - }, - { - "name": "CustodianName", - "path": "modules/classes/CustodianName.yaml", - "category": "classes" - }, - { - "name": "CustodianObservation", - "path": "modules/classes/CustodianObservation.yaml", - "category": "classes" - }, - { - "name": "CustodianPlace", - "path": "modules/classes/CustodianPlace.yaml", - "category": "classes" - }, - { - "name": "CustodianTimelineEvent", - "path": "modules/classes/CustodianTimelineEvent.yaml", - "category": "classes" - }, - { - "name": "CustodianType", - "path": "modules/classes/CustodianType.yaml", - "category": "classes" - }, - { - "name": "DarkArchive", - "path": "modules/classes/DarkArchive.yaml", - "category": "classes" - }, - { - "name": "DataLicensePolicy", - "path": "modules/classes/DataLicensePolicy.yaml", - "category": "classes" - }, - { - "name": "DataServiceEndpoint", - "path": "modules/classes/DataServiceEndpoint.yaml", - "category": "classes" - }, - { - "name": "DataServiceEndpointType", - "path": "modules/classes/DataServiceEndpointType.yaml", - "category": "classes" - }, - { - "name": "DataServiceEndpointTypes", - "path": "modules/classes/DataServiceEndpointTypes.yaml", - "category": "classes" - }, - { - "name": "Department", - "path": "modules/classes/Department.yaml", - "category": "classes" - }, - { - "name": "DepartmentalArchives", - "path": "modules/classes/DepartmentalArchives.yaml", - "category": "classes" - }, - { - "name": "DepositArchive", - "path": "modules/classes/DepositArchive.yaml", - "category": "classes" - }, - { - "name": "DigitalArchive", - "path": "modules/classes/DigitalArchive.yaml", - "category": "classes" - }, - { - "name": "DigitalPlatform", - "path": "modules/classes/DigitalPlatform.yaml", - "category": "classes" - }, - { - "name": "DigitalPlatformType", - "path": "modules/classes/DigitalPlatformType.yaml", - "category": "classes" - }, - { - "name": "DigitalPlatformTypes", - "path": "modules/classes/DigitalPlatformTypes.yaml", - "category": "classes" - }, - { - "name": "DimArchives", - "path": "modules/classes/DimArchives.yaml", - "category": "classes" - }, - { - "name": "DiocesanArchive", - "path": "modules/classes/DiocesanArchive.yaml", - "category": "classes" - }, - { - "name": "DistrictArchiveGermany", - "path": "modules/classes/DistrictArchiveGermany.yaml", - "category": "classes" - }, - { - "name": "DistritalArchive", - "path": "modules/classes/DistritalArchive.yaml", - "category": "classes" - }, - { - "name": "Division", - "path": "modules/classes/Division.yaml", - "category": "classes" - }, - { - "name": "DocumentationCentre", - "path": "modules/classes/DocumentationCentre.yaml", - "category": "classes" - }, - { - "name": "DonationScheme", - "path": "modules/classes/DonationScheme.yaml", - "category": "classes" - }, - { - "name": "EADDownload", - "path": "modules/classes/EADDownload.yaml", - "category": "classes" - }, - { - "name": "EconomicArchive", - "path": "modules/classes/EconomicArchive.yaml", - "category": "classes" - }, - { - "name": "EducationCenter", - "path": "modules/classes/EducationCenter.yaml", - "category": "classes" - }, - { - "name": "EducationCredential", - "path": "modules/classes/EducationCredential.yaml", - "category": "classes" - }, - { - "name": "EducationProviderType", - "path": "modules/classes/EducationProviderType.yaml", - "category": "classes" - }, - { - "name": "EncompassingBody", - "path": "modules/classes/EncompassingBody.yaml", - "category": "classes" - }, - { - "name": "EnvironmentalZone", - "path": "modules/classes/EnvironmentalZone.yaml", - "category": "classes" - }, - { - "name": "Event", - "path": "modules/classes/Event.yaml", - "category": "classes" - }, - { - "name": "ExhibitedObject", - "path": "modules/classes/ExhibitedObject.yaml", - "category": "classes" - }, - { - "name": "Exhibition", - "path": "modules/classes/Exhibition.yaml", - "category": "classes" - }, - { - "name": "ExhibitionCatalog", - "path": "modules/classes/ExhibitionCatalog.yaml", - "category": "classes" - }, - { - "name": "ExhibitionSpace", - "path": "modules/classes/ExhibitionSpace.yaml", - "category": "classes" - }, - { - "name": "ExtractionMetadata", - "path": "modules/classes/ExtractionMetadata.yaml", - "category": "classes" - }, - { - "name": "FeatureCustodianType", - "path": "modules/classes/FeatureCustodianType.yaml", - "category": "classes" - }, - { - "name": "FeaturePlace", - "path": "modules/classes/FeaturePlace.yaml", - "category": "classes" - }, - { - "name": "FileAPI", - "path": "modules/classes/FileAPI.yaml", - "category": "classes" - }, - { - "name": "FilmArchive", - "path": "modules/classes/FilmArchive.yaml", - "category": "classes" - }, - { - "name": "FinancialStatement", - "path": "modules/classes/FinancialStatement.yaml", - "category": "classes" - }, - { - "name": "FindingAid", - "path": "modules/classes/FindingAid.yaml", - "category": "classes" - }, - { - "name": "FindingAidType", - "path": "modules/classes/FindingAidType.yaml", - "category": "classes" - }, - { - "name": "Foremalarkiv", - "path": "modules/classes/Foremalarkiv.yaml", - "category": "classes" - }, - { - "name": "FoundationArchive", - "path": "modules/classes/FoundationArchive.yaml", - "category": "classes" - }, - { - "name": "FreeArchive", - "path": "modules/classes/FreeArchive.yaml", - "category": "classes" - }, - { - "name": "FrenchPrivateArchives", - "path": "modules/classes/FrenchPrivateArchives.yaml", - "category": "classes" - }, - { - "name": "FundingAgenda", - "path": "modules/classes/FundingAgenda.yaml", - "category": "classes" - }, - { - "name": "FundingRequirement", - "path": "modules/classes/FundingRequirement.yaml", - "category": "classes" - }, - { - "name": "Fylkesarkiv", - "path": "modules/classes/Fylkesarkiv.yaml", - "category": "classes" - }, - { - "name": "GalleryType", - "path": "modules/classes/GalleryType.yaml", - "category": "classes" - }, - { - "name": "GeoSpatialPlace", - "path": "modules/classes/GeoSpatialPlace.yaml", - "category": "classes" - }, - { - "name": "GiftShop", - "path": "modules/classes/GiftShop.yaml", - "category": "classes" - }, - { - "name": "GLAM", - "path": "modules/classes/GLAM.yaml", - "category": "classes" - }, - { - "name": "GovernmentArchive", - "path": "modules/classes/GovernmentArchive.yaml", - "category": "classes" - }, - { - "name": "HeritageRelevance", - "path": "modules/classes/HeritageRelevance.yaml", - "category": "classes" - }, - { - "name": "HeritageSocietyType", - "path": "modules/classes/HeritageSocietyType.yaml", - "category": "classes" - }, - { - "name": "HistoricalArchive", - "path": "modules/classes/HistoricalArchive.yaml", - "category": "classes" - }, - { - "name": "HistoricBuilding", - "path": "modules/classes/HistoricBuilding.yaml", - "category": "classes" - }, - { - "name": "HolySacredSiteType", - "path": "modules/classes/HolySacredSiteType.yaml", - "category": "classes" - }, - { - "name": "HospitalArchive", - "path": "modules/classes/HospitalArchive.yaml", - "category": "classes" - }, - { - "name": "HouseArchive", - "path": "modules/classes/HouseArchive.yaml", - "category": "classes" - }, - { - "name": "IconographicArchives", - "path": "modules/classes/IconographicArchives.yaml", - "category": "classes" - }, - { - "name": "Identifier", - "path": "modules/classes/Identifier.yaml", - "category": "classes" - }, - { - "name": "IIPImageServer", - "path": "modules/classes/IIPImageServer.yaml", - "category": "classes" - }, - { - "name": "InformationCarrier", - "path": "modules/classes/InformationCarrier.yaml", - "category": "classes" - }, - { - "name": "Institution", - "path": "modules/classes/Institution.yaml", - "category": "classes" - }, - { - "name": "InstitutionalArchive", - "path": "modules/classes/InstitutionalArchive.yaml", - "category": "classes" - }, - { - "name": "InstitutionalRepository", - "path": "modules/classes/InstitutionalRepository.yaml", - "category": "classes" - }, - { - "name": "IntangibleHeritageEvent", - "path": "modules/classes/IntangibleHeritageEvent.yaml", - "category": "classes" - }, - { - "name": "IntangibleHeritageForm", - "path": "modules/classes/IntangibleHeritageForm.yaml", - "category": "classes" - }, - { - "name": "IntangibleHeritageGroupType", - "path": "modules/classes/IntangibleHeritageGroupType.yaml", - "category": "classes" - }, - { - "name": "IntangibleHeritagePerformance", - "path": "modules/classes/IntangibleHeritagePerformance.yaml", - "category": "classes" - }, - { - "name": "InternetOfThings", - "path": "modules/classes/InternetOfThings.yaml", - "category": "classes" - }, - { - "name": "JointArchives", - "path": "modules/classes/JointArchives.yaml", - "category": "classes" - }, - { - "name": "Jurisdiction", - "path": "modules/classes/Jurisdiction.yaml", - "category": "classes" - }, - { - "name": "Kustodie", - "path": "modules/classes/Kustodie.yaml", - "category": "classes" - }, - { - "name": "Landsarkiv", - "path": "modules/classes/Landsarkiv.yaml", - "category": "classes" - }, - { - "name": "LanguageCode", - "path": "modules/classes/LanguageCode.yaml", - "category": "classes" - }, - { - "name": "LanguageProficiency", - "path": "modules/classes/LanguageProficiency.yaml", - "category": "classes" - }, - { - "name": "LegalEntityType", - "path": "modules/classes/LegalEntityType.yaml", - "category": "classes" - }, - { - "name": "LegalForm", - "path": "modules/classes/LegalForm.yaml", - "category": "classes" - }, - { - "name": "LegalName", - "path": "modules/classes/LegalName.yaml", - "category": "classes" - }, - { - "name": "LegalResponsibilityCollection", - "path": "modules/classes/LegalResponsibilityCollection.yaml", - "category": "classes" - }, - { - "name": "LGBTArchive", - "path": "modules/classes/LGBTArchive.yaml", - "category": "classes" - }, - { - "name": "LibraryType", - "path": "modules/classes/LibraryType.yaml", - "category": "classes" - }, - { - "name": "LightArchives", - "path": "modules/classes/LightArchives.yaml", - "category": "classes" - }, - { - "name": "LinkedInProfile", - "path": "modules/classes/LinkedInProfile.yaml", - "category": "classes" - }, - { - "name": "LiteraryArchive", - "path": "modules/classes/LiteraryArchive.yaml", - "category": "classes" - }, - { - "name": "LLMResponse", - "path": "modules/classes/LLMResponse.yaml", - "category": "classes" - }, - { - "name": "Loan", - "path": "modules/classes/Loan.yaml", - "category": "classes" - }, - { - "name": "LocalGovernmentArchive", - "path": "modules/classes/LocalGovernmentArchive.yaml", - "category": "classes" - }, - { - "name": "LocalHeritageInstitutionSweden", - "path": "modules/classes/LocalHeritageInstitutionSweden.yaml", - "category": "classes" - }, - { - "name": "LocalHistoryArchive", - "path": "modules/classes/LocalHistoryArchive.yaml", - "category": "classes" - }, - { - "name": "LocationLibrary", - "path": "modules/classes/LocationLibrary.yaml", - "category": "classes" - }, - { - "name": "MailingListArchive", - "path": "modules/classes/MailingListArchive.yaml", - "category": "classes" - }, - { - "name": "MediaArchive", - "path": "modules/classes/MediaArchive.yaml", - "category": "classes" - }, - { - "name": "Medienzentrum", - "path": "modules/classes/Medienzentrum.yaml", - "category": "classes" - }, - { - "name": "MemoryInstitution", - "path": "modules/classes/MemoryInstitution.yaml", - "category": "classes" - }, - { - "name": "METSAPI", - "path": "modules/classes/METSAPI.yaml", - "category": "classes" - }, - { - "name": "MilitaryArchive", - "path": "modules/classes/MilitaryArchive.yaml", - "category": "classes" - }, - { - "name": "MissionStatement", - "path": "modules/classes/MissionStatement.yaml", - "category": "classes" - }, - { - "name": "MixedCustodianType", - "path": "modules/classes/MixedCustodianType.yaml", - "category": "classes" - }, - { - "name": "MonasteryArchive", - "path": "modules/classes/MonasteryArchive.yaml", - "category": "classes" - }, - { - "name": "MunicipalArchive", - "path": "modules/classes/MunicipalArchive.yaml", - "category": "classes" - }, - { - "name": "MuseumArchive", - "path": "modules/classes/MuseumArchive.yaml", - "category": "classes" - }, - { - "name": "MuseumType", - "path": "modules/classes/MuseumType.yaml", - "category": "classes" - }, - { - "name": "MusicArchive", - "path": "modules/classes/MusicArchive.yaml", - "category": "classes" - }, - { - "name": "Nachlass", - "path": "modules/classes/Nachlass.yaml", - "category": "classes" - }, - { - "name": "NationalArchives", - "path": "modules/classes/NationalArchives.yaml", - "category": "classes" - }, - { - "name": "NationalTreasure", - "path": "modules/classes/NationalTreasure.yaml", - "category": "classes" - }, - { - "name": "NationalTreasureOfFrance", - "path": "modules/classes/NationalTreasureOfFrance.yaml", - "category": "classes" - }, - { - "name": "NewspaperClippingsArchive", - "path": "modules/classes/NewspaperClippingsArchive.yaml", - "category": "classes" - }, - { - "name": "NobilityArchive", - "path": "modules/classes/NobilityArchive.yaml", - "category": "classes" - }, - { - "name": "NonProfitType", - "path": "modules/classes/NonProfitType.yaml", - "category": "classes" - }, - { - "name": "NotarialArchive", - "path": "modules/classes/NotarialArchive.yaml", - "category": "classes" - }, - { - "name": "OAIPMHEndpoint", - "path": "modules/classes/OAIPMHEndpoint.yaml", - "category": "classes" - }, - { - "name": "OfficialInstitutionType", - "path": "modules/classes/OfficialInstitutionType.yaml", - "category": "classes" - }, - { - "name": "OnlineNewsArchive", - "path": "modules/classes/OnlineNewsArchive.yaml", - "category": "classes" - }, - { - "name": "Organization", - "path": "modules/classes/Organization.yaml", - "category": "classes" - }, - { - "name": "OrganizationalChangeEvent", - "path": "modules/classes/OrganizationalChangeEvent.yaml", - "category": "classes" - }, - { - "name": "OrganizationalStructure", - "path": "modules/classes/OrganizationalStructure.yaml", - "category": "classes" - }, - { - "name": "OrganizationalSubdivision", - "path": "modules/classes/OrganizationalSubdivision.yaml", - "category": "classes" - }, - { - "name": "OrganizationBranch", - "path": "modules/classes/OrganizationBranch.yaml", - "category": "classes" - }, - { - "name": "OutdoorSite", - "path": "modules/classes/OutdoorSite.yaml", - "category": "classes" - }, - { - "name": "ParentOrganizationUnit", - "path": "modules/classes/ParentOrganizationUnit.yaml", - "category": "classes" - }, - { - "name": "ParishArchive", - "path": "modules/classes/ParishArchive.yaml", - "category": "classes" - }, - { - "name": "ParliamentaryArchives", - "path": "modules/classes/ParliamentaryArchives.yaml", - "category": "classes" - }, - { - "name": "PartyArchive", - "path": "modules/classes/PartyArchive.yaml", - "category": "classes" - }, - { - "name": "PerformingArtsArchive", - "path": "modules/classes/PerformingArtsArchive.yaml", - "category": "classes" - }, - { - "name": "Person", - "path": "modules/classes/Person.yaml", - "category": "classes" - }, - { - "name": "PersonalCollectionType", - "path": "modules/classes/PersonalCollectionType.yaml", - "category": "classes" - }, - { - "name": "PersonalLibrary", - "path": "modules/classes/PersonalLibrary.yaml", - "category": "classes" - }, - { - "name": "PersonConnection", - "path": "modules/classes/PersonConnection.yaml", - "category": "classes" - }, - { - "name": "Personenstandsarchiv", - "path": "modules/classes/Personenstandsarchiv.yaml", - "category": "classes" - }, - { - "name": "PersonName", - "path": "modules/classes/PersonName.yaml", - "category": "classes" - }, - { - "name": "PersonObservation", - "path": "modules/classes/PersonObservation.yaml", - "category": "classes" - }, - { - "name": "PersonOrOrganization", - "path": "modules/classes/PersonOrOrganization.yaml", - "category": "classes" - }, - { - "name": "PersonWebClaim", - "path": "modules/classes/PersonWebClaim.yaml", - "category": "classes" - }, - { - "name": "PhotoArchive", - "path": "modules/classes/PhotoArchive.yaml", - "category": "classes" - }, - { - "name": "PhotographCollection", - "path": "modules/classes/PhotographCollection.yaml", - "category": "classes" - }, - { - "name": "PoliticalArchive", - "path": "modules/classes/PoliticalArchive.yaml", - "category": "classes" - }, - { - "name": "PostcustodialArchive", - "path": "modules/classes/PostcustodialArchive.yaml", - "category": "classes" - }, - { - "name": "PressArchive", - "path": "modules/classes/PressArchive.yaml", - "category": "classes" - }, - { - "name": "PrimaryDigitalPresenceAssertion", - "path": "modules/classes/PrimaryDigitalPresenceAssertion.yaml", - "category": "classes" - }, - { - "name": "PrintRoom", - "path": "modules/classes/PrintRoom.yaml", - "category": "classes" - }, - { - "name": "Project", - "path": "modules/classes/Project.yaml", - "category": "classes" - }, - { - "name": "ProvenanceEvent", - "path": "modules/classes/ProvenanceEvent.yaml", - "category": "classes" - }, - { - "name": "ProvincialArchive", - "path": "modules/classes/ProvincialArchive.yaml", - "category": "classes" - }, - { - "name": "ProvincialHistoricalArchive", - "path": "modules/classes/ProvincialHistoricalArchive.yaml", - "category": "classes" - }, - { - "name": "PublicArchive", - "path": "modules/classes/PublicArchive.yaml", - "category": "classes" - }, - { - "name": "PublicArchivesInFrance", - "path": "modules/classes/PublicArchivesInFrance.yaml", - "category": "classes" - }, - { - "name": "PublicSpace", - "path": "modules/classes/PublicSpace.yaml", - "category": "classes" - }, - { - "name": "RadioArchive", - "path": "modules/classes/RadioArchive.yaml", - "category": "classes" - }, - { - "name": "ReadingRoom", - "path": "modules/classes/ReadingRoom.yaml", - "category": "classes" - }, - { - "name": "ReadingRoomAnnex", - "path": "modules/classes/ReadingRoomAnnex.yaml", - "category": "classes" - }, - { - "name": "ReconstructedEntity", - "path": "modules/classes/ReconstructedEntity.yaml", - "category": "classes" - }, - { - "name": "ReconstructionActivity", - "path": "modules/classes/ReconstructionActivity.yaml", - "category": "classes" - }, - { - "name": "ReconstructionAgent", - "path": "modules/classes/ReconstructionAgent.yaml", - "category": "classes" - }, - { - "name": "RegionalArchive", - "path": "modules/classes/RegionalArchive.yaml", - "category": "classes" - }, - { - "name": "RegionalArchivesInIceland", - "path": "modules/classes/RegionalArchivesInIceland.yaml", - "category": "classes" - }, - { - "name": "RegionalEconomicArchive", - "path": "modules/classes/RegionalEconomicArchive.yaml", - "category": "classes" - }, - { - "name": "RegionalHistoricCenter", - "path": "modules/classes/RegionalHistoricCenter.yaml", - "category": "classes" - }, - { - "name": "RegionalStateArchives", - "path": "modules/classes/RegionalStateArchives.yaml", - "category": "classes" - }, - { - "name": "RegistrationAuthority", - "path": "modules/classes/RegistrationAuthority.yaml", - "category": "classes" - }, - { - "name": "RegistrationInfo", - "path": "modules/classes/RegistrationInfo.yaml", - "category": "classes" - }, - { - "name": "ReligiousArchive", - "path": "modules/classes/ReligiousArchive.yaml", - "category": "classes" - }, - { - "name": "ResearchCenter", - "path": "modules/classes/ResearchCenter.yaml", - "category": "classes" - }, - { - "name": "ResearchOrganizationType", - "path": "modules/classes/ResearchOrganizationType.yaml", - "category": "classes" - }, - { - "name": "SchoolArchive", - "path": "modules/classes/SchoolArchive.yaml", - "category": "classes" - }, - { - "name": "ScientificArchive", - "path": "modules/classes/ScientificArchive.yaml", - "category": "classes" - }, - { - "name": "ScientificTechnicAndIndustrialCultureCenter", - "path": "modules/classes/ScientificTechnicAndIndustrialCultureCenter.yaml", - "category": "classes" - }, - { - "name": "SearchAPI", - "path": "modules/classes/SearchAPI.yaml", - "category": "classes" - }, - { - "name": "SectorOfArchivesInSweden", - "path": "modules/classes/SectorOfArchivesInSweden.yaml", - "category": "classes" - }, - { - "name": "SecurityArchives", - "path": "modules/classes/SecurityArchives.yaml", - "category": "classes" - }, - { - "name": "ServiceArea", - "path": "modules/classes/ServiceArea.yaml", - "category": "classes" - }, - { - "name": "Settlement", - "path": "modules/classes/Settlement.yaml", - "category": "classes" - }, - { - "name": "SocialMediaContent", - "path": "modules/classes/SocialMediaContent.yaml", - "category": "classes" - }, - { - "name": "SocialMediaPlatformType", - "path": "modules/classes/SocialMediaPlatformType.yaml", - "category": "classes" - }, - { - "name": "SocialMediaPlatformTypes", - "path": "modules/classes/SocialMediaPlatformTypes.yaml", - "category": "classes" - }, - { - "name": "SocialMediaPost", - "path": "modules/classes/SocialMediaPost.yaml", - "category": "classes" - }, - { - "name": "SocialMediaPostType", - "path": "modules/classes/SocialMediaPostType.yaml", - "category": "classes" - }, - { - "name": "SocialMediaPostTypes", - "path": "modules/classes/SocialMediaPostTypes.yaml", - "category": "classes" - }, - { - "name": "SocialMediaProfile", - "path": "modules/classes/SocialMediaProfile.yaml", - "category": "classes" - }, - { - "name": "SocialSpace", - "path": "modules/classes/SocialSpace.yaml", - "category": "classes" - }, - { - "name": "SoundArchive", - "path": "modules/classes/SoundArchive.yaml", - "category": "classes" - }, - { - "name": "SourceDocument", - "path": "modules/classes/SourceDocument.yaml", - "category": "classes" - }, - { - "name": "SpecialCollection", - "path": "modules/classes/SpecialCollection.yaml", - "category": "classes" - }, - { - "name": "SpecializedArchive", - "path": "modules/classes/SpecializedArchive.yaml", - "category": "classes" - }, - { - "name": "SpecializedArchivesCzechia", - "path": "modules/classes/SpecializedArchivesCzechia.yaml", - "category": "classes" - }, - { - "name": "StaffRole", - "path": "modules/classes/StaffRole.yaml", - "category": "classes" - }, - { - "name": "StaffRoles", - "path": "modules/classes/StaffRoles.yaml", - "category": "classes" - }, - { - "name": "Standard", - "path": "modules/classes/Standard.yaml", - "category": "classes" - }, - { - "name": "StandardsOrganization", - "path": "modules/classes/StandardsOrganization.yaml", - "category": "classes" - }, - { - "name": "StateArchives", - "path": "modules/classes/StateArchives.yaml", - "category": "classes" - }, - { - "name": "StateArchivesSection", - "path": "modules/classes/StateArchivesSection.yaml", - "category": "classes" - }, - { - "name": "StateDistrictArchive", - "path": "modules/classes/StateDistrictArchive.yaml", - "category": "classes" - }, - { - "name": "StateRegionalArchiveCzechia", - "path": "modules/classes/StateRegionalArchiveCzechia.yaml", - "category": "classes" - }, - { - "name": "Storage", - "path": "modules/classes/Storage.yaml", - "category": "classes" - }, - { - "name": "StorageCondition", - "path": "modules/classes/StorageCondition.yaml", - "category": "classes" - }, - { - "name": "StorageConditionPolicy", - "path": "modules/classes/StorageConditionPolicy.yaml", - "category": "classes" - }, - { - "name": "StorageType", - "path": "modules/classes/StorageType.yaml", - "category": "classes" - }, - { - "name": "StorageUnit", - "path": "modules/classes/StorageUnit.yaml", - "category": "classes" - }, - { - "name": "Subregion", - "path": "modules/classes/Subregion.yaml", - "category": "classes" - }, - { - "name": "SubsidiaryOrganization", - "path": "modules/classes/SubsidiaryOrganization.yaml", - "category": "classes" - }, - { - "name": "TasteScentHeritageType", - "path": "modules/classes/TasteScentHeritageType.yaml", - "category": "classes" - }, - { - "name": "TelevisionArchive", - "path": "modules/classes/TelevisionArchive.yaml", - "category": "classes" - }, - { - "name": "TemporaryLocation", - "path": "modules/classes/TemporaryLocation.yaml", - "category": "classes" - }, - { - "name": "TentativeWorldHeritageSite", - "path": "modules/classes/TentativeWorldHeritageSite.yaml", - "category": "classes" - }, - { - "name": "TimeSpan", - "path": "modules/classes/TimeSpan.yaml", - "category": "classes" - }, - { - "name": "TradeRegister", - "path": "modules/classes/TradeRegister.yaml", - "category": "classes" - }, - { - "name": "TradeUnionArchive", - "path": "modules/classes/TradeUnionArchive.yaml", - "category": "classes" - }, - { - "name": "UniversityArchive", - "path": "modules/classes/UniversityArchive.yaml", - "category": "classes" - }, - { - "name": "UnspecifiedType", - "path": "modules/classes/UnspecifiedType.yaml", - "category": "classes" - }, - { - "name": "Vereinsarchiv", - "path": "modules/classes/Vereinsarchiv.yaml", - "category": "classes" - }, - { - "name": "Verlagsarchiv", - "path": "modules/classes/Verlagsarchiv.yaml", - "category": "classes" - }, - { - "name": "Verwaltungsarchiv", - "path": "modules/classes/Verwaltungsarchiv.yaml", - "category": "classes" - }, - { - "name": "VideoAnnotation", - "path": "modules/classes/VideoAnnotation.yaml", - "category": "classes" - }, - { - "name": "VideoAnnotationTypes", - "path": "modules/classes/VideoAnnotationTypes.yaml", - "category": "classes" - }, - { - "name": "VideoAudioAnnotation", - "path": "modules/classes/VideoAudioAnnotation.yaml", - "category": "classes" - }, - { - "name": "VideoChapter", - "path": "modules/classes/VideoChapter.yaml", - "category": "classes" - }, - { - "name": "VideoPost", - "path": "modules/classes/VideoPost.yaml", - "category": "classes" - }, - { - "name": "VideoSubtitle", - "path": "modules/classes/VideoSubtitle.yaml", - "category": "classes" - }, - { - "name": "VideoTextContent", - "path": "modules/classes/VideoTextContent.yaml", - "category": "classes" - }, - { - "name": "VideoTimeSegment", - "path": "modules/classes/VideoTimeSegment.yaml", - "category": "classes" - }, - { - "name": "VideoTranscript", - "path": "modules/classes/VideoTranscript.yaml", - "category": "classes" - }, - { - "name": "VirtualMapLibrary", - "path": "modules/classes/VirtualMapLibrary.yaml", - "category": "classes" - }, - { - "name": "Warehouse", - "path": "modules/classes/Warehouse.yaml", - "category": "classes" - }, - { - "name": "WebArchive", - "path": "modules/classes/WebArchive.yaml", - "category": "classes" - }, - { - "name": "WebClaim", - "path": "modules/classes/WebClaim.yaml", - "category": "classes" - }, - { - "name": "WebObservation", - "path": "modules/classes/WebObservation.yaml", - "category": "classes" - }, - { - "name": "WebPortal", - "path": "modules/classes/WebPortal.yaml", - "category": "classes" - }, - { - "name": "WebPortalType", - "path": "modules/classes/WebPortalType.yaml", - "category": "classes" - }, - { - "name": "WebPortalTypes", - "path": "modules/classes/WebPortalTypes.yaml", - "category": "classes" - }, - { - "name": "WomensArchives", - "path": "modules/classes/WomensArchives.yaml", - "category": "classes" - }, - { - "name": "WorkExperience", - "path": "modules/classes/WorkExperience.yaml", - "category": "classes" - }, - { - "name": "WorldHeritageSite", - "path": "modules/classes/WorldHeritageSite.yaml", - "category": "classes" - } - ] - }, - { - "name": "enum", - "displayName": "Enumerations", - "files": [ - { - "name": "AgentTypeEnum", - "path": "modules/enums/AgentTypeEnum.yaml", - "category": "enums" - }, - { - "name": "AppellationTypeEnum", - "path": "modules/enums/AppellationTypeEnum.yaml", - "category": "enums" - }, - { - "name": "ArchiveProcessingStatusEnum", - "path": "modules/enums/ArchiveProcessingStatusEnum.yaml", - "category": "enums" - }, - { - "name": "ArchiveTypeEnum", - "path": "modules/enums/ArchiveTypeEnum.yaml", - "category": "enums" - }, - { - "name": "AuxiliaryDigitalPlatformTypeEnum", - "path": "modules/enums/AuxiliaryDigitalPlatformTypeEnum.yaml", - "category": "enums" - }, - { - "name": "AuxiliaryPlaceTypeEnum", - "path": "modules/enums/AuxiliaryPlaceTypeEnum.yaml", - "category": "enums" - }, - { - "name": "BioCustodianTypeEnum", - "path": "modules/enums/BioCustodianTypeEnum.yaml", - "category": "enums" - }, - { - "name": "CallForApplicationStatusEnum", - "path": "modules/enums/CallForApplicationStatusEnum.yaml", - "category": "enums" - }, - { - "name": "CanonicalClaimTypes", - "path": "modules/enums/CanonicalClaimTypes.yaml", - "category": "enums" - }, - { - "name": "CarrierTypeEnum", - "path": "modules/enums/CarrierTypeEnum.yaml", - "category": "enums" - }, - { - "name": "CommercialCustodianTypeEnum", - "path": "modules/enums/CommercialCustodianTypeEnum.yaml", - "category": "enums" - }, - { - "name": "ConflictStatusEnum", - "path": "modules/enums/ConflictStatusEnum.yaml", - "category": "enums" - }, - { - "name": "ConservationStatusEnum", - "path": "modules/enums/ConservationStatusEnum.yaml", - "category": "enums" - }, - { - "name": "CurationActivityTypeEnum", - "path": "modules/enums/CurationActivityTypeEnum.yaml", - "category": "enums" - }, - { - "name": "CustodianPrimaryTypeEnum", - "path": "modules/enums/CustodianPrimaryTypeEnum.yaml", - "category": "enums" - }, - { - "name": "DigitalPlatformTypeEnum", - "path": "modules/enums/DigitalPlatformTypeEnum.yaml", - "category": "enums" - }, - { - "name": "DigitalPresenceTypeEnum", - "path": "modules/enums/DigitalPresenceTypeEnum.yaml", - "category": "enums" - }, - { - "name": "DonationSchemeTypeEnum", - "path": "modules/enums/DonationSchemeTypeEnum.yaml", - "category": "enums" - }, - { - "name": "EducationProviderTypeEnum", - "path": "modules/enums/EducationProviderTypeEnum.yaml", - "category": "enums" - }, - { - "name": "EncompassingBodyTypeEnum", - "path": "modules/enums/EncompassingBodyTypeEnum.yaml", - "category": "enums" - }, - { - "name": "EntityTypeEnum", - "path": "modules/enums/EntityTypeEnum.yaml", - "category": "enums" - }, - { - "name": "EnvironmentalZoneTypeEnum", - "path": "modules/enums/EnvironmentalZoneTypeEnum.yaml", - "category": "enums" - }, - { - "name": "EventStatusEnum", - "path": "modules/enums/EventStatusEnum.yaml", - "category": "enums" - }, - { - "name": "EventTypeEnum", - "path": "modules/enums/EventTypeEnum.yaml", - "category": "enums" - }, - { - "name": "ExhibitedObjectTypeEnum", - "path": "modules/enums/ExhibitedObjectTypeEnum.yaml", - "category": "enums" - }, - { - "name": "ExhibitionTypeEnum", - "path": "modules/enums/ExhibitionTypeEnum.yaml", - "category": "enums" - }, - { - "name": "FeatureTypeEnum", - "path": "modules/enums/FeatureTypeEnum.yaml", - "category": "enums" - }, - { - "name": "FinancialStatementTypeEnum", - "path": "modules/enums/FinancialStatementTypeEnum.yaml", - "category": "enums" - }, - { - "name": "FundingRequirementTypeEnum", - "path": "modules/enums/FundingRequirementTypeEnum.yaml", - "category": "enums" - }, - { - "name": "GalleryTypeEnum", - "path": "modules/enums/GalleryTypeEnum.yaml", - "category": "enums" - }, - { - "name": "GiftShopTypeEnum", - "path": "modules/enums/GiftShopTypeEnum.yaml", - "category": "enums" - }, - { - "name": "HeritageSocietyTypeEnum", - "path": "modules/enums/HeritageSocietyTypeEnum.yaml", - "category": "enums" - }, - { - "name": "HeritageTypeEnum", - "path": "modules/enums/HeritageTypeEnum.yaml", - "category": "enums" - }, - { - "name": "HolySiteTypeEnum", - "path": "modules/enums/HolySiteTypeEnum.yaml", - "category": "enums" - }, - { - "name": "ICHViabilityStatusEnum", - "path": "modules/enums/ICHViabilityStatusEnum.yaml", - "category": "enums" - }, - { - "name": "IntangibleHeritageTypeEnum", - "path": "modules/enums/IntangibleHeritageTypeEnum.yaml", - "category": "enums" - }, - { - "name": "LegalStatusEnum", - "path": "modules/enums/LegalStatusEnum.yaml", - "category": "enums" - }, - { - "name": "LibraryTypeEnum", - "path": "modules/enums/LibraryTypeEnum.yaml", - "category": "enums" - }, - { - "name": "LoanStatusEnum", - "path": "modules/enums/LoanStatusEnum.yaml", - "category": "enums" - }, - { - "name": "MuseumTypeEnum", - "path": "modules/enums/MuseumTypeEnum.yaml", - "category": "enums" - }, - { - "name": "NonProfitCustodianTypeEnum", - "path": "modules/enums/NonProfitCustodianTypeEnum.yaml", - "category": "enums" - }, - { - "name": "OfficialInstitutionTypeEnum", - "path": "modules/enums/OfficialInstitutionTypeEnum.yaml", - "category": "enums" - }, - { - "name": "OrganizationalChangeEventTypeEnum", - "path": "modules/enums/OrganizationalChangeEventTypeEnum.yaml", - "category": "enums" - }, - { - "name": "OrganizationalUnitTypeEnum", - "path": "modules/enums/OrganizationalUnitTypeEnum.yaml", - "category": "enums" - }, - { - "name": "OrganizationBranchTypeEnum", - "path": "modules/enums/OrganizationBranchTypeEnum.yaml", - "category": "enums" - }, - { - "name": "PersonalCollectionTypeEnum", - "path": "modules/enums/PersonalCollectionTypeEnum.yaml", - "category": "enums" - }, - { - "name": "PlaceSpecificityEnum", - "path": "modules/enums/PlaceSpecificityEnum.yaml", - "category": "enums" - }, - { - "name": "PreservationMethodEnum", - "path": "modules/enums/PreservationMethodEnum.yaml", - "category": "enums" - }, - { - "name": "ProductCategoryEnum", - "path": "modules/enums/ProductCategoryEnum.yaml", - "category": "enums" - }, - { - "name": "ProjectStatusEnum", - "path": "modules/enums/ProjectStatusEnum.yaml", - "category": "enums" - }, - { - "name": "ProvenanceEventTypeEnum", - "path": "modules/enums/ProvenanceEventTypeEnum.yaml", - "category": "enums" - }, - { - "name": "ReconstructionActivityTypeEnum", - "path": "modules/enums/ReconstructionActivityTypeEnum.yaml", - "category": "enums" - }, - { - "name": "RecordsLifecycleStageEnum", - "path": "modules/enums/RecordsLifecycleStageEnum.yaml", - "category": "enums" - }, - { - "name": "ResearchCenterTypeEnum", - "path": "modules/enums/ResearchCenterTypeEnum.yaml", - "category": "enums" - }, - { - "name": "ServiceAreaTypeEnum", - "path": "modules/enums/ServiceAreaTypeEnum.yaml", - "category": "enums" - }, - { - "name": "SourceDocumentTypeEnum", - "path": "modules/enums/SourceDocumentTypeEnum.yaml", - "category": "enums" - }, - { - "name": "StorageConditionStatusEnum", - "path": "modules/enums/StorageConditionStatusEnum.yaml", - "category": "enums" - }, - { - "name": "StorageObserverTypeEnum", - "path": "modules/enums/StorageObserverTypeEnum.yaml", - "category": "enums" - }, - { - "name": "StorageStandardEnum", - "path": "modules/enums/StorageStandardEnum.yaml", - "category": "enums" - }, - { - "name": "StorageTypeEnum", - "path": "modules/enums/StorageTypeEnum.yaml", - "category": "enums" - }, - { - "name": "StorageUnitTypeEnum", - "path": "modules/enums/StorageUnitTypeEnum.yaml", - "category": "enums" - }, - { - "name": "TasteScentHeritageTypeEnum", - "path": "modules/enums/TasteScentHeritageTypeEnum.yaml", - "category": "enums" - }, - { - "name": "UNESCOICHDomainEnum", - "path": "modules/enums/UNESCOICHDomainEnum.yaml", - "category": "enums" - }, - { - "name": "UNESCOListStatusEnum", - "path": "modules/enums/UNESCOListStatusEnum.yaml", - "category": "enums" - } - ] - }, - { - "name": "slot", - "displayName": "Slots", - "files": [ - { - "name": "access_policy", - "path": "modules/slots/access_policy.yaml", - "category": "slots" - }, - { - "name": "access_restrictions", - "path": "modules/slots/access_restrictions.yaml", - "category": "slots" - }, - { - "name": "accession_number", - "path": "modules/slots/accession_number.yaml", - "category": "slots" - }, - { - "name": "acquisition_date", - "path": "modules/slots/acquisition_date.yaml", - "category": "slots" - }, - { - "name": "acquisition_method", - "path": "modules/slots/acquisition_method.yaml", - "category": "slots" - }, - { - "name": "activity_type", - "path": "modules/slots/activity_type.yaml", - "category": "slots" - }, - { - "name": "affected_by_event", - "path": "modules/slots/affected_by_event.yaml", - "category": "slots" - }, - { - "name": "affected_units", - "path": "modules/slots/affected_units.yaml", - "category": "slots" - }, - { - "name": "affects_organization", - "path": "modules/slots/affects_organization.yaml", - "category": "slots" - }, - { - "name": "affiliation", - "path": "modules/slots/affiliation.yaml", - "category": "slots" - }, - { - "name": "age", - "path": "modules/slots/age.yaml", - "category": "slots" - }, - { - "name": "agent_name", - "path": "modules/slots/agent_name.yaml", - "category": "slots" - }, - { - "name": "agent_type", - "path": "modules/slots/agent_type.yaml", - "category": "slots" - }, - { - "name": "allocated_by", - "path": "modules/slots/allocated_by.yaml", - "category": "slots" - }, - { - "name": "allocates", - "path": "modules/slots/allocates.yaml", - "category": "slots" - }, - { - "name": "allocation_date", - "path": "modules/slots/allocation_date.yaml", - "category": "slots" - }, - { - "name": "also_identifies_name", - "path": "modules/slots/also_identifies_name.yaml", - "category": "slots" - }, - { - "name": "alternative_names", - "path": "modules/slots/alternative_names.yaml", - "category": "slots" - }, - { - "name": "alternative_observed_names", - "path": "modules/slots/alternative_observed_names.yaml", - "category": "slots" - }, - { - "name": "altitude", - "path": "modules/slots/altitude.yaml", - "category": "slots" - }, - { - "name": "api_endpoint", - "path": "modules/slots/api_endpoint.yaml", - "category": "slots" - }, - { - "name": "appellation_language", - "path": "modules/slots/appellation_language.yaml", - "category": "slots" - }, - { - "name": "appellation_type", - "path": "modules/slots/appellation_type.yaml", - "category": "slots" - }, - { - "name": "appellation_value", - "path": "modules/slots/appellation_value.yaml", - "category": "slots" - }, - { - "name": "appellations", - "path": "modules/slots/appellations.yaml", - "category": "slots" - }, - { - "name": "approval_date", - "path": "modules/slots/approval_date.yaml", - "category": "slots" - }, - { - "name": "archived_at", - "path": "modules/slots/archived_at.yaml", - "category": "slots" - }, - { - "name": "arrangement_system", - "path": "modules/slots/arrangement_system.yaml", - "category": "slots" - }, - { - "name": "authentication_required", - "path": "modules/slots/authentication_required.yaml", - "category": "slots" - }, - { - "name": "auxiliary_places", - "path": "modules/slots/auxiliary_places.yaml", - "category": "slots" - }, - { - "name": "auxiliary_platforms", - "path": "modules/slots/auxiliary_platforms.yaml", - "category": "slots" - }, - { - "name": "base_surname", - "path": "modules/slots/base_surname.yaml", - "category": "slots" - }, - { - "name": "begin_of_the_begin", - "path": "modules/slots/begin_of_the_begin.yaml", - "category": "slots" - }, - { - "name": "begin_of_the_end", - "path": "modules/slots/begin_of_the_end.yaml", - "category": "slots" - }, - { - "name": "birth_date", - "path": "modules/slots/birth_date.yaml", - "category": "slots" - }, - { - "name": "birth_place", - "path": "modules/slots/birth_place.yaml", - "category": "slots" - }, - { - "name": "canonical_value", - "path": "modules/slots/canonical_value.yaml", - "category": "slots" - }, - { - "name": "capacity_items", - "path": "modules/slots/capacity_items.yaml", - "category": "slots" - }, - { - "name": "cataloging_standard", - "path": "modules/slots/cataloging_standard.yaml", - "category": "slots" - }, - { - "name": "change_rationale", - "path": "modules/slots/change_rationale.yaml", - "category": "slots" - }, - { - "name": "circumstances_of_death", - "path": "modules/slots/circumstances_of_death.yaml", - "category": "slots" - }, - { - "name": "city", - "path": "modules/slots/city.yaml", - "category": "slots" - }, - { - "name": "claim_id", - "path": "modules/slots/claim_id.yaml", - "category": "slots" - }, - { - "name": "claim_type", - "path": "modules/slots/claim_type.yaml", - "category": "slots" - }, - { - "name": "claim_value", - "path": "modules/slots/claim_value.yaml", - "category": "slots" - }, - { - "name": "collection_description", - "path": "modules/slots/collection_description.yaml", - "category": "slots" - }, - { - "name": "collection_focus", - "path": "modules/slots/collection_focus.yaml", - "category": "slots" - }, - { - "name": "collection_name", - "path": "modules/slots/collection_name.yaml", - "category": "slots" - }, - { - "name": "collection_of", - "path": "modules/slots/collection_of.yaml", - "category": "slots" - }, - { - "name": "collection_scope", - "path": "modules/slots/collection_scope.yaml", - "category": "slots" - }, - { - "name": "collection_size", - "path": "modules/slots/collection_size.yaml", - "category": "slots" - }, - { - "name": "collection_type", - "path": "modules/slots/collection_type.yaml", - "category": "slots" - }, - { - "name": "collections_under_responsibility", - "path": "modules/slots/collections_under_responsibility.yaml", - "category": "slots" - }, - { - "name": "confidence", - "path": "modules/slots/confidence.yaml", - "category": "slots" - }, - { - "name": "confidence_method", - "path": "modules/slots/confidence_method.yaml", - "category": "slots" - }, - { - "name": "confidence_score", - "path": "modules/slots/confidence_score.yaml", - "category": "slots" - }, - { - "name": "confidence_value", - "path": "modules/slots/confidence_value.yaml", - "category": "slots" - }, - { - "name": "conflict_status", - "path": "modules/slots/conflict_status.yaml", - "category": "slots" - }, - { - "name": "conservation_lab", - "path": "modules/slots/conservation_lab.yaml", - "category": "slots" - }, - { - "name": "contact", - "path": "modules/slots/contact.yaml", - "category": "slots" - }, - { - "name": "contact_email", - "path": "modules/slots/contact_email.yaml", - "category": "slots" - }, - { - "name": "contact_point", - "path": "modules/slots/contact_point.yaml", - "category": "slots" - }, - { - "name": "content_hash", - "path": "modules/slots/content_hash.yaml", - "category": "slots" - }, - { - "name": "cost_usd", - "path": "modules/slots/cost_usd.yaml", - "category": "slots" - }, - { - "name": "country", - "path": "modules/slots/country.yaml", - "category": "slots" - }, - { - "name": "created", - "path": "modules/slots/created.yaml", - "category": "slots" - }, - { - "name": "creator", - "path": "modules/slots/creator.yaml", - "category": "slots" - }, - { - "name": "css_selector", - "path": "modules/slots/css_selector.yaml", - "category": "slots" - }, - { - "name": "custodian_names", - "path": "modules/slots/custodian_names.yaml", - "category": "slots" - }, - { - "name": "custodian_observations", - "path": "modules/slots/custodian_observations.yaml", - "category": "slots" - }, - { - "name": "custodian_type", - "path": "modules/slots/custodian_type.yaml", - "category": "slots" - }, - { - "name": "custodians", - "path": "modules/slots/custodians.yaml", - "category": "slots" - }, - { - "name": "data_license_policy", - "path": "modules/slots/data_license_policy.yaml", - "category": "slots" - }, - { - "name": "data_service_endpoints", - "path": "modules/slots/data_service_endpoints.yaml", - "category": "slots" - }, - { - "name": "date", - "path": "modules/slots/date.yaml", - "category": "slots" - }, - { - "name": "date_of_death", - "path": "modules/slots/date_of_death.yaml", - "category": "slots" - }, - { - "name": "death_place", - "path": "modules/slots/death_place.yaml", - "category": "slots" - }, - { - "name": "deceased", - "path": "modules/slots/deceased.yaml", - "category": "slots" - }, - { - "name": "defined_by_standard", - "path": "modules/slots/defined_by_standard.yaml", - "category": "slots" - }, - { - "name": "deliverables", - "path": "modules/slots/deliverables.yaml", - "category": "slots" - }, - { - "name": "derived_from_entity", - "path": "modules/slots/derived_from_entity.yaml", - "category": "slots" - }, - { - "name": "description", - "path": "modules/slots/description.yaml", - "category": "slots" - }, - { - "name": "digital_platform", - "path": "modules/slots/digital_platform.yaml", - "category": "slots" - }, - { - "name": "digitization_status", - "path": "modules/slots/digitization_status.yaml", - "category": "slots" - }, - { - "name": "dissolution_date", - "path": "modules/slots/dissolution_date.yaml", - "category": "slots" - }, - { - "name": "documentation_source", - "path": "modules/slots/documentation_source.yaml", - "category": "slots" - }, - { - "name": "documentation_url", - "path": "modules/slots/documentation_url.yaml", - "category": "slots" - }, - { - "name": "effective_date", - "path": "modules/slots/effective_date.yaml", - "category": "slots" - }, - { - "name": "embargo_end_date", - "path": "modules/slots/embargo_end_date.yaml", - "category": "slots" - }, - { - "name": "emic_name", - "path": "modules/slots/emic_name.yaml", - "category": "slots" - }, - { - "name": "encompasses", - "path": "modules/slots/encompasses.yaml", - "category": "slots" - }, - { - "name": "encompassing_body", - "path": "modules/slots/encompassing_body.yaml", - "category": "slots" - }, - { - "name": "end_date", - "path": "modules/slots/end_date.yaml", - "category": "slots" - }, - { - "name": "end_of_the_begin", - "path": "modules/slots/end_of_the_begin.yaml", - "category": "slots" - }, - { - "name": "end_of_the_end", - "path": "modules/slots/end_of_the_end.yaml", - "category": "slots" - }, - { - "name": "ended_at_time", - "path": "modules/slots/ended_at_time.yaml", - "category": "slots" - }, - { - "name": "endorsement_source", - "path": "modules/slots/endorsement_source.yaml", - "category": "slots" - }, - { - "name": "event_date", - "path": "modules/slots/event_date.yaml", - "category": "slots" - }, - { - "name": "event_description", - "path": "modules/slots/event_description.yaml", - "category": "slots" - }, - { - "name": "event_id", - "path": "modules/slots/event_id.yaml", - "category": "slots" - }, - { - "name": "event_type", - "path": "modules/slots/event_type.yaml", - "category": "slots" - }, - { - "name": "exhibition_type", - "path": "modules/slots/exhibition_type.yaml", - "category": "slots" - }, - { - "name": "expertise_areas", - "path": "modules/slots/expertise_areas.yaml", - "category": "slots" - }, - { - "name": "exposed_via_portal", - "path": "modules/slots/exposed_via_portal.yaml", - "category": "slots" - }, - { - "name": "exposes_collections", - "path": "modules/slots/exposes_collections.yaml", - "category": "slots" - }, - { - "name": "extent", - "path": "modules/slots/extent.yaml", - "category": "slots" - }, - { - "name": "external_identifiers", - "path": "modules/slots/external_identifiers.yaml", - "category": "slots" - }, - { - "name": "extraction_agent", - "path": "modules/slots/extraction_agent.yaml", - "category": "slots" - }, - { - "name": "extraction_confidence", - "path": "modules/slots/extraction_confidence.yaml", - "category": "slots" - }, - { - "name": "extraction_metadata", - "path": "modules/slots/extraction_metadata.yaml", - "category": "slots" - }, - { - "name": "extraction_method", - "path": "modules/slots/extraction_method.yaml", - "category": "slots" - }, - { - "name": "extraction_notes", - "path": "modules/slots/extraction_notes.yaml", - "category": "slots" - }, - { - "name": "extraction_timestamp", - "path": "modules/slots/extraction_timestamp.yaml", - "category": "slots" - }, - { - "name": "feeds_portal", - "path": "modules/slots/feeds_portal.yaml", - "category": "slots" - }, - { - "name": "follow_up_date", - "path": "modules/slots/follow_up_date.yaml", - "category": "slots" - }, - { - "name": "funding_source", - "path": "modules/slots/funding_source.yaml", - "category": "slots" - }, - { - "name": "gender_identity", - "path": "modules/slots/gender_identity.yaml", - "category": "slots" - }, - { - "name": "generates", - "path": "modules/slots/generates.yaml", - "category": "slots" - }, - { - "name": "geographic_scope", - "path": "modules/slots/geographic_scope.yaml", - "category": "slots" - }, - { - "name": "geonames_id", - "path": "modules/slots/geonames_id.yaml", - "category": "slots" - }, - { - "name": "given_name", - "path": "modules/slots/given_name.yaml", - "category": "slots" - }, - { - "name": "governance_structure", - "path": "modules/slots/governance_structure.yaml", - "category": "slots" - }, - { - "name": "has_collection", - "path": "modules/slots/has_collection.yaml", - "category": "slots" - }, - { - "name": "has_derived_observation", - "path": "modules/slots/has_derived_observation.yaml", - "category": "slots" - }, - { - "name": "has_feature_type", - "path": "modules/slots/has_feature_type.yaml", - "category": "slots" - }, - { - "name": "has_geospatial_location", - "path": "modules/slots/has_geospatial_location.yaml", - "category": "slots" - }, - { - "name": "has_member", - "path": "modules/slots/has_member.yaml", - "category": "slots" - }, - { - "name": "has_observation", - "path": "modules/slots/has_observation.yaml", - "category": "slots" - }, - { - "name": "has_person_name", - "path": "modules/slots/has_person_name.yaml", - "category": "slots" - }, - { - "name": "has_person_observation", - "path": "modules/slots/has_person_observation.yaml", - "category": "slots" - }, - { - "name": "has_suborganization", - "path": "modules/slots/has_suborganization.yaml", - "category": "slots" - }, - { - "name": "has_unit", - "path": "modules/slots/has_unit.yaml", - "category": "slots" - }, - { - "name": "hc_id", - "path": "modules/slots/hc_id.yaml", - "category": "slots" - }, - { - "name": "html_file", - "path": "modules/slots/html_file.yaml", - "category": "slots" - }, - { - "name": "humidity_tolerance", - "path": "modules/slots/humidity_tolerance.yaml", - "category": "slots" - }, - { - "name": "id", - "path": "modules/slots/id.yaml", - "category": "slots" - }, - { - "name": "identified_by", - "path": "modules/slots/identified_by.yaml", - "category": "slots" - }, - { - "name": "identifier_format_used", - "path": "modules/slots/identifier_format_used.yaml", - "category": "slots" - }, - { - "name": "identifier_scheme", - "path": "modules/slots/identifier_scheme.yaml", - "category": "slots" - }, - { - "name": "identifier_value", - "path": "modules/slots/identifier_value.yaml", - "category": "slots" - }, - { - "name": "identifiers", - "path": "modules/slots/identifiers.yaml", - "category": "slots" - }, - { - "name": "identifies", - "path": "modules/slots/identifies.yaml", - "category": "slots" - }, - { - "name": "identifies_custodian", - "path": "modules/slots/identifies_custodian.yaml", - "category": "slots" - }, - { - "name": "initials", - "path": "modules/slots/initials.yaml", - "category": "slots" - }, - { - "name": "is_legal_status_of", - "path": "modules/slots/is_legal_status_of.yaml", - "category": "slots" - }, - { - "name": "is_member_of", - "path": "modules/slots/is_member_of.yaml", - "category": "slots" - }, - { - "name": "isbn", - "path": "modules/slots/isbn.yaml", - "category": "slots" - }, - { - "name": "jurisdiction", - "path": "modules/slots/jurisdiction.yaml", - "category": "slots" - }, - { - "name": "justification", - "path": "modules/slots/justification.yaml", - "category": "slots" - }, - { - "name": "keywords", - "path": "modules/slots/keywords.yaml", - "category": "slots" - }, - { - "name": "language", - "path": "modules/slots/language.yaml", - "category": "slots" - }, - { - "name": "language_code", - "path": "modules/slots/language_code.yaml", - "category": "slots" - }, - { - "name": "latitude", - "path": "modules/slots/latitude.yaml", - "category": "slots" - }, - { - "name": "legal_entity_type", - "path": "modules/slots/legal_entity_type.yaml", - "category": "slots" - }, - { - "name": "legal_form", - "path": "modules/slots/legal_form.yaml", - "category": "slots" - }, - { - "name": "legal_jurisdiction", - "path": "modules/slots/legal_jurisdiction.yaml", - "category": "slots" - }, - { - "name": "legal_name", - "path": "modules/slots/legal_name.yaml", - "category": "slots" - }, - { - "name": "legal_responsibility_basis", - "path": "modules/slots/legal_responsibility_basis.yaml", - "category": "slots" - }, - { - "name": "legal_responsibility_end_date", - "path": "modules/slots/legal_responsibility_end_date.yaml", - "category": "slots" - }, - { - "name": "legal_responsibility_start_date", - "path": "modules/slots/legal_responsibility_start_date.yaml", - "category": "slots" - }, - { - "name": "legal_status", - "path": "modules/slots/legal_status.yaml", - "category": "slots" - }, - { - "name": "linkedin_profile_path", - "path": "modules/slots/linkedin_profile_path.yaml", - "category": "slots" - }, - { - "name": "linkedin_profile_url", - "path": "modules/slots/linkedin_profile_url.yaml", - "category": "slots" - }, - { - "name": "literal_name", - "path": "modules/slots/literal_name.yaml", - "category": "slots" - }, - { - "name": "located_at", - "path": "modules/slots/located_at.yaml", - "category": "slots" - }, - { - "name": "longitude", - "path": "modules/slots/longitude.yaml", - "category": "slots" - }, - { - "name": "managed_by", - "path": "modules/slots/managed_by.yaml", - "category": "slots" - }, - { - "name": "managed_collections", - "path": "modules/slots/managed_collections.yaml", - "category": "slots" - }, - { - "name": "managing_unit", - "path": "modules/slots/managing_unit.yaml", - "category": "slots" - }, - { - "name": "martyred", - "path": "modules/slots/martyred.yaml", - "category": "slots" - }, - { - "name": "metadata_standards", - "path": "modules/slots/metadata_standards.yaml", - "category": "slots" - }, - { - "name": "method", - "path": "modules/slots/method.yaml", - "category": "slots" - }, - { - "name": "mission_statement", - "path": "modules/slots/mission_statement.yaml", - "category": "slots" - }, - { - "name": "modified", - "path": "modules/slots/modified.yaml", - "category": "slots" - }, - { - "name": "name_authority", - "path": "modules/slots/name_authority.yaml", - "category": "slots" - }, - { - "name": "name_language", - "path": "modules/slots/name_language.yaml", - "category": "slots" - }, - { - "name": "name_specification", - "path": "modules/slots/name_specification.yaml", - "category": "slots" - }, - { - "name": "name_validity_period", - "path": "modules/slots/name_validity_period.yaml", - "category": "slots" - }, - { - "name": "notes", - "path": "modules/slots/notes.yaml", - "category": "slots" - }, - { - "name": "oai_pmh_endpoint", - "path": "modules/slots/oai_pmh_endpoint.yaml", - "category": "slots" - }, - { - "name": "object_ref", - "path": "modules/slots/object_ref.yaml", - "category": "slots" - }, - { - "name": "observation_context", - "path": "modules/slots/observation_context.yaml", - "category": "slots" - }, - { - "name": "observation_date", - "path": "modules/slots/observation_date.yaml", - "category": "slots" - }, - { - "name": "observation_source", - "path": "modules/slots/observation_source.yaml", - "category": "slots" - }, - { - "name": "observed_in", - "path": "modules/slots/observed_in.yaml", - "category": "slots" - }, - { - "name": "observed_name", - "path": "modules/slots/observed_name.yaml", - "category": "slots" - }, - { - "name": "occupation", - "path": "modules/slots/occupation.yaml", - "category": "slots" - }, - { - "name": "offers_donation_schemes", - "path": "modules/slots/offers_donation_schemes.yaml", - "category": "slots" - }, - { - "name": "operated_by", - "path": "modules/slots/operated_by.yaml", - "category": "slots" - }, - { - "name": "operates", - "path": "modules/slots/operates.yaml", - "category": "slots" - }, - { - "name": "organizational_change_events", - "path": "modules/slots/organizational_change_events.yaml", - "category": "slots" - }, - { - "name": "organizational_structure", - "path": "modules/slots/organizational_structure.yaml", - "category": "slots" - }, - { - "name": "organizational_structures", - "path": "modules/slots/organizational_structures.yaml", - "category": "slots" - }, - { - "name": "parent_custodian", - "path": "modules/slots/parent_custodian.yaml", - "category": "slots" - }, - { - "name": "parent_society", - "path": "modules/slots/parent_society.yaml", - "category": "slots" - }, - { - "name": "parent_unit", - "path": "modules/slots/parent_unit.yaml", - "category": "slots" - }, - { - "name": "participated_in_events", - "path": "modules/slots/participated_in_events.yaml", - "category": "slots" - }, - { - "name": "patronym", - "path": "modules/slots/patronym.yaml", - "category": "slots" - }, - { - "name": "person_id", - "path": "modules/slots/person_id.yaml", - "category": "slots" - }, - { - "name": "person_name", - "path": "modules/slots/person_name.yaml", - "category": "slots" - }, - { - "name": "place_designation", - "path": "modules/slots/place_designation.yaml", - "category": "slots" - }, - { - "name": "place_language", - "path": "modules/slots/place_language.yaml", - "category": "slots" - }, - { - "name": "place_name", - "path": "modules/slots/place_name.yaml", - "category": "slots" - }, - { - "name": "place_note", - "path": "modules/slots/place_note.yaml", - "category": "slots" - }, - { - "name": "place_specificity", - "path": "modules/slots/place_specificity.yaml", - "category": "slots" - }, - { - "name": "platform_name", - "path": "modules/slots/platform_name.yaml", - "category": "slots" - }, - { - "name": "platform_of", - "path": "modules/slots/platform_of.yaml", - "category": "slots" - }, - { - "name": "platform_type", - "path": "modules/slots/platform_type.yaml", - "category": "slots" - }, - { - "name": "policy_id", - "path": "modules/slots/policy_id.yaml", - "category": "slots" - }, - { - "name": "policy_name", - "path": "modules/slots/policy_name.yaml", - "category": "slots" - }, - { - "name": "portal_data_sources", - "path": "modules/slots/portal_data_sources.yaml", - "category": "slots" - }, - { - "name": "postal_code", - "path": "modules/slots/postal_code.yaml", - "category": "slots" - }, - { - "name": "powered_by_cms", - "path": "modules/slots/powered_by_cms.yaml", - "category": "slots" - }, - { - "name": "preferred_label", - "path": "modules/slots/preferred_label.yaml", - "category": "slots" - }, - { - "name": "preservation_level", - "path": "modules/slots/preservation_level.yaml", - "category": "slots" - }, - { - "name": "price", - "path": "modules/slots/price.yaml", - "category": "slots" - }, - { - "name": "price_currency", - "path": "modules/slots/price_currency.yaml", - "category": "slots" - }, - { - "name": "primary_register", - "path": "modules/slots/primary_register.yaml", - "category": "slots" - }, - { - "name": "pronouns", - "path": "modules/slots/pronouns.yaml", - "category": "slots" - }, - { - "name": "protocol", - "path": "modules/slots/protocol.yaml", - "category": "slots" - }, - { - "name": "provenance_note", - "path": "modules/slots/provenance_note.yaml", - "category": "slots" - }, - { - "name": "provenance_text", - "path": "modules/slots/provenance_text.yaml", - "category": "slots" - }, - { - "name": "publication_date", - "path": "modules/slots/publication_date.yaml", - "category": "slots" - }, - { - "name": "publisher", - "path": "modules/slots/publisher.yaml", - "category": "slots" - }, - { - "name": "reconstruction_method", - "path": "modules/slots/reconstruction_method.yaml", - "category": "slots" - }, - { - "name": "record_type", - "path": "modules/slots/record_type.yaml", - "category": "slots" - }, - { - "name": "refers_to_custodian", - "path": "modules/slots/refers_to_custodian.yaml", - "category": "slots" - }, - { - "name": "refers_to_person", - "path": "modules/slots/refers_to_person.yaml", - "category": "slots" - }, - { - "name": "registration_authority", - "path": "modules/slots/registration_authority.yaml", - "category": "slots" - }, - { - "name": "registration_date", - "path": "modules/slots/registration_date.yaml", - "category": "slots" - }, - { - "name": "registration_numbers", - "path": "modules/slots/registration_numbers.yaml", - "category": "slots" - }, - { - "name": "religion", - "path": "modules/slots/religion.yaml", - "category": "slots" - }, - { - "name": "response_formats", - "path": "modules/slots/response_formats.yaml", - "category": "slots" - }, - { - "name": "responsible_agent", - "path": "modules/slots/responsible_agent.yaml", - "category": "slots" - }, - { - "name": "responsible_legal_entity", - "path": "modules/slots/responsible_legal_entity.yaml", - "category": "slots" - }, - { - "name": "resulting_units", - "path": "modules/slots/resulting_units.yaml", - "category": "slots" - }, - { - "name": "retrieval_agent", - "path": "modules/slots/retrieval_agent.yaml", - "category": "slots" - }, - { - "name": "retrieved_on", - "path": "modules/slots/retrieved_on.yaml", - "category": "slots" - }, - { - "name": "revision_date", - "path": "modules/slots/revision_date.yaml", - "category": "slots" - }, - { - "name": "rico_equivalent", - "path": "modules/slots/rico_equivalent.yaml", - "category": "slots" - }, - { - "name": "role_end_date", - "path": "modules/slots/role_end_date.yaml", - "category": "slots" - }, - { - "name": "role_start_date", - "path": "modules/slots/role_start_date.yaml", - "category": "slots" - }, - { - "name": "role_title", - "path": "modules/slots/role_title.yaml", - "category": "slots" - }, - { - "name": "safeguarded_by", - "path": "modules/slots/safeguarded_by.yaml", - "category": "slots" - }, - { - "name": "safeguards", - "path": "modules/slots/safeguards.yaml", - "category": "slots" - }, - { - "name": "security_level", - "path": "modules/slots/security_level.yaml", - "category": "slots" - }, - { - "name": "served_by", - "path": "modules/slots/served_by.yaml", - "category": "slots" - }, - { - "name": "serves_finding_aids", - "path": "modules/slots/serves_finding_aids.yaml", - "category": "slots" - }, - { - "name": "service_area", - "path": "modules/slots/service_area.yaml", - "category": "slots" - }, - { - "name": "settlement", - "path": "modules/slots/settlement.yaml", - "category": "slots" - }, - { - "name": "source", - "path": "modules/slots/source.yaml", - "category": "slots" - }, - { - "name": "source_creator", - "path": "modules/slots/source_creator.yaml", - "category": "slots" - }, - { - "name": "source_date", - "path": "modules/slots/source_date.yaml", - "category": "slots" - }, - { - "name": "source_type", - "path": "modules/slots/source_type.yaml", - "category": "slots" - }, - { - "name": "source_uri", - "path": "modules/slots/source_uri.yaml", - "category": "slots" - }, - { - "name": "source_url", - "path": "modules/slots/source_url.yaml", - "category": "slots" - }, - { - "name": "sparql_endpoint", - "path": "modules/slots/sparql_endpoint.yaml", - "category": "slots" - }, - { - "name": "staff_count", - "path": "modules/slots/staff_count.yaml", - "category": "slots" - }, - { - "name": "staff_impact", - "path": "modules/slots/staff_impact.yaml", - "category": "slots" - }, - { - "name": "staff_members", - "path": "modules/slots/staff_members.yaml", - "category": "slots" - }, - { - "name": "staff_role", - "path": "modules/slots/staff_role.yaml", - "category": "slots" - }, - { - "name": "standardized_name", - "path": "modules/slots/standardized_name.yaml", - "category": "slots" - }, - { - "name": "start_date", - "path": "modules/slots/start_date.yaml", - "category": "slots" - }, - { - "name": "started_at_time", - "path": "modules/slots/started_at_time.yaml", - "category": "slots" - }, - { - "name": "status", - "path": "modules/slots/status.yaml", - "category": "slots" - }, - { - "name": "storage_location", - "path": "modules/slots/storage_location.yaml", - "category": "slots" - }, - { - "name": "street_address", - "path": "modules/slots/street_address.yaml", - "category": "slots" - }, - { - "name": "subregion", - "path": "modules/slots/subregion.yaml", - "category": "slots" - }, - { - "name": "superseded_by", - "path": "modules/slots/superseded_by.yaml", - "category": "slots" - }, - { - "name": "supersedes", - "path": "modules/slots/supersedes.yaml", - "category": "slots" - }, - { - "name": "surname_prefix", - "path": "modules/slots/surname_prefix.yaml", - "category": "slots" - }, - { - "name": "technology_stack", - "path": "modules/slots/technology_stack.yaml", - "category": "slots" - }, - { - "name": "temperature_tolerance", - "path": "modules/slots/temperature_tolerance.yaml", - "category": "slots" - }, - { - "name": "temporal_coverage", - "path": "modules/slots/temporal_coverage.yaml", - "category": "slots" - }, - { - "name": "temporal_extent", - "path": "modules/slots/temporal_extent.yaml", - "category": "slots" - }, - { - "name": "time_of_destruction", - "path": "modules/slots/time_of_destruction.yaml", - "category": "slots" - }, - { - "name": "title", - "path": "modules/slots/title.yaml", - "category": "slots" - }, - { - "name": "typical_domains", - "path": "modules/slots/typical_domains.yaml", - "category": "slots" - }, - { - "name": "typical_metadata_standards", - "path": "modules/slots/typical_metadata_standards.yaml", - "category": "slots" - }, - { - "name": "typical_technical_features", - "path": "modules/slots/typical_technical_features.yaml", - "category": "slots" - }, - { - "name": "unit_affiliation", - "path": "modules/slots/unit_affiliation.yaml", - "category": "slots" - }, - { - "name": "unit_name", - "path": "modules/slots/unit_name.yaml", - "category": "slots" - }, - { - "name": "unit_type", - "path": "modules/slots/unit_type.yaml", - "category": "slots" - }, - { - "name": "used", - "path": "modules/slots/used.yaml", - "category": "slots" - }, - { - "name": "used_by", - "path": "modules/slots/used_by.yaml", - "category": "slots" - }, - { - "name": "used_sources", - "path": "modules/slots/used_sources.yaml", - "category": "slots" - }, - { - "name": "valid_from", - "path": "modules/slots/valid_from.yaml", - "category": "slots" - }, - { - "name": "valid_to", - "path": "modules/slots/valid_to.yaml", - "category": "slots" - }, - { - "name": "variant_of_name", - "path": "modules/slots/variant_of_name.yaml", - "category": "slots" - }, - { - "name": "was_derived_from", - "path": "modules/slots/was_derived_from.yaml", - "category": "slots" - }, - { - "name": "was_generated_by", - "path": "modules/slots/was_generated_by.yaml", - "category": "slots" - }, - { - "name": "was_revision_of", - "path": "modules/slots/was_revision_of.yaml", - "category": "slots" - }, - { - "name": "web_claims", - "path": "modules/slots/web_claims.yaml", - "category": "slots" - }, - { - "name": "website", - "path": "modules/slots/website.yaml", - "category": "slots" - }, - { - "name": "wikidata_id", - "path": "modules/slots/wikidata_id.yaml", - "category": "slots" - }, - { - "name": "xpath", - "path": "modules/slots/xpath.yaml", - "category": "slots" - } - ] - } - ] + ] } \ No newline at end of file diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/AcademicArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/AcademicArchive.yaml index 932229e9fe..f1df774a0f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/AcademicArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/AcademicArchive.yaml @@ -19,19 +19,7 @@ classes: AcademicArchive: is_a: ArchiveOrganizationType class_uri: schema:ArchiveOrganization - description: | - Archive of a higher education institution (university, college, polytechnic). - - **Dual-Class Pattern**: - This class represents the CUSTODIAN type (the archive organization). - For the collection type, see `AcademicArchiveRecordSetType` which maps to `rico:RecordSetType`. - - **Holdings** (linked via rico:isOrWasHolderOf): - Academic archives typically hold records classified under these RecordSetTypes: - - UniversityAdministrativeFonds - Governance, committee, policy records - - StudentRecordSeries - Enrollment, transcripts, graduation records - - FacultyPaperCollection - Personal papers of faculty members - - CampusDocumentationCollection - Photos, publications, ephemera + description: Archive of a higher education institution (university, college, polytechnic). slots: - custodian_types - custodian_types_rationale @@ -73,15 +61,7 @@ classes: - campus life documentation slot_usage: holds_record_set_types: - description: | - Links this custodian type to the record set types it typically holds. - Uses RiC-O property rico:isOrWasHolderOf to express custodial relationship. - - **Academic Archive Holdings**: - - UniversityAdministrativeFonds - Governance, committee, policy records - - StudentRecordSeries - Enrollment, transcripts, graduation records - - FacultyPaperCollection - Personal papers of faculty members - - CampusDocumentationCollection - Photos, publications, ephemera + description: Record set types typically held by academic archives. equals_expression: | ["hc:UniversityAdministrativeFonds", "hc:StudentRecordSeries", "hc:FacultyPaperCollection", "hc:CampusDocumentationCollection"] wikidata_entity: @@ -95,9 +75,9 @@ classes: Typically 'university', 'college', or 'institutional'. Reflects the educational institution's administrative scope. custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: AcademicArchive is an archival institution - maps to ARCHIVE + equals_string: AcademicArchive is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment @@ -140,13 +120,7 @@ classes: - wd:Q1065413 - AcademicArchiveRecordSetType AcademicArchiveRecordSetType: - description: "A rico:RecordSetType for classifying collections of academic and\ - \ higher \neducation institutional records within heritage institutions.\n\n\ - **Dual-Class Pattern**:\nThis class represents the COLLECTION type (rico:RecordSetType).\n\ - For the custodian organization type, see `AcademicArchive`.\n\n**Scope**:\n\ - Used to classify record sets that contain academic institutional materials:\n\ - - University administrative fonds\n- Student record series\n- Faculty paper\ - \ collections\n- Campus documentation collections\n" + description: A rico:RecordSetType for classifying collections of academic and higher education institutional records. is_a: CollectionType class_uri: rico:RecordSetType slots: @@ -166,13 +140,8 @@ classes: Structured scope definitions for AcademicArchiveRecordSetType. Formally documents what types of record sets are classified under this type. comments: - - "**Subclasses (concrete RecordSetTypes)**:\n\nThis abstract type has four concrete\ - \ subclasses defined in \nAcademicArchiveRecordSetTypes.yaml:\n\n1. UniversityAdministrativeFonds\ - \ - Governance, committee, policy records\n2. StudentRecordSeries - Enrollment,\ - \ transcripts, graduation records\n3. FacultyPaperCollection - Personal papers\ - \ of faculty members\n4. CampusDocumentationCollection - Photos, publications,\ - \ ephemera\n\nEach subclass maps to rico:RecordSetType with appropriate broad_mappings\ - \ \nto RiC-O organizational concepts (rico:Fonds, rico:Series, rico:Collection).\n" + - Collection type class for academic/higher education record sets + - Part of dual-class pattern with AcademicArchive (custodian type) structured_aliases: - literal_form: Hochschularchivbestand in_language: de @@ -186,7 +155,7 @@ classes: wikidata_equivalent: equals_string: Q27032435 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: AcademicArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/AcademicArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/AcademicArchiveRecordSetTypes.yaml index 2873fe8481..4d42557708 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/AcademicArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/AcademicArchiveRecordSetTypes.yaml @@ -72,7 +72,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: University administrative fonds are held by ARCHIVE (A) type custodians @@ -97,7 +97,7 @@ classes: "strategic planning", "accreditation records"]' scope_excludes: equals_string: '["student records", "faculty papers", "research data"]' - StudentRecordSeries: + AcademicStudentRecordSeries: is_a: AcademicArchiveRecordSetType class_uri: rico:RecordSetType description: "A rico:RecordSetType for student records organized as archival series.\n\ @@ -155,7 +155,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Student record series are held by ARCHIVE (A) type custodians specificity_annotation: @@ -165,7 +165,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: StudentRecordSeries + equals_string: AcademicStudentRecordSeries rico_organizational_principle: equals_string: series rico_organizational_principle_uri: @@ -245,7 +245,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "L"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:LibraryType"]' custodian_types_rationale: equals_string: Faculty papers may be held by ARCHIVE (A) or LIBRARY (L) special collections @@ -334,7 +334,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "L", "M"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:LibraryType", "hc:MuseumType"]' custodian_types_rationale: equals_string: Campus documentation may be held by ARCHIVE (A), LIBRARY (L), or MUSEUM (M) depending on material type diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchive.yaml index 6db7a041b8..2f4842803b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchive.yaml @@ -87,7 +87,7 @@ classes: wikidata_equivalent: equals_string: Q60658673 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: AdvertisingRadioArchive is an archival institution - maps to ARCHIVE (A) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchiveRecordSetTypes.yaml index 3dc528a8f5..ff606adbc7 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RadioAdvertisementCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CampaignDocumentationSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/AnimalSoundArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/AnimalSoundArchive.yaml index 6acbd08f51..3c9b6d9e16 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/AnimalSoundArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/AnimalSoundArchive.yaml @@ -100,9 +100,9 @@ classes: wikidata_equivalent: equals_string: Q18574935 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: AnimalSoundArchive is an archival institution - maps to ARCHIVE + equals_string: AnimalSoundArchive is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/AnimalSoundArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/AnimalSoundArchiveRecordSetTypes.yaml index 9ff2953492..594f5188ba 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/AnimalSoundArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/AnimalSoundArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: BioacousticRecordingCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FieldRecordingSeries records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ArchitecturalArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ArchitecturalArchive.yaml index ee5a085bf1..86b8dc5b4e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ArchitecturalArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ArchitecturalArchive.yaml @@ -49,10 +49,10 @@ classes: Typically includes: architectural drawings, blueprints, building plans, models, photographs, specifications, correspondence, competition entries. custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ArchitecturalArchive is a specialized archive type for architectural - documentation - maps to ARCHIVE type (A) + documentation - maps to ArchiveOrganizationType type (A) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ArchitecturalArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ArchitecturalArchiveRecordSetTypes.yaml index 4eb6ad43e7..8d398fdd85 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ArchitecturalArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ArchitecturalArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ArchitecturalDrawingCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ArchitectPapersCollection records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: BuildingProjectFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ArchivalLibrary.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ArchivalLibrary.yaml index 7b9f94f81c..771b8edf39 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ArchivalLibrary.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ArchivalLibrary.yaml @@ -48,7 +48,7 @@ classes: All ArchivalLibrary instances MUST be linked to a parent archive. required: true custodian_types: - equals_expression: '["A", "L"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:LibraryType"]' custodian_types_rationale: equals_string: Archival library is an OrganizationBranch combining archive (A) and library (L) functions. diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveAssociation.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveAssociation.yaml index 33d7412bad..5bd9740927 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveAssociation.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveAssociation.yaml @@ -54,7 +54,7 @@ classes: Advocacy, public programming, and engagement activities. Key focus for archive associations as support organizations. custodian_types: - equals_expression: '["A", "S"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HeritageSocietyType"]' custodian_types_rationale: equals_string: Archive association combines archive (A) and society/association (S). diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveNetwork.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveNetwork.yaml index c008012841..61ae496afb 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveNetwork.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveNetwork.yaml @@ -47,8 +47,6 @@ classes: slots: - custodian_types - custodian_types_rationale - - encompassing_body_link - - member_archives - specificity_annotation - template_specificity slot_usage: @@ -65,9 +63,9 @@ classes: minimum_cardinality: 1 maximum_cardinality: 1 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: ArchiveNetwork is an archival institution - maps to ARCHIVE + equals_string: ArchiveNetwork is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveOfInternationalOrganization.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveOfInternationalOrganization.yaml index 0c3532bc5f..3738b40b9f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveOfInternationalOrganization.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveOfInternationalOrganization.yaml @@ -61,7 +61,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ArchiveOfInternationalOrganizationRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveOfInternationalOrganizationRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveOfInternationalOrganizationRecordSetTypes.yaml index 8cd82d3b0c..6f45a37a21 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveOfInternationalOrganizationRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveOfInternationalOrganizationRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: InternationalOrgFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: TreatyCollection records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ConferenceRecordSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveOrganizationType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveOrganizationType.yaml index 85242a3b98..5bf36d461e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveOrganizationType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ArchiveOrganizationType.yaml @@ -97,7 +97,7 @@ classes: range: ArchiveOrganizationType required: false custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ArchiveOrganizationType is specific to archives - institutions preserving original records and historical documents diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ArchivesForBuildingRecords.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ArchivesForBuildingRecords.yaml index 14df9c13b3..1c28d3e1ad 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ArchivesForBuildingRecords.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ArchivesForBuildingRecords.yaml @@ -86,7 +86,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ArchivesForBuildingRecordsRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ArchivesForBuildingRecordsRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ArchivesForBuildingRecordsRecordSetTypes.yaml index 0dfa933850..266ef196e6 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ArchivesForBuildingRecordsRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ArchivesForBuildingRecordsRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: BuildingPermitSeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ConstructionDocumentCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ArchivesRegionales.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ArchivesRegionales.yaml index 329e5d4d06..8e020f5c70 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ArchivesRegionales.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ArchivesRegionales.yaml @@ -80,7 +80,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ArchivesRegionalesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ArchivesRegionalesRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ArchivesRegionalesRecordSetTypes.yaml index c35406e154..d8361f235d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ArchivesRegionalesRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ArchivesRegionalesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalAdministrationFonds records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ArtArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ArtArchive.yaml index 8c9c4a1838..166bf39c18 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ArtArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ArtArchive.yaml @@ -87,7 +87,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ArtArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ArtArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ArtArchiveRecordSetTypes.yaml index f88add7abb..ab8f979267 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ArtArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ArtArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ArtistPapersCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: GalleryRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ExhibitionDocumentationCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/AudiovisualArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/AudiovisualArchive.yaml index 96c787528b..7350fbf490 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/AudiovisualArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/AudiovisualArchive.yaml @@ -87,7 +87,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: AudiovisualArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/AudiovisualArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/AudiovisualArchiveRecordSetTypes.yaml index bb6da9b893..426a429a58 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/AudiovisualArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/AudiovisualArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: AudiovisualRecordingCollection records are held by ARCHIVE (A) type custodians @@ -58,7 +58,7 @@ classes: rico_has_or_had_holder_note: equals_string: This RecordSetType is typically held by AudiovisualArchive custodians. Inverse of rico:isOrWasHolderOf. - MediaProductionFonds: + AudiovisualProductionFonds: is_a: AudiovisualArchiveRecordSetType class_uri: rico:RecordSetType description: "A rico:RecordSetType for Media production records.\n\n**RiC-O Alignment**:\n\ @@ -80,9 +80,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: MediaProductionFonds records are held by ARCHIVE (A) type custodians + equals_string: AudiovisualProductionFonds records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +90,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: MediaProductionFonds + equals_string: AudiovisualProductionFonds rico_organizational_principle: equals_string: fonds rico_organizational_principle_uri: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/BankArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/BankArchive.yaml index a3a1330e55..8563b4da40 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/BankArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/BankArchive.yaml @@ -57,28 +57,10 @@ classes: - Deutsche Bank Historical Archive - Rothschild Archive (London) - Archives historiques de la Société Générale - - **Dual-Class Pattern**: - This class represents the CUSTODIAN type (the archive organization). - For the collection type, see `BankRecordSetType` (rico:RecordSetType). - - **Ontological Alignment**: - - **SKOS**: skos:Concept with skos:broader Q166118 (archive) - - **Schema.org**: schema:ArchiveOrganization - - **RiC-O**: rico:CorporateBody (as agent) - - **Multilingual Labels**: - - de: Bankarchiv - - es: archivo bancario - - fr: archives bancaires slot_usage: null BankArchiveRecordSetType: description: | A rico:RecordSetType for classifying collections held by BankArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `BankArchive`. is_a: CollectionType class_uri: rico:RecordSetType slots: @@ -93,7 +75,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: BankArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/BankArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/BankArchiveRecordSetTypes.yaml index ca96814add..3bb228af8a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/BankArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/BankArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: BankingRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FinancialTransactionSeries records are held by ARCHIVE (A) type custodians @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CustomerAccountSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/Bildstelle.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/Bildstelle.yaml index 7586e1dba4..9cb68a82d0 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/Bildstelle.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/Bildstelle.yaml @@ -60,9 +60,9 @@ classes: - de: Bildstelle slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: Bildstelle is an archival institution - maps to ARCHIVE (A) + equals_string: Bildstelle is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/BioCustodianType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/BioCustodianType.yaml index 1ce43a33e4..a531fc90f2 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/BioCustodianType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/BioCustodianType.yaml @@ -416,7 +416,7 @@ classes: range: string required: false custodian_types: - equals_expression: '["B"]' + equals_expression: '["hc:BioCustodianType"]' custodian_types_rationale: equals_string: BioCustodianType is specific to botanical gardens, zoos, aquariums - institutions with living collections diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/BiologicalObject.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/BiologicalObject.yaml index d07a073414..c35af15512 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/BiologicalObject.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/BiologicalObject.yaml @@ -487,7 +487,7 @@ classes: - value: MW123456 - value: MN987654 custodian_types: - equals_expression: '["B", "M", "R"]' + equals_expression: '["hc:BioCustodianType", "hc:MuseumType", "hc:ResearchOrganizationType"]' custodian_types_rationale: equals_string: | BiologicalObject is primarily relevant to: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CantonalArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CantonalArchive.yaml index 26d507d47d..fc36a83f85 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CantonalArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CantonalArchive.yaml @@ -98,7 +98,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CantonalArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CantonalArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CantonalArchiveRecordSetTypes.yaml index 5b687ee8cc..d457200384 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CantonalArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CantonalArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CantonalGovernmentFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CantonalLegislationCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CastCollection.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CastCollection.yaml index a6f72fb89f..d414edf591 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CastCollection.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CastCollection.yaml @@ -75,7 +75,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["M"]' + equals_expression: '["hc:MuseumType"]' custodian_types_rationale: equals_string: Cast collection is a museum collection type (M). specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CathedralArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CathedralArchive.yaml index f2534fe266..a5cb789d68 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CathedralArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CathedralArchive.yaml @@ -86,7 +86,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CathedralArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CathedralArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CathedralArchiveRecordSetTypes.yaml index 034fb6ab53..3feeccb8f2 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CathedralArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CathedralArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ChapterRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LiturgicalDocumentCollection records are held by ARCHIVE (A) type custodians @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FabricRecordsSeries records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ChurchArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ChurchArchive.yaml index b1e699371a..a109004948 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ChurchArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ChurchArchive.yaml @@ -105,37 +105,3 @@ classes: - PastoralCorrespondenceCollection - ChurchPropertyFonds - CongregationalLifeCollection - ChurchArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by ChurchArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `ChurchArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - custodian_types - - custodian_types_rationale - - dual_class_link - - specificity_annotation - - template_specificity - - type_scope - see_also: - - ChurchArchive - - rico:RecordSetType - slot_usage: - custodian_types: - equals_expression: '["A"]' - custodian_types_rationale: - equals_string: ChurchArchiveRecordSetType classifies collections held by ARCHIVE - (A) type custodians - dual_class_link: - range: DualClassLink - inlined: true - specificity_annotation: - range: SpecificityAnnotation - inlined: true - template_specificity: - range: TemplateSpecificityScores - inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ChurchArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ChurchArchiveRecordSetTypes.yaml index 4de7d9b1f9..fea21ded43 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ChurchArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ChurchArchiveRecordSetTypes.yaml @@ -49,7 +49,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "H"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: Church archive record set types are held by ARCHIVE (A) or HOLY_SITES (H) type custodians @@ -121,7 +121,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "H"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: Church governance fonds are held by ARCHIVE (A) or HOLY_SITES (H) type custodians @@ -199,12 +199,12 @@ classes: - wd:Q185583 close_mappings: - skos:Concept - - CivilRegistrySeries see_also: - ChurchArchiveRecordSetType - rico:RecordSetType - rico-rst:Series - ParishArchive + - CivilRegistrySeries annotations: genealogy_note: Primary source for genealogical research, especially pre-civil registration periods. Many digitized and indexed by organizations like FamilySearch, Alle @@ -219,7 +219,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "H"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: Parish register series are held by ARCHIVE (A) or HOLY_SITES (H), often transferred to regional archives @@ -294,11 +294,11 @@ classes: - wd:Q22075301 close_mappings: - skos:Concept - - FacultyPaperCollection see_also: - ChurchArchiveRecordSetType - rico:RecordSetType - rico-rst:Fonds + - FacultyPaperCollection slots: - custodian_types - custodian_types_rationale @@ -306,7 +306,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "H", "L"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType", "hc:LibraryType"]' custodian_types_rationale: equals_string: Pastoral correspondence may be held by ARCHIVE (A), HOLY_SITES (H), or LIBRARY (L) special collections @@ -396,7 +396,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "H"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: Church property fonds are held by ARCHIVE (A) or HOLY_SITES (H) type custodians @@ -477,11 +477,11 @@ classes: close_mappings: - skos:Concept - schema:Collection - - CampusDocumentationCollection see_also: - ChurchArchiveRecordSetType - rico:RecordSetType - rico-rst:Collection + - CampusDocumentationCollection annotations: collection_nature_note: Often includes artificial/assembled collections. Materials reflect the lived religious experience of the community beyond formal administration. @@ -492,7 +492,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "H", "S"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType", "hc:HeritageSocietyType"]' custodian_types_rationale: equals_string: Congregational life collections may be held by ARCHIVE (A), HOLY_SITES (H), or COLLECTING_SOCIETY (S) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ChurchArchiveSweden.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ChurchArchiveSweden.yaml index 30219e178f..b3ad3fba67 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ChurchArchiveSweden.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ChurchArchiveSweden.yaml @@ -92,7 +92,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ChurchArchiveSwedenRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ChurchArchiveSwedenRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ChurchArchiveSwedenRecordSetTypes.yaml index bcdcb2f245..5ecaf91dea 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ChurchArchiveSwedenRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ChurchArchiveSwedenRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SwedishParishRecordSeries records are held by ARCHIVE (A) type custodians @@ -58,12 +58,13 @@ classes: rico_has_or_had_holder_note: equals_string: This RecordSetType is typically held by ChurchArchiveSweden custodians. Inverse of rico:isOrWasHolderOf. - ChurchPropertyFonds: + SwedishChurchPropertyFonds: is_a: ChurchArchiveSwedenRecordSetType class_uri: rico:RecordSetType - description: "A rico:RecordSetType for Church property records.\n\n**RiC-O Alignment**:\n\ + description: "A rico:RecordSetType for Swedish Church property records.\n\n**RiC-O Alignment**:\n\ This class is a specialized rico:RecordSetType following the fonds \norganizational\ - \ principle as defined by rico-rst:Fonds.\n" + \ principle as defined by rico-rst:Fonds.\n\n**Note**: This is a Swedish-specific\ + \ variant. For the general church property fonds type, see ChurchPropertyFonds.\n" exact_mappings: - rico:RecordSetType related_mappings: @@ -73,6 +74,7 @@ classes: see_also: - ChurchArchiveSwedenRecordSetType - rico:RecordSetType + - ChurchPropertyFonds slots: - custodian_types - custodian_types_rationale @@ -80,9 +82,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: ChurchPropertyFonds records are held by ARCHIVE (A) type custodians + equals_string: SwedishChurchPropertyFonds records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +92,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: ChurchPropertyFonds + equals_string: SwedishChurchPropertyFonds rico_organizational_principle: equals_string: fonds rico_organizational_principle_uri: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/Cinematheque.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/Cinematheque.yaml index 3564e581c7..bf4e39da16 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/Cinematheque.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/Cinematheque.yaml @@ -64,9 +64,9 @@ classes: - fr: cinémathèque slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: Cinematheque is an archival institution - maps to ARCHIVE (A) + equals_string: Cinematheque is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ClimateArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ClimateArchive.yaml index 55faf4c4a8..deb1e2efba 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ClimateArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ClimateArchive.yaml @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ClimateArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ClimateArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ClimateArchiveRecordSetTypes.yaml index f09dc1ebb8..64ea132255 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ClimateArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ClimateArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ClimateDataCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MeteorologicalObservationSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CollectingArchives.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CollectingArchives.yaml index 60db6812e4..31fe0c365a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CollectingArchives.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CollectingArchives.yaml @@ -69,9 +69,9 @@ classes: - **RiC-O**: rico:CorporateBody (as agent) slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: CollectingArchives is an archival institution - maps to ARCHIVE + equals_string: CollectingArchives is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -100,7 +100,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CollectingArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CollectingArchivesRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CollectingArchivesRecordSetTypes.yaml index 4e7db0dc55..e0a27609a7 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CollectingArchivesRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CollectingArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CollectedMaterialsFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DonatedPapersCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/Collection.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/Collection.yaml index 77b84854c9..131bc6438c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/Collection.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/Collection.yaml @@ -24,16 +24,33 @@ imports: - ./FindingAid - ./ExhibitedObject - ./CurationActivity +- ../slots/access_policy_ref +- ../slots/acquisition_date +- ../slots/acquisition_method +- ../slots/acquisition_source +- ../slots/arrangement +- ../slots/class_metadata_slots +- ../slots/collection_description +- ../slots/collection_id +- ../slots/collection_name +- ../slots/collection_type_ref +- ../slots/curation_activities +- ../slots/custodial_history +- ../slots/digital_surrogate_url +- ../slots/digitization_status +- ../slots/extent +- ../slots/extent_items +- ../slots/finding_aids +- ../slots/items +- ../slots/parent_collection +- ../slots/part_of_custodian_collection +- ../slots/provenance_statement +- ../slots/rico_record_set_type +- ../slots/sub_collections +- ../slots/subject_areas +- ../slots/temporal_coverage - ../slots/valid_from - ../slots/valid_to -- ../slots/collection_name -- ../slots/collection_description -- ../slots/extent -- ../slots/temporal_coverage -- ../slots/digitization_status -- ../slots/acquisition_method -- ../slots/acquisition_date -- ../slots/class_metadata_slots classes: Collection: class_uri: rico:RecordSet @@ -616,7 +633,7 @@ classes: Date when this collection ended at current custodian (if transferred/deaccessioned). range: date custodian_types: - equals_expression: '["G", "L", "A", "M", "B", "H"]' + equals_expression: '["hc:GalleryType", "hc:LibraryType", "hc:ArchiveOrganizationType", "hc:MuseumType", "hc:BioCustodianType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: 'Collection is relevant to institutions that hold catalogued collections: Galleries, Libraries, Archives, Museums, Botanical gardens/zoos, @@ -681,65 +698,9 @@ classes: digitization_status: PARTIAL part_of_custodian_collection: https://nde.nl/ontology/hc/custodian-collection/nationaal-archief description: VOC archival fonds at Nationaal Archief -slots: - collection_id: - description: Unique identifier for this collection - range: uriorcurie - collection_type_ref: - description: Classification from CollectionType hierarchy - range: CollectionType - rico_record_set_type: - description: RiC-O RecordSetType vocabulary mapping - range: uriorcurie - extent_items: - description: Numeric item count - range: integer - subject_areas: - description: Thematic subjects - range: string - multivalued: true - provenance_statement: - description: Provenance narrative - range: string - custodial_history: - description: Chain of custody - range: string - multivalued: true - acquisition_source: - description: From whom collection was acquired - range: string - access_policy_ref: - description: Access policy governing collection - range: AccessPolicy - arrangement: - description: Intellectual arrangement system - range: string - finding_aids: - description: Finding aids describing this collection - range: FindingAid - multivalued: true - slot_uri: rico:isDescribedBy - digital_surrogate_url: - description: URL to digital surrogate - range: uri - multivalued: true - parent_collection: - description: Parent collection (hierarchical) - range: Collection - sub_collections: - description: Child collections (hierarchical) - range: Collection - multivalued: true - items: - description: Individual ExhibitedObject items within this collection - range: ExhibitedObject - multivalued: true - slot_uri: rico:hasOrHadConstituent - curation_activities: - description: Ongoing curation activities performed on this collection - range: CurationActivity - multivalued: true - slot_uri: crm:P147i_was_curated_by - part_of_custodian_collection: - description: Link to abstract CustodianCollection - range: CustodianCollection + +# NOTE: All slots are defined in centralized modules/slots/ files +# Slots used by this class: collection_id, collection_type_ref, rico_record_set_type, +# extent_items, subject_areas, provenance_statement, custodial_history, acquisition_source, +# access_policy_ref, arrangement, finding_aids, digital_surrogate_url, parent_collection, +# sub_collections, items, curation_activities, part_of_custodian_collection diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ComarcalArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ComarcalArchive.yaml index 478b96a5a2..20236fab4e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ComarcalArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ComarcalArchive.yaml @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ComarcalArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ComarcalArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ComarcalArchiveRecordSetTypes.yaml index be01a45de9..5fa979ced2 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ComarcalArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ComarcalArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ComarcalAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -58,7 +58,7 @@ classes: rico_has_or_had_holder_note: equals_string: This RecordSetType is typically held by ComarcalArchive custodians. Inverse of rico:isOrWasHolderOf. - LocalHistoryCollection: + ComarcalHistoryCollection: is_a: ComarcalArchiveRecordSetType class_uri: rico:RecordSetType description: "A rico:RecordSetType for Regional historical documentation.\n\n\ @@ -80,9 +80,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: LocalHistoryCollection records are held by ARCHIVE (A) type + equals_string: ComarcalHistoryCollection records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation @@ -91,7 +91,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: LocalHistoryCollection + equals_string: ComarcalHistoryCollection rico_organizational_principle: equals_string: collection rico_organizational_principle_uri: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CommercialOrganizationType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CommercialOrganizationType.yaml index b22a685864..0fd7f2beeb 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CommercialOrganizationType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CommercialOrganizationType.yaml @@ -368,10 +368,10 @@ classes: - value: Corporate events, Weddings, Conference space description: Company museum activities custodian_types: - equals_expression: '["C"]' + equals_expression: '["hc:CommercialOrganizationType"]' custodian_types_rationale: equals_string: CommercialOrganizationType represents for-profit commercial - heritage custodians (corporate archives, company museums) - maps to CORPORATION + heritage custodians (corporate archives, company museums) - maps to CommercialOrganizationType type (C) specificity_annotation: range: SpecificityAnnotation diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CommunityArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CommunityArchive.yaml index 6ecb1d4e13..5b0c3a7db4 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CommunityArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CommunityArchive.yaml @@ -96,7 +96,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CommunityArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CommunityArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CommunityArchiveRecordSetTypes.yaml index 08df539827..718ef5282c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CommunityArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CommunityArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CommunityOrganizationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: OralHistoryCollection records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LocalEventDocumentation records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CompanyArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CompanyArchiveRecordSetTypes.yaml index 5f0f7b2641..59ce87bd61 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CompanyArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CompanyArchiveRecordSetTypes.yaml @@ -51,7 +51,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "C"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:CommercialOrganizationType"]' custodian_types_rationale: equals_string: Company archive record set types are held by ARCHIVE (A) or CORPORATION (C) type custodians @@ -114,12 +114,12 @@ classes: - wd:Q1643722 close_mappings: - skos:Concept - - CouncilGovernanceFonds see_also: - CompanyArchiveRecordSetType - rico:RecordSetType - rico-rst:Fonds - CompanyArchives + - CouncilGovernanceFonds slots: - custodian_types - custodian_types_rationale @@ -127,7 +127,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "C"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:CommercialOrganizationType"]' custodian_types_rationale: equals_string: Corporate governance fonds are held by ARCHIVE (A) or CORPORATION (C) type custodians @@ -223,7 +223,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "C", "R"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:CommercialOrganizationType", "hc:ResearchOrganizationType"]' custodian_types_rationale: equals_string: Product development collections may be held by ARCHIVE (A), CORPORATION (C), or RESEARCH_CENTER (R) @@ -318,7 +318,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "C", "M"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:CommercialOrganizationType", "hc:MuseumType"]' custodian_types_rationale: equals_string: Marketing archives may be held by ARCHIVE (A), CORPORATION (C), or MUSEUM (M) for design/advertising collections @@ -397,11 +397,11 @@ classes: - wd:Q185583 close_mappings: - skos:Concept - - StudentRecordSeries see_also: - CompanyArchiveRecordSetType - rico:RecordSetType - rico-rst:Series + - StudentRecordSeries slots: - custodian_types - custodian_types_rationale @@ -409,7 +409,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "C"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:CommercialOrganizationType"]' custodian_types_rationale: equals_string: Personnel records series are held by ARCHIVE (A) or CORPORATION (C) type custodians @@ -504,7 +504,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "C", "L"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:CommercialOrganizationType", "hc:LibraryType"]' custodian_types_rationale: equals_string: Corporate publications may be held by ARCHIVE (A), CORPORATION (C), or LIBRARY (L) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CompanyArchives.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CompanyArchives.yaml index 3de74b36d0..d263840314 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CompanyArchives.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CompanyArchives.yaml @@ -15,8 +15,12 @@ imports: - ./Department - ./OrganizationBranch - ./CompanyArchiveRecordSetTypes + - ../slots/archive_branches + - ../slots/archive_department_of - ../slots/holds_record_set_types + - ../slots/parent_corporation - ../slots/type_scope + - ../slots/wikidata_entity classes: CompanyArchives: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ConservationRecord.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ConservationRecord.yaml index 4464a7115c..8ab0b7d5ac 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ConservationRecord.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ConservationRecord.yaml @@ -414,7 +414,7 @@ classes: - value: Treatment coincided with preparation for 1995 exhibition - value: Discovery of Vermeer's signature during cleaning custodian_types: - equals_expression: '["G", "M", "A", "L", "R", "H", "B"]' + equals_expression: '["hc:GalleryType", "hc:MuseumType", "hc:ArchiveOrganizationType", "hc:LibraryType", "hc:ResearchOrganizationType", "hc:HolySacredSiteType", "hc:BioCustodianType"]' custodian_types_rationale: equals_string: | ConservationRecord is relevant to all custodian types managing physical collections: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CountyRecordOffice.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CountyRecordOffice.yaml index 116785c345..36849d0601 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CountyRecordOffice.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CountyRecordOffice.yaml @@ -81,9 +81,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: CountyRecordOffice is an archival institution - maps to ARCHIVE + equals_string: CountyRecordOffice is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CourtRecords.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CourtRecords.yaml index 4aa5171f06..f26cee9eb7 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CourtRecords.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CourtRecords.yaml @@ -68,9 +68,9 @@ classes: - commercial description: General court archive covering main jurisdictions custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: CourtRecords is an archival institution - maps to ARCHIVE (A) + equals_string: CourtRecords is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CulturalInstitution.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CulturalInstitution.yaml index 09b35ab5a2..946c705a4a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CulturalInstitution.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CulturalInstitution.yaml @@ -88,7 +88,7 @@ classes: range: string multivalued: true custodian_types: - equals_expression: '["X"]' + equals_expression: '["hc:MixedCustodianType"]' custodian_types_rationale: equals_string: CulturalInstitution is a broad type encompassing multiple heritage categories (G, L, A, M, etc.). Maps to MIXED (X) as it spans categories. diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CurationActivity.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CurationActivity.yaml index 46d1618370..c34930f72c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CurationActivity.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CurationActivity.yaml @@ -525,7 +525,7 @@ classes: - value: condition-assessment description: SPECTRUM Condition Checking custodian_types: - equals_expression: '["G", "L", "A", "M", "R", "H", "B"]' + equals_expression: '["hc:GalleryType", "hc:LibraryType", "hc:ArchiveOrganizationType", "hc:MuseumType", "hc:ResearchOrganizationType", "hc:HolySacredSiteType", "hc:BioCustodianType"]' custodian_types_rationale: equals_string: | CurationActivity is relevant to ALL heritage custodian types that manage collections: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml index 3f8cc49582..15b90dca7f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml @@ -99,10 +99,10 @@ classes: multivalued: true required: false custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Current Archive is an archive for active/current records - - maps to ARCHIVE (A) + maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -141,20 +141,7 @@ classes: creating_organization: Ministry of Finance retention_schedule: Finance Records Schedule 2023 description: Current archive for ministry records -slots: - creating_organization: - description: Organization creating the records - range: string - transfer_policy: - description: Policy for transferring to permanent archive - range: string - has_narrower_instance: - slot_uri: skos:narrowerTransitive - description: | - Links archive TYPE to specific CustodianArchive INSTANCES. - SKOS narrowerTransitive for type-to-instance relationship. - range: CustodianArchive - multivalued: true + CurrentArchiveRecordSetType: description: | A rico:RecordSetType for classifying collections held by CurrentArchive custodians. @@ -170,23 +157,29 @@ slots: - CurrentArchive - rico:RecordSetType annotations: - custodian_types: '["A"]' + custodian_types: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: CurrentArchiveRecordSetType classifies collections - held by ARCHIVE (A) type custodians + held by ArchiveOrganizationType custodians linked_custodian_type: CurrentArchive dual_class_pattern: collection_type specificity_score: 0.7 specificity_rationale: Type taxonomy class. specificity_annotation_timestamp: '2026-01-06T00:26:29.675099Z' specificity_annotation_agent: opencode-claude-sonnet-4 - template_specificity: - archive_search: 0.2 - museum_search: 0.75 - library_search: 0.75 - collection_discovery: 0.75 - person_research: 0.75 - location_browse: 0.75 - identifier_lookup: 0.75 - organizational_change: 0.75 - digital_platform: 0.75 - general_heritage: 0.75 + template_specificity: '{"archive_search": 0.2, "museum_search": 0.75, "library_search": 0.75, "collection_discovery": 0.75, "person_research": 0.75, "location_browse": 0.75, "identifier_lookup": 0.75, "organizational_change": 0.75, "digital_platform": 0.75, "general_heritage": 0.75}' + + +slots: + creating_organization: + description: Organization creating the records + range: string + transfer_policy: + description: Policy for transferring to permanent archive + range: string + has_narrower_instance: + slot_uri: skos:narrowerTransitive + description: | + Links archive TYPE to specific CustodianArchive INSTANCES. + SKOS narrowerTransitive for type-to-instance relationship. + range: CustodianArchive + multivalued: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CurrentArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CurrentArchiveRecordSetTypes.yaml index 683ce6d3f9..83f2c0bbde 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CurrentArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CurrentArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ActiveRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CustodianArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CustodianArchive.yaml index efb131585e..4aeda39e31 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CustodianArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CustodianArchive.yaml @@ -560,7 +560,7 @@ classes: - value: wikidata:Q3621648 description: Current archive / active records custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Custodian archive is an archive type (A). specificity_annotation: @@ -619,6 +619,33 @@ classes: schedule. refers_to_custodian: https://nde.nl/ontology/hc/nl-na description: Government records in active processing (9 years after accession) + CustodianArchiveRecordSetType: + description: | + A rico:RecordSetType for classifying collections held by CustodianArchive custodians. + + **Dual-Class Pattern**: + This class represents the COLLECTION type (rico:RecordSetType). + For the custodian organization type, see `CustodianArchive`. + is_a: CollectionType + class_uri: rico:RecordSetType + slots: + - type_scope + see_also: + - CustodianArchive + - rico:RecordSetType + annotations: + custodian_types: '["hc:ArchiveOrganizationType"]' + custodian_types_rationale: CustodianArchiveRecordSetType classifies collections + held by ArchiveOrganizationType custodians + linked_custodian_type: CustodianArchive + dual_class_pattern: collection_type + specificity_score: 0.7 + specificity_rationale: Type taxonomy class. + specificity_annotation_timestamp: '2026-01-06T00:26:29.676176Z' + specificity_annotation_agent: opencode-claude-sonnet-4 + template_specificity: '{"archive_search": 0.2, "museum_search": 0.75, "library_search": 0.75, "collection_discovery": 0.75, "person_research": 0.75, "location_browse": 0.75, "identifier_lookup": 0.75, "organizational_change": 0.75, "digital_platform": 0.75, "general_heritage": 0.75}' + + slots: archive_name: description: Name/title for operational archive accession @@ -677,38 +704,3 @@ slots: \ for instance-to-type relationship.\nValues: CurrentArchive (Q3621648), DepositArchive\ \ (Q244904), \nHistoricalArchive (Q3621673).\n" range: uriorcurie - CustodianArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by CustodianArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `CustodianArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - type_scope - see_also: - - CustodianArchive - - rico:RecordSetType - annotations: - custodian_types: '["A"]' - custodian_types_rationale: CustodianArchiveRecordSetType classifies collections - held by ARCHIVE (A) type custodians - linked_custodian_type: CustodianArchive - dual_class_pattern: collection_type - specificity_score: 0.7 - specificity_rationale: Type taxonomy class. - specificity_annotation_timestamp: '2026-01-06T00:26:29.676176Z' - specificity_annotation_agent: opencode-claude-sonnet-4 - template_specificity: - archive_search: 0.2 - museum_search: 0.75 - library_search: 0.75 - collection_discovery: 0.75 - person_research: 0.75 - location_browse: 0.75 - identifier_lookup: 0.75 - organizational_change: 0.75 - digital_platform: 0.75 - general_heritage: 0.75 diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CustodianArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CustodianArchiveRecordSetTypes.yaml index 6fe24f054f..4b8533f2d3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CustodianArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CustodianArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CustodialRecordsFonds records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CustodianObservation.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CustodianObservation.yaml index 33d9f66f5a..048ebcc170 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CustodianObservation.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CustodianObservation.yaml @@ -112,8 +112,7 @@ classes: description: Confidence in observation accuracy range: ConfidenceMeasure custodian_types: - equals_expression: '["G", "L", "A", "M", "O", "R", "C", "U", "B", "E", "S", - "F", "I", "X", "P", "H", "D", "N", "T"]' + equals_expression: '["hc:GalleryType", "hc:LibraryType", "hc:ArchiveOrganizationType", "hc:MuseumType", "hc:OfficialInstitutionType", "hc:ResearchOrganizationType", "hc:CommercialOrganizationType", "hc:UnspecifiedType", "hc:BioCustodianType", "hc:EducationProviderType", "hc:HeritageSocietyType", "hc:FeatureCustodianType", "hc:IntangibleHeritageGroupType", "hc:MixedCustodianType", "hc:PersonalCollectionType", "hc:HolySacredSiteType", "hc:DigitalPlatformType", "hc:NonProfitType", "hc:TasteScentHeritageType"]' custodian_types_rationale: equals_string: CustodianObservation is universal - source-based evidence can apply to any heritage custodian type diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/CustodianType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/CustodianType.yaml index d3c259d6f5..68ae56cbb5 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/CustodianType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/CustodianType.yaml @@ -8,11 +8,10 @@ imports: - ../slots/created - ../slots/modified - ../slots/class_metadata_slots +- ../slots/wikidata_entity slots: type_id: range: uriorcurie - wikidata_entity: - range: string type_label: range: string type_description: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DarkArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DarkArchive.yaml index a3d92db6e8..9279f1eae1 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DarkArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DarkArchive.yaml @@ -104,7 +104,7 @@ classes: range: AccessPolicy required: true custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DarkArchive is a type of archive with restricted access - maps to ARCHIVE type (A) @@ -168,17 +168,6 @@ classes: access_level: CLOSED restriction_reason: Donor restriction - 50 year embargo description: Embargoed materials dark archive -slots: - access_trigger_events: - description: Events that trigger access - range: string - multivalued: true - preservation_purpose: - description: Purpose for dark archive - range: string - refers_to_access_policy: - description: Link to access policy - range: AccessPolicy DarkArchiveRecordSetType: description: | A rico:RecordSetType for classifying collections held by DarkArchive custodians. @@ -194,7 +183,7 @@ slots: - DarkArchive - rico:RecordSetType annotations: - custodian_types: '["A"]' + custodian_types: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: DarkArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians linked_custodian_type: DarkArchive @@ -203,14 +192,17 @@ slots: specificity_rationale: Type taxonomy class. specificity_annotation_timestamp: '2026-01-06T00:26:29.676643Z' specificity_annotation_agent: opencode-claude-sonnet-4 - template_specificity: - archive_search: 0.2 - museum_search: 0.75 - library_search: 0.75 - collection_discovery: 0.75 - person_research: 0.75 - location_browse: 0.75 - identifier_lookup: 0.75 - organizational_change: 0.75 - digital_platform: 0.75 - general_heritage: 0.75 + template_specificity: '{"archive_search": 0.2, "museum_search": 0.75, "library_search": 0.75, "collection_discovery": 0.75, "person_research": 0.75, "location_browse": 0.75, "identifier_lookup": 0.75, "organizational_change": 0.75, "digital_platform": 0.75, "general_heritage": 0.75}' + + +slots: + access_trigger_events: + description: Events that trigger access + range: string + multivalued: true + preservation_purpose: + description: Purpose for dark archive + range: string + refers_to_access_policy: + description: Link to access policy + range: AccessPolicy diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DarkArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DarkArchiveRecordSetTypes.yaml index b116b9eb59..9ccf64e8c0 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DarkArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DarkArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PreservationCopyCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DigitalPreservationFonds records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DepartmentalArchives.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DepartmentalArchives.yaml index d92ea81835..a36812c085 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DepartmentalArchives.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DepartmentalArchives.yaml @@ -139,9 +139,9 @@ classes: minimum_cardinality: 1 maximum_cardinality: 1 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: DepartmentalArchives is an archival institution - maps to ARCHIVE + equals_string: DepartmentalArchives is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -206,9 +206,9 @@ classes: wikidata_equivalent: equals_string: Q2860456 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: DepartmentalArchives is an archival institution - maps to ARCHIVE + equals_string: DepartmentalArchives is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DepartmentalArchivesRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DepartmentalArchivesRecordSetTypes.yaml index 79aa9bb317..a1a8c9834e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DepartmentalArchivesRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DepartmentalArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DepartmentAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PrefectureSeries records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DepositArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DepositArchive.yaml index c80f9a96b0..e12024a9bb 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DepositArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DepositArchive.yaml @@ -117,9 +117,9 @@ classes: - permanent archive transfer - depositor return custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: DepositArchive is an archival institution - maps to ARCHIVE + equals_string: DepositArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -172,6 +172,33 @@ classes: - secure destruction - transfer to national archives description: Federal records center deposit archive + DepositArchiveRecordSetType: + description: | + A rico:RecordSetType for classifying collections held by DepositArchive custodians. + + **Dual-Class Pattern**: + This class represents the COLLECTION type (rico:RecordSetType). + For the custodian organization type, see `DepositArchive`. + is_a: CollectionType + class_uri: rico:RecordSetType + slots: + - type_scope + see_also: + - DepositArchive + - rico:RecordSetType + annotations: + custodian_types: '["hc:ArchiveOrganizationType"]' + custodian_types_rationale: DepositArchiveRecordSetType classifies collections + held by ArchiveOrganizationType custodians + linked_custodian_type: DepositArchive + dual_class_pattern: collection_type + specificity_score: 0.7 + specificity_rationale: Type taxonomy class. + specificity_annotation_timestamp: '2026-01-06T00:26:29.677478Z' + specificity_annotation_agent: opencode-claude-sonnet-4 + template_specificity: '{"archive_search": 0.2, "museum_search": 0.75, "library_search": 0.75, "collection_discovery": 0.75, "person_research": 0.75, "location_browse": 0.75, "identifier_lookup": 0.75, "organizational_change": 0.75, "digital_platform": 0.75, "general_heritage": 0.75}' + + slots: operates_storage_types: description: Storage types operated by deposit archive @@ -188,38 +215,3 @@ slots: description: Disposition services provided range: string multivalued: true - DepositArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by DepositArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `DepositArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - type_scope - see_also: - - DepositArchive - - rico:RecordSetType - annotations: - custodian_types: '["A"]' - custodian_types_rationale: DepositArchiveRecordSetType classifies collections - held by ARCHIVE (A) type custodians - linked_custodian_type: DepositArchive - dual_class_pattern: collection_type - specificity_score: 0.7 - specificity_rationale: Type taxonomy class. - specificity_annotation_timestamp: '2026-01-06T00:26:29.677478Z' - specificity_annotation_agent: opencode-claude-sonnet-4 - template_specificity: - archive_search: 0.2 - museum_search: 0.75 - library_search: 0.75 - collection_discovery: 0.75 - person_research: 0.75 - location_browse: 0.75 - identifier_lookup: 0.75 - organizational_change: 0.75 - digital_platform: 0.75 - general_heritage: 0.75 diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DepositArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DepositArchiveRecordSetTypes.yaml index 6b06d5308f..22d2529e37 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DepositArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DepositArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DepositedRecordsFonds records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DigitalArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DigitalArchive.yaml index 7fcdd31584..fcad7a10e5 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DigitalArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DigitalArchive.yaml @@ -167,10 +167,10 @@ classes: - JPEG2000 - XML custodian_types: - equals_expression: '["A", "D"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:DigitalPlatformType"]' custodian_types_rationale: equals_string: DigitalArchive bridges archive and digital platform types - - maps to ARCHIVE (A) and DIGITAL_PLATFORM (D) + maps to ArchiveOrganizationType (A) and DIGITAL_PLATFORM (D) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -220,21 +220,6 @@ classes: - JPEG2000 - WARC description: Government digital archive with mixed content -slots: - operates_platform_types: - description: Digital platform types operated - range: DigitalPlatformType - multivalued: true - content_origin: - description: Origin of content (born_digital, digitized, mixed) - range: string - access_interface_url: - description: URL of access interface - range: uri - supported_formats: - description: Supported file formats - range: string - multivalued: true DigitalArchiveRecordSetType: description: | A rico:RecordSetType for classifying collections held by DigitalArchive custodians. @@ -250,23 +235,30 @@ slots: - DigitalArchive - rico:RecordSetType annotations: - custodian_types: '["A"]' + custodian_types: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: DigitalArchiveRecordSetType classifies collections - held by ARCHIVE (A) type custodians + held by ArchiveOrganizationType custodians linked_custodian_type: DigitalArchive dual_class_pattern: collection_type specificity_score: 0.7 specificity_rationale: Type taxonomy class. specificity_annotation_timestamp: '2026-01-06T00:26:29.677967Z' specificity_annotation_agent: opencode-claude-sonnet-4 - template_specificity: - archive_search: 0.2 - museum_search: 0.75 - library_search: 0.75 - collection_discovery: 0.75 - person_research: 0.75 - location_browse: 0.75 - identifier_lookup: 0.75 - organizational_change: 0.75 - digital_platform: 0.75 - general_heritage: 0.75 + template_specificity: '{"archive_search": 0.2, "museum_search": 0.75, "library_search": 0.75, "collection_discovery": 0.75, "person_research": 0.75, "location_browse": 0.75, "identifier_lookup": 0.75, "organizational_change": 0.75, "digital_platform": 0.75, "general_heritage": 0.75}' + + +slots: + operates_platform_types: + description: Digital platform types operated + range: DigitalPlatformType + multivalued: true + content_origin: + description: Origin of content (born_digital, digitized, mixed) + range: string + access_interface_url: + description: URL of access interface + range: uri + supported_formats: + description: Supported file formats + range: string + multivalued: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DigitalArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DigitalArchiveRecordSetTypes.yaml index 4c45b81d0e..7c8fffc22f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DigitalArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DigitalArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DigitalObjectCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DigitizedCollection records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: WebArchiveCollection records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DimArchives.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DimArchives.yaml index 5d4aba1e4c..3dc549aacb 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DimArchives.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DimArchives.yaml @@ -158,7 +158,7 @@ classes: examples: - value: 2-3 business days custodian_types: - equals_expression: '["A", "D"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:DigitalPlatformType"]' custodian_types_rationale: equals_string: Digital archives combine archive (A) and digital platform (D). specificity_annotation: @@ -209,20 +209,6 @@ classes: access_application_url: https://archive.example.org/apply typical_approval_time: 5-10 business days description: Dim archive with researcher access only -slots: - default_access_policy: - description: Default access policy for dim archive - range: AccessPolicy - restriction_categories: - description: Categories of restrictions applied - range: string - multivalued: true - access_application_url: - description: URL for access application - range: uri - typical_approval_time: - description: Typical time for approval - range: string DimArchivesRecordSetType: description: | A rico:RecordSetType for classifying collections held by DimArchives custodians. @@ -238,7 +224,7 @@ slots: - DimArchives - rico:RecordSetType annotations: - custodian_types: '["A"]' + custodian_types: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: DimArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians linked_custodian_type: DimArchives @@ -247,14 +233,20 @@ slots: specificity_rationale: Type taxonomy class. specificity_annotation_timestamp: '2026-01-06T00:26:29.678263Z' specificity_annotation_agent: opencode-claude-sonnet-4 - template_specificity: - archive_search: 0.2 - museum_search: 0.75 - library_search: 0.75 - collection_discovery: 0.75 - person_research: 0.75 - location_browse: 0.75 - identifier_lookup: 0.75 - organizational_change: 0.75 - digital_platform: 0.75 - general_heritage: 0.75 + template_specificity: '{"archive_search": 0.2, "museum_search": 0.75, "library_search": 0.75, "collection_discovery": 0.75, "person_research": 0.75, "location_browse": 0.75, "identifier_lookup": 0.75, "organizational_change": 0.75, "digital_platform": 0.75, "general_heritage": 0.75}' + + +slots: + default_access_policy: + description: Default access policy for dim archive + range: AccessPolicy + restriction_categories: + description: Categories of restrictions applied + range: string + multivalued: true + access_application_url: + description: URL for access application + range: uri + typical_approval_time: + description: Typical time for approval + range: string diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DimArchivesRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DimArchivesRecordSetTypes.yaml index 3f25349bff..915189cc5b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DimArchivesRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DimArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DigitallyInaccessibleCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DiocesanArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DiocesanArchive.yaml index d935d2a387..87689b89c9 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DiocesanArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DiocesanArchive.yaml @@ -136,7 +136,7 @@ classes: - value: true description: Canon law rules apply custodian_types: - equals_expression: '["A", "H"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: DiocesanArchive serves dual roles - as an ARCHIVE (A) for bishop/diocese records and associated with HOLY_SITE (H) religious administration @@ -185,6 +185,33 @@ classes: founding_date_diocese: '1559-05-12' canonical_access_rules: true description: Diocesan archive example - Diocese of 's-Hertogenbosch + DiocesanArchiveRecordSetType: + description: | + A rico:RecordSetType for classifying collections held by DiocesanArchive custodians. + + **Dual-Class Pattern**: + This class represents the COLLECTION type (rico:RecordSetType). + For the custodian organization type, see `DiocesanArchive`. + is_a: CollectionType + class_uri: rico:RecordSetType + slots: + - type_scope + see_also: + - DiocesanArchive + - rico:RecordSetType + annotations: + custodian_types: '["hc:ArchiveOrganizationType"]' + custodian_types_rationale: DiocesanArchiveRecordSetType classifies collections + held by ArchiveOrganizationType custodians + linked_custodian_type: DiocesanArchive + dual_class_pattern: collection_type + specificity_score: 0.7 + specificity_rationale: Type taxonomy class. + specificity_annotation_timestamp: '2026-01-06T00:26:29.678653Z' + specificity_annotation_agent: opencode-claude-sonnet-4 + template_specificity: '{"archive_search": 0.2, "museum_search": 0.75, "library_search": 0.75, "collection_discovery": 0.75, "person_research": 0.75, "location_browse": 0.75, "identifier_lookup": 0.75, "organizational_change": 0.75, "digital_platform": 0.75, "general_heritage": 0.75}' + + slots: diocese_name: description: Name of the diocese @@ -201,38 +228,3 @@ slots: canonical_access_rules: description: Whether canon law access rules apply range: boolean - DiocesanArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by DiocesanArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `DiocesanArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - type_scope - see_also: - - DiocesanArchive - - rico:RecordSetType - annotations: - custodian_types: '["A"]' - custodian_types_rationale: DiocesanArchiveRecordSetType classifies collections - held by ARCHIVE (A) type custodians - linked_custodian_type: DiocesanArchive - dual_class_pattern: collection_type - specificity_score: 0.7 - specificity_rationale: Type taxonomy class. - specificity_annotation_timestamp: '2026-01-06T00:26:29.678653Z' - specificity_annotation_agent: opencode-claude-sonnet-4 - template_specificity: - archive_search: 0.2 - museum_search: 0.75 - library_search: 0.75 - collection_discovery: 0.75 - person_research: 0.75 - location_browse: 0.75 - identifier_lookup: 0.75 - organizational_change: 0.75 - digital_platform: 0.75 - general_heritage: 0.75 diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DiocesanArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DiocesanArchiveRecordSetTypes.yaml index e97def9ae4..ee02a014a8 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DiocesanArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DiocesanArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DiocesanAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ParishRecordSeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: EpiscopalCorrespondenceCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DistrictArchiveGermany.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DistrictArchiveGermany.yaml index 26443898e1..7c916715ce 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DistrictArchiveGermany.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DistrictArchiveGermany.yaml @@ -66,7 +66,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DistrictArchiveGermanyRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DistrictArchiveGermanyRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DistrictArchiveGermanyRecordSetTypes.yaml index ee64b4f30a..5b8c73dd44 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DistrictArchiveGermanyRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DistrictArchiveGermanyRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: KreisAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LocalGovernanceSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DistritalArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DistritalArchive.yaml index 22577072ff..68c7619e3d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DistritalArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DistritalArchive.yaml @@ -35,9 +35,9 @@ classes: wikidata_entity: equals_string: Q10296259 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: DistritalArchive is an archival institution - maps to ARCHIVE + equals_string: DistritalArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -86,7 +86,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DistritalArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DistritalArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DistritalArchiveRecordSetTypes.yaml index 172a6a408d..8617c4401d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DistritalArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DistritalArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DistritoAdministrationFonds records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/DocumentationCentre.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/DocumentationCentre.yaml index 35b354f04e..762560a0ee 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/DocumentationCentre.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/DocumentationCentre.yaml @@ -21,9 +21,9 @@ classes: wikidata_entity: equals_string: Q2945282 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: DocumentationCentre is an archival institution - maps to ARCHIVE + equals_string: DocumentationCentre is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/EconomicArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/EconomicArchive.yaml index 6c6f7d954a..8760e137b2 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/EconomicArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/EconomicArchive.yaml @@ -35,10 +35,10 @@ classes: wikidata_entity: equals_string: Q27032167 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Economic Archive is an archival institution for business/commerce - records - maps to ARCHIVE (A) + records - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -87,7 +87,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: EconomicArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/EconomicArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/EconomicArchiveRecordSetTypes.yaml index f515328be5..d4e6aff4dc 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/EconomicArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/EconomicArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: BusinessRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: TradeDocumentationCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/EducationCenter.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/EducationCenter.yaml index 3ddca3eda2..c9d79ec666 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/EducationCenter.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/EducationCenter.yaml @@ -305,7 +305,7 @@ classes: range: ReconstructionActivity required: false custodian_types: - equals_expression: '["E"]' + equals_expression: '["hc:EducationProviderType"]' custodian_types_rationale: equals_string: Education center is an education provider type (E). specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/EducationProviderType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/EducationProviderType.yaml index 735ade899e..1ac0b07aeb 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/EducationProviderType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/EducationProviderType.yaml @@ -334,7 +334,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["E"]' + equals_expression: '["hc:EducationProviderType"]' custodian_types_rationale: equals_string: EducationProviderType is specific to education providers - universities, colleges, schools with heritage collections diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ExhibitedObject.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ExhibitedObject.yaml index 87a9619704..cd7acf498d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ExhibitedObject.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ExhibitedObject.yaml @@ -629,7 +629,7 @@ classes: - value: https://nde.nl/ontology/hc/loan/mauritshuis-rijksmuseum-vermeer-2023 description: Loan to Rijksmuseum for Vermeer 2023 exhibition custodian_types: - equals_expression: '["G", "M", "A", "L", "R", "H", "B"]' + equals_expression: '["hc:GalleryType", "hc:MuseumType", "hc:ArchiveOrganizationType", "hc:LibraryType", "hc:ResearchOrganizationType", "hc:HolySacredSiteType", "hc:BioCustodianType"]' custodian_types_rationale: equals_string: | ExhibitedObject is relevant to all custodian types that hold collections: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/Exhibition.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/Exhibition.yaml index 66d4a63757..6f778aa7c2 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/Exhibition.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/Exhibition.yaml @@ -415,7 +415,7 @@ classes: examples: - value: https://www.youtube.com/watch?v=vermeer-tour custodian_types: - equals_expression: '["G", "M", "A", "L", "R", "H", "B"]' + equals_expression: '["hc:GalleryType", "hc:MuseumType", "hc:ArchiveOrganizationType", "hc:LibraryType", "hc:ResearchOrganizationType", "hc:HolySacredSiteType", "hc:BioCustodianType"]' custodian_types_rationale: equals_string: "Exhibitions are hosted by galleries (G), museums (M), archives\ \ (A), \nlibraries (L), research centers (R), holy sites (H), and botanical/zoo\ diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ExhibitionCatalog.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ExhibitionCatalog.yaml index 7c2e46d081..bbb63953cc 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ExhibitionCatalog.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ExhibitionCatalog.yaml @@ -388,7 +388,7 @@ classes: - value: https://www.worldcat.org/title/1370123456 - value: https://uba.uva.nl/catalog/12345678 custodian_types: - equals_expression: '["G", "M", "A", "L", "R", "H", "B"]' + equals_expression: '["hc:GalleryType", "hc:MuseumType", "hc:ArchiveOrganizationType", "hc:LibraryType", "hc:ResearchOrganizationType", "hc:HolySacredSiteType", "hc:BioCustodianType"]' custodian_types_rationale: equals_string: "Exhibition catalogs are published by Galleries (G), Museums\ \ (M), Archives (A), \nLibraries (L), Research Centers (R), Holy Sites (H),\ diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/FeatureCustodianType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/FeatureCustodianType.yaml index fae0963eb3..ed79bea7bc 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/FeatureCustodianType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/FeatureCustodianType.yaml @@ -365,7 +365,7 @@ classes: - value: Public-private partnership, 99-year lease description: Tower management company custodian_types: - equals_expression: '["F"]' + equals_expression: '["hc:FeatureCustodianType"]' custodian_types_rationale: equals_string: FeatureCustodianType is specific to organizations managing physical heritage features (monuments, landmarks, historic sites) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/FeaturePlace.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/FeaturePlace.yaml index c88484671d..2f0c25209d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/FeaturePlace.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/FeaturePlace.yaml @@ -278,10 +278,10 @@ classes: - value: '2020-06-30' description: Museum closed, building repurposed custodian_types: - equals_expression: '["F"]' + equals_expression: '["hc:FeatureCustodianType"]' custodian_types_rationale: equals_string: FeaturePlace represents physical heritage features (monuments, - statues) - maps to FEATURES type + statues) - maps to FeatureCustodianType type specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/FilmArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/FilmArchive.yaml index 8cfa5b5001..65997d6edc 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/FilmArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/FilmArchive.yaml @@ -49,9 +49,9 @@ classes: equals_expression: | ["hc:FeatureFilmCollection", "hc:DocumentaryFilmCollection", "hc:NewsreelSeries", "hc:ProductionRecordsFonds", "hc:FilmPromoCollection"] custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: FilmArchive is an archival institution - maps to ARCHIVE (A) + equals_string: FilmArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -83,37 +83,3 @@ classes: - Often members of FIAF (International Federation of Film Archives) - Preservation includes both content and technical formats - Related to but distinct from Cinematheque (Q1352795) which focuses on exhibition - FilmArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by FilmArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `FilmArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - custodian_types - - custodian_types_rationale - - dual_class_link - - specificity_annotation - - template_specificity - - type_scope - see_also: - - FilmArchive - - rico:RecordSetType - slot_usage: - custodian_types: - equals_expression: '["A"]' - custodian_types_rationale: - equals_string: FilmArchiveRecordSetType classifies collections held by ARCHIVE - (A) type custodians - dual_class_link: - range: DualClassLink - inlined: true - specificity_annotation: - range: SpecificityAnnotation - inlined: true - template_specificity: - range: TemplateSpecificityScores - inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/FilmArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/FilmArchiveRecordSetTypes.yaml index 387484f897..faac14faf3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/FilmArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/FilmArchiveRecordSetTypes.yaml @@ -50,7 +50,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Film archive record set types are held by ARCHIVE (A) type custodians @@ -121,7 +121,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Feature film collections are held by ARCHIVE (A) type custodians specificity_annotation: @@ -215,7 +215,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "R"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:ResearchOrganizationType"]' custodian_types_rationale: equals_string: Documentary collections may be held by ARCHIVE (A) or RESEARCH_CENTER (R) @@ -290,12 +290,12 @@ classes: - wd:Q11424 close_mappings: - skos:Concept - - CivilRegistrySeries see_also: - FilmArchiveRecordSetType - rico:RecordSetType - rico-rst:Series - BroadcastArchive + - CivilRegistrySeries annotations: historical_note: Primary visual news source before television (ca. 1910-1970). Document major historical events, daily life, and social conditions. Often accompanied @@ -307,7 +307,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Newsreel series are held by ARCHIVE (A) type custodians specificity_annotation: @@ -381,11 +381,11 @@ classes: - wd:Q1643722 close_mappings: - skos:Concept - - CorporateGovernanceFonds see_also: - FilmArchiveRecordSetType - rico:RecordSetType - rico-rst:Fonds + - CorporateGovernanceFonds slots: - custodian_types - custodian_types_rationale @@ -393,7 +393,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Production records fonds are held by ARCHIVE (A) type custodians specificity_annotation: @@ -472,12 +472,12 @@ classes: close_mappings: - skos:Concept - schema:Collection - - MarketingArchiveCollection see_also: - FilmArchiveRecordSetType - rico:RecordSetType - rico-rst:Collection - PosterCollection + - MarketingArchiveCollection annotations: visual_heritage_note: Film promotional materials have significant visual heritage value for graphic design history, advertising history, and star/celebrity @@ -489,7 +489,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "M"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:MuseumType"]' custodian_types_rationale: equals_string: Film promotional collections may be held by ARCHIVE (A) or MUSEUM (M) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/FindingAid.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/FindingAid.yaml index b9605ea79b..c56fb51d30 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/FindingAid.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/FindingAid.yaml @@ -191,7 +191,7 @@ classes: - related_archives - related_guides - revision_date - - scope_note + - finding_aid_scope_note - served_by - slug - specificity_annotation @@ -1083,7 +1083,7 @@ slots: range: string examples: - value: NL-HaNA_1.04.02 - scope_note: + finding_aid_scope_note: slot_uri: skos:scopeNote description: | Additional notes on the scope, coverage, or limitations of the finding aid. diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/Foremalarkiv.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/Foremalarkiv.yaml index 500948a89e..508c9d1244 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/Foremalarkiv.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/Foremalarkiv.yaml @@ -20,9 +20,9 @@ classes: wikidata_entity: equals_string: Q10501208 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: Foremalarkiv is an archival institution - maps to ARCHIVE (A) + equals_string: Foremalarkiv is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/FoundationArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/FoundationArchive.yaml index a10216fcc9..cf07c27638 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/FoundationArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/FoundationArchive.yaml @@ -35,10 +35,10 @@ classes: wikidata_entity: equals_string: Q27030827 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Foundation Archive is an archival institution for charitable/cultural - foundation records - maps to ARCHIVE (A) + foundation records - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -86,7 +86,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FoundationArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/FoundationArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/FoundationArchiveRecordSetTypes.yaml index 610b4b9078..b4e843dfa7 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/FoundationArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/FoundationArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FoundationAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: GrantRecordSeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ProjectDocumentationCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/FreeArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/FreeArchive.yaml index 65366e8007..828c7e578f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/FreeArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/FreeArchive.yaml @@ -36,10 +36,10 @@ classes: wikidata_entity: equals_string: Q635801 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Free Archive is an independent archival institution for social - movements - maps to ARCHIVE (A) + movements - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FreeArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/FreeArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/FreeArchiveRecordSetTypes.yaml index 0f12773082..34dc3651c3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/FreeArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/FreeArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: OpenAccessCollection records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/FrenchPrivateArchives.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/FrenchPrivateArchives.yaml index ff45041743..3f85b44152 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/FrenchPrivateArchives.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/FrenchPrivateArchives.yaml @@ -37,7 +37,7 @@ classes: wikidata_entity: equals_string: Q2860565 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FrenchPrivateArchives is an archival institution - maps to ARCHIVE (A) @@ -91,7 +91,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FrenchPrivateArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/FrenchPrivateArchivesRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/FrenchPrivateArchivesRecordSetTypes.yaml index 99af791add..1542cd9de7 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/FrenchPrivateArchivesRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/FrenchPrivateArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FrenchPrivateFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/GalleryType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/GalleryType.yaml index 42d118b013..41a486baa7 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/GalleryType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/GalleryType.yaml @@ -187,7 +187,7 @@ classes: range: GalleryType required: false custodian_types: - equals_expression: '["G"]' + equals_expression: '["hc:GalleryType"]' custodian_types_rationale: equals_string: GalleryType is specific to galleries - art exhibition spaces (commercial and non-commercial) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/GovernmentArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/GovernmentArchive.yaml index a5b688efb7..be109a9c0d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/GovernmentArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/GovernmentArchive.yaml @@ -43,9 +43,9 @@ classes: wikidata_entity: equals_string: Q119712417 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: GovernmentArchive is an archival institution - maps to ARCHIVE + equals_string: GovernmentArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -91,7 +91,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: GovernmentArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/GovernmentArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/GovernmentArchiveRecordSetTypes.yaml index fd8c5d9a5f..b16fc07b09 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/GovernmentArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/GovernmentArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: AgencyAdministrativeFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PolicyDocumentCollection records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PublicServiceRecordSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/HeritageSocietyType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/HeritageSocietyType.yaml index 1288f90bc3..c8cfd72067 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/HeritageSocietyType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/HeritageSocietyType.yaml @@ -393,10 +393,10 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["S"]' + equals_expression: '["hc:HeritageSocietyType"]' custodian_types_rationale: equals_string: HeritageSocietyType represents collecting societies and heritage - associations - maps to COLLECTING_SOCIETY type (S) + associations - maps to HeritageSocietyType type (S) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/HistoricalArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/HistoricalArchive.yaml index 8f046fa1c5..d7edbd3878 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/HistoricalArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/HistoricalArchive.yaml @@ -43,9 +43,9 @@ classes: wikidata_entity: equals_string: Q3621673 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: HistoricalArchive is an archival institution - maps to ARCHIVE + equals_string: HistoricalArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: HistoricalArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/HistoricalArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/HistoricalArchiveRecordSetTypes.yaml index e35977d3d3..2b9956ba60 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/HistoricalArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/HistoricalArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: HistoricalDocumentFonds records are held by ARCHIVE (A) type custodians @@ -58,7 +58,7 @@ classes: rico_has_or_had_holder_note: equals_string: This RecordSetType is typically held by HistoricalArchive custodians. Inverse of rico:isOrWasHolderOf. - ManuscriptCollection: + HistoricalManuscriptCollection: is_a: HistoricalArchiveRecordSetType class_uri: rico:RecordSetType description: "A rico:RecordSetType for Historical manuscripts.\n\n**RiC-O Alignment**:\n\ @@ -80,9 +80,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: ManuscriptCollection records are held by ARCHIVE (A) type custodians + equals_string: HistoricalManuscriptCollection records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +90,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: ManuscriptCollection + equals_string: HistoricalManuscriptCollection rico_organizational_principle: equals_string: collection rico_organizational_principle_uri: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml index de5a528ed0..b2383ceeba 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml @@ -422,7 +422,7 @@ classes: - value: Deconsecrated, Converted to museum description: Former church building custodian_types: - equals_expression: '["H"]' + equals_expression: '["hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: HolySacredSiteType is specific to religious sites managing heritage collections (churches, temples, mosques, synagogues) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/HospitalArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/HospitalArchive.yaml index 690574739d..7c0c871bb3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/HospitalArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/HospitalArchive.yaml @@ -56,10 +56,10 @@ classes: equals_expression: | ["hc:HospitalAdministrationFonds", "hc:PatientRecordsSeries", "hc:MedicalResearchCollection", "hc:NursingRecordsCollection", "hc:MedicalPhotographyCollection"] custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Hospital Archive is a specialized archival institution for - healthcare records - maps to ARCHIVE (A) + healthcare records - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -84,37 +84,3 @@ classes: - Patient records subject to strict privacy and retention regulations - Important for history of medicine and public health research - May include records from associated medical schools or research - HospitalArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by HospitalArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `HospitalArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - custodian_types - - custodian_types_rationale - - dual_class_link - - specificity_annotation - - template_specificity - - type_scope - see_also: - - HospitalArchive - - rico:RecordSetType - slot_usage: - custodian_types: - equals_expression: '["A"]' - custodian_types_rationale: - equals_string: HospitalArchiveRecordSetType classifies collections held by - ARCHIVE (A) type custodians - dual_class_link: - range: DualClassLink - inlined: true - specificity_annotation: - range: SpecificityAnnotation - inlined: true - template_specificity: - range: TemplateSpecificityScores - inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/HospitalArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/HospitalArchiveRecordSetTypes.yaml index b07ed9decc..4ddae58690 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/HospitalArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/HospitalArchiveRecordSetTypes.yaml @@ -51,7 +51,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Hospital archive record set types are held by ARCHIVE (A) type custodians @@ -156,7 +156,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Hospital administration fonds are held by ARCHIVE (A) type custodians @@ -286,7 +286,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Patient records series are held by ARCHIVE (A) type custodians specificity_annotation: @@ -402,12 +402,12 @@ classes: - wd:Q9388534 close_mappings: - skos:Concept - - ResearchDataCollection see_also: - HospitalArchiveRecordSetType - rico:RecordSetType - rico-rst:Collection - AcademicArchive + - ResearchDataCollection annotations: regulatory_note: Research records subject to GCP guidelines, regulatory requirements (FDA/EMA), and data retention mandates (typically 15-25 years). Ethics committee @@ -422,7 +422,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "R"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:ResearchOrganizationType"]' custodian_types_rationale: equals_string: Medical research collections may be held by ARCHIVE (A) or RESEARCH_CENTER (R) @@ -545,7 +545,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "E"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:EducationProviderType"]' custodian_types_rationale: equals_string: Nursing records may be held by ARCHIVE (A) or EDUCATION_PROVIDER (E) @@ -631,12 +631,12 @@ classes: - wd:Q1260006 close_mappings: - skos:Concept - - PhotographicCollection see_also: - HospitalArchiveRecordSetType - rico:RecordSetType - rico-rst:Collection - PhotographicArchive + - PhotographicCollection annotations: museum_note: Medical photography collections may be held by medical museums, particularly those associated with university medical centers or medical history @@ -648,7 +648,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "M"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:MuseumType"]' custodian_types_rationale: equals_string: Medical photography collections may be held by ARCHIVE (A) or medical MUSEUM (M) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/HouseArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/HouseArchive.yaml index 6b37367b7a..ac1c3c3f28 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/HouseArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/HouseArchive.yaml @@ -43,10 +43,10 @@ classes: wikidata_entity: equals_string: Q4344572 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: House Archive (Family Archive) is an archival collection for - family records - maps to ARCHIVE (A) + family records - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: HouseArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/HouseArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/HouseArchiveRecordSetTypes.yaml index 231f08a34e..ee28688b46 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/HouseArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/HouseArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: HouseRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FamilyPapersCollection records are held by ARCHIVE (A) type custodians @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: EstateDocumentSeries records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/IconographicArchives.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/IconographicArchives.yaml index 4dbf2b359f..507cd2ea9a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/IconographicArchives.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/IconographicArchives.yaml @@ -41,9 +41,9 @@ classes: wikidata_entity: equals_string: Q117810712 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: IconographicArchives is an archival institution - maps to ARCHIVE + equals_string: IconographicArchives is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -85,7 +85,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: IconographicArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/IconographicArchivesRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/IconographicArchivesRecordSetTypes.yaml index 0722f2f752..6003c01613 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/IconographicArchivesRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/IconographicArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: VisualImageCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PrintCollection records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/InformationCarrier.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/InformationCarrier.yaml index f68b59e518..ac62f79a40 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/InformationCarrier.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/InformationCarrier.yaml @@ -548,7 +548,7 @@ classes: \ movable metal type. Contains the complete Latin Vulgate \ntext of the\ \ Old and New Testaments.\n" custodian_types: - equals_expression: '["L", "A", "R", "M", "H"]' + equals_expression: '["hc:LibraryType", "hc:ArchiveOrganizationType", "hc:ResearchOrganizationType", "hc:MuseumType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: | InformationCarrier is primarily relevant to: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/InstitutionalArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/InstitutionalArchive.yaml index 36afb23766..1761f2644e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/InstitutionalArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/InstitutionalArchive.yaml @@ -43,9 +43,9 @@ classes: wikidata_entity: equals_string: Q124762372 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: InstitutionalArchive is an archival institution - maps to ARCHIVE + equals_string: InstitutionalArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: InstitutionalArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/InstitutionalArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/InstitutionalArchiveRecordSetTypes.yaml index 5054a2550f..8ab89b6e5f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/InstitutionalArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/InstitutionalArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: InstitutionAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: OperationalRecordSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/InstitutionalRepository.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/InstitutionalRepository.yaml index 84f952934a..aac026739a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/InstitutionalRepository.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/InstitutionalRepository.yaml @@ -24,7 +24,7 @@ classes: platform_type_id: identifier: false custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: InstitutionalRepository is an archival institution - maps to ARCHIVE (A) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/IntangibleHeritageEvent.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/IntangibleHeritageEvent.yaml index e7194176e3..b54ed99c79 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/IntangibleHeritageEvent.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/IntangibleHeritageEvent.yaml @@ -283,7 +283,7 @@ classes: Wikidata entity ID for this specific event occurrence (if exists). Note: Most annual events don't have Wikidata entries for each year. custodian_types: - equals_expression: '["I"]' + equals_expression: '["hc:IntangibleHeritageGroupType"]' custodian_types_rationale: equals_string: Intangible heritage event relates to intangible heritage groups (I). diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/IntangibleHeritageForm.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/IntangibleHeritageForm.yaml index adccffad53..6f8fd58752 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/IntangibleHeritageForm.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/IntangibleHeritageForm.yaml @@ -324,7 +324,7 @@ classes: examples: - value: https://www.pride.amsterdam custodian_types: - equals_expression: '["I"]' + equals_expression: '["hc:IntangibleHeritageGroupType"]' custodian_types_rationale: equals_string: IntangibleHeritageForm represents intangible cultural heritage practices - maps exclusively to INTANGIBLE_HERITAGE_GROUP type (I) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/IntangibleHeritageGroupType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/IntangibleHeritageGroupType.yaml index 56fa7193d5..15c3ff6162 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/IntangibleHeritageGroupType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/IntangibleHeritageGroupType.yaml @@ -375,7 +375,7 @@ classes: - value: Annual festival, School programs, UNESCO nomination description: Festival tradition safeguarding custodian_types: - equals_expression: '["I"]' + equals_expression: '["hc:IntangibleHeritageGroupType"]' custodian_types_rationale: equals_string: IntangibleHeritageGroupType is specific to organizations preserving intangible cultural heritage (performing arts, traditional crafts, oral diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/IntangibleHeritagePerformance.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/IntangibleHeritagePerformance.yaml index f495740980..f573c1f4b6 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/IntangibleHeritagePerformance.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/IntangibleHeritagePerformance.yaml @@ -270,7 +270,7 @@ classes: examples: - value: First public performance of this ensemble in the Netherlands. custodian_types: - equals_expression: '["I"]' + equals_expression: '["hc:IntangibleHeritageGroupType"]' custodian_types_rationale: equals_string: Intangible heritage performance relates to intangible heritage groups (I). diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/JointArchives.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/JointArchives.yaml index 9f90e6369f..24ccd02ea4 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/JointArchives.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/JointArchives.yaml @@ -42,9 +42,9 @@ classes: wikidata_entity: equals_string: Q117442301 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: JointArchives is an archival institution - maps to ARCHIVE + equals_string: JointArchives is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -87,7 +87,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: JointArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/JointArchivesRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/JointArchivesRecordSetTypes.yaml index 68702cf35d..0b047aa23d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/JointArchivesRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/JointArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SharedRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/LGBTArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/LGBTArchive.yaml index 44cf9c970b..6e7600e1f0 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/LGBTArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/LGBTArchive.yaml @@ -43,9 +43,9 @@ classes: wikidata_entity: equals_string: Q61710689 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: LGBTArchive is an archival institution - maps to ARCHIVE (A) + equals_string: LGBTArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LGBTArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/LGBTArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/LGBTArchiveRecordSetTypes.yaml index 46ee3964f1..919096c181 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/LGBTArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/LGBTArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LGBTOrganizationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ActivistPapersCollection records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PrideEventCollection records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/LibraryType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/LibraryType.yaml index f840d41cc5..3fc5d11d51 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/LibraryType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/LibraryType.yaml @@ -161,7 +161,7 @@ classes: range: LibraryType required: false custodian_types: - equals_expression: '["L"]' + equals_expression: '["hc:LibraryType"]' custodian_types_rationale: equals_string: LibraryType is specific to libraries - institutions collecting and providing access to published materials diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/LightArchives.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/LightArchives.yaml index 512e5a3ca9..c907384215 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/LightArchives.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/LightArchives.yaml @@ -45,9 +45,9 @@ classes: access_policy: description: Light archives have open or broadly accessible policies custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: LightArchives is an archival institution - maps to ARCHIVE + equals_string: LightArchives is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LightArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/LightArchivesRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/LightArchivesRecordSetTypes.yaml index c8b4294db6..8242b7516c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/LightArchivesRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/LightArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MinimalProcessingCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/LiteraryArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/LiteraryArchive.yaml index 0274ecb063..cb06d50107 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/LiteraryArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/LiteraryArchive.yaml @@ -42,10 +42,10 @@ classes: wikidata_entity: equals_string: Q28607652 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LiteraryArchive is a specialized archive type for literary - works and author papers - maps to ARCHIVE type (A) + works and author papers - maps to ArchiveOrganizationType type (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LiteraryArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/LiteraryArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/LiteraryArchiveRecordSetTypes.yaml index 963ffd0abb..75de1d90f8 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/LiteraryArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/LiteraryArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: AuthorPapersCollection records are held by ARCHIVE (A) type custodians @@ -58,7 +58,7 @@ classes: rico_has_or_had_holder_note: equals_string: This RecordSetType is typically held by LiteraryArchive custodians. Inverse of rico:isOrWasHolderOf. - ManuscriptCollection: + LiteraryManuscriptCollection: is_a: LiteraryArchiveRecordSetType class_uri: rico:RecordSetType description: "A rico:RecordSetType for Literary manuscripts.\n\n**RiC-O Alignment**:\n\ @@ -80,9 +80,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: ManuscriptCollection records are held by ARCHIVE (A) type custodians + equals_string: LiteraryManuscriptCollection records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +90,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: ManuscriptCollection + equals_string: LiteraryManuscriptCollection rico_organizational_principle: equals_string: collection rico_organizational_principle_uri: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PublisherRecordsSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/Loan.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/Loan.yaml index e65d45fccf..3d253c73b8 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/Loan.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/Loan.yaml @@ -445,7 +445,7 @@ classes: - value: No photography permitted - value: Must be displayed in glazed case custodian_types: - equals_expression: '["G", "M", "A", "L", "R", "H", "B"]' + equals_expression: '["hc:GalleryType", "hc:MuseumType", "hc:ArchiveOrganizationType", "hc:LibraryType", "hc:ResearchOrganizationType", "hc:HolySacredSiteType", "hc:BioCustodianType"]' custodian_types_rationale: equals_string: | Loan is relevant to all custodian types that manage loanable collections: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/LocalGovernmentArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/LocalGovernmentArchive.yaml index bf3648944b..fed5341e28 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/LocalGovernmentArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/LocalGovernmentArchive.yaml @@ -42,10 +42,10 @@ classes: wikidata_entity: equals_string: Q118281267 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Local Government Archive is a governmental archival institution - - maps to ARCHIVE (A) + - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -88,7 +88,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LocalGovernmentArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/LocalGovernmentArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/LocalGovernmentArchiveRecordSetTypes.yaml index c46adeec2a..6592edb5ad 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/LocalGovernmentArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/LocalGovernmentArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LocalAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PublicWorksSeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LocalTaxRecordsSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/LocalHeritageInstitutionSweden.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/LocalHeritageInstitutionSweden.yaml index 3507d6e7bd..e4f0636a63 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/LocalHeritageInstitutionSweden.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/LocalHeritageInstitutionSweden.yaml @@ -25,7 +25,7 @@ classes: wikidata_entity: equals_string: Q10520688 custodian_types: - equals_expression: '["X"]' + equals_expression: '["hc:MixedCustodianType"]' custodian_types_rationale: equals_string: Swedish local heritage institution is often mixed type (X). specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/LocalHistoryArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/LocalHistoryArchive.yaml index e817e8aa6e..e338227860 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/LocalHistoryArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/LocalHistoryArchive.yaml @@ -42,9 +42,9 @@ classes: wikidata_entity: equals_string: Q12324798 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: LocalHistoryArchive is an archival institution - maps to ARCHIVE + equals_string: LocalHistoryArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -91,7 +91,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LocalHistoryArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/LocalHistoryArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/LocalHistoryArchiveRecordSetTypes.yaml index e08852246f..99cc2b3493 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/LocalHistoryArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/LocalHistoryArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LocalHistoryFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CommunityPhotographCollection records are held by ARCHIVE (A) type custodians @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LocalNewspaperCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/LocationLibrary.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/LocationLibrary.yaml index 912295345b..3eda64ee6e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/LocationLibrary.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/LocationLibrary.yaml @@ -25,7 +25,7 @@ classes: wikidata_entity: equals_string: Q6664811 custodian_types: - equals_expression: '["L"]' + equals_expression: '["hc:LibraryType"]' custodian_types_rationale: equals_string: Location library is a library type (L). specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MailingListArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MailingListArchive.yaml index e3eb4fce42..af435ecd3a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MailingListArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MailingListArchive.yaml @@ -46,9 +46,9 @@ classes: platform_type_id: identifier: false custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: MailingListArchive is an archival institution - maps to ARCHIVE + equals_string: MailingListArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -94,7 +94,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MailingListArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MailingListArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MailingListArchiveRecordSetTypes.yaml index b164916b0c..fd02766fde 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MailingListArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MailingListArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: EmailArchiveCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DiscussionForumFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MediaArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MediaArchive.yaml index a07bc5cca0..d6266fa44e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MediaArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MediaArchive.yaml @@ -42,10 +42,10 @@ classes: wikidata_entity: equals_string: Q116809817 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Media Archive is a specialized archival institution for audio, - video, and other media - maps to ARCHIVE (A) + video, and other media - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -92,7 +92,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MediaArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MediaArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MediaArchiveRecordSetTypes.yaml index 20fe35a9d0..a96e8687e4 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MediaArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MediaArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MediaProductionFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: BroadcastCollection records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MilitaryArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MilitaryArchive.yaml index 5a2490401e..65787c49c5 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MilitaryArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MilitaryArchive.yaml @@ -56,9 +56,9 @@ classes: equals_expression: | ["hc:MilitaryOperationsFonds", "hc:MilitaryPersonnelSeries", "hc:UnitHistoryCollection", "hc:MilitaryMapsCollection", "hc:VeteransDocumentationCollection"] custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: MilitaryArchive is an archival institution - maps to ARCHIVE + equals_string: MilitaryArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -84,37 +84,3 @@ classes: - Preserves records of military and defense activities - Access often subject to declassification schedules - Important for military history and veterans' affairs - MilitaryArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by MilitaryArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `MilitaryArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - custodian_types - - custodian_types_rationale - - dual_class_link - - specificity_annotation - - template_specificity - - type_scope - see_also: - - MilitaryArchive - - rico:RecordSetType - slot_usage: - custodian_types: - equals_expression: '["A"]' - custodian_types_rationale: - equals_string: MilitaryArchiveRecordSetType classifies collections held by - ARCHIVE (A) type custodians - dual_class_link: - range: DualClassLink - inlined: true - specificity_annotation: - range: SpecificityAnnotation - inlined: true - template_specificity: - range: TemplateSpecificityScores - inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MilitaryArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MilitaryArchiveRecordSetTypes.yaml index 8a1cb38501..8afc93941f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MilitaryArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MilitaryArchiveRecordSetTypes.yaml @@ -50,7 +50,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Military archive record set types are held by ARCHIVE (A) type custodians @@ -147,7 +147,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Military operations fonds are held by ARCHIVE (A) type custodians specificity_annotation: @@ -225,11 +225,11 @@ classes: - wd:Q185583 close_mappings: - skos:Concept - - PersonnelRecordsSeries see_also: - MilitaryArchiveRecordSetType - rico:RecordSetType - rico-rst:Series + - PersonnelRecordsSeries annotations: genealogy_note: Primary source for military genealogy. Often cross-referenced with conscription registers (militieregisters) held by municipal archives. @@ -240,7 +240,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Military personnel series are held by ARCHIVE (A) type custodians specificity_annotation: @@ -335,7 +335,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "M"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:MuseumType"]' custodian_types_rationale: equals_string: Unit history collections may be held by ARCHIVE (A) or military MUSEUM (M) @@ -427,7 +427,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "L"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:LibraryType"]' custodian_types_rationale: equals_string: Military map collections may be held by ARCHIVE (A) or LIBRARY (L) map departments @@ -511,12 +511,12 @@ classes: - wd:Q9388534 close_mappings: - skos:Concept - - OralHistoryCollection see_also: - MilitaryArchiveRecordSetType - rico:RecordSetType - rico-rst:Collection - WarArchive + - OralHistoryCollection annotations: commemoration_note: Veterans documentation supports national remembrance activities, war cemetery maintenance, and educational initiatives about conflict and @@ -531,7 +531,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "M", "R"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:MuseumType", "hc:ResearchOrganizationType"]' custodian_types_rationale: equals_string: Veterans documentation may be held by ARCHIVE (A), MUSEUM (M), or RESEARCH_CENTER (R) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MixedCustodianType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MixedCustodianType.yaml index 83a310a0b4..978735ced3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MixedCustodianType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MixedCustodianType.yaml @@ -362,7 +362,7 @@ classes: - value: Government (archive), Tourists (museum), Professionals (training) description: National institution users custodian_types: - equals_expression: '["X"]' + equals_expression: '["hc:MixedCustodianType"]' custodian_types_rationale: equals_string: MixedCustodianType is for institutions operating as multiple types simultaneously (e.g., combined museum/archive/library) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MonasteryArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MonasteryArchive.yaml index 35cba53c6c..316b827289 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MonasteryArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MonasteryArchive.yaml @@ -42,7 +42,7 @@ classes: wikidata_entity: equals_string: Q27030561 custodian_types: - equals_expression: '["A", "H"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: MonasteryArchive serves dual roles - as an ARCHIVE (A) for monastic records and as part of a HOLY_SITE (H) religious community @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MonasteryArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MonasteryArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MonasteryArchiveRecordSetTypes.yaml index 1c4cf0e448..21b66db8ee 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MonasteryArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MonasteryArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MonasticRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -57,7 +57,7 @@ classes: rico_has_or_had_holder_note: equals_string: This RecordSetType is typically held by MonasteryArchive custodians. Inverse of rico:isOrWasHolderOf. - ManuscriptCollection: + MonasticManuscriptCollection: is_a: MonasteryArchiveRecordSetType class_uri: rico:RecordSetType description: "A rico:RecordSetType for Medieval manuscripts and codices.\n\n**RiC-O\ @@ -79,9 +79,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: ManuscriptCollection records are held by ARCHIVE (A) type custodians + equals_string: MonasticManuscriptCollection records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation inlined: true @@ -89,7 +89,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: ManuscriptCollection + equals_string: MonasticManuscriptCollection rico_organizational_principle: equals_string: collection rico_organizational_principle_uri: @@ -121,7 +121,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PropertyRecordsSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MunicipalArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MunicipalArchive.yaml index 95a257be39..73dfd594e9 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MunicipalArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MunicipalArchive.yaml @@ -60,10 +60,10 @@ classes: wikidata_entity: equals_string: Q604177 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Municipal Archive is a local government archival institution - - maps to ARCHIVE (A) + - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -101,37 +101,3 @@ classes: - Core institution for local government records - Often oldest surviving local records - Important for genealogy and local history research - MunicipalArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by MunicipalArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `MunicipalArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - custodian_types - - custodian_types_rationale - - dual_class_link - - specificity_annotation - - template_specificity - - type_scope - see_also: - - MunicipalArchive - - rico:RecordSetType - slot_usage: - custodian_types: - equals_expression: '["A"]' - custodian_types_rationale: - equals_string: MunicipalArchiveRecordSetType classifies collections held by - ARCHIVE (A) type custodians - dual_class_link: - range: DualClassLink - inlined: true - specificity_annotation: - range: SpecificityAnnotation - inlined: true - template_specificity: - range: TemplateSpecificityScores - inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MunicipalArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MunicipalArchiveRecordSetTypes.yaml index 1f7af32f35..acd071384e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MunicipalArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MunicipalArchiveRecordSetTypes.yaml @@ -47,7 +47,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Municipal archive record set types are held by ARCHIVE (A) type custodians @@ -118,7 +118,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Council governance fonds are held by ARCHIVE (A) type custodians specificity_annotation: @@ -212,7 +212,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "O"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:OfficialInstitutionType"]' custodian_types_rationale: equals_string: Civil registry series are held by ARCHIVE (A) or transferred to OFFICIAL_INSTITUTION (O) such as regional archives @@ -302,7 +302,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Municipal administration fonds are held by ARCHIVE (A) type custodians @@ -396,7 +396,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Urban planning collections are held by ARCHIVE (A) type custodians specificity_annotation: @@ -492,7 +492,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "S"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HeritageSocietyType"]' custodian_types_rationale: equals_string: Local history collections may be held by ARCHIVE (A) or COLLECTING_SOCIETY (S) such as heemkundekringen diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MuseumArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MuseumArchive.yaml index 60e469ebad..37c51952e6 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MuseumArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MuseumArchive.yaml @@ -42,9 +42,9 @@ classes: wikidata_entity: equals_string: Q53566456 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: MuseumArchive is an archival institution - maps to ARCHIVE + equals_string: MuseumArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MuseumArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MuseumArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MuseumArchiveRecordSetTypes.yaml index 995282d130..c47118c7c3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MuseumArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MuseumArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MuseumAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CollectionDocumentationSeries records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ExhibitionRecordCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MuseumType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MuseumType.yaml index 53526b37d9..69ad4553eb 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MuseumType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MuseumType.yaml @@ -161,7 +161,7 @@ classes: range: boolean required: false custodian_types: - equals_expression: '["M"]' + equals_expression: '["hc:MuseumType"]' custodian_types_rationale: equals_string: MuseumType represents museum organizations - maps exclusively to MUSEUM type (M) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MusicArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MusicArchive.yaml index a8af8c2e4a..f826953498 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MusicArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MusicArchive.yaml @@ -42,10 +42,10 @@ classes: wikidata_entity: equals_string: Q53759838 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MusicArchive is a specialized archive type for music recordings - and documents - maps to ARCHIVE type (A) + and documents - maps to ArchiveOrganizationType type (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MusicArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/MusicArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/MusicArchiveRecordSetTypes.yaml index 03410680ee..41fbb66dff 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/MusicArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/MusicArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MusicManuscriptCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PerformanceRecordingSeries records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ComposerPapersCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/Nachlass.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/Nachlass.yaml index 016db4478e..39251e8d32 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/Nachlass.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/Nachlass.yaml @@ -20,10 +20,10 @@ classes: wikidata_entity: equals_string: Q3827332 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Nachlass (personal papers) is an archival collection type - - maps to ARCHIVE (A) + maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/NationalArchives.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/NationalArchives.yaml index 70d49e9468..3b9093bb6c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/NationalArchives.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/NationalArchives.yaml @@ -43,9 +43,9 @@ classes: wikidata_entity: equals_string: Q2122214 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: NationalArchives is an archival institution - maps to ARCHIVE + equals_string: NationalArchives is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -97,7 +97,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NationalArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/NationalArchivesRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/NationalArchivesRecordSetTypes.yaml index 48e541267e..0584c06ae8 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/NationalArchivesRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/NationalArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: GovernmentAdministrativeFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LegislativeRecordSeries records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DiplomaticCorrespondenceCollection records are held by ARCHIVE (A) type custodians @@ -166,7 +166,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NationalStatisticsSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/NewspaperClippingsArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/NewspaperClippingsArchive.yaml index 3d7a0f2ec6..40c1c7dbf9 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/NewspaperClippingsArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/NewspaperClippingsArchive.yaml @@ -42,7 +42,7 @@ classes: wikidata_entity: equals_string: Q65651503 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NewspaperClippingsArchive is an archival institution - maps to ARCHIVE (A) @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NewspaperClippingsArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/NewspaperClippingsArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/NewspaperClippingsArchiveRecordSetTypes.yaml index 5c78ad5fcc..fb371784fe 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/NewspaperClippingsArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/NewspaperClippingsArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ClippingsCollection records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SubjectFileCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/NobilityArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/NobilityArchive.yaml index a6b329f9f2..74db9a6250 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/NobilityArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/NobilityArchive.yaml @@ -42,9 +42,9 @@ classes: wikidata_entity: equals_string: Q355358 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: NobilityArchive is an archival institution - maps to ARCHIVE + equals_string: NobilityArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NobilityArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/NobilityArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/NobilityArchiveRecordSetTypes.yaml index 415d00cdfa..fa9620750e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/NobilityArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/NobilityArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NobleFamily papersFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: EstateRecordsSeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: GenealogyCollection records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/NonProfitType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/NonProfitType.yaml index f5fa01970a..a5ddf40725 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/NonProfitType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/NonProfitType.yaml @@ -354,10 +354,10 @@ classes: - value: Professionals trained, Knowledge retention description: Training NGO impact custodian_types: - equals_expression: '["N"]' + equals_expression: '["hc:NonProfitType"]' custodian_types_rationale: equals_string: NonProfitType represents heritage-focused NGOs and non-profit - organizations - maps to NGO type (N) + organizations - maps to NonProfitType type (N) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/NotarialArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/NotarialArchive.yaml index 4e551c316f..654936cc0c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/NotarialArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/NotarialArchive.yaml @@ -42,9 +42,9 @@ classes: wikidata_entity: equals_string: Q8203685 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: NotarialArchive is an archival institution - maps to ARCHIVE + equals_string: NotarialArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -91,7 +91,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NotarialArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/NotarialArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/NotarialArchiveRecordSetTypes.yaml index 60a0acc8f3..f2ff83009c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/NotarialArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/NotarialArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NotarialActsSeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ProtocolSeries records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/OfficialInstitutionType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/OfficialInstitutionType.yaml index 87ddafe41b..44df26571f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/OfficialInstitutionType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/OfficialInstitutionType.yaml @@ -290,7 +290,7 @@ classes: range: string required: false custodian_types: - equals_expression: '["O"]' + equals_expression: '["hc:OfficialInstitutionType"]' custodian_types_rationale: equals_string: Official institutions are government heritage agencies with formal authority (GLAMORCUBESFIXPHDNT code O) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/OnlineNewsArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/OnlineNewsArchive.yaml index 72be218a2a..52f7282f84 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/OnlineNewsArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/OnlineNewsArchive.yaml @@ -45,9 +45,9 @@ classes: platform_type_id: identifier: false custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: OnlineNewsArchive is an archival institution - maps to ARCHIVE + equals_string: OnlineNewsArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -94,7 +94,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: OnlineNewsArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/OnlineNewsArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/OnlineNewsArchiveRecordSetTypes.yaml index 4419511518..e9a03476e7 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/OnlineNewsArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/OnlineNewsArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DigitalNewsCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: WebPublicationFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ParishArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ParishArchive.yaml index 70b54b7686..e530d8887c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ParishArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ParishArchive.yaml @@ -42,7 +42,7 @@ classes: wikidata_entity: equals_string: Q34544468 custodian_types: - equals_expression: '["A", "H"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: Parish Archive is both archival (A) and religious (H) specificity_annotation: @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ParishArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ParishArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ParishArchiveRecordSetTypes.yaml index 3bf264f42a..4bcb2dd11b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ParishArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ParishArchiveRecordSetTypes.yaml @@ -15,12 +15,13 @@ imports: - ./ParishArchive - ../slots/class_metadata_slots classes: - ParishRegisterSeries: + ParishSpecificRegisterSeries: is_a: ParishArchiveRecordSetType class_uri: rico:RecordSetType - description: "A rico:RecordSetType for Baptismal, marriage, burial registers.\n\ + description: "A rico:RecordSetType for parish-specific baptismal, marriage, burial registers.\n\ \n**RiC-O Alignment**:\nThis class is a specialized rico:RecordSetType following\ - \ the series \norganizational principle as defined by rico-rst:Series.\n" + \ the series \norganizational principle as defined by rico-rst:Series.\n\n**Note**:\ + \ This is parish-specific. For the general church parish registers, see ParishRegisterSeries.\n" exact_mappings: - rico:RecordSetType related_mappings: @@ -30,6 +31,7 @@ classes: see_also: - ParishArchiveRecordSetType - rico:RecordSetType + - ParishRegisterSeries slots: - custodian_types - custodian_types_rationale @@ -37,9 +39,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: ParishRegisterSeries records are held by ARCHIVE (A) type custodians + equals_string: ParishSpecificRegisterSeries records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation inlined: true @@ -47,7 +49,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: ParishRegisterSeries + equals_string: ParishSpecificRegisterSeries rico_organizational_principle: equals_string: series rico_organizational_principle_uri: @@ -79,7 +81,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ParishAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -122,7 +124,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SacramentalRecordCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ParliamentaryArchives.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ParliamentaryArchives.yaml index 1962e7f712..377173145d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ParliamentaryArchives.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ParliamentaryArchives.yaml @@ -41,7 +41,7 @@ classes: wikidata_entity: equals_string: Q53251146 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ParliamentaryArchives is an archival institution - maps to ARCHIVE (A) @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ParliamentaryArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ParliamentaryArchivesRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ParliamentaryArchivesRecordSetTypes.yaml index 01a1502ffa..5abc982dd3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ParliamentaryArchivesRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ParliamentaryArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ParliamentaryProceedingsFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CommitteeRecordSeries records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LegislativeDraftCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PartyArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PartyArchive.yaml index e4e0a03925..d192986e60 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PartyArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PartyArchive.yaml @@ -41,9 +41,9 @@ classes: wikidata_entity: equals_string: Q53252161 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: PartyArchive is an archival institution - maps to ARCHIVE (A) + equals_string: PartyArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -85,7 +85,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PartyArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PartyArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PartyArchiveRecordSetTypes.yaml index d66b178c57..c96ebd977e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PartyArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PartyArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PartyAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MembershipRecordSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PerformingArtsArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PerformingArtsArchive.yaml index 70fe4de352..ea5b3302b7 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PerformingArtsArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PerformingArtsArchive.yaml @@ -42,10 +42,10 @@ classes: wikidata_entity: equals_string: Q27030945 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PerformingArtsArchive is a specialized archive for performing - arts materials - maps to ARCHIVE type (A) + arts materials - maps to ArchiveOrganizationType type (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -88,7 +88,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PerformingArtsArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PerformingArtsArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PerformingArtsArchiveRecordSetTypes.yaml index b867fa5d94..9916c779e9 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PerformingArtsArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PerformingArtsArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: TheatreRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PerformanceDocumentationCollection records are held by ARCHIVE (A) type custodians @@ -100,7 +100,7 @@ classes: rico_has_or_had_holder_note: equals_string: This RecordSetType is typically held by PerformingArtsArchive custodians. Inverse of rico:isOrWasHolderOf. - ProductionRecordSeries: + PerformingArtsProductionRecordSeries: is_a: PerformingArtsArchiveRecordSetType class_uri: rico:RecordSetType description: "A rico:RecordSetType for Production records.\n\n**RiC-O Alignment**:\n\ @@ -122,9 +122,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: ProductionRecordSeries records are held by ARCHIVE (A) type + equals_string: PerformingArtsProductionRecordSeries records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation @@ -133,7 +133,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: ProductionRecordSeries + equals_string: PerformingArtsProductionRecordSeries rico_organizational_principle: equals_string: series rico_organizational_principle_uri: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PersonalCollectionType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PersonalCollectionType.yaml index faf6bd1ad5..1b5915260f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PersonalCollectionType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PersonalCollectionType.yaml @@ -298,7 +298,7 @@ classes: - value: House museum, Foundation established description: In situ preservation model custodian_types: - equals_expression: '["P"]' + equals_expression: '["hc:PersonalCollectionType"]' custodian_types_rationale: equals_string: PersonalCollectionType is specific to individual private collectors maintaining personal heritage collections diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PersonalLibrary.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PersonalLibrary.yaml index 6c7b2ab356..8debb4a45d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PersonalLibrary.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PersonalLibrary.yaml @@ -25,7 +25,7 @@ classes: wikidata_entity: equals_string: Q106402388 custodian_types: - equals_expression: '["L", "P"]' + equals_expression: '["hc:LibraryType", "hc:PersonalCollectionType"]' custodian_types_rationale: equals_string: Personal library combines library (L) and personal collection (P). diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PhotoArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PhotoArchive.yaml index 25a1c203c1..b280aa158d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PhotoArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PhotoArchive.yaml @@ -42,10 +42,10 @@ classes: wikidata_entity: equals_string: Q27032363 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PhotoArchive is a specialized archive type for photographic - materials - maps to ARCHIVE type (A) + materials - maps to ArchiveOrganizationType type (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PhotoArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PhotoArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PhotoArchiveRecordSetTypes.yaml index 4bc9b7479b..569a4482bc 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PhotoArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PhotoArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PhotographerPapersCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PhotographicPrintSeries records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DigitalImageCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PhotographCollection.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PhotographCollection.yaml index 669641fdf4..73f06fcea6 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PhotographCollection.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PhotographCollection.yaml @@ -25,7 +25,7 @@ classes: wikidata_entity: equals_string: Q130486108 custodian_types: - equals_expression: '["A", "M"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:MuseumType"]' custodian_types_rationale: equals_string: Photograph collections are typically in archives (A) or museums (M). diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PoliticalArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PoliticalArchive.yaml index d0203cff5b..fd59280c45 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PoliticalArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PoliticalArchive.yaml @@ -41,9 +41,9 @@ classes: wikidata_entity: equals_string: Q27030921 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: PoliticalArchive is an archival institution - maps to ARCHIVE + equals_string: PoliticalArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -87,7 +87,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PoliticalArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PoliticalArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PoliticalArchiveRecordSetTypes.yaml index 452fee9374..7ae89d1618 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PoliticalArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PoliticalArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PoliticalPartyFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CampaignRecordCollection records are held by ARCHIVE (A) type custodians @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PoliticianPapersCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PostcustodialArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PostcustodialArchive.yaml index 270125ae79..c5e150ae42 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PostcustodialArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PostcustodialArchive.yaml @@ -42,9 +42,9 @@ classes: wikidata_entity: equals_string: Q124223197 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: PostcustodialArchive is an archival institution - maps to ARCHIVE + equals_string: PostcustodialArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -86,7 +86,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PostcustodialArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PostcustodialArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PostcustodialArchiveRecordSetTypes.yaml index 78105704ce..c48e252062 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PostcustodialArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PostcustodialArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DistributedRecordsCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PressArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PressArchive.yaml index fc121aa52f..f1c219e478 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PressArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PressArchive.yaml @@ -41,9 +41,9 @@ classes: wikidata_entity: equals_string: Q56650887 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: PressArchive is an archival institution - maps to ARCHIVE (A) + equals_string: PressArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -88,7 +88,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PressArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PressArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PressArchiveRecordSetTypes.yaml index 5c4f1db0ac..79ca691709 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PressArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PressArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NewspaperPublicationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: JournalistPapersCollection records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: EditorialRecordSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PrintRoom.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PrintRoom.yaml index 12d5846901..b7b8193ba8 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PrintRoom.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PrintRoom.yaml @@ -20,9 +20,9 @@ classes: wikidata_entity: equals_string: Q445396 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: PrintRoom is an archival institution - maps to ARCHIVE (A) + equals_string: PrintRoom is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ProvenanceEvent.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ProvenanceEvent.yaml index 3e7763741b..c52232bdc6 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ProvenanceEvent.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ProvenanceEvent.yaml @@ -406,7 +406,7 @@ classes: - value: des Tombe purchased at auction for 30 guilders, a bargain price - value: The painting's attribution to Vermeer was not recognized until later custodian_types: - equals_expression: '["G", "M", "A", "L", "R", "H", "B", "P"]' + equals_expression: '["hc:GalleryType", "hc:MuseumType", "hc:ArchiveOrganizationType", "hc:LibraryType", "hc:ResearchOrganizationType", "hc:HolySacredSiteType", "hc:BioCustodianType", "hc:PersonalCollectionType"]' custodian_types_rationale: equals_string: | ProvenanceEvent is relevant to all custodian types managing objects with diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ProvincialArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ProvincialArchive.yaml index a2c881b4ed..0d64c6702e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ProvincialArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ProvincialArchive.yaml @@ -42,9 +42,9 @@ classes: wikidata_entity: equals_string: Q5403345 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: ProvincialArchive is an archival institution - maps to ARCHIVE + equals_string: ProvincialArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -88,7 +88,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ProvincialArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ProvincialArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ProvincialArchiveRecordSetTypes.yaml index fb373d1e95..fbb4352691 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ProvincialArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ProvincialArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ProvincialAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalPlanningCollection records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ProvincialCourtSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ProvincialHistoricalArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ProvincialHistoricalArchive.yaml index 377ffa77fe..bf0f0710b0 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ProvincialHistoricalArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ProvincialHistoricalArchive.yaml @@ -96,7 +96,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ProvincialHistoricalArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ProvincialHistoricalArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ProvincialHistoricalArchiveRecordSetTypes.yaml index b4c71805af..ef90ee5a0f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ProvincialHistoricalArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ProvincialHistoricalArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ProvincialHistoricalFonds records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PublicArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PublicArchive.yaml index 5e688d3ee8..7b5b86f300 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PublicArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PublicArchive.yaml @@ -41,9 +41,9 @@ classes: wikidata_entity: equals_string: Q27031009 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: PublicArchive is an archival institution - maps to ARCHIVE + equals_string: PublicArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PublicArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PublicArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PublicArchiveRecordSetTypes.yaml index 186dae8539..500e6abe3c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PublicArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PublicArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PublicRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CivicDocumentationCollection records are held by ARCHIVE (A) type custodians @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: AdministrativeCorrespondenceSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PublicArchivesInFrance.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PublicArchivesInFrance.yaml index 54d89631c8..ff2c5b8e44 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PublicArchivesInFrance.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PublicArchivesInFrance.yaml @@ -42,7 +42,7 @@ classes: wikidata_entity: equals_string: Q2421452 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PublicArchivesInFrance is an archival institution - maps to ARCHIVE (A) @@ -88,7 +88,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PublicArchivesInFranceRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/PublicArchivesInFranceRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/PublicArchivesInFranceRecordSetTypes.yaml index f55497a681..567e06603e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/PublicArchivesInFranceRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/PublicArchivesInFranceRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FrenchPublicFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/RadioArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/RadioArchive.yaml index de9598368b..7b0627a92f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/RadioArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/RadioArchive.yaml @@ -42,9 +42,9 @@ classes: wikidata_entity: equals_string: Q109326271 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: RadioArchive is an archival institution - maps to ARCHIVE (A) + equals_string: RadioArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RadioArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/RadioArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/RadioArchiveRecordSetTypes.yaml index 87a60ca5b1..2bce9e693f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/RadioArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/RadioArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: BroadcastRecordingFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RadioScriptCollection records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: StationAdministrationSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/RegionalArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/RegionalArchive.yaml index ee5b561f51..fa5a60c3d3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/RegionalArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/RegionalArchive.yaml @@ -54,9 +54,9 @@ classes: equals_expression: | ["hc:RegionalGovernanceFonds", "hc:CadastralAndLandRecordsFonds", "hc:NotarialProtocolSeries", "hc:RegionalHistoryCollection", "hc:WaterManagementFonds"] custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: RegionalArchive is an archival institution - maps to ARCHIVE + equals_string: RegionalArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -82,37 +82,3 @@ classes: - Serves geographic region - Scope between national and local - May cross administrative boundaries - RegionalArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by RegionalArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `RegionalArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - custodian_types - - custodian_types_rationale - - dual_class_link - - specificity_annotation - - template_specificity - - type_scope - see_also: - - RegionalArchive - - rico:RecordSetType - slot_usage: - custodian_types: - equals_expression: '["A"]' - custodian_types_rationale: - equals_string: RegionalArchiveRecordSetType classifies collections held by - ARCHIVE (A) type custodians - dual_class_link: - range: DualClassLink - inlined: true - specificity_annotation: - range: SpecificityAnnotation - inlined: true - template_specificity: - range: TemplateSpecificityScores - inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/RegionalArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/RegionalArchiveRecordSetTypes.yaml index 07c69aec6e..d72d7678c6 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/RegionalArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/RegionalArchiveRecordSetTypes.yaml @@ -48,7 +48,7 @@ classes: - specificity_annotation slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Regional archive record set types are held by ARCHIVE (A) type custodians @@ -127,7 +127,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Regional governance fonds are held by ARCHIVE (A) type custodians specificity_annotation: @@ -230,7 +230,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Cadastral records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -333,7 +333,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Notarial protocols are held by ARCHIVE (A) type custodians specificity_annotation: @@ -438,7 +438,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "L", "S"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:LibraryType", "hc:HeritageSocietyType"]' custodian_types_rationale: equals_string: Regional history collections may be held by ARCHIVE (A), LIBRARY (L), or historical SOCIETY (S) @@ -544,7 +544,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Water management fonds are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/RegionalArchivesInIceland.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/RegionalArchivesInIceland.yaml index 827715679d..eebe5a76b6 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/RegionalArchivesInIceland.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/RegionalArchivesInIceland.yaml @@ -41,7 +41,7 @@ classes: wikidata_entity: equals_string: Q16428785 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalArchivesInIceland is an archival institution - maps to ARCHIVE (A) @@ -86,7 +86,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalArchivesInIcelandRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/RegionalArchivesInIcelandRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/RegionalArchivesInIcelandRecordSetTypes.yaml index b5a7598cfb..935a7726fa 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/RegionalArchivesInIcelandRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/RegionalArchivesInIcelandRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: IcelandicRegionalFonds records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/RegionalEconomicArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/RegionalEconomicArchive.yaml index 41217a9449..e77a44cf53 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/RegionalEconomicArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/RegionalEconomicArchive.yaml @@ -41,7 +41,7 @@ classes: wikidata_entity: equals_string: Q2138319 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalEconomicArchive is an archival institution - maps to ARCHIVE (A) @@ -87,7 +87,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalEconomicArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/RegionalEconomicArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/RegionalEconomicArchiveRecordSetTypes.yaml index 36d14c2ec7..b37d75cbd7 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/RegionalEconomicArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/RegionalEconomicArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalBusinessFonds records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/RegionalStateArchives.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/RegionalStateArchives.yaml index cb7cc13645..2391297b96 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/RegionalStateArchives.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/RegionalStateArchives.yaml @@ -41,7 +41,7 @@ classes: wikidata_entity: equals_string: Q8727648 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalStateArchives is an archival institution - maps to ARCHIVE (A) @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalStateArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/RegionalStateArchivesRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/RegionalStateArchivesRecordSetTypes.yaml index 65e2ac55e1..26166c5aef 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/RegionalStateArchivesRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/RegionalStateArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalStateFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ReligiousArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ReligiousArchive.yaml index e8fec55d9b..06c1c9ff0a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ReligiousArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ReligiousArchive.yaml @@ -42,7 +42,7 @@ classes: wikidata_entity: equals_string: Q85545753 custodian_types: - equals_expression: '["A", "H"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: Religious Archive is both archival (A) and associated with holy sites/religious institutions (H) @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ReligiousArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ReligiousArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ReligiousArchiveRecordSetTypes.yaml index 40ea3840d8..8d46b54f9e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ReligiousArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ReligiousArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ReligiousInstitutionFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CongregationalRecordsSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ResearchCenter.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ResearchCenter.yaml index 7969415dab..8b315bd4e1 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ResearchCenter.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ResearchCenter.yaml @@ -313,7 +313,7 @@ classes: range: ReconstructionActivity required: false custodian_types: - equals_expression: '["R"]' + equals_expression: '["hc:ResearchOrganizationType"]' custodian_types_rationale: equals_string: ResearchCenter represents research institutes and academic facilities - maps exclusively to RESEARCH_CENTER type (R) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ResearchOrganizationType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ResearchOrganizationType.yaml index ddc86417e2..0322a3fa03 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ResearchOrganizationType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ResearchOrganizationType.yaml @@ -149,10 +149,10 @@ classes: range: ResearchOrganizationType required: false custodian_types: - equals_expression: '["R"]' + equals_expression: '["hc:ResearchOrganizationType"]' custodian_types_rationale: equals_string: ResearchOrganizationType represents research organizations - and institutes - maps to RESEARCH_CENTER type (R) + and institutes - maps to ResearchOrganizationType type (R) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SchoolArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SchoolArchive.yaml index 63acf99e2e..76aaaf9b63 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SchoolArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SchoolArchive.yaml @@ -41,9 +41,9 @@ classes: wikidata_entity: equals_string: Q27030883 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: SchoolArchive is an archival institution - maps to ARCHIVE + equals_string: SchoolArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SchoolArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SchoolArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SchoolArchiveRecordSetTypes.yaml index 0dc983bf81..fad915cf30 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SchoolArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SchoolArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SchoolAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -58,7 +58,7 @@ classes: rico_has_or_had_holder_note: equals_string: This RecordSetType is typically held by SchoolArchive custodians. Inverse of rico:isOrWasHolderOf. - StudentRecordSeries: + SchoolStudentRecordSeries: is_a: SchoolArchiveRecordSetType class_uri: rico:RecordSetType description: "A rico:RecordSetType for Pupil records.\n\n**RiC-O Alignment**:\n\ @@ -80,9 +80,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: StudentRecordSeries records are held by ARCHIVE (A) type custodians + equals_string: SchoolStudentRecordSeries records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +90,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: StudentRecordSeries + equals_string: SchoolStudentRecordSeries rico_organizational_principle: equals_string: series rico_organizational_principle_uri: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CurriculumDocumentCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ScientificArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ScientificArchive.yaml index 97824114bb..ac07490f9f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ScientificArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ScientificArchive.yaml @@ -42,9 +42,9 @@ classes: wikidata_entity: equals_string: Q27032095 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: ScientificArchive is an archival institution - maps to ARCHIVE + equals_string: ScientificArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -87,7 +87,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ScientificArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/ScientificArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/ScientificArchiveRecordSetTypes.yaml index 47fce62c8c..b7611b0200 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/ScientificArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/ScientificArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ResearchProjectFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ScientistPapersCollection records are held by ARCHIVE (A) type custodians @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LaboratoryRecordSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SectorOfArchivesInSweden.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SectorOfArchivesInSweden.yaml index f717ef3db0..6779e84428 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SectorOfArchivesInSweden.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SectorOfArchivesInSweden.yaml @@ -47,7 +47,7 @@ classes: wikidata_entity: equals_string: Q84171278 custodian_types: - equals_expression: '["A", "O"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:OfficialInstitutionType"]' custodian_types_rationale: equals_string: Swedish archives sector is an official archive institution (A, O). @@ -87,7 +87,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SectorOfArchivesInSwedenRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SectorOfArchivesInSwedenRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SectorOfArchivesInSwedenRecordSetTypes.yaml index a91abf5b2a..c2f0fb46d0 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SectorOfArchivesInSwedenRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SectorOfArchivesInSwedenRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SwedishSectorFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SecurityArchives.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SecurityArchives.yaml index e1f888af50..16daf8ddde 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SecurityArchives.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SecurityArchives.yaml @@ -41,9 +41,9 @@ classes: wikidata_entity: equals_string: Q101475797 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: SecurityArchives is an archival institution - maps to ARCHIVE + equals_string: SecurityArchives is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -87,7 +87,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SecurityArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SecurityArchivesRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SecurityArchivesRecordSetTypes.yaml index 285f5da358..054e4c7451 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SecurityArchivesRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SecurityArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SecurityServiceFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SurveillanceRecordSeries records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SoundArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SoundArchive.yaml index 8b8f973bba..8aab1e7d41 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SoundArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SoundArchive.yaml @@ -47,10 +47,10 @@ classes: wikidata_equivalent: equals_string: Q2230431 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SoundArchive is a specialized archive type for audio materials - - maps to ARCHIVE type (A) + - maps to ArchiveOrganizationType type (A) wikidata_alignment: range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SoundArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SoundArchiveRecordSetTypes.yaml index dd3834868b..832dcb204a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SoundArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SoundArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: AudioRecordingCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: OralHistorySeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MusicRecordingCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SpecialCollection.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SpecialCollection.yaml index d145b854ec..9640b508f8 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SpecialCollection.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SpecialCollection.yaml @@ -28,7 +28,7 @@ classes: wikidata_equivalent: equals_string: Q4431094 custodian_types: - equals_expression: '["L", "A"]' + equals_expression: '["hc:LibraryType", "hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Special collections are typically in libraries (L) or archives (A). diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchive.yaml index 17b4519530..3c666d0608 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchive.yaml @@ -41,9 +41,9 @@ classes: wikidata_equivalent: equals_string: Q27030941 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: SpecializedArchive is an archival institution - maps to ARCHIVE + equals_string: SpecializedArchive is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchiveRecordSetTypes.yaml index cd550b3361..7abb4692d3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SpecializedCollectionFonds records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechia.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechia.yaml index 525690ccc0..52efde8129 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechia.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechia.yaml @@ -40,7 +40,7 @@ classes: wikidata_equivalent: equals_string: Q101470010 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SpecializedArchivesCzechia is an archival institution - maps to ARCHIVE (A) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechiaRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechiaRecordSetTypes.yaml index 546a24a036..5fccfbe9fc 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechiaRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechiaRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CzechSpecializedFonds records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/StateArchives.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/StateArchives.yaml index 80db06327b..9cab99961a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/StateArchives.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/StateArchives.yaml @@ -41,9 +41,9 @@ classes: wikidata_equivalent: equals_string: Q52341833 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: StateArchives is an archival institution - maps to ARCHIVE + equals_string: StateArchives is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesRecordSetTypes.yaml index c02c6964ec..762ad55e25 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: StateGovernmentFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: JudicialRecordSeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -121,7 +121,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LandRecordsSeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -163,7 +163,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: TaxRecordsSeries records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesSection.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesSection.yaml index a518fbb79d..c25784871e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesSection.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesSection.yaml @@ -41,9 +41,9 @@ classes: wikidata_equivalent: equals_string: Q44796387 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: StateArchivesSection is an archival institution - maps to ARCHIVE + equals_string: StateArchivesSection is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesSectionRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesSectionRecordSetTypes.yaml index 7c04ed17f6..932ad642b8 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesSectionRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/StateArchivesSectionRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: StateSectionFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/StateDistrictArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/StateDistrictArchive.yaml index 3f882ba891..7403af3a48 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/StateDistrictArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/StateDistrictArchive.yaml @@ -40,9 +40,9 @@ classes: wikidata_equivalent: equals_string: Q53131316 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: StateDistrictArchive is an archival institution - maps to ARCHIVE + equals_string: StateDistrictArchive is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/StateDistrictArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/StateDistrictArchiveRecordSetTypes.yaml index 6b3ef22ef5..863ecb5462 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/StateDistrictArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/StateDistrictArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: StateDistrictFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechia.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechia.yaml index ae1a7b0986..5dcf9063e3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechia.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechia.yaml @@ -40,7 +40,7 @@ classes: wikidata_equivalent: equals_string: Q53130134 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: StateRegionalArchiveCzechia is an archival institution - maps to ARCHIVE (A) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechiaRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechiaRecordSetTypes.yaml index ebb78a8f34..c91561be58 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechiaRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechiaRecordSetTypes.yaml @@ -15,7 +15,7 @@ imports: - ./StateRegionalArchiveCzechia - ../slots/class_metadata_slots classes: - RegionalStateFonds: + CzechiaRegionalStateFonds: is_a: StateRegionalArchiveCzechiaRecordSetType class_uri: rico:RecordSetType description: "A rico:RecordSetType for Czech regional state records.\n\n**RiC-O\ @@ -37,9 +37,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: RegionalStateFonds records are held by ARCHIVE (A) type custodians + equals_string: CzechiaRegionalStateFonds records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation inlined: true @@ -47,7 +47,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: RegionalStateFonds + equals_string: CzechiaRegionalStateFonds rico_organizational_principle: equals_string: fonds rico_organizational_principle_uri: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/TasteScentHeritageType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/TasteScentHeritageType.yaml index 0b187b6e0f..18f40d65ef 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/TasteScentHeritageType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/TasteScentHeritageType.yaml @@ -377,7 +377,7 @@ classes: - value: Protected PDO, Dutch cheese identity, Regional economy description: Traditional cheese significance custodian_types: - equals_expression: '["T"]' + equals_expression: '["hc:TasteScentHeritageType"]' custodian_types_rationale: equals_string: TasteScentHeritageType is specific to culinary and olfactory heritage institutions (historic breweries, perfume houses, artisanal food diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/TelevisionArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/TelevisionArchive.yaml index 75dda9c655..8d5fe180fb 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/TelevisionArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/TelevisionArchive.yaml @@ -41,9 +41,9 @@ classes: wikidata_equivalent: equals_string: Q109326243 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: TelevisionArchive is an archival institution - maps to ARCHIVE + equals_string: TelevisionArchive is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/TelevisionArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/TelevisionArchiveRecordSetTypes.yaml index 0f64220a43..d17eb8caa7 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/TelevisionArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/TelevisionArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: TelevisionBroadcastFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ProductionRecordSeries records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NewsFootageCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/TentativeWorldHeritageSite.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/TentativeWorldHeritageSite.yaml index 36416e3ade..a275c3d206 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/TentativeWorldHeritageSite.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/TentativeWorldHeritageSite.yaml @@ -26,7 +26,7 @@ classes: wikidata_entity: equals_string: Q1459900 custodian_types: - equals_expression: '["F"]' + equals_expression: '["hc:FeatureCustodianType"]' custodian_types_rationale: equals_string: Tentative World Heritage Site is a feature/monument type (F). wikidata_alignment: diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/TradeUnionArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/TradeUnionArchive.yaml index 584dd9a9f1..3dda73cc23 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/TradeUnionArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/TradeUnionArchive.yaml @@ -56,10 +56,10 @@ classes: equals_expression: | ["hc:UnionAdministrationFonds", "hc:CollectiveBargainingSeries", "hc:StrikeDocumentationCollection", "hc:LaborPublicationsCollection", "hc:WorkersPhotographyCollection"] custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Trade Union Archive is an archival institution for labor organizations - - maps to ARCHIVE (A) + - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment inlined: true @@ -101,37 +101,3 @@ classes: - Preserves records of labor organizations and workers' movements - Major Dutch collection at IISG (International Institute of Social History) - Documents collective bargaining, strikes, and workers' rights - TradeUnionArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by TradeUnionArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `TradeUnionArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - custodian_types - - custodian_types_rationale - - dual_class_link - - specificity_annotation - - template_specificity - - type_scope - see_also: - - TradeUnionArchive - - rico:RecordSetType - slot_usage: - custodian_types: - equals_expression: '["A"]' - custodian_types_rationale: - equals_string: TradeUnionArchiveRecordSetType classifies collections held - by ARCHIVE (A) type custodians - dual_class_link: - range: DualClassLink - inlined: true - specificity_annotation: - range: SpecificityAnnotation - inlined: true - template_specificity: - range: TemplateSpecificityScores - inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/TradeUnionArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/TradeUnionArchiveRecordSetTypes.yaml index e4df7b449d..157924f8c5 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/TradeUnionArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/TradeUnionArchiveRecordSetTypes.yaml @@ -49,7 +49,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Trade union archive record set types are held by ARCHIVE (A) type custodians @@ -156,7 +156,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Union administration fonds are held by ARCHIVE (A) type custodians specificity_annotation: @@ -272,7 +272,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Collective bargaining series are held by ARCHIVE (A) type custodians specificity_annotation: @@ -386,13 +386,13 @@ classes: - wd:Q9388534 close_mappings: - skos:Concept - - SocialMovementCollection see_also: - TradeUnionArchiveRecordSetType - rico:RecordSetType - rico-rst:Collection - TradeUnionArchive - PoliticalArchive + - SocialMovementCollection annotations: historical_note: Strike documentation captures moments of heightened worker mobilization. Collections often combine union records with donated materials @@ -404,7 +404,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "R"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:ResearchOrganizationType"]' custodian_types_rationale: equals_string: Strike documentation may be held by ARCHIVE (A) or RESEARCH_CENTER (R) like IISG @@ -514,7 +514,6 @@ classes: - wd:Q732577 close_mappings: - skos:Concept - - PressArchive see_also: - TradeUnionArchiveRecordSetType - rico:RecordSetType @@ -530,7 +529,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "L"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:LibraryType"]' custodian_types_rationale: equals_string: Labor publications may be held by ARCHIVE (A) or LIBRARY (L) specificity_annotation: @@ -648,12 +647,12 @@ classes: - wd:Q1260006 close_mappings: - skos:Concept - - PhotographicCollection see_also: - TradeUnionArchiveRecordSetType - rico:RecordSetType - rico-rst:Collection - PhotographicArchive + - PhotographicCollection annotations: industrial_heritage_note: Workers' photography is essential for industrial heritage documentation. Images capture workplaces, tools, and processes that may no @@ -665,7 +664,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "M"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:MuseumType"]' custodian_types_rationale: equals_string: Workers photography collections may be held by ARCHIVE (A) or labor MUSEUM (M) diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml index cc4c8cb30a..b4721f4d72 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml @@ -41,10 +41,10 @@ classes: wikidata_equivalent: equals_string: Q2496264 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: University Archive is an archival institution in higher education - - maps to ARCHIVE (A) + - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/UniversityArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/UniversityArchiveRecordSetTypes.yaml index 06c1024aa3..6b2e2744d8 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/UniversityArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/UniversityArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: UniversityAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: StudentRecordSeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FacultyPapersCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/UnspecifiedType.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/UnspecifiedType.yaml index 469eb383d2..9192d64f66 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/UnspecifiedType.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/UnspecifiedType.yaml @@ -384,7 +384,7 @@ classes: - value: 'completeness: 30%, last_updated: 2025-11-23' description: Completeness flags custodian_types: - equals_expression: '["U"]' + equals_expression: '["hc:UnspecifiedType"]' custodian_types_rationale: equals_string: UnspecifiedType is for institutions where type cannot be determined. Maps to UNKNOWN (U) in GLAMORCUBESFIXPHDNT taxonomy. This is a data quality diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/Vereinsarchiv.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/Vereinsarchiv.yaml index 5434594301..31c93a613a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/Vereinsarchiv.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/Vereinsarchiv.yaml @@ -25,9 +25,9 @@ classes: wikidata_equivalent: equals_string: Q130758889 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: Vereinsarchiv is a German association archive - maps to ARCHIVE + equals_string: Vereinsarchiv is a German association archive - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/Verlagsarchiv.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/Verlagsarchiv.yaml index 42c48bad5c..89deba70cd 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/Verlagsarchiv.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/Verlagsarchiv.yaml @@ -25,9 +25,9 @@ classes: wikidata_equivalent: equals_string: Q130759004 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: Verlagsarchiv is an archival institution - maps to ARCHIVE + equals_string: Verlagsarchiv is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/VirtualMapLibrary.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/VirtualMapLibrary.yaml index 5f43e2b1c6..b7984802ca 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/VirtualMapLibrary.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/VirtualMapLibrary.yaml @@ -30,7 +30,7 @@ classes: platform_type_id: identifier: false custodian_types: - equals_expression: '["L", "D"]' + equals_expression: '["hc:LibraryType", "hc:DigitalPlatformType"]' custodian_types_rationale: equals_string: Virtual map library combines library (L) and digital platform (D). diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/WebArchive.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/WebArchive.yaml index 4da1182bfe..bb096f41fe 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/WebArchive.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/WebArchive.yaml @@ -44,9 +44,9 @@ classes: platform_type_id: identifier: false custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: WebArchive is an archival institution - maps to ARCHIVE (A) + equals_string: WebArchive is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment inlined: true diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/WebArchiveRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/WebArchiveRecordSetTypes.yaml index 0cc78ae904..227989f968 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/WebArchiveRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/WebArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: WebCaptureCollection records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SocialMediaCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/WomensArchives.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/WomensArchives.yaml index eaad3d336e..cc4c408b08 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/WomensArchives.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/WomensArchives.yaml @@ -40,9 +40,9 @@ classes: wikidata_equivalent: equals_string: Q130217628 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: WomensArchives is an archival institution - maps to ARCHIVE + equals_string: WomensArchives is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/WomensArchivesRecordSetTypes.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/WomensArchivesRecordSetTypes.yaml index 0790926df9..6eb92453a1 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/WomensArchivesRecordSetTypes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/WomensArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: WomensOrganizationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FeministPapersCollection records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: WomensHistoryCollection records are held by ARCHIVE (A) type custodians diff --git a/frontend/public/schemas/20251121/linkml/modules/classes/WorldHeritageSite.yaml b/frontend/public/schemas/20251121/linkml/modules/classes/WorldHeritageSite.yaml index 6b758be8cd..da14b73d26 100644 --- a/frontend/public/schemas/20251121/linkml/modules/classes/WorldHeritageSite.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/classes/WorldHeritageSite.yaml @@ -26,7 +26,7 @@ classes: wikidata_entity: equals_string: Q9259 custodian_types: - equals_expression: '["F"]' + equals_expression: '["hc:FeatureCustodianType"]' custodian_types_rationale: equals_string: World Heritage Site is a feature/monument type (F). wikidata_alignment: diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/access_policy.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/access_policy.yaml index 7b0e9aab3f..4962b4bdd4 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/access_policy.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/access_policy.yaml @@ -1,32 +1,29 @@ -# Global slot definition for access_policy -# Used by ArchiveOrganizationType and HolySacredSiteType - id: https://nde.nl/ontology/hc/slot/access_policy name: access_policy - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ schema: http://schema.org/ - slots: access_policy: slot_uri: dcterms:accessRights - description: | - General policy governing access to holdings or collections. - Applies to archives (open, restricted, dark, dim, light) and - religious heritage sites (researcher access, public access, restrictions). + description: "General policy governing access to holdings or collections.\nApplies to archives (open, restricted, dark,\ + \ dim, light) and \nreligious heritage sites (researcher access, public access, restrictions).\n" range: string required: false examples: - - value: "open" - description: "Publicly accessible with minimal restrictions" - - value: "restricted" - description: "Access requires permissions or has legal restrictions" - - value: "dark" - description: "No current access (preservation only)" - - value: "Restricted access by appointment, Scholars only" - description: "Religious heritage access policy" - - value: "Public viewing during open hours, Photography prohibited" - description: "Religious heritage with public access" + - value: open + description: Publicly accessible with minimal restrictions + - value: restricted + description: Access requires permissions or has legal restrictions + - value: dark + description: No current access (preservation only) + - value: Restricted access by appointment, Scholars only + description: Religious heritage access policy + - value: Public viewing during open hours, Photography prohibited + description: Religious heritage with public access + close_mappings: + - dcterms:accessRights + broad_mappings: + - dcterms:rights diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/access_policy_ref.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/access_policy_ref.yaml new file mode 100644 index 0000000000..d90af27038 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/access_policy_ref.yaml @@ -0,0 +1,28 @@ +id: https://nde.nl/ontology/hc/slot/access_policy_ref +name: access_policy_ref +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + dcterms: http://purl.org/dc/terms/ +slots: + access_policy_ref: + slot_uri: dcterms:accessRights + description: 'Access policy governing collection. + + + Links to a structured AccessPolicy instance that defines + + access rights, restrictions, and conditions for this collection. + + ' + range: AccessPolicy + required: false + examples: + - value: https://nde.nl/ontology/hc/access-policy/open-access + description: Open access policy + - value: https://nde.nl/ontology/hc/access-policy/restricted-research + description: Restricted to researchers + close_mappings: + - dcterms:accessRights + broad_mappings: + - dcterms:references diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/access_restrictions.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/access_restrictions.yaml index d78fd291d6..a738aee4a9 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/access_restrictions.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/access_restrictions.yaml @@ -1,21 +1,20 @@ -# Global Slot: access_restrictions -# Describes access restrictions or policies - id: https://nde.nl/ontology/hc/slot/access_restrictions name: access_restrictions_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - slots: access_restrictions: slot_uri: schema:conditionsOfAccess - description: | - Access restrictions or policies governing access to this resource. + description: 'Access restrictions or policies governing access to this resource. + May describe physical access limitations, digital access controls, + or regulatory restrictions. + + ' range: string + close_mappings: + - dcterms:accessRights diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/accession_number.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/accession_number.yaml index bea0c8d2e1..d191c22e54 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/accession_number.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/accession_number.yaml @@ -1,23 +1,19 @@ -# Slot: accession_number -# Unique accession identifier for museum/archive records - id: https://nde.nl/ontology/hc/slot/accession_number name: accession_number_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: accession_number: slot_uri: dcterms:identifier range: string - description: >- - Unique accession identifier assigned when an object or record enters - the collection. Used by museums, archives, and libraries to track items. + description: Unique accession identifier assigned when an object or record enters the collection. Used by museums, archives, + and libraries to track items. + close_mappings: + - schema:identifier + related_mappings: + - dcterms:identifier diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/acquisition_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/acquisition_date.yaml index c6cd66dbff..9621d4a157 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/acquisition_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/acquisition_date.yaml @@ -1,22 +1,20 @@ -# Slot: acquisition_date -# Date when a collection or object was acquired - id: https://nde.nl/ontology/hc/slot/acquisition_date name: acquisition_date_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: acquisition_date: slot_uri: schema:dateAcquired range: date - description: >- - Date when the collection or object was acquired by the institution. + description: Date when the collection or object was acquired by the institution. + close_mappings: + - schema:dateCreated + related_mappings: + - dcterms:date + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/acquisition_method.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/acquisition_method.yaml index e42d2b3b66..9d12773c42 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/acquisition_method.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/acquisition_method.yaml @@ -1,23 +1,20 @@ -# Slot: acquisition_method -# Method by which a collection or object was acquired - id: https://nde.nl/ontology/hc/slot/acquisition_method name: acquisition_method_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ crm: http://www.cidoc-crm.org/cidoc-crm/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: acquisition_method: slot_uri: crm:P24i_changed_ownership_through range: string - description: >- - Method by which the collection or object was acquired (e.g., purchase, - donation, bequest, transfer, exchange). + description: Method by which the collection or object was acquired (e.g., purchase, donation, bequest, transfer, exchange). + close_mappings: + - prov:wasGeneratedBy + related_mappings: + - schema:acquiredFrom + broad_mappings: + - prov:wasGeneratedBy diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/acquisition_source.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/acquisition_source.yaml new file mode 100644 index 0000000000..c5f105aebe --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/acquisition_source.yaml @@ -0,0 +1,28 @@ +id: https://nde.nl/ontology/hc/slot/acquisition_source +name: acquisition_source +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + acquisition_source: + slot_uri: rico:hasProvenance + description: 'From whom or where the collection was acquired. + + + Names the donor, seller, or transferring organization. + + ' + range: string + required: false + examples: + - value: Estate of John Smith + description: Donor name + - value: Ministry of Colonial Affairs + description: Transferring organization + exact_mappings: + - schema:acquiredFrom + close_mappings: + - prov:wasAttributedTo + broad_mappings: + - dcterms:source diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/activity_type.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/activity_type.yaml index 9904bbd3d0..5f958a357e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/activity_type.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/activity_type.yaml @@ -1,16 +1,15 @@ -# ReconstructionActivity Slot: activity_type -# Type of reconstruction activity - id: https://nde.nl/ontology/hc/slot/activity_type name: activity_type_slot - imports: - - ../enums/ReconstructionActivityTypeEnum - +- ../enums/ReconstructionActivityTypeEnum slots: activity_type: slot_uri: prov:type range: ReconstructionActivityTypeEnum - description: "Type of reconstruction activity" + description: Type of reconstruction activity exact_mappings: - - rdf:type + - rdf:type + close_mappings: + - dcterms:type + broad_mappings: + - dcterms:type diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/affected_by_event.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/affected_by_event.yaml index 5ba3166917..71db567b69 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/affected_by_event.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/affected_by_event.yaml @@ -1,12 +1,12 @@ id: https://nde.nl/ontology/hc/slot/affected_by_event name: affected_by_event title: Affected By Event - imports: - - linkml:types - +- linkml:types slots: affected_by_event: slot_uri: prov:wasInfluencedBy description: Organizational change event that affected this person's role range: OrganizationalChangeEvent + close_mappings: + - prov:wasInfluencedBy diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/affected_units.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/affected_units.yaml index 74a76e764e..596f4af3d9 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/affected_units.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/affected_units.yaml @@ -1,11 +1,10 @@ -# affected_units slot for OrganizationalChangeEvent - id: https://nde.nl/ontology/hc/slot/affected_units name: affected_units - slots: affected_units: - description: "Organizational units affected by this change event" + description: Organizational units affected by this change event range: OrganizationalStructure multivalued: true slot_uri: crm:P11_had_participant + close_mappings: + - prov:influenced diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/affects_organization.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/affects_organization.yaml index c976c44d94..3a0e221e08 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/affects_organization.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/affects_organization.yaml @@ -1,68 +1,36 @@ -# Slot: affects_organization -# Inverse of organizational_change_events -# Links OrganizationalChangeEvent to custodians it affects - id: https://nde.nl/ontology/hc/slot/affects_organization name: affects_organization title: Affects Organization - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: affects_organization: slot_uri: prov:influenced - description: | - Custodians affected by this organizational change event. - - **PROV-O Alignment**: - - Property: `prov:influenced` - - Domain: prov:Activity/Entity (OrganizationalChangeEvent) - - Range: prov:Entity (Custodian) - - Definition: "An entity or activity influenced by another entity." - - **INVERSE PROPERTY**: - - **Inverse**: `organizational_change_events` (prov:wasInfluencedBy) - - Pattern: If Custodian organizational_change_events Event, then Event affects_organization Custodian - - **Event Types** (from OrganizationalChangeEventTypeEnum): - - MERGER: Multiple custodians merge into one - - SPLIT: One custodian splits into multiple - - RELOCATION: Custodian moves to new location - - NAME_CHANGE: Custodian changes name - - DISSOLUTION: Custodian ceases to exist - - **Example**: - ```yaml - OrganizationalChangeEvent: - event_type: MERGER - event_date: "2001-01-01" - event_description: "Formation of Noord-Hollands Archief" - affects_organization: - - "https://nde.nl/ontology/hc/nl-gemeentearchief-haarlem" - - "https://nde.nl/ontology/hc/nl-rijksarchief-noord-holland" - ``` - - **Navigation**: - - From event: Find affected custodians (affects_organization) - - From custodian: Find change events (organizational_change_events) + description: "Custodians affected by this organizational change event.\n\n**PROV-O Alignment**:\n\nProperty: `prov:influenced`\n\ + - Domain: prov:Activity/Entity (OrganizationalChangeEvent)\n- Range: prov:Entity (Custodian)\n- Definition: \"An entity\ + \ or activity influenced by another entity.\"\n\n**INVERSE PROPERTY**:\n- **Inverse**: `organizational_change_events`\ + \ (prov:wasInfluencedBy)\n- Pattern: If Custodian organizational_change_events Event, then Event affects_organization\ + \ Custodian\n\n**Event Types** (from OrganizationalChangeEventTypeEnum):\n- MERGER: Multiple custodians merge into one\n\ + - SPLIT: One custodian splits into multiple\n- RELOCATION: Custodian moves to new location\n- NAME_CHANGE: Custodian\ + \ changes name\n- DISSOLUTION: Custodian ceases to exist\n\n**Example**:\n```yaml\nOrganizationalChangeEvent:\n event_type:\ + \ MERGER\n event_date: \"2001-01-01\"\n event_description: \"Formation of Noord-Hollands Archief\"\n affects_organization:\n\ + \ - \"https://nde.nl/ontology/hc/nl-gemeentearchief-haarlem\"\n - \"https://nde.nl/ontology/hc/nl-rijksarchief-noord-holland\"\ + \n```\n\n**Navigation**:\n- From event: Find affected custodians (affects_organization)\n- From custodian: Find change\ + \ events (organizational_change_events)\n" range: Custodian multivalued: true - exact_mappings: - - prov:influenced - + - prov:influenced related_mappings: - - rico:affectsOrAffected - + - rico:affectsOrAffected comments: - - "Inverse of organizational_change_events (prov:wasInfluencedBy)" - - "Links event to all custodians impacted by it" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of organizational_change_events (prov:wasInfluencedBy) + - Links event to all custodians impacted by it + - Creates owl:inverseOf axiom in RDF output + broad_mappings: + - schema:organization diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/affiliation.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/affiliation.yaml index c39edb775b..043f2236ca 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/affiliation.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/affiliation.yaml @@ -1,10 +1,9 @@ -# ReconstructionAgent Slot: affiliation -# Organizational affiliation of reconstruction agent - id: https://nde.nl/ontology/hc/slot/affiliation name: affiliation_slot - slots: affiliation: slot_uri: schema:affiliation range: string + exact_mappings: + - schema:affiliation + - org:memberOf diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/age.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/age.yaml index 179da8d07c..0a23f29a05 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/age.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/age.yaml @@ -1,121 +1,179 @@ -# Age Slot -# String representing the age of a person as mentioned in source -# -# PiCo Pattern: Used when birth date is unknown but age is recorded. -# Combined with source date, a birth date range can be derived. - id: https://nde.nl/ontology/hc/slot/age name: age_slot title: Age Slot - prefixes: pico: https://personsincontext.org/model# sdo: https://schema.org/ foaf: http://xmlns.com/foaf/0.1/ - imports: - - linkml:types - +- linkml:types slots: age: slot_uri: pico:hasAge - description: | - The age of a person as mentioned in the source. - + description: 'The age of a person as mentioned in the source. + + =========================================================================== + PiCo ONTOLOGY ALIGNMENT (pico.ttl lines 531-546) + =========================================================================== - + + Per PiCo (Persons in Context) ontology: + - Only used for PersonObservations when birth date is unknown + - Age is recorded as mentioned on the source + - Combined with source document date, a birth date range can be derived - + + =========================================================================== + FORMAT RULES + =========================================================================== - + + **Default unit**: Years (unless otherwise specified) + - "4" → interpreted as 4 years old + - "4 months" → interpreted as 4 months old + - "4 weeks" → interpreted as 4 weeks old - + + **Preferred format**: Numerical ages + - "4" (preferred) + - "four" (acceptable but less precise for computation) - + + **Approximate ages**: + - "ca. 30" or "about 30" (approximate) + - "30-35" (range) + - "adult" or "child" (categorical) - + + =========================================================================== + BIRTH DATE DERIVATION + =========================================================================== - + + When age is known and source date is known, birth date range can be derived: - + + **Example**: + - Source document date: 1850-06-15 + - Age mentioned: "35" + - Derived birth date range: 1814-06-16 to 1815-06-15 - + + This derivation happens during PersonReconstruction, not in the + PersonObservation (which just records what the source says). - + + =========================================================================== + EXAMPLES + =========================================================================== - + + Simple numeric age: + ```yaml + age: "35" + ``` - + + Age with unit: + ```yaml + age: "6 months" + ``` - + + Approximate age: + ```yaml + age: "ca. 40" + ``` - + + Age range: + ```yaml + age: "25-30" + ``` - + + Categorical age: + ```yaml + age: "infant" + ``` - + + =========================================================================== + RELATIONSHIP TO birth_date SLOT + =========================================================================== - + + - If birth_date is known, use birth_date (more precise) + - If only age is known from source, use age slot + - Do NOT use both for the same observation (redundant) + - Age + source date → derived birth_date in PersonReconstruction - + + =========================================================================== + ONTOLOGY MAPPINGS + =========================================================================== - + + - PiCo: pico:hasAge (primary) + - FOAF: foaf:age (simple age property) - + + ' range: string required: false exact_mappings: - - pico:hasAge + - pico:hasAge close_mappings: - - foaf:age + - foaf:age + - schema:age comments: - - "Only use when birth_date is unknown" - - "Default unit is years unless specified" - - "Numerical ages preferred over text" - - "Combined with source date to derive birth date range" + - Only use when birth_date is unknown + - Default unit is years unless specified + - Numerical ages preferred over text + - Combined with source date to derive birth date range diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/agent_name.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/agent_name.yaml index 4f4c8584c6..eeef1e0a8b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/agent_name.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/agent_name.yaml @@ -1,11 +1,13 @@ -# ReconstructionAgent Slot: agent_name -# Name of the reconstruction agent - id: https://nde.nl/ontology/hc/slot/agent_name name: agent_name_slot - slots: agent_name: slot_uri: foaf:name range: string required: true + exact_mappings: + - foaf:name + close_mappings: + - prov:label + broad_mappings: + - rdfs:label diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/agent_type.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/agent_type.yaml index 8fa5900cc3..fa3849789e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/agent_type.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/agent_type.yaml @@ -1,16 +1,13 @@ -# ReconstructionAgent Slot: agent_type -# Type of reconstruction agent - id: https://nde.nl/ontology/hc/slot/agent_type name: agent_type_slot - imports: - - ../enums/AgentTypeEnum - +- ../enums/AgentTypeEnum slots: agent_type: slot_uri: prov:type range: AgentTypeEnum - description: "Type of agent performing the reconstruction" + description: Type of agent performing the reconstruction exact_mappings: - - rdf:type + - rdf:type + broad_mappings: + - dcterms:type diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/allocated_by.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/allocated_by.yaml index 59600f8523..5b0a4f1a91 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/allocated_by.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/allocated_by.yaml @@ -1,55 +1,71 @@ -# Slot: allocated_by -# Links an identifier to the agency that allocated it - id: https://nde.nl/ontology/hc/slot/allocated_by name: allocated_by_slot title: Allocated By Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ prov: http://www.w3.org/ns/prov# - default_prefix: hc - imports: - - linkml:types - - ../metadata - - ../classes/AllocationAgency - +- linkml:types +- ../metadata +- ../classes/AllocationAgency slots: allocated_by: slot_uri: prov:wasAttributedTo - description: | - The allocation agency that assigned this identifier. - + description: 'The allocation agency that assigned this identifier. + + Tracks which agency allocated a specific identifier, which may differ - from the standard's global registration authority. - + + from the standard''s global registration authority. + + **Provenance:** - + + Uses prov:wasAttributedTo to indicate the agent responsible for + creating/assigning this identifier. - + + **ISIL Example:** - + + For Dutch institutions, different agencies allocate ISIL codes: + - Public library "NL-AmOBA" → allocated_by: Koninklijke Bibliotheek + - University library "NL-AmUvA" → allocated_by: OCLC + - Archive "NL-AsdSAA" → allocated_by: Nationaal Archief - + + **ISNI Example:** - + + - German author ISNI → allocated_by: Deutsche Nationalbibliothek + - Dutch author ISNI → allocated_by: Koninklijke Bibliotheek - + + **Usage:** - + + Allows tracking: + - Which agency is responsible for this identifier + - Contact information for corrections/updates + - Allocation policy that governed assignment + + ' range: AllocationAgency required: false inlined: false + close_mappings: + - prov:wasAttributedTo + broad_mappings: + - prov:wasAttributedTo diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/allocates.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/allocates.yaml index 5f22f2952d..3387abcc77 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/allocates.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/allocates.yaml @@ -1,57 +1,29 @@ -# Slot: allocates -# Inverse of allocated_by -# Links AllocationAgency to identifiers it has allocated - id: https://nde.nl/ontology/hc/slot/allocates name: allocates title: Allocates - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: allocates: slot_uri: prov:contributed - description: | - Identifiers that this allocation agency has assigned. - - **PROV-O Alignment**: - - Uses a custom extension of PROV-O to track allocation relationships. - - **INVERSE PROPERTY**: - - **Inverse**: `allocated_by` (prov:wasAttributedTo) - - Pattern: If Identifier allocated_by Agency, then Agency allocates Identifier - - **Example**: - ```yaml - AllocationAgency: - name: "Koninklijke Bibliotheek" - abbreviation: "KB" - allocates: - - "https://nde.nl/ontology/hc/identifier/isil/nl-amoba" - - "https://nde.nl/ontology/hc/identifier/isil/nl-hagk" - ``` - - **Usage**: - Allows tracking: - - All identifiers assigned by a specific agency - - Volume of allocations per agency - - Allocation patterns by geography or domain - - **Navigation**: - - From agency: Find all allocated identifiers (allocates) - - From identifier: Find allocating agency (allocated_by) + description: "Identifiers that this allocation agency has assigned.\n\n**PROV-O Alignment**:\n\nUses a custom extension\ + \ of PROV-O to track allocation relationships.\n\n**INVERSE PROPERTY**:\n- **Inverse**: `allocated_by` (prov:wasAttributedTo)\n\ + - Pattern: If Identifier allocated_by Agency, then Agency allocates Identifier\n\n**Example**:\n```yaml\nAllocationAgency:\n\ + \ name: \"Koninklijke Bibliotheek\"\n abbreviation: \"KB\"\n allocates:\n - \"https://nde.nl/ontology/hc/identifier/isil/nl-amoba\"\ + \n - \"https://nde.nl/ontology/hc/identifier/isil/nl-hagk\"\n```\n\n**Usage**:\nAllows tracking:\n- All identifiers\ + \ assigned by a specific agency\n- Volume of allocations per agency\n- Allocation patterns by geography or domain\n\n\ + **Navigation**:\n- From agency: Find all allocated identifiers (allocates)\n- From identifier: Find allocating agency\ + \ (allocated_by)\n" range: CustodianIdentifier multivalued: true - comments: - - "Inverse of allocated_by (prov:wasAttributedTo)" - - "Links agency to all identifiers it has assigned" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of allocated_by (prov:wasAttributedTo) + - Links agency to all identifiers it has assigned + - Creates owl:inverseOf axiom in RDF output + close_mappings: + - prov:generated diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/allocation_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/allocation_date.yaml index dbf8e1100c..69231bbf04 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/allocation_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/allocation_date.yaml @@ -1,46 +1,60 @@ -# Slot: allocation_date -# Date when an identifier was allocated - id: https://nde.nl/ontology/hc/slot/allocation_date name: allocation_date_slot title: Allocation Date Slot - prefixes: linkml: https://w3id.org/linkml/ schema: http://schema.org/ prov: http://www.w3.org/ns/prov# - imports: - - linkml:types - +- linkml:types slots: allocation_date: slot_uri: prov:generatedAtTime - description: | - Date when this identifier was allocated/assigned. - + description: 'Date when this identifier was allocated/assigned. + + Records when the allocation agency assigned this identifier to the entity. - + + **Provenance:** - + + Uses prov:generatedAtTime from PROV-O to indicate when the identifier + was created/assigned. - + + **Usage:** - + + Important for: + - Tracking identifier age + - Historical research + - Disambiguation (if same code reused after deactivation) + - Compliance with data retention policies - + + **Format:** - + + ISO 8601 datetime (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ) - + + **Examples:** - + + - ISIL "NL-AmRMA" allocated on "2005-03-15" + - ISNI assigned on "2013-06-01T00:00:00Z" + + ' range: datetime required: false + close_mappings: + - dcterms:date + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/also_identifies_name.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/also_identifies_name.yaml index bc8cc44e03..12bc871d8f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/also_identifies_name.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/also_identifies_name.yaml @@ -1,63 +1,29 @@ -# Slot: also_identifies_name -# Links an identifier that also identifies a name authority record - id: https://nde.nl/ontology/hc/slot/also_identifies_name name: also_identifies_name_slot title: Also Identifies Name Slot - prefixes: linkml: https://w3id.org/linkml/ schema: http://schema.org/ crm: http://www.cidoc-crm.org/cidoc-crm/ - imports: - - linkml:types - +- linkml:types slots: also_identifies_name: slot_uri: crm:P1_is_identified_by - description: | - Links an identifier that also identifies a name authority record (CustodianName). - - Some identifiers serve dual purposes: - 1. Identifying the organization/person (CustodianIdentifier) - 2. Identifying the authoritative name record (CustodianName) - - **Key Example: ISNI** - - ISNI (International Standard Name Identifier) is defined as a name identifier: - - ISO 27729 defines it for "public identities of parties" - - "Public identity" = the name by which an entity is known - - Therefore, an ISNI attached to a Custodian ALSO identifies: - - The Custodian entity itself (as CustodianIdentifier) - - The authoritative name record (as CustodianName identifier) - - **Usage:** - - ```yaml - # ISNI example - - identifier_scheme: ISNI - identifier_value: "0000 0001 2146 5765" - identifies_custodian: rijksmuseum - also_identifies_name: rijksmuseum-official-name # Links to CustodianName - ``` - - **Other Examples:** - - - **VIAF**: Also identifies name authority records (by definition) - - **GND**: German authority file for names - - **LCNAF**: Library of Congress Name Authority File - - **NOT Applicable:** - - - ISIL: Identifies organization only, not name records - - KvK: Identifies legal entity only - - Wikidata: Identifies entity (could be either, context-dependent) - - **Ontology Alignment:** - - Uses CIDOC-CRM P1_is_identified_by (inverse) to link identifier to what it identifies. + description: "Links an identifier that also identifies a name authority record (CustodianName).\n\nSome identifiers serve\ + \ dual purposes:\n1. Identifying the organization/person (CustodianIdentifier)\n2. Identifying the authoritative name\ + \ record (CustodianName)\n\n**Key Example: ISNI**\n\nISNI (International Standard Name Identifier) is defined as a name\ + \ identifier:\n- ISO 27729 defines it for \"public identities of parties\"\n- \"Public identity\" = the name by which\ + \ an entity is known\n\nTherefore, an ISNI attached to a Custodian ALSO identifies:\n- The Custodian entity itself (as\ + \ CustodianIdentifier)\n- The authoritative name record (as CustodianName identifier)\n\n**Usage:**\n\n```yaml\n# ISNI\ + \ example\n- identifier_scheme: ISNI\n identifier_value: \"0000 0001 2146 5765\"\n identifies_custodian: rijksmuseum\n\ + \ also_identifies_name: rijksmuseum-official-name # Links to CustodianName\n```\n\n**Other Examples:**\n\n- **VIAF**:\ + \ Also identifies name authority records (by definition)\n- **GND**: German authority file for names\n- **LCNAF**: Library\ + \ of Congress Name Authority File\n\n**NOT Applicable:**\n\n- ISIL: Identifies organization only, not name records\n\ + - KvK: Identifies legal entity only\n- Wikidata: Identifies entity (could be either, context-dependent)\n\n**Ontology\ + \ Alignment:**\n\nUses CIDOC-CRM P1_is_identified_by (inverse) to link identifier to what it identifies.\n" range: CustodianName required: false inlined: false + broad_mappings: + - rdfs:label diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/alternative_names.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/alternative_names.yaml index 4b7c8375be..a5c4c3939b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/alternative_names.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/alternative_names.yaml @@ -1,29 +1,37 @@ -# CustodianName Slot: alternative_names -# Alternative names and label variants (skos:altLabel) - id: https://nde.nl/ontology/hc/slot/alternative_names name: alternative_names_slot - imports: - - ../classes/Appellation - +- ../classes/Appellation slots: alternative_names: slot_uri: skos:altLabel range: CustodianAppellation multivalued: true inlined_as_list: true - description: | - Alternative names and label variants for a custodian name. - + description: 'Alternative names and label variants for a custodian name. + + SKOS: altLabel for alternative lexical labels (trading names, colloquial names, abbreviations). + W3C Org Ontology: Recommended pattern for organizational name variants. - + + Examples: + - Abbreviations: "BnF" for "Bibliothèque nationale de France" + - Colloquial names: "Rijks" for "Rijksmuseum" + - Translations: "National Library of France" + - Historical spelling variants - + + These appellations are NOT the preferred/canonical name but are recognized + variants that people use to refer to the same custodian. + + ' + exact_mappings: + - schema:alternateName + - skos:altLabel diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/alternative_observed_names.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/alternative_observed_names.yaml index 9826c3cb80..915d03f32b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/alternative_observed_names.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/alternative_observed_names.yaml @@ -1,12 +1,12 @@ -# CustodianObservation Slot: alternative_observed_names -# Alternative names observed in sources - id: https://nde.nl/ontology/hc/slot/alternative_observed_names name: alternative_observed_names_slot - slots: alternative_observed_names: slot_uri: skos:altLabel range: string multivalued: true - description: "Alternative names, abbreviations, translations observed in sources" + description: Alternative names, abbreviations, translations observed in sources + exact_mappings: + - skos:altLabel + close_mappings: + - schema:alternateName diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/altitude.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/altitude.yaml index 4b36ac28eb..7880de8d6d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/altitude.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/altitude.yaml @@ -1,24 +1,21 @@ -# Global Slot: altitude -# Altitude above sea level in meters - id: https://nde.nl/ontology/hc/slot/altitude name: altitude_slot title: Altitude Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ wgs84: http://www.w3.org/2003/01/geo/wgs84_pos# - imports: - - linkml:types - +- linkml:types slots: altitude: slot_uri: wgs84:alt range: float - description: | - Altitude above sea level (meters). + description: 'Altitude above sea level (meters). + Optional - use for elevated or underground locations. + + ' exact_mappings: - - wgs84:alt + - wgs84:alt + - schema:elevation diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/api_endpoint.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/api_endpoint.yaml index ae43e5df1e..13dcd34593 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/api_endpoint.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/api_endpoint.yaml @@ -1,20 +1,22 @@ -# Global Slot: api_endpoint -# URL of API endpoint for programmatic access - id: https://nde.nl/ontology/hc/slot/api_endpoint name: api_endpoint_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcat: http://www.w3.org/ns/dcat# - default_prefix: hc - slots: api_endpoint: slot_uri: dcat:endpointURL - description: | - API endpoint URL for programmatic access. + description: 'API endpoint URL for programmatic access. + DCAT: endpointURL for API base address. + + ' range: uri + close_mappings: + - schema:url + related_mappings: + - dcat:endpointURL + broad_mappings: + - dcat:endpointURL diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/appellation_language.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/appellation_language.yaml index c909e0bcec..9003d4ed60 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/appellation_language.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/appellation_language.yaml @@ -1,12 +1,12 @@ -# Appellation Slot: appellation_language -# Language of the appellation - id: https://nde.nl/ontology/hc/slot/appellation_language name: appellation_language_slot - slots: appellation_language: slot_uri: dcterms:language range: string - pattern: "^[a-z]{2}$" - description: "ISO 639-1 language code" + pattern: ^[a-z]{2}$ + description: ISO 639-1 language code + exact_mappings: + - dcterms:language + broad_mappings: + - dcterms:language diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/appellation_type.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/appellation_type.yaml index 69d2540955..bbea4bcc61 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/appellation_type.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/appellation_type.yaml @@ -1,14 +1,13 @@ -# Appellation Slot: appellation_type -# Type of name - id: https://nde.nl/ontology/hc/slot/appellation_type name: appellation_type_slot - imports: - - ../enums/AppellationTypeEnum - +- ../enums/AppellationTypeEnum slots: appellation_type: slot_uri: crm:P2_has_type range: AppellationTypeEnum - description: "Type of name (official, vernacular, historical, translation)" + description: Type of name (official, vernacular, historical, translation) + close_mappings: + - dcterms:type + broad_mappings: + - dcterms:type diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/appellation_value.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/appellation_value.yaml index ed862338ab..f8aefd40fa 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/appellation_value.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/appellation_value.yaml @@ -1,11 +1,13 @@ -# Appellation Slot: appellation_value -# The actual name/label string - id: https://nde.nl/ontology/hc/slot/appellation_value name: appellation_value_slot - slots: appellation_value: slot_uri: rdf:value range: string - description: "The actual name/label string" + description: The actual name/label string + exact_mappings: + - rdf:value + close_mappings: + - skos:prefLabel + broad_mappings: + - rdf:value diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/appellations.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/appellations.yaml index 9cf3c37027..1c1353b134 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/appellations.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/appellations.yaml @@ -1,41 +1,21 @@ -# DEPRECATED - DO NOT USE -# This slot has been replaced by alternative_names and variant_of_name -# -# REASON FOR DEPRECATION: -# The old architecture incorrectly connected CustodianAppellation to Custodian using crm:P1_is_identified_by. -# This suggested appellations "identify" the hub, but only CustodianIdentifier should identify the hub. -# -# NEW ARCHITECTURE (as of 2025-11-22): -# - CustodianName --[skos:altLabel]--> CustodianAppellation (name variants) -# - CustodianAppellation --[skos:broader]--> CustodianName (inverse) -# -# MIGRATION PATH: -# Old: Custodian.appellations (list of CustodianAppellation) -# New: CustodianName.alternative_names (list of CustodianAppellation) -# -# FILES TO USE INSTEAD: -# - modules/slots/alternative_names.yaml (CustodianName → CustodianAppellation) -# - modules/slots/variant_of_name.yaml (CustodianAppellation → CustodianName, inverse) -# -# SEE ALSO: -# - APPELLATION_IDENTIFIER_REFACTORING_20251122.md (documentation of this change) - id: https://nde.nl/ontology/hc/slot/appellations name: appellations_slot_deprecated - -# DO NOT IMPORT THIS FILE -# It is kept for historical reference only - slots: appellations: slot_uri: skos:altLabel - deprecated: "Replaced by alternative_names (CustodianName) and variant_of_name (CustodianAppellation)" + deprecated: Replaced by alternative_names (CustodianName) and variant_of_name (CustodianAppellation) deprecated_element_has_exact_replacement: alternative_names range: CustodianAppellation multivalued: true - description: | - DEPRECATED: Use CustodianName.alternative_names instead. - + description: 'DEPRECATED: Use CustodianName.alternative_names instead. + + This slot incorrectly connected Custodian to CustodianAppellation using crm:P1_is_identified_by, + which suggested appellations identify the hub. The correct architecture uses skos:altLabel to + connect CustodianName to CustodianAppellation (name variants, not identifiers). + + ' + close_mappings: + - skos:altLabel diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/approval_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/approval_date.yaml index 0893037abe..0ab17d1a8a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/approval_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/approval_date.yaml @@ -2,19 +2,19 @@ id: https://nde.nl/ontology/hc/slot/approval_date name: approval_date_slot title: Approval Date Slot description: Shared slot for approval dates across heritage custodian entities - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: approval_date: description: Date of formal approval (e.g., budget approval, loan approval) range: date slot_uri: schema:dateModified + close_mappings: + - dcterms:dateAccepted + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/archive_branches.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive_branches.yaml new file mode 100644 index 0000000000..f593c839cc --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/archive_branches.yaml @@ -0,0 +1,32 @@ +# Slot: archive_branches +# Branch locations or sub-archives of an archive organization + +id: https://nde.nl/ontology/hc/slot/archive_branches +name: archive_branches_slot + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + org: http://www.w3.org/ns/org# + schema: http://schema.org/ + +imports: + - linkml:types + +default_range: string + +slots: + archive_branches: + slot_uri: org:hasSubOrganization + description: | + Branch locations or sub-archives that are part of this archive organization. + + ORG: hasSubOrganization - "Represents hierarchical containment of Organizations." + + Used to model archive systems with multiple locations or regional branches. + range: string + multivalued: true + close_mappings: + - org:hasSubOrganization + related_mappings: + - schema:subOrganization diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/archive_department_of.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archive_department_of.yaml new file mode 100644 index 0000000000..607205a6b6 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/archive_department_of.yaml @@ -0,0 +1,32 @@ +# Slot: archive_department_of +# Parent organization that this archive is a department of + +id: https://nde.nl/ontology/hc/slot/archive_department_of +name: archive_department_of_slot + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + org: http://www.w3.org/ns/org# + schema: http://schema.org/ + +imports: + - linkml:types + +default_range: string + +slots: + archive_department_of: + slot_uri: org:subOrganizationOf + description: | + The parent organization that this archive is a department or unit of. + + ORG: subOrganizationOf - "Represents hierarchical containment of Organizations." + + Used when an archive operates as a department within a larger institution + (e.g., university archive as department of a university). + range: string + close_mappings: + - org:subOrganizationOf + related_mappings: + - schema:parentOrganization diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/archived_at.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/archived_at.yaml index 780f754f2f..687342de88 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/archived_at.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/archived_at.yaml @@ -1,19 +1,16 @@ -# Global Slot: archived_at -# URL to archived version of a resource - id: https://nde.nl/ontology/hc/slot/archived_at name: archived_at_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - slots: archived_at: slot_uri: schema:archivedAt - description: | - URL to archived version of a resource (e.g., Wayback Machine snapshot). + description: 'URL to archived version of a resource (e.g., Wayback Machine snapshot). + + ' range: uri + broad_mappings: + - prov:atTime diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/arrangement.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/arrangement.yaml new file mode 100644 index 0000000000..6130e8a458 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/arrangement.yaml @@ -0,0 +1,20 @@ +id: https://nde.nl/ontology/hc/slot/arrangement +name: arrangement +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + arrangement: + slot_uri: rico:hasOrHadAllMembersWithRecordState + description: "Intellectual arrangement system used for the collection.\n\nDescribes how materials are organized (chronological,\ + \ \nalphabetical, by subject, original order, etc.).\n" + range: string + required: false + examples: + - value: Chronological by date of creation + description: Time-based arrangement + - value: Original order maintained + description: Provenance-based arrangement + related_mappings: + - rico:hasOrganicProvenance diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/arrangement_system.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/arrangement_system.yaml index ada728e38c..aca2698a97 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/arrangement_system.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/arrangement_system.yaml @@ -1,17 +1,21 @@ -# Custodian Slot: arrangement_system -# Intellectual arrangement or classification system - id: https://nde.nl/ontology/hc/slot/arrangement_system name: arrangement_system_slot - slots: arrangement_system: slot_uri: rico:hasRecordSetType range: string - description: | - Intellectual arrangement or classification system. + description: 'Intellectual arrangement or classification system. + Examples: + - "Archival fonds organized by provenance" (RiC-O) + - "Dewey Decimal Classification" (libraries) + - "Thematic galleries" (museums) + - "Chronological arrangement" + + ' + related_mappings: + - rico:hasRecordSetType diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/authentication_required.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/authentication_required.yaml index 10ff7502fb..669f7af823 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/authentication_required.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/authentication_required.yaml @@ -1,28 +1,30 @@ -# Authentication Required Slot - Shared slot for API authentication status -# Used by DataServiceEndpoint and its subclasses - id: https://nde.nl/ontology/hc/slot/authentication_required name: authentication_required_slot title: Authentication Required Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types slots: authentication_required: slot_uri: schema:authenticationType - description: | - Whether authentication is required to access this endpoint. - + description: 'Whether authentication is required to access this endpoint. + + Values: + - true: API key, OAuth, or other authentication required + - false: Public/anonymous access allowed + - null: Unknown - + + If true, see authentication_method for details. + + ' range: boolean + related_mappings: + - schema:authenticationType diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/auxiliary_places.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/auxiliary_places.yaml index 18f692d56e..4d3f4719e8 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/auxiliary_places.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/auxiliary_places.yaml @@ -1,98 +1,46 @@ -# Auxiliary Places Slot -# Links CustodianPlace to subordinate/secondary physical locations -# W3C Org: org:hasSite pattern for organizational sites - id: https://nde.nl/ontology/hc/slot/auxiliary_places name: auxiliary_places - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types slots: auxiliary_places: slot_uri: org:hasSite range: AuxiliaryPlace multivalued: true inlined_as_list: true - description: | - Subordinate or secondary physical locations associated with this CustodianPlace. - - **W3C ORG Alignment**: - - `org:hasSite` - "Indicates a site at which the Organization has some presence - even if only indirect (e.g. virtual office or a professional service - which is acting as the registered address for a company)." - - **Hierarchical Pattern**: - - CustodianPlace (main headquarters) - └── auxiliary_places → AuxiliaryPlace[] (subordinate sites) - └── hosts_branch → OrganizationBranch (formal branch at site) - - This mirrors the CustodianName → CustodianAppellation pattern: - - CustodianName is preferred name (skos:prefLabel) - - CustodianAppellation is alternative name (skos:altLabel) - - CustodianPlace is main place (org:Site - primary) - - AuxiliaryPlace is subordinate place (org:Site - secondary) - - **Use Cases**: - - 1. **Off-site Storage**: - - Museum depot in another city - - Archive annex for overflow documents - - 2. **Branch Locations**: - - Regional library branches - - Satellite museum galleries - - 3. **Specialized Facilities**: - - Conservation lab in separate building - - Digitization center at different address - - 4. **Temporary Locations**: - - Exhibition pavilions - - Storage during renovation - - **Example - Rijksmuseum**: - ```yaml - CustodianPlace: - place_name: "Rijksmuseum" - place_specificity: BUILDING - auxiliary_places: - - place_name: "Depot Amersfoort" - auxiliary_place_type: STORAGE_FACILITY - - place_name: "Rijksmuseum Schiphol" - auxiliary_place_type: BRANCH_OFFICE - hosts_branch: - branch_name: "Schiphol Exhibition Team" - ``` - - **Temporal Considerations**: - - Auxiliary places have independent lifecycles: - - Storage facility opened 1995, closed 2010 - - Branch office valid_from 2000, still active - - Each AuxiliaryPlace tracks its own valid_from/valid_to dates. - - **Query Pattern**: - - "Find all locations of Rijksmuseum": - - Main: CustodianPlace.place_name - - Secondary: CustodianPlace.auxiliary_places[*].place_name + description: "Subordinate or secondary physical locations associated with this CustodianPlace.\n\n**W3C ORG Alignment**:\n\ + \n`org:hasSite` - \"Indicates a site at which the Organization has some presence \neven if only indirect (e.g. virtual\ + \ office or a professional service \nwhich is acting as the registered address for a company).\"\n\n**Hierarchical Pattern**:\n\ + \nCustodianPlace (main headquarters)\n └── auxiliary_places → AuxiliaryPlace[] (subordinate sites)\n └── hosts_branch\ + \ → OrganizationBranch (formal branch at site)\n\nThis mirrors the CustodianName → CustodianAppellation pattern:\n-\ + \ CustodianName is preferred name (skos:prefLabel)\n- CustodianAppellation is alternative name (skos:altLabel)\n- CustodianPlace\ + \ is main place (org:Site - primary)\n- AuxiliaryPlace is subordinate place (org:Site - secondary)\n\n**Use Cases**:\n\ + \n1. **Off-site Storage**:\n - Museum depot in another city\n - Archive annex for overflow documents\n\n2. **Branch\ + \ Locations**:\n - Regional library branches\n - Satellite museum galleries\n\n3. **Specialized Facilities**:\n\ + \ - Conservation lab in separate building\n - Digitization center at different address\n\n4. **Temporary Locations**:\n\ + \ - Exhibition pavilions\n - Storage during renovation\n\n**Example - Rijksmuseum**:\n```yaml\nCustodianPlace:\n\ + \ place_name: \"Rijksmuseum\"\n place_specificity: BUILDING\n auxiliary_places:\n - place_name: \"Depot Amersfoort\"\ + \n auxiliary_place_type: STORAGE_FACILITY\n - place_name: \"Rijksmuseum Schiphol\"\n auxiliary_place_type:\ + \ BRANCH_OFFICE\n hosts_branch:\n branch_name: \"Schiphol Exhibition Team\"\n```\n\n**Temporal Considerations**:\n\ + \nAuxiliary places have independent lifecycles:\n- Storage facility opened 1995, closed 2010\n- Branch office valid_from\ + \ 2000, still active\n\nEach AuxiliaryPlace tracks its own valid_from/valid_to dates.\n\n**Query Pattern**:\n\n\"Find\ + \ all locations of Rijksmuseum\":\n- Main: CustodianPlace.place_name\n- Secondary: CustodianPlace.auxiliary_places[*].place_name\n" examples: - - value: - - place_name: "Depot Amersfoort" - auxiliary_place_type: STORAGE_FACILITY - street_address: "Euterpelaan 25" - city: "Amersfoort" - - place_name: "Rijksmuseum Schiphol" - auxiliary_place_type: BRANCH_OFFICE - street_address: "Schiphol Airport, Lounge 2" - description: "Rijksmuseum subordinate locations" + - value: + - place_name: Depot Amersfoort + auxiliary_place_type: STORAGE_FACILITY + street_address: Euterpelaan 25 + city: Amersfoort + - place_name: Rijksmuseum Schiphol + auxiliary_place_type: BRANCH_OFFICE + street_address: Schiphol Airport, Lounge 2 + description: Rijksmuseum subordinate locations + close_mappings: + - org:hasSite + related_mappings: + - schema:location diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/auxiliary_platforms.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/auxiliary_platforms.yaml index daa10cd31e..0ee0750ff1 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/auxiliary_platforms.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/auxiliary_platforms.yaml @@ -1,110 +1,51 @@ -# Auxiliary Platforms Slot -# Links DigitalPlatform to subordinate/project-based digital properties -# DCAT: dcterms:hasPart pattern for data catalogs - id: https://nde.nl/ontology/hc/slot/auxiliary_platforms name: auxiliary_platforms - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcat: http://www.w3.org/ns/dcat# dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types slots: auxiliary_platforms: slot_uri: dcterms:hasPart range: AuxiliaryDigitalPlatform multivalued: true inlined_as_list: true - description: | - Subordinate or project-based digital platforms associated with this DigitalPlatform. - - **DCAT Alignment**: - - `dcterms:hasPart` - "A related resource that is included either physically - or logically in the described resource." - - Used in DCAT for catalog → sub-catalog relationships. - - **Hierarchical Pattern**: - - DigitalPlatform (main digital entry point) - └── auxiliary_platforms → AuxiliaryDigitalPlatform[] (project sites) - - This mirrors the CustodianName → CustodianAppellation pattern: - - CustodianName is preferred label (skos:prefLabel) - - CustodianAppellation is alternative name (skos:altLabel) - - DigitalPlatform is main digital entry (foaf:homepage) - - AuxiliaryDigitalPlatform is subordinate platform (dcterms:hasPart) - - **Use Cases**: - - 1. **Project Websites**: - - Research project portals - - Grant-funded digitization sites - - 2. **Exhibition Microsites**: - - Temporary exhibition with dedicated website - - Virtual tours for specific collections - - 3. **APIs and Tools**: - - Developer APIs (separate from main website) - - Collection browser tools - - Mobile applications - - 4. **Legacy/Archived Platforms**: - - Previous website versions - - Deprecated systems still accessible - - 5. **Educational Portals**: - - Teacher resources - - Student learning modules - - **Example - Rijksmuseum**: - ```yaml - DigitalPlatform: - platform_name: "Rijksmuseum Website" - homepage_web_address: "https://www.rijksmuseum.nl/" - auxiliary_platforms: - - platform_name: "Rijksstudio" - auxiliary_platform_type: PROJECT_WEBSITE - platform_url: "https://www.rijksmuseum.nl/nl/rijksstudio" - - platform_name: "Rijksmuseum Data API" - auxiliary_platform_type: API_ENDPOINT - platform_url: "https://data.rijksmuseum.nl/" - - platform_name: "Night Watch Experience" - auxiliary_platform_type: EXHIBITION_MICROSITE - platform_url: "https://www.rijksmuseum.nl/en/stories/operation-night-watch" - ``` - - **Temporal Considerations**: - - Auxiliary platforms often have finite lifespans: - - Exhibition microsite: opens/closes with exhibition - - Project portal: funded period only - - Legacy platforms: archived but not deleted - - Each AuxiliaryDigitalPlatform tracks: - - valid_from/valid_to: exact dates - - archival_status: ACTIVE/DEPRECATED/ARCHIVED/OFFLINE - - archived_at: Wayback Machine URL if archived - - **Query Pattern**: - - "Find all digital properties of Rijksmuseum": - - Main: DigitalPlatform.homepage_web_address - - Secondary: DigitalPlatform.auxiliary_platforms[*].platform_url + description: "Subordinate or project-based digital platforms associated with this DigitalPlatform.\n\n**DCAT Alignment**:\n\ + \n`dcterms:hasPart` - \"A related resource that is included either physically \nor logically in the described resource.\"\ + \n\nUsed in DCAT for catalog → sub-catalog relationships.\n\n**Hierarchical Pattern**:\n\nDigitalPlatform (main digital\ + \ entry point)\n └── auxiliary_platforms → AuxiliaryDigitalPlatform[] (project sites)\n\nThis mirrors the CustodianName\ + \ → CustodianAppellation pattern:\n- CustodianName is preferred label (skos:prefLabel)\n- CustodianAppellation is alternative\ + \ name (skos:altLabel)\n- DigitalPlatform is main digital entry (foaf:homepage)\n- AuxiliaryDigitalPlatform is subordinate\ + \ platform (dcterms:hasPart)\n\n**Use Cases**:\n\n1. **Project Websites**:\n - Research project portals\n - Grant-funded\ + \ digitization sites\n\n2. **Exhibition Microsites**:\n - Temporary exhibition with dedicated website\n - Virtual\ + \ tours for specific collections\n\n3. **APIs and Tools**:\n - Developer APIs (separate from main website)\n - Collection\ + \ browser tools\n - Mobile applications\n\n4. **Legacy/Archived Platforms**:\n - Previous website versions\n -\ + \ Deprecated systems still accessible\n\n5. **Educational Portals**:\n - Teacher resources\n - Student learning\ + \ modules\n\n**Example - Rijksmuseum**:\n```yaml\nDigitalPlatform:\n platform_name: \"Rijksmuseum Website\"\n homepage_web_address:\ + \ \"https://www.rijksmuseum.nl/\"\n auxiliary_platforms:\n - platform_name: \"Rijksstudio\"\n auxiliary_platform_type:\ + \ PROJECT_WEBSITE\n platform_url: \"https://www.rijksmuseum.nl/nl/rijksstudio\"\n - platform_name: \"Rijksmuseum\ + \ Data API\"\n auxiliary_platform_type: API_ENDPOINT\n platform_url: \"https://data.rijksmuseum.nl/\"\n \ + \ - platform_name: \"Night Watch Experience\"\n auxiliary_platform_type: EXHIBITION_MICROSITE\n platform_url:\ + \ \"https://www.rijksmuseum.nl/en/stories/operation-night-watch\"\n```\n\n**Temporal Considerations**:\n\nAuxiliary\ + \ platforms often have finite lifespans:\n- Exhibition microsite: opens/closes with exhibition\n- Project portal: funded\ + \ period only\n- Legacy platforms: archived but not deleted\n\nEach AuxiliaryDigitalPlatform tracks:\n- valid_from/valid_to:\ + \ exact dates\n- archival_status: ACTIVE/DEPRECATED/ARCHIVED/OFFLINE\n- archived_at: Wayback Machine URL if archived\n\ + \n**Query Pattern**:\n\n\"Find all digital properties of Rijksmuseum\":\n- Main: DigitalPlatform.homepage_web_address\n\ + - Secondary: DigitalPlatform.auxiliary_platforms[*].platform_url\n" examples: - - value: - - platform_name: "Rijksstudio" - auxiliary_platform_type: PROJECT_WEBSITE - platform_url: "https://www.rijksmuseum.nl/nl/rijksstudio" - archival_status: "ACTIVE" - - platform_name: "Rijksmuseum Data API" - auxiliary_platform_type: API_ENDPOINT - platform_url: "https://data.rijksmuseum.nl/" - description: "Rijksmuseum subordinate digital platforms" + - value: + - platform_name: Rijksstudio + auxiliary_platform_type: PROJECT_WEBSITE + platform_url: https://www.rijksmuseum.nl/nl/rijksstudio + archival_status: ACTIVE + - platform_name: Rijksmuseum Data API + auxiliary_platform_type: API_ENDPOINT + platform_url: https://data.rijksmuseum.nl/ + description: Rijksmuseum subordinate digital platforms + close_mappings: + - dcterms:hasPart + broad_mappings: + - dcterms:hasPart diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/base_surname.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/base_surname.yaml index db81994dc4..efec0e7fd3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/base_surname.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/base_surname.yaml @@ -1,47 +1,62 @@ id: https://nde.nl/ontology/hc/slot/base_surname name: base_surname title: Base Surname - prefixes: pnv: https://w3id.org/pnv# sdo: https://schema.org/ - imports: - - linkml:types - +- linkml:types slots: base_surname: slot_uri: pnv:baseSurname - description: | - Family name WITHOUT prefixes, used for alphabetical sorting. - + description: 'Family name WITHOUT prefixes, used for alphabetical sorting. + + In Dutch naming conventions, surnames with prefixes (tussenvoegsels) like + "van", "de", "van der", etc. are sorted by the main surname element, + ignoring the prefix. - + + This property captures just the sortable surname component: - + + Examples: + - "de Vries" → base_surname: "Vries" (sorts under V) + - "van den Berg" → base_surname: "Berg" (sorts under B) + - "van der Waals" → base_surname: "Waals" (sorts under W) - - "in 't Veld" → base_surname: "Veld" (sorts under V) - + + - "in ''t Veld" → base_surname: "Veld" (sorts under V) + + Equivalent to BioDes:geslachtsnaam in Dutch heritage standards. - + + IMPORTANT: Belgian Dutch and some international conventions may sort + by the full surname including prefix. In those cases, use the full + surname here or handle sorting differently in your application. - + + For surnames without prefixes, base_surname equals the full surname: + - "Jansen" → base_surname: "Jansen" + - "Bakker" → base_surname: "Bakker" - + + ' range: string exact_mappings: - - pnv:baseSurname + - pnv:baseSurname close_mappings: - - sdo:familyName - - foaf:familyName + - sdo:familyName + - foaf:familyName + - foaf:surname related_mappings: - - foaf:lastName + - foaf:lastName + - schema:familyName diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/begin_of_the_begin.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/begin_of_the_begin.yaml index eac40aa992..e87d47abd5 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/begin_of_the_begin.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/begin_of_the_begin.yaml @@ -1,11 +1,13 @@ -# TimeSpan Slot: begin_of_the_begin -# Earliest possible start time - id: https://nde.nl/ontology/hc/slot/begin_of_the_begin name: begin_of_the_begin_slot - slots: begin_of_the_begin: slot_uri: crm:P82a_begin_of_the_begin range: datetime - description: "Earliest possible start time of temporal extent (CIDOC-CRM E52_Time-Span)" + description: Earliest possible start time of temporal extent (CIDOC-CRM E52_Time-Span) + related_mappings: + - prov:startedAtTime + narrow_mappings: + - schema:startDate + broad_mappings: + - dcterms:relation diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/begin_of_the_end.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/begin_of_the_end.yaml index 060de66492..5b0be968fc 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/begin_of_the_end.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/begin_of_the_end.yaml @@ -1,11 +1,11 @@ -# TimeSpan Slot: begin_of_the_end -# Earliest possible end time - id: https://nde.nl/ontology/hc/slot/begin_of_the_end name: begin_of_the_end_slot - slots: begin_of_the_end: slot_uri: crm:P81b_begin_of_the_end range: datetime - description: "Earliest possible end time of temporal extent (CIDOC-CRM E52_Time-Span)" + description: Earliest possible end time of temporal extent (CIDOC-CRM E52_Time-Span) + related_mappings: + - prov:endedAtTime + broad_mappings: + - dcterms:relation diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/birth_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/birth_date.yaml index 7e32130724..59f6aad2f4 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/birth_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/birth_date.yaml @@ -1,112 +1,163 @@ -# Birth Date Slot -# Date or string representing when a person was born -# -# PiCo Pattern: Allows both xsd:date and xsd:string to preserve original -# source formats while enabling date-based queries. - id: https://nde.nl/ontology/hc/slot/birth_date name: birth_date_slot title: Birth Date Slot - prefixes: sdo: https://schema.org/ pico: https://personsincontext.org/model# crm: http://www.cidoc-crm.org/cidoc-crm/ wd: http://www.wikidata.org/entity/ xsd: http://www.w3.org/2001/XMLSchema# - imports: - - linkml:types - +- linkml:types slots: birth_date: slot_uri: sdo:birthDate - description: | - The birth date of a person. - + description: 'The birth date of a person. + + =========================================================================== + PiCo ONTOLOGY ALIGNMENT (pico.ttl lines 365-380) + =========================================================================== - + + Per PiCo (Persons in Context) ontology, birth dates can be recorded as: + - **xsd:date**: ISO 8601 format for structured date processing + - **xsd:string**: Original format from source for preservation - + + Both formats may be used together when source fidelity is important. - + + =========================================================================== + INCOMPLETE DATES + =========================================================================== - + + Incomplete dates are ALLOWED when truncated from small to large: - + + **VALID formats**: + - "1970-08-15" (full date) + - "1970-08" (year and month only) + - "1970" (year only) - + + **INVALID formats** (never use): + - "1970-00-15" (missing month with day present) + - "08-15" (missing year) + - "15" (day only) - + + =========================================================================== + SOURCE PRESERVATION + =========================================================================== - + + Sometimes the original source format should be preserved exactly as written: + - Archival records: "born in the year of our Lord 1823" + - Historical documents: "circa 1750" + - Genealogical notes: "abt. 1800" + - Fuzzy dates: "late 18th century" - + + In these cases, use the string format and optionally provide a structured + date interpretation in a separate field or as part of TimeSpan processing. - + + =========================================================================== + EXAMPLES + =========================================================================== - + + Precise date known: + ```yaml + birth_date: "1970-08-15" + ``` - + + Only year known: + ```yaml + birth_date: "1970" + ``` - + + Source format preservation: + ```yaml + birth_date: "ca. 1750" # String format preserves source notation + ``` - + + =========================================================================== + RELATIONSHIP TO age SLOT + =========================================================================== - + + When birth_date is unknown but age is known (from source), use the `age` + slot instead. Combined with the source document date, a birth date range + can be derived during PersonReconstruction. - + + =========================================================================== + ONTOLOGY MAPPINGS + =========================================================================== - + + - Schema.org: sdo:birthDate (primary) + - CIDOC-CRM: crm:P98i_was_born via crm:E67_Birth event + - Wikidata: P569 (date of birth) - + + ' range: string required: false exact_mappings: - - sdo:birthDate - - wikidata:P569 + - sdo:birthDate + - wikidata:P569 + - schema:birthDate + - foaf:birthday close_mappings: - - crm:P98i_was_born + - crm:P98i_was_born comments: - - "Allows both date and string formats per PiCo pattern" - - "Incomplete dates valid when truncated from small to large" - - "Use age slot when birth date unknown but age is recorded" - - "String format can preserve original source notation" + - Allows both date and string formats per PiCo pattern + - Incomplete dates valid when truncated from small to large + - Use age slot when birth date unknown but age is recorded + - String format can preserve original source notation + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/birth_place.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/birth_place.yaml index c757e26739..782ce4093b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/birth_place.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/birth_place.yaml @@ -1,111 +1,159 @@ -# Birth Place Slot -# String or URI representing where a person was born -# -# PiCo Pattern: Allows both literal place names and URIs for thesaurus linking -# (GeoNames, Wikidata, etc.) - id: https://nde.nl/ontology/hc/slot/birth_place name: birth_place_slot title: Birth Place Slot - prefixes: sdo: https://schema.org/ pico: https://personsincontext.org/model# crm: http://www.cidoc-crm.org/cidoc-crm/ wd: http://www.wikidata.org/entity/ geonames: http://sws.geonames.org/ - imports: - - linkml:types - +- linkml:types slots: birth_place: slot_uri: sdo:birthPlace - description: | - The place where a person was born. - + description: 'The place where a person was born. + + =========================================================================== + PiCo ONTOLOGY ALIGNMENT (pico.ttl lines 382-394) + =========================================================================== - + + Per PiCo (Persons in Context) ontology, birth places can be recorded as: + - **xsd:string**: Literal place name as mentioned in source + - **xsd:anyURI**: Link to geographic thesaurus (GeoNames, Wikidata) - + + Both formats may be used together: + - Literal: Preserves original source notation + - URI: Enables geographic linking and reconciliation - + + =========================================================================== + THESAURUS LINKING + =========================================================================== - + + Preferably link to established geographic thesauri: - + + **GeoNames** (preferred for geographic entities): + - Format: http://sws.geonames.org/{geonames_id}/ + - Example: http://sws.geonames.org/2759794/ (Amsterdam) - + + **Wikidata** (preferred for historical places): + - Format: http://www.wikidata.org/entity/Q{number} + - Example: http://www.wikidata.org/entity/Q727 (Amsterdam) - + + **TGN** (Getty Thesaurus of Geographic Names): + - For art history contexts - + + =========================================================================== + SOURCE PRESERVATION + =========================================================================== - + + The literal place name as mentioned on the source should be preserved: + - Historical spellings: "Amsteldam" (historical name for Amsterdam) + - Demolished places: "East Prussia" (no longer exists) - - Vernacular names: "'s-Hertogenbosch" vs "Den Bosch" + + - Vernacular names: "''s-Hertogenbosch" vs "Den Bosch" + - Regional specificity: "Jordaan, Amsterdam" (neighborhood level) - + + =========================================================================== + EXAMPLES + =========================================================================== - + + Literal place name only: + ```yaml + birth_place: "Amsterdam, Noord-Holland, Netherlands" + ``` - + + URI to GeoNames: + ```yaml + birth_place: "http://sws.geonames.org/2759794/" + ``` - + + Both literal and URI (using separate fields): + ```yaml + birth_place: "Amsteldam" # Source spelling + birth_place_uri: "http://sws.geonames.org/2759794/" # Reconciled + ``` - + + Historical place (no modern equivalent): + ```yaml + birth_place: "Königsberg, East Prussia" + birth_place_uri: "http://www.wikidata.org/entity/Q1773" # Now Kaliningrad + ``` - + + =========================================================================== + ONTOLOGY MAPPINGS + =========================================================================== - + + - Schema.org: sdo:birthPlace (primary) + - CIDOC-CRM: crm:P7_took_place_at via crm:E67_Birth event + - Wikidata: P19 (place of birth) - + + ' range: string required: false exact_mappings: - - sdo:birthPlace - - wikidata:P19 + - sdo:birthPlace + - wikidata:P19 + - schema:birthPlace close_mappings: - - crm:P7_took_place_at + - crm:P7_took_place_at comments: - - "Allows both string and URI formats per PiCo pattern" - - "Prefer thesaurus links (GeoNames, Wikidata) when possible" - - "Preserve literal source notation alongside reconciled URI" - - "Handle historical place names that may not have modern equivalents" + - Allows both string and URI formats per PiCo pattern + - Prefer thesaurus links (GeoNames, Wikidata) when possible + - Preserve literal source notation alongside reconciled URI + - Handle historical place names that may not have modern equivalents diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/canonical_value.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/canonical_value.yaml index aeeeeb0fbf..5e9817385c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/canonical_value.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/canonical_value.yaml @@ -1,55 +1,27 @@ -# Slot: canonical_value -# Stores the canonical/normalized form of an identifier - id: https://nde.nl/ontology/hc/slot/canonical_value name: canonical_value_slot title: Canonical Value Slot - prefixes: linkml: https://w3id.org/linkml/ schema: http://schema.org/ skos: http://www.w3.org/2004/02/skos/core# - imports: - - linkml:types - +- linkml:types slots: canonical_value: slot_uri: skos:notation - description: | - The canonical/normalized form of the identifier value. - - While identifier_value stores the value as received/displayed, - canonical_value stores the normalized form for: - - Consistent storage - - Deduplication - - Matching across systems - - **Normalization Rules by Standard:** - - - **ISNI**: Remove all spaces → "0000000121465765" - - **ISIL**: Keep as-is (already canonical) → "NL-AmRMA" - - **Wikidata**: Extract Q-number only → "Q190804" - - **VIAF**: Numeric only → "148691498" - - **DOI**: Lowercase, no resolver prefix → "10.1234/example" - - **Usage Pattern:** - - ```yaml - # ISNI example - identifier_value: "0000 0001 2146 5765" # As displayed - canonical_value: "0000000121465765" # Normalized for storage - - # Wikidata example - identifier_value: "http://www.wikidata.org/entity/Q190804" - canonical_value: "Q190804" - ``` - - **Benefits:** - - - Enables exact matching across records - - Simplifies deduplication - - Reduces storage variance - - Facilitates joins in databases + description: "The canonical/normalized form of the identifier value.\n\nWhile identifier_value stores the value as received/displayed,\n\ + canonical_value stores the normalized form for:\n- Consistent storage\n- Deduplication\n- Matching across systems\n\n\ + **Normalization Rules by Standard:**\n\n- **ISNI**: Remove all spaces → \"0000000121465765\"\n- **ISIL**: Keep as-is\ + \ (already canonical) → \"NL-AmRMA\"\n- **Wikidata**: Extract Q-number only → \"Q190804\"\n- **VIAF**: Numeric only\ + \ → \"148691498\"\n- **DOI**: Lowercase, no resolver prefix → \"10.1234/example\"\n\n**Usage Pattern:**\n\n```yaml\n\ + # ISNI example\nidentifier_value: \"0000 0001 2146 5765\" # As displayed\ncanonical_value: \"0000000121465765\" \ + \ # Normalized for storage\n\n# Wikidata example \nidentifier_value: \"http://www.wikidata.org/entity/Q190804\"\n\ + canonical_value: \"Q190804\"\n```\n\n**Benefits:**\n\n- Enables exact matching across records\n- Simplifies deduplication\n\ + - Reduces storage variance\n- Facilitates joins in databases\n" range: string required: false + close_mappings: + - skos:prefLabel + broad_mappings: + - rdf:value diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/capacity_items.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/capacity_items.yaml index 1a2984c4f2..136e59395c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/capacity_items.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/capacity_items.yaml @@ -1,20 +1,27 @@ -# Shared slot: capacity_items -# Used by: StorageUnit, Storage -# Created to resolve slot conflict during validation - id: https://nde.nl/ontology/hc/slot/capacity_items name: capacity_items_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ - + schema: http://schema.org/ imports: - - linkml:types - +- linkml:types default_range: string - slots: capacity_items: - description: Maximum number of items that can be stored + slot_uri: hc:capacityItems + description: 'Maximum number of items that can be stored. + + + Heritage Custodian ontology: capacityItems - The maximum item capacity + + of a storage unit or facility. + + + Used for physical storage planning and collection management. + + ' range: integer + broad_mappings: + - schema:maximumAttendeeCapacity + - schema:itemListElement diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/cataloging_standard.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/cataloging_standard.yaml index bbcb8b2440..ab01fe159a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/cataloging_standard.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/cataloging_standard.yaml @@ -1,35 +1,32 @@ -# Global slot definition for cataloging_standard -# Used by MuseumType and LibraryType - id: https://nde.nl/ontology/hc/slot/cataloging_standard name: cataloging_standard - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - slots: cataloging_standard: slot_uri: dcterms:conformsTo - description: | - Standards used for object cataloging and collection management. - Applies to both museums (LIDO, SPECTRUM, CIDOC-CRM) and libraries - (MARC21, RDA, Dublin Core, BIBFRAME). + description: "Standards used for object cataloging and collection management.\nApplies to both museums (LIDO, SPECTRUM,\ + \ CIDOC-CRM) and libraries \n(MARC21, RDA, Dublin Core, BIBFRAME).\n" range: string required: false examples: - - value: "LIDO" - description: "Lightweight Information Describing Objects (museums)" - - value: "SPECTRUM" - description: "UK museum collection management standard" - - value: "CIDOC-CRM" - description: "Conceptual Reference Model for cultural heritage" - - value: "MARC21" - description: "Machine-Readable Cataloging 21 (libraries)" - - value: "RDA" - description: "Resource Description and Access (libraries)" - - value: "BIBFRAME" - description: "Bibliographic Framework Initiative (libraries)" - - value: "Darwin Core" - description: "Natural history specimen data standard" + - value: LIDO + description: Lightweight Information Describing Objects (museums) + - value: SPECTRUM + description: UK museum collection management standard + - value: CIDOC-CRM + description: Conceptual Reference Model for cultural heritage + - value: MARC21 + description: Machine-Readable Cataloging 21 (libraries) + - value: RDA + description: Resource Description and Access (libraries) + - value: BIBFRAME + description: Bibliographic Framework Initiative (libraries) + - value: Darwin Core + description: Natural history specimen data standard + related_mappings: + - dcterms:conformsTo + broad_mappings: + - dcterms:conformsTo diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/change_rationale.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/change_rationale.yaml index 0882e1a382..1dd0374d15 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/change_rationale.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/change_rationale.yaml @@ -1,10 +1,11 @@ -# change_rationale slot for OrganizationalChangeEvent - id: https://nde.nl/ontology/hc/slot/change_rationale name: change_rationale - slots: change_rationale: - description: "Explanation for why this organizational change was made" + description: Explanation for why this organizational change was made range: string slot_uri: prov:hadReason + close_mappings: + - prov:hadReason + related_mappings: + - dcterms:description diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/circumstances_of_death.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/circumstances_of_death.yaml index 0c0db0ceeb..4d9b801290 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/circumstances_of_death.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/circumstances_of_death.yaml @@ -1,56 +1,34 @@ -# Circumstances of Death Slot -# Textual description of how a staff member died - id: https://nde.nl/ontology/hc/slot/circumstances_of_death name: circumstances_of_death_slot title: Circumstances of Death Slot - prefixes: schema: http://schema.org/ dcterms: http://purl.org/dc/terms/ wd: http://www.wikidata.org/entity/ - imports: - - linkml:types - - ../metadata - +- linkml:types +- ../metadata slots: circumstances_of_death: slot_uri: wikidata:P1196 - description: | - Textual description of the circumstances surrounding a staff member's death. - - **Purpose**: - Provides narrative context for how and why the person died, particularly - important for documenting: - - Heritage workers killed during conflicts - - Targeted attacks on cultural institutions - - Occupational hazards and accidents - - Historical context for biographical documentation - - **Example - Gaza Heritage Worker**: - ```yaml - circumstances_of_death: | - Killed in Israeli airstrike on his home in Gaza City on November 19, 2023. - He was a journalist and information professional at Press House - Palestine. - ``` - - **Provenance**: - Always include source documentation when describing death circumstances. - Link to authoritative reports, news coverage, or institutional records. - - **Sensitivity**: - - Handle with respect and dignity - - Verify facts before documenting - - Consult with family or institution when possible - - Follow journalistic standards for reporting deaths + description: "Textual description of the circumstances surrounding a staff member's death.\n\n**Purpose**:\nProvides narrative\ + \ context for how and why the person died, particularly\nimportant for documenting:\n- Heritage workers killed during\ + \ conflicts\n- Targeted attacks on cultural institutions\n- Occupational hazards and accidents\n- Historical context\ + \ for biographical documentation\n\n**Example - Gaza Heritage Worker**:\n```yaml\ncircumstances_of_death: |\n Killed\ + \ in Israeli airstrike on his home in Gaza City on November 19, 2023.\n He was a journalist and information professional\ + \ at Press House - Palestine.\n```\n\n**Provenance**:\nAlways include source documentation when describing death circumstances.\n\ + Link to authoritative reports, news coverage, or institutional records.\n\n**Sensitivity**:\n- Handle with respect and\ + \ dignity\n- Verify facts before documenting\n- Consult with family or institution when possible\n- Follow journalistic\ + \ standards for reporting deaths\n" range: string required: false exact_mappings: - - wikidata:P1196 + - wikidata:P1196 related_mappings: - - schema:description + - schema:description comments: - - "Provide factual, respectful descriptions" - - "Include source documentation" - - "Particularly important for martyred individuals" + - Provide factual, respectful descriptions + - Include source documentation + - Particularly important for martyred individuals + broad_mappings: + - dcterms:relation diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/city.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/city.yaml index 024641f655..ea82c193f4 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/city.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/city.yaml @@ -1,33 +1,31 @@ -# city slot - City name -# Used by: AuxiliaryPlace, other location-related classes - id: https://nde.nl/ontology/hc/slot/city name: city_slot title: City Slot +description: 'City or locality name for a location. + -description: | - City or locality name for a location. - Use the standard English name or official local name. + For precise identification, prefer Settlement class with GeoNames ID. + ' prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ locn: http://www.w3.org/ns/locn# - slots: city: slot_uri: schema:addressLocality range: string required: false - description: | - City or locality name for the location. - exact_mappings: - - locn:postName - - vcard:locality + description: 'City or locality name for the location. + ' + exact_mappings: + - locn:postName + - vcard:locality + - schema:addressLocality comments: - - "For unambiguous city identification, use Settlement class with GeoNames ID" - - "This slot is for simple string references when full Settlement is not needed" +- For unambiguous city identification, use Settlement class with GeoNames ID +- This slot is for simple string references when full Settlement is not needed diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/claim_id.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/claim_id.yaml index db5b296a79..90103f86c7 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/claim_id.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/claim_id.yaml @@ -1,24 +1,17 @@ -# Slot: claim_id -# Unique identifier for web claims with provenance - id: https://nde.nl/ontology/hc/slot/claim_id name: claim_id_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: claim_id: slot_uri: dcterms:identifier identifier: true range: uriorcurie - description: >- - Unique identifier for this web claim. - Used to reference specific claims in provenance chains. + description: Unique identifier for this web claim. Used to reference specific claims in provenance chains. + broad_mappings: + - dcterms:identifier diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/claim_type.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/claim_type.yaml index 6055f884b7..b58e19bf80 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/claim_type.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/claim_type.yaml @@ -1,23 +1,18 @@ -# Slot: claim_type -# Type classification for web claims - id: https://nde.nl/ontology/hc/slot/claim_type name: claim_type_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: claim_type: slot_uri: dcterms:type range: ClaimTypeEnum - description: >- - Type of claim being made (e.g., full_name, email, description). - Maps to ClaimTypeEnum enumeration. + description: Type of claim being made (e.g., full_name, email, description). Maps to ClaimTypeEnum enumeration. + close_mappings: + - dcterms:type + broad_mappings: + - dcterms:type diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/claim_value.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/claim_value.yaml index 81f4f76092..9f4053410e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/claim_value.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/claim_value.yaml @@ -1,23 +1,18 @@ -# Slot: claim_value -# The extracted value from a web claim - id: https://nde.nl/ontology/hc/slot/claim_value name: claim_value_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# - imports: - - linkml:types - +- linkml:types default_range: string - slots: claim_value: slot_uri: rdf:value range: string - description: >- - The extracted value from the web source. - This is the actual content claimed to exist at the XPath location. + description: The extracted value from the web source. This is the actual content claimed to exist at the XPath location. + close_mappings: + - rdf:value + broad_mappings: + - rdf:value diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/class_metadata_slots.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/class_metadata_slots.yaml index 1f184b4465..1482380daa 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/class_metadata_slots.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/class_metadata_slots.yaml @@ -220,8 +220,8 @@ slots: - UnspecifiedType (U) - MixedCustodianType (X) - **Note**: String values like '["A"]' are legacy format from migration. - Prefer URIs like 'hc:ArchiveOrganizationType' for new schemas. + **Format**: Use CustodianType class URIs like 'hc:ArchiveOrganizationType'. + All schemas have been migrated from legacy single-letter codes to proper URIs. range: uriorcurie multivalued: true inlined_as_list: true @@ -557,38 +557,15 @@ slots: # Collection Holdings Relationship (rico:isOrWasHolderOf) # --------------------------------------------------------------------------- - holds_record_set_types: - slot_uri: rico:isOrWasHolderOf - description: | - Links a custodian type to the record set types it typically holds. - Uses RiC-O property rico:isOrWasHolderOf to express custodial relationship. - - **Example** (AcademicArchive holdings): - - UniversityAdministrativeFonds - Governance, committee, policy records - - StudentRecordSeries - Enrollment, transcripts, graduation records - - FacultyPaperCollection - Personal papers of faculty members - - CampusDocumentationCollection - Photos, publications, ephemera - range: uriorcurie - multivalued: true - examples: - - value: '["hc:UniversityAdministrativeFonds", "hc:StudentRecordSeries", "hc:FacultyPaperCollection", "hc:CampusDocumentationCollection"]' - description: "Academic archive typical holdings" + # NOTE: holds_record_set_types is defined in ./holds_record_set_types.yaml + # DO NOT duplicate here - import that file instead # --------------------------------------------------------------------------- # RiC-O RecordSet Metadata (for RecordSetType classes) # --------------------------------------------------------------------------- - rico_record_set_type: - slot_uri: rico:hasRecordSetType - description: | - RiC-O RecordSetType classification for this collection type. - Values: Fonds, Series, File, Item, Collection, etc. - range: string - examples: - - value: "rico:Fonds" - description: "Archival fonds (organic whole)" - - value: "rico:Collection" - description: "Assembled collection" + # NOTE: rico_record_set_type is defined in ../slots/rico_record_set_type.yaml + # DO NOT duplicate here - import that file instead rico_organizational_principle: slot_uri: rico:hasOrHadAllMembersWithOrganizationalPrinciple @@ -606,7 +583,7 @@ slots: slot_uri: rico:hasOrHadAllMembersWithOrganizationalPrinciple description: | URI for the RiC-O organizational principle. - range: uriorcurie + range: string examples: - value: "rico:OrganizationalPrincipleProvenance" description: "RiC-O provenance principle" @@ -616,7 +593,7 @@ slots: description: | The custodian type(s) that typically hold this type of record set. Inverse of rico:isOrWasHolderOf. - range: uriorcurie + range: string multivalued: true examples: - value: "hc:AcademicArchive" @@ -684,19 +661,8 @@ slots: # Scope and Classification Metadata # --------------------------------------------------------------------------- - scope_includes: - slot_uri: skos:scopeNote - description: | - What is explicitly included in the scope of this class. - range: string - multivalued: true - - scope_excludes: - slot_uri: skos:scopeNote - description: | - What is explicitly excluded from the scope of this class. - range: string - multivalued: true + # NOTE: scope_includes and scope_excludes are defined in ./type_scope.yaml + # DO NOT duplicate here custodian_only: slot_uri: hc:custodianOnly @@ -705,12 +671,8 @@ slots: corresponding rico:RecordSetType collection class. range: boolean - custodian_type: - slot_uri: hc:custodianTypeNote - description: | - Note about the custodian type classification for this class. - Typically used when additional context is needed beyond custodian_types. - range: string + # NOTE: custodian_type is defined in ./custodian_type.yaml + # DO NOT duplicate here organizational_level: slot_uri: hc:organizationalLevel diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/collection_description.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/collection_description.yaml index aba64945a9..aeb51f883b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/collection_description.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/collection_description.yaml @@ -1,13 +1,17 @@ -# Custodian Slot: collection_description -# Narrative description of collection contents - id: https://nde.nl/ontology/hc/slot/collection_description name: collection_description_slot - slots: collection_description: slot_uri: dcterms:description range: string - description: | - Narrative description of the collection's contents, scope, and significance. + description: 'Narrative description of the collection''s contents, scope, and significance. + Dublin Core: description property for textual description. + + ' + close_mappings: + - schema:description + related_mappings: + - dcterms:description + broad_mappings: + - dcterms:description diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/collection_focus.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/collection_focus.yaml index 2c43a2ab1d..fdc95e7379 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/collection_focus.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/collection_focus.yaml @@ -1,28 +1,30 @@ -# Global slot definition for collection_focus -# Used by MuseumType and PersonalCollectionType - id: https://nde.nl/ontology/hc/slot/collection_focus name: collection_focus - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - slots: collection_focus: slot_uri: dcterms:subject - description: | - The primary subject areas, themes, or materials of collections. + description: 'The primary subject areas, themes, or materials of collections. + Applies to museums (art, history, science) and personal collections + (individual collector specializations). + + ' range: string multivalued: true required: false examples: - - value: "paintings" - - value: "sculptures" - - value: "historical artifacts" - - value: "natural specimens" - - value: "Dutch Golden Age paintings" - - value: "First edition literature" + - value: paintings + - value: sculptures + - value: historical artifacts + - value: natural specimens + - value: Dutch Golden Age paintings + - value: First edition literature + exact_mappings: + - dcterms:subject + close_mappings: + - schema:about diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/collection_id.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/collection_id.yaml new file mode 100644 index 0000000000..26e565ae14 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/collection_id.yaml @@ -0,0 +1,22 @@ +id: https://nde.nl/ontology/hc/slot/collection_id +name: collection_id +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + dcterms: http://purl.org/dc/terms/ +slots: + collection_id: + slot_uri: dcterms:identifier + description: 'Unique identifier for this specific collection. + + Format: URI following NDE Heritage Custodian ontology conventions. + + ' + range: uriorcurie + required: true + identifier: true + examples: + - value: https://nde.nl/ontology/hc/collection/nationaal-archief-voc-fonds + description: VOC fonds at the National Archives + broad_mappings: + - dcterms:identifier diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/collection_name.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/collection_name.yaml index 8192d6d208..4401531cd6 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/collection_name.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/collection_name.yaml @@ -1,19 +1,28 @@ -# Custodian Slot: collection_name -# Name of the heritage collection - id: https://nde.nl/ontology/hc/slot/collection_name name: collection_name_slot - slots: collection_name: slot_uri: dcterms:title range: string - description: | - Name of the heritage collection (may differ from custodian name). + description: 'Name of the heritage collection (may differ from custodian name). + Dublin Core: title property for collection name. - + + Examples: + - "Rijksmuseum Collection" + - "Notarial Archives of Amsterdam" + - "Wallace Collection" + - "Vatican Apostolic Library Holdings" + + ' + close_mappings: + - schema:name + related_mappings: + - dcterms:title + broad_mappings: + - rdfs:label diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/collection_scope.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/collection_scope.yaml index ddf1342cd7..921e718c3a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/collection_scope.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/collection_scope.yaml @@ -1,17 +1,25 @@ -# Custodian Slot: collection_scope -# Subject scope or thematic focus of collection - id: https://nde.nl/ontology/hc/slot/collection_scope name: collection_scope_slot - slots: collection_scope: slot_uri: dcterms:coverage range: string - description: | - Subject scope or thematic focus of collection. + description: 'Subject scope or thematic focus of collection. + Examples: + - "17th-century Dutch painting" + - "Municipal government records, 1578-present" + - "Medieval manuscripts" + - "East Asian art" + + ' + exact_mappings: + - dcterms:coverage + close_mappings: + - schema:about + broad_mappings: + - dcterms:coverage diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/collection_size.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/collection_size.yaml index 7164ee189e..04092bbcb7 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/collection_size.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/collection_size.yaml @@ -1,30 +1,28 @@ -# Global slot definition for collection_size -# Used by BioCustodianType and PersonalCollectionType - id: https://nde.nl/ontology/hc/slot/collection_size name: collection_size - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - slots: collection_size: slot_uri: schema:numberOfItems - description: | - Quantitative description of collection size. Can be expressed as number - of species, individuals, objects, items, or combined measures. - Applies to biological collections (species/individuals) and personal - collections (objects/items). + description: "Quantitative description of collection size. Can be expressed as number\nof species, individuals, objects,\ + \ items, or combined measures.\nApplies to biological collections (species/individuals) and personal \ncollections (objects/items).\n" range: string required: false examples: - - value: "More than 900 species, approximately 8,700 animals" - description: "Zoo collection size" - - value: "Over 50,000 living plants" - description: "Botanical garden collection size" - - value: "50+ paintings, Historical furniture, Family archives" - description: "Personal collection size" - - value: "5,000 rare books, 18th-19th century focus" - description: "Private library size" + - value: More than 900 species, approximately 8,700 animals + description: Zoo collection size + - value: Over 50,000 living plants + description: Botanical garden collection size + - value: 50+ paintings, Historical furniture, Family archives + description: Personal collection size + - value: 5,000 rare books, 18th-19th century focus + description: Private library size + exact_mappings: + - schema:numberOfItems + close_mappings: + - dcterms:extent + broad_mappings: + - dcterms:extent diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/collection_type.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/collection_type.yaml index 50fe84a65b..2262e8081b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/collection_type.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/collection_type.yaml @@ -1,25 +1,37 @@ -# Custodian Slot: collection_type -# Type(s) of heritage materials in collection - id: https://nde.nl/ontology/hc/slot/collection_type name: collection_type_slot - slots: collection_type: slot_uri: dcterms:type range: string multivalued: true - description: | - Type(s) of heritage materials in collection. + description: 'Type(s) of heritage materials in collection. + Multiple types may apply (e.g., archives + library). - + + Examples: + - "archival_records" (rico:RecordSet) + - "museum_objects" (crm:E78_Curated_Holding) + - "library_holdings" (bf:Collection) + - "monuments" (crm:E27_Site) + - "archaeological_materials" + - "natural_history_specimens" + - "digital_born" (born-digital collections) + - "photographs" + - "manuscripts" + + ' + close_mappings: + - dcterms:type + broad_mappings: + - dcterms:type diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/collection_type_ref.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/collection_type_ref.yaml new file mode 100644 index 0000000000..ae204dbe82 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/collection_type_ref.yaml @@ -0,0 +1,31 @@ +id: https://nde.nl/ontology/hc/slot/collection_type_ref +name: collection_type_ref +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + collection_type_ref: + slot_uri: rico:hasRecordSetType + description: 'Classification of this collection from CollectionType hierarchy. + + + RiC-O: hasRecordSetType links RecordSet to its classification. + + + Provides semantic classification (fonds, series, special collection, etc.) + + distinguishing this Collection from generic CustodianCollection references. + + ' + range: CollectionType + required: true + examples: + - value: https://nde.nl/ontology/hc/collection-type/fonds + description: Archival fonds + - value: https://nde.nl/ontology/hc/collection-type/special-collection + description: Library special collection + close_mappings: + - dcterms:type + broad_mappings: + - dcterms:references diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/collections_under_responsibility.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/collections_under_responsibility.yaml index f90ec14010..7263f2be81 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/collections_under_responsibility.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/collections_under_responsibility.yaml @@ -1,170 +1,77 @@ -# Collections Under Responsibility Slot -# Reverse relationship from CustodianLegalStatus to LegalResponsibilityCollection - id: https://nde.nl/ontology/hc/slot/collections_under_responsibility name: collections_under_responsibility_slot title: collections_under_responsibility Slot - prefixes: linkml: https://w3id.org/linkml/ tooi: https://identifier.overheid.nl/tooi/def/ont/ hc: https://nde.nl/ontology/hc/ - imports: - - linkml:types - - ../metadata - - ../classes/LegalResponsibilityCollection - +- linkml:types +- ../metadata +- ../classes/LegalResponsibilityCollection slots: collections_under_responsibility: slot_uri: tooi:heeft_informatieobject range: LegalResponsibilityCollection multivalued: true required: false - description: | - Collections (informatieobjecten) for which this legal entity bears formal legal responsibility. - - **TOOI Ontology Pattern**: - - Reverse of tooi:verantwoordelijke (responsible entity) - - tooi:heeft_informatieobject: "has information object" (custom reverse property) - - **Bidirectional Relationship**: - - **Forward**: LegalResponsibilityCollection → CustodianLegalStatus (responsible_legal_entity) - - **Reverse**: CustodianLegalStatus → LegalResponsibilityCollection (collections_under_responsibility) - - **Use Cases**: - 1. **Institutional Inventory**: "What collections is this organization legally responsible for?" - ```sparql - PREFIX hc: - SELECT ?collection ?collection_name - WHERE { - <.../legal/rijksmuseum-foundation> - hc:collections_under_responsibility ?collection . - ?collection hc:collection_name ?collection_name . - } - ``` - - 2. **Legal Audit**: "Which collections fall under this entity's legal mandate?" - - Query collections_under_responsibility to list all mandated holdings - - Check legal_responsibility_basis for statutory/contractual foundation - - 3. **Custody Transfer Impact**: "What happens to collections when entity dissolves?" - - When legal entity is dissolved, all collections_under_responsibility must transfer - - Track via OrganizationalChangeEvent (DISSOLUTION, MERGER, SPLIT) - - **Temporal Dimension**: - Collections under responsibility can change over time through: - - **Accession**: New collection added (new LegalResponsibilityCollection instance) - - **Deaccession**: Collection removed (set legal_responsibility_end_date) - - **Custody Transfer**: Responsibility transferred to another entity - - Old entity: legal_responsibility_end_date set - - New entity: new LegalResponsibilityCollection created - - **Organizational Merger**: Collections consolidated under successor entity - - Predecessor entities: legal_responsibility_end_date set - - Successor entity: new LegalResponsibilityCollection instances created - - **Examples**: - - ```yaml - # Example 1: Foundation with Museum Collection - CustodianLegalStatus: - id: "https://nde.nl/ontology/hc/legal/rijksmuseum-foundation" - legal_name: - full_name: "Stichting Rijksmuseum" - collections_under_responsibility: - - "https://nde.nl/ontology/hc/collection/rm-national-collection" - - "https://nde.nl/ontology/hc/collection/rm-prints-drawings" - - "https://nde.nl/ontology/hc/collection/rm-library" - - # Example 2: Archive Authority with Multiple Fonds - CustodianLegalStatus: - id: "https://nde.nl/ontology/hc/legal/nha-organization" - legal_name: - full_name: "Noord-Hollands Archief" - collections_under_responsibility: - - "https://nde.nl/ontology/hc/collection/nha-provincial-archive" - - "https://nde.nl/ontology/hc/collection/nha-haarlem-municipal" - - "https://nde.nl/ontology/hc/collection/nha-regional-archives" - - # Example 3: Custody Transfer - Before Merger (2000) - CustodianLegalStatus: - id: "https://nde.nl/ontology/hc/legal/haarlem-municipality-1990s" - legal_name: - full_name: "Gemeente Haarlem" - collections_under_responsibility: - - "https://nde.nl/ontology/hc/collection/haarlem-municipal-pre-2001" - dissolution_date: "2001-01-01" # Custody transferred to NHA - - # Example 3: Custody Transfer - After Merger (2001) - CustodianLegalStatus: - id: "https://nde.nl/ontology/hc/legal/nha-organization" - legal_name: - full_name: "Noord-Hollands Archief" - collections_under_responsibility: - # Inherited collections from predecessor entities - - "https://nde.nl/ontology/hc/collection/haarlem-municipal-post-2001" - - "https://nde.nl/ontology/hc/collection/nha-provincial-archive" - # Note: New LegalResponsibilityCollection instances created for transferred collections - ``` - - **Validation Rules**: - 1. **Temporal Consistency**: - - Collection.legal_responsibility_start_date >= CustodianLegalStatus.registration_date - - Collection.legal_responsibility_end_date <= CustodianLegalStatus.dissolution_date - - 2. **Bidirectional Integrity**: - - If CustodianLegalStatus.collections_under_responsibility includes CollectionX - - Then CollectionX.responsible_legal_entity MUST reference this CustodianLegalStatus - - 3. **Dissolution Requirement**: - - If CustodianLegalStatus has dissolution_date set - - All collections_under_responsibility MUST have legal_responsibility_end_date <= dissolution_date - - OR custody transfer documented via OrganizationalChangeEvent - - **SPARQL Query Patterns**: - - ```sparql - # Find all collections under legal responsibility of an organization - PREFIX tooi: - PREFIX hc: - PREFIX dcterms: - - SELECT ?collection ?collection_name ?legal_basis ?start_date - WHERE { - <.../legal/nha-organization> - hc:collections_under_responsibility ?collection . - - ?collection hc:collection_name ?collection_name ; - hc:legal_responsibility_basis ?legal_basis ; - hc:legal_responsibility_start_date ?start_date . - } - ORDER BY ?start_date - ``` - - ```sparql - # Find organizations responsible for specific types of collections - PREFIX hc: - PREFIX dcterms: - - SELECT ?organization ?org_name ?collection ?collection_name - WHERE { - ?organization a hc:CustodianLegalStatus ; - hc:legal_name/hc:full_name ?org_name ; - hc:collections_under_responsibility ?collection . - - ?collection hc:collection_type "archival_records" ; - hc:collection_name ?collection_name . - } - ``` - - **Notes**: - - Reverse relationship is optional (not all legal entities have collections) - - Collections may be managed by organizational units (managing_unit) while legal responsibility stays at top level - - During organizational restructuring, collections_under_responsibility may change but collection physical materials remain intact - + description: "Collections (informatieobjecten) for which this legal entity bears formal legal responsibility.\n\n**TOOI\ + \ Ontology Pattern**:\n- Reverse of tooi:verantwoordelijke (responsible entity)\n- tooi:heeft_informatieobject: \"has\ + \ information object\" (custom reverse property)\n\n**Bidirectional Relationship**:\n- **Forward**: LegalResponsibilityCollection\ + \ → CustodianLegalStatus (responsible_legal_entity)\n- **Reverse**: CustodianLegalStatus → LegalResponsibilityCollection\ + \ (collections_under_responsibility)\n\n**Use Cases**:\n1. **Institutional Inventory**: \"What collections is this organization\ + \ legally responsible for?\"\n ```sparql\n PREFIX hc: \n SELECT ?collection\ + \ ?collection_name\n WHERE {\n <.../legal/rijksmuseum-foundation> \n hc:collections_under_responsibility\ + \ ?collection .\n ?collection hc:collection_name ?collection_name .\n }\n ```\n\n2. **Legal Audit**: \"Which\ + \ collections fall under this entity's legal mandate?\"\n - Query collections_under_responsibility to list all mandated\ + \ holdings\n - Check legal_responsibility_basis for statutory/contractual foundation\n\n3. **Custody Transfer Impact**:\ + \ \"What happens to collections when entity dissolves?\"\n - When legal entity is dissolved, all collections_under_responsibility\ + \ must transfer\n - Track via OrganizationalChangeEvent (DISSOLUTION, MERGER, SPLIT)\n\n**Temporal Dimension**:\n\ + Collections under responsibility can change over time through:\n- **Accession**: New collection added (new LegalResponsibilityCollection\ + \ instance)\n- **Deaccession**: Collection removed (set legal_responsibility_end_date)\n- **Custody Transfer**: Responsibility\ + \ transferred to another entity\n - Old entity: legal_responsibility_end_date set\n - New entity: new LegalResponsibilityCollection\ + \ created\n- **Organizational Merger**: Collections consolidated under successor entity\n - Predecessor entities: legal_responsibility_end_date\ + \ set\n - Successor entity: new LegalResponsibilityCollection instances created\n\n**Examples**:\n\n```yaml\n# Example\ + \ 1: Foundation with Museum Collection\nCustodianLegalStatus:\n id: \"https://nde.nl/ontology/hc/legal/rijksmuseum-foundation\"\ + \n legal_name:\n full_name: \"Stichting Rijksmuseum\"\n collections_under_responsibility:\n - \"https://nde.nl/ontology/hc/collection/rm-national-collection\"\ + \n - \"https://nde.nl/ontology/hc/collection/rm-prints-drawings\"\n - \"https://nde.nl/ontology/hc/collection/rm-library\"\ + \n\n# Example 2: Archive Authority with Multiple Fonds\nCustodianLegalStatus:\n id: \"https://nde.nl/ontology/hc/legal/nha-organization\"\ + \n legal_name:\n full_name: \"Noord-Hollands Archief\"\n collections_under_responsibility:\n - \"https://nde.nl/ontology/hc/collection/nha-provincial-archive\"\ + \n - \"https://nde.nl/ontology/hc/collection/nha-haarlem-municipal\"\n - \"https://nde.nl/ontology/hc/collection/nha-regional-archives\"\ + \n\n# Example 3: Custody Transfer - Before Merger (2000)\nCustodianLegalStatus:\n id: \"https://nde.nl/ontology/hc/legal/haarlem-municipality-1990s\"\ + \n legal_name:\n full_name: \"Gemeente Haarlem\"\n collections_under_responsibility:\n - \"https://nde.nl/ontology/hc/collection/haarlem-municipal-pre-2001\"\ + \n dissolution_date: \"2001-01-01\" # Custody transferred to NHA\n\n# Example 3: Custody Transfer - After Merger (2001)\n\ + CustodianLegalStatus:\n id: \"https://nde.nl/ontology/hc/legal/nha-organization\"\n legal_name:\n full_name: \"\ + Noord-Hollands Archief\"\n collections_under_responsibility:\n # Inherited collections from predecessor entities\n\ + \ - \"https://nde.nl/ontology/hc/collection/haarlem-municipal-post-2001\"\n - \"https://nde.nl/ontology/hc/collection/nha-provincial-archive\"\ + \n # Note: New LegalResponsibilityCollection instances created for transferred collections\n```\n\n**Validation Rules**:\n\ + 1. **Temporal Consistency**:\n - Collection.legal_responsibility_start_date >= CustodianLegalStatus.registration_date\n\ + \ - Collection.legal_responsibility_end_date <= CustodianLegalStatus.dissolution_date\n\n2. **Bidirectional Integrity**:\n\ + \ - If CustodianLegalStatus.collections_under_responsibility includes CollectionX\n - Then CollectionX.responsible_legal_entity\ + \ MUST reference this CustodianLegalStatus\n\n3. **Dissolution Requirement**:\n - If CustodianLegalStatus has dissolution_date\ + \ set\n - All collections_under_responsibility MUST have legal_responsibility_end_date <= dissolution_date\n - OR\ + \ custody transfer documented via OrganizationalChangeEvent\n\n**SPARQL Query Patterns**:\n\n```sparql\n# Find all collections\ + \ under legal responsibility of an organization\nPREFIX tooi: \nPREFIX\ + \ hc: \nPREFIX dcterms: \n\nSELECT ?collection ?collection_name\ + \ ?legal_basis ?start_date\nWHERE {\n <.../legal/nha-organization> \n hc:collections_under_responsibility ?collection\ + \ .\n \n ?collection hc:collection_name ?collection_name ;\n hc:legal_responsibility_basis ?legal_basis\ + \ ;\n hc:legal_responsibility_start_date ?start_date .\n}\nORDER BY ?start_date\n```\n\n```sparql\n# Find\ + \ organizations responsible for specific types of collections\nPREFIX hc: \nPREFIX\ + \ dcterms: \n\nSELECT ?organization ?org_name ?collection ?collection_name\nWHERE {\n ?organization\ + \ a hc:CustodianLegalStatus ;\n hc:legal_name/hc:full_name ?org_name ;\n hc:collections_under_responsibility\ + \ ?collection .\n \n ?collection hc:collection_type \"archival_records\" ;\n hc:collection_name ?collection_name\ + \ .\n}\n```\n\n**Notes**:\n- Reverse relationship is optional (not all legal entities have collections)\n- Collections\ + \ may be managed by organizational units (managing_unit) while legal responsibility stays at top level\n- During organizational\ + \ restructuring, collections_under_responsibility may change but collection physical materials remain intact\n" examples: - - value: ["https://nde.nl/ontology/hc/collection/rm-national-collection", "https://nde.nl/ontology/hc/collection/rm-library"] - description: "Rijksmuseum foundation responsible for National Collection and Library" - - - value: ["https://nde.nl/ontology/hc/collection/nha-provincial-archive"] - description: "Noord-Hollands Archief responsible for Provincial Archive" + - value: + - https://nde.nl/ontology/hc/collection/rm-national-collection + - https://nde.nl/ontology/hc/collection/rm-library + description: Rijksmuseum foundation responsible for National Collection and Library + - value: + - https://nde.nl/ontology/hc/collection/nha-provincial-archive + description: Noord-Hollands Archief responsible for Provincial Archive + close_mappings: + - rico:hasOrIsHeldBy + related_mappings: + - schema:collection diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/confidence.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/confidence.yaml index 5a16569b1c..e52b8d1b6c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/confidence.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/confidence.yaml @@ -1,25 +1,20 @@ -# Slot: confidence -# Confidence score for extracted/inferred data (0.0-1.0) - id: https://nde.nl/ontology/hc/slot/confidence name: confidence_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: confidence: slot_uri: hc:confidence - description: >- - Confidence score for extracted or inferred data. - Range is 0.0-1.0 where 1.0 indicates highest confidence. + description: Confidence score for extracted or inferred data. Range is 0.0-1.0 where 1.0 indicates highest confidence. Used for AI-generated content, NER extraction, and automated enrichment. range: float minimum_value: 0.0 maximum_value: 1.0 + close_mappings: + - prov:value + related_mappings: + - schema:ratingValue diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/confidence_method.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/confidence_method.yaml index de58aac729..454407ffdb 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/confidence_method.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/confidence_method.yaml @@ -1,11 +1,11 @@ -# ConfidenceMeasure Slot: confidence_method -# Method used to determine confidence - id: https://nde.nl/ontology/hc/slot/confidence_method name: confidence_method_slot - slots: confidence_method: slot_uri: prov:hadPlan range: string - description: "Method used to determine confidence" + description: Method used to determine confidence + close_mappings: + - prov:wasGeneratedBy + broad_mappings: + - prov:wasGeneratedBy diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/confidence_score.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/confidence_score.yaml index dd8d2624cd..6f043d37a9 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/confidence_score.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/confidence_score.yaml @@ -1,13 +1,13 @@ -# CustodianObservation Slot: confidence_score -# Confidence in observation accuracy - id: https://nde.nl/ontology/hc/slot/confidence_score name: confidence_score_slot - slots: confidence_score: slot_uri: prov:confidence range: float minimum_value: 0.0 maximum_value: 1.0 - description: "Confidence in observation accuracy (0.0 = uncertain, 1.0 = certain)" + description: Confidence in observation accuracy (0.0 = uncertain, 1.0 = certain) + related_mappings: + - prov:value + broad_mappings: + - prov:value diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/confidence_value.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/confidence_value.yaml index 5d51dd3143..6de112b42c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/confidence_value.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/confidence_value.yaml @@ -1,13 +1,13 @@ -# ConfidenceMeasure Slot: confidence_value -# Confidence score (0.0-1.0) - id: https://nde.nl/ontology/hc/slot/confidence_value name: confidence_value_slot - slots: confidence_value: slot_uri: rdf:value range: float minimum_value: 0.0 maximum_value: 1.0 - description: "Confidence score (0.0-1.0)" + description: Confidence score (0.0-1.0) + close_mappings: + - prov:value + broad_mappings: + - rdf:value diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/conflict_status.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/conflict_status.yaml index 64bd68b923..649042d044 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/conflict_status.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/conflict_status.yaml @@ -1,128 +1,59 @@ -# Custodian Slot: conflict_status -# Links a heritage custodian to its conflict/disaster impact status - id: https://nde.nl/ontology/hc/slot/conflict_status name: conflict_status_slot title: Conflict Status Slot - imports: - - linkml:types - - ../classes/ConflictStatus - +- linkml:types +- ../classes/ConflictStatus prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ crm: http://www.cidoc-crm.org/cidoc-crm/ - slots: conflict_status: slot_uri: hc:hasConflictStatus range: ConflictStatus - description: | - Status of the heritage custodian regarding conflict or disaster impact. - - **PURPOSE**: - Documents whether a heritage institution has been affected by: - - Armed conflict (Gaza, Syria, Ukraine, Iraq, Yemen) - - Natural disasters (earthquakes, floods, fires) - - Deliberate destruction (heritage crimes, arson) - - State actions (forced demolition, closure) - - **WHEN TO USE**: - Use `conflict_status` when: - - Institution was destroyed or damaged involuntarily - - Destruction was due to external forces (not planned dissolution) - - There is documentary evidence (reports, news, official statements) - - **WHEN NOT TO USE**: - - Normal organizational dissolution → use `temporal_extent.end_of_the_end` - - Planned closure or merger → use `OrganizationalChangeEvent` - - Temporary closure (renovation, COVID) → use operational_status - - **RELATIONSHIP TO time_of_destruction**: - Both slots should be populated for destroyed/damaged institutions: - - ```yaml - # conflict_status: Summary with sources - conflict_status: - status: destroyed - date: "2023-12-08" - description: "Destroyed by airstrike" - sources: - - "LAP Gaza Report 2024" - - # time_of_destruction: Detailed TimeSpan with fuzzy bounds - time_of_destruction: - begin_of_the_begin: "2023-12-08" - end_of_the_end: "2023-12-08" - ``` - - **DATA PIPELINE**: - 1. `scripts/convert_palestinian_to_custodian.py` - Extracts conflict_status - 2. `scripts/load_custodians_to_ducklake.py` - Loads as JSON column - 3. `frontend/src/hooks/useDuckLakeInstitutions.ts` - Parses for display - 4. `frontend/src/components/map/CustodianTimeline.tsx` - Renders destruction event - - **FRONTEND DISPLAY**: - - Timeline shows "💥 Vernietigd: {year}" for destroyed institutions - - Timeline shows "💥 Vernietigd (herbouwend): {year}" when is_rebuilding=true - - Color: Dark red (#8b0000) for destroyed+defunct, orange for rebuilding - - Destruction description shown in expandable section - - **GAZA 2023-2024 STATISTICS**: - - 30 institutions with conflict_status in dataset - - All 30 have destruction dates - - 27 West Bank institutions without conflict_status (not destroyed) - - **EXAMPLE - Destroyed Library**: - ```yaml - custodian_name: - emic_name: Great Omari Mosque Library - conflict_status: - status: destroyed - date: "2023-12-08" - reported_date: "2024-01-15" - description: >- - Historic mosque library destroyed by Israeli airstrike. - Contained rare Islamic manuscripts and Quran collections. - is_rebuilding: false - sources: - - "Librarians and Archivists with Palestine - Gaza Report 2024" - - "Palestinian Ministry of Culture damage assessment" - ``` - + description: "Status of the heritage custodian regarding conflict or disaster impact.\n\n**PURPOSE**:\nDocuments whether\ + \ a heritage institution has been affected by:\n- Armed conflict (Gaza, Syria, Ukraine, Iraq, Yemen)\n- Natural disasters\ + \ (earthquakes, floods, fires)\n- Deliberate destruction (heritage crimes, arson)\n- State actions (forced demolition,\ + \ closure)\n\n**WHEN TO USE**:\nUse `conflict_status` when:\n- Institution was destroyed or damaged involuntarily\n\ + - Destruction was due to external forces (not planned dissolution)\n- There is documentary evidence (reports, news,\ + \ official statements)\n\n**WHEN NOT TO USE**:\n- Normal organizational dissolution → use `temporal_extent.end_of_the_end`\n\ + - Planned closure or merger → use `OrganizationalChangeEvent`\n- Temporary closure (renovation, COVID) → use operational_status\n\ + \n**RELATIONSHIP TO time_of_destruction**:\nBoth slots should be populated for destroyed/damaged institutions:\n\n```yaml\n\ + # conflict_status: Summary with sources\nconflict_status:\n status: destroyed\n date: \"2023-12-08\"\n description:\ + \ \"Destroyed by airstrike\"\n sources:\n - \"LAP Gaza Report 2024\"\n\n# time_of_destruction: Detailed TimeSpan\ + \ with fuzzy bounds\ntime_of_destruction:\n begin_of_the_begin: \"2023-12-08\"\n end_of_the_end: \"2023-12-08\"\n\ + ```\n\n**DATA PIPELINE**:\n1. `scripts/convert_palestinian_to_custodian.py` - Extracts conflict_status\n2. `scripts/load_custodians_to_ducklake.py`\ + \ - Loads as JSON column\n3. `frontend/src/hooks/useDuckLakeInstitutions.ts` - Parses for display\n4. `frontend/src/components/map/CustodianTimeline.tsx`\ + \ - Renders destruction event\n\n**FRONTEND DISPLAY**:\n- Timeline shows \"\U0001F4A5 Vernietigd: {year}\" for destroyed\ + \ institutions\n- Timeline shows \"\U0001F4A5 Vernietigd (herbouwend): {year}\" when is_rebuilding=true\n- Color: Dark\ + \ red (#8b0000) for destroyed+defunct, orange for rebuilding\n- Destruction description shown in expandable section\n\ + \n**GAZA 2023-2024 STATISTICS**:\n- 30 institutions with conflict_status in dataset\n- All 30 have destruction dates\n\ + - 27 West Bank institutions without conflict_status (not destroyed)\n\n**EXAMPLE - Destroyed Library**:\n```yaml\ncustodian_name:\n\ + \ emic_name: Great Omari Mosque Library\nconflict_status:\n status: destroyed\n date: \"2023-12-08\"\n reported_date:\ + \ \"2024-01-15\"\n description: >-\n Historic mosque library destroyed by Israeli airstrike.\n Contained rare\ + \ Islamic manuscripts and Quran collections.\n is_rebuilding: false\n sources:\n - \"Librarians and Archivists\ + \ with Palestine - Gaza Report 2024\"\n - \"Palestinian Ministry of Culture damage assessment\"\n```\n" exact_mappings: - - crm:P4_has_time-span + - crm:P4_has_time-span related_mappings: - - crm:E6_Destruction - - crm:E11_Modification - + - crm:E6_Destruction + - crm:E11_Modification + - schema:status examples: - - value: | - conflict_status: - status: destroyed - date: "2023-12-08" - description: "Destroyed by Israeli airstrike during Gaza conflict" - sources: - - "LAP Gaza Report 2024" - description: "Gaza library destroyed in December 2023" - - - value: | - conflict_status: - status: damaged - date: "2022-03-01" - is_rebuilding: true - description: "Damaged by shelling, currently under restoration" - sources: - - "UNESCO Ukraine heritage monitoring" - description: "Ukrainian museum damaged but rebuilding" - + - value: "conflict_status:\n status: destroyed\n date: \"2023-12-08\"\n description: \"Destroyed by Israeli airstrike\ + \ during Gaza conflict\"\n sources:\n - \"LAP Gaza Report 2024\"\n" + description: Gaza library destroyed in December 2023 + - value: "conflict_status:\n status: damaged\n date: \"2022-03-01\"\n is_rebuilding: true\n description: \"Damaged\ + \ by shelling, currently under restoration\"\n sources:\n - \"UNESCO Ukraine heritage monitoring\"\n" + description: Ukrainian museum damaged but rebuilding comments: - - "Used for Gaza 2023-2024 documentation (30 institutions)" - - "Complements time_of_destruction slot for temporal details" - - "Displayed in CustodianTimeline component" - + - Used for Gaza 2023-2024 documentation (30 institutions) + - Complements time_of_destruction slot for temporal details + - Displayed in CustodianTimeline component see_also: - - hc:time_of_destruction - - hc:ConflictStatus - - hc:ConflictStatusEnum + - hc:time_of_destruction + - hc:ConflictStatus + - hc:ConflictStatusEnum + broad_mappings: + - adms:status diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/conservation_lab.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/conservation_lab.yaml index 1cae0fde30..fb358a75f3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/conservation_lab.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/conservation_lab.yaml @@ -2,21 +2,19 @@ id: https://nde.nl/ontology/hc/slot/conservation_lab name: conservation_lab_slot title: Conservation Lab Slot description: Shared slot for conservation laboratory information across heritage custodian entities - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: conservation_lab: description: Conservation laboratory information (location, name, or boolean indicating presence) range: string slot_uri: schema:location comments: - - "Classes may override range in slot_usage (e.g., boolean for MuseumType)" + - Classes may override range in slot_usage (e.g., boolean for MuseumType) + related_mappings: + - schema:location diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/contact.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/contact.yaml index 03568aabe7..e7a8ade8c5 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/contact.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/contact.yaml @@ -1,10 +1,8 @@ -# ReconstructionAgent Slot: contact -# Contact information for reconstruction agent - id: https://nde.nl/ontology/hc/slot/contact name: contact_slot - slots: contact: slot_uri: foaf:mbox range: string + exact_mappings: + - schema:contactPoint diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/contact_email.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/contact_email.yaml index 435e1a1dba..4dfc8a73cb 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/contact_email.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/contact_email.yaml @@ -1,13 +1,16 @@ id: https://nde.nl/ontology/hc/slot/contact_email name: contact_email title: Contact Email - imports: - - linkml:types - +- linkml:types slots: contact_email: slot_uri: schema:email description: Professional contact email (if publicly available) range: string - pattern: "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$" + pattern: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ + exact_mappings: + - schema:email + - vcard:hasEmail + broad_mappings: + - schema:email diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/contact_point.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/contact_point.yaml index 0fdbab16db..f9a9f34b10 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/contact_point.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/contact_point.yaml @@ -1,14 +1,15 @@ -# OrganizationalStructure Slot: contact_point id: https://nde.nl/ontology/hc/slot/contact_point name: contact_point_slot - slots: contact_point: slot_uri: schema:contactPoint range: string - description: | - Contact information for unit (email, phone, URL). + description: 'Contact information for unit (email, phone, URL). + Future: structure as vCard. + + ' exact_mappings: - - vcard:email - - vcard:hasTelephone + - vcard:email + - vcard:hasTelephone + - schema:contactPoint diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/content_hash.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/content_hash.yaml index 94c1789bde..7f3f7dec61 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/content_hash.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/content_hash.yaml @@ -1,42 +1,46 @@ -# Slot: content_hash -# SHA-256 hash for content integrity verification - id: https://nde.nl/ontology/hc/slot/content_hash name: content_hash title: Content Hash - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ spdx: http://spdx.org/rdf/terms# - imports: - - linkml:types - +- linkml:types slots: content_hash: slot_uri: spdx:checksumValue - description: | - SHA-256 hash of content for integrity verification. - + description: 'SHA-256 hash of content for integrity verification. + + **PURPOSE**: + Enables verification that content has not changed since observation. + Used for deduplication and change detection. - + + **FORMAT OPTIONS**: + - SRI format: sha256-{base64_hash} (for web content) + - Hex format: {64_hex_chars} (for file content) - + + **USAGE**: + - WebObservation: Hash of retrieved HTML/content + - MissionStatement: Hash of statement text + - Any content requiring integrity verification + + ' range: string - exact_mappings: - - spdx:checksumValue - + - spdx:checksumValue + - dcat:checksum comments: - - "SHA-256 provides collision resistance for content verification" - - "SRI format preferred for web content (sha256-{base64})" - - "Hex format acceptable for file content" + - SHA-256 provides collision resistance for content verification + - SRI format preferred for web content (sha256-{base64}) + - Hex format acceptable for file content diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/cost_usd.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/cost_usd.yaml index dd1209e2bd..e49a63660a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/cost_usd.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/cost_usd.yaml @@ -1,22 +1,18 @@ -# Slot: cost_usd -# API cost in USD for operations - id: https://nde.nl/ontology/hc/slot/cost_usd name: cost_usd_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: cost_usd: - description: | - API cost in USD for an operation (LLM call, extraction, etc.). + description: 'API cost in USD for an operation (LLM call, extraction, etc.). + + ' slot_uri: schema:price range: float + close_mappings: + - schema:price diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/country.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/country.yaml index c8bc832323..e71bb0cdde 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/country.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/country.yaml @@ -1,37 +1,48 @@ -# country slot - ISO 3166-1 country reference - id: https://nde.nl/ontology/hc/slot/country name: country title: Country Slot +description: 'Country where entity is located or operates. + -description: | - Country where entity is located or operates. - Links to Country class with ISO 3166-1 alpha-2 codes. - + + Format: ISO 3166-1 alpha-2 code (e.g., "NL", "DE", "JP") - + + Use when: + - Place is in a specific country + - Legal form is jurisdiction-specific + - Feature types are country-specific - + + Examples: + - Netherlands museum → country.alpha_2 = "NL" + - Japanese archive → country.alpha_2 = "JP" + - German foundation → country.alpha_2 = "DE" + ' slots: country: slot_uri: schema:addressCountry range: Country required: false multivalued: false - description: | - Country where entity is located or operates. + description: 'Country where entity is located or operates. + Links to Country class with ISO 3166-1 alpha-2 codes. + ' + exact_mappings: + - schema:addressCountry + - vcard:country-name comments: - - "Uses Country class with ISO 3166-1 alpha-2/alpha-3 codes" - - "ISO codes are authoritative, stable, and language-neutral" - - "Country names should be resolved via external services (GeoNames, UN M49)" +- Uses Country class with ISO 3166-1 alpha-2/alpha-3 codes +- ISO codes are authoritative, stable, and language-neutral +- Country names should be resolved via external services (GeoNames, UN M49) diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/created.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/created.yaml index 5133d2445d..8ae149ab8a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/created.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/created.yaml @@ -1,14 +1,16 @@ -# Base Slot: created -# Database record creation timestamp - id: https://nde.nl/ontology/hc/slot/created name: created_slot - slots: created: slot_uri: schema:dateCreated range: datetime - description: | - Timestamp when this database record was created. - IMPORTANT: This is NOT the custodian's founding date - it's metadata about the digital record. + description: 'Timestamp when this database record was created. + + IMPORTANT: This is NOT the custodian''s founding date - it''s metadata about the digital record. + Use CustodianLegalStatus.registration_date for entity founding date. + + ' + exact_mappings: + - dcterms:created + - schema:dateCreated diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/creator.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/creator.yaml index 730d38ff1d..187569400a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/creator.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/creator.yaml @@ -1,24 +1,18 @@ -# Slot: creator -# Creator or author of a resource - id: https://nde.nl/ontology/hc/slot/creator name: creator_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: creator: slot_uri: dcterms:creator range: string multivalued: true - description: >- - Person or organization responsible for creating the resource. - Uses Dublin Core Terms vocabulary. + description: Person or organization responsible for creating the resource. Uses Dublin Core Terms vocabulary. + exact_mappings: + - dcterms:creator + - schema:creator diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/css_selector.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/css_selector.yaml index dba42c737d..8a6aafe63a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/css_selector.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/css_selector.yaml @@ -1,22 +1,15 @@ -# Slot: css_selector -# CSS selector pointing to element in HTML - id: https://nde.nl/ontology/hc/slot/css_selector name: css_selector_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: css_selector: - description: >- - CSS selector pointing to the element in HTML. - Alternative to xpath for element identification. + description: CSS selector pointing to the element in HTML. Alternative to xpath for element identification. slot_uri: hc:cssSelector range: string + related_mappings: + - prov:atLocation diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/curation_activities.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/curation_activities.yaml new file mode 100644 index 0000000000..d838453753 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/curation_activities.yaml @@ -0,0 +1,28 @@ +id: https://nde.nl/ontology/hc/slot/curation_activities +name: curation_activities +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + crm: http://www.cidoc-crm.org/cidoc-crm/ +slots: + curation_activities: + slot_uri: crm:P147i_was_curated_by + description: 'Ongoing curation activities performed on this collection. + + + CIDOC-CRM: P147i_was_curated_by for curation relationships. + + + Links collection to digitization projects, conservation efforts, + + cataloging initiatives, and other curation work. + + ' + range: CurationActivity + multivalued: true + required: false + examples: + - value: https://nde.nl/ontology/hc/activity/voc-digitization-2020 + description: VOC digitization project + close_mappings: + - prov:Activity diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/custodial_history.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/custodial_history.yaml new file mode 100644 index 0000000000..5764125a50 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/custodial_history.yaml @@ -0,0 +1,26 @@ +id: https://nde.nl/ontology/hc/slot/custodial_history +name: custodial_history +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + custodial_history: + slot_uri: rico:history + description: 'Chain of custody documentation. + + + RiC-O: history for custodial events. + + + Records transfers, ownership changes, and custody events. + + ' + range: string + multivalued: true + required: false + examples: + - value: Transferred from VOC to Dutch state in 1799 + description: Custody transfer event + exact_mappings: + - dcterms:provenance diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/custodian_names.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/custodian_names.yaml index 3d48d9938e..81ccf536d6 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/custodian_names.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/custodian_names.yaml @@ -1,14 +1,12 @@ -# custodian_names slot -# Links Container to CustodianName entities - id: https://nde.nl/ontology/hc/slot/custodian_names name: custodian_names - slots: custodian_names: slot_uri: rdfs:member - description: "Collection of custodian standardized names in the container" + description: Collection of custodian standardized names in the container range: CustodianName multivalued: true exact_mappings: - - ldp:contains + - ldp:contains + close_mappings: + - skos:prefLabel diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/custodian_observations.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/custodian_observations.yaml index 189825e186..a78cc7a80d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/custodian_observations.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/custodian_observations.yaml @@ -1,14 +1,14 @@ -# custodian_observations slot -# Links Container to CustodianObservation entities - id: https://nde.nl/ontology/hc/slot/custodian_observations name: custodian_observations - slots: custodian_observations: slot_uri: rdfs:member - description: "Collection of custodian observations in the container" + description: Collection of custodian observations in the container range: CustodianObservation multivalued: true exact_mappings: - - ldp:contains + - ldp:contains + related_mappings: + - prov:Entity + broad_mappings: + - prov:Entity diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/custodian_type.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/custodian_type.yaml index dd61bfd4f5..e5d17e507b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/custodian_type.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/custodian_type.yaml @@ -1,195 +1,89 @@ id: https://nde.nl/ontology/hc/slot/custodian_type name: custodian_type title: Custodian Type Classification - imports: - - linkml:types - - ../classes/CustodianType - -description: | - The organizational type classification of a heritage custodian within the - GLAMORCUBESFIXPHDNT taxonomy (19 categories). - - **Three-Layer Ontology Alignment**: - - 1. **W3C Organization Ontology** (PRIMARY): - - `org:classification` - Standard property for organizational taxonomies - - Domain: org:Organization - - Range: skos:Concept - - Definition: "Indicates a classification for this Organization within some - classification scheme. Extension vocabularies may wish to specialize this - property to have a range corresponding to a specific skos:ConceptScheme." - - Source: `/data/ontology/org.rdf` - - 2. **CIDOC-CRM** (DOMAIN-SPECIFIC): - - `crm:P2_has_type` - Cultural heritage domain type assignment - - Domain: crm:E1_CRM_Entity - - Range: crm:E55_Type - - Definition: "This property allows sub typing of CRM entities through the - use of a terminological hierarchy or thesaurus." - - Source: `/data/ontology/CIDOC_CRM_v7.1.3.rdf` - - 3. **Schema.org** (WEB DISCOVERABILITY): - - `schema:additionalType` - Wikidata entity linking - - Range: schema:URL - - Definition: "An additional type for the item, typically used for adding - more specific types from external vocabularies." - - Source: `/data/ontology/schemaorg.owl` - - **Why org:classification is Primary**: - - ✅ Standard W3C vocabulary widely adopted in public sector - - ✅ SKOS-based with taxonomic hierarchies (skos:broader, skos:narrower) - - ✅ Extension-friendly for domain-specific classification schemes - - ✅ Already used in heritage sector (ROV uses rov:orgType as subproperty) - - ✅ More semantically precise than crm:P2_has_type (which applies to ALL CRM entities) - - **Why crm:P2_has_type is Secondary**: - - Used for cultural heritage domain modeling alignment - - Supports E17_Type_Assignment for provenance of classification - - Broader scope (applies to E1_CRM_Entity, not just organizations) - - **Why schema:additionalType is Tertiary**: - - Enables web discoverability and SEO optimization - - Links to Wikidata Q-numbers for Linked Open Data integration - - Supports multiple simultaneous type assertions - - **GLAMORCUBESFIXPHDNT Taxonomy (19 Types)**: - - **G** - GALLERY: Art gallery or exhibition space - - **L** - LIBRARY: Library (public, academic, specialized) - - **A** - ARCHIVE: Archive (government, corporate, personal) - - **M** - MUSEUM: Museum (art, history, science, etc.) - - **O** - OFFICIAL_INSTITUTION: Government heritage agencies - - **R** - RESEARCH_CENTER: Research institutes and documentation centers - - **C** - COMMERCIAL: Corporate heritage collections - - **U** - UNSPECIFIED: Institution type unknown (data quality flag) - - **B** - BIO_CUSTODIAN: Botanical gardens, zoos, aquariums - - **E** - EDUCATION_PROVIDER: Universities, schools with collections - - **S** - HERITAGE_SOCIETY: Historical societies, collecting societies - - **F** - FEATURE_CUSTODIAN: Geographic features AS custodians (special case) - - **I** - INTANGIBLE_HERITAGE_GROUP: Folklore, oral history organizations - - **X** - MIXED: Multiple simultaneous types - - **P** - PERSONAL_COLLECTION: Private collectors - - **H** - HOLY_SACRED_SITE: Religious sites with heritage collections - - **D** - DIGITAL_PLATFORM: Online archives, digital libraries - - **N** - NON_PROFIT: NGOs, heritage advocacy organizations - - **T** - TASTE_SCENT_HERITAGE: Culinary, olfactory heritage preservation - - **RDF Serialization Example**: - ```turtle - :Custodian_Rijksmuseum - org:classification :MuseumType_ArtMuseum_Q207694 . - - :MuseumType_ArtMuseum_Q207694 - a glamtype:MuseumType, crm:E55_Type, skos:Concept ; - skos:prefLabel "Art Museum"@en, "kunstmuseum"@nl ; - skos:broader :MuseumType_Q33506 ; # Museum (general) - schema:additionalType ; - glamtype:wikidata_entity "Q207694" . - ``` - - **Relationship to CustodianLegalStatus**: - - custodian_type (on Custodian): OPERATIONAL type classification - (how the organization functions in the heritage ecosystem) - - legal_form (on CustodianLegalStatus): LEGAL registration type - (ISO 20275 codes: foundation, association, corporation, government agency) - - **Example - Dutch Foundation Operating Art Museum**: - ```yaml - Custodian: - hc_id: "https://nde.nl/ontology/hc/nl-nh-ams-m-sm-q621531" - custodian_type: # OPERATIONAL classification - type_id: "https://nde.nl/ontology/hc/type/museum/Q207694" - primary_type: MUSEUM - wikidata_entity: Q207694 # Art museum - legal_status: # LEGAL registration - legal_form: - form_id: ISO_20275_8102 # Stichting (foundation) - ``` - - **Special Case - FEATURE_CUSTODIAN**: - This is the ONLY CustodianType that ALSO links to FeaturePlace. Used when the - heritage custodian IS a geographic feature (e.g., historic mansion as museum). - ```yaml - Custodian: - custodian_type: - primary_type: FEATURE_CUSTODIAN - wikidata_entity: Q1802963 # Mansion - place_designation: - custodian_place: - id: ".../place/mansion-site" - a: FeaturePlace - place_type: MANSION # From FeaturePlaceTypeEnum - ``` - - **Data Population Strategy**: - Enum values extracted from: - - `data/wikidata/GLAMORCUBEPSXHFN/hyponyms_curated_full.yaml` - - 2,455+ Wikidata entities with multilingual labels - - Hierarchical relationships (broader/narrower concepts) - - Geographic restrictions (country-specific types) - +- linkml:types +- ../classes/CustodianType +description: "The organizational type classification of a heritage custodian within the \nGLAMORCUBESFIXPHDNT taxonomy (19\ + \ categories).\n\n**Three-Layer Ontology Alignment**:\n\n1. **W3C Organization Ontology** (PRIMARY):\n - `org:classification`\ + \ - Standard property for organizational taxonomies\n - Domain: org:Organization\n - Range: skos:Concept\n - Definition:\ + \ \"Indicates a classification for this Organization within some \n classification scheme. Extension vocabularies may\ + \ wish to specialize this \n property to have a range corresponding to a specific skos:ConceptScheme.\"\n - Source:\ + \ `/data/ontology/org.rdf`\n\n2. **CIDOC-CRM** (DOMAIN-SPECIFIC):\n - `crm:P2_has_type` - Cultural heritage domain type\ + \ assignment\n - Domain: crm:E1_CRM_Entity\n - Range: crm:E55_Type\n - Definition: \"This property allows sub typing\ + \ of CRM entities through the \n use of a terminological hierarchy or thesaurus.\"\n - Source: `/data/ontology/CIDOC_CRM_v7.1.3.rdf`\n\ + \n3. **Schema.org** (WEB DISCOVERABILITY):\n - `schema:additionalType` - Wikidata entity linking\n - Range: schema:URL\n\ + \ - Definition: \"An additional type for the item, typically used for adding \n more specific types from external\ + \ vocabularies.\"\n - Source: `/data/ontology/schemaorg.owl`\n\n**Why org:classification is Primary**:\n- ✅ Standard W3C\ + \ vocabulary widely adopted in public sector\n- ✅ SKOS-based with taxonomic hierarchies (skos:broader, skos:narrower)\n\ + - ✅ Extension-friendly for domain-specific classification schemes\n- ✅ Already used in heritage sector (ROV uses rov:orgType\ + \ as subproperty)\n- ✅ More semantically precise than crm:P2_has_type (which applies to ALL CRM entities)\n\n**Why crm:P2_has_type\ + \ is Secondary**:\n- Used for cultural heritage domain modeling alignment\n- Supports E17_Type_Assignment for provenance\ + \ of classification\n- Broader scope (applies to E1_CRM_Entity, not just organizations)\n\n**Why schema:additionalType is\ + \ Tertiary**:\n- Enables web discoverability and SEO optimization\n- Links to Wikidata Q-numbers for Linked Open Data integration\n\ + - Supports multiple simultaneous type assertions\n\n**GLAMORCUBESFIXPHDNT Taxonomy (19 Types)**:\n- **G** - GALLERY: Art\ + \ gallery or exhibition space\n- **L** - LIBRARY: Library (public, academic, specialized)\n- **A** - ARCHIVE: Archive (government,\ + \ corporate, personal)\n- **M** - MUSEUM: Museum (art, history, science, etc.)\n- **O** - OFFICIAL_INSTITUTION: Government\ + \ heritage agencies\n- **R** - RESEARCH_CENTER: Research institutes and documentation centers\n- **C** - COMMERCIAL: Corporate\ + \ heritage collections\n- **U** - UNSPECIFIED: Institution type unknown (data quality flag)\n- **B** - BIO_CUSTODIAN: Botanical\ + \ gardens, zoos, aquariums\n- **E** - EDUCATION_PROVIDER: Universities, schools with collections\n- **S** - HERITAGE_SOCIETY:\ + \ Historical societies, collecting societies\n- **F** - FEATURE_CUSTODIAN: Geographic features AS custodians (special case)\n\ + - **I** - INTANGIBLE_HERITAGE_GROUP: Folklore, oral history organizations\n- **X** - MIXED: Multiple simultaneous types\n\ + - **P** - PERSONAL_COLLECTION: Private collectors\n- **H** - HOLY_SACRED_SITE: Religious sites with heritage collections\n\ + - **D** - DIGITAL_PLATFORM: Online archives, digital libraries\n- **N** - NON_PROFIT: NGOs, heritage advocacy organizations\n\ + - **T** - TASTE_SCENT_HERITAGE: Culinary, olfactory heritage preservation\n\n**RDF Serialization Example**:\n```turtle\n\ + :Custodian_Rijksmuseum\n org:classification :MuseumType_ArtMuseum_Q207694 .\n\n:MuseumType_ArtMuseum_Q207694\n a glamtype:MuseumType,\ + \ crm:E55_Type, skos:Concept ;\n skos:prefLabel \"Art Museum\"@en, \"kunstmuseum\"@nl ;\n skos:broader :MuseumType_Q33506\ + \ ; # Museum (general)\n schema:additionalType ;\n glamtype:wikidata_entity\ + \ \"Q207694\" .\n```\n\n**Relationship to CustodianLegalStatus**:\n- custodian_type (on Custodian): OPERATIONAL type classification\n\ + \ (how the organization functions in the heritage ecosystem)\n- legal_form (on CustodianLegalStatus): LEGAL registration\ + \ type\n (ISO 20275 codes: foundation, association, corporation, government agency)\n\n**Example - Dutch Foundation Operating\ + \ Art Museum**:\n```yaml\nCustodian:\n hc_id: \"https://nde.nl/ontology/hc/nl-nh-ams-m-sm-q621531\"\n custodian_type:\ + \ # OPERATIONAL classification\n type_id: \"https://nde.nl/ontology/hc/type/museum/Q207694\"\n primary_type: MUSEUM\n\ + \ wikidata_entity: Q207694 # Art museum\n legal_status: # LEGAL registration\n legal_form:\n form_id: ISO_20275_8102\ + \ # Stichting (foundation)\n```\n\n**Special Case - FEATURE_CUSTODIAN**:\nThis is the ONLY CustodianType that ALSO links\ + \ to FeaturePlace. Used when the\nheritage custodian IS a geographic feature (e.g., historic mansion as museum).\n```yaml\n\ + Custodian:\n custodian_type:\n primary_type: FEATURE_CUSTODIAN\n wikidata_entity: Q1802963 # Mansion\n place_designation:\n\ + \ custodian_place:\n id: \".../place/mansion-site\"\n a: FeaturePlace\n place_type: MANSION # From FeaturePlaceTypeEnum\n\ + ```\n\n**Data Population Strategy**:\nEnum values extracted from:\n- `data/wikidata/GLAMORCUBEPSXHFN/hyponyms_curated_full.yaml`\n\ + - 2,455+ Wikidata entities with multilingual labels\n- Hierarchical relationships (broader/narrower concepts)\n- Geographic\ + \ restrictions (country-specific types)\n" slots: custodian_type: slot_uri: org:classification - description: | - The organizational type classification of this custodian within the - GLAMORCUBESFIXPHDNT taxonomy. - - W3C ORG: org:classification links org:Organization → skos:Concept. - - References a CustodianType instance (or subclass: ArchiveOrganizationType, - MuseumType, LibraryType, GalleryType, etc.) which provides: - - Wikidata Q-number linking (schema:additionalType) - - Multilingual labels (skos:prefLabel, skos:altLabel) - - Hierarchical relationships (skos:broader, skos:narrower) - - Geographic restrictions (applicable_countries) - - **GHCID Code Derivation**: - The single-letter GLAMORCUBESFIXPHDNT code for GHCID generation is derived - from the CustodianType subclass name: - - ArchiveOrganizationType → A - - BioCustodianType → B - - CommercialOrganizationType → C - - DigitalPlatformType → D - - EducationProviderType → E - - FeatureCustodianType → F - - GalleryType → G - - HolySacredSiteType → H - - IntangibleHeritageGroupType → I - - LibraryType → L - - MuseumType → M - - NonProfitType → N - - OfficialInstitutionType → O - - PersonalCollectionType → P - - ResearchOrganizationType → R - - HeritageSocietyType → S - - TasteScentHeritageType → T - - UnspecifiedType → U - - MixedCustodianType → X - - **Migration Note** (2026-01-05): - Previously used CustodianPrimaryTypeEnum (19 string values). - Enum archived per Rule 9 (Enum-to-Class Promotion). - See: schemas/20251121/linkml/archive/enums/CustodianPrimaryTypeEnum.yaml.archived_20260105 + description: "The organizational type classification of this custodian within the \nGLAMORCUBESFIXPHDNT taxonomy.\n\n\ + W3C ORG: org:classification links org:Organization → skos:Concept.\n\nReferences a CustodianType instance (or subclass:\ + \ ArchiveOrganizationType, \nMuseumType, LibraryType, GalleryType, etc.) which provides:\n- Wikidata Q-number linking\ + \ (schema:additionalType)\n- Multilingual labels (skos:prefLabel, skos:altLabel)\n- Hierarchical relationships (skos:broader,\ + \ skos:narrower)\n- Geographic restrictions (applicable_countries)\n\n**GHCID Code Derivation**:\nThe single-letter\ + \ GLAMORCUBESFIXPHDNT code for GHCID generation is derived\nfrom the CustodianType subclass name:\n- ArchiveOrganizationType\ + \ → A\n- BioCustodianType → B\n- CommercialOrganizationType → C\n- DigitalPlatformType → D\n- EducationProviderType\ + \ → E\n- FeatureCustodianType → F\n- GalleryType → G\n- HolySacredSiteType → H\n- IntangibleHeritageGroupType → I\n\ + - LibraryType → L\n- MuseumType → M\n- NonProfitType → N\n- OfficialInstitutionType → O\n- PersonalCollectionType →\ + \ P\n- ResearchOrganizationType → R\n- HeritageSocietyType → S\n- TasteScentHeritageType → T\n- UnspecifiedType → U\n\ + - MixedCustodianType → X\n\n**Migration Note** (2026-01-05):\nPreviously used CustodianPrimaryTypeEnum (19 string values).\n\ + Enum archived per Rule 9 (Enum-to-Class Promotion).\nSee: schemas/20251121/linkml/archive/enums/CustodianPrimaryTypeEnum.yaml.archived_20260105\n" range: CustodianType required: false multivalued: false exact_mappings: - - org:classification + - org:classification close_mappings: - - crm:P2_has_type - - schema:additionalType + - crm:P2_has_type + - schema:additionalType comments: - - "Primary ontology alignment: org:classification (W3C Organization Ontology)" - - "Secondary alignment: crm:P2_has_type (CIDOC-CRM cultural heritage)" - - "Tertiary alignment: schema:additionalType (web discoverability)" - - "Range changed from CustodianPrimaryTypeEnum to CustodianType class (2026-01-05)" - - "GHCID single-letter codes derived from CustodianType subclass names" - - "Distinct from legal_form (ISO 20275): operational vs. legal classification" + - 'Primary ontology alignment: org:classification (W3C Organization Ontology)' + - 'Secondary alignment: crm:P2_has_type (CIDOC-CRM cultural heritage)' + - 'Tertiary alignment: schema:additionalType (web discoverability)' + - Range changed from CustodianPrimaryTypeEnum to CustodianType class (2026-01-05) + - GHCID single-letter codes derived from CustodianType subclass names + - 'Distinct from legal_form (ISO 20275): operational vs. legal classification' examples: - - value: "https://nde.nl/ontology/hc/type/museum/Q207694" - description: "Art Museum type classification (MuseumType subclass)" - - value: "https://nde.nl/ontology/hc/type/archive/Q166118" - description: "Archive type classification (ArchiveOrganizationType)" - - value: "https://nde.nl/ontology/hc/type/library/Q7075" - description: "Library type classification (LibraryType)" + - value: https://nde.nl/ontology/hc/type/museum/Q207694 + description: Art Museum type classification (MuseumType subclass) + - value: https://nde.nl/ontology/hc/type/archive/Q166118 + description: Archive type classification (ArchiveOrganizationType) + - value: https://nde.nl/ontology/hc/type/library/Q7075 + description: Library type classification (LibraryType) + broad_mappings: + - dcterms:type diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/custodians.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/custodians.yaml index d48b81fe39..b4a1bd4024 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/custodians.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/custodians.yaml @@ -1,14 +1,12 @@ -# custodians slot -# Links Container to Custodian entities - id: https://nde.nl/ontology/hc/slot/custodians name: custodians - slots: custodians: slot_uri: rdfs:member - description: "Collection of custodian hub entities in the container" + description: Collection of custodian hub entities in the container range: Custodian multivalued: true exact_mappings: - - ldp:contains + - ldp:contains + close_mappings: + - schema:organization diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/data_license_policy.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/data_license_policy.yaml index a49bb9e001..d293c7ebe6 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/data_license_policy.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/data_license_policy.yaml @@ -1,28 +1,31 @@ -# Global Slot: data_license_policy -# Links an organization to its data licensing and openness policy - id: https://nde.nl/ontology/hc/slot/data_license_policy name: data_license_policy_slot - imports: - - ../classes/DataLicensePolicy - +- ../classes/DataLicensePolicy prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ odrl: http://www.w3.org/ns/odrl/2/ - default_prefix: hc - slots: data_license_policy: slot_uri: odrl:hasPolicy range: DataLicensePolicy - description: | - The organization's data licensing and openness policy. - + description: 'The organization''s data licensing and openness policy. + + Links to DataLicensePolicy which defines: + - Default license (CC0, CC-BY, proprietary, etc.) + - Service-specific licenses (if different services have different licenses) + - Openness stance (STRONG_OPEN_ADVOCATE, MIXED_POLICY, FULLY_PROPRIETARY) + - Advocacy activities (participation in open data initiatives) + + ' + close_mappings: + - dcterms:license + broad_mappings: + - dcterms:rights diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/data_service_endpoints.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/data_service_endpoints.yaml index 6715eaa324..31cd6111fb 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/data_service_endpoints.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/data_service_endpoints.yaml @@ -1,24 +1,20 @@ -# Slot: data_service_endpoints -# Data service endpoints exposed by a digital platform - id: https://nde.nl/ontology/hc/slot/data_service_endpoints name: data_service_endpoints_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcat: http://www.w3.org/ns/dcat# - imports: - - linkml:types - +- linkml:types default_range: string - slots: data_service_endpoints: slot_uri: dcat:servesDataset range: DataServiceEndpoint multivalued: true inlined_as_list: true - description: >- - Data service endpoints exposed by this digital platform (APIs, SPARQL endpoints, etc.). + description: Data service endpoints exposed by this digital platform (APIs, SPARQL endpoints, etc.). + close_mappings: + - dcat:endpointURL + broad_mappings: + - dcat:endpointURL diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/date.yaml index bcc1b1a40a..f42844f2c2 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/date.yaml @@ -1,28 +1,21 @@ -# Slot: date_value -# Generic date value for a resource or event -# RENAMED from 'date' to avoid collision with built-in 'date' type - id: https://nde.nl/ontology/hc/slot/date_value name: date_value_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: date_value: slot_uri: dcterms:date range: date - description: >- - Date value for a resource or event. - ISO 8601 format (YYYY-MM-DD). + description: Date value for a resource or event. ISO 8601 format (YYYY-MM-DD). comments: - - "Renamed from 'date' to 'date_value' to avoid collision with built-in date type" + - Renamed from 'date' to 'date_value' to avoid collision with built-in date type aliases: - - date + - date + broad_mappings: + - rdf:value + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/date_of_death.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/date_of_death.yaml index a55cd098a1..b214273f43 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/date_of_death.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/date_of_death.yaml @@ -1,64 +1,37 @@ -# Date of Death Slot -# TimeSpan representing when a staff member died, with fuzzy temporal bounds - id: https://nde.nl/ontology/hc/slot/date_of_death name: date_of_death_slot title: Date of Death Slot - prefixes: schema: http://schema.org/ crm: http://www.cidoc-crm.org/cidoc-crm/ wd: http://www.wikidata.org/entity/ - imports: - - linkml:types - - ../metadata - - ../classes/TimeSpan - +- linkml:types +- ../metadata +- ../classes/TimeSpan slots: date_of_death: slot_uri: schema:deathDate - description: | - TimeSpan representing when this staff member died. - - Uses CIDOC-CRM E52_Time-Span pattern to handle uncertainty in death dates, - which is particularly important for: - - Deaths during armed conflict (exact date may be unknown) - - Historical figures (approximate dates only) - - Mass casualty events (date ranges) - - **TimeSpan Properties**: - - `begin_of_the_begin`: Earliest possible death date - - `end_of_the_begin`: Latest possible start of death period - - `begin_of_the_end`: Earliest possible end of death period - - `end_of_the_end`: Latest possible death date - - **Known Date Example** (precise): - ```yaml - date_of_death: - begin_of_the_begin: "2023-11-19T00:00:00Z" - end_of_the_end: "2023-11-19T23:59:59Z" - ``` - - **Unknown Date Example** (range): - ```yaml - date_of_death: - begin_of_the_begin: "2023-10-07T00:00:00Z" - end_of_the_end: "2024-12-31T23:59:59Z" - # Death occurred sometime during Gaza conflict, exact date unknown - ``` - - **Required Context**: - Only populate when `deceased: true`. May be combined with: - - `martyred: true` if death was due to conflict/persecution - - `circumstances_of_death` string describing the event + description: "TimeSpan representing when this staff member died.\n\nUses CIDOC-CRM E52_Time-Span pattern to handle uncertainty\ + \ in death dates,\nwhich is particularly important for:\n- Deaths during armed conflict (exact date may be unknown)\n\ + - Historical figures (approximate dates only)\n- Mass casualty events (date ranges)\n\n**TimeSpan Properties**:\n- `begin_of_the_begin`:\ + \ Earliest possible death date\n- `end_of_the_begin`: Latest possible start of death period\n- `begin_of_the_end`: Earliest\ + \ possible end of death period\n- `end_of_the_end`: Latest possible death date\n\n**Known Date Example** (precise):\n\ + ```yaml\ndate_of_death:\n begin_of_the_begin: \"2023-11-19T00:00:00Z\"\n end_of_the_end: \"2023-11-19T23:59:59Z\"\n\ + ```\n\n**Unknown Date Example** (range):\n```yaml\ndate_of_death:\n begin_of_the_begin: \"2023-10-07T00:00:00Z\"\n\ + \ end_of_the_end: \"2024-12-31T23:59:59Z\"\n # Death occurred sometime during Gaza conflict, exact date unknown\n\ + ```\n\n**Required Context**:\nOnly populate when `deceased: true`. May be combined with:\n- `martyred: true` if death\ + \ was due to conflict/persecution\n- `circumstances_of_death` string describing the event\n" range: TimeSpan inlined: true required: false exact_mappings: - - schema:deathDate - - wikidata:P570 + - schema:deathDate + - wikidata:P570 comments: - - "Only populate when deceased is true" - - "Use TimeSpan to handle date uncertainty" - - "Combine with circumstances_of_death for context" + - Only populate when deceased is true + - Use TimeSpan to handle date uncertainty + - Combine with circumstances_of_death for context + broad_mappings: + - dcterms:date + - dcterms:relation diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/death_place.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/death_place.yaml index 301973f413..0a0caf2acb 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/death_place.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/death_place.yaml @@ -1,129 +1,190 @@ -# Death Place Slot -# String or URI representing where a person died -# -# PiCo Pattern: Allows both literal place names and URIs for thesaurus linking -# (GeoNames, Wikidata, etc.) - id: https://nde.nl/ontology/hc/slot/death_place name: death_place_slot title: Death Place Slot - prefixes: sdo: https://schema.org/ pico: https://personsincontext.org/model# crm: http://www.cidoc-crm.org/cidoc-crm/ wd: http://www.wikidata.org/entity/ geonames: http://sws.geonames.org/ - imports: - - linkml:types - +- linkml:types slots: death_place: slot_uri: sdo:deathPlace - description: | - The place where a person died. - + description: 'The place where a person died. + + =========================================================================== + PiCo ONTOLOGY ALIGNMENT (pico.ttl lines 436-447) + =========================================================================== - + + Per PiCo (Persons in Context) ontology, death places can be recorded as: + - **xsd:string**: Literal place name as mentioned in source + - **xsd:anyURI**: Link to geographic thesaurus (GeoNames, Wikidata) - + + Both formats may be used together: + - Literal: Preserves original source notation + - URI: Enables geographic linking and reconciliation - + + =========================================================================== + THESAURUS LINKING + =========================================================================== - + + Preferably link to established geographic thesauri: - + + **GeoNames** (preferred for geographic entities): + - Format: http://sws.geonames.org/{geonames_id}/ + - Example: http://sws.geonames.org/2759794/ (Amsterdam) - + + **Wikidata** (preferred for historical places): + - Format: http://www.wikidata.org/entity/Q{number} + - Example: http://www.wikidata.org/entity/Q727 (Amsterdam) - + + =========================================================================== + SPECIAL CASES + =========================================================================== - + + **Conflict zones**: + - Place may be approximate: "Gaza Strip" rather than specific city + - Multiple possible locations: "somewhere in Auschwitz complex" - + + **At sea / in transit**: + - "At sea, North Atlantic Ocean" + - "En route between Amsterdam and Batavia" - + + **Unknown location**: + - If deceased is true but place unknown, leave death_place empty + - Use circumstances_of_death to document known context - + + **Historical places**: + - Use Wikidata for places that no longer exist + - Document modern equivalent if applicable - + + =========================================================================== + EXAMPLES + =========================================================================== - + + Literal place name only: + ```yaml + death_place: "Auschwitz concentration camp, Poland" + ``` - + + URI to Wikidata: + ```yaml + death_place: "http://www.wikidata.org/entity/Q7341" # Auschwitz + ``` - + + Approximate location (conflict zone): + ```yaml + death_place: "Gaza Strip, Palestinian Territories" + death_place_uri: "http://www.wikidata.org/entity/Q39760" + ``` - + + Historical place: + ```yaml + death_place: "Batavia, Dutch East Indies" + death_place_uri: "http://www.wikidata.org/entity/Q3630" # Now Jakarta + ``` - + + =========================================================================== + RELATIONSHIP TO OTHER DEATH SLOTS + =========================================================================== - + + death_place works together with: + - `deceased`: Boolean flag (true if person has died) + - `date_of_death`: TimeSpan for when death occurred + - `circumstances_of_death`: Description of how/why death occurred + - `martyred`: Boolean if death due to conflict/persecution - + + =========================================================================== + ONTOLOGY MAPPINGS + =========================================================================== - + + - Schema.org: sdo:deathPlace (primary) + - CIDOC-CRM: crm:P7_took_place_at via crm:E69_Death event + - Wikidata: P20 (place of death) - + + ' range: string required: false exact_mappings: - - sdo:deathPlace - - wikidata:P20 + - sdo:deathPlace + - wikidata:P20 + - schema:deathPlace close_mappings: - - crm:P7_took_place_at + - crm:P7_took_place_at comments: - - "Allows both string and URI formats per PiCo pattern" - - "Prefer thesaurus links (GeoNames, Wikidata) when possible" - - "Handle conflict zones and approximate locations gracefully" - - "Only populate when deceased is true" - - "Use circumstances_of_death for context when location is approximate" + - Allows both string and URI formats per PiCo pattern + - Prefer thesaurus links (GeoNames, Wikidata) when possible + - Handle conflict zones and approximate locations gracefully + - Only populate when deceased is true + - Use circumstances_of_death for context when location is approximate diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/defined_by_standard.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/defined_by_standard.yaml index 53c554f8b3..142d293619 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/defined_by_standard.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/defined_by_standard.yaml @@ -1,53 +1,66 @@ -# Slot: defined_by_standard -# Links an identifier to the standard that defines it - id: https://nde.nl/ontology/hc/slot/defined_by_standard name: defined_by_standard_slot title: Defined By Standard Slot - 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# - default_prefix: hc - imports: - - linkml:types - - ../metadata - - ../classes/Standard - +- linkml:types +- ../metadata +- ../classes/Standard slots: defined_by_standard: slot_uri: skos:inScheme - description: | - The standard (identifier scheme) that defines this identifier. - + description: 'The standard (identifier scheme) that defines this identifier. + + Links the identifier to its governing standard, providing access to: + - Format specifications + - Registration authority + - Lookup URL template + - Validation rules - + + **SKOS Alignment:** - + + skos:inScheme - "Relates a resource to a concept scheme in which it is included" - + + Here the identifier is treated as a SKOS notation within the scheme (standard). - + + **Examples:** - + + - ISIL "NL-AmRMA" → ISIL standard (ISO 15511) + - ISNI "0000 0001 2146 5765" → ISNI standard (ISO 27729) + - Wikidata "Q190804" → Wikidata standard - + + **Usage:** - + + Allows navigation from an identifier to: + - Validation patterns (via Standard.formats) + - Lookup URLs (via Standard.lookup_url_template) + - Allocation agency (via Standard + AllocationAgency) + + ' range: Standard required: false inlined: false + broad_mappings: + - dcterms:conformsTo diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/deliverables.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/deliverables.yaml index d65f1543d5..06f806629a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/deliverables.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/deliverables.yaml @@ -1,23 +1,22 @@ -# Slot: deliverables -# Expected or achieved deliverable outputs - id: https://nde.nl/ontology/hc/slot/deliverables name: deliverables_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: deliverables: - description: | - Expected or achieved deliverable outputs from a project or activity. - May be URLs, document references, or textual descriptions. + slot_uri: schema:result + description: "Expected or achieved deliverable outputs from a project or activity.\n\nSchema.org: result - \"The result\ + \ produced in the action.\"\n\nMay be URLs, document references, or textual descriptions of \noutcomes from heritage\ + \ projects, digitization initiatives, or\nresearch activities.\n" range: string multivalued: true + close_mappings: + - schema:workExample + - schema:result + related_mappings: + - prov:generated diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/derived_from_entity.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/derived_from_entity.yaml index a99fbf1aa8..7d3b720900 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/derived_from_entity.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/derived_from_entity.yaml @@ -1,46 +1,27 @@ -# CustodianObservation Slot: derived_from_entity -# The formal entity this observation refers to - id: https://nde.nl/ontology/hc/slot/derived_from_entity name: derived_from_entity_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: derived_from_entity: slot_uri: prov:wasDerivedFrom range: CustodianLegalStatus - description: | - The formal entity (reconstruction) this observation refers to. - - **INVERSE PROPERTY**: - - **Inverse**: `has_derived_observation` - - Pattern: If Observation derived_from_entity LegalStatus, then LegalStatus has_derived_observation Observation - - **Provenance semantics** (PROV-O): - - `prov:wasDerivedFrom`: Links observation to the formal entity it references - - Enables provenance chain traversal from source observation to formal entity - - **Example**: - ```yaml - CustodianObservation: - observed_name: "Rijksmuseum Amsterdam" - derived_from_entity: "https://nde.nl/ontology/hc/legal/stichting-rijksmuseum" - ``` - - **Navigation**: - - From observation: Find formal entity it references (derived_from_entity) - - From legal status: Find all observations that reference it (has_derived_observation) - + description: "The formal entity (reconstruction) this observation refers to.\n\n**INVERSE PROPERTY**:\n- **Inverse**:\ + \ `has_derived_observation`\n- Pattern: If Observation derived_from_entity LegalStatus, then LegalStatus has_derived_observation\ + \ Observation\n\n**Provenance semantics** (PROV-O):\n- `prov:wasDerivedFrom`: Links observation to the formal entity\ + \ it references\n- Enables provenance chain traversal from source observation to formal entity\n\n**Example**:\n```yaml\n\ + CustodianObservation:\n observed_name: \"Rijksmuseum Amsterdam\"\n derived_from_entity: \"https://nde.nl/ontology/hc/legal/stichting-rijksmuseum\"\ + \n```\n\n**Navigation**:\n- From observation: Find formal entity it references (derived_from_entity)\n- From legal status:\ + \ Find all observations that reference it (has_derived_observation)\n" comments: - - "Links observation to formal legal entity" - - "Part of PROV-O derivation pattern" - - "Inverse of has_derived_observation" - - "Creates owl:inverseOf axiom in RDF output" + - Links observation to formal legal entity + - Part of PROV-O derivation pattern + - Inverse of has_derived_observation + - Creates owl:inverseOf axiom in RDF output + broad_mappings: + - prov:Entity diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/description.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/description.yaml index b87b1aedfb..d8301559a0 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/description.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/description.yaml @@ -1,30 +1,37 @@ -# description slot - General text description - id: https://nde.nl/ontology/hc/slot/description name: description title: Description Slot +description: 'General text description of an entity. + -description: | - General text description of an entity. - Used across multiple classes for providing human-readable descriptions + of entities, their purpose, and characteristics. + ' slots: description: slot_uri: schema:description range: string required: false multivalued: false - description: | - Human-readable description of the entity, its purpose, or characteristics. - + description: 'Human-readable description of the entity, its purpose, or characteristics. + + Examples: + - Jurisdiction: "Bavaria is a federal state in southern Germany with its own commercial register system" + - Register: "The Handelsregister is the German commercial register maintained by local courts" + - Authority: "The Kamer van Koophandel is the Dutch Chamber of Commerce" + ' + exact_mappings: + - dcterms:description + - schema:description + - rdfs:comment comments: - - "Maps to schema:description" - - "Should be concise but informative" - - "Language should match the context (typically English for international use)" +- Maps to schema:description +- Should be concise but informative +- Language should match the context (typically English for international use) diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/digital_platform.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/digital_platform.yaml index af9ca27e1a..2869b15eb5 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/digital_platform.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/digital_platform.yaml @@ -1,33 +1,43 @@ -# Custodian Slot: digital_platform -# Links Custodian hub to DigitalPlatform operational aspect - id: https://nde.nl/ontology/hc/slot/digital_platform name: digital_platform_slot - imports: - - ../classes/DigitalPlatform - +- ../classes/DigitalPlatform slots: digital_platform: slot_uri: foaf:homepage range: DigitalPlatform multivalued: true inlined_as_list: true - description: | - Digital platform(s) operated by or representing this custodian. + description: 'Digital platform(s) operated by or representing this custodian. + FOAF: foaf:homepage indicates a homepage or main web presence. + DCAT: dcat:accessURL provides access to a dataset/catalog. - + + This property enables documentation of digital infrastructure for ANY custodian + (physical institutions with websites OR digital-first platforms): - + + Examples: + - Physical museum with website: Rijksmuseum → Rijksstudio (online collection) + - Archive with multiple systems: Noord-Hollands Archief → Inventory, OAI-PMH endpoint + - Digital-first platform: Europeana (classified as DigitalPlatformType custodian) - + + **CRITICAL DISTINCTION**: + - DigitalPlatform CLASS (this slot): Infrastructure documentation for any custodian + - DigitalPlatformType: Custodian type classification for digital-first institutions - + + Multivalued to support custodians with multiple platforms (website, API, SPARQL, etc.). + + ' + broad_mappings: + - dcterms:hasPart diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/digital_surrogate_url.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/digital_surrogate_url.yaml new file mode 100644 index 0000000000..04a2ad3548 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/digital_surrogate_url.yaml @@ -0,0 +1,23 @@ +id: https://nde.nl/ontology/hc/slot/digital_surrogate_url +name: digital_surrogate_url +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ +slots: + digital_surrogate_url: + slot_uri: schema:url + description: 'URL to digital surrogate or online access point. + + + Links to digitized versions, online catalogs, or digital collections. + + ' + range: uri + multivalued: true + required: false + examples: + - value: https://www.nationaalarchief.nl/onderzoeken/archief/1.04.02 + description: Digital access to VOC archives + broad_mappings: + - schema:url diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/digitization_status.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/digitization_status.yaml index 5d4cd3c938..e0da006e53 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/digitization_status.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/digitization_status.yaml @@ -1,30 +1,40 @@ -# Custodian Slot: digitization_status -# Current state of digitization for collection materials - id: https://nde.nl/ontology/hc/slot/digitization_status name: digitization_status_slot - prefixes: premis: http://www.loc.gov/premis/rdf/v3/ - slots: digitization_status: slot_uri: premis:hasRelatedStatementInformation range: string - description: | - Current status of collection digitization efforts. - + description: 'Current status of collection digitization efforts. + + PREMIS: hasRelatedStatementInformation for preservation metadata. - + + Values: + - NOT_DIGITIZED: No digital surrogates exist + - NOT_STARTED: No digitization undertaken + - PARTIAL: Some materials digitized + - COMPLETE: Entire collection digitized + - IN_PROGRESS / ONGOING: Active digitization project + - NOT_APPLICABLE: Materials not suitable for digitization - + + Examples: + - "PARTIAL - approximately 30% of photograph collection digitized" + - "COMPLETE" + - "IN_PROGRESS - expected completion 2026" + + ' + broad_mappings: + - adms:status diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/dissolution_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/dissolution_date.yaml index 3de0bbba2b..1720287f59 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/dissolution_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/dissolution_date.yaml @@ -1,11 +1,11 @@ -# CustodianLegalStatus Slot: dissolution_date -# Date of legal dissolution - id: https://nde.nl/ontology/hc/slot/dissolution_date name: dissolution_date_slot - slots: dissolution_date: slot_uri: schema:dissolutionDate range: date - description: "Date of legal dissolution (if dissolved)" + description: Date of legal dissolution (if dissolved) + exact_mappings: + - schema:dissolutionDate + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/documentation_source.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/documentation_source.yaml index ef2fb4e536..d36a1ea88d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/documentation_source.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/documentation_source.yaml @@ -1,10 +1,9 @@ -# documentation_source slot for OrganizationalChangeEvent - id: https://nde.nl/ontology/hc/slot/documentation_source name: documentation_source - slots: documentation_source: - description: "URL or reference to documentation of organizational change" + description: URL or reference to documentation of organizational change range: uri slot_uri: dcterms:source + broad_mappings: + - dcterms:source diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/documentation_url.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/documentation_url.yaml index 141e5a23d0..a9e53cdb64 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/documentation_url.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/documentation_url.yaml @@ -1,22 +1,18 @@ -# Global Slot: documentation_url -# URL to documentation for a project, system, or resource - id: https://nde.nl/ontology/hc/slot/documentation_url name: documentation_url_slot title: Documentation URL Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types slots: documentation_url: slot_uri: schema:documentation description: URL to documentation for this entity range: uri exact_mappings: - - schema:documentation + - schema:documentation + broad_mappings: + - schema:url diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/effective_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/effective_date.yaml index cbd24e682e..390e631582 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/effective_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/effective_date.yaml @@ -1,39 +1,40 @@ -# Slot: effective_date -# Date when a document, policy, or statement became legally/operationally effective - id: https://nde.nl/ontology/hc/slot/effective_date name: effective_date title: Effective Date - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types slots: effective_date: slot_uri: schema:datePublished - description: | - Date when the document, policy, or statement became effective. - + description: 'Date when the document, policy, or statement became effective. + + **USAGE**: + - ArticlesOfAssociation: Date when legal documents became legally effective + - MissionStatement: Date when mission/vision was adopted + - Policy documents: Date when policy came into force - + + **PROVENANCE**: + May be explicitly stated in the document or inferred from metadata. + + ' range: date - exact_mappings: - - schema:datePublished - - dcterms:issued - + - schema:datePublished + - dcterms:issued comments: - - "Distinguished from retrieved_on (when we observed it) and valid_from (broader temporal validity)" - - "For legal documents, this is when the document has legal force" - - "For mission statements, this is when the statement was formally adopted" + - Distinguished from retrieved_on (when we observed it) and valid_from (broader temporal validity) + - For legal documents, this is when the document has legal force + - For mission statements, this is when the statement was formally adopted + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/embargo_end_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/embargo_end_date.yaml index f8d7b31807..4e149b9198 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/embargo_end_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/embargo_end_date.yaml @@ -1,18 +1,14 @@ -# Global Slot: embargo_end_date -# Date when embargo/access restriction ends - id: https://nde.nl/ontology/hc/slot/embargo_end_date name: embargo_end_date_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - slots: embargo_end_date: description: Date when embargo or access restriction ends range: date slot_uri: schema:expires + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/emic_name.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/emic_name.yaml index e10b6f3b32..6ecd675393 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/emic_name.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/emic_name.yaml @@ -1,18 +1,23 @@ -# Slot: emic_name -# Self-designated name from custodian's perspective - id: https://nde.nl/ontology/hc/slot/emic_name name: emic_name-slot - slots: emic_name: - description: | - The name as the custodian refers to itself, preserving the custodian's + description: 'The name as the custodian refers to itself, preserving the custodian''s + own naming convention. This is the self-assigned or self-recognized name, + as opposed to names given by external parties (exonyms). + + ' slot_uri: skos:prefLabel range: string required: true comments: - - "Emic refers to the insider's or participant's perspective" - - "Preserves the authentic self-designation of the institution" + - Emic refers to the insider's or participant's perspective + - Preserves the authentic self-designation of the institution + close_mappings: + - skos:prefLabel + related_mappings: + - schema:name + broad_mappings: + - rdfs:label diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/encompasses.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/encompasses.yaml index 4667e16bc3..fc95a65951 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/encompasses.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/encompasses.yaml @@ -1,70 +1,39 @@ -# Slot: encompasses -# Inverse of encompassing_body -# Links EncompassingBody to custodians it governs - id: https://nde.nl/ontology/hc/slot/encompasses name: encompasses title: Encompasses - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: encompasses: slot_uri: org:hasSubOrganization - description: | - Custodians that are encompassed, governed, or coordinated by this body. - - **W3C ORG Alignment**: - - Property: `org:hasSubOrganization` - - Domain: org:Organization (EncompassingBody) - - Range: org:Organization (Custodian) - - Definition: "Represents hierarchical containment of Organizations" - - **INVERSE PROPERTY**: - - **Inverse**: `encompassing_body` (org:subOrganizationOf) - - Pattern: If Custodian encompassing_body Body, then Body encompasses Custodian - - **Three Relationship Types**: - 1. **Umbrella** - Legal parent hierarchy (permanent) - - Ministry encompasses National Archives, Royal Library - 2. **Network** - Service provision (temporary, centralized) - - De Ree Archive Hosting encompasses member archives - 3. **Consortium** - Mutual assistance (temporary, peer-to-peer) - - Heritage Network encompasses participating museums - - **Example**: - ```yaml - EncompassingBody: - organization_name: "Ministerie van OCW" - organization_type: UMBRELLA - encompasses: - - "https://nde.nl/ontology/hc/nl-na" # National Archives - - "https://nde.nl/ontology/hc/nl-kb" # Royal Library - - "https://nde.nl/ontology/hc/nl-rmn" # Cultural Heritage Agency - ``` - - **Navigation**: - - From body: Find all encompassed custodians (encompasses) - - From custodian: Find encompassing bodies (encompassing_body) + description: "Custodians that are encompassed, governed, or coordinated by this body.\n\n**W3C ORG Alignment**:\n\nProperty:\ + \ `org:hasSubOrganization`\n- Domain: org:Organization (EncompassingBody)\n- Range: org:Organization (Custodian)\n-\ + \ Definition: \"Represents hierarchical containment of Organizations\"\n\n**INVERSE PROPERTY**:\n- **Inverse**: `encompassing_body`\ + \ (org:subOrganizationOf)\n- Pattern: If Custodian encompassing_body Body, then Body encompasses Custodian\n\n**Three\ + \ Relationship Types**:\n1. **Umbrella** - Legal parent hierarchy (permanent)\n - Ministry encompasses National Archives,\ + \ Royal Library\n2. **Network** - Service provision (temporary, centralized)\n - De Ree Archive Hosting encompasses\ + \ member archives\n3. **Consortium** - Mutual assistance (temporary, peer-to-peer)\n - Heritage Network encompasses\ + \ participating museums\n\n**Example**:\n```yaml\nEncompassingBody:\n organization_name: \"Ministerie van OCW\"\n \ + \ organization_type: UMBRELLA\n encompasses:\n - \"https://nde.nl/ontology/hc/nl-na\" # National Archives\n \ + \ - \"https://nde.nl/ontology/hc/nl-kb\" # Royal Library\n - \"https://nde.nl/ontology/hc/nl-rmn\" # Cultural\ + \ Heritage Agency\n```\n\n**Navigation**:\n- From body: Find all encompassed custodians (encompasses)\n- From custodian:\ + \ Find encompassing bodies (encompassing_body)\n" range: Custodian multivalued: true - exact_mappings: - - org:hasSubOrganization - + - org:hasSubOrganization related_mappings: - - schema:subOrganization - - rico:includesOrIncluded - + - schema:subOrganization + - rico:includesOrIncluded + - schema:containsPlace comments: - - "Inverse of encompassing_body (org:subOrganizationOf)" - - "Links governance body to custodians it oversees" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of encompassing_body (org:subOrganizationOf) + - Links governance body to custodians it oversees + - Creates owl:inverseOf axiom in RDF output + close_mappings: + - dcterms:hasPart diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/encompassing_body.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/encompassing_body.yaml index 0aa0ca4e24..bd03d586c8 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/encompassing_body.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/encompassing_body.yaml @@ -1,53 +1,59 @@ -# EncompassingBody Slot Definition -# Extra-organizational governance relationships - id: https://nde.nl/ontology/hc/slot/encompassing_body name: encompassing_body_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# schema: http://schema.org/ - default_prefix: hc - imports: - - linkml:types - - ../metadata - - ../classes/EncompassingBody - +- linkml:types +- ../metadata +- ../classes/EncompassingBody slots: encompassing_body: slot_uri: org:subOrganizationOf range: EncompassingBody multivalued: true - description: | - Extra-organizational governance bodies that encompass, oversee, or coordinate + description: 'Extra-organizational governance bodies that encompass, oversee, or coordinate + this custodian. Links Custodian to EncompassingBody instances representing + parent organizations, service networks, or consortia. - + + **W3C ORG Ontology**: `org:subOrganizationOf` + - Domain: org:Organization (Custodian) + - Range: org:Organization (EncompassingBody) + - Inverse: `org:hasSubOrganization` - + + **Three Relationship Types**: + 1. **Umbrella** - Legal parent hierarchy (permanent) + 2. **Network** - Service provision (temporary, centralized) + 3. **Consortium** - Mutual assistance (temporary, peer-to-peer) + + ' comments: - - "Links Custodian to external governance entities" - - "Custodians can have multiple encompassing bodies simultaneously" - - "Temporal changes tracked via EncompassingBody validity dates" + - Links Custodian to external governance entities + - Custodians can have multiple encompassing bodies simultaneously + - Temporal changes tracked via EncompassingBody validity dates exact_mappings: - - org:subOrganizationOf + - org:subOrganizationOf close_mappings: - - schema:parentOrganization - - schema:memberOf + - schema:parentOrganization + - schema:memberOf examples: - - value: - - id: "https://nde.nl/ontology/hc/encompassing-body/umbrella/nl-ministry-ocw" - organization_name: "Ministerie van OCW" - organization_type: "UMBRELLA" - description: "Ministry as umbrella organization" + - value: + - id: https://nde.nl/ontology/hc/encompassing-body/umbrella/nl-ministry-ocw + organization_name: Ministerie van OCW + organization_type: UMBRELLA + description: Ministry as umbrella organization + broad_mappings: + - org:Organization diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/end_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/end_date.yaml index 51630c8958..9333e94287 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/end_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/end_date.yaml @@ -1,26 +1,32 @@ -# Slot: end_date -# End date for time-bounded entities (exhibitions, projects, events) - id: https://nde.nl/ontology/hc/slot/end_date name: end_date_slot title: End Date Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - slots: end_date: slot_uri: schema:endDate range: date - description: | - End date of a time-bounded entity. + description: 'End date of a time-bounded entity. + Used for exhibitions, projects, events, and other temporal entities. - + + Examples: + - Exhibition closing date + - Project end date + - Event conclusion + + ' + exact_mappings: + - schema:endDate + close_mappings: + - prov:endedAtTime + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/end_of_the_begin.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/end_of_the_begin.yaml index 5325d550de..bfc698d341 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/end_of_the_begin.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/end_of_the_begin.yaml @@ -1,11 +1,11 @@ -# TimeSpan Slot: end_of_the_begin -# Latest possible start time - id: https://nde.nl/ontology/hc/slot/end_of_the_begin name: end_of_the_begin_slot - slots: end_of_the_begin: slot_uri: crm:P81a_end_of_the_begin range: datetime - description: "Latest possible start time of temporal extent (CIDOC-CRM E52_Time-Span)" + description: Latest possible start time of temporal extent (CIDOC-CRM E52_Time-Span) + related_mappings: + - prov:startedAtTime + broad_mappings: + - dcterms:relation diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/end_of_the_end.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/end_of_the_end.yaml index a3215db9f4..3c35b4a1d9 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/end_of_the_end.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/end_of_the_end.yaml @@ -1,11 +1,13 @@ -# TimeSpan Slot: end_of_the_end -# Latest possible end time - id: https://nde.nl/ontology/hc/slot/end_of_the_end name: end_of_the_end_slot - slots: end_of_the_end: slot_uri: crm:P82b_end_of_the_end range: datetime - description: "Latest possible end time of temporal extent (CIDOC-CRM E52_Time-Span)" + description: Latest possible end time of temporal extent (CIDOC-CRM E52_Time-Span) + related_mappings: + - prov:endedAtTime + narrow_mappings: + - schema:endDate + broad_mappings: + - dcterms:relation diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/ended_at_time.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/ended_at_time.yaml index 7c8cf88648..e24b304c03 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/ended_at_time.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/ended_at_time.yaml @@ -1,11 +1,9 @@ -# ReconstructionActivity Slot: ended_at_time -# End time of activity - id: https://nde.nl/ontology/hc/slot/ended_at_time name: ended_at_time_slot - slots: ended_at_time: slot_uri: prov:endedAtTime range: datetime - description: "End time of reconstruction activity" + description: End time of reconstruction activity + broad_mappings: + - prov:atTime diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/endorsement_source.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/endorsement_source.yaml index 8bdc7bea54..60683aa7b0 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/endorsement_source.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/endorsement_source.yaml @@ -1,12 +1,10 @@ -# CustodianName Slot: endorsement_source -# Source proving accepted name - id: https://nde.nl/ontology/hc/slot/endorsement_source name: endorsement_source_slot - slots: endorsement_source: slot_uri: prov:hadPrimarySource range: uriorcurie - description: "Source document proving this is the custodian's accepted name (official website, statutes, etc.)" + description: Source document proving this is the custodian's accepted name (official website, statutes, etc.) required: true + broad_mappings: + - dcterms:source diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/event_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/event_date.yaml index cda2a3df30..eb6c9c9b08 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/event_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/event_date.yaml @@ -1,11 +1,14 @@ -# event_date slot for OrganizationalChangeEvent - id: https://nde.nl/ontology/hc/slot/event_date name: event_date - slots: event_date: - description: "Date when organizational change event occurred" + description: Date when organizational change event occurred range: date slot_uri: crm:P4_has_time-span required: true + close_mappings: + - schema:startDate + related_mappings: + - dcterms:date + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/event_description.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/event_description.yaml index 1081d845e3..43d2122bd4 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/event_description.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/event_description.yaml @@ -1,11 +1,12 @@ -# event_description slot for OrganizationalChangeEvent - id: https://nde.nl/ontology/hc/slot/event_description name: event_description - slots: event_description: - description: "Detailed description of organizational change event" + description: Detailed description of organizational change event range: string slot_uri: dcterms:description required: true + exact_mappings: + - schema:description + broad_mappings: + - dcterms:description diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/event_id.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/event_id.yaml index d4e2cdb17e..6138482a77 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/event_id.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/event_id.yaml @@ -2,20 +2,18 @@ id: https://nde.nl/ontology/hc/slot/event_id name: event_id_slot title: Event ID Slot description: Shared slot for event identifiers across heritage custodian entities - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: event_id: description: Persistent unique identifier for an event range: uriorcurie slot_uri: dcterms:identifier identifier: true + broad_mappings: + - dcterms:identifier diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/event_type.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/event_type.yaml index 4c0723df18..79aa27472b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/event_type.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/event_type.yaml @@ -1,29 +1,28 @@ -# event_type slot for OrganizationalChangeEvent - id: https://nde.nl/ontology/hc/slot/event_type name: event_type - 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# prov: http://www.w3.org/ns/prov# - default_prefix: hc - imports: - - linkml:types - - ../metadata - # Enum imports for range - - ../enums/OrganizationalChangeEventTypeEnum - +- linkml:types +- ../metadata +- ../enums/OrganizationalChangeEventTypeEnum slots: event_type: slot_uri: dct:type - description: "Type of organizational change event" + description: Type of organizational change event range: OrganizationalChangeEventTypeEnum required: true exact_mappings: - - rdf:type - - prov:type + - rdf:type + - prov:type + close_mappings: + - schema:eventType + related_mappings: + - dcterms:type + broad_mappings: + - dcterms:type diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/exhibition_type.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/exhibition_type.yaml index 9c3c078838..7c81ca09f8 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/exhibition_type.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/exhibition_type.yaml @@ -1,27 +1,20 @@ -# Slot: exhibition_type -# Shared slot for exhibition/exhibition-space type classification -# Classes override range in slot_usage based on context - id: https://nde.nl/ontology/hc/slot/exhibition_type name: exhibition_type_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: exhibition_type: - description: >- - Classification type for exhibitions or exhibition spaces. - Range varies by context - use slot_usage to specify appropriate enum. + description: Classification type for exhibitions or exhibition spaces. Range varies by context - use slot_usage to specify + appropriate enum. slot_uri: dcterms:type range: string comments: - - "Exhibition class uses ExhibitionTypeEnum" - - "ExhibitionSpace class uses ExhibitionSpaceTypeEnum" + - Exhibition class uses ExhibitionTypeEnum + - ExhibitionSpace class uses ExhibitionSpaceTypeEnum + broad_mappings: + - dcterms:type diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/expertise_areas.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/expertise_areas.yaml index 27a2a4f122..98b42eca4f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/expertise_areas.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/expertise_areas.yaml @@ -1,13 +1,13 @@ id: https://nde.nl/ontology/hc/slot/expertise_areas name: expertise_areas title: Expertise Areas - imports: - - linkml:types - +- linkml:types slots: expertise_areas: slot_uri: schema:knowsAbout description: Areas of professional expertise or specialization range: string multivalued: true + broad_mappings: + - dcterms:subject diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/exposed_via_portal.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/exposed_via_portal.yaml index 8a2ed9de7a..cc6389e52f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/exposed_via_portal.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/exposed_via_portal.yaml @@ -1,52 +1,66 @@ -# exposed_via_portal slot -# Links CustodianCollection to WebPortal for metadata exposure - id: https://nde.nl/ontology/hc/slot/exposed_via_portal name: exposed_via_portal - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ dcterms: http://purl.org/dc/terms/ edm: http://www.europeana.eu/schemas/edm/ - imports: - - linkml:types - +- linkml:types slots: exposed_via_portal: slot_uri: schema:isPartOf - description: | - Web portals through which this collection's metadata is discoverable. - + description: 'Web portals through which this collection''s metadata is discoverable. + + **RELATIONSHIP**: CustodianCollection → WebPortal - - A collection's metadata may be exposed through multiple discovery portals, + + + A collection''s metadata may be exposed through multiple discovery portals, + either directly or via aggregation chains. - + + **Direction**: Listed on CustodianCollection, pointing to WebPortal instances. + **Inverse**: WebPortal.exposes_collections - + + **Examples**: + - Rijksmuseum Paintings Collection → [Collectie Nederland, Europeana] + - National Archives WW2 Records → [Archieven.nl, Archives Portal Europe] + - University Library Special Collections → [WorldCat, GBV union catalog] - + + **Aggregation Chains**: + Some portals aggregate FROM other portals: + - CMS → Regional Portal → National Portal → Europeana + Track only DIRECT portal exposure; portal-to-portal relationships + are captured on WebPortal.aggregated_by and WebPortal.aggregates_from. - + + **Ontology Alignment**: + - Schema.org: `schema:isPartOf` - collection is part of portal aggregation + - EDM: Related to `edm:aggregatedCHO` concept + + ' range: WebPortal multivalued: true inlined_as_list: true examples: - - value: "https://nde.nl/ontology/hc/portal/nl/archieven-nl" - description: "Collection exposed through Archieven.nl" - - value: "https://nde.nl/ontology/hc/portal/eu/europeana" - description: "Collection exposed through Europeana" + - value: https://nde.nl/ontology/hc/portal/nl/archieven-nl + description: Collection exposed through Archieven.nl + - value: https://nde.nl/ontology/hc/portal/eu/europeana + description: Collection exposed through Europeana + broad_mappings: + - schema:url diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/exposes_collections.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/exposes_collections.yaml index 39f7a07aba..9d71a79dcd 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/exposes_collections.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/exposes_collections.yaml @@ -1,63 +1,35 @@ -# Slot: exposes_collections -# Inverse of exposed_via_portal (schema:isPartOf) -# WebPortal → CustodianCollection relationship - id: https://nde.nl/ontology/hc/slot/exposes_collections name: exposes_collections title: Exposes Collections - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ edm: http://www.europeana.eu/schemas/edm/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: exposes_collections: slot_uri: schema:hasPart - description: | - Collections whose metadata is exposed through this web portal. - - **RELATIONSHIP**: WebPortal → CustodianCollection - - This is the inverse of `exposed_via_portal`, allowing navigation - from a portal to all collections it aggregates. - - **INVERSE PROPERTY**: - - **Inverse**: `exposed_via_portal` (schema:isPartOf) - - Pattern: If Portal exposesCollections Collection, then Collection exposed_via_portal Portal - - **Example**: - ```yaml - WebPortal: - portal_name: "Europeana" - exposes_collections: - - "https://nde.nl/ontology/hc/collection/nl/rm-paintings" - - "https://nde.nl/ontology/hc/collection/fr/louvre-sculptures" - ``` - - **Navigation**: - - From portal: Find all exposed collections (exposes_collections) - - From collection: Find exposing portals (exposed_via_portal) - - **Ontology Alignment**: - - Schema.org: `schema:hasPart` - inverse of isPartOf - - EDM: Related to `edm:aggregatedCHO` concept + description: "Collections whose metadata is exposed through this web portal.\n\n**RELATIONSHIP**: WebPortal → CustodianCollection\n\ + \nThis is the inverse of `exposed_via_portal`, allowing navigation\nfrom a portal to all collections it aggregates.\n\ + \n**INVERSE PROPERTY**:\n- **Inverse**: `exposed_via_portal` (schema:isPartOf)\n- Pattern: If Portal exposesCollections\ + \ Collection, then Collection exposed_via_portal Portal\n\n**Example**:\n```yaml\nWebPortal:\n portal_name: \"Europeana\"\ + \n exposes_collections:\n - \"https://nde.nl/ontology/hc/collection/nl/rm-paintings\"\n - \"https://nde.nl/ontology/hc/collection/fr/louvre-sculptures\"\ + \n```\n\n**Navigation**:\n- From portal: Find all exposed collections (exposes_collections)\n- From collection: Find\ + \ exposing portals (exposed_via_portal)\n\n**Ontology Alignment**:\n- Schema.org: `schema:hasPart` - inverse of isPartOf\n\ + - EDM: Related to `edm:aggregatedCHO` concept\n" range: CustodianCollection multivalued: true - exact_mappings: - - schema:hasPart - + - schema:hasPart related_mappings: - - edm:aggregatedCHO - - dcterms:hasPart - + - edm:aggregatedCHO + - dcterms:hasPart comments: - - "Inverse of exposed_via_portal (schema:isPartOf)" - - "Allows finding all collections aggregated by a portal" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of exposed_via_portal (schema:isPartOf) + - Allows finding all collections aggregated by a portal + - Creates owl:inverseOf axiom in RDF output + close_mappings: + - schema:collection diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/extent.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/extent.yaml index 705e04f3e6..ceb0fe1bff 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/extent.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/extent.yaml @@ -1,17 +1,23 @@ -# Custodian Slot: extent -# Size/quantity of collection - id: https://nde.nl/ontology/hc/slot/extent name: extent_slot - slots: extent: slot_uri: dcterms:extent range: string - description: | - Size/quantity of collection. + description: 'Size/quantity of collection. + Examples: + - "1,200 linear meters" + - "45,000 objects" + - "2.3 million books" + - "150 manuscript volumes" + + ' + exact_mappings: + - dcterms:extent + close_mappings: + - schema:size diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/extent_items.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/extent_items.yaml new file mode 100644 index 0000000000..43be44ea4c --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/extent_items.yaml @@ -0,0 +1,27 @@ +id: https://nde.nl/ontology/hc/slot/extent_items +name: extent_items +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ +slots: + extent_items: + slot_uri: schema:numberOfItems + description: 'Numeric count of items (when countable). + + + Schema.org: numberOfItems for countable collections. + + + Use when precise item count is known. + + ' + range: integer + required: false + examples: + - value: 125 + description: 125 artworks + - value: 342 + description: 342 manuscripts + broad_mappings: + - schema:itemListElement diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/external_identifiers.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/external_identifiers.yaml index 81f0654094..42aa74d93d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/external_identifiers.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/external_identifiers.yaml @@ -1,23 +1,19 @@ -# Slot: external_identifiers -# External identifier URIs for entities - id: https://nde.nl/ontology/hc/slot/external_identifiers name: external_identifiers_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: external_identifiers: slot_uri: dcterms:identifier range: uriorcurie multivalued: true - description: >- - External identifier URIs for this entity (Wikidata, VIAF, RKDimages, etc.). + description: External identifier URIs for this entity (Wikidata, VIAF, RKDimages, etc.). + exact_mappings: + - dcterms:identifier + close_mappings: + - schema:identifier diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/extraction_confidence.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/extraction_confidence.yaml index c8398cf6c2..bd285d29ac 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/extraction_confidence.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/extraction_confidence.yaml @@ -1,22 +1,20 @@ -# Global Slot: extraction_confidence -# Confidence score for data extraction (0.0-1.0) - id: https://nde.nl/ontology/hc/slot/extraction_confidence name: extraction_confidence_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# - default_prefix: hc - slots: extraction_confidence: slot_uri: prov:value range: float minimum_value: 0.0 maximum_value: 1.0 - description: | - Confidence score for extracted data (0.0-1.0). + description: 'Confidence score for extracted data (0.0-1.0). + Higher values indicate higher confidence in extraction accuracy. + + ' + broad_mappings: + - prov:value diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/extraction_metadata.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/extraction_metadata.yaml index 853a77c3df..835a94a969 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/extraction_metadata.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/extraction_metadata.yaml @@ -1,57 +1,30 @@ -# Extraction Metadata Slot -# Reusable slot for linking to ExtractionMetadata provenance - id: https://nde.nl/ontology/hc/slot/extraction_metadata name: extraction_metadata_slot title: Extraction Metadata Slot version: 1.0.0 - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# - imports: - - linkml:types - - ../classes/ExtractionMetadata - +- linkml:types +- ../classes/ExtractionMetadata slots: extraction_metadata: slot_uri: prov:wasGeneratedBy - description: | - Provenance metadata for how this observation/record was extracted. - - Records the extraction activity including: - - source_file: Path to input data source - - extraction_date: When extraction occurred - - extraction_method: Tool/API used (exa, firecrawl, manual, etc.) - - extraction_agent: AI agent that performed extraction - - cost_usd: API cost for the extraction - - **PROV-O Alignment**: - - This slot represents prov:wasGeneratedBy relationship - - Links the observation (prov:Entity) to the extraction (prov:Activity) - - **Use Cases**: - - PersonObservation: Track how staff data was extracted - - WebObservation: Track web scraping provenance - - CustodianObservation: Track custodian data extraction - - LinkedInProfile: Track LinkedIn profile extraction - - ConnectionNetwork: Track connection list extraction - - **Example**: - ```yaml - extraction_metadata: - source_file: data/custodian/person/affiliated/parsed/rijksmuseum_staff.json - extraction_date: "2025-12-12T22:00:00Z" - extraction_method: exa_crawling_exa - extraction_agent: claude-opus-4.5 - cost_usd: 0.001 - ``` - - **See Also**: - - ExtractionMetadata class for full field definitions - - AGENTS.md Rule 20 for required provenance fields + description: "Provenance metadata for how this observation/record was extracted.\n\nRecords the extraction activity including:\n\ + - source_file: Path to input data source\n- extraction_date: When extraction occurred\n- extraction_method: Tool/API\ + \ used (exa, firecrawl, manual, etc.)\n- extraction_agent: AI agent that performed extraction\n- cost_usd: API cost\ + \ for the extraction\n\n**PROV-O Alignment**:\n- This slot represents prov:wasGeneratedBy relationship\n- Links the\ + \ observation (prov:Entity) to the extraction (prov:Activity)\n\n**Use Cases**:\n- PersonObservation: Track how staff\ + \ data was extracted\n- WebObservation: Track web scraping provenance\n- CustodianObservation: Track custodian data\ + \ extraction\n- LinkedInProfile: Track LinkedIn profile extraction\n- ConnectionNetwork: Track connection list extraction\n\ + \n**Example**:\n```yaml\nextraction_metadata:\n source_file: data/custodian/person/affiliated/parsed/rijksmuseum_staff.json\n\ + \ extraction_date: \"2025-12-12T22:00:00Z\"\n extraction_method: exa_crawling_exa\n extraction_agent: claude-opus-4.5\n\ + \ cost_usd: 0.001\n```\n\n**See Also**: \n- ExtractionMetadata class for full field definitions\n- AGENTS.md Rule 20\ + \ for required provenance fields\n" range: ExtractionMetadata inlined: true required: false + close_mappings: + - prov:Entity diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/extraction_method.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/extraction_method.yaml index a91fe61d5d..9df374d7f8 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/extraction_method.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/extraction_method.yaml @@ -1,24 +1,21 @@ -# Slot: extraction_method -# Method/tool used to extract data - id: https://nde.nl/ontology/hc/slot/extraction_method name: extraction_method_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# - imports: - - linkml:types - +- linkml:types default_range: string - slots: extraction_method: description: Method or tool used to extract the data slot_uri: prov:wasGeneratedBy range: string comments: - - "ExtractionMetadata overrides range to ProfileExtractionMethodEnum" - - "CustodianTimelineEvent overrides range to TimelineExtractionMethodEnum" + - ExtractionMetadata overrides range to ProfileExtractionMethodEnum + - CustodianTimelineEvent overrides range to TimelineExtractionMethodEnum + close_mappings: + - prov:wasGeneratedBy + broad_mappings: + - prov:wasGeneratedBy diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/extraction_notes.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/extraction_notes.yaml index 5376e0e622..916c9135d4 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/extraction_notes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/extraction_notes.yaml @@ -1,20 +1,20 @@ -# Global Slot: extraction_notes -# Notes about data extraction process or quality - id: https://nde.nl/ontology/hc/slot/extraction_notes name: extraction_notes_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - default_prefix: hc - slots: extraction_notes: slot_uri: dcterms:description range: string - description: | - Notes about the extraction process, data quality, or interpretation. + description: 'Notes about the extraction process, data quality, or interpretation. + Used to document edge cases or ambiguities in extracted data. + + ' + close_mappings: + - skos:note + broad_mappings: + - skos:note diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/extraction_timestamp.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/extraction_timestamp.yaml index eae0634522..09850ec09e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/extraction_timestamp.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/extraction_timestamp.yaml @@ -1,24 +1,17 @@ -# Slot: extraction_timestamp -# Timestamp when data was extracted from source - id: https://nde.nl/ontology/hc/slot/extraction_timestamp name: extraction_timestamp_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# - imports: - - linkml:types - +- linkml:types default_range: string - slots: extraction_timestamp: slot_uri: hc:extractionTimestamp range: datetime - description: >- - When the data was extracted from the source. - May differ from retrieved_on if extraction happens later than archival. - ISO 8601 format with timezone. + description: When the data was extracted from the source. May differ from retrieved_on if extraction happens later than + archival. ISO 8601 format with timezone. + broad_mappings: + - prov:generatedAtTime diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/feeds_portal.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/feeds_portal.yaml index 6a0c5d44f8..ba554f3666 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/feeds_portal.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/feeds_portal.yaml @@ -1,60 +1,33 @@ -# Slot: feeds_portal -# Inverse of portal_data_sources (edm:dataProvider) -# CollectionManagementSystem → WebPortal relationship - id: https://nde.nl/ontology/hc/slot/feeds_portal name: feeds_portal title: Feeds Portal - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ edm: http://www.europeana.eu/schemas/edm/ schema: http://schema.org/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: feeds_portal: slot_uri: hc:feeds_portal - description: | - Web portals that receive data from this collection management system. - - **RELATIONSHIP**: CMS → WebPortal (aggregation) - - This is the inverse of `portal_data_sources`, allowing navigation - from a CMS to all portals it feeds data to. - - **INVERSE PROPERTY**: - - **Inverse**: `portal_data_sources` (edm:dataProvider) - - Pattern: If CMS feedsPortal Portal, then Portal portal_data_sources CMS - - **Example**: - ```yaml - CollectionManagementSystem: - cms_name: "MAIS-Flexis at Gelders Archief" - feeds_portal: - - "https://nde.nl/ontology/hc/portal/nl/archieven-nl" - - "https://nde.nl/ontology/hc/portal/eu/archives-portal-europe" - ``` - - **Data Flow**: - - CMS exports metadata → Portal aggregates → Users discover - - Multiple CMSs feed a single portal - - Single CMS may feed multiple portals - - **Navigation**: - - From CMS: Find all portals receiving data (feeds_portal) - - From portal: Find all CMS data sources (portal_data_sources) + description: "Web portals that receive data from this collection management system.\n\n**RELATIONSHIP**: CMS → WebPortal\ + \ (aggregation)\n\nThis is the inverse of `portal_data_sources`, allowing navigation\nfrom a CMS to all portals it feeds\ + \ data to.\n\n**INVERSE PROPERTY**:\n- **Inverse**: `portal_data_sources` (edm:dataProvider)\n- Pattern: If CMS feedsPortal\ + \ Portal, then Portal portal_data_sources CMS\n\n**Example**:\n```yaml\nCollectionManagementSystem:\n cms_name: \"\ + MAIS-Flexis at Gelders Archief\"\n feeds_portal:\n - \"https://nde.nl/ontology/hc/portal/nl/archieven-nl\"\n \ + \ - \"https://nde.nl/ontology/hc/portal/eu/archives-portal-europe\"\n```\n\n**Data Flow**:\n- CMS exports metadata →\ + \ Portal aggregates → Users discover\n- Multiple CMSs feed a single portal\n- Single CMS may feed multiple portals\n\ + \n**Navigation**:\n- From CMS: Find all portals receiving data (feeds_portal)\n- From portal: Find all CMS data sources\ + \ (portal_data_sources)\n" range: WebPortal multivalued: true - exact_mappings: - - edm:provider - + - edm:provider comments: - - "Inverse of portal_data_sources (edm:dataProvider)" - - "Tracks which portals a CMS deployment sends data to" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of portal_data_sources (edm:dataProvider) + - Tracks which portals a CMS deployment sends data to + - Creates owl:inverseOf axiom in RDF output + broad_mappings: + - schema:url diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/finding_aids.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/finding_aids.yaml new file mode 100644 index 0000000000..2bc71cd4c2 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/finding_aids.yaml @@ -0,0 +1,30 @@ +id: https://nde.nl/ontology/hc/slot/finding_aids +name: finding_aids +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + finding_aids: + slot_uri: rico:isDescribedBy + description: 'Finding aids describing this collection. + + + RiC-O: isDescribedBy links RecordSet to its descriptive instruments. + + + Includes inventories, catalogs, indexes, and other finding aids + + that provide intellectual access to the collection. + + ' + range: FindingAid + multivalued: true + required: false + examples: + - value: https://nde.nl/ontology/hc/finding-aid/voc-inventory + description: VOC collection inventory + close_mappings: + - rico:hasInstantiation + related_mappings: + - schema:url diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/follow_up_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/follow_up_date.yaml index 583a7c3f33..608cdf4ef3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/follow_up_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/follow_up_date.yaml @@ -2,17 +2,30 @@ id: https://nde.nl/ontology/hc/slot/follow_up_date name: follow_up_date_slot title: Follow Up Date Slot description: Shared slot for follow-up dates across heritage custodian entities - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ - + schema: http://schema.org/ imports: - - linkml:types - +- linkml:types default_range: string - slots: follow_up_date: - description: Scheduled date for follow-up action or review + slot_uri: schema:scheduledTime + description: 'Scheduled date for follow-up action or review. + + + Schema.org: scheduledTime - "The time the object is scheduled to." + + + Used for planning verification tasks, re-enrichment schedules, + + or data quality review dates. + + ' range: date + close_mappings: + - schema:dateModified + - schema:scheduledTime + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/funding_source.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/funding_source.yaml index 27b17b4b8b..2ca44f322e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/funding_source.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/funding_source.yaml @@ -1,26 +1,27 @@ -# Global Slot: funding_source -# Where an organization/project obtains its funding resources - id: https://nde.nl/ontology/hc/slot/funding_source name: funding_source_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - slots: funding_source: slot_uri: schema:funder range: string - description: | - Source of funding for this organization, project, or platform. + description: 'Source of funding for this organization, project, or platform. + May reference a funding organization, grant program, government appropriation, + or other funding mechanism. + + ' examples: - - value: "Dutch Ministry of OCW annual budget" - - value: "Horizon Europe Framework Programme" - - value: "National Lottery proceeds" - - value: "Private foundation endowment" + - value: Dutch Ministry of OCW annual budget + - value: Horizon Europe Framework Programme + - value: National Lottery proceeds + - value: Private foundation endowment + close_mappings: + - schema:funder + broad_mappings: + - dcterms:source diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/gender_identity.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/gender_identity.yaml index d4f2ade909..b8a34e2dce 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/gender_identity.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/gender_identity.yaml @@ -1,79 +1,46 @@ -# Gender Identity Slot -# -# DESIGN PRINCIPLE: Inclusive, self-determined gender expression -# -# This slot follows Schema.org's explicit guidance that "text strings are also -# acceptable for people who are not a binary gender" (schema.org/gender). -# -# We use FREE-TEXT rather than an enum to: -# 1. Respect self-identification (people define their own gender) -# 2. Support cultural/historical variations in gender concepts -# 3. Avoid forcing people into categories that don't fit them -# 4. Allow for terms that may not exist yet or are culturally specific -# -# See also: FOAF's gender property which notes it is "typically but not -# necessarily 'male' or 'female'" (foaf:gender) - id: https://nde.nl/ontology/hc/slot/gender_identity name: gender_identity_slot title: Gender Identity Slot - prefixes: schema: http://schema.org/ foaf: http://xmlns.com/foaf/0.1/ pico: https://personsincontext.org/model# - imports: - - linkml:types - +- linkml:types slots: gender_identity: slot_uri: schema:gender - description: >- - The person's gender identity as they define it. This is a free-text field - that respects self-identification and does not impose binary categories. + description: The person's gender identity as they define it. This is a free-text field that respects self-identification + and does not impose binary categories. comments: - - >- - **Inclusive Design**: This field intentionally uses free text rather than - a restrictive enumeration. People should be able to express their gender - in their own terms. - - >- - **Common values** (not exhaustive, not required): man, woman, non-binary, - genderqueer, genderfluid, agender, bigender, two-spirit, transgender, - cisgender, or any self-identified term. - - >- - **Historical records**: For historical persons, use terms as recorded in - sources where possible, or use contextually appropriate terms. - - >- - **Unknown/Not recorded**: Leave empty if unknown; do not assume. - - >- - **Privacy**: This field may be left empty by choice. Absence of data - should not be interpreted as absence of identity. + - '**Inclusive Design**: This field intentionally uses free text rather than a restrictive enumeration. People should + be able to express their gender in their own terms.' + - '**Common values** (not exhaustive, not required): man, woman, non-binary, genderqueer, genderfluid, agender, bigender, + two-spirit, transgender, cisgender, or any self-identified term.' + - '**Historical records**: For historical persons, use terms as recorded in sources where possible, or use contextually + appropriate terms.' + - '**Unknown/Not recorded**: Leave empty if unknown; do not assume.' + - '**Privacy**: This field may be left empty by choice. Absence of data should not be interpreted as absence of identity.' range: string examples: - - value: "non-binary" - description: "Self-identified non-binary person" - - value: "woman" - description: "Self-identified woman" - - value: "man" - description: "Self-identified man" - - value: "genderfluid" - description: "Self-identified genderfluid person" - - value: "two-spirit" - description: "Indigenous North American gender identity" - - value: "transgender woman" - description: "Self-identified transgender woman" - - value: "not specified" - description: "Person chose not to specify" + - value: non-binary + description: Self-identified non-binary person + - value: woman + description: Self-identified woman + - value: man + description: Self-identified man + - value: genderfluid + description: Self-identified genderfluid person + - value: two-spirit + description: Indigenous North American gender identity + - value: transgender woman + description: Self-identified transgender woman + - value: not specified + description: Person chose not to specify notes: - - >- - Schema.org explicitly states: "While https://schema.org/Male and - https://schema.org/Female may be used, text strings are also acceptable - for people who are not a binary gender." - - >- - FOAF defines foaf:gender as "The gender of this Agent (typically but - not necessarily 'male' or 'female')." - - >- - This approach aligns with modern data protection principles (GDPR) - regarding sensitive personal data and self-determination. - # NOTE: Applicable to all custodian types that track person data + - 'Schema.org explicitly states: "While https://schema.org/Male and https://schema.org/Female may be used, text strings + are also acceptable for people who are not a binary gender."' + - FOAF defines foaf:gender as "The gender of this Agent (typically but not necessarily 'male' or 'female')." + - This approach aligns with modern data protection principles (GDPR) regarding sensitive personal data and self-determination. + exact_mappings: + - schema:gender diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/geographic_scope.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/geographic_scope.yaml index 0541ea291f..702d9110eb 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/geographic_scope.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/geographic_scope.yaml @@ -1,22 +1,23 @@ -# Global Slot: geographic_scope -# Geographic reach and scale of an entity's activities - id: https://nde.nl/ontology/hc/slot/geographic_scope name: geographic_scope_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - slots: geographic_scope: slot_uri: schema:areaServed - description: | - Geographic reach and scale of an entity's activities. + description: 'Geographic reach and scale of an entity''s activities. + May be country codes, region names, or descriptive terms + like "International", "Regional", "National", "Local". + + ' range: string multivalued: true + exact_mappings: + - dcterms:spatial + broad_mappings: + - dcterms:coverage diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/geonames_id.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/geonames_id.yaml index d9e84ddbe7..41772dab6e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/geonames_id.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/geonames_id.yaml @@ -1,40 +1,46 @@ -# geonames_id slot - GeoNames numeric identifier -# Used by: Settlement, AuxiliaryPlace, GeoSpatialPlace - id: https://nde.nl/ontology/hc/slot/geonames_id name: geonames_id_slot title: GeoNames ID Slot +description: 'GeoNames numeric identifier for geographic entities. + -description: | - GeoNames numeric identifier for geographic entities. - Format: Integer (e.g., 2759794 for Amsterdam, 5206379 for Pittsburgh) - + + Lookup: https://www.geonames.org/{geonames_id}/ - + + Benefits: + - Resolves ambiguity (41 "Springfield"s in USA have different IDs) + - Stable identifier (persists even if location name changes) + - Links to coordinates, population, timezone via GeoNames API + ' prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ gn: http://www.geonames.org/ontology# - slots: geonames_id: slot_uri: gn:geonamesID range: integer required: false multivalued: false - description: | - GeoNames numeric identifier for geographic entity. - Lookup: https://www.geonames.org/{geonames_id}/ - exact_mappings: - - gn:geonamesID + description: 'GeoNames numeric identifier for geographic entity. + Lookup: https://www.geonames.org/{geonames_id}/ + + ' + exact_mappings: + - gn:geonamesID + narrow_mappings: + - dcterms:identifier + broad_mappings: + - dcterms:identifier comments: - - "Used by Settlement, AuxiliaryPlace, and GeoSpatialPlace classes" - - "Lookup URL: https://www.geonames.org/{geonames_id}/" - - "Example: 2759794 (Amsterdam), 5206379 (Pittsburgh), 3451190 (Rio de Janeiro)" +- Used by Settlement, AuxiliaryPlace, and GeoSpatialPlace classes +- 'Lookup URL: https://www.geonames.org/{geonames_id}/' +- 'Example: 2759794 (Amsterdam), 5206379 (Pittsburgh), 3451190 (Rio de Janeiro)' diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/given_name.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/given_name.yaml index aeaf0ea375..181d6f0c1f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/given_name.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/given_name.yaml @@ -1,46 +1,62 @@ id: https://nde.nl/ontology/hc/slot/given_name name: given_name title: Given Name - prefixes: pnv: https://w3id.org/pnv# sdo: https://schema.org/ - imports: - - linkml:types - +- linkml:types slots: given_name: slot_uri: pnv:givenName - description: | - The name(s) given to someone at birth or any other name-giving event. - + description: 'The name(s) given to someone at birth or any other name-giving event. + + In the Person Name Vocabulary (PNV), this represents the given name + component of a structured person name. It may include: - + + - Single given name: "Pieter" + - Multiple given names: "Jan Willem" + - Nicknames/call names: "Hans" (from "H.A.F.M.O. (Hans)") + - Diminutives: "Pietje" - + + For historical Dutch records, this typically corresponds to the + "voornaam" (first name) or "roepnaam" (call name). - + + If only initials are known, either: + - Use the initials slot (preferred): "P.R." + - Or put initials here as fallback: "P.R." - + + Examples: + - "Maria" (simple given name) + - "Johannes Wilhelmus" (multiple given names) + - "Hans" (extracted from "H.A.F.M.O. (Hans) van Mierlo") + - "Geertje" (diminutive of Geertruid) - + + ' range: string exact_mappings: - - pnv:givenName + - pnv:givenName + - schema:givenName close_mappings: - - sdo:givenName - - foaf:firstName + - sdo:givenName + - foaf:firstName related_mappings: - - foaf:givenName + - foaf:givenName + broad_mappings: + - rdfs:label diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/has_collection.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/has_collection.yaml index 694657618f..ed75281e69 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/has_collection.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/has_collection.yaml @@ -1,54 +1,32 @@ -# Custodian Slot: has_collection -# Links Custodian hub to CustodianCollection aspect -# Inverse of collection_of (crm:P46i_forms_part_of) - id: https://nde.nl/ontology/hc/slot/has_collection name: has_collection_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ crm: http://www.cidoc-crm.org/cidoc-crm/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: has_collection: slot_uri: crm:P46_is_composed_of - description: | - Heritage collection(s) associated with this custodian. - - **CIDOC-CRM Alignment**: - - Property: `crm:P46_is_composed_of` - - Domain: E18_Physical_Thing (Custodian conceptually) - - Range: E18_Physical_Thing (CustodianCollection) - - Definition: "This property associates an instance of E18 Physical Thing - with another instance of E18 Physical Thing that forms a component of it." - - **INVERSE PROPERTY**: - - **Inverse**: `collection_of` (crm:P46i_forms_part_of) - - Pattern: If Custodian hasCollection Collection, then Collection collectionOf Custodian - - This property enables metonymic references: when people refer to a custodian, - they often mean its collection. CustodianCollection makes this explicit. - - **Examples**: - - "The Rijksmuseum has a Rembrandt" = Collection aspect contains artwork - - "The Archives holds parish records" = Collection aspect includes documents + description: "Heritage collection(s) associated with this custodian.\n\n**CIDOC-CRM Alignment**:\n\nProperty: `crm:P46_is_composed_of`\n\ + - Domain: E18_Physical_Thing (Custodian conceptually)\n- Range: E18_Physical_Thing (CustodianCollection)\n- Definition:\ + \ \"This property associates an instance of E18 Physical Thing \n with another instance of E18 Physical Thing that\ + \ forms a component of it.\"\n\n**INVERSE PROPERTY**:\n- **Inverse**: `collection_of` (crm:P46i_forms_part_of)\n- Pattern:\ + \ If Custodian hasCollection Collection, then Collection collectionOf Custodian\n\nThis property enables metonymic references:\ + \ when people refer to a custodian,\nthey often mean its collection. CustodianCollection makes this explicit.\n\n**Examples**:\n\ + - \"The Rijksmuseum has a Rembrandt\" = Collection aspect contains artwork\n- \"The Archives holds parish records\"\ + \ = Collection aspect includes documents\n" range: CustodianCollection multivalued: true inlined_as_list: true - exact_mappings: - - crm:P46_is_composed_of - + - crm:P46_is_composed_of related_mappings: - - rico:includesOrIncluded - - schema:hasPart - + - rico:includesOrIncluded + - schema:hasPart + - rdf:type comments: - - "Inverse of collection_of (crm:P46i_forms_part_of)" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of collection_of (crm:P46i_forms_part_of) + - Creates owl:inverseOf axiom in RDF output diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/has_derived_observation.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/has_derived_observation.yaml index b188dee558..924355820b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/has_derived_observation.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/has_derived_observation.yaml @@ -1,54 +1,33 @@ -# Slot: has_derived_observation -# Inverse of derived_from_entity -# Links CustodianLegalStatus to CustodianObservations that reference it - id: https://nde.nl/ontology/hc/slot/has_derived_observation name: has_derived_observation title: Has Derived Observation - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: has_derived_observation: slot_uri: prov:hadDerivation - description: | - Observations that were derived from (reference) this legal status entity. - - **INVERSE PROPERTY**: - - **Inverse**: `derived_from_entity` - - Pattern: If Observation derived_from_entity LegalStatus, then LegalStatus has_derived_observation Observation - - **Provenance semantics** (PROV-O): - - `prov:wasDerivedFrom` (derived_from_entity): Observation → LegalStatus - - `prov:hadDerivation` (this slot): LegalStatus → Observation - - **Example**: - ```yaml - CustodianLegalStatus: - legal_name: "Stichting Rijksmuseum" - has_derived_observation: - - "https://nde.nl/ontology/hc/observation/rm-obs-2024-001" - - "https://nde.nl/ontology/hc/observation/rm-obs-2024-002" - ``` - - **Navigation**: - - From legal status: Find all observations that reference it (has_derived_observation) - - From observation: Find formal entity it references (derived_from_entity) - - **Use case**: Track which source observations led to a legal status entity being - identified or updated. Enables provenance chain traversal in both directions. + description: "Observations that were derived from (reference) this legal status entity.\n\n**INVERSE PROPERTY**:\n- **Inverse**:\ + \ `derived_from_entity`\n- Pattern: If Observation derived_from_entity LegalStatus, then LegalStatus has_derived_observation\ + \ Observation\n\n**Provenance semantics** (PROV-O):\n- `prov:wasDerivedFrom` (derived_from_entity): Observation → LegalStatus\n\ + - `prov:hadDerivation` (this slot): LegalStatus → Observation\n\n**Example**:\n```yaml\nCustodianLegalStatus:\n legal_name:\ + \ \"Stichting Rijksmuseum\"\n has_derived_observation:\n - \"https://nde.nl/ontology/hc/observation/rm-obs-2024-001\"\ + \n - \"https://nde.nl/ontology/hc/observation/rm-obs-2024-002\"\n```\n\n**Navigation**:\n- From legal status: Find\ + \ all observations that reference it (has_derived_observation)\n- From observation: Find formal entity it references\ + \ (derived_from_entity)\n\n**Use case**: Track which source observations led to a legal status entity being\nidentified\ + \ or updated. Enables provenance chain traversal in both directions.\n" range: CustodianObservation multivalued: true - comments: - - "Inverse of derived_from_entity" - - "Links legal status back to observations that reference it" - - "Creates owl:inverseOf axiom in RDF output" - - "PROV-O pattern: prov:hadDerivation is inverse of prov:wasDerivedFrom" + - Inverse of derived_from_entity + - Links legal status back to observations that reference it + - Creates owl:inverseOf axiom in RDF output + - 'PROV-O pattern: prov:hadDerivation is inverse of prov:wasDerivedFrom' + related_mappings: + - rdf:type + broad_mappings: + - prov:Entity diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/has_feature_type.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/has_feature_type.yaml index 8af6aeb2aa..15d87ea8be 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/has_feature_type.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/has_feature_type.yaml @@ -1,41 +1,46 @@ -# has_feature_type slot - Physical feature type classification -# Used by: CustodianPlace, AuxiliaryPlace - id: https://nde.nl/ontology/hc/slot/has_feature_type name: has_feature_type_slot title: Has Feature Type Slot +description: 'Physical feature type classification for a place. + -description: | - Physical feature type classification for a place. - Links to FeaturePlace which classifies WHAT TYPE of physical feature the place is. - + + Dublin Core: type for classification relationship. - + + Examples: + - "Rijksmuseum" (place name) → MUSEUM (feature type) + - "het herenhuis" → MANSION (feature type) + - "de kerk op het Damrak" → PARISH_CHURCH (feature type) + - "Depot Amersfoort" → STORAGE_FACILITY (feature type) + ' prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - slots: has_feature_type: slot_uri: dcterms:type range: FeaturePlace required: false multivalued: false - description: | - Physical feature type classification for a place. - Links to FeaturePlace which classifies WHAT TYPE of physical feature the place is. - exact_mappings: - - dcterms:type + description: 'Physical feature type classification for a place. + Links to FeaturePlace which classifies WHAT TYPE of physical feature the place is. + + ' + exact_mappings: + - dcterms:type + related_mappings: + - rdf:type comments: - - "Used by CustodianPlace (main places) and AuxiliaryPlace (subordinate sites)" - - "Links to FeaturePlace class which provides enumeration of physical feature types" - - "Optional - not all place references require explicit feature typing" +- Used by CustodianPlace (main places) and AuxiliaryPlace (subordinate sites) +- Links to FeaturePlace class which provides enumeration of physical feature types +- Optional - not all place references require explicit feature typing diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/has_geospatial_location.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/has_geospatial_location.yaml index dddd96366e..d34a4ffac5 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/has_geospatial_location.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/has_geospatial_location.yaml @@ -1,36 +1,44 @@ -# has_geospatial_location slot - Links to geospatial coordinates -# Used by: CustodianPlace, AuxiliaryPlace - id: https://nde.nl/ontology/hc/slot/has_geospatial_location name: has_geospatial_location_slot title: Has Geospatial Location Slot +description: 'Links a nominal place reference to its precise geospatial coordinates. + -description: | - Links a nominal place reference to its precise geospatial coordinates. - **CRITICAL DISTINCTION**: - + + | Nominal Place | GeoSpatialPlace | + |---------------|-----------------| + | Name-based reference | Geospatial data | + | "het herenhuis in de Schilderswijk" | lat: 52.0705, lon: 4.2894 | + | Identifies place by name | Locates place precisely | + | May be vague ("the mansion") | Precise, measurable | + | Source: archival documents | Source: GPS, cadastral surveys | - + + **TOOI Ontology Pattern**: - + + Following TOOI BestuurlijkeRuimte pattern: + - TOOI: tooi:BestuurlijkeRuimte → tooi:hasGeometry → geosparql:Geometry + - Here: Place → has_geospatial_location → GeoSpatialPlace - + + GeoSPARQL: hasGeometry links Feature to Geometry representation. + ' prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ geosparql: http://www.opengis.net/ont/geosparql# - slots: has_geospatial_location: slot_uri: geosparql:hasGeometry @@ -38,14 +46,19 @@ slots: required: false multivalued: true inlined_as_list: true - description: | - Links a nominal place reference to its precise geospatial coordinates. - GeoSPARQL: hasGeometry links Feature to Geometry representation. - exact_mappings: - - geosparql:hasGeometry + description: 'Links a nominal place reference to its precise geospatial coordinates. + GeoSPARQL: hasGeometry links Feature to Geometry representation. + + ' + exact_mappings: + - geosparql:hasGeometry + related_mappings: + - rdf:type + broad_mappings: + - schema:location comments: - - "Used by CustodianPlace (main places) and AuxiliaryPlace (subordinate sites)" - - "Links to GeoSpatialPlace class with coordinates, WKT geometry, GeoNames IDs" - - "Multivalued - a place can have multiple geospatial locations (e.g., historical boundaries)" - - "Optional - not all place references have known coordinates" +- Used by CustodianPlace (main places) and AuxiliaryPlace (subordinate sites) +- Links to GeoSpatialPlace class with coordinates, WKT geometry, GeoNames IDs +- Multivalued - a place can have multiple geospatial locations (e.g., historical boundaries) +- Optional - not all place references have known coordinates diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/has_member.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/has_member.yaml index 484a455692..115874c7c1 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/has_member.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/has_member.yaml @@ -1,75 +1,38 @@ -# Slot: has_member -# Inverse of is_member_of (org:memberOf) -# W3C ORG pattern: org:hasMember ↔ org:memberOf - id: https://nde.nl/ontology/hc/slot/has_member name: has_member title: Has Member - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# foaf: http://xmlns.com/foaf/0.1/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: has_member: slot_uri: org:hasMember - description: | - Custodians that are members of this encompassing body (network, consortium, - umbrella organization). - - **W3C ORG Alignment**: - - Property: `org:hasMember` - - Domain: org:Organization (EncompassingBody) - - Range: foaf:Agent (Custodian) - - Definition: "Indicates an Agent who is a member of the Organization - with no indication of the nature of that membership." - - Equivalent to: foaf:member - - **INVERSE PROPERTY**: - - **Inverse**: `is_member_of` (org:memberOf) - - Pattern: If Network hasMember Custodian, then Custodian memberOf Network - - **Example**: - ```yaml - EncompassingBody: - organization_name: "Netwerk Digitaal Erfgoed" - organization_type: "NETWORK" - has_member: - - "https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804" # Rijksmuseum - - "https://nde.nl/ontology/hc/nl-na" # National Archives - - "https://nde.nl/ontology/hc/nl-kb" # Royal Library - ``` - - **Navigation**: - - From network: Find all member custodians (has_member) - - From custodian: Find network memberships (is_member_of) - - **Membership Types**: - - Members can have different participation levels: - - Full members: Voting rights, full service access - - Associate members: Limited participation - - Observer status: Information sharing only - - For detailed membership modeling, use Membership class (future extension). + description: "Custodians that are members of this encompassing body (network, consortium,\numbrella organization).\n\n\ + **W3C ORG Alignment**:\n\nProperty: `org:hasMember`\n- Domain: org:Organization (EncompassingBody)\n- Range: foaf:Agent\ + \ (Custodian)\n- Definition: \"Indicates an Agent who is a member of the Organization \n with no indication of the\ + \ nature of that membership.\"\n- Equivalent to: foaf:member\n\n**INVERSE PROPERTY**:\n- **Inverse**: `is_member_of`\ + \ (org:memberOf)\n- Pattern: If Network hasMember Custodian, then Custodian memberOf Network\n\n**Example**:\n```yaml\n\ + EncompassingBody:\n organization_name: \"Netwerk Digitaal Erfgoed\"\n organization_type: \"NETWORK\"\n has_member:\n\ + \ - \"https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804\" # Rijksmuseum\n - \"https://nde.nl/ontology/hc/nl-na\"\ + \ # National Archives\n - \"https://nde.nl/ontology/hc/nl-kb\" # Royal Library\n```\n\n**Navigation**:\n- From\ + \ network: Find all member custodians (has_member)\n- From custodian: Find network memberships (is_member_of)\n\n**Membership\ + \ Types**:\n\nMembers can have different participation levels:\n- Full members: Voting rights, full service access\n\ + - Associate members: Limited participation\n- Observer status: Information sharing only\n\nFor detailed membership modeling,\ + \ use Membership class (future extension).\n" range: Custodian multivalued: true - exact_mappings: - - org:hasMember - - foaf:member - + - org:hasMember + - foaf:member related_mappings: - - schema:member - + - schema:member + - rdf:type comments: - - "Inverse of is_member_of (org:memberOf)" - - "Equivalent to foaf:member" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of is_member_of (org:memberOf) + - Equivalent to foaf:member + - Creates owl:inverseOf axiom in RDF output diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/has_observation.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/has_observation.yaml index f0c0bd6dcb..b1ac28701a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/has_observation.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/has_observation.yaml @@ -1,56 +1,33 @@ -# Slot: has_observation -# Inverse of refers_to_custodian -# Links Custodian hub to its observations - id: https://nde.nl/ontology/hc/slot/has_observation name: has_observation title: Has Observation - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: has_observation: slot_uri: dcterms:isReferencedBy - description: | - Observations that refer to this Custodian hub. - - **Hub Architecture Pattern**: - - The Custodian is a minimal hub entity. Multiple observations from - different sources can be linked to it, each capturing evidence from - a particular context. - - **INVERSE PROPERTY**: - - **Inverse**: `refers_to_custodian` (dcterms:references) - - Pattern: If Observation refers_to_custodian Custodian, then Custodian has_observation Observation - - **Example**: - ```yaml - Custodian: - hc_id: "https://nde.nl/ontology/hc/nl-nh-ams-m-rm" - has_observation: - - "https://nde.nl/ontology/hc/observation/isil-registry-2024" - - "https://nde.nl/ontology/hc/observation/wikidata-q190804" - - "https://nde.nl/ontology/hc/observation/website-scrape-2025" - ``` - - **Navigation**: - - From custodian: Find all observations (has_observation) - - From observation: Find custodian hub (refers_to_custodian) + description: "Observations that refer to this Custodian hub.\n\n**Hub Architecture Pattern**:\n\nThe Custodian is a minimal\ + \ hub entity. Multiple observations from\ndifferent sources can be linked to it, each capturing evidence from\na particular\ + \ context.\n\n**INVERSE PROPERTY**:\n- **Inverse**: `refers_to_custodian` (dcterms:references)\n- Pattern: If Observation\ + \ refers_to_custodian Custodian, then Custodian has_observation Observation\n\n**Example**:\n```yaml\nCustodian:\n \ + \ hc_id: \"https://nde.nl/ontology/hc/nl-nh-ams-m-rm\"\n has_observation:\n - \"https://nde.nl/ontology/hc/observation/isil-registry-2024\"\ + \n - \"https://nde.nl/ontology/hc/observation/wikidata-q190804\"\n - \"https://nde.nl/ontology/hc/observation/website-scrape-2025\"\ + \n```\n\n**Navigation**:\n- From custodian: Find all observations (has_observation)\n- From observation: Find custodian\ + \ hub (refers_to_custodian)\n" range: CustodianObservation multivalued: true - exact_mappings: - - dcterms:isReferencedBy - + - dcterms:isReferencedBy comments: - - "Inverse of refers_to_custodian (dcterms:references)" - - "Links custodian hub to all its evidence/observations" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of refers_to_custodian (dcterms:references) + - Links custodian hub to all its evidence/observations + - Creates owl:inverseOf axiom in RDF output + related_mappings: + - rdf:type + broad_mappings: + - prov:Entity diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/has_person_name.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/has_person_name.yaml index d9542815a3..5ae95c6d36 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/has_person_name.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/has_person_name.yaml @@ -1,131 +1,72 @@ -# has_person_name slot -# Links a PersonObservation to a structured PersonName (PNV-aligned) -# -# This slot enables linking the simple person_name string to a fully -# structured PersonName class with PNV components (given_name, patronym, -# surname_prefix, base_surname, initials, etc.) - id: https://nde.nl/ontology/hc/slot/has_person_name name: has_person_name_slot title: Has Person Name (Structured PNV) - prefixes: pnv: https://w3id.org/pnv# pico: https://personsincontext.org/model# sdo: https://schema.org/ foaf: http://xmlns.com/foaf/0.1/ - imports: - - linkml:types - +- linkml:types slots: has_person_name: slot_uri: pnv:hasName - description: | - Structured name of the person following Person Name Vocabulary (PNV). - - =========================================================================== - RELATIONSHIP TO person_name SLOT - =========================================================================== - - PersonObservation has TWO name-related slots: - - 1. **person_name** (string): Simple full name as recorded in source - - Example: "Dr. Jane Smith" - - Always present for human-readable display - - Quick access without parsing structured components - - 2. **has_person_name** (PersonName): Structured name with PNV components - - Optional but recommended for Dutch/historical names - - Enables sorting by base_surname (Dutch convention) - - Supports patronymics, tussenvoegsels, initials - - Links to PersonName class with full PNV structure - - =========================================================================== - USE CASES FOR STRUCTURED NAMES - =========================================================================== - - 1. **Dutch Name Sorting**: - - "Maria de Vries" sorts under V (base_surname: "Vries") - - "Jan van den Berg" sorts under B (base_surname: "Berg") - - 2. **Historical Records with Patronymics**: - - "Jan Pieterszoon van der Waals" - - given_name: "Jan" - - patronym: "Pieterszoon" - - surname_prefix: "van der" - - base_surname: "Waals" - - 3. **Initial-Based Names (Common in NL)**: - - "H.A.F.M.O. (Hans) van Mierlo" - - initials: "H.A.F.M.O." - - given_name: "Hans" - - surname_prefix: "van" - - base_surname: "Mierlo" - - 4. **Unknown/Unnamed Persons** (historical records): - - name_specification: "unknown" or "unnamed" - - Prevents ambiguity between missing data and genuinely unnamed persons - - =========================================================================== - WHEN TO USE has_person_name - =========================================================================== - - ALWAYS use has_person_name when: - - Name has Dutch surname prefix (tussenvoegsel) - - Name has patronymic component - - Name contains initials alongside given name - - Historical name with uncertain/variable spelling - - Need to sort by base_surname (Dutch alphabetization) - - OPTIONAL (person_name string sufficient) when: - - Simple Western name: "John Smith" - - No special components to parse - - Quick data entry without structured analysis - - =========================================================================== - ONTOLOGY ALIGNMENT - =========================================================================== - - - PNV: `pnv:hasName` (primary - links person to PersonName) - - Schema.org: `sdo:name` (fallback for simple string via person_name slot) - - FOAF: `foaf:name` (fallback for simple string) - - CIDOC-CRM: `crm:P1_is_identified_by` (general identification relationship) - + description: "Structured name of the person following Person Name Vocabulary (PNV).\n\n===========================================================================\n\ + RELATIONSHIP TO person_name SLOT\n===========================================================================\n\nPersonObservation\ + \ has TWO name-related slots:\n\n1. **person_name** (string): Simple full name as recorded in source\n - Example:\ + \ \"Dr. Jane Smith\"\n - Always present for human-readable display\n - Quick access without parsing structured components\n\ + \n2. **has_person_name** (PersonName): Structured name with PNV components\n - Optional but recommended for Dutch/historical\ + \ names\n - Enables sorting by base_surname (Dutch convention)\n - Supports patronymics, tussenvoegsels, initials\n\ + \ - Links to PersonName class with full PNV structure\n\n===========================================================================\n\ + USE CASES FOR STRUCTURED NAMES\n===========================================================================\n\n1. **Dutch\ + \ Name Sorting**: \n - \"Maria de Vries\" sorts under V (base_surname: \"Vries\")\n - \"Jan van den Berg\" sorts\ + \ under B (base_surname: \"Berg\")\n\n2. **Historical Records with Patronymics**:\n - \"Jan Pieterszoon van der Waals\"\ + \n - given_name: \"Jan\"\n - patronym: \"Pieterszoon\"\n - surname_prefix: \"van der\"\n - base_surname: \"\ + Waals\"\n\n3. **Initial-Based Names (Common in NL)**:\n - \"H.A.F.M.O. (Hans) van Mierlo\"\n - initials: \"H.A.F.M.O.\"\ + \n - given_name: \"Hans\"\n - surname_prefix: \"van\"\n - base_surname: \"Mierlo\"\n\n4. **Unknown/Unnamed Persons**\ + \ (historical records):\n - name_specification: \"unknown\" or \"unnamed\"\n - Prevents ambiguity between missing\ + \ data and genuinely unnamed persons\n\n===========================================================================\n\ + WHEN TO USE has_person_name\n===========================================================================\n\nALWAYS use\ + \ has_person_name when:\n- Name has Dutch surname prefix (tussenvoegsel)\n- Name has patronymic component\n- Name contains\ + \ initials alongside given name\n- Historical name with uncertain/variable spelling\n- Need to sort by base_surname\ + \ (Dutch alphabetization)\n\nOPTIONAL (person_name string sufficient) when:\n- Simple Western name: \"John Smith\"\n\ + - No special components to parse\n- Quick data entry without structured analysis\n\n===========================================================================\n\ + ONTOLOGY ALIGNMENT\n===========================================================================\n\n- PNV: `pnv:hasName`\ + \ (primary - links person to PersonName)\n- Schema.org: `sdo:name` (fallback for simple string via person_name slot)\n\ + - FOAF: `foaf:name` (fallback for simple string)\n- CIDOC-CRM: `crm:P1_is_identified_by` (general identification relationship)\n" range: PersonName required: false inlined: true - comments: - - "PNV standard: https://w3id.org/pnv" - - "Use alongside person_name (string) for both quick access and structured parsing" - - "Essential for Dutch names with tussenvoegsels (van, de, van der, etc.)" - - "Enables proper alphabetical sorting by base_surname" - + - 'PNV standard: https://w3id.org/pnv' + - Use alongside person_name (string) for both quick access and structured parsing + - Essential for Dutch names with tussenvoegsels (van, de, van der, etc.) + - Enables proper alphabetical sorting by base_surname examples: - - value: - literal_name: "Prof. dr. Willem van der Berg" - given_name: "Willem" - surname_prefix: "van der" - base_surname: "Berg" - description: "Dutch name with title and tussenvoegsel, sorts under B" - - - value: - literal_name: "Jan Pieterszoon Sweelinck" - given_name: "Jan" - patronym: "Pieterszoon" - base_surname: "Sweelinck" - description: "Historical Dutch name with patronymic" - - - value: - literal_name: "H.A.F.M.O. (Hans) van Mierlo" - initials: "H.A.F.M.O." - given_name: "Hans" - surname_prefix: "van" - base_surname: "Mierlo" - description: "Dutch name with initials and call name" - - - value: - literal_name: null - name_specification: "unknown" - description: "Unknown person from historical record" + - value: + literal_name: Prof. dr. Willem van der Berg + given_name: Willem + surname_prefix: van der + base_surname: Berg + description: Dutch name with title and tussenvoegsel, sorts under B + - value: + literal_name: Jan Pieterszoon Sweelinck + given_name: Jan + patronym: Pieterszoon + base_surname: Sweelinck + description: Historical Dutch name with patronymic + - value: + literal_name: H.A.F.M.O. (Hans) van Mierlo + initials: H.A.F.M.O. + given_name: Hans + surname_prefix: van + base_surname: Mierlo + description: Dutch name with initials and call name + - value: + literal_name: null + name_specification: unknown + description: Unknown person from historical record + related_mappings: + - rdf:type + broad_mappings: + - rdfs:label diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/has_person_observation.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/has_person_observation.yaml index 71e538a0b4..84c6c01fe4 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/has_person_observation.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/has_person_observation.yaml @@ -1,92 +1,43 @@ -# Slot: has_person_observation -# Inverse of refers_to_person -# Links Person hub to its observations -# ============================================================================= -# Following the pattern established by has_observation (for Custodian), this slot -# connects the Person hub to all PersonObservation entities that refer to it. -# -# DESIGN RATIONALE: -# - Enables bidirectional navigation: Person ↔ PersonObservation -# - Person hub contains minimal data; observations contain evidence -# - Multiple observations from different sources can be aggregated -# -# PICO ALIGNMENT: -# - Person → PersonObservation via pico:hasObservation -# - Inverse of pico:observationOf (refers_to_person) -# ============================================================================= - id: https://nde.nl/ontology/hc/slot/has_person_observation name: has_person_observation-slot title: Has Person Observation - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ pico: https://personsincontext.org/model# owl: http://www.w3.org/2002/07/owl# - default_prefix: hc - imports: - - linkml:types - - ../metadata - - ../classes/PersonObservation - +- linkml:types +- ../metadata +- ../classes/PersonObservation slots: has_person_observation: slot_uri: pico:hasObservation - description: | - PersonObservations that refer to this Person hub. - - **Hub Architecture Pattern**: - - The Person is a minimal hub entity containing just: - - person_id: Persistent identifier - - preferred_name: Canonical display name - - Multiple observations from different sources attach to this hub, - each capturing evidence from a particular context (LinkedIn, annual report, - staff directory, etc.). - - **INVERSE PROPERTY**: - - **Inverse**: `refers_to_person` (pico:observationOf) - - Pattern: If PersonObservation refers_to_person Person, then Person has_person_observation PersonObservation - - **Example**: - ```yaml - Person: - person_id: "https://nde.nl/ontology/hc/person/taco-dibbits" - preferred_name: "Taco Dibbits" - has_person_observation: - - "https://nde.nl/ontology/hc/observation/linkedin-taco-dibbits-2025" - - "https://nde.nl/ontology/hc/observation/annual-report-2023-td" - - "https://nde.nl/ontology/hc/observation/staff-directory-2024-td" - ``` - - **Navigation**: - - From person: Find all observations (has_person_observation) - - From observation: Find person hub (refers_to_person) - - **RELATIONSHIP TO has_observation (for Custodian)**: - - | Slot | On Class | Range | Purpose | - |------|----------|-------|---------| - | has_observation | Custodian | CustodianObservation | Link org hub to org observations | - | has_person_observation | Person | PersonObservation | Link person hub to person observations | + description: "PersonObservations that refer to this Person hub.\n\n**Hub Architecture Pattern**:\n\nThe Person is a minimal\ + \ hub entity containing just:\n- person_id: Persistent identifier\n- preferred_name: Canonical display name\n\nMultiple\ + \ observations from different sources attach to this hub,\neach capturing evidence from a particular context (LinkedIn,\ + \ annual report,\nstaff directory, etc.).\n\n**INVERSE PROPERTY**:\n- **Inverse**: `refers_to_person` (pico:observationOf)\n\ + - Pattern: If PersonObservation refers_to_person Person, then Person has_person_observation PersonObservation\n\n**Example**:\n\ + ```yaml\nPerson:\n person_id: \"https://nde.nl/ontology/hc/person/taco-dibbits\"\n preferred_name: \"Taco Dibbits\"\ + \n has_person_observation:\n - \"https://nde.nl/ontology/hc/observation/linkedin-taco-dibbits-2025\"\n - \"https://nde.nl/ontology/hc/observation/annual-report-2023-td\"\ + \n - \"https://nde.nl/ontology/hc/observation/staff-directory-2024-td\"\n```\n\n**Navigation**:\n- From person: Find\ + \ all observations (has_person_observation)\n- From observation: Find person hub (refers_to_person)\n\n**RELATIONSHIP\ + \ TO has_observation (for Custodian)**:\n\n| Slot | On Class | Range | Purpose |\n|------|----------|-------|---------|\n\ + | has_observation | Custodian | CustodianObservation | Link org hub to org observations |\n| has_person_observation\ + \ | Person | PersonObservation | Link person hub to person observations |\n" range: PersonObservation multivalued: true - exact_mappings: - - pico:hasObservation + - pico:hasObservation close_mappings: - - dcterms:isReferencedBy - - # NOTE: inverse annotation removed to fix LinkML validation warning. - # The inverse relationship is conceptual (with refers_to_person) but cannot be - # enforced in LinkML without explicit domain declarations on both slots. - # The bidirectional relationship is documented in description and comments. + - dcterms:isReferencedBy comments: - - "Conceptual inverse of refers_to_person (pico:observationOf)" - - "Links person hub to all its evidence/observations" - - "Parallel to has_observation slot on Custodian" + - Conceptual inverse of refers_to_person (pico:observationOf) + - Links person hub to all its evidence/observations + - Parallel to has_observation slot on Custodian + related_mappings: + - rdf:type + broad_mappings: + - prov:Entity diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/has_suborganization.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/has_suborganization.yaml index 955ddc7699..58b4944a55 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/has_suborganization.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/has_suborganization.yaml @@ -1,62 +1,33 @@ -# Slot: has_suborganization -# Inverse of parent_custodian (org:subOrganizationOf) -# W3C ORG pattern: org:hasSubOrganization ↔ org:subOrganizationOf - id: https://nde.nl/ontology/hc/slot/has_suborganization name: has_suborganization title: Has Sub-Organization - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: has_suborganization: slot_uri: org:hasSubOrganization - description: | - Child organizations contained within this custodian's organizational hierarchy. - - **W3C ORG Alignment**: - - Property: `org:hasSubOrganization` - - Domain: org:Organization - - Range: org:Organization - - Definition: "Represents hierarchical containment of Organizations or - Organizational Units; indicates an Organization which is a sub-part - or child of this Organization." - - **INVERSE PROPERTY**: - - **Inverse**: `parent_custodian` (org:subOrganizationOf) - - Pattern: If A hasSubOrganization B, then B subOrganizationOf A - - **Example**: - ```yaml - CustodianLegalStatus: - legal_name: "Ministry of Education, Culture and Science" - has_suborganization: - - "https://nde.nl/ontology/hc/nl-na" # National Archives - - "https://nde.nl/ontology/hc/nl-kb" # Royal Library - ``` - - **Navigation**: - - From parent: Find all subordinate organizations - - From child: Use parent_custodian to find parent organization + description: "Child organizations contained within this custodian's organizational hierarchy.\n\n**W3C ORG Alignment**:\n\ + \nProperty: `org:hasSubOrganization`\n- Domain: org:Organization\n- Range: org:Organization\n- Definition: \"Represents\ + \ hierarchical containment of Organizations or \n Organizational Units; indicates an Organization which is a sub-part\ + \ \n or child of this Organization.\"\n\n**INVERSE PROPERTY**:\n- **Inverse**: `parent_custodian` (org:subOrganizationOf)\n\ + - Pattern: If A hasSubOrganization B, then B subOrganizationOf A\n\n**Example**:\n```yaml\nCustodianLegalStatus:\n \ + \ legal_name: \"Ministry of Education, Culture and Science\"\n has_suborganization:\n - \"https://nde.nl/ontology/hc/nl-na\"\ + \ # National Archives\n - \"https://nde.nl/ontology/hc/nl-kb\" # Royal Library\n```\n\n**Navigation**:\n- From\ + \ parent: Find all subordinate organizations\n- From child: Use parent_custodian to find parent organization\n" range: CustodianLegalStatus multivalued: true - exact_mappings: - - org:hasSubOrganization - + - org:hasSubOrganization related_mappings: - - crm:P148_has_component - - rico:includesOrIncluded - + - crm:P148_has_component + - rico:includesOrIncluded + - rdf:type comments: - - "Inverse of parent_custodian (org:subOrganizationOf)" - - "Both directions should be maintained for query efficiency" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of parent_custodian (org:subOrganizationOf) + - Both directions should be maintained for query efficiency + - Creates owl:inverseOf axiom in RDF output diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/has_unit.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/has_unit.yaml index 3006b8aac7..44545311e7 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/has_unit.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/has_unit.yaml @@ -1,67 +1,34 @@ -# Slot: has_unit -# Inverse of parent_unit (org:unitOf) -# W3C ORG pattern: org:hasUnit ↔ org:unitOf - id: https://nde.nl/ontology/hc/slot/has_unit name: has_unit title: Has Organizational Unit - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: has_unit: slot_uri: org:hasUnit - description: | - Organizational units (departments, divisions, teams) that are part of - this organizational structure. - - **W3C ORG Alignment**: - - Property: `org:hasUnit` - - Domain: org:FormalOrganization - - Range: org:OrganizationalUnit - - Definition: "Indicates a unit which is part of this Organization, - e.g. a Department within a larger FormalOrganization." - - **INVERSE PROPERTY**: - - **Inverse**: `parent_unit` (org:unitOf) - - Pattern: If A hasUnit B, then B unitOf A - - **Example**: - ```yaml - OrganizationalStructure: - unit_name: "Collections Division" - has_unit: - - unit_name: "Paintings Department" - - unit_name: "Prints and Drawings Department" - - unit_name: "Applied Arts Department" - ``` - - **Hierarchical Navigation**: - - Down: has_unit → child units - - Up: parent_unit → parent unit - - **Relationship to managed_collections**: - - `has_unit`: Structural containment (departments within divisions) - - `managed_collections`: Functional responsibility (which collections a unit manages) + description: "Organizational units (departments, divisions, teams) that are part of \nthis organizational structure.\n\ + \n**W3C ORG Alignment**:\n\nProperty: `org:hasUnit`\n- Domain: org:FormalOrganization\n- Range: org:OrganizationalUnit\n\ + - Definition: \"Indicates a unit which is part of this Organization, \n e.g. a Department within a larger FormalOrganization.\"\ + \n\n**INVERSE PROPERTY**:\n- **Inverse**: `parent_unit` (org:unitOf)\n- Pattern: If A hasUnit B, then B unitOf A\n\n\ + **Example**:\n```yaml\nOrganizationalStructure:\n unit_name: \"Collections Division\"\n has_unit:\n - unit_name:\ + \ \"Paintings Department\"\n - unit_name: \"Prints and Drawings Department\"\n - unit_name: \"Applied Arts Department\"\ + \n```\n\n**Hierarchical Navigation**:\n- Down: has_unit → child units\n- Up: parent_unit → parent unit\n\n**Relationship\ + \ to managed_collections**:\n- `has_unit`: Structural containment (departments within divisions)\n- `managed_collections`:\ + \ Functional responsibility (which collections a unit manages)\n" range: OrganizationalStructure multivalued: true - exact_mappings: - - org:hasUnit - + - org:hasUnit related_mappings: - - crm:P148_has_component - - rico:includesOrIncluded - + - crm:P148_has_component + - rico:includesOrIncluded + - rdf:type comments: - - "Inverse of parent_unit (org:unitOf)" - - "Enables top-down navigation of organizational hierarchy" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of parent_unit (org:unitOf) + - Enables top-down navigation of organizational hierarchy + - Creates owl:inverseOf axiom in RDF output diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/hc_id.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/hc_id.yaml index b1500ef52e..e114c67d01 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/hc_id.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/hc_id.yaml @@ -1,33 +1,22 @@ -# Slot: hc_id -# The persistent identifier for heritage custodian hubs - id: https://nde.nl/ontology/hc/slot/hc_id name: hc_id-slot - slots: hc_id: - description: | - The persistent identifier for a heritage custodian entity in the NDE Heritage - Custodian ontology. This is the core identifier that serves as the hub connecting - all observations, reconstructions, and names related to this custodian. - - Format: https://nde.nl/ontology/hc/{abstracted-ghcid} - Example: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804 - - The ID is derived from the GHCID pattern but abstracted/normalized for use - as a persistent URI in the ontology namespace. + description: "The persistent identifier for a heritage custodian entity in the NDE Heritage \nCustodian ontology. This\ + \ is the core identifier that serves as the hub connecting\nall observations, reconstructions, and names related to\ + \ this custodian.\n\nFormat: https://nde.nl/ontology/hc/{abstracted-ghcid}\nExample: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804\n\ + \nThe ID is derived from the GHCID pattern but abstracted/normalized for use\nas a persistent URI in the ontology namespace.\n" slot_uri: dcterms:identifier range: uriorcurie required: true identifier: true - pattern: "^https://nde\\.nl/ontology/hc/[a-z0-9-]+$" + pattern: ^https://nde\.nl/ontology/hc/[a-z0-9-]+$ comments: - - >- - This is THE identifying property for custodian entities. All other properties - and relationships connect through this hub identifier. - - >- - The path component after /hc/ is an abstracted, lowercased, hyphenated version - of the GHCID pattern (country-region-city-type-abbrev-qnumber). + - This is THE identifying property for custodian entities. All other properties and relationships connect through this + hub identifier. + - The path component after /hc/ is an abstracted, lowercased, hyphenated version of the GHCID pattern (country-region-city-type-abbrev-qnumber). see_also: - - https://nde.nl/ontology/hc/ - - https://www.dublincore.org/specifications/dublin-core/dcmi-terms/#identifier + - https://nde.nl/ontology/hc/ + - https://www.dublincore.org/specifications/dublin-core/dcmi-terms/#identifier + broad_mappings: + - dcterms:identifier diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/holds_record_set_types.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/holds_record_set_types.yaml index f21752d670..25d07953d3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/holds_record_set_types.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/holds_record_set_types.yaml @@ -1,97 +1,56 @@ -# Custodian Slot: holds_record_set_types -# Links heritage custodians to the types of record sets they hold -# -# This slot provides a formal way to document what types of record sets -# are within the scope of a particular heritage custodian, replacing -# free-text scope descriptions with structured semantic relationships. -# -# RiC-O Alignment: rico:isOrWasHolderOf (Agent → RecordResource) -# The inverse relationship from the perspective of the custodian type class. -# -# Generation date: 2026-01-05 - id: https://nde.nl/ontology/hc/slot/holds_record_set_types name: holds_record_set_types_slot title: Holds Record Set Types Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ rico: https://www.ica.org/standards/RiC/ontology# schema: http://schema.org/ skos: http://www.w3.org/2004/02/skos/core# - default_prefix: hc - imports: - - linkml:types - +- linkml:types slots: holds_record_set_types: slot_uri: rico:isOrWasHolderOf range: uriorcurie multivalued: true - description: | - Links a heritage custodian type to the record set types it typically holds. - - **RiC-O Alignment**: - This slot maps to `rico:isOrWasHolderOf` which "Connects an Agent to a - Record Resource or Instantiation that the Agent holds or held." - - - Domain: Agent (including CorporateBody, which heritage custodians are) - - Range: RecordResource or Instantiation (including RecordSet types) - - Inverse: `rico:hasOrHadHolder` - - **Purpose**: - Replaces free-text "Scope" descriptions in custodian type classes with - structured semantic links to defined RecordSetType classes. - - **Example** (AcademicArchive): - ```yaml - holds_record_set_types: - - hc:UniversityAdministrativeFonds - - hc:StudentRecordSeries - - hc:FacultyPaperCollection - - hc:CampusDocumentationCollection - ``` - - This formally documents that academic archives typically hold: - - Administrative records from university governance (fonds) - - Student records series (enrollment, transcripts, graduation) - - Personal papers of faculty members (collection) - - Campus documentation (photos, publications, ephemera) - - **Dual-Class Pattern Integration**: - This slot bridges the custodian type (ArchiveOrganizationType subclass) - with its corresponding RecordSetType subclasses, completing the dual-class - pattern for heritage institutions. - - **Ontological Semantics**: - - The custodian is the Agent (rico:CorporateBody) - - The record set types are the RecordResource classifications - - The relationship expresses custodial responsibility for these record types + description: "Links a heritage custodian type to the record set types it typically holds.\n\n**RiC-O Alignment**:\nThis\ + \ slot maps to `rico:isOrWasHolderOf` which \"Connects an Agent to a \nRecord Resource or Instantiation that the Agent\ + \ holds or held.\"\n\n- Domain: Agent (including CorporateBody, which heritage custodians are)\n- Range: RecordResource\ + \ or Instantiation (including RecordSet types)\n- Inverse: `rico:hasOrHadHolder`\n\n**Purpose**:\nReplaces free-text\ + \ \"Scope\" descriptions in custodian type classes with \nstructured semantic links to defined RecordSetType classes.\n\ + \n**Example** (AcademicArchive):\n```yaml\nholds_record_set_types:\n - hc:UniversityAdministrativeFonds\n - hc:StudentRecordSeries\n\ + \ - hc:FacultyPaperCollection\n - hc:CampusDocumentationCollection\n```\n\nThis formally documents that academic archives\ + \ typically hold:\n- Administrative records from university governance (fonds)\n- Student records series (enrollment,\ + \ transcripts, graduation)\n- Personal papers of faculty members (collection)\n- Campus documentation (photos, publications,\ + \ ephemera)\n\n**Dual-Class Pattern Integration**:\nThis slot bridges the custodian type (ArchiveOrganizationType subclass)\ + \ \nwith its corresponding RecordSetType subclasses, completing the dual-class \npattern for heritage institutions.\n\ + \n**Ontological Semantics**:\n- The custodian is the Agent (rico:CorporateBody)\n- The record set types are the RecordResource\ + \ classifications\n- The relationship expresses custodial responsibility for these record types\n" annotations: custodian_types: '["*"]' - custodian_types_rationale: >- - holds_record_set_types applies to all custodian types - used for linking - any heritage institution type to the record/collection types it holds. + custodian_types_rationale: holds_record_set_types applies to all custodian types - used for linking any heritage institution + type to the record/collection types it holds. rico_property: rico:isOrWasHolderOf rico_property_uri: https://www.ica.org/standards/RiC/ontology#isOrWasHolderOf rico_inverse: rico:hasOrHadHolder rico_domain: rico:Agent - rico_range: "rico:RecordResource | rico:Instantiation" - rico_cm_correspondence: "RiC-R039 ('is or was holder of' relation)" + rico_range: rico:RecordResource | rico:Instantiation + rico_cm_correspondence: RiC-R039 ('is or was holder of' relation) examples: - - value: - - hc:UniversityAdministrativeFonds - - hc:StudentRecordSeries - - hc:FacultyPaperCollection - - hc:CampusDocumentationCollection - description: "Academic archive holds these record set types" - - value: - - hc:CouncilGovernanceFonds - - hc:CivilRegistrySeries - - hc:MunicipalAdministrationFonds - - hc:UrbanPlanningCollection - - hc:LocalHistoryCollection - description: "Municipal archive holds these record set types" + - value: + - hc:UniversityAdministrativeFonds + - hc:StudentRecordSeries + - hc:FacultyPaperCollection + - hc:CampusDocumentationCollection + description: Academic archive holds these record set types + - value: + - hc:CouncilGovernanceFonds + - hc:CivilRegistrySeries + - hc:MunicipalAdministrationFonds + - hc:UrbanPlanningCollection + - hc:LocalHistoryCollection + description: Municipal archive holds these record set types + close_mappings: + - rico:hasRecordSetType diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/html_file.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/html_file.yaml index 481ee274c7..1193475d4f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/html_file.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/html_file.yaml @@ -1,25 +1,19 @@ -# Slot: html_file -# Path to archived HTML file for provenance tracking - id: https://nde.nl/ontology/hc/slot/html_file name: html_file_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# - imports: - - linkml:types - +- linkml:types default_range: string - slots: html_file: slot_uri: prov:used - description: >- - Relative path to the archived HTML file containing the source content. - Path is relative to the custodian data file. - Archive format: Playwright-rendered HTML (fully rendered DOM). - Example: web/NL-ZH-ZUI-M-LMT/landbouwmuseumtiengemeten.nl/rendered.html + description: 'Relative path to the archived HTML file containing the source content. Path is relative to the custodian + data file. Archive format: Playwright-rendered HTML (fully rendered DOM). Example: web/NL-ZH-ZUI-M-LMT/landbouwmuseumtiengemeten.nl/rendered.html' range: string + related_mappings: + - dcterms:source + broad_mappings: + - dcterms:source diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/humidity_tolerance.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/humidity_tolerance.yaml index 80aed0938c..cef77b2490 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/humidity_tolerance.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/humidity_tolerance.yaml @@ -1,21 +1,15 @@ -# Slot: humidity_tolerance -# Acceptable humidity deviation from target - id: https://nde.nl/ontology/hc/slot/humidity_tolerance name: humidity_tolerance_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: humidity_tolerance: slot_uri: hc:humidityTolerance range: float - description: >- - Acceptable relative humidity deviation (±) from target value as percentage. + description: Acceptable relative humidity deviation (±) from target value as percentage. + related_mappings: + - schema:additionalProperty diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/id.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/id.yaml index 6c0e88c9c8..e5d43d0f8f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/id.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/id.yaml @@ -1,12 +1,12 @@ -# Base Slot: id -# Unique identifier for resources - id: https://nde.nl/ontology/hc/slot/id name: id_slot - slots: id: identifier: true slot_uri: dcterms:identifier range: uriorcurie - description: "Unique identifier for this resource" + description: Unique identifier for this resource + exact_mappings: + - dcterms:identifier + close_mappings: + - schema:identifier diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/identified_by.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/identified_by.yaml index ed326d1f62..36f0ea4524 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/identified_by.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/identified_by.yaml @@ -1,63 +1,34 @@ -# Slot: identified_by -# Inverse of identifies_custodian -# Links Custodian hub to its identifiers - id: https://nde.nl/ontology/hc/slot/identified_by name: identified_by title: Identified By - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ crm: http://www.cidoc-crm.org/cidoc-crm/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: identified_by: slot_uri: crm:P1_is_identified_by - description: | - Identifiers and appellations that identify this Custodian hub. - - **CIDOC-CRM Alignment**: - - Property: `crm:P1_is_identified_by` - - Domain: E1_CRM_Entity (Custodian) - - Range: E41_Appellation (CustodianIdentifier, CustodianAppellation) - - Definition: "This property describes the naming or identification of - any real-world item by a name or any other identifier." - - **INVERSE PROPERTY**: - - **Inverse**: `identifies_custodian` (crm:P1i_identifies) - - Pattern: If Identifier identifies_custodian Custodian, then Custodian identified_by Identifier - - **Example**: - ```yaml - Custodian: - hc_id: "https://nde.nl/ontology/hc/nl-nh-ams-m-rm" - identified_by: - - identifier_scheme: ISIL - identifier_value: "NL-AmRM" - - identifier_scheme: Wikidata - identifier_value: "Q190804" - ``` - - **Navigation**: - - From custodian: Find all identifiers (identified_by) - - From identifier: Find custodian (identifies_custodian) + description: "Identifiers and appellations that identify this Custodian hub.\n\n**CIDOC-CRM Alignment**:\n\nProperty:\ + \ `crm:P1_is_identified_by`\n- Domain: E1_CRM_Entity (Custodian)\n- Range: E41_Appellation (CustodianIdentifier, CustodianAppellation)\n\ + - Definition: \"This property describes the naming or identification of \n any real-world item by a name or any other\ + \ identifier.\"\n\n**INVERSE PROPERTY**:\n- **Inverse**: `identifies_custodian` (crm:P1i_identifies)\n- Pattern: If\ + \ Identifier identifies_custodian Custodian, then Custodian identified_by Identifier\n\n**Example**:\n```yaml\nCustodian:\n\ + \ hc_id: \"https://nde.nl/ontology/hc/nl-nh-ams-m-rm\"\n identified_by:\n - identifier_scheme: ISIL\n identifier_value:\ + \ \"NL-AmRM\"\n - identifier_scheme: Wikidata\n identifier_value: \"Q190804\"\n```\n\n**Navigation**:\n- From\ + \ custodian: Find all identifiers (identified_by)\n- From identifier: Find custodian (identifies_custodian)\n" range: CustodianIdentifier multivalued: true - exact_mappings: - - crm:P1_is_identified_by - + - crm:P1_is_identified_by related_mappings: - - schema:identifier - - dcterms:identifier - + - schema:identifier + - dcterms:identifier comments: - - "Inverse of identifies_custodian (crm:P1i_identifies)" - - "Links custodian to all its identifying codes and names" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of identifies_custodian (crm:P1i_identifies) + - Links custodian to all its identifying codes and names + - Creates owl:inverseOf axiom in RDF output + broad_mappings: + - prov:wasAttributedTo diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/identifier_format_used.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/identifier_format_used.yaml index 24cb2dde54..10cd943c01 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/identifier_format_used.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/identifier_format_used.yaml @@ -1,49 +1,23 @@ -# Slot: identifier_format_used -# Links an identifier value to the specific format variant used - id: https://nde.nl/ontology/hc/slot/identifier_format_used name: identifier_format_used_slot title: Identifier Format Used Slot - prefixes: linkml: https://w3id.org/linkml/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types slots: identifier_format_used: slot_uri: schema:encodingFormat - description: | - The specific format variant used for this identifier value. - - Many identifier standards support multiple display formats: - - ISNI: "0000 0000 0000 0000" vs "0000000000000000" - - Wikidata: "Q12345" vs "http://www.wikidata.org/entity/Q12345" - - This slot records which format was used in the identifier_value. - - **Usage:** - - When storing an identifier, record both: - - identifier_value: The actual string value - - identifier_format_used: Which format variant it uses - - This enables: - - Validation against the correct pattern - - Transformation to other formats as needed - - Understanding if value is URI or compact form - - **Example:** - - ```yaml - identifier_value: "0000 0001 2146 5765" - identifier_format_used: - id: isni-display-format - format_name: "Display format with spaces" - is_canonical: false - ``` + description: "The specific format variant used for this identifier value.\n\nMany identifier standards support multiple\ + \ display formats:\n- ISNI: \"0000 0000 0000 0000\" vs \"0000000000000000\"\n- Wikidata: \"Q12345\" vs \"http://www.wikidata.org/entity/Q12345\"\ + \n\nThis slot records which format was used in the identifier_value.\n\n**Usage:**\n\nWhen storing an identifier, record\ + \ both:\n- identifier_value: The actual string value\n- identifier_format_used: Which format variant it uses\n\nThis\ + \ enables:\n- Validation against the correct pattern\n- Transformation to other formats as needed\n- Understanding if\ + \ value is URI or compact form\n\n**Example:**\n\n```yaml\nidentifier_value: \"0000 0001 2146 5765\"\nidentifier_format_used:\n\ + \ id: isni-display-format\n format_name: \"Display format with spaces\"\n is_canonical: false\n```\n" range: IdentifierFormat required: false inlined: false + close_mappings: + - dcterms:conformsTo diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/identifier_scheme.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/identifier_scheme.yaml index 75e9ede220..fe9178ae3b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/identifier_scheme.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/identifier_scheme.yaml @@ -1,11 +1,9 @@ -# Identifier Slot: identifier_scheme -# Identifier scheme name - id: https://nde.nl/ontology/hc/slot/identifier_scheme name: identifier_scheme_slot - slots: identifier_scheme: slot_uri: skos:inScheme range: string - description: "Identifier scheme (ISIL, Wikidata, VIAF, etc.)" + description: Identifier scheme (ISIL, Wikidata, VIAF, etc.) + related_mappings: + - dcterms:type diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/identifier_value.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/identifier_value.yaml index fe34987c83..c7e848982d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/identifier_value.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/identifier_value.yaml @@ -1,11 +1,11 @@ -# Identifier Slot: identifier_value -# Identifier value - id: https://nde.nl/ontology/hc/slot/identifier_value name: identifier_value_slot - slots: identifier_value: slot_uri: skos:notation range: string - description: "Identifier value" + description: Identifier value + exact_mappings: + - rdf:value + broad_mappings: + - rdf:value diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/identifiers.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/identifiers.yaml index c0b27a0aae..fcde4cf633 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/identifiers.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/identifiers.yaml @@ -1,19 +1,19 @@ -# Custodian Slot: identifiers -# External identifiers assigned by authorities - id: https://nde.nl/ontology/hc/slot/identifiers name: identifiers_slot - imports: - - ../classes/Identifier - +- ../classes/Identifier slots: identifiers: slot_uri: crm:P48_has_preferred_identifier range: CustodianIdentifier multivalued: true inlined_as_list: true - description: | - External identifiers assigned to this custodian by authorities. + description: 'External identifiers assigned to this custodian by authorities. + CIDOC-CRM: P48_has_preferred_identifier links E1_CRM_Entity (Custodian) to E42_Identifier. + Examples: ISIL codes, Wikidata IDs, VIAF IDs, KvK numbers, ROR IDs. + + ' + close_mappings: + - dcterms:identifier diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/identifies.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/identifies.yaml index 5e720f035a..dfe49db740 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/identifies.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/identifies.yaml @@ -1,55 +1,29 @@ -# Slot: identifies -# Inverse of identifiers -# Links CustodianIdentifier to the custodian it identifies - id: https://nde.nl/ontology/hc/slot/identifies name: identifies title: Identifies - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ crm: http://www.cidoc-crm.org/cidoc-crm/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: identifies: slot_uri: crm:P48i_is_preferred_identifier_of - description: | - The custodian that this identifier identifies. - - **CIDOC-CRM Alignment**: - - Property: `crm:P48i_is_preferred_identifier_of` - - Domain: E42_Identifier (CustodianIdentifier) - - Range: E1_CRM_Entity (Custodian) - - Definition: "This property identifies an instance of E1 CRM Entity - using a particular instance of E42 Identifier." - - **INVERSE PROPERTY**: - - **Inverse**: `identifiers` (crm:P48_has_preferred_identifier) - - Pattern: If Custodian identifiers Identifier, then Identifier identifies Custodian - - **Example**: - ```yaml - CustodianIdentifier: - identifier_scheme: ISIL - identifier_value: "NL-AmRM" - identifies: "https://nde.nl/ontology/hc/nl-nh-ams-m-rm" - ``` - - **Navigation**: - - From identifier: Find identified custodian (identifies) - - From custodian: Find all identifiers (identifiers) + description: "The custodian that this identifier identifies.\n\n**CIDOC-CRM Alignment**:\n\nProperty: `crm:P48i_is_preferred_identifier_of`\n\ + - Domain: E42_Identifier (CustodianIdentifier)\n- Range: E1_CRM_Entity (Custodian)\n- Definition: \"This property identifies\ + \ an instance of E1 CRM Entity \n using a particular instance of E42 Identifier.\"\n\n**INVERSE PROPERTY**:\n- **Inverse**:\ + \ `identifiers` (crm:P48_has_preferred_identifier)\n- Pattern: If Custodian identifiers Identifier, then Identifier\ + \ identifies Custodian\n\n**Example**:\n```yaml\nCustodianIdentifier:\n identifier_scheme: ISIL\n identifier_value:\ + \ \"NL-AmRM\"\n identifies: \"https://nde.nl/ontology/hc/nl-nh-ams-m-rm\"\n```\n\n**Navigation**:\n- From identifier:\ + \ Find identified custodian (identifies)\n- From custodian: Find all identifiers (identifiers)\n" range: Custodian - exact_mappings: - - crm:P48i_is_preferred_identifier_of - + - crm:P48i_is_preferred_identifier_of comments: - - "Inverse of identifiers (crm:P48_has_preferred_identifier)" - - "Links identifier back to the entity it identifies" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of identifiers (crm:P48_has_preferred_identifier) + - Links identifier back to the entity it identifies + - Creates owl:inverseOf axiom in RDF output + close_mappings: + - dcterms:identifier diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/identifies_custodian.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/identifies_custodian.yaml index ad4a1ff123..9de319ec5d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/identifies_custodian.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/identifies_custodian.yaml @@ -1,18 +1,16 @@ -# Inverse Slot: identifies_custodian -# Links appellation/identifier back to the Custodian hub - id: https://nde.nl/ontology/hc/slot/identifies_custodian name: identifies_custodian_slot - imports: - - ../classes/Custodian - +- ../classes/Custodian slots: identifies_custodian: slot_uri: crm:P1i_identifies - # For CustodianIdentifier: crm:P48i_is_preferred_identifier_of (inverse of P48_has_preferred_identifier) range: Custodian required: false - description: | - Inverse property linking this identifier back to the Custodian hub. + description: 'Inverse property linking this identifier back to the Custodian hub. + CIDOC-CRM: P48i_is_preferred_identifier_of (inverse of P48_has_preferred_identifier). + + ' + broad_mappings: + - schema:organization diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/initials.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/initials.yaml index c2ed24edab..c50bc1fec6 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/initials.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/initials.yaml @@ -1,52 +1,76 @@ id: https://nde.nl/ontology/hc/slot/initials name: initials title: Initials - prefixes: pnv: https://w3id.org/pnv# - imports: - - linkml:types - +- linkml:types slots: initials: slot_uri: pnv:initials - description: | - Initial letter(s) of given name(s), each followed by a period. - - An initial is the first letter of a person's given name, or sometimes + description: 'Initial letter(s) of given name(s), each followed by a period. + + + An initial is the first letter of a person''s given name, or sometimes + a combination of letters. Use this property to record initials + separately from (or in addition to) the full given name. - + + Format: Each initial should be followed by a period (dot). - + + Use cases: + 1. Record initials alongside known given name + 2. Record initials when full given name is unknown + 3. Capture unusual abbreviation patterns from historical sources - + + Examples from PNV specification: - + + Example 1: "Peter R. de Vries" + - initials: "P.R." + - given_name: "Peter R." - + + Example 2: "C.Joh. Kieviet" + - initials: "C.Joh." (unusual abbreviation format) + - OR given_name: "C.Joh." (alternative approach) - + + Example 3: "H.A.F.M.O. (Hans) van Mierlo" + - initials: "H.A.F.M.O." + - given_name: "Hans" - + + If only initials are known (not the full given name), use this property. + The given_name property may also contain the initials as a fallback + when no other representation is available. - + + Note: Store initials exactly as they appear in the source, including + unusual formatting patterns like "C.Joh." for historical accuracy. - + + ' range: string - pattern: "^[A-Z][a-zA-Z]*\\.([A-Z][a-zA-Z]*\\.)*$" + pattern: ^[A-Z][a-zA-Z]*\.([A-Z][a-zA-Z]*\.)*$ exact_mappings: - - pnv:initials + - pnv:initials + close_mappings: + - foaf:name + related_mappings: + - skos:altLabel diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/is_legal_status_of.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/is_legal_status_of.yaml index 7c1e3e4864..d4f84a022a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/is_legal_status_of.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/is_legal_status_of.yaml @@ -1,42 +1,24 @@ -# Slot: is_legal_status_of -# Inverse of legal_status -# Links CustodianLegalStatus to the Custodian it represents - id: https://nde.nl/ontology/hc/slot/is_legal_status_of name: is_legal_status_of title: Is Legal Status Of - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: is_legal_status_of: slot_uri: hc:isLegalStatusOf - description: | - The custodian that this legal status represents. - - **INVERSE PROPERTY**: - - **Inverse**: `legal_status` - - Pattern: If Custodian legal_status LegalStatus, then LegalStatus is_legal_status_of Custodian - - **Example**: - ```yaml - CustodianLegalStatus: - legal_name: "Stichting Rijksmuseum" - is_legal_status_of: "https://nde.nl/ontology/hc/nl-nh-ams-m-rm" - ``` - - **Navigation**: - - From legal status: Find custodian it represents (is_legal_status_of) - - From custodian: Find formal legal entity (legal_status) + description: "The custodian that this legal status represents.\n\n**INVERSE PROPERTY**:\n- **Inverse**: `legal_status`\n\ + - Pattern: If Custodian legal_status LegalStatus, then LegalStatus is_legal_status_of Custodian\n\n**Example**:\n```yaml\n\ + CustodianLegalStatus:\n legal_name: \"Stichting Rijksmuseum\"\n is_legal_status_of: \"https://nde.nl/ontology/hc/nl-nh-ams-m-rm\"\ + \n```\n\n**Navigation**:\n- From legal status: Find custodian it represents (is_legal_status_of)\n- From custodian:\ + \ Find formal legal entity (legal_status)\n" range: Custodian - comments: - - "Inverse of legal_status" - - "Links legal entity back to custodian hub" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of legal_status + - Links legal entity back to custodian hub + - Creates owl:inverseOf axiom in RDF output + related_mappings: + - rdf:type diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/is_member_of.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/is_member_of.yaml index 34bb7349db..015e725f2b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/is_member_of.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/is_member_of.yaml @@ -1,79 +1,38 @@ -# Slot: is_member_of -# Inverse of has_member (org:hasMember) -# W3C ORG pattern: org:hasMember ↔ org:memberOf - id: https://nde.nl/ontology/hc/slot/is_member_of name: is_member_of title: Is Member Of - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# foaf: http://xmlns.com/foaf/0.1/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: is_member_of: slot_uri: org:memberOf - description: | - Encompassing bodies (networks, consortia, umbrella organizations) that - this custodian is a member of. - - **W3C ORG Alignment**: - - Property: `org:memberOf` - - Domain: foaf:Agent (Custodian) - - Range: org:Organization (EncompassingBody) - - Definition: "Indicates that a person or other Agent is a member of - the Organization with no indication of the nature of that membership - or the role played." - - **INVERSE PROPERTY**: - - **Inverse**: `has_member` (org:hasMember) - - Pattern: If Custodian memberOf Network, then Network hasMember Custodian - - **Distinction from encompassing_body**: - - - `is_member_of`: MEMBERSHIP relationship (voluntary, network participation) - - `encompassing_body`: GOVERNANCE relationship (hierarchical, umbrella oversight) - - Both may apply: A custodian can be: - 1. Under governance of Ministry (encompassing_body) - 2. Member of NDE network (is_member_of) - - **Example**: - ```yaml - Custodian: - hc_id: "https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804" - preferred_label: "Rijksmuseum" - - # Governance hierarchy - encompassing_body: - - organization_name: "Ministry of OCW" - organization_type: "UMBRELLA" - - # Network memberships - is_member_of: - - organization_name: "NDE" - organization_type: "NETWORK" - - organization_name: "IIIF Consortium" - organization_type: "CONSORTIUM" - ``` + description: "Encompassing bodies (networks, consortia, umbrella organizations) that \nthis custodian is a member of.\n\ + \n**W3C ORG Alignment**:\n\nProperty: `org:memberOf`\n- Domain: foaf:Agent (Custodian)\n- Range: org:Organization (EncompassingBody)\n\ + - Definition: \"Indicates that a person or other Agent is a member of \n the Organization with no indication of the\ + \ nature of that membership \n or the role played.\"\n\n**INVERSE PROPERTY**:\n- **Inverse**: `has_member` (org:hasMember)\n\ + - Pattern: If Custodian memberOf Network, then Network hasMember Custodian\n\n**Distinction from encompassing_body**:\n\ + \n- `is_member_of`: MEMBERSHIP relationship (voluntary, network participation)\n- `encompassing_body`: GOVERNANCE relationship\ + \ (hierarchical, umbrella oversight)\n\nBoth may apply: A custodian can be:\n1. Under governance of Ministry (encompassing_body)\n\ + 2. Member of NDE network (is_member_of)\n\n**Example**:\n```yaml\nCustodian:\n hc_id: \"https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804\"\ + \n preferred_label: \"Rijksmuseum\"\n \n # Governance hierarchy\n encompassing_body:\n - organization_name: \"\ + Ministry of OCW\"\n organization_type: \"UMBRELLA\"\n \n # Network memberships\n is_member_of:\n - organization_name:\ + \ \"NDE\"\n organization_type: \"NETWORK\"\n - organization_name: \"IIIF Consortium\"\n organization_type:\ + \ \"CONSORTIUM\"\n```\n" range: EncompassingBody multivalued: true - exact_mappings: - - org:memberOf - + - org:memberOf related_mappings: - - foaf:member - - schema:memberOf - + - foaf:member + - schema:memberOf + - rdf:type comments: - - "Inverse of has_member (org:hasMember)" - - "Complements encompassing_body (governance) with membership (voluntary)" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of has_member (org:hasMember) + - Complements encompassing_body (governance) with membership (voluntary) + - Creates owl:inverseOf axiom in RDF output diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/isbn.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/isbn.yaml index 56749deee6..bdb149cb9d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/isbn.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/isbn.yaml @@ -1,24 +1,21 @@ -# Slot: isbn -# International Standard Book Number for publications - id: https://nde.nl/ontology/hc/slot/isbn name: isbn_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: isbn: - description: | - International Standard Book Number (ISBN) for publications. + description: 'International Standard Book Number (ISBN) for publications. + Accepts both ISBN-10 and ISBN-13 formats. + + ' slot_uri: schema:isbn range: string - pattern: "^(97[89])?[0-9]{9}[0-9X]$" + pattern: ^(97[89])?[0-9]{9}[0-9X]$ + exact_mappings: + - schema:isbn diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/items.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/items.yaml new file mode 100644 index 0000000000..640edfc4b4 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/items.yaml @@ -0,0 +1,26 @@ +id: https://nde.nl/ontology/hc/slot/items +name: items +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + items: + slot_uri: rico:hasOrHadConstituent + description: 'Individual ExhibitedObject items within this collection. + + + RiC-O: hasOrHadConstituent for collection-item relationships. + + + Links collection to individual objects, documents, or artifacts. + + ' + range: ExhibitedObject + multivalued: true + required: false + examples: + - value: https://nde.nl/ontology/hc/object/voc-charter-1602 + description: VOC founding charter + close_mappings: + - schema:itemListElement diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/jurisdiction.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/jurisdiction.yaml index c18f6698ed..78f0c25405 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/jurisdiction.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/jurisdiction.yaml @@ -1,27 +1,31 @@ -# jurisdiction slot - Legal jurisdiction reference - id: https://nde.nl/ontology/hc/slot/jurisdiction name: jurisdiction title: Jurisdiction Slot - prefixes: gleif_base: https://www.gleif.org/ontology/Base/ lcc_cr: https://www.omg.org/spec/LCC/Countries/CountryRepresentation/ schema: http://schema.org/ +description: 'Legal/administrative jurisdiction where an entity operates or is registered. + -description: | - Legal/administrative jurisdiction where an entity operates or is registered. - Links to Jurisdiction class which captures: + - National jurisdictions (e.g., Netherlands, Japan) + - Subnational jurisdictions (e.g., Bavaria, Delaware) + - Municipal jurisdictions (e.g., Hong Kong, City of London) + - Supranational jurisdictions (e.g., European Union, OHADA) - + + GLEIF alignment: + - gleif_base:hasLegalJurisdiction - jurisdiction of legal formation + - gleif_base:hasCoverageArea - geographic scope of authority/register + ' slots: jurisdiction: slot_uri: gleif_base:hasCoverageArea @@ -29,19 +33,16 @@ slots: required: false multivalued: false inlined: true - description: | - Legal/administrative jurisdiction where entity operates or is registered. - - gleif_base:hasCoverageArea - "Indicates a geographic region in which - some service is provided, or to which some policy applies" - - Examples: - - Netherlands (national): KvK jurisdiction - - Bavaria (subnational): Amtsgericht München jurisdiction - - European Union (supranational): SE registration jurisdiction - + description: "Legal/administrative jurisdiction where entity operates or is registered.\n\ngleif_base:hasCoverageArea\ + \ - \"Indicates a geographic region in which \nsome service is provided, or to which some policy applies\"\n\nExamples:\n\ + - Netherlands (national): KvK jurisdiction\n- Bavaria (subnational): Amtsgericht München jurisdiction\n- European Union\ + \ (supranational): SE registration jurisdiction\n" + exact_mappings: + - schema:areaServed + close_mappings: + - dcterms:spatial comments: - - "Maps to gleif_base:hasCoverageArea" - - "Jurisdictions are LEGAL boundaries, not just geographic" - - "Used for registration authorities, trade registers, and legal forms" - - "inlined: true allows jurisdiction to be specified as nested object" +- Maps to gleif_base:hasCoverageArea +- Jurisdictions are LEGAL boundaries, not just geographic +- Used for registration authorities, trade registers, and legal forms +- 'inlined: true allows jurisdiction to be specified as nested object' diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/justification.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/justification.yaml index 677b1df749..440c088661 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/justification.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/justification.yaml @@ -1,11 +1,11 @@ -# ReconstructionActivity Slot: justification -# Justification for entity resolution decisions - id: https://nde.nl/ontology/hc/slot/justification name: justification_slot - slots: justification: slot_uri: prov:qualifiedAttribution range: string - description: "Justification for entity resolution decisions" + description: Justification for entity resolution decisions + close_mappings: + - prov:hadReason + related_mappings: + - skos:note diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/keywords.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/keywords.yaml index 6495682e29..0dda0813a2 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/keywords.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/keywords.yaml @@ -1,20 +1,19 @@ -# Global Slot: keywords -# Keywords for discovery and classification - id: https://nde.nl/ontology/hc/slot/keywords name: keywords_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - slots: keywords: slot_uri: schema:keywords - description: | - Keywords for discovery and classification. + description: 'Keywords for discovery and classification. + + ' range: string multivalued: true + exact_mappings: + - schema:keywords + close_mappings: + - dcterms:subject diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/language.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/language.yaml index e8d3de19fd..341454c41b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/language.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/language.yaml @@ -1,12 +1,11 @@ -# CustodianObservation Slot: language -# Language of observed name - id: https://nde.nl/ontology/hc/slot/language name: language_slot - slots: language: slot_uri: schema:inLanguage range: string - description: "Language of the observed name (ISO 639-1 code)" - pattern: "^[a-z]{2}$" + description: Language of the observed name (ISO 639-1 code) + pattern: ^[a-z]{2}$ + exact_mappings: + - dcterms:language + - schema:inLanguage diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/language_code.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/language_code.yaml index 14a8660442..b529fe3457 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/language_code.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/language_code.yaml @@ -1,12 +1,10 @@ -# LanguageCode Slot: language_code -# ISO 639-1 two-letter code - id: https://nde.nl/ontology/hc/slot/language_code name: language_code_slot - slots: language_code: slot_uri: rdf:value range: string - pattern: "^[a-z]{2}$" - description: "ISO 639-1 two-letter code" + pattern: ^[a-z]{2}$ + description: ISO 639-1 two-letter code + broad_mappings: + - dcterms:identifier diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/legal_entity_type.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/legal_entity_type.yaml index 4f9774d934..3d1dd3f4fa 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/legal_entity_type.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/legal_entity_type.yaml @@ -1,31 +1,36 @@ -# Slot: legal_entity_type -# High-level legal entity classification - id: https://nde.nl/ontology/hc/slot/legal_entity_type name: legal_entity_type-slot - slots: legal_entity_type: - description: | - High-level legal entity classification distinguishing between natural persons + description: 'High-level legal entity classification distinguishing between natural persons + and legal persons (organizations). - + + Links to LegalEntityType class which provides two top-level categories: + - PERSON: Natural person (individual with legal rights) + - ORGANIZATION: Legal person (all organizational forms including corporations, governments) - + + This replaces the deprecated entity_type enum which incorrectly mixed + informal groups with formal legal entities. + + ' slot_uri: org:classification range: LegalEntityType required: true comments: - - "Natural persons cannot have legal forms (individuals are not 'incorporated')" - - "Legal persons (organizations) must have legal forms (ISO 20275 codes)" - - "Informal groups without legal status are NOT CustodianLegalStatuss" - - "This is the fundamental legal distinction in most jurisdictions" + - Natural persons cannot have legal forms (individuals are not 'incorporated') + - Legal persons (organizations) must have legal forms (ISO 20275 codes) + - Informal groups without legal status are NOT CustodianLegalStatuss + - This is the fundamental legal distinction in most jurisdictions exact_mappings: - - org:classification + - org:classification close_mappings: - - schema:additionalType - - tooi:organisatievorm + - schema:additionalType + - tooi:organisatievorm + broad_mappings: + - dcterms:type diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/legal_form.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/legal_form.yaml index 554e8ed1c8..ac983996de 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/legal_form.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/legal_form.yaml @@ -1,34 +1,29 @@ -# CustodianLegalStatus Slot: legal_form -# ISO 20275 Entity Legal Forms Code - id: https://nde.nl/ontology/hc/slot/legal_form name: legal_form_slot - slots: legal_form: slot_uri: rov:orgType range: LegalForm - description: | - Specific legal form based on ISO 20275 Entity Legal Forms (ELF) codes. - Links to LegalForm class with jurisdiction-specific legal form details. - This is NOT the legal name - it's a classification code specifying the - legal structure (e.g., foundation, corporation, government agency). - Required for ORGANIZATION entities, not applicable for PERSON. + description: "Specific legal form based on ISO 20275 Entity Legal Forms (ELF) codes.\nLinks to LegalForm class with jurisdiction-specific\ + \ legal form details.\nThis is NOT the legal name - it's a classification code specifying the \nlegal structure (e.g.,\ + \ foundation, corporation, government agency).\nRequired for ORGANIZATION entities, not applicable for PERSON.\n" exact_mappings: - - rov:orgType - - gleif:hasLegalForm + - rov:orgType + - gleif:hasLegalForm close_mappings: - - org:classification - - tooi:rechtsvorm + - org:classification + - tooi:rechtsvorm comments: - - "Source standard: ISO 20275 Entity Legal Forms" - - "1,600+ legal forms across 150+ jurisdictions" - - "Dutch example: ELF code '8888' = Stichting (foundation)" - - "Now uses structured LegalForm class instead of simple string pattern" + - 'Source standard: ISO 20275 Entity Legal Forms' + - 1,600+ legal forms across 150+ jurisdictions + - 'Dutch example: ELF code ''8888'' = Stichting (foundation)' + - Now uses structured LegalForm class instead of simple string pattern examples: - - value: - elf_code: "8888" - country_code: "NL" - local_name: "Stichting" - abbreviation: "St." - description: "Dutch foundation (Rijksmuseum)" + - value: + elf_code: '8888' + country_code: NL + local_name: Stichting + abbreviation: St. + description: Dutch foundation (Rijksmuseum) + related_mappings: + - schema:legalForm diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/legal_jurisdiction.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/legal_jurisdiction.yaml index 60090c4ba8..fd1e877ea6 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/legal_jurisdiction.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/legal_jurisdiction.yaml @@ -1,42 +1,24 @@ -# legal_jurisdiction slot - Legal jurisdiction of formation/registration - id: https://nde.nl/ontology/hc/slot/legal_jurisdiction name: legal_jurisdiction title: Legal Jurisdiction Slot - prefixes: gleif_base: https://www.gleif.org/ontology/Base/ schema: http://schema.org/ - -description: | - Jurisdiction of legal formation and registration. - - Links to Jurisdiction class. - - gleif_base:hasLegalJurisdiction - "The jurisdiction of legal formation - and registration of the entity" - - For most entities, this is the country. For federal systems (USA, Germany), - this may be a state/region. - +description: "Jurisdiction of legal formation and registration.\n\nLinks to Jurisdiction class.\n\ngleif_base:hasLegalJurisdiction\ + \ - \"The jurisdiction of legal formation \nand registration of the entity\"\n\nFor most entities, this is the country.\ + \ For federal systems (USA, Germany),\nthis may be a state/region.\n" slots: legal_jurisdiction: slot_uri: gleif_base:hasLegalJurisdiction range: Jurisdiction required: false multivalued: false - description: | - Jurisdiction of legal formation and registration. - - gleif_base:hasLegalJurisdiction - "The jurisdiction of legal formation - and registration of the entity" - - Examples: - - NL (Netherlands national) - - DE-BY (Bavaria subnational for German entities) - - US-DE (Delaware for US corporations) - + description: "Jurisdiction of legal formation and registration.\n\ngleif_base:hasLegalJurisdiction - \"The jurisdiction\ + \ of legal formation \nand registration of the entity\"\n\nExamples:\n- NL (Netherlands national)\n- DE-BY (Bavaria\ + \ subnational for German entities)\n- US-DE (Delaware for US corporations)\n" + exact_mappings: + - schema:areaServed comments: - - "Maps to gleif_base:hasLegalJurisdiction" - - "Jurisdictions are LEGAL boundaries, not just geographic" - - "For federal systems, may be state/region level" +- Maps to gleif_base:hasLegalJurisdiction +- Jurisdictions are LEGAL boundaries, not just geographic +- For federal systems, may be state/region level diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/legal_name.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/legal_name.yaml index b98d380cb3..16a86a175a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/legal_name.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/legal_name.yaml @@ -1,22 +1,20 @@ -# CustodianLegalStatus Slot: legal_name -# Official legal name as registered - id: https://nde.nl/ontology/hc/slot/legal_name name: legal_name_slot - slots: legal_name: slot_uri: rov:legalName range: LegalName - description: | - Official legal name as registered in legal documents (KvK, company registry, etc.). - Links to LegalName class with structured name variants (TOOI pattern). - This is DISTINCT from hc:CustodianName (emic operational name). - Example: LegalName{full_name: "Stichting Rijksmuseum", name_without_type: "Rijksmuseum"} (legal) - vs CustodianName{emic_name: "Rijksmuseum"} (emic operational). + description: "Official legal name as registered in legal documents (KvK, company registry, etc.).\nLinks to LegalName\ + \ class with structured name variants (TOOI pattern).\nThis is DISTINCT from hc:CustodianName (emic operational name).\n\ + Example: LegalName{full_name: \"Stichting Rijksmuseum\", name_without_type: \"Rijksmuseum\"} (legal) \nvs CustodianName{emic_name:\ + \ \"Rijksmuseum\"} (emic operational).\n" required: true notes: - - "Legal name appears in: statutes, KvK registry, tax documents, legal contracts" - - "Emic operational name appears in: website, signage, marketing, public communications" - - "These may differ significantly!" - - "Now uses structured LegalName class instead of simple string" + - 'Legal name appears in: statutes, KvK registry, tax documents, legal contracts' + - 'Emic operational name appears in: website, signage, marketing, public communications' + - These may differ significantly! + - Now uses structured LegalName class instead of simple string + exact_mappings: + - schema:legalName + broad_mappings: + - rdfs:label diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/legal_responsibility_basis.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/legal_responsibility_basis.yaml index 7c714b0c12..084a6bc390 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/legal_responsibility_basis.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/legal_responsibility_basis.yaml @@ -1,35 +1,35 @@ -# Legal Responsibility Basis Slot -# Documents statutory/regulatory/contractual foundation for legal accountability - id: https://nde.nl/ontology/hc/slot/legal_responsibility_basis name: legal_responsibility_basis_slot title: legal_responsibility_basis Slot - prefixes: linkml: https://w3id.org/linkml/ dcterms: http://purl.org/dc/terms/ hc: https://nde.nl/ontology/hc/ - default_prefix: hc - imports: - - linkml:types - - ../metadata - +- linkml:types +- ../metadata slots: legal_responsibility_basis: slot_uri: dcterms:conformsTo range: string required: true - description: | - Legal basis establishing the organization's responsibility for this collection. + description: 'Legal basis establishing the organization''s responsibility for this collection. + Documents the statutory, regulatory, or contractual foundation for legal accountability. - + + Examples: + - "Archiefwet 1995 (Dutch Archives Act)" + - "Erfgoedwet (Heritage Act) + Foundation statute" + - "Municipal charter Article 5.2: Archive custody responsibilities" - + + ' examples: - - value: "Archiefwet 1995, Article 41: Provincial archives shall preserve government records" - description: "Statutory basis for provincial archive responsibility" + - value: 'Archiefwet 1995, Article 41: Provincial archives shall preserve government records' + description: Statutory basis for provincial archive responsibility + close_mappings: + - dcterms:rights diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/legal_responsibility_end_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/legal_responsibility_end_date.yaml index 7b7ed2047d..b52d45498c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/legal_responsibility_end_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/legal_responsibility_end_date.yaml @@ -1,35 +1,35 @@ -# Legal Responsibility End Date Slot -# Date when legal responsibility for collection ended - id: https://nde.nl/ontology/hc/slot/legal_responsibility_end_date name: legal_responsibility_end_date_slot title: legal_responsibility_end_date Slot - prefixes: linkml: https://w3id.org/linkml/ prov: http://www.w3.org/ns/prov# hc: https://nde.nl/ontology/hc/ - default_prefix: hc - imports: - - linkml:types - - ../metadata - +- linkml:types +- ../metadata slots: legal_responsibility_end_date: slot_uri: prov:invalidatedAtTime range: date required: false - description: | - Date when legal responsibility for this collection ended (if applicable). - + description: 'Date when legal responsibility for this collection ended (if applicable). + + Scenarios: + - Custody Transfer: Responsibility transferred to another legal entity + - Collection Deaccessioned: Collection sold, destroyed, or dispersed + - Entity Dissolution: Responsible entity dissolved (responsibility must transfer) + - Statutory Change: Law changed, responsibility removed or transferred - + + ' examples: - - value: "2001-01-01" - description: "Legal responsibility ended when collection transferred to NHA" + - value: '2001-01-01' + description: Legal responsibility ended when collection transferred to NHA + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/legal_responsibility_start_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/legal_responsibility_start_date.yaml index 553fae8a6c..b9b51b12ec 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/legal_responsibility_start_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/legal_responsibility_start_date.yaml @@ -1,35 +1,35 @@ -# Legal Responsibility Start Date Slot -# Date when legal responsibility for collection began - id: https://nde.nl/ontology/hc/slot/legal_responsibility_start_date name: legal_responsibility_start_date_slot title: legal_responsibility_start_date Slot - prefixes: linkml: https://w3id.org/linkml/ prov: http://www.w3.org/ns/prov# hc: https://nde.nl/ontology/hc/ - default_prefix: hc - imports: - - linkml:types - - ../metadata - +- linkml:types +- ../metadata slots: legal_responsibility_start_date: slot_uri: prov:generatedAtTime range: date required: false - description: | - Date when legal responsibility for this collection began. + description: 'Date when legal responsibility for this collection began. + May differ from collection.valid_from (when collection itself was created). - + + Scenarios: + - Founding Collection: Start date = collection creation date + - Custody Transfer: Start date = transfer date (≠ collection creation) + - Statutory Change: Start date = law effective date - + + ' examples: - - value: "2001-01-01" - description: "Legal responsibility transferred when NHA formed from merger" + - value: '2001-01-01' + description: Legal responsibility transferred when NHA formed from merger + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/legal_status.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/legal_status.yaml index 01645d46b5..2f0966bb90 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/legal_status.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/legal_status.yaml @@ -1,25 +1,24 @@ -# Legal Status Slot id: https://nde.nl/ontology/hc/slot/legal_status name: legal_status_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ gleif: https://www.gleif.org/ontology/Base/ schema: http://schema.org/ - default_prefix: hc - imports: - - linkml:types - - ../metadata - - ../classes/CustodianLegalStatus - +- linkml:types +- ../metadata +- ../classes/CustodianLegalStatus slots: legal_status: slot_uri: gleif:hasLegalForm - description: "The formal legal entity representing this custodian" + description: The formal legal entity representing this custodian range: CustodianLegalStatus required: false exact_mappings: - - schema:legalName + - schema:legalName + close_mappings: + - org:classification + broad_mappings: + - adms:status diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/linkedin_profile_path.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/linkedin_profile_path.yaml index d19e1fa726..d6b5425699 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/linkedin_profile_path.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/linkedin_profile_path.yaml @@ -1,44 +1,24 @@ -# LinkedIn Profile Path Slot -# Slot for referencing LinkedIn profile data files (Rule 12, Rule 20) - id: https://nde.nl/ontology/hc/slot/linkedin_profile_path name: linkedin_profile_path_slot title: LinkedIn Profile Path Slot version: 1.0.0 - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# - imports: - - linkml:types - +- linkml:types slots: linkedin_profile_path: slot_uri: prov:hadPrimarySource - description: | - File path to LinkedIn profile data (per Rule 12, Rule 20). - - **Pattern**: LinkedIn profiles are stored as individual JSON files - rather than inline data to avoid duplication and enable updates. - - **File Location**: data/custodian/person/entity/{linkedin-slug}_{timestamp}.json - - **Example**: "data/custodian/person/entity/jane-smith_20250115T103000Z.json" - - **PROV-O Alignment**: - - This slot represents prov:hadPrimarySource relationship - - Links to the JSON file that serves as the authoritative profile source - - **Rationale**: - - Same person may work at multiple custodians - - Profile data can be updated independently - - Reduces duplication (50+ lines -> 1 path reference) - - **See Also**: - - Rule 12 (Person Data Reference Pattern) - - Rule 20 (Person Entity Profiles) - - Rule 27 (Person-Custodian Data Architecture) + description: "File path to LinkedIn profile data (per Rule 12, Rule 20).\n\n**Pattern**: LinkedIn profiles are stored\ + \ as individual JSON files\nrather than inline data to avoid duplication and enable updates.\n\n**File Location**: data/custodian/person/entity/{linkedin-slug}_{timestamp}.json\n\ + \n**Example**: \"data/custodian/person/entity/jane-smith_20250115T103000Z.json\"\n\n**PROV-O Alignment**:\n- This slot\ + \ represents prov:hadPrimarySource relationship\n- Links to the JSON file that serves as the authoritative profile source\n\ + \n**Rationale**:\n- Same person may work at multiple custodians\n- Profile data can be updated independently\n- Reduces\ + \ duplication (50+ lines -> 1 path reference)\n\n**See Also**: \n- Rule 12 (Person Data Reference Pattern)\n- Rule 20\ + \ (Person Entity Profiles)\n- Rule 27 (Person-Custodian Data Architecture)\n" range: string required: false + close_mappings: + - schema:sameAs diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/linkedin_profile_url.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/linkedin_profile_url.yaml index 1aa13dec52..0bb07db400 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/linkedin_profile_url.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/linkedin_profile_url.yaml @@ -1,43 +1,53 @@ -# LinkedIn Profile URL Slot -# Slot for LinkedIn profile URLs with sameAs semantics - id: https://nde.nl/ontology/hc/slot/linkedin_profile_url name: linkedin_profile_url_slot title: LinkedIn Profile URL Slot version: 1.0.0 - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types slots: linkedin_profile_url: slot_uri: schema:sameAs - description: | - LinkedIn profile URL for this person. - + description: 'LinkedIn profile URL for this person. + + **Schema.org**: `schema:sameAs` for linking to same entity on other platforms - + + **Format**: Full URL (https://www.linkedin.com/in/username) - + + **Privacy**: Only include if LinkedIn profile is publicly accessible. - + + **Photo URLs**: For profile photos, use CDN URL (media.licdn.com), + NOT the overlay page URL (per Rule 16). - + + **Example**: "https://www.linkedin.com/in/jane-smith-curator" - + + **Semantics**: + - This URL represents the same person on the LinkedIn platform + - Use for identity linking and deduplication + - NOT for data retrieval (use linkedin_profile_path instead) - + + **See Also**: + - Rule 16 (LinkedIn Photo CDN URLs) + - linkedin_profile_path slot for profile data file reference + + ' range: uri required: false + broad_mappings: + - schema:url diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/located_at.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/located_at.yaml index 6e2556f54a..e51e31d1f0 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/located_at.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/located_at.yaml @@ -1,82 +1,37 @@ -# Located At Slot -# Links OrganizationalStructure to a physical location (AuxiliaryPlace) -# W3C Org: org:basedAt pattern for organization locations - id: https://nde.nl/ontology/hc/slot/located_at name: located_at_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types slots: located_at: slot_uri: org:basedAt range: AuxiliaryPlace multivalued: true inlined_as_list: true - description: | - Physical location (AuxiliaryPlace) where this organizational unit operates. - - **W3C ORG Alignment**: - - `org:basedAt` - "Indicates the site at which the Organization has its main - administrative/operational presence." - - Alternative: `org:hasSite` - "Indicates a site at which the Organization - has some presence even if only indirect." - - **Use Cases**: - - 1. **Departments at Branch Locations**: - - Conservation Team → located at Amersfoort Depot - - Digitization Team → located at off-site facility - - 2. **Teams Spanning Multiple Locations**: - - IT Department → located at main building AND data center - - Public Services → located at main reading room AND annex - - 3. **Temporary Location Assignments**: - - Exhibition Team → temporarily at partner venue - - Collections → temporarily at storage during renovation - - **Relationship Pattern**: - - Two-way linking between locations and organizational units: - - ``` - AuxiliaryPlace - └── hosts_branch → OrganizationBranch - └── has_operational_unit → OrganizationalStructure - - OrganizationalStructure - └── located_at → AuxiliaryPlace (optional) - ``` - - **Optional Slot**: - - Many organizational units don't have fixed locations: - - Strategic Planning Committee (meets virtually) - - Research Fellowship Program (no physical space) - - Only use when organizational unit has identifiable physical location. - - **Example - Conservation Division**: - ```yaml - OrganizationalStructure: - unit_name: "Conservation Division" - unit_type: DIVISION - located_at: - - place_name: "Conservation Lab - Main Building" - - place_name: "Climate-Controlled Storage - Depot Amersfoort" - ``` + description: "Physical location (AuxiliaryPlace) where this organizational unit operates.\n\n**W3C ORG Alignment**:\n\n\ + `org:basedAt` - \"Indicates the site at which the Organization has its main \nadministrative/operational presence.\"\ + \n\nAlternative: `org:hasSite` - \"Indicates a site at which the Organization \nhas some presence even if only indirect.\"\ + \n\n**Use Cases**:\n\n1. **Departments at Branch Locations**:\n - Conservation Team → located at Amersfoort Depot\n\ + \ - Digitization Team → located at off-site facility\n\n2. **Teams Spanning Multiple Locations**:\n - IT Department\ + \ → located at main building AND data center\n - Public Services → located at main reading room AND annex\n\n3. **Temporary\ + \ Location Assignments**:\n - Exhibition Team → temporarily at partner venue\n - Collections → temporarily at storage\ + \ during renovation\n\n**Relationship Pattern**:\n\nTwo-way linking between locations and organizational units:\n\n\ + ```\nAuxiliaryPlace\n └── hosts_branch → OrganizationBranch\n └── has_operational_unit → OrganizationalStructure\n\ + \nOrganizationalStructure\n └── located_at → AuxiliaryPlace (optional)\n```\n\n**Optional Slot**:\n\nMany organizational\ + \ units don't have fixed locations:\n- Strategic Planning Committee (meets virtually)\n- Research Fellowship Program\ + \ (no physical space)\n\nOnly use when organizational unit has identifiable physical location.\n\n**Example - Conservation\ + \ Division**:\n```yaml\nOrganizationalStructure:\n unit_name: \"Conservation Division\"\n unit_type: DIVISION\n located_at:\n\ + \ - place_name: \"Conservation Lab - Main Building\"\n - place_name: \"Climate-Controlled Storage - Depot Amersfoort\"\ + \n```\n" examples: - - value: - - place_name: "Depot Amersfoort" - auxiliary_place_type: STORAGE_FACILITY - description: "Organizational unit located at off-site storage" + - value: + - place_name: Depot Amersfoort + auxiliary_place_type: STORAGE_FACILITY + description: Organizational unit located at off-site storage + broad_mappings: + - prov:atTime diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/managed_by.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/managed_by.yaml index 34fa658f8b..556c12feab 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/managed_by.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/managed_by.yaml @@ -1,22 +1,20 @@ -# Global Slot: managed_by -# Identifies the entity or organizational unit managing something - id: https://nde.nl/ontology/hc/slot/managed_by name: managed_by_slot title: Managed By Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# - imports: - - linkml:types - +- linkml:types slots: managed_by: slot_uri: org:linkedTo description: Entity or organizational unit managing this resource range: string exact_mappings: - - org:linkedTo + - org:linkedTo + close_mappings: + - prov:wasAttributedTo + broad_mappings: + - prov:wasAttributedTo diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/metadata_standards.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/metadata_standards.yaml index aa6531b20d..4ceefb0f9f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/metadata_standards.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/metadata_standards.yaml @@ -1,21 +1,21 @@ -# Global Slot: metadata_standards -# Lists metadata standards implemented/used by a platform or portal - id: https://nde.nl/ontology/hc/slot/metadata_standards name: metadata_standards_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - default_prefix: hc - slots: metadata_standards: slot_uri: dcterms:conformsTo range: string multivalued: true - description: | - Metadata standards implemented or used by this platform/portal. + description: 'Metadata standards implemented or used by this platform/portal. + Examples: Dublin Core, MARC21, EAD, LIDO, CIDOC-CRM, Schema.org, etc. + + ' + close_mappings: + - dcterms:conformsTo + broad_mappings: + - dcterms:conformsTo diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/method.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/method.yaml index 6891921140..6443f10677 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/method.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/method.yaml @@ -1,11 +1,9 @@ -# ReconstructionActivity Slot: method -# Method used for entity resolution - id: https://nde.nl/ontology/hc/slot/method name: method_slot - slots: method: slot_uri: dcterms:description range: string - description: "Method used for entity resolution (manual curation, algorithmic matching, etc.)" + description: Method used for entity resolution (manual curation, algorithmic matching, etc.) + exact_mappings: + - prov:wasGeneratedBy diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/mission_statement.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/mission_statement.yaml index 48d1338adf..9b2ba76a19 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/mission_statement.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/mission_statement.yaml @@ -1,41 +1,48 @@ -# mission_statement slot - Links Custodian to MissionStatement records -# -# Created December 2025 to capture organizational purpose statements with provenance. -# -# W3C Org Ontology alignment: -# org:purpose - "Indicates the purpose of this Organization" - id: https://nde.nl/ontology/hc/slot/mission_statement name: mission_statement title: Mission Statement Slot - prefixes: org: http://www.w3.org/ns/org# hc: https://nde.nl/ontology/hc/ +description: 'Links a Custodian to its documented mission, vision, goal, and value statements. + -description: | - Links a Custodian to its documented mission, vision, goal, and value statements. - Heritage custodians publish purpose statements on their websites that articulate: + - **Mission**: Why the organization exists (core purpose) + - **Vision**: What future state they aspire to (aspirational) + - **Goals**: Specific measurable objectives + - **Values**: Guiding principles + - **Motto**: Memorable phrases/slogans - + + This slot enables capturing these statements with full provenance, including: + - Source URL and retrieval timestamp + - XPath/CSS selector for verification + - Content hash for integrity + - Archive links for long-term access - + + **W3C Org Ontology**: + Uses `org:purpose` property which "indicates the purpose of this Organization." - + + **Multiple Statements**: + A custodian may have multiple purpose statements (mission + vision + goals). + Each statement is captured as a separate MissionStatement instance. + ' slots: mission_statement: slot_uri: org:purpose @@ -43,55 +50,25 @@ slots: multivalued: true inlined_as_list: true required: false - description: | - Mission, vision, goal, value, and motto statements documented for this custodian. - - Links to MissionStatement instances that capture organizational purpose - with full provenance (source URL, XPath, content hash, archive link). - - **Typical Usage**: - A Dutch museum might have: - - 1 mission statement ("Onze Missie") - - 1 vision statement ("Onze Visie") - - Multiple goal statements ("Doelstellingen") - - Each is captured as a separate MissionStatement with: - - statement_type: mission | vision | goal | value | motto - - statement_text: The actual text in original language - - source_url: URL where statement was found - - retrieved_on: When the page was archived - - **Why on Custodian (not CustodianLegalStatus)?**: - - Mission statements express OPERATIONAL purpose, not legal obligations. - They may change without legal reorganization, and often reflect - public-facing identity rather than formal statutes. - - **Example - Dutch Museum**: - ```yaml - Custodian: - hc_id: "https://nde.nl/ontology/hc/nl-zh-zui-m-lmt" - preferred_label: "Landbouwmuseum Tiengemeten" - - mission_statement: - - statement_type: mission - statement_text: "Waar komt ons voedsel écht vandaan." - statement_language: nl - source_url: "https://www.landbouwmuseumtiengemeten.nl/het-museum/missie-en-visie" - retrieved_on: "2025-12-29T10:00:00Z" - - - statement_type: vision - statement_text: | - Het Landbouwmuseum Tiengemeten voelt zich onderdeel van een - belangrijke agrarische ontwikkeling, de mechanisatie tussen - 1920 en 1955. - statement_language: nl - source_url: "https://www.landbouwmuseumtiengemeten.nl/het-museum/missie-en-visie" - retrieved_on: "2025-12-29T10:00:00Z" - ``` - + description: "Mission, vision, goal, value, and motto statements documented for this custodian.\n\nLinks to MissionStatement\ + \ instances that capture organizational purpose\nwith full provenance (source URL, XPath, content hash, archive link).\n\ + \n**Typical Usage**:\nA Dutch museum might have:\n- 1 mission statement (\"Onze Missie\")\n- 1 vision statement (\"\ + Onze Visie\") \n- Multiple goal statements (\"Doelstellingen\")\n\nEach is captured as a separate MissionStatement\ + \ with:\n- statement_type: mission | vision | goal | value | motto\n- statement_text: The actual text in original language\n\ + - source_url: URL where statement was found\n- retrieved_on: When the page was archived\n\n**Why on Custodian (not CustodianLegalStatus)?**:\n\ + \nMission statements express OPERATIONAL purpose, not legal obligations.\nThey may change without legal reorganization,\ + \ and often reflect\npublic-facing identity rather than formal statutes.\n\n**Example - Dutch Museum**:\n```yaml\nCustodian:\n\ + \ hc_id: \"https://nde.nl/ontology/hc/nl-zh-zui-m-lmt\"\n preferred_label: \"Landbouwmuseum Tiengemeten\"\n \n mission_statement:\n\ + \ - statement_type: mission\n statement_text: \"Waar komt ons voedsel écht vandaan.\"\n statement_language:\ + \ nl\n source_url: \"https://www.landbouwmuseumtiengemeten.nl/het-museum/missie-en-visie\"\n retrieved_on:\ + \ \"2025-12-29T10:00:00Z\"\n \n - statement_type: vision\n statement_text: |\n Het Landbouwmuseum\ + \ Tiengemeten voelt zich onderdeel van een\n belangrijke agrarische ontwikkeling, de mechanisatie tussen\n \ + \ 1920 en 1955.\n statement_language: nl\n source_url: \"https://www.landbouwmuseumtiengemeten.nl/het-museum/missie-en-visie\"\ + \n retrieved_on: \"2025-12-29T10:00:00Z\"\n```\n" + close_mappings: + - org:purpose comments: - - "Maps to org:purpose from W3C Organization Ontology" - - "Multivalued to support mission + vision + goals + values" - - "Each MissionStatement has full provenance (source_url, xpath, content_hash)" - - "Statement text preserved in original language (statement_language field)" +- Maps to org:purpose from W3C Organization Ontology +- Multivalued to support mission + vision + goals + values +- Each MissionStatement has full provenance (source_url, xpath, content_hash) +- Statement text preserved in original language (statement_language field) diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/modified.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/modified.yaml index dbf89ead00..27aa52d5b8 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/modified.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/modified.yaml @@ -1,14 +1,16 @@ -# Base Slot: modified -# Database record modification timestamp - id: https://nde.nl/ontology/hc/slot/modified name: modified_slot - slots: modified: slot_uri: schema:dateModified range: datetime - description: | - Timestamp when this database record was last modified. - IMPORTANT: This is NOT the custodian's dissolution date - it's metadata about the digital record. + description: 'Timestamp when this database record was last modified. + + IMPORTANT: This is NOT the custodian''s dissolution date - it''s metadata about the digital record. + Use CustodianLegalStatus.dissolution_date or temporal_extent for entity lifecycle. + + ' + exact_mappings: + - dcterms:modified + - schema:dateModified diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/name_authority.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/name_authority.yaml index 89c68febb4..b848c79c9a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/name_authority.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/name_authority.yaml @@ -1,11 +1,9 @@ -# CustodianName Slot: name_authority -# Authority that authorized the name - id: https://nde.nl/ontology/hc/slot/name_authority name: name_authority_slot - slots: name_authority: slot_uri: prov:wasAttributedTo range: string - description: "Authority that authorized this name (board resolution, statute, tradition)" + description: Authority that authorized this name (board resolution, statute, tradition) + close_mappings: + - dcterms:source diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/name_language.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/name_language.yaml index 19355ba317..805405c6d6 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/name_language.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/name_language.yaml @@ -1,14 +1,14 @@ -# Slot: name_language -# Language code for observed name - id: https://nde.nl/ontology/hc/slot/name_language name: name_language-slot - slots: name_language: - description: | - The language or locale code (ISO 639-1 or BCP 47) of the emic name. - Examples: 'nl' for Dutch, 'en' for English, 'pt-BR' for Brazilian Portuguese. + description: 'The language or locale code (ISO 639-1 or BCP 47) of the emic name. + + Examples: ''nl'' for Dutch, ''en'' for English, ''pt-BR'' for Brazilian Portuguese. + + ' slot_uri: dcterms:language range: string - pattern: "^[a-z]{2}(-[A-Z]{2})?$" + pattern: ^[a-z]{2}(-[A-Z]{2})?$ + broad_mappings: + - dcterms:language diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/name_validity_period.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/name_validity_period.yaml index 67d6ec9db2..ac26bc0aba 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/name_validity_period.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/name_validity_period.yaml @@ -1,17 +1,17 @@ -# CustodianName Slot: name_validity_period -# Temporal period during which name was valid (with uncertainty) - id: https://nde.nl/ontology/hc/slot/name_validity_period name: name_validity_period_slot - imports: - - ../classes/TimeSpan - +- ../classes/TimeSpan slots: name_validity_period: slot_uri: crm:P4_has_time-span range: TimeSpan - description: | - Temporal period during which this name was valid (with fuzzy boundaries). + description: 'Temporal period during which this name was valid (with fuzzy boundaries). + Use when name validity dates are uncertain or approximate. + For precise dates, use valid_from/valid_to instead. + + ' + close_mappings: + - dcterms:temporal diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/notes.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/notes.yaml index ad2ab3b698..9059f9320f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/notes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/notes.yaml @@ -1,23 +1,18 @@ -# Slot: notes -# Additional notes or comments about a resource - id: https://nde.nl/ontology/hc/slot/notes name: notes_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ skos: http://www.w3.org/2004/02/skos/core# - imports: - - linkml:types - +- linkml:types default_range: string - slots: notes: slot_uri: skos:note range: string - description: >- - Additional notes or comments about the resource. - Free-text field for supplementary information. + description: Additional notes or comments about the resource. Free-text field for supplementary information. + exact_mappings: + - skos:note + close_mappings: + - rdfs:comment diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/oai_pmh_endpoint.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/oai_pmh_endpoint.yaml index e1c027d34c..9a77d62dda 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/oai_pmh_endpoint.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/oai_pmh_endpoint.yaml @@ -1,20 +1,18 @@ -# Global Slot: oai_pmh_endpoint -# OAI-PMH harvesting endpoint URL - id: https://nde.nl/ontology/hc/slot/oai_pmh_endpoint name: oai_pmh_endpoint_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcat: http://www.w3.org/ns/dcat# - default_prefix: hc - slots: oai_pmh_endpoint: slot_uri: dcat:endpointURL range: uri - description: | - OAI-PMH (Open Archives Initiative Protocol for Metadata Harvesting) + description: 'OAI-PMH (Open Archives Initiative Protocol for Metadata Harvesting) + endpoint URL for metadata harvesting. + + ' + broad_mappings: + - dcat:endpointURL diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/object_ref.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/object_ref.yaml index 15effd0c47..f4cde49a81 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/object_ref.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/object_ref.yaml @@ -2,21 +2,19 @@ id: https://nde.nl/ontology/hc/slot/object_ref name: object_ref_slot title: Object Reference Slot description: Shared slot for object references across heritage custodian entities - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ crm: http://www.cidoc-crm.org/cidoc-crm/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: object_ref: description: Reference to the heritage object this record/event concerns range: uriorcurie slot_uri: crm:P140_assigned_attribute_to comments: - - "Classes may override slot_uri in slot_usage for specific CRM property semantics" + - Classes may override slot_uri in slot_usage for specific CRM property semantics + broad_mappings: + - dcterms:references diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/observation_context.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/observation_context.yaml index 58f51ff4e2..c52a2cd284 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/observation_context.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/observation_context.yaml @@ -1,11 +1,9 @@ -# CustodianObservation Slot: observation_context -# Context of the observation - id: https://nde.nl/ontology/hc/slot/observation_context name: observation_context_slot - slots: observation_context: slot_uri: dcterms:description range: string - description: "Context of the observation (e.g., letterhead, website, signage, archival record)" + description: Context of the observation (e.g., letterhead, website, signage, archival record) + close_mappings: + - prov:atLocation diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/observation_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/observation_date.yaml index a9bdaf08c4..bbe050d805 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/observation_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/observation_date.yaml @@ -1,11 +1,11 @@ -# CustodianObservation Slot: observation_date -# Date when source was created - id: https://nde.nl/ontology/hc/slot/observation_date name: observation_date_slot - slots: observation_date: slot_uri: prov:generatedAtTime range: date - description: "Date when the source was created" + description: Date when the source was created + close_mappings: + - prov:generatedAtTime + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/observation_source.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/observation_source.yaml index 7eaadfbc27..4d96d4395d 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/observation_source.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/observation_source.yaml @@ -1,13 +1,15 @@ -# Slot: observation_source -# Direct reference to source of observation - id: https://nde.nl/ontology/hc/slot/observation_source name: observation_source-slot - slots: observation_source: - description: | - The source document, dataset, or system from which this observation + description: 'The source document, dataset, or system from which this observation + was extracted or recorded. + + ' slot_uri: dcterms:source range: string + close_mappings: + - dcterms:source + broad_mappings: + - dcterms:source diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/observed_name.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/observed_name.yaml index 7b8c731de9..c78bb36f61 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/observed_name.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/observed_name.yaml @@ -1,12 +1,10 @@ -# CustodianObservation Slot: observed_name -# Name as recorded in source (emic perspective) - id: https://nde.nl/ontology/hc/slot/observed_name name: observed_name_slot - slots: observed_name: slot_uri: skos:prefLabel range: string - description: "Name as recorded in the source (emic perspective)" + description: Name as recorded in the source (emic perspective) required: true + broad_mappings: + - rdfs:label diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/offers_donation_schemes.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/offers_donation_schemes.yaml index 521c26585f..49dc842b78 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/offers_donation_schemes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/offers_donation_schemes.yaml @@ -1,62 +1,38 @@ -# offers_donation_schemes slot -# Links a Custodian to the donation schemes it offers -# -# Created January 2026 for DonationScheme integration -# -# Relationship: Custodian --offers_donation_schemes--> DonationScheme[] -# Inverse: DonationScheme --offered_by--> Custodian - id: https://nde.nl/ontology/hc/slot/offers_donation_schemes name: offers_donation_schemes title: Offers Donation Schemes - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_prefix: hc - slots: offers_donation_schemes: slot_uri: schema:makesOffer range: uriorcurie multivalued: true inlined_as_list: false - description: | - Donation and giving schemes offered by this heritage custodian. - - Links to DonationScheme instances representing the various ways - individuals and organizations can financially support the institution. - - Examples: - - Friends/membership schemes (Museumvriend, Förderverein) - - Patron circles and benefactor programs - - Object adoption (Adopt-a-Book, sponsor an artifact) - - Legacy giving (bequests, endowments) - - Corporate sponsorship - - Crowdfunding campaigns - - Inverse property: DonationScheme.offered_by → Custodian - - Note: Bidirectional relationship implemented via separate slots. - Navigation: Custodian.offers_donation_schemes → DonationScheme - DonationScheme.offered_by → Custodian - # inverse: offered_by # Commented out - implemented via slot_usage in both classes + description: "Donation and giving schemes offered by this heritage custodian.\n\nLinks to DonationScheme instances representing\ + \ the various ways\nindividuals and organizations can financially support the institution.\n\nExamples:\n- Friends/membership\ + \ schemes (Museumvriend, Förderverein)\n- Patron circles and benefactor programs\n- Object adoption (Adopt-a-Book, sponsor\ + \ an artifact)\n- Legacy giving (bequests, endowments)\n- Corporate sponsorship\n- Crowdfunding campaigns\n\nInverse\ + \ property: DonationScheme.offered_by → Custodian\n\nNote: Bidirectional relationship implemented via separate slots.\n\ + Navigation: Custodian.offers_donation_schemes → DonationScheme\n DonationScheme.offered_by → Custodian\n" annotations: - owl.inverseOf: "hc:offered_by" - custodian_types: "*" - custodian_types_rationale: "All heritage custodians can offer donation schemes" + owl.inverseOf: hc:offered_by + custodian_types: '*' + custodian_types_rationale: All heritage custodians can offer donation schemes examples: - - value: "https://nde.nl/ontology/hc/donation-scheme/rijksmuseum/vrienden" - description: "Rijksmuseum Friends membership scheme" - - value: "https://nde.nl/ontology/hc/donation-scheme/british-library/adopt-a-book" - description: "British Library Adopt-a-Book program" + - value: https://nde.nl/ontology/hc/donation-scheme/rijksmuseum/vrienden + description: Rijksmuseum Friends membership scheme + - value: https://nde.nl/ontology/hc/donation-scheme/british-library/adopt-a-book + description: British Library Adopt-a-Book program comments: - - "Bidirectional with DonationScheme.offered_by" - - "Multiple schemes per custodian supported" - - "Use DonationSchemeTypeEnum to categorize schemes" + - Bidirectional with DonationScheme.offered_by + - Multiple schemes per custodian supported + - Use DonationSchemeTypeEnum to categorize schemes + related_mappings: + - schema:availableService diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/operated_by.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/operated_by.yaml index a9332c20f2..224ff78338 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/operated_by.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/operated_by.yaml @@ -1,10 +1,5 @@ -# operated_by slot -# Links WebPortal to EncompassingBody (operator organization) -# Inverse of operates (schema:owns) - id: https://nde.nl/ontology/hc/slot/operated_by name: operated_by - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ @@ -12,50 +7,66 @@ prefixes: org: http://www.w3.org/ns/org# edm: http://www.europeana.eu/schemas/edm/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: operated_by: slot_uri: schema:maintainer - description: | - The EncompassingBody that operates/maintains this web portal. - + description: 'The EncompassingBody that operates/maintains this web portal. + + **INVERSE PROPERTY**: + - **Inverse**: `operates` (on EncompassingBody) + - Pattern: If Portal operatedBy Body, then Body operates Portal - + + **RELATIONSHIP**: WebPortal → EncompassingBody - + + Web portals are typically operated by: + - NetworkOrganisation: NDE operates Dataset Register, Archieven.nl + - Consortium: ICARUS operates Monasterium.net + - Cooperative: OCLC operates WorldCat + - UmbrellaOrganisation: National library operates national union catalog - + + **Examples**: + - NDE Dataset Register → operated_by → NDE (NetworkOrganisation) + - Archieven.nl → operated_by → KVAN/Erfgoed Leiden (NetworkOrganisation) + - Deutsche Digitale Bibliothek → operated_by → DDB (NetworkOrganisation) + - Europeana → operated_by → Europeana Foundation (NetworkOrganisation) - + + **Ontology Alignment**: + - Schema.org: `schema:maintainer` - organization maintaining the portal + - W3C ORG: Related to `org:memberOf` (portal belongs to network) + + ' range: EncompassingBody - exact_mappings: - - schema:maintainer - + - schema:maintainer related_mappings: - - dcterms:publisher - - org:memberOf - + - dcterms:publisher + - org:memberOf comments: - - "Inverse of operates (on EncompassingBody)" - - "Creates owl:inverseOf axiom in RDF output" - + - Inverse of operates (on EncompassingBody) + - Creates owl:inverseOf axiom in RDF output examples: - - value: "https://nde.nl/ontology/hc/encompassing-body/network/nde" - description: "Portal operated by NDE network" + - value: https://nde.nl/ontology/hc/encompassing-body/network/nde + description: Portal operated by NDE network + close_mappings: + - schema:provider + broad_mappings: + - prov:wasAttributedTo diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/organizational_change_events.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/organizational_change_events.yaml index dea8904210..31d1878c78 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/organizational_change_events.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/organizational_change_events.yaml @@ -1,25 +1,19 @@ -# organizational_change_events slot -# Links Custodian to OrganizationalChangeEvent entities - id: https://nde.nl/ontology/hc/slot/organizational_change_events name: organizational_change_events - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# - default_prefix: hc - imports: - - linkml:types - - ../metadata - # Class imports for range - - ../classes/OrganizationalChangeEvent - +- linkml:types +- ../metadata +- ../classes/OrganizationalChangeEvent slots: organizational_change_events: - description: "History of organizational change events for this custodian" + description: History of organizational change events for this custodian range: OrganizationalChangeEvent multivalued: true slot_uri: prov:wasInfluencedBy + close_mappings: + - prov:Activity diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/organizational_structure.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/organizational_structure.yaml index 8b964f55ee..5230338653 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/organizational_structure.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/organizational_structure.yaml @@ -1,61 +1,41 @@ -# Custodian Slot: organizational_structure -# Links Custodian to informal organizational units - id: https://nde.nl/ontology/hc/slot/organizational_structure name: organizational_structure_slot - slots: organizational_structure: slot_uri: org:hasUnit range: OrganizationalStructure multivalued: true - description: | - Informal organizational structure - operational departments, teams, - divisions, and groups that are NOT formally registered legal entities. - - **Key Distinction**: - - **GovernanceStructure** (on CustodianLegalStatus): FORMAL structure - from legal registration (e.g., "agency under Ministry OCW") - - **OrganizationalStructure** (on Custodian): INFORMAL operational units - (e.g., "Digital Preservation Team", "Collections Department") - - **W3C ORG Property**: `org:hasUnit` - - Domain: org:FormalOrganization (the CustodianLegalStatus) - - Range: org:OrganizationalUnit (the operational units) - - Definition: "Indicates a unit which is part of this Organization" - - **Why on Custodian, not CustodianLegalStatus?**: - - Organizational units are operational/functional, not legal - - Units can change frequently without legal reorganization - - Multiple legal entities (branches) may share organizational structure - - Separates formal (legal) from informal (operational) structure - - **Examples**: - - National Archives: "Digital Preservation Department", "Reading Room Service" - - Rijksmuseum: "Conservation Lab", "Education Division", "Asian Art Department" - - University Library: "Special Collections", "Digital Services Team" - + description: "Informal organizational structure - operational departments, teams,\ndivisions, and groups that are NOT\ + \ formally registered legal entities.\n\n**Key Distinction**:\n- **GovernanceStructure** (on CustodianLegalStatus):\ + \ FORMAL structure\n from legal registration (e.g., \"agency under Ministry OCW\")\n- **OrganizationalStructure** (on\ + \ Custodian): INFORMAL operational units\n (e.g., \"Digital Preservation Team\", \"Collections Department\")\n\n**W3C\ + \ ORG Property**: `org:hasUnit`\n- Domain: org:FormalOrganization (the CustodianLegalStatus)\n- Range: org:OrganizationalUnit\ + \ (the operational units)\n- Definition: \"Indicates a unit which is part of this Organization\"\n\n**Why on Custodian,\ + \ not CustodianLegalStatus?**:\n- Organizational units are operational/functional, not legal\n- Units can change frequently\ + \ without legal reorganization\n- Multiple legal entities (branches) may share organizational structure\n- Separates\ + \ formal (legal) from informal (operational) structure\n\n**Examples**:\n- National Archives: \"Digital Preservation\ + \ Department\", \"Reading Room Service\"\n- Rijksmuseum: \"Conservation Lab\", \"Education Division\", \"Asian Art Department\"\ + \n- University Library: \"Special Collections\", \"Digital Services Team\"\n" comments: - - "Links to OrganizationalStructure class (org:OrganizationalUnit)" - - "Multivalued - custodians have multiple units" - - "Units can nest via parent_unit property" - - "Temporal validity tracked per unit (valid_from/valid_to)" - - "NOT for legal sub-organizations (use CustodianLegalStatus hierarchy)" - + - Links to OrganizationalStructure class (org:OrganizationalUnit) + - Multivalued - custodians have multiple units + - Units can nest via parent_unit property + - Temporal validity tracked per unit (valid_from/valid_to) + - NOT for legal sub-organizations (use CustodianLegalStatus hierarchy) exact_mappings: - - org:hasUnit - + - org:hasUnit related_mappings: - - org:OrganizationalUnit # The class of units - - org:unitOf # Inverse property - + - org:OrganizationalUnit + - org:unitOf examples: - - value: - - unit_name: "Digital Preservation Department" - unit_type: "DEPARTMENT" - staff_count: 15 - - unit_name: "Public Services Team" - unit_type: "TEAM" - parent_unit: - unit_name: "User Services Division" - description: "Custodian with multiple organizational units" + - value: + - unit_name: Digital Preservation Department + unit_type: DEPARTMENT + staff_count: 15 + - unit_name: Public Services Team + unit_type: TEAM + parent_unit: + unit_name: User Services Division + description: Custodian with multiple organizational units + close_mappings: + - org:organization diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/parent_collection.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/parent_collection.yaml new file mode 100644 index 0000000000..39afc0f278 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/parent_collection.yaml @@ -0,0 +1,25 @@ +id: https://nde.nl/ontology/hc/slot/parent_collection +name: parent_collection +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + parent_collection: + slot_uri: rico:isOrWasPartOf + description: 'Parent collection in hierarchical arrangement. + + + RiC-O: isOrWasPartOf for part-whole relationships. + + + Links a sub-collection or series to its containing collection. + + ' + range: Collection + required: false + examples: + - value: https://nde.nl/ontology/hc/collection/nationaal-archief-voc + description: Parent VOC collection + exact_mappings: + - dcterms:isPartOf diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/parent_corporation.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/parent_corporation.yaml new file mode 100644 index 0000000000..6290ca9250 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/parent_corporation.yaml @@ -0,0 +1,33 @@ +# Slot: parent_corporation +# Corporate parent organization + +id: https://nde.nl/ontology/hc/slot/parent_corporation +name: parent_corporation_slot + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + org: http://www.w3.org/ns/org# + schema: http://schema.org/ + +imports: + - linkml:types + +default_range: string + +slots: + parent_corporation: + slot_uri: schema:parentOrganization + description: | + The corporate parent organization that owns or controls this entity. + + Schema.org: parentOrganization - "The larger organization that this organization + is a subOrganization of, if any." + + Used for corporate archives, company museums, or heritage institutions + owned by larger corporate entities. + range: string + exact_mappings: + - schema:parentOrganization + close_mappings: + - org:subOrganizationOf diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/parent_custodian.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/parent_custodian.yaml index 48597a1abe..1fd268d689 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/parent_custodian.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/parent_custodian.yaml @@ -1,52 +1,29 @@ -# CustodianLegalStatus Slot: parent_custodian -# Parent entity in organizational hierarchy -# Inverse of has_suborganization (org:hasSubOrganization) - id: https://nde.nl/ontology/hc/slot/parent_custodian name: parent_custodian_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - - ../metadata - - ../classes/CustodianLegalStatus - +- linkml:types +- ../metadata +- ../classes/CustodianLegalStatus slots: parent_custodian: slot_uri: org:subOrganizationOf - description: | - Parent entity in organizational hierarchy. - - **W3C ORG Alignment**: - - Property: `org:subOrganizationOf` - - Domain: org:Organization - - Range: org:Organization - - Definition: "Represents hierarchical containment of Organizations or - Organizational Units; indicates an organization which contains this - Organization." - - **INVERSE PROPERTY**: - - **Inverse**: `has_suborganization` (org:hasSubOrganization) - - Pattern: If A subOrganizationOf B, then B hasSubOrganization A - - **Example**: - ```yaml - CustodianLegalStatus: - legal_name: "Nationaal Archief" - parent_custodian: "https://nde.nl/ontology/hc/nl-ministry-ocw" - ``` - + description: "Parent entity in organizational hierarchy.\n\n**W3C ORG Alignment**:\n\nProperty: `org:subOrganizationOf`\n\ + - Domain: org:Organization\n- Range: org:Organization\n- Definition: \"Represents hierarchical containment of Organizations\ + \ or \n Organizational Units; indicates an organization which contains this \n Organization.\"\n\n**INVERSE PROPERTY**:\n\ + - **Inverse**: `has_suborganization` (org:hasSubOrganization)\n- Pattern: If A subOrganizationOf B, then B hasSubOrganization\ + \ A\n\n**Example**:\n```yaml\nCustodianLegalStatus:\n legal_name: \"Nationaal Archief\"\n parent_custodian: \"https://nde.nl/ontology/hc/nl-ministry-ocw\"\ + \n```\n" range: CustodianLegalStatus - exact_mappings: - - org:subOrganizationOf - + - org:subOrganizationOf + - schema:parentOrganization comments: - - "Inverse of has_suborganization (org:hasSubOrganization)" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of has_suborganization (org:hasSubOrganization) + - Creates owl:inverseOf axiom in RDF output + broad_mappings: + - schema:organization diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/part_of_custodian_collection.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/part_of_custodian_collection.yaml new file mode 100644 index 0000000000..899bf9301b --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/part_of_custodian_collection.yaml @@ -0,0 +1,24 @@ +id: https://nde.nl/ontology/hc/slot/part_of_custodian_collection +name: part_of_custodian_collection +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + part_of_custodian_collection: + slot_uri: rico:isOrWasHeldBy + description: 'Link to abstract CustodianCollection held by an institution. + + + Connects a specific Collection instance to the broader + + CustodianCollection that represents all holdings of a custodian. + + ' + range: CustodianCollection + required: false + examples: + - value: https://nde.nl/ontology/hc/custodian-collection/nationaal-archief + description: Nationaal Archief holdings + broad_mappings: + - dcterms:relation diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/person_name.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/person_name.yaml index fb9883247d..3f43b7aa4f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/person_name.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/person_name.yaml @@ -1,12 +1,12 @@ id: https://nde.nl/ontology/hc/slot/person_name name: person_name title: Person Name - imports: - - linkml:types - +- linkml:types slots: person_name: slot_uri: schema:name description: Full name of person as recorded in institutional sources range: string + broad_mappings: + - rdfs:label diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/place_language.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/place_language.yaml index 4dd090d8af..67afb4eb32 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/place_language.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/place_language.yaml @@ -1,12 +1,12 @@ -# Place Language Slot id: https://nde.nl/ontology/hc/slot/place_language name: place_language_slot - slots: place_language: slot_uri: dct:language - description: "Language of place name" + description: Language of place name range: string required: false exact_mappings: - - schema:inLanguage + - schema:inLanguage + broad_mappings: + - dcterms:language diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/place_note.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/place_note.yaml index b111a268c6..d57d8c0edb 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/place_note.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/place_note.yaml @@ -1,12 +1,12 @@ -# Place Note Slot id: https://nde.nl/ontology/hc/slot/place_note name: place_note_slot - slots: place_note: slot_uri: skos:note - description: "Contextual notes about place reference" + description: Contextual notes about place reference range: string required: false exact_mappings: - - rdfs:comment + - rdfs:comment + broad_mappings: + - skos:note diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/platform_name.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/platform_name.yaml index c98acdbdda..505386d587 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/platform_name.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/platform_name.yaml @@ -1,20 +1,20 @@ -# Global Slot: platform_name -# Human-readable name for a digital platform - id: https://nde.nl/ontology/hc/slot/platform_name name: platform_name_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - slots: platform_name: slot_uri: schema:name range: string - description: | - Human-readable name of the digital platform. + description: 'Human-readable name of the digital platform. + Examples: "Rijksmuseum Website", "Instagram", "Facebook Page" + + ' + exact_mappings: + - schema:name + broad_mappings: + - rdfs:label diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/platform_of.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/platform_of.yaml index 7ddc70f36f..fdf6148f4e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/platform_of.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/platform_of.yaml @@ -1,44 +1,25 @@ -# Slot: platform_of -# Inverse of digital_platform -# Links DigitalPlatform to custodian it belongs to - id: https://nde.nl/ontology/hc/slot/platform_of name: platform_of title: Platform Of - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ foaf: http://xmlns.com/foaf/0.1/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: platform_of: slot_uri: hc:platformOf - description: | - The custodian that operates or owns this digital platform. - - **INVERSE PROPERTY**: - - **Inverse**: `digital_platform` (foaf:homepage) - - Pattern: If Custodian digital_platform Platform, then Platform platform_of Custodian - - **Example**: - ```yaml - DigitalPlatform: - platform_name: "Rijksstudio" - platform_url: "https://www.rijksmuseum.nl/rijksstudio" - platform_of: "https://nde.nl/ontology/hc/nl-nh-ams-m-rm" - ``` - - **Navigation**: - - From platform: Find owning custodian (platform_of) - - From custodian: Find digital platforms (digital_platform) + description: "The custodian that operates or owns this digital platform.\n\n**INVERSE PROPERTY**:\n- **Inverse**: `digital_platform`\ + \ (foaf:homepage)\n- Pattern: If Custodian digital_platform Platform, then Platform platform_of Custodian\n\n**Example**:\n\ + ```yaml\nDigitalPlatform:\n platform_name: \"Rijksstudio\"\n platform_url: \"https://www.rijksmuseum.nl/rijksstudio\"\ + \n platform_of: \"https://nde.nl/ontology/hc/nl-nh-ams-m-rm\"\n```\n\n**Navigation**:\n- From platform: Find owning\ + \ custodian (platform_of)\n- From custodian: Find digital platforms (digital_platform)\n" range: Custodian - comments: - - "Inverse of digital_platform (foaf:homepage)" - - "Links platform back to its operating custodian" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of digital_platform (foaf:homepage) + - Links platform back to its operating custodian + - Creates owl:inverseOf axiom in RDF output + close_mappings: + - dcterms:isPartOf diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/platform_type.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/platform_type.yaml index 076f7469f5..01e7403d05 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/platform_type.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/platform_type.yaml @@ -1,43 +1,53 @@ -# Global Slot: platform_type -# Type classification for digital platforms -# Generic slot - range should be overridden in slot_usage for specific platform classes -# -# NOTE: As of 2025-01, using class-based type hierarchy (DigitalPlatformType) -# instead of enum-based approach. The old enums are deprecated. - id: https://nde.nl/ontology/hc/slot/platform_type name: platform_type_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - default_prefix: hc - slots: platform_type: slot_uri: dcterms:type range: string - description: | - Type classification for a digital platform. - + description: 'Type classification for a digital platform. + + **Class-Based Type System** (preferred): - + + Use DigitalPlatformType as the range in slot_usage for polymorphic + support of all 69 concrete platform type subclasses organized into + 8 categories (REPOSITORY, AGGREGATOR, DISCOVERY, VIRTUAL_HERITAGE, + RESEARCH, INTERACTIVE, COMMERCE, AUXILIARY). - + + See: + - DigitalPlatformType.yaml - Abstract base class + - DigitalPlatformTypes.yaml - 69 concrete subclasses - + + **Slot Usage Examples**: + - DigitalPlatform: range → DigitalPlatformType + - AuxiliaryDigitalPlatform: range → DigitalPlatformType + - SocialMediaProfile: range → SocialMediaPlatformTypeEnum (unchanged) - + + **DEPRECATED**: + - DigitalPlatformTypeEnum - use class hierarchy instead + - AuxiliaryDigitalPlatformTypeEnum - use class hierarchy instead + + ' + close_mappings: + - dcterms:type + broad_mappings: + - dcterms:type diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/policy_id.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/policy_id.yaml index 6c8273d4a1..01f1a5fb55 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/policy_id.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/policy_id.yaml @@ -1,21 +1,23 @@ -# Custodian Slot: policy_id -# Unique identifier for policy entities - id: https://nde.nl/ontology/hc/slot/policy_id name: policy_id_slot - prefixes: dcterms: http://purl.org/dc/terms/ - slots: policy_id: slot_uri: dcterms:identifier range: uriorcurie identifier: true - description: | - Unique identifier for a policy entity. - + description: 'Unique identifier for a policy entity. + + Used by: + - AccessPolicy: access restrictions and permissions + - StorageConditionPolicy: environmental conditions for storage + - Other policy-related classes + + ' + broad_mappings: + - dcterms:identifier diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/policy_name.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/policy_name.yaml index 9ae013a50e..09715c0de3 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/policy_name.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/policy_name.yaml @@ -1,20 +1,22 @@ -# Custodian Slot: policy_name -# Human-readable name for policy entities - id: https://nde.nl/ontology/hc/slot/policy_name name: policy_name_slot - prefixes: dcterms: http://purl.org/dc/terms/ - slots: policy_name: slot_uri: dcterms:title range: string - description: | - Human-readable name for a policy entity. - + description: 'Human-readable name for a policy entity. + + Examples: + - "Restricted Access Policy" + - "Climate-Controlled Storage Requirements" + - "Public Domain Access" + + ' + broad_mappings: + - rdfs:label diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/portal_data_sources.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/portal_data_sources.yaml index 27e854b9cb..96041dbfb4 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/portal_data_sources.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/portal_data_sources.yaml @@ -1,44 +1,53 @@ -# portal_data_sources slot -# Links CollectionManagementSystem to WebPortal for data aggregation - id: https://nde.nl/ontology/hc/slot/portal_data_sources name: portal_data_sources - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ dcterms: http://purl.org/dc/terms/ edm: http://www.europeana.eu/schemas/edm/ - imports: - - linkml:types - +- linkml:types slots: portal_data_sources: slot_uri: edm:dataProvider - description: | - Collection management systems that feed data into this web portal. - + description: 'Collection management systems that feed data into this web portal. + + **RELATIONSHIP**: CMS → WebPortal (aggregation) - + + A portal aggregates metadata from multiple CMS deployments. This slot + captures which CMS systems provide data to the portal. - + + **Direction**: Listed on WebPortal, pointing to CMS instances. + **Inverse**: CMS.feeds_portal (to be added to CollectionManagementSystem) - + + **Examples**: + - Archieven.nl ← MAIS-Flexis deployments from regional archives + - Europeana ← Various museum CMS exports via aggregators + - OpenArchieven.nl ← De Ree hosted archive CMS instances - + + **Ontology Alignment**: + - EDM: `edm:dataProvider` - institution providing data to aggregator - - Note: We use CMS as proxy for institution's data flow + + - Note: We use CMS as proxy for institution''s data flow + + ' range: CollectionManagementSystem multivalued: true inlined_as_list: true examples: - - value: "https://nde.nl/ontology/hc/cms/gelders-archief-mais" - description: "MAIS deployment at Gelders Archief feeding Archieven.nl" + - value: https://nde.nl/ontology/hc/cms/gelders-archief-mais + description: MAIS deployment at Gelders Archief feeding Archieven.nl + close_mappings: + - dcterms:source diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/postal_code.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/postal_code.yaml index 0b12643a57..7c2a789b5e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/postal_code.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/postal_code.yaml @@ -1,35 +1,37 @@ -# postal_code slot - Postal/ZIP code -# Used by: AuxiliaryPlace, other location-related classes - id: https://nde.nl/ontology/hc/slot/postal_code name: postal_code_slot title: Postal Code Slot +description: 'Postal code or ZIP code for a location. + -description: | - Postal code or ZIP code for a location. - Format varies by country: + - Netherlands: "1071 XX" (4 digits + 2 letters) + - USA: "20500" or "20500-0001" (5 or 9 digits) + - UK: "SW1A 1AA" (outward + inward codes) + ' prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ locn: http://www.w3.org/ns/locn# - slots: postal_code: slot_uri: schema:postalCode range: string required: false - description: | - Postal code or ZIP code for the location. - exact_mappings: - - locn:postCode - - vcard:postal-code + description: 'Postal code or ZIP code for the location. + ' + exact_mappings: + - locn:postCode + - vcard:postal-code + - schema:postalCode + broad_mappings: + - dcterms:identifier comments: - - "Format varies by country" - - "Store as string to preserve leading zeros and special characters" +- Format varies by country +- Store as string to preserve leading zeros and special characters diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/powered_by_cms.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/powered_by_cms.yaml index b0deeef38c..5f2c2bdc07 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/powered_by_cms.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/powered_by_cms.yaml @@ -1,22 +1,17 @@ -# Global Slot: powered_by_cms -# Links digital platforms to the Collection Management System(s) that power them - id: https://nde.nl/ontology/hc/slot/powered_by_cms name: powered_by_cms_slot - imports: - - ../classes/CollectionManagementSystem - +- ../classes/CollectionManagementSystem prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ crm: http://www.cidoc-crm.org/cidoc-crm/ - default_prefix: hc - slots: powered_by_cms: slot_uri: crm:P33i_was_used_by description: Collection Management System(s) powering this digital platform range: CollectionManagementSystem multivalued: true + related_mappings: + - schema:softwareVersion diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/preferred_label.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/preferred_label.yaml index fd5ca4e072..f600719c1e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/preferred_label.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/preferred_label.yaml @@ -1,23 +1,23 @@ -# Custodian Slot: preferred_label -# The primary display name for a custodian entity - id: https://nde.nl/ontology/hc/slot/preferred_label name: preferred_label_slot - +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/ + rdfs: http://www.w3.org/2000/01/rdf-schema# imports: - - linkml:types - +- linkml:types slots: preferred_label: + slot_uri: skos:prefLabel range: string required: false - description: | - The primary display name for this custodian. - - This is the CANONICAL name - the standardized label accepted by the - custodian itself for public representation. - - For structured name data, use the 'custodian_name' relationship to - a CustodianName entity. - - Example: "Rijksmuseum", "Palestinian Museum" + exact_mappings: + - schema:name + - rdfs:label + - skos:prefLabel + description: "The primary display name for this custodian.\n\nThis is the CANONICAL name - the standardized label accepted\ + \ by the \ncustodian itself for public representation.\n\nSKOS: prefLabel - \"The preferred lexical label for a resource,\ + \ in a given language.\"\n\nFor structured name data, use the 'custodian_name' relationship to\na CustodianName entity.\n\ + \nExample: \"Rijksmuseum\", \"Palestinian Museum\"\n" diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/preservation_level.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/preservation_level.yaml index c8a296dc87..f7cf974c01 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/preservation_level.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/preservation_level.yaml @@ -1,24 +1,26 @@ -# Global Slot: preservation_level -# Digital preservation commitment level - id: https://nde.nl/ontology/hc/slot/preservation_level name: preservation_level_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ premis: http://www.loc.gov/premis/rdf/v3/ - default_prefix: hc - slots: preservation_level: slot_uri: premis:policy - description: | - Digital preservation commitment level for this resource. + description: 'Digital preservation commitment level for this resource. + Values indicate the level of digital preservation applied: + - "full_preservation": Complete digital preservation with format migration + - "bit_preservation": Bit-level integrity preservation only + - "access_only": No formal preservation commitment + - "dark_archive": Preserved but not publicly accessible + + ' range: string + related_mappings: + - dcterms:type diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/price.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/price.yaml index e6a371e24b..575d7c7c57 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/price.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/price.yaml @@ -2,21 +2,19 @@ id: https://nde.nl/ontology/hc/slot/price name: price_slot title: Price Slot description: Shared slot for price information across heritage custodian entities - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: price: description: Price value (numeric or formatted string with currency) range: string slot_uri: schema:price comments: - - "Classes may override range in slot_usage (e.g., decimal for ProvenanceEvent)" + - Classes may override range in slot_usage (e.g., decimal for ProvenanceEvent) + exact_mappings: + - schema:price diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/price_currency.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/price_currency.yaml index bfc67e0143..1c2ad0ba28 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/price_currency.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/price_currency.yaml @@ -2,19 +2,17 @@ id: https://nde.nl/ontology/hc/slot/price_currency name: price_currency_slot title: Price Currency Slot description: Shared slot for price currency information across heritage custodian entities - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: price_currency: description: Currency code for price (ISO 4217 format, e.g., EUR, USD, GBP) range: string slot_uri: schema:priceCurrency + exact_mappings: + - schema:priceCurrency diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/primary_register.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/primary_register.yaml index bd7969cca3..ca5a685522 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/primary_register.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/primary_register.yaml @@ -1,44 +1,38 @@ -# primary_register slot - Primary trade register reference - id: https://nde.nl/ontology/hc/slot/primary_register name: primary_register title: Primary Register Slot - prefixes: gleif_base: https://www.gleif.org/ontology/Base/ gleif_ra: https://www.gleif.org/ontology/RegistrationAuthority/ schema: http://schema.org/ - -description: | - Primary trade register where an entity is registered. - - Links to TradeRegister class. - - gleif_base:isRegisteredIn - "indicates the registry that something is registered in" - gleif_ra:BusinessRegistry - "a registry for registering and maintaining - information about business entities" - - Used for: - - CustodianLegalStatus: Primary register where entity is registered - - RegistrationNumber: Register that issued the number - +description: "Primary trade register where an entity is registered.\n\nLinks to TradeRegister class.\n\ngleif_base:isRegisteredIn\ + \ - \"indicates the registry that something is registered in\"\ngleif_ra:BusinessRegistry - \"a registry for registering\ + \ and maintaining \ninformation about business entities\"\n\nUsed for:\n- CustodianLegalStatus: Primary register where entity\ + \ is registered\n- RegistrationNumber: Register that issued the number\n" slots: primary_register: slot_uri: gleif_base:isRegisteredIn range: TradeRegister required: false multivalued: false - description: | - Primary trade register where entity is registered. - + description: 'Primary trade register where entity is registered. + + gleif_base:isRegisteredIn - "indicates the registry that something is registered in" - + + Examples: + - Netherlands Handelsregister (HR) + - UK Companies Register + - German Handelsregister (HRB/HRA) + ' + close_mappings: + - dcterms:source comments: - - "Maps to gleif_base:isRegisteredIn" - - "Links to TradeRegister class (the register/database)" - - "Distinct from RegistrationAuthority (the organization maintaining the register)" +- Maps to gleif_base:isRegisteredIn +- Links to TradeRegister class (the register/database) +- Distinct from RegistrationAuthority (the organization maintaining the register) diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/pronouns.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/pronouns.yaml index 04cb3e2f96..d03e3be6a0 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/pronouns.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/pronouns.yaml @@ -1,129 +1,69 @@ -# Pronouns Slot -# -# DESIGN PRINCIPLE: Self-determination of pronouns -# -# Schema.org explicitly supports this with schema:pronouns, noting: -# "Typically the person concerned is the best authority as pronouns are a -# critical part of personal identity and expression." -# -# This is a free-text field to support all pronoun configurations including -# neopronouns and culturally-specific forms. -# -# LINGUISTIC DIVERSITY NOTE: -# Pronouns are LANGUAGE-SPECIFIC. Many languages have gender-neutral pronouns -# by default and do not encode gender in third-person pronouns at all: -# - Malay/Indonesian: "dia" (singular), "mereka" (plural) - no gender distinction -# - Finnish: "hän" - gender-neutral third-person singular -# - Turkish: "o" - gender-neutral third-person singular -# - Hungarian: "ő" - gender-neutral third-person singular -# - Persian/Farsi: "او" (u) - gender-neutral third-person singular -# - Estonian: "tema/ta" - gender-neutral third-person singular -# - Swahili: "yeye" - gender-neutral third-person singular -# - Bengali: "সে" (se/she) - gender-neutral colloquially -# - Armenian: "նա" (na) - gender-neutral third-person singular -# - Georgian: "ის" (is) - gender-neutral third-person singular -# - Yoruba: "ó/o" - gender-neutral third-person singular -# - Chinese: "他/她/它" (tā) - same pronunciation, different characters (modern written distinction) -# - Japanese: Context-based, pronouns often omitted entirely -# -# In these languages, pronouns do NOT indicate gender identity. The concept of -# "preferred pronouns" as a gender expression is primarily relevant in languages -# with gendered third-person pronouns (English, Romance, Slavic, Germanic, etc.). - id: https://nde.nl/ontology/hc/slot/pronouns name: pronouns_slot title: Pronouns Slot - prefixes: schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types slots: pronouns: slot_uri: schema:pronouns - description: >- - The person's preferred pronouns as they specify them. This is a free-text - field that respects self-determination. + description: The person's preferred pronouns as they specify them. This is a free-text field that respects self-determination. comments: - - >- - **Self-Authority**: As Schema.org notes, "the person concerned is the - best authority as pronouns are a critical part of personal identity - and expression." - - >- - **Format**: May be formatted as the person prefers, e.g., "she/her", - "they/them", "he/him", "ze/zir", "any pronouns", etc. - - >- - **Multiple Sets**: Some people use multiple pronoun sets (e.g., - "she/they" or "he/they"). Record as specified. - - >- - **Neopronouns**: Fully supported - use as specified by the person - (e.g., "xe/xem", "fae/faer", "ey/em"). - - >- - **Linguistic Diversity**: Many languages use gender-neutral pronouns - by default (e.g., Malay/Indonesian "dia", Finnish "hän", Turkish "o", - Hungarian "ő", Persian "او", Estonian "tema", Swahili "yeye"). In these - languages, pronouns do NOT indicate gender identity. A value of "dia" - (Malay/Indonesian) is gender-neutral by nature, not a gender statement. - - >- - **Multilingual Context**: This field should be interpreted within the - person's linguistic/cultural context. Consider adding the language - (e.g., "dia [Malay]" or "hän [Finnish]") for clarity when relevant. - - >- - **Historical/Cultural Records**: Historical and non-Western sources may - not have "pronoun preferences" as a concept. Leave empty rather than - assuming. For historical persons, pronouns were typically assigned by - observers based on perceived gender, not self-determined. - - >- - **Privacy**: This field may be left empty by choice. + - '**Self-Authority**: As Schema.org notes, "the person concerned is the best authority as pronouns are a critical part + of personal identity and expression."' + - '**Format**: May be formatted as the person prefers, e.g., "she/her", "they/them", "he/him", "ze/zir", "any pronouns", + etc.' + - '**Multiple Sets**: Some people use multiple pronoun sets (e.g., "she/they" or "he/they"). Record as specified.' + - '**Neopronouns**: Fully supported - use as specified by the person (e.g., "xe/xem", "fae/faer", "ey/em").' + - '**Linguistic Diversity**: Many languages use gender-neutral pronouns by default (e.g., Malay/Indonesian "dia", Finnish + "hän", Turkish "o", Hungarian "ő", Persian "او", Estonian "tema", Swahili "yeye"). In these languages, pronouns do + NOT indicate gender identity. A value of "dia" (Malay/Indonesian) is gender-neutral by nature, not a gender statement.' + - '**Multilingual Context**: This field should be interpreted within the person''s linguistic/cultural context. Consider + adding the language (e.g., "dia [Malay]" or "hän [Finnish]") for clarity when relevant.' + - '**Historical/Cultural Records**: Historical and non-Western sources may not have "pronoun preferences" as a concept. + Leave empty rather than assuming. For historical persons, pronouns were typically assigned by observers based on perceived + gender, not self-determined.' + - '**Privacy**: This field may be left empty by choice.' range: string examples: - - value: "she/her" - description: "Feminine pronouns (English)" - - value: "he/him" - description: "Masculine pronouns (English)" - - value: "they/them" - description: "Gender-neutral singular they (English)" - - value: "she/they" - description: "Person uses both she/her and they/them (English)" - - value: "ze/zir" - description: "Neopronoun set (English)" - - value: "any pronouns" - description: "Person is comfortable with any pronouns" - - value: "avoid pronouns, use name" - description: "Person prefers name instead of pronouns" - - value: "dia" - description: "Gender-neutral by default (Malay/Indonesian) - NOT a gender identity statement" - - value: "hän" - description: "Gender-neutral by default (Finnish) - standard third-person singular" - - value: "o" - description: "Gender-neutral by default (Turkish) - standard third-person singular" - - value: "ő" - description: "Gender-neutral by default (Hungarian) - standard third-person singular" - - value: "او" - description: "Gender-neutral by default (Persian/Farsi) - standard third-person singular" - - value: "elle/elles" - description: "Gender-neutral Spanish neologism (alternative to él/ella)" - - value: "iel" - description: "Gender-neutral French neologism (alternative to il/elle)" + - value: she/her + description: Feminine pronouns (English) + - value: he/him + description: Masculine pronouns (English) + - value: they/them + description: Gender-neutral singular they (English) + - value: she/they + description: Person uses both she/her and they/them (English) + - value: ze/zir + description: Neopronoun set (English) + - value: any pronouns + description: Person is comfortable with any pronouns + - value: avoid pronouns, use name + description: Person prefers name instead of pronouns + - value: dia + description: Gender-neutral by default (Malay/Indonesian) - NOT a gender identity statement + - value: hän + description: Gender-neutral by default (Finnish) - standard third-person singular + - value: o + description: Gender-neutral by default (Turkish) - standard third-person singular + - value: ő + description: Gender-neutral by default (Hungarian) - standard third-person singular + - value: او + description: Gender-neutral by default (Persian/Farsi) - standard third-person singular + - value: elle/elles + description: Gender-neutral Spanish neologism (alternative to él/ella) + - value: iel + description: Gender-neutral French neologism (alternative to il/elle) notes: - - >- - Schema.org (schema:pronouns): "A short string listing or describing - pronouns for a person... Publishers and consumers of this information - are reminded to treat this data responsibly." - - >- - This slot supports professional contexts where correct pronoun usage - is important for respectful communication. - - >- - **IMPORTANT: Pronouns ≠ Gender Identity in many languages**. In languages - with gender-neutral default pronouns (Malay, Finnish, Turkish, Hungarian, - Persian, Estonian, Swahili, etc.), recording pronouns is NOT equivalent - to recording gender identity. The concept of "pronoun preference" as - gender expression is primarily relevant in gendered-pronoun languages - (English, Spanish, French, German, Russian, Arabic, Hindi, etc.). - - >- - For global heritage data, consider that many historical and contemporary - cultures do not have the same pronoun/gender relationship as Western - gendered languages. Interpret this field accordingly. - # NOTE: Applicable to all custodian types that track person data + - 'Schema.org (schema:pronouns): "A short string listing or describing pronouns for a person... Publishers and consumers + of this information are reminded to treat this data responsibly."' + - This slot supports professional contexts where correct pronoun usage is important for respectful communication. + - '**IMPORTANT: Pronouns ≠ Gender Identity in many languages**. In languages with gender-neutral default pronouns (Malay, + Finnish, Turkish, Hungarian, Persian, Estonian, Swahili, etc.), recording pronouns is NOT equivalent to recording gender + identity. The concept of "pronoun preference" as gender expression is primarily relevant in gendered-pronoun languages + (English, Spanish, French, German, Russian, Arabic, Hindi, etc.).' + - For global heritage data, consider that many historical and contemporary cultures do not have the same pronoun/gender + relationship as Western gendered languages. Interpret this field accordingly. + related_mappings: + - foaf:name diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/protocol.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/protocol.yaml index ff781fed3b..5762409962 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/protocol.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/protocol.yaml @@ -1,34 +1,42 @@ -# Protocol Slot - Shared slot for API protocol specification -# Used by DataServiceEndpoint and its subclasses - id: https://nde.nl/ontology/hc/slot/protocol name: protocol_slot title: Protocol Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types slots: protocol: slot_uri: dcterms:conformsTo - description: | - Protocol or standard the endpoint implements. - + description: 'Protocol or standard the endpoint implements. + + Values from DataServiceProtocolEnum: + - OAI_PMH: Open Archives Initiative Protocol for Metadata Harvesting + - REST: RESTful HTTP API + - SOAP: SOAP web services + - GRAPHQL: GraphQL API + - SPARQL: SPARQL endpoint + - IIIF_IMAGE: IIIF Image API + - IIIF_PRESENTATION: IIIF Presentation API + - IIP: Internet Imaging Protocol + - ZOOMIFY: Zoomify tile protocol + - SRU: Search/Retrieve via URL + + ' range: string required: true + close_mappings: + - dcterms:conformsTo diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/provenance_note.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/provenance_note.yaml index 441cad3364..0d2247bbd6 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/provenance_note.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/provenance_note.yaml @@ -1,13 +1,13 @@ -# Custodian Slot: provenance_note -# Notes on collection provenance - id: https://nde.nl/ontology/hc/slot/provenance_note name: provenance_note_slot - slots: provenance_note: slot_uri: crm:P24_transferred_title_of range: string - description: | - Notes on collection provenance, acquisition history, custody transfers. + description: 'Notes on collection provenance, acquisition history, custody transfers. + Documents metonymic relationship: how collection identifies custodian. + + ' + broad_mappings: + - skos:note diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/provenance_statement.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/provenance_statement.yaml new file mode 100644 index 0000000000..a64164e693 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/provenance_statement.yaml @@ -0,0 +1,25 @@ +id: https://nde.nl/ontology/hc/slot/provenance_statement +name: provenance_statement +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + provenance_statement: + slot_uri: rico:history + description: 'Narrative description of collection provenance. + + + RiC-O: history for provenance narrative. + + + Describes origin, creation context, and accumulation history. + + ' + range: string + required: false + examples: + - value: Records created by the VOC administration from 1602-1799 + description: Provenance statement for archival collection + exact_mappings: + - dcterms:provenance diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/provenance_text.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/provenance_text.yaml index 42865ce6a5..fa1a4ea397 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/provenance_text.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/provenance_text.yaml @@ -1,24 +1,20 @@ -# Shared slot: provenance_text -# Used by: ProvenanceEvent, ExhibitedObject -# Created to resolve slot conflict during validation - id: https://nde.nl/ontology/hc/slot/provenance_text name: provenance_text_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: provenance_text: - description: | - Full provenance entry text in standard notation. + description: 'Full provenance entry text in standard notation. + Follow Getty Provenance Index format for ownership history. + + ' range: string slot_uri: dcterms:provenance + exact_mappings: + - dcterms:provenance diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/publication_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/publication_date.yaml index 68a342454b..56242ea8f0 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/publication_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/publication_date.yaml @@ -1,22 +1,19 @@ -# Slot: publication_date -# Date when a resource was published - id: https://nde.nl/ontology/hc/slot/publication_date name: publication_date_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: publication_date: slot_uri: dcterms:issued range: date - description: >- - Date when the resource was published or made available. + description: Date when the resource was published or made available. + exact_mappings: + - schema:datePublished + - dcterms:issued + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/publisher.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/publisher.yaml index 6ea36df1a3..16de99bd9e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/publisher.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/publisher.yaml @@ -1,22 +1,17 @@ -# Slot: publisher -# Publisher of a resource - id: https://nde.nl/ontology/hc/slot/publisher name: publisher_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: publisher: slot_uri: dcterms:publisher range: string - description: >- - Publisher of the resource (finding aid, catalog, etc.). + description: Publisher of the resource (finding aid, catalog, etc.). + exact_mappings: + - dcterms:publisher + - schema:publisher diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/reconstruction_method.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/reconstruction_method.yaml index 068ac22f37..d119012d5b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/reconstruction_method.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/reconstruction_method.yaml @@ -1,14 +1,15 @@ -# Slot: reconstruction_method -# Documents synthesis methodology - id: https://nde.nl/ontology/hc/slot/reconstruction_method name: reconstruction_method-slot - slots: reconstruction_method: - description: | - Documents the methodology used to create this reconstruction from + description: 'Documents the methodology used to create this reconstruction from + available observations. May include data sources, algorithms, + editorial decisions, and confidence levels. + + ' slot_uri: prov:hadPlan range: string + broad_mappings: + - prov:wasGeneratedBy diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/record_type.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/record_type.yaml index e89ea24735..1b79c22fd1 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/record_type.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/record_type.yaml @@ -2,19 +2,19 @@ id: https://nde.nl/ontology/hc/slot/record_type name: record_type_slot title: Record Type Slot description: Shared slot for record type classification across heritage custodian entities - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: record_type: description: Type classification of a record (e.g., conservation record type, administrative record type) range: string slot_uri: dcterms:type + close_mappings: + - rico:hasRecordSetType + broad_mappings: + - dcterms:type diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/refers_to_custodian.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/refers_to_custodian.yaml index b8639473ff..277b0653af 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/refers_to_custodian.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/refers_to_custodian.yaml @@ -1,35 +1,29 @@ -# Slot: refers_to_custodian -# Links observations/reconstructions to custodian hub - id: https://nde.nl/ontology/hc/slot/refers_to_custodian name: refers_to_custodian-slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - default_prefix: hc - imports: - - linkml:types - - ../metadata - - ../classes/Custodian - +- linkml:types +- ../metadata +- ../classes/Custodian slots: refers_to_custodian: - description: | - Links an observation or reconstruction to the central Custodian hub it + description: 'Links an observation or reconstruction to the central Custodian hub it + describes. This is how multiple pieces of evidence connect to form a + complete picture of a custodian entity. + + ' slot_uri: dcterms:references range: Custodian required: true comments: - - >- - This property connects observations and reconstructions back to the - abstract Custodian hub, allowing multiple views of the same entity - to be linked together. - - >- - Range is Custodian (not uriorcurie) to create explicit relationship - in UML diagrams and enable schema validation. + - This property connects observations and reconstructions back to the abstract Custodian hub, allowing multiple views + of the same entity to be linked together. + - Range is Custodian (not uriorcurie) to create explicit relationship in UML diagrams and enable schema validation. + broad_mappings: + - schema:organization diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/refers_to_person.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/refers_to_person.yaml index 81bd5386b9..af7c1b30cb 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/refers_to_person.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/refers_to_person.yaml @@ -1,22 +1,5 @@ -# Slot: refers_to_person -# Links PersonObservation to the central Person hub -# ============================================================================= -# Following the pattern established by refers_to_custodian, this slot connects -# PersonObservation (evidence-based data) to the Person hub (abstract identity). -# -# DESIGN RATIONALE: -# - Multiple observations from different sources can refer to the same Person -# - Enables tracking same person across multiple custodians/roles -# - Separates evidence (observation) from identity (hub) -# -# PICO ALIGNMENT: -# - PersonObservation → Person via pico:observationOf (inverse: pico:hasObservation) -# - This is the core PICO relationship linking evidence to identity -# ============================================================================= - id: https://nde.nl/ontology/hc/slot/refers_to_person name: refers_to_person-slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ @@ -24,96 +7,44 @@ prefixes: pico: https://personsincontext.org/model# crm: http://www.cidoc-crm.org/cidoc-crm/ prov: http://www.w3.org/ns/prov# - default_prefix: hc - imports: - - linkml:types - - ../metadata - - ../classes/Person - +- linkml:types +- ../metadata +- ../classes/Person slots: refers_to_person: slot_uri: pico:observationOf - description: | - Links a PersonObservation to the central Person hub it describes. - - This is how multiple pieces of evidence (observations from different sources) - connect to form a complete picture of a person's identity and career. - - **HUB-OBSERVATION RELATIONSHIP**: - - ``` - PersonObservation ───refers_to_person───> Person - (evidence from source) (abstract identity hub) - ``` - - **USAGE CONTEXT**: - - A PersonObservation captures a person's role/affiliation as documented - in a specific source at a specific point in time: - - Staff directory entry (2024) - - Annual report mention (2023) - - LinkedIn profile (current) - - Historical org chart (1995) - - All these observations can refer to the same Person hub, building up - a complete picture of the person's career across time and sources. - - **EXAMPLES**: - - ```yaml - # Observation from LinkedIn - PersonObservation: - observation_source: "LinkedIn profile scraped 2025-01-15" - person_name: "Taco Dibbits" - role_title: "General Director" - unit_affiliation: "Executive Board" - refers_to_person: "https://nde.nl/ontology/hc/person/taco-dibbits" - - # Earlier observation from annual report - PersonObservation: - observation_source: "Rijksmuseum Annual Report 2020" - person_name: "Taco Dibbits" - role_title: "Director" - unit_affiliation: "Management" - refers_to_person: "https://nde.nl/ontology/hc/person/taco-dibbits" - ``` - - **PICO ALIGNMENT**: - - Maps to pico:observationOf - - Inverse relationship: pico:hasObservation (on Person hub) - - This is the core PICO pattern for linking evidence to identity - - **CIDOC-CRM ALIGNMENT**: - - E21_Person (Person) is documented by observations - - E31_Document (source) → P70_documents → E21_Person - - **RELATIONSHIP TO refers_to_custodian**: - - | Slot | From Class | To Class | Purpose | - |------|------------|----------|---------| - | refers_to_custodian | CustodianObservation | Custodian | Link org observation to org hub | - | refers_to_person | PersonObservation | Person | Link person observation to person hub | + description: "Links a PersonObservation to the central Person hub it describes.\n\nThis is how multiple pieces of evidence\ + \ (observations from different sources)\nconnect to form a complete picture of a person's identity and career.\n\n**HUB-OBSERVATION\ + \ RELATIONSHIP**:\n\n```\nPersonObservation ───refers_to_person───> Person\n(evidence from source) \ + \ (abstract identity hub)\n```\n\n**USAGE CONTEXT**:\n\nA PersonObservation captures a person's role/affiliation as\ + \ documented\nin a specific source at a specific point in time:\n- Staff directory entry (2024)\n- Annual report mention\ + \ (2023)\n- LinkedIn profile (current)\n- Historical org chart (1995)\n\nAll these observations can refer to the same\ + \ Person hub, building up\na complete picture of the person's career across time and sources.\n\n**EXAMPLES**:\n\n```yaml\n\ + # Observation from LinkedIn\nPersonObservation:\n observation_source: \"LinkedIn profile scraped 2025-01-15\"\n person_name:\ + \ \"Taco Dibbits\"\n role_title: \"General Director\"\n unit_affiliation: \"Executive Board\"\n refers_to_person:\ + \ \"https://nde.nl/ontology/hc/person/taco-dibbits\"\n\n# Earlier observation from annual report\nPersonObservation:\n\ + \ observation_source: \"Rijksmuseum Annual Report 2020\"\n person_name: \"Taco Dibbits\"\n role_title: \"Director\"\ + \n unit_affiliation: \"Management\"\n refers_to_person: \"https://nde.nl/ontology/hc/person/taco-dibbits\"\n```\n\n\ + **PICO ALIGNMENT**:\n- Maps to pico:observationOf\n- Inverse relationship: pico:hasObservation (on Person hub)\n- This\ + \ is the core PICO pattern for linking evidence to identity\n\n**CIDOC-CRM ALIGNMENT**:\n- E21_Person (Person) is documented\ + \ by observations\n- E31_Document (source) → P70_documents → E21_Person\n\n**RELATIONSHIP TO refers_to_custodian**:\n\ + \n| Slot | From Class | To Class | Purpose |\n|------|------------|----------|---------|\n| refers_to_custodian | CustodianObservation\ + \ | Custodian | Link org observation to org hub |\n| refers_to_person | PersonObservation | Person | Link person observation\ + \ to person hub |\n" range: Person required: false comments: - - >- - This property connects PersonObservation to the abstract Person hub, - allowing multiple views of the same person (from different sources, - time periods, or institutions) to be linked together. - - >- - Range is Person (not uriorcurie) to create explicit relationship - in UML diagrams and enable schema validation. - - >- - Required is false initially to allow PersonObservation without - hub linkage, but production data should always have this link. + - This property connects PersonObservation to the abstract Person hub, allowing multiple views of the same person (from + different sources, time periods, or institutions) to be linked together. + - Range is Person (not uriorcurie) to create explicit relationship in UML diagrams and enable schema validation. + - Required is false initially to allow PersonObservation without hub linkage, but production data should always have this + link. exact_mappings: - - pico:observationOf + - pico:observationOf close_mappings: - - dcterms:references - - prov:specializationOf - # NOTE: inverse: has_person_observation removed to fix LinkML validation warning. - # The inverse relationship is conceptual but cannot be enforced in LinkML - # without explicit domain declarations on both slots. - # The bidirectional relationship is documented in description. + - dcterms:references + - prov:specializationOf + broad_mappings: + - schema:person diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/registration_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/registration_date.yaml index fcb3c549c7..1095a723e7 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/registration_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/registration_date.yaml @@ -1,11 +1,9 @@ -# CustodianLegalStatus Slot: registration_date -# Date of legal registration - id: https://nde.nl/ontology/hc/slot/registration_date name: registration_date_slot - slots: registration_date: slot_uri: schema:foundingDate range: date - description: "Date of legal registration" + description: Date of legal registration + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/response_formats.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/response_formats.yaml index 893ba81aba..78130813c9 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/response_formats.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/response_formats.yaml @@ -1,28 +1,30 @@ -# Response Formats Slot - Shared slot for API response formats -# Used by DataServiceEndpoint and its subclasses - id: https://nde.nl/ontology/hc/slot/response_formats name: response_formats_slot title: Response Formats Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types slots: response_formats: slot_uri: dcterms:format - description: | - MIME types of response formats supported by this endpoint. - + description: 'MIME types of response formats supported by this endpoint. + + Examples: + - ["application/json"] + - ["application/xml", "text/xml"] + - ["image/jpeg", "image/png", "image/tiff"] + - ["application/ld+json", "text/turtle"] + + ' range: string multivalued: true + close_mappings: + - dcterms:format diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/responsible_agent.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/responsible_agent.yaml index d20cecc168..2cf1b1268b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/responsible_agent.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/responsible_agent.yaml @@ -1,14 +1,11 @@ -# ReconstructionActivity Slot: responsible_agent -# ReconstructionAgent responsible for reconstruction - id: https://nde.nl/ontology/hc/slot/responsible_agent name: responsible_agent_slot - imports: - - ../classes/ReconstructionAgent - +- ../classes/ReconstructionAgent slots: responsible_agent: slot_uri: prov:wasAssociatedWith range: ReconstructionAgent - description: "ReconstructionAgent responsible for reconstruction" + description: ReconstructionAgent responsible for reconstruction + broad_mappings: + - prov:wasAttributedTo diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/responsible_legal_entity.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/responsible_legal_entity.yaml index d4c5ca4a71..dd54662469 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/responsible_legal_entity.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/responsible_legal_entity.yaml @@ -1,37 +1,27 @@ -# Responsible Legal Entity Slot -# Links LegalResponsibilityCollection to CustodianLegalStatus - id: https://nde.nl/ontology/hc/slot/responsible_legal_entity name: responsible_legal_entity_slot title: responsible_legal_entity Slot - prefixes: linkml: https://w3id.org/linkml/ tooi: https://identifier.overheid.nl/tooi/def/ont/ hc: https://nde.nl/ontology/hc/ - default_prefix: hc - imports: - - linkml:types - - ../metadata - - ../classes/CustodianLegalStatus - +- linkml:types +- ../metadata +- ../classes/CustodianLegalStatus slots: responsible_legal_entity: slot_uri: tooi:verantwoordelijke range: CustodianLegalStatus required: true - description: | - Custodian legal entity that bears LEGAL RESPONSIBILITY for this collection. - - **TOOI Definition**: "Overheidsorganisatie die de wettelijke verantwoordelijkheid - draagt voor de inhoud (strekking) van het informatieobject" (Organization with - legal responsibility for the content/purport of the information object) - - Maps information objects (collections) to the legal entity (organization or person) - that has formal legal accountability for their custody, preservation, and management. - + description: "Custodian legal entity that bears LEGAL RESPONSIBILITY for this collection.\n\n**TOOI Definition**: \"Overheidsorganisatie\ + \ die de wettelijke verantwoordelijkheid \ndraagt voor de inhoud (strekking) van het informatieobject\" (Organization\ + \ with \nlegal responsibility for the content/purport of the information object)\n\nMaps information objects (collections)\ + \ to the legal entity (organization or person)\nthat has formal legal accountability for their custody, preservation,\ + \ and management.\n" examples: - - value: "https://nde.nl/ontology/hc/legal/nha-organization" - description: "Noord-Hollands Archief foundation as responsible legal entity" + - value: https://nde.nl/ontology/hc/legal/nha-organization + description: Noord-Hollands Archief foundation as responsible legal entity + broad_mappings: + - prov:Entity diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/resulting_units.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/resulting_units.yaml index 0c83462b4a..87df2767bd 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/resulting_units.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/resulting_units.yaml @@ -1,11 +1,10 @@ -# resulting_units slot for OrganizationalChangeEvent - id: https://nde.nl/ontology/hc/slot/resulting_units name: resulting_units - slots: resulting_units: - description: "New or successor organizational units created by this change" + description: New or successor organizational units created by this change range: OrganizationalStructure multivalued: true slot_uri: prov:generated + close_mappings: + - prov:generated diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/retrieval_agent.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/retrieval_agent.yaml index ab8e0685c5..5e8d04f0d9 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/retrieval_agent.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/retrieval_agent.yaml @@ -1,23 +1,20 @@ -# Slot: retrieval_agent -# Agent/tool that retrieved or extracted data - id: https://nde.nl/ontology/hc/slot/retrieval_agent name: retrieval_agent_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# - imports: - - linkml:types - +- linkml:types default_range: string - slots: retrieval_agent: description: Agent or tool that retrieved/extracted this data slot_uri: prov:wasAssociatedWith range: string comments: - - "PersonWebClaim overrides range to RetrievalAgentEnum" + - PersonWebClaim overrides range to RetrievalAgentEnum + close_mappings: + - prov:wasAttributedTo + broad_mappings: + - prov:wasAttributedTo diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/retrieved_on.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/retrieved_on.yaml index 0059706073..f70f149994 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/retrieved_on.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/retrieved_on.yaml @@ -1,39 +1,45 @@ -# retrieved_on slot - Timestamp when web page was retrieved/archived - id: https://nde.nl/ontology/hc/slot/retrieved_on name: retrieved_on title: Retrieved On Slot - prefixes: pav: http://purl.org/pav/ prov: http://www.w3.org/ns/prov# xsd: http://www.w3.org/2001/XMLSchema# +description: 'Timestamp when a web page was retrieved or archived. + -description: | - Timestamp when a web page was retrieved or archived. - Used for provenance tracking in: + - WebClaim: When the source page was archived for claim extraction + - WebObservation: When the web page was observed/retrieved + ' slots: retrieved_on: slot_uri: pav:retrievedOn range: datetime required: false multivalued: false - description: | - Timestamp when the web page was retrieved/archived. - + description: 'Timestamp when the web page was retrieved/archived. + + pav:retrievedOn - "The date this resource was retrieved from the source" - + + ISO 8601 format with timezone (UTC preferred). - + + Examples: + - "2025-11-29T12:28:00Z" (UTC) + - "2025-11-29T10:30:00+01:00" (with timezone offset) + ' + exact_mappings: + - prov:generatedAtTime comments: - - "Maps to pav:retrievedOn for provenance tracking" - - "Use ISO 8601 format with timezone" - - "UTC (Z suffix) is preferred for consistency" +- Maps to pav:retrievedOn for provenance tracking +- Use ISO 8601 format with timezone +- UTC (Z suffix) is preferred for consistency diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/revision_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/revision_date.yaml index 1edf64c53f..51209de23b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/revision_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/revision_date.yaml @@ -1,21 +1,16 @@ -# Slot: revision_date -# Date of most recent revision/update - id: https://nde.nl/ontology/hc/slot/revision_date name: revision_date_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: revision_date: description: Date of most recent revision or update slot_uri: dcterms:modified range: date + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/rico_equivalent.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/rico_equivalent.yaml index 5b72344e84..28ffc10373 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/rico_equivalent.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/rico_equivalent.yaml @@ -1,37 +1,30 @@ -# Global Slot: rico_equivalent -# Link to equivalent RiC-O (Records in Contexts) ontology term -# -# This slot enables interoperability with the ICA's Records in Contexts -# ontology standard for archival description. -# -# Generation date: 2025-12-09 - id: https://nde.nl/ontology/hc/slot/rico_equivalent name: rico_equivalent_slot title: RiC-O Equivalent Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ skos: http://www.w3.org/2004/02/skos/core# rico: https://www.ica.org/standards/RiC/ontology# - default_prefix: hc - imports: - - linkml:types - +- linkml:types slots: rico_equivalent: - description: | - Equivalent term in RiC-O (Records in Contexts Ontology). - + description: 'Equivalent term in RiC-O (Records in Contexts Ontology). + + Links this class to the corresponding RiC-O class or property, + enabling interoperability with archival description standards. + + ' range: uriorcurie slot_uri: skos:closeMatch examples: - - value: "rico:RecordSet" - description: "RiC-O RecordSet class" - - value: "rico:FindingAid" - description: "RiC-O FindingAid class" + - value: rico:RecordSet + description: RiC-O RecordSet class + - value: rico:FindingAid + description: RiC-O FindingAid class + exact_mappings: + - skos:exactMatch diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/rico_record_set_type.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/rico_record_set_type.yaml new file mode 100644 index 0000000000..005c1a8d1d --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/rico_record_set_type.yaml @@ -0,0 +1,35 @@ +id: https://nde.nl/ontology/hc/slot/rico_record_set_type +name: rico_record_set_type +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + rico_record_set_type: + slot_uri: rico:hasRecordSetType + description: 'Direct mapping to RiC-O RecordSetType vocabulary. + + + Standard RiC-O record set types: + + - rico:Fonds - Archival fonds (provenance-based) + + - rico:Series - Archival series + + - rico:File - Archival file + + - rico:Collection - Assembled collection (not provenance-based) + + + Use for RDF interoperability with archival systems. + + ' + range: string + required: false + examples: + - value: rico:Fonds + description: Archival fonds + - value: rico:Series + description: Archival series + broad_mappings: + - dcterms:type diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/role_end_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/role_end_date.yaml index a23ef0b194..39aca515b2 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/role_end_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/role_end_date.yaml @@ -1,12 +1,12 @@ id: https://nde.nl/ontology/hc/slot/role_end_date name: role_end_date title: Role End Date - imports: - - linkml:types - +- linkml:types slots: role_end_date: slot_uri: schema:endDate description: Date when person ended service in this role (or null if still employed) range: date + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/role_start_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/role_start_date.yaml index 440dd37a2c..3662b9f781 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/role_start_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/role_start_date.yaml @@ -1,12 +1,12 @@ id: https://nde.nl/ontology/hc/slot/role_start_date name: role_start_date title: Role Start Date - imports: - - linkml:types - +- linkml:types slots: role_start_date: slot_uri: schema:startDate description: Date when person began serving in this role range: date + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/role_title.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/role_title.yaml index e662b437fa..66d6f328e4 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/role_title.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/role_title.yaml @@ -1,12 +1,14 @@ id: https://nde.nl/ontology/hc/slot/role_title name: role_title title: Role Title - imports: - - linkml:types - +- linkml:types slots: role_title: slot_uri: schema:jobTitle description: Official job title as used by the institution range: string + exact_mappings: + - schema:roleName + close_mappings: + - org:role diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/safeguarded_by.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/safeguarded_by.yaml index 0b0aee63d5..e9d743ef36 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/safeguarded_by.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/safeguarded_by.yaml @@ -1,58 +1,66 @@ -# IntangibleHeritageForm Slot: safeguarded_by -# Links IntangibleHeritageForm to Custodian (heritage keeper) -# Inverse of safeguards (crm:P109_has_current_or_former_curator) - id: https://nde.nl/ontology/hc/slot/safeguarded_by name: safeguarded_by_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ crm: http://www.cidoc-crm.org/cidoc-crm/ owl: http://www.w3.org/2002/07/owl# ich: https://ich.unesco.org/ - imports: - - linkml:types - +- linkml:types slots: safeguarded_by: slot_uri: crm:P109i_is_current_or_former_curator_of - description: | - Heritage custodian organizations that safeguard this intangible heritage form. - + description: 'Heritage custodian organizations that safeguard this intangible heritage form. + + **CIDOC-CRM Alignment**: - + + Property: `crm:P109i_is_current_or_former_curator_of` + - Domain: E39_Actor (Custodian) + - Range: E78_Curated_Holding (conceptually: heritage being safeguarded) + - Definition: Inverse of P109_has_current_or_former_curator - + + We use this to link IntangibleHeritageForm → Custodian - + + **INVERSE PROPERTY**: + - **Inverse**: `safeguards` (crm:P109_has_current_or_former_curator) + - Pattern: If HeritageForm safeguarded_by Custodian, then Custodian safeguards HeritageForm - + + **Usage**: - + + - Links IntangibleHeritageForm to the Custodian entities that preserve it + - Custodians with `institution_type = I` (Intangible Heritage Group) are typical safeguarders - + + **Examples**: + - Pride Amsterdam is safeguarded_by Stichting Amsterdam Gay Pride + - Traditional Dutch baking is safeguarded_by Bakkerij van Maanen + + ' range: Custodian multivalued: true inlined: false - exact_mappings: - - crm:P109i_is_current_or_former_curator_of - + - crm:P109i_is_current_or_former_curator_of related_mappings: - - schema:maintainer - + - schema:maintainer comments: - - "Inverse of safeguards (crm:P109_has_current_or_former_curator)" - - "Creates owl:inverseOf axiom in RDF output" - - "Enables navigation from IntangibleHeritageForm to preserving custodians" + - Inverse of safeguards (crm:P109_has_current_or_former_curator) + - Creates owl:inverseOf axiom in RDF output + - Enables navigation from IntangibleHeritageForm to preserving custodians + broad_mappings: + - prov:wasAttributedTo diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/security_level.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/security_level.yaml index 5559254f43..03371b9f17 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/security_level.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/security_level.yaml @@ -1,36 +1,33 @@ -# Global Slot: security_level -# Security classification for storage and access control -# -# Used across storage-related classes to indicate security requirements. -# -# Generation date: 2025-12-09 - id: https://nde.nl/ontology/hc/slot/security_level name: security_level_slot title: Security Level Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - imports: - - linkml:types - +- linkml:types slots: security_level: - description: | - Security level classification for storage facilities. - + description: 'Security level classification for storage facilities. + + Common values: + - STANDARD - Basic security measures + - ENHANCED - Additional access controls + - HIGH - Restricted access, specialized security + - MAXIMUM - Highest security, vault-level protection + + ' range: string slot_uri: schema:securityClearance examples: - - value: "HIGH" - description: "High-security storage for valuable items" + - value: HIGH + description: High-security storage for valuable items + related_mappings: + - dcterms:accessRights diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/served_by.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/served_by.yaml index ea60264c64..093927e742 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/served_by.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/served_by.yaml @@ -1,21 +1,16 @@ -# Slot: served_by -# Provider/server of a resource or service - id: https://nde.nl/ontology/hc/slot/served_by name: served_by_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: served_by: description: Provider entity that serves or hosts this resource slot_uri: schema:provider range: uriorcurie + broad_mappings: + - prov:wasAttributedTo diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/serves_finding_aids.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/serves_finding_aids.yaml index ad38eb62e2..532986753f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/serves_finding_aids.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/serves_finding_aids.yaml @@ -1,49 +1,31 @@ -# Global Slot: serves_finding_aids -# Inverse of FindingAid.served_by - platforms that host/serve finding aids -# Created: 2025-12-09 - id: https://nde.nl/ontology/hc/slot/serves_finding_aids name: serves_finding_aids_slot - imports: - - linkml:types - +- linkml:types prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ rico: https://www.ica.org/standards/RiC/ontology# schema: http://schema.org/ - slots: serves_finding_aids: slot_uri: rico:isOrWasProviderOf range: uriorcurie multivalued: true inlined_as_list: true - description: | - Finding aids hosted/served by this digital platform. - - **INVERSE RELATIONSHIP**: - - Forward: FindingAid.served_by → DigitalPlatform/WebPortal (finding aid is served by platform) - - Inverse: DigitalPlatform.serves_finding_aids → FindingAid[] (platform serves finding aids) - - **RiC-O ALIGNMENT**: - `rico:isOrWasProviderOf` - The agent (platform) provides the finding aid. - - **USE CASES**: - 1. "What finding aids are available on this platform?" → Follow serves_finding_aids - 2. "Which platforms host EAD finding aids?" → Query platforms with EAD-format finding aids - 3. Platform inventory: Map all finding aids served by each digital infrastructure - - **EXAMPLES**: - - Archieven.nl serves 1000+ EAD finding aids - - Archives Portal Europe serves finding aids from 30+ European countries - - National Archives website serves collection guides and inventories - - **NOTE**: References FindingAid instances by URI. For full objects, - dereference or query the FindingAid directly. + description: "Finding aids hosted/served by this digital platform.\n\n**INVERSE RELATIONSHIP**:\n- Forward: FindingAid.served_by\ + \ → DigitalPlatform/WebPortal (finding aid is served by platform)\n- Inverse: DigitalPlatform.serves_finding_aids →\ + \ FindingAid[] (platform serves finding aids)\n\n**RiC-O ALIGNMENT**:\n`rico:isOrWasProviderOf` - The agent (platform)\ + \ provides the finding aid.\n\n**USE CASES**:\n1. \"What finding aids are available on this platform?\" → Follow serves_finding_aids\n\ + 2. \"Which platforms host EAD finding aids?\" → Query platforms with EAD-format finding aids\n3. Platform inventory:\ + \ Map all finding aids served by each digital infrastructure\n\n**EXAMPLES**:\n- Archieven.nl serves 1000+ EAD finding\ + \ aids\n- Archives Portal Europe serves finding aids from 30+ European countries\n- National Archives website serves\ + \ collection guides and inventories\n\n**NOTE**: References FindingAid instances by URI. For full objects, \ndereference\ + \ or query the FindingAid directly.\n" examples: - - value: "https://nde.nl/ontology/hc/finding-aid/na/voc-inventory" - description: "VOC Archives inventory finding aid" - - value: "https://nde.nl/ontology/hc/finding-aid/gelders-archief/ead-001" - description: "Gelders Archief EAD finding aid" + - value: https://nde.nl/ontology/hc/finding-aid/na/voc-inventory + description: VOC Archives inventory finding aid + - value: https://nde.nl/ontology/hc/finding-aid/gelders-archief/ead-001 + description: Gelders Archief EAD finding aid + close_mappings: + - schema:availableService diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/service_area.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/service_area.yaml index d1219afdef..35a3c868f2 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/service_area.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/service_area.yaml @@ -1,69 +1,34 @@ -# Service Area slot - Links a heritage custodian to its geographic service area -# Based on Schema.org areaServed property - id: https://nde.nl/ontology/hc/slot/service_area name: service_area_slot title: Service Area Slot - prefixes: schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types slots: service_area: slot_uri: schema:areaServed - description: | - Geographic area(s) served by this heritage custodian. - - **Schema.org Alignment**: - `schema:areaServed` - "The geographic area where a service or offered item is provided" - - **Dutch Term**: "Werkgebied" - the operational territory where the custodian - provides services, collects materials, or has jurisdiction. - - **Use Cases**: - - 1. **Archives (Werkgebied)**: - - Provincial archive: Covers entire province - - Regional archive: Covers specific municipalities - - Municipal archive: Covers single city - - 2. **Libraries (Service District)**: - - Public library: Defined lending district - - Academic library: May have national scope - - 3. **Museums (Collection Scope)**: - - Regional museum: Collects from specific area - - National museum: Country-wide collection mandate - - **Multiple Service Areas**: - - A custodian may have multiple service areas: - - Current service area (is_historical_boundary = false) - - Historical service areas (is_historical_boundary = true) - - Different service areas for different functions - - **Example - Noord-Hollands Archief**: - - ```yaml - service_area: - - service_area_name: "NHA Provincial Coverage" - service_area_type: PROVINCIAL - covers_subregions: - - iso_3166_2_code: "NL-NH" - - service_area_name: "NHA Municipal Records (Haarlem)" - service_area_type: MUNICIPAL - covers_settlements: - - geonames_id: 2755003 - ``` + description: "Geographic area(s) served by this heritage custodian.\n\n**Schema.org Alignment**:\n`schema:areaServed`\ + \ - \"The geographic area where a service or offered item is provided\"\n\n**Dutch Term**: \"Werkgebied\" - the operational\ + \ territory where the custodian\nprovides services, collects materials, or has jurisdiction.\n\n**Use Cases**:\n\n1.\ + \ **Archives (Werkgebied)**:\n - Provincial archive: Covers entire province\n - Regional archive: Covers specific\ + \ municipalities\n - Municipal archive: Covers single city\n\n2. **Libraries (Service District)**:\n - Public library:\ + \ Defined lending district\n - Academic library: May have national scope\n\n3. **Museums (Collection Scope)**:\n \ + \ - Regional museum: Collects from specific area\n - National museum: Country-wide collection mandate\n\n**Multiple\ + \ Service Areas**:\n\nA custodian may have multiple service areas:\n- Current service area (is_historical_boundary =\ + \ false)\n- Historical service areas (is_historical_boundary = true)\n- Different service areas for different functions\n\ + \n**Example - Noord-Hollands Archief**:\n\n```yaml\nservice_area:\n - service_area_name: \"NHA Provincial Coverage\"\ + \n service_area_type: PROVINCIAL\n covers_subregions:\n - iso_3166_2_code: \"NL-NH\"\n - service_area_name:\ + \ \"NHA Municipal Records (Haarlem)\"\n service_area_type: MUNICIPAL\n covers_settlements:\n - geonames_id:\ + \ 2755003\n```\n" range: ServiceArea multivalued: true inlined_as_list: true examples: - - value: - service_area_id: "https://nde.nl/ontology/hc/servicearea/nha-werkgebied" - service_area_name: "Noord-Hollands Archief Werkgebied" - service_area_type: "REGIONAL" - description: "Archive service area covering multiple municipalities" + - value: + service_area_id: https://nde.nl/ontology/hc/servicearea/nha-werkgebied + service_area_name: Noord-Hollands Archief Werkgebied + service_area_type: REGIONAL + description: Archive service area covering multiple municipalities + broad_mappings: + - dcterms:subject diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/settlement.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/settlement.yaml index dfc0a7f3ff..2b21ed3937 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/settlement.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/settlement.yaml @@ -1,43 +1,57 @@ -# settlement slot - GeoNames-based city/town reference - id: https://nde.nl/ontology/hc/slot/settlement name: settlement title: Settlement Slot +description: 'City, town, or municipality where place is located. + -description: | - City, town, or municipality where place is located. - Links to Settlement class with GeoNames numeric identifiers. - + + GeoNames ID format: Numeric (e.g., 5206379 for Pittsburgh, 2759794 for Amsterdam) - + + Use when: + - Place is in a specific city (e.g., "Amsterdam museum" → settlement.geonames_id = 2759794) + - Feature types are city-specific (e.g., "City of Pittsburgh historic designation") + - Precision beyond country/subregion is needed - + + Examples: + - "Amsterdam museum" → settlement.geonames_id = 2759794, settlement_name = "Amsterdam" + - "Pittsburgh designation" → settlement.geonames_id = 5206379, settlement_name = "Pittsburgh" + - "Rio museum" → settlement.geonames_id = 3451190, settlement_name = "Rio de Janeiro" - + + Benefits of GeoNames IDs: + - Resolves ambiguity (41 "Springfield"s in USA have different GeoNames IDs) + - Stable identifier (persists even if city name or boundaries change) + - Links to coordinates, population, timezone via GeoNames API + ' slots: settlement: slot_uri: schema:location range: Settlement required: false multivalued: false - description: | - City, town, or municipality where place is located. + description: 'City, town, or municipality where place is located. + Links to Settlement class with GeoNames numeric identifiers. + ' + close_mappings: + - schema:addressLocality comments: - - "Optional - only use when specific city/town is known" - - "Must be consistent with country and subregion (settlement must be within both)" - - "Prefer GeoNames ID over settlement name for disambiguation" - - "GeoNames lookup: https://www.geonames.org/{geonames_id}/" +- Optional - only use when specific city/town is known +- Must be consistent with country and subregion (settlement must be within both) +- Prefer GeoNames ID over settlement name for disambiguation +- 'GeoNames lookup: https://www.geonames.org/{geonames_id}/' diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/source.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/source.yaml index aac08bba5d..9d19a6c3af 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/source.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/source.yaml @@ -1,12 +1,11 @@ -# CustodianObservation Slot: source -# Source document where observation was recorded - id: https://nde.nl/ontology/hc/slot/source name: source_slot - slots: source: slot_uri: prov:hadPrimarySource range: uriorcurie - description: "Source document where this observation was recorded" + description: Source document where this observation was recorded required: true + exact_mappings: + - dcterms:source + - prov:wasDerivedFrom diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/source_creator.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/source_creator.yaml index 222f7c5f84..33ee1496be 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/source_creator.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/source_creator.yaml @@ -1,11 +1,9 @@ -# SourceDocument Slot: source_creator -# Creator/publisher of source document - id: https://nde.nl/ontology/hc/slot/source_creator name: source_creator_slot - slots: source_creator: slot_uri: dcterms:creator range: string - description: "Creator/publisher of source document" + description: Creator/publisher of source document + exact_mappings: + - dcterms:creator diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/source_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/source_date.yaml index 515effaedf..9e3bf40841 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/source_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/source_date.yaml @@ -1,11 +1,9 @@ -# SourceDocument Slot: source_date -# Date source document was created - id: https://nde.nl/ontology/hc/slot/source_date name: source_date_slot - slots: source_date: slot_uri: dcterms:created range: date - description: "Date source document was created" + description: Date source document was created + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/source_type.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/source_type.yaml index d674aae7c5..a627a21675 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/source_type.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/source_type.yaml @@ -1,14 +1,13 @@ -# SourceDocument Slot: source_type -# Type of source document - id: https://nde.nl/ontology/hc/slot/source_type name: source_type_slot - imports: - - ../enums/SourceDocumentTypeEnum - +- ../enums/SourceDocumentTypeEnum slots: source_type: slot_uri: crm:P2_has_type range: SourceDocumentTypeEnum - description: "Type of source document" + description: Type of source document + related_mappings: + - dcterms:type + broad_mappings: + - dcterms:type diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/source_uri.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/source_uri.yaml index f2d6ec856a..da59c252ca 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/source_uri.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/source_uri.yaml @@ -1,11 +1,9 @@ -# SourceDocument Slot: source_uri -# URI or URL of source document - id: https://nde.nl/ontology/hc/slot/source_uri name: source_uri_slot - slots: source_uri: slot_uri: dcterms:identifier range: uriorcurie - description: "URI or URL of source document" + description: URI or URL of source document + exact_mappings: + - dcterms:source diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/source_url.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/source_url.yaml index 72e4ec5372..3410f85238 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/source_url.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/source_url.yaml @@ -1,42 +1,54 @@ -# source_url slot - URL of source web page for provenance tracking - id: https://nde.nl/ontology/hc/slot/source_url name: source_url title: Source URL Slot - prefixes: pav: http://purl.org/pav/ schema: http://schema.org/ prov: http://www.w3.org/ns/prov# +description: 'URL of the web page from which data was retrieved or extracted. + -description: | - URL of the web page from which data was retrieved or extracted. - Used for provenance tracking in: + - WebClaim: Source page for extracted claims + - WebObservation: Source page for web observations + - FundingOpportunity: Source page for funding information + ' slots: source_url: slot_uri: pav:retrievedFrom range: uri required: false multivalued: false - description: | - URL of the web page this data was retrieved from. - + description: 'URL of the web page this data was retrieved from. + + pav:retrievedFrom - "The URI from which the resource was retrieved." - + + This is a key provenance field that enables verification of extracted data + by linking back to the original source web page. - + + Examples: + - https://historischeverenigingnijeveen.nl/ (institution homepage) + - https://ec.europa.eu/info/funding-tenders/... (EU funding portal) + - https://www.heritagefund.org.uk/funding/... (UK heritage fund) + ' + exact_mappings: + - schema:url + - dcterms:source + broad_mappings: + - schema:url comments: - - "Maps to pav:retrievedFrom for provenance tracking" - - "Essential for web claim verification workflows" - - "Should be the exact URL that was accessed, not normalized" +- Maps to pav:retrievedFrom for provenance tracking +- Essential for web claim verification workflows +- Should be the exact URL that was accessed, not normalized diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/sparql_endpoint.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/sparql_endpoint.yaml index 7087b50aa9..696feac0b4 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/sparql_endpoint.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/sparql_endpoint.yaml @@ -1,20 +1,18 @@ -# Global Slot: sparql_endpoint -# SPARQL endpoint URL for linked data queries - id: https://nde.nl/ontology/hc/slot/sparql_endpoint name: sparql_endpoint_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ void: http://rdfs.org/ns/void# - default_prefix: hc - slots: sparql_endpoint: slot_uri: void:sparqlEndpoint range: uri - description: | - SPARQL endpoint URL for querying linked data. + description: 'SPARQL endpoint URL for querying linked data. + Uses VOID vocabulary for dataset endpoints. + + ' + broad_mappings: + - dcat:endpointURL diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/staff_count.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/staff_count.yaml index 96ea265b6d..75ca47eedc 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/staff_count.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/staff_count.yaml @@ -1,11 +1,13 @@ -# OrganizationalStructure Slot: staff_count id: https://nde.nl/ontology/hc/slot/staff_count name: staff_count_slot - slots: staff_count: slot_uri: schema:numberOfEmployees range: integer description: Number of staff (FTE) in this unit (approximate) exact_mappings: - - org:numberOfEmployees + - org:numberOfEmployees + close_mappings: + - schema:numberOfEmployees + broad_mappings: + - schema:numberOfItems diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/staff_members.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/staff_members.yaml index 671fe7afdb..5683de653e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/staff_members.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/staff_members.yaml @@ -1,13 +1,15 @@ id: https://nde.nl/ontology/hc/slot/staff_members name: staff_members title: Staff Members - imports: - - linkml:types - +- linkml:types slots: staff_members: slot_uri: org:hasMember description: Staff members (PersonObservation instances) affiliated with this organizational unit range: PersonObservation multivalued: true + close_mappings: + - schema:employee + related_mappings: + - org:hasMember diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/staff_role.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/staff_role.yaml index 32685d2038..c4069a67de 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/staff_role.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/staff_role.yaml @@ -1,30 +1,42 @@ id: https://nde.nl/ontology/hc/slot/staff_role name: staff_role title: Staff Role - imports: - - linkml:types - - ../classes/StaffRole - +- linkml:types +- ../classes/StaffRole slots: staff_role: slot_uri: schema:roleName - description: | - Primary staff role from controlled class hierarchy. - + description: 'Primary staff role from controlled class hierarchy. + + **Schema.org**: `schema:roleName` for organizational role - + + **Range**: StaffRole class hierarchy (51 specialized subclasses) - + + **Purpose**: Enable role-based queries ("Find all conservators") - + + **IMPORTANT - FORMAL TITLE vs DE FACTO WORK**: + This slot captures the OFFICIAL job appellation/title assigned by the institution. + Actual de facto work may differ from or stretch beyond this formal classification. - + + **Classes replace enum**: Per Single Source of Truth principle, the StaffRoleTypeEnum + was converted to a class hierarchy (StaffRole.yaml, StaffRoles.yaml) to enable + richer modeling with properties like role_category, common_variants, typical_domains. - + + See: modules/classes/StaffRole.yaml, modules/classes/StaffRoles.yaml + + ' range: StaffRole + exact_mappings: + - org:role + - schema:roleName diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/standardized_name.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/standardized_name.yaml index 63040f83e7..6875c3a8c7 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/standardized_name.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/standardized_name.yaml @@ -1,12 +1,10 @@ -# CustodianName Slot: standardized_name -# Canonical emic name accepted by custodian - id: https://nde.nl/ontology/hc/slot/standardized_name name: standardized_name_slot - slots: standardized_name: slot_uri: skos:prefLabel range: string - description: "The canonical emic name accepted by the custodian itself" + description: The canonical emic name accepted by the custodian itself required: true + broad_mappings: + - rdfs:label diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/start_date.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/start_date.yaml index dcc3e90221..e137512efa 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/start_date.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/start_date.yaml @@ -1,26 +1,32 @@ -# Slot: start_date -# Start date for time-bounded entities (exhibitions, projects, events) - id: https://nde.nl/ontology/hc/slot/start_date name: start_date_slot title: Start Date Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - slots: start_date: slot_uri: schema:startDate range: date - description: | - Start date of a time-bounded entity. + description: 'Start date of a time-bounded entity. + Used for exhibitions, projects, events, and other temporal entities. - + + Examples: + - Exhibition opening date + - Project start date + - Event beginning + + ' + exact_mappings: + - schema:startDate + close_mappings: + - prov:startedAtTime + broad_mappings: + - dcterms:date diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/started_at_time.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/started_at_time.yaml index efc39d6859..d5870e59a1 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/started_at_time.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/started_at_time.yaml @@ -1,11 +1,9 @@ -# ReconstructionActivity Slot: started_at_time -# Start time of activity - id: https://nde.nl/ontology/hc/slot/started_at_time name: started_at_time_slot - slots: started_at_time: slot_uri: prov:startedAtTime range: datetime - description: "Start time of reconstruction activity" + description: Start time of reconstruction activity + broad_mappings: + - prov:atTime diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/status.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/status.yaml index 308204b574..038746a021 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/status.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/status.yaml @@ -1,22 +1,20 @@ -# Slot: status -# Current status of an entity or activity - id: https://nde.nl/ontology/hc/slot/status name: status_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: status: - description: | - Current status of an entity, activity, or process. + description: 'Current status of an entity, activity, or process. + + ' slot_uri: schema:status range: string + exact_mappings: + - schema:status + close_mappings: + - adms:status diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/storage_location.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/storage_location.yaml index d22e89ed52..54b08d3c20 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/storage_location.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/storage_location.yaml @@ -1,24 +1,22 @@ -# Global Slot: storage_location -# Physical or logical location where materials are stored - id: https://nde.nl/ontology/hc/slot/storage_location name: storage_location_slot title: Storage Location Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ premis: http://www.loc.gov/premis/rdf/v3/ - imports: - - linkml:types - +- linkml:types slots: storage_location: slot_uri: premis:storedAt - description: | - Physical or logical location where materials are stored. + description: 'Physical or logical location where materials are stored. + Range varies by context - can be AuxiliaryPlace, Storage, or string. + + ' range: uriorcurie exact_mappings: - - premis:storedAt + - premis:storedAt + broad_mappings: + - schema:location diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/street_address.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/street_address.yaml index c2826a5257..5b98ffeb5e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/street_address.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/street_address.yaml @@ -1,37 +1,40 @@ -# street_address slot - Physical street address -# Used by: AuxiliaryPlace, other location-related classes - id: https://nde.nl/ontology/hc/slot/street_address name: street_address_slot title: Street Address Slot +description: 'Physical street address for a location. + -description: | - Physical street address for a location. - Format: Street name and number as used locally. - + + Examples: + - "Museumstraat 1" (Amsterdam) + - "1600 Pennsylvania Avenue NW" (Washington DC) + - "221B Baker Street" (London) + ' prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ locn: http://www.w3.org/ns/locn# - slots: street_address: slot_uri: schema:streetAddress range: string required: false - description: | - Physical street address including street name and number. - exact_mappings: - - locn:thoroughfare - - vcard:street-address + description: 'Physical street address including street name and number. + ' + exact_mappings: + - locn:thoroughfare + - vcard:street-address + - schema:streetAddress + broad_mappings: + - schema:address comments: - - "Use local address format conventions" - - "Include building/unit numbers if relevant" +- Use local address format conventions +- Include building/unit numbers if relevant diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/sub_collections.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/sub_collections.yaml new file mode 100644 index 0000000000..0d3dab79f5 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/sub_collections.yaml @@ -0,0 +1,26 @@ +id: https://nde.nl/ontology/hc/slot/sub_collections +name: sub_collections +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + sub_collections: + slot_uri: rico:hasOrHadPart + description: 'Child collections in hierarchical arrangement. + + + RiC-O: hasOrHadPart for part-whole relationships. + + + Links a collection to its constituent sub-collections or series. + + ' + range: Collection + multivalued: true + required: false + examples: + - value: https://nde.nl/ontology/hc/collection/voc-batavia-series + description: VOC Batavia correspondence series + exact_mappings: + - dcterms:hasPart diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/subject_areas.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/subject_areas.yaml new file mode 100644 index 0000000000..e459d59ac1 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/subject_areas.yaml @@ -0,0 +1,25 @@ +id: https://nde.nl/ontology/hc/slot/subject_areas +name: subject_areas +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + dcterms: http://purl.org/dc/terms/ +slots: + subject_areas: + slot_uri: dcterms:subject + description: 'Thematic subjects covered by the collection. + + + Use controlled vocabularies where available (e.g., AAT, LCSH). + + ' + range: string + multivalued: true + required: false + examples: + - value: Maritime trade + description: Trade-related subject + - value: Colonial administration + description: Administrative subject + broad_mappings: + - dcterms:subject diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/subregion.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/subregion.yaml index d8c7145e28..e07f7ffd2f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/subregion.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/subregion.yaml @@ -1,37 +1,47 @@ -# subregion slot - ISO 3166-2 subdivision reference - id: https://nde.nl/ontology/hc/slot/subregion name: subregion title: Subregion Slot +description: 'Geographic subdivision within a country (state, province, region, etc.). + -description: | - Geographic subdivision within a country (state, province, region, etc.). - Links to Subregion class with ISO 3166-2 subdivision codes. - + + Format: {country_alpha2}-{subdivision_code} (e.g., "US-PA", "ID-BA", "DE-BY") - + + Use when: + - Place is located in a specific subdivision (e.g., "Pittsburgh museum" → US-PA) + - Feature types are region-specific (e.g., "sacred shrine (Bali)" → ID-BA) + - Generating subdivision-conditional enums - + + Examples: + - "Pittsburgh museum" → subregion.iso_3166_2_code = "US-PA" (Pennsylvania) + - "Bali sacred shrine" → subregion.iso_3166_2_code = "ID-BA" (Bali) + - "Bavaria natural monument" → subregion.iso_3166_2_code = "DE-BY" (Bayern) + ' slots: subregion: slot_uri: schema:addressRegion range: Subregion required: false multivalued: false - description: | - Geographic subdivision within a country (state, province, region, etc.). + description: 'Geographic subdivision within a country (state, province, region, etc.). + Links to Subregion class with ISO 3166-2 subdivision codes. + ' + close_mappings: + - schema:addressRegion comments: - - "Optional - only use when subdivision is known" - - "Must be consistent with country slot (subregion must be within country)" - - "ISO 3166-2 code format ensures unambiguous subdivision identification" +- Optional - only use when subdivision is known +- Must be consistent with country slot (subregion must be within country) +- ISO 3166-2 code format ensures unambiguous subdivision identification diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/superseded_by.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/superseded_by.yaml index 62553b7184..45ca8998d0 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/superseded_by.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/superseded_by.yaml @@ -1,18 +1,14 @@ -# Global Slot: superseded_by -# Links to subsequent version that replaced this entity - id: https://nde.nl/ontology/hc/slot/superseded_by name: superseded_by_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - default_prefix: hc - slots: superseded_by: slot_uri: dcterms:isReplacedBy range: uriorcurie - description: "Subsequent entity that replaced this one (version/change history)" + description: Subsequent entity that replaced this one (version/change history) + broad_mappings: + - prov:wasAttributedTo diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/supersedes.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/supersedes.yaml index 28f9b3c021..e09dc1ca4c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/supersedes.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/supersedes.yaml @@ -1,18 +1,14 @@ -# Global Slot: supersedes -# Links to previous version that this entity replaces - id: https://nde.nl/ontology/hc/slot/supersedes name: supersedes_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - default_prefix: hc - slots: supersedes: slot_uri: dcterms:replaces range: uriorcurie - description: "Previous entity that this one replaces (version/change history)" + description: Previous entity that this one replaces (version/change history) + exact_mappings: + - dcterms:replaces diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/temperature_tolerance.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/temperature_tolerance.yaml index 3b395947c5..6b3abafab5 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/temperature_tolerance.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/temperature_tolerance.yaml @@ -1,21 +1,15 @@ -# Slot: temperature_tolerance -# Acceptable temperature deviation from target - id: https://nde.nl/ontology/hc/slot/temperature_tolerance name: temperature_tolerance_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: temperature_tolerance: slot_uri: hc:temperatureTolerance range: float - description: >- - Acceptable temperature deviation (±) from target value in degrees Celsius. + description: Acceptable temperature deviation (±) from target value in degrees Celsius. + related_mappings: + - schema:additionalProperty diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/temporal_coverage.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/temporal_coverage.yaml index 32823fa084..3a52985b90 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/temporal_coverage.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/temporal_coverage.yaml @@ -1,18 +1,22 @@ -# Custodian Slot: temporal_coverage -# Time period covered by collection materials - id: https://nde.nl/ontology/hc/slot/temporal_coverage name: temporal_coverage_slot - imports: - - ../classes/TimeSpan - +- ../classes/TimeSpan slots: temporal_coverage: slot_uri: dcterms:temporal range: TimeSpan - description: | - Time period covered by collection materials (NOT when collected). + description: 'Time period covered by collection materials (NOT when collected). + Examples: + - Collection of 18th-century documents: temporal_coverage = 1700-1799 + - Medieval manuscript collection: temporal_coverage = 800-1500 + + ' + exact_mappings: + - dcterms:temporal + - schema:temporalCoverage + broad_mappings: + - dcterms:coverage diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/temporal_extent.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/temporal_extent.yaml index 89e5e835a8..e01dfc492c 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/temporal_extent.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/temporal_extent.yaml @@ -1,17 +1,17 @@ -# Custodian Slot: temporal_extent -# Temporal extent of custodian's existence - id: https://nde.nl/ontology/hc/slot/temporal_extent name: temporal_extent_slot - imports: - - ../classes/TimeSpan - +- ../classes/TimeSpan slots: temporal_extent: slot_uri: crm:P4_has_time-span range: TimeSpan - description: | - Temporal extent of custodian's existence (founding → dissolution). + description: 'Temporal extent of custodian''s existence (founding → dissolution). + CIDOC-CRM: P4_has_time-span links E39_Actor to E52_Time-Span. + Use this for entity lifespan, NOT database record timestamps. + + ' + broad_mappings: + - dcterms:extent diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/time_of_destruction.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/time_of_destruction.yaml index b8f0062115..afdadcf108 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/time_of_destruction.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/time_of_destruction.yaml @@ -1,119 +1,51 @@ -# Custodian Slot: time_of_destruction -# Temporal extent of custodian's destruction (for heritage institutions destroyed in conflicts) - id: https://nde.nl/ontology/hc/slot/time_of_destruction name: time_of_destruction_slot - prefixes: linkml: https://w3id.org/linkml/ crm: http://www.cidoc-crm.org/cidoc-crm/ schema: http://schema.org/ wd: http://www.wikidata.org/entity/ - imports: - - linkml:types - - ../classes/TimeSpan - +- linkml:types +- ../classes/TimeSpan slots: time_of_destruction: slot_uri: crm:P4_has_time-span range: TimeSpan - description: | - Temporal extent of custodian's destruction or significant damage. - - **PURPOSE**: - Documents when a heritage custodian institution was destroyed, damaged, - or rendered non-operational due to: - - Armed conflict (bombing, shelling, military operations) - - Natural disasters (earthquakes, floods, fires) - - Deliberate destruction (heritage crimes, vandalism, arson) - - State actions (demolition, forced closure) - - **CRITICAL DISTINCTION from temporal_extent**: - - `temporal_extent`: Lifespan of entity (founding → dissolution) - - Represents normal organizational lifecycle - - Dissolution may be planned (merger, closure) - - `time_of_destruction`: Involuntary destruction event - - Represents traumatic end due to external forces - - Often sudden, unplanned, violent - - **USE CASES**: - - 1. **Gaza 2023-2024 Conflict**: - - Libraries, museums, archives destroyed by Israeli military - - Example: Great Omari Mosque Library (destroyed December 2023) - - 2. **Syria 2011-present**: - - Museums and archaeological sites damaged/looted - - Example: Aleppo Museum damage - - 3. **Iraq 2003-present**: - - National Museum of Iraq looting - - Mosul Museum destruction by ISIS - - 4. **Ukraine 2022-present**: - - Museums and archives damaged by Russian forces - - Example: Ivankiv Historical Museum fire - - **TimeSpan USAGE**: - - Uses CIDOC-CRM E52_Time-Span with fuzzy bounds: - - `begin_of_the_begin`: Earliest possible destruction start - - `end_of_the_begin`: Latest possible destruction start - - `begin_of_the_end`: Earliest possible destruction completion - - `end_of_the_end`: Latest possible destruction completion - - For sudden destruction events (single bombing), all four bounds - may be the same date. - - For gradual destruction (prolonged siege), use ranges. - - **EXAMPLE - Sudden Destruction**: - ```yaml - time_of_destruction: - begin_of_the_begin: "2023-12-08" - end_of_the_begin: "2023-12-08" - begin_of_the_end: "2023-12-08" - end_of_the_end: "2023-12-08" - description: "Great Omari Mosque Library destroyed by Israeli airstrike" - ``` - - **EXAMPLE - Prolonged Destruction**: - ```yaml - time_of_destruction: - begin_of_the_begin: "2023-10-07" - end_of_the_begin: "2023-10-15" - begin_of_the_end: "2024-01-01" - end_of_the_end: "2024-03-15" - description: "Gradual destruction during siege, culminating in building collapse" - ``` - - **RELATIONSHIP TO conflict_status**: - - The `conflict_status` field (in enriched data) provides summary status: - - "DESTROYED", "DAMAGED", "THREATENED", "UNKNOWN" - - `time_of_destruction` provides detailed temporal evidence for when - destruction occurred, supporting conflict status claims. - - **ONTOLOGY ALIGNMENT**: - - crm:P4_has_time-span (CIDOC-CRM): Links entity to time span - - crm:E6_Destruction (CIDOC-CRM): Destruction event type - - Wikidata P576: dissolved, abolished or demolished date - - **WHY ON CUSTODIAN (not just OrganizationalChangeEvent)?**: - - Destruction is a specific, critical event that warrants direct access - from the Custodian hub. While it could be modeled as an - OrganizationalChangeEvent (type: DISSOLUTION), having a direct slot: - - Enables efficient querying for destroyed institutions - - Parallels temporal_extent (lifespan) with time_of_destruction (death) - - Avoids navigating through change event lists for common query pattern - - OrganizationalChangeEvent can still document the destruction with - additional context (perpetrator, damage assessment, documentation sources). + description: "Temporal extent of custodian's destruction or significant damage.\n\n**PURPOSE**:\nDocuments when a heritage\ + \ custodian institution was destroyed, damaged,\nor rendered non-operational due to:\n- Armed conflict (bombing, shelling,\ + \ military operations)\n- Natural disasters (earthquakes, floods, fires)\n- Deliberate destruction (heritage crimes,\ + \ vandalism, arson)\n- State actions (demolition, forced closure)\n\n**CRITICAL DISTINCTION from temporal_extent**:\n\ + - `temporal_extent`: Lifespan of entity (founding → dissolution)\n - Represents normal organizational lifecycle\n \ + \ - Dissolution may be planned (merger, closure)\n- `time_of_destruction`: Involuntary destruction event\n - Represents\ + \ traumatic end due to external forces\n - Often sudden, unplanned, violent\n\n**USE CASES**:\n\n1. **Gaza 2023-2024\ + \ Conflict**:\n - Libraries, museums, archives destroyed by Israeli military\n - Example: Great Omari Mosque Library\ + \ (destroyed December 2023)\n\n2. **Syria 2011-present**:\n - Museums and archaeological sites damaged/looted\n \ + \ - Example: Aleppo Museum damage\n\n3. **Iraq 2003-present**:\n - National Museum of Iraq looting\n - Mosul Museum\ + \ destruction by ISIS\n\n4. **Ukraine 2022-present**:\n - Museums and archives damaged by Russian forces\n - Example:\ + \ Ivankiv Historical Museum fire\n\n**TimeSpan USAGE**:\n\nUses CIDOC-CRM E52_Time-Span with fuzzy bounds:\n- `begin_of_the_begin`:\ + \ Earliest possible destruction start\n- `end_of_the_begin`: Latest possible destruction start\n- `begin_of_the_end`:\ + \ Earliest possible destruction completion\n- `end_of_the_end`: Latest possible destruction completion\n\nFor sudden\ + \ destruction events (single bombing), all four bounds\nmay be the same date.\n\nFor gradual destruction (prolonged\ + \ siege), use ranges.\n\n**EXAMPLE - Sudden Destruction**:\n```yaml\ntime_of_destruction:\n begin_of_the_begin: \"\ + 2023-12-08\"\n end_of_the_begin: \"2023-12-08\"\n begin_of_the_end: \"2023-12-08\"\n end_of_the_end: \"2023-12-08\"\ + \n description: \"Great Omari Mosque Library destroyed by Israeli airstrike\"\n```\n\n**EXAMPLE - Prolonged Destruction**:\n\ + ```yaml\ntime_of_destruction:\n begin_of_the_begin: \"2023-10-07\"\n end_of_the_begin: \"2023-10-15\"\n begin_of_the_end:\ + \ \"2024-01-01\"\n end_of_the_end: \"2024-03-15\"\n description: \"Gradual destruction during siege, culminating in\ + \ building collapse\"\n```\n\n**RELATIONSHIP TO conflict_status**:\n\nThe `conflict_status` field (in enriched data)\ + \ provides summary status:\n- \"DESTROYED\", \"DAMAGED\", \"THREATENED\", \"UNKNOWN\"\n\n`time_of_destruction` provides\ + \ detailed temporal evidence for when\ndestruction occurred, supporting conflict status claims.\n\n**ONTOLOGY ALIGNMENT**:\n\ + - crm:P4_has_time-span (CIDOC-CRM): Links entity to time span\n- crm:E6_Destruction (CIDOC-CRM): Destruction event type\n\ + - Wikidata P576: dissolved, abolished or demolished date\n\n**WHY ON CUSTODIAN (not just OrganizationalChangeEvent)?**:\n\ + \nDestruction is a specific, critical event that warrants direct access\nfrom the Custodian hub. While it could be modeled\ + \ as an\nOrganizationalChangeEvent (type: DISSOLUTION), having a direct slot:\n- Enables efficient querying for destroyed\ + \ institutions\n- Parallels temporal_extent (lifespan) with time_of_destruction (death)\n- Avoids navigating through\ + \ change event lists for common query pattern\n\nOrganizationalChangeEvent can still document the destruction with\n\ + additional context (perpetrator, damage assessment, documentation sources).\n" exact_mappings: - - crm:P4_has_time-span + - crm:P4_has_time-span related_mappings: - - crm:E6_Destruction - - wikidata:P576 + - crm:E6_Destruction + - wikidata:P576 + broad_mappings: + - dcterms:relation diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/title.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/title.yaml index c9b7fd7b45..f6f6a677a6 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/title.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/title.yaml @@ -1,23 +1,17 @@ -# Slot: title -# Title or headline for a resource - id: https://nde.nl/ontology/hc/slot/title name: title_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: title: slot_uri: dcterms:title range: string - description: >- - Title or headline of the resource. - For multilingual titles, classes may override range to MultilingualText. + description: Title or headline of the resource. For multilingual titles, classes may override range to MultilingualText. + exact_mappings: + - dcterms:title + - schema:title diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/type_scope.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/type_scope.yaml index 09138c72d0..053a3f8dbe 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/type_scope.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/type_scope.yaml @@ -1,58 +1,56 @@ -# Custodian Slot: type_scope -# Structured scope definition for CustodianType and CollectionType classes -# -# This slot provides a formal way to document what types of materials -# or records are within the scope of a particular custodian or collection type. -# -# Generation date: 2026-01-05 - id: https://nde.nl/ontology/hc/slot/type_scope name: type_scope_slot title: Type Scope Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ rico: https://www.ica.org/standards/RiC/ontology# dcterms: http://purl.org/dc/terms/ skos: http://www.w3.org/2004/02/skos/core# - default_prefix: hc - imports: - - linkml:types - +- linkml:types classes: TypeScopeEntry: class_uri: hc:TypeScopeEntry - description: | - A structured entry describing materials or records within scope of a CustodianType + description: 'A structured entry describing materials or records within scope of a CustodianType + or rico:RecordSetType. Used to formally document what types of holdings are + expected for a given heritage custodian or collection classification. + **Use Cases**: + - `AcademicArchive` → scope includes student records, faculty papers + - `MunicipalArchive` → scope includes council minutes, building permits + - `UniversityLibrary` → scope includes dissertations, institutional publications + **Ontological Alignment**: + - Extends `rico:hasOrHadRecordResourceHoldingRelation` concept + - Aligns with `rico:hasRecordResourceExtent` for quantifiable scope + - Uses `skos:scopeNote` pattern for textual description + + ' annotations: custodian_types: '["*"]' - custodian_types_rationale: >- - TypeScopeEntry applies to all custodian types - used for defining - what materials are within scope of any CustodianType or CollectionType. + custodian_types_rationale: TypeScopeEntry applies to all custodian types - used for defining what materials are within + scope of any CustodianType or CollectionType. specificity_score: 0.6 - specificity_rationale: "Used for type classification scope definitions" + specificity_rationale: Used for type classification scope definitions specificity_annotation_timestamp: '2026-01-05T12:00:00Z' specificity_annotation_agent: opencode-claude-sonnet-4 slots: - - scope_category - - scope_includes - - scope_excludes - - scope_note + - scope_category + - scope_includes + - scope_excludes + - scope_note slot_usage: scope_category: required: true @@ -60,123 +58,122 @@ classes: multivalued: true scope_excludes: multivalued: true - slots: type_scope: slot_uri: skos:scopeNote range: TypeScopeEntry multivalued: true inlined_as_list: true - description: | - Structured scope definitions for a CustodianType or rico:RecordSetType class. - - Documents what types of materials, records, or collections are within the scope - of institutions of this type. Used for: - - 1. **Classification guidance** - Helps determine if an institution belongs to this type - 2. **Collection discovery** - Indicates what materials users might find - 3. **Interoperability** - Maps to rico:hasOrHadRecordResourceHoldingRelation - - **Example** (AcademicArchiveRecordSetType): - ```yaml - type_scope: - - scope_category: "University administrative fonds" - scope_includes: - - "Governance records" - - "Policy documentation" - - "Committee minutes" - - scope_category: "Student record series" - scope_includes: - - "Enrollment records" - - "Academic transcripts" - - "Graduation records" - - scope_category: "Faculty paper collections" - scope_includes: - - "Research documentation" - - "Correspondence" - - "Lecture notes" - - scope_category: "Campus documentation collections" - scope_includes: - - "Photographs" - - "Audiovisual materials" - - "University publications" - ``` - - **Ontological Alignment**: - - Maps to `skos:scopeNote` for SKOS concept schemes - - Extends `rico:hasOrHadRecordResourceHoldingRelation` for archival contexts - - Complements `rico:RecordSetType` classification + description: "Structured scope definitions for a CustodianType or rico:RecordSetType class.\n\nDocuments what types of\ + \ materials, records, or collections are within the scope\nof institutions of this type. Used for:\n\n1. **Classification\ + \ guidance** - Helps determine if an institution belongs to this type\n2. **Collection discovery** - Indicates what\ + \ materials users might find\n3. **Interoperability** - Maps to rico:hasOrHadRecordResourceHoldingRelation\n\n**Example**\ + \ (AcademicArchiveRecordSetType):\n```yaml\ntype_scope:\n - scope_category: \"University administrative fonds\"\n \ + \ scope_includes:\n - \"Governance records\"\n - \"Policy documentation\"\n - \"Committee minutes\"\ + \n - scope_category: \"Student record series\"\n scope_includes:\n - \"Enrollment records\"\n - \"Academic\ + \ transcripts\"\n - \"Graduation records\"\n - scope_category: \"Faculty paper collections\"\n scope_includes:\n\ + \ - \"Research documentation\"\n - \"Correspondence\"\n - \"Lecture notes\"\n - scope_category: \"Campus\ + \ documentation collections\"\n scope_includes:\n - \"Photographs\"\n - \"Audiovisual materials\"\n \ + \ - \"University publications\"\n```\n\n**Ontological Alignment**:\n- Maps to `skos:scopeNote` for SKOS concept schemes\n\ + - Extends `rico:hasOrHadRecordResourceHoldingRelation` for archival contexts\n- Complements `rico:RecordSetType` classification\n" annotations: custodian_types: '["*"]' - custodian_types_rationale: "type_scope applies to all CustodianType and CollectionType classes" + custodian_types_rationale: type_scope applies to all CustodianType and CollectionType classes examples: - - value: - - scope_category: "University administrative fonds" - scope_includes: - - "Governance records" - - "Policy documentation" - description: "Academic archive administrative records scope" - + - value: + - scope_category: University administrative fonds + scope_includes: + - Governance records + - Policy documentation + description: Academic archive administrative records scope + broad_mappings: + - dcterms:coverage scope_category: slot_uri: dcterms:subject range: string - description: | - Category name for this scope entry. Typically describes a class of materials - or a major collection area. - - Examples: - - "University administrative fonds" - - "Student record series" - - "Faculty paper collections" - - "Municipal council records" - - "Building permit archives" - examples: - - value: "University administrative fonds" - description: "Administrative records category" - - value: "Student record series" - description: "Student records category" + description: 'Category name for this scope entry. Typically describes a class of materials + or a major collection area. + + + Examples: + + - "University administrative fonds" + + - "Student record series" + + - "Faculty paper collections" + + - "Municipal council records" + + - "Building permit archives" + + ' + examples: + - value: University administrative fonds + description: Administrative records category + - value: Student record series + description: Student records category scope_includes: slot_uri: skos:example range: string multivalued: true - description: | - Specific types of materials or records included in this scope category. - - Examples for "Student record series": - - "Enrollment records" - - "Academic transcripts" - - "Graduation records" - - "Disciplinary files" - examples: - - value: ["Enrollment records", "Academic transcripts", "Graduation records"] - description: "Student records inclusions" + description: 'Specific types of materials or records included in this scope category. + + Examples for "Student record series": + + - "Enrollment records" + + - "Academic transcripts" + + - "Graduation records" + + - "Disciplinary files" + + ' + examples: + - value: + - Enrollment records + - Academic transcripts + - Graduation records + description: Student records inclusions scope_excludes: slot_uri: skos:historyNote range: string multivalued: true - description: | - Materials explicitly excluded from this scope category, for disambiguation. - Helps clarify boundaries between related custodian types. - - Examples for "University administrative fonds": - - "Research data (see Research Archive)" - - "Medical records (see Hospital Archive)" - - "Athletic records (see Sports Archive)" - examples: - - value: ["Research data - see Research Archive", "Medical records - see Hospital Archive"] - description: "Scope exclusions for clarity" + description: 'Materials explicitly excluded from this scope category, for disambiguation. + Helps clarify boundaries between related custodian types. + + + Examples for "University administrative fonds": + + - "Research data (see Research Archive)" + + - "Medical records (see Hospital Archive)" + + - "Athletic records (see Sports Archive)" + + ' + examples: + - value: + - Research data - see Research Archive + - Medical records - see Hospital Archive + description: Scope exclusions for clarity scope_note: slot_uri: skos:note range: string - description: | - Free-text note providing additional context about this scope category. + description: 'Free-text note providing additional context about this scope category. + May include historical context, acquisition policies, or access restrictions. - + + Example: + "Student records from before 1970 may be fragmentary due to a fire in 1969." + + ' examples: - - value: "Records from 1970-present are comprehensive; earlier records are fragmentary" - description: "Historical context note" + - value: Records from 1970-present are comprehensive; earlier records are fragmentary + description: Historical context note diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/typical_domains.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/typical_domains.yaml index d1536cedd3..2eb37808e2 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/typical_domains.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/typical_domains.yaml @@ -1,45 +1,43 @@ -# Global Slot: typical_domains -# Heritage domains where this classification type is typically used -# -# This slot enables documentation of which heritage sectors (archives, libraries, museums) -# typically use a particular classification scheme, role, or type. -# -# Generation date: 2025-12-09 - id: https://nde.nl/ontology/hc/slot/typical_domains name: typical_domains_slot title: Typical Domains Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - imports: - - linkml:types - +- linkml:types slots: typical_domains: - description: | - Heritage domains where this type/role/classification is typically used. - + description: 'Heritage domains where this type/role/classification is typically used. + + Common values include: + - ARCHIVE - Archival institutions + - LIBRARY - Libraries and bibliographic contexts + - MUSEUM - Museums and cultural heritage institutions + - CROSS_DOMAIN - Used across multiple heritage sectors - + + This slot helps users understand the contextual applicability + of different classification types. + + ' range: string multivalued: true slot_uri: schema:category examples: - - value: "ARCHIVE" - description: "Primarily used in archival contexts" - - value: "LIBRARY" - description: "Primarily used in library contexts" - - value: "CROSS_DOMAIN" - description: "Used across multiple heritage sectors" + - value: ARCHIVE + description: Primarily used in archival contexts + - value: LIBRARY + description: Primarily used in library contexts + - value: CROSS_DOMAIN + description: Used across multiple heritage sectors + close_mappings: + - dcterms:subject diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/typical_metadata_standards.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/typical_metadata_standards.yaml index a8941ab20f..d91ae32f77 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/typical_metadata_standards.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/typical_metadata_standards.yaml @@ -1,24 +1,18 @@ -# Slot: typical_metadata_standards -# Metadata standards commonly used by a platform or portal type - id: https://nde.nl/ontology/hc/slot/typical_metadata_standards name: typical_metadata_standards_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: typical_metadata_standards: slot_uri: dcterms:conformsTo range: string multivalued: true - description: >- - Metadata standards commonly used by this platform or portal type. - Examples: Dublin Core, MARC21, EAD, LIDO, DCAT, EDM. + description: 'Metadata standards commonly used by this platform or portal type. Examples: Dublin Core, MARC21, EAD, LIDO, + DCAT, EDM.' + broad_mappings: + - dcterms:conformsTo diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/typical_technical_features.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/typical_technical_features.yaml index 8b88fe7d3f..f533d7dc03 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/typical_technical_features.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/typical_technical_features.yaml @@ -1,24 +1,18 @@ -# Slot: typical_technical_features -# Technical features commonly provided by a platform or portal type - id: https://nde.nl/ontology/hc/slot/typical_technical_features name: typical_technical_features_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: typical_technical_features: slot_uri: schema:featureList range: string multivalued: true - description: >- - Technical features commonly provided by this platform or portal type. - Examples: SPARQL, OAI-PMH, IIIF, REST API, full-text search. + description: 'Technical features commonly provided by this platform or portal type. Examples: SPARQL, OAI-PMH, IIIF, REST + API, full-text search.' + close_mappings: + - schema:featureList diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/unit_affiliation.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/unit_affiliation.yaml index 5585dcf183..02cdd3909e 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/unit_affiliation.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/unit_affiliation.yaml @@ -1,13 +1,13 @@ id: https://nde.nl/ontology/hc/slot/unit_affiliation name: unit_affiliation title: Unit Affiliation - imports: - - linkml:types - - ../classes/OrganizationalStructure - +- linkml:types +- ../classes/OrganizationalStructure slots: unit_affiliation: slot_uri: schema:affiliation description: Organizational unit (department/team) where person serves range: OrganizationalStructure + close_mappings: + - org:memberOf diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/unit_type.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/unit_type.yaml index f92e53bc7e..c61db29819 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/unit_type.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/unit_type.yaml @@ -1,11 +1,11 @@ -# OrganizationalStructure Slot: unit_type id: https://nde.nl/ontology/hc/slot/unit_type name: unit_type_slot - slots: unit_type: slot_uri: dct:type range: OrganizationalUnitTypeEnum description: Type of organizational unit (DEPARTMENT, TEAM, DIVISION, etc.) exact_mappings: - - rdf:type + - rdf:type + broad_mappings: + - dcterms:type diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/used.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/used.yaml index 302fe89100..365fd97e2f 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/used.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/used.yaml @@ -1,27 +1,33 @@ -# ReconstructionActivity Slot: used -# Links Activity to input CustodianObservation(s) - id: https://nde.nl/ontology/hc/slot/used name: used_slot - imports: - - ../classes/CustodianObservation - +- ../classes/CustodianObservation slots: used: slot_uri: prov:used range: CustodianObservation multivalued: true required: true - description: | - CustodianObservation(s) used as input for reconstruction activity. - + description: 'CustodianObservation(s) used as input for reconstruction activity. + + PROV-O Pattern: Activity prov:used Entity + - Activity consumes Entities (observations) as input + - Multiple observations can feed into one activity + - This is the PRIMARY input link in observation→reconstruction flow - + + Examples: + - Entity resolution uses multiple conflicting observations + - Name standardization uses observations from different sources + - Reconstruction synthesizes observations into formal entity + + ' + close_mappings: + - prov:used diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/used_by.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/used_by.yaml index 624656e831..e08c73fe11 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/used_by.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/used_by.yaml @@ -1,61 +1,32 @@ -# Slot: used_by -# Inverse of used -# Links CustodianObservation to activities that use it - id: https://nde.nl/ontology/hc/slot/used_by name: used_by title: Used By - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: used_by: slot_uri: prov:wasUsedBy - description: | - Reconstruction activities that used this observation as input. - - **PROV-O Alignment**: - - Property: `prov:wasUsedBy` - - Domain: prov:Entity (CustodianObservation) - - Range: prov:Activity (ReconstructionActivity) - - Definition: "An entity that was used by this activity." - - **INVERSE PROPERTY**: - - **Inverse**: `used` (prov:used) - - Pattern: If Activity used Observation, then Observation used_by Activity - - **Provenance Chain**: - Observations flow into reconstruction activities: - - Web scrape observation → used_by → Name reconstruction - - ISIL registry observation → used_by → Legal status reconstruction - - **Example**: - ```yaml - CustodianObservation: - observation_source: "https://www.rijksmuseum.nl/about" - observed_name: "Rijksmuseum" - used_by: - - "https://nde.nl/ontology/hc/activity/rm-2024-reconstruction" - ``` - - **Navigation**: - - From observation: Find activities that used it (used_by) - - From activity: Find observations used (used) + description: "Reconstruction activities that used this observation as input.\n\n**PROV-O Alignment**:\n\nProperty: `prov:wasUsedBy`\n\ + - Domain: prov:Entity (CustodianObservation)\n- Range: prov:Activity (ReconstructionActivity)\n- Definition: \"An entity\ + \ that was used by this activity.\"\n\n**INVERSE PROPERTY**:\n- **Inverse**: `used` (prov:used)\n- Pattern: If Activity\ + \ used Observation, then Observation used_by Activity\n\n**Provenance Chain**:\nObservations flow into reconstruction\ + \ activities:\n- Web scrape observation → used_by → Name reconstruction\n- ISIL registry observation → used_by → Legal\ + \ status reconstruction\n\n**Example**:\n```yaml\nCustodianObservation:\n observation_source: \"https://www.rijksmuseum.nl/about\"\ + \n observed_name: \"Rijksmuseum\"\n used_by:\n - \"https://nde.nl/ontology/hc/activity/rm-2024-reconstruction\"\ + \n```\n\n**Navigation**:\n- From observation: Find activities that used it (used_by)\n- From activity: Find observations\ + \ used (used)\n" range: ReconstructionActivity multivalued: true - exact_mappings: - - prov:wasUsedBy - + - prov:wasUsedBy comments: - - "Inverse of used (prov:used)" - - "Links observation to activities that consumed it" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of used (prov:used) + - Links observation to activities that consumed it + - Creates owl:inverseOf axiom in RDF output + broad_mappings: + - prov:wasAttributedTo diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/used_sources.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/used_sources.yaml index 0724b9127b..2decc62edb 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/used_sources.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/used_sources.yaml @@ -1,12 +1,10 @@ -# ReconstructionActivity Slot: used_sources -# Sources consulted during reconstruction - id: https://nde.nl/ontology/hc/slot/used_sources name: used_sources_slot - slots: used_sources: slot_uri: prov:used range: uriorcurie multivalued: true - description: "Sources consulted during reconstruction" + description: Sources consulted during reconstruction + exact_mappings: + - dcterms:source diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/valid_from.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/valid_from.yaml index 4b28d1e8b3..8c9c8ccf30 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/valid_from.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/valid_from.yaml @@ -1,30 +1,21 @@ -# CustodianName Slot: valid_from -# Date from which name is valid -# Phase 8: Added validation constraints - id: https://nde.nl/ontology/hc/slot/valid_from name: valid_from_slot - slots: valid_from: slot_uri: schema:validFrom range: date - description: "Date from which this name is/was valid" - - # Validation Constraints (Phase 8) - pattern: "^\\d{4}-\\d{2}-\\d{2}$" # ISO 8601 date format (YYYY-MM-DD) - - # Temporal constraint: Cannot be in the future - # Note: LinkML doesn't support dynamic date comparisons natively - # This requires custom validation in Python or SHACL - + description: Date from which this name is/was valid + pattern: ^\d{4}-\d{2}-\d{2}$ comments: - - "Must be in ISO 8601 format (YYYY-MM-DD)" - - "Should not be in the future (validated via custom rules)" - - "For temporal consistency with organizational units, see CustodianCollection.slot_usage" - + - Must be in ISO 8601 format (YYYY-MM-DD) + - Should not be in the future (validated via custom rules) + - For temporal consistency with organizational units, see CustodianCollection.slot_usage examples: - - value: "1985-01-01" - description: "Valid: ISO 8601 format" - - value: "2023-12-31" - description: "Valid: Recent date" + - value: '1985-01-01' + description: 'Valid: ISO 8601 format' + - value: '2023-12-31' + description: 'Valid: Recent date' + exact_mappings: + - schema:validFrom + close_mappings: + - dcterms:valid diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/valid_to.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/valid_to.yaml index 584d8c2aa7..ffff8c76d7 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/valid_to.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/valid_to.yaml @@ -1,11 +1,11 @@ -# CustodianName Slot: valid_to -# Date until which name was valid - id: https://nde.nl/ontology/hc/slot/valid_to name: valid_to_slot - slots: valid_to: slot_uri: schema:validUntil range: date - description: "Date until which this name was valid (null if still current)" + description: Date until which this name was valid (null if still current) + exact_mappings: + - schema:validThrough + close_mappings: + - dcterms:valid diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/variant_of_name.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/variant_of_name.yaml index d98227c941..d3d860522b 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/variant_of_name.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/variant_of_name.yaml @@ -1,25 +1,30 @@ -# CustodianAppellation Slot: variant_of_name -# Links appellation variant back to its canonical CustodianName - id: https://nde.nl/ontology/hc/slot/variant_of_name name: variant_of_name_slot - imports: - - ../classes/CustodianName - +- ../classes/CustodianName slots: variant_of_name: slot_uri: skos:broader range: CustodianName required: false - description: | - Link back to the CustodianName that this appellation is a variant of. - + description: 'Link back to the CustodianName that this appellation is a variant of. + + SKOS: broader links alternative label back to its preferred concept. + This is the inverse of the skos:altLabel relationship. - + + Relationship pattern: + - CustodianName → skos:altLabel → CustodianAppellation (forward) + - CustodianAppellation → skos:broader → CustodianName (inverse) - + + Domain: E41_Appellation → Range: CustodianName (SKOS Concept). + + ' + broad_mappings: + - rdfs:label + - dcterms:relation diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/was_derived_from.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/was_derived_from.yaml index 769d959c1b..2d8e7b1cab 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/was_derived_from.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/was_derived_from.yaml @@ -1,21 +1,22 @@ -# CustodianLegalStatus Slot: was_derived_from -# CustodianObservation(s) this entity derives from - id: https://nde.nl/ontology/hc/slot/was_derived_from name: was_derived_from_slot - imports: - - ../classes/CustodianObservation - +- ../classes/CustodianObservation slots: was_derived_from: slot_uri: prov:wasDerivedFrom range: uriorcurie multivalued: true - description: | - CustodianObservation(s) this entity is derived from. - + description: 'CustodianObservation(s) this entity is derived from. + + Uses uriorcurie range to allow referencing observations by URI string + without requiring full inline objects. Classes that need required + provenance can override in slot_usage. + + ' required: false + exact_mappings: + - prov:wasDerivedFrom diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/was_generated_by.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/was_generated_by.yaml index 2222183b23..64681ecb7a 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/was_generated_by.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/was_generated_by.yaml @@ -1,28 +1,34 @@ -# ReconstructedEntity Slot: was_generated_by -# Activity that created this reconstruction -# RDFS: domain=ReconstructedEntity, range=ReconstructionActivity - id: https://nde.nl/ontology/hc/slot/was_generated_by name: was_generated_by_slot - imports: - - ../classes/ReconstructionActivity - +- ../classes/ReconstructionActivity slots: was_generated_by: slot_uri: prov:wasGeneratedBy range: ReconstructionActivity - description: | - The ReconstructionActivity that generated this entity. - + description: 'The ReconstructionActivity that generated this entity. + + **PROV-O Alignment**: + Property: prov:wasGeneratedBy + - Domain: prov:Entity (ReconstructedEntity) + - Range: prov:Activity (ReconstructionActivity) + - Definition: "Generation is the completion of production of a new entity by an activity." - + + **RDFS Compliance**: + - Domain: ReconstructedEntity (abstract base class) + - Range: ReconstructionActivity + - Inverse: generates + + ' required: false + broad_mappings: + - prov:wasAttributedTo diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/was_revision_of.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/was_revision_of.yaml index 8440881c71..577ab1b9bc 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/was_revision_of.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/was_revision_of.yaml @@ -1,14 +1,11 @@ -# CustodianLegalStatus Slot: was_revision_of -# Previous version of reconstruction - id: https://nde.nl/ontology/hc/slot/was_revision_of name: was_revision_of_slot - imports: - - ../classes/CustodianLegalStatus - +- ../classes/CustodianLegalStatus slots: was_revision_of: slot_uri: prov:wasRevisionOf range: CustodianLegalStatus - description: "Previous version of this reconstruction (if updated)" + description: Previous version of this reconstruction (if updated) + exact_mappings: + - prov:wasRevisionOf diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/web_claims.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/web_claims.yaml index 9922eae714..e9e5ab7d17 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/web_claims.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/web_claims.yaml @@ -1,63 +1,34 @@ -# Web Claims Slot -# Reusable slot for linking to PersonWebClaim provenance records - id: https://nde.nl/ontology/hc/slot/web_claims name: web_claims_slot title: Web Claims Slot version: 1.0.0 - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# - imports: - - linkml:types - - ../classes/PersonWebClaim - +- linkml:types +- ../classes/PersonWebClaim slots: web_claims: slot_uri: prov:wasDerivedFrom - description: | - Verifiable claims about a person extracted from web pages. - - **RULE 26 COMPLIANCE**: All person/staff data SHOULD have web claim provenance. - - **Pattern**: Each PersonWebClaim provides: - - claim_type: full_name, role_title, department, email, etc. - - claim_value: The extracted value - - source_url: URL where claim was found - - xpath: XPath to element (for HTML sources) - - retrieved_on: Timestamp of extraction - - retrieval_agent: Tool used (firecrawl, playwright, exa, manual) - - **PROV-O Alignment**: - - This slot represents prov:wasDerivedFrom relationship - - Links the person observation to its web source evidence - - **Use Cases**: - - Track provenance of person data - - Enable verification of extracted information - - Document multiple sources for same fact - - Resolve conflicts between sources - - **Example**: - ```yaml - web_claims: - - person_claim_type: full_name - person_claim_value: "Dr. Jane Smith" - source_url: https://museum.org/team - person_xpath: /html/body/main/div[2]/h3 - retrieved_on: "2025-01-15T10:30:00Z" - retrieval_agent: firecrawl - person_xpath_match_score: 1.0 - ``` - - **See Also**: - - PersonWebClaim class for full field definitions - - AGENTS.md Rule 26 for person data provenance requirements + description: "Verifiable claims about a person extracted from web pages.\n\n**RULE 26 COMPLIANCE**: All person/staff data\ + \ SHOULD have web claim provenance.\n\n**Pattern**: Each PersonWebClaim provides:\n- claim_type: full_name, role_title,\ + \ department, email, etc.\n- claim_value: The extracted value\n- source_url: URL where claim was found\n- xpath: XPath\ + \ to element (for HTML sources)\n- retrieved_on: Timestamp of extraction\n- retrieval_agent: Tool used (firecrawl, playwright,\ + \ exa, manual)\n\n**PROV-O Alignment**:\n- This slot represents prov:wasDerivedFrom relationship\n- Links the person\ + \ observation to its web source evidence\n\n**Use Cases**:\n- Track provenance of person data\n- Enable verification\ + \ of extracted information\n- Document multiple sources for same fact\n- Resolve conflicts between sources\n\n**Example**:\n\ + ```yaml\nweb_claims:\n - person_claim_type: full_name\n person_claim_value: \"Dr. Jane Smith\"\n source_url:\ + \ https://museum.org/team\n person_xpath: /html/body/main/div[2]/h3\n retrieved_on: \"2025-01-15T10:30:00Z\"\n\ + \ retrieval_agent: firecrawl\n person_xpath_match_score: 1.0\n```\n\n**See Also**: \n- PersonWebClaim class for\ + \ full field definitions\n- AGENTS.md Rule 26 for person data provenance requirements\n" range: PersonWebClaim multivalued: true inlined: true inlined_as_list: true required: false + related_mappings: + - prov:Entity + broad_mappings: + - prov:Entity diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/website.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/website.yaml index ff3bf7d850..58d0eb7ec8 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/website.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/website.yaml @@ -1,38 +1,46 @@ -# website slot - Official website URL - id: https://nde.nl/ontology/hc/slot/website name: website title: Website Slot - prefixes: gleif_base: https://www.gleif.org/ontology/Base/ schema: http://schema.org/ +description: 'Official website URL of an organization or entity. + -description: | - Official website URL of an organization or entity. - Used for: + - Trade registers (e.g., https://www.kvk.nl/) + - Registration authorities (e.g., https://www.companieshouse.gov.uk/) + - Heritage institutions + ' slots: website: slot_uri: gleif_base:hasWebsite range: uri required: false multivalued: false - description: | - Official website URL of the organization or entity. - + description: 'Official website URL of the organization or entity. + + gleif_base:hasWebsite - "A website associated with something" - + + Examples: + - https://www.kvk.nl/ (Dutch KvK) + - https://www.companieshouse.gov.uk/ (UK Companies House) + - https://www.rijksmuseum.nl/ (Rijksmuseum) + ' + exact_mappings: + - schema:url + - foaf:homepage comments: - - "Maps to gleif_base:hasWebsite and schema:url" - - "Should be the official/canonical website URL" - - "Use https:// when available" +- Maps to gleif_base:hasWebsite and schema:url +- Should be the official/canonical website URL +- Use https:// when available diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/wikidata_entity.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/wikidata_entity.yaml new file mode 100644 index 0000000000..630dd2cbf3 --- /dev/null +++ b/frontend/public/schemas/20251121/linkml/modules/slots/wikidata_entity.yaml @@ -0,0 +1,25 @@ +id: https://nde.nl/ontology/hc/slot/wikidata_entity +name: wikidata_entity_slot +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# + wd: http://www.wikidata.org/entity/ +imports: +- linkml:types +default_range: string +slots: + wikidata_entity: + slot_uri: schema:sameAs + description: "Reference to the corresponding Wikidata entity (Q-number).\n\nSchema.org: sameAs - \"URL of a reference\ + \ Web page that unambiguously \nindicates the item's identity.\"\n\nFormat: Wikidata Q-number (e.g., Q190804 for Rijksmuseum)\n\ + \nUsed to link heritage custodians to their Wikidata entries for\nenrichment, verification, and linked data integration.\n" + range: string + pattern: ^Q[0-9]+$ + exact_mappings: + - schema:sameAs + close_mappings: + - skos:exactMatch + broad_mappings: + - prov:Entity diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/wikidata_id.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/wikidata_id.yaml index 65128c4a23..f07deff942 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/wikidata_id.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/wikidata_id.yaml @@ -1,46 +1,44 @@ -# Global Slot: wikidata_id -# Wikidata entity ID (Q-number) for semantic linking -# -# This slot provides a standard way to link any heritage ontology class -# to its corresponding Wikidata entity. -# -# Uses skos:exactMatch as the slot_uri since Wikidata entities represent -# the same concept (exact match), not just similar (closeMatch). -# -# Generation date: 2025-12-09 - id: https://nde.nl/ontology/hc/slot/wikidata_id name: wikidata_id_slot title: Wikidata ID Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ skos: http://www.w3.org/2004/02/skos/core# wd: http://www.wikidata.org/entity/ - default_prefix: hc - imports: - - linkml:types - +- linkml:types slots: wikidata_id: - description: | - Wikidata entity ID (Q-number) for semantic linking. - + description: 'Wikidata entity ID (Q-number) for semantic linking. + + Links this class/instance to the corresponding Wikidata entity, + enabling integration with the broader knowledge graph. - + + Examples: + - Q856638 (finding aid) + - Q178706 (institution) + - Q7397 (software) + + ' range: string - pattern: "^Q[0-9]+$" + pattern: ^Q[0-9]+$ slot_uri: skos:exactMatch examples: - - value: "Q856638" - description: "Finding aid (Q856638)" - - value: "Q178706" - description: "Institution (Q178706)" + - value: Q856638 + description: Finding aid (Q856638) + - value: Q178706 + description: Institution (Q178706) + related_mappings: + - schema:sameAs + narrow_mappings: + - dcterms:identifier + broad_mappings: + - dcterms:identifier diff --git a/frontend/public/schemas/20251121/linkml/modules/slots/xpath.yaml b/frontend/public/schemas/20251121/linkml/modules/slots/xpath.yaml index 84097dc482..74928253bd 100644 --- a/frontend/public/schemas/20251121/linkml/modules/slots/xpath.yaml +++ b/frontend/public/schemas/20251121/linkml/modules/slots/xpath.yaml @@ -1,22 +1,16 @@ -# Slot: xpath -# XPath expression pointing to element in archived HTML - id: https://nde.nl/ontology/hc/slot/xpath name: xpath_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: xpath: - description: >- - XPath expression pointing to the element in archived HTML. - Used for provenance verification of extracted data. + description: XPath expression pointing to the element in archived HTML. Used for provenance verification of extracted + data. slot_uri: hc:xpath range: string + related_mappings: + - prov:atLocation diff --git a/frontend/src/components/query/DebugPanel.css b/frontend/src/components/query/DebugPanel.css index a0fcd8e2dd..40c35e9549 100644 --- a/frontend/src/components/query/DebugPanel.css +++ b/frontend/src/components/query/DebugPanel.css @@ -359,6 +359,269 @@ font-size: 10px; } +/* ============================================ + Graph Controls (Zoom, Cluster, Export) + ============================================ */ + +.debug-panel__graph-controls { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 10px; + padding-bottom: 8px; + border-bottom: 1px solid var(--color-border, #333); +} + +.debug-panel__graph-buttons { + display: flex; + gap: 4px; + align-items: center; +} + +.debug-panel__icon-btn { + display: flex; + align-items: center; + justify-content: center; + gap: 4px; + padding: 6px 8px; + border: 1px solid var(--color-border, #444); + background: var(--color-surface-elevated, #252525); + color: var(--color-text-secondary, #888); + border-radius: 4px; + cursor: pointer; + font-size: 11px; + transition: all 0.15s ease; +} + +.debug-panel__icon-btn:hover { + background: rgba(255, 255, 255, 0.08); + border-color: var(--color-text-secondary, #666); + color: var(--color-text-primary, #fff); +} + +.debug-panel__icon-btn--active { + background: rgba(59, 130, 246, 0.15); + border-color: var(--color-accent, #3b82f6); + color: var(--color-accent, #3b82f6); +} + +.debug-panel__export-group { + display: flex; + gap: 2px; + margin-left: 8px; + padding-left: 8px; + border-left: 1px solid var(--color-border, #333); +} + +.debug-panel__zoom-level { + font-family: 'JetBrains Mono', 'Fira Code', monospace; + font-size: 10px; + color: var(--color-text-secondary, #666); + min-width: 40px; + text-align: right; +} + +/* Node close button */ +.debug-panel__node-close { + position: absolute; + top: 4px; + right: 4px; + display: flex; + align-items: center; + justify-content: center; + width: 18px; + height: 18px; + border: none; + background: rgba(255, 255, 255, 0.1); + color: var(--color-text-secondary, #888); + border-radius: 50%; + cursor: pointer; + transition: all 0.15s ease; +} + +.debug-panel__node-close:hover { + background: rgba(255, 255, 255, 0.2); + color: var(--color-text-primary, #fff); +} + +.debug-panel__node-id { + color: var(--color-text-secondary, #666); + font-size: 9px; + font-family: 'JetBrains Mono', 'Fira Code', monospace; + word-break: break-all; +} + +/* Graph legend */ +.debug-panel__graph-legend { + position: absolute; + top: 58px; + right: 20px; + display: flex; + flex-wrap: wrap; + gap: 8px; + background: rgba(30, 30, 30, 0.9); + border: 1px solid var(--color-border, #333); + border-radius: 4px; + padding: 6px 10px; + max-width: 180px; +} + +.debug-panel__legend-item { + display: flex; + align-items: center; + gap: 4px; + font-size: 9px; + color: var(--color-text-secondary, #888); + text-transform: capitalize; +} + +.debug-panel__legend-dot { + width: 8px; + height: 8px; + border-radius: 50%; + flex-shrink: 0; +} + +/* ============================================ + Embeddings Controls + ============================================ */ + +.debug-panel__embeddings-controls { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 10px; + padding-bottom: 8px; + border-bottom: 1px solid var(--color-border, #333); +} + +.debug-panel__embeddings-buttons { + display: flex; + gap: 4px; + align-items: center; +} + +.debug-panel__embeddings-legend { + display: flex; + flex-wrap: wrap; + gap: 10px; + margin-top: 10px; + padding-top: 8px; + border-top: 1px solid var(--color-border, #333); +} + +/* ============================================ + Virtual Scrolling / Load More + ============================================ */ + +.debug-panel__load-more { + text-align: center; + padding: 12px; + color: var(--color-text-secondary, #666); + font-size: 11px; + background: var(--color-surface-elevated, #252525); + border-radius: 4px; + margin-top: 8px; +} + +/* ============================================ + Timeline Tab Styles + ============================================ */ + +.debug-panel__timeline { + position: relative; + padding: 12px; +} + +.debug-panel__timeline-stats { + display: flex; + gap: 16px; + margin-bottom: 10px; + font-size: 11px; + color: var(--color-text-secondary, #888); +} + +.debug-panel__timeline-svg { + width: 100%; + height: 200px; + background: var(--color-surface, #1a1a1a); + border-radius: 6px; + border: 1px solid var(--color-border, #333); +} + +.debug-panel__timeline-axis text { + fill: var(--color-text-secondary, #888); + font-size: 10px; +} + +.debug-panel__timeline-axis line, +.debug-panel__timeline-axis path { + stroke: var(--color-border, #444); +} + +/* Event info popup */ +.debug-panel__event-info { + position: absolute; + bottom: 60px; + left: 20px; + display: flex; + flex-direction: column; + gap: 4px; + background: rgba(30, 30, 30, 0.95); + border: 1px solid var(--color-border, #444); + border-radius: 6px; + padding: 10px 14px; + font-size: 12px; + max-width: 220px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); +} + +.debug-panel__event-info strong { + color: var(--color-text-primary, #fff); + font-weight: 600; + padding-right: 20px; +} + +.debug-panel__event-close { + position: absolute; + top: 4px; + right: 4px; + display: flex; + align-items: center; + justify-content: center; + width: 18px; + height: 18px; + border: none; + background: rgba(255, 255, 255, 0.1); + color: var(--color-text-secondary, #888); + border-radius: 50%; + cursor: pointer; + transition: all 0.15s ease; +} + +.debug-panel__event-close:hover { + background: rgba(255, 255, 255, 0.2); + color: var(--color-text-primary, #fff); +} + +.debug-panel__event-date { + color: var(--color-accent, #3b82f6); + font-size: 11px; +} + +.debug-panel__event-type { + color: #f59e0b; + font-size: 11px; + text-transform: capitalize; +} + +.debug-panel__event-desc { + color: var(--color-text-secondary, #888); + font-size: 11px; + margin: 4px 0 0 0; + line-height: 1.4; +} + /* ============================================ Scrollbar Styling ============================================ */ diff --git a/frontend/src/components/uml/SemanticDetailsPanel.css b/frontend/src/components/uml/SemanticDetailsPanel.css index 3d044b6f6c..a3c5f255c4 100644 --- a/frontend/src/components/uml/SemanticDetailsPanel.css +++ b/frontend/src/components/uml/SemanticDetailsPanel.css @@ -344,6 +344,81 @@ font-style: italic; } +/* Annotations - Collapsible */ +.semantic-panel__annotations { + margin-bottom: 16px; + padding: 10px 12px; + background: #f0fdf4; + border-radius: 8px; + cursor: pointer; + border: 1px solid #bbf7d0; + transition: background-color 0.15s ease; +} + +.semantic-panel__annotations:hover { + background: #dcfce7; +} + +.semantic-panel__annotations-header { + display: flex; + align-items: center; + gap: 8px; +} + +.semantic-panel__annotations-toggle { + font-size: 10px; + color: #16a34a; + width: 12px; +} + +.semantic-panel__annotations-label { + font-size: 12px; + font-weight: 600; + color: #16a34a; + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.semantic-panel__annotations--expanded { + background: #dcfce7; +} + +.semantic-panel__annotations-content { + margin-top: 12px; + padding-top: 12px; + border-top: 1px solid #bbf7d0; +} + +.semantic-panel__annotation-item { + display: flex; + flex-direction: column; + gap: 4px; + margin-bottom: 10px; + padding: 8px; + background: white; + border-radius: 6px; + border: 1px solid #d1fae5; +} + +.semantic-panel__annotation-item:last-child { + margin-bottom: 0; +} + +.semantic-panel__annotation-key { + font-size: 11px; + font-weight: 600; + color: #15803d; + font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Code', monospace; +} + +.semantic-panel__annotation-value { + font-size: 13px; + color: #166534; + word-break: break-word; + white-space: pre-wrap; + font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Code', monospace; +} + /* Section */ .semantic-panel__section { margin-bottom: 16px; diff --git a/frontend/src/components/uml/SemanticDetailsPanel.tsx b/frontend/src/components/uml/SemanticDetailsPanel.tsx index 847d53ad58..3a18485650 100644 --- a/frontend/src/components/uml/SemanticDetailsPanel.tsx +++ b/frontend/src/components/uml/SemanticDetailsPanel.tsx @@ -134,6 +134,7 @@ export const SemanticDetailsPanel: React.FC = ({ const [expandedSlots, setExpandedSlots] = useState>(new Set()); const [prefixes, setPrefixes] = useState>({}); const [descriptionExpanded, setDescriptionExpanded] = useState(false); + const [annotationsExpanded, setAnnotationsExpanded] = useState(false); const [enumValuesExpanded, setEnumValuesExpanded] = useState(false); const [showEnumNetwork, setShowEnumNetwork] = useState(false); @@ -1163,6 +1164,40 @@ export const SemanticDetailsPanel: React.FC = ({ )} + {/* Annotations - Collapsible */} + {classInfo.annotations && Object.keys(classInfo.annotations).length > 0 && ( +
+
setAnnotationsExpanded(!annotationsExpanded)} + > + + {annotationsExpanded ? '▼' : '▶'} + + + Annotations ({Object.keys(classInfo.annotations).length}) + +
+ {annotationsExpanded && ( +
+ {Object.entries(classInfo.annotations).map(([key, value]) => ( +
+ {key} + + {typeof value === 'object' + ? JSON.stringify(value, null, 2) + : String(value) + } + +
+ ))} +
+ )} +
+ )} + {/* Ontology Mappings */} {renderMappings(classInfo.mappings)} diff --git a/frontend/src/components/uml/UMLVisualization.css b/frontend/src/components/uml/UMLVisualization.css index 250a7631b1..2c7ef92acf 100644 --- a/frontend/src/components/uml/UMLVisualization.css +++ b/frontend/src/components/uml/UMLVisualization.css @@ -709,6 +709,43 @@ font-size: 11px; } +/* Checkbox items in link type filter */ +.uml-visualization__checkbox-item { + display: flex; + align-items: center; + gap: 8px; + padding: 4px 6px; + margin: -2px -6px; + border-radius: 4px; + cursor: pointer; + font-size: 11px; + color: #6b7280; + transition: background-color 0.15s ease; +} + +.uml-visualization__checkbox-item:hover { + background-color: rgba(99, 102, 241, 0.08); +} + +.uml-visualization__checkbox-item input[type="checkbox"] { + width: 14px; + height: 14px; + margin: 0; + cursor: pointer; + accent-color: #6366f1; +} + +.uml-visualization__checkbox-item span { + flex: 1; +} + +/* Link type filter icons */ +.uml-visualization__link-icon { + width: 14px; + height: 8px; + flex-shrink: 0; +} + /* Responsive legend dropdown */ @media (max-width: 640px) { .uml-visualization__legend-panel { @@ -716,6 +753,30 @@ left: -100px; min-width: 160px; } + + .uml-visualization__link-icon { + width: 12px; + height: 7px; + } + + .uml-visualization__checkbox-item { + font-size: 10px; + gap: 6px; + padding: 3px 4px; + } + + .uml-visualization__checkbox-item input[type="checkbox"] { + width: 12px; + height: 12px; + } +} + +/* Medium screens */ +@media (min-width: 641px) and (max-width: 1024px) { + .uml-visualization__link-icon { + width: 13px; + height: 8px; + } } /* Dark mode styles for search */ @@ -784,4 +845,13 @@ background: #1e3a5f; color: #a5b4fc; } + + /* Dark mode checkbox items */ + .uml-visualization__checkbox-item { + color: #9ca3af; + } + + .uml-visualization__checkbox-item:hover { + background-color: rgba(99, 102, 241, 0.15); + } } diff --git a/frontend/src/components/uml/UMLVisualization.tsx b/frontend/src/components/uml/UMLVisualization.tsx index e870495e47..e8fba8f1be 100644 --- a/frontend/src/components/uml/UMLVisualization.tsx +++ b/frontend/src/components/uml/UMLVisualization.tsx @@ -294,6 +294,10 @@ const UMLVisualizationInner: React.FC = ({ const [visibleResultsCount, setVisibleResultsCount] = useState(10); const [showProvenanceLinks, setShowProvenanceLinks] = useState(false); // Provenance links hidden by default const [showLegend, setShowLegend] = useState(false); // Cardinality legend dropdown + const [showLinkTypeMenu, setShowLinkTypeMenu] = useState(false); // Link type filter menu + const [showInheritanceLinks, setShowInheritanceLinks] = useState(true); // Inheritance links (is_a) + const [showSlotRangeLinks, setShowSlotRangeLinks] = useState(true); // Slot range links (aggregation/composition) + const [showDualClassLinks, setShowDualClassLinks] = useState(true); // Annotation-based dual-class pattern links const [edgeTooltip, setEdgeTooltip] = useState<{ label: string; x: number; y: number; bidirectional: boolean; containerWidth: number; containerHeight: number } | null>(null); const [hoveredEdgeInfo, setHoveredEdgeInfo] = useState<{ relationshipType: string; cardinality: string | null } | null>(null); // Track hovered edge for legend highlighting const [localCardinalityStyle, setLocalCardinalityStyle] = useState(cardinalityStyle); @@ -735,16 +739,50 @@ const UMLVisualizationInner: React.FC = ({ debugLog(`[UMLVisualization] Self-loops detected: ${selfLoopCount}`); } - // Filter out provenance links if toggle is off - const workingLinks = showProvenanceLinks - ? allLinks - : allLinks.filter(link => !link.isProvenance); + // Helper to check if link is a dual-class pattern link + const isDualClassLink = (link: typeof allLinks[0]) => + link.label === 'linked_collection_type' || link.label === 'linked_custodian_type'; - // Log provenance link filtering - const provenanceCount = allLinks.filter(l => l.isProvenance).length; - if (provenanceCount > 0) { - debugLog(`[UMLVisualization] Provenance links: ${provenanceCount} (${showProvenanceLinks ? 'shown' : 'hidden'})`); - } + // Helper to check if link is a slot range link (aggregation/composition) + const isSlotRangeLink = (link: typeof allLinks[0]) => + link.type === 'aggregation' || link.type === 'composition'; + + // Filter links based on all toggles + const workingLinks = allLinks.filter(link => { + // Filter provenance links + if (!showProvenanceLinks && link.isProvenance) return false; + // Filter inheritance links + if (!showInheritanceLinks && link.type === 'inheritance') return false; + // Filter slot range links (but not dual-class links which use association type) + if (!showSlotRangeLinks && isSlotRangeLink(link) && !isDualClassLink(link)) return false; + // Filter dual-class pattern links + if (!showDualClassLinks && isDualClassLink(link)) return false; + return true; + }); + + // Debug: Log link type breakdown before and after filtering + const linkTypeBreakdown = { + total: allLinks.length, + inheritance: allLinks.filter(l => l.type === 'inheritance').length, + aggregation: allLinks.filter(l => l.type === 'aggregation').length, + composition: allLinks.filter(l => l.type === 'composition').length, + association: allLinks.filter(l => l.type === 'association').length, + provenance: allLinks.filter(l => l.isProvenance).length, + dualClass: allLinks.filter(l => isDualClassLink(l)).length, + }; + debugLog(`[UMLVisualization] Link breakdown BEFORE filter:`, linkTypeBreakdown); + debugLog(`[UMLVisualization] Toggle states:`, { + showInheritanceLinks, + showSlotRangeLinks, + showDualClassLinks, + showProvenanceLinks + }); + debugLog(`[UMLVisualization] Links AFTER filter: ${workingLinks.length}`, { + inheritance: workingLinks.filter(l => l.type === 'inheritance').length, + aggregation: workingLinks.filter(l => l.type === 'aggregation').length, + composition: workingLinks.filter(l => l.type === 'composition').length, + association: workingLinks.filter(l => l.type === 'association').length, + }); workingNodes.forEach(node => { const attributeCount = node.attributes?.length || 0; @@ -2181,7 +2219,7 @@ const UMLVisualizationInner: React.FC = ({ } cleanup(); }; - }, [diagram, width, height, layoutType, dagreDirection, dagreAlignment, dagreRanker, elkAlgorithm, showProvenanceLinks, localCardinalityStyle]); + }, [diagram, width, height, layoutType, dagreDirection, dagreAlignment, dagreRanker, elkAlgorithm, showProvenanceLinks, showInheritanceLinks, showSlotRangeLinks, showDualClassLinks, localCardinalityStyle]); // Effect to handle edge fading when a node is focused via right-click useEffect(() => { @@ -2494,15 +2532,80 @@ const UMLVisualizationInner: React.FC = ({ )} - {/* Provenance links toggle */} - + {/* Link Type Filter dropdown */} +
+ + {showLinkTypeMenu && ( +
+
+ Visible Link Types +
+
+ + + + +
+
+ )} +
{/* Cardinality notation toggle */} + {expandedClassSlots.has(cls.name) && ( +
+ {cls.slots.map(slotName => { + const slot = slotLookupMap.get(slotName); + if (slot) { + return renderSlotDetails(slot); + } + // Fallback: show slot name as tag if definition not found + return ( +
+

{slotName}

+
+ Slot definition not found in schema +
+
+ ); + })} +
+ )} )} {cls.exact_mappings && cls.exact_mappings.length > 0 && ( @@ -2120,9 +2318,11 @@ const LinkMLViewerPage: React.FC = () => { > {expandedUML.has(cls.name) ? '▼' : '▶'} UML Diagram - {loadingExports.has(cls.name) && Loading...} + {(loadingExports.has(cls.name) || loadingImports.has(cls.name)) && Loading...} - {expandedUML.has(cls.name) && classExports[cls.name] && ( + {/* Show UML content when expanded AND required data is loaded */} + {/* Must wait for BOTH exports AND imports since imports contain slot range info needed for aggregation links */} + {expandedUML.has(cls.name) && classExports[cls.name] && classImports[cls.name] && (
{/* Direction toggles (Imports/Exports checkboxes) */}
@@ -2358,7 +2558,8 @@ const LinkMLViewerPage: React.FC = () => { )}
)} - {expandedUML.has(cls.name) && !classExports[cls.name] && !loadingExports.has(cls.name) && ( + {/* Show message when expanded but data not yet loaded */} + {expandedUML.has(cls.name) && (!classExports[cls.name] || !classImports[cls.name]) && !loadingExports.has(cls.name) && !loadingImports.has(cls.name) && (
Click to load class relationships.
@@ -2586,7 +2787,6 @@ const LinkMLViewerPage: React.FC = () => { if (!schema) return null; const classes = extractClasses(schema); - const slots = extractSlots(schema); const enums = extractEnums(schema); // Count matching items when filter is active (for display purposes) @@ -2597,13 +2797,6 @@ const LinkMLViewerPage: React.FC = () => { }).length : classes.length; - const matchingSlotCount = custodianTypeFilter.size > 0 - ? slots.filter(slot => { - const types = slotCustodianTypes[slot.name] || getCustodianTypesForSlot(slot.name); - return types.some(t => custodianTypeFilter.has(t)); - }).length - : slots.length; - const matchingEnumCount = custodianTypeFilter.size > 0 ? enums.filter(enumDef => { const types = enumCustodianTypes[enumDef.name] || getCustodianTypesForEnum(enumDef.name); @@ -2680,26 +2873,6 @@ const LinkMLViewerPage: React.FC = () => {
)} - {/* Slots */} - {slots.length > 0 && ( -
- - {expandedSections.has('slots') && ( -
- {slots.map(renderSlotDetails)} -
- )} -
- )} - {/* Enums */} {enums.length > 0 && (
diff --git a/node_modules/.modules.yaml b/node_modules/.modules.yaml index 9a5fa2248a..f1d4f55984 100644 --- a/node_modules/.modules.yaml +++ b/node_modules/.modules.yaml @@ -987,7 +987,7 @@ hoistedDependencies: loose-envify: private lru-cache@11.2.4: lru-cache: private - lucide-react@0.562.0(react@19.2.3): + lucide-react@0.511.0(react@19.2.3): lucide-react: private lz-string@1.5.0: lz-string: private diff --git a/node_modules/.pnpm/lock.yaml b/node_modules/.pnpm/lock.yaml index 945f78238a..fc8fe75a8e 100644 --- a/node_modules/.pnpm/lock.yaml +++ b/node_modules/.pnpm/lock.yaml @@ -41,9 +41,15 @@ importers: '@tanstack/react-query': specifier: ^5.90.10 version: 5.90.12(react@19.2.3) + d3: + specifier: ^7.9.0 + version: 7.9.0 js-yaml: specifier: ^4.1.1 version: 4.1.1 + lucide-react: + specifier: ^0.511.0 + version: 0.511.0(react@19.2.3) maplibre-gl: specifier: ^5.14.0 version: 5.15.0 @@ -66,6 +72,9 @@ importers: specifier: ^4.0.1 version: 4.0.1 devDependencies: + '@types/d3': + specifier: ^7.4.3 + version: 7.4.3 '@types/js-yaml': specifier: ^4.0.9 version: 4.0.9 @@ -2522,6 +2531,11 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lucide-react@0.511.0: + resolution: {integrity: sha512-VK5a2ydJ7xm8GvBeKLS9mu1pVK6ucef9780JVUjw6bAjJL/QXnd4Y0p7SPeOUMC27YhzNCZvm5d/QX0Tp3rc0w==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + lucide-react@0.562.0: resolution: {integrity: sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==} peerDependencies: @@ -5675,6 +5689,10 @@ snapshots: dependencies: yallist: 3.1.1 + lucide-react@0.511.0(react@19.2.3): + dependencies: + react: 19.2.3 + lucide-react@0.562.0(react@19.2.3): dependencies: react: 19.2.3 diff --git a/node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/LICENSE b/node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/LICENSE new file mode 100644 index 0000000000..325e8ff0aa --- /dev/null +++ b/node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/LICENSE @@ -0,0 +1,15 @@ +ISC License + +Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT). All other copyright (c) for Lucide are held by Lucide Contributors 2022. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/README.md b/node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/README.md new file mode 100644 index 0000000000..8d02efe968 --- /dev/null +++ b/node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/README.md @@ -0,0 +1,73 @@ +

+ + Lucide icon library for React applications. + +

+ +

+Lucide icon library for React applications. +

+ +
+ + [![npm](https://img.shields.io/npm/v/lucide-react?color=blue)](https://www.npmjs.com/package/lucide-react) + ![NPM Downloads](https://img.shields.io/npm/dw/lucide-react) + [![GitHub](https://img.shields.io/github/license/lucide-icons/lucide)](https://lucide.dev/license) +
+ +

+ About + · + Icons + · + Documentation + · + License +

+ +# Lucide React + +Implementation of the lucide icon library for React applications. + +## Installation + +```sh +pnpm add lucide-react +``` + +```sh +npm install lucide-react +``` + +```sh +yarn add lucide-react +``` + +```sh +bun add lucide-react +``` + +## Documentation + +For full documentation, visit [lucide.dev](https://lucide.dev/guide/packages/lucide-react) + +## Community + +Join the [Discord server](https://discord.gg/EH6nSts) to chat with the maintainers and other users. + +## License + +Lucide is licensed under the ISC license. See [LICENSE](https://lucide.dev/license). + +## Sponsors + + + Powered by Vercel + + +DigitalOcean Referral Badge + +### Awesome backers 🍺 + +Scipress sponsor badge +pdfme sponsor badge diff --git a/node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/dynamic.mjs b/node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/dynamic.mjs new file mode 100644 index 0000000000..664ac1de11 --- /dev/null +++ b/node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/dynamic.mjs @@ -0,0 +1,10 @@ +/** + * @license lucide-react v0.511.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */ + +export { default as DynamicIcon, iconNames } from './dist/esm/DynamicIcon.js'; +export { default as dynamicIconImports } from './dist/esm/dynamicIconImports.js'; +//# sourceMappingURL=dynamic.mjs.map diff --git a/node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/dynamicIconImports.mjs b/node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/dynamicIconImports.mjs new file mode 100644 index 0000000000..7a725d5b50 --- /dev/null +++ b/node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/dynamicIconImports.mjs @@ -0,0 +1 @@ +export { default } from './dist/esm/dynamicIconImports.js'; diff --git a/node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/package.json b/node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/package.json new file mode 100644 index 0000000000..3152594066 --- /dev/null +++ b/node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react/package.json @@ -0,0 +1,74 @@ +{ + "name": "lucide-react", + "description": "A Lucide icon library package for React applications.", + "version": "0.511.0", + "license": "ISC", + "homepage": "https://lucide.dev", + "bugs": "https://github.com/lucide-icons/lucide/issues", + "repository": { + "type": "git", + "url": "https://github.com/lucide-icons/lucide.git", + "directory": "packages/lucide-react" + }, + "keywords": [ + "Lucide", + "React", + "Feather", + "Icons", + "Icon", + "SVG", + "Feather Icons", + "Fontawesome", + "Font Awesome" + ], + "author": "Eric Fennis", + "amdName": "lucide-react", + "main": "dist/cjs/lucide-react.js", + "main:umd": "dist/umd/lucide-react.js", + "module": "dist/esm/lucide-react.js", + "unpkg": "dist/umd/lucide-react.min.js", + "typings": "dist/lucide-react.d.ts", + "sideEffects": false, + "files": [ + "dist", + "dynamic.mjs", + "dynamic.js.map", + "dynamic.d.ts", + "dynamicIconImports.mjs", + "dynamicIconImports.js.map", + "dynamicIconImports.d.ts" + ], + "devDependencies": { + "@testing-library/jest-dom": "^6.1.6", + "@testing-library/react": "^14.1.2", + "@types/react": "^18.2.37", + "@vitejs/plugin-react": "^4.3.4", + "jest-serializer-html": "^7.1.0", + "react": "18.2.0", + "react-dom": "18.2.0", + "rollup": "^4.22.4", + "rollup-plugin-dts": "^6.1.0", + "rollup-plugin-preserve-directives": "^0.4.0", + "typescript": "^5.8.3", + "vite": "^6.3.2", + "vitest": "^3.1.2", + "@lucide/build-icons": "1.1.0", + "@lucide/shared": "1.0.0", + "@lucide/rollup-plugins": "1.0.0" + }, + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "scripts": { + "build": "pnpm clean && pnpm copy:license && pnpm build:icons && pnpm typecheck && pnpm build:bundles", + "copy:license": "cp ../../LICENSE ./LICENSE", + "clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.ts && rm -f dynamic.* && rm -f dynamicIconImports.d.ts", + "build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mjs --renderUniqueKey --withAliases --withDynamicImports --separateAliasesFile --aliasesFileExtension=.ts --iconFileExtension=.ts --exportFileName=index.ts", + "build:bundles": "rollup -c ./rollup.config.mjs", + "typecheck": "tsc", + "typecheck:watch": "tsc -w", + "test": "pnpm build:icons && vitest run", + "test:watch": "vitest watch", + "version": "pnpm version --git-tag-version=false" + } +} \ No newline at end of file diff --git a/node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/react b/node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/react new file mode 120000 index 0000000000..01bc808511 --- /dev/null +++ b/node_modules/.pnpm/lucide-react@0.511.0_react@19.2.3/node_modules/react @@ -0,0 +1 @@ +../../react@19.2.3/node_modules/react \ No newline at end of file diff --git a/node_modules/.pnpm/node_modules/lucide-react b/node_modules/.pnpm/node_modules/lucide-react index 311e1120c7..7e43ca40d8 120000 --- a/node_modules/.pnpm/node_modules/lucide-react +++ b/node_modules/.pnpm/node_modules/lucide-react @@ -1 +1 @@ -../lucide-react@0.562.0_react@19.2.3/node_modules/lucide-react \ No newline at end of file +../lucide-react@0.511.0_react@19.2.3/node_modules/lucide-react \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 945f78238a..fc8fe75a8e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,9 +41,15 @@ importers: '@tanstack/react-query': specifier: ^5.90.10 version: 5.90.12(react@19.2.3) + d3: + specifier: ^7.9.0 + version: 7.9.0 js-yaml: specifier: ^4.1.1 version: 4.1.1 + lucide-react: + specifier: ^0.511.0 + version: 0.511.0(react@19.2.3) maplibre-gl: specifier: ^5.14.0 version: 5.15.0 @@ -66,6 +72,9 @@ importers: specifier: ^4.0.1 version: 4.0.1 devDependencies: + '@types/d3': + specifier: ^7.4.3 + version: 7.4.3 '@types/js-yaml': specifier: ^4.0.9 version: 4.0.9 @@ -2522,6 +2531,11 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lucide-react@0.511.0: + resolution: {integrity: sha512-VK5a2ydJ7xm8GvBeKLS9mu1pVK6ucef9780JVUjw6bAjJL/QXnd4Y0p7SPeOUMC27YhzNCZvm5d/QX0Tp3rc0w==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + lucide-react@0.562.0: resolution: {integrity: sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==} peerDependencies: @@ -5675,6 +5689,10 @@ snapshots: dependencies: yallist: 3.1.1 + lucide-react@0.511.0(react@19.2.3): + dependencies: + react: 19.2.3 + lucide-react@0.562.0(react@19.2.3): dependencies: react: 19.2.3 diff --git a/schemas/20251121/linkml/01_custodian_name_modular.yaml b/schemas/20251121/linkml/01_custodian_name_modular.yaml index aee8e5bdec..9a59321e55 100644 --- a/schemas/20251121/linkml/01_custodian_name_modular.yaml +++ b/schemas/20251121/linkml/01_custodian_name_modular.yaml @@ -164,10 +164,10 @@ imports: - modules/slots/managing_unit - modules/slots/managed_collections - # Enums (12 files - added CustodianPrimaryTypeEnum + EncompassingBodyTypeEnum) + # Enums (11 files - CustodianPrimaryTypeEnum ARCHIVED per Rule 9: Enum-to-Class Promotion) + # See: schemas/20251121/linkml/archive/enums/CustodianPrimaryTypeEnum.yaml.archived_20260105 - modules/enums/AgentTypeEnum - modules/enums/AppellationTypeEnum - - modules/enums/CustodianPrimaryTypeEnum - modules/enums/EncompassingBodyTypeEnum - modules/enums/EntityTypeEnum - modules/enums/LegalStatusEnum @@ -423,6 +423,102 @@ imports: - modules/classes/WebArchive - modules/classes/WomensArchives + # Archive RecordSetTypes - concrete subclasses of rico:RecordSetType (v0.9.12) + # These define the types of record sets held by each archive type + # Updated: all 92 archive types now have RecordSetTypes files + - modules/classes/AcademicArchiveRecordSetTypes + - modules/classes/AdvertisingRadioArchiveRecordSetTypes + - modules/classes/AnimalSoundArchiveRecordSetTypes + - modules/classes/ArchitecturalArchiveRecordSetTypes + - modules/classes/ArchiveOfInternationalOrganizationRecordSetTypes + - modules/classes/ArchivesForBuildingRecordsRecordSetTypes + - modules/classes/ArchivesRegionalesRecordSetTypes + - modules/classes/ArtArchiveRecordSetTypes + - modules/classes/AudiovisualArchiveRecordSetTypes + - modules/classes/BankArchiveRecordSetTypes + - modules/classes/CantonalArchiveRecordSetTypes + - modules/classes/CathedralArchiveRecordSetTypes + - modules/classes/ChurchArchiveRecordSetTypes + - modules/classes/ChurchArchiveSwedenRecordSetTypes + - modules/classes/ClimateArchiveRecordSetTypes + - modules/classes/CollectingArchivesRecordSetTypes + - modules/classes/ComarcalArchiveRecordSetTypes + - modules/classes/CommunityArchiveRecordSetTypes + - modules/classes/CompanyArchiveRecordSetTypes + - modules/classes/CurrentArchiveRecordSetTypes + - modules/classes/CustodianArchiveRecordSetTypes + - modules/classes/DarkArchiveRecordSetTypes + - modules/classes/DepartmentalArchivesRecordSetTypes + - modules/classes/DepositArchiveRecordSetTypes + - modules/classes/DigitalArchiveRecordSetTypes + - modules/classes/DimArchivesRecordSetTypes + - modules/classes/DiocesanArchiveRecordSetTypes + - modules/classes/DistrictArchiveGermanyRecordSetTypes + - modules/classes/DistritalArchiveRecordSetTypes + - modules/classes/EconomicArchiveRecordSetTypes + - modules/classes/FilmArchiveRecordSetTypes + - modules/classes/FoundationArchiveRecordSetTypes + - modules/classes/FreeArchiveRecordSetTypes + - modules/classes/FrenchPrivateArchivesRecordSetTypes + - modules/classes/GovernmentArchiveRecordSetTypes + - modules/classes/HistoricalArchiveRecordSetTypes + - modules/classes/HospitalArchiveRecordSetTypes + - modules/classes/HouseArchiveRecordSetTypes + - modules/classes/IconographicArchivesRecordSetTypes + - modules/classes/InstitutionalArchiveRecordSetTypes + - modules/classes/JointArchivesRecordSetTypes + - modules/classes/LGBTArchiveRecordSetTypes + - modules/classes/LightArchivesRecordSetTypes + - modules/classes/LiteraryArchiveRecordSetTypes + - modules/classes/LocalGovernmentArchiveRecordSetTypes + - modules/classes/LocalHistoryArchiveRecordSetTypes + - modules/classes/MailingListArchiveRecordSetTypes + - modules/classes/MediaArchiveRecordSetTypes + - modules/classes/MilitaryArchiveRecordSetTypes + - modules/classes/MonasteryArchiveRecordSetTypes + - modules/classes/MunicipalArchiveRecordSetTypes + - modules/classes/MuseumArchiveRecordSetTypes + - modules/classes/MusicArchiveRecordSetTypes + - modules/classes/NationalArchivesRecordSetTypes + - modules/classes/NewspaperClippingsArchiveRecordSetTypes + - modules/classes/NobilityArchiveRecordSetTypes + - modules/classes/NotarialArchiveRecordSetTypes + - modules/classes/OnlineNewsArchiveRecordSetTypes + - modules/classes/ParishArchiveRecordSetTypes + - modules/classes/ParliamentaryArchivesRecordSetTypes + - modules/classes/PartyArchiveRecordSetTypes + - modules/classes/PerformingArtsArchiveRecordSetTypes + - modules/classes/PhotoArchiveRecordSetTypes + - modules/classes/PoliticalArchiveRecordSetTypes + - modules/classes/PostcustodialArchiveRecordSetTypes + - modules/classes/PressArchiveRecordSetTypes + - modules/classes/ProvincialArchiveRecordSetTypes + - modules/classes/ProvincialHistoricalArchiveRecordSetTypes + - modules/classes/PublicArchiveRecordSetTypes + - modules/classes/PublicArchivesInFranceRecordSetTypes + - modules/classes/RadioArchiveRecordSetTypes + - modules/classes/RegionalArchiveRecordSetTypes + - modules/classes/RegionalArchivesInIcelandRecordSetTypes + - modules/classes/RegionalEconomicArchiveRecordSetTypes + - modules/classes/RegionalStateArchivesRecordSetTypes + - modules/classes/ReligiousArchiveRecordSetTypes + - modules/classes/SchoolArchiveRecordSetTypes + - modules/classes/ScientificArchiveRecordSetTypes + - modules/classes/SectorOfArchivesInSwedenRecordSetTypes + - modules/classes/SecurityArchivesRecordSetTypes + - modules/classes/SoundArchiveRecordSetTypes + - modules/classes/SpecializedArchiveRecordSetTypes + - modules/classes/SpecializedArchivesCzechiaRecordSetTypes + - modules/classes/StateArchivesRecordSetTypes + - modules/classes/StateArchivesSectionRecordSetTypes + - modules/classes/StateDistrictArchiveRecordSetTypes + - modules/classes/StateRegionalArchiveCzechiaRecordSetTypes + - modules/classes/TelevisionArchiveRecordSetTypes + - modules/classes/TradeUnionArchiveRecordSetTypes + - modules/classes/UniversityArchiveRecordSetTypes + - modules/classes/WebArchiveRecordSetTypes + - modules/classes/WomensArchivesRecordSetTypes + # New slots for registration info - modules/slots/country - modules/slots/description @@ -468,6 +564,9 @@ imports: - modules/slots/is_legal_status_of - modules/slots/has_derived_observation - modules/slots/offers_donation_schemes + + # Rico:isOrWasHolderOf relationship slot (links custodians to record set types) + - modules/slots/holds_record_set_types comments: - "HYPER-MODULAR STRUCTURE: Direct imports of all component files" @@ -476,7 +575,7 @@ comments: - "Namespace structure: https://nde.nl/ontology/hc/{class|enum|slot}/[Name]" - "Total components: 44 classes + 12 enums + 102 slots = 158 definition files" - "Legal entity classes (5): LegalEntityType, LegalForm, LegalName, RegistrationInfo (4 classes within), total 8 classes" - - "Type classification: CustodianType (base) + specialized subclasses (ArchiveOrganizationType, MuseumType, LibraryType, GalleryType, ResearchOrganizationType, OfficialInstitutionType, BioCustodianType, EducationProviderType) + CustodianPrimaryTypeEnum (19 types)" + - "Type classification: CustodianType (base) + 19 specialized subclasses (ArchiveOrganizationType, MuseumType, LibraryType, GalleryType, ResearchOrganizationType, OfficialInstitutionType, BioCustodianType, EducationProviderType, HeritageSocietyType, FeatureCustodianType, IntangibleHeritageGroupType, PersonalCollectionType, HolySacredSiteType, DigitalPlatformType, NonProfitType, TasteScentHeritageType, CommercialOrganizationType, MixedCustodianType, UnspecifiedType)" - "Specialized types: ArchiveOrganizationType (144 Wikidata), MuseumType (187), LibraryType (60), GalleryType (78), ResearchOrganizationType (44), OfficialInstitutionType (50+), BioCustodianType (1,393 Wikidata), EducationProviderType (60+ Wikidata) with domain-specific slots" - "Collection aspect: CustodianCollection with 10 collection-specific slots (added managing_unit in v0.7.0, managed_by_cms in v0.8.9)" - "Organizational aspect: OrganizationalStructure with 7 unit-specific slots (staff_members, managed_collections)" diff --git a/schemas/20251121/linkml/archive/enums/ArchiveTypeEnum.yaml.archived_20250105 b/schemas/20251121/linkml/archive/enums/ArchiveTypeEnum.yaml.archived_20250105 new file mode 100644 index 0000000000..0f7bfeb4c9 --- /dev/null +++ b/schemas/20251121/linkml/archive/enums/ArchiveTypeEnum.yaml.archived_20250105 @@ -0,0 +1,922 @@ +id: https://nde.nl/ontology/hc/enum/ArchiveTypeEnum +name: ArchiveTypeEnum +title: Archive Type Classification +description: 'Types of archives extracted from Wikidata hyponyms of Q166118 (archive). + + + Generated: 2025-12-01T16:01:19Z + + Total values: 144' +enums: + ArchiveTypeEnum: + permissible_values: + ACADEMIC_ARCHIVE: + description: archive of a higher education institution + meaning: wikidata:Q27032435 + comments: + - Hochschularchiv (de) + - archivo académico (es) + - archives académiques (fr) + ADVERTISING_RADIO_ARCHIVE: + description: sound archive with advertising radio productions + meaning: wikidata:Q60658673 + comments: + - Werbefunkarchiv (de) + - Archives radiophoniques publicitaires (fr) + - Archivio radio pubblicitaria (it) + ANIMAL_SOUND_ARCHIVE: + description: collection of animal sound recordings + meaning: wikidata:Q18574935 + comments: + - Tierstimmenarchiv (de) + - Archives de voix d'animaux (fr) + - Archivio vocale degli animali (it) + ARCHITECTURAL_ARCHIVE: + description: archive that safeguards architectural heritage + meaning: wikidata:Q121409581 + comments: + - Architekturarchiv (de) + - archives architecturales (fr) + - architectonisch archief (nl) + ARCHIVAL_LIBRARY: + description: library of an archive + meaning: wikidata:Q25504402 + comments: + - Archivbibliothek (de) + - biblioteca de archivo (es) + - bibliothèque liée à une institution conservant des archives (fr) + ARCHIVAL_REPOSITORY: + description: digital repository for archival purposes + meaning: wikidata:Q66656823 + comments: + - Archivierungsstelle (de) + - repositorio (es) + ARCHIVE: + description: agency or institution responsible for the preservation and communication of records + selected for permanent preservation + meaning: wikidata:Q166118 + comments: + - Archiv (de) + - archivo (es) + - archives (fr) + ARCHIVE_ASSOCIATION: + description: Booster, history and heritage societies for archival institutions + meaning: wikidata:Q130427366 + comments: + - Archivverein (de) + - Association des amis des archives (fr) + ARCHIVE_NETWORK: + description: consortium among archives for co-operation + meaning: wikidata:Q96636857 + comments: + - Archivverbund (de) + - rete di archivi (it) + ARCHIVE_OF_AN_INTERNATIONAL_ORGANIZATION: + description: archive of an inter-governmental organization or of an international umbrella organization + meaning: wikidata:Q27031014 + comments: + - Archiv einer internationalen Organisation (de) + - archives d'une organisation internationale (fr) + ARCHIVES_FOR_BUILDING_RECORDS: + description: Public archives for building records or construction documents + meaning: wikidata:Q136027937 + comments: + - Bauaktenarchiv (de) + ARCHIVES_RÉGIONALES: + description: archives régionales (Q2860567) + meaning: wikidata:Q2860567 + comments: + - Regionsarchiv (Frankreich) (de) + - archives régionales (fr) + ART_ARCHIVE: + description: specialized archive + meaning: wikidata:Q27032254 + comments: + - Kunstarchiv (de) + - archivo de arte (es) + - archives artistiques (fr) + ASSOCIATION_ARCHIVE: + description: association archive (Q27030820) + meaning: wikidata:Q27030820 + comments: + - Verbandsarchiv (de) + - archivo de asociación (es) + - archives associatives (fr) + AUDIOVISUAL_ARCHIVE: + description: archive that contains audio-visual materials + meaning: wikidata:Q27030766 + comments: + - audio-visuelles Archiv (de) + - archivo audiovisual (es) + - archive audiovisuelle (fr) + BANK_ARCHIVE: + description: bank archive (Q52718263) + meaning: wikidata:Q52718263 + comments: + - Bankarchiv (de) + - archivo bancario (es) + - archives bancaires (fr) + BILDSTELLE: + description: German institutions that build and manage collections of visual media for teaching + and research + meaning: wikidata:Q861125 + comments: + - Bildstelle (de) + BRANCH: + description: local subdivision of an organization + meaning: wikidata:Q232846 + comments: + - Zweigniederlassung (de) + - branche (fr) + BRANCH_OFFICE: + description: outlet of an organization or a company that – unlike a subsidiary – does not constitute + a separate legal entity, while being physically separated from the organization's main office + meaning: wikidata:Q1880737 + comments: + - Filiale (de) + - sucursal (es) + - succursale (fr) + CANTONAL_ARCHIVE: + description: state archives of one of the cantons of Switzerland + meaning: wikidata:Q2860410 + comments: + - Kantonsarchiv (de) + - archivo cantonal (es) + - archives cantonales (fr) + CAST_COLLECTION: + description: art-historical or archeological collection, usually for education, where copies, + usually of gypsum, of art works are collected and shown + meaning: wikidata:Q29380643 + comments: + - Abgusssammlung (de) + - Afgietsel verzameling (nl) + CATHEDRAL_ARCHIVE: + description: cathedral archive (Q132201761) + meaning: wikidata:Q132201761 + comments: + - archivo catedralicio (es) + CHURCH_ARCHIVE: + description: archive for church books about a parish + meaning: wikidata:Q64166606 + comments: + - Kirchenarchiv (Schweden) (de) + - archives paroissiales (fr) + - kerkarchief (nl) + CHURCH_ARCHIVE_1: + description: archive kept by a church or ecclesiastical organisation + meaning: wikidata:Q2877653 + comments: + - Kirchenarchiv (de) + - archivo eclesiástico (es) + - archives ecclésiastiques (fr) + CINEMATHEQUE: + description: organisation responsible for preserving and restoring cinematographic heritage + meaning: wikidata:Q1352795 + comments: + - Kinemathek (de) + - filmoteca (es) + - cinémathèque (fr) + CLIMATE_ARCHIVE: + description: archive that provides information about the climatic past + meaning: wikidata:Q1676725 + comments: + - Klimaarchiv (de) + CLOSED_SPACE: + description: an abstract space with borders + meaning: wikidata:Q78642244 + comments: + - geschlossener Raum (de) + - espacio cerrado (es) + - spazio chiuso (it) + COLLECTING_ARCHIVES: + description: archive that collects materials from multiple sources + meaning: wikidata:Q117246276 + COMARCAL_ARCHIVE: + description: comarcal archive (Q21086734) + meaning: wikidata:Q21086734 + comments: + - Bezirksarchiv (Katalonien) (de) + - archivo comarcal (es) + COMMUNITY_ARCHIVE: + description: archive created by individuals and community groups who desire to document their + cultural heritage + meaning: wikidata:Q25105971 + comments: + - Gemeinschaftsarchiv (de) + - archivo comunitario (es) + - archives communautaires (fr) + COMPANY_ARCHIVES: + description: organizational entity that keeps or archives fonds of a company + meaning: wikidata:Q10605195 + comments: + - Unternehmensarchiv (de) + - archivo empresarial (es) + - archives d'entreprise (fr) + CONSERVATÓRIA: + description: Conservatória (Q9854379) + meaning: wikidata:Q9854379 + COUNTY_RECORD_OFFICE: + description: local authority repository + meaning: wikidata:Q5177943 + comments: + - archivio pubblico territoriale (it) + COURT_RECORDS: + description: court records (Q11906844) + meaning: wikidata:Q11906844 + comments: + - Justizarchiv (de) + - archivo judicial (es) + - archives judiciaires (fr) + CULTURAL_INSTITUTION: + description: organization that works for the preservation or promotion of culture + meaning: wikidata:Q3152824 + comments: + - kulturelle Organisation (de) + - institución cultural (es) + - institution culturelle (fr) + CURRENT_ARCHIVE: + description: type of archive + meaning: wikidata:Q3621648 + comments: + - archivo corriente (es) + - archive courante (fr) + - archivio corrente (it) + DARK_ARCHIVE: + description: collection of materials preserved for future use but with no current access + meaning: wikidata:Q112796578 + comments: + - Dark Archive (de) + DEPARTMENT: + description: office within an organization + meaning: wikidata:Q2366457 + comments: + - Abteilung (de) + - departamento (es) + - service (fr) + DEPARTMENTAL_ARCHIVES: + description: departmental archives in France + meaning: wikidata:Q2860456 + comments: + - Département-Archiv (de) + - archivos departamentales (es) + - archives départementales (fr) + DEPOSIT_ARCHIVE: + description: part of an archive + meaning: wikidata:Q244904 + comments: + - Zwischenarchiv (de) + - archivo de depósito (es) + - archive intermédiaire (fr) + DIGITAL_ARCHIVE: + description: information system whose aim is to collect different digital resources and to make + them available to a defined group of users + meaning: wikidata:Q1224984 + comments: + - digitales Archiv (de) + - archivo digital (es) + - archives numériques (fr) + DIM_ARCHIVES: + description: archive with only limited access + meaning: wikidata:Q112796779 + comments: + - Dim Archive (de) + DIOCESAN_ARCHIVE: + description: archive of a bishopric + meaning: wikidata:Q11906839 + comments: + - Bischöfliches Archiv (de) + - archivo diocesano (es) + - archives diocésaines (fr) + DISTRICT_ARCHIVE_GERMANY: + description: Archive type in Germany + meaning: wikidata:Q130757255 + comments: + - Kreisarchiv (de) + DISTRITAL_ARCHIVE: + description: distrital archives in Portugal + meaning: wikidata:Q10296259 + comments: + - Bezirksarchiv (Portugal) (de) + DIVISION: + description: distinct and large part of an organization + meaning: wikidata:Q334453 + comments: + - Abteilung (de) + - división (es) + - division (fr) + DOCUMENTATION_CENTRE: + description: organisation that deals with documentation + meaning: wikidata:Q2945282 + comments: + - Dokumentationszentrum (de) + - centro de documentación (es) + - centre de documentation (fr) + ECONOMIC_ARCHIVE: + description: archive documenting the economic history of a country, region etc. + meaning: wikidata:Q27032167 + comments: + - Wirtschaftsarchiv (de) + - archivo económico (es) + - archives économiques (fr) + FILM_ARCHIVE: + description: archive that safeguards film heritage + meaning: wikidata:Q726929 + comments: + - Filmarchiv (de) + - archivo fílmico (es) + - archives cinématographiques (fr) + FOUNDATION_ARCHIVE: + description: foundation archive (Q27030827) + meaning: wikidata:Q27030827 + comments: + - Stiftungsarchiv (de) + - archivo de fundación (es) + FREE_ARCHIVE: + description: Archive that preserves documents on the history of a social movement + meaning: wikidata:Q635801 + comments: + - freies Archiv (de) + - archivio libero (it) + FRENCH_PRIVATE_ARCHIVES: + description: non-public archives in France + meaning: wikidata:Q2860565 + comments: + - Privatarchiv (Frankreich) (de) + - archives privées en France (fr) + FYLKESARKIV: + description: fylkesarkiv (Q15119463) + meaning: wikidata:Q15119463 + FÖREMÅLSARKIV: + description: Föremålsarkiv (Q10501208) + meaning: wikidata:Q10501208 + GLAM: + description: acronym for "galleries, libraries, archives, and museums" that refers to cultural + institutions that have access to knowledge as their mission + meaning: wikidata:Q1030034 + comments: + - GLAM (de) + - GLAM (es) + - GLAM (fr) + GOVERNMENT_ARCHIVE: + description: official archive of a government + meaning: wikidata:Q119712417 + comments: + - Staatsarchiv (de) + - archivos gubernamentales (es) + - archives gouvernementales (fr) + HISTORICAL_ARCHIVE: + description: historical archive (Q3621673) + meaning: wikidata:Q3621673 + comments: + - Historisches Archiv (de) + - archivo histórico (es) + - archive historique (fr) + HOSPITAL_ARCHIVE: + description: hospital archive (Q17301917) + meaning: wikidata:Q17301917 + comments: + - Krankenhausarchiv (de) + - archivo hospitalario (es) + - archives hospitalières (fr) + HOUSE_ARCHIVE: + description: archive containing documents and letters that concern a family + meaning: wikidata:Q4344572 + comments: + - Familienarchiv (de) + - archivo familiar (es) + - archives familiales (fr) + ICONOGRAPHIC_ARCHIVES: + description: archives containing predominantly pictorial materials + meaning: wikidata:Q117810712 + INSTITUTION: + description: structure or mechanism of social order and cooperation governing the behaviour of + a set of individuals within a given community + meaning: wikidata:Q178706 + comments: + - Institution (de) + - institución (es) + - institution sociale (fr) + INSTITUTIONAL_ARCHIVE: + description: repository that holds records created or received by its parent institution + meaning: wikidata:Q124762372 + comments: + - Institutionsarchiv (de) + - archivo institucional (es) + INSTITUTIONAL_REPOSITORY: + description: archive of publications by an institution's staff + meaning: wikidata:Q1065413 + comments: + - Instituts-Repository (de) + - repositorio institucional (es) + - dépôt institutionnel (fr) + JOINT_ARCHIVES: + description: archive containing records or two or more entities + meaning: wikidata:Q117442301 + comments: + - Gemeinsames Archiv (de) + KUSTODIE: + description: Archives and administration of art collections in higher educational institutions + meaning: wikidata:Q58482422 + comments: + - Kustodie (de) + LANDSARKIV: + description: Landsarkiv (Q16324008) + meaning: wikidata:Q16324008 + comments: + - Landesarchiv (de) + LGBT_ARCHIVE: + description: archive related to LGBT topics + meaning: wikidata:Q61710689 + comments: + - LGBT-Archiv (de) + - archivo LGBT (es) + - archives LGBT (fr) + LIGHT_ARCHIVES: + description: repository whose holdings are broadly accessible + meaning: wikidata:Q112815447 + comments: + - Light Archive (de) + LITERARY_ARCHIVE: + description: archive for literary works + meaning: wikidata:Q28607652 + comments: + - Literaturarchiv (de) + - archivo literario (es) + - archives littéraires (fr) + LOCAL_GOVERNMENT_ARCHIVE: + description: archive of records belonging to a local government + meaning: wikidata:Q118281267 + comments: + - Kommunalarchiv (de) + LOCAL_HERITAGE_INSTITUTION_IN_SWEDEN: + description: a Swedish type of local history and cultural heritage museums + meaning: wikidata:Q10520688 + comments: + - Heimatmuseen in Schweden (de) + - Hembygdsgård (nl) + LOCAL_HISTORY_ARCHIVE: + description: archive dealing with local history + meaning: wikidata:Q12324798 + comments: + - Lokalarchiv (de) + - archivo de historia local (es) + - archives d'histoire locale (fr) + LOCATION_LIBRARY: + description: a collection of visual and references information of locations, or places that might + be used for filming or photography. + meaning: wikidata:Q6664811 + comments: + - biblioteca de localizaciones (es) + MAILING_LIST_ARCHIVE: + description: mailing list archive (Q104018626) + meaning: wikidata:Q104018626 + comments: + - Archiv der Mailingliste (de) + - archive de la liste de diffusion (fr) + - archief van mailinglijst (nl) + MEDIA_ARCHIVE: + description: media archive (Q116809817) + meaning: wikidata:Q116809817 + comments: + - Medienarchiv (de) + - archives de médias (fr) + - media-achief (nl) + MEDIENZENTRUM: + description: Medienzentrum (Q1284615) + meaning: wikidata:Q1284615 + comments: + - Medienzentrum (de) + MEMORY_INSTITUTION: + description: institution which has curatorial care over a collection and whose mission it is to + preserve the collection for future generations + meaning: wikidata:Q1497649 + comments: + - Gedächtnisinstitution (de) + - institución del patrimonio (es) + - institution patrimoniale (fr) + MILITARY_ARCHIVE: + description: archive for documents regarding military topics + meaning: wikidata:Q1934883 + comments: + - Militärarchiv (de) + - archivo militar (es) + - archive militaire (fr) + MONASTERY_ARCHIVE: + description: archive of a monastery + meaning: wikidata:Q27030561 + comments: + - Klosterarchiv (de) + - archivo monástico (es) + MUNICIPAL_ARCHIVE: + description: accumulation of historical records of a town or city + meaning: wikidata:Q604177 + comments: + - Stadt- oder Gemeindearchiv (de) + - archivo municipal (es) + - archives communales (fr) + MUSEUM_ARCHIVE: + description: archive established by a museum to collect, organize, preserve, and provide access + to its organizational records + meaning: wikidata:Q53566456 + comments: + - Museumsarchiv (de) + - archivo de museo (es) + - museumarchief (nl) + MUSIC_ARCHIVE: + description: archive of musical recordings and documents + meaning: wikidata:Q53759838 + comments: + - Musikarchiv (de) + - archivo musical (es) + - archives musicales (fr) + NACHLASS: + description: collection of manuscripts, notes, correspondence, and so on left behind when a scholar + or an artist dies + meaning: wikidata:Q3827332 + comments: + - Nachlass (de) + - Nachlass (es) + - archives formées du legs (fr) + NATIONAL_ARCHIVES: + description: archives of a country + meaning: wikidata:Q2122214 + comments: + - Nationalarchiv (de) + - archivo nacional (es) + - archives nationales (fr) + NATIONAL_TREASURE: + description: treasure or artifact that is regarded as emblematic as a nation's cultural heritage, + identity or significance + meaning: wikidata:Q60606520 + NATIONAL_TREASURE_OF_FRANCE: + description: designation for entities of cultural significance in France + meaning: wikidata:Q2986426 + comments: + - trésor national (fr) + NEWSPAPER_CLIPPINGS_ARCHIVE: + description: archive of press clippings, organized by topics + meaning: wikidata:Q65651503 + comments: + - Zeitungsausschnittsarchiv (de) + - archivo de recortes de periódicos (es) + - tijdschriftenknipselarchief (nl) + NOBILITY_ARCHIVE: + description: collection of historical documents and information about members of the nobility + meaning: wikidata:Q355358 + comments: + - Adelsarchiv (de) + - archivo nobiliario (es) + - archive de noblesse (fr) + NOTARIAL_ARCHIVE: + description: type of archive housing notarial records + meaning: wikidata:Q8203685 + comments: + - Notariatsarchiv (de) + - archivo notarial (es) + - archives notariales (fr) + ONLINE_NEWS_ARCHIVE: + description: archive of newspapers, magazines and other periodicals that can be consulted online + meaning: wikidata:Q2001867 + comments: + - Zeitungsbank (de) + - archivo de periódicos (es) + - archives de journaux (fr) + ORGANIZATION: + description: social entity established to meet needs or pursue goals + meaning: wikidata:Q43229 + comments: + - Organisation (de) + - organización (es) + - organisation (fr) + ORGANIZATIONAL_SUBDIVISION: + description: organization that is a part of a larger organization + meaning: wikidata:Q9261468 + comments: + - Untereinheit (de) + - subdivisión organizacional (es) + - sous-division organisationnelle (fr) + PARENT_ORGANIZATIONUNIT: + description: organization that has a subsidiary unit, e.g. for companies, which owns enough voting + stock in another firm to control management and operations + meaning: wikidata:Q1956113 + comments: + - Mutterunternehmen (de) + - organización matriz (es) + - société mère (fr) + PARISH_ARCHIVE: + description: parish archive (Q34544468) + meaning: wikidata:Q34544468 + comments: + - Pfarrarchiv (de) + - archivo parroquial (es) + - archivio parrocchiale (it) + PARLIAMENTARY_ARCHIVES: + description: political archives + meaning: wikidata:Q53251146 + comments: + - Parlamentsarchiv (de) + - archivo parlamentario (es) + - archives parlementaires (fr) + PARTY_ARCHIVE: + description: subclass of political archive + meaning: wikidata:Q53252161 + comments: + - Parteiarchiv (de) + - archivo de partido político (es) + PERFORMING_ARTS_ARCHIVE: + description: performing arts archive (Q27030945) + meaning: wikidata:Q27030945 + comments: + - Archiv für darstellende Kunst (de) + - archives des arts de la scène (fr) + PERSON_OR_ORGANIZATION: + description: class of agents + meaning: wikidata:Q106559804 + comments: + - Person oder Organisation (de) + - persona u organización (es) + - personne ou organisation (fr) + PERSONAL_LIBRARY: + description: the private library collection of an individual + meaning: wikidata:Q106402388 + comments: + - Autorenbibliothek (de) + - biblioteca de autor (es) + - bibliothèque personnelle (fr) + PERSONENSTANDSARCHIV: + description: Personenstandsarchiv (Q2072394) + meaning: wikidata:Q2072394 + comments: + - Personenstandsarchiv (de) + PHOTO_ARCHIVE: + description: physical image collection + meaning: wikidata:Q27032363 + comments: + - Fotoarchiv (de) + - archivo fotográfico (es) + - archive photographique (fr) + PHOTOGRAPH_COLLECTION: + description: photograph collection (Q130486108) + meaning: wikidata:Q130486108 + comments: + - Fotosammlung (de) + - colección de fotografías (es) + - collection de photographies (fr) + POLITICAL_ARCHIVE: + description: political archive (Q27030921) + meaning: wikidata:Q27030921 + comments: + - Politikarchiv (de) + - archivo político (es) + POSTCUSTODIAL_ARCHIVE: + description: postcustodial archive (Q124223197) + meaning: wikidata:Q124223197 + PRESS_ARCHIVE: + description: collection of press, newspaper materials and content + meaning: wikidata:Q56650887 + comments: + - Pressearchiv (de) + - archivo periodístico (es) + - archives de presse (fr) + PRINT_ROOM: + description: collection of prints, and sometimes drawings, watercolours and photographs + meaning: wikidata:Q445396 + comments: + - Kupferstichkabinett (de) + - gabinete de estampas (es) + - cabinet des estampes (fr) + PROVINCIAL_ARCHIVE: + description: provincial archive (Q5403345) + meaning: wikidata:Q5403345 + comments: + - Provinzarchiv (de) + PROVINCIAL_HISTORICAL_ARCHIVE: + description: type of local archive + meaning: wikidata:Q21087388 + comments: + - Historisches Provinzarchiv (Katalonien) (de) + - archivo histórico provincial (es) + PUBLIC_ARCHIVE: + description: repository for official documents + meaning: wikidata:Q27031009 + comments: + - Öffentliches Archiv (de) + - archivo público (es) + - archives publiques (fr) + PUBLIC_ARCHIVES_IN_FRANCE: + description: Type of archives in France + meaning: wikidata:Q2421452 + comments: + - Öffentliches Archiv (de) + - archives publiques en France (fr) + PUBLIC_SPACE: + description: places for public use + meaning: wikidata:Q294440 + comments: + - öffentlicher Raum (de) + - espacio público (es) + - espace public (fr) + RADIO_ARCHIVE: + description: radio archive (Q109326271) + meaning: wikidata:Q109326271 + comments: + - Radioarchiv (de) + - archivo radiofónico (es) + - archives radiophoniques (fr) + REGIONAL_ARCHIVE: + description: archive with a regional scope + meaning: wikidata:Q27032392 + comments: + - Regionalarchiv (de) + - archivo regional (es) + - archives régionales (fr) + REGIONAL_ARCHIVES_IN_ICELAND: + description: regional archives in Iceland (Q16428785) + meaning: wikidata:Q16428785 + comments: + - Regionalarchiv (Island) (de) + REGIONAL_ECONOMIC_ARCHIVE: + description: archive documenting the economic history of a region + meaning: wikidata:Q2138319 + comments: + - regionales Wirtschaftsarchiv (de) + - archivo económico regional (es) + REGIONAL_HISTORIC_CENTER: + description: name for archives in the Netherlands + meaning: wikidata:Q1882512 + comments: + - Regionalhistorisches Zentrum (de) + - centre régional historique (fr) + - Regionaal Historisch Centrum (nl) + REGIONAL_STATE_ARCHIVES: + description: regional state archives in Sweden + meaning: wikidata:Q8727648 + comments: + - Provinzarchiv (de) + - archivo regional (es) + - archives régionales (fr) + RELIGIOUS_ARCHIVE: + description: accumulation of records of a religious denomination or society + meaning: wikidata:Q85545753 + comments: + - Religionsarchiv (de) + - archivo religioso (es) + SCHOOL_ARCHIVE: + description: school archive (Q27030883) + meaning: wikidata:Q27030883 + comments: + - Schularchiv (de) + - archivo escolar (es) + - archives scolaires (fr) + SCIENTIFIC_ARCHIVE: + description: archive created for academic purposes + meaning: wikidata:Q27032095 + comments: + - Forschungsarchiv (de) + - archives scientifiques (fr) + SCIENTIFIC_TECHNIC_AND_INDUSTRIAL_CULTURE_CENTER: + description: popular science place in France + meaning: wikidata:Q2945276 + comments: + - centre de culture scientifique, technique et industrielle (fr) + - centro di cultura scientifica, tecnica e industriale (it) + - wetenschappelijk, technisch en industrieel cultuurcentrum (nl) + SECTOR_OF_ARCHIVES_IN_SWEDEN: + description: sector of archives + meaning: wikidata:Q84171278 + comments: + - Archivwesen in Schweden (de) + SECURITY_ARCHIVES: + description: type of archives in Czechia + meaning: wikidata:Q101475797 + SOCIAL_SPACE: + description: physical or virtual space such as a social center, online social media, or other + gathering place where people gather and interact + meaning: wikidata:Q4430275 + comments: + - sozialer Raum (de) + - espacio social (es) + - espace social (fr) + SOUND_ARCHIVE: + description: collection of sounds + meaning: wikidata:Q2230431 + comments: + - Schallarchiv (de) + - fonoteca (es) + - phonothèque (fr) + SPECIAL_COLLECTION: + description: library or library unit that houses materials requiring specialized security and + user services or whose relation (period, subject, etc.) is to be preserved + meaning: wikidata:Q4431094 + comments: + - Spezialsammlung (de) + - colección especial (es) + - fonds spéciaux (fr) + SPECIALIZED_ARCHIVE: + description: archive specialized in a specific field + meaning: wikidata:Q27030941 + comments: + - Facharchiv (de) + - archivo especial (es) + - archives spécialisées (fr) + SPECIALIZED_ARCHIVES: + description: type of archives in Czechia + meaning: wikidata:Q101470010 + comments: + - archivo especializado (es) + - archives spécialisées (fr) + STATE_ARCHIVES: + description: archive of a state + meaning: wikidata:Q52341833 + comments: + - Staatsarchiv (de) + - archivo estatal (es) + - archives de l'État (fr) + STATE_ARCHIVES_SECTION: + description: section of a national archive in Italy + meaning: wikidata:Q44796387 + comments: + - Staatsarchiv-Abteilung (de) + - sezione di archivio di Stato (it) + - sectie staatsarchief (nl) + STATE_DISTRICT_ARCHIVE: + description: Archive type in the Czech Republic + meaning: wikidata:Q53131316 + comments: + - Bezirksarchiv (Tschechien) (de) + STATE_REGIONAL_ARCHIVE_CZECHIA: + description: state regional archive (Czechia) (Q53130134) + meaning: wikidata:Q53130134 + SUBSIDIARY_ORGANIZATION: + description: entity or organization administered by a larger entity or organization + meaning: wikidata:Q62079110 + comments: + - Tochterorganisation (de) + - entidad subsidiaria (es) + - entité subsidiaire (fr) + TELEVISION_ARCHIVE: + description: a collection of television programs, recordings, and broadcasts + meaning: wikidata:Q109326243 + comments: + - Fernseharchiv (de) + - archivo de televisión (es) + - archives télévisuelles (fr) + TENTATIVE_WORLD_HERITAGE_SITE: + description: Wikimedia list article + meaning: wikidata:Q1459900 + comments: + - Tentativliste (de) + - lista indicativa del Patrimonio de la Humanidad (es) + - liste indicative du patrimoine mondial (fr) + TRADE_UNION_ARCHIVE: + description: archive formed by the documentation of the labor organisations + meaning: wikidata:Q66604802 + comments: + - Gewerkschaftsarchiv (de) + UNIVERSITY_ARCHIVE: + description: collection of historical records of a college or university + meaning: wikidata:Q2496264 + comments: + - Universitätsarchiv (de) + - archivo universitario (es) + - archives universitaires (fr) + VEREINSARCHIV: + description: Vereinsarchiv (Q130758889) + meaning: wikidata:Q130758889 + comments: + - Vereinsarchiv (de) + VERLAGSARCHIV: + description: Verlagsarchiv (Q130759004) + meaning: wikidata:Q130759004 + comments: + - Verlagsarchiv (de) + VERWALTUNGSARCHIV: + description: Subclass of archives + meaning: wikidata:Q2519292 + comments: + - Verwaltungsarchiv (de) + VIRTUAL_MAP_LIBRARY: + description: type of library for virtual maps or cartographic products + meaning: wikidata:Q5995078 + comments: + - Virtuelle Kartenbibliothek (de) + - Mapoteca virtual (es) + WEB_ARCHIVE: + description: publication type, collection of preserved web pages + meaning: wikidata:Q30047053 + comments: + - Webarchiv (de) + - archivo web (es) + - archive du Web (fr) + WOMENS_ARCHIVES: + description: archives of documents and records written by and about women + meaning: wikidata:Q130217628 + comments: + - Frauenarchiv (de) + WORLD_HERITAGE_SITE: + description: place of significance listed by UNESCO + meaning: wikidata:Q9259 + comments: + - UNESCO-Welterbe (de) + - Patrimonio de la Humanidad (es) + - patrimoine mondial (fr) diff --git a/schemas/20251121/linkml/archive/enums/CustodianPrimaryTypeEnum.yaml.archived_20260105 b/schemas/20251121/linkml/archive/enums/CustodianPrimaryTypeEnum.yaml.archived_20260105 new file mode 100644 index 0000000000..590d37e2ad --- /dev/null +++ b/schemas/20251121/linkml/archive/enums/CustodianPrimaryTypeEnum.yaml.archived_20260105 @@ -0,0 +1,204 @@ +id: https://nde.nl/ontology/hc/enum/CustodianPrimaryTypeEnum +name: CustodianPrimaryTypeEnum +title: GLAMORCUBESFIXPHDNT Primary Type Categories + +description: | + Top-level classification of heritage custodian types using the + GLAMORCUBESFIXPHDNT taxonomy (19 categories). + + **Mnemonic**: GLAMORCUBESFIXPHDNT + - **G**alleries + - **L**ibraries + - **A**rchives + - **M**useums + - **O**fficial institutions + - **R**esearch centers + - **C**orporations (commercial) + - **U**nknown/unspecified + - **B**otanical gardens/zoos (bio custodians) + - **E**ducation providers + - **S**ocieties (heritage/collecting societies) + - **F**eatures (geographic features AS custodians) + - **I**ntangible heritage groups + - mi**X**ed (multiple types) + - **P**ersonal collections + - **H**oly/sacred sites + - **D**igital platforms + - **N**GOs (non-profit organizations) + - **T**aste/smell heritage + + Each category has specialized subclasses with Wikidata-derived enum values. + +enums: + CustodianPrimaryTypeEnum: + permissible_values: + GALLERY: + description: "Art gallery or exhibition space (Q118554787, Q1007870)" + meaning: wikidata:Q118554787 + comments: + - "Visual arts organizations" + - "Exhibition spaces (may or may not hold permanent collections)" + - "Kunsthallen, art galleries, visual arts centers" + + LIBRARY: + description: "Library - institution preserving and providing access to books and documents (Q7075)" + meaning: wikidata:Q7075 + comments: + - "Public libraries, academic libraries, national libraries" + - "Special libraries, digital libraries" + - "Includes bibliotheken, bibliotecas, bibliothèques" + + ARCHIVE: + description: "Archive - institution preserving historical documents and records (Q166118)" + meaning: wikidata:Q166118 + comments: + - "National archives, city archives, corporate archives" + - "Government archives, religious archives" + - "Includes archieven, archivos, archives" + + MUSEUM: + description: "Museum - institution preserving and exhibiting cultural or scientific collections (Q33506)" + meaning: wikidata:Q33506 + comments: + - "Art museums, history museums, natural history museums" + - "Science museums, ethnographic museums, local museums" + - "Includes musea, museos, musées, museums" + + OFFICIAL_INSTITUTION: + description: "Government heritage agency, platform, or official cultural institution (Q895526)" + meaning: wikidata:Q895526 + comments: + - "Provincial heritage services" + - "Heritage aggregation platforms" + - "Government cultural agencies" + - "TOOI: tooi:Overheidsorganisatie (Dutch government)" + - "CPOV: cpov:PublicOrganisation (EU public sector)" + + RESEARCH_CENTER: + description: "Research organization or documentation center (Q136410232)" + meaning: wikidata:Q136410232 + comments: + - "Research institutes with heritage collections" + - "Documentation centers" + - "University research units" + - "Policy institutes with archives" + + COMMERCIAL: + description: "Corporation or business with heritage collections (Q21980538)" + meaning: wikidata:Q21980538 + comments: + - "Company archives" + - "Corporate museums" + - "Brand heritage centers" + - "ROV: rov:RegisteredOrganization (if legally registered)" + + UNSPECIFIED: + description: "Institution type cannot be determined (data quality flag)" + comments: + - "NOT a real institution type - indicates missing/ambiguous data" + - "Should be resolved during data curation" + - "NOT mapped to Wikidata" + + BIO_CUSTODIAN: + description: "Botanical garden, zoo, aquarium, or living collections (Q473972, Q23790, Q43501)" + meaning: wikidata:Q473972 + comments: + - "Botanical gardens (Q473972)" + - "Zoological gardens (Q23790)" + - "Arboreta (Q43501)" + - "Herbaria (Q2982911)" + - "Aquariums (Q4915239)" + + EDUCATION_PROVIDER: + description: "Educational institution with heritage collections (Q5341295)" + meaning: wikidata:Q5341295 + comments: + - "Universities with archives or collections" + - "Schools with historical materials" + - "Training centers preserving educational heritage" + - "Schema.org: schema:EducationalOrganization, schema:CollegeOrUniversity" + + HERITAGE_SOCIETY: + description: "Historical society, heritage society, or collecting society (Q5774403, Q10549978)" + meaning: wikidata:Q5774403 + comments: + - "Historical societies (Q5774403)" + - "Heritage societies / heemkundige kring (Q10549978)" + - "Philatelic societies (Q955824)" + - "Numismatic clubs" + - "Ephemera collectors" + + FEATURE_CUSTODIAN: + description: "Geographic feature that IS the heritage custodian (special case)" + comments: + - "SPECIAL: Also links to FeaturePlace (dual aspect)" + - "Used when custodian IS a geofeature (e.g., historic mansion as museum)" + - "Examples: Q1802963 (mansion), Q44539 (temple), Q16560 (palace)" + - "Requires BOTH custodian_type AND custodian_place.place_type" + + INTANGIBLE_HERITAGE_GROUP: + description: "Organization preserving intangible cultural heritage (Q105815710)" + meaning: wikidata:Q105815710 + comments: + - "Traditional performance groups" + - "Oral history societies" + - "Folklore organizations" + - "Indigenous cultural practice groups" + - "UNESCO intangible cultural heritage" + + MIXED: + description: "Institution with multiple simultaneous type classifications" + comments: + - "GHCID uses 'X' code" + - "actual_types slot documents all applicable types" + - "Example: Combined museum/archive/library facility" + + PERSONAL_COLLECTION: + description: "Private personal collection managed by individual collector (Q134886297)" + meaning: wikidata:Q134886297 + comments: + - "Individual collectors" + - "Family archives" + - "Private art collections (non-commercial)" + - "Distinguished from commercial galleries" + + HOLY_SACRED_SITE: + description: "Religious site with heritage collections (Q4588528)" + meaning: wikidata:Q4588528 + comments: + - "Church archives (parish records, baptismal registers)" + - "Monastery libraries (manuscript collections)" + - "Cathedral treasuries (liturgical objects, religious art)" + - "Temple museums (Buddhist artifacts)" + - "Mosque libraries (Islamic manuscripts)" + - "Synagogue archives (Jewish community records)" + - "Schema.org: schema:PlaceOfWorship" + + DIGITAL_PLATFORM: + description: "Born-digital heritage platform or online repository (Q28017710)" + meaning: wikidata:Q28017710 + comments: + - "Online archives (Internet Archive)" + - "Digital libraries (HathiTrust)" + - "Heritage aggregators (Europeana, DPLA)" + - "Virtual museums" + - "Schema.org: schema:WebSite, schema:SoftwareApplication" + + NON_PROFIT: + description: "Non-governmental heritage organization (Q163740)" + meaning: wikidata:Q163740 + comments: + - "Heritage preservation NGOs" + - "Cultural advocacy organizations" + - "Conservation societies managing heritage sites" + - "Schema.org: schema:NGO" + + TASTE_SCENT_HERITAGE: + description: "Organization preserving culinary or olfactory heritage" + comments: + - "Historic restaurants preserving culinary traditions" + - "Parfumeries with historic formulation archives" + - "Distilleries maintaining traditional production methods" + - "Culinary heritage museums" + - "Potential Wikidata: Q11707 (restaurant), Q185329 (perfumery), Q131734 (distillery)" + - "NEW CATEGORY - not yet formally recognized in Wikidata" diff --git a/schemas/20251121/linkml/archive/enums/README.md b/schemas/20251121/linkml/archive/enums/README.md index 53d0493547..3cf925125d 100644 --- a/schemas/20251121/linkml/archive/enums/README.md +++ b/schemas/20251121/linkml/archive/enums/README.md @@ -13,6 +13,7 @@ When an enum is converted to a class hierarchy, the original enum file is: | File | Archived Date | Replaced By | Rationale | |------|--------------|-------------|-----------| +| `ArchiveTypeEnum.yaml.archived_20250105` | 2025-01-05 | 96 archive class files (e.g., `AcademicArchive.yaml`, `MunicipalArchive.yaml`) | 144 enum values replaced by class hierarchy with dual-class pattern (custodian type + rico:RecordSetType), rich ontology mappings (Schema.org, RiC-O, CIDOC-CRM, Wikidata), and multilingual labels. Enum contained non-archive types (BRANCH, DEPARTMENT, ORGANIZATION) that didn't belong. | | `StaffRoleTypeEnum.yaml.archived_20251206` | 2025-12-06 | `StaffRole.yaml`, `StaffRoles.yaml` | Enum promoted to class hierarchy to capture formal title vs de facto work distinction, enable rich properties (role_category, common_variants, typical_domains) | ## See Also diff --git a/schemas/20251121/linkml/instances/enums/_index.yaml b/schemas/20251121/linkml/instances/enums/_index.yaml index c914d0b85d..d862d4fa4d 100644 --- a/schemas/20251121/linkml/instances/enums/_index.yaml +++ b/schemas/20251121/linkml/instances/enums/_index.yaml @@ -1,6 +1,6 @@ # Enum Instances Index # Generated: 2025-11-30 -# Updated: 2025-12-06 (Session 4 - WebPortalTypeEnum migrated to class hierarchy) +# Updated: 2026-01-05 (Session - CustodianPrimaryTypeEnum migrated to CustodianType class hierarchy) # # This file provides a manifest of all enum instance files # for programmatic loading by the frontend, RDF generators, and UML tools. @@ -12,29 +12,31 @@ description: | Each enum value is represented as a rich instance with extended metadata, ontology mappings, Wikidata links, and documentation for enrichment. -version: "1.8.0" +version: "1.9.0" generated: "2025-11-30T00:00:00Z" -last_updated: "2025-12-06T00:00:00Z" +last_updated: "2026-01-05T00:00:00Z" # Statistics statistics: - total_enums: 29 # Was 30, SocialMediaPlatformTypeEnum migrated to class hierarchy - completed_instances: 24 # Was 25, one more enum migrated to class hierarchy - total_values_elaborated: 623+ # Was 650+, minus 27 SocialMediaPlatformTypeEnum values - total_values_estimated: 650+ + total_enums: 28 # Was 29, CustodianPrimaryTypeEnum migrated to CustodianType class hierarchy + completed_instances: 23 # Was 24, one more enum migrated to class hierarchy + total_values_elaborated: 604+ # Was 623+, minus 19 CustodianPrimaryTypeEnum values + total_values_estimated: 630+ with_wikidata_mapping: 93% with_ontology_mapping: 96% # Completed Enum Instance Files completed: # === Original 8 (Session 1) === - - id: 1 - name: Custodian Type Classification - file: custodian_primary_type.yaml - enum: CustodianPrimaryTypeEnum - count: 19 - status: completed - description: "GLAMORCUBESFIXPHDNT taxonomy - top-level heritage custodian categories" + + # ID 1 (CustodianPrimaryTypeEnum) - MIGRATED to CustodianType class hierarchy + # See: modules/classes/CustodianType.yaml and 19 specialized subclasses + # Archived: archive/enums/CustodianPrimaryTypeEnum.yaml.archived_20260105 + # Instance archived: instances/enums/archive/custodian_primary_type.yaml.archived_20260105 + # Migration date: 2026-01-05 + # Rationale: Enum promoted to class hierarchy per Rule 9 (Enum-to-Class Promotion). + # CustodianType subclasses support rich properties (wikidata_entity, + # custodian_type_broader, etc.) and inheritance. Single Source of Truth principle. - id: 2 name: Organizational Change Events diff --git a/schemas/20251121/linkml/instances/enums/custodian_primary_type.yaml b/schemas/20251121/linkml/instances/enums/archive/custodian_primary_type.yaml.archived_20260105 similarity index 100% rename from schemas/20251121/linkml/instances/enums/custodian_primary_type.yaml rename to schemas/20251121/linkml/instances/enums/archive/custodian_primary_type.yaml.archived_20260105 diff --git a/schemas/20251121/linkml/manifest.json b/schemas/20251121/linkml/manifest.json index bafbd6fe7b..b2048d8542 100644 --- a/schemas/20251121/linkml/manifest.json +++ b/schemas/20251121/linkml/manifest.json @@ -1,2630 +1,3900 @@ { - "generated": "2025-12-08T17:42:08.000Z", - "version": "1.0.0", - "categories": [ - { - "name": "main", - "displayName": "Main Schema", - "files": [ + "generated": "2026-01-06T18:48:28.502818Z", + "version": "1.0.0", + "categories": [ { - "name": "Heritage Custodian Ontology", - "path": "01_custodian_name_modular.yaml", - "category": "main" + "name": "main", + "displayName": "Main Schema", + "files": [ + { + "name": "Heritage Custodian Ontology", + "path": "01_custodian_name_modular.yaml", + "category": "main" + } + ] + }, + { + "name": "class", + "displayName": "Classes", + "files": [ + { + "name": "AcademicArchive", + "path": "modules/classes/AcademicArchive.yaml", + "category": "classes" + }, + { + "name": "AcademicArchiveRecordSetTypes", + "path": "modules/classes/AcademicArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "AccessPolicy", + "path": "modules/classes/AccessPolicy.yaml", + "category": "classes" + }, + { + "name": "AdministrativeOffice", + "path": "modules/classes/AdministrativeOffice.yaml", + "category": "classes" + }, + { + "name": "AdvertisingRadioArchive", + "path": "modules/classes/AdvertisingRadioArchive.yaml", + "category": "classes" + }, + { + "name": "AdvertisingRadioArchiveRecordSetTypes", + "path": "modules/classes/AdvertisingRadioArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "AllocationAgency", + "path": "modules/classes/AllocationAgency.yaml", + "category": "classes" + }, + { + "name": "AnimalSoundArchive", + "path": "modules/classes/AnimalSoundArchive.yaml", + "category": "classes" + }, + { + "name": "AnimalSoundArchiveRecordSetTypes", + "path": "modules/classes/AnimalSoundArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Appellation", + "path": "modules/classes/Appellation.yaml", + "category": "classes" + }, + { + "name": "ArchitecturalArchive", + "path": "modules/classes/ArchitecturalArchive.yaml", + "category": "classes" + }, + { + "name": "ArchitecturalArchiveRecordSetTypes", + "path": "modules/classes/ArchitecturalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ArchivalLibrary", + "path": "modules/classes/ArchivalLibrary.yaml", + "category": "classes" + }, + { + "name": "ArchivalRepository", + "path": "modules/classes/ArchivalRepository.yaml", + "category": "classes" + }, + { + "name": "ArchiveAssociation", + "path": "modules/classes/ArchiveAssociation.yaml", + "category": "classes" + }, + { + "name": "ArchiveNetwork", + "path": "modules/classes/ArchiveNetwork.yaml", + "category": "classes" + }, + { + "name": "ArchiveOfInternationalOrganization", + "path": "modules/classes/ArchiveOfInternationalOrganization.yaml", + "category": "classes" + }, + { + "name": "ArchiveOfInternationalOrganizationRecordSetTypes", + "path": "modules/classes/ArchiveOfInternationalOrganizationRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ArchiveOrganizationType", + "path": "modules/classes/ArchiveOrganizationType.yaml", + "category": "classes" + }, + { + "name": "ArchivesForBuildingRecords", + "path": "modules/classes/ArchivesForBuildingRecords.yaml", + "category": "classes" + }, + { + "name": "ArchivesForBuildingRecordsRecordSetTypes", + "path": "modules/classes/ArchivesForBuildingRecordsRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ArchivesRegionales", + "path": "modules/classes/ArchivesRegionales.yaml", + "category": "classes" + }, + { + "name": "ArchivesRegionalesRecordSetTypes", + "path": "modules/classes/ArchivesRegionalesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ArtArchive", + "path": "modules/classes/ArtArchive.yaml", + "category": "classes" + }, + { + "name": "ArtArchiveRecordSetTypes", + "path": "modules/classes/ArtArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ArticlesOfAssociation", + "path": "modules/classes/ArticlesOfAssociation.yaml", + "category": "classes" + }, + { + "name": "AssociationArchive", + "path": "modules/classes/AssociationArchive.yaml", + "category": "classes" + }, + { + "name": "AudiovisualArchive", + "path": "modules/classes/AudiovisualArchive.yaml", + "category": "classes" + }, + { + "name": "AudiovisualArchiveRecordSetTypes", + "path": "modules/classes/AudiovisualArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "AuxiliaryDigitalPlatform", + "path": "modules/classes/AuxiliaryDigitalPlatform.yaml", + "category": "classes" + }, + { + "name": "AuxiliaryPlace", + "path": "modules/classes/AuxiliaryPlace.yaml", + "category": "classes" + }, + { + "name": "BankArchive", + "path": "modules/classes/BankArchive.yaml", + "category": "classes" + }, + { + "name": "BankArchiveRecordSetTypes", + "path": "modules/classes/BankArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Bildstelle", + "path": "modules/classes/Bildstelle.yaml", + "category": "classes" + }, + { + "name": "BioCustodianType", + "path": "modules/classes/BioCustodianType.yaml", + "category": "classes" + }, + { + "name": "BiologicalObject", + "path": "modules/classes/BiologicalObject.yaml", + "category": "classes" + }, + { + "name": "BranchOffice", + "path": "modules/classes/BranchOffice.yaml", + "category": "classes" + }, + { + "name": "Budget", + "path": "modules/classes/Budget.yaml", + "category": "classes" + }, + { + "name": "CallForApplication", + "path": "modules/classes/CallForApplication.yaml", + "category": "classes" + }, + { + "name": "CantonalArchive", + "path": "modules/classes/CantonalArchive.yaml", + "category": "classes" + }, + { + "name": "CantonalArchiveRecordSetTypes", + "path": "modules/classes/CantonalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "CastCollection", + "path": "modules/classes/CastCollection.yaml", + "category": "classes" + }, + { + "name": "CateringPlace", + "path": "modules/classes/CateringPlace.yaml", + "category": "classes" + }, + { + "name": "CathedralArchive", + "path": "modules/classes/CathedralArchive.yaml", + "category": "classes" + }, + { + "name": "CathedralArchiveRecordSetTypes", + "path": "modules/classes/CathedralArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ChurchArchive", + "path": "modules/classes/ChurchArchive.yaml", + "category": "classes" + }, + { + "name": "ChurchArchiveRecordSetTypes", + "path": "modules/classes/ChurchArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ChurchArchiveSweden", + "path": "modules/classes/ChurchArchiveSweden.yaml", + "category": "classes" + }, + { + "name": "ChurchArchiveSwedenRecordSetTypes", + "path": "modules/classes/ChurchArchiveSwedenRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Cinematheque", + "path": "modules/classes/Cinematheque.yaml", + "category": "classes" + }, + { + "name": "ClimateArchive", + "path": "modules/classes/ClimateArchive.yaml", + "category": "classes" + }, + { + "name": "ClimateArchiveRecordSetTypes", + "path": "modules/classes/ClimateArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ClosedSpace", + "path": "modules/classes/ClosedSpace.yaml", + "category": "classes" + }, + { + "name": "CollectingArchives", + "path": "modules/classes/CollectingArchives.yaml", + "category": "classes" + }, + { + "name": "CollectingArchivesRecordSetTypes", + "path": "modules/classes/CollectingArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Collection", + "path": "modules/classes/Collection.yaml", + "category": "classes" + }, + { + "name": "CollectionManagementSystem", + "path": "modules/classes/CollectionManagementSystem.yaml", + "category": "classes" + }, + { + "name": "CollectionType", + "path": "modules/classes/CollectionType.yaml", + "category": "classes" + }, + { + "name": "ComarcalArchive", + "path": "modules/classes/ComarcalArchive.yaml", + "category": "classes" + }, + { + "name": "ComarcalArchiveRecordSetTypes", + "path": "modules/classes/ComarcalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "CommercialOrganizationType", + "path": "modules/classes/CommercialOrganizationType.yaml", + "category": "classes" + }, + { + "name": "CommunityArchive", + "path": "modules/classes/CommunityArchive.yaml", + "category": "classes" + }, + { + "name": "CommunityArchiveRecordSetTypes", + "path": "modules/classes/CommunityArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "CompanyArchiveRecordSetTypes", + "path": "modules/classes/CompanyArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "CompanyArchives", + "path": "modules/classes/CompanyArchives.yaml", + "category": "classes" + }, + { + "name": "ConfidenceMeasure", + "path": "modules/classes/ConfidenceMeasure.yaml", + "category": "classes" + }, + { + "name": "ConflictStatus", + "path": "modules/classes/ConflictStatus.yaml", + "category": "classes" + }, + { + "name": "ConnectionNetwork", + "path": "modules/classes/ConnectionNetwork.yaml", + "category": "classes" + }, + { + "name": "ConservationLab", + "path": "modules/classes/ConservationLab.yaml", + "category": "classes" + }, + { + "name": "ConservationRecord", + "path": "modules/classes/ConservationRecord.yaml", + "category": "classes" + }, + { + "name": "Conservatoria", + "path": "modules/classes/Conservatoria.yaml", + "category": "classes" + }, + { + "name": "Container", + "path": "modules/classes/Container.yaml", + "category": "classes" + }, + { + "name": "ContributingAgency", + "path": "modules/classes/ContributingAgency.yaml", + "category": "classes" + }, + { + "name": "Country", + "path": "modules/classes/Country.yaml", + "category": "classes" + }, + { + "name": "CountyRecordOffice", + "path": "modules/classes/CountyRecordOffice.yaml", + "category": "classes" + }, + { + "name": "CourtRecords", + "path": "modules/classes/CourtRecords.yaml", + "category": "classes" + }, + { + "name": "CulturalInstitution", + "path": "modules/classes/CulturalInstitution.yaml", + "category": "classes" + }, + { + "name": "CurationActivity", + "path": "modules/classes/CurationActivity.yaml", + "category": "classes" + }, + { + "name": "CurrentArchive", + "path": "modules/classes/CurrentArchive.yaml", + "category": "classes" + }, + { + "name": "CurrentArchiveRecordSetTypes", + "path": "modules/classes/CurrentArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Custodian", + "path": "modules/classes/Custodian.yaml", + "category": "classes" + }, + { + "name": "CustodianAdministration", + "path": "modules/classes/CustodianAdministration.yaml", + "category": "classes" + }, + { + "name": "CustodianArchive", + "path": "modules/classes/CustodianArchive.yaml", + "category": "classes" + }, + { + "name": "CustodianArchiveRecordSetTypes", + "path": "modules/classes/CustodianArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "CustodianCollection", + "path": "modules/classes/CustodianCollection.yaml", + "category": "classes" + }, + { + "name": "CustodianLegalStatus", + "path": "modules/classes/CustodianLegalStatus.yaml", + "category": "classes" + }, + { + "name": "CustodianName", + "path": "modules/classes/CustodianName.yaml", + "category": "classes" + }, + { + "name": "CustodianObservation", + "path": "modules/classes/CustodianObservation.yaml", + "category": "classes" + }, + { + "name": "CustodianPlace", + "path": "modules/classes/CustodianPlace.yaml", + "category": "classes" + }, + { + "name": "CustodianTimelineEvent", + "path": "modules/classes/CustodianTimelineEvent.yaml", + "category": "classes" + }, + { + "name": "CustodianType", + "path": "modules/classes/CustodianType.yaml", + "category": "classes" + }, + { + "name": "DarkArchive", + "path": "modules/classes/DarkArchive.yaml", + "category": "classes" + }, + { + "name": "DarkArchiveRecordSetTypes", + "path": "modules/classes/DarkArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "DataLicensePolicy", + "path": "modules/classes/DataLicensePolicy.yaml", + "category": "classes" + }, + { + "name": "DataServiceEndpoint", + "path": "modules/classes/DataServiceEndpoint.yaml", + "category": "classes" + }, + { + "name": "DataServiceEndpointType", + "path": "modules/classes/DataServiceEndpointType.yaml", + "category": "classes" + }, + { + "name": "DataServiceEndpointTypes", + "path": "modules/classes/DataServiceEndpointTypes.yaml", + "category": "classes" + }, + { + "name": "Department", + "path": "modules/classes/Department.yaml", + "category": "classes" + }, + { + "name": "DepartmentalArchives", + "path": "modules/classes/DepartmentalArchives.yaml", + "category": "classes" + }, + { + "name": "DepartmentalArchivesRecordSetTypes", + "path": "modules/classes/DepartmentalArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "DepositArchive", + "path": "modules/classes/DepositArchive.yaml", + "category": "classes" + }, + { + "name": "DepositArchiveRecordSetTypes", + "path": "modules/classes/DepositArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "DigitalArchive", + "path": "modules/classes/DigitalArchive.yaml", + "category": "classes" + }, + { + "name": "DigitalArchiveRecordSetTypes", + "path": "modules/classes/DigitalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "DigitalPlatform", + "path": "modules/classes/DigitalPlatform.yaml", + "category": "classes" + }, + { + "name": "DigitalPlatformType", + "path": "modules/classes/DigitalPlatformType.yaml", + "category": "classes" + }, + { + "name": "DigitalPlatformTypes", + "path": "modules/classes/DigitalPlatformTypes.yaml", + "category": "classes" + }, + { + "name": "DimArchives", + "path": "modules/classes/DimArchives.yaml", + "category": "classes" + }, + { + "name": "DimArchivesRecordSetTypes", + "path": "modules/classes/DimArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "DiocesanArchive", + "path": "modules/classes/DiocesanArchive.yaml", + "category": "classes" + }, + { + "name": "DiocesanArchiveRecordSetTypes", + "path": "modules/classes/DiocesanArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "DistrictArchiveGermany", + "path": "modules/classes/DistrictArchiveGermany.yaml", + "category": "classes" + }, + { + "name": "DistrictArchiveGermanyRecordSetTypes", + "path": "modules/classes/DistrictArchiveGermanyRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "DistritalArchive", + "path": "modules/classes/DistritalArchive.yaml", + "category": "classes" + }, + { + "name": "DistritalArchiveRecordSetTypes", + "path": "modules/classes/DistritalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Division", + "path": "modules/classes/Division.yaml", + "category": "classes" + }, + { + "name": "DocumentationCentre", + "path": "modules/classes/DocumentationCentre.yaml", + "category": "classes" + }, + { + "name": "DonationScheme", + "path": "modules/classes/DonationScheme.yaml", + "category": "classes" + }, + { + "name": "EADDownload", + "path": "modules/classes/EADDownload.yaml", + "category": "classes" + }, + { + "name": "EconomicArchive", + "path": "modules/classes/EconomicArchive.yaml", + "category": "classes" + }, + { + "name": "EconomicArchiveRecordSetTypes", + "path": "modules/classes/EconomicArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "EducationCenter", + "path": "modules/classes/EducationCenter.yaml", + "category": "classes" + }, + { + "name": "EducationCredential", + "path": "modules/classes/EducationCredential.yaml", + "category": "classes" + }, + { + "name": "EducationProviderType", + "path": "modules/classes/EducationProviderType.yaml", + "category": "classes" + }, + { + "name": "EncompassingBody", + "path": "modules/classes/EncompassingBody.yaml", + "category": "classes" + }, + { + "name": "EnvironmentalZone", + "path": "modules/classes/EnvironmentalZone.yaml", + "category": "classes" + }, + { + "name": "Event", + "path": "modules/classes/Event.yaml", + "category": "classes" + }, + { + "name": "ExhibitedObject", + "path": "modules/classes/ExhibitedObject.yaml", + "category": "classes" + }, + { + "name": "Exhibition", + "path": "modules/classes/Exhibition.yaml", + "category": "classes" + }, + { + "name": "ExhibitionCatalog", + "path": "modules/classes/ExhibitionCatalog.yaml", + "category": "classes" + }, + { + "name": "ExhibitionSpace", + "path": "modules/classes/ExhibitionSpace.yaml", + "category": "classes" + }, + { + "name": "ExtractionMetadata", + "path": "modules/classes/ExtractionMetadata.yaml", + "category": "classes" + }, + { + "name": "FeatureCustodianType", + "path": "modules/classes/FeatureCustodianType.yaml", + "category": "classes" + }, + { + "name": "FeaturePlace", + "path": "modules/classes/FeaturePlace.yaml", + "category": "classes" + }, + { + "name": "FileAPI", + "path": "modules/classes/FileAPI.yaml", + "category": "classes" + }, + { + "name": "FilmArchive", + "path": "modules/classes/FilmArchive.yaml", + "category": "classes" + }, + { + "name": "FilmArchiveRecordSetTypes", + "path": "modules/classes/FilmArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "FinancialStatement", + "path": "modules/classes/FinancialStatement.yaml", + "category": "classes" + }, + { + "name": "FindingAid", + "path": "modules/classes/FindingAid.yaml", + "category": "classes" + }, + { + "name": "FindingAidType", + "path": "modules/classes/FindingAidType.yaml", + "category": "classes" + }, + { + "name": "Foremalarkiv", + "path": "modules/classes/Foremalarkiv.yaml", + "category": "classes" + }, + { + "name": "FoundationArchive", + "path": "modules/classes/FoundationArchive.yaml", + "category": "classes" + }, + { + "name": "FoundationArchiveRecordSetTypes", + "path": "modules/classes/FoundationArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "FreeArchive", + "path": "modules/classes/FreeArchive.yaml", + "category": "classes" + }, + { + "name": "FreeArchiveRecordSetTypes", + "path": "modules/classes/FreeArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "FrenchPrivateArchives", + "path": "modules/classes/FrenchPrivateArchives.yaml", + "category": "classes" + }, + { + "name": "FrenchPrivateArchivesRecordSetTypes", + "path": "modules/classes/FrenchPrivateArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "FundingAgenda", + "path": "modules/classes/FundingAgenda.yaml", + "category": "classes" + }, + { + "name": "FundingRequirement", + "path": "modules/classes/FundingRequirement.yaml", + "category": "classes" + }, + { + "name": "Fylkesarkiv", + "path": "modules/classes/Fylkesarkiv.yaml", + "category": "classes" + }, + { + "name": "GLAM", + "path": "modules/classes/GLAM.yaml", + "category": "classes" + }, + { + "name": "GalleryType", + "path": "modules/classes/GalleryType.yaml", + "category": "classes" + }, + { + "name": "GeoSpatialPlace", + "path": "modules/classes/GeoSpatialPlace.yaml", + "category": "classes" + }, + { + "name": "GiftShop", + "path": "modules/classes/GiftShop.yaml", + "category": "classes" + }, + { + "name": "GovernmentArchive", + "path": "modules/classes/GovernmentArchive.yaml", + "category": "classes" + }, + { + "name": "GovernmentArchiveRecordSetTypes", + "path": "modules/classes/GovernmentArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "HeritageRelevance", + "path": "modules/classes/HeritageRelevance.yaml", + "category": "classes" + }, + { + "name": "HeritageSocietyType", + "path": "modules/classes/HeritageSocietyType.yaml", + "category": "classes" + }, + { + "name": "HistoricBuilding", + "path": "modules/classes/HistoricBuilding.yaml", + "category": "classes" + }, + { + "name": "HistoricalArchive", + "path": "modules/classes/HistoricalArchive.yaml", + "category": "classes" + }, + { + "name": "HistoricalArchiveRecordSetTypes", + "path": "modules/classes/HistoricalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "HolySacredSiteType", + "path": "modules/classes/HolySacredSiteType.yaml", + "category": "classes" + }, + { + "name": "HospitalArchive", + "path": "modules/classes/HospitalArchive.yaml", + "category": "classes" + }, + { + "name": "HospitalArchiveRecordSetTypes", + "path": "modules/classes/HospitalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "HouseArchive", + "path": "modules/classes/HouseArchive.yaml", + "category": "classes" + }, + { + "name": "HouseArchiveRecordSetTypes", + "path": "modules/classes/HouseArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "IIPImageServer", + "path": "modules/classes/IIPImageServer.yaml", + "category": "classes" + }, + { + "name": "IconographicArchives", + "path": "modules/classes/IconographicArchives.yaml", + "category": "classes" + }, + { + "name": "IconographicArchivesRecordSetTypes", + "path": "modules/classes/IconographicArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Identifier", + "path": "modules/classes/Identifier.yaml", + "category": "classes" + }, + { + "name": "InformationCarrier", + "path": "modules/classes/InformationCarrier.yaml", + "category": "classes" + }, + { + "name": "Institution", + "path": "modules/classes/Institution.yaml", + "category": "classes" + }, + { + "name": "InstitutionalArchive", + "path": "modules/classes/InstitutionalArchive.yaml", + "category": "classes" + }, + { + "name": "InstitutionalArchiveRecordSetTypes", + "path": "modules/classes/InstitutionalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "InstitutionalRepository", + "path": "modules/classes/InstitutionalRepository.yaml", + "category": "classes" + }, + { + "name": "IntangibleHeritageEvent", + "path": "modules/classes/IntangibleHeritageEvent.yaml", + "category": "classes" + }, + { + "name": "IntangibleHeritageForm", + "path": "modules/classes/IntangibleHeritageForm.yaml", + "category": "classes" + }, + { + "name": "IntangibleHeritageGroupType", + "path": "modules/classes/IntangibleHeritageGroupType.yaml", + "category": "classes" + }, + { + "name": "IntangibleHeritagePerformance", + "path": "modules/classes/IntangibleHeritagePerformance.yaml", + "category": "classes" + }, + { + "name": "InternetOfThings", + "path": "modules/classes/InternetOfThings.yaml", + "category": "classes" + }, + { + "name": "JointArchives", + "path": "modules/classes/JointArchives.yaml", + "category": "classes" + }, + { + "name": "JointArchivesRecordSetTypes", + "path": "modules/classes/JointArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Jurisdiction", + "path": "modules/classes/Jurisdiction.yaml", + "category": "classes" + }, + { + "name": "Kustodie", + "path": "modules/classes/Kustodie.yaml", + "category": "classes" + }, + { + "name": "LGBTArchive", + "path": "modules/classes/LGBTArchive.yaml", + "category": "classes" + }, + { + "name": "LGBTArchiveRecordSetTypes", + "path": "modules/classes/LGBTArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "LLMResponse", + "path": "modules/classes/LLMResponse.yaml", + "category": "classes" + }, + { + "name": "Landsarkiv", + "path": "modules/classes/Landsarkiv.yaml", + "category": "classes" + }, + { + "name": "LanguageCode", + "path": "modules/classes/LanguageCode.yaml", + "category": "classes" + }, + { + "name": "LanguageProficiency", + "path": "modules/classes/LanguageProficiency.yaml", + "category": "classes" + }, + { + "name": "LegalEntityType", + "path": "modules/classes/LegalEntityType.yaml", + "category": "classes" + }, + { + "name": "LegalForm", + "path": "modules/classes/LegalForm.yaml", + "category": "classes" + }, + { + "name": "LegalName", + "path": "modules/classes/LegalName.yaml", + "category": "classes" + }, + { + "name": "LegalResponsibilityCollection", + "path": "modules/classes/LegalResponsibilityCollection.yaml", + "category": "classes" + }, + { + "name": "LibraryType", + "path": "modules/classes/LibraryType.yaml", + "category": "classes" + }, + { + "name": "LightArchives", + "path": "modules/classes/LightArchives.yaml", + "category": "classes" + }, + { + "name": "LightArchivesRecordSetTypes", + "path": "modules/classes/LightArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "LinkedInProfile", + "path": "modules/classes/LinkedInProfile.yaml", + "category": "classes" + }, + { + "name": "LiteraryArchive", + "path": "modules/classes/LiteraryArchive.yaml", + "category": "classes" + }, + { + "name": "LiteraryArchiveRecordSetTypes", + "path": "modules/classes/LiteraryArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Loan", + "path": "modules/classes/Loan.yaml", + "category": "classes" + }, + { + "name": "LocalGovernmentArchive", + "path": "modules/classes/LocalGovernmentArchive.yaml", + "category": "classes" + }, + { + "name": "LocalGovernmentArchiveRecordSetTypes", + "path": "modules/classes/LocalGovernmentArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "LocalHeritageInstitutionSweden", + "path": "modules/classes/LocalHeritageInstitutionSweden.yaml", + "category": "classes" + }, + { + "name": "LocalHistoryArchive", + "path": "modules/classes/LocalHistoryArchive.yaml", + "category": "classes" + }, + { + "name": "LocalHistoryArchiveRecordSetTypes", + "path": "modules/classes/LocalHistoryArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "LocationLibrary", + "path": "modules/classes/LocationLibrary.yaml", + "category": "classes" + }, + { + "name": "METSAPI", + "path": "modules/classes/METSAPI.yaml", + "category": "classes" + }, + { + "name": "MailingListArchive", + "path": "modules/classes/MailingListArchive.yaml", + "category": "classes" + }, + { + "name": "MailingListArchiveRecordSetTypes", + "path": "modules/classes/MailingListArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "MediaArchive", + "path": "modules/classes/MediaArchive.yaml", + "category": "classes" + }, + { + "name": "MediaArchiveRecordSetTypes", + "path": "modules/classes/MediaArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Medienzentrum", + "path": "modules/classes/Medienzentrum.yaml", + "category": "classes" + }, + { + "name": "MemoryInstitution", + "path": "modules/classes/MemoryInstitution.yaml", + "category": "classes" + }, + { + "name": "MilitaryArchive", + "path": "modules/classes/MilitaryArchive.yaml", + "category": "classes" + }, + { + "name": "MilitaryArchiveRecordSetTypes", + "path": "modules/classes/MilitaryArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "MissionStatement", + "path": "modules/classes/MissionStatement.yaml", + "category": "classes" + }, + { + "name": "MixedCustodianType", + "path": "modules/classes/MixedCustodianType.yaml", + "category": "classes" + }, + { + "name": "MonasteryArchive", + "path": "modules/classes/MonasteryArchive.yaml", + "category": "classes" + }, + { + "name": "MonasteryArchiveRecordSetTypes", + "path": "modules/classes/MonasteryArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "MunicipalArchive", + "path": "modules/classes/MunicipalArchive.yaml", + "category": "classes" + }, + { + "name": "MunicipalArchiveRecordSetTypes", + "path": "modules/classes/MunicipalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "MuseumArchive", + "path": "modules/classes/MuseumArchive.yaml", + "category": "classes" + }, + { + "name": "MuseumArchiveRecordSetTypes", + "path": "modules/classes/MuseumArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "MuseumType", + "path": "modules/classes/MuseumType.yaml", + "category": "classes" + }, + { + "name": "MusicArchive", + "path": "modules/classes/MusicArchive.yaml", + "category": "classes" + }, + { + "name": "MusicArchiveRecordSetTypes", + "path": "modules/classes/MusicArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Nachlass", + "path": "modules/classes/Nachlass.yaml", + "category": "classes" + }, + { + "name": "NationalArchives", + "path": "modules/classes/NationalArchives.yaml", + "category": "classes" + }, + { + "name": "NationalArchivesRecordSetTypes", + "path": "modules/classes/NationalArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "NationalTreasure", + "path": "modules/classes/NationalTreasure.yaml", + "category": "classes" + }, + { + "name": "NationalTreasureOfFrance", + "path": "modules/classes/NationalTreasureOfFrance.yaml", + "category": "classes" + }, + { + "name": "NewspaperClippingsArchive", + "path": "modules/classes/NewspaperClippingsArchive.yaml", + "category": "classes" + }, + { + "name": "NewspaperClippingsArchiveRecordSetTypes", + "path": "modules/classes/NewspaperClippingsArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "NobilityArchive", + "path": "modules/classes/NobilityArchive.yaml", + "category": "classes" + }, + { + "name": "NobilityArchiveRecordSetTypes", + "path": "modules/classes/NobilityArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "NonProfitType", + "path": "modules/classes/NonProfitType.yaml", + "category": "classes" + }, + { + "name": "NotarialArchive", + "path": "modules/classes/NotarialArchive.yaml", + "category": "classes" + }, + { + "name": "NotarialArchiveRecordSetTypes", + "path": "modules/classes/NotarialArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "OAIPMHEndpoint", + "path": "modules/classes/OAIPMHEndpoint.yaml", + "category": "classes" + }, + { + "name": "OfficialInstitutionType", + "path": "modules/classes/OfficialInstitutionType.yaml", + "category": "classes" + }, + { + "name": "OnlineNewsArchive", + "path": "modules/classes/OnlineNewsArchive.yaml", + "category": "classes" + }, + { + "name": "OnlineNewsArchiveRecordSetTypes", + "path": "modules/classes/OnlineNewsArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Organization", + "path": "modules/classes/Organization.yaml", + "category": "classes" + }, + { + "name": "OrganizationBranch", + "path": "modules/classes/OrganizationBranch.yaml", + "category": "classes" + }, + { + "name": "OrganizationalChangeEvent", + "path": "modules/classes/OrganizationalChangeEvent.yaml", + "category": "classes" + }, + { + "name": "OrganizationalStructure", + "path": "modules/classes/OrganizationalStructure.yaml", + "category": "classes" + }, + { + "name": "OrganizationalSubdivision", + "path": "modules/classes/OrganizationalSubdivision.yaml", + "category": "classes" + }, + { + "name": "OutdoorSite", + "path": "modules/classes/OutdoorSite.yaml", + "category": "classes" + }, + { + "name": "ParentOrganizationUnit", + "path": "modules/classes/ParentOrganizationUnit.yaml", + "category": "classes" + }, + { + "name": "ParishArchive", + "path": "modules/classes/ParishArchive.yaml", + "category": "classes" + }, + { + "name": "ParishArchiveRecordSetTypes", + "path": "modules/classes/ParishArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ParliamentaryArchives", + "path": "modules/classes/ParliamentaryArchives.yaml", + "category": "classes" + }, + { + "name": "ParliamentaryArchivesRecordSetTypes", + "path": "modules/classes/ParliamentaryArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "PartyArchive", + "path": "modules/classes/PartyArchive.yaml", + "category": "classes" + }, + { + "name": "PartyArchiveRecordSetTypes", + "path": "modules/classes/PartyArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "PerformingArtsArchive", + "path": "modules/classes/PerformingArtsArchive.yaml", + "category": "classes" + }, + { + "name": "PerformingArtsArchiveRecordSetTypes", + "path": "modules/classes/PerformingArtsArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Person", + "path": "modules/classes/Person.yaml", + "category": "classes" + }, + { + "name": "PersonConnection", + "path": "modules/classes/PersonConnection.yaml", + "category": "classes" + }, + { + "name": "PersonName", + "path": "modules/classes/PersonName.yaml", + "category": "classes" + }, + { + "name": "PersonObservation", + "path": "modules/classes/PersonObservation.yaml", + "category": "classes" + }, + { + "name": "PersonOrOrganization", + "path": "modules/classes/PersonOrOrganization.yaml", + "category": "classes" + }, + { + "name": "PersonWebClaim", + "path": "modules/classes/PersonWebClaim.yaml", + "category": "classes" + }, + { + "name": "PersonalCollectionType", + "path": "modules/classes/PersonalCollectionType.yaml", + "category": "classes" + }, + { + "name": "PersonalLibrary", + "path": "modules/classes/PersonalLibrary.yaml", + "category": "classes" + }, + { + "name": "Personenstandsarchiv", + "path": "modules/classes/Personenstandsarchiv.yaml", + "category": "classes" + }, + { + "name": "PhotoArchive", + "path": "modules/classes/PhotoArchive.yaml", + "category": "classes" + }, + { + "name": "PhotoArchiveRecordSetTypes", + "path": "modules/classes/PhotoArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "PhotographCollection", + "path": "modules/classes/PhotographCollection.yaml", + "category": "classes" + }, + { + "name": "PoliticalArchive", + "path": "modules/classes/PoliticalArchive.yaml", + "category": "classes" + }, + { + "name": "PoliticalArchiveRecordSetTypes", + "path": "modules/classes/PoliticalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "PostcustodialArchive", + "path": "modules/classes/PostcustodialArchive.yaml", + "category": "classes" + }, + { + "name": "PostcustodialArchiveRecordSetTypes", + "path": "modules/classes/PostcustodialArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "PressArchive", + "path": "modules/classes/PressArchive.yaml", + "category": "classes" + }, + { + "name": "PressArchiveRecordSetTypes", + "path": "modules/classes/PressArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "PrimaryDigitalPresenceAssertion", + "path": "modules/classes/PrimaryDigitalPresenceAssertion.yaml", + "category": "classes" + }, + { + "name": "PrintRoom", + "path": "modules/classes/PrintRoom.yaml", + "category": "classes" + }, + { + "name": "Project", + "path": "modules/classes/Project.yaml", + "category": "classes" + }, + { + "name": "ProvenanceEvent", + "path": "modules/classes/ProvenanceEvent.yaml", + "category": "classes" + }, + { + "name": "ProvincialArchive", + "path": "modules/classes/ProvincialArchive.yaml", + "category": "classes" + }, + { + "name": "ProvincialArchiveRecordSetTypes", + "path": "modules/classes/ProvincialArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ProvincialHistoricalArchive", + "path": "modules/classes/ProvincialHistoricalArchive.yaml", + "category": "classes" + }, + { + "name": "ProvincialHistoricalArchiveRecordSetTypes", + "path": "modules/classes/ProvincialHistoricalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "PublicArchive", + "path": "modules/classes/PublicArchive.yaml", + "category": "classes" + }, + { + "name": "PublicArchiveRecordSetTypes", + "path": "modules/classes/PublicArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "PublicArchivesInFrance", + "path": "modules/classes/PublicArchivesInFrance.yaml", + "category": "classes" + }, + { + "name": "PublicArchivesInFranceRecordSetTypes", + "path": "modules/classes/PublicArchivesInFranceRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "PublicSpace", + "path": "modules/classes/PublicSpace.yaml", + "category": "classes" + }, + { + "name": "RadioArchive", + "path": "modules/classes/RadioArchive.yaml", + "category": "classes" + }, + { + "name": "RadioArchiveRecordSetTypes", + "path": "modules/classes/RadioArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ReadingRoom", + "path": "modules/classes/ReadingRoom.yaml", + "category": "classes" + }, + { + "name": "ReadingRoomAnnex", + "path": "modules/classes/ReadingRoomAnnex.yaml", + "category": "classes" + }, + { + "name": "ReconstructedEntity", + "path": "modules/classes/ReconstructedEntity.yaml", + "category": "classes" + }, + { + "name": "ReconstructionActivity", + "path": "modules/classes/ReconstructionActivity.yaml", + "category": "classes" + }, + { + "name": "ReconstructionAgent", + "path": "modules/classes/ReconstructionAgent.yaml", + "category": "classes" + }, + { + "name": "RegionalArchive", + "path": "modules/classes/RegionalArchive.yaml", + "category": "classes" + }, + { + "name": "RegionalArchiveRecordSetTypes", + "path": "modules/classes/RegionalArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "RegionalArchivesInIceland", + "path": "modules/classes/RegionalArchivesInIceland.yaml", + "category": "classes" + }, + { + "name": "RegionalArchivesInIcelandRecordSetTypes", + "path": "modules/classes/RegionalArchivesInIcelandRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "RegionalEconomicArchive", + "path": "modules/classes/RegionalEconomicArchive.yaml", + "category": "classes" + }, + { + "name": "RegionalEconomicArchiveRecordSetTypes", + "path": "modules/classes/RegionalEconomicArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "RegionalHistoricCenter", + "path": "modules/classes/RegionalHistoricCenter.yaml", + "category": "classes" + }, + { + "name": "RegionalStateArchives", + "path": "modules/classes/RegionalStateArchives.yaml", + "category": "classes" + }, + { + "name": "RegionalStateArchivesRecordSetTypes", + "path": "modules/classes/RegionalStateArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "RegistrationAuthority", + "path": "modules/classes/RegistrationAuthority.yaml", + "category": "classes" + }, + { + "name": "RegistrationInfo", + "path": "modules/classes/RegistrationInfo.yaml", + "category": "classes" + }, + { + "name": "ReligiousArchive", + "path": "modules/classes/ReligiousArchive.yaml", + "category": "classes" + }, + { + "name": "ReligiousArchiveRecordSetTypes", + "path": "modules/classes/ReligiousArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ResearchCenter", + "path": "modules/classes/ResearchCenter.yaml", + "category": "classes" + }, + { + "name": "ResearchOrganizationType", + "path": "modules/classes/ResearchOrganizationType.yaml", + "category": "classes" + }, + { + "name": "SchoolArchive", + "path": "modules/classes/SchoolArchive.yaml", + "category": "classes" + }, + { + "name": "SchoolArchiveRecordSetTypes", + "path": "modules/classes/SchoolArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ScientificArchive", + "path": "modules/classes/ScientificArchive.yaml", + "category": "classes" + }, + { + "name": "ScientificArchiveRecordSetTypes", + "path": "modules/classes/ScientificArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ScientificTechnicAndIndustrialCultureCenter", + "path": "modules/classes/ScientificTechnicAndIndustrialCultureCenter.yaml", + "category": "classes" + }, + { + "name": "SearchAPI", + "path": "modules/classes/SearchAPI.yaml", + "category": "classes" + }, + { + "name": "SectorOfArchivesInSweden", + "path": "modules/classes/SectorOfArchivesInSweden.yaml", + "category": "classes" + }, + { + "name": "SectorOfArchivesInSwedenRecordSetTypes", + "path": "modules/classes/SectorOfArchivesInSwedenRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "SecurityArchives", + "path": "modules/classes/SecurityArchives.yaml", + "category": "classes" + }, + { + "name": "SecurityArchivesRecordSetTypes", + "path": "modules/classes/SecurityArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "ServiceArea", + "path": "modules/classes/ServiceArea.yaml", + "category": "classes" + }, + { + "name": "Settlement", + "path": "modules/classes/Settlement.yaml", + "category": "classes" + }, + { + "name": "SocialMediaContent", + "path": "modules/classes/SocialMediaContent.yaml", + "category": "classes" + }, + { + "name": "SocialMediaPlatformType", + "path": "modules/classes/SocialMediaPlatformType.yaml", + "category": "classes" + }, + { + "name": "SocialMediaPlatformTypes", + "path": "modules/classes/SocialMediaPlatformTypes.yaml", + "category": "classes" + }, + { + "name": "SocialMediaPost", + "path": "modules/classes/SocialMediaPost.yaml", + "category": "classes" + }, + { + "name": "SocialMediaPostType", + "path": "modules/classes/SocialMediaPostType.yaml", + "category": "classes" + }, + { + "name": "SocialMediaPostTypes", + "path": "modules/classes/SocialMediaPostTypes.yaml", + "category": "classes" + }, + { + "name": "SocialMediaProfile", + "path": "modules/classes/SocialMediaProfile.yaml", + "category": "classes" + }, + { + "name": "SocialSpace", + "path": "modules/classes/SocialSpace.yaml", + "category": "classes" + }, + { + "name": "SoundArchive", + "path": "modules/classes/SoundArchive.yaml", + "category": "classes" + }, + { + "name": "SoundArchiveRecordSetTypes", + "path": "modules/classes/SoundArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "SourceDocument", + "path": "modules/classes/SourceDocument.yaml", + "category": "classes" + }, + { + "name": "SpecialCollection", + "path": "modules/classes/SpecialCollection.yaml", + "category": "classes" + }, + { + "name": "SpecializedArchive", + "path": "modules/classes/SpecializedArchive.yaml", + "category": "classes" + }, + { + "name": "SpecializedArchiveRecordSetTypes", + "path": "modules/classes/SpecializedArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "SpecializedArchivesCzechia", + "path": "modules/classes/SpecializedArchivesCzechia.yaml", + "category": "classes" + }, + { + "name": "SpecializedArchivesCzechiaRecordSetTypes", + "path": "modules/classes/SpecializedArchivesCzechiaRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "StaffRole", + "path": "modules/classes/StaffRole.yaml", + "category": "classes" + }, + { + "name": "StaffRoles", + "path": "modules/classes/StaffRoles.yaml", + "category": "classes" + }, + { + "name": "Standard", + "path": "modules/classes/Standard.yaml", + "category": "classes" + }, + { + "name": "StandardsOrganization", + "path": "modules/classes/StandardsOrganization.yaml", + "category": "classes" + }, + { + "name": "StateArchives", + "path": "modules/classes/StateArchives.yaml", + "category": "classes" + }, + { + "name": "StateArchivesRecordSetTypes", + "path": "modules/classes/StateArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "StateArchivesSection", + "path": "modules/classes/StateArchivesSection.yaml", + "category": "classes" + }, + { + "name": "StateArchivesSectionRecordSetTypes", + "path": "modules/classes/StateArchivesSectionRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "StateDistrictArchive", + "path": "modules/classes/StateDistrictArchive.yaml", + "category": "classes" + }, + { + "name": "StateDistrictArchiveRecordSetTypes", + "path": "modules/classes/StateDistrictArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "StateRegionalArchiveCzechia", + "path": "modules/classes/StateRegionalArchiveCzechia.yaml", + "category": "classes" + }, + { + "name": "StateRegionalArchiveCzechiaRecordSetTypes", + "path": "modules/classes/StateRegionalArchiveCzechiaRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "Storage", + "path": "modules/classes/Storage.yaml", + "category": "classes" + }, + { + "name": "StorageCondition", + "path": "modules/classes/StorageCondition.yaml", + "category": "classes" + }, + { + "name": "StorageConditionPolicy", + "path": "modules/classes/StorageConditionPolicy.yaml", + "category": "classes" + }, + { + "name": "StorageType", + "path": "modules/classes/StorageType.yaml", + "category": "classes" + }, + { + "name": "StorageUnit", + "path": "modules/classes/StorageUnit.yaml", + "category": "classes" + }, + { + "name": "Subregion", + "path": "modules/classes/Subregion.yaml", + "category": "classes" + }, + { + "name": "SubsidiaryOrganization", + "path": "modules/classes/SubsidiaryOrganization.yaml", + "category": "classes" + }, + { + "name": "TasteScentHeritageType", + "path": "modules/classes/TasteScentHeritageType.yaml", + "category": "classes" + }, + { + "name": "TelevisionArchive", + "path": "modules/classes/TelevisionArchive.yaml", + "category": "classes" + }, + { + "name": "TelevisionArchiveRecordSetTypes", + "path": "modules/classes/TelevisionArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "TemporaryLocation", + "path": "modules/classes/TemporaryLocation.yaml", + "category": "classes" + }, + { + "name": "TentativeWorldHeritageSite", + "path": "modules/classes/TentativeWorldHeritageSite.yaml", + "category": "classes" + }, + { + "name": "TimeSpan", + "path": "modules/classes/TimeSpan.yaml", + "category": "classes" + }, + { + "name": "TradeRegister", + "path": "modules/classes/TradeRegister.yaml", + "category": "classes" + }, + { + "name": "TradeUnionArchive", + "path": "modules/classes/TradeUnionArchive.yaml", + "category": "classes" + }, + { + "name": "TradeUnionArchiveRecordSetTypes", + "path": "modules/classes/TradeUnionArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "UniversityArchive", + "path": "modules/classes/UniversityArchive.yaml", + "category": "classes" + }, + { + "name": "UniversityArchiveRecordSetTypes", + "path": "modules/classes/UniversityArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "UnspecifiedType", + "path": "modules/classes/UnspecifiedType.yaml", + "category": "classes" + }, + { + "name": "Vereinsarchiv", + "path": "modules/classes/Vereinsarchiv.yaml", + "category": "classes" + }, + { + "name": "Verlagsarchiv", + "path": "modules/classes/Verlagsarchiv.yaml", + "category": "classes" + }, + { + "name": "Verwaltungsarchiv", + "path": "modules/classes/Verwaltungsarchiv.yaml", + "category": "classes" + }, + { + "name": "VideoAnnotation", + "path": "modules/classes/VideoAnnotation.yaml", + "category": "classes" + }, + { + "name": "VideoAnnotationTypes", + "path": "modules/classes/VideoAnnotationTypes.yaml", + "category": "classes" + }, + { + "name": "VideoAudioAnnotation", + "path": "modules/classes/VideoAudioAnnotation.yaml", + "category": "classes" + }, + { + "name": "VideoChapter", + "path": "modules/classes/VideoChapter.yaml", + "category": "classes" + }, + { + "name": "VideoPost", + "path": "modules/classes/VideoPost.yaml", + "category": "classes" + }, + { + "name": "VideoSubtitle", + "path": "modules/classes/VideoSubtitle.yaml", + "category": "classes" + }, + { + "name": "VideoTextContent", + "path": "modules/classes/VideoTextContent.yaml", + "category": "classes" + }, + { + "name": "VideoTimeSegment", + "path": "modules/classes/VideoTimeSegment.yaml", + "category": "classes" + }, + { + "name": "VideoTranscript", + "path": "modules/classes/VideoTranscript.yaml", + "category": "classes" + }, + { + "name": "VirtualMapLibrary", + "path": "modules/classes/VirtualMapLibrary.yaml", + "category": "classes" + }, + { + "name": "Warehouse", + "path": "modules/classes/Warehouse.yaml", + "category": "classes" + }, + { + "name": "WebArchive", + "path": "modules/classes/WebArchive.yaml", + "category": "classes" + }, + { + "name": "WebArchiveRecordSetTypes", + "path": "modules/classes/WebArchiveRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "WebClaim", + "path": "modules/classes/WebClaim.yaml", + "category": "classes" + }, + { + "name": "WebObservation", + "path": "modules/classes/WebObservation.yaml", + "category": "classes" + }, + { + "name": "WebPortal", + "path": "modules/classes/WebPortal.yaml", + "category": "classes" + }, + { + "name": "WebPortalType", + "path": "modules/classes/WebPortalType.yaml", + "category": "classes" + }, + { + "name": "WebPortalTypes", + "path": "modules/classes/WebPortalTypes.yaml", + "category": "classes" + }, + { + "name": "WomensArchives", + "path": "modules/classes/WomensArchives.yaml", + "category": "classes" + }, + { + "name": "WomensArchivesRecordSetTypes", + "path": "modules/classes/WomensArchivesRecordSetTypes.yaml", + "category": "classes" + }, + { + "name": "WorkExperience", + "path": "modules/classes/WorkExperience.yaml", + "category": "classes" + }, + { + "name": "WorldHeritageSite", + "path": "modules/classes/WorldHeritageSite.yaml", + "category": "classes" + } + ] + }, + { + "name": "enum", + "displayName": "Enumerations", + "files": [ + { + "name": "AgentTypeEnum", + "path": "modules/enums/AgentTypeEnum.yaml", + "category": "enums" + }, + { + "name": "AppellationTypeEnum", + "path": "modules/enums/AppellationTypeEnum.yaml", + "category": "enums" + }, + { + "name": "ArchiveProcessingStatusEnum", + "path": "modules/enums/ArchiveProcessingStatusEnum.yaml", + "category": "enums" + }, + { + "name": "AuxiliaryDigitalPlatformTypeEnum", + "path": "modules/enums/AuxiliaryDigitalPlatformTypeEnum.yaml", + "category": "enums" + }, + { + "name": "AuxiliaryPlaceTypeEnum", + "path": "modules/enums/AuxiliaryPlaceTypeEnum.yaml", + "category": "enums" + }, + { + "name": "BioCustodianTypeEnum", + "path": "modules/enums/BioCustodianTypeEnum.yaml", + "category": "enums" + }, + { + "name": "CallForApplicationStatusEnum", + "path": "modules/enums/CallForApplicationStatusEnum.yaml", + "category": "enums" + }, + { + "name": "CanonicalClaimTypes", + "path": "modules/enums/CanonicalClaimTypes.yaml", + "category": "enums" + }, + { + "name": "CarrierTypeEnum", + "path": "modules/enums/CarrierTypeEnum.yaml", + "category": "enums" + }, + { + "name": "CommercialCustodianTypeEnum", + "path": "modules/enums/CommercialCustodianTypeEnum.yaml", + "category": "enums" + }, + { + "name": "ConflictStatusEnum", + "path": "modules/enums/ConflictStatusEnum.yaml", + "category": "enums" + }, + { + "name": "ConservationStatusEnum", + "path": "modules/enums/ConservationStatusEnum.yaml", + "category": "enums" + }, + { + "name": "CurationActivityTypeEnum", + "path": "modules/enums/CurationActivityTypeEnum.yaml", + "category": "enums" + }, + { + "name": "DigitalPlatformTypeEnum", + "path": "modules/enums/DigitalPlatformTypeEnum.yaml", + "category": "enums" + }, + { + "name": "DigitalPresenceTypeEnum", + "path": "modules/enums/DigitalPresenceTypeEnum.yaml", + "category": "enums" + }, + { + "name": "DonationSchemeTypeEnum", + "path": "modules/enums/DonationSchemeTypeEnum.yaml", + "category": "enums" + }, + { + "name": "EducationProviderTypeEnum", + "path": "modules/enums/EducationProviderTypeEnum.yaml", + "category": "enums" + }, + { + "name": "EncompassingBodyTypeEnum", + "path": "modules/enums/EncompassingBodyTypeEnum.yaml", + "category": "enums" + }, + { + "name": "EntityTypeEnum", + "path": "modules/enums/EntityTypeEnum.yaml", + "category": "enums" + }, + { + "name": "EnvironmentalZoneTypeEnum", + "path": "modules/enums/EnvironmentalZoneTypeEnum.yaml", + "category": "enums" + }, + { + "name": "EventStatusEnum", + "path": "modules/enums/EventStatusEnum.yaml", + "category": "enums" + }, + { + "name": "EventTypeEnum", + "path": "modules/enums/EventTypeEnum.yaml", + "category": "enums" + }, + { + "name": "ExhibitedObjectTypeEnum", + "path": "modules/enums/ExhibitedObjectTypeEnum.yaml", + "category": "enums" + }, + { + "name": "ExhibitionTypeEnum", + "path": "modules/enums/ExhibitionTypeEnum.yaml", + "category": "enums" + }, + { + "name": "FeatureTypeEnum", + "path": "modules/enums/FeatureTypeEnum.yaml", + "category": "enums" + }, + { + "name": "FinancialStatementTypeEnum", + "path": "modules/enums/FinancialStatementTypeEnum.yaml", + "category": "enums" + }, + { + "name": "FundingRequirementTypeEnum", + "path": "modules/enums/FundingRequirementTypeEnum.yaml", + "category": "enums" + }, + { + "name": "GalleryTypeEnum", + "path": "modules/enums/GalleryTypeEnum.yaml", + "category": "enums" + }, + { + "name": "GiftShopTypeEnum", + "path": "modules/enums/GiftShopTypeEnum.yaml", + "category": "enums" + }, + { + "name": "HeritageSocietyTypeEnum", + "path": "modules/enums/HeritageSocietyTypeEnum.yaml", + "category": "enums" + }, + { + "name": "HeritageTypeEnum", + "path": "modules/enums/HeritageTypeEnum.yaml", + "category": "enums" + }, + { + "name": "HolySiteTypeEnum", + "path": "modules/enums/HolySiteTypeEnum.yaml", + "category": "enums" + }, + { + "name": "ICHViabilityStatusEnum", + "path": "modules/enums/ICHViabilityStatusEnum.yaml", + "category": "enums" + }, + { + "name": "IntangibleHeritageTypeEnum", + "path": "modules/enums/IntangibleHeritageTypeEnum.yaml", + "category": "enums" + }, + { + "name": "LegalStatusEnum", + "path": "modules/enums/LegalStatusEnum.yaml", + "category": "enums" + }, + { + "name": "LibraryTypeEnum", + "path": "modules/enums/LibraryTypeEnum.yaml", + "category": "enums" + }, + { + "name": "LoanStatusEnum", + "path": "modules/enums/LoanStatusEnum.yaml", + "category": "enums" + }, + { + "name": "MuseumTypeEnum", + "path": "modules/enums/MuseumTypeEnum.yaml", + "category": "enums" + }, + { + "name": "NonProfitCustodianTypeEnum", + "path": "modules/enums/NonProfitCustodianTypeEnum.yaml", + "category": "enums" + }, + { + "name": "OfficialInstitutionTypeEnum", + "path": "modules/enums/OfficialInstitutionTypeEnum.yaml", + "category": "enums" + }, + { + "name": "OrganizationBranchTypeEnum", + "path": "modules/enums/OrganizationBranchTypeEnum.yaml", + "category": "enums" + }, + { + "name": "OrganizationalChangeEventTypeEnum", + "path": "modules/enums/OrganizationalChangeEventTypeEnum.yaml", + "category": "enums" + }, + { + "name": "OrganizationalUnitTypeEnum", + "path": "modules/enums/OrganizationalUnitTypeEnum.yaml", + "category": "enums" + }, + { + "name": "PersonalCollectionTypeEnum", + "path": "modules/enums/PersonalCollectionTypeEnum.yaml", + "category": "enums" + }, + { + "name": "PlaceSpecificityEnum", + "path": "modules/enums/PlaceSpecificityEnum.yaml", + "category": "enums" + }, + { + "name": "PreservationMethodEnum", + "path": "modules/enums/PreservationMethodEnum.yaml", + "category": "enums" + }, + { + "name": "ProductCategoryEnum", + "path": "modules/enums/ProductCategoryEnum.yaml", + "category": "enums" + }, + { + "name": "ProjectStatusEnum", + "path": "modules/enums/ProjectStatusEnum.yaml", + "category": "enums" + }, + { + "name": "ProvenanceEventTypeEnum", + "path": "modules/enums/ProvenanceEventTypeEnum.yaml", + "category": "enums" + }, + { + "name": "ReconstructionActivityTypeEnum", + "path": "modules/enums/ReconstructionActivityTypeEnum.yaml", + "category": "enums" + }, + { + "name": "RecordsLifecycleStageEnum", + "path": "modules/enums/RecordsLifecycleStageEnum.yaml", + "category": "enums" + }, + { + "name": "ResearchCenterTypeEnum", + "path": "modules/enums/ResearchCenterTypeEnum.yaml", + "category": "enums" + }, + { + "name": "ServiceAreaTypeEnum", + "path": "modules/enums/ServiceAreaTypeEnum.yaml", + "category": "enums" + }, + { + "name": "SourceDocumentTypeEnum", + "path": "modules/enums/SourceDocumentTypeEnum.yaml", + "category": "enums" + }, + { + "name": "StorageConditionStatusEnum", + "path": "modules/enums/StorageConditionStatusEnum.yaml", + "category": "enums" + }, + { + "name": "StorageObserverTypeEnum", + "path": "modules/enums/StorageObserverTypeEnum.yaml", + "category": "enums" + }, + { + "name": "StorageStandardEnum", + "path": "modules/enums/StorageStandardEnum.yaml", + "category": "enums" + }, + { + "name": "StorageTypeEnum", + "path": "modules/enums/StorageTypeEnum.yaml", + "category": "enums" + }, + { + "name": "StorageUnitTypeEnum", + "path": "modules/enums/StorageUnitTypeEnum.yaml", + "category": "enums" + }, + { + "name": "TasteScentHeritageTypeEnum", + "path": "modules/enums/TasteScentHeritageTypeEnum.yaml", + "category": "enums" + }, + { + "name": "UNESCOICHDomainEnum", + "path": "modules/enums/UNESCOICHDomainEnum.yaml", + "category": "enums" + }, + { + "name": "UNESCOListStatusEnum", + "path": "modules/enums/UNESCOListStatusEnum.yaml", + "category": "enums" + } + ] + }, + { + "name": "slot", + "displayName": "Slots", + "files": [ + { + "name": "Access Policy", + "path": "modules/slots/access_policy.yaml", + "category": "slots" + }, + { + "name": "Access Policy Ref", + "path": "modules/slots/access_policy_ref.yaml", + "category": "slots" + }, + { + "name": "Access Restrictions", + "path": "modules/slots/access_restrictions.yaml", + "category": "slots" + }, + { + "name": "Accession Number", + "path": "modules/slots/accession_number.yaml", + "category": "slots" + }, + { + "name": "Acquisition Date", + "path": "modules/slots/acquisition_date.yaml", + "category": "slots" + }, + { + "name": "Acquisition Method", + "path": "modules/slots/acquisition_method.yaml", + "category": "slots" + }, + { + "name": "Acquisition Source", + "path": "modules/slots/acquisition_source.yaml", + "category": "slots" + }, + { + "name": "Activity Type", + "path": "modules/slots/activity_type.yaml", + "category": "slots" + }, + { + "name": "Affected By Event", + "path": "modules/slots/affected_by_event.yaml", + "category": "slots" + }, + { + "name": "Affected Units", + "path": "modules/slots/affected_units.yaml", + "category": "slots" + }, + { + "name": "Affects Organization", + "path": "modules/slots/affects_organization.yaml", + "category": "slots" + }, + { + "name": "Affiliation", + "path": "modules/slots/affiliation.yaml", + "category": "slots" + }, + { + "name": "Age", + "path": "modules/slots/age.yaml", + "category": "slots" + }, + { + "name": "Agent Name", + "path": "modules/slots/agent_name.yaml", + "category": "slots" + }, + { + "name": "Agent Type", + "path": "modules/slots/agent_type.yaml", + "category": "slots" + }, + { + "name": "Allocated By", + "path": "modules/slots/allocated_by.yaml", + "category": "slots" + }, + { + "name": "Allocates", + "path": "modules/slots/allocates.yaml", + "category": "slots" + }, + { + "name": "Allocation Date", + "path": "modules/slots/allocation_date.yaml", + "category": "slots" + }, + { + "name": "Also Identifies Name", + "path": "modules/slots/also_identifies_name.yaml", + "category": "slots" + }, + { + "name": "Alternative Names", + "path": "modules/slots/alternative_names.yaml", + "category": "slots" + }, + { + "name": "Alternative Observed Names", + "path": "modules/slots/alternative_observed_names.yaml", + "category": "slots" + }, + { + "name": "Altitude", + "path": "modules/slots/altitude.yaml", + "category": "slots" + }, + { + "name": "Api Endpoint", + "path": "modules/slots/api_endpoint.yaml", + "category": "slots" + }, + { + "name": "Appellation Language", + "path": "modules/slots/appellation_language.yaml", + "category": "slots" + }, + { + "name": "Appellation Type", + "path": "modules/slots/appellation_type.yaml", + "category": "slots" + }, + { + "name": "Appellation Value", + "path": "modules/slots/appellation_value.yaml", + "category": "slots" + }, + { + "name": "Appellations", + "path": "modules/slots/appellations.yaml", + "category": "slots" + }, + { + "name": "Approval Date", + "path": "modules/slots/approval_date.yaml", + "category": "slots" + }, + { + "name": "Archived At", + "path": "modules/slots/archived_at.yaml", + "category": "slots" + }, + { + "name": "Arrangement", + "path": "modules/slots/arrangement.yaml", + "category": "slots" + }, + { + "name": "Arrangement System", + "path": "modules/slots/arrangement_system.yaml", + "category": "slots" + }, + { + "name": "Authentication Required", + "path": "modules/slots/authentication_required.yaml", + "category": "slots" + }, + { + "name": "Auxiliary Places", + "path": "modules/slots/auxiliary_places.yaml", + "category": "slots" + }, + { + "name": "Auxiliary Platforms", + "path": "modules/slots/auxiliary_platforms.yaml", + "category": "slots" + }, + { + "name": "Base Surname", + "path": "modules/slots/base_surname.yaml", + "category": "slots" + }, + { + "name": "Begin Of The Begin", + "path": "modules/slots/begin_of_the_begin.yaml", + "category": "slots" + }, + { + "name": "Begin Of The End", + "path": "modules/slots/begin_of_the_end.yaml", + "category": "slots" + }, + { + "name": "Birth Date", + "path": "modules/slots/birth_date.yaml", + "category": "slots" + }, + { + "name": "Birth Place", + "path": "modules/slots/birth_place.yaml", + "category": "slots" + }, + { + "name": "Canonical Value", + "path": "modules/slots/canonical_value.yaml", + "category": "slots" + }, + { + "name": "Capacity Items", + "path": "modules/slots/capacity_items.yaml", + "category": "slots" + }, + { + "name": "Cataloging Standard", + "path": "modules/slots/cataloging_standard.yaml", + "category": "slots" + }, + { + "name": "Change Rationale", + "path": "modules/slots/change_rationale.yaml", + "category": "slots" + }, + { + "name": "Circumstances Of Death", + "path": "modules/slots/circumstances_of_death.yaml", + "category": "slots" + }, + { + "name": "City", + "path": "modules/slots/city.yaml", + "category": "slots" + }, + { + "name": "Claim Id", + "path": "modules/slots/claim_id.yaml", + "category": "slots" + }, + { + "name": "Claim Type", + "path": "modules/slots/claim_type.yaml", + "category": "slots" + }, + { + "name": "Claim Value", + "path": "modules/slots/claim_value.yaml", + "category": "slots" + }, + { + "name": "Class Metadata Slots", + "path": "modules/slots/class_metadata_slots.yaml", + "category": "slots" + }, + { + "name": "Collection Description", + "path": "modules/slots/collection_description.yaml", + "category": "slots" + }, + { + "name": "Collection Focus", + "path": "modules/slots/collection_focus.yaml", + "category": "slots" + }, + { + "name": "Collection Id", + "path": "modules/slots/collection_id.yaml", + "category": "slots" + }, + { + "name": "Collection Name", + "path": "modules/slots/collection_name.yaml", + "category": "slots" + }, + { + "name": "Collection Of", + "path": "modules/slots/collection_of.yaml", + "category": "slots" + }, + { + "name": "Collection Scope", + "path": "modules/slots/collection_scope.yaml", + "category": "slots" + }, + { + "name": "Collection Size", + "path": "modules/slots/collection_size.yaml", + "category": "slots" + }, + { + "name": "Collection Type", + "path": "modules/slots/collection_type.yaml", + "category": "slots" + }, + { + "name": "Collection Type Ref", + "path": "modules/slots/collection_type_ref.yaml", + "category": "slots" + }, + { + "name": "Collections Under Responsibility", + "path": "modules/slots/collections_under_responsibility.yaml", + "category": "slots" + }, + { + "name": "Confidence", + "path": "modules/slots/confidence.yaml", + "category": "slots" + }, + { + "name": "Confidence Method", + "path": "modules/slots/confidence_method.yaml", + "category": "slots" + }, + { + "name": "Confidence Score", + "path": "modules/slots/confidence_score.yaml", + "category": "slots" + }, + { + "name": "Confidence Value", + "path": "modules/slots/confidence_value.yaml", + "category": "slots" + }, + { + "name": "Conflict Status", + "path": "modules/slots/conflict_status.yaml", + "category": "slots" + }, + { + "name": "Conservation Lab", + "path": "modules/slots/conservation_lab.yaml", + "category": "slots" + }, + { + "name": "Contact", + "path": "modules/slots/contact.yaml", + "category": "slots" + }, + { + "name": "Contact Email", + "path": "modules/slots/contact_email.yaml", + "category": "slots" + }, + { + "name": "Contact Point", + "path": "modules/slots/contact_point.yaml", + "category": "slots" + }, + { + "name": "Content Hash", + "path": "modules/slots/content_hash.yaml", + "category": "slots" + }, + { + "name": "Cost Usd", + "path": "modules/slots/cost_usd.yaml", + "category": "slots" + }, + { + "name": "Country", + "path": "modules/slots/country.yaml", + "category": "slots" + }, + { + "name": "Created", + "path": "modules/slots/created.yaml", + "category": "slots" + }, + { + "name": "Creator", + "path": "modules/slots/creator.yaml", + "category": "slots" + }, + { + "name": "Css Selector", + "path": "modules/slots/css_selector.yaml", + "category": "slots" + }, + { + "name": "Curation Activities", + "path": "modules/slots/curation_activities.yaml", + "category": "slots" + }, + { + "name": "Custodial History", + "path": "modules/slots/custodial_history.yaml", + "category": "slots" + }, + { + "name": "Custodian Names", + "path": "modules/slots/custodian_names.yaml", + "category": "slots" + }, + { + "name": "Custodian Observations", + "path": "modules/slots/custodian_observations.yaml", + "category": "slots" + }, + { + "name": "Custodian Type", + "path": "modules/slots/custodian_type.yaml", + "category": "slots" + }, + { + "name": "Custodians", + "path": "modules/slots/custodians.yaml", + "category": "slots" + }, + { + "name": "Data License Policy", + "path": "modules/slots/data_license_policy.yaml", + "category": "slots" + }, + { + "name": "Data Service Endpoints", + "path": "modules/slots/data_service_endpoints.yaml", + "category": "slots" + }, + { + "name": "Date", + "path": "modules/slots/date.yaml", + "category": "slots" + }, + { + "name": "Date Of Death", + "path": "modules/slots/date_of_death.yaml", + "category": "slots" + }, + { + "name": "Death Place", + "path": "modules/slots/death_place.yaml", + "category": "slots" + }, + { + "name": "Deceased", + "path": "modules/slots/deceased.yaml", + "category": "slots" + }, + { + "name": "Defined By Standard", + "path": "modules/slots/defined_by_standard.yaml", + "category": "slots" + }, + { + "name": "Deliverables", + "path": "modules/slots/deliverables.yaml", + "category": "slots" + }, + { + "name": "Derived From Entity", + "path": "modules/slots/derived_from_entity.yaml", + "category": "slots" + }, + { + "name": "Description", + "path": "modules/slots/description.yaml", + "category": "slots" + }, + { + "name": "Digital Platform", + "path": "modules/slots/digital_platform.yaml", + "category": "slots" + }, + { + "name": "Digital Surrogate Url", + "path": "modules/slots/digital_surrogate_url.yaml", + "category": "slots" + }, + { + "name": "Digitization Status", + "path": "modules/slots/digitization_status.yaml", + "category": "slots" + }, + { + "name": "Dissolution Date", + "path": "modules/slots/dissolution_date.yaml", + "category": "slots" + }, + { + "name": "Documentation Source", + "path": "modules/slots/documentation_source.yaml", + "category": "slots" + }, + { + "name": "Documentation Url", + "path": "modules/slots/documentation_url.yaml", + "category": "slots" + }, + { + "name": "Effective Date", + "path": "modules/slots/effective_date.yaml", + "category": "slots" + }, + { + "name": "Embargo End Date", + "path": "modules/slots/embargo_end_date.yaml", + "category": "slots" + }, + { + "name": "Emic Name", + "path": "modules/slots/emic_name.yaml", + "category": "slots" + }, + { + "name": "Encompasses", + "path": "modules/slots/encompasses.yaml", + "category": "slots" + }, + { + "name": "Encompassing Body", + "path": "modules/slots/encompassing_body.yaml", + "category": "slots" + }, + { + "name": "End Date", + "path": "modules/slots/end_date.yaml", + "category": "slots" + }, + { + "name": "End Of The Begin", + "path": "modules/slots/end_of_the_begin.yaml", + "category": "slots" + }, + { + "name": "End Of The End", + "path": "modules/slots/end_of_the_end.yaml", + "category": "slots" + }, + { + "name": "Ended At Time", + "path": "modules/slots/ended_at_time.yaml", + "category": "slots" + }, + { + "name": "Endorsement Source", + "path": "modules/slots/endorsement_source.yaml", + "category": "slots" + }, + { + "name": "Event Date", + "path": "modules/slots/event_date.yaml", + "category": "slots" + }, + { + "name": "Event Description", + "path": "modules/slots/event_description.yaml", + "category": "slots" + }, + { + "name": "Event Id", + "path": "modules/slots/event_id.yaml", + "category": "slots" + }, + { + "name": "Event Type", + "path": "modules/slots/event_type.yaml", + "category": "slots" + }, + { + "name": "Exhibition Type", + "path": "modules/slots/exhibition_type.yaml", + "category": "slots" + }, + { + "name": "Expertise Areas", + "path": "modules/slots/expertise_areas.yaml", + "category": "slots" + }, + { + "name": "Exposed Via Portal", + "path": "modules/slots/exposed_via_portal.yaml", + "category": "slots" + }, + { + "name": "Exposes Collections", + "path": "modules/slots/exposes_collections.yaml", + "category": "slots" + }, + { + "name": "Extent", + "path": "modules/slots/extent.yaml", + "category": "slots" + }, + { + "name": "Extent Items", + "path": "modules/slots/extent_items.yaml", + "category": "slots" + }, + { + "name": "External Identifiers", + "path": "modules/slots/external_identifiers.yaml", + "category": "slots" + }, + { + "name": "Extraction Agent", + "path": "modules/slots/extraction_agent.yaml", + "category": "slots" + }, + { + "name": "Extraction Confidence", + "path": "modules/slots/extraction_confidence.yaml", + "category": "slots" + }, + { + "name": "Extraction Metadata", + "path": "modules/slots/extraction_metadata.yaml", + "category": "slots" + }, + { + "name": "Extraction Method", + "path": "modules/slots/extraction_method.yaml", + "category": "slots" + }, + { + "name": "Extraction Notes", + "path": "modules/slots/extraction_notes.yaml", + "category": "slots" + }, + { + "name": "Extraction Timestamp", + "path": "modules/slots/extraction_timestamp.yaml", + "category": "slots" + }, + { + "name": "Feeds Portal", + "path": "modules/slots/feeds_portal.yaml", + "category": "slots" + }, + { + "name": "Finding Aids", + "path": "modules/slots/finding_aids.yaml", + "category": "slots" + }, + { + "name": "Follow Up Date", + "path": "modules/slots/follow_up_date.yaml", + "category": "slots" + }, + { + "name": "Funding Source", + "path": "modules/slots/funding_source.yaml", + "category": "slots" + }, + { + "name": "Gender Identity", + "path": "modules/slots/gender_identity.yaml", + "category": "slots" + }, + { + "name": "Generates", + "path": "modules/slots/generates.yaml", + "category": "slots" + }, + { + "name": "Geographic Scope", + "path": "modules/slots/geographic_scope.yaml", + "category": "slots" + }, + { + "name": "Geonames Id", + "path": "modules/slots/geonames_id.yaml", + "category": "slots" + }, + { + "name": "Given Name", + "path": "modules/slots/given_name.yaml", + "category": "slots" + }, + { + "name": "Governance Structure", + "path": "modules/slots/governance_structure.yaml", + "category": "slots" + }, + { + "name": "Has Collection", + "path": "modules/slots/has_collection.yaml", + "category": "slots" + }, + { + "name": "Has Derived Observation", + "path": "modules/slots/has_derived_observation.yaml", + "category": "slots" + }, + { + "name": "Has Feature Type", + "path": "modules/slots/has_feature_type.yaml", + "category": "slots" + }, + { + "name": "Has Geospatial Location", + "path": "modules/slots/has_geospatial_location.yaml", + "category": "slots" + }, + { + "name": "Has Member", + "path": "modules/slots/has_member.yaml", + "category": "slots" + }, + { + "name": "Has Observation", + "path": "modules/slots/has_observation.yaml", + "category": "slots" + }, + { + "name": "Has Person Name", + "path": "modules/slots/has_person_name.yaml", + "category": "slots" + }, + { + "name": "Has Person Observation", + "path": "modules/slots/has_person_observation.yaml", + "category": "slots" + }, + { + "name": "Has Suborganization", + "path": "modules/slots/has_suborganization.yaml", + "category": "slots" + }, + { + "name": "Has Unit", + "path": "modules/slots/has_unit.yaml", + "category": "slots" + }, + { + "name": "Hc Id", + "path": "modules/slots/hc_id.yaml", + "category": "slots" + }, + { + "name": "Holds Record Set Types", + "path": "modules/slots/holds_record_set_types.yaml", + "category": "slots" + }, + { + "name": "Html File", + "path": "modules/slots/html_file.yaml", + "category": "slots" + }, + { + "name": "Humidity Tolerance", + "path": "modules/slots/humidity_tolerance.yaml", + "category": "slots" + }, + { + "name": "Id", + "path": "modules/slots/id.yaml", + "category": "slots" + }, + { + "name": "Identified By", + "path": "modules/slots/identified_by.yaml", + "category": "slots" + }, + { + "name": "Identifier Format Used", + "path": "modules/slots/identifier_format_used.yaml", + "category": "slots" + }, + { + "name": "Identifier Scheme", + "path": "modules/slots/identifier_scheme.yaml", + "category": "slots" + }, + { + "name": "Identifier Value", + "path": "modules/slots/identifier_value.yaml", + "category": "slots" + }, + { + "name": "Identifiers", + "path": "modules/slots/identifiers.yaml", + "category": "slots" + }, + { + "name": "Identifies", + "path": "modules/slots/identifies.yaml", + "category": "slots" + }, + { + "name": "Identifies Custodian", + "path": "modules/slots/identifies_custodian.yaml", + "category": "slots" + }, + { + "name": "Initials", + "path": "modules/slots/initials.yaml", + "category": "slots" + }, + { + "name": "Is Legal Status Of", + "path": "modules/slots/is_legal_status_of.yaml", + "category": "slots" + }, + { + "name": "Is Member Of", + "path": "modules/slots/is_member_of.yaml", + "category": "slots" + }, + { + "name": "Isbn", + "path": "modules/slots/isbn.yaml", + "category": "slots" + }, + { + "name": "Items", + "path": "modules/slots/items.yaml", + "category": "slots" + }, + { + "name": "Jurisdiction", + "path": "modules/slots/jurisdiction.yaml", + "category": "slots" + }, + { + "name": "Justification", + "path": "modules/slots/justification.yaml", + "category": "slots" + }, + { + "name": "Keywords", + "path": "modules/slots/keywords.yaml", + "category": "slots" + }, + { + "name": "Language", + "path": "modules/slots/language.yaml", + "category": "slots" + }, + { + "name": "Language Code", + "path": "modules/slots/language_code.yaml", + "category": "slots" + }, + { + "name": "Latitude", + "path": "modules/slots/latitude.yaml", + "category": "slots" + }, + { + "name": "Legal Entity Type", + "path": "modules/slots/legal_entity_type.yaml", + "category": "slots" + }, + { + "name": "Legal Form", + "path": "modules/slots/legal_form.yaml", + "category": "slots" + }, + { + "name": "Legal Jurisdiction", + "path": "modules/slots/legal_jurisdiction.yaml", + "category": "slots" + }, + { + "name": "Legal Name", + "path": "modules/slots/legal_name.yaml", + "category": "slots" + }, + { + "name": "Legal Responsibility Basis", + "path": "modules/slots/legal_responsibility_basis.yaml", + "category": "slots" + }, + { + "name": "Legal Responsibility End Date", + "path": "modules/slots/legal_responsibility_end_date.yaml", + "category": "slots" + }, + { + "name": "Legal Responsibility Start Date", + "path": "modules/slots/legal_responsibility_start_date.yaml", + "category": "slots" + }, + { + "name": "Legal Status", + "path": "modules/slots/legal_status.yaml", + "category": "slots" + }, + { + "name": "Linkedin Profile Path", + "path": "modules/slots/linkedin_profile_path.yaml", + "category": "slots" + }, + { + "name": "Linkedin Profile Url", + "path": "modules/slots/linkedin_profile_url.yaml", + "category": "slots" + }, + { + "name": "Literal Name", + "path": "modules/slots/literal_name.yaml", + "category": "slots" + }, + { + "name": "Located At", + "path": "modules/slots/located_at.yaml", + "category": "slots" + }, + { + "name": "Longitude", + "path": "modules/slots/longitude.yaml", + "category": "slots" + }, + { + "name": "Managed By", + "path": "modules/slots/managed_by.yaml", + "category": "slots" + }, + { + "name": "Managed Collections", + "path": "modules/slots/managed_collections.yaml", + "category": "slots" + }, + { + "name": "Managing Unit", + "path": "modules/slots/managing_unit.yaml", + "category": "slots" + }, + { + "name": "Martyred", + "path": "modules/slots/martyred.yaml", + "category": "slots" + }, + { + "name": "Metadata Standards", + "path": "modules/slots/metadata_standards.yaml", + "category": "slots" + }, + { + "name": "Method", + "path": "modules/slots/method.yaml", + "category": "slots" + }, + { + "name": "Mission Statement", + "path": "modules/slots/mission_statement.yaml", + "category": "slots" + }, + { + "name": "Modified", + "path": "modules/slots/modified.yaml", + "category": "slots" + }, + { + "name": "Name Authority", + "path": "modules/slots/name_authority.yaml", + "category": "slots" + }, + { + "name": "Name Language", + "path": "modules/slots/name_language.yaml", + "category": "slots" + }, + { + "name": "Name Specification", + "path": "modules/slots/name_specification.yaml", + "category": "slots" + }, + { + "name": "Name Validity Period", + "path": "modules/slots/name_validity_period.yaml", + "category": "slots" + }, + { + "name": "Notes", + "path": "modules/slots/notes.yaml", + "category": "slots" + }, + { + "name": "Oai Pmh Endpoint", + "path": "modules/slots/oai_pmh_endpoint.yaml", + "category": "slots" + }, + { + "name": "Object Ref", + "path": "modules/slots/object_ref.yaml", + "category": "slots" + }, + { + "name": "Observation Context", + "path": "modules/slots/observation_context.yaml", + "category": "slots" + }, + { + "name": "Observation Date", + "path": "modules/slots/observation_date.yaml", + "category": "slots" + }, + { + "name": "Observation Source", + "path": "modules/slots/observation_source.yaml", + "category": "slots" + }, + { + "name": "Observed In", + "path": "modules/slots/observed_in.yaml", + "category": "slots" + }, + { + "name": "Observed Name", + "path": "modules/slots/observed_name.yaml", + "category": "slots" + }, + { + "name": "Occupation", + "path": "modules/slots/occupation.yaml", + "category": "slots" + }, + { + "name": "Offers Donation Schemes", + "path": "modules/slots/offers_donation_schemes.yaml", + "category": "slots" + }, + { + "name": "Operated By", + "path": "modules/slots/operated_by.yaml", + "category": "slots" + }, + { + "name": "Operates", + "path": "modules/slots/operates.yaml", + "category": "slots" + }, + { + "name": "Organizational Change Events", + "path": "modules/slots/organizational_change_events.yaml", + "category": "slots" + }, + { + "name": "Organizational Structure", + "path": "modules/slots/organizational_structure.yaml", + "category": "slots" + }, + { + "name": "Organizational Structures", + "path": "modules/slots/organizational_structures.yaml", + "category": "slots" + }, + { + "name": "Parent Collection", + "path": "modules/slots/parent_collection.yaml", + "category": "slots" + }, + { + "name": "Parent Custodian", + "path": "modules/slots/parent_custodian.yaml", + "category": "slots" + }, + { + "name": "Parent Society", + "path": "modules/slots/parent_society.yaml", + "category": "slots" + }, + { + "name": "Parent Unit", + "path": "modules/slots/parent_unit.yaml", + "category": "slots" + }, + { + "name": "Part Of Custodian Collection", + "path": "modules/slots/part_of_custodian_collection.yaml", + "category": "slots" + }, + { + "name": "Participated In Events", + "path": "modules/slots/participated_in_events.yaml", + "category": "slots" + }, + { + "name": "Patronym", + "path": "modules/slots/patronym.yaml", + "category": "slots" + }, + { + "name": "Person Id", + "path": "modules/slots/person_id.yaml", + "category": "slots" + }, + { + "name": "Person Name", + "path": "modules/slots/person_name.yaml", + "category": "slots" + }, + { + "name": "Place Designation", + "path": "modules/slots/place_designation.yaml", + "category": "slots" + }, + { + "name": "Place Language", + "path": "modules/slots/place_language.yaml", + "category": "slots" + }, + { + "name": "Place Name", + "path": "modules/slots/place_name.yaml", + "category": "slots" + }, + { + "name": "Place Note", + "path": "modules/slots/place_note.yaml", + "category": "slots" + }, + { + "name": "Place Specificity", + "path": "modules/slots/place_specificity.yaml", + "category": "slots" + }, + { + "name": "Platform Name", + "path": "modules/slots/platform_name.yaml", + "category": "slots" + }, + { + "name": "Platform Of", + "path": "modules/slots/platform_of.yaml", + "category": "slots" + }, + { + "name": "Platform Type", + "path": "modules/slots/platform_type.yaml", + "category": "slots" + }, + { + "name": "Policy Id", + "path": "modules/slots/policy_id.yaml", + "category": "slots" + }, + { + "name": "Policy Name", + "path": "modules/slots/policy_name.yaml", + "category": "slots" + }, + { + "name": "Portal Data Sources", + "path": "modules/slots/portal_data_sources.yaml", + "category": "slots" + }, + { + "name": "Postal Code", + "path": "modules/slots/postal_code.yaml", + "category": "slots" + }, + { + "name": "Powered By Cms", + "path": "modules/slots/powered_by_cms.yaml", + "category": "slots" + }, + { + "name": "Preferred Label", + "path": "modules/slots/preferred_label.yaml", + "category": "slots" + }, + { + "name": "Preservation Level", + "path": "modules/slots/preservation_level.yaml", + "category": "slots" + }, + { + "name": "Price", + "path": "modules/slots/price.yaml", + "category": "slots" + }, + { + "name": "Price Currency", + "path": "modules/slots/price_currency.yaml", + "category": "slots" + }, + { + "name": "Primary Register", + "path": "modules/slots/primary_register.yaml", + "category": "slots" + }, + { + "name": "Pronouns", + "path": "modules/slots/pronouns.yaml", + "category": "slots" + }, + { + "name": "Protocol", + "path": "modules/slots/protocol.yaml", + "category": "slots" + }, + { + "name": "Provenance Note", + "path": "modules/slots/provenance_note.yaml", + "category": "slots" + }, + { + "name": "Provenance Statement", + "path": "modules/slots/provenance_statement.yaml", + "category": "slots" + }, + { + "name": "Provenance Text", + "path": "modules/slots/provenance_text.yaml", + "category": "slots" + }, + { + "name": "Publication Date", + "path": "modules/slots/publication_date.yaml", + "category": "slots" + }, + { + "name": "Publisher", + "path": "modules/slots/publisher.yaml", + "category": "slots" + }, + { + "name": "Reconstruction Method", + "path": "modules/slots/reconstruction_method.yaml", + "category": "slots" + }, + { + "name": "Record Type", + "path": "modules/slots/record_type.yaml", + "category": "slots" + }, + { + "name": "Refers To Custodian", + "path": "modules/slots/refers_to_custodian.yaml", + "category": "slots" + }, + { + "name": "Refers To Person", + "path": "modules/slots/refers_to_person.yaml", + "category": "slots" + }, + { + "name": "Registration Authority", + "path": "modules/slots/registration_authority.yaml", + "category": "slots" + }, + { + "name": "Registration Date", + "path": "modules/slots/registration_date.yaml", + "category": "slots" + }, + { + "name": "Registration Numbers", + "path": "modules/slots/registration_numbers.yaml", + "category": "slots" + }, + { + "name": "Religion", + "path": "modules/slots/religion.yaml", + "category": "slots" + }, + { + "name": "Response Formats", + "path": "modules/slots/response_formats.yaml", + "category": "slots" + }, + { + "name": "Responsible Agent", + "path": "modules/slots/responsible_agent.yaml", + "category": "slots" + }, + { + "name": "Responsible Legal Entity", + "path": "modules/slots/responsible_legal_entity.yaml", + "category": "slots" + }, + { + "name": "Resulting Units", + "path": "modules/slots/resulting_units.yaml", + "category": "slots" + }, + { + "name": "Retrieval Agent", + "path": "modules/slots/retrieval_agent.yaml", + "category": "slots" + }, + { + "name": "Retrieved On", + "path": "modules/slots/retrieved_on.yaml", + "category": "slots" + }, + { + "name": "Revision Date", + "path": "modules/slots/revision_date.yaml", + "category": "slots" + }, + { + "name": "Rico Equivalent", + "path": "modules/slots/rico_equivalent.yaml", + "category": "slots" + }, + { + "name": "Rico Record Set Type", + "path": "modules/slots/rico_record_set_type.yaml", + "category": "slots" + }, + { + "name": "Role End Date", + "path": "modules/slots/role_end_date.yaml", + "category": "slots" + }, + { + "name": "Role Start Date", + "path": "modules/slots/role_start_date.yaml", + "category": "slots" + }, + { + "name": "Role Title", + "path": "modules/slots/role_title.yaml", + "category": "slots" + }, + { + "name": "Safeguarded By", + "path": "modules/slots/safeguarded_by.yaml", + "category": "slots" + }, + { + "name": "Safeguards", + "path": "modules/slots/safeguards.yaml", + "category": "slots" + }, + { + "name": "Security Level", + "path": "modules/slots/security_level.yaml", + "category": "slots" + }, + { + "name": "Served By", + "path": "modules/slots/served_by.yaml", + "category": "slots" + }, + { + "name": "Serves Finding Aids", + "path": "modules/slots/serves_finding_aids.yaml", + "category": "slots" + }, + { + "name": "Service Area", + "path": "modules/slots/service_area.yaml", + "category": "slots" + }, + { + "name": "Settlement", + "path": "modules/slots/settlement.yaml", + "category": "slots" + }, + { + "name": "Source", + "path": "modules/slots/source.yaml", + "category": "slots" + }, + { + "name": "Source Creator", + "path": "modules/slots/source_creator.yaml", + "category": "slots" + }, + { + "name": "Source Date", + "path": "modules/slots/source_date.yaml", + "category": "slots" + }, + { + "name": "Source Type", + "path": "modules/slots/source_type.yaml", + "category": "slots" + }, + { + "name": "Source Uri", + "path": "modules/slots/source_uri.yaml", + "category": "slots" + }, + { + "name": "Source Url", + "path": "modules/slots/source_url.yaml", + "category": "slots" + }, + { + "name": "Sparql Endpoint", + "path": "modules/slots/sparql_endpoint.yaml", + "category": "slots" + }, + { + "name": "Staff Count", + "path": "modules/slots/staff_count.yaml", + "category": "slots" + }, + { + "name": "Staff Impact", + "path": "modules/slots/staff_impact.yaml", + "category": "slots" + }, + { + "name": "Staff Members", + "path": "modules/slots/staff_members.yaml", + "category": "slots" + }, + { + "name": "Staff Role", + "path": "modules/slots/staff_role.yaml", + "category": "slots" + }, + { + "name": "Standardized Name", + "path": "modules/slots/standardized_name.yaml", + "category": "slots" + }, + { + "name": "Start Date", + "path": "modules/slots/start_date.yaml", + "category": "slots" + }, + { + "name": "Started At Time", + "path": "modules/slots/started_at_time.yaml", + "category": "slots" + }, + { + "name": "Status", + "path": "modules/slots/status.yaml", + "category": "slots" + }, + { + "name": "Storage Location", + "path": "modules/slots/storage_location.yaml", + "category": "slots" + }, + { + "name": "Street Address", + "path": "modules/slots/street_address.yaml", + "category": "slots" + }, + { + "name": "Sub Collections", + "path": "modules/slots/sub_collections.yaml", + "category": "slots" + }, + { + "name": "Subject Areas", + "path": "modules/slots/subject_areas.yaml", + "category": "slots" + }, + { + "name": "Subregion", + "path": "modules/slots/subregion.yaml", + "category": "slots" + }, + { + "name": "Superseded By", + "path": "modules/slots/superseded_by.yaml", + "category": "slots" + }, + { + "name": "Supersedes", + "path": "modules/slots/supersedes.yaml", + "category": "slots" + }, + { + "name": "Surname Prefix", + "path": "modules/slots/surname_prefix.yaml", + "category": "slots" + }, + { + "name": "Technology Stack", + "path": "modules/slots/technology_stack.yaml", + "category": "slots" + }, + { + "name": "Temperature Tolerance", + "path": "modules/slots/temperature_tolerance.yaml", + "category": "slots" + }, + { + "name": "Temporal Coverage", + "path": "modules/slots/temporal_coverage.yaml", + "category": "slots" + }, + { + "name": "Temporal Extent", + "path": "modules/slots/temporal_extent.yaml", + "category": "slots" + }, + { + "name": "Time Of Destruction", + "path": "modules/slots/time_of_destruction.yaml", + "category": "slots" + }, + { + "name": "Title", + "path": "modules/slots/title.yaml", + "category": "slots" + }, + { + "name": "Type Scope", + "path": "modules/slots/type_scope.yaml", + "category": "slots" + }, + { + "name": "Typical Domains", + "path": "modules/slots/typical_domains.yaml", + "category": "slots" + }, + { + "name": "Typical Metadata Standards", + "path": "modules/slots/typical_metadata_standards.yaml", + "category": "slots" + }, + { + "name": "Typical Technical Features", + "path": "modules/slots/typical_technical_features.yaml", + "category": "slots" + }, + { + "name": "Unit Affiliation", + "path": "modules/slots/unit_affiliation.yaml", + "category": "slots" + }, + { + "name": "Unit Name", + "path": "modules/slots/unit_name.yaml", + "category": "slots" + }, + { + "name": "Unit Type", + "path": "modules/slots/unit_type.yaml", + "category": "slots" + }, + { + "name": "Used", + "path": "modules/slots/used.yaml", + "category": "slots" + }, + { + "name": "Used By", + "path": "modules/slots/used_by.yaml", + "category": "slots" + }, + { + "name": "Used Sources", + "path": "modules/slots/used_sources.yaml", + "category": "slots" + }, + { + "name": "Valid From", + "path": "modules/slots/valid_from.yaml", + "category": "slots" + }, + { + "name": "Valid To", + "path": "modules/slots/valid_to.yaml", + "category": "slots" + }, + { + "name": "Variant Of Name", + "path": "modules/slots/variant_of_name.yaml", + "category": "slots" + }, + { + "name": "Was Derived From", + "path": "modules/slots/was_derived_from.yaml", + "category": "slots" + }, + { + "name": "Was Generated By", + "path": "modules/slots/was_generated_by.yaml", + "category": "slots" + }, + { + "name": "Was Revision Of", + "path": "modules/slots/was_revision_of.yaml", + "category": "slots" + }, + { + "name": "Web Claims", + "path": "modules/slots/web_claims.yaml", + "category": "slots" + }, + { + "name": "Website", + "path": "modules/slots/website.yaml", + "category": "slots" + }, + { + "name": "Wikidata Id", + "path": "modules/slots/wikidata_id.yaml", + "category": "slots" + }, + { + "name": "Xpath", + "path": "modules/slots/xpath.yaml", + "category": "slots" + } + ] } - ] - }, - { - "name": "class", - "displayName": "Classes", - "files": [ - { - "name": "AcademicArchive", - "path": "modules/classes/AcademicArchive.yaml", - "category": "classes" - }, - { - "name": "AccessPolicy", - "path": "modules/classes/AccessPolicy.yaml", - "category": "classes" - }, - { - "name": "AdministrativeOffice", - "path": "modules/classes/AdministrativeOffice.yaml", - "category": "classes" - }, - { - "name": "AdvertisingRadioArchive", - "path": "modules/classes/AdvertisingRadioArchive.yaml", - "category": "classes" - }, - { - "name": "AllocationAgency", - "path": "modules/classes/AllocationAgency.yaml", - "category": "classes" - }, - { - "name": "AnimalSoundArchive", - "path": "modules/classes/AnimalSoundArchive.yaml", - "category": "classes" - }, - { - "name": "Appellation", - "path": "modules/classes/Appellation.yaml", - "category": "classes" - }, - { - "name": "ArchitecturalArchive", - "path": "modules/classes/ArchitecturalArchive.yaml", - "category": "classes" - }, - { - "name": "ArchivalLibrary", - "path": "modules/classes/ArchivalLibrary.yaml", - "category": "classes" - }, - { - "name": "ArchivalRepository", - "path": "modules/classes/ArchivalRepository.yaml", - "category": "classes" - }, - { - "name": "ArchiveAssociation", - "path": "modules/classes/ArchiveAssociation.yaml", - "category": "classes" - }, - { - "name": "ArchiveNetwork", - "path": "modules/classes/ArchiveNetwork.yaml", - "category": "classes" - }, - { - "name": "ArchiveOfInternationalOrganization", - "path": "modules/classes/ArchiveOfInternationalOrganization.yaml", - "category": "classes" - }, - { - "name": "ArchiveOrganizationType", - "path": "modules/classes/ArchiveOrganizationType.yaml", - "category": "classes" - }, - { - "name": "ArchivesForBuildingRecords", - "path": "modules/classes/ArchivesForBuildingRecords.yaml", - "category": "classes" - }, - { - "name": "ArchivesRegionales", - "path": "modules/classes/ArchivesRegionales.yaml", - "category": "classes" - }, - { - "name": "ArtArchive", - "path": "modules/classes/ArtArchive.yaml", - "category": "classes" - }, - { - "name": "ArticlesOfAssociation", - "path": "modules/classes/ArticlesOfAssociation.yaml", - "category": "classes" - }, - { - "name": "AssociationArchive", - "path": "modules/classes/AssociationArchive.yaml", - "category": "classes" - }, - { - "name": "AudiovisualArchive", - "path": "modules/classes/AudiovisualArchive.yaml", - "category": "classes" - }, - { - "name": "AuxiliaryDigitalPlatform", - "path": "modules/classes/AuxiliaryDigitalPlatform.yaml", - "category": "classes" - }, - { - "name": "AuxiliaryPlace", - "path": "modules/classes/AuxiliaryPlace.yaml", - "category": "classes" - }, - { - "name": "BankArchive", - "path": "modules/classes/BankArchive.yaml", - "category": "classes" - }, - { - "name": "Bildstelle", - "path": "modules/classes/Bildstelle.yaml", - "category": "classes" - }, - { - "name": "BioCustodianType", - "path": "modules/classes/BioCustodianType.yaml", - "category": "classes" - }, - { - "name": "BranchOffice", - "path": "modules/classes/BranchOffice.yaml", - "category": "classes" - }, - { - "name": "Budget", - "path": "modules/classes/Budget.yaml", - "category": "classes" - }, - { - "name": "CallForApplication", - "path": "modules/classes/CallForApplication.yaml", - "category": "classes" - }, - { - "name": "CantonalArchive", - "path": "modules/classes/CantonalArchive.yaml", - "category": "classes" - }, - { - "name": "CastCollection", - "path": "modules/classes/CastCollection.yaml", - "category": "classes" - }, - { - "name": "CateringPlace", - "path": "modules/classes/CateringPlace.yaml", - "category": "classes" - }, - { - "name": "CathedralArchive", - "path": "modules/classes/CathedralArchive.yaml", - "category": "classes" - }, - { - "name": "ChurchArchive", - "path": "modules/classes/ChurchArchive.yaml", - "category": "classes" - }, - { - "name": "ChurchArchiveSweden", - "path": "modules/classes/ChurchArchiveSweden.yaml", - "category": "classes" - }, - { - "name": "Cinematheque", - "path": "modules/classes/Cinematheque.yaml", - "category": "classes" - }, - { - "name": "ClimateArchive", - "path": "modules/classes/ClimateArchive.yaml", - "category": "classes" - }, - { - "name": "ClosedSpace", - "path": "modules/classes/ClosedSpace.yaml", - "category": "classes" - }, - { - "name": "CollectingArchives", - "path": "modules/classes/CollectingArchives.yaml", - "category": "classes" - }, - { - "name": "Collection", - "path": "modules/classes/Collection.yaml", - "category": "classes" - }, - { - "name": "CollectionManagementSystem", - "path": "modules/classes/CollectionManagementSystem.yaml", - "category": "classes" - }, - { - "name": "CollectionType", - "path": "modules/classes/CollectionType.yaml", - "category": "classes" - }, - { - "name": "ComarcalArchive", - "path": "modules/classes/ComarcalArchive.yaml", - "category": "classes" - }, - { - "name": "CommercialOrganizationType", - "path": "modules/classes/CommercialOrganizationType.yaml", - "category": "classes" - }, - { - "name": "CommunityArchive", - "path": "modules/classes/CommunityArchive.yaml", - "category": "classes" - }, - { - "name": "CompanyArchives", - "path": "modules/classes/CompanyArchives.yaml", - "category": "classes" - }, - { - "name": "ConfidenceMeasure", - "path": "modules/classes/ConfidenceMeasure.yaml", - "category": "classes" - }, - { - "name": "ConnectionNetwork", - "path": "modules/classes/ConnectionNetwork.yaml", - "category": "classes" - }, - { - "name": "ConservationLab", - "path": "modules/classes/ConservationLab.yaml", - "category": "classes" - }, - { - "name": "Conservatoria", - "path": "modules/classes/Conservatoria.yaml", - "category": "classes" - }, - { - "name": "Container", - "path": "modules/classes/Container.yaml", - "category": "classes" - }, - { - "name": "ContributingAgency", - "path": "modules/classes/ContributingAgency.yaml", - "category": "classes" - }, - { - "name": "Country", - "path": "modules/classes/Country.yaml", - "category": "classes" - }, - { - "name": "CountyRecordOffice", - "path": "modules/classes/CountyRecordOffice.yaml", - "category": "classes" - }, - { - "name": "CourtRecords", - "path": "modules/classes/CourtRecords.yaml", - "category": "classes" - }, - { - "name": "CulturalInstitution", - "path": "modules/classes/CulturalInstitution.yaml", - "category": "classes" - }, - { - "name": "CurrentArchive", - "path": "modules/classes/CurrentArchive.yaml", - "category": "classes" - }, - { - "name": "Custodian", - "path": "modules/classes/Custodian.yaml", - "category": "classes" - }, - { - "name": "CustodianAdministration", - "path": "modules/classes/CustodianAdministration.yaml", - "category": "classes" - }, - { - "name": "CustodianArchive", - "path": "modules/classes/CustodianArchive.yaml", - "category": "classes" - }, - { - "name": "CustodianCollection", - "path": "modules/classes/CustodianCollection.yaml", - "category": "classes" - }, - { - "name": "CustodianLegalStatus", - "path": "modules/classes/CustodianLegalStatus.yaml", - "category": "classes" - }, - { - "name": "CustodianName", - "path": "modules/classes/CustodianName.yaml", - "category": "classes" - }, - { - "name": "CustodianObservation", - "path": "modules/classes/CustodianObservation.yaml", - "category": "classes" - }, - { - "name": "CustodianPlace", - "path": "modules/classes/CustodianPlace.yaml", - "category": "classes" - }, - { - "name": "CustodianType", - "path": "modules/classes/CustodianType.yaml", - "category": "classes" - }, - { - "name": "DarkArchive", - "path": "modules/classes/DarkArchive.yaml", - "category": "classes" - }, - { - "name": "DataLicensePolicy", - "path": "modules/classes/DataLicensePolicy.yaml", - "category": "classes" - }, - { - "name": "DataServiceEndpoint", - "path": "modules/classes/DataServiceEndpoint.yaml", - "category": "classes" - }, - { - "name": "DataServiceEndpointType", - "path": "modules/classes/DataServiceEndpointType.yaml", - "category": "classes" - }, - { - "name": "Department", - "path": "modules/classes/Department.yaml", - "category": "classes" - }, - { - "name": "DepartmentalArchives", - "path": "modules/classes/DepartmentalArchives.yaml", - "category": "classes" - }, - { - "name": "DepositArchive", - "path": "modules/classes/DepositArchive.yaml", - "category": "classes" - }, - { - "name": "DigitalArchive", - "path": "modules/classes/DigitalArchive.yaml", - "category": "classes" - }, - { - "name": "DigitalPlatform", - "path": "modules/classes/DigitalPlatform.yaml", - "category": "classes" - }, - { - "name": "DigitalPlatformType", - "path": "modules/classes/DigitalPlatformType.yaml", - "category": "classes" - }, - { - "name": "DimArchives", - "path": "modules/classes/DimArchives.yaml", - "category": "classes" - }, - { - "name": "DiocesanArchive", - "path": "modules/classes/DiocesanArchive.yaml", - "category": "classes" - }, - { - "name": "DistrictArchiveGermany", - "path": "modules/classes/DistrictArchiveGermany.yaml", - "category": "classes" - }, - { - "name": "DistritalArchive", - "path": "modules/classes/DistritalArchive.yaml", - "category": "classes" - }, - { - "name": "Division", - "path": "modules/classes/Division.yaml", - "category": "classes" - }, - { - "name": "DocumentationCentre", - "path": "modules/classes/DocumentationCentre.yaml", - "category": "classes" - }, - { - "name": "EconomicArchive", - "path": "modules/classes/EconomicArchive.yaml", - "category": "classes" - }, - { - "name": "EducationCenter", - "path": "modules/classes/EducationCenter.yaml", - "category": "classes" - }, - { - "name": "EducationCredential", - "path": "modules/classes/EducationCredential.yaml", - "category": "classes" - }, - { - "name": "EducationProviderType", - "path": "modules/classes/EducationProviderType.yaml", - "category": "classes" - }, - { - "name": "EncompassingBody", - "path": "modules/classes/EncompassingBody.yaml", - "category": "classes" - }, - { - "name": "ExhibitionSpace", - "path": "modules/classes/ExhibitionSpace.yaml", - "category": "classes" - }, - { - "name": "ExtractionMetadata", - "path": "modules/classes/ExtractionMetadata.yaml", - "category": "classes" - }, - { - "name": "FeatureCustodianType", - "path": "modules/classes/FeatureCustodianType.yaml", - "category": "classes" - }, - { - "name": "FeaturePlace", - "path": "modules/classes/FeaturePlace.yaml", - "category": "classes" - }, - { - "name": "FilmArchive", - "path": "modules/classes/FilmArchive.yaml", - "category": "classes" - }, - { - "name": "FinancialStatement", - "path": "modules/classes/FinancialStatement.yaml", - "category": "classes" - }, - { - "name": "Foremalarkiv", - "path": "modules/classes/Foremalarkiv.yaml", - "category": "classes" - }, - { - "name": "FoundationArchive", - "path": "modules/classes/FoundationArchive.yaml", - "category": "classes" - }, - { - "name": "FreeArchive", - "path": "modules/classes/FreeArchive.yaml", - "category": "classes" - }, - { - "name": "FrenchPrivateArchives", - "path": "modules/classes/FrenchPrivateArchives.yaml", - "category": "classes" - }, - { - "name": "FundingAgenda", - "path": "modules/classes/FundingAgenda.yaml", - "category": "classes" - }, - { - "name": "FundingRequirement", - "path": "modules/classes/FundingRequirement.yaml", - "category": "classes" - }, - { - "name": "Fylkesarkiv", - "path": "modules/classes/Fylkesarkiv.yaml", - "category": "classes" - }, - { - "name": "GLAM", - "path": "modules/classes/GLAM.yaml", - "category": "classes" - }, - { - "name": "GalleryType", - "path": "modules/classes/GalleryType.yaml", - "category": "classes" - }, - { - "name": "GeoSpatialPlace", - "path": "modules/classes/GeoSpatialPlace.yaml", - "category": "classes" - }, - { - "name": "GiftShop", - "path": "modules/classes/GiftShop.yaml", - "category": "classes" - }, - { - "name": "GovernmentArchive", - "path": "modules/classes/GovernmentArchive.yaml", - "category": "classes" - }, - { - "name": "HeritageSocietyType", - "path": "modules/classes/HeritageSocietyType.yaml", - "category": "classes" - }, - { - "name": "HeritageRelevance", - "path": "modules/classes/HeritageRelevance.yaml", - "category": "classes" - }, - { - "name": "HistoricBuilding", - "path": "modules/classes/HistoricBuilding.yaml", - "category": "classes" - }, - { - "name": "HistoricalArchive", - "path": "modules/classes/HistoricalArchive.yaml", - "category": "classes" - }, - { - "name": "HolySacredSiteType", - "path": "modules/classes/HolySacredSiteType.yaml", - "category": "classes" - }, - { - "name": "HospitalArchive", - "path": "modules/classes/HospitalArchive.yaml", - "category": "classes" - }, - { - "name": "HouseArchive", - "path": "modules/classes/HouseArchive.yaml", - "category": "classes" - }, - { - "name": "IconographicArchives", - "path": "modules/classes/IconographicArchives.yaml", - "category": "classes" - }, - { - "name": "Identifier", - "path": "modules/classes/Identifier.yaml", - "category": "classes" - }, - { - "name": "Institution", - "path": "modules/classes/Institution.yaml", - "category": "classes" - }, - { - "name": "InstitutionalArchive", - "path": "modules/classes/InstitutionalArchive.yaml", - "category": "classes" - }, - { - "name": "InstitutionalRepository", - "path": "modules/classes/InstitutionalRepository.yaml", - "category": "classes" - }, - { - "name": "IntangibleHeritageEvent", - "path": "modules/classes/IntangibleHeritageEvent.yaml", - "category": "classes" - }, - { - "name": "IntangibleHeritageForm", - "path": "modules/classes/IntangibleHeritageForm.yaml", - "category": "classes" - }, - { - "name": "IntangibleHeritageGroupType", - "path": "modules/classes/IntangibleHeritageGroupType.yaml", - "category": "classes" - }, - { - "name": "IntangibleHeritagePerformance", - "path": "modules/classes/IntangibleHeritagePerformance.yaml", - "category": "classes" - }, - { - "name": "InternetOfThings", - "path": "modules/classes/InternetOfThings.yaml", - "category": "classes" - }, - { - "name": "JointArchives", - "path": "modules/classes/JointArchives.yaml", - "category": "classes" - }, - { - "name": "Jurisdiction", - "path": "modules/classes/Jurisdiction.yaml", - "category": "classes" - }, - { - "name": "Kustodie", - "path": "modules/classes/Kustodie.yaml", - "category": "classes" - }, - { - "name": "LGBTArchive", - "path": "modules/classes/LGBTArchive.yaml", - "category": "classes" - }, - { - "name": "Landsarkiv", - "path": "modules/classes/Landsarkiv.yaml", - "category": "classes" - }, - { - "name": "LanguageCode", - "path": "modules/classes/LanguageCode.yaml", - "category": "classes" - }, - { - "name": "LanguageProficiency", - "path": "modules/classes/LanguageProficiency.yaml", - "category": "classes" - }, - { - "name": "LegalEntityType", - "path": "modules/classes/LegalEntityType.yaml", - "category": "classes" - }, - { - "name": "LegalForm", - "path": "modules/classes/LegalForm.yaml", - "category": "classes" - }, - { - "name": "LegalName", - "path": "modules/classes/LegalName.yaml", - "category": "classes" - }, - { - "name": "LegalResponsibilityCollection", - "path": "modules/classes/LegalResponsibilityCollection.yaml", - "category": "classes" - }, - { - "name": "LibraryType", - "path": "modules/classes/LibraryType.yaml", - "category": "classes" - }, - { - "name": "LightArchives", - "path": "modules/classes/LightArchives.yaml", - "category": "classes" - }, - { - "name": "LinkedInProfile", - "path": "modules/classes/LinkedInProfile.yaml", - "category": "classes" - }, - { - "name": "LiteraryArchive", - "path": "modules/classes/LiteraryArchive.yaml", - "category": "classes" - }, - { - "name": "LocalGovernmentArchive", - "path": "modules/classes/LocalGovernmentArchive.yaml", - "category": "classes" - }, - { - "name": "LocalHeritageInstitutionSweden", - "path": "modules/classes/LocalHeritageInstitutionSweden.yaml", - "category": "classes" - }, - { - "name": "LocalHistoryArchive", - "path": "modules/classes/LocalHistoryArchive.yaml", - "category": "classes" - }, - { - "name": "LocationLibrary", - "path": "modules/classes/LocationLibrary.yaml", - "category": "classes" - }, - { - "name": "MailingListArchive", - "path": "modules/classes/MailingListArchive.yaml", - "category": "classes" - }, - { - "name": "MediaArchive", - "path": "modules/classes/MediaArchive.yaml", - "category": "classes" - }, - { - "name": "Medienzentrum", - "path": "modules/classes/Medienzentrum.yaml", - "category": "classes" - }, - { - "name": "MemoryInstitution", - "path": "modules/classes/MemoryInstitution.yaml", - "category": "classes" - }, - { - "name": "MilitaryArchive", - "path": "modules/classes/MilitaryArchive.yaml", - "category": "classes" - }, - { - "name": "MixedCustodianType", - "path": "modules/classes/MixedCustodianType.yaml", - "category": "classes" - }, - { - "name": "MonasteryArchive", - "path": "modules/classes/MonasteryArchive.yaml", - "category": "classes" - }, - { - "name": "MunicipalArchive", - "path": "modules/classes/MunicipalArchive.yaml", - "category": "classes" - }, - { - "name": "MuseumArchive", - "path": "modules/classes/MuseumArchive.yaml", - "category": "classes" - }, - { - "name": "MuseumType", - "path": "modules/classes/MuseumType.yaml", - "category": "classes" - }, - { - "name": "MusicArchive", - "path": "modules/classes/MusicArchive.yaml", - "category": "classes" - }, - { - "name": "Nachlass", - "path": "modules/classes/Nachlass.yaml", - "category": "classes" - }, - { - "name": "NationalArchives", - "path": "modules/classes/NationalArchives.yaml", - "category": "classes" - }, - { - "name": "NationalTreasure", - "path": "modules/classes/NationalTreasure.yaml", - "category": "classes" - }, - { - "name": "NationalTreasureOfFrance", - "path": "modules/classes/NationalTreasureOfFrance.yaml", - "category": "classes" - }, - { - "name": "NewspaperClippingsArchive", - "path": "modules/classes/NewspaperClippingsArchive.yaml", - "category": "classes" - }, - { - "name": "NobilityArchive", - "path": "modules/classes/NobilityArchive.yaml", - "category": "classes" - }, - { - "name": "NonProfitType", - "path": "modules/classes/NonProfitType.yaml", - "category": "classes" - }, - { - "name": "NotarialArchive", - "path": "modules/classes/NotarialArchive.yaml", - "category": "classes" - }, - { - "name": "OfficialInstitutionType", - "path": "modules/classes/OfficialInstitutionType.yaml", - "category": "classes" - }, - { - "name": "OnlineNewsArchive", - "path": "modules/classes/OnlineNewsArchive.yaml", - "category": "classes" - }, - { - "name": "Organization", - "path": "modules/classes/Organization.yaml", - "category": "classes" - }, - { - "name": "OrganizationBranch", - "path": "modules/classes/OrganizationBranch.yaml", - "category": "classes" - }, - { - "name": "OrganizationalChangeEvent", - "path": "modules/classes/OrganizationalChangeEvent.yaml", - "category": "classes" - }, - { - "name": "OrganizationalStructure", - "path": "modules/classes/OrganizationalStructure.yaml", - "category": "classes" - }, - { - "name": "OrganizationalSubdivision", - "path": "modules/classes/OrganizationalSubdivision.yaml", - "category": "classes" - }, - { - "name": "OutdoorSite", - "path": "modules/classes/OutdoorSite.yaml", - "category": "classes" - }, - { - "name": "ParentOrganizationUnit", - "path": "modules/classes/ParentOrganizationUnit.yaml", - "category": "classes" - }, - { - "name": "ParishArchive", - "path": "modules/classes/ParishArchive.yaml", - "category": "classes" - }, - { - "name": "ParliamentaryArchives", - "path": "modules/classes/ParliamentaryArchives.yaml", - "category": "classes" - }, - { - "name": "PartyArchive", - "path": "modules/classes/PartyArchive.yaml", - "category": "classes" - }, - { - "name": "PerformingArtsArchive", - "path": "modules/classes/PerformingArtsArchive.yaml", - "category": "classes" - }, - { - "name": "PersonObservation", - "path": "modules/classes/PersonObservation.yaml", - "category": "classes" - }, - { - "name": "PersonConnection", - "path": "modules/classes/PersonConnection.yaml", - "category": "classes" - }, - { - "name": "PersonOrOrganization", - "path": "modules/classes/PersonOrOrganization.yaml", - "category": "classes" - }, - { - "name": "PersonalCollectionType", - "path": "modules/classes/PersonalCollectionType.yaml", - "category": "classes" - }, - { - "name": "PersonalLibrary", - "path": "modules/classes/PersonalLibrary.yaml", - "category": "classes" - }, - { - "name": "Personenstandsarchiv", - "path": "modules/classes/Personenstandsarchiv.yaml", - "category": "classes" - }, - { - "name": "PhotoArchive", - "path": "modules/classes/PhotoArchive.yaml", - "category": "classes" - }, - { - "name": "PhotographCollection", - "path": "modules/classes/PhotographCollection.yaml", - "category": "classes" - }, - { - "name": "PoliticalArchive", - "path": "modules/classes/PoliticalArchive.yaml", - "category": "classes" - }, - { - "name": "PostcustodialArchive", - "path": "modules/classes/PostcustodialArchive.yaml", - "category": "classes" - }, - { - "name": "PressArchive", - "path": "modules/classes/PressArchive.yaml", - "category": "classes" - }, - { - "name": "PrimaryDigitalPresenceAssertion", - "path": "modules/classes/PrimaryDigitalPresenceAssertion.yaml", - "category": "classes" - }, - { - "name": "PrintRoom", - "path": "modules/classes/PrintRoom.yaml", - "category": "classes" - }, - { - "name": "Project", - "path": "modules/classes/Project.yaml", - "category": "classes" - }, - { - "name": "ProvincialArchive", - "path": "modules/classes/ProvincialArchive.yaml", - "category": "classes" - }, - { - "name": "ProvincialHistoricalArchive", - "path": "modules/classes/ProvincialHistoricalArchive.yaml", - "category": "classes" - }, - { - "name": "PublicArchive", - "path": "modules/classes/PublicArchive.yaml", - "category": "classes" - }, - { - "name": "PublicArchivesInFrance", - "path": "modules/classes/PublicArchivesInFrance.yaml", - "category": "classes" - }, - { - "name": "PublicSpace", - "path": "modules/classes/PublicSpace.yaml", - "category": "classes" - }, - { - "name": "RadioArchive", - "path": "modules/classes/RadioArchive.yaml", - "category": "classes" - }, - { - "name": "ReadingRoom", - "path": "modules/classes/ReadingRoom.yaml", - "category": "classes" - }, - { - "name": "ReadingRoomAnnex", - "path": "modules/classes/ReadingRoomAnnex.yaml", - "category": "classes" - }, - { - "name": "ReconstructedEntity", - "path": "modules/classes/ReconstructedEntity.yaml", - "category": "classes" - }, - { - "name": "ReconstructionActivity", - "path": "modules/classes/ReconstructionActivity.yaml", - "category": "classes" - }, - { - "name": "ReconstructionAgent", - "path": "modules/classes/ReconstructionAgent.yaml", - "category": "classes" - }, - { - "name": "RegionalArchive", - "path": "modules/classes/RegionalArchive.yaml", - "category": "classes" - }, - { - "name": "RegionalArchivesInIceland", - "path": "modules/classes/RegionalArchivesInIceland.yaml", - "category": "classes" - }, - { - "name": "RegionalEconomicArchive", - "path": "modules/classes/RegionalEconomicArchive.yaml", - "category": "classes" - }, - { - "name": "RegionalHistoricCenter", - "path": "modules/classes/RegionalHistoricCenter.yaml", - "category": "classes" - }, - { - "name": "RegionalStateArchives", - "path": "modules/classes/RegionalStateArchives.yaml", - "category": "classes" - }, - { - "name": "RegistrationAuthority", - "path": "modules/classes/RegistrationAuthority.yaml", - "category": "classes" - }, - { - "name": "RegistrationInfo", - "path": "modules/classes/RegistrationInfo.yaml", - "category": "classes" - }, - { - "name": "ReligiousArchive", - "path": "modules/classes/ReligiousArchive.yaml", - "category": "classes" - }, - { - "name": "ResearchCenter", - "path": "modules/classes/ResearchCenter.yaml", - "category": "classes" - }, - { - "name": "ResearchOrganizationType", - "path": "modules/classes/ResearchOrganizationType.yaml", - "category": "classes" - }, - { - "name": "SchoolArchive", - "path": "modules/classes/SchoolArchive.yaml", - "category": "classes" - }, - { - "name": "ScientificArchive", - "path": "modules/classes/ScientificArchive.yaml", - "category": "classes" - }, - { - "name": "ScientificTechnicAndIndustrialCultureCenter", - "path": "modules/classes/ScientificTechnicAndIndustrialCultureCenter.yaml", - "category": "classes" - }, - { - "name": "SectorOfArchivesInSweden", - "path": "modules/classes/SectorOfArchivesInSweden.yaml", - "category": "classes" - }, - { - "name": "SecurityArchives", - "path": "modules/classes/SecurityArchives.yaml", - "category": "classes" - }, - { - "name": "ServiceArea", - "path": "modules/classes/ServiceArea.yaml", - "category": "classes" - }, - { - "name": "Settlement", - "path": "modules/classes/Settlement.yaml", - "category": "classes" - }, - { - "name": "SocialMediaPlatformType", - "path": "modules/classes/SocialMediaPlatformType.yaml", - "category": "classes" - }, - { - "name": "SocialMediaPlatformTypes", - "path": "modules/classes/SocialMediaPlatformTypes.yaml", - "category": "classes" - }, - { - "name": "SocialMediaProfile", - "path": "modules/classes/SocialMediaProfile.yaml", - "category": "classes" - }, - { - "name": "SocialSpace", - "path": "modules/classes/SocialSpace.yaml", - "category": "classes" - }, - { - "name": "SoundArchive", - "path": "modules/classes/SoundArchive.yaml", - "category": "classes" - }, - { - "name": "SourceDocument", - "path": "modules/classes/SourceDocument.yaml", - "category": "classes" - }, - { - "name": "SpecialCollection", - "path": "modules/classes/SpecialCollection.yaml", - "category": "classes" - }, - { - "name": "SpecializedArchive", - "path": "modules/classes/SpecializedArchive.yaml", - "category": "classes" - }, - { - "name": "SpecializedArchivesCzechia", - "path": "modules/classes/SpecializedArchivesCzechia.yaml", - "category": "classes" - }, - { - "name": "StaffRole", - "path": "modules/classes/StaffRole.yaml", - "category": "classes" - }, - { - "name": "StaffRoles", - "path": "modules/classes/StaffRoles.yaml", - "category": "classes" - }, - { - "name": "Standard", - "path": "modules/classes/Standard.yaml", - "category": "classes" - }, - { - "name": "StandardsOrganization", - "path": "modules/classes/StandardsOrganization.yaml", - "category": "classes" - }, - { - "name": "StateArchives", - "path": "modules/classes/StateArchives.yaml", - "category": "classes" - }, - { - "name": "StateArchivesSection", - "path": "modules/classes/StateArchivesSection.yaml", - "category": "classes" - }, - { - "name": "StateDistrictArchive", - "path": "modules/classes/StateDistrictArchive.yaml", - "category": "classes" - }, - { - "name": "StateRegionalArchiveCzechia", - "path": "modules/classes/StateRegionalArchiveCzechia.yaml", - "category": "classes" - }, - { - "name": "Storage", - "path": "modules/classes/Storage.yaml", - "category": "classes" - }, - { - "name": "StorageCondition", - "path": "modules/classes/StorageCondition.yaml", - "category": "classes" - }, - { - "name": "StorageConditionPolicy", - "path": "modules/classes/StorageConditionPolicy.yaml", - "category": "classes" - }, - { - "name": "StorageType", - "path": "modules/classes/StorageType.yaml", - "category": "classes" - }, - { - "name": "Subregion", - "path": "modules/classes/Subregion.yaml", - "category": "classes" - }, - { - "name": "SubsidiaryOrganization", - "path": "modules/classes/SubsidiaryOrganization.yaml", - "category": "classes" - }, - { - "name": "TasteScentHeritageType", - "path": "modules/classes/TasteScentHeritageType.yaml", - "category": "classes" - }, - { - "name": "TelevisionArchive", - "path": "modules/classes/TelevisionArchive.yaml", - "category": "classes" - }, - { - "name": "TemporaryLocation", - "path": "modules/classes/TemporaryLocation.yaml", - "category": "classes" - }, - { - "name": "TentativeWorldHeritageSite", - "path": "modules/classes/TentativeWorldHeritageSite.yaml", - "category": "classes" - }, - { - "name": "TimeSpan", - "path": "modules/classes/TimeSpan.yaml", - "category": "classes" - }, - { - "name": "TradeRegister", - "path": "modules/classes/TradeRegister.yaml", - "category": "classes" - }, - { - "name": "TradeUnionArchive", - "path": "modules/classes/TradeUnionArchive.yaml", - "category": "classes" - }, - { - "name": "UniversityArchive", - "path": "modules/classes/UniversityArchive.yaml", - "category": "classes" - }, - { - "name": "UnspecifiedType", - "path": "modules/classes/UnspecifiedType.yaml", - "category": "classes" - }, - { - "name": "Vereinsarchiv", - "path": "modules/classes/Vereinsarchiv.yaml", - "category": "classes" - }, - { - "name": "Verlagsarchiv", - "path": "modules/classes/Verlagsarchiv.yaml", - "category": "classes" - }, - { - "name": "Verwaltungsarchiv", - "path": "modules/classes/Verwaltungsarchiv.yaml", - "category": "classes" - }, - { - "name": "VirtualMapLibrary", - "path": "modules/classes/VirtualMapLibrary.yaml", - "category": "classes" - }, - { - "name": "Warehouse", - "path": "modules/classes/Warehouse.yaml", - "category": "classes" - }, - { - "name": "WebArchive", - "path": "modules/classes/WebArchive.yaml", - "category": "classes" - }, - { - "name": "WebClaim", - "path": "modules/classes/WebClaim.yaml", - "category": "classes" - }, - { - "name": "WebObservation", - "path": "modules/classes/WebObservation.yaml", - "category": "classes" - }, - { - "name": "WebPortal", - "path": "modules/classes/WebPortal.yaml", - "category": "classes" - }, - { - "name": "WebPortalType", - "path": "modules/classes/WebPortalType.yaml", - "category": "classes" - }, - { - "name": "WebPortalTypes", - "path": "modules/classes/WebPortalTypes.yaml", - "category": "classes" - }, - { - "name": "WomensArchives", - "path": "modules/classes/WomensArchives.yaml", - "category": "classes" - }, - { - "name": "WorldHeritageSite", - "path": "modules/classes/WorldHeritageSite.yaml", - "category": "classes" - }, - { - "name": "WorkExperience", - "path": "modules/classes/WorkExperience.yaml", - "category": "classes" - } - ] - }, - { - "name": "enum", - "displayName": "Enumerations", - "files": [ - { - "name": "AgentTypeEnum", - "path": "modules/enums/AgentTypeEnum.yaml", - "category": "enums" - }, - { - "name": "AppellationTypeEnum", - "path": "modules/enums/AppellationTypeEnum.yaml", - "category": "enums" - }, - { - "name": "ArchiveProcessingStatusEnum", - "path": "modules/enums/ArchiveProcessingStatusEnum.yaml", - "category": "enums" - }, - { - "name": "ArchiveTypeEnum", - "path": "modules/enums/ArchiveTypeEnum.yaml", - "category": "enums" - }, - { - "name": "AuxiliaryDigitalPlatformTypeEnum", - "path": "modules/enums/AuxiliaryDigitalPlatformTypeEnum.yaml", - "category": "enums" - }, - { - "name": "AuxiliaryPlaceTypeEnum", - "path": "modules/enums/AuxiliaryPlaceTypeEnum.yaml", - "category": "enums" - }, - { - "name": "BioCustodianTypeEnum", - "path": "modules/enums/BioCustodianTypeEnum.yaml", - "category": "enums" - }, - { - "name": "CallForApplicationStatusEnum", - "path": "modules/enums/CallForApplicationStatusEnum.yaml", - "category": "enums" - }, - { - "name": "CanonicalClaimTypes", - "path": "modules/enums/CanonicalClaimTypes.yaml", - "category": "enums" - }, - { - "name": "CommercialCustodianTypeEnum", - "path": "modules/enums/CommercialCustodianTypeEnum.yaml", - "category": "enums" - }, - { - "name": "CustodianPrimaryTypeEnum", - "path": "modules/enums/CustodianPrimaryTypeEnum.yaml", - "category": "enums" - }, - { - "name": "DigitalPlatformTypeEnum", - "path": "modules/enums/DigitalPlatformTypeEnum.yaml", - "category": "enums" - }, - { - "name": "DigitalPresenceTypeEnum", - "path": "modules/enums/DigitalPresenceTypeEnum.yaml", - "category": "enums" - }, - { - "name": "EducationProviderTypeEnum", - "path": "modules/enums/EducationProviderTypeEnum.yaml", - "category": "enums" - }, - { - "name": "EncompassingBodyTypeEnum", - "path": "modules/enums/EncompassingBodyTypeEnum.yaml", - "category": "enums" - }, - { - "name": "EntityTypeEnum", - "path": "modules/enums/EntityTypeEnum.yaml", - "category": "enums" - }, - { - "name": "EventStatusEnum", - "path": "modules/enums/EventStatusEnum.yaml", - "category": "enums" - }, - { - "name": "FeatureTypeEnum", - "path": "modules/enums/FeatureTypeEnum.yaml", - "category": "enums" - }, - { - "name": "FinancialStatementTypeEnum", - "path": "modules/enums/FinancialStatementTypeEnum.yaml", - "category": "enums" - }, - { - "name": "FundingRequirementTypeEnum", - "path": "modules/enums/FundingRequirementTypeEnum.yaml", - "category": "enums" - }, - { - "name": "GalleryTypeEnum", - "path": "modules/enums/GalleryTypeEnum.yaml", - "category": "enums" - }, - { - "name": "GiftShopTypeEnum", - "path": "modules/enums/GiftShopTypeEnum.yaml", - "category": "enums" - }, - { - "name": "HeritageSocietyTypeEnum", - "path": "modules/enums/HeritageSocietyTypeEnum.yaml", - "category": "enums" - }, - { - "name": "HeritageTypeEnum", - "path": "modules/enums/HeritageTypeEnum.yaml", - "category": "enums" - }, - { - "name": "HolySiteTypeEnum", - "path": "modules/enums/HolySiteTypeEnum.yaml", - "category": "enums" - }, - { - "name": "ICHViabilityStatusEnum", - "path": "modules/enums/ICHViabilityStatusEnum.yaml", - "category": "enums" - }, - { - "name": "IntangibleHeritageTypeEnum", - "path": "modules/enums/IntangibleHeritageTypeEnum.yaml", - "category": "enums" - }, - { - "name": "LegalStatusEnum", - "path": "modules/enums/LegalStatusEnum.yaml", - "category": "enums" - }, - { - "name": "LibraryTypeEnum", - "path": "modules/enums/LibraryTypeEnum.yaml", - "category": "enums" - }, - { - "name": "MuseumTypeEnum", - "path": "modules/enums/MuseumTypeEnum.yaml", - "category": "enums" - }, - { - "name": "NonProfitCustodianTypeEnum", - "path": "modules/enums/NonProfitCustodianTypeEnum.yaml", - "category": "enums" - }, - { - "name": "OfficialInstitutionTypeEnum", - "path": "modules/enums/OfficialInstitutionTypeEnum.yaml", - "category": "enums" - }, - { - "name": "OrganizationBranchTypeEnum", - "path": "modules/enums/OrganizationBranchTypeEnum.yaml", - "category": "enums" - }, - { - "name": "OrganizationalChangeEventTypeEnum", - "path": "modules/enums/OrganizationalChangeEventTypeEnum.yaml", - "category": "enums" - }, - { - "name": "OrganizationalUnitTypeEnum", - "path": "modules/enums/OrganizationalUnitTypeEnum.yaml", - "category": "enums" - }, - { - "name": "PersonalCollectionTypeEnum", - "path": "modules/enums/PersonalCollectionTypeEnum.yaml", - "category": "enums" - }, - { - "name": "PlaceSpecificityEnum", - "path": "modules/enums/PlaceSpecificityEnum.yaml", - "category": "enums" - }, - { - "name": "ProductCategoryEnum", - "path": "modules/enums/ProductCategoryEnum.yaml", - "category": "enums" - }, - { - "name": "ProjectStatusEnum", - "path": "modules/enums/ProjectStatusEnum.yaml", - "category": "enums" - }, - { - "name": "ReconstructionActivityTypeEnum", - "path": "modules/enums/ReconstructionActivityTypeEnum.yaml", - "category": "enums" - }, - { - "name": "RecordsLifecycleStageEnum", - "path": "modules/enums/RecordsLifecycleStageEnum.yaml", - "category": "enums" - }, - { - "name": "ResearchCenterTypeEnum", - "path": "modules/enums/ResearchCenterTypeEnum.yaml", - "category": "enums" - }, - { - "name": "ServiceAreaTypeEnum", - "path": "modules/enums/ServiceAreaTypeEnum.yaml", - "category": "enums" - }, - { - "name": "SourceDocumentTypeEnum", - "path": "modules/enums/SourceDocumentTypeEnum.yaml", - "category": "enums" - }, - { - "name": "StorageConditionStatusEnum", - "path": "modules/enums/StorageConditionStatusEnum.yaml", - "category": "enums" - }, - { - "name": "StorageObserverTypeEnum", - "path": "modules/enums/StorageObserverTypeEnum.yaml", - "category": "enums" - }, - { - "name": "StorageStandardEnum", - "path": "modules/enums/StorageStandardEnum.yaml", - "category": "enums" - }, - { - "name": "StorageTypeEnum", - "path": "modules/enums/StorageTypeEnum.yaml", - "category": "enums" - }, - { - "name": "TasteScentHeritageTypeEnum", - "path": "modules/enums/TasteScentHeritageTypeEnum.yaml", - "category": "enums" - }, - { - "name": "UNESCOICHDomainEnum", - "path": "modules/enums/UNESCOICHDomainEnum.yaml", - "category": "enums" - }, - { - "name": "UNESCOListStatusEnum", - "path": "modules/enums/UNESCOListStatusEnum.yaml", - "category": "enums" - } - ] - }, - { - "name": "slot", - "displayName": "Slots", - "files": [ - { - "name": "access_policy", - "path": "modules/slots/access_policy.yaml", - "category": "slots" - }, - { - "name": "access_restrictions", - "path": "modules/slots/access_restrictions.yaml", - "category": "slots" - }, - { - "name": "activity_type", - "path": "modules/slots/activity_type.yaml", - "category": "slots" - }, - { - "name": "affected_by_event", - "path": "modules/slots/affected_by_event.yaml", - "category": "slots" - }, - { - "name": "affected_units", - "path": "modules/slots/affected_units.yaml", - "category": "slots" - }, - { - "name": "affects_organization", - "path": "modules/slots/affects_organization.yaml", - "category": "slots" - }, - { - "name": "affiliation", - "path": "modules/slots/affiliation.yaml", - "category": "slots" - }, - { - "name": "agent_name", - "path": "modules/slots/agent_name.yaml", - "category": "slots" - }, - { - "name": "agent_type", - "path": "modules/slots/agent_type.yaml", - "category": "slots" - }, - { - "name": "allocated_by", - "path": "modules/slots/allocated_by.yaml", - "category": "slots" - }, - { - "name": "allocates", - "path": "modules/slots/allocates.yaml", - "category": "slots" - }, - { - "name": "allocation_date", - "path": "modules/slots/allocation_date.yaml", - "category": "slots" - }, - { - "name": "also_identifies_name", - "path": "modules/slots/also_identifies_name.yaml", - "category": "slots" - }, - { - "name": "alternative_names", - "path": "modules/slots/alternative_names.yaml", - "category": "slots" - }, - { - "name": "alternative_observed_names", - "path": "modules/slots/alternative_observed_names.yaml", - "category": "slots" - }, - { - "name": "altitude", - "path": "modules/slots/altitude.yaml", - "category": "slots" - }, - { - "name": "api_endpoint", - "path": "modules/slots/api_endpoint.yaml", - "category": "slots" - }, - { - "name": "appellation_language", - "path": "modules/slots/appellation_language.yaml", - "category": "slots" - }, - { - "name": "appellation_type", - "path": "modules/slots/appellation_type.yaml", - "category": "slots" - }, - { - "name": "appellation_value", - "path": "modules/slots/appellation_value.yaml", - "category": "slots" - }, - { - "name": "appellations", - "path": "modules/slots/appellations.yaml", - "category": "slots" - }, - { - "name": "archived_at", - "path": "modules/slots/archived_at.yaml", - "category": "slots" - }, - { - "name": "arrangement_system", - "path": "modules/slots/arrangement_system.yaml", - "category": "slots" - }, - { - "name": "auxiliary_places", - "path": "modules/slots/auxiliary_places.yaml", - "category": "slots" - }, - { - "name": "auxiliary_platforms", - "path": "modules/slots/auxiliary_platforms.yaml", - "category": "slots" - }, - { - "name": "begin_of_the_begin", - "path": "modules/slots/begin_of_the_begin.yaml", - "category": "slots" - }, - { - "name": "begin_of_the_end", - "path": "modules/slots/begin_of_the_end.yaml", - "category": "slots" - }, - { - "name": "canonical_value", - "path": "modules/slots/canonical_value.yaml", - "category": "slots" - }, - { - "name": "cataloging_standard", - "path": "modules/slots/cataloging_standard.yaml", - "category": "slots" - }, - { - "name": "change_rationale", - "path": "modules/slots/change_rationale.yaml", - "category": "slots" - }, - { - "name": "circumstances_of_death", - "path": "modules/slots/circumstances_of_death.yaml", - "category": "slots" - }, - { - "name": "city", - "path": "modules/slots/city.yaml", - "category": "slots" - }, - { - "name": "collection_description", - "path": "modules/slots/collection_description.yaml", - "category": "slots" - }, - { - "name": "collection_focus", - "path": "modules/slots/collection_focus.yaml", - "category": "slots" - }, - { - "name": "collection_name", - "path": "modules/slots/collection_name.yaml", - "category": "slots" - }, - { - "name": "collection_of", - "path": "modules/slots/collection_of.yaml", - "category": "slots" - }, - { - "name": "collection_scope", - "path": "modules/slots/collection_scope.yaml", - "category": "slots" - }, - { - "name": "collection_size", - "path": "modules/slots/collection_size.yaml", - "category": "slots" - }, - { - "name": "collection_type", - "path": "modules/slots/collection_type.yaml", - "category": "slots" - }, - { - "name": "collections_under_responsibility", - "path": "modules/slots/collections_under_responsibility.yaml", - "category": "slots" - }, - { - "name": "confidence_method", - "path": "modules/slots/confidence_method.yaml", - "category": "slots" - }, - { - "name": "confidence_score", - "path": "modules/slots/confidence_score.yaml", - "category": "slots" - }, - { - "name": "confidence_value", - "path": "modules/slots/confidence_value.yaml", - "category": "slots" - }, - { - "name": "contact", - "path": "modules/slots/contact.yaml", - "category": "slots" - }, - { - "name": "contact_email", - "path": "modules/slots/contact_email.yaml", - "category": "slots" - }, - { - "name": "contact_point", - "path": "modules/slots/contact_point.yaml", - "category": "slots" - }, - { - "name": "country", - "path": "modules/slots/country.yaml", - "category": "slots" - }, - { - "name": "created", - "path": "modules/slots/created.yaml", - "category": "slots" - }, - { - "name": "custodian_names", - "path": "modules/slots/custodian_names.yaml", - "category": "slots" - }, - { - "name": "custodian_observations", - "path": "modules/slots/custodian_observations.yaml", - "category": "slots" - }, - { - "name": "custodian_type", - "path": "modules/slots/custodian_type.yaml", - "category": "slots" - }, - { - "name": "custodians", - "path": "modules/slots/custodians.yaml", - "category": "slots" - }, - { - "name": "data_license_policy", - "path": "modules/slots/data_license_policy.yaml", - "category": "slots" - }, - { - "name": "date_of_death", - "path": "modules/slots/date_of_death.yaml", - "category": "slots" - }, - { - "name": "deceased", - "path": "modules/slots/deceased.yaml", - "category": "slots" - }, - { - "name": "defined_by_standard", - "path": "modules/slots/defined_by_standard.yaml", - "category": "slots" - }, - { - "name": "derived_from_entity", - "path": "modules/slots/derived_from_entity.yaml", - "category": "slots" - }, - { - "name": "description", - "path": "modules/slots/description.yaml", - "category": "slots" - }, - { - "name": "digital_platform", - "path": "modules/slots/digital_platform.yaml", - "category": "slots" - }, - { - "name": "dissolution_date", - "path": "modules/slots/dissolution_date.yaml", - "category": "slots" - }, - { - "name": "documentation_source", - "path": "modules/slots/documentation_source.yaml", - "category": "slots" - }, - { - "name": "documentation_url", - "path": "modules/slots/documentation_url.yaml", - "category": "slots" - }, - { - "name": "emic_name", - "path": "modules/slots/emic_name.yaml", - "category": "slots" - }, - { - "name": "encompasses", - "path": "modules/slots/encompasses.yaml", - "category": "slots" - }, - { - "name": "encompassing_body", - "path": "modules/slots/encompassing_body.yaml", - "category": "slots" - }, - { - "name": "end_of_the_begin", - "path": "modules/slots/end_of_the_begin.yaml", - "category": "slots" - }, - { - "name": "end_of_the_end", - "path": "modules/slots/end_of_the_end.yaml", - "category": "slots" - }, - { - "name": "ended_at_time", - "path": "modules/slots/ended_at_time.yaml", - "category": "slots" - }, - { - "name": "endorsement_source", - "path": "modules/slots/endorsement_source.yaml", - "category": "slots" - }, - { - "name": "event_date", - "path": "modules/slots/event_date.yaml", - "category": "slots" - }, - { - "name": "event_description", - "path": "modules/slots/event_description.yaml", - "category": "slots" - }, - { - "name": "event_type", - "path": "modules/slots/event_type.yaml", - "category": "slots" - }, - { - "name": "expertise_areas", - "path": "modules/slots/expertise_areas.yaml", - "category": "slots" - }, - { - "name": "exposed_via_portal", - "path": "modules/slots/exposed_via_portal.yaml", - "category": "slots" - }, - { - "name": "exposes_collections", - "path": "modules/slots/exposes_collections.yaml", - "category": "slots" - }, - { - "name": "extent", - "path": "modules/slots/extent.yaml", - "category": "slots" - }, - { - "name": "extraction_confidence", - "path": "modules/slots/extraction_confidence.yaml", - "category": "slots" - }, - { - "name": "extraction_notes", - "path": "modules/slots/extraction_notes.yaml", - "category": "slots" - }, - { - "name": "feeds_portal", - "path": "modules/slots/feeds_portal.yaml", - "category": "slots" - }, - { - "name": "funding_source", - "path": "modules/slots/funding_source.yaml", - "category": "slots" - }, - { - "name": "generates", - "path": "modules/slots/generates.yaml", - "category": "slots" - }, - { - "name": "geographic_scope", - "path": "modules/slots/geographic_scope.yaml", - "category": "slots" - }, - { - "name": "geonames_id", - "path": "modules/slots/geonames_id.yaml", - "category": "slots" - }, - { - "name": "governance_structure", - "path": "modules/slots/governance_structure.yaml", - "category": "slots" - }, - { - "name": "has_collection", - "path": "modules/slots/has_collection.yaml", - "category": "slots" - }, - { - "name": "has_derived_observation", - "path": "modules/slots/has_derived_observation.yaml", - "category": "slots" - }, - { - "name": "has_feature_type", - "path": "modules/slots/has_feature_type.yaml", - "category": "slots" - }, - { - "name": "has_geospatial_location", - "path": "modules/slots/has_geospatial_location.yaml", - "category": "slots" - }, - { - "name": "has_member", - "path": "modules/slots/has_member.yaml", - "category": "slots" - }, - { - "name": "has_observation", - "path": "modules/slots/has_observation.yaml", - "category": "slots" - }, - { - "name": "has_suborganization", - "path": "modules/slots/has_suborganization.yaml", - "category": "slots" - }, - { - "name": "has_unit", - "path": "modules/slots/has_unit.yaml", - "category": "slots" - }, - { - "name": "hc_id", - "path": "modules/slots/hc_id.yaml", - "category": "slots" - }, - { - "name": "id", - "path": "modules/slots/id.yaml", - "category": "slots" - }, - { - "name": "identified_by", - "path": "modules/slots/identified_by.yaml", - "category": "slots" - }, - { - "name": "identifier_format_used", - "path": "modules/slots/identifier_format_used.yaml", - "category": "slots" - }, - { - "name": "identifier_scheme", - "path": "modules/slots/identifier_scheme.yaml", - "category": "slots" - }, - { - "name": "identifier_value", - "path": "modules/slots/identifier_value.yaml", - "category": "slots" - }, - { - "name": "identifiers", - "path": "modules/slots/identifiers.yaml", - "category": "slots" - }, - { - "name": "identifies", - "path": "modules/slots/identifies.yaml", - "category": "slots" - }, - { - "name": "identifies_custodian", - "path": "modules/slots/identifies_custodian.yaml", - "category": "slots" - }, - { - "name": "is_legal_status_of", - "path": "modules/slots/is_legal_status_of.yaml", - "category": "slots" - }, - { - "name": "is_member_of", - "path": "modules/slots/is_member_of.yaml", - "category": "slots" - }, - { - "name": "jurisdiction", - "path": "modules/slots/jurisdiction.yaml", - "category": "slots" - }, - { - "name": "justification", - "path": "modules/slots/justification.yaml", - "category": "slots" - }, - { - "name": "keywords", - "path": "modules/slots/keywords.yaml", - "category": "slots" - }, - { - "name": "language", - "path": "modules/slots/language.yaml", - "category": "slots" - }, - { - "name": "language_code", - "path": "modules/slots/language_code.yaml", - "category": "slots" - }, - { - "name": "latitude", - "path": "modules/slots/latitude.yaml", - "category": "slots" - }, - { - "name": "legal_entity_type", - "path": "modules/slots/legal_entity_type.yaml", - "category": "slots" - }, - { - "name": "legal_form", - "path": "modules/slots/legal_form.yaml", - "category": "slots" - }, - { - "name": "legal_jurisdiction", - "path": "modules/slots/legal_jurisdiction.yaml", - "category": "slots" - }, - { - "name": "legal_name", - "path": "modules/slots/legal_name.yaml", - "category": "slots" - }, - { - "name": "legal_responsibility_basis", - "path": "modules/slots/legal_responsibility_basis.yaml", - "category": "slots" - }, - { - "name": "legal_responsibility_end_date", - "path": "modules/slots/legal_responsibility_end_date.yaml", - "category": "slots" - }, - { - "name": "legal_responsibility_start_date", - "path": "modules/slots/legal_responsibility_start_date.yaml", - "category": "slots" - }, - { - "name": "legal_status", - "path": "modules/slots/legal_status.yaml", - "category": "slots" - }, - { - "name": "located_at", - "path": "modules/slots/located_at.yaml", - "category": "slots" - }, - { - "name": "longitude", - "path": "modules/slots/longitude.yaml", - "category": "slots" - }, - { - "name": "managed_by", - "path": "modules/slots/managed_by.yaml", - "category": "slots" - }, - { - "name": "managed_collections", - "path": "modules/slots/managed_collections.yaml", - "category": "slots" - }, - { - "name": "managing_unit", - "path": "modules/slots/managing_unit.yaml", - "category": "slots" - }, - { - "name": "martyred", - "path": "modules/slots/martyred.yaml", - "category": "slots" - }, - { - "name": "metadata_standards", - "path": "modules/slots/metadata_standards.yaml", - "category": "slots" - }, - { - "name": "method", - "path": "modules/slots/method.yaml", - "category": "slots" - }, - { - "name": "modified", - "path": "modules/slots/modified.yaml", - "category": "slots" - }, - { - "name": "name_authority", - "path": "modules/slots/name_authority.yaml", - "category": "slots" - }, - { - "name": "name_language", - "path": "modules/slots/name_language.yaml", - "category": "slots" - }, - { - "name": "name_validity_period", - "path": "modules/slots/name_validity_period.yaml", - "category": "slots" - }, - { - "name": "oai_pmh_endpoint", - "path": "modules/slots/oai_pmh_endpoint.yaml", - "category": "slots" - }, - { - "name": "observation_context", - "path": "modules/slots/observation_context.yaml", - "category": "slots" - }, - { - "name": "observation_date", - "path": "modules/slots/observation_date.yaml", - "category": "slots" - }, - { - "name": "observation_source", - "path": "modules/slots/observation_source.yaml", - "category": "slots" - }, - { - "name": "observed_name", - "path": "modules/slots/observed_name.yaml", - "category": "slots" - }, - { - "name": "operated_by", - "path": "modules/slots/operated_by.yaml", - "category": "slots" - }, - { - "name": "operates", - "path": "modules/slots/operates.yaml", - "category": "slots" - }, - { - "name": "organizational_change_events", - "path": "modules/slots/organizational_change_events.yaml", - "category": "slots" - }, - { - "name": "organizational_structure", - "path": "modules/slots/organizational_structure.yaml", - "category": "slots" - }, - { - "name": "organizational_structures", - "path": "modules/slots/organizational_structures.yaml", - "category": "slots" - }, - { - "name": "parent_custodian", - "path": "modules/slots/parent_custodian.yaml", - "category": "slots" - }, - { - "name": "parent_unit", - "path": "modules/slots/parent_unit.yaml", - "category": "slots" - }, - { - "name": "person_name", - "path": "modules/slots/person_name.yaml", - "category": "slots" - }, - { - "name": "place_designation", - "path": "modules/slots/place_designation.yaml", - "category": "slots" - }, - { - "name": "place_language", - "path": "modules/slots/place_language.yaml", - "category": "slots" - }, - { - "name": "place_name", - "path": "modules/slots/place_name.yaml", - "category": "slots" - }, - { - "name": "place_note", - "path": "modules/slots/place_note.yaml", - "category": "slots" - }, - { - "name": "place_specificity", - "path": "modules/slots/place_specificity.yaml", - "category": "slots" - }, - { - "name": "platform_name", - "path": "modules/slots/platform_name.yaml", - "category": "slots" - }, - { - "name": "platform_of", - "path": "modules/slots/platform_of.yaml", - "category": "slots" - }, - { - "name": "platform_type", - "path": "modules/slots/platform_type.yaml", - "category": "slots" - }, - { - "name": "portal_data_sources", - "path": "modules/slots/portal_data_sources.yaml", - "category": "slots" - }, - { - "name": "postal_code", - "path": "modules/slots/postal_code.yaml", - "category": "slots" - }, - { - "name": "powered_by_cms", - "path": "modules/slots/powered_by_cms.yaml", - "category": "slots" - }, - { - "name": "preferred_label", - "path": "modules/slots/preferred_label.yaml", - "category": "slots" - }, - { - "name": "preservation_level", - "path": "modules/slots/preservation_level.yaml", - "category": "slots" - }, - { - "name": "primary_register", - "path": "modules/slots/primary_register.yaml", - "category": "slots" - }, - { - "name": "provenance_note", - "path": "modules/slots/provenance_note.yaml", - "category": "slots" - }, - { - "name": "reconstruction_method", - "path": "modules/slots/reconstruction_method.yaml", - "category": "slots" - }, - { - "name": "refers_to_custodian", - "path": "modules/slots/refers_to_custodian.yaml", - "category": "slots" - }, - { - "name": "registration_authority", - "path": "modules/slots/registration_authority.yaml", - "category": "slots" - }, - { - "name": "registration_date", - "path": "modules/slots/registration_date.yaml", - "category": "slots" - }, - { - "name": "registration_numbers", - "path": "modules/slots/registration_numbers.yaml", - "category": "slots" - }, - { - "name": "responsible_agent", - "path": "modules/slots/responsible_agent.yaml", - "category": "slots" - }, - { - "name": "responsible_legal_entity", - "path": "modules/slots/responsible_legal_entity.yaml", - "category": "slots" - }, - { - "name": "resulting_units", - "path": "modules/slots/resulting_units.yaml", - "category": "slots" - }, - { - "name": "retrieved_on", - "path": "modules/slots/retrieved_on.yaml", - "category": "slots" - }, - { - "name": "role_end_date", - "path": "modules/slots/role_end_date.yaml", - "category": "slots" - }, - { - "name": "role_start_date", - "path": "modules/slots/role_start_date.yaml", - "category": "slots" - }, - { - "name": "role_title", - "path": "modules/slots/role_title.yaml", - "category": "slots" - }, - { - "name": "safeguarded_by", - "path": "modules/slots/safeguarded_by.yaml", - "category": "slots" - }, - { - "name": "safeguards", - "path": "modules/slots/safeguards.yaml", - "category": "slots" - }, - { - "name": "service_area", - "path": "modules/slots/service_area.yaml", - "category": "slots" - }, - { - "name": "settlement", - "path": "modules/slots/settlement.yaml", - "category": "slots" - }, - { - "name": "source", - "path": "modules/slots/source.yaml", - "category": "slots" - }, - { - "name": "source_creator", - "path": "modules/slots/source_creator.yaml", - "category": "slots" - }, - { - "name": "source_date", - "path": "modules/slots/source_date.yaml", - "category": "slots" - }, - { - "name": "source_type", - "path": "modules/slots/source_type.yaml", - "category": "slots" - }, - { - "name": "source_uri", - "path": "modules/slots/source_uri.yaml", - "category": "slots" - }, - { - "name": "source_url", - "path": "modules/slots/source_url.yaml", - "category": "slots" - }, - { - "name": "sparql_endpoint", - "path": "modules/slots/sparql_endpoint.yaml", - "category": "slots" - }, - { - "name": "staff_count", - "path": "modules/slots/staff_count.yaml", - "category": "slots" - }, - { - "name": "staff_impact", - "path": "modules/slots/staff_impact.yaml", - "category": "slots" - }, - { - "name": "staff_members", - "path": "modules/slots/staff_members.yaml", - "category": "slots" - }, - { - "name": "staff_role", - "path": "modules/slots/staff_role.yaml", - "category": "slots" - }, - { - "name": "standardized_name", - "path": "modules/slots/standardized_name.yaml", - "category": "slots" - }, - { - "name": "started_at_time", - "path": "modules/slots/started_at_time.yaml", - "category": "slots" - }, - { - "name": "storage_location", - "path": "modules/slots/storage_location.yaml", - "category": "slots" - }, - { - "name": "street_address", - "path": "modules/slots/street_address.yaml", - "category": "slots" - }, - { - "name": "subregion", - "path": "modules/slots/subregion.yaml", - "category": "slots" - }, - { - "name": "superseded_by", - "path": "modules/slots/superseded_by.yaml", - "category": "slots" - }, - { - "name": "supersedes", - "path": "modules/slots/supersedes.yaml", - "category": "slots" - }, - { - "name": "technology_stack", - "path": "modules/slots/technology_stack.yaml", - "category": "slots" - }, - { - "name": "temporal_coverage", - "path": "modules/slots/temporal_coverage.yaml", - "category": "slots" - }, - { - "name": "temporal_extent", - "path": "modules/slots/temporal_extent.yaml", - "category": "slots" - }, - { - "name": "time_of_destruction", - "path": "modules/slots/time_of_destruction.yaml", - "category": "slots" - }, - { - "name": "unit_affiliation", - "path": "modules/slots/unit_affiliation.yaml", - "category": "slots" - }, - { - "name": "unit_name", - "path": "modules/slots/unit_name.yaml", - "category": "slots" - }, - { - "name": "unit_type", - "path": "modules/slots/unit_type.yaml", - "category": "slots" - }, - { - "name": "used", - "path": "modules/slots/used.yaml", - "category": "slots" - }, - { - "name": "used_by", - "path": "modules/slots/used_by.yaml", - "category": "slots" - }, - { - "name": "used_sources", - "path": "modules/slots/used_sources.yaml", - "category": "slots" - }, - { - "name": "valid_from", - "path": "modules/slots/valid_from.yaml", - "category": "slots" - }, - { - "name": "valid_to", - "path": "modules/slots/valid_to.yaml", - "category": "slots" - }, - { - "name": "variant_of_name", - "path": "modules/slots/variant_of_name.yaml", - "category": "slots" - }, - { - "name": "was_derived_from", - "path": "modules/slots/was_derived_from.yaml", - "category": "slots" - }, - { - "name": "was_generated_by", - "path": "modules/slots/was_generated_by.yaml", - "category": "slots" - }, - { - "name": "was_revision_of", - "path": "modules/slots/was_revision_of.yaml", - "category": "slots" - }, - { - "name": "website", - "path": "modules/slots/website.yaml", - "category": "slots" - } - ] - } - ] + ] } \ No newline at end of file diff --git a/schemas/20251121/linkml/modules/classes/AcademicArchive.yaml b/schemas/20251121/linkml/modules/classes/AcademicArchive.yaml index 932229e9fe..f1df774a0f 100644 --- a/schemas/20251121/linkml/modules/classes/AcademicArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/AcademicArchive.yaml @@ -19,19 +19,7 @@ classes: AcademicArchive: is_a: ArchiveOrganizationType class_uri: schema:ArchiveOrganization - description: | - Archive of a higher education institution (university, college, polytechnic). - - **Dual-Class Pattern**: - This class represents the CUSTODIAN type (the archive organization). - For the collection type, see `AcademicArchiveRecordSetType` which maps to `rico:RecordSetType`. - - **Holdings** (linked via rico:isOrWasHolderOf): - Academic archives typically hold records classified under these RecordSetTypes: - - UniversityAdministrativeFonds - Governance, committee, policy records - - StudentRecordSeries - Enrollment, transcripts, graduation records - - FacultyPaperCollection - Personal papers of faculty members - - CampusDocumentationCollection - Photos, publications, ephemera + description: Archive of a higher education institution (university, college, polytechnic). slots: - custodian_types - custodian_types_rationale @@ -73,15 +61,7 @@ classes: - campus life documentation slot_usage: holds_record_set_types: - description: | - Links this custodian type to the record set types it typically holds. - Uses RiC-O property rico:isOrWasHolderOf to express custodial relationship. - - **Academic Archive Holdings**: - - UniversityAdministrativeFonds - Governance, committee, policy records - - StudentRecordSeries - Enrollment, transcripts, graduation records - - FacultyPaperCollection - Personal papers of faculty members - - CampusDocumentationCollection - Photos, publications, ephemera + description: Record set types typically held by academic archives. equals_expression: | ["hc:UniversityAdministrativeFonds", "hc:StudentRecordSeries", "hc:FacultyPaperCollection", "hc:CampusDocumentationCollection"] wikidata_entity: @@ -95,9 +75,9 @@ classes: Typically 'university', 'college', or 'institutional'. Reflects the educational institution's administrative scope. custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: AcademicArchive is an archival institution - maps to ARCHIVE + equals_string: AcademicArchive is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment @@ -140,13 +120,7 @@ classes: - wd:Q1065413 - AcademicArchiveRecordSetType AcademicArchiveRecordSetType: - description: "A rico:RecordSetType for classifying collections of academic and\ - \ higher \neducation institutional records within heritage institutions.\n\n\ - **Dual-Class Pattern**:\nThis class represents the COLLECTION type (rico:RecordSetType).\n\ - For the custodian organization type, see `AcademicArchive`.\n\n**Scope**:\n\ - Used to classify record sets that contain academic institutional materials:\n\ - - University administrative fonds\n- Student record series\n- Faculty paper\ - \ collections\n- Campus documentation collections\n" + description: A rico:RecordSetType for classifying collections of academic and higher education institutional records. is_a: CollectionType class_uri: rico:RecordSetType slots: @@ -166,13 +140,8 @@ classes: Structured scope definitions for AcademicArchiveRecordSetType. Formally documents what types of record sets are classified under this type. comments: - - "**Subclasses (concrete RecordSetTypes)**:\n\nThis abstract type has four concrete\ - \ subclasses defined in \nAcademicArchiveRecordSetTypes.yaml:\n\n1. UniversityAdministrativeFonds\ - \ - Governance, committee, policy records\n2. StudentRecordSeries - Enrollment,\ - \ transcripts, graduation records\n3. FacultyPaperCollection - Personal papers\ - \ of faculty members\n4. CampusDocumentationCollection - Photos, publications,\ - \ ephemera\n\nEach subclass maps to rico:RecordSetType with appropriate broad_mappings\ - \ \nto RiC-O organizational concepts (rico:Fonds, rico:Series, rico:Collection).\n" + - Collection type class for academic/higher education record sets + - Part of dual-class pattern with AcademicArchive (custodian type) structured_aliases: - literal_form: Hochschularchivbestand in_language: de @@ -186,7 +155,7 @@ classes: wikidata_equivalent: equals_string: Q27032435 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: AcademicArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/AcademicArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/AcademicArchiveRecordSetTypes.yaml index 2873fe8481..4d42557708 100644 --- a/schemas/20251121/linkml/modules/classes/AcademicArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/AcademicArchiveRecordSetTypes.yaml @@ -72,7 +72,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: University administrative fonds are held by ARCHIVE (A) type custodians @@ -97,7 +97,7 @@ classes: "strategic planning", "accreditation records"]' scope_excludes: equals_string: '["student records", "faculty papers", "research data"]' - StudentRecordSeries: + AcademicStudentRecordSeries: is_a: AcademicArchiveRecordSetType class_uri: rico:RecordSetType description: "A rico:RecordSetType for student records organized as archival series.\n\ @@ -155,7 +155,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Student record series are held by ARCHIVE (A) type custodians specificity_annotation: @@ -165,7 +165,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: StudentRecordSeries + equals_string: AcademicStudentRecordSeries rico_organizational_principle: equals_string: series rico_organizational_principle_uri: @@ -245,7 +245,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "L"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:LibraryType"]' custodian_types_rationale: equals_string: Faculty papers may be held by ARCHIVE (A) or LIBRARY (L) special collections @@ -334,7 +334,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "L", "M"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:LibraryType", "hc:MuseumType"]' custodian_types_rationale: equals_string: Campus documentation may be held by ARCHIVE (A), LIBRARY (L), or MUSEUM (M) depending on material type diff --git a/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchive.yaml b/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchive.yaml index 6db7a041b8..2f4842803b 100644 --- a/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchive.yaml @@ -87,7 +87,7 @@ classes: wikidata_equivalent: equals_string: Q60658673 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: AdvertisingRadioArchive is an archival institution - maps to ARCHIVE (A) diff --git a/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchiveRecordSetTypes.yaml index 3dc528a8f5..ff606adbc7 100644 --- a/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/AdvertisingRadioArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RadioAdvertisementCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CampaignDocumentationSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/AnimalSoundArchive.yaml b/schemas/20251121/linkml/modules/classes/AnimalSoundArchive.yaml index 6acbd08f51..3c9b6d9e16 100644 --- a/schemas/20251121/linkml/modules/classes/AnimalSoundArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/AnimalSoundArchive.yaml @@ -100,9 +100,9 @@ classes: wikidata_equivalent: equals_string: Q18574935 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: AnimalSoundArchive is an archival institution - maps to ARCHIVE + equals_string: AnimalSoundArchive is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/schemas/20251121/linkml/modules/classes/AnimalSoundArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/AnimalSoundArchiveRecordSetTypes.yaml index 9ff2953492..594f5188ba 100644 --- a/schemas/20251121/linkml/modules/classes/AnimalSoundArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/AnimalSoundArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: BioacousticRecordingCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FieldRecordingSeries records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/ArchitecturalArchive.yaml b/schemas/20251121/linkml/modules/classes/ArchitecturalArchive.yaml index ee5a085bf1..86b8dc5b4e 100644 --- a/schemas/20251121/linkml/modules/classes/ArchitecturalArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/ArchitecturalArchive.yaml @@ -49,10 +49,10 @@ classes: Typically includes: architectural drawings, blueprints, building plans, models, photographs, specifications, correspondence, competition entries. custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ArchitecturalArchive is a specialized archive type for architectural - documentation - maps to ARCHIVE type (A) + documentation - maps to ArchiveOrganizationType type (A) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/schemas/20251121/linkml/modules/classes/ArchitecturalArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/ArchitecturalArchiveRecordSetTypes.yaml index 4eb6ad43e7..8d398fdd85 100644 --- a/schemas/20251121/linkml/modules/classes/ArchitecturalArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ArchitecturalArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ArchitecturalDrawingCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ArchitectPapersCollection records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: BuildingProjectFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/ArchivalLibrary.yaml b/schemas/20251121/linkml/modules/classes/ArchivalLibrary.yaml index 7b9f94f81c..771b8edf39 100644 --- a/schemas/20251121/linkml/modules/classes/ArchivalLibrary.yaml +++ b/schemas/20251121/linkml/modules/classes/ArchivalLibrary.yaml @@ -48,7 +48,7 @@ classes: All ArchivalLibrary instances MUST be linked to a parent archive. required: true custodian_types: - equals_expression: '["A", "L"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:LibraryType"]' custodian_types_rationale: equals_string: Archival library is an OrganizationBranch combining archive (A) and library (L) functions. diff --git a/schemas/20251121/linkml/modules/classes/ArchiveAssociation.yaml b/schemas/20251121/linkml/modules/classes/ArchiveAssociation.yaml index 33d7412bad..5bd9740927 100644 --- a/schemas/20251121/linkml/modules/classes/ArchiveAssociation.yaml +++ b/schemas/20251121/linkml/modules/classes/ArchiveAssociation.yaml @@ -54,7 +54,7 @@ classes: Advocacy, public programming, and engagement activities. Key focus for archive associations as support organizations. custodian_types: - equals_expression: '["A", "S"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HeritageSocietyType"]' custodian_types_rationale: equals_string: Archive association combines archive (A) and society/association (S). diff --git a/schemas/20251121/linkml/modules/classes/ArchiveNetwork.yaml b/schemas/20251121/linkml/modules/classes/ArchiveNetwork.yaml index c008012841..61ae496afb 100644 --- a/schemas/20251121/linkml/modules/classes/ArchiveNetwork.yaml +++ b/schemas/20251121/linkml/modules/classes/ArchiveNetwork.yaml @@ -47,8 +47,6 @@ classes: slots: - custodian_types - custodian_types_rationale - - encompassing_body_link - - member_archives - specificity_annotation - template_specificity slot_usage: @@ -65,9 +63,9 @@ classes: minimum_cardinality: 1 maximum_cardinality: 1 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: ArchiveNetwork is an archival institution - maps to ARCHIVE + equals_string: ArchiveNetwork is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation diff --git a/schemas/20251121/linkml/modules/classes/ArchiveOfInternationalOrganization.yaml b/schemas/20251121/linkml/modules/classes/ArchiveOfInternationalOrganization.yaml index 0c3532bc5f..3738b40b9f 100644 --- a/schemas/20251121/linkml/modules/classes/ArchiveOfInternationalOrganization.yaml +++ b/schemas/20251121/linkml/modules/classes/ArchiveOfInternationalOrganization.yaml @@ -61,7 +61,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ArchiveOfInternationalOrganizationRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ArchiveOfInternationalOrganizationRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/ArchiveOfInternationalOrganizationRecordSetTypes.yaml index 8cd82d3b0c..6f45a37a21 100644 --- a/schemas/20251121/linkml/modules/classes/ArchiveOfInternationalOrganizationRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ArchiveOfInternationalOrganizationRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: InternationalOrgFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: TreatyCollection records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ConferenceRecordSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ArchiveOrganizationType.yaml b/schemas/20251121/linkml/modules/classes/ArchiveOrganizationType.yaml index 85242a3b98..5bf36d461e 100644 --- a/schemas/20251121/linkml/modules/classes/ArchiveOrganizationType.yaml +++ b/schemas/20251121/linkml/modules/classes/ArchiveOrganizationType.yaml @@ -97,7 +97,7 @@ classes: range: ArchiveOrganizationType required: false custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ArchiveOrganizationType is specific to archives - institutions preserving original records and historical documents diff --git a/schemas/20251121/linkml/modules/classes/ArchivesForBuildingRecords.yaml b/schemas/20251121/linkml/modules/classes/ArchivesForBuildingRecords.yaml index 14df9c13b3..1c28d3e1ad 100644 --- a/schemas/20251121/linkml/modules/classes/ArchivesForBuildingRecords.yaml +++ b/schemas/20251121/linkml/modules/classes/ArchivesForBuildingRecords.yaml @@ -86,7 +86,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ArchivesForBuildingRecordsRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ArchivesForBuildingRecordsRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/ArchivesForBuildingRecordsRecordSetTypes.yaml index 0dfa933850..266ef196e6 100644 --- a/schemas/20251121/linkml/modules/classes/ArchivesForBuildingRecordsRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ArchivesForBuildingRecordsRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: BuildingPermitSeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ConstructionDocumentCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ArchivesRegionales.yaml b/schemas/20251121/linkml/modules/classes/ArchivesRegionales.yaml index 329e5d4d06..8e020f5c70 100644 --- a/schemas/20251121/linkml/modules/classes/ArchivesRegionales.yaml +++ b/schemas/20251121/linkml/modules/classes/ArchivesRegionales.yaml @@ -80,7 +80,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ArchivesRegionalesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ArchivesRegionalesRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/ArchivesRegionalesRecordSetTypes.yaml index c35406e154..d8361f235d 100644 --- a/schemas/20251121/linkml/modules/classes/ArchivesRegionalesRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ArchivesRegionalesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalAdministrationFonds records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ArtArchive.yaml b/schemas/20251121/linkml/modules/classes/ArtArchive.yaml index 8c9c4a1838..166bf39c18 100644 --- a/schemas/20251121/linkml/modules/classes/ArtArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/ArtArchive.yaml @@ -87,7 +87,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ArtArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ArtArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/ArtArchiveRecordSetTypes.yaml index f88add7abb..ab8f979267 100644 --- a/schemas/20251121/linkml/modules/classes/ArtArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ArtArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ArtistPapersCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: GalleryRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ExhibitionDocumentationCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/AudiovisualArchive.yaml b/schemas/20251121/linkml/modules/classes/AudiovisualArchive.yaml index 96c787528b..7350fbf490 100644 --- a/schemas/20251121/linkml/modules/classes/AudiovisualArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/AudiovisualArchive.yaml @@ -87,7 +87,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: AudiovisualArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/AudiovisualArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/AudiovisualArchiveRecordSetTypes.yaml index bb6da9b893..426a429a58 100644 --- a/schemas/20251121/linkml/modules/classes/AudiovisualArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/AudiovisualArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: AudiovisualRecordingCollection records are held by ARCHIVE (A) type custodians @@ -58,7 +58,7 @@ classes: rico_has_or_had_holder_note: equals_string: This RecordSetType is typically held by AudiovisualArchive custodians. Inverse of rico:isOrWasHolderOf. - MediaProductionFonds: + AudiovisualProductionFonds: is_a: AudiovisualArchiveRecordSetType class_uri: rico:RecordSetType description: "A rico:RecordSetType for Media production records.\n\n**RiC-O Alignment**:\n\ @@ -80,9 +80,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: MediaProductionFonds records are held by ARCHIVE (A) type custodians + equals_string: AudiovisualProductionFonds records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +90,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: MediaProductionFonds + equals_string: AudiovisualProductionFonds rico_organizational_principle: equals_string: fonds rico_organizational_principle_uri: diff --git a/schemas/20251121/linkml/modules/classes/BankArchive.yaml b/schemas/20251121/linkml/modules/classes/BankArchive.yaml index a3a1330e55..7bf7811474 100644 --- a/schemas/20251121/linkml/modules/classes/BankArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/BankArchive.yaml @@ -93,7 +93,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: BankArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/BankArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/BankArchiveRecordSetTypes.yaml index ca96814add..3bb228af8a 100644 --- a/schemas/20251121/linkml/modules/classes/BankArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/BankArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: BankingRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FinancialTransactionSeries records are held by ARCHIVE (A) type custodians @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CustomerAccountSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/Bildstelle.yaml b/schemas/20251121/linkml/modules/classes/Bildstelle.yaml index 7586e1dba4..9cb68a82d0 100644 --- a/schemas/20251121/linkml/modules/classes/Bildstelle.yaml +++ b/schemas/20251121/linkml/modules/classes/Bildstelle.yaml @@ -60,9 +60,9 @@ classes: - de: Bildstelle slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: Bildstelle is an archival institution - maps to ARCHIVE (A) + equals_string: Bildstelle is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/schemas/20251121/linkml/modules/classes/BioCustodianType.yaml b/schemas/20251121/linkml/modules/classes/BioCustodianType.yaml index 1ce43a33e4..a531fc90f2 100644 --- a/schemas/20251121/linkml/modules/classes/BioCustodianType.yaml +++ b/schemas/20251121/linkml/modules/classes/BioCustodianType.yaml @@ -416,7 +416,7 @@ classes: range: string required: false custodian_types: - equals_expression: '["B"]' + equals_expression: '["hc:BioCustodianType"]' custodian_types_rationale: equals_string: BioCustodianType is specific to botanical gardens, zoos, aquariums - institutions with living collections diff --git a/schemas/20251121/linkml/modules/classes/BiologicalObject.yaml b/schemas/20251121/linkml/modules/classes/BiologicalObject.yaml index d07a073414..c35af15512 100644 --- a/schemas/20251121/linkml/modules/classes/BiologicalObject.yaml +++ b/schemas/20251121/linkml/modules/classes/BiologicalObject.yaml @@ -487,7 +487,7 @@ classes: - value: MW123456 - value: MN987654 custodian_types: - equals_expression: '["B", "M", "R"]' + equals_expression: '["hc:BioCustodianType", "hc:MuseumType", "hc:ResearchOrganizationType"]' custodian_types_rationale: equals_string: | BiologicalObject is primarily relevant to: diff --git a/schemas/20251121/linkml/modules/classes/CantonalArchive.yaml b/schemas/20251121/linkml/modules/classes/CantonalArchive.yaml index 26d507d47d..fc36a83f85 100644 --- a/schemas/20251121/linkml/modules/classes/CantonalArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/CantonalArchive.yaml @@ -98,7 +98,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CantonalArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/CantonalArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/CantonalArchiveRecordSetTypes.yaml index 5b687ee8cc..d457200384 100644 --- a/schemas/20251121/linkml/modules/classes/CantonalArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/CantonalArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CantonalGovernmentFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CantonalLegislationCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/CastCollection.yaml b/schemas/20251121/linkml/modules/classes/CastCollection.yaml index a6f72fb89f..d414edf591 100644 --- a/schemas/20251121/linkml/modules/classes/CastCollection.yaml +++ b/schemas/20251121/linkml/modules/classes/CastCollection.yaml @@ -75,7 +75,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["M"]' + equals_expression: '["hc:MuseumType"]' custodian_types_rationale: equals_string: Cast collection is a museum collection type (M). specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/CathedralArchive.yaml b/schemas/20251121/linkml/modules/classes/CathedralArchive.yaml index f2534fe266..a5cb789d68 100644 --- a/schemas/20251121/linkml/modules/classes/CathedralArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/CathedralArchive.yaml @@ -86,7 +86,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CathedralArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/CathedralArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/CathedralArchiveRecordSetTypes.yaml index 034fb6ab53..3feeccb8f2 100644 --- a/schemas/20251121/linkml/modules/classes/CathedralArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/CathedralArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ChapterRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LiturgicalDocumentCollection records are held by ARCHIVE (A) type custodians @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FabricRecordsSeries records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/ChurchArchive.yaml b/schemas/20251121/linkml/modules/classes/ChurchArchive.yaml index b1e699371a..a109004948 100644 --- a/schemas/20251121/linkml/modules/classes/ChurchArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/ChurchArchive.yaml @@ -105,37 +105,3 @@ classes: - PastoralCorrespondenceCollection - ChurchPropertyFonds - CongregationalLifeCollection - ChurchArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by ChurchArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `ChurchArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - custodian_types - - custodian_types_rationale - - dual_class_link - - specificity_annotation - - template_specificity - - type_scope - see_also: - - ChurchArchive - - rico:RecordSetType - slot_usage: - custodian_types: - equals_expression: '["A"]' - custodian_types_rationale: - equals_string: ChurchArchiveRecordSetType classifies collections held by ARCHIVE - (A) type custodians - dual_class_link: - range: DualClassLink - inlined: true - specificity_annotation: - range: SpecificityAnnotation - inlined: true - template_specificity: - range: TemplateSpecificityScores - inlined: true diff --git a/schemas/20251121/linkml/modules/classes/ChurchArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/ChurchArchiveRecordSetTypes.yaml index 4de7d9b1f9..fea21ded43 100644 --- a/schemas/20251121/linkml/modules/classes/ChurchArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ChurchArchiveRecordSetTypes.yaml @@ -49,7 +49,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "H"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: Church archive record set types are held by ARCHIVE (A) or HOLY_SITES (H) type custodians @@ -121,7 +121,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "H"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: Church governance fonds are held by ARCHIVE (A) or HOLY_SITES (H) type custodians @@ -199,12 +199,12 @@ classes: - wd:Q185583 close_mappings: - skos:Concept - - CivilRegistrySeries see_also: - ChurchArchiveRecordSetType - rico:RecordSetType - rico-rst:Series - ParishArchive + - CivilRegistrySeries annotations: genealogy_note: Primary source for genealogical research, especially pre-civil registration periods. Many digitized and indexed by organizations like FamilySearch, Alle @@ -219,7 +219,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "H"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: Parish register series are held by ARCHIVE (A) or HOLY_SITES (H), often transferred to regional archives @@ -294,11 +294,11 @@ classes: - wd:Q22075301 close_mappings: - skos:Concept - - FacultyPaperCollection see_also: - ChurchArchiveRecordSetType - rico:RecordSetType - rico-rst:Fonds + - FacultyPaperCollection slots: - custodian_types - custodian_types_rationale @@ -306,7 +306,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "H", "L"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType", "hc:LibraryType"]' custodian_types_rationale: equals_string: Pastoral correspondence may be held by ARCHIVE (A), HOLY_SITES (H), or LIBRARY (L) special collections @@ -396,7 +396,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "H"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: Church property fonds are held by ARCHIVE (A) or HOLY_SITES (H) type custodians @@ -477,11 +477,11 @@ classes: close_mappings: - skos:Concept - schema:Collection - - CampusDocumentationCollection see_also: - ChurchArchiveRecordSetType - rico:RecordSetType - rico-rst:Collection + - CampusDocumentationCollection annotations: collection_nature_note: Often includes artificial/assembled collections. Materials reflect the lived religious experience of the community beyond formal administration. @@ -492,7 +492,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "H", "S"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType", "hc:HeritageSocietyType"]' custodian_types_rationale: equals_string: Congregational life collections may be held by ARCHIVE (A), HOLY_SITES (H), or COLLECTING_SOCIETY (S) diff --git a/schemas/20251121/linkml/modules/classes/ChurchArchiveSweden.yaml b/schemas/20251121/linkml/modules/classes/ChurchArchiveSweden.yaml index 30219e178f..b3ad3fba67 100644 --- a/schemas/20251121/linkml/modules/classes/ChurchArchiveSweden.yaml +++ b/schemas/20251121/linkml/modules/classes/ChurchArchiveSweden.yaml @@ -92,7 +92,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ChurchArchiveSwedenRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ChurchArchiveSwedenRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/ChurchArchiveSwedenRecordSetTypes.yaml index bcdcb2f245..5ecaf91dea 100644 --- a/schemas/20251121/linkml/modules/classes/ChurchArchiveSwedenRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ChurchArchiveSwedenRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SwedishParishRecordSeries records are held by ARCHIVE (A) type custodians @@ -58,12 +58,13 @@ classes: rico_has_or_had_holder_note: equals_string: This RecordSetType is typically held by ChurchArchiveSweden custodians. Inverse of rico:isOrWasHolderOf. - ChurchPropertyFonds: + SwedishChurchPropertyFonds: is_a: ChurchArchiveSwedenRecordSetType class_uri: rico:RecordSetType - description: "A rico:RecordSetType for Church property records.\n\n**RiC-O Alignment**:\n\ + description: "A rico:RecordSetType for Swedish Church property records.\n\n**RiC-O Alignment**:\n\ This class is a specialized rico:RecordSetType following the fonds \norganizational\ - \ principle as defined by rico-rst:Fonds.\n" + \ principle as defined by rico-rst:Fonds.\n\n**Note**: This is a Swedish-specific\ + \ variant. For the general church property fonds type, see ChurchPropertyFonds.\n" exact_mappings: - rico:RecordSetType related_mappings: @@ -73,6 +74,7 @@ classes: see_also: - ChurchArchiveSwedenRecordSetType - rico:RecordSetType + - ChurchPropertyFonds slots: - custodian_types - custodian_types_rationale @@ -80,9 +82,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: ChurchPropertyFonds records are held by ARCHIVE (A) type custodians + equals_string: SwedishChurchPropertyFonds records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +92,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: ChurchPropertyFonds + equals_string: SwedishChurchPropertyFonds rico_organizational_principle: equals_string: fonds rico_organizational_principle_uri: diff --git a/schemas/20251121/linkml/modules/classes/Cinematheque.yaml b/schemas/20251121/linkml/modules/classes/Cinematheque.yaml index 3564e581c7..bf4e39da16 100644 --- a/schemas/20251121/linkml/modules/classes/Cinematheque.yaml +++ b/schemas/20251121/linkml/modules/classes/Cinematheque.yaml @@ -64,9 +64,9 @@ classes: - fr: cinémathèque slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: Cinematheque is an archival institution - maps to ARCHIVE (A) + equals_string: Cinematheque is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/schemas/20251121/linkml/modules/classes/ClimateArchive.yaml b/schemas/20251121/linkml/modules/classes/ClimateArchive.yaml index 55faf4c4a8..deb1e2efba 100644 --- a/schemas/20251121/linkml/modules/classes/ClimateArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/ClimateArchive.yaml @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ClimateArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ClimateArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/ClimateArchiveRecordSetTypes.yaml index f09dc1ebb8..64ea132255 100644 --- a/schemas/20251121/linkml/modules/classes/ClimateArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ClimateArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ClimateDataCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MeteorologicalObservationSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/CollectingArchives.yaml b/schemas/20251121/linkml/modules/classes/CollectingArchives.yaml index 60db6812e4..31fe0c365a 100644 --- a/schemas/20251121/linkml/modules/classes/CollectingArchives.yaml +++ b/schemas/20251121/linkml/modules/classes/CollectingArchives.yaml @@ -69,9 +69,9 @@ classes: - **RiC-O**: rico:CorporateBody (as agent) slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: CollectingArchives is an archival institution - maps to ARCHIVE + equals_string: CollectingArchives is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -100,7 +100,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CollectingArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/CollectingArchivesRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/CollectingArchivesRecordSetTypes.yaml index 4e7db0dc55..e0a27609a7 100644 --- a/schemas/20251121/linkml/modules/classes/CollectingArchivesRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/CollectingArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CollectedMaterialsFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DonatedPapersCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/Collection.yaml b/schemas/20251121/linkml/modules/classes/Collection.yaml index 77b84854c9..131bc6438c 100644 --- a/schemas/20251121/linkml/modules/classes/Collection.yaml +++ b/schemas/20251121/linkml/modules/classes/Collection.yaml @@ -24,16 +24,33 @@ imports: - ./FindingAid - ./ExhibitedObject - ./CurationActivity +- ../slots/access_policy_ref +- ../slots/acquisition_date +- ../slots/acquisition_method +- ../slots/acquisition_source +- ../slots/arrangement +- ../slots/class_metadata_slots +- ../slots/collection_description +- ../slots/collection_id +- ../slots/collection_name +- ../slots/collection_type_ref +- ../slots/curation_activities +- ../slots/custodial_history +- ../slots/digital_surrogate_url +- ../slots/digitization_status +- ../slots/extent +- ../slots/extent_items +- ../slots/finding_aids +- ../slots/items +- ../slots/parent_collection +- ../slots/part_of_custodian_collection +- ../slots/provenance_statement +- ../slots/rico_record_set_type +- ../slots/sub_collections +- ../slots/subject_areas +- ../slots/temporal_coverage - ../slots/valid_from - ../slots/valid_to -- ../slots/collection_name -- ../slots/collection_description -- ../slots/extent -- ../slots/temporal_coverage -- ../slots/digitization_status -- ../slots/acquisition_method -- ../slots/acquisition_date -- ../slots/class_metadata_slots classes: Collection: class_uri: rico:RecordSet @@ -616,7 +633,7 @@ classes: Date when this collection ended at current custodian (if transferred/deaccessioned). range: date custodian_types: - equals_expression: '["G", "L", "A", "M", "B", "H"]' + equals_expression: '["hc:GalleryType", "hc:LibraryType", "hc:ArchiveOrganizationType", "hc:MuseumType", "hc:BioCustodianType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: 'Collection is relevant to institutions that hold catalogued collections: Galleries, Libraries, Archives, Museums, Botanical gardens/zoos, @@ -681,65 +698,9 @@ classes: digitization_status: PARTIAL part_of_custodian_collection: https://nde.nl/ontology/hc/custodian-collection/nationaal-archief description: VOC archival fonds at Nationaal Archief -slots: - collection_id: - description: Unique identifier for this collection - range: uriorcurie - collection_type_ref: - description: Classification from CollectionType hierarchy - range: CollectionType - rico_record_set_type: - description: RiC-O RecordSetType vocabulary mapping - range: uriorcurie - extent_items: - description: Numeric item count - range: integer - subject_areas: - description: Thematic subjects - range: string - multivalued: true - provenance_statement: - description: Provenance narrative - range: string - custodial_history: - description: Chain of custody - range: string - multivalued: true - acquisition_source: - description: From whom collection was acquired - range: string - access_policy_ref: - description: Access policy governing collection - range: AccessPolicy - arrangement: - description: Intellectual arrangement system - range: string - finding_aids: - description: Finding aids describing this collection - range: FindingAid - multivalued: true - slot_uri: rico:isDescribedBy - digital_surrogate_url: - description: URL to digital surrogate - range: uri - multivalued: true - parent_collection: - description: Parent collection (hierarchical) - range: Collection - sub_collections: - description: Child collections (hierarchical) - range: Collection - multivalued: true - items: - description: Individual ExhibitedObject items within this collection - range: ExhibitedObject - multivalued: true - slot_uri: rico:hasOrHadConstituent - curation_activities: - description: Ongoing curation activities performed on this collection - range: CurationActivity - multivalued: true - slot_uri: crm:P147i_was_curated_by - part_of_custodian_collection: - description: Link to abstract CustodianCollection - range: CustodianCollection + +# NOTE: All slots are defined in centralized modules/slots/ files +# Slots used by this class: collection_id, collection_type_ref, rico_record_set_type, +# extent_items, subject_areas, provenance_statement, custodial_history, acquisition_source, +# access_policy_ref, arrangement, finding_aids, digital_surrogate_url, parent_collection, +# sub_collections, items, curation_activities, part_of_custodian_collection diff --git a/schemas/20251121/linkml/modules/classes/ComarcalArchive.yaml b/schemas/20251121/linkml/modules/classes/ComarcalArchive.yaml index 478b96a5a2..20236fab4e 100644 --- a/schemas/20251121/linkml/modules/classes/ComarcalArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/ComarcalArchive.yaml @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ComarcalArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ComarcalArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/ComarcalArchiveRecordSetTypes.yaml index be01a45de9..5fa979ced2 100644 --- a/schemas/20251121/linkml/modules/classes/ComarcalArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ComarcalArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ComarcalAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -58,7 +58,7 @@ classes: rico_has_or_had_holder_note: equals_string: This RecordSetType is typically held by ComarcalArchive custodians. Inverse of rico:isOrWasHolderOf. - LocalHistoryCollection: + ComarcalHistoryCollection: is_a: ComarcalArchiveRecordSetType class_uri: rico:RecordSetType description: "A rico:RecordSetType for Regional historical documentation.\n\n\ @@ -80,9 +80,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: LocalHistoryCollection records are held by ARCHIVE (A) type + equals_string: ComarcalHistoryCollection records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation @@ -91,7 +91,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: LocalHistoryCollection + equals_string: ComarcalHistoryCollection rico_organizational_principle: equals_string: collection rico_organizational_principle_uri: diff --git a/schemas/20251121/linkml/modules/classes/CommercialOrganizationType.yaml b/schemas/20251121/linkml/modules/classes/CommercialOrganizationType.yaml index b22a685864..0fd7f2beeb 100644 --- a/schemas/20251121/linkml/modules/classes/CommercialOrganizationType.yaml +++ b/schemas/20251121/linkml/modules/classes/CommercialOrganizationType.yaml @@ -368,10 +368,10 @@ classes: - value: Corporate events, Weddings, Conference space description: Company museum activities custodian_types: - equals_expression: '["C"]' + equals_expression: '["hc:CommercialOrganizationType"]' custodian_types_rationale: equals_string: CommercialOrganizationType represents for-profit commercial - heritage custodians (corporate archives, company museums) - maps to CORPORATION + heritage custodians (corporate archives, company museums) - maps to CommercialOrganizationType type (C) specificity_annotation: range: SpecificityAnnotation diff --git a/schemas/20251121/linkml/modules/classes/CommunityArchive.yaml b/schemas/20251121/linkml/modules/classes/CommunityArchive.yaml index 6ecb1d4e13..5b0c3a7db4 100644 --- a/schemas/20251121/linkml/modules/classes/CommunityArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/CommunityArchive.yaml @@ -96,7 +96,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CommunityArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/CommunityArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/CommunityArchiveRecordSetTypes.yaml index 08df539827..718ef5282c 100644 --- a/schemas/20251121/linkml/modules/classes/CommunityArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/CommunityArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CommunityOrganizationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: OralHistoryCollection records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LocalEventDocumentation records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/CompanyArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/CompanyArchiveRecordSetTypes.yaml index 5f0f7b2641..59ce87bd61 100644 --- a/schemas/20251121/linkml/modules/classes/CompanyArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/CompanyArchiveRecordSetTypes.yaml @@ -51,7 +51,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "C"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:CommercialOrganizationType"]' custodian_types_rationale: equals_string: Company archive record set types are held by ARCHIVE (A) or CORPORATION (C) type custodians @@ -114,12 +114,12 @@ classes: - wd:Q1643722 close_mappings: - skos:Concept - - CouncilGovernanceFonds see_also: - CompanyArchiveRecordSetType - rico:RecordSetType - rico-rst:Fonds - CompanyArchives + - CouncilGovernanceFonds slots: - custodian_types - custodian_types_rationale @@ -127,7 +127,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "C"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:CommercialOrganizationType"]' custodian_types_rationale: equals_string: Corporate governance fonds are held by ARCHIVE (A) or CORPORATION (C) type custodians @@ -223,7 +223,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "C", "R"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:CommercialOrganizationType", "hc:ResearchOrganizationType"]' custodian_types_rationale: equals_string: Product development collections may be held by ARCHIVE (A), CORPORATION (C), or RESEARCH_CENTER (R) @@ -318,7 +318,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "C", "M"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:CommercialOrganizationType", "hc:MuseumType"]' custodian_types_rationale: equals_string: Marketing archives may be held by ARCHIVE (A), CORPORATION (C), or MUSEUM (M) for design/advertising collections @@ -397,11 +397,11 @@ classes: - wd:Q185583 close_mappings: - skos:Concept - - StudentRecordSeries see_also: - CompanyArchiveRecordSetType - rico:RecordSetType - rico-rst:Series + - StudentRecordSeries slots: - custodian_types - custodian_types_rationale @@ -409,7 +409,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "C"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:CommercialOrganizationType"]' custodian_types_rationale: equals_string: Personnel records series are held by ARCHIVE (A) or CORPORATION (C) type custodians @@ -504,7 +504,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "C", "L"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:CommercialOrganizationType", "hc:LibraryType"]' custodian_types_rationale: equals_string: Corporate publications may be held by ARCHIVE (A), CORPORATION (C), or LIBRARY (L) diff --git a/schemas/20251121/linkml/modules/classes/CompanyArchives.yaml b/schemas/20251121/linkml/modules/classes/CompanyArchives.yaml index 3de74b36d0..d263840314 100644 --- a/schemas/20251121/linkml/modules/classes/CompanyArchives.yaml +++ b/schemas/20251121/linkml/modules/classes/CompanyArchives.yaml @@ -15,8 +15,12 @@ imports: - ./Department - ./OrganizationBranch - ./CompanyArchiveRecordSetTypes + - ../slots/archive_branches + - ../slots/archive_department_of - ../slots/holds_record_set_types + - ../slots/parent_corporation - ../slots/type_scope + - ../slots/wikidata_entity classes: CompanyArchives: diff --git a/schemas/20251121/linkml/modules/classes/ConservationRecord.yaml b/schemas/20251121/linkml/modules/classes/ConservationRecord.yaml index 4464a7115c..8ab0b7d5ac 100644 --- a/schemas/20251121/linkml/modules/classes/ConservationRecord.yaml +++ b/schemas/20251121/linkml/modules/classes/ConservationRecord.yaml @@ -414,7 +414,7 @@ classes: - value: Treatment coincided with preparation for 1995 exhibition - value: Discovery of Vermeer's signature during cleaning custodian_types: - equals_expression: '["G", "M", "A", "L", "R", "H", "B"]' + equals_expression: '["hc:GalleryType", "hc:MuseumType", "hc:ArchiveOrganizationType", "hc:LibraryType", "hc:ResearchOrganizationType", "hc:HolySacredSiteType", "hc:BioCustodianType"]' custodian_types_rationale: equals_string: | ConservationRecord is relevant to all custodian types managing physical collections: diff --git a/schemas/20251121/linkml/modules/classes/CountyRecordOffice.yaml b/schemas/20251121/linkml/modules/classes/CountyRecordOffice.yaml index 116785c345..36849d0601 100644 --- a/schemas/20251121/linkml/modules/classes/CountyRecordOffice.yaml +++ b/schemas/20251121/linkml/modules/classes/CountyRecordOffice.yaml @@ -81,9 +81,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: CountyRecordOffice is an archival institution - maps to ARCHIVE + equals_string: CountyRecordOffice is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation diff --git a/schemas/20251121/linkml/modules/classes/CourtRecords.yaml b/schemas/20251121/linkml/modules/classes/CourtRecords.yaml index 4aa5171f06..f26cee9eb7 100644 --- a/schemas/20251121/linkml/modules/classes/CourtRecords.yaml +++ b/schemas/20251121/linkml/modules/classes/CourtRecords.yaml @@ -68,9 +68,9 @@ classes: - commercial description: General court archive covering main jurisdictions custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: CourtRecords is an archival institution - maps to ARCHIVE (A) + equals_string: CourtRecords is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/schemas/20251121/linkml/modules/classes/CulturalInstitution.yaml b/schemas/20251121/linkml/modules/classes/CulturalInstitution.yaml index 09b35ab5a2..946c705a4a 100644 --- a/schemas/20251121/linkml/modules/classes/CulturalInstitution.yaml +++ b/schemas/20251121/linkml/modules/classes/CulturalInstitution.yaml @@ -88,7 +88,7 @@ classes: range: string multivalued: true custodian_types: - equals_expression: '["X"]' + equals_expression: '["hc:MixedCustodianType"]' custodian_types_rationale: equals_string: CulturalInstitution is a broad type encompassing multiple heritage categories (G, L, A, M, etc.). Maps to MIXED (X) as it spans categories. diff --git a/schemas/20251121/linkml/modules/classes/CurationActivity.yaml b/schemas/20251121/linkml/modules/classes/CurationActivity.yaml index 46d1618370..c34930f72c 100644 --- a/schemas/20251121/linkml/modules/classes/CurationActivity.yaml +++ b/schemas/20251121/linkml/modules/classes/CurationActivity.yaml @@ -525,7 +525,7 @@ classes: - value: condition-assessment description: SPECTRUM Condition Checking custodian_types: - equals_expression: '["G", "L", "A", "M", "R", "H", "B"]' + equals_expression: '["hc:GalleryType", "hc:LibraryType", "hc:ArchiveOrganizationType", "hc:MuseumType", "hc:ResearchOrganizationType", "hc:HolySacredSiteType", "hc:BioCustodianType"]' custodian_types_rationale: equals_string: | CurationActivity is relevant to ALL heritage custodian types that manage collections: diff --git a/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml b/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml index 3f8cc49582..15b90dca7f 100644 --- a/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/CurrentArchive.yaml @@ -99,10 +99,10 @@ classes: multivalued: true required: false custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Current Archive is an archive for active/current records - - maps to ARCHIVE (A) + maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -141,20 +141,7 @@ classes: creating_organization: Ministry of Finance retention_schedule: Finance Records Schedule 2023 description: Current archive for ministry records -slots: - creating_organization: - description: Organization creating the records - range: string - transfer_policy: - description: Policy for transferring to permanent archive - range: string - has_narrower_instance: - slot_uri: skos:narrowerTransitive - description: | - Links archive TYPE to specific CustodianArchive INSTANCES. - SKOS narrowerTransitive for type-to-instance relationship. - range: CustodianArchive - multivalued: true + CurrentArchiveRecordSetType: description: | A rico:RecordSetType for classifying collections held by CurrentArchive custodians. @@ -170,23 +157,29 @@ slots: - CurrentArchive - rico:RecordSetType annotations: - custodian_types: '["A"]' + custodian_types: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: CurrentArchiveRecordSetType classifies collections - held by ARCHIVE (A) type custodians + held by ArchiveOrganizationType custodians linked_custodian_type: CurrentArchive dual_class_pattern: collection_type specificity_score: 0.7 specificity_rationale: Type taxonomy class. specificity_annotation_timestamp: '2026-01-06T00:26:29.675099Z' specificity_annotation_agent: opencode-claude-sonnet-4 - template_specificity: - archive_search: 0.2 - museum_search: 0.75 - library_search: 0.75 - collection_discovery: 0.75 - person_research: 0.75 - location_browse: 0.75 - identifier_lookup: 0.75 - organizational_change: 0.75 - digital_platform: 0.75 - general_heritage: 0.75 + template_specificity: '{"archive_search": 0.2, "museum_search": 0.75, "library_search": 0.75, "collection_discovery": 0.75, "person_research": 0.75, "location_browse": 0.75, "identifier_lookup": 0.75, "organizational_change": 0.75, "digital_platform": 0.75, "general_heritage": 0.75}' + + +slots: + creating_organization: + description: Organization creating the records + range: string + transfer_policy: + description: Policy for transferring to permanent archive + range: string + has_narrower_instance: + slot_uri: skos:narrowerTransitive + description: | + Links archive TYPE to specific CustodianArchive INSTANCES. + SKOS narrowerTransitive for type-to-instance relationship. + range: CustodianArchive + multivalued: true diff --git a/schemas/20251121/linkml/modules/classes/CurrentArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/CurrentArchiveRecordSetTypes.yaml index 683ce6d3f9..83f2c0bbde 100644 --- a/schemas/20251121/linkml/modules/classes/CurrentArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/CurrentArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ActiveRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/CustodianArchive.yaml b/schemas/20251121/linkml/modules/classes/CustodianArchive.yaml index efb131585e..4aeda39e31 100644 --- a/schemas/20251121/linkml/modules/classes/CustodianArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/CustodianArchive.yaml @@ -560,7 +560,7 @@ classes: - value: wikidata:Q3621648 description: Current archive / active records custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Custodian archive is an archive type (A). specificity_annotation: @@ -619,6 +619,33 @@ classes: schedule. refers_to_custodian: https://nde.nl/ontology/hc/nl-na description: Government records in active processing (9 years after accession) + CustodianArchiveRecordSetType: + description: | + A rico:RecordSetType for classifying collections held by CustodianArchive custodians. + + **Dual-Class Pattern**: + This class represents the COLLECTION type (rico:RecordSetType). + For the custodian organization type, see `CustodianArchive`. + is_a: CollectionType + class_uri: rico:RecordSetType + slots: + - type_scope + see_also: + - CustodianArchive + - rico:RecordSetType + annotations: + custodian_types: '["hc:ArchiveOrganizationType"]' + custodian_types_rationale: CustodianArchiveRecordSetType classifies collections + held by ArchiveOrganizationType custodians + linked_custodian_type: CustodianArchive + dual_class_pattern: collection_type + specificity_score: 0.7 + specificity_rationale: Type taxonomy class. + specificity_annotation_timestamp: '2026-01-06T00:26:29.676176Z' + specificity_annotation_agent: opencode-claude-sonnet-4 + template_specificity: '{"archive_search": 0.2, "museum_search": 0.75, "library_search": 0.75, "collection_discovery": 0.75, "person_research": 0.75, "location_browse": 0.75, "identifier_lookup": 0.75, "organizational_change": 0.75, "digital_platform": 0.75, "general_heritage": 0.75}' + + slots: archive_name: description: Name/title for operational archive accession @@ -677,38 +704,3 @@ slots: \ for instance-to-type relationship.\nValues: CurrentArchive (Q3621648), DepositArchive\ \ (Q244904), \nHistoricalArchive (Q3621673).\n" range: uriorcurie - CustodianArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by CustodianArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `CustodianArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - type_scope - see_also: - - CustodianArchive - - rico:RecordSetType - annotations: - custodian_types: '["A"]' - custodian_types_rationale: CustodianArchiveRecordSetType classifies collections - held by ARCHIVE (A) type custodians - linked_custodian_type: CustodianArchive - dual_class_pattern: collection_type - specificity_score: 0.7 - specificity_rationale: Type taxonomy class. - specificity_annotation_timestamp: '2026-01-06T00:26:29.676176Z' - specificity_annotation_agent: opencode-claude-sonnet-4 - template_specificity: - archive_search: 0.2 - museum_search: 0.75 - library_search: 0.75 - collection_discovery: 0.75 - person_research: 0.75 - location_browse: 0.75 - identifier_lookup: 0.75 - organizational_change: 0.75 - digital_platform: 0.75 - general_heritage: 0.75 diff --git a/schemas/20251121/linkml/modules/classes/CustodianArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/CustodianArchiveRecordSetTypes.yaml index 6fe24f054f..4b8533f2d3 100644 --- a/schemas/20251121/linkml/modules/classes/CustodianArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/CustodianArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CustodialRecordsFonds records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/CustodianObservation.yaml b/schemas/20251121/linkml/modules/classes/CustodianObservation.yaml index 33d9f66f5a..048ebcc170 100644 --- a/schemas/20251121/linkml/modules/classes/CustodianObservation.yaml +++ b/schemas/20251121/linkml/modules/classes/CustodianObservation.yaml @@ -112,8 +112,7 @@ classes: description: Confidence in observation accuracy range: ConfidenceMeasure custodian_types: - equals_expression: '["G", "L", "A", "M", "O", "R", "C", "U", "B", "E", "S", - "F", "I", "X", "P", "H", "D", "N", "T"]' + equals_expression: '["hc:GalleryType", "hc:LibraryType", "hc:ArchiveOrganizationType", "hc:MuseumType", "hc:OfficialInstitutionType", "hc:ResearchOrganizationType", "hc:CommercialOrganizationType", "hc:UnspecifiedType", "hc:BioCustodianType", "hc:EducationProviderType", "hc:HeritageSocietyType", "hc:FeatureCustodianType", "hc:IntangibleHeritageGroupType", "hc:MixedCustodianType", "hc:PersonalCollectionType", "hc:HolySacredSiteType", "hc:DigitalPlatformType", "hc:NonProfitType", "hc:TasteScentHeritageType"]' custodian_types_rationale: equals_string: CustodianObservation is universal - source-based evidence can apply to any heritage custodian type diff --git a/schemas/20251121/linkml/modules/classes/CustodianType.yaml b/schemas/20251121/linkml/modules/classes/CustodianType.yaml index d3c259d6f5..68ae56cbb5 100644 --- a/schemas/20251121/linkml/modules/classes/CustodianType.yaml +++ b/schemas/20251121/linkml/modules/classes/CustodianType.yaml @@ -8,11 +8,10 @@ imports: - ../slots/created - ../slots/modified - ../slots/class_metadata_slots +- ../slots/wikidata_entity slots: type_id: range: uriorcurie - wikidata_entity: - range: string type_label: range: string type_description: diff --git a/schemas/20251121/linkml/modules/classes/DarkArchive.yaml b/schemas/20251121/linkml/modules/classes/DarkArchive.yaml index a3d92db6e8..9279f1eae1 100644 --- a/schemas/20251121/linkml/modules/classes/DarkArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/DarkArchive.yaml @@ -104,7 +104,7 @@ classes: range: AccessPolicy required: true custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DarkArchive is a type of archive with restricted access - maps to ARCHIVE type (A) @@ -168,17 +168,6 @@ classes: access_level: CLOSED restriction_reason: Donor restriction - 50 year embargo description: Embargoed materials dark archive -slots: - access_trigger_events: - description: Events that trigger access - range: string - multivalued: true - preservation_purpose: - description: Purpose for dark archive - range: string - refers_to_access_policy: - description: Link to access policy - range: AccessPolicy DarkArchiveRecordSetType: description: | A rico:RecordSetType for classifying collections held by DarkArchive custodians. @@ -194,7 +183,7 @@ slots: - DarkArchive - rico:RecordSetType annotations: - custodian_types: '["A"]' + custodian_types: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: DarkArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians linked_custodian_type: DarkArchive @@ -203,14 +192,17 @@ slots: specificity_rationale: Type taxonomy class. specificity_annotation_timestamp: '2026-01-06T00:26:29.676643Z' specificity_annotation_agent: opencode-claude-sonnet-4 - template_specificity: - archive_search: 0.2 - museum_search: 0.75 - library_search: 0.75 - collection_discovery: 0.75 - person_research: 0.75 - location_browse: 0.75 - identifier_lookup: 0.75 - organizational_change: 0.75 - digital_platform: 0.75 - general_heritage: 0.75 + template_specificity: '{"archive_search": 0.2, "museum_search": 0.75, "library_search": 0.75, "collection_discovery": 0.75, "person_research": 0.75, "location_browse": 0.75, "identifier_lookup": 0.75, "organizational_change": 0.75, "digital_platform": 0.75, "general_heritage": 0.75}' + + +slots: + access_trigger_events: + description: Events that trigger access + range: string + multivalued: true + preservation_purpose: + description: Purpose for dark archive + range: string + refers_to_access_policy: + description: Link to access policy + range: AccessPolicy diff --git a/schemas/20251121/linkml/modules/classes/DarkArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/DarkArchiveRecordSetTypes.yaml index b116b9eb59..9ccf64e8c0 100644 --- a/schemas/20251121/linkml/modules/classes/DarkArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/DarkArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PreservationCopyCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DigitalPreservationFonds records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/DepartmentalArchives.yaml b/schemas/20251121/linkml/modules/classes/DepartmentalArchives.yaml index d92ea81835..a36812c085 100644 --- a/schemas/20251121/linkml/modules/classes/DepartmentalArchives.yaml +++ b/schemas/20251121/linkml/modules/classes/DepartmentalArchives.yaml @@ -139,9 +139,9 @@ classes: minimum_cardinality: 1 maximum_cardinality: 1 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: DepartmentalArchives is an archival institution - maps to ARCHIVE + equals_string: DepartmentalArchives is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -206,9 +206,9 @@ classes: wikidata_equivalent: equals_string: Q2860456 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: DepartmentalArchives is an archival institution - maps to ARCHIVE + equals_string: DepartmentalArchives is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/schemas/20251121/linkml/modules/classes/DepartmentalArchivesRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/DepartmentalArchivesRecordSetTypes.yaml index 79aa9bb317..a1a8c9834e 100644 --- a/schemas/20251121/linkml/modules/classes/DepartmentalArchivesRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/DepartmentalArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DepartmentAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PrefectureSeries records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/DepositArchive.yaml b/schemas/20251121/linkml/modules/classes/DepositArchive.yaml index c80f9a96b0..e12024a9bb 100644 --- a/schemas/20251121/linkml/modules/classes/DepositArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/DepositArchive.yaml @@ -117,9 +117,9 @@ classes: - permanent archive transfer - depositor return custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: DepositArchive is an archival institution - maps to ARCHIVE + equals_string: DepositArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -172,6 +172,33 @@ classes: - secure destruction - transfer to national archives description: Federal records center deposit archive + DepositArchiveRecordSetType: + description: | + A rico:RecordSetType for classifying collections held by DepositArchive custodians. + + **Dual-Class Pattern**: + This class represents the COLLECTION type (rico:RecordSetType). + For the custodian organization type, see `DepositArchive`. + is_a: CollectionType + class_uri: rico:RecordSetType + slots: + - type_scope + see_also: + - DepositArchive + - rico:RecordSetType + annotations: + custodian_types: '["hc:ArchiveOrganizationType"]' + custodian_types_rationale: DepositArchiveRecordSetType classifies collections + held by ArchiveOrganizationType custodians + linked_custodian_type: DepositArchive + dual_class_pattern: collection_type + specificity_score: 0.7 + specificity_rationale: Type taxonomy class. + specificity_annotation_timestamp: '2026-01-06T00:26:29.677478Z' + specificity_annotation_agent: opencode-claude-sonnet-4 + template_specificity: '{"archive_search": 0.2, "museum_search": 0.75, "library_search": 0.75, "collection_discovery": 0.75, "person_research": 0.75, "location_browse": 0.75, "identifier_lookup": 0.75, "organizational_change": 0.75, "digital_platform": 0.75, "general_heritage": 0.75}' + + slots: operates_storage_types: description: Storage types operated by deposit archive @@ -188,38 +215,3 @@ slots: description: Disposition services provided range: string multivalued: true - DepositArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by DepositArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `DepositArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - type_scope - see_also: - - DepositArchive - - rico:RecordSetType - annotations: - custodian_types: '["A"]' - custodian_types_rationale: DepositArchiveRecordSetType classifies collections - held by ARCHIVE (A) type custodians - linked_custodian_type: DepositArchive - dual_class_pattern: collection_type - specificity_score: 0.7 - specificity_rationale: Type taxonomy class. - specificity_annotation_timestamp: '2026-01-06T00:26:29.677478Z' - specificity_annotation_agent: opencode-claude-sonnet-4 - template_specificity: - archive_search: 0.2 - museum_search: 0.75 - library_search: 0.75 - collection_discovery: 0.75 - person_research: 0.75 - location_browse: 0.75 - identifier_lookup: 0.75 - organizational_change: 0.75 - digital_platform: 0.75 - general_heritage: 0.75 diff --git a/schemas/20251121/linkml/modules/classes/DepositArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/DepositArchiveRecordSetTypes.yaml index 6b06d5308f..22d2529e37 100644 --- a/schemas/20251121/linkml/modules/classes/DepositArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/DepositArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DepositedRecordsFonds records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/DigitalArchive.yaml b/schemas/20251121/linkml/modules/classes/DigitalArchive.yaml index 7fcdd31584..fcad7a10e5 100644 --- a/schemas/20251121/linkml/modules/classes/DigitalArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/DigitalArchive.yaml @@ -167,10 +167,10 @@ classes: - JPEG2000 - XML custodian_types: - equals_expression: '["A", "D"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:DigitalPlatformType"]' custodian_types_rationale: equals_string: DigitalArchive bridges archive and digital platform types - - maps to ARCHIVE (A) and DIGITAL_PLATFORM (D) + maps to ArchiveOrganizationType (A) and DIGITAL_PLATFORM (D) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -220,21 +220,6 @@ classes: - JPEG2000 - WARC description: Government digital archive with mixed content -slots: - operates_platform_types: - description: Digital platform types operated - range: DigitalPlatformType - multivalued: true - content_origin: - description: Origin of content (born_digital, digitized, mixed) - range: string - access_interface_url: - description: URL of access interface - range: uri - supported_formats: - description: Supported file formats - range: string - multivalued: true DigitalArchiveRecordSetType: description: | A rico:RecordSetType for classifying collections held by DigitalArchive custodians. @@ -250,23 +235,30 @@ slots: - DigitalArchive - rico:RecordSetType annotations: - custodian_types: '["A"]' + custodian_types: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: DigitalArchiveRecordSetType classifies collections - held by ARCHIVE (A) type custodians + held by ArchiveOrganizationType custodians linked_custodian_type: DigitalArchive dual_class_pattern: collection_type specificity_score: 0.7 specificity_rationale: Type taxonomy class. specificity_annotation_timestamp: '2026-01-06T00:26:29.677967Z' specificity_annotation_agent: opencode-claude-sonnet-4 - template_specificity: - archive_search: 0.2 - museum_search: 0.75 - library_search: 0.75 - collection_discovery: 0.75 - person_research: 0.75 - location_browse: 0.75 - identifier_lookup: 0.75 - organizational_change: 0.75 - digital_platform: 0.75 - general_heritage: 0.75 + template_specificity: '{"archive_search": 0.2, "museum_search": 0.75, "library_search": 0.75, "collection_discovery": 0.75, "person_research": 0.75, "location_browse": 0.75, "identifier_lookup": 0.75, "organizational_change": 0.75, "digital_platform": 0.75, "general_heritage": 0.75}' + + +slots: + operates_platform_types: + description: Digital platform types operated + range: DigitalPlatformType + multivalued: true + content_origin: + description: Origin of content (born_digital, digitized, mixed) + range: string + access_interface_url: + description: URL of access interface + range: uri + supported_formats: + description: Supported file formats + range: string + multivalued: true diff --git a/schemas/20251121/linkml/modules/classes/DigitalArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/DigitalArchiveRecordSetTypes.yaml index 4c45b81d0e..7c8fffc22f 100644 --- a/schemas/20251121/linkml/modules/classes/DigitalArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/DigitalArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DigitalObjectCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DigitizedCollection records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: WebArchiveCollection records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/DimArchives.yaml b/schemas/20251121/linkml/modules/classes/DimArchives.yaml index 5d4aba1e4c..3dc549aacb 100644 --- a/schemas/20251121/linkml/modules/classes/DimArchives.yaml +++ b/schemas/20251121/linkml/modules/classes/DimArchives.yaml @@ -158,7 +158,7 @@ classes: examples: - value: 2-3 business days custodian_types: - equals_expression: '["A", "D"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:DigitalPlatformType"]' custodian_types_rationale: equals_string: Digital archives combine archive (A) and digital platform (D). specificity_annotation: @@ -209,20 +209,6 @@ classes: access_application_url: https://archive.example.org/apply typical_approval_time: 5-10 business days description: Dim archive with researcher access only -slots: - default_access_policy: - description: Default access policy for dim archive - range: AccessPolicy - restriction_categories: - description: Categories of restrictions applied - range: string - multivalued: true - access_application_url: - description: URL for access application - range: uri - typical_approval_time: - description: Typical time for approval - range: string DimArchivesRecordSetType: description: | A rico:RecordSetType for classifying collections held by DimArchives custodians. @@ -238,7 +224,7 @@ slots: - DimArchives - rico:RecordSetType annotations: - custodian_types: '["A"]' + custodian_types: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: DimArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians linked_custodian_type: DimArchives @@ -247,14 +233,20 @@ slots: specificity_rationale: Type taxonomy class. specificity_annotation_timestamp: '2026-01-06T00:26:29.678263Z' specificity_annotation_agent: opencode-claude-sonnet-4 - template_specificity: - archive_search: 0.2 - museum_search: 0.75 - library_search: 0.75 - collection_discovery: 0.75 - person_research: 0.75 - location_browse: 0.75 - identifier_lookup: 0.75 - organizational_change: 0.75 - digital_platform: 0.75 - general_heritage: 0.75 + template_specificity: '{"archive_search": 0.2, "museum_search": 0.75, "library_search": 0.75, "collection_discovery": 0.75, "person_research": 0.75, "location_browse": 0.75, "identifier_lookup": 0.75, "organizational_change": 0.75, "digital_platform": 0.75, "general_heritage": 0.75}' + + +slots: + default_access_policy: + description: Default access policy for dim archive + range: AccessPolicy + restriction_categories: + description: Categories of restrictions applied + range: string + multivalued: true + access_application_url: + description: URL for access application + range: uri + typical_approval_time: + description: Typical time for approval + range: string diff --git a/schemas/20251121/linkml/modules/classes/DimArchivesRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/DimArchivesRecordSetTypes.yaml index 3f25349bff..915189cc5b 100644 --- a/schemas/20251121/linkml/modules/classes/DimArchivesRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/DimArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DigitallyInaccessibleCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/DiocesanArchive.yaml b/schemas/20251121/linkml/modules/classes/DiocesanArchive.yaml index d935d2a387..87689b89c9 100644 --- a/schemas/20251121/linkml/modules/classes/DiocesanArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/DiocesanArchive.yaml @@ -136,7 +136,7 @@ classes: - value: true description: Canon law rules apply custodian_types: - equals_expression: '["A", "H"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: DiocesanArchive serves dual roles - as an ARCHIVE (A) for bishop/diocese records and associated with HOLY_SITE (H) religious administration @@ -185,6 +185,33 @@ classes: founding_date_diocese: '1559-05-12' canonical_access_rules: true description: Diocesan archive example - Diocese of 's-Hertogenbosch + DiocesanArchiveRecordSetType: + description: | + A rico:RecordSetType for classifying collections held by DiocesanArchive custodians. + + **Dual-Class Pattern**: + This class represents the COLLECTION type (rico:RecordSetType). + For the custodian organization type, see `DiocesanArchive`. + is_a: CollectionType + class_uri: rico:RecordSetType + slots: + - type_scope + see_also: + - DiocesanArchive + - rico:RecordSetType + annotations: + custodian_types: '["hc:ArchiveOrganizationType"]' + custodian_types_rationale: DiocesanArchiveRecordSetType classifies collections + held by ArchiveOrganizationType custodians + linked_custodian_type: DiocesanArchive + dual_class_pattern: collection_type + specificity_score: 0.7 + specificity_rationale: Type taxonomy class. + specificity_annotation_timestamp: '2026-01-06T00:26:29.678653Z' + specificity_annotation_agent: opencode-claude-sonnet-4 + template_specificity: '{"archive_search": 0.2, "museum_search": 0.75, "library_search": 0.75, "collection_discovery": 0.75, "person_research": 0.75, "location_browse": 0.75, "identifier_lookup": 0.75, "organizational_change": 0.75, "digital_platform": 0.75, "general_heritage": 0.75}' + + slots: diocese_name: description: Name of the diocese @@ -201,38 +228,3 @@ slots: canonical_access_rules: description: Whether canon law access rules apply range: boolean - DiocesanArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by DiocesanArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `DiocesanArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - type_scope - see_also: - - DiocesanArchive - - rico:RecordSetType - annotations: - custodian_types: '["A"]' - custodian_types_rationale: DiocesanArchiveRecordSetType classifies collections - held by ARCHIVE (A) type custodians - linked_custodian_type: DiocesanArchive - dual_class_pattern: collection_type - specificity_score: 0.7 - specificity_rationale: Type taxonomy class. - specificity_annotation_timestamp: '2026-01-06T00:26:29.678653Z' - specificity_annotation_agent: opencode-claude-sonnet-4 - template_specificity: - archive_search: 0.2 - museum_search: 0.75 - library_search: 0.75 - collection_discovery: 0.75 - person_research: 0.75 - location_browse: 0.75 - identifier_lookup: 0.75 - organizational_change: 0.75 - digital_platform: 0.75 - general_heritage: 0.75 diff --git a/schemas/20251121/linkml/modules/classes/DiocesanArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/DiocesanArchiveRecordSetTypes.yaml index e97def9ae4..ee02a014a8 100644 --- a/schemas/20251121/linkml/modules/classes/DiocesanArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/DiocesanArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DiocesanAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ParishRecordSeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: EpiscopalCorrespondenceCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/DistrictArchiveGermany.yaml b/schemas/20251121/linkml/modules/classes/DistrictArchiveGermany.yaml index 26443898e1..7c916715ce 100644 --- a/schemas/20251121/linkml/modules/classes/DistrictArchiveGermany.yaml +++ b/schemas/20251121/linkml/modules/classes/DistrictArchiveGermany.yaml @@ -66,7 +66,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DistrictArchiveGermanyRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/DistrictArchiveGermanyRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/DistrictArchiveGermanyRecordSetTypes.yaml index ee64b4f30a..5b8c73dd44 100644 --- a/schemas/20251121/linkml/modules/classes/DistrictArchiveGermanyRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/DistrictArchiveGermanyRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: KreisAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LocalGovernanceSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/DistritalArchive.yaml b/schemas/20251121/linkml/modules/classes/DistritalArchive.yaml index 22577072ff..68c7619e3d 100644 --- a/schemas/20251121/linkml/modules/classes/DistritalArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/DistritalArchive.yaml @@ -35,9 +35,9 @@ classes: wikidata_entity: equals_string: Q10296259 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: DistritalArchive is an archival institution - maps to ARCHIVE + equals_string: DistritalArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -86,7 +86,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DistritalArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/DistritalArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/DistritalArchiveRecordSetTypes.yaml index 172a6a408d..8617c4401d 100644 --- a/schemas/20251121/linkml/modules/classes/DistritalArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/DistritalArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DistritoAdministrationFonds records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/DocumentationCentre.yaml b/schemas/20251121/linkml/modules/classes/DocumentationCentre.yaml index 35b354f04e..762560a0ee 100644 --- a/schemas/20251121/linkml/modules/classes/DocumentationCentre.yaml +++ b/schemas/20251121/linkml/modules/classes/DocumentationCentre.yaml @@ -21,9 +21,9 @@ classes: wikidata_entity: equals_string: Q2945282 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: DocumentationCentre is an archival institution - maps to ARCHIVE + equals_string: DocumentationCentre is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation diff --git a/schemas/20251121/linkml/modules/classes/EconomicArchive.yaml b/schemas/20251121/linkml/modules/classes/EconomicArchive.yaml index 6c6f7d954a..8760e137b2 100644 --- a/schemas/20251121/linkml/modules/classes/EconomicArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/EconomicArchive.yaml @@ -35,10 +35,10 @@ classes: wikidata_entity: equals_string: Q27032167 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Economic Archive is an archival institution for business/commerce - records - maps to ARCHIVE (A) + records - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -87,7 +87,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: EconomicArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/EconomicArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/EconomicArchiveRecordSetTypes.yaml index f515328be5..d4e6aff4dc 100644 --- a/schemas/20251121/linkml/modules/classes/EconomicArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/EconomicArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: BusinessRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: TradeDocumentationCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/EducationCenter.yaml b/schemas/20251121/linkml/modules/classes/EducationCenter.yaml index 3ddca3eda2..c9d79ec666 100644 --- a/schemas/20251121/linkml/modules/classes/EducationCenter.yaml +++ b/schemas/20251121/linkml/modules/classes/EducationCenter.yaml @@ -305,7 +305,7 @@ classes: range: ReconstructionActivity required: false custodian_types: - equals_expression: '["E"]' + equals_expression: '["hc:EducationProviderType"]' custodian_types_rationale: equals_string: Education center is an education provider type (E). specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/EducationProviderType.yaml b/schemas/20251121/linkml/modules/classes/EducationProviderType.yaml index 735ade899e..1ac0b07aeb 100644 --- a/schemas/20251121/linkml/modules/classes/EducationProviderType.yaml +++ b/schemas/20251121/linkml/modules/classes/EducationProviderType.yaml @@ -334,7 +334,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["E"]' + equals_expression: '["hc:EducationProviderType"]' custodian_types_rationale: equals_string: EducationProviderType is specific to education providers - universities, colleges, schools with heritage collections diff --git a/schemas/20251121/linkml/modules/classes/ExhibitedObject.yaml b/schemas/20251121/linkml/modules/classes/ExhibitedObject.yaml index 87a9619704..cd7acf498d 100644 --- a/schemas/20251121/linkml/modules/classes/ExhibitedObject.yaml +++ b/schemas/20251121/linkml/modules/classes/ExhibitedObject.yaml @@ -629,7 +629,7 @@ classes: - value: https://nde.nl/ontology/hc/loan/mauritshuis-rijksmuseum-vermeer-2023 description: Loan to Rijksmuseum for Vermeer 2023 exhibition custodian_types: - equals_expression: '["G", "M", "A", "L", "R", "H", "B"]' + equals_expression: '["hc:GalleryType", "hc:MuseumType", "hc:ArchiveOrganizationType", "hc:LibraryType", "hc:ResearchOrganizationType", "hc:HolySacredSiteType", "hc:BioCustodianType"]' custodian_types_rationale: equals_string: | ExhibitedObject is relevant to all custodian types that hold collections: diff --git a/schemas/20251121/linkml/modules/classes/Exhibition.yaml b/schemas/20251121/linkml/modules/classes/Exhibition.yaml index 66d4a63757..6f778aa7c2 100644 --- a/schemas/20251121/linkml/modules/classes/Exhibition.yaml +++ b/schemas/20251121/linkml/modules/classes/Exhibition.yaml @@ -415,7 +415,7 @@ classes: examples: - value: https://www.youtube.com/watch?v=vermeer-tour custodian_types: - equals_expression: '["G", "M", "A", "L", "R", "H", "B"]' + equals_expression: '["hc:GalleryType", "hc:MuseumType", "hc:ArchiveOrganizationType", "hc:LibraryType", "hc:ResearchOrganizationType", "hc:HolySacredSiteType", "hc:BioCustodianType"]' custodian_types_rationale: equals_string: "Exhibitions are hosted by galleries (G), museums (M), archives\ \ (A), \nlibraries (L), research centers (R), holy sites (H), and botanical/zoo\ diff --git a/schemas/20251121/linkml/modules/classes/ExhibitionCatalog.yaml b/schemas/20251121/linkml/modules/classes/ExhibitionCatalog.yaml index 7c2e46d081..bbb63953cc 100644 --- a/schemas/20251121/linkml/modules/classes/ExhibitionCatalog.yaml +++ b/schemas/20251121/linkml/modules/classes/ExhibitionCatalog.yaml @@ -388,7 +388,7 @@ classes: - value: https://www.worldcat.org/title/1370123456 - value: https://uba.uva.nl/catalog/12345678 custodian_types: - equals_expression: '["G", "M", "A", "L", "R", "H", "B"]' + equals_expression: '["hc:GalleryType", "hc:MuseumType", "hc:ArchiveOrganizationType", "hc:LibraryType", "hc:ResearchOrganizationType", "hc:HolySacredSiteType", "hc:BioCustodianType"]' custodian_types_rationale: equals_string: "Exhibition catalogs are published by Galleries (G), Museums\ \ (M), Archives (A), \nLibraries (L), Research Centers (R), Holy Sites (H),\ diff --git a/schemas/20251121/linkml/modules/classes/FeatureCustodianType.yaml b/schemas/20251121/linkml/modules/classes/FeatureCustodianType.yaml index fae0963eb3..ed79bea7bc 100644 --- a/schemas/20251121/linkml/modules/classes/FeatureCustodianType.yaml +++ b/schemas/20251121/linkml/modules/classes/FeatureCustodianType.yaml @@ -365,7 +365,7 @@ classes: - value: Public-private partnership, 99-year lease description: Tower management company custodian_types: - equals_expression: '["F"]' + equals_expression: '["hc:FeatureCustodianType"]' custodian_types_rationale: equals_string: FeatureCustodianType is specific to organizations managing physical heritage features (monuments, landmarks, historic sites) diff --git a/schemas/20251121/linkml/modules/classes/FeaturePlace.yaml b/schemas/20251121/linkml/modules/classes/FeaturePlace.yaml index c88484671d..2f0c25209d 100644 --- a/schemas/20251121/linkml/modules/classes/FeaturePlace.yaml +++ b/schemas/20251121/linkml/modules/classes/FeaturePlace.yaml @@ -278,10 +278,10 @@ classes: - value: '2020-06-30' description: Museum closed, building repurposed custodian_types: - equals_expression: '["F"]' + equals_expression: '["hc:FeatureCustodianType"]' custodian_types_rationale: equals_string: FeaturePlace represents physical heritage features (monuments, - statues) - maps to FEATURES type + statues) - maps to FeatureCustodianType type specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/schemas/20251121/linkml/modules/classes/FilmArchive.yaml b/schemas/20251121/linkml/modules/classes/FilmArchive.yaml index 8cfa5b5001..65997d6edc 100644 --- a/schemas/20251121/linkml/modules/classes/FilmArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/FilmArchive.yaml @@ -49,9 +49,9 @@ classes: equals_expression: | ["hc:FeatureFilmCollection", "hc:DocumentaryFilmCollection", "hc:NewsreelSeries", "hc:ProductionRecordsFonds", "hc:FilmPromoCollection"] custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: FilmArchive is an archival institution - maps to ARCHIVE (A) + equals_string: FilmArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -83,37 +83,3 @@ classes: - Often members of FIAF (International Federation of Film Archives) - Preservation includes both content and technical formats - Related to but distinct from Cinematheque (Q1352795) which focuses on exhibition - FilmArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by FilmArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `FilmArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - custodian_types - - custodian_types_rationale - - dual_class_link - - specificity_annotation - - template_specificity - - type_scope - see_also: - - FilmArchive - - rico:RecordSetType - slot_usage: - custodian_types: - equals_expression: '["A"]' - custodian_types_rationale: - equals_string: FilmArchiveRecordSetType classifies collections held by ARCHIVE - (A) type custodians - dual_class_link: - range: DualClassLink - inlined: true - specificity_annotation: - range: SpecificityAnnotation - inlined: true - template_specificity: - range: TemplateSpecificityScores - inlined: true diff --git a/schemas/20251121/linkml/modules/classes/FilmArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/FilmArchiveRecordSetTypes.yaml index 387484f897..faac14faf3 100644 --- a/schemas/20251121/linkml/modules/classes/FilmArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/FilmArchiveRecordSetTypes.yaml @@ -50,7 +50,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Film archive record set types are held by ARCHIVE (A) type custodians @@ -121,7 +121,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Feature film collections are held by ARCHIVE (A) type custodians specificity_annotation: @@ -215,7 +215,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "R"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:ResearchOrganizationType"]' custodian_types_rationale: equals_string: Documentary collections may be held by ARCHIVE (A) or RESEARCH_CENTER (R) @@ -290,12 +290,12 @@ classes: - wd:Q11424 close_mappings: - skos:Concept - - CivilRegistrySeries see_also: - FilmArchiveRecordSetType - rico:RecordSetType - rico-rst:Series - BroadcastArchive + - CivilRegistrySeries annotations: historical_note: Primary visual news source before television (ca. 1910-1970). Document major historical events, daily life, and social conditions. Often accompanied @@ -307,7 +307,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Newsreel series are held by ARCHIVE (A) type custodians specificity_annotation: @@ -381,11 +381,11 @@ classes: - wd:Q1643722 close_mappings: - skos:Concept - - CorporateGovernanceFonds see_also: - FilmArchiveRecordSetType - rico:RecordSetType - rico-rst:Fonds + - CorporateGovernanceFonds slots: - custodian_types - custodian_types_rationale @@ -393,7 +393,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Production records fonds are held by ARCHIVE (A) type custodians specificity_annotation: @@ -472,12 +472,12 @@ classes: close_mappings: - skos:Concept - schema:Collection - - MarketingArchiveCollection see_also: - FilmArchiveRecordSetType - rico:RecordSetType - rico-rst:Collection - PosterCollection + - MarketingArchiveCollection annotations: visual_heritage_note: Film promotional materials have significant visual heritage value for graphic design history, advertising history, and star/celebrity @@ -489,7 +489,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "M"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:MuseumType"]' custodian_types_rationale: equals_string: Film promotional collections may be held by ARCHIVE (A) or MUSEUM (M) diff --git a/schemas/20251121/linkml/modules/classes/FindingAid.yaml b/schemas/20251121/linkml/modules/classes/FindingAid.yaml index b9605ea79b..c56fb51d30 100644 --- a/schemas/20251121/linkml/modules/classes/FindingAid.yaml +++ b/schemas/20251121/linkml/modules/classes/FindingAid.yaml @@ -191,7 +191,7 @@ classes: - related_archives - related_guides - revision_date - - scope_note + - finding_aid_scope_note - served_by - slug - specificity_annotation @@ -1083,7 +1083,7 @@ slots: range: string examples: - value: NL-HaNA_1.04.02 - scope_note: + finding_aid_scope_note: slot_uri: skos:scopeNote description: | Additional notes on the scope, coverage, or limitations of the finding aid. diff --git a/schemas/20251121/linkml/modules/classes/Foremalarkiv.yaml b/schemas/20251121/linkml/modules/classes/Foremalarkiv.yaml index 500948a89e..508c9d1244 100644 --- a/schemas/20251121/linkml/modules/classes/Foremalarkiv.yaml +++ b/schemas/20251121/linkml/modules/classes/Foremalarkiv.yaml @@ -20,9 +20,9 @@ classes: wikidata_entity: equals_string: Q10501208 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: Foremalarkiv is an archival institution - maps to ARCHIVE (A) + equals_string: Foremalarkiv is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/schemas/20251121/linkml/modules/classes/FoundationArchive.yaml b/schemas/20251121/linkml/modules/classes/FoundationArchive.yaml index a10216fcc9..cf07c27638 100644 --- a/schemas/20251121/linkml/modules/classes/FoundationArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/FoundationArchive.yaml @@ -35,10 +35,10 @@ classes: wikidata_entity: equals_string: Q27030827 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Foundation Archive is an archival institution for charitable/cultural - foundation records - maps to ARCHIVE (A) + foundation records - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -86,7 +86,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FoundationArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/FoundationArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/FoundationArchiveRecordSetTypes.yaml index 610b4b9078..b4e843dfa7 100644 --- a/schemas/20251121/linkml/modules/classes/FoundationArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/FoundationArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FoundationAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: GrantRecordSeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ProjectDocumentationCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/FreeArchive.yaml b/schemas/20251121/linkml/modules/classes/FreeArchive.yaml index 65366e8007..828c7e578f 100644 --- a/schemas/20251121/linkml/modules/classes/FreeArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/FreeArchive.yaml @@ -36,10 +36,10 @@ classes: wikidata_entity: equals_string: Q635801 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Free Archive is an independent archival institution for social - movements - maps to ARCHIVE (A) + movements - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FreeArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/FreeArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/FreeArchiveRecordSetTypes.yaml index 0f12773082..34dc3651c3 100644 --- a/schemas/20251121/linkml/modules/classes/FreeArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/FreeArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: OpenAccessCollection records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/FrenchPrivateArchives.yaml b/schemas/20251121/linkml/modules/classes/FrenchPrivateArchives.yaml index ff45041743..3f85b44152 100644 --- a/schemas/20251121/linkml/modules/classes/FrenchPrivateArchives.yaml +++ b/schemas/20251121/linkml/modules/classes/FrenchPrivateArchives.yaml @@ -37,7 +37,7 @@ classes: wikidata_entity: equals_string: Q2860565 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FrenchPrivateArchives is an archival institution - maps to ARCHIVE (A) @@ -91,7 +91,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FrenchPrivateArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/FrenchPrivateArchivesRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/FrenchPrivateArchivesRecordSetTypes.yaml index 99af791add..1542cd9de7 100644 --- a/schemas/20251121/linkml/modules/classes/FrenchPrivateArchivesRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/FrenchPrivateArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FrenchPrivateFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/GalleryType.yaml b/schemas/20251121/linkml/modules/classes/GalleryType.yaml index 42d118b013..41a486baa7 100644 --- a/schemas/20251121/linkml/modules/classes/GalleryType.yaml +++ b/schemas/20251121/linkml/modules/classes/GalleryType.yaml @@ -187,7 +187,7 @@ classes: range: GalleryType required: false custodian_types: - equals_expression: '["G"]' + equals_expression: '["hc:GalleryType"]' custodian_types_rationale: equals_string: GalleryType is specific to galleries - art exhibition spaces (commercial and non-commercial) diff --git a/schemas/20251121/linkml/modules/classes/GovernmentArchive.yaml b/schemas/20251121/linkml/modules/classes/GovernmentArchive.yaml index a5b688efb7..be109a9c0d 100644 --- a/schemas/20251121/linkml/modules/classes/GovernmentArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/GovernmentArchive.yaml @@ -43,9 +43,9 @@ classes: wikidata_entity: equals_string: Q119712417 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: GovernmentArchive is an archival institution - maps to ARCHIVE + equals_string: GovernmentArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -91,7 +91,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: GovernmentArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/GovernmentArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/GovernmentArchiveRecordSetTypes.yaml index fd8c5d9a5f..b16fc07b09 100644 --- a/schemas/20251121/linkml/modules/classes/GovernmentArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/GovernmentArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: AgencyAdministrativeFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PolicyDocumentCollection records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PublicServiceRecordSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/HeritageSocietyType.yaml b/schemas/20251121/linkml/modules/classes/HeritageSocietyType.yaml index 1288f90bc3..c8cfd72067 100644 --- a/schemas/20251121/linkml/modules/classes/HeritageSocietyType.yaml +++ b/schemas/20251121/linkml/modules/classes/HeritageSocietyType.yaml @@ -393,10 +393,10 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["S"]' + equals_expression: '["hc:HeritageSocietyType"]' custodian_types_rationale: equals_string: HeritageSocietyType represents collecting societies and heritage - associations - maps to COLLECTING_SOCIETY type (S) + associations - maps to HeritageSocietyType type (S) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/schemas/20251121/linkml/modules/classes/HistoricalArchive.yaml b/schemas/20251121/linkml/modules/classes/HistoricalArchive.yaml index 8f046fa1c5..d7edbd3878 100644 --- a/schemas/20251121/linkml/modules/classes/HistoricalArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/HistoricalArchive.yaml @@ -43,9 +43,9 @@ classes: wikidata_entity: equals_string: Q3621673 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: HistoricalArchive is an archival institution - maps to ARCHIVE + equals_string: HistoricalArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: HistoricalArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/HistoricalArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/HistoricalArchiveRecordSetTypes.yaml index e35977d3d3..2b9956ba60 100644 --- a/schemas/20251121/linkml/modules/classes/HistoricalArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/HistoricalArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: HistoricalDocumentFonds records are held by ARCHIVE (A) type custodians @@ -58,7 +58,7 @@ classes: rico_has_or_had_holder_note: equals_string: This RecordSetType is typically held by HistoricalArchive custodians. Inverse of rico:isOrWasHolderOf. - ManuscriptCollection: + HistoricalManuscriptCollection: is_a: HistoricalArchiveRecordSetType class_uri: rico:RecordSetType description: "A rico:RecordSetType for Historical manuscripts.\n\n**RiC-O Alignment**:\n\ @@ -80,9 +80,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: ManuscriptCollection records are held by ARCHIVE (A) type custodians + equals_string: HistoricalManuscriptCollection records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +90,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: ManuscriptCollection + equals_string: HistoricalManuscriptCollection rico_organizational_principle: equals_string: collection rico_organizational_principle_uri: diff --git a/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml b/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml index de5a528ed0..b2383ceeba 100644 --- a/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml +++ b/schemas/20251121/linkml/modules/classes/HolySacredSiteType.yaml @@ -422,7 +422,7 @@ classes: - value: Deconsecrated, Converted to museum description: Former church building custodian_types: - equals_expression: '["H"]' + equals_expression: '["hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: HolySacredSiteType is specific to religious sites managing heritage collections (churches, temples, mosques, synagogues) diff --git a/schemas/20251121/linkml/modules/classes/HospitalArchive.yaml b/schemas/20251121/linkml/modules/classes/HospitalArchive.yaml index 690574739d..7c0c871bb3 100644 --- a/schemas/20251121/linkml/modules/classes/HospitalArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/HospitalArchive.yaml @@ -56,10 +56,10 @@ classes: equals_expression: | ["hc:HospitalAdministrationFonds", "hc:PatientRecordsSeries", "hc:MedicalResearchCollection", "hc:NursingRecordsCollection", "hc:MedicalPhotographyCollection"] custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Hospital Archive is a specialized archival institution for - healthcare records - maps to ARCHIVE (A) + healthcare records - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -84,37 +84,3 @@ classes: - Patient records subject to strict privacy and retention regulations - Important for history of medicine and public health research - May include records from associated medical schools or research - HospitalArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by HospitalArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `HospitalArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - custodian_types - - custodian_types_rationale - - dual_class_link - - specificity_annotation - - template_specificity - - type_scope - see_also: - - HospitalArchive - - rico:RecordSetType - slot_usage: - custodian_types: - equals_expression: '["A"]' - custodian_types_rationale: - equals_string: HospitalArchiveRecordSetType classifies collections held by - ARCHIVE (A) type custodians - dual_class_link: - range: DualClassLink - inlined: true - specificity_annotation: - range: SpecificityAnnotation - inlined: true - template_specificity: - range: TemplateSpecificityScores - inlined: true diff --git a/schemas/20251121/linkml/modules/classes/HospitalArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/HospitalArchiveRecordSetTypes.yaml index b07ed9decc..4ddae58690 100644 --- a/schemas/20251121/linkml/modules/classes/HospitalArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/HospitalArchiveRecordSetTypes.yaml @@ -51,7 +51,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Hospital archive record set types are held by ARCHIVE (A) type custodians @@ -156,7 +156,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Hospital administration fonds are held by ARCHIVE (A) type custodians @@ -286,7 +286,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Patient records series are held by ARCHIVE (A) type custodians specificity_annotation: @@ -402,12 +402,12 @@ classes: - wd:Q9388534 close_mappings: - skos:Concept - - ResearchDataCollection see_also: - HospitalArchiveRecordSetType - rico:RecordSetType - rico-rst:Collection - AcademicArchive + - ResearchDataCollection annotations: regulatory_note: Research records subject to GCP guidelines, regulatory requirements (FDA/EMA), and data retention mandates (typically 15-25 years). Ethics committee @@ -422,7 +422,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "R"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:ResearchOrganizationType"]' custodian_types_rationale: equals_string: Medical research collections may be held by ARCHIVE (A) or RESEARCH_CENTER (R) @@ -545,7 +545,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "E"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:EducationProviderType"]' custodian_types_rationale: equals_string: Nursing records may be held by ARCHIVE (A) or EDUCATION_PROVIDER (E) @@ -631,12 +631,12 @@ classes: - wd:Q1260006 close_mappings: - skos:Concept - - PhotographicCollection see_also: - HospitalArchiveRecordSetType - rico:RecordSetType - rico-rst:Collection - PhotographicArchive + - PhotographicCollection annotations: museum_note: Medical photography collections may be held by medical museums, particularly those associated with university medical centers or medical history @@ -648,7 +648,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "M"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:MuseumType"]' custodian_types_rationale: equals_string: Medical photography collections may be held by ARCHIVE (A) or medical MUSEUM (M) diff --git a/schemas/20251121/linkml/modules/classes/HouseArchive.yaml b/schemas/20251121/linkml/modules/classes/HouseArchive.yaml index 6b37367b7a..ac1c3c3f28 100644 --- a/schemas/20251121/linkml/modules/classes/HouseArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/HouseArchive.yaml @@ -43,10 +43,10 @@ classes: wikidata_entity: equals_string: Q4344572 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: House Archive (Family Archive) is an archival collection for - family records - maps to ARCHIVE (A) + family records - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: HouseArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/HouseArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/HouseArchiveRecordSetTypes.yaml index 231f08a34e..ee28688b46 100644 --- a/schemas/20251121/linkml/modules/classes/HouseArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/HouseArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: HouseRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FamilyPapersCollection records are held by ARCHIVE (A) type custodians @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: EstateDocumentSeries records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/IconographicArchives.yaml b/schemas/20251121/linkml/modules/classes/IconographicArchives.yaml index 4dbf2b359f..507cd2ea9a 100644 --- a/schemas/20251121/linkml/modules/classes/IconographicArchives.yaml +++ b/schemas/20251121/linkml/modules/classes/IconographicArchives.yaml @@ -41,9 +41,9 @@ classes: wikidata_entity: equals_string: Q117810712 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: IconographicArchives is an archival institution - maps to ARCHIVE + equals_string: IconographicArchives is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -85,7 +85,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: IconographicArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/IconographicArchivesRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/IconographicArchivesRecordSetTypes.yaml index 0722f2f752..6003c01613 100644 --- a/schemas/20251121/linkml/modules/classes/IconographicArchivesRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/IconographicArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: VisualImageCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PrintCollection records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/InformationCarrier.yaml b/schemas/20251121/linkml/modules/classes/InformationCarrier.yaml index f68b59e518..ac62f79a40 100644 --- a/schemas/20251121/linkml/modules/classes/InformationCarrier.yaml +++ b/schemas/20251121/linkml/modules/classes/InformationCarrier.yaml @@ -548,7 +548,7 @@ classes: \ movable metal type. Contains the complete Latin Vulgate \ntext of the\ \ Old and New Testaments.\n" custodian_types: - equals_expression: '["L", "A", "R", "M", "H"]' + equals_expression: '["hc:LibraryType", "hc:ArchiveOrganizationType", "hc:ResearchOrganizationType", "hc:MuseumType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: | InformationCarrier is primarily relevant to: diff --git a/schemas/20251121/linkml/modules/classes/InstitutionalArchive.yaml b/schemas/20251121/linkml/modules/classes/InstitutionalArchive.yaml index 36afb23766..1761f2644e 100644 --- a/schemas/20251121/linkml/modules/classes/InstitutionalArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/InstitutionalArchive.yaml @@ -43,9 +43,9 @@ classes: wikidata_entity: equals_string: Q124762372 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: InstitutionalArchive is an archival institution - maps to ARCHIVE + equals_string: InstitutionalArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: InstitutionalArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/InstitutionalArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/InstitutionalArchiveRecordSetTypes.yaml index 5054a2550f..8ab89b6e5f 100644 --- a/schemas/20251121/linkml/modules/classes/InstitutionalArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/InstitutionalArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: InstitutionAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: OperationalRecordSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/InstitutionalRepository.yaml b/schemas/20251121/linkml/modules/classes/InstitutionalRepository.yaml index 84f952934a..aac026739a 100644 --- a/schemas/20251121/linkml/modules/classes/InstitutionalRepository.yaml +++ b/schemas/20251121/linkml/modules/classes/InstitutionalRepository.yaml @@ -24,7 +24,7 @@ classes: platform_type_id: identifier: false custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: InstitutionalRepository is an archival institution - maps to ARCHIVE (A) diff --git a/schemas/20251121/linkml/modules/classes/IntangibleHeritageEvent.yaml b/schemas/20251121/linkml/modules/classes/IntangibleHeritageEvent.yaml index e7194176e3..b54ed99c79 100644 --- a/schemas/20251121/linkml/modules/classes/IntangibleHeritageEvent.yaml +++ b/schemas/20251121/linkml/modules/classes/IntangibleHeritageEvent.yaml @@ -283,7 +283,7 @@ classes: Wikidata entity ID for this specific event occurrence (if exists). Note: Most annual events don't have Wikidata entries for each year. custodian_types: - equals_expression: '["I"]' + equals_expression: '["hc:IntangibleHeritageGroupType"]' custodian_types_rationale: equals_string: Intangible heritage event relates to intangible heritage groups (I). diff --git a/schemas/20251121/linkml/modules/classes/IntangibleHeritageForm.yaml b/schemas/20251121/linkml/modules/classes/IntangibleHeritageForm.yaml index adccffad53..6f8fd58752 100644 --- a/schemas/20251121/linkml/modules/classes/IntangibleHeritageForm.yaml +++ b/schemas/20251121/linkml/modules/classes/IntangibleHeritageForm.yaml @@ -324,7 +324,7 @@ classes: examples: - value: https://www.pride.amsterdam custodian_types: - equals_expression: '["I"]' + equals_expression: '["hc:IntangibleHeritageGroupType"]' custodian_types_rationale: equals_string: IntangibleHeritageForm represents intangible cultural heritage practices - maps exclusively to INTANGIBLE_HERITAGE_GROUP type (I) diff --git a/schemas/20251121/linkml/modules/classes/IntangibleHeritageGroupType.yaml b/schemas/20251121/linkml/modules/classes/IntangibleHeritageGroupType.yaml index 56fa7193d5..15c3ff6162 100644 --- a/schemas/20251121/linkml/modules/classes/IntangibleHeritageGroupType.yaml +++ b/schemas/20251121/linkml/modules/classes/IntangibleHeritageGroupType.yaml @@ -375,7 +375,7 @@ classes: - value: Annual festival, School programs, UNESCO nomination description: Festival tradition safeguarding custodian_types: - equals_expression: '["I"]' + equals_expression: '["hc:IntangibleHeritageGroupType"]' custodian_types_rationale: equals_string: IntangibleHeritageGroupType is specific to organizations preserving intangible cultural heritage (performing arts, traditional crafts, oral diff --git a/schemas/20251121/linkml/modules/classes/IntangibleHeritagePerformance.yaml b/schemas/20251121/linkml/modules/classes/IntangibleHeritagePerformance.yaml index f495740980..f573c1f4b6 100644 --- a/schemas/20251121/linkml/modules/classes/IntangibleHeritagePerformance.yaml +++ b/schemas/20251121/linkml/modules/classes/IntangibleHeritagePerformance.yaml @@ -270,7 +270,7 @@ classes: examples: - value: First public performance of this ensemble in the Netherlands. custodian_types: - equals_expression: '["I"]' + equals_expression: '["hc:IntangibleHeritageGroupType"]' custodian_types_rationale: equals_string: Intangible heritage performance relates to intangible heritage groups (I). diff --git a/schemas/20251121/linkml/modules/classes/JointArchives.yaml b/schemas/20251121/linkml/modules/classes/JointArchives.yaml index 9f90e6369f..24ccd02ea4 100644 --- a/schemas/20251121/linkml/modules/classes/JointArchives.yaml +++ b/schemas/20251121/linkml/modules/classes/JointArchives.yaml @@ -42,9 +42,9 @@ classes: wikidata_entity: equals_string: Q117442301 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: JointArchives is an archival institution - maps to ARCHIVE + equals_string: JointArchives is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -87,7 +87,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: JointArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/JointArchivesRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/JointArchivesRecordSetTypes.yaml index 68702cf35d..0b047aa23d 100644 --- a/schemas/20251121/linkml/modules/classes/JointArchivesRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/JointArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SharedRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/LGBTArchive.yaml b/schemas/20251121/linkml/modules/classes/LGBTArchive.yaml index 44cf9c970b..6e7600e1f0 100644 --- a/schemas/20251121/linkml/modules/classes/LGBTArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/LGBTArchive.yaml @@ -43,9 +43,9 @@ classes: wikidata_entity: equals_string: Q61710689 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: LGBTArchive is an archival institution - maps to ARCHIVE (A) + equals_string: LGBTArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LGBTArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/LGBTArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/LGBTArchiveRecordSetTypes.yaml index 46ee3964f1..919096c181 100644 --- a/schemas/20251121/linkml/modules/classes/LGBTArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/LGBTArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LGBTOrganizationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ActivistPapersCollection records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PrideEventCollection records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/LibraryType.yaml b/schemas/20251121/linkml/modules/classes/LibraryType.yaml index f840d41cc5..3fc5d11d51 100644 --- a/schemas/20251121/linkml/modules/classes/LibraryType.yaml +++ b/schemas/20251121/linkml/modules/classes/LibraryType.yaml @@ -161,7 +161,7 @@ classes: range: LibraryType required: false custodian_types: - equals_expression: '["L"]' + equals_expression: '["hc:LibraryType"]' custodian_types_rationale: equals_string: LibraryType is specific to libraries - institutions collecting and providing access to published materials diff --git a/schemas/20251121/linkml/modules/classes/LightArchives.yaml b/schemas/20251121/linkml/modules/classes/LightArchives.yaml index 512e5a3ca9..c907384215 100644 --- a/schemas/20251121/linkml/modules/classes/LightArchives.yaml +++ b/schemas/20251121/linkml/modules/classes/LightArchives.yaml @@ -45,9 +45,9 @@ classes: access_policy: description: Light archives have open or broadly accessible policies custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: LightArchives is an archival institution - maps to ARCHIVE + equals_string: LightArchives is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LightArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/LightArchivesRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/LightArchivesRecordSetTypes.yaml index c8b4294db6..8242b7516c 100644 --- a/schemas/20251121/linkml/modules/classes/LightArchivesRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/LightArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MinimalProcessingCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/LiteraryArchive.yaml b/schemas/20251121/linkml/modules/classes/LiteraryArchive.yaml index 0274ecb063..cb06d50107 100644 --- a/schemas/20251121/linkml/modules/classes/LiteraryArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/LiteraryArchive.yaml @@ -42,10 +42,10 @@ classes: wikidata_entity: equals_string: Q28607652 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LiteraryArchive is a specialized archive type for literary - works and author papers - maps to ARCHIVE type (A) + works and author papers - maps to ArchiveOrganizationType type (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LiteraryArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/LiteraryArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/LiteraryArchiveRecordSetTypes.yaml index 963ffd0abb..75de1d90f8 100644 --- a/schemas/20251121/linkml/modules/classes/LiteraryArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/LiteraryArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: AuthorPapersCollection records are held by ARCHIVE (A) type custodians @@ -58,7 +58,7 @@ classes: rico_has_or_had_holder_note: equals_string: This RecordSetType is typically held by LiteraryArchive custodians. Inverse of rico:isOrWasHolderOf. - ManuscriptCollection: + LiteraryManuscriptCollection: is_a: LiteraryArchiveRecordSetType class_uri: rico:RecordSetType description: "A rico:RecordSetType for Literary manuscripts.\n\n**RiC-O Alignment**:\n\ @@ -80,9 +80,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: ManuscriptCollection records are held by ARCHIVE (A) type custodians + equals_string: LiteraryManuscriptCollection records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +90,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: ManuscriptCollection + equals_string: LiteraryManuscriptCollection rico_organizational_principle: equals_string: collection rico_organizational_principle_uri: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PublisherRecordsSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/Loan.yaml b/schemas/20251121/linkml/modules/classes/Loan.yaml index e65d45fccf..3d253c73b8 100644 --- a/schemas/20251121/linkml/modules/classes/Loan.yaml +++ b/schemas/20251121/linkml/modules/classes/Loan.yaml @@ -445,7 +445,7 @@ classes: - value: No photography permitted - value: Must be displayed in glazed case custodian_types: - equals_expression: '["G", "M", "A", "L", "R", "H", "B"]' + equals_expression: '["hc:GalleryType", "hc:MuseumType", "hc:ArchiveOrganizationType", "hc:LibraryType", "hc:ResearchOrganizationType", "hc:HolySacredSiteType", "hc:BioCustodianType"]' custodian_types_rationale: equals_string: | Loan is relevant to all custodian types that manage loanable collections: diff --git a/schemas/20251121/linkml/modules/classes/LocalGovernmentArchive.yaml b/schemas/20251121/linkml/modules/classes/LocalGovernmentArchive.yaml index bf3648944b..fed5341e28 100644 --- a/schemas/20251121/linkml/modules/classes/LocalGovernmentArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/LocalGovernmentArchive.yaml @@ -42,10 +42,10 @@ classes: wikidata_entity: equals_string: Q118281267 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Local Government Archive is a governmental archival institution - - maps to ARCHIVE (A) + - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -88,7 +88,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LocalGovernmentArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/LocalGovernmentArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/LocalGovernmentArchiveRecordSetTypes.yaml index c46adeec2a..6592edb5ad 100644 --- a/schemas/20251121/linkml/modules/classes/LocalGovernmentArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/LocalGovernmentArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LocalAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PublicWorksSeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LocalTaxRecordsSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/LocalHeritageInstitutionSweden.yaml b/schemas/20251121/linkml/modules/classes/LocalHeritageInstitutionSweden.yaml index 3507d6e7bd..e4f0636a63 100644 --- a/schemas/20251121/linkml/modules/classes/LocalHeritageInstitutionSweden.yaml +++ b/schemas/20251121/linkml/modules/classes/LocalHeritageInstitutionSweden.yaml @@ -25,7 +25,7 @@ classes: wikidata_entity: equals_string: Q10520688 custodian_types: - equals_expression: '["X"]' + equals_expression: '["hc:MixedCustodianType"]' custodian_types_rationale: equals_string: Swedish local heritage institution is often mixed type (X). specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/LocalHistoryArchive.yaml b/schemas/20251121/linkml/modules/classes/LocalHistoryArchive.yaml index e817e8aa6e..e338227860 100644 --- a/schemas/20251121/linkml/modules/classes/LocalHistoryArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/LocalHistoryArchive.yaml @@ -42,9 +42,9 @@ classes: wikidata_entity: equals_string: Q12324798 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: LocalHistoryArchive is an archival institution - maps to ARCHIVE + equals_string: LocalHistoryArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -91,7 +91,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LocalHistoryArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/LocalHistoryArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/LocalHistoryArchiveRecordSetTypes.yaml index e08852246f..99cc2b3493 100644 --- a/schemas/20251121/linkml/modules/classes/LocalHistoryArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/LocalHistoryArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LocalHistoryFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CommunityPhotographCollection records are held by ARCHIVE (A) type custodians @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LocalNewspaperCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/LocationLibrary.yaml b/schemas/20251121/linkml/modules/classes/LocationLibrary.yaml index 912295345b..3eda64ee6e 100644 --- a/schemas/20251121/linkml/modules/classes/LocationLibrary.yaml +++ b/schemas/20251121/linkml/modules/classes/LocationLibrary.yaml @@ -25,7 +25,7 @@ classes: wikidata_entity: equals_string: Q6664811 custodian_types: - equals_expression: '["L"]' + equals_expression: '["hc:LibraryType"]' custodian_types_rationale: equals_string: Location library is a library type (L). specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/MailingListArchive.yaml b/schemas/20251121/linkml/modules/classes/MailingListArchive.yaml index e3eb4fce42..af435ecd3a 100644 --- a/schemas/20251121/linkml/modules/classes/MailingListArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/MailingListArchive.yaml @@ -46,9 +46,9 @@ classes: platform_type_id: identifier: false custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: MailingListArchive is an archival institution - maps to ARCHIVE + equals_string: MailingListArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -94,7 +94,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MailingListArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/MailingListArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/MailingListArchiveRecordSetTypes.yaml index b164916b0c..fd02766fde 100644 --- a/schemas/20251121/linkml/modules/classes/MailingListArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/MailingListArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: EmailArchiveCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DiscussionForumFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/MediaArchive.yaml b/schemas/20251121/linkml/modules/classes/MediaArchive.yaml index a07bc5cca0..d6266fa44e 100644 --- a/schemas/20251121/linkml/modules/classes/MediaArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/MediaArchive.yaml @@ -42,10 +42,10 @@ classes: wikidata_entity: equals_string: Q116809817 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Media Archive is a specialized archival institution for audio, - video, and other media - maps to ARCHIVE (A) + video, and other media - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -92,7 +92,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MediaArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/MediaArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/MediaArchiveRecordSetTypes.yaml index 20fe35a9d0..a96e8687e4 100644 --- a/schemas/20251121/linkml/modules/classes/MediaArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/MediaArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MediaProductionFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: BroadcastCollection records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/MilitaryArchive.yaml b/schemas/20251121/linkml/modules/classes/MilitaryArchive.yaml index 5a2490401e..65787c49c5 100644 --- a/schemas/20251121/linkml/modules/classes/MilitaryArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/MilitaryArchive.yaml @@ -56,9 +56,9 @@ classes: equals_expression: | ["hc:MilitaryOperationsFonds", "hc:MilitaryPersonnelSeries", "hc:UnitHistoryCollection", "hc:MilitaryMapsCollection", "hc:VeteransDocumentationCollection"] custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: MilitaryArchive is an archival institution - maps to ARCHIVE + equals_string: MilitaryArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -84,37 +84,3 @@ classes: - Preserves records of military and defense activities - Access often subject to declassification schedules - Important for military history and veterans' affairs - MilitaryArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by MilitaryArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `MilitaryArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - custodian_types - - custodian_types_rationale - - dual_class_link - - specificity_annotation - - template_specificity - - type_scope - see_also: - - MilitaryArchive - - rico:RecordSetType - slot_usage: - custodian_types: - equals_expression: '["A"]' - custodian_types_rationale: - equals_string: MilitaryArchiveRecordSetType classifies collections held by - ARCHIVE (A) type custodians - dual_class_link: - range: DualClassLink - inlined: true - specificity_annotation: - range: SpecificityAnnotation - inlined: true - template_specificity: - range: TemplateSpecificityScores - inlined: true diff --git a/schemas/20251121/linkml/modules/classes/MilitaryArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/MilitaryArchiveRecordSetTypes.yaml index 8a1cb38501..8afc93941f 100644 --- a/schemas/20251121/linkml/modules/classes/MilitaryArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/MilitaryArchiveRecordSetTypes.yaml @@ -50,7 +50,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Military archive record set types are held by ARCHIVE (A) type custodians @@ -147,7 +147,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Military operations fonds are held by ARCHIVE (A) type custodians specificity_annotation: @@ -225,11 +225,11 @@ classes: - wd:Q185583 close_mappings: - skos:Concept - - PersonnelRecordsSeries see_also: - MilitaryArchiveRecordSetType - rico:RecordSetType - rico-rst:Series + - PersonnelRecordsSeries annotations: genealogy_note: Primary source for military genealogy. Often cross-referenced with conscription registers (militieregisters) held by municipal archives. @@ -240,7 +240,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Military personnel series are held by ARCHIVE (A) type custodians specificity_annotation: @@ -335,7 +335,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "M"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:MuseumType"]' custodian_types_rationale: equals_string: Unit history collections may be held by ARCHIVE (A) or military MUSEUM (M) @@ -427,7 +427,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "L"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:LibraryType"]' custodian_types_rationale: equals_string: Military map collections may be held by ARCHIVE (A) or LIBRARY (L) map departments @@ -511,12 +511,12 @@ classes: - wd:Q9388534 close_mappings: - skos:Concept - - OralHistoryCollection see_also: - MilitaryArchiveRecordSetType - rico:RecordSetType - rico-rst:Collection - WarArchive + - OralHistoryCollection annotations: commemoration_note: Veterans documentation supports national remembrance activities, war cemetery maintenance, and educational initiatives about conflict and @@ -531,7 +531,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "M", "R"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:MuseumType", "hc:ResearchOrganizationType"]' custodian_types_rationale: equals_string: Veterans documentation may be held by ARCHIVE (A), MUSEUM (M), or RESEARCH_CENTER (R) diff --git a/schemas/20251121/linkml/modules/classes/MixedCustodianType.yaml b/schemas/20251121/linkml/modules/classes/MixedCustodianType.yaml index 83a310a0b4..978735ced3 100644 --- a/schemas/20251121/linkml/modules/classes/MixedCustodianType.yaml +++ b/schemas/20251121/linkml/modules/classes/MixedCustodianType.yaml @@ -362,7 +362,7 @@ classes: - value: Government (archive), Tourists (museum), Professionals (training) description: National institution users custodian_types: - equals_expression: '["X"]' + equals_expression: '["hc:MixedCustodianType"]' custodian_types_rationale: equals_string: MixedCustodianType is for institutions operating as multiple types simultaneously (e.g., combined museum/archive/library) diff --git a/schemas/20251121/linkml/modules/classes/MonasteryArchive.yaml b/schemas/20251121/linkml/modules/classes/MonasteryArchive.yaml index 35cba53c6c..316b827289 100644 --- a/schemas/20251121/linkml/modules/classes/MonasteryArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/MonasteryArchive.yaml @@ -42,7 +42,7 @@ classes: wikidata_entity: equals_string: Q27030561 custodian_types: - equals_expression: '["A", "H"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: MonasteryArchive serves dual roles - as an ARCHIVE (A) for monastic records and as part of a HOLY_SITE (H) religious community @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MonasteryArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/MonasteryArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/MonasteryArchiveRecordSetTypes.yaml index 1c4cf0e448..21b66db8ee 100644 --- a/schemas/20251121/linkml/modules/classes/MonasteryArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/MonasteryArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MonasticRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -57,7 +57,7 @@ classes: rico_has_or_had_holder_note: equals_string: This RecordSetType is typically held by MonasteryArchive custodians. Inverse of rico:isOrWasHolderOf. - ManuscriptCollection: + MonasticManuscriptCollection: is_a: MonasteryArchiveRecordSetType class_uri: rico:RecordSetType description: "A rico:RecordSetType for Medieval manuscripts and codices.\n\n**RiC-O\ @@ -79,9 +79,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: ManuscriptCollection records are held by ARCHIVE (A) type custodians + equals_string: MonasticManuscriptCollection records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation inlined: true @@ -89,7 +89,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: ManuscriptCollection + equals_string: MonasticManuscriptCollection rico_organizational_principle: equals_string: collection rico_organizational_principle_uri: @@ -121,7 +121,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PropertyRecordsSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/MunicipalArchive.yaml b/schemas/20251121/linkml/modules/classes/MunicipalArchive.yaml index 95a257be39..73dfd594e9 100644 --- a/schemas/20251121/linkml/modules/classes/MunicipalArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/MunicipalArchive.yaml @@ -60,10 +60,10 @@ classes: wikidata_entity: equals_string: Q604177 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Municipal Archive is a local government archival institution - - maps to ARCHIVE (A) + - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -101,37 +101,3 @@ classes: - Core institution for local government records - Often oldest surviving local records - Important for genealogy and local history research - MunicipalArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by MunicipalArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `MunicipalArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - custodian_types - - custodian_types_rationale - - dual_class_link - - specificity_annotation - - template_specificity - - type_scope - see_also: - - MunicipalArchive - - rico:RecordSetType - slot_usage: - custodian_types: - equals_expression: '["A"]' - custodian_types_rationale: - equals_string: MunicipalArchiveRecordSetType classifies collections held by - ARCHIVE (A) type custodians - dual_class_link: - range: DualClassLink - inlined: true - specificity_annotation: - range: SpecificityAnnotation - inlined: true - template_specificity: - range: TemplateSpecificityScores - inlined: true diff --git a/schemas/20251121/linkml/modules/classes/MunicipalArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/MunicipalArchiveRecordSetTypes.yaml index 1f7af32f35..acd071384e 100644 --- a/schemas/20251121/linkml/modules/classes/MunicipalArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/MunicipalArchiveRecordSetTypes.yaml @@ -47,7 +47,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Municipal archive record set types are held by ARCHIVE (A) type custodians @@ -118,7 +118,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Council governance fonds are held by ARCHIVE (A) type custodians specificity_annotation: @@ -212,7 +212,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "O"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:OfficialInstitutionType"]' custodian_types_rationale: equals_string: Civil registry series are held by ARCHIVE (A) or transferred to OFFICIAL_INSTITUTION (O) such as regional archives @@ -302,7 +302,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Municipal administration fonds are held by ARCHIVE (A) type custodians @@ -396,7 +396,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Urban planning collections are held by ARCHIVE (A) type custodians specificity_annotation: @@ -492,7 +492,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "S"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HeritageSocietyType"]' custodian_types_rationale: equals_string: Local history collections may be held by ARCHIVE (A) or COLLECTING_SOCIETY (S) such as heemkundekringen diff --git a/schemas/20251121/linkml/modules/classes/MuseumArchive.yaml b/schemas/20251121/linkml/modules/classes/MuseumArchive.yaml index 60e469ebad..37c51952e6 100644 --- a/schemas/20251121/linkml/modules/classes/MuseumArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/MuseumArchive.yaml @@ -42,9 +42,9 @@ classes: wikidata_entity: equals_string: Q53566456 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: MuseumArchive is an archival institution - maps to ARCHIVE + equals_string: MuseumArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MuseumArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/MuseumArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/MuseumArchiveRecordSetTypes.yaml index 995282d130..c47118c7c3 100644 --- a/schemas/20251121/linkml/modules/classes/MuseumArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/MuseumArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MuseumAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CollectionDocumentationSeries records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ExhibitionRecordCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/MuseumType.yaml b/schemas/20251121/linkml/modules/classes/MuseumType.yaml index 53526b37d9..69ad4553eb 100644 --- a/schemas/20251121/linkml/modules/classes/MuseumType.yaml +++ b/schemas/20251121/linkml/modules/classes/MuseumType.yaml @@ -161,7 +161,7 @@ classes: range: boolean required: false custodian_types: - equals_expression: '["M"]' + equals_expression: '["hc:MuseumType"]' custodian_types_rationale: equals_string: MuseumType represents museum organizations - maps exclusively to MUSEUM type (M) diff --git a/schemas/20251121/linkml/modules/classes/MusicArchive.yaml b/schemas/20251121/linkml/modules/classes/MusicArchive.yaml index a8af8c2e4a..f826953498 100644 --- a/schemas/20251121/linkml/modules/classes/MusicArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/MusicArchive.yaml @@ -42,10 +42,10 @@ classes: wikidata_entity: equals_string: Q53759838 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MusicArchive is a specialized archive type for music recordings - and documents - maps to ARCHIVE type (A) + and documents - maps to ArchiveOrganizationType type (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MusicArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/MusicArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/MusicArchiveRecordSetTypes.yaml index 03410680ee..41fbb66dff 100644 --- a/schemas/20251121/linkml/modules/classes/MusicArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/MusicArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MusicManuscriptCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PerformanceRecordingSeries records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ComposerPapersCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/Nachlass.yaml b/schemas/20251121/linkml/modules/classes/Nachlass.yaml index 016db4478e..39251e8d32 100644 --- a/schemas/20251121/linkml/modules/classes/Nachlass.yaml +++ b/schemas/20251121/linkml/modules/classes/Nachlass.yaml @@ -20,10 +20,10 @@ classes: wikidata_entity: equals_string: Q3827332 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Nachlass (personal papers) is an archival collection type - - maps to ARCHIVE (A) + maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/schemas/20251121/linkml/modules/classes/NationalArchives.yaml b/schemas/20251121/linkml/modules/classes/NationalArchives.yaml index 70d49e9468..3b9093bb6c 100644 --- a/schemas/20251121/linkml/modules/classes/NationalArchives.yaml +++ b/schemas/20251121/linkml/modules/classes/NationalArchives.yaml @@ -43,9 +43,9 @@ classes: wikidata_entity: equals_string: Q2122214 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: NationalArchives is an archival institution - maps to ARCHIVE + equals_string: NationalArchives is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -97,7 +97,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NationalArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/NationalArchivesRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/NationalArchivesRecordSetTypes.yaml index 48e541267e..0584c06ae8 100644 --- a/schemas/20251121/linkml/modules/classes/NationalArchivesRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/NationalArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: GovernmentAdministrativeFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LegislativeRecordSeries records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DiplomaticCorrespondenceCollection records are held by ARCHIVE (A) type custodians @@ -166,7 +166,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NationalStatisticsSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/NewspaperClippingsArchive.yaml b/schemas/20251121/linkml/modules/classes/NewspaperClippingsArchive.yaml index 3d7a0f2ec6..40c1c7dbf9 100644 --- a/schemas/20251121/linkml/modules/classes/NewspaperClippingsArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/NewspaperClippingsArchive.yaml @@ -42,7 +42,7 @@ classes: wikidata_entity: equals_string: Q65651503 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NewspaperClippingsArchive is an archival institution - maps to ARCHIVE (A) @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NewspaperClippingsArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/NewspaperClippingsArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/NewspaperClippingsArchiveRecordSetTypes.yaml index 5c78ad5fcc..fb371784fe 100644 --- a/schemas/20251121/linkml/modules/classes/NewspaperClippingsArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/NewspaperClippingsArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ClippingsCollection records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SubjectFileCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/NobilityArchive.yaml b/schemas/20251121/linkml/modules/classes/NobilityArchive.yaml index a6b329f9f2..74db9a6250 100644 --- a/schemas/20251121/linkml/modules/classes/NobilityArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/NobilityArchive.yaml @@ -42,9 +42,9 @@ classes: wikidata_entity: equals_string: Q355358 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: NobilityArchive is an archival institution - maps to ARCHIVE + equals_string: NobilityArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NobilityArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/NobilityArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/NobilityArchiveRecordSetTypes.yaml index 415d00cdfa..fa9620750e 100644 --- a/schemas/20251121/linkml/modules/classes/NobilityArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/NobilityArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NobleFamily papersFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: EstateRecordsSeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: GenealogyCollection records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/NonProfitType.yaml b/schemas/20251121/linkml/modules/classes/NonProfitType.yaml index f5fa01970a..a5ddf40725 100644 --- a/schemas/20251121/linkml/modules/classes/NonProfitType.yaml +++ b/schemas/20251121/linkml/modules/classes/NonProfitType.yaml @@ -354,10 +354,10 @@ classes: - value: Professionals trained, Knowledge retention description: Training NGO impact custodian_types: - equals_expression: '["N"]' + equals_expression: '["hc:NonProfitType"]' custodian_types_rationale: equals_string: NonProfitType represents heritage-focused NGOs and non-profit - organizations - maps to NGO type (N) + organizations - maps to NonProfitType type (N) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/schemas/20251121/linkml/modules/classes/NotarialArchive.yaml b/schemas/20251121/linkml/modules/classes/NotarialArchive.yaml index 4e551c316f..654936cc0c 100644 --- a/schemas/20251121/linkml/modules/classes/NotarialArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/NotarialArchive.yaml @@ -42,9 +42,9 @@ classes: wikidata_entity: equals_string: Q8203685 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: NotarialArchive is an archival institution - maps to ARCHIVE + equals_string: NotarialArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -91,7 +91,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NotarialArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/NotarialArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/NotarialArchiveRecordSetTypes.yaml index 60a0acc8f3..f2ff83009c 100644 --- a/schemas/20251121/linkml/modules/classes/NotarialArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/NotarialArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NotarialActsSeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ProtocolSeries records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/OfficialInstitutionType.yaml b/schemas/20251121/linkml/modules/classes/OfficialInstitutionType.yaml index 87ddafe41b..44df26571f 100644 --- a/schemas/20251121/linkml/modules/classes/OfficialInstitutionType.yaml +++ b/schemas/20251121/linkml/modules/classes/OfficialInstitutionType.yaml @@ -290,7 +290,7 @@ classes: range: string required: false custodian_types: - equals_expression: '["O"]' + equals_expression: '["hc:OfficialInstitutionType"]' custodian_types_rationale: equals_string: Official institutions are government heritage agencies with formal authority (GLAMORCUBESFIXPHDNT code O) diff --git a/schemas/20251121/linkml/modules/classes/OnlineNewsArchive.yaml b/schemas/20251121/linkml/modules/classes/OnlineNewsArchive.yaml index 72be218a2a..52f7282f84 100644 --- a/schemas/20251121/linkml/modules/classes/OnlineNewsArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/OnlineNewsArchive.yaml @@ -45,9 +45,9 @@ classes: platform_type_id: identifier: false custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: OnlineNewsArchive is an archival institution - maps to ARCHIVE + equals_string: OnlineNewsArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -94,7 +94,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: OnlineNewsArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/OnlineNewsArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/OnlineNewsArchiveRecordSetTypes.yaml index 4419511518..e9a03476e7 100644 --- a/schemas/20251121/linkml/modules/classes/OnlineNewsArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/OnlineNewsArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DigitalNewsCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: WebPublicationFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/ParishArchive.yaml b/schemas/20251121/linkml/modules/classes/ParishArchive.yaml index 70b54b7686..e530d8887c 100644 --- a/schemas/20251121/linkml/modules/classes/ParishArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/ParishArchive.yaml @@ -42,7 +42,7 @@ classes: wikidata_entity: equals_string: Q34544468 custodian_types: - equals_expression: '["A", "H"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: Parish Archive is both archival (A) and religious (H) specificity_annotation: @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ParishArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ParishArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/ParishArchiveRecordSetTypes.yaml index 3bf264f42a..4bcb2dd11b 100644 --- a/schemas/20251121/linkml/modules/classes/ParishArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ParishArchiveRecordSetTypes.yaml @@ -15,12 +15,13 @@ imports: - ./ParishArchive - ../slots/class_metadata_slots classes: - ParishRegisterSeries: + ParishSpecificRegisterSeries: is_a: ParishArchiveRecordSetType class_uri: rico:RecordSetType - description: "A rico:RecordSetType for Baptismal, marriage, burial registers.\n\ + description: "A rico:RecordSetType for parish-specific baptismal, marriage, burial registers.\n\ \n**RiC-O Alignment**:\nThis class is a specialized rico:RecordSetType following\ - \ the series \norganizational principle as defined by rico-rst:Series.\n" + \ the series \norganizational principle as defined by rico-rst:Series.\n\n**Note**:\ + \ This is parish-specific. For the general church parish registers, see ParishRegisterSeries.\n" exact_mappings: - rico:RecordSetType related_mappings: @@ -30,6 +31,7 @@ classes: see_also: - ParishArchiveRecordSetType - rico:RecordSetType + - ParishRegisterSeries slots: - custodian_types - custodian_types_rationale @@ -37,9 +39,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: ParishRegisterSeries records are held by ARCHIVE (A) type custodians + equals_string: ParishSpecificRegisterSeries records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation inlined: true @@ -47,7 +49,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: ParishRegisterSeries + equals_string: ParishSpecificRegisterSeries rico_organizational_principle: equals_string: series rico_organizational_principle_uri: @@ -79,7 +81,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ParishAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -122,7 +124,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SacramentalRecordCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ParliamentaryArchives.yaml b/schemas/20251121/linkml/modules/classes/ParliamentaryArchives.yaml index 1962e7f712..377173145d 100644 --- a/schemas/20251121/linkml/modules/classes/ParliamentaryArchives.yaml +++ b/schemas/20251121/linkml/modules/classes/ParliamentaryArchives.yaml @@ -41,7 +41,7 @@ classes: wikidata_entity: equals_string: Q53251146 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ParliamentaryArchives is an archival institution - maps to ARCHIVE (A) @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ParliamentaryArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ParliamentaryArchivesRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/ParliamentaryArchivesRecordSetTypes.yaml index 01a1502ffa..5abc982dd3 100644 --- a/schemas/20251121/linkml/modules/classes/ParliamentaryArchivesRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ParliamentaryArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ParliamentaryProceedingsFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CommitteeRecordSeries records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LegislativeDraftCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/PartyArchive.yaml b/schemas/20251121/linkml/modules/classes/PartyArchive.yaml index e4e0a03925..d192986e60 100644 --- a/schemas/20251121/linkml/modules/classes/PartyArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/PartyArchive.yaml @@ -41,9 +41,9 @@ classes: wikidata_entity: equals_string: Q53252161 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: PartyArchive is an archival institution - maps to ARCHIVE (A) + equals_string: PartyArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -85,7 +85,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PartyArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/PartyArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/PartyArchiveRecordSetTypes.yaml index d66b178c57..c96ebd977e 100644 --- a/schemas/20251121/linkml/modules/classes/PartyArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/PartyArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PartyAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MembershipRecordSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/PerformingArtsArchive.yaml b/schemas/20251121/linkml/modules/classes/PerformingArtsArchive.yaml index 70fe4de352..ea5b3302b7 100644 --- a/schemas/20251121/linkml/modules/classes/PerformingArtsArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/PerformingArtsArchive.yaml @@ -42,10 +42,10 @@ classes: wikidata_entity: equals_string: Q27030945 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PerformingArtsArchive is a specialized archive for performing - arts materials - maps to ARCHIVE type (A) + arts materials - maps to ArchiveOrganizationType type (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -88,7 +88,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PerformingArtsArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/PerformingArtsArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/PerformingArtsArchiveRecordSetTypes.yaml index b867fa5d94..9916c779e9 100644 --- a/schemas/20251121/linkml/modules/classes/PerformingArtsArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/PerformingArtsArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: TheatreRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PerformanceDocumentationCollection records are held by ARCHIVE (A) type custodians @@ -100,7 +100,7 @@ classes: rico_has_or_had_holder_note: equals_string: This RecordSetType is typically held by PerformingArtsArchive custodians. Inverse of rico:isOrWasHolderOf. - ProductionRecordSeries: + PerformingArtsProductionRecordSeries: is_a: PerformingArtsArchiveRecordSetType class_uri: rico:RecordSetType description: "A rico:RecordSetType for Production records.\n\n**RiC-O Alignment**:\n\ @@ -122,9 +122,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: ProductionRecordSeries records are held by ARCHIVE (A) type + equals_string: PerformingArtsProductionRecordSeries records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation @@ -133,7 +133,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: ProductionRecordSeries + equals_string: PerformingArtsProductionRecordSeries rico_organizational_principle: equals_string: series rico_organizational_principle_uri: diff --git a/schemas/20251121/linkml/modules/classes/PersonalCollectionType.yaml b/schemas/20251121/linkml/modules/classes/PersonalCollectionType.yaml index faf6bd1ad5..1b5915260f 100644 --- a/schemas/20251121/linkml/modules/classes/PersonalCollectionType.yaml +++ b/schemas/20251121/linkml/modules/classes/PersonalCollectionType.yaml @@ -298,7 +298,7 @@ classes: - value: House museum, Foundation established description: In situ preservation model custodian_types: - equals_expression: '["P"]' + equals_expression: '["hc:PersonalCollectionType"]' custodian_types_rationale: equals_string: PersonalCollectionType is specific to individual private collectors maintaining personal heritage collections diff --git a/schemas/20251121/linkml/modules/classes/PersonalLibrary.yaml b/schemas/20251121/linkml/modules/classes/PersonalLibrary.yaml index 6c7b2ab356..8debb4a45d 100644 --- a/schemas/20251121/linkml/modules/classes/PersonalLibrary.yaml +++ b/schemas/20251121/linkml/modules/classes/PersonalLibrary.yaml @@ -25,7 +25,7 @@ classes: wikidata_entity: equals_string: Q106402388 custodian_types: - equals_expression: '["L", "P"]' + equals_expression: '["hc:LibraryType", "hc:PersonalCollectionType"]' custodian_types_rationale: equals_string: Personal library combines library (L) and personal collection (P). diff --git a/schemas/20251121/linkml/modules/classes/PhotoArchive.yaml b/schemas/20251121/linkml/modules/classes/PhotoArchive.yaml index 25a1c203c1..b280aa158d 100644 --- a/schemas/20251121/linkml/modules/classes/PhotoArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/PhotoArchive.yaml @@ -42,10 +42,10 @@ classes: wikidata_entity: equals_string: Q27032363 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PhotoArchive is a specialized archive type for photographic - materials - maps to ARCHIVE type (A) + materials - maps to ArchiveOrganizationType type (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +90,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PhotoArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/PhotoArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/PhotoArchiveRecordSetTypes.yaml index 4bc9b7479b..569a4482bc 100644 --- a/schemas/20251121/linkml/modules/classes/PhotoArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/PhotoArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PhotographerPapersCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PhotographicPrintSeries records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DigitalImageCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/PhotographCollection.yaml b/schemas/20251121/linkml/modules/classes/PhotographCollection.yaml index 669641fdf4..73f06fcea6 100644 --- a/schemas/20251121/linkml/modules/classes/PhotographCollection.yaml +++ b/schemas/20251121/linkml/modules/classes/PhotographCollection.yaml @@ -25,7 +25,7 @@ classes: wikidata_entity: equals_string: Q130486108 custodian_types: - equals_expression: '["A", "M"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:MuseumType"]' custodian_types_rationale: equals_string: Photograph collections are typically in archives (A) or museums (M). diff --git a/schemas/20251121/linkml/modules/classes/PoliticalArchive.yaml b/schemas/20251121/linkml/modules/classes/PoliticalArchive.yaml index d0203cff5b..fd59280c45 100644 --- a/schemas/20251121/linkml/modules/classes/PoliticalArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/PoliticalArchive.yaml @@ -41,9 +41,9 @@ classes: wikidata_entity: equals_string: Q27030921 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: PoliticalArchive is an archival institution - maps to ARCHIVE + equals_string: PoliticalArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -87,7 +87,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PoliticalArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/PoliticalArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/PoliticalArchiveRecordSetTypes.yaml index 452fee9374..7ae89d1618 100644 --- a/schemas/20251121/linkml/modules/classes/PoliticalArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/PoliticalArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PoliticalPartyFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CampaignRecordCollection records are held by ARCHIVE (A) type custodians @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PoliticianPapersCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/PostcustodialArchive.yaml b/schemas/20251121/linkml/modules/classes/PostcustodialArchive.yaml index 270125ae79..c5e150ae42 100644 --- a/schemas/20251121/linkml/modules/classes/PostcustodialArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/PostcustodialArchive.yaml @@ -42,9 +42,9 @@ classes: wikidata_entity: equals_string: Q124223197 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: PostcustodialArchive is an archival institution - maps to ARCHIVE + equals_string: PostcustodialArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -86,7 +86,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PostcustodialArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/PostcustodialArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/PostcustodialArchiveRecordSetTypes.yaml index 78105704ce..c48e252062 100644 --- a/schemas/20251121/linkml/modules/classes/PostcustodialArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/PostcustodialArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: DistributedRecordsCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/PressArchive.yaml b/schemas/20251121/linkml/modules/classes/PressArchive.yaml index fc121aa52f..f1c219e478 100644 --- a/schemas/20251121/linkml/modules/classes/PressArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/PressArchive.yaml @@ -41,9 +41,9 @@ classes: wikidata_entity: equals_string: Q56650887 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: PressArchive is an archival institution - maps to ARCHIVE (A) + equals_string: PressArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -88,7 +88,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PressArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/PressArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/PressArchiveRecordSetTypes.yaml index 5c4f1db0ac..79ca691709 100644 --- a/schemas/20251121/linkml/modules/classes/PressArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/PressArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NewspaperPublicationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: JournalistPapersCollection records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: EditorialRecordSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/PrintRoom.yaml b/schemas/20251121/linkml/modules/classes/PrintRoom.yaml index 12d5846901..b7b8193ba8 100644 --- a/schemas/20251121/linkml/modules/classes/PrintRoom.yaml +++ b/schemas/20251121/linkml/modules/classes/PrintRoom.yaml @@ -20,9 +20,9 @@ classes: wikidata_entity: equals_string: Q445396 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: PrintRoom is an archival institution - maps to ARCHIVE (A) + equals_string: PrintRoom is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/schemas/20251121/linkml/modules/classes/ProvenanceEvent.yaml b/schemas/20251121/linkml/modules/classes/ProvenanceEvent.yaml index 3e7763741b..c52232bdc6 100644 --- a/schemas/20251121/linkml/modules/classes/ProvenanceEvent.yaml +++ b/schemas/20251121/linkml/modules/classes/ProvenanceEvent.yaml @@ -406,7 +406,7 @@ classes: - value: des Tombe purchased at auction for 30 guilders, a bargain price - value: The painting's attribution to Vermeer was not recognized until later custodian_types: - equals_expression: '["G", "M", "A", "L", "R", "H", "B", "P"]' + equals_expression: '["hc:GalleryType", "hc:MuseumType", "hc:ArchiveOrganizationType", "hc:LibraryType", "hc:ResearchOrganizationType", "hc:HolySacredSiteType", "hc:BioCustodianType", "hc:PersonalCollectionType"]' custodian_types_rationale: equals_string: | ProvenanceEvent is relevant to all custodian types managing objects with diff --git a/schemas/20251121/linkml/modules/classes/ProvincialArchive.yaml b/schemas/20251121/linkml/modules/classes/ProvincialArchive.yaml index a2c881b4ed..0d64c6702e 100644 --- a/schemas/20251121/linkml/modules/classes/ProvincialArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/ProvincialArchive.yaml @@ -42,9 +42,9 @@ classes: wikidata_entity: equals_string: Q5403345 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: ProvincialArchive is an archival institution - maps to ARCHIVE + equals_string: ProvincialArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -88,7 +88,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ProvincialArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ProvincialArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/ProvincialArchiveRecordSetTypes.yaml index fb373d1e95..fbb4352691 100644 --- a/schemas/20251121/linkml/modules/classes/ProvincialArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ProvincialArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ProvincialAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalPlanningCollection records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ProvincialCourtSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ProvincialHistoricalArchive.yaml b/schemas/20251121/linkml/modules/classes/ProvincialHistoricalArchive.yaml index 377ffa77fe..bf0f0710b0 100644 --- a/schemas/20251121/linkml/modules/classes/ProvincialHistoricalArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/ProvincialHistoricalArchive.yaml @@ -96,7 +96,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ProvincialHistoricalArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ProvincialHistoricalArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/ProvincialHistoricalArchiveRecordSetTypes.yaml index b4c71805af..ef90ee5a0f 100644 --- a/schemas/20251121/linkml/modules/classes/ProvincialHistoricalArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ProvincialHistoricalArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ProvincialHistoricalFonds records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/PublicArchive.yaml b/schemas/20251121/linkml/modules/classes/PublicArchive.yaml index 5e688d3ee8..7b5b86f300 100644 --- a/schemas/20251121/linkml/modules/classes/PublicArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/PublicArchive.yaml @@ -41,9 +41,9 @@ classes: wikidata_entity: equals_string: Q27031009 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: PublicArchive is an archival institution - maps to ARCHIVE + equals_string: PublicArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PublicArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/PublicArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/PublicArchiveRecordSetTypes.yaml index 186dae8539..500e6abe3c 100644 --- a/schemas/20251121/linkml/modules/classes/PublicArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/PublicArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PublicRecordsFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CivicDocumentationCollection records are held by ARCHIVE (A) type custodians @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: AdministrativeCorrespondenceSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/PublicArchivesInFrance.yaml b/schemas/20251121/linkml/modules/classes/PublicArchivesInFrance.yaml index 54d89631c8..ff2c5b8e44 100644 --- a/schemas/20251121/linkml/modules/classes/PublicArchivesInFrance.yaml +++ b/schemas/20251121/linkml/modules/classes/PublicArchivesInFrance.yaml @@ -42,7 +42,7 @@ classes: wikidata_entity: equals_string: Q2421452 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PublicArchivesInFrance is an archival institution - maps to ARCHIVE (A) @@ -88,7 +88,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: PublicArchivesInFranceRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/PublicArchivesInFranceRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/PublicArchivesInFranceRecordSetTypes.yaml index f55497a681..567e06603e 100644 --- a/schemas/20251121/linkml/modules/classes/PublicArchivesInFranceRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/PublicArchivesInFranceRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FrenchPublicFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/RadioArchive.yaml b/schemas/20251121/linkml/modules/classes/RadioArchive.yaml index de9598368b..7b0627a92f 100644 --- a/schemas/20251121/linkml/modules/classes/RadioArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/RadioArchive.yaml @@ -42,9 +42,9 @@ classes: wikidata_entity: equals_string: Q109326271 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: RadioArchive is an archival institution - maps to ARCHIVE (A) + equals_string: RadioArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation inlined: true @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RadioArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/RadioArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/RadioArchiveRecordSetTypes.yaml index 87a60ca5b1..2bce9e693f 100644 --- a/schemas/20251121/linkml/modules/classes/RadioArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/RadioArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: BroadcastRecordingFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RadioScriptCollection records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: StationAdministrationSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/RegionalArchive.yaml b/schemas/20251121/linkml/modules/classes/RegionalArchive.yaml index ee5b561f51..fa5a60c3d3 100644 --- a/schemas/20251121/linkml/modules/classes/RegionalArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/RegionalArchive.yaml @@ -54,9 +54,9 @@ classes: equals_expression: | ["hc:RegionalGovernanceFonds", "hc:CadastralAndLandRecordsFonds", "hc:NotarialProtocolSeries", "hc:RegionalHistoryCollection", "hc:WaterManagementFonds"] custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: RegionalArchive is an archival institution - maps to ARCHIVE + equals_string: RegionalArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -82,37 +82,3 @@ classes: - Serves geographic region - Scope between national and local - May cross administrative boundaries - RegionalArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by RegionalArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `RegionalArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - custodian_types - - custodian_types_rationale - - dual_class_link - - specificity_annotation - - template_specificity - - type_scope - see_also: - - RegionalArchive - - rico:RecordSetType - slot_usage: - custodian_types: - equals_expression: '["A"]' - custodian_types_rationale: - equals_string: RegionalArchiveRecordSetType classifies collections held by - ARCHIVE (A) type custodians - dual_class_link: - range: DualClassLink - inlined: true - specificity_annotation: - range: SpecificityAnnotation - inlined: true - template_specificity: - range: TemplateSpecificityScores - inlined: true diff --git a/schemas/20251121/linkml/modules/classes/RegionalArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/RegionalArchiveRecordSetTypes.yaml index 07c69aec6e..d72d7678c6 100644 --- a/schemas/20251121/linkml/modules/classes/RegionalArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/RegionalArchiveRecordSetTypes.yaml @@ -48,7 +48,7 @@ classes: - specificity_annotation slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Regional archive record set types are held by ARCHIVE (A) type custodians @@ -127,7 +127,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Regional governance fonds are held by ARCHIVE (A) type custodians specificity_annotation: @@ -230,7 +230,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Cadastral records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -333,7 +333,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Notarial protocols are held by ARCHIVE (A) type custodians specificity_annotation: @@ -438,7 +438,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "L", "S"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:LibraryType", "hc:HeritageSocietyType"]' custodian_types_rationale: equals_string: Regional history collections may be held by ARCHIVE (A), LIBRARY (L), or historical SOCIETY (S) @@ -544,7 +544,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Water management fonds are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/RegionalArchivesInIceland.yaml b/schemas/20251121/linkml/modules/classes/RegionalArchivesInIceland.yaml index 827715679d..eebe5a76b6 100644 --- a/schemas/20251121/linkml/modules/classes/RegionalArchivesInIceland.yaml +++ b/schemas/20251121/linkml/modules/classes/RegionalArchivesInIceland.yaml @@ -41,7 +41,7 @@ classes: wikidata_entity: equals_string: Q16428785 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalArchivesInIceland is an archival institution - maps to ARCHIVE (A) @@ -86,7 +86,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalArchivesInIcelandRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/RegionalArchivesInIcelandRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/RegionalArchivesInIcelandRecordSetTypes.yaml index b5a7598cfb..935a7726fa 100644 --- a/schemas/20251121/linkml/modules/classes/RegionalArchivesInIcelandRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/RegionalArchivesInIcelandRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: IcelandicRegionalFonds records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/RegionalEconomicArchive.yaml b/schemas/20251121/linkml/modules/classes/RegionalEconomicArchive.yaml index 41217a9449..e77a44cf53 100644 --- a/schemas/20251121/linkml/modules/classes/RegionalEconomicArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/RegionalEconomicArchive.yaml @@ -41,7 +41,7 @@ classes: wikidata_entity: equals_string: Q2138319 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalEconomicArchive is an archival institution - maps to ARCHIVE (A) @@ -87,7 +87,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalEconomicArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/RegionalEconomicArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/RegionalEconomicArchiveRecordSetTypes.yaml index 36d14c2ec7..b37d75cbd7 100644 --- a/schemas/20251121/linkml/modules/classes/RegionalEconomicArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/RegionalEconomicArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalBusinessFonds records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/RegionalStateArchives.yaml b/schemas/20251121/linkml/modules/classes/RegionalStateArchives.yaml index cb7cc13645..2391297b96 100644 --- a/schemas/20251121/linkml/modules/classes/RegionalStateArchives.yaml +++ b/schemas/20251121/linkml/modules/classes/RegionalStateArchives.yaml @@ -41,7 +41,7 @@ classes: wikidata_entity: equals_string: Q8727648 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalStateArchives is an archival institution - maps to ARCHIVE (A) @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalStateArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/RegionalStateArchivesRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/RegionalStateArchivesRecordSetTypes.yaml index 65e2ac55e1..26166c5aef 100644 --- a/schemas/20251121/linkml/modules/classes/RegionalStateArchivesRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/RegionalStateArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: RegionalStateFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/ReligiousArchive.yaml b/schemas/20251121/linkml/modules/classes/ReligiousArchive.yaml index e8fec55d9b..06c1c9ff0a 100644 --- a/schemas/20251121/linkml/modules/classes/ReligiousArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/ReligiousArchive.yaml @@ -42,7 +42,7 @@ classes: wikidata_entity: equals_string: Q85545753 custodian_types: - equals_expression: '["A", "H"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:HolySacredSiteType"]' custodian_types_rationale: equals_string: Religious Archive is both archival (A) and associated with holy sites/religious institutions (H) @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ReligiousArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ReligiousArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/ReligiousArchiveRecordSetTypes.yaml index 40ea3840d8..8d46b54f9e 100644 --- a/schemas/20251121/linkml/modules/classes/ReligiousArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ReligiousArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ReligiousInstitutionFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CongregationalRecordsSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ResearchCenter.yaml b/schemas/20251121/linkml/modules/classes/ResearchCenter.yaml index 7969415dab..8b315bd4e1 100644 --- a/schemas/20251121/linkml/modules/classes/ResearchCenter.yaml +++ b/schemas/20251121/linkml/modules/classes/ResearchCenter.yaml @@ -313,7 +313,7 @@ classes: range: ReconstructionActivity required: false custodian_types: - equals_expression: '["R"]' + equals_expression: '["hc:ResearchOrganizationType"]' custodian_types_rationale: equals_string: ResearchCenter represents research institutes and academic facilities - maps exclusively to RESEARCH_CENTER type (R) diff --git a/schemas/20251121/linkml/modules/classes/ResearchOrganizationType.yaml b/schemas/20251121/linkml/modules/classes/ResearchOrganizationType.yaml index ddc86417e2..0322a3fa03 100644 --- a/schemas/20251121/linkml/modules/classes/ResearchOrganizationType.yaml +++ b/schemas/20251121/linkml/modules/classes/ResearchOrganizationType.yaml @@ -149,10 +149,10 @@ classes: range: ResearchOrganizationType required: false custodian_types: - equals_expression: '["R"]' + equals_expression: '["hc:ResearchOrganizationType"]' custodian_types_rationale: equals_string: ResearchOrganizationType represents research organizations - and institutes - maps to RESEARCH_CENTER type (R) + and institutes - maps to ResearchOrganizationType type (R) specificity_annotation: range: SpecificityAnnotation inlined: true diff --git a/schemas/20251121/linkml/modules/classes/SchoolArchive.yaml b/schemas/20251121/linkml/modules/classes/SchoolArchive.yaml index 63acf99e2e..76aaaf9b63 100644 --- a/schemas/20251121/linkml/modules/classes/SchoolArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/SchoolArchive.yaml @@ -41,9 +41,9 @@ classes: wikidata_entity: equals_string: Q27030883 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: SchoolArchive is an archival institution - maps to ARCHIVE + equals_string: SchoolArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -89,7 +89,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SchoolArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/SchoolArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/SchoolArchiveRecordSetTypes.yaml index 0dc983bf81..fad915cf30 100644 --- a/schemas/20251121/linkml/modules/classes/SchoolArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/SchoolArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SchoolAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -58,7 +58,7 @@ classes: rico_has_or_had_holder_note: equals_string: This RecordSetType is typically held by SchoolArchive custodians. Inverse of rico:isOrWasHolderOf. - StudentRecordSeries: + SchoolStudentRecordSeries: is_a: SchoolArchiveRecordSetType class_uri: rico:RecordSetType description: "A rico:RecordSetType for Pupil records.\n\n**RiC-O Alignment**:\n\ @@ -80,9 +80,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: StudentRecordSeries records are held by ARCHIVE (A) type custodians + equals_string: SchoolStudentRecordSeries records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation inlined: true @@ -90,7 +90,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: StudentRecordSeries + equals_string: SchoolStudentRecordSeries rico_organizational_principle: equals_string: series rico_organizational_principle_uri: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CurriculumDocumentCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ScientificArchive.yaml b/schemas/20251121/linkml/modules/classes/ScientificArchive.yaml index 97824114bb..ac07490f9f 100644 --- a/schemas/20251121/linkml/modules/classes/ScientificArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/ScientificArchive.yaml @@ -42,9 +42,9 @@ classes: wikidata_entity: equals_string: Q27032095 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: ScientificArchive is an archival institution - maps to ARCHIVE + equals_string: ScientificArchive is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -87,7 +87,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ScientificArchiveRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/ScientificArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/ScientificArchiveRecordSetTypes.yaml index 47fce62c8c..b7611b0200 100644 --- a/schemas/20251121/linkml/modules/classes/ScientificArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/ScientificArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ResearchProjectFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ScientistPapersCollection records are held by ARCHIVE (A) type custodians @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LaboratoryRecordSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/SectorOfArchivesInSweden.yaml b/schemas/20251121/linkml/modules/classes/SectorOfArchivesInSweden.yaml index f717ef3db0..6779e84428 100644 --- a/schemas/20251121/linkml/modules/classes/SectorOfArchivesInSweden.yaml +++ b/schemas/20251121/linkml/modules/classes/SectorOfArchivesInSweden.yaml @@ -47,7 +47,7 @@ classes: wikidata_entity: equals_string: Q84171278 custodian_types: - equals_expression: '["A", "O"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:OfficialInstitutionType"]' custodian_types_rationale: equals_string: Swedish archives sector is an official archive institution (A, O). @@ -87,7 +87,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SectorOfArchivesInSwedenRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/SectorOfArchivesInSwedenRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/SectorOfArchivesInSwedenRecordSetTypes.yaml index a91abf5b2a..c2f0fb46d0 100644 --- a/schemas/20251121/linkml/modules/classes/SectorOfArchivesInSwedenRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/SectorOfArchivesInSwedenRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SwedishSectorFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/SecurityArchives.yaml b/schemas/20251121/linkml/modules/classes/SecurityArchives.yaml index e1f888af50..16daf8ddde 100644 --- a/schemas/20251121/linkml/modules/classes/SecurityArchives.yaml +++ b/schemas/20251121/linkml/modules/classes/SecurityArchives.yaml @@ -41,9 +41,9 @@ classes: wikidata_entity: equals_string: Q101475797 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: SecurityArchives is an archival institution - maps to ARCHIVE + equals_string: SecurityArchives is an archival institution - maps to ArchiveOrganizationType (A) specificity_annotation: range: SpecificityAnnotation @@ -87,7 +87,7 @@ classes: - rico:RecordSetType slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SecurityArchivesRecordSetType classifies collections held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/SecurityArchivesRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/SecurityArchivesRecordSetTypes.yaml index 285f5da358..054e4c7451 100644 --- a/schemas/20251121/linkml/modules/classes/SecurityArchivesRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/SecurityArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SecurityServiceFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SurveillanceRecordSeries records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/SoundArchive.yaml b/schemas/20251121/linkml/modules/classes/SoundArchive.yaml index 8b8f973bba..8aab1e7d41 100644 --- a/schemas/20251121/linkml/modules/classes/SoundArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/SoundArchive.yaml @@ -47,10 +47,10 @@ classes: wikidata_equivalent: equals_string: Q2230431 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SoundArchive is a specialized archive type for audio materials - - maps to ARCHIVE type (A) + - maps to ArchiveOrganizationType type (A) wikidata_alignment: range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/SoundArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/SoundArchiveRecordSetTypes.yaml index dd3834868b..832dcb204a 100644 --- a/schemas/20251121/linkml/modules/classes/SoundArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/SoundArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: AudioRecordingCollection records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: OralHistorySeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: MusicRecordingCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/SpecialCollection.yaml b/schemas/20251121/linkml/modules/classes/SpecialCollection.yaml index d145b854ec..9640b508f8 100644 --- a/schemas/20251121/linkml/modules/classes/SpecialCollection.yaml +++ b/schemas/20251121/linkml/modules/classes/SpecialCollection.yaml @@ -28,7 +28,7 @@ classes: wikidata_equivalent: equals_string: Q4431094 custodian_types: - equals_expression: '["L", "A"]' + equals_expression: '["hc:LibraryType", "hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Special collections are typically in libraries (L) or archives (A). diff --git a/schemas/20251121/linkml/modules/classes/SpecializedArchive.yaml b/schemas/20251121/linkml/modules/classes/SpecializedArchive.yaml index 17b4519530..3c666d0608 100644 --- a/schemas/20251121/linkml/modules/classes/SpecializedArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/SpecializedArchive.yaml @@ -41,9 +41,9 @@ classes: wikidata_equivalent: equals_string: Q27030941 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: SpecializedArchive is an archival institution - maps to ARCHIVE + equals_string: SpecializedArchive is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/schemas/20251121/linkml/modules/classes/SpecializedArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/SpecializedArchiveRecordSetTypes.yaml index cd550b3361..7abb4692d3 100644 --- a/schemas/20251121/linkml/modules/classes/SpecializedArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/SpecializedArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SpecializedCollectionFonds records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechia.yaml b/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechia.yaml index 525690ccc0..52efde8129 100644 --- a/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechia.yaml +++ b/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechia.yaml @@ -40,7 +40,7 @@ classes: wikidata_equivalent: equals_string: Q101470010 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SpecializedArchivesCzechia is an archival institution - maps to ARCHIVE (A) diff --git a/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechiaRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechiaRecordSetTypes.yaml index 546a24a036..5fccfbe9fc 100644 --- a/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechiaRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/SpecializedArchivesCzechiaRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: CzechSpecializedFonds records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/StateArchives.yaml b/schemas/20251121/linkml/modules/classes/StateArchives.yaml index 80db06327b..9cab99961a 100644 --- a/schemas/20251121/linkml/modules/classes/StateArchives.yaml +++ b/schemas/20251121/linkml/modules/classes/StateArchives.yaml @@ -41,9 +41,9 @@ classes: wikidata_equivalent: equals_string: Q52341833 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: StateArchives is an archival institution - maps to ARCHIVE + equals_string: StateArchives is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/schemas/20251121/linkml/modules/classes/StateArchivesRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/StateArchivesRecordSetTypes.yaml index c02c6964ec..762ad55e25 100644 --- a/schemas/20251121/linkml/modules/classes/StateArchivesRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/StateArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: StateGovernmentFonds records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: JudicialRecordSeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -121,7 +121,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: LandRecordsSeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -163,7 +163,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: TaxRecordsSeries records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/StateArchivesSection.yaml b/schemas/20251121/linkml/modules/classes/StateArchivesSection.yaml index a518fbb79d..c25784871e 100644 --- a/schemas/20251121/linkml/modules/classes/StateArchivesSection.yaml +++ b/schemas/20251121/linkml/modules/classes/StateArchivesSection.yaml @@ -41,9 +41,9 @@ classes: wikidata_equivalent: equals_string: Q44796387 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: StateArchivesSection is an archival institution - maps to ARCHIVE + equals_string: StateArchivesSection is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/schemas/20251121/linkml/modules/classes/StateArchivesSectionRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/StateArchivesSectionRecordSetTypes.yaml index 7c04ed17f6..932ad642b8 100644 --- a/schemas/20251121/linkml/modules/classes/StateArchivesSectionRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/StateArchivesSectionRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: StateSectionFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/StateDistrictArchive.yaml b/schemas/20251121/linkml/modules/classes/StateDistrictArchive.yaml index 3f882ba891..7403af3a48 100644 --- a/schemas/20251121/linkml/modules/classes/StateDistrictArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/StateDistrictArchive.yaml @@ -40,9 +40,9 @@ classes: wikidata_equivalent: equals_string: Q53131316 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: StateDistrictArchive is an archival institution - maps to ARCHIVE + equals_string: StateDistrictArchive is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/schemas/20251121/linkml/modules/classes/StateDistrictArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/StateDistrictArchiveRecordSetTypes.yaml index 6b3ef22ef5..863ecb5462 100644 --- a/schemas/20251121/linkml/modules/classes/StateDistrictArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/StateDistrictArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: StateDistrictFonds records are held by ARCHIVE (A) type custodians specificity_annotation: diff --git a/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechia.yaml b/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechia.yaml index ae1a7b0986..5dcf9063e3 100644 --- a/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechia.yaml +++ b/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechia.yaml @@ -40,7 +40,7 @@ classes: wikidata_equivalent: equals_string: Q53130134 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: StateRegionalArchiveCzechia is an archival institution - maps to ARCHIVE (A) diff --git a/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechiaRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechiaRecordSetTypes.yaml index ebb78a8f34..c91561be58 100644 --- a/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechiaRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/StateRegionalArchiveCzechiaRecordSetTypes.yaml @@ -15,7 +15,7 @@ imports: - ./StateRegionalArchiveCzechia - ../slots/class_metadata_slots classes: - RegionalStateFonds: + CzechiaRegionalStateFonds: is_a: StateRegionalArchiveCzechiaRecordSetType class_uri: rico:RecordSetType description: "A rico:RecordSetType for Czech regional state records.\n\n**RiC-O\ @@ -37,9 +37,9 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: RegionalStateFonds records are held by ARCHIVE (A) type custodians + equals_string: CzechiaRegionalStateFonds records are held by ARCHIVE (A) type custodians specificity_annotation: range: SpecificityAnnotation inlined: true @@ -47,7 +47,7 @@ classes: range: TemplateSpecificityScores inlined: true rico_record_set_type: - equals_string: RegionalStateFonds + equals_string: CzechiaRegionalStateFonds rico_organizational_principle: equals_string: fonds rico_organizational_principle_uri: diff --git a/schemas/20251121/linkml/modules/classes/TasteScentHeritageType.yaml b/schemas/20251121/linkml/modules/classes/TasteScentHeritageType.yaml index 0b187b6e0f..18f40d65ef 100644 --- a/schemas/20251121/linkml/modules/classes/TasteScentHeritageType.yaml +++ b/schemas/20251121/linkml/modules/classes/TasteScentHeritageType.yaml @@ -377,7 +377,7 @@ classes: - value: Protected PDO, Dutch cheese identity, Regional economy description: Traditional cheese significance custodian_types: - equals_expression: '["T"]' + equals_expression: '["hc:TasteScentHeritageType"]' custodian_types_rationale: equals_string: TasteScentHeritageType is specific to culinary and olfactory heritage institutions (historic breweries, perfume houses, artisanal food diff --git a/schemas/20251121/linkml/modules/classes/TelevisionArchive.yaml b/schemas/20251121/linkml/modules/classes/TelevisionArchive.yaml index 75dda9c655..8d5fe180fb 100644 --- a/schemas/20251121/linkml/modules/classes/TelevisionArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/TelevisionArchive.yaml @@ -41,9 +41,9 @@ classes: wikidata_equivalent: equals_string: Q109326243 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: TelevisionArchive is an archival institution - maps to ARCHIVE + equals_string: TelevisionArchive is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/schemas/20251121/linkml/modules/classes/TelevisionArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/TelevisionArchiveRecordSetTypes.yaml index 0f64220a43..d17eb8caa7 100644 --- a/schemas/20251121/linkml/modules/classes/TelevisionArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/TelevisionArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: TelevisionBroadcastFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: ProductionRecordSeries records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: NewsFootageCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/TentativeWorldHeritageSite.yaml b/schemas/20251121/linkml/modules/classes/TentativeWorldHeritageSite.yaml index 36416e3ade..a275c3d206 100644 --- a/schemas/20251121/linkml/modules/classes/TentativeWorldHeritageSite.yaml +++ b/schemas/20251121/linkml/modules/classes/TentativeWorldHeritageSite.yaml @@ -26,7 +26,7 @@ classes: wikidata_entity: equals_string: Q1459900 custodian_types: - equals_expression: '["F"]' + equals_expression: '["hc:FeatureCustodianType"]' custodian_types_rationale: equals_string: Tentative World Heritage Site is a feature/monument type (F). wikidata_alignment: diff --git a/schemas/20251121/linkml/modules/classes/TradeUnionArchive.yaml b/schemas/20251121/linkml/modules/classes/TradeUnionArchive.yaml index 584dd9a9f1..3dda73cc23 100644 --- a/schemas/20251121/linkml/modules/classes/TradeUnionArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/TradeUnionArchive.yaml @@ -56,10 +56,10 @@ classes: equals_expression: | ["hc:UnionAdministrationFonds", "hc:CollectiveBargainingSeries", "hc:StrikeDocumentationCollection", "hc:LaborPublicationsCollection", "hc:WorkersPhotographyCollection"] custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Trade Union Archive is an archival institution for labor organizations - - maps to ARCHIVE (A) + - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment inlined: true @@ -101,37 +101,3 @@ classes: - Preserves records of labor organizations and workers' movements - Major Dutch collection at IISG (International Institute of Social History) - Documents collective bargaining, strikes, and workers' rights - TradeUnionArchiveRecordSetType: - description: | - A rico:RecordSetType for classifying collections held by TradeUnionArchive custodians. - - **Dual-Class Pattern**: - This class represents the COLLECTION type (rico:RecordSetType). - For the custodian organization type, see `TradeUnionArchive`. - is_a: CollectionType - class_uri: rico:RecordSetType - slots: - - custodian_types - - custodian_types_rationale - - dual_class_link - - specificity_annotation - - template_specificity - - type_scope - see_also: - - TradeUnionArchive - - rico:RecordSetType - slot_usage: - custodian_types: - equals_expression: '["A"]' - custodian_types_rationale: - equals_string: TradeUnionArchiveRecordSetType classifies collections held - by ARCHIVE (A) type custodians - dual_class_link: - range: DualClassLink - inlined: true - specificity_annotation: - range: SpecificityAnnotation - inlined: true - template_specificity: - range: TemplateSpecificityScores - inlined: true diff --git a/schemas/20251121/linkml/modules/classes/TradeUnionArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/TradeUnionArchiveRecordSetTypes.yaml index e4df7b449d..157924f8c5 100644 --- a/schemas/20251121/linkml/modules/classes/TradeUnionArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/TradeUnionArchiveRecordSetTypes.yaml @@ -49,7 +49,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Trade union archive record set types are held by ARCHIVE (A) type custodians @@ -156,7 +156,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Union administration fonds are held by ARCHIVE (A) type custodians specificity_annotation: @@ -272,7 +272,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: Collective bargaining series are held by ARCHIVE (A) type custodians specificity_annotation: @@ -386,13 +386,13 @@ classes: - wd:Q9388534 close_mappings: - skos:Concept - - SocialMovementCollection see_also: - TradeUnionArchiveRecordSetType - rico:RecordSetType - rico-rst:Collection - TradeUnionArchive - PoliticalArchive + - SocialMovementCollection annotations: historical_note: Strike documentation captures moments of heightened worker mobilization. Collections often combine union records with donated materials @@ -404,7 +404,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "R"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:ResearchOrganizationType"]' custodian_types_rationale: equals_string: Strike documentation may be held by ARCHIVE (A) or RESEARCH_CENTER (R) like IISG @@ -514,7 +514,6 @@ classes: - wd:Q732577 close_mappings: - skos:Concept - - PressArchive see_also: - TradeUnionArchiveRecordSetType - rico:RecordSetType @@ -530,7 +529,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "L"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:LibraryType"]' custodian_types_rationale: equals_string: Labor publications may be held by ARCHIVE (A) or LIBRARY (L) specificity_annotation: @@ -648,12 +647,12 @@ classes: - wd:Q1260006 close_mappings: - skos:Concept - - PhotographicCollection see_also: - TradeUnionArchiveRecordSetType - rico:RecordSetType - rico-rst:Collection - PhotographicArchive + - PhotographicCollection annotations: industrial_heritage_note: Workers' photography is essential for industrial heritage documentation. Images capture workplaces, tools, and processes that may no @@ -665,7 +664,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A", "M"]' + equals_expression: '["hc:ArchiveOrganizationType", "hc:MuseumType"]' custodian_types_rationale: equals_string: Workers photography collections may be held by ARCHIVE (A) or labor MUSEUM (M) diff --git a/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml b/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml index cc4c8cb30a..b4721f4d72 100644 --- a/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/UniversityArchive.yaml @@ -41,10 +41,10 @@ classes: wikidata_equivalent: equals_string: Q2496264 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: University Archive is an archival institution in higher education - - maps to ARCHIVE (A) + - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/UniversityArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/UniversityArchiveRecordSetTypes.yaml index 06c1024aa3..6b2e2744d8 100644 --- a/schemas/20251121/linkml/modules/classes/UniversityArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/UniversityArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: UniversityAdministrationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: StudentRecordSeries records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -122,7 +122,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FacultyPapersCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/UnspecifiedType.yaml b/schemas/20251121/linkml/modules/classes/UnspecifiedType.yaml index 469eb383d2..9192d64f66 100644 --- a/schemas/20251121/linkml/modules/classes/UnspecifiedType.yaml +++ b/schemas/20251121/linkml/modules/classes/UnspecifiedType.yaml @@ -384,7 +384,7 @@ classes: - value: 'completeness: 30%, last_updated: 2025-11-23' description: Completeness flags custodian_types: - equals_expression: '["U"]' + equals_expression: '["hc:UnspecifiedType"]' custodian_types_rationale: equals_string: UnspecifiedType is for institutions where type cannot be determined. Maps to UNKNOWN (U) in GLAMORCUBESFIXPHDNT taxonomy. This is a data quality diff --git a/schemas/20251121/linkml/modules/classes/Vereinsarchiv.yaml b/schemas/20251121/linkml/modules/classes/Vereinsarchiv.yaml index 5434594301..31c93a613a 100644 --- a/schemas/20251121/linkml/modules/classes/Vereinsarchiv.yaml +++ b/schemas/20251121/linkml/modules/classes/Vereinsarchiv.yaml @@ -25,9 +25,9 @@ classes: wikidata_equivalent: equals_string: Q130758889 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: Vereinsarchiv is a German association archive - maps to ARCHIVE + equals_string: Vereinsarchiv is a German association archive - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/schemas/20251121/linkml/modules/classes/Verlagsarchiv.yaml b/schemas/20251121/linkml/modules/classes/Verlagsarchiv.yaml index 42c48bad5c..89deba70cd 100644 --- a/schemas/20251121/linkml/modules/classes/Verlagsarchiv.yaml +++ b/schemas/20251121/linkml/modules/classes/Verlagsarchiv.yaml @@ -25,9 +25,9 @@ classes: wikidata_equivalent: equals_string: Q130759004 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: Verlagsarchiv is an archival institution - maps to ARCHIVE + equals_string: Verlagsarchiv is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/schemas/20251121/linkml/modules/classes/VirtualMapLibrary.yaml b/schemas/20251121/linkml/modules/classes/VirtualMapLibrary.yaml index 5f43e2b1c6..b7984802ca 100644 --- a/schemas/20251121/linkml/modules/classes/VirtualMapLibrary.yaml +++ b/schemas/20251121/linkml/modules/classes/VirtualMapLibrary.yaml @@ -30,7 +30,7 @@ classes: platform_type_id: identifier: false custodian_types: - equals_expression: '["L", "D"]' + equals_expression: '["hc:LibraryType", "hc:DigitalPlatformType"]' custodian_types_rationale: equals_string: Virtual map library combines library (L) and digital platform (D). diff --git a/schemas/20251121/linkml/modules/classes/WebArchive.yaml b/schemas/20251121/linkml/modules/classes/WebArchive.yaml index 4da1182bfe..bb096f41fe 100644 --- a/schemas/20251121/linkml/modules/classes/WebArchive.yaml +++ b/schemas/20251121/linkml/modules/classes/WebArchive.yaml @@ -44,9 +44,9 @@ classes: platform_type_id: identifier: false custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: WebArchive is an archival institution - maps to ARCHIVE (A) + equals_string: WebArchive is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment inlined: true diff --git a/schemas/20251121/linkml/modules/classes/WebArchiveRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/WebArchiveRecordSetTypes.yaml index 0cc78ae904..227989f968 100644 --- a/schemas/20251121/linkml/modules/classes/WebArchiveRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/WebArchiveRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: WebCaptureCollection records are held by ARCHIVE (A) type custodians specificity_annotation: @@ -79,7 +79,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: SocialMediaCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/WomensArchives.yaml b/schemas/20251121/linkml/modules/classes/WomensArchives.yaml index eaad3d336e..cc4c408b08 100644 --- a/schemas/20251121/linkml/modules/classes/WomensArchives.yaml +++ b/schemas/20251121/linkml/modules/classes/WomensArchives.yaml @@ -40,9 +40,9 @@ classes: wikidata_equivalent: equals_string: Q130217628 custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: - equals_string: WomensArchives is an archival institution - maps to ARCHIVE + equals_string: WomensArchives is an archival institution - maps to ArchiveOrganizationType (A) wikidata_alignment: range: WikidataAlignment diff --git a/schemas/20251121/linkml/modules/classes/WomensArchivesRecordSetTypes.yaml b/schemas/20251121/linkml/modules/classes/WomensArchivesRecordSetTypes.yaml index 0790926df9..6eb92453a1 100644 --- a/schemas/20251121/linkml/modules/classes/WomensArchivesRecordSetTypes.yaml +++ b/schemas/20251121/linkml/modules/classes/WomensArchivesRecordSetTypes.yaml @@ -37,7 +37,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: WomensOrganizationFonds records are held by ARCHIVE (A) type custodians @@ -80,7 +80,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: FeministPapersCollection records are held by ARCHIVE (A) type custodians @@ -123,7 +123,7 @@ classes: - template_specificity slot_usage: custodian_types: - equals_expression: '["A"]' + equals_expression: '["hc:ArchiveOrganizationType"]' custodian_types_rationale: equals_string: WomensHistoryCollection records are held by ARCHIVE (A) type custodians diff --git a/schemas/20251121/linkml/modules/classes/WorldHeritageSite.yaml b/schemas/20251121/linkml/modules/classes/WorldHeritageSite.yaml index 6b758be8cd..da14b73d26 100644 --- a/schemas/20251121/linkml/modules/classes/WorldHeritageSite.yaml +++ b/schemas/20251121/linkml/modules/classes/WorldHeritageSite.yaml @@ -26,7 +26,7 @@ classes: wikidata_entity: equals_string: Q9259 custodian_types: - equals_expression: '["F"]' + equals_expression: '["hc:FeatureCustodianType"]' custodian_types_rationale: equals_string: World Heritage Site is a feature/monument type (F). wikidata_alignment: diff --git a/schemas/20251121/linkml/modules/slots/access_policy.yaml b/schemas/20251121/linkml/modules/slots/access_policy.yaml index 7b0e9aab3f..4962b4bdd4 100644 --- a/schemas/20251121/linkml/modules/slots/access_policy.yaml +++ b/schemas/20251121/linkml/modules/slots/access_policy.yaml @@ -1,32 +1,29 @@ -# Global slot definition for access_policy -# Used by ArchiveOrganizationType and HolySacredSiteType - id: https://nde.nl/ontology/hc/slot/access_policy name: access_policy - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ schema: http://schema.org/ - slots: access_policy: slot_uri: dcterms:accessRights - description: | - General policy governing access to holdings or collections. - Applies to archives (open, restricted, dark, dim, light) and - religious heritage sites (researcher access, public access, restrictions). + description: "General policy governing access to holdings or collections.\nApplies to archives (open, restricted, dark,\ + \ dim, light) and \nreligious heritage sites (researcher access, public access, restrictions).\n" range: string required: false examples: - - value: "open" - description: "Publicly accessible with minimal restrictions" - - value: "restricted" - description: "Access requires permissions or has legal restrictions" - - value: "dark" - description: "No current access (preservation only)" - - value: "Restricted access by appointment, Scholars only" - description: "Religious heritage access policy" - - value: "Public viewing during open hours, Photography prohibited" - description: "Religious heritage with public access" + - value: open + description: Publicly accessible with minimal restrictions + - value: restricted + description: Access requires permissions or has legal restrictions + - value: dark + description: No current access (preservation only) + - value: Restricted access by appointment, Scholars only + description: Religious heritage access policy + - value: Public viewing during open hours, Photography prohibited + description: Religious heritage with public access + close_mappings: + - dcterms:accessRights + broad_mappings: + - dcterms:rights diff --git a/schemas/20251121/linkml/modules/slots/access_policy_ref.yaml b/schemas/20251121/linkml/modules/slots/access_policy_ref.yaml new file mode 100644 index 0000000000..d90af27038 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/access_policy_ref.yaml @@ -0,0 +1,28 @@ +id: https://nde.nl/ontology/hc/slot/access_policy_ref +name: access_policy_ref +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + dcterms: http://purl.org/dc/terms/ +slots: + access_policy_ref: + slot_uri: dcterms:accessRights + description: 'Access policy governing collection. + + + Links to a structured AccessPolicy instance that defines + + access rights, restrictions, and conditions for this collection. + + ' + range: AccessPolicy + required: false + examples: + - value: https://nde.nl/ontology/hc/access-policy/open-access + description: Open access policy + - value: https://nde.nl/ontology/hc/access-policy/restricted-research + description: Restricted to researchers + close_mappings: + - dcterms:accessRights + broad_mappings: + - dcterms:references diff --git a/schemas/20251121/linkml/modules/slots/access_restrictions.yaml b/schemas/20251121/linkml/modules/slots/access_restrictions.yaml index d78fd291d6..a738aee4a9 100644 --- a/schemas/20251121/linkml/modules/slots/access_restrictions.yaml +++ b/schemas/20251121/linkml/modules/slots/access_restrictions.yaml @@ -1,21 +1,20 @@ -# Global Slot: access_restrictions -# Describes access restrictions or policies - id: https://nde.nl/ontology/hc/slot/access_restrictions name: access_restrictions_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - slots: access_restrictions: slot_uri: schema:conditionsOfAccess - description: | - Access restrictions or policies governing access to this resource. + description: 'Access restrictions or policies governing access to this resource. + May describe physical access limitations, digital access controls, + or regulatory restrictions. + + ' range: string + close_mappings: + - dcterms:accessRights diff --git a/schemas/20251121/linkml/modules/slots/accession_number.yaml b/schemas/20251121/linkml/modules/slots/accession_number.yaml index bea0c8d2e1..d191c22e54 100644 --- a/schemas/20251121/linkml/modules/slots/accession_number.yaml +++ b/schemas/20251121/linkml/modules/slots/accession_number.yaml @@ -1,23 +1,19 @@ -# Slot: accession_number -# Unique accession identifier for museum/archive records - id: https://nde.nl/ontology/hc/slot/accession_number name: accession_number_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: accession_number: slot_uri: dcterms:identifier range: string - description: >- - Unique accession identifier assigned when an object or record enters - the collection. Used by museums, archives, and libraries to track items. + description: Unique accession identifier assigned when an object or record enters the collection. Used by museums, archives, + and libraries to track items. + close_mappings: + - schema:identifier + related_mappings: + - dcterms:identifier diff --git a/schemas/20251121/linkml/modules/slots/acquisition_date.yaml b/schemas/20251121/linkml/modules/slots/acquisition_date.yaml index c6cd66dbff..9621d4a157 100644 --- a/schemas/20251121/linkml/modules/slots/acquisition_date.yaml +++ b/schemas/20251121/linkml/modules/slots/acquisition_date.yaml @@ -1,22 +1,20 @@ -# Slot: acquisition_date -# Date when a collection or object was acquired - id: https://nde.nl/ontology/hc/slot/acquisition_date name: acquisition_date_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: acquisition_date: slot_uri: schema:dateAcquired range: date - description: >- - Date when the collection or object was acquired by the institution. + description: Date when the collection or object was acquired by the institution. + close_mappings: + - schema:dateCreated + related_mappings: + - dcterms:date + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/acquisition_method.yaml b/schemas/20251121/linkml/modules/slots/acquisition_method.yaml index e42d2b3b66..9d12773c42 100644 --- a/schemas/20251121/linkml/modules/slots/acquisition_method.yaml +++ b/schemas/20251121/linkml/modules/slots/acquisition_method.yaml @@ -1,23 +1,20 @@ -# Slot: acquisition_method -# Method by which a collection or object was acquired - id: https://nde.nl/ontology/hc/slot/acquisition_method name: acquisition_method_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ crm: http://www.cidoc-crm.org/cidoc-crm/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: acquisition_method: slot_uri: crm:P24i_changed_ownership_through range: string - description: >- - Method by which the collection or object was acquired (e.g., purchase, - donation, bequest, transfer, exchange). + description: Method by which the collection or object was acquired (e.g., purchase, donation, bequest, transfer, exchange). + close_mappings: + - prov:wasGeneratedBy + related_mappings: + - schema:acquiredFrom + broad_mappings: + - prov:wasGeneratedBy diff --git a/schemas/20251121/linkml/modules/slots/acquisition_source.yaml b/schemas/20251121/linkml/modules/slots/acquisition_source.yaml new file mode 100644 index 0000000000..c5f105aebe --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/acquisition_source.yaml @@ -0,0 +1,28 @@ +id: https://nde.nl/ontology/hc/slot/acquisition_source +name: acquisition_source +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + acquisition_source: + slot_uri: rico:hasProvenance + description: 'From whom or where the collection was acquired. + + + Names the donor, seller, or transferring organization. + + ' + range: string + required: false + examples: + - value: Estate of John Smith + description: Donor name + - value: Ministry of Colonial Affairs + description: Transferring organization + exact_mappings: + - schema:acquiredFrom + close_mappings: + - prov:wasAttributedTo + broad_mappings: + - dcterms:source diff --git a/schemas/20251121/linkml/modules/slots/activity_type.yaml b/schemas/20251121/linkml/modules/slots/activity_type.yaml index 9904bbd3d0..5f958a357e 100644 --- a/schemas/20251121/linkml/modules/slots/activity_type.yaml +++ b/schemas/20251121/linkml/modules/slots/activity_type.yaml @@ -1,16 +1,15 @@ -# ReconstructionActivity Slot: activity_type -# Type of reconstruction activity - id: https://nde.nl/ontology/hc/slot/activity_type name: activity_type_slot - imports: - - ../enums/ReconstructionActivityTypeEnum - +- ../enums/ReconstructionActivityTypeEnum slots: activity_type: slot_uri: prov:type range: ReconstructionActivityTypeEnum - description: "Type of reconstruction activity" + description: Type of reconstruction activity exact_mappings: - - rdf:type + - rdf:type + close_mappings: + - dcterms:type + broad_mappings: + - dcterms:type diff --git a/schemas/20251121/linkml/modules/slots/affected_by_event.yaml b/schemas/20251121/linkml/modules/slots/affected_by_event.yaml index 5ba3166917..71db567b69 100644 --- a/schemas/20251121/linkml/modules/slots/affected_by_event.yaml +++ b/schemas/20251121/linkml/modules/slots/affected_by_event.yaml @@ -1,12 +1,12 @@ id: https://nde.nl/ontology/hc/slot/affected_by_event name: affected_by_event title: Affected By Event - imports: - - linkml:types - +- linkml:types slots: affected_by_event: slot_uri: prov:wasInfluencedBy description: Organizational change event that affected this person's role range: OrganizationalChangeEvent + close_mappings: + - prov:wasInfluencedBy diff --git a/schemas/20251121/linkml/modules/slots/affected_units.yaml b/schemas/20251121/linkml/modules/slots/affected_units.yaml index 74a76e764e..596f4af3d9 100644 --- a/schemas/20251121/linkml/modules/slots/affected_units.yaml +++ b/schemas/20251121/linkml/modules/slots/affected_units.yaml @@ -1,11 +1,10 @@ -# affected_units slot for OrganizationalChangeEvent - id: https://nde.nl/ontology/hc/slot/affected_units name: affected_units - slots: affected_units: - description: "Organizational units affected by this change event" + description: Organizational units affected by this change event range: OrganizationalStructure multivalued: true slot_uri: crm:P11_had_participant + close_mappings: + - prov:influenced diff --git a/schemas/20251121/linkml/modules/slots/affects_organization.yaml b/schemas/20251121/linkml/modules/slots/affects_organization.yaml index c976c44d94..3a0e221e08 100644 --- a/schemas/20251121/linkml/modules/slots/affects_organization.yaml +++ b/schemas/20251121/linkml/modules/slots/affects_organization.yaml @@ -1,68 +1,36 @@ -# Slot: affects_organization -# Inverse of organizational_change_events -# Links OrganizationalChangeEvent to custodians it affects - id: https://nde.nl/ontology/hc/slot/affects_organization name: affects_organization title: Affects Organization - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: affects_organization: slot_uri: prov:influenced - description: | - Custodians affected by this organizational change event. - - **PROV-O Alignment**: - - Property: `prov:influenced` - - Domain: prov:Activity/Entity (OrganizationalChangeEvent) - - Range: prov:Entity (Custodian) - - Definition: "An entity or activity influenced by another entity." - - **INVERSE PROPERTY**: - - **Inverse**: `organizational_change_events` (prov:wasInfluencedBy) - - Pattern: If Custodian organizational_change_events Event, then Event affects_organization Custodian - - **Event Types** (from OrganizationalChangeEventTypeEnum): - - MERGER: Multiple custodians merge into one - - SPLIT: One custodian splits into multiple - - RELOCATION: Custodian moves to new location - - NAME_CHANGE: Custodian changes name - - DISSOLUTION: Custodian ceases to exist - - **Example**: - ```yaml - OrganizationalChangeEvent: - event_type: MERGER - event_date: "2001-01-01" - event_description: "Formation of Noord-Hollands Archief" - affects_organization: - - "https://nde.nl/ontology/hc/nl-gemeentearchief-haarlem" - - "https://nde.nl/ontology/hc/nl-rijksarchief-noord-holland" - ``` - - **Navigation**: - - From event: Find affected custodians (affects_organization) - - From custodian: Find change events (organizational_change_events) + description: "Custodians affected by this organizational change event.\n\n**PROV-O Alignment**:\n\nProperty: `prov:influenced`\n\ + - Domain: prov:Activity/Entity (OrganizationalChangeEvent)\n- Range: prov:Entity (Custodian)\n- Definition: \"An entity\ + \ or activity influenced by another entity.\"\n\n**INVERSE PROPERTY**:\n- **Inverse**: `organizational_change_events`\ + \ (prov:wasInfluencedBy)\n- Pattern: If Custodian organizational_change_events Event, then Event affects_organization\ + \ Custodian\n\n**Event Types** (from OrganizationalChangeEventTypeEnum):\n- MERGER: Multiple custodians merge into one\n\ + - SPLIT: One custodian splits into multiple\n- RELOCATION: Custodian moves to new location\n- NAME_CHANGE: Custodian\ + \ changes name\n- DISSOLUTION: Custodian ceases to exist\n\n**Example**:\n```yaml\nOrganizationalChangeEvent:\n event_type:\ + \ MERGER\n event_date: \"2001-01-01\"\n event_description: \"Formation of Noord-Hollands Archief\"\n affects_organization:\n\ + \ - \"https://nde.nl/ontology/hc/nl-gemeentearchief-haarlem\"\n - \"https://nde.nl/ontology/hc/nl-rijksarchief-noord-holland\"\ + \n```\n\n**Navigation**:\n- From event: Find affected custodians (affects_organization)\n- From custodian: Find change\ + \ events (organizational_change_events)\n" range: Custodian multivalued: true - exact_mappings: - - prov:influenced - + - prov:influenced related_mappings: - - rico:affectsOrAffected - + - rico:affectsOrAffected comments: - - "Inverse of organizational_change_events (prov:wasInfluencedBy)" - - "Links event to all custodians impacted by it" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of organizational_change_events (prov:wasInfluencedBy) + - Links event to all custodians impacted by it + - Creates owl:inverseOf axiom in RDF output + broad_mappings: + - schema:organization diff --git a/schemas/20251121/linkml/modules/slots/affiliation.yaml b/schemas/20251121/linkml/modules/slots/affiliation.yaml index c39edb775b..043f2236ca 100644 --- a/schemas/20251121/linkml/modules/slots/affiliation.yaml +++ b/schemas/20251121/linkml/modules/slots/affiliation.yaml @@ -1,10 +1,9 @@ -# ReconstructionAgent Slot: affiliation -# Organizational affiliation of reconstruction agent - id: https://nde.nl/ontology/hc/slot/affiliation name: affiliation_slot - slots: affiliation: slot_uri: schema:affiliation range: string + exact_mappings: + - schema:affiliation + - org:memberOf diff --git a/schemas/20251121/linkml/modules/slots/age.yaml b/schemas/20251121/linkml/modules/slots/age.yaml index 179da8d07c..0a23f29a05 100644 --- a/schemas/20251121/linkml/modules/slots/age.yaml +++ b/schemas/20251121/linkml/modules/slots/age.yaml @@ -1,121 +1,179 @@ -# Age Slot -# String representing the age of a person as mentioned in source -# -# PiCo Pattern: Used when birth date is unknown but age is recorded. -# Combined with source date, a birth date range can be derived. - id: https://nde.nl/ontology/hc/slot/age name: age_slot title: Age Slot - prefixes: pico: https://personsincontext.org/model# sdo: https://schema.org/ foaf: http://xmlns.com/foaf/0.1/ - imports: - - linkml:types - +- linkml:types slots: age: slot_uri: pico:hasAge - description: | - The age of a person as mentioned in the source. - + description: 'The age of a person as mentioned in the source. + + =========================================================================== + PiCo ONTOLOGY ALIGNMENT (pico.ttl lines 531-546) + =========================================================================== - + + Per PiCo (Persons in Context) ontology: + - Only used for PersonObservations when birth date is unknown + - Age is recorded as mentioned on the source + - Combined with source document date, a birth date range can be derived - + + =========================================================================== + FORMAT RULES + =========================================================================== - + + **Default unit**: Years (unless otherwise specified) + - "4" → interpreted as 4 years old + - "4 months" → interpreted as 4 months old + - "4 weeks" → interpreted as 4 weeks old - + + **Preferred format**: Numerical ages + - "4" (preferred) + - "four" (acceptable but less precise for computation) - + + **Approximate ages**: + - "ca. 30" or "about 30" (approximate) + - "30-35" (range) + - "adult" or "child" (categorical) - + + =========================================================================== + BIRTH DATE DERIVATION + =========================================================================== - + + When age is known and source date is known, birth date range can be derived: - + + **Example**: + - Source document date: 1850-06-15 + - Age mentioned: "35" + - Derived birth date range: 1814-06-16 to 1815-06-15 - + + This derivation happens during PersonReconstruction, not in the + PersonObservation (which just records what the source says). - + + =========================================================================== + EXAMPLES + =========================================================================== - + + Simple numeric age: + ```yaml + age: "35" + ``` - + + Age with unit: + ```yaml + age: "6 months" + ``` - + + Approximate age: + ```yaml + age: "ca. 40" + ``` - + + Age range: + ```yaml + age: "25-30" + ``` - + + Categorical age: + ```yaml + age: "infant" + ``` - + + =========================================================================== + RELATIONSHIP TO birth_date SLOT + =========================================================================== - + + - If birth_date is known, use birth_date (more precise) + - If only age is known from source, use age slot + - Do NOT use both for the same observation (redundant) + - Age + source date → derived birth_date in PersonReconstruction - + + =========================================================================== + ONTOLOGY MAPPINGS + =========================================================================== - + + - PiCo: pico:hasAge (primary) + - FOAF: foaf:age (simple age property) - + + ' range: string required: false exact_mappings: - - pico:hasAge + - pico:hasAge close_mappings: - - foaf:age + - foaf:age + - schema:age comments: - - "Only use when birth_date is unknown" - - "Default unit is years unless specified" - - "Numerical ages preferred over text" - - "Combined with source date to derive birth date range" + - Only use when birth_date is unknown + - Default unit is years unless specified + - Numerical ages preferred over text + - Combined with source date to derive birth date range diff --git a/schemas/20251121/linkml/modules/slots/agent_name.yaml b/schemas/20251121/linkml/modules/slots/agent_name.yaml index 4f4c8584c6..eeef1e0a8b 100644 --- a/schemas/20251121/linkml/modules/slots/agent_name.yaml +++ b/schemas/20251121/linkml/modules/slots/agent_name.yaml @@ -1,11 +1,13 @@ -# ReconstructionAgent Slot: agent_name -# Name of the reconstruction agent - id: https://nde.nl/ontology/hc/slot/agent_name name: agent_name_slot - slots: agent_name: slot_uri: foaf:name range: string required: true + exact_mappings: + - foaf:name + close_mappings: + - prov:label + broad_mappings: + - rdfs:label diff --git a/schemas/20251121/linkml/modules/slots/agent_type.yaml b/schemas/20251121/linkml/modules/slots/agent_type.yaml index 8fa5900cc3..fa3849789e 100644 --- a/schemas/20251121/linkml/modules/slots/agent_type.yaml +++ b/schemas/20251121/linkml/modules/slots/agent_type.yaml @@ -1,16 +1,13 @@ -# ReconstructionAgent Slot: agent_type -# Type of reconstruction agent - id: https://nde.nl/ontology/hc/slot/agent_type name: agent_type_slot - imports: - - ../enums/AgentTypeEnum - +- ../enums/AgentTypeEnum slots: agent_type: slot_uri: prov:type range: AgentTypeEnum - description: "Type of agent performing the reconstruction" + description: Type of agent performing the reconstruction exact_mappings: - - rdf:type + - rdf:type + broad_mappings: + - dcterms:type diff --git a/schemas/20251121/linkml/modules/slots/allocated_by.yaml b/schemas/20251121/linkml/modules/slots/allocated_by.yaml index 59600f8523..5b0a4f1a91 100644 --- a/schemas/20251121/linkml/modules/slots/allocated_by.yaml +++ b/schemas/20251121/linkml/modules/slots/allocated_by.yaml @@ -1,55 +1,71 @@ -# Slot: allocated_by -# Links an identifier to the agency that allocated it - id: https://nde.nl/ontology/hc/slot/allocated_by name: allocated_by_slot title: Allocated By Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ prov: http://www.w3.org/ns/prov# - default_prefix: hc - imports: - - linkml:types - - ../metadata - - ../classes/AllocationAgency - +- linkml:types +- ../metadata +- ../classes/AllocationAgency slots: allocated_by: slot_uri: prov:wasAttributedTo - description: | - The allocation agency that assigned this identifier. - + description: 'The allocation agency that assigned this identifier. + + Tracks which agency allocated a specific identifier, which may differ - from the standard's global registration authority. - + + from the standard''s global registration authority. + + **Provenance:** - + + Uses prov:wasAttributedTo to indicate the agent responsible for + creating/assigning this identifier. - + + **ISIL Example:** - + + For Dutch institutions, different agencies allocate ISIL codes: + - Public library "NL-AmOBA" → allocated_by: Koninklijke Bibliotheek + - University library "NL-AmUvA" → allocated_by: OCLC + - Archive "NL-AsdSAA" → allocated_by: Nationaal Archief - + + **ISNI Example:** - + + - German author ISNI → allocated_by: Deutsche Nationalbibliothek + - Dutch author ISNI → allocated_by: Koninklijke Bibliotheek - + + **Usage:** - + + Allows tracking: + - Which agency is responsible for this identifier + - Contact information for corrections/updates + - Allocation policy that governed assignment + + ' range: AllocationAgency required: false inlined: false + close_mappings: + - prov:wasAttributedTo + broad_mappings: + - prov:wasAttributedTo diff --git a/schemas/20251121/linkml/modules/slots/allocates.yaml b/schemas/20251121/linkml/modules/slots/allocates.yaml index 5f22f2952d..3387abcc77 100644 --- a/schemas/20251121/linkml/modules/slots/allocates.yaml +++ b/schemas/20251121/linkml/modules/slots/allocates.yaml @@ -1,57 +1,29 @@ -# Slot: allocates -# Inverse of allocated_by -# Links AllocationAgency to identifiers it has allocated - id: https://nde.nl/ontology/hc/slot/allocates name: allocates title: Allocates - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: allocates: slot_uri: prov:contributed - description: | - Identifiers that this allocation agency has assigned. - - **PROV-O Alignment**: - - Uses a custom extension of PROV-O to track allocation relationships. - - **INVERSE PROPERTY**: - - **Inverse**: `allocated_by` (prov:wasAttributedTo) - - Pattern: If Identifier allocated_by Agency, then Agency allocates Identifier - - **Example**: - ```yaml - AllocationAgency: - name: "Koninklijke Bibliotheek" - abbreviation: "KB" - allocates: - - "https://nde.nl/ontology/hc/identifier/isil/nl-amoba" - - "https://nde.nl/ontology/hc/identifier/isil/nl-hagk" - ``` - - **Usage**: - Allows tracking: - - All identifiers assigned by a specific agency - - Volume of allocations per agency - - Allocation patterns by geography or domain - - **Navigation**: - - From agency: Find all allocated identifiers (allocates) - - From identifier: Find allocating agency (allocated_by) + description: "Identifiers that this allocation agency has assigned.\n\n**PROV-O Alignment**:\n\nUses a custom extension\ + \ of PROV-O to track allocation relationships.\n\n**INVERSE PROPERTY**:\n- **Inverse**: `allocated_by` (prov:wasAttributedTo)\n\ + - Pattern: If Identifier allocated_by Agency, then Agency allocates Identifier\n\n**Example**:\n```yaml\nAllocationAgency:\n\ + \ name: \"Koninklijke Bibliotheek\"\n abbreviation: \"KB\"\n allocates:\n - \"https://nde.nl/ontology/hc/identifier/isil/nl-amoba\"\ + \n - \"https://nde.nl/ontology/hc/identifier/isil/nl-hagk\"\n```\n\n**Usage**:\nAllows tracking:\n- All identifiers\ + \ assigned by a specific agency\n- Volume of allocations per agency\n- Allocation patterns by geography or domain\n\n\ + **Navigation**:\n- From agency: Find all allocated identifiers (allocates)\n- From identifier: Find allocating agency\ + \ (allocated_by)\n" range: CustodianIdentifier multivalued: true - comments: - - "Inverse of allocated_by (prov:wasAttributedTo)" - - "Links agency to all identifiers it has assigned" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of allocated_by (prov:wasAttributedTo) + - Links agency to all identifiers it has assigned + - Creates owl:inverseOf axiom in RDF output + close_mappings: + - prov:generated diff --git a/schemas/20251121/linkml/modules/slots/allocation_date.yaml b/schemas/20251121/linkml/modules/slots/allocation_date.yaml index dbf8e1100c..69231bbf04 100644 --- a/schemas/20251121/linkml/modules/slots/allocation_date.yaml +++ b/schemas/20251121/linkml/modules/slots/allocation_date.yaml @@ -1,46 +1,60 @@ -# Slot: allocation_date -# Date when an identifier was allocated - id: https://nde.nl/ontology/hc/slot/allocation_date name: allocation_date_slot title: Allocation Date Slot - prefixes: linkml: https://w3id.org/linkml/ schema: http://schema.org/ prov: http://www.w3.org/ns/prov# - imports: - - linkml:types - +- linkml:types slots: allocation_date: slot_uri: prov:generatedAtTime - description: | - Date when this identifier was allocated/assigned. - + description: 'Date when this identifier was allocated/assigned. + + Records when the allocation agency assigned this identifier to the entity. - + + **Provenance:** - + + Uses prov:generatedAtTime from PROV-O to indicate when the identifier + was created/assigned. - + + **Usage:** - + + Important for: + - Tracking identifier age + - Historical research + - Disambiguation (if same code reused after deactivation) + - Compliance with data retention policies - + + **Format:** - + + ISO 8601 datetime (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ) - + + **Examples:** - + + - ISIL "NL-AmRMA" allocated on "2005-03-15" + - ISNI assigned on "2013-06-01T00:00:00Z" + + ' range: datetime required: false + close_mappings: + - dcterms:date + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/also_identifies_name.yaml b/schemas/20251121/linkml/modules/slots/also_identifies_name.yaml index bc8cc44e03..12bc871d8f 100644 --- a/schemas/20251121/linkml/modules/slots/also_identifies_name.yaml +++ b/schemas/20251121/linkml/modules/slots/also_identifies_name.yaml @@ -1,63 +1,29 @@ -# Slot: also_identifies_name -# Links an identifier that also identifies a name authority record - id: https://nde.nl/ontology/hc/slot/also_identifies_name name: also_identifies_name_slot title: Also Identifies Name Slot - prefixes: linkml: https://w3id.org/linkml/ schema: http://schema.org/ crm: http://www.cidoc-crm.org/cidoc-crm/ - imports: - - linkml:types - +- linkml:types slots: also_identifies_name: slot_uri: crm:P1_is_identified_by - description: | - Links an identifier that also identifies a name authority record (CustodianName). - - Some identifiers serve dual purposes: - 1. Identifying the organization/person (CustodianIdentifier) - 2. Identifying the authoritative name record (CustodianName) - - **Key Example: ISNI** - - ISNI (International Standard Name Identifier) is defined as a name identifier: - - ISO 27729 defines it for "public identities of parties" - - "Public identity" = the name by which an entity is known - - Therefore, an ISNI attached to a Custodian ALSO identifies: - - The Custodian entity itself (as CustodianIdentifier) - - The authoritative name record (as CustodianName identifier) - - **Usage:** - - ```yaml - # ISNI example - - identifier_scheme: ISNI - identifier_value: "0000 0001 2146 5765" - identifies_custodian: rijksmuseum - also_identifies_name: rijksmuseum-official-name # Links to CustodianName - ``` - - **Other Examples:** - - - **VIAF**: Also identifies name authority records (by definition) - - **GND**: German authority file for names - - **LCNAF**: Library of Congress Name Authority File - - **NOT Applicable:** - - - ISIL: Identifies organization only, not name records - - KvK: Identifies legal entity only - - Wikidata: Identifies entity (could be either, context-dependent) - - **Ontology Alignment:** - - Uses CIDOC-CRM P1_is_identified_by (inverse) to link identifier to what it identifies. + description: "Links an identifier that also identifies a name authority record (CustodianName).\n\nSome identifiers serve\ + \ dual purposes:\n1. Identifying the organization/person (CustodianIdentifier)\n2. Identifying the authoritative name\ + \ record (CustodianName)\n\n**Key Example: ISNI**\n\nISNI (International Standard Name Identifier) is defined as a name\ + \ identifier:\n- ISO 27729 defines it for \"public identities of parties\"\n- \"Public identity\" = the name by which\ + \ an entity is known\n\nTherefore, an ISNI attached to a Custodian ALSO identifies:\n- The Custodian entity itself (as\ + \ CustodianIdentifier)\n- The authoritative name record (as CustodianName identifier)\n\n**Usage:**\n\n```yaml\n# ISNI\ + \ example\n- identifier_scheme: ISNI\n identifier_value: \"0000 0001 2146 5765\"\n identifies_custodian: rijksmuseum\n\ + \ also_identifies_name: rijksmuseum-official-name # Links to CustodianName\n```\n\n**Other Examples:**\n\n- **VIAF**:\ + \ Also identifies name authority records (by definition)\n- **GND**: German authority file for names\n- **LCNAF**: Library\ + \ of Congress Name Authority File\n\n**NOT Applicable:**\n\n- ISIL: Identifies organization only, not name records\n\ + - KvK: Identifies legal entity only\n- Wikidata: Identifies entity (could be either, context-dependent)\n\n**Ontology\ + \ Alignment:**\n\nUses CIDOC-CRM P1_is_identified_by (inverse) to link identifier to what it identifies.\n" range: CustodianName required: false inlined: false + broad_mappings: + - rdfs:label diff --git a/schemas/20251121/linkml/modules/slots/alternative_names.yaml b/schemas/20251121/linkml/modules/slots/alternative_names.yaml index 4b7c8375be..a5c4c3939b 100644 --- a/schemas/20251121/linkml/modules/slots/alternative_names.yaml +++ b/schemas/20251121/linkml/modules/slots/alternative_names.yaml @@ -1,29 +1,37 @@ -# CustodianName Slot: alternative_names -# Alternative names and label variants (skos:altLabel) - id: https://nde.nl/ontology/hc/slot/alternative_names name: alternative_names_slot - imports: - - ../classes/Appellation - +- ../classes/Appellation slots: alternative_names: slot_uri: skos:altLabel range: CustodianAppellation multivalued: true inlined_as_list: true - description: | - Alternative names and label variants for a custodian name. - + description: 'Alternative names and label variants for a custodian name. + + SKOS: altLabel for alternative lexical labels (trading names, colloquial names, abbreviations). + W3C Org Ontology: Recommended pattern for organizational name variants. - + + Examples: + - Abbreviations: "BnF" for "Bibliothèque nationale de France" + - Colloquial names: "Rijks" for "Rijksmuseum" + - Translations: "National Library of France" + - Historical spelling variants - + + These appellations are NOT the preferred/canonical name but are recognized + variants that people use to refer to the same custodian. + + ' + exact_mappings: + - schema:alternateName + - skos:altLabel diff --git a/schemas/20251121/linkml/modules/slots/alternative_observed_names.yaml b/schemas/20251121/linkml/modules/slots/alternative_observed_names.yaml index 9826c3cb80..915d03f32b 100644 --- a/schemas/20251121/linkml/modules/slots/alternative_observed_names.yaml +++ b/schemas/20251121/linkml/modules/slots/alternative_observed_names.yaml @@ -1,12 +1,12 @@ -# CustodianObservation Slot: alternative_observed_names -# Alternative names observed in sources - id: https://nde.nl/ontology/hc/slot/alternative_observed_names name: alternative_observed_names_slot - slots: alternative_observed_names: slot_uri: skos:altLabel range: string multivalued: true - description: "Alternative names, abbreviations, translations observed in sources" + description: Alternative names, abbreviations, translations observed in sources + exact_mappings: + - skos:altLabel + close_mappings: + - schema:alternateName diff --git a/schemas/20251121/linkml/modules/slots/altitude.yaml b/schemas/20251121/linkml/modules/slots/altitude.yaml index 4b36ac28eb..7880de8d6d 100644 --- a/schemas/20251121/linkml/modules/slots/altitude.yaml +++ b/schemas/20251121/linkml/modules/slots/altitude.yaml @@ -1,24 +1,21 @@ -# Global Slot: altitude -# Altitude above sea level in meters - id: https://nde.nl/ontology/hc/slot/altitude name: altitude_slot title: Altitude Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ wgs84: http://www.w3.org/2003/01/geo/wgs84_pos# - imports: - - linkml:types - +- linkml:types slots: altitude: slot_uri: wgs84:alt range: float - description: | - Altitude above sea level (meters). + description: 'Altitude above sea level (meters). + Optional - use for elevated or underground locations. + + ' exact_mappings: - - wgs84:alt + - wgs84:alt + - schema:elevation diff --git a/schemas/20251121/linkml/modules/slots/api_endpoint.yaml b/schemas/20251121/linkml/modules/slots/api_endpoint.yaml index ae43e5df1e..13dcd34593 100644 --- a/schemas/20251121/linkml/modules/slots/api_endpoint.yaml +++ b/schemas/20251121/linkml/modules/slots/api_endpoint.yaml @@ -1,20 +1,22 @@ -# Global Slot: api_endpoint -# URL of API endpoint for programmatic access - id: https://nde.nl/ontology/hc/slot/api_endpoint name: api_endpoint_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcat: http://www.w3.org/ns/dcat# - default_prefix: hc - slots: api_endpoint: slot_uri: dcat:endpointURL - description: | - API endpoint URL for programmatic access. + description: 'API endpoint URL for programmatic access. + DCAT: endpointURL for API base address. + + ' range: uri + close_mappings: + - schema:url + related_mappings: + - dcat:endpointURL + broad_mappings: + - dcat:endpointURL diff --git a/schemas/20251121/linkml/modules/slots/appellation_language.yaml b/schemas/20251121/linkml/modules/slots/appellation_language.yaml index c909e0bcec..9003d4ed60 100644 --- a/schemas/20251121/linkml/modules/slots/appellation_language.yaml +++ b/schemas/20251121/linkml/modules/slots/appellation_language.yaml @@ -1,12 +1,12 @@ -# Appellation Slot: appellation_language -# Language of the appellation - id: https://nde.nl/ontology/hc/slot/appellation_language name: appellation_language_slot - slots: appellation_language: slot_uri: dcterms:language range: string - pattern: "^[a-z]{2}$" - description: "ISO 639-1 language code" + pattern: ^[a-z]{2}$ + description: ISO 639-1 language code + exact_mappings: + - dcterms:language + broad_mappings: + - dcterms:language diff --git a/schemas/20251121/linkml/modules/slots/appellation_type.yaml b/schemas/20251121/linkml/modules/slots/appellation_type.yaml index 69d2540955..bbea4bcc61 100644 --- a/schemas/20251121/linkml/modules/slots/appellation_type.yaml +++ b/schemas/20251121/linkml/modules/slots/appellation_type.yaml @@ -1,14 +1,13 @@ -# Appellation Slot: appellation_type -# Type of name - id: https://nde.nl/ontology/hc/slot/appellation_type name: appellation_type_slot - imports: - - ../enums/AppellationTypeEnum - +- ../enums/AppellationTypeEnum slots: appellation_type: slot_uri: crm:P2_has_type range: AppellationTypeEnum - description: "Type of name (official, vernacular, historical, translation)" + description: Type of name (official, vernacular, historical, translation) + close_mappings: + - dcterms:type + broad_mappings: + - dcterms:type diff --git a/schemas/20251121/linkml/modules/slots/appellation_value.yaml b/schemas/20251121/linkml/modules/slots/appellation_value.yaml index ed862338ab..f8aefd40fa 100644 --- a/schemas/20251121/linkml/modules/slots/appellation_value.yaml +++ b/schemas/20251121/linkml/modules/slots/appellation_value.yaml @@ -1,11 +1,13 @@ -# Appellation Slot: appellation_value -# The actual name/label string - id: https://nde.nl/ontology/hc/slot/appellation_value name: appellation_value_slot - slots: appellation_value: slot_uri: rdf:value range: string - description: "The actual name/label string" + description: The actual name/label string + exact_mappings: + - rdf:value + close_mappings: + - skos:prefLabel + broad_mappings: + - rdf:value diff --git a/schemas/20251121/linkml/modules/slots/appellations.yaml b/schemas/20251121/linkml/modules/slots/appellations.yaml index 9cf3c37027..1c1353b134 100644 --- a/schemas/20251121/linkml/modules/slots/appellations.yaml +++ b/schemas/20251121/linkml/modules/slots/appellations.yaml @@ -1,41 +1,21 @@ -# DEPRECATED - DO NOT USE -# This slot has been replaced by alternative_names and variant_of_name -# -# REASON FOR DEPRECATION: -# The old architecture incorrectly connected CustodianAppellation to Custodian using crm:P1_is_identified_by. -# This suggested appellations "identify" the hub, but only CustodianIdentifier should identify the hub. -# -# NEW ARCHITECTURE (as of 2025-11-22): -# - CustodianName --[skos:altLabel]--> CustodianAppellation (name variants) -# - CustodianAppellation --[skos:broader]--> CustodianName (inverse) -# -# MIGRATION PATH: -# Old: Custodian.appellations (list of CustodianAppellation) -# New: CustodianName.alternative_names (list of CustodianAppellation) -# -# FILES TO USE INSTEAD: -# - modules/slots/alternative_names.yaml (CustodianName → CustodianAppellation) -# - modules/slots/variant_of_name.yaml (CustodianAppellation → CustodianName, inverse) -# -# SEE ALSO: -# - APPELLATION_IDENTIFIER_REFACTORING_20251122.md (documentation of this change) - id: https://nde.nl/ontology/hc/slot/appellations name: appellations_slot_deprecated - -# DO NOT IMPORT THIS FILE -# It is kept for historical reference only - slots: appellations: slot_uri: skos:altLabel - deprecated: "Replaced by alternative_names (CustodianName) and variant_of_name (CustodianAppellation)" + deprecated: Replaced by alternative_names (CustodianName) and variant_of_name (CustodianAppellation) deprecated_element_has_exact_replacement: alternative_names range: CustodianAppellation multivalued: true - description: | - DEPRECATED: Use CustodianName.alternative_names instead. - + description: 'DEPRECATED: Use CustodianName.alternative_names instead. + + This slot incorrectly connected Custodian to CustodianAppellation using crm:P1_is_identified_by, + which suggested appellations identify the hub. The correct architecture uses skos:altLabel to + connect CustodianName to CustodianAppellation (name variants, not identifiers). + + ' + close_mappings: + - skos:altLabel diff --git a/schemas/20251121/linkml/modules/slots/approval_date.yaml b/schemas/20251121/linkml/modules/slots/approval_date.yaml index 0893037abe..0ab17d1a8a 100644 --- a/schemas/20251121/linkml/modules/slots/approval_date.yaml +++ b/schemas/20251121/linkml/modules/slots/approval_date.yaml @@ -2,19 +2,19 @@ id: https://nde.nl/ontology/hc/slot/approval_date name: approval_date_slot title: Approval Date Slot description: Shared slot for approval dates across heritage custodian entities - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: approval_date: description: Date of formal approval (e.g., budget approval, loan approval) range: date slot_uri: schema:dateModified + close_mappings: + - dcterms:dateAccepted + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/archive_branches.yaml b/schemas/20251121/linkml/modules/slots/archive_branches.yaml new file mode 100644 index 0000000000..f593c839cc --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/archive_branches.yaml @@ -0,0 +1,32 @@ +# Slot: archive_branches +# Branch locations or sub-archives of an archive organization + +id: https://nde.nl/ontology/hc/slot/archive_branches +name: archive_branches_slot + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + org: http://www.w3.org/ns/org# + schema: http://schema.org/ + +imports: + - linkml:types + +default_range: string + +slots: + archive_branches: + slot_uri: org:hasSubOrganization + description: | + Branch locations or sub-archives that are part of this archive organization. + + ORG: hasSubOrganization - "Represents hierarchical containment of Organizations." + + Used to model archive systems with multiple locations or regional branches. + range: string + multivalued: true + close_mappings: + - org:hasSubOrganization + related_mappings: + - schema:subOrganization diff --git a/schemas/20251121/linkml/modules/slots/archive_department_of.yaml b/schemas/20251121/linkml/modules/slots/archive_department_of.yaml new file mode 100644 index 0000000000..607205a6b6 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/archive_department_of.yaml @@ -0,0 +1,32 @@ +# Slot: archive_department_of +# Parent organization that this archive is a department of + +id: https://nde.nl/ontology/hc/slot/archive_department_of +name: archive_department_of_slot + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + org: http://www.w3.org/ns/org# + schema: http://schema.org/ + +imports: + - linkml:types + +default_range: string + +slots: + archive_department_of: + slot_uri: org:subOrganizationOf + description: | + The parent organization that this archive is a department or unit of. + + ORG: subOrganizationOf - "Represents hierarchical containment of Organizations." + + Used when an archive operates as a department within a larger institution + (e.g., university archive as department of a university). + range: string + close_mappings: + - org:subOrganizationOf + related_mappings: + - schema:parentOrganization diff --git a/schemas/20251121/linkml/modules/slots/archived_at.yaml b/schemas/20251121/linkml/modules/slots/archived_at.yaml index 780f754f2f..687342de88 100644 --- a/schemas/20251121/linkml/modules/slots/archived_at.yaml +++ b/schemas/20251121/linkml/modules/slots/archived_at.yaml @@ -1,19 +1,16 @@ -# Global Slot: archived_at -# URL to archived version of a resource - id: https://nde.nl/ontology/hc/slot/archived_at name: archived_at_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - slots: archived_at: slot_uri: schema:archivedAt - description: | - URL to archived version of a resource (e.g., Wayback Machine snapshot). + description: 'URL to archived version of a resource (e.g., Wayback Machine snapshot). + + ' range: uri + broad_mappings: + - prov:atTime diff --git a/schemas/20251121/linkml/modules/slots/arrangement.yaml b/schemas/20251121/linkml/modules/slots/arrangement.yaml new file mode 100644 index 0000000000..6130e8a458 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/arrangement.yaml @@ -0,0 +1,20 @@ +id: https://nde.nl/ontology/hc/slot/arrangement +name: arrangement +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + arrangement: + slot_uri: rico:hasOrHadAllMembersWithRecordState + description: "Intellectual arrangement system used for the collection.\n\nDescribes how materials are organized (chronological,\ + \ \nalphabetical, by subject, original order, etc.).\n" + range: string + required: false + examples: + - value: Chronological by date of creation + description: Time-based arrangement + - value: Original order maintained + description: Provenance-based arrangement + related_mappings: + - rico:hasOrganicProvenance diff --git a/schemas/20251121/linkml/modules/slots/arrangement_system.yaml b/schemas/20251121/linkml/modules/slots/arrangement_system.yaml index ada728e38c..aca2698a97 100644 --- a/schemas/20251121/linkml/modules/slots/arrangement_system.yaml +++ b/schemas/20251121/linkml/modules/slots/arrangement_system.yaml @@ -1,17 +1,21 @@ -# Custodian Slot: arrangement_system -# Intellectual arrangement or classification system - id: https://nde.nl/ontology/hc/slot/arrangement_system name: arrangement_system_slot - slots: arrangement_system: slot_uri: rico:hasRecordSetType range: string - description: | - Intellectual arrangement or classification system. + description: 'Intellectual arrangement or classification system. + Examples: + - "Archival fonds organized by provenance" (RiC-O) + - "Dewey Decimal Classification" (libraries) + - "Thematic galleries" (museums) + - "Chronological arrangement" + + ' + related_mappings: + - rico:hasRecordSetType diff --git a/schemas/20251121/linkml/modules/slots/authentication_required.yaml b/schemas/20251121/linkml/modules/slots/authentication_required.yaml index 10ff7502fb..669f7af823 100644 --- a/schemas/20251121/linkml/modules/slots/authentication_required.yaml +++ b/schemas/20251121/linkml/modules/slots/authentication_required.yaml @@ -1,28 +1,30 @@ -# Authentication Required Slot - Shared slot for API authentication status -# Used by DataServiceEndpoint and its subclasses - id: https://nde.nl/ontology/hc/slot/authentication_required name: authentication_required_slot title: Authentication Required Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types slots: authentication_required: slot_uri: schema:authenticationType - description: | - Whether authentication is required to access this endpoint. - + description: 'Whether authentication is required to access this endpoint. + + Values: + - true: API key, OAuth, or other authentication required + - false: Public/anonymous access allowed + - null: Unknown - + + If true, see authentication_method for details. + + ' range: boolean + related_mappings: + - schema:authenticationType diff --git a/schemas/20251121/linkml/modules/slots/auxiliary_places.yaml b/schemas/20251121/linkml/modules/slots/auxiliary_places.yaml index 18f692d56e..4d3f4719e8 100644 --- a/schemas/20251121/linkml/modules/slots/auxiliary_places.yaml +++ b/schemas/20251121/linkml/modules/slots/auxiliary_places.yaml @@ -1,98 +1,46 @@ -# Auxiliary Places Slot -# Links CustodianPlace to subordinate/secondary physical locations -# W3C Org: org:hasSite pattern for organizational sites - id: https://nde.nl/ontology/hc/slot/auxiliary_places name: auxiliary_places - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types slots: auxiliary_places: slot_uri: org:hasSite range: AuxiliaryPlace multivalued: true inlined_as_list: true - description: | - Subordinate or secondary physical locations associated with this CustodianPlace. - - **W3C ORG Alignment**: - - `org:hasSite` - "Indicates a site at which the Organization has some presence - even if only indirect (e.g. virtual office or a professional service - which is acting as the registered address for a company)." - - **Hierarchical Pattern**: - - CustodianPlace (main headquarters) - └── auxiliary_places → AuxiliaryPlace[] (subordinate sites) - └── hosts_branch → OrganizationBranch (formal branch at site) - - This mirrors the CustodianName → CustodianAppellation pattern: - - CustodianName is preferred name (skos:prefLabel) - - CustodianAppellation is alternative name (skos:altLabel) - - CustodianPlace is main place (org:Site - primary) - - AuxiliaryPlace is subordinate place (org:Site - secondary) - - **Use Cases**: - - 1. **Off-site Storage**: - - Museum depot in another city - - Archive annex for overflow documents - - 2. **Branch Locations**: - - Regional library branches - - Satellite museum galleries - - 3. **Specialized Facilities**: - - Conservation lab in separate building - - Digitization center at different address - - 4. **Temporary Locations**: - - Exhibition pavilions - - Storage during renovation - - **Example - Rijksmuseum**: - ```yaml - CustodianPlace: - place_name: "Rijksmuseum" - place_specificity: BUILDING - auxiliary_places: - - place_name: "Depot Amersfoort" - auxiliary_place_type: STORAGE_FACILITY - - place_name: "Rijksmuseum Schiphol" - auxiliary_place_type: BRANCH_OFFICE - hosts_branch: - branch_name: "Schiphol Exhibition Team" - ``` - - **Temporal Considerations**: - - Auxiliary places have independent lifecycles: - - Storage facility opened 1995, closed 2010 - - Branch office valid_from 2000, still active - - Each AuxiliaryPlace tracks its own valid_from/valid_to dates. - - **Query Pattern**: - - "Find all locations of Rijksmuseum": - - Main: CustodianPlace.place_name - - Secondary: CustodianPlace.auxiliary_places[*].place_name + description: "Subordinate or secondary physical locations associated with this CustodianPlace.\n\n**W3C ORG Alignment**:\n\ + \n`org:hasSite` - \"Indicates a site at which the Organization has some presence \neven if only indirect (e.g. virtual\ + \ office or a professional service \nwhich is acting as the registered address for a company).\"\n\n**Hierarchical Pattern**:\n\ + \nCustodianPlace (main headquarters)\n └── auxiliary_places → AuxiliaryPlace[] (subordinate sites)\n └── hosts_branch\ + \ → OrganizationBranch (formal branch at site)\n\nThis mirrors the CustodianName → CustodianAppellation pattern:\n-\ + \ CustodianName is preferred name (skos:prefLabel)\n- CustodianAppellation is alternative name (skos:altLabel)\n- CustodianPlace\ + \ is main place (org:Site - primary)\n- AuxiliaryPlace is subordinate place (org:Site - secondary)\n\n**Use Cases**:\n\ + \n1. **Off-site Storage**:\n - Museum depot in another city\n - Archive annex for overflow documents\n\n2. **Branch\ + \ Locations**:\n - Regional library branches\n - Satellite museum galleries\n\n3. **Specialized Facilities**:\n\ + \ - Conservation lab in separate building\n - Digitization center at different address\n\n4. **Temporary Locations**:\n\ + \ - Exhibition pavilions\n - Storage during renovation\n\n**Example - Rijksmuseum**:\n```yaml\nCustodianPlace:\n\ + \ place_name: \"Rijksmuseum\"\n place_specificity: BUILDING\n auxiliary_places:\n - place_name: \"Depot Amersfoort\"\ + \n auxiliary_place_type: STORAGE_FACILITY\n - place_name: \"Rijksmuseum Schiphol\"\n auxiliary_place_type:\ + \ BRANCH_OFFICE\n hosts_branch:\n branch_name: \"Schiphol Exhibition Team\"\n```\n\n**Temporal Considerations**:\n\ + \nAuxiliary places have independent lifecycles:\n- Storage facility opened 1995, closed 2010\n- Branch office valid_from\ + \ 2000, still active\n\nEach AuxiliaryPlace tracks its own valid_from/valid_to dates.\n\n**Query Pattern**:\n\n\"Find\ + \ all locations of Rijksmuseum\":\n- Main: CustodianPlace.place_name\n- Secondary: CustodianPlace.auxiliary_places[*].place_name\n" examples: - - value: - - place_name: "Depot Amersfoort" - auxiliary_place_type: STORAGE_FACILITY - street_address: "Euterpelaan 25" - city: "Amersfoort" - - place_name: "Rijksmuseum Schiphol" - auxiliary_place_type: BRANCH_OFFICE - street_address: "Schiphol Airport, Lounge 2" - description: "Rijksmuseum subordinate locations" + - value: + - place_name: Depot Amersfoort + auxiliary_place_type: STORAGE_FACILITY + street_address: Euterpelaan 25 + city: Amersfoort + - place_name: Rijksmuseum Schiphol + auxiliary_place_type: BRANCH_OFFICE + street_address: Schiphol Airport, Lounge 2 + description: Rijksmuseum subordinate locations + close_mappings: + - org:hasSite + related_mappings: + - schema:location diff --git a/schemas/20251121/linkml/modules/slots/auxiliary_platforms.yaml b/schemas/20251121/linkml/modules/slots/auxiliary_platforms.yaml index daa10cd31e..0ee0750ff1 100644 --- a/schemas/20251121/linkml/modules/slots/auxiliary_platforms.yaml +++ b/schemas/20251121/linkml/modules/slots/auxiliary_platforms.yaml @@ -1,110 +1,51 @@ -# Auxiliary Platforms Slot -# Links DigitalPlatform to subordinate/project-based digital properties -# DCAT: dcterms:hasPart pattern for data catalogs - id: https://nde.nl/ontology/hc/slot/auxiliary_platforms name: auxiliary_platforms - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcat: http://www.w3.org/ns/dcat# dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types slots: auxiliary_platforms: slot_uri: dcterms:hasPart range: AuxiliaryDigitalPlatform multivalued: true inlined_as_list: true - description: | - Subordinate or project-based digital platforms associated with this DigitalPlatform. - - **DCAT Alignment**: - - `dcterms:hasPart` - "A related resource that is included either physically - or logically in the described resource." - - Used in DCAT for catalog → sub-catalog relationships. - - **Hierarchical Pattern**: - - DigitalPlatform (main digital entry point) - └── auxiliary_platforms → AuxiliaryDigitalPlatform[] (project sites) - - This mirrors the CustodianName → CustodianAppellation pattern: - - CustodianName is preferred label (skos:prefLabel) - - CustodianAppellation is alternative name (skos:altLabel) - - DigitalPlatform is main digital entry (foaf:homepage) - - AuxiliaryDigitalPlatform is subordinate platform (dcterms:hasPart) - - **Use Cases**: - - 1. **Project Websites**: - - Research project portals - - Grant-funded digitization sites - - 2. **Exhibition Microsites**: - - Temporary exhibition with dedicated website - - Virtual tours for specific collections - - 3. **APIs and Tools**: - - Developer APIs (separate from main website) - - Collection browser tools - - Mobile applications - - 4. **Legacy/Archived Platforms**: - - Previous website versions - - Deprecated systems still accessible - - 5. **Educational Portals**: - - Teacher resources - - Student learning modules - - **Example - Rijksmuseum**: - ```yaml - DigitalPlatform: - platform_name: "Rijksmuseum Website" - homepage_web_address: "https://www.rijksmuseum.nl/" - auxiliary_platforms: - - platform_name: "Rijksstudio" - auxiliary_platform_type: PROJECT_WEBSITE - platform_url: "https://www.rijksmuseum.nl/nl/rijksstudio" - - platform_name: "Rijksmuseum Data API" - auxiliary_platform_type: API_ENDPOINT - platform_url: "https://data.rijksmuseum.nl/" - - platform_name: "Night Watch Experience" - auxiliary_platform_type: EXHIBITION_MICROSITE - platform_url: "https://www.rijksmuseum.nl/en/stories/operation-night-watch" - ``` - - **Temporal Considerations**: - - Auxiliary platforms often have finite lifespans: - - Exhibition microsite: opens/closes with exhibition - - Project portal: funded period only - - Legacy platforms: archived but not deleted - - Each AuxiliaryDigitalPlatform tracks: - - valid_from/valid_to: exact dates - - archival_status: ACTIVE/DEPRECATED/ARCHIVED/OFFLINE - - archived_at: Wayback Machine URL if archived - - **Query Pattern**: - - "Find all digital properties of Rijksmuseum": - - Main: DigitalPlatform.homepage_web_address - - Secondary: DigitalPlatform.auxiliary_platforms[*].platform_url + description: "Subordinate or project-based digital platforms associated with this DigitalPlatform.\n\n**DCAT Alignment**:\n\ + \n`dcterms:hasPart` - \"A related resource that is included either physically \nor logically in the described resource.\"\ + \n\nUsed in DCAT for catalog → sub-catalog relationships.\n\n**Hierarchical Pattern**:\n\nDigitalPlatform (main digital\ + \ entry point)\n └── auxiliary_platforms → AuxiliaryDigitalPlatform[] (project sites)\n\nThis mirrors the CustodianName\ + \ → CustodianAppellation pattern:\n- CustodianName is preferred label (skos:prefLabel)\n- CustodianAppellation is alternative\ + \ name (skos:altLabel)\n- DigitalPlatform is main digital entry (foaf:homepage)\n- AuxiliaryDigitalPlatform is subordinate\ + \ platform (dcterms:hasPart)\n\n**Use Cases**:\n\n1. **Project Websites**:\n - Research project portals\n - Grant-funded\ + \ digitization sites\n\n2. **Exhibition Microsites**:\n - Temporary exhibition with dedicated website\n - Virtual\ + \ tours for specific collections\n\n3. **APIs and Tools**:\n - Developer APIs (separate from main website)\n - Collection\ + \ browser tools\n - Mobile applications\n\n4. **Legacy/Archived Platforms**:\n - Previous website versions\n -\ + \ Deprecated systems still accessible\n\n5. **Educational Portals**:\n - Teacher resources\n - Student learning\ + \ modules\n\n**Example - Rijksmuseum**:\n```yaml\nDigitalPlatform:\n platform_name: \"Rijksmuseum Website\"\n homepage_web_address:\ + \ \"https://www.rijksmuseum.nl/\"\n auxiliary_platforms:\n - platform_name: \"Rijksstudio\"\n auxiliary_platform_type:\ + \ PROJECT_WEBSITE\n platform_url: \"https://www.rijksmuseum.nl/nl/rijksstudio\"\n - platform_name: \"Rijksmuseum\ + \ Data API\"\n auxiliary_platform_type: API_ENDPOINT\n platform_url: \"https://data.rijksmuseum.nl/\"\n \ + \ - platform_name: \"Night Watch Experience\"\n auxiliary_platform_type: EXHIBITION_MICROSITE\n platform_url:\ + \ \"https://www.rijksmuseum.nl/en/stories/operation-night-watch\"\n```\n\n**Temporal Considerations**:\n\nAuxiliary\ + \ platforms often have finite lifespans:\n- Exhibition microsite: opens/closes with exhibition\n- Project portal: funded\ + \ period only\n- Legacy platforms: archived but not deleted\n\nEach AuxiliaryDigitalPlatform tracks:\n- valid_from/valid_to:\ + \ exact dates\n- archival_status: ACTIVE/DEPRECATED/ARCHIVED/OFFLINE\n- archived_at: Wayback Machine URL if archived\n\ + \n**Query Pattern**:\n\n\"Find all digital properties of Rijksmuseum\":\n- Main: DigitalPlatform.homepage_web_address\n\ + - Secondary: DigitalPlatform.auxiliary_platforms[*].platform_url\n" examples: - - value: - - platform_name: "Rijksstudio" - auxiliary_platform_type: PROJECT_WEBSITE - platform_url: "https://www.rijksmuseum.nl/nl/rijksstudio" - archival_status: "ACTIVE" - - platform_name: "Rijksmuseum Data API" - auxiliary_platform_type: API_ENDPOINT - platform_url: "https://data.rijksmuseum.nl/" - description: "Rijksmuseum subordinate digital platforms" + - value: + - platform_name: Rijksstudio + auxiliary_platform_type: PROJECT_WEBSITE + platform_url: https://www.rijksmuseum.nl/nl/rijksstudio + archival_status: ACTIVE + - platform_name: Rijksmuseum Data API + auxiliary_platform_type: API_ENDPOINT + platform_url: https://data.rijksmuseum.nl/ + description: Rijksmuseum subordinate digital platforms + close_mappings: + - dcterms:hasPart + broad_mappings: + - dcterms:hasPart diff --git a/schemas/20251121/linkml/modules/slots/base_surname.yaml b/schemas/20251121/linkml/modules/slots/base_surname.yaml index db81994dc4..efec0e7fd3 100644 --- a/schemas/20251121/linkml/modules/slots/base_surname.yaml +++ b/schemas/20251121/linkml/modules/slots/base_surname.yaml @@ -1,47 +1,62 @@ id: https://nde.nl/ontology/hc/slot/base_surname name: base_surname title: Base Surname - prefixes: pnv: https://w3id.org/pnv# sdo: https://schema.org/ - imports: - - linkml:types - +- linkml:types slots: base_surname: slot_uri: pnv:baseSurname - description: | - Family name WITHOUT prefixes, used for alphabetical sorting. - + description: 'Family name WITHOUT prefixes, used for alphabetical sorting. + + In Dutch naming conventions, surnames with prefixes (tussenvoegsels) like + "van", "de", "van der", etc. are sorted by the main surname element, + ignoring the prefix. - + + This property captures just the sortable surname component: - + + Examples: + - "de Vries" → base_surname: "Vries" (sorts under V) + - "van den Berg" → base_surname: "Berg" (sorts under B) + - "van der Waals" → base_surname: "Waals" (sorts under W) - - "in 't Veld" → base_surname: "Veld" (sorts under V) - + + - "in ''t Veld" → base_surname: "Veld" (sorts under V) + + Equivalent to BioDes:geslachtsnaam in Dutch heritage standards. - + + IMPORTANT: Belgian Dutch and some international conventions may sort + by the full surname including prefix. In those cases, use the full + surname here or handle sorting differently in your application. - + + For surnames without prefixes, base_surname equals the full surname: + - "Jansen" → base_surname: "Jansen" + - "Bakker" → base_surname: "Bakker" - + + ' range: string exact_mappings: - - pnv:baseSurname + - pnv:baseSurname close_mappings: - - sdo:familyName - - foaf:familyName + - sdo:familyName + - foaf:familyName + - foaf:surname related_mappings: - - foaf:lastName + - foaf:lastName + - schema:familyName diff --git a/schemas/20251121/linkml/modules/slots/begin_of_the_begin.yaml b/schemas/20251121/linkml/modules/slots/begin_of_the_begin.yaml index eac40aa992..e87d47abd5 100644 --- a/schemas/20251121/linkml/modules/slots/begin_of_the_begin.yaml +++ b/schemas/20251121/linkml/modules/slots/begin_of_the_begin.yaml @@ -1,11 +1,13 @@ -# TimeSpan Slot: begin_of_the_begin -# Earliest possible start time - id: https://nde.nl/ontology/hc/slot/begin_of_the_begin name: begin_of_the_begin_slot - slots: begin_of_the_begin: slot_uri: crm:P82a_begin_of_the_begin range: datetime - description: "Earliest possible start time of temporal extent (CIDOC-CRM E52_Time-Span)" + description: Earliest possible start time of temporal extent (CIDOC-CRM E52_Time-Span) + related_mappings: + - prov:startedAtTime + narrow_mappings: + - schema:startDate + broad_mappings: + - dcterms:relation diff --git a/schemas/20251121/linkml/modules/slots/begin_of_the_end.yaml b/schemas/20251121/linkml/modules/slots/begin_of_the_end.yaml index 060de66492..5b0be968fc 100644 --- a/schemas/20251121/linkml/modules/slots/begin_of_the_end.yaml +++ b/schemas/20251121/linkml/modules/slots/begin_of_the_end.yaml @@ -1,11 +1,11 @@ -# TimeSpan Slot: begin_of_the_end -# Earliest possible end time - id: https://nde.nl/ontology/hc/slot/begin_of_the_end name: begin_of_the_end_slot - slots: begin_of_the_end: slot_uri: crm:P81b_begin_of_the_end range: datetime - description: "Earliest possible end time of temporal extent (CIDOC-CRM E52_Time-Span)" + description: Earliest possible end time of temporal extent (CIDOC-CRM E52_Time-Span) + related_mappings: + - prov:endedAtTime + broad_mappings: + - dcterms:relation diff --git a/schemas/20251121/linkml/modules/slots/birth_date.yaml b/schemas/20251121/linkml/modules/slots/birth_date.yaml index 7e32130724..59f6aad2f4 100644 --- a/schemas/20251121/linkml/modules/slots/birth_date.yaml +++ b/schemas/20251121/linkml/modules/slots/birth_date.yaml @@ -1,112 +1,163 @@ -# Birth Date Slot -# Date or string representing when a person was born -# -# PiCo Pattern: Allows both xsd:date and xsd:string to preserve original -# source formats while enabling date-based queries. - id: https://nde.nl/ontology/hc/slot/birth_date name: birth_date_slot title: Birth Date Slot - prefixes: sdo: https://schema.org/ pico: https://personsincontext.org/model# crm: http://www.cidoc-crm.org/cidoc-crm/ wd: http://www.wikidata.org/entity/ xsd: http://www.w3.org/2001/XMLSchema# - imports: - - linkml:types - +- linkml:types slots: birth_date: slot_uri: sdo:birthDate - description: | - The birth date of a person. - + description: 'The birth date of a person. + + =========================================================================== + PiCo ONTOLOGY ALIGNMENT (pico.ttl lines 365-380) + =========================================================================== - + + Per PiCo (Persons in Context) ontology, birth dates can be recorded as: + - **xsd:date**: ISO 8601 format for structured date processing + - **xsd:string**: Original format from source for preservation - + + Both formats may be used together when source fidelity is important. - + + =========================================================================== + INCOMPLETE DATES + =========================================================================== - + + Incomplete dates are ALLOWED when truncated from small to large: - + + **VALID formats**: + - "1970-08-15" (full date) + - "1970-08" (year and month only) + - "1970" (year only) - + + **INVALID formats** (never use): + - "1970-00-15" (missing month with day present) + - "08-15" (missing year) + - "15" (day only) - + + =========================================================================== + SOURCE PRESERVATION + =========================================================================== - + + Sometimes the original source format should be preserved exactly as written: + - Archival records: "born in the year of our Lord 1823" + - Historical documents: "circa 1750" + - Genealogical notes: "abt. 1800" + - Fuzzy dates: "late 18th century" - + + In these cases, use the string format and optionally provide a structured + date interpretation in a separate field or as part of TimeSpan processing. - + + =========================================================================== + EXAMPLES + =========================================================================== - + + Precise date known: + ```yaml + birth_date: "1970-08-15" + ``` - + + Only year known: + ```yaml + birth_date: "1970" + ``` - + + Source format preservation: + ```yaml + birth_date: "ca. 1750" # String format preserves source notation + ``` - + + =========================================================================== + RELATIONSHIP TO age SLOT + =========================================================================== - + + When birth_date is unknown but age is known (from source), use the `age` + slot instead. Combined with the source document date, a birth date range + can be derived during PersonReconstruction. - + + =========================================================================== + ONTOLOGY MAPPINGS + =========================================================================== - + + - Schema.org: sdo:birthDate (primary) + - CIDOC-CRM: crm:P98i_was_born via crm:E67_Birth event + - Wikidata: P569 (date of birth) - + + ' range: string required: false exact_mappings: - - sdo:birthDate - - wikidata:P569 + - sdo:birthDate + - wikidata:P569 + - schema:birthDate + - foaf:birthday close_mappings: - - crm:P98i_was_born + - crm:P98i_was_born comments: - - "Allows both date and string formats per PiCo pattern" - - "Incomplete dates valid when truncated from small to large" - - "Use age slot when birth date unknown but age is recorded" - - "String format can preserve original source notation" + - Allows both date and string formats per PiCo pattern + - Incomplete dates valid when truncated from small to large + - Use age slot when birth date unknown but age is recorded + - String format can preserve original source notation + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/birth_place.yaml b/schemas/20251121/linkml/modules/slots/birth_place.yaml index c757e26739..782ce4093b 100644 --- a/schemas/20251121/linkml/modules/slots/birth_place.yaml +++ b/schemas/20251121/linkml/modules/slots/birth_place.yaml @@ -1,111 +1,159 @@ -# Birth Place Slot -# String or URI representing where a person was born -# -# PiCo Pattern: Allows both literal place names and URIs for thesaurus linking -# (GeoNames, Wikidata, etc.) - id: https://nde.nl/ontology/hc/slot/birth_place name: birth_place_slot title: Birth Place Slot - prefixes: sdo: https://schema.org/ pico: https://personsincontext.org/model# crm: http://www.cidoc-crm.org/cidoc-crm/ wd: http://www.wikidata.org/entity/ geonames: http://sws.geonames.org/ - imports: - - linkml:types - +- linkml:types slots: birth_place: slot_uri: sdo:birthPlace - description: | - The place where a person was born. - + description: 'The place where a person was born. + + =========================================================================== + PiCo ONTOLOGY ALIGNMENT (pico.ttl lines 382-394) + =========================================================================== - + + Per PiCo (Persons in Context) ontology, birth places can be recorded as: + - **xsd:string**: Literal place name as mentioned in source + - **xsd:anyURI**: Link to geographic thesaurus (GeoNames, Wikidata) - + + Both formats may be used together: + - Literal: Preserves original source notation + - URI: Enables geographic linking and reconciliation - + + =========================================================================== + THESAURUS LINKING + =========================================================================== - + + Preferably link to established geographic thesauri: - + + **GeoNames** (preferred for geographic entities): + - Format: http://sws.geonames.org/{geonames_id}/ + - Example: http://sws.geonames.org/2759794/ (Amsterdam) - + + **Wikidata** (preferred for historical places): + - Format: http://www.wikidata.org/entity/Q{number} + - Example: http://www.wikidata.org/entity/Q727 (Amsterdam) - + + **TGN** (Getty Thesaurus of Geographic Names): + - For art history contexts - + + =========================================================================== + SOURCE PRESERVATION + =========================================================================== - + + The literal place name as mentioned on the source should be preserved: + - Historical spellings: "Amsteldam" (historical name for Amsterdam) + - Demolished places: "East Prussia" (no longer exists) - - Vernacular names: "'s-Hertogenbosch" vs "Den Bosch" + + - Vernacular names: "''s-Hertogenbosch" vs "Den Bosch" + - Regional specificity: "Jordaan, Amsterdam" (neighborhood level) - + + =========================================================================== + EXAMPLES + =========================================================================== - + + Literal place name only: + ```yaml + birth_place: "Amsterdam, Noord-Holland, Netherlands" + ``` - + + URI to GeoNames: + ```yaml + birth_place: "http://sws.geonames.org/2759794/" + ``` - + + Both literal and URI (using separate fields): + ```yaml + birth_place: "Amsteldam" # Source spelling + birth_place_uri: "http://sws.geonames.org/2759794/" # Reconciled + ``` - + + Historical place (no modern equivalent): + ```yaml + birth_place: "Königsberg, East Prussia" + birth_place_uri: "http://www.wikidata.org/entity/Q1773" # Now Kaliningrad + ``` - + + =========================================================================== + ONTOLOGY MAPPINGS + =========================================================================== - + + - Schema.org: sdo:birthPlace (primary) + - CIDOC-CRM: crm:P7_took_place_at via crm:E67_Birth event + - Wikidata: P19 (place of birth) - + + ' range: string required: false exact_mappings: - - sdo:birthPlace - - wikidata:P19 + - sdo:birthPlace + - wikidata:P19 + - schema:birthPlace close_mappings: - - crm:P7_took_place_at + - crm:P7_took_place_at comments: - - "Allows both string and URI formats per PiCo pattern" - - "Prefer thesaurus links (GeoNames, Wikidata) when possible" - - "Preserve literal source notation alongside reconciled URI" - - "Handle historical place names that may not have modern equivalents" + - Allows both string and URI formats per PiCo pattern + - Prefer thesaurus links (GeoNames, Wikidata) when possible + - Preserve literal source notation alongside reconciled URI + - Handle historical place names that may not have modern equivalents diff --git a/schemas/20251121/linkml/modules/slots/canonical_value.yaml b/schemas/20251121/linkml/modules/slots/canonical_value.yaml index aeeeeb0fbf..5e9817385c 100644 --- a/schemas/20251121/linkml/modules/slots/canonical_value.yaml +++ b/schemas/20251121/linkml/modules/slots/canonical_value.yaml @@ -1,55 +1,27 @@ -# Slot: canonical_value -# Stores the canonical/normalized form of an identifier - id: https://nde.nl/ontology/hc/slot/canonical_value name: canonical_value_slot title: Canonical Value Slot - prefixes: linkml: https://w3id.org/linkml/ schema: http://schema.org/ skos: http://www.w3.org/2004/02/skos/core# - imports: - - linkml:types - +- linkml:types slots: canonical_value: slot_uri: skos:notation - description: | - The canonical/normalized form of the identifier value. - - While identifier_value stores the value as received/displayed, - canonical_value stores the normalized form for: - - Consistent storage - - Deduplication - - Matching across systems - - **Normalization Rules by Standard:** - - - **ISNI**: Remove all spaces → "0000000121465765" - - **ISIL**: Keep as-is (already canonical) → "NL-AmRMA" - - **Wikidata**: Extract Q-number only → "Q190804" - - **VIAF**: Numeric only → "148691498" - - **DOI**: Lowercase, no resolver prefix → "10.1234/example" - - **Usage Pattern:** - - ```yaml - # ISNI example - identifier_value: "0000 0001 2146 5765" # As displayed - canonical_value: "0000000121465765" # Normalized for storage - - # Wikidata example - identifier_value: "http://www.wikidata.org/entity/Q190804" - canonical_value: "Q190804" - ``` - - **Benefits:** - - - Enables exact matching across records - - Simplifies deduplication - - Reduces storage variance - - Facilitates joins in databases + description: "The canonical/normalized form of the identifier value.\n\nWhile identifier_value stores the value as received/displayed,\n\ + canonical_value stores the normalized form for:\n- Consistent storage\n- Deduplication\n- Matching across systems\n\n\ + **Normalization Rules by Standard:**\n\n- **ISNI**: Remove all spaces → \"0000000121465765\"\n- **ISIL**: Keep as-is\ + \ (already canonical) → \"NL-AmRMA\"\n- **Wikidata**: Extract Q-number only → \"Q190804\"\n- **VIAF**: Numeric only\ + \ → \"148691498\"\n- **DOI**: Lowercase, no resolver prefix → \"10.1234/example\"\n\n**Usage Pattern:**\n\n```yaml\n\ + # ISNI example\nidentifier_value: \"0000 0001 2146 5765\" # As displayed\ncanonical_value: \"0000000121465765\" \ + \ # Normalized for storage\n\n# Wikidata example \nidentifier_value: \"http://www.wikidata.org/entity/Q190804\"\n\ + canonical_value: \"Q190804\"\n```\n\n**Benefits:**\n\n- Enables exact matching across records\n- Simplifies deduplication\n\ + - Reduces storage variance\n- Facilitates joins in databases\n" range: string required: false + close_mappings: + - skos:prefLabel + broad_mappings: + - rdf:value diff --git a/schemas/20251121/linkml/modules/slots/capacity_items.yaml b/schemas/20251121/linkml/modules/slots/capacity_items.yaml index 1a2984c4f2..136e59395c 100644 --- a/schemas/20251121/linkml/modules/slots/capacity_items.yaml +++ b/schemas/20251121/linkml/modules/slots/capacity_items.yaml @@ -1,20 +1,27 @@ -# Shared slot: capacity_items -# Used by: StorageUnit, Storage -# Created to resolve slot conflict during validation - id: https://nde.nl/ontology/hc/slot/capacity_items name: capacity_items_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ - + schema: http://schema.org/ imports: - - linkml:types - +- linkml:types default_range: string - slots: capacity_items: - description: Maximum number of items that can be stored + slot_uri: hc:capacityItems + description: 'Maximum number of items that can be stored. + + + Heritage Custodian ontology: capacityItems - The maximum item capacity + + of a storage unit or facility. + + + Used for physical storage planning and collection management. + + ' range: integer + broad_mappings: + - schema:maximumAttendeeCapacity + - schema:itemListElement diff --git a/schemas/20251121/linkml/modules/slots/cataloging_standard.yaml b/schemas/20251121/linkml/modules/slots/cataloging_standard.yaml index bbcb8b2440..ab01fe159a 100644 --- a/schemas/20251121/linkml/modules/slots/cataloging_standard.yaml +++ b/schemas/20251121/linkml/modules/slots/cataloging_standard.yaml @@ -1,35 +1,32 @@ -# Global slot definition for cataloging_standard -# Used by MuseumType and LibraryType - id: https://nde.nl/ontology/hc/slot/cataloging_standard name: cataloging_standard - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - slots: cataloging_standard: slot_uri: dcterms:conformsTo - description: | - Standards used for object cataloging and collection management. - Applies to both museums (LIDO, SPECTRUM, CIDOC-CRM) and libraries - (MARC21, RDA, Dublin Core, BIBFRAME). + description: "Standards used for object cataloging and collection management.\nApplies to both museums (LIDO, SPECTRUM,\ + \ CIDOC-CRM) and libraries \n(MARC21, RDA, Dublin Core, BIBFRAME).\n" range: string required: false examples: - - value: "LIDO" - description: "Lightweight Information Describing Objects (museums)" - - value: "SPECTRUM" - description: "UK museum collection management standard" - - value: "CIDOC-CRM" - description: "Conceptual Reference Model for cultural heritage" - - value: "MARC21" - description: "Machine-Readable Cataloging 21 (libraries)" - - value: "RDA" - description: "Resource Description and Access (libraries)" - - value: "BIBFRAME" - description: "Bibliographic Framework Initiative (libraries)" - - value: "Darwin Core" - description: "Natural history specimen data standard" + - value: LIDO + description: Lightweight Information Describing Objects (museums) + - value: SPECTRUM + description: UK museum collection management standard + - value: CIDOC-CRM + description: Conceptual Reference Model for cultural heritage + - value: MARC21 + description: Machine-Readable Cataloging 21 (libraries) + - value: RDA + description: Resource Description and Access (libraries) + - value: BIBFRAME + description: Bibliographic Framework Initiative (libraries) + - value: Darwin Core + description: Natural history specimen data standard + related_mappings: + - dcterms:conformsTo + broad_mappings: + - dcterms:conformsTo diff --git a/schemas/20251121/linkml/modules/slots/change_rationale.yaml b/schemas/20251121/linkml/modules/slots/change_rationale.yaml index 0882e1a382..1dd0374d15 100644 --- a/schemas/20251121/linkml/modules/slots/change_rationale.yaml +++ b/schemas/20251121/linkml/modules/slots/change_rationale.yaml @@ -1,10 +1,11 @@ -# change_rationale slot for OrganizationalChangeEvent - id: https://nde.nl/ontology/hc/slot/change_rationale name: change_rationale - slots: change_rationale: - description: "Explanation for why this organizational change was made" + description: Explanation for why this organizational change was made range: string slot_uri: prov:hadReason + close_mappings: + - prov:hadReason + related_mappings: + - dcterms:description diff --git a/schemas/20251121/linkml/modules/slots/circumstances_of_death.yaml b/schemas/20251121/linkml/modules/slots/circumstances_of_death.yaml index 0c0db0ceeb..4d9b801290 100644 --- a/schemas/20251121/linkml/modules/slots/circumstances_of_death.yaml +++ b/schemas/20251121/linkml/modules/slots/circumstances_of_death.yaml @@ -1,56 +1,34 @@ -# Circumstances of Death Slot -# Textual description of how a staff member died - id: https://nde.nl/ontology/hc/slot/circumstances_of_death name: circumstances_of_death_slot title: Circumstances of Death Slot - prefixes: schema: http://schema.org/ dcterms: http://purl.org/dc/terms/ wd: http://www.wikidata.org/entity/ - imports: - - linkml:types - - ../metadata - +- linkml:types +- ../metadata slots: circumstances_of_death: slot_uri: wikidata:P1196 - description: | - Textual description of the circumstances surrounding a staff member's death. - - **Purpose**: - Provides narrative context for how and why the person died, particularly - important for documenting: - - Heritage workers killed during conflicts - - Targeted attacks on cultural institutions - - Occupational hazards and accidents - - Historical context for biographical documentation - - **Example - Gaza Heritage Worker**: - ```yaml - circumstances_of_death: | - Killed in Israeli airstrike on his home in Gaza City on November 19, 2023. - He was a journalist and information professional at Press House - Palestine. - ``` - - **Provenance**: - Always include source documentation when describing death circumstances. - Link to authoritative reports, news coverage, or institutional records. - - **Sensitivity**: - - Handle with respect and dignity - - Verify facts before documenting - - Consult with family or institution when possible - - Follow journalistic standards for reporting deaths + description: "Textual description of the circumstances surrounding a staff member's death.\n\n**Purpose**:\nProvides narrative\ + \ context for how and why the person died, particularly\nimportant for documenting:\n- Heritage workers killed during\ + \ conflicts\n- Targeted attacks on cultural institutions\n- Occupational hazards and accidents\n- Historical context\ + \ for biographical documentation\n\n**Example - Gaza Heritage Worker**:\n```yaml\ncircumstances_of_death: |\n Killed\ + \ in Israeli airstrike on his home in Gaza City on November 19, 2023.\n He was a journalist and information professional\ + \ at Press House - Palestine.\n```\n\n**Provenance**:\nAlways include source documentation when describing death circumstances.\n\ + Link to authoritative reports, news coverage, or institutional records.\n\n**Sensitivity**:\n- Handle with respect and\ + \ dignity\n- Verify facts before documenting\n- Consult with family or institution when possible\n- Follow journalistic\ + \ standards for reporting deaths\n" range: string required: false exact_mappings: - - wikidata:P1196 + - wikidata:P1196 related_mappings: - - schema:description + - schema:description comments: - - "Provide factual, respectful descriptions" - - "Include source documentation" - - "Particularly important for martyred individuals" + - Provide factual, respectful descriptions + - Include source documentation + - Particularly important for martyred individuals + broad_mappings: + - dcterms:relation diff --git a/schemas/20251121/linkml/modules/slots/city.yaml b/schemas/20251121/linkml/modules/slots/city.yaml index 024641f655..ea82c193f4 100644 --- a/schemas/20251121/linkml/modules/slots/city.yaml +++ b/schemas/20251121/linkml/modules/slots/city.yaml @@ -1,33 +1,31 @@ -# city slot - City name -# Used by: AuxiliaryPlace, other location-related classes - id: https://nde.nl/ontology/hc/slot/city name: city_slot title: City Slot +description: 'City or locality name for a location. + -description: | - City or locality name for a location. - Use the standard English name or official local name. + For precise identification, prefer Settlement class with GeoNames ID. + ' prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ locn: http://www.w3.org/ns/locn# - slots: city: slot_uri: schema:addressLocality range: string required: false - description: | - City or locality name for the location. - exact_mappings: - - locn:postName - - vcard:locality + description: 'City or locality name for the location. + ' + exact_mappings: + - locn:postName + - vcard:locality + - schema:addressLocality comments: - - "For unambiguous city identification, use Settlement class with GeoNames ID" - - "This slot is for simple string references when full Settlement is not needed" +- For unambiguous city identification, use Settlement class with GeoNames ID +- This slot is for simple string references when full Settlement is not needed diff --git a/schemas/20251121/linkml/modules/slots/claim_id.yaml b/schemas/20251121/linkml/modules/slots/claim_id.yaml index db5b296a79..90103f86c7 100644 --- a/schemas/20251121/linkml/modules/slots/claim_id.yaml +++ b/schemas/20251121/linkml/modules/slots/claim_id.yaml @@ -1,24 +1,17 @@ -# Slot: claim_id -# Unique identifier for web claims with provenance - id: https://nde.nl/ontology/hc/slot/claim_id name: claim_id_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: claim_id: slot_uri: dcterms:identifier identifier: true range: uriorcurie - description: >- - Unique identifier for this web claim. - Used to reference specific claims in provenance chains. + description: Unique identifier for this web claim. Used to reference specific claims in provenance chains. + broad_mappings: + - dcterms:identifier diff --git a/schemas/20251121/linkml/modules/slots/claim_type.yaml b/schemas/20251121/linkml/modules/slots/claim_type.yaml index 6055f884b7..b58e19bf80 100644 --- a/schemas/20251121/linkml/modules/slots/claim_type.yaml +++ b/schemas/20251121/linkml/modules/slots/claim_type.yaml @@ -1,23 +1,18 @@ -# Slot: claim_type -# Type classification for web claims - id: https://nde.nl/ontology/hc/slot/claim_type name: claim_type_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: claim_type: slot_uri: dcterms:type range: ClaimTypeEnum - description: >- - Type of claim being made (e.g., full_name, email, description). - Maps to ClaimTypeEnum enumeration. + description: Type of claim being made (e.g., full_name, email, description). Maps to ClaimTypeEnum enumeration. + close_mappings: + - dcterms:type + broad_mappings: + - dcterms:type diff --git a/schemas/20251121/linkml/modules/slots/claim_value.yaml b/schemas/20251121/linkml/modules/slots/claim_value.yaml index 81f4f76092..9f4053410e 100644 --- a/schemas/20251121/linkml/modules/slots/claim_value.yaml +++ b/schemas/20251121/linkml/modules/slots/claim_value.yaml @@ -1,23 +1,18 @@ -# Slot: claim_value -# The extracted value from a web claim - id: https://nde.nl/ontology/hc/slot/claim_value name: claim_value_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# - imports: - - linkml:types - +- linkml:types default_range: string - slots: claim_value: slot_uri: rdf:value range: string - description: >- - The extracted value from the web source. - This is the actual content claimed to exist at the XPath location. + description: The extracted value from the web source. This is the actual content claimed to exist at the XPath location. + close_mappings: + - rdf:value + broad_mappings: + - rdf:value diff --git a/schemas/20251121/linkml/modules/slots/class_metadata_slots.yaml b/schemas/20251121/linkml/modules/slots/class_metadata_slots.yaml index 1f184b4465..1482380daa 100644 --- a/schemas/20251121/linkml/modules/slots/class_metadata_slots.yaml +++ b/schemas/20251121/linkml/modules/slots/class_metadata_slots.yaml @@ -220,8 +220,8 @@ slots: - UnspecifiedType (U) - MixedCustodianType (X) - **Note**: String values like '["A"]' are legacy format from migration. - Prefer URIs like 'hc:ArchiveOrganizationType' for new schemas. + **Format**: Use CustodianType class URIs like 'hc:ArchiveOrganizationType'. + All schemas have been migrated from legacy single-letter codes to proper URIs. range: uriorcurie multivalued: true inlined_as_list: true @@ -557,38 +557,15 @@ slots: # Collection Holdings Relationship (rico:isOrWasHolderOf) # --------------------------------------------------------------------------- - holds_record_set_types: - slot_uri: rico:isOrWasHolderOf - description: | - Links a custodian type to the record set types it typically holds. - Uses RiC-O property rico:isOrWasHolderOf to express custodial relationship. - - **Example** (AcademicArchive holdings): - - UniversityAdministrativeFonds - Governance, committee, policy records - - StudentRecordSeries - Enrollment, transcripts, graduation records - - FacultyPaperCollection - Personal papers of faculty members - - CampusDocumentationCollection - Photos, publications, ephemera - range: uriorcurie - multivalued: true - examples: - - value: '["hc:UniversityAdministrativeFonds", "hc:StudentRecordSeries", "hc:FacultyPaperCollection", "hc:CampusDocumentationCollection"]' - description: "Academic archive typical holdings" + # NOTE: holds_record_set_types is defined in ./holds_record_set_types.yaml + # DO NOT duplicate here - import that file instead # --------------------------------------------------------------------------- # RiC-O RecordSet Metadata (for RecordSetType classes) # --------------------------------------------------------------------------- - rico_record_set_type: - slot_uri: rico:hasRecordSetType - description: | - RiC-O RecordSetType classification for this collection type. - Values: Fonds, Series, File, Item, Collection, etc. - range: string - examples: - - value: "rico:Fonds" - description: "Archival fonds (organic whole)" - - value: "rico:Collection" - description: "Assembled collection" + # NOTE: rico_record_set_type is defined in ../slots/rico_record_set_type.yaml + # DO NOT duplicate here - import that file instead rico_organizational_principle: slot_uri: rico:hasOrHadAllMembersWithOrganizationalPrinciple @@ -606,7 +583,7 @@ slots: slot_uri: rico:hasOrHadAllMembersWithOrganizationalPrinciple description: | URI for the RiC-O organizational principle. - range: uriorcurie + range: string examples: - value: "rico:OrganizationalPrincipleProvenance" description: "RiC-O provenance principle" @@ -616,7 +593,7 @@ slots: description: | The custodian type(s) that typically hold this type of record set. Inverse of rico:isOrWasHolderOf. - range: uriorcurie + range: string multivalued: true examples: - value: "hc:AcademicArchive" @@ -684,19 +661,8 @@ slots: # Scope and Classification Metadata # --------------------------------------------------------------------------- - scope_includes: - slot_uri: skos:scopeNote - description: | - What is explicitly included in the scope of this class. - range: string - multivalued: true - - scope_excludes: - slot_uri: skos:scopeNote - description: | - What is explicitly excluded from the scope of this class. - range: string - multivalued: true + # NOTE: scope_includes and scope_excludes are defined in ./type_scope.yaml + # DO NOT duplicate here custodian_only: slot_uri: hc:custodianOnly @@ -705,12 +671,8 @@ slots: corresponding rico:RecordSetType collection class. range: boolean - custodian_type: - slot_uri: hc:custodianTypeNote - description: | - Note about the custodian type classification for this class. - Typically used when additional context is needed beyond custodian_types. - range: string + # NOTE: custodian_type is defined in ./custodian_type.yaml + # DO NOT duplicate here organizational_level: slot_uri: hc:organizationalLevel diff --git a/schemas/20251121/linkml/modules/slots/collection_description.yaml b/schemas/20251121/linkml/modules/slots/collection_description.yaml index aba64945a9..aeb51f883b 100644 --- a/schemas/20251121/linkml/modules/slots/collection_description.yaml +++ b/schemas/20251121/linkml/modules/slots/collection_description.yaml @@ -1,13 +1,17 @@ -# Custodian Slot: collection_description -# Narrative description of collection contents - id: https://nde.nl/ontology/hc/slot/collection_description name: collection_description_slot - slots: collection_description: slot_uri: dcterms:description range: string - description: | - Narrative description of the collection's contents, scope, and significance. + description: 'Narrative description of the collection''s contents, scope, and significance. + Dublin Core: description property for textual description. + + ' + close_mappings: + - schema:description + related_mappings: + - dcterms:description + broad_mappings: + - dcterms:description diff --git a/schemas/20251121/linkml/modules/slots/collection_focus.yaml b/schemas/20251121/linkml/modules/slots/collection_focus.yaml index 2c43a2ab1d..fdc95e7379 100644 --- a/schemas/20251121/linkml/modules/slots/collection_focus.yaml +++ b/schemas/20251121/linkml/modules/slots/collection_focus.yaml @@ -1,28 +1,30 @@ -# Global slot definition for collection_focus -# Used by MuseumType and PersonalCollectionType - id: https://nde.nl/ontology/hc/slot/collection_focus name: collection_focus - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - slots: collection_focus: slot_uri: dcterms:subject - description: | - The primary subject areas, themes, or materials of collections. + description: 'The primary subject areas, themes, or materials of collections. + Applies to museums (art, history, science) and personal collections + (individual collector specializations). + + ' range: string multivalued: true required: false examples: - - value: "paintings" - - value: "sculptures" - - value: "historical artifacts" - - value: "natural specimens" - - value: "Dutch Golden Age paintings" - - value: "First edition literature" + - value: paintings + - value: sculptures + - value: historical artifacts + - value: natural specimens + - value: Dutch Golden Age paintings + - value: First edition literature + exact_mappings: + - dcterms:subject + close_mappings: + - schema:about diff --git a/schemas/20251121/linkml/modules/slots/collection_id.yaml b/schemas/20251121/linkml/modules/slots/collection_id.yaml new file mode 100644 index 0000000000..26e565ae14 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/collection_id.yaml @@ -0,0 +1,22 @@ +id: https://nde.nl/ontology/hc/slot/collection_id +name: collection_id +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + dcterms: http://purl.org/dc/terms/ +slots: + collection_id: + slot_uri: dcterms:identifier + description: 'Unique identifier for this specific collection. + + Format: URI following NDE Heritage Custodian ontology conventions. + + ' + range: uriorcurie + required: true + identifier: true + examples: + - value: https://nde.nl/ontology/hc/collection/nationaal-archief-voc-fonds + description: VOC fonds at the National Archives + broad_mappings: + - dcterms:identifier diff --git a/schemas/20251121/linkml/modules/slots/collection_name.yaml b/schemas/20251121/linkml/modules/slots/collection_name.yaml index 8192d6d208..4401531cd6 100644 --- a/schemas/20251121/linkml/modules/slots/collection_name.yaml +++ b/schemas/20251121/linkml/modules/slots/collection_name.yaml @@ -1,19 +1,28 @@ -# Custodian Slot: collection_name -# Name of the heritage collection - id: https://nde.nl/ontology/hc/slot/collection_name name: collection_name_slot - slots: collection_name: slot_uri: dcterms:title range: string - description: | - Name of the heritage collection (may differ from custodian name). + description: 'Name of the heritage collection (may differ from custodian name). + Dublin Core: title property for collection name. - + + Examples: + - "Rijksmuseum Collection" + - "Notarial Archives of Amsterdam" + - "Wallace Collection" + - "Vatican Apostolic Library Holdings" + + ' + close_mappings: + - schema:name + related_mappings: + - dcterms:title + broad_mappings: + - rdfs:label diff --git a/schemas/20251121/linkml/modules/slots/collection_scope.yaml b/schemas/20251121/linkml/modules/slots/collection_scope.yaml index ddf1342cd7..921e718c3a 100644 --- a/schemas/20251121/linkml/modules/slots/collection_scope.yaml +++ b/schemas/20251121/linkml/modules/slots/collection_scope.yaml @@ -1,17 +1,25 @@ -# Custodian Slot: collection_scope -# Subject scope or thematic focus of collection - id: https://nde.nl/ontology/hc/slot/collection_scope name: collection_scope_slot - slots: collection_scope: slot_uri: dcterms:coverage range: string - description: | - Subject scope or thematic focus of collection. + description: 'Subject scope or thematic focus of collection. + Examples: + - "17th-century Dutch painting" + - "Municipal government records, 1578-present" + - "Medieval manuscripts" + - "East Asian art" + + ' + exact_mappings: + - dcterms:coverage + close_mappings: + - schema:about + broad_mappings: + - dcterms:coverage diff --git a/schemas/20251121/linkml/modules/slots/collection_size.yaml b/schemas/20251121/linkml/modules/slots/collection_size.yaml index 7164ee189e..04092bbcb7 100644 --- a/schemas/20251121/linkml/modules/slots/collection_size.yaml +++ b/schemas/20251121/linkml/modules/slots/collection_size.yaml @@ -1,30 +1,28 @@ -# Global slot definition for collection_size -# Used by BioCustodianType and PersonalCollectionType - id: https://nde.nl/ontology/hc/slot/collection_size name: collection_size - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - slots: collection_size: slot_uri: schema:numberOfItems - description: | - Quantitative description of collection size. Can be expressed as number - of species, individuals, objects, items, or combined measures. - Applies to biological collections (species/individuals) and personal - collections (objects/items). + description: "Quantitative description of collection size. Can be expressed as number\nof species, individuals, objects,\ + \ items, or combined measures.\nApplies to biological collections (species/individuals) and personal \ncollections (objects/items).\n" range: string required: false examples: - - value: "More than 900 species, approximately 8,700 animals" - description: "Zoo collection size" - - value: "Over 50,000 living plants" - description: "Botanical garden collection size" - - value: "50+ paintings, Historical furniture, Family archives" - description: "Personal collection size" - - value: "5,000 rare books, 18th-19th century focus" - description: "Private library size" + - value: More than 900 species, approximately 8,700 animals + description: Zoo collection size + - value: Over 50,000 living plants + description: Botanical garden collection size + - value: 50+ paintings, Historical furniture, Family archives + description: Personal collection size + - value: 5,000 rare books, 18th-19th century focus + description: Private library size + exact_mappings: + - schema:numberOfItems + close_mappings: + - dcterms:extent + broad_mappings: + - dcterms:extent diff --git a/schemas/20251121/linkml/modules/slots/collection_type.yaml b/schemas/20251121/linkml/modules/slots/collection_type.yaml index 50fe84a65b..2262e8081b 100644 --- a/schemas/20251121/linkml/modules/slots/collection_type.yaml +++ b/schemas/20251121/linkml/modules/slots/collection_type.yaml @@ -1,25 +1,37 @@ -# Custodian Slot: collection_type -# Type(s) of heritage materials in collection - id: https://nde.nl/ontology/hc/slot/collection_type name: collection_type_slot - slots: collection_type: slot_uri: dcterms:type range: string multivalued: true - description: | - Type(s) of heritage materials in collection. + description: 'Type(s) of heritage materials in collection. + Multiple types may apply (e.g., archives + library). - + + Examples: + - "archival_records" (rico:RecordSet) + - "museum_objects" (crm:E78_Curated_Holding) + - "library_holdings" (bf:Collection) + - "monuments" (crm:E27_Site) + - "archaeological_materials" + - "natural_history_specimens" + - "digital_born" (born-digital collections) + - "photographs" + - "manuscripts" + + ' + close_mappings: + - dcterms:type + broad_mappings: + - dcterms:type diff --git a/schemas/20251121/linkml/modules/slots/collection_type_ref.yaml b/schemas/20251121/linkml/modules/slots/collection_type_ref.yaml new file mode 100644 index 0000000000..ae204dbe82 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/collection_type_ref.yaml @@ -0,0 +1,31 @@ +id: https://nde.nl/ontology/hc/slot/collection_type_ref +name: collection_type_ref +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + collection_type_ref: + slot_uri: rico:hasRecordSetType + description: 'Classification of this collection from CollectionType hierarchy. + + + RiC-O: hasRecordSetType links RecordSet to its classification. + + + Provides semantic classification (fonds, series, special collection, etc.) + + distinguishing this Collection from generic CustodianCollection references. + + ' + range: CollectionType + required: true + examples: + - value: https://nde.nl/ontology/hc/collection-type/fonds + description: Archival fonds + - value: https://nde.nl/ontology/hc/collection-type/special-collection + description: Library special collection + close_mappings: + - dcterms:type + broad_mappings: + - dcterms:references diff --git a/schemas/20251121/linkml/modules/slots/collections_under_responsibility.yaml b/schemas/20251121/linkml/modules/slots/collections_under_responsibility.yaml index f90ec14010..7263f2be81 100644 --- a/schemas/20251121/linkml/modules/slots/collections_under_responsibility.yaml +++ b/schemas/20251121/linkml/modules/slots/collections_under_responsibility.yaml @@ -1,170 +1,77 @@ -# Collections Under Responsibility Slot -# Reverse relationship from CustodianLegalStatus to LegalResponsibilityCollection - id: https://nde.nl/ontology/hc/slot/collections_under_responsibility name: collections_under_responsibility_slot title: collections_under_responsibility Slot - prefixes: linkml: https://w3id.org/linkml/ tooi: https://identifier.overheid.nl/tooi/def/ont/ hc: https://nde.nl/ontology/hc/ - imports: - - linkml:types - - ../metadata - - ../classes/LegalResponsibilityCollection - +- linkml:types +- ../metadata +- ../classes/LegalResponsibilityCollection slots: collections_under_responsibility: slot_uri: tooi:heeft_informatieobject range: LegalResponsibilityCollection multivalued: true required: false - description: | - Collections (informatieobjecten) for which this legal entity bears formal legal responsibility. - - **TOOI Ontology Pattern**: - - Reverse of tooi:verantwoordelijke (responsible entity) - - tooi:heeft_informatieobject: "has information object" (custom reverse property) - - **Bidirectional Relationship**: - - **Forward**: LegalResponsibilityCollection → CustodianLegalStatus (responsible_legal_entity) - - **Reverse**: CustodianLegalStatus → LegalResponsibilityCollection (collections_under_responsibility) - - **Use Cases**: - 1. **Institutional Inventory**: "What collections is this organization legally responsible for?" - ```sparql - PREFIX hc: - SELECT ?collection ?collection_name - WHERE { - <.../legal/rijksmuseum-foundation> - hc:collections_under_responsibility ?collection . - ?collection hc:collection_name ?collection_name . - } - ``` - - 2. **Legal Audit**: "Which collections fall under this entity's legal mandate?" - - Query collections_under_responsibility to list all mandated holdings - - Check legal_responsibility_basis for statutory/contractual foundation - - 3. **Custody Transfer Impact**: "What happens to collections when entity dissolves?" - - When legal entity is dissolved, all collections_under_responsibility must transfer - - Track via OrganizationalChangeEvent (DISSOLUTION, MERGER, SPLIT) - - **Temporal Dimension**: - Collections under responsibility can change over time through: - - **Accession**: New collection added (new LegalResponsibilityCollection instance) - - **Deaccession**: Collection removed (set legal_responsibility_end_date) - - **Custody Transfer**: Responsibility transferred to another entity - - Old entity: legal_responsibility_end_date set - - New entity: new LegalResponsibilityCollection created - - **Organizational Merger**: Collections consolidated under successor entity - - Predecessor entities: legal_responsibility_end_date set - - Successor entity: new LegalResponsibilityCollection instances created - - **Examples**: - - ```yaml - # Example 1: Foundation with Museum Collection - CustodianLegalStatus: - id: "https://nde.nl/ontology/hc/legal/rijksmuseum-foundation" - legal_name: - full_name: "Stichting Rijksmuseum" - collections_under_responsibility: - - "https://nde.nl/ontology/hc/collection/rm-national-collection" - - "https://nde.nl/ontology/hc/collection/rm-prints-drawings" - - "https://nde.nl/ontology/hc/collection/rm-library" - - # Example 2: Archive Authority with Multiple Fonds - CustodianLegalStatus: - id: "https://nde.nl/ontology/hc/legal/nha-organization" - legal_name: - full_name: "Noord-Hollands Archief" - collections_under_responsibility: - - "https://nde.nl/ontology/hc/collection/nha-provincial-archive" - - "https://nde.nl/ontology/hc/collection/nha-haarlem-municipal" - - "https://nde.nl/ontology/hc/collection/nha-regional-archives" - - # Example 3: Custody Transfer - Before Merger (2000) - CustodianLegalStatus: - id: "https://nde.nl/ontology/hc/legal/haarlem-municipality-1990s" - legal_name: - full_name: "Gemeente Haarlem" - collections_under_responsibility: - - "https://nde.nl/ontology/hc/collection/haarlem-municipal-pre-2001" - dissolution_date: "2001-01-01" # Custody transferred to NHA - - # Example 3: Custody Transfer - After Merger (2001) - CustodianLegalStatus: - id: "https://nde.nl/ontology/hc/legal/nha-organization" - legal_name: - full_name: "Noord-Hollands Archief" - collections_under_responsibility: - # Inherited collections from predecessor entities - - "https://nde.nl/ontology/hc/collection/haarlem-municipal-post-2001" - - "https://nde.nl/ontology/hc/collection/nha-provincial-archive" - # Note: New LegalResponsibilityCollection instances created for transferred collections - ``` - - **Validation Rules**: - 1. **Temporal Consistency**: - - Collection.legal_responsibility_start_date >= CustodianLegalStatus.registration_date - - Collection.legal_responsibility_end_date <= CustodianLegalStatus.dissolution_date - - 2. **Bidirectional Integrity**: - - If CustodianLegalStatus.collections_under_responsibility includes CollectionX - - Then CollectionX.responsible_legal_entity MUST reference this CustodianLegalStatus - - 3. **Dissolution Requirement**: - - If CustodianLegalStatus has dissolution_date set - - All collections_under_responsibility MUST have legal_responsibility_end_date <= dissolution_date - - OR custody transfer documented via OrganizationalChangeEvent - - **SPARQL Query Patterns**: - - ```sparql - # Find all collections under legal responsibility of an organization - PREFIX tooi: - PREFIX hc: - PREFIX dcterms: - - SELECT ?collection ?collection_name ?legal_basis ?start_date - WHERE { - <.../legal/nha-organization> - hc:collections_under_responsibility ?collection . - - ?collection hc:collection_name ?collection_name ; - hc:legal_responsibility_basis ?legal_basis ; - hc:legal_responsibility_start_date ?start_date . - } - ORDER BY ?start_date - ``` - - ```sparql - # Find organizations responsible for specific types of collections - PREFIX hc: - PREFIX dcterms: - - SELECT ?organization ?org_name ?collection ?collection_name - WHERE { - ?organization a hc:CustodianLegalStatus ; - hc:legal_name/hc:full_name ?org_name ; - hc:collections_under_responsibility ?collection . - - ?collection hc:collection_type "archival_records" ; - hc:collection_name ?collection_name . - } - ``` - - **Notes**: - - Reverse relationship is optional (not all legal entities have collections) - - Collections may be managed by organizational units (managing_unit) while legal responsibility stays at top level - - During organizational restructuring, collections_under_responsibility may change but collection physical materials remain intact - + description: "Collections (informatieobjecten) for which this legal entity bears formal legal responsibility.\n\n**TOOI\ + \ Ontology Pattern**:\n- Reverse of tooi:verantwoordelijke (responsible entity)\n- tooi:heeft_informatieobject: \"has\ + \ information object\" (custom reverse property)\n\n**Bidirectional Relationship**:\n- **Forward**: LegalResponsibilityCollection\ + \ → CustodianLegalStatus (responsible_legal_entity)\n- **Reverse**: CustodianLegalStatus → LegalResponsibilityCollection\ + \ (collections_under_responsibility)\n\n**Use Cases**:\n1. **Institutional Inventory**: \"What collections is this organization\ + \ legally responsible for?\"\n ```sparql\n PREFIX hc: \n SELECT ?collection\ + \ ?collection_name\n WHERE {\n <.../legal/rijksmuseum-foundation> \n hc:collections_under_responsibility\ + \ ?collection .\n ?collection hc:collection_name ?collection_name .\n }\n ```\n\n2. **Legal Audit**: \"Which\ + \ collections fall under this entity's legal mandate?\"\n - Query collections_under_responsibility to list all mandated\ + \ holdings\n - Check legal_responsibility_basis for statutory/contractual foundation\n\n3. **Custody Transfer Impact**:\ + \ \"What happens to collections when entity dissolves?\"\n - When legal entity is dissolved, all collections_under_responsibility\ + \ must transfer\n - Track via OrganizationalChangeEvent (DISSOLUTION, MERGER, SPLIT)\n\n**Temporal Dimension**:\n\ + Collections under responsibility can change over time through:\n- **Accession**: New collection added (new LegalResponsibilityCollection\ + \ instance)\n- **Deaccession**: Collection removed (set legal_responsibility_end_date)\n- **Custody Transfer**: Responsibility\ + \ transferred to another entity\n - Old entity: legal_responsibility_end_date set\n - New entity: new LegalResponsibilityCollection\ + \ created\n- **Organizational Merger**: Collections consolidated under successor entity\n - Predecessor entities: legal_responsibility_end_date\ + \ set\n - Successor entity: new LegalResponsibilityCollection instances created\n\n**Examples**:\n\n```yaml\n# Example\ + \ 1: Foundation with Museum Collection\nCustodianLegalStatus:\n id: \"https://nde.nl/ontology/hc/legal/rijksmuseum-foundation\"\ + \n legal_name:\n full_name: \"Stichting Rijksmuseum\"\n collections_under_responsibility:\n - \"https://nde.nl/ontology/hc/collection/rm-national-collection\"\ + \n - \"https://nde.nl/ontology/hc/collection/rm-prints-drawings\"\n - \"https://nde.nl/ontology/hc/collection/rm-library\"\ + \n\n# Example 2: Archive Authority with Multiple Fonds\nCustodianLegalStatus:\n id: \"https://nde.nl/ontology/hc/legal/nha-organization\"\ + \n legal_name:\n full_name: \"Noord-Hollands Archief\"\n collections_under_responsibility:\n - \"https://nde.nl/ontology/hc/collection/nha-provincial-archive\"\ + \n - \"https://nde.nl/ontology/hc/collection/nha-haarlem-municipal\"\n - \"https://nde.nl/ontology/hc/collection/nha-regional-archives\"\ + \n\n# Example 3: Custody Transfer - Before Merger (2000)\nCustodianLegalStatus:\n id: \"https://nde.nl/ontology/hc/legal/haarlem-municipality-1990s\"\ + \n legal_name:\n full_name: \"Gemeente Haarlem\"\n collections_under_responsibility:\n - \"https://nde.nl/ontology/hc/collection/haarlem-municipal-pre-2001\"\ + \n dissolution_date: \"2001-01-01\" # Custody transferred to NHA\n\n# Example 3: Custody Transfer - After Merger (2001)\n\ + CustodianLegalStatus:\n id: \"https://nde.nl/ontology/hc/legal/nha-organization\"\n legal_name:\n full_name: \"\ + Noord-Hollands Archief\"\n collections_under_responsibility:\n # Inherited collections from predecessor entities\n\ + \ - \"https://nde.nl/ontology/hc/collection/haarlem-municipal-post-2001\"\n - \"https://nde.nl/ontology/hc/collection/nha-provincial-archive\"\ + \n # Note: New LegalResponsibilityCollection instances created for transferred collections\n```\n\n**Validation Rules**:\n\ + 1. **Temporal Consistency**:\n - Collection.legal_responsibility_start_date >= CustodianLegalStatus.registration_date\n\ + \ - Collection.legal_responsibility_end_date <= CustodianLegalStatus.dissolution_date\n\n2. **Bidirectional Integrity**:\n\ + \ - If CustodianLegalStatus.collections_under_responsibility includes CollectionX\n - Then CollectionX.responsible_legal_entity\ + \ MUST reference this CustodianLegalStatus\n\n3. **Dissolution Requirement**:\n - If CustodianLegalStatus has dissolution_date\ + \ set\n - All collections_under_responsibility MUST have legal_responsibility_end_date <= dissolution_date\n - OR\ + \ custody transfer documented via OrganizationalChangeEvent\n\n**SPARQL Query Patterns**:\n\n```sparql\n# Find all collections\ + \ under legal responsibility of an organization\nPREFIX tooi: \nPREFIX\ + \ hc: \nPREFIX dcterms: \n\nSELECT ?collection ?collection_name\ + \ ?legal_basis ?start_date\nWHERE {\n <.../legal/nha-organization> \n hc:collections_under_responsibility ?collection\ + \ .\n \n ?collection hc:collection_name ?collection_name ;\n hc:legal_responsibility_basis ?legal_basis\ + \ ;\n hc:legal_responsibility_start_date ?start_date .\n}\nORDER BY ?start_date\n```\n\n```sparql\n# Find\ + \ organizations responsible for specific types of collections\nPREFIX hc: \nPREFIX\ + \ dcterms: \n\nSELECT ?organization ?org_name ?collection ?collection_name\nWHERE {\n ?organization\ + \ a hc:CustodianLegalStatus ;\n hc:legal_name/hc:full_name ?org_name ;\n hc:collections_under_responsibility\ + \ ?collection .\n \n ?collection hc:collection_type \"archival_records\" ;\n hc:collection_name ?collection_name\ + \ .\n}\n```\n\n**Notes**:\n- Reverse relationship is optional (not all legal entities have collections)\n- Collections\ + \ may be managed by organizational units (managing_unit) while legal responsibility stays at top level\n- During organizational\ + \ restructuring, collections_under_responsibility may change but collection physical materials remain intact\n" examples: - - value: ["https://nde.nl/ontology/hc/collection/rm-national-collection", "https://nde.nl/ontology/hc/collection/rm-library"] - description: "Rijksmuseum foundation responsible for National Collection and Library" - - - value: ["https://nde.nl/ontology/hc/collection/nha-provincial-archive"] - description: "Noord-Hollands Archief responsible for Provincial Archive" + - value: + - https://nde.nl/ontology/hc/collection/rm-national-collection + - https://nde.nl/ontology/hc/collection/rm-library + description: Rijksmuseum foundation responsible for National Collection and Library + - value: + - https://nde.nl/ontology/hc/collection/nha-provincial-archive + description: Noord-Hollands Archief responsible for Provincial Archive + close_mappings: + - rico:hasOrIsHeldBy + related_mappings: + - schema:collection diff --git a/schemas/20251121/linkml/modules/slots/confidence.yaml b/schemas/20251121/linkml/modules/slots/confidence.yaml index 5a16569b1c..e52b8d1b6c 100644 --- a/schemas/20251121/linkml/modules/slots/confidence.yaml +++ b/schemas/20251121/linkml/modules/slots/confidence.yaml @@ -1,25 +1,20 @@ -# Slot: confidence -# Confidence score for extracted/inferred data (0.0-1.0) - id: https://nde.nl/ontology/hc/slot/confidence name: confidence_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: confidence: slot_uri: hc:confidence - description: >- - Confidence score for extracted or inferred data. - Range is 0.0-1.0 where 1.0 indicates highest confidence. + description: Confidence score for extracted or inferred data. Range is 0.0-1.0 where 1.0 indicates highest confidence. Used for AI-generated content, NER extraction, and automated enrichment. range: float minimum_value: 0.0 maximum_value: 1.0 + close_mappings: + - prov:value + related_mappings: + - schema:ratingValue diff --git a/schemas/20251121/linkml/modules/slots/confidence_method.yaml b/schemas/20251121/linkml/modules/slots/confidence_method.yaml index de58aac729..454407ffdb 100644 --- a/schemas/20251121/linkml/modules/slots/confidence_method.yaml +++ b/schemas/20251121/linkml/modules/slots/confidence_method.yaml @@ -1,11 +1,11 @@ -# ConfidenceMeasure Slot: confidence_method -# Method used to determine confidence - id: https://nde.nl/ontology/hc/slot/confidence_method name: confidence_method_slot - slots: confidence_method: slot_uri: prov:hadPlan range: string - description: "Method used to determine confidence" + description: Method used to determine confidence + close_mappings: + - prov:wasGeneratedBy + broad_mappings: + - prov:wasGeneratedBy diff --git a/schemas/20251121/linkml/modules/slots/confidence_score.yaml b/schemas/20251121/linkml/modules/slots/confidence_score.yaml index dd8d2624cd..6f043d37a9 100644 --- a/schemas/20251121/linkml/modules/slots/confidence_score.yaml +++ b/schemas/20251121/linkml/modules/slots/confidence_score.yaml @@ -1,13 +1,13 @@ -# CustodianObservation Slot: confidence_score -# Confidence in observation accuracy - id: https://nde.nl/ontology/hc/slot/confidence_score name: confidence_score_slot - slots: confidence_score: slot_uri: prov:confidence range: float minimum_value: 0.0 maximum_value: 1.0 - description: "Confidence in observation accuracy (0.0 = uncertain, 1.0 = certain)" + description: Confidence in observation accuracy (0.0 = uncertain, 1.0 = certain) + related_mappings: + - prov:value + broad_mappings: + - prov:value diff --git a/schemas/20251121/linkml/modules/slots/confidence_value.yaml b/schemas/20251121/linkml/modules/slots/confidence_value.yaml index 5d51dd3143..6de112b42c 100644 --- a/schemas/20251121/linkml/modules/slots/confidence_value.yaml +++ b/schemas/20251121/linkml/modules/slots/confidence_value.yaml @@ -1,13 +1,13 @@ -# ConfidenceMeasure Slot: confidence_value -# Confidence score (0.0-1.0) - id: https://nde.nl/ontology/hc/slot/confidence_value name: confidence_value_slot - slots: confidence_value: slot_uri: rdf:value range: float minimum_value: 0.0 maximum_value: 1.0 - description: "Confidence score (0.0-1.0)" + description: Confidence score (0.0-1.0) + close_mappings: + - prov:value + broad_mappings: + - rdf:value diff --git a/schemas/20251121/linkml/modules/slots/conflict_status.yaml b/schemas/20251121/linkml/modules/slots/conflict_status.yaml index 64bd68b923..649042d044 100644 --- a/schemas/20251121/linkml/modules/slots/conflict_status.yaml +++ b/schemas/20251121/linkml/modules/slots/conflict_status.yaml @@ -1,128 +1,59 @@ -# Custodian Slot: conflict_status -# Links a heritage custodian to its conflict/disaster impact status - id: https://nde.nl/ontology/hc/slot/conflict_status name: conflict_status_slot title: Conflict Status Slot - imports: - - linkml:types - - ../classes/ConflictStatus - +- linkml:types +- ../classes/ConflictStatus prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ crm: http://www.cidoc-crm.org/cidoc-crm/ - slots: conflict_status: slot_uri: hc:hasConflictStatus range: ConflictStatus - description: | - Status of the heritage custodian regarding conflict or disaster impact. - - **PURPOSE**: - Documents whether a heritage institution has been affected by: - - Armed conflict (Gaza, Syria, Ukraine, Iraq, Yemen) - - Natural disasters (earthquakes, floods, fires) - - Deliberate destruction (heritage crimes, arson) - - State actions (forced demolition, closure) - - **WHEN TO USE**: - Use `conflict_status` when: - - Institution was destroyed or damaged involuntarily - - Destruction was due to external forces (not planned dissolution) - - There is documentary evidence (reports, news, official statements) - - **WHEN NOT TO USE**: - - Normal organizational dissolution → use `temporal_extent.end_of_the_end` - - Planned closure or merger → use `OrganizationalChangeEvent` - - Temporary closure (renovation, COVID) → use operational_status - - **RELATIONSHIP TO time_of_destruction**: - Both slots should be populated for destroyed/damaged institutions: - - ```yaml - # conflict_status: Summary with sources - conflict_status: - status: destroyed - date: "2023-12-08" - description: "Destroyed by airstrike" - sources: - - "LAP Gaza Report 2024" - - # time_of_destruction: Detailed TimeSpan with fuzzy bounds - time_of_destruction: - begin_of_the_begin: "2023-12-08" - end_of_the_end: "2023-12-08" - ``` - - **DATA PIPELINE**: - 1. `scripts/convert_palestinian_to_custodian.py` - Extracts conflict_status - 2. `scripts/load_custodians_to_ducklake.py` - Loads as JSON column - 3. `frontend/src/hooks/useDuckLakeInstitutions.ts` - Parses for display - 4. `frontend/src/components/map/CustodianTimeline.tsx` - Renders destruction event - - **FRONTEND DISPLAY**: - - Timeline shows "💥 Vernietigd: {year}" for destroyed institutions - - Timeline shows "💥 Vernietigd (herbouwend): {year}" when is_rebuilding=true - - Color: Dark red (#8b0000) for destroyed+defunct, orange for rebuilding - - Destruction description shown in expandable section - - **GAZA 2023-2024 STATISTICS**: - - 30 institutions with conflict_status in dataset - - All 30 have destruction dates - - 27 West Bank institutions without conflict_status (not destroyed) - - **EXAMPLE - Destroyed Library**: - ```yaml - custodian_name: - emic_name: Great Omari Mosque Library - conflict_status: - status: destroyed - date: "2023-12-08" - reported_date: "2024-01-15" - description: >- - Historic mosque library destroyed by Israeli airstrike. - Contained rare Islamic manuscripts and Quran collections. - is_rebuilding: false - sources: - - "Librarians and Archivists with Palestine - Gaza Report 2024" - - "Palestinian Ministry of Culture damage assessment" - ``` - + description: "Status of the heritage custodian regarding conflict or disaster impact.\n\n**PURPOSE**:\nDocuments whether\ + \ a heritage institution has been affected by:\n- Armed conflict (Gaza, Syria, Ukraine, Iraq, Yemen)\n- Natural disasters\ + \ (earthquakes, floods, fires)\n- Deliberate destruction (heritage crimes, arson)\n- State actions (forced demolition,\ + \ closure)\n\n**WHEN TO USE**:\nUse `conflict_status` when:\n- Institution was destroyed or damaged involuntarily\n\ + - Destruction was due to external forces (not planned dissolution)\n- There is documentary evidence (reports, news,\ + \ official statements)\n\n**WHEN NOT TO USE**:\n- Normal organizational dissolution → use `temporal_extent.end_of_the_end`\n\ + - Planned closure or merger → use `OrganizationalChangeEvent`\n- Temporary closure (renovation, COVID) → use operational_status\n\ + \n**RELATIONSHIP TO time_of_destruction**:\nBoth slots should be populated for destroyed/damaged institutions:\n\n```yaml\n\ + # conflict_status: Summary with sources\nconflict_status:\n status: destroyed\n date: \"2023-12-08\"\n description:\ + \ \"Destroyed by airstrike\"\n sources:\n - \"LAP Gaza Report 2024\"\n\n# time_of_destruction: Detailed TimeSpan\ + \ with fuzzy bounds\ntime_of_destruction:\n begin_of_the_begin: \"2023-12-08\"\n end_of_the_end: \"2023-12-08\"\n\ + ```\n\n**DATA PIPELINE**:\n1. `scripts/convert_palestinian_to_custodian.py` - Extracts conflict_status\n2. `scripts/load_custodians_to_ducklake.py`\ + \ - Loads as JSON column\n3. `frontend/src/hooks/useDuckLakeInstitutions.ts` - Parses for display\n4. `frontend/src/components/map/CustodianTimeline.tsx`\ + \ - Renders destruction event\n\n**FRONTEND DISPLAY**:\n- Timeline shows \"\U0001F4A5 Vernietigd: {year}\" for destroyed\ + \ institutions\n- Timeline shows \"\U0001F4A5 Vernietigd (herbouwend): {year}\" when is_rebuilding=true\n- Color: Dark\ + \ red (#8b0000) for destroyed+defunct, orange for rebuilding\n- Destruction description shown in expandable section\n\ + \n**GAZA 2023-2024 STATISTICS**:\n- 30 institutions with conflict_status in dataset\n- All 30 have destruction dates\n\ + - 27 West Bank institutions without conflict_status (not destroyed)\n\n**EXAMPLE - Destroyed Library**:\n```yaml\ncustodian_name:\n\ + \ emic_name: Great Omari Mosque Library\nconflict_status:\n status: destroyed\n date: \"2023-12-08\"\n reported_date:\ + \ \"2024-01-15\"\n description: >-\n Historic mosque library destroyed by Israeli airstrike.\n Contained rare\ + \ Islamic manuscripts and Quran collections.\n is_rebuilding: false\n sources:\n - \"Librarians and Archivists\ + \ with Palestine - Gaza Report 2024\"\n - \"Palestinian Ministry of Culture damage assessment\"\n```\n" exact_mappings: - - crm:P4_has_time-span + - crm:P4_has_time-span related_mappings: - - crm:E6_Destruction - - crm:E11_Modification - + - crm:E6_Destruction + - crm:E11_Modification + - schema:status examples: - - value: | - conflict_status: - status: destroyed - date: "2023-12-08" - description: "Destroyed by Israeli airstrike during Gaza conflict" - sources: - - "LAP Gaza Report 2024" - description: "Gaza library destroyed in December 2023" - - - value: | - conflict_status: - status: damaged - date: "2022-03-01" - is_rebuilding: true - description: "Damaged by shelling, currently under restoration" - sources: - - "UNESCO Ukraine heritage monitoring" - description: "Ukrainian museum damaged but rebuilding" - + - value: "conflict_status:\n status: destroyed\n date: \"2023-12-08\"\n description: \"Destroyed by Israeli airstrike\ + \ during Gaza conflict\"\n sources:\n - \"LAP Gaza Report 2024\"\n" + description: Gaza library destroyed in December 2023 + - value: "conflict_status:\n status: damaged\n date: \"2022-03-01\"\n is_rebuilding: true\n description: \"Damaged\ + \ by shelling, currently under restoration\"\n sources:\n - \"UNESCO Ukraine heritage monitoring\"\n" + description: Ukrainian museum damaged but rebuilding comments: - - "Used for Gaza 2023-2024 documentation (30 institutions)" - - "Complements time_of_destruction slot for temporal details" - - "Displayed in CustodianTimeline component" - + - Used for Gaza 2023-2024 documentation (30 institutions) + - Complements time_of_destruction slot for temporal details + - Displayed in CustodianTimeline component see_also: - - hc:time_of_destruction - - hc:ConflictStatus - - hc:ConflictStatusEnum + - hc:time_of_destruction + - hc:ConflictStatus + - hc:ConflictStatusEnum + broad_mappings: + - adms:status diff --git a/schemas/20251121/linkml/modules/slots/conservation_lab.yaml b/schemas/20251121/linkml/modules/slots/conservation_lab.yaml index 1cae0fde30..fb358a75f3 100644 --- a/schemas/20251121/linkml/modules/slots/conservation_lab.yaml +++ b/schemas/20251121/linkml/modules/slots/conservation_lab.yaml @@ -2,21 +2,19 @@ id: https://nde.nl/ontology/hc/slot/conservation_lab name: conservation_lab_slot title: Conservation Lab Slot description: Shared slot for conservation laboratory information across heritage custodian entities - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: conservation_lab: description: Conservation laboratory information (location, name, or boolean indicating presence) range: string slot_uri: schema:location comments: - - "Classes may override range in slot_usage (e.g., boolean for MuseumType)" + - Classes may override range in slot_usage (e.g., boolean for MuseumType) + related_mappings: + - schema:location diff --git a/schemas/20251121/linkml/modules/slots/contact.yaml b/schemas/20251121/linkml/modules/slots/contact.yaml index 03568aabe7..e7a8ade8c5 100644 --- a/schemas/20251121/linkml/modules/slots/contact.yaml +++ b/schemas/20251121/linkml/modules/slots/contact.yaml @@ -1,10 +1,8 @@ -# ReconstructionAgent Slot: contact -# Contact information for reconstruction agent - id: https://nde.nl/ontology/hc/slot/contact name: contact_slot - slots: contact: slot_uri: foaf:mbox range: string + exact_mappings: + - schema:contactPoint diff --git a/schemas/20251121/linkml/modules/slots/contact_email.yaml b/schemas/20251121/linkml/modules/slots/contact_email.yaml index 435e1a1dba..4dfc8a73cb 100644 --- a/schemas/20251121/linkml/modules/slots/contact_email.yaml +++ b/schemas/20251121/linkml/modules/slots/contact_email.yaml @@ -1,13 +1,16 @@ id: https://nde.nl/ontology/hc/slot/contact_email name: contact_email title: Contact Email - imports: - - linkml:types - +- linkml:types slots: contact_email: slot_uri: schema:email description: Professional contact email (if publicly available) range: string - pattern: "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$" + pattern: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ + exact_mappings: + - schema:email + - vcard:hasEmail + broad_mappings: + - schema:email diff --git a/schemas/20251121/linkml/modules/slots/contact_point.yaml b/schemas/20251121/linkml/modules/slots/contact_point.yaml index 0fdbab16db..f9a9f34b10 100644 --- a/schemas/20251121/linkml/modules/slots/contact_point.yaml +++ b/schemas/20251121/linkml/modules/slots/contact_point.yaml @@ -1,14 +1,15 @@ -# OrganizationalStructure Slot: contact_point id: https://nde.nl/ontology/hc/slot/contact_point name: contact_point_slot - slots: contact_point: slot_uri: schema:contactPoint range: string - description: | - Contact information for unit (email, phone, URL). + description: 'Contact information for unit (email, phone, URL). + Future: structure as vCard. + + ' exact_mappings: - - vcard:email - - vcard:hasTelephone + - vcard:email + - vcard:hasTelephone + - schema:contactPoint diff --git a/schemas/20251121/linkml/modules/slots/content_hash.yaml b/schemas/20251121/linkml/modules/slots/content_hash.yaml index 94c1789bde..7f3f7dec61 100644 --- a/schemas/20251121/linkml/modules/slots/content_hash.yaml +++ b/schemas/20251121/linkml/modules/slots/content_hash.yaml @@ -1,42 +1,46 @@ -# Slot: content_hash -# SHA-256 hash for content integrity verification - id: https://nde.nl/ontology/hc/slot/content_hash name: content_hash title: Content Hash - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ spdx: http://spdx.org/rdf/terms# - imports: - - linkml:types - +- linkml:types slots: content_hash: slot_uri: spdx:checksumValue - description: | - SHA-256 hash of content for integrity verification. - + description: 'SHA-256 hash of content for integrity verification. + + **PURPOSE**: + Enables verification that content has not changed since observation. + Used for deduplication and change detection. - + + **FORMAT OPTIONS**: + - SRI format: sha256-{base64_hash} (for web content) + - Hex format: {64_hex_chars} (for file content) - + + **USAGE**: + - WebObservation: Hash of retrieved HTML/content + - MissionStatement: Hash of statement text + - Any content requiring integrity verification + + ' range: string - exact_mappings: - - spdx:checksumValue - + - spdx:checksumValue + - dcat:checksum comments: - - "SHA-256 provides collision resistance for content verification" - - "SRI format preferred for web content (sha256-{base64})" - - "Hex format acceptable for file content" + - SHA-256 provides collision resistance for content verification + - SRI format preferred for web content (sha256-{base64}) + - Hex format acceptable for file content diff --git a/schemas/20251121/linkml/modules/slots/cost_usd.yaml b/schemas/20251121/linkml/modules/slots/cost_usd.yaml index dd1209e2bd..e49a63660a 100644 --- a/schemas/20251121/linkml/modules/slots/cost_usd.yaml +++ b/schemas/20251121/linkml/modules/slots/cost_usd.yaml @@ -1,22 +1,18 @@ -# Slot: cost_usd -# API cost in USD for operations - id: https://nde.nl/ontology/hc/slot/cost_usd name: cost_usd_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: cost_usd: - description: | - API cost in USD for an operation (LLM call, extraction, etc.). + description: 'API cost in USD for an operation (LLM call, extraction, etc.). + + ' slot_uri: schema:price range: float + close_mappings: + - schema:price diff --git a/schemas/20251121/linkml/modules/slots/country.yaml b/schemas/20251121/linkml/modules/slots/country.yaml index c8bc832323..e71bb0cdde 100644 --- a/schemas/20251121/linkml/modules/slots/country.yaml +++ b/schemas/20251121/linkml/modules/slots/country.yaml @@ -1,37 +1,48 @@ -# country slot - ISO 3166-1 country reference - id: https://nde.nl/ontology/hc/slot/country name: country title: Country Slot +description: 'Country where entity is located or operates. + -description: | - Country where entity is located or operates. - Links to Country class with ISO 3166-1 alpha-2 codes. - + + Format: ISO 3166-1 alpha-2 code (e.g., "NL", "DE", "JP") - + + Use when: + - Place is in a specific country + - Legal form is jurisdiction-specific + - Feature types are country-specific - + + Examples: + - Netherlands museum → country.alpha_2 = "NL" + - Japanese archive → country.alpha_2 = "JP" + - German foundation → country.alpha_2 = "DE" + ' slots: country: slot_uri: schema:addressCountry range: Country required: false multivalued: false - description: | - Country where entity is located or operates. + description: 'Country where entity is located or operates. + Links to Country class with ISO 3166-1 alpha-2 codes. + ' + exact_mappings: + - schema:addressCountry + - vcard:country-name comments: - - "Uses Country class with ISO 3166-1 alpha-2/alpha-3 codes" - - "ISO codes are authoritative, stable, and language-neutral" - - "Country names should be resolved via external services (GeoNames, UN M49)" +- Uses Country class with ISO 3166-1 alpha-2/alpha-3 codes +- ISO codes are authoritative, stable, and language-neutral +- Country names should be resolved via external services (GeoNames, UN M49) diff --git a/schemas/20251121/linkml/modules/slots/created.yaml b/schemas/20251121/linkml/modules/slots/created.yaml index 5133d2445d..8ae149ab8a 100644 --- a/schemas/20251121/linkml/modules/slots/created.yaml +++ b/schemas/20251121/linkml/modules/slots/created.yaml @@ -1,14 +1,16 @@ -# Base Slot: created -# Database record creation timestamp - id: https://nde.nl/ontology/hc/slot/created name: created_slot - slots: created: slot_uri: schema:dateCreated range: datetime - description: | - Timestamp when this database record was created. - IMPORTANT: This is NOT the custodian's founding date - it's metadata about the digital record. + description: 'Timestamp when this database record was created. + + IMPORTANT: This is NOT the custodian''s founding date - it''s metadata about the digital record. + Use CustodianLegalStatus.registration_date for entity founding date. + + ' + exact_mappings: + - dcterms:created + - schema:dateCreated diff --git a/schemas/20251121/linkml/modules/slots/creator.yaml b/schemas/20251121/linkml/modules/slots/creator.yaml index 730d38ff1d..187569400a 100644 --- a/schemas/20251121/linkml/modules/slots/creator.yaml +++ b/schemas/20251121/linkml/modules/slots/creator.yaml @@ -1,24 +1,18 @@ -# Slot: creator -# Creator or author of a resource - id: https://nde.nl/ontology/hc/slot/creator name: creator_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: creator: slot_uri: dcterms:creator range: string multivalued: true - description: >- - Person or organization responsible for creating the resource. - Uses Dublin Core Terms vocabulary. + description: Person or organization responsible for creating the resource. Uses Dublin Core Terms vocabulary. + exact_mappings: + - dcterms:creator + - schema:creator diff --git a/schemas/20251121/linkml/modules/slots/css_selector.yaml b/schemas/20251121/linkml/modules/slots/css_selector.yaml index dba42c737d..8a6aafe63a 100644 --- a/schemas/20251121/linkml/modules/slots/css_selector.yaml +++ b/schemas/20251121/linkml/modules/slots/css_selector.yaml @@ -1,22 +1,15 @@ -# Slot: css_selector -# CSS selector pointing to element in HTML - id: https://nde.nl/ontology/hc/slot/css_selector name: css_selector_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: css_selector: - description: >- - CSS selector pointing to the element in HTML. - Alternative to xpath for element identification. + description: CSS selector pointing to the element in HTML. Alternative to xpath for element identification. slot_uri: hc:cssSelector range: string + related_mappings: + - prov:atLocation diff --git a/schemas/20251121/linkml/modules/slots/curation_activities.yaml b/schemas/20251121/linkml/modules/slots/curation_activities.yaml new file mode 100644 index 0000000000..d838453753 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/curation_activities.yaml @@ -0,0 +1,28 @@ +id: https://nde.nl/ontology/hc/slot/curation_activities +name: curation_activities +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + crm: http://www.cidoc-crm.org/cidoc-crm/ +slots: + curation_activities: + slot_uri: crm:P147i_was_curated_by + description: 'Ongoing curation activities performed on this collection. + + + CIDOC-CRM: P147i_was_curated_by for curation relationships. + + + Links collection to digitization projects, conservation efforts, + + cataloging initiatives, and other curation work. + + ' + range: CurationActivity + multivalued: true + required: false + examples: + - value: https://nde.nl/ontology/hc/activity/voc-digitization-2020 + description: VOC digitization project + close_mappings: + - prov:Activity diff --git a/schemas/20251121/linkml/modules/slots/custodial_history.yaml b/schemas/20251121/linkml/modules/slots/custodial_history.yaml new file mode 100644 index 0000000000..5764125a50 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/custodial_history.yaml @@ -0,0 +1,26 @@ +id: https://nde.nl/ontology/hc/slot/custodial_history +name: custodial_history +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + custodial_history: + slot_uri: rico:history + description: 'Chain of custody documentation. + + + RiC-O: history for custodial events. + + + Records transfers, ownership changes, and custody events. + + ' + range: string + multivalued: true + required: false + examples: + - value: Transferred from VOC to Dutch state in 1799 + description: Custody transfer event + exact_mappings: + - dcterms:provenance diff --git a/schemas/20251121/linkml/modules/slots/custodian_names.yaml b/schemas/20251121/linkml/modules/slots/custodian_names.yaml index 3d48d9938e..81ccf536d6 100644 --- a/schemas/20251121/linkml/modules/slots/custodian_names.yaml +++ b/schemas/20251121/linkml/modules/slots/custodian_names.yaml @@ -1,14 +1,12 @@ -# custodian_names slot -# Links Container to CustodianName entities - id: https://nde.nl/ontology/hc/slot/custodian_names name: custodian_names - slots: custodian_names: slot_uri: rdfs:member - description: "Collection of custodian standardized names in the container" + description: Collection of custodian standardized names in the container range: CustodianName multivalued: true exact_mappings: - - ldp:contains + - ldp:contains + close_mappings: + - skos:prefLabel diff --git a/schemas/20251121/linkml/modules/slots/custodian_observations.yaml b/schemas/20251121/linkml/modules/slots/custodian_observations.yaml index 189825e186..a78cc7a80d 100644 --- a/schemas/20251121/linkml/modules/slots/custodian_observations.yaml +++ b/schemas/20251121/linkml/modules/slots/custodian_observations.yaml @@ -1,14 +1,14 @@ -# custodian_observations slot -# Links Container to CustodianObservation entities - id: https://nde.nl/ontology/hc/slot/custodian_observations name: custodian_observations - slots: custodian_observations: slot_uri: rdfs:member - description: "Collection of custodian observations in the container" + description: Collection of custodian observations in the container range: CustodianObservation multivalued: true exact_mappings: - - ldp:contains + - ldp:contains + related_mappings: + - prov:Entity + broad_mappings: + - prov:Entity diff --git a/schemas/20251121/linkml/modules/slots/custodian_type.yaml b/schemas/20251121/linkml/modules/slots/custodian_type.yaml index dd61bfd4f5..e5d17e507b 100644 --- a/schemas/20251121/linkml/modules/slots/custodian_type.yaml +++ b/schemas/20251121/linkml/modules/slots/custodian_type.yaml @@ -1,195 +1,89 @@ id: https://nde.nl/ontology/hc/slot/custodian_type name: custodian_type title: Custodian Type Classification - imports: - - linkml:types - - ../classes/CustodianType - -description: | - The organizational type classification of a heritage custodian within the - GLAMORCUBESFIXPHDNT taxonomy (19 categories). - - **Three-Layer Ontology Alignment**: - - 1. **W3C Organization Ontology** (PRIMARY): - - `org:classification` - Standard property for organizational taxonomies - - Domain: org:Organization - - Range: skos:Concept - - Definition: "Indicates a classification for this Organization within some - classification scheme. Extension vocabularies may wish to specialize this - property to have a range corresponding to a specific skos:ConceptScheme." - - Source: `/data/ontology/org.rdf` - - 2. **CIDOC-CRM** (DOMAIN-SPECIFIC): - - `crm:P2_has_type` - Cultural heritage domain type assignment - - Domain: crm:E1_CRM_Entity - - Range: crm:E55_Type - - Definition: "This property allows sub typing of CRM entities through the - use of a terminological hierarchy or thesaurus." - - Source: `/data/ontology/CIDOC_CRM_v7.1.3.rdf` - - 3. **Schema.org** (WEB DISCOVERABILITY): - - `schema:additionalType` - Wikidata entity linking - - Range: schema:URL - - Definition: "An additional type for the item, typically used for adding - more specific types from external vocabularies." - - Source: `/data/ontology/schemaorg.owl` - - **Why org:classification is Primary**: - - ✅ Standard W3C vocabulary widely adopted in public sector - - ✅ SKOS-based with taxonomic hierarchies (skos:broader, skos:narrower) - - ✅ Extension-friendly for domain-specific classification schemes - - ✅ Already used in heritage sector (ROV uses rov:orgType as subproperty) - - ✅ More semantically precise than crm:P2_has_type (which applies to ALL CRM entities) - - **Why crm:P2_has_type is Secondary**: - - Used for cultural heritage domain modeling alignment - - Supports E17_Type_Assignment for provenance of classification - - Broader scope (applies to E1_CRM_Entity, not just organizations) - - **Why schema:additionalType is Tertiary**: - - Enables web discoverability and SEO optimization - - Links to Wikidata Q-numbers for Linked Open Data integration - - Supports multiple simultaneous type assertions - - **GLAMORCUBESFIXPHDNT Taxonomy (19 Types)**: - - **G** - GALLERY: Art gallery or exhibition space - - **L** - LIBRARY: Library (public, academic, specialized) - - **A** - ARCHIVE: Archive (government, corporate, personal) - - **M** - MUSEUM: Museum (art, history, science, etc.) - - **O** - OFFICIAL_INSTITUTION: Government heritage agencies - - **R** - RESEARCH_CENTER: Research institutes and documentation centers - - **C** - COMMERCIAL: Corporate heritage collections - - **U** - UNSPECIFIED: Institution type unknown (data quality flag) - - **B** - BIO_CUSTODIAN: Botanical gardens, zoos, aquariums - - **E** - EDUCATION_PROVIDER: Universities, schools with collections - - **S** - HERITAGE_SOCIETY: Historical societies, collecting societies - - **F** - FEATURE_CUSTODIAN: Geographic features AS custodians (special case) - - **I** - INTANGIBLE_HERITAGE_GROUP: Folklore, oral history organizations - - **X** - MIXED: Multiple simultaneous types - - **P** - PERSONAL_COLLECTION: Private collectors - - **H** - HOLY_SACRED_SITE: Religious sites with heritage collections - - **D** - DIGITAL_PLATFORM: Online archives, digital libraries - - **N** - NON_PROFIT: NGOs, heritage advocacy organizations - - **T** - TASTE_SCENT_HERITAGE: Culinary, olfactory heritage preservation - - **RDF Serialization Example**: - ```turtle - :Custodian_Rijksmuseum - org:classification :MuseumType_ArtMuseum_Q207694 . - - :MuseumType_ArtMuseum_Q207694 - a glamtype:MuseumType, crm:E55_Type, skos:Concept ; - skos:prefLabel "Art Museum"@en, "kunstmuseum"@nl ; - skos:broader :MuseumType_Q33506 ; # Museum (general) - schema:additionalType ; - glamtype:wikidata_entity "Q207694" . - ``` - - **Relationship to CustodianLegalStatus**: - - custodian_type (on Custodian): OPERATIONAL type classification - (how the organization functions in the heritage ecosystem) - - legal_form (on CustodianLegalStatus): LEGAL registration type - (ISO 20275 codes: foundation, association, corporation, government agency) - - **Example - Dutch Foundation Operating Art Museum**: - ```yaml - Custodian: - hc_id: "https://nde.nl/ontology/hc/nl-nh-ams-m-sm-q621531" - custodian_type: # OPERATIONAL classification - type_id: "https://nde.nl/ontology/hc/type/museum/Q207694" - primary_type: MUSEUM - wikidata_entity: Q207694 # Art museum - legal_status: # LEGAL registration - legal_form: - form_id: ISO_20275_8102 # Stichting (foundation) - ``` - - **Special Case - FEATURE_CUSTODIAN**: - This is the ONLY CustodianType that ALSO links to FeaturePlace. Used when the - heritage custodian IS a geographic feature (e.g., historic mansion as museum). - ```yaml - Custodian: - custodian_type: - primary_type: FEATURE_CUSTODIAN - wikidata_entity: Q1802963 # Mansion - place_designation: - custodian_place: - id: ".../place/mansion-site" - a: FeaturePlace - place_type: MANSION # From FeaturePlaceTypeEnum - ``` - - **Data Population Strategy**: - Enum values extracted from: - - `data/wikidata/GLAMORCUBEPSXHFN/hyponyms_curated_full.yaml` - - 2,455+ Wikidata entities with multilingual labels - - Hierarchical relationships (broader/narrower concepts) - - Geographic restrictions (country-specific types) - +- linkml:types +- ../classes/CustodianType +description: "The organizational type classification of a heritage custodian within the \nGLAMORCUBESFIXPHDNT taxonomy (19\ + \ categories).\n\n**Three-Layer Ontology Alignment**:\n\n1. **W3C Organization Ontology** (PRIMARY):\n - `org:classification`\ + \ - Standard property for organizational taxonomies\n - Domain: org:Organization\n - Range: skos:Concept\n - Definition:\ + \ \"Indicates a classification for this Organization within some \n classification scheme. Extension vocabularies may\ + \ wish to specialize this \n property to have a range corresponding to a specific skos:ConceptScheme.\"\n - Source:\ + \ `/data/ontology/org.rdf`\n\n2. **CIDOC-CRM** (DOMAIN-SPECIFIC):\n - `crm:P2_has_type` - Cultural heritage domain type\ + \ assignment\n - Domain: crm:E1_CRM_Entity\n - Range: crm:E55_Type\n - Definition: \"This property allows sub typing\ + \ of CRM entities through the \n use of a terminological hierarchy or thesaurus.\"\n - Source: `/data/ontology/CIDOC_CRM_v7.1.3.rdf`\n\ + \n3. **Schema.org** (WEB DISCOVERABILITY):\n - `schema:additionalType` - Wikidata entity linking\n - Range: schema:URL\n\ + \ - Definition: \"An additional type for the item, typically used for adding \n more specific types from external\ + \ vocabularies.\"\n - Source: `/data/ontology/schemaorg.owl`\n\n**Why org:classification is Primary**:\n- ✅ Standard W3C\ + \ vocabulary widely adopted in public sector\n- ✅ SKOS-based with taxonomic hierarchies (skos:broader, skos:narrower)\n\ + - ✅ Extension-friendly for domain-specific classification schemes\n- ✅ Already used in heritage sector (ROV uses rov:orgType\ + \ as subproperty)\n- ✅ More semantically precise than crm:P2_has_type (which applies to ALL CRM entities)\n\n**Why crm:P2_has_type\ + \ is Secondary**:\n- Used for cultural heritage domain modeling alignment\n- Supports E17_Type_Assignment for provenance\ + \ of classification\n- Broader scope (applies to E1_CRM_Entity, not just organizations)\n\n**Why schema:additionalType is\ + \ Tertiary**:\n- Enables web discoverability and SEO optimization\n- Links to Wikidata Q-numbers for Linked Open Data integration\n\ + - Supports multiple simultaneous type assertions\n\n**GLAMORCUBESFIXPHDNT Taxonomy (19 Types)**:\n- **G** - GALLERY: Art\ + \ gallery or exhibition space\n- **L** - LIBRARY: Library (public, academic, specialized)\n- **A** - ARCHIVE: Archive (government,\ + \ corporate, personal)\n- **M** - MUSEUM: Museum (art, history, science, etc.)\n- **O** - OFFICIAL_INSTITUTION: Government\ + \ heritage agencies\n- **R** - RESEARCH_CENTER: Research institutes and documentation centers\n- **C** - COMMERCIAL: Corporate\ + \ heritage collections\n- **U** - UNSPECIFIED: Institution type unknown (data quality flag)\n- **B** - BIO_CUSTODIAN: Botanical\ + \ gardens, zoos, aquariums\n- **E** - EDUCATION_PROVIDER: Universities, schools with collections\n- **S** - HERITAGE_SOCIETY:\ + \ Historical societies, collecting societies\n- **F** - FEATURE_CUSTODIAN: Geographic features AS custodians (special case)\n\ + - **I** - INTANGIBLE_HERITAGE_GROUP: Folklore, oral history organizations\n- **X** - MIXED: Multiple simultaneous types\n\ + - **P** - PERSONAL_COLLECTION: Private collectors\n- **H** - HOLY_SACRED_SITE: Religious sites with heritage collections\n\ + - **D** - DIGITAL_PLATFORM: Online archives, digital libraries\n- **N** - NON_PROFIT: NGOs, heritage advocacy organizations\n\ + - **T** - TASTE_SCENT_HERITAGE: Culinary, olfactory heritage preservation\n\n**RDF Serialization Example**:\n```turtle\n\ + :Custodian_Rijksmuseum\n org:classification :MuseumType_ArtMuseum_Q207694 .\n\n:MuseumType_ArtMuseum_Q207694\n a glamtype:MuseumType,\ + \ crm:E55_Type, skos:Concept ;\n skos:prefLabel \"Art Museum\"@en, \"kunstmuseum\"@nl ;\n skos:broader :MuseumType_Q33506\ + \ ; # Museum (general)\n schema:additionalType ;\n glamtype:wikidata_entity\ + \ \"Q207694\" .\n```\n\n**Relationship to CustodianLegalStatus**:\n- custodian_type (on Custodian): OPERATIONAL type classification\n\ + \ (how the organization functions in the heritage ecosystem)\n- legal_form (on CustodianLegalStatus): LEGAL registration\ + \ type\n (ISO 20275 codes: foundation, association, corporation, government agency)\n\n**Example - Dutch Foundation Operating\ + \ Art Museum**:\n```yaml\nCustodian:\n hc_id: \"https://nde.nl/ontology/hc/nl-nh-ams-m-sm-q621531\"\n custodian_type:\ + \ # OPERATIONAL classification\n type_id: \"https://nde.nl/ontology/hc/type/museum/Q207694\"\n primary_type: MUSEUM\n\ + \ wikidata_entity: Q207694 # Art museum\n legal_status: # LEGAL registration\n legal_form:\n form_id: ISO_20275_8102\ + \ # Stichting (foundation)\n```\n\n**Special Case - FEATURE_CUSTODIAN**:\nThis is the ONLY CustodianType that ALSO links\ + \ to FeaturePlace. Used when the\nheritage custodian IS a geographic feature (e.g., historic mansion as museum).\n```yaml\n\ + Custodian:\n custodian_type:\n primary_type: FEATURE_CUSTODIAN\n wikidata_entity: Q1802963 # Mansion\n place_designation:\n\ + \ custodian_place:\n id: \".../place/mansion-site\"\n a: FeaturePlace\n place_type: MANSION # From FeaturePlaceTypeEnum\n\ + ```\n\n**Data Population Strategy**:\nEnum values extracted from:\n- `data/wikidata/GLAMORCUBEPSXHFN/hyponyms_curated_full.yaml`\n\ + - 2,455+ Wikidata entities with multilingual labels\n- Hierarchical relationships (broader/narrower concepts)\n- Geographic\ + \ restrictions (country-specific types)\n" slots: custodian_type: slot_uri: org:classification - description: | - The organizational type classification of this custodian within the - GLAMORCUBESFIXPHDNT taxonomy. - - W3C ORG: org:classification links org:Organization → skos:Concept. - - References a CustodianType instance (or subclass: ArchiveOrganizationType, - MuseumType, LibraryType, GalleryType, etc.) which provides: - - Wikidata Q-number linking (schema:additionalType) - - Multilingual labels (skos:prefLabel, skos:altLabel) - - Hierarchical relationships (skos:broader, skos:narrower) - - Geographic restrictions (applicable_countries) - - **GHCID Code Derivation**: - The single-letter GLAMORCUBESFIXPHDNT code for GHCID generation is derived - from the CustodianType subclass name: - - ArchiveOrganizationType → A - - BioCustodianType → B - - CommercialOrganizationType → C - - DigitalPlatformType → D - - EducationProviderType → E - - FeatureCustodianType → F - - GalleryType → G - - HolySacredSiteType → H - - IntangibleHeritageGroupType → I - - LibraryType → L - - MuseumType → M - - NonProfitType → N - - OfficialInstitutionType → O - - PersonalCollectionType → P - - ResearchOrganizationType → R - - HeritageSocietyType → S - - TasteScentHeritageType → T - - UnspecifiedType → U - - MixedCustodianType → X - - **Migration Note** (2026-01-05): - Previously used CustodianPrimaryTypeEnum (19 string values). - Enum archived per Rule 9 (Enum-to-Class Promotion). - See: schemas/20251121/linkml/archive/enums/CustodianPrimaryTypeEnum.yaml.archived_20260105 + description: "The organizational type classification of this custodian within the \nGLAMORCUBESFIXPHDNT taxonomy.\n\n\ + W3C ORG: org:classification links org:Organization → skos:Concept.\n\nReferences a CustodianType instance (or subclass:\ + \ ArchiveOrganizationType, \nMuseumType, LibraryType, GalleryType, etc.) which provides:\n- Wikidata Q-number linking\ + \ (schema:additionalType)\n- Multilingual labels (skos:prefLabel, skos:altLabel)\n- Hierarchical relationships (skos:broader,\ + \ skos:narrower)\n- Geographic restrictions (applicable_countries)\n\n**GHCID Code Derivation**:\nThe single-letter\ + \ GLAMORCUBESFIXPHDNT code for GHCID generation is derived\nfrom the CustodianType subclass name:\n- ArchiveOrganizationType\ + \ → A\n- BioCustodianType → B\n- CommercialOrganizationType → C\n- DigitalPlatformType → D\n- EducationProviderType\ + \ → E\n- FeatureCustodianType → F\n- GalleryType → G\n- HolySacredSiteType → H\n- IntangibleHeritageGroupType → I\n\ + - LibraryType → L\n- MuseumType → M\n- NonProfitType → N\n- OfficialInstitutionType → O\n- PersonalCollectionType →\ + \ P\n- ResearchOrganizationType → R\n- HeritageSocietyType → S\n- TasteScentHeritageType → T\n- UnspecifiedType → U\n\ + - MixedCustodianType → X\n\n**Migration Note** (2026-01-05):\nPreviously used CustodianPrimaryTypeEnum (19 string values).\n\ + Enum archived per Rule 9 (Enum-to-Class Promotion).\nSee: schemas/20251121/linkml/archive/enums/CustodianPrimaryTypeEnum.yaml.archived_20260105\n" range: CustodianType required: false multivalued: false exact_mappings: - - org:classification + - org:classification close_mappings: - - crm:P2_has_type - - schema:additionalType + - crm:P2_has_type + - schema:additionalType comments: - - "Primary ontology alignment: org:classification (W3C Organization Ontology)" - - "Secondary alignment: crm:P2_has_type (CIDOC-CRM cultural heritage)" - - "Tertiary alignment: schema:additionalType (web discoverability)" - - "Range changed from CustodianPrimaryTypeEnum to CustodianType class (2026-01-05)" - - "GHCID single-letter codes derived from CustodianType subclass names" - - "Distinct from legal_form (ISO 20275): operational vs. legal classification" + - 'Primary ontology alignment: org:classification (W3C Organization Ontology)' + - 'Secondary alignment: crm:P2_has_type (CIDOC-CRM cultural heritage)' + - 'Tertiary alignment: schema:additionalType (web discoverability)' + - Range changed from CustodianPrimaryTypeEnum to CustodianType class (2026-01-05) + - GHCID single-letter codes derived from CustodianType subclass names + - 'Distinct from legal_form (ISO 20275): operational vs. legal classification' examples: - - value: "https://nde.nl/ontology/hc/type/museum/Q207694" - description: "Art Museum type classification (MuseumType subclass)" - - value: "https://nde.nl/ontology/hc/type/archive/Q166118" - description: "Archive type classification (ArchiveOrganizationType)" - - value: "https://nde.nl/ontology/hc/type/library/Q7075" - description: "Library type classification (LibraryType)" + - value: https://nde.nl/ontology/hc/type/museum/Q207694 + description: Art Museum type classification (MuseumType subclass) + - value: https://nde.nl/ontology/hc/type/archive/Q166118 + description: Archive type classification (ArchiveOrganizationType) + - value: https://nde.nl/ontology/hc/type/library/Q7075 + description: Library type classification (LibraryType) + broad_mappings: + - dcterms:type diff --git a/schemas/20251121/linkml/modules/slots/custodians.yaml b/schemas/20251121/linkml/modules/slots/custodians.yaml index d48b81fe39..b4a1bd4024 100644 --- a/schemas/20251121/linkml/modules/slots/custodians.yaml +++ b/schemas/20251121/linkml/modules/slots/custodians.yaml @@ -1,14 +1,12 @@ -# custodians slot -# Links Container to Custodian entities - id: https://nde.nl/ontology/hc/slot/custodians name: custodians - slots: custodians: slot_uri: rdfs:member - description: "Collection of custodian hub entities in the container" + description: Collection of custodian hub entities in the container range: Custodian multivalued: true exact_mappings: - - ldp:contains + - ldp:contains + close_mappings: + - schema:organization diff --git a/schemas/20251121/linkml/modules/slots/data_license_policy.yaml b/schemas/20251121/linkml/modules/slots/data_license_policy.yaml index a49bb9e001..d293c7ebe6 100644 --- a/schemas/20251121/linkml/modules/slots/data_license_policy.yaml +++ b/schemas/20251121/linkml/modules/slots/data_license_policy.yaml @@ -1,28 +1,31 @@ -# Global Slot: data_license_policy -# Links an organization to its data licensing and openness policy - id: https://nde.nl/ontology/hc/slot/data_license_policy name: data_license_policy_slot - imports: - - ../classes/DataLicensePolicy - +- ../classes/DataLicensePolicy prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ odrl: http://www.w3.org/ns/odrl/2/ - default_prefix: hc - slots: data_license_policy: slot_uri: odrl:hasPolicy range: DataLicensePolicy - description: | - The organization's data licensing and openness policy. - + description: 'The organization''s data licensing and openness policy. + + Links to DataLicensePolicy which defines: + - Default license (CC0, CC-BY, proprietary, etc.) + - Service-specific licenses (if different services have different licenses) + - Openness stance (STRONG_OPEN_ADVOCATE, MIXED_POLICY, FULLY_PROPRIETARY) + - Advocacy activities (participation in open data initiatives) + + ' + close_mappings: + - dcterms:license + broad_mappings: + - dcterms:rights diff --git a/schemas/20251121/linkml/modules/slots/data_service_endpoints.yaml b/schemas/20251121/linkml/modules/slots/data_service_endpoints.yaml index 6715eaa324..31cd6111fb 100644 --- a/schemas/20251121/linkml/modules/slots/data_service_endpoints.yaml +++ b/schemas/20251121/linkml/modules/slots/data_service_endpoints.yaml @@ -1,24 +1,20 @@ -# Slot: data_service_endpoints -# Data service endpoints exposed by a digital platform - id: https://nde.nl/ontology/hc/slot/data_service_endpoints name: data_service_endpoints_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcat: http://www.w3.org/ns/dcat# - imports: - - linkml:types - +- linkml:types default_range: string - slots: data_service_endpoints: slot_uri: dcat:servesDataset range: DataServiceEndpoint multivalued: true inlined_as_list: true - description: >- - Data service endpoints exposed by this digital platform (APIs, SPARQL endpoints, etc.). + description: Data service endpoints exposed by this digital platform (APIs, SPARQL endpoints, etc.). + close_mappings: + - dcat:endpointURL + broad_mappings: + - dcat:endpointURL diff --git a/schemas/20251121/linkml/modules/slots/date.yaml b/schemas/20251121/linkml/modules/slots/date.yaml index bcc1b1a40a..f42844f2c2 100644 --- a/schemas/20251121/linkml/modules/slots/date.yaml +++ b/schemas/20251121/linkml/modules/slots/date.yaml @@ -1,28 +1,21 @@ -# Slot: date_value -# Generic date value for a resource or event -# RENAMED from 'date' to avoid collision with built-in 'date' type - id: https://nde.nl/ontology/hc/slot/date_value name: date_value_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: date_value: slot_uri: dcterms:date range: date - description: >- - Date value for a resource or event. - ISO 8601 format (YYYY-MM-DD). + description: Date value for a resource or event. ISO 8601 format (YYYY-MM-DD). comments: - - "Renamed from 'date' to 'date_value' to avoid collision with built-in date type" + - Renamed from 'date' to 'date_value' to avoid collision with built-in date type aliases: - - date + - date + broad_mappings: + - rdf:value + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/date_of_death.yaml b/schemas/20251121/linkml/modules/slots/date_of_death.yaml index a55cd098a1..b214273f43 100644 --- a/schemas/20251121/linkml/modules/slots/date_of_death.yaml +++ b/schemas/20251121/linkml/modules/slots/date_of_death.yaml @@ -1,64 +1,37 @@ -# Date of Death Slot -# TimeSpan representing when a staff member died, with fuzzy temporal bounds - id: https://nde.nl/ontology/hc/slot/date_of_death name: date_of_death_slot title: Date of Death Slot - prefixes: schema: http://schema.org/ crm: http://www.cidoc-crm.org/cidoc-crm/ wd: http://www.wikidata.org/entity/ - imports: - - linkml:types - - ../metadata - - ../classes/TimeSpan - +- linkml:types +- ../metadata +- ../classes/TimeSpan slots: date_of_death: slot_uri: schema:deathDate - description: | - TimeSpan representing when this staff member died. - - Uses CIDOC-CRM E52_Time-Span pattern to handle uncertainty in death dates, - which is particularly important for: - - Deaths during armed conflict (exact date may be unknown) - - Historical figures (approximate dates only) - - Mass casualty events (date ranges) - - **TimeSpan Properties**: - - `begin_of_the_begin`: Earliest possible death date - - `end_of_the_begin`: Latest possible start of death period - - `begin_of_the_end`: Earliest possible end of death period - - `end_of_the_end`: Latest possible death date - - **Known Date Example** (precise): - ```yaml - date_of_death: - begin_of_the_begin: "2023-11-19T00:00:00Z" - end_of_the_end: "2023-11-19T23:59:59Z" - ``` - - **Unknown Date Example** (range): - ```yaml - date_of_death: - begin_of_the_begin: "2023-10-07T00:00:00Z" - end_of_the_end: "2024-12-31T23:59:59Z" - # Death occurred sometime during Gaza conflict, exact date unknown - ``` - - **Required Context**: - Only populate when `deceased: true`. May be combined with: - - `martyred: true` if death was due to conflict/persecution - - `circumstances_of_death` string describing the event + description: "TimeSpan representing when this staff member died.\n\nUses CIDOC-CRM E52_Time-Span pattern to handle uncertainty\ + \ in death dates,\nwhich is particularly important for:\n- Deaths during armed conflict (exact date may be unknown)\n\ + - Historical figures (approximate dates only)\n- Mass casualty events (date ranges)\n\n**TimeSpan Properties**:\n- `begin_of_the_begin`:\ + \ Earliest possible death date\n- `end_of_the_begin`: Latest possible start of death period\n- `begin_of_the_end`: Earliest\ + \ possible end of death period\n- `end_of_the_end`: Latest possible death date\n\n**Known Date Example** (precise):\n\ + ```yaml\ndate_of_death:\n begin_of_the_begin: \"2023-11-19T00:00:00Z\"\n end_of_the_end: \"2023-11-19T23:59:59Z\"\n\ + ```\n\n**Unknown Date Example** (range):\n```yaml\ndate_of_death:\n begin_of_the_begin: \"2023-10-07T00:00:00Z\"\n\ + \ end_of_the_end: \"2024-12-31T23:59:59Z\"\n # Death occurred sometime during Gaza conflict, exact date unknown\n\ + ```\n\n**Required Context**:\nOnly populate when `deceased: true`. May be combined with:\n- `martyred: true` if death\ + \ was due to conflict/persecution\n- `circumstances_of_death` string describing the event\n" range: TimeSpan inlined: true required: false exact_mappings: - - schema:deathDate - - wikidata:P570 + - schema:deathDate + - wikidata:P570 comments: - - "Only populate when deceased is true" - - "Use TimeSpan to handle date uncertainty" - - "Combine with circumstances_of_death for context" + - Only populate when deceased is true + - Use TimeSpan to handle date uncertainty + - Combine with circumstances_of_death for context + broad_mappings: + - dcterms:date + - dcterms:relation diff --git a/schemas/20251121/linkml/modules/slots/death_place.yaml b/schemas/20251121/linkml/modules/slots/death_place.yaml index 301973f413..0a0caf2acb 100644 --- a/schemas/20251121/linkml/modules/slots/death_place.yaml +++ b/schemas/20251121/linkml/modules/slots/death_place.yaml @@ -1,129 +1,190 @@ -# Death Place Slot -# String or URI representing where a person died -# -# PiCo Pattern: Allows both literal place names and URIs for thesaurus linking -# (GeoNames, Wikidata, etc.) - id: https://nde.nl/ontology/hc/slot/death_place name: death_place_slot title: Death Place Slot - prefixes: sdo: https://schema.org/ pico: https://personsincontext.org/model# crm: http://www.cidoc-crm.org/cidoc-crm/ wd: http://www.wikidata.org/entity/ geonames: http://sws.geonames.org/ - imports: - - linkml:types - +- linkml:types slots: death_place: slot_uri: sdo:deathPlace - description: | - The place where a person died. - + description: 'The place where a person died. + + =========================================================================== + PiCo ONTOLOGY ALIGNMENT (pico.ttl lines 436-447) + =========================================================================== - + + Per PiCo (Persons in Context) ontology, death places can be recorded as: + - **xsd:string**: Literal place name as mentioned in source + - **xsd:anyURI**: Link to geographic thesaurus (GeoNames, Wikidata) - + + Both formats may be used together: + - Literal: Preserves original source notation + - URI: Enables geographic linking and reconciliation - + + =========================================================================== + THESAURUS LINKING + =========================================================================== - + + Preferably link to established geographic thesauri: - + + **GeoNames** (preferred for geographic entities): + - Format: http://sws.geonames.org/{geonames_id}/ + - Example: http://sws.geonames.org/2759794/ (Amsterdam) - + + **Wikidata** (preferred for historical places): + - Format: http://www.wikidata.org/entity/Q{number} + - Example: http://www.wikidata.org/entity/Q727 (Amsterdam) - + + =========================================================================== + SPECIAL CASES + =========================================================================== - + + **Conflict zones**: + - Place may be approximate: "Gaza Strip" rather than specific city + - Multiple possible locations: "somewhere in Auschwitz complex" - + + **At sea / in transit**: + - "At sea, North Atlantic Ocean" + - "En route between Amsterdam and Batavia" - + + **Unknown location**: + - If deceased is true but place unknown, leave death_place empty + - Use circumstances_of_death to document known context - + + **Historical places**: + - Use Wikidata for places that no longer exist + - Document modern equivalent if applicable - + + =========================================================================== + EXAMPLES + =========================================================================== - + + Literal place name only: + ```yaml + death_place: "Auschwitz concentration camp, Poland" + ``` - + + URI to Wikidata: + ```yaml + death_place: "http://www.wikidata.org/entity/Q7341" # Auschwitz + ``` - + + Approximate location (conflict zone): + ```yaml + death_place: "Gaza Strip, Palestinian Territories" + death_place_uri: "http://www.wikidata.org/entity/Q39760" + ``` - + + Historical place: + ```yaml + death_place: "Batavia, Dutch East Indies" + death_place_uri: "http://www.wikidata.org/entity/Q3630" # Now Jakarta + ``` - + + =========================================================================== + RELATIONSHIP TO OTHER DEATH SLOTS + =========================================================================== - + + death_place works together with: + - `deceased`: Boolean flag (true if person has died) + - `date_of_death`: TimeSpan for when death occurred + - `circumstances_of_death`: Description of how/why death occurred + - `martyred`: Boolean if death due to conflict/persecution - + + =========================================================================== + ONTOLOGY MAPPINGS + =========================================================================== - + + - Schema.org: sdo:deathPlace (primary) + - CIDOC-CRM: crm:P7_took_place_at via crm:E69_Death event + - Wikidata: P20 (place of death) - + + ' range: string required: false exact_mappings: - - sdo:deathPlace - - wikidata:P20 + - sdo:deathPlace + - wikidata:P20 + - schema:deathPlace close_mappings: - - crm:P7_took_place_at + - crm:P7_took_place_at comments: - - "Allows both string and URI formats per PiCo pattern" - - "Prefer thesaurus links (GeoNames, Wikidata) when possible" - - "Handle conflict zones and approximate locations gracefully" - - "Only populate when deceased is true" - - "Use circumstances_of_death for context when location is approximate" + - Allows both string and URI formats per PiCo pattern + - Prefer thesaurus links (GeoNames, Wikidata) when possible + - Handle conflict zones and approximate locations gracefully + - Only populate when deceased is true + - Use circumstances_of_death for context when location is approximate diff --git a/schemas/20251121/linkml/modules/slots/defined_by_standard.yaml b/schemas/20251121/linkml/modules/slots/defined_by_standard.yaml index 53c554f8b3..142d293619 100644 --- a/schemas/20251121/linkml/modules/slots/defined_by_standard.yaml +++ b/schemas/20251121/linkml/modules/slots/defined_by_standard.yaml @@ -1,53 +1,66 @@ -# Slot: defined_by_standard -# Links an identifier to the standard that defines it - id: https://nde.nl/ontology/hc/slot/defined_by_standard name: defined_by_standard_slot title: Defined By Standard Slot - 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# - default_prefix: hc - imports: - - linkml:types - - ../metadata - - ../classes/Standard - +- linkml:types +- ../metadata +- ../classes/Standard slots: defined_by_standard: slot_uri: skos:inScheme - description: | - The standard (identifier scheme) that defines this identifier. - + description: 'The standard (identifier scheme) that defines this identifier. + + Links the identifier to its governing standard, providing access to: + - Format specifications + - Registration authority + - Lookup URL template + - Validation rules - + + **SKOS Alignment:** - + + skos:inScheme - "Relates a resource to a concept scheme in which it is included" - + + Here the identifier is treated as a SKOS notation within the scheme (standard). - + + **Examples:** - + + - ISIL "NL-AmRMA" → ISIL standard (ISO 15511) + - ISNI "0000 0001 2146 5765" → ISNI standard (ISO 27729) + - Wikidata "Q190804" → Wikidata standard - + + **Usage:** - + + Allows navigation from an identifier to: + - Validation patterns (via Standard.formats) + - Lookup URLs (via Standard.lookup_url_template) + - Allocation agency (via Standard + AllocationAgency) + + ' range: Standard required: false inlined: false + broad_mappings: + - dcterms:conformsTo diff --git a/schemas/20251121/linkml/modules/slots/deliverables.yaml b/schemas/20251121/linkml/modules/slots/deliverables.yaml index d65f1543d5..06f806629a 100644 --- a/schemas/20251121/linkml/modules/slots/deliverables.yaml +++ b/schemas/20251121/linkml/modules/slots/deliverables.yaml @@ -1,23 +1,22 @@ -# Slot: deliverables -# Expected or achieved deliverable outputs - id: https://nde.nl/ontology/hc/slot/deliverables name: deliverables_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: deliverables: - description: | - Expected or achieved deliverable outputs from a project or activity. - May be URLs, document references, or textual descriptions. + slot_uri: schema:result + description: "Expected or achieved deliverable outputs from a project or activity.\n\nSchema.org: result - \"The result\ + \ produced in the action.\"\n\nMay be URLs, document references, or textual descriptions of \noutcomes from heritage\ + \ projects, digitization initiatives, or\nresearch activities.\n" range: string multivalued: true + close_mappings: + - schema:workExample + - schema:result + related_mappings: + - prov:generated diff --git a/schemas/20251121/linkml/modules/slots/derived_from_entity.yaml b/schemas/20251121/linkml/modules/slots/derived_from_entity.yaml index a99fbf1aa8..7d3b720900 100644 --- a/schemas/20251121/linkml/modules/slots/derived_from_entity.yaml +++ b/schemas/20251121/linkml/modules/slots/derived_from_entity.yaml @@ -1,46 +1,27 @@ -# CustodianObservation Slot: derived_from_entity -# The formal entity this observation refers to - id: https://nde.nl/ontology/hc/slot/derived_from_entity name: derived_from_entity_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: derived_from_entity: slot_uri: prov:wasDerivedFrom range: CustodianLegalStatus - description: | - The formal entity (reconstruction) this observation refers to. - - **INVERSE PROPERTY**: - - **Inverse**: `has_derived_observation` - - Pattern: If Observation derived_from_entity LegalStatus, then LegalStatus has_derived_observation Observation - - **Provenance semantics** (PROV-O): - - `prov:wasDerivedFrom`: Links observation to the formal entity it references - - Enables provenance chain traversal from source observation to formal entity - - **Example**: - ```yaml - CustodianObservation: - observed_name: "Rijksmuseum Amsterdam" - derived_from_entity: "https://nde.nl/ontology/hc/legal/stichting-rijksmuseum" - ``` - - **Navigation**: - - From observation: Find formal entity it references (derived_from_entity) - - From legal status: Find all observations that reference it (has_derived_observation) - + description: "The formal entity (reconstruction) this observation refers to.\n\n**INVERSE PROPERTY**:\n- **Inverse**:\ + \ `has_derived_observation`\n- Pattern: If Observation derived_from_entity LegalStatus, then LegalStatus has_derived_observation\ + \ Observation\n\n**Provenance semantics** (PROV-O):\n- `prov:wasDerivedFrom`: Links observation to the formal entity\ + \ it references\n- Enables provenance chain traversal from source observation to formal entity\n\n**Example**:\n```yaml\n\ + CustodianObservation:\n observed_name: \"Rijksmuseum Amsterdam\"\n derived_from_entity: \"https://nde.nl/ontology/hc/legal/stichting-rijksmuseum\"\ + \n```\n\n**Navigation**:\n- From observation: Find formal entity it references (derived_from_entity)\n- From legal status:\ + \ Find all observations that reference it (has_derived_observation)\n" comments: - - "Links observation to formal legal entity" - - "Part of PROV-O derivation pattern" - - "Inverse of has_derived_observation" - - "Creates owl:inverseOf axiom in RDF output" + - Links observation to formal legal entity + - Part of PROV-O derivation pattern + - Inverse of has_derived_observation + - Creates owl:inverseOf axiom in RDF output + broad_mappings: + - prov:Entity diff --git a/schemas/20251121/linkml/modules/slots/description.yaml b/schemas/20251121/linkml/modules/slots/description.yaml index b87b1aedfb..d8301559a0 100644 --- a/schemas/20251121/linkml/modules/slots/description.yaml +++ b/schemas/20251121/linkml/modules/slots/description.yaml @@ -1,30 +1,37 @@ -# description slot - General text description - id: https://nde.nl/ontology/hc/slot/description name: description title: Description Slot +description: 'General text description of an entity. + -description: | - General text description of an entity. - Used across multiple classes for providing human-readable descriptions + of entities, their purpose, and characteristics. + ' slots: description: slot_uri: schema:description range: string required: false multivalued: false - description: | - Human-readable description of the entity, its purpose, or characteristics. - + description: 'Human-readable description of the entity, its purpose, or characteristics. + + Examples: + - Jurisdiction: "Bavaria is a federal state in southern Germany with its own commercial register system" + - Register: "The Handelsregister is the German commercial register maintained by local courts" + - Authority: "The Kamer van Koophandel is the Dutch Chamber of Commerce" + ' + exact_mappings: + - dcterms:description + - schema:description + - rdfs:comment comments: - - "Maps to schema:description" - - "Should be concise but informative" - - "Language should match the context (typically English for international use)" +- Maps to schema:description +- Should be concise but informative +- Language should match the context (typically English for international use) diff --git a/schemas/20251121/linkml/modules/slots/digital_platform.yaml b/schemas/20251121/linkml/modules/slots/digital_platform.yaml index af9ca27e1a..2869b15eb5 100644 --- a/schemas/20251121/linkml/modules/slots/digital_platform.yaml +++ b/schemas/20251121/linkml/modules/slots/digital_platform.yaml @@ -1,33 +1,43 @@ -# Custodian Slot: digital_platform -# Links Custodian hub to DigitalPlatform operational aspect - id: https://nde.nl/ontology/hc/slot/digital_platform name: digital_platform_slot - imports: - - ../classes/DigitalPlatform - +- ../classes/DigitalPlatform slots: digital_platform: slot_uri: foaf:homepage range: DigitalPlatform multivalued: true inlined_as_list: true - description: | - Digital platform(s) operated by or representing this custodian. + description: 'Digital platform(s) operated by or representing this custodian. + FOAF: foaf:homepage indicates a homepage or main web presence. + DCAT: dcat:accessURL provides access to a dataset/catalog. - + + This property enables documentation of digital infrastructure for ANY custodian + (physical institutions with websites OR digital-first platforms): - + + Examples: + - Physical museum with website: Rijksmuseum → Rijksstudio (online collection) + - Archive with multiple systems: Noord-Hollands Archief → Inventory, OAI-PMH endpoint + - Digital-first platform: Europeana (classified as DigitalPlatformType custodian) - + + **CRITICAL DISTINCTION**: + - DigitalPlatform CLASS (this slot): Infrastructure documentation for any custodian + - DigitalPlatformType: Custodian type classification for digital-first institutions - + + Multivalued to support custodians with multiple platforms (website, API, SPARQL, etc.). + + ' + broad_mappings: + - dcterms:hasPart diff --git a/schemas/20251121/linkml/modules/slots/digital_surrogate_url.yaml b/schemas/20251121/linkml/modules/slots/digital_surrogate_url.yaml new file mode 100644 index 0000000000..04a2ad3548 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/digital_surrogate_url.yaml @@ -0,0 +1,23 @@ +id: https://nde.nl/ontology/hc/slot/digital_surrogate_url +name: digital_surrogate_url +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ +slots: + digital_surrogate_url: + slot_uri: schema:url + description: 'URL to digital surrogate or online access point. + + + Links to digitized versions, online catalogs, or digital collections. + + ' + range: uri + multivalued: true + required: false + examples: + - value: https://www.nationaalarchief.nl/onderzoeken/archief/1.04.02 + description: Digital access to VOC archives + broad_mappings: + - schema:url diff --git a/schemas/20251121/linkml/modules/slots/digitization_status.yaml b/schemas/20251121/linkml/modules/slots/digitization_status.yaml index 5d4cd3c938..e0da006e53 100644 --- a/schemas/20251121/linkml/modules/slots/digitization_status.yaml +++ b/schemas/20251121/linkml/modules/slots/digitization_status.yaml @@ -1,30 +1,40 @@ -# Custodian Slot: digitization_status -# Current state of digitization for collection materials - id: https://nde.nl/ontology/hc/slot/digitization_status name: digitization_status_slot - prefixes: premis: http://www.loc.gov/premis/rdf/v3/ - slots: digitization_status: slot_uri: premis:hasRelatedStatementInformation range: string - description: | - Current status of collection digitization efforts. - + description: 'Current status of collection digitization efforts. + + PREMIS: hasRelatedStatementInformation for preservation metadata. - + + Values: + - NOT_DIGITIZED: No digital surrogates exist + - NOT_STARTED: No digitization undertaken + - PARTIAL: Some materials digitized + - COMPLETE: Entire collection digitized + - IN_PROGRESS / ONGOING: Active digitization project + - NOT_APPLICABLE: Materials not suitable for digitization - + + Examples: + - "PARTIAL - approximately 30% of photograph collection digitized" + - "COMPLETE" + - "IN_PROGRESS - expected completion 2026" + + ' + broad_mappings: + - adms:status diff --git a/schemas/20251121/linkml/modules/slots/dissolution_date.yaml b/schemas/20251121/linkml/modules/slots/dissolution_date.yaml index 3de0bbba2b..1720287f59 100644 --- a/schemas/20251121/linkml/modules/slots/dissolution_date.yaml +++ b/schemas/20251121/linkml/modules/slots/dissolution_date.yaml @@ -1,11 +1,11 @@ -# CustodianLegalStatus Slot: dissolution_date -# Date of legal dissolution - id: https://nde.nl/ontology/hc/slot/dissolution_date name: dissolution_date_slot - slots: dissolution_date: slot_uri: schema:dissolutionDate range: date - description: "Date of legal dissolution (if dissolved)" + description: Date of legal dissolution (if dissolved) + exact_mappings: + - schema:dissolutionDate + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/documentation_source.yaml b/schemas/20251121/linkml/modules/slots/documentation_source.yaml index ef2fb4e536..d36a1ea88d 100644 --- a/schemas/20251121/linkml/modules/slots/documentation_source.yaml +++ b/schemas/20251121/linkml/modules/slots/documentation_source.yaml @@ -1,10 +1,9 @@ -# documentation_source slot for OrganizationalChangeEvent - id: https://nde.nl/ontology/hc/slot/documentation_source name: documentation_source - slots: documentation_source: - description: "URL or reference to documentation of organizational change" + description: URL or reference to documentation of organizational change range: uri slot_uri: dcterms:source + broad_mappings: + - dcterms:source diff --git a/schemas/20251121/linkml/modules/slots/documentation_url.yaml b/schemas/20251121/linkml/modules/slots/documentation_url.yaml index 141e5a23d0..a9e53cdb64 100644 --- a/schemas/20251121/linkml/modules/slots/documentation_url.yaml +++ b/schemas/20251121/linkml/modules/slots/documentation_url.yaml @@ -1,22 +1,18 @@ -# Global Slot: documentation_url -# URL to documentation for a project, system, or resource - id: https://nde.nl/ontology/hc/slot/documentation_url name: documentation_url_slot title: Documentation URL Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types slots: documentation_url: slot_uri: schema:documentation description: URL to documentation for this entity range: uri exact_mappings: - - schema:documentation + - schema:documentation + broad_mappings: + - schema:url diff --git a/schemas/20251121/linkml/modules/slots/effective_date.yaml b/schemas/20251121/linkml/modules/slots/effective_date.yaml index cbd24e682e..390e631582 100644 --- a/schemas/20251121/linkml/modules/slots/effective_date.yaml +++ b/schemas/20251121/linkml/modules/slots/effective_date.yaml @@ -1,39 +1,40 @@ -# Slot: effective_date -# Date when a document, policy, or statement became legally/operationally effective - id: https://nde.nl/ontology/hc/slot/effective_date name: effective_date title: Effective Date - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types slots: effective_date: slot_uri: schema:datePublished - description: | - Date when the document, policy, or statement became effective. - + description: 'Date when the document, policy, or statement became effective. + + **USAGE**: + - ArticlesOfAssociation: Date when legal documents became legally effective + - MissionStatement: Date when mission/vision was adopted + - Policy documents: Date when policy came into force - + + **PROVENANCE**: + May be explicitly stated in the document or inferred from metadata. + + ' range: date - exact_mappings: - - schema:datePublished - - dcterms:issued - + - schema:datePublished + - dcterms:issued comments: - - "Distinguished from retrieved_on (when we observed it) and valid_from (broader temporal validity)" - - "For legal documents, this is when the document has legal force" - - "For mission statements, this is when the statement was formally adopted" + - Distinguished from retrieved_on (when we observed it) and valid_from (broader temporal validity) + - For legal documents, this is when the document has legal force + - For mission statements, this is when the statement was formally adopted + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/embargo_end_date.yaml b/schemas/20251121/linkml/modules/slots/embargo_end_date.yaml index f8d7b31807..4e149b9198 100644 --- a/schemas/20251121/linkml/modules/slots/embargo_end_date.yaml +++ b/schemas/20251121/linkml/modules/slots/embargo_end_date.yaml @@ -1,18 +1,14 @@ -# Global Slot: embargo_end_date -# Date when embargo/access restriction ends - id: https://nde.nl/ontology/hc/slot/embargo_end_date name: embargo_end_date_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - slots: embargo_end_date: description: Date when embargo or access restriction ends range: date slot_uri: schema:expires + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/emic_name.yaml b/schemas/20251121/linkml/modules/slots/emic_name.yaml index e10b6f3b32..6ecd675393 100644 --- a/schemas/20251121/linkml/modules/slots/emic_name.yaml +++ b/schemas/20251121/linkml/modules/slots/emic_name.yaml @@ -1,18 +1,23 @@ -# Slot: emic_name -# Self-designated name from custodian's perspective - id: https://nde.nl/ontology/hc/slot/emic_name name: emic_name-slot - slots: emic_name: - description: | - The name as the custodian refers to itself, preserving the custodian's + description: 'The name as the custodian refers to itself, preserving the custodian''s + own naming convention. This is the self-assigned or self-recognized name, + as opposed to names given by external parties (exonyms). + + ' slot_uri: skos:prefLabel range: string required: true comments: - - "Emic refers to the insider's or participant's perspective" - - "Preserves the authentic self-designation of the institution" + - Emic refers to the insider's or participant's perspective + - Preserves the authentic self-designation of the institution + close_mappings: + - skos:prefLabel + related_mappings: + - schema:name + broad_mappings: + - rdfs:label diff --git a/schemas/20251121/linkml/modules/slots/encompasses.yaml b/schemas/20251121/linkml/modules/slots/encompasses.yaml index 4667e16bc3..fc95a65951 100644 --- a/schemas/20251121/linkml/modules/slots/encompasses.yaml +++ b/schemas/20251121/linkml/modules/slots/encompasses.yaml @@ -1,70 +1,39 @@ -# Slot: encompasses -# Inverse of encompassing_body -# Links EncompassingBody to custodians it governs - id: https://nde.nl/ontology/hc/slot/encompasses name: encompasses title: Encompasses - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: encompasses: slot_uri: org:hasSubOrganization - description: | - Custodians that are encompassed, governed, or coordinated by this body. - - **W3C ORG Alignment**: - - Property: `org:hasSubOrganization` - - Domain: org:Organization (EncompassingBody) - - Range: org:Organization (Custodian) - - Definition: "Represents hierarchical containment of Organizations" - - **INVERSE PROPERTY**: - - **Inverse**: `encompassing_body` (org:subOrganizationOf) - - Pattern: If Custodian encompassing_body Body, then Body encompasses Custodian - - **Three Relationship Types**: - 1. **Umbrella** - Legal parent hierarchy (permanent) - - Ministry encompasses National Archives, Royal Library - 2. **Network** - Service provision (temporary, centralized) - - De Ree Archive Hosting encompasses member archives - 3. **Consortium** - Mutual assistance (temporary, peer-to-peer) - - Heritage Network encompasses participating museums - - **Example**: - ```yaml - EncompassingBody: - organization_name: "Ministerie van OCW" - organization_type: UMBRELLA - encompasses: - - "https://nde.nl/ontology/hc/nl-na" # National Archives - - "https://nde.nl/ontology/hc/nl-kb" # Royal Library - - "https://nde.nl/ontology/hc/nl-rmn" # Cultural Heritage Agency - ``` - - **Navigation**: - - From body: Find all encompassed custodians (encompasses) - - From custodian: Find encompassing bodies (encompassing_body) + description: "Custodians that are encompassed, governed, or coordinated by this body.\n\n**W3C ORG Alignment**:\n\nProperty:\ + \ `org:hasSubOrganization`\n- Domain: org:Organization (EncompassingBody)\n- Range: org:Organization (Custodian)\n-\ + \ Definition: \"Represents hierarchical containment of Organizations\"\n\n**INVERSE PROPERTY**:\n- **Inverse**: `encompassing_body`\ + \ (org:subOrganizationOf)\n- Pattern: If Custodian encompassing_body Body, then Body encompasses Custodian\n\n**Three\ + \ Relationship Types**:\n1. **Umbrella** - Legal parent hierarchy (permanent)\n - Ministry encompasses National Archives,\ + \ Royal Library\n2. **Network** - Service provision (temporary, centralized)\n - De Ree Archive Hosting encompasses\ + \ member archives\n3. **Consortium** - Mutual assistance (temporary, peer-to-peer)\n - Heritage Network encompasses\ + \ participating museums\n\n**Example**:\n```yaml\nEncompassingBody:\n organization_name: \"Ministerie van OCW\"\n \ + \ organization_type: UMBRELLA\n encompasses:\n - \"https://nde.nl/ontology/hc/nl-na\" # National Archives\n \ + \ - \"https://nde.nl/ontology/hc/nl-kb\" # Royal Library\n - \"https://nde.nl/ontology/hc/nl-rmn\" # Cultural\ + \ Heritage Agency\n```\n\n**Navigation**:\n- From body: Find all encompassed custodians (encompasses)\n- From custodian:\ + \ Find encompassing bodies (encompassing_body)\n" range: Custodian multivalued: true - exact_mappings: - - org:hasSubOrganization - + - org:hasSubOrganization related_mappings: - - schema:subOrganization - - rico:includesOrIncluded - + - schema:subOrganization + - rico:includesOrIncluded + - schema:containsPlace comments: - - "Inverse of encompassing_body (org:subOrganizationOf)" - - "Links governance body to custodians it oversees" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of encompassing_body (org:subOrganizationOf) + - Links governance body to custodians it oversees + - Creates owl:inverseOf axiom in RDF output + close_mappings: + - dcterms:hasPart diff --git a/schemas/20251121/linkml/modules/slots/encompassing_body.yaml b/schemas/20251121/linkml/modules/slots/encompassing_body.yaml index 0aa0ca4e24..bd03d586c8 100644 --- a/schemas/20251121/linkml/modules/slots/encompassing_body.yaml +++ b/schemas/20251121/linkml/modules/slots/encompassing_body.yaml @@ -1,53 +1,59 @@ -# EncompassingBody Slot Definition -# Extra-organizational governance relationships - id: https://nde.nl/ontology/hc/slot/encompassing_body name: encompassing_body_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# schema: http://schema.org/ - default_prefix: hc - imports: - - linkml:types - - ../metadata - - ../classes/EncompassingBody - +- linkml:types +- ../metadata +- ../classes/EncompassingBody slots: encompassing_body: slot_uri: org:subOrganizationOf range: EncompassingBody multivalued: true - description: | - Extra-organizational governance bodies that encompass, oversee, or coordinate + description: 'Extra-organizational governance bodies that encompass, oversee, or coordinate + this custodian. Links Custodian to EncompassingBody instances representing + parent organizations, service networks, or consortia. - + + **W3C ORG Ontology**: `org:subOrganizationOf` + - Domain: org:Organization (Custodian) + - Range: org:Organization (EncompassingBody) + - Inverse: `org:hasSubOrganization` - + + **Three Relationship Types**: + 1. **Umbrella** - Legal parent hierarchy (permanent) + 2. **Network** - Service provision (temporary, centralized) + 3. **Consortium** - Mutual assistance (temporary, peer-to-peer) + + ' comments: - - "Links Custodian to external governance entities" - - "Custodians can have multiple encompassing bodies simultaneously" - - "Temporal changes tracked via EncompassingBody validity dates" + - Links Custodian to external governance entities + - Custodians can have multiple encompassing bodies simultaneously + - Temporal changes tracked via EncompassingBody validity dates exact_mappings: - - org:subOrganizationOf + - org:subOrganizationOf close_mappings: - - schema:parentOrganization - - schema:memberOf + - schema:parentOrganization + - schema:memberOf examples: - - value: - - id: "https://nde.nl/ontology/hc/encompassing-body/umbrella/nl-ministry-ocw" - organization_name: "Ministerie van OCW" - organization_type: "UMBRELLA" - description: "Ministry as umbrella organization" + - value: + - id: https://nde.nl/ontology/hc/encompassing-body/umbrella/nl-ministry-ocw + organization_name: Ministerie van OCW + organization_type: UMBRELLA + description: Ministry as umbrella organization + broad_mappings: + - org:Organization diff --git a/schemas/20251121/linkml/modules/slots/end_date.yaml b/schemas/20251121/linkml/modules/slots/end_date.yaml index 51630c8958..9333e94287 100644 --- a/schemas/20251121/linkml/modules/slots/end_date.yaml +++ b/schemas/20251121/linkml/modules/slots/end_date.yaml @@ -1,26 +1,32 @@ -# Slot: end_date -# End date for time-bounded entities (exhibitions, projects, events) - id: https://nde.nl/ontology/hc/slot/end_date name: end_date_slot title: End Date Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - slots: end_date: slot_uri: schema:endDate range: date - description: | - End date of a time-bounded entity. + description: 'End date of a time-bounded entity. + Used for exhibitions, projects, events, and other temporal entities. - + + Examples: + - Exhibition closing date + - Project end date + - Event conclusion + + ' + exact_mappings: + - schema:endDate + close_mappings: + - prov:endedAtTime + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/end_of_the_begin.yaml b/schemas/20251121/linkml/modules/slots/end_of_the_begin.yaml index 5325d550de..bfc698d341 100644 --- a/schemas/20251121/linkml/modules/slots/end_of_the_begin.yaml +++ b/schemas/20251121/linkml/modules/slots/end_of_the_begin.yaml @@ -1,11 +1,11 @@ -# TimeSpan Slot: end_of_the_begin -# Latest possible start time - id: https://nde.nl/ontology/hc/slot/end_of_the_begin name: end_of_the_begin_slot - slots: end_of_the_begin: slot_uri: crm:P81a_end_of_the_begin range: datetime - description: "Latest possible start time of temporal extent (CIDOC-CRM E52_Time-Span)" + description: Latest possible start time of temporal extent (CIDOC-CRM E52_Time-Span) + related_mappings: + - prov:startedAtTime + broad_mappings: + - dcterms:relation diff --git a/schemas/20251121/linkml/modules/slots/end_of_the_end.yaml b/schemas/20251121/linkml/modules/slots/end_of_the_end.yaml index a3215db9f4..3c35b4a1d9 100644 --- a/schemas/20251121/linkml/modules/slots/end_of_the_end.yaml +++ b/schemas/20251121/linkml/modules/slots/end_of_the_end.yaml @@ -1,11 +1,13 @@ -# TimeSpan Slot: end_of_the_end -# Latest possible end time - id: https://nde.nl/ontology/hc/slot/end_of_the_end name: end_of_the_end_slot - slots: end_of_the_end: slot_uri: crm:P82b_end_of_the_end range: datetime - description: "Latest possible end time of temporal extent (CIDOC-CRM E52_Time-Span)" + description: Latest possible end time of temporal extent (CIDOC-CRM E52_Time-Span) + related_mappings: + - prov:endedAtTime + narrow_mappings: + - schema:endDate + broad_mappings: + - dcterms:relation diff --git a/schemas/20251121/linkml/modules/slots/ended_at_time.yaml b/schemas/20251121/linkml/modules/slots/ended_at_time.yaml index 7c8cf88648..e24b304c03 100644 --- a/schemas/20251121/linkml/modules/slots/ended_at_time.yaml +++ b/schemas/20251121/linkml/modules/slots/ended_at_time.yaml @@ -1,11 +1,9 @@ -# ReconstructionActivity Slot: ended_at_time -# End time of activity - id: https://nde.nl/ontology/hc/slot/ended_at_time name: ended_at_time_slot - slots: ended_at_time: slot_uri: prov:endedAtTime range: datetime - description: "End time of reconstruction activity" + description: End time of reconstruction activity + broad_mappings: + - prov:atTime diff --git a/schemas/20251121/linkml/modules/slots/endorsement_source.yaml b/schemas/20251121/linkml/modules/slots/endorsement_source.yaml index 8bdc7bea54..60683aa7b0 100644 --- a/schemas/20251121/linkml/modules/slots/endorsement_source.yaml +++ b/schemas/20251121/linkml/modules/slots/endorsement_source.yaml @@ -1,12 +1,10 @@ -# CustodianName Slot: endorsement_source -# Source proving accepted name - id: https://nde.nl/ontology/hc/slot/endorsement_source name: endorsement_source_slot - slots: endorsement_source: slot_uri: prov:hadPrimarySource range: uriorcurie - description: "Source document proving this is the custodian's accepted name (official website, statutes, etc.)" + description: Source document proving this is the custodian's accepted name (official website, statutes, etc.) required: true + broad_mappings: + - dcterms:source diff --git a/schemas/20251121/linkml/modules/slots/event_date.yaml b/schemas/20251121/linkml/modules/slots/event_date.yaml index cda2a3df30..eb6c9c9b08 100644 --- a/schemas/20251121/linkml/modules/slots/event_date.yaml +++ b/schemas/20251121/linkml/modules/slots/event_date.yaml @@ -1,11 +1,14 @@ -# event_date slot for OrganizationalChangeEvent - id: https://nde.nl/ontology/hc/slot/event_date name: event_date - slots: event_date: - description: "Date when organizational change event occurred" + description: Date when organizational change event occurred range: date slot_uri: crm:P4_has_time-span required: true + close_mappings: + - schema:startDate + related_mappings: + - dcterms:date + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/event_description.yaml b/schemas/20251121/linkml/modules/slots/event_description.yaml index 1081d845e3..43d2122bd4 100644 --- a/schemas/20251121/linkml/modules/slots/event_description.yaml +++ b/schemas/20251121/linkml/modules/slots/event_description.yaml @@ -1,11 +1,12 @@ -# event_description slot for OrganizationalChangeEvent - id: https://nde.nl/ontology/hc/slot/event_description name: event_description - slots: event_description: - description: "Detailed description of organizational change event" + description: Detailed description of organizational change event range: string slot_uri: dcterms:description required: true + exact_mappings: + - schema:description + broad_mappings: + - dcterms:description diff --git a/schemas/20251121/linkml/modules/slots/event_id.yaml b/schemas/20251121/linkml/modules/slots/event_id.yaml index d4e2cdb17e..6138482a77 100644 --- a/schemas/20251121/linkml/modules/slots/event_id.yaml +++ b/schemas/20251121/linkml/modules/slots/event_id.yaml @@ -2,20 +2,18 @@ id: https://nde.nl/ontology/hc/slot/event_id name: event_id_slot title: Event ID Slot description: Shared slot for event identifiers across heritage custodian entities - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: event_id: description: Persistent unique identifier for an event range: uriorcurie slot_uri: dcterms:identifier identifier: true + broad_mappings: + - dcterms:identifier diff --git a/schemas/20251121/linkml/modules/slots/event_type.yaml b/schemas/20251121/linkml/modules/slots/event_type.yaml index 4c0723df18..79aa27472b 100644 --- a/schemas/20251121/linkml/modules/slots/event_type.yaml +++ b/schemas/20251121/linkml/modules/slots/event_type.yaml @@ -1,29 +1,28 @@ -# event_type slot for OrganizationalChangeEvent - id: https://nde.nl/ontology/hc/slot/event_type name: event_type - 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# prov: http://www.w3.org/ns/prov# - default_prefix: hc - imports: - - linkml:types - - ../metadata - # Enum imports for range - - ../enums/OrganizationalChangeEventTypeEnum - +- linkml:types +- ../metadata +- ../enums/OrganizationalChangeEventTypeEnum slots: event_type: slot_uri: dct:type - description: "Type of organizational change event" + description: Type of organizational change event range: OrganizationalChangeEventTypeEnum required: true exact_mappings: - - rdf:type - - prov:type + - rdf:type + - prov:type + close_mappings: + - schema:eventType + related_mappings: + - dcterms:type + broad_mappings: + - dcterms:type diff --git a/schemas/20251121/linkml/modules/slots/exhibition_type.yaml b/schemas/20251121/linkml/modules/slots/exhibition_type.yaml index 9c3c078838..7c81ca09f8 100644 --- a/schemas/20251121/linkml/modules/slots/exhibition_type.yaml +++ b/schemas/20251121/linkml/modules/slots/exhibition_type.yaml @@ -1,27 +1,20 @@ -# Slot: exhibition_type -# Shared slot for exhibition/exhibition-space type classification -# Classes override range in slot_usage based on context - id: https://nde.nl/ontology/hc/slot/exhibition_type name: exhibition_type_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: exhibition_type: - description: >- - Classification type for exhibitions or exhibition spaces. - Range varies by context - use slot_usage to specify appropriate enum. + description: Classification type for exhibitions or exhibition spaces. Range varies by context - use slot_usage to specify + appropriate enum. slot_uri: dcterms:type range: string comments: - - "Exhibition class uses ExhibitionTypeEnum" - - "ExhibitionSpace class uses ExhibitionSpaceTypeEnum" + - Exhibition class uses ExhibitionTypeEnum + - ExhibitionSpace class uses ExhibitionSpaceTypeEnum + broad_mappings: + - dcterms:type diff --git a/schemas/20251121/linkml/modules/slots/expertise_areas.yaml b/schemas/20251121/linkml/modules/slots/expertise_areas.yaml index 27a2a4f122..98b42eca4f 100644 --- a/schemas/20251121/linkml/modules/slots/expertise_areas.yaml +++ b/schemas/20251121/linkml/modules/slots/expertise_areas.yaml @@ -1,13 +1,13 @@ id: https://nde.nl/ontology/hc/slot/expertise_areas name: expertise_areas title: Expertise Areas - imports: - - linkml:types - +- linkml:types slots: expertise_areas: slot_uri: schema:knowsAbout description: Areas of professional expertise or specialization range: string multivalued: true + broad_mappings: + - dcterms:subject diff --git a/schemas/20251121/linkml/modules/slots/exposed_via_portal.yaml b/schemas/20251121/linkml/modules/slots/exposed_via_portal.yaml index 8a2ed9de7a..cc6389e52f 100644 --- a/schemas/20251121/linkml/modules/slots/exposed_via_portal.yaml +++ b/schemas/20251121/linkml/modules/slots/exposed_via_portal.yaml @@ -1,52 +1,66 @@ -# exposed_via_portal slot -# Links CustodianCollection to WebPortal for metadata exposure - id: https://nde.nl/ontology/hc/slot/exposed_via_portal name: exposed_via_portal - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ dcterms: http://purl.org/dc/terms/ edm: http://www.europeana.eu/schemas/edm/ - imports: - - linkml:types - +- linkml:types slots: exposed_via_portal: slot_uri: schema:isPartOf - description: | - Web portals through which this collection's metadata is discoverable. - + description: 'Web portals through which this collection''s metadata is discoverable. + + **RELATIONSHIP**: CustodianCollection → WebPortal - - A collection's metadata may be exposed through multiple discovery portals, + + + A collection''s metadata may be exposed through multiple discovery portals, + either directly or via aggregation chains. - + + **Direction**: Listed on CustodianCollection, pointing to WebPortal instances. + **Inverse**: WebPortal.exposes_collections - + + **Examples**: + - Rijksmuseum Paintings Collection → [Collectie Nederland, Europeana] + - National Archives WW2 Records → [Archieven.nl, Archives Portal Europe] + - University Library Special Collections → [WorldCat, GBV union catalog] - + + **Aggregation Chains**: + Some portals aggregate FROM other portals: + - CMS → Regional Portal → National Portal → Europeana + Track only DIRECT portal exposure; portal-to-portal relationships + are captured on WebPortal.aggregated_by and WebPortal.aggregates_from. - + + **Ontology Alignment**: + - Schema.org: `schema:isPartOf` - collection is part of portal aggregation + - EDM: Related to `edm:aggregatedCHO` concept + + ' range: WebPortal multivalued: true inlined_as_list: true examples: - - value: "https://nde.nl/ontology/hc/portal/nl/archieven-nl" - description: "Collection exposed through Archieven.nl" - - value: "https://nde.nl/ontology/hc/portal/eu/europeana" - description: "Collection exposed through Europeana" + - value: https://nde.nl/ontology/hc/portal/nl/archieven-nl + description: Collection exposed through Archieven.nl + - value: https://nde.nl/ontology/hc/portal/eu/europeana + description: Collection exposed through Europeana + broad_mappings: + - schema:url diff --git a/schemas/20251121/linkml/modules/slots/exposes_collections.yaml b/schemas/20251121/linkml/modules/slots/exposes_collections.yaml index 39f7a07aba..9d71a79dcd 100644 --- a/schemas/20251121/linkml/modules/slots/exposes_collections.yaml +++ b/schemas/20251121/linkml/modules/slots/exposes_collections.yaml @@ -1,63 +1,35 @@ -# Slot: exposes_collections -# Inverse of exposed_via_portal (schema:isPartOf) -# WebPortal → CustodianCollection relationship - id: https://nde.nl/ontology/hc/slot/exposes_collections name: exposes_collections title: Exposes Collections - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ edm: http://www.europeana.eu/schemas/edm/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: exposes_collections: slot_uri: schema:hasPart - description: | - Collections whose metadata is exposed through this web portal. - - **RELATIONSHIP**: WebPortal → CustodianCollection - - This is the inverse of `exposed_via_portal`, allowing navigation - from a portal to all collections it aggregates. - - **INVERSE PROPERTY**: - - **Inverse**: `exposed_via_portal` (schema:isPartOf) - - Pattern: If Portal exposesCollections Collection, then Collection exposed_via_portal Portal - - **Example**: - ```yaml - WebPortal: - portal_name: "Europeana" - exposes_collections: - - "https://nde.nl/ontology/hc/collection/nl/rm-paintings" - - "https://nde.nl/ontology/hc/collection/fr/louvre-sculptures" - ``` - - **Navigation**: - - From portal: Find all exposed collections (exposes_collections) - - From collection: Find exposing portals (exposed_via_portal) - - **Ontology Alignment**: - - Schema.org: `schema:hasPart` - inverse of isPartOf - - EDM: Related to `edm:aggregatedCHO` concept + description: "Collections whose metadata is exposed through this web portal.\n\n**RELATIONSHIP**: WebPortal → CustodianCollection\n\ + \nThis is the inverse of `exposed_via_portal`, allowing navigation\nfrom a portal to all collections it aggregates.\n\ + \n**INVERSE PROPERTY**:\n- **Inverse**: `exposed_via_portal` (schema:isPartOf)\n- Pattern: If Portal exposesCollections\ + \ Collection, then Collection exposed_via_portal Portal\n\n**Example**:\n```yaml\nWebPortal:\n portal_name: \"Europeana\"\ + \n exposes_collections:\n - \"https://nde.nl/ontology/hc/collection/nl/rm-paintings\"\n - \"https://nde.nl/ontology/hc/collection/fr/louvre-sculptures\"\ + \n```\n\n**Navigation**:\n- From portal: Find all exposed collections (exposes_collections)\n- From collection: Find\ + \ exposing portals (exposed_via_portal)\n\n**Ontology Alignment**:\n- Schema.org: `schema:hasPart` - inverse of isPartOf\n\ + - EDM: Related to `edm:aggregatedCHO` concept\n" range: CustodianCollection multivalued: true - exact_mappings: - - schema:hasPart - + - schema:hasPart related_mappings: - - edm:aggregatedCHO - - dcterms:hasPart - + - edm:aggregatedCHO + - dcterms:hasPart comments: - - "Inverse of exposed_via_portal (schema:isPartOf)" - - "Allows finding all collections aggregated by a portal" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of exposed_via_portal (schema:isPartOf) + - Allows finding all collections aggregated by a portal + - Creates owl:inverseOf axiom in RDF output + close_mappings: + - schema:collection diff --git a/schemas/20251121/linkml/modules/slots/extent.yaml b/schemas/20251121/linkml/modules/slots/extent.yaml index 705e04f3e6..ceb0fe1bff 100644 --- a/schemas/20251121/linkml/modules/slots/extent.yaml +++ b/schemas/20251121/linkml/modules/slots/extent.yaml @@ -1,17 +1,23 @@ -# Custodian Slot: extent -# Size/quantity of collection - id: https://nde.nl/ontology/hc/slot/extent name: extent_slot - slots: extent: slot_uri: dcterms:extent range: string - description: | - Size/quantity of collection. + description: 'Size/quantity of collection. + Examples: + - "1,200 linear meters" + - "45,000 objects" + - "2.3 million books" + - "150 manuscript volumes" + + ' + exact_mappings: + - dcterms:extent + close_mappings: + - schema:size diff --git a/schemas/20251121/linkml/modules/slots/extent_items.yaml b/schemas/20251121/linkml/modules/slots/extent_items.yaml new file mode 100644 index 0000000000..43be44ea4c --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/extent_items.yaml @@ -0,0 +1,27 @@ +id: https://nde.nl/ontology/hc/slot/extent_items +name: extent_items +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + schema: http://schema.org/ +slots: + extent_items: + slot_uri: schema:numberOfItems + description: 'Numeric count of items (when countable). + + + Schema.org: numberOfItems for countable collections. + + + Use when precise item count is known. + + ' + range: integer + required: false + examples: + - value: 125 + description: 125 artworks + - value: 342 + description: 342 manuscripts + broad_mappings: + - schema:itemListElement diff --git a/schemas/20251121/linkml/modules/slots/external_identifiers.yaml b/schemas/20251121/linkml/modules/slots/external_identifiers.yaml index 81f0654094..42aa74d93d 100644 --- a/schemas/20251121/linkml/modules/slots/external_identifiers.yaml +++ b/schemas/20251121/linkml/modules/slots/external_identifiers.yaml @@ -1,23 +1,19 @@ -# Slot: external_identifiers -# External identifier URIs for entities - id: https://nde.nl/ontology/hc/slot/external_identifiers name: external_identifiers_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: external_identifiers: slot_uri: dcterms:identifier range: uriorcurie multivalued: true - description: >- - External identifier URIs for this entity (Wikidata, VIAF, RKDimages, etc.). + description: External identifier URIs for this entity (Wikidata, VIAF, RKDimages, etc.). + exact_mappings: + - dcterms:identifier + close_mappings: + - schema:identifier diff --git a/schemas/20251121/linkml/modules/slots/extraction_confidence.yaml b/schemas/20251121/linkml/modules/slots/extraction_confidence.yaml index c8398cf6c2..bd285d29ac 100644 --- a/schemas/20251121/linkml/modules/slots/extraction_confidence.yaml +++ b/schemas/20251121/linkml/modules/slots/extraction_confidence.yaml @@ -1,22 +1,20 @@ -# Global Slot: extraction_confidence -# Confidence score for data extraction (0.0-1.0) - id: https://nde.nl/ontology/hc/slot/extraction_confidence name: extraction_confidence_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# - default_prefix: hc - slots: extraction_confidence: slot_uri: prov:value range: float minimum_value: 0.0 maximum_value: 1.0 - description: | - Confidence score for extracted data (0.0-1.0). + description: 'Confidence score for extracted data (0.0-1.0). + Higher values indicate higher confidence in extraction accuracy. + + ' + broad_mappings: + - prov:value diff --git a/schemas/20251121/linkml/modules/slots/extraction_metadata.yaml b/schemas/20251121/linkml/modules/slots/extraction_metadata.yaml index 853a77c3df..835a94a969 100644 --- a/schemas/20251121/linkml/modules/slots/extraction_metadata.yaml +++ b/schemas/20251121/linkml/modules/slots/extraction_metadata.yaml @@ -1,57 +1,30 @@ -# Extraction Metadata Slot -# Reusable slot for linking to ExtractionMetadata provenance - id: https://nde.nl/ontology/hc/slot/extraction_metadata name: extraction_metadata_slot title: Extraction Metadata Slot version: 1.0.0 - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# - imports: - - linkml:types - - ../classes/ExtractionMetadata - +- linkml:types +- ../classes/ExtractionMetadata slots: extraction_metadata: slot_uri: prov:wasGeneratedBy - description: | - Provenance metadata for how this observation/record was extracted. - - Records the extraction activity including: - - source_file: Path to input data source - - extraction_date: When extraction occurred - - extraction_method: Tool/API used (exa, firecrawl, manual, etc.) - - extraction_agent: AI agent that performed extraction - - cost_usd: API cost for the extraction - - **PROV-O Alignment**: - - This slot represents prov:wasGeneratedBy relationship - - Links the observation (prov:Entity) to the extraction (prov:Activity) - - **Use Cases**: - - PersonObservation: Track how staff data was extracted - - WebObservation: Track web scraping provenance - - CustodianObservation: Track custodian data extraction - - LinkedInProfile: Track LinkedIn profile extraction - - ConnectionNetwork: Track connection list extraction - - **Example**: - ```yaml - extraction_metadata: - source_file: data/custodian/person/affiliated/parsed/rijksmuseum_staff.json - extraction_date: "2025-12-12T22:00:00Z" - extraction_method: exa_crawling_exa - extraction_agent: claude-opus-4.5 - cost_usd: 0.001 - ``` - - **See Also**: - - ExtractionMetadata class for full field definitions - - AGENTS.md Rule 20 for required provenance fields + description: "Provenance metadata for how this observation/record was extracted.\n\nRecords the extraction activity including:\n\ + - source_file: Path to input data source\n- extraction_date: When extraction occurred\n- extraction_method: Tool/API\ + \ used (exa, firecrawl, manual, etc.)\n- extraction_agent: AI agent that performed extraction\n- cost_usd: API cost\ + \ for the extraction\n\n**PROV-O Alignment**:\n- This slot represents prov:wasGeneratedBy relationship\n- Links the\ + \ observation (prov:Entity) to the extraction (prov:Activity)\n\n**Use Cases**:\n- PersonObservation: Track how staff\ + \ data was extracted\n- WebObservation: Track web scraping provenance\n- CustodianObservation: Track custodian data\ + \ extraction\n- LinkedInProfile: Track LinkedIn profile extraction\n- ConnectionNetwork: Track connection list extraction\n\ + \n**Example**:\n```yaml\nextraction_metadata:\n source_file: data/custodian/person/affiliated/parsed/rijksmuseum_staff.json\n\ + \ extraction_date: \"2025-12-12T22:00:00Z\"\n extraction_method: exa_crawling_exa\n extraction_agent: claude-opus-4.5\n\ + \ cost_usd: 0.001\n```\n\n**See Also**: \n- ExtractionMetadata class for full field definitions\n- AGENTS.md Rule 20\ + \ for required provenance fields\n" range: ExtractionMetadata inlined: true required: false + close_mappings: + - prov:Entity diff --git a/schemas/20251121/linkml/modules/slots/extraction_method.yaml b/schemas/20251121/linkml/modules/slots/extraction_method.yaml index a91fe61d5d..9df374d7f8 100644 --- a/schemas/20251121/linkml/modules/slots/extraction_method.yaml +++ b/schemas/20251121/linkml/modules/slots/extraction_method.yaml @@ -1,24 +1,21 @@ -# Slot: extraction_method -# Method/tool used to extract data - id: https://nde.nl/ontology/hc/slot/extraction_method name: extraction_method_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# - imports: - - linkml:types - +- linkml:types default_range: string - slots: extraction_method: description: Method or tool used to extract the data slot_uri: prov:wasGeneratedBy range: string comments: - - "ExtractionMetadata overrides range to ProfileExtractionMethodEnum" - - "CustodianTimelineEvent overrides range to TimelineExtractionMethodEnum" + - ExtractionMetadata overrides range to ProfileExtractionMethodEnum + - CustodianTimelineEvent overrides range to TimelineExtractionMethodEnum + close_mappings: + - prov:wasGeneratedBy + broad_mappings: + - prov:wasGeneratedBy diff --git a/schemas/20251121/linkml/modules/slots/extraction_notes.yaml b/schemas/20251121/linkml/modules/slots/extraction_notes.yaml index 5376e0e622..916c9135d4 100644 --- a/schemas/20251121/linkml/modules/slots/extraction_notes.yaml +++ b/schemas/20251121/linkml/modules/slots/extraction_notes.yaml @@ -1,20 +1,20 @@ -# Global Slot: extraction_notes -# Notes about data extraction process or quality - id: https://nde.nl/ontology/hc/slot/extraction_notes name: extraction_notes_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - default_prefix: hc - slots: extraction_notes: slot_uri: dcterms:description range: string - description: | - Notes about the extraction process, data quality, or interpretation. + description: 'Notes about the extraction process, data quality, or interpretation. + Used to document edge cases or ambiguities in extracted data. + + ' + close_mappings: + - skos:note + broad_mappings: + - skos:note diff --git a/schemas/20251121/linkml/modules/slots/extraction_timestamp.yaml b/schemas/20251121/linkml/modules/slots/extraction_timestamp.yaml index eae0634522..09850ec09e 100644 --- a/schemas/20251121/linkml/modules/slots/extraction_timestamp.yaml +++ b/schemas/20251121/linkml/modules/slots/extraction_timestamp.yaml @@ -1,24 +1,17 @@ -# Slot: extraction_timestamp -# Timestamp when data was extracted from source - id: https://nde.nl/ontology/hc/slot/extraction_timestamp name: extraction_timestamp_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# - imports: - - linkml:types - +- linkml:types default_range: string - slots: extraction_timestamp: slot_uri: hc:extractionTimestamp range: datetime - description: >- - When the data was extracted from the source. - May differ from retrieved_on if extraction happens later than archival. - ISO 8601 format with timezone. + description: When the data was extracted from the source. May differ from retrieved_on if extraction happens later than + archival. ISO 8601 format with timezone. + broad_mappings: + - prov:generatedAtTime diff --git a/schemas/20251121/linkml/modules/slots/feeds_portal.yaml b/schemas/20251121/linkml/modules/slots/feeds_portal.yaml index 6a0c5d44f8..ba554f3666 100644 --- a/schemas/20251121/linkml/modules/slots/feeds_portal.yaml +++ b/schemas/20251121/linkml/modules/slots/feeds_portal.yaml @@ -1,60 +1,33 @@ -# Slot: feeds_portal -# Inverse of portal_data_sources (edm:dataProvider) -# CollectionManagementSystem → WebPortal relationship - id: https://nde.nl/ontology/hc/slot/feeds_portal name: feeds_portal title: Feeds Portal - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ edm: http://www.europeana.eu/schemas/edm/ schema: http://schema.org/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: feeds_portal: slot_uri: hc:feeds_portal - description: | - Web portals that receive data from this collection management system. - - **RELATIONSHIP**: CMS → WebPortal (aggregation) - - This is the inverse of `portal_data_sources`, allowing navigation - from a CMS to all portals it feeds data to. - - **INVERSE PROPERTY**: - - **Inverse**: `portal_data_sources` (edm:dataProvider) - - Pattern: If CMS feedsPortal Portal, then Portal portal_data_sources CMS - - **Example**: - ```yaml - CollectionManagementSystem: - cms_name: "MAIS-Flexis at Gelders Archief" - feeds_portal: - - "https://nde.nl/ontology/hc/portal/nl/archieven-nl" - - "https://nde.nl/ontology/hc/portal/eu/archives-portal-europe" - ``` - - **Data Flow**: - - CMS exports metadata → Portal aggregates → Users discover - - Multiple CMSs feed a single portal - - Single CMS may feed multiple portals - - **Navigation**: - - From CMS: Find all portals receiving data (feeds_portal) - - From portal: Find all CMS data sources (portal_data_sources) + description: "Web portals that receive data from this collection management system.\n\n**RELATIONSHIP**: CMS → WebPortal\ + \ (aggregation)\n\nThis is the inverse of `portal_data_sources`, allowing navigation\nfrom a CMS to all portals it feeds\ + \ data to.\n\n**INVERSE PROPERTY**:\n- **Inverse**: `portal_data_sources` (edm:dataProvider)\n- Pattern: If CMS feedsPortal\ + \ Portal, then Portal portal_data_sources CMS\n\n**Example**:\n```yaml\nCollectionManagementSystem:\n cms_name: \"\ + MAIS-Flexis at Gelders Archief\"\n feeds_portal:\n - \"https://nde.nl/ontology/hc/portal/nl/archieven-nl\"\n \ + \ - \"https://nde.nl/ontology/hc/portal/eu/archives-portal-europe\"\n```\n\n**Data Flow**:\n- CMS exports metadata →\ + \ Portal aggregates → Users discover\n- Multiple CMSs feed a single portal\n- Single CMS may feed multiple portals\n\ + \n**Navigation**:\n- From CMS: Find all portals receiving data (feeds_portal)\n- From portal: Find all CMS data sources\ + \ (portal_data_sources)\n" range: WebPortal multivalued: true - exact_mappings: - - edm:provider - + - edm:provider comments: - - "Inverse of portal_data_sources (edm:dataProvider)" - - "Tracks which portals a CMS deployment sends data to" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of portal_data_sources (edm:dataProvider) + - Tracks which portals a CMS deployment sends data to + - Creates owl:inverseOf axiom in RDF output + broad_mappings: + - schema:url diff --git a/schemas/20251121/linkml/modules/slots/finding_aids.yaml b/schemas/20251121/linkml/modules/slots/finding_aids.yaml new file mode 100644 index 0000000000..2bc71cd4c2 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/finding_aids.yaml @@ -0,0 +1,30 @@ +id: https://nde.nl/ontology/hc/slot/finding_aids +name: finding_aids +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + finding_aids: + slot_uri: rico:isDescribedBy + description: 'Finding aids describing this collection. + + + RiC-O: isDescribedBy links RecordSet to its descriptive instruments. + + + Includes inventories, catalogs, indexes, and other finding aids + + that provide intellectual access to the collection. + + ' + range: FindingAid + multivalued: true + required: false + examples: + - value: https://nde.nl/ontology/hc/finding-aid/voc-inventory + description: VOC collection inventory + close_mappings: + - rico:hasInstantiation + related_mappings: + - schema:url diff --git a/schemas/20251121/linkml/modules/slots/follow_up_date.yaml b/schemas/20251121/linkml/modules/slots/follow_up_date.yaml index 583a7c3f33..608cdf4ef3 100644 --- a/schemas/20251121/linkml/modules/slots/follow_up_date.yaml +++ b/schemas/20251121/linkml/modules/slots/follow_up_date.yaml @@ -2,17 +2,30 @@ id: https://nde.nl/ontology/hc/slot/follow_up_date name: follow_up_date_slot title: Follow Up Date Slot description: Shared slot for follow-up dates across heritage custodian entities - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ - + schema: http://schema.org/ imports: - - linkml:types - +- linkml:types default_range: string - slots: follow_up_date: - description: Scheduled date for follow-up action or review + slot_uri: schema:scheduledTime + description: 'Scheduled date for follow-up action or review. + + + Schema.org: scheduledTime - "The time the object is scheduled to." + + + Used for planning verification tasks, re-enrichment schedules, + + or data quality review dates. + + ' range: date + close_mappings: + - schema:dateModified + - schema:scheduledTime + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/funding_source.yaml b/schemas/20251121/linkml/modules/slots/funding_source.yaml index 27b17b4b8b..2ca44f322e 100644 --- a/schemas/20251121/linkml/modules/slots/funding_source.yaml +++ b/schemas/20251121/linkml/modules/slots/funding_source.yaml @@ -1,26 +1,27 @@ -# Global Slot: funding_source -# Where an organization/project obtains its funding resources - id: https://nde.nl/ontology/hc/slot/funding_source name: funding_source_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - slots: funding_source: slot_uri: schema:funder range: string - description: | - Source of funding for this organization, project, or platform. + description: 'Source of funding for this organization, project, or platform. + May reference a funding organization, grant program, government appropriation, + or other funding mechanism. + + ' examples: - - value: "Dutch Ministry of OCW annual budget" - - value: "Horizon Europe Framework Programme" - - value: "National Lottery proceeds" - - value: "Private foundation endowment" + - value: Dutch Ministry of OCW annual budget + - value: Horizon Europe Framework Programme + - value: National Lottery proceeds + - value: Private foundation endowment + close_mappings: + - schema:funder + broad_mappings: + - dcterms:source diff --git a/schemas/20251121/linkml/modules/slots/gender_identity.yaml b/schemas/20251121/linkml/modules/slots/gender_identity.yaml index d4f2ade909..b8a34e2dce 100644 --- a/schemas/20251121/linkml/modules/slots/gender_identity.yaml +++ b/schemas/20251121/linkml/modules/slots/gender_identity.yaml @@ -1,79 +1,46 @@ -# Gender Identity Slot -# -# DESIGN PRINCIPLE: Inclusive, self-determined gender expression -# -# This slot follows Schema.org's explicit guidance that "text strings are also -# acceptable for people who are not a binary gender" (schema.org/gender). -# -# We use FREE-TEXT rather than an enum to: -# 1. Respect self-identification (people define their own gender) -# 2. Support cultural/historical variations in gender concepts -# 3. Avoid forcing people into categories that don't fit them -# 4. Allow for terms that may not exist yet or are culturally specific -# -# See also: FOAF's gender property which notes it is "typically but not -# necessarily 'male' or 'female'" (foaf:gender) - id: https://nde.nl/ontology/hc/slot/gender_identity name: gender_identity_slot title: Gender Identity Slot - prefixes: schema: http://schema.org/ foaf: http://xmlns.com/foaf/0.1/ pico: https://personsincontext.org/model# - imports: - - linkml:types - +- linkml:types slots: gender_identity: slot_uri: schema:gender - description: >- - The person's gender identity as they define it. This is a free-text field - that respects self-identification and does not impose binary categories. + description: The person's gender identity as they define it. This is a free-text field that respects self-identification + and does not impose binary categories. comments: - - >- - **Inclusive Design**: This field intentionally uses free text rather than - a restrictive enumeration. People should be able to express their gender - in their own terms. - - >- - **Common values** (not exhaustive, not required): man, woman, non-binary, - genderqueer, genderfluid, agender, bigender, two-spirit, transgender, - cisgender, or any self-identified term. - - >- - **Historical records**: For historical persons, use terms as recorded in - sources where possible, or use contextually appropriate terms. - - >- - **Unknown/Not recorded**: Leave empty if unknown; do not assume. - - >- - **Privacy**: This field may be left empty by choice. Absence of data - should not be interpreted as absence of identity. + - '**Inclusive Design**: This field intentionally uses free text rather than a restrictive enumeration. People should + be able to express their gender in their own terms.' + - '**Common values** (not exhaustive, not required): man, woman, non-binary, genderqueer, genderfluid, agender, bigender, + two-spirit, transgender, cisgender, or any self-identified term.' + - '**Historical records**: For historical persons, use terms as recorded in sources where possible, or use contextually + appropriate terms.' + - '**Unknown/Not recorded**: Leave empty if unknown; do not assume.' + - '**Privacy**: This field may be left empty by choice. Absence of data should not be interpreted as absence of identity.' range: string examples: - - value: "non-binary" - description: "Self-identified non-binary person" - - value: "woman" - description: "Self-identified woman" - - value: "man" - description: "Self-identified man" - - value: "genderfluid" - description: "Self-identified genderfluid person" - - value: "two-spirit" - description: "Indigenous North American gender identity" - - value: "transgender woman" - description: "Self-identified transgender woman" - - value: "not specified" - description: "Person chose not to specify" + - value: non-binary + description: Self-identified non-binary person + - value: woman + description: Self-identified woman + - value: man + description: Self-identified man + - value: genderfluid + description: Self-identified genderfluid person + - value: two-spirit + description: Indigenous North American gender identity + - value: transgender woman + description: Self-identified transgender woman + - value: not specified + description: Person chose not to specify notes: - - >- - Schema.org explicitly states: "While https://schema.org/Male and - https://schema.org/Female may be used, text strings are also acceptable - for people who are not a binary gender." - - >- - FOAF defines foaf:gender as "The gender of this Agent (typically but - not necessarily 'male' or 'female')." - - >- - This approach aligns with modern data protection principles (GDPR) - regarding sensitive personal data and self-determination. - # NOTE: Applicable to all custodian types that track person data + - 'Schema.org explicitly states: "While https://schema.org/Male and https://schema.org/Female may be used, text strings + are also acceptable for people who are not a binary gender."' + - FOAF defines foaf:gender as "The gender of this Agent (typically but not necessarily 'male' or 'female')." + - This approach aligns with modern data protection principles (GDPR) regarding sensitive personal data and self-determination. + exact_mappings: + - schema:gender diff --git a/schemas/20251121/linkml/modules/slots/geographic_scope.yaml b/schemas/20251121/linkml/modules/slots/geographic_scope.yaml index 0541ea291f..702d9110eb 100644 --- a/schemas/20251121/linkml/modules/slots/geographic_scope.yaml +++ b/schemas/20251121/linkml/modules/slots/geographic_scope.yaml @@ -1,22 +1,23 @@ -# Global Slot: geographic_scope -# Geographic reach and scale of an entity's activities - id: https://nde.nl/ontology/hc/slot/geographic_scope name: geographic_scope_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - slots: geographic_scope: slot_uri: schema:areaServed - description: | - Geographic reach and scale of an entity's activities. + description: 'Geographic reach and scale of an entity''s activities. + May be country codes, region names, or descriptive terms + like "International", "Regional", "National", "Local". + + ' range: string multivalued: true + exact_mappings: + - dcterms:spatial + broad_mappings: + - dcterms:coverage diff --git a/schemas/20251121/linkml/modules/slots/geonames_id.yaml b/schemas/20251121/linkml/modules/slots/geonames_id.yaml index d9e84ddbe7..41772dab6e 100644 --- a/schemas/20251121/linkml/modules/slots/geonames_id.yaml +++ b/schemas/20251121/linkml/modules/slots/geonames_id.yaml @@ -1,40 +1,46 @@ -# geonames_id slot - GeoNames numeric identifier -# Used by: Settlement, AuxiliaryPlace, GeoSpatialPlace - id: https://nde.nl/ontology/hc/slot/geonames_id name: geonames_id_slot title: GeoNames ID Slot +description: 'GeoNames numeric identifier for geographic entities. + -description: | - GeoNames numeric identifier for geographic entities. - Format: Integer (e.g., 2759794 for Amsterdam, 5206379 for Pittsburgh) - + + Lookup: https://www.geonames.org/{geonames_id}/ - + + Benefits: + - Resolves ambiguity (41 "Springfield"s in USA have different IDs) + - Stable identifier (persists even if location name changes) + - Links to coordinates, population, timezone via GeoNames API + ' prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ gn: http://www.geonames.org/ontology# - slots: geonames_id: slot_uri: gn:geonamesID range: integer required: false multivalued: false - description: | - GeoNames numeric identifier for geographic entity. - Lookup: https://www.geonames.org/{geonames_id}/ - exact_mappings: - - gn:geonamesID + description: 'GeoNames numeric identifier for geographic entity. + Lookup: https://www.geonames.org/{geonames_id}/ + + ' + exact_mappings: + - gn:geonamesID + narrow_mappings: + - dcterms:identifier + broad_mappings: + - dcterms:identifier comments: - - "Used by Settlement, AuxiliaryPlace, and GeoSpatialPlace classes" - - "Lookup URL: https://www.geonames.org/{geonames_id}/" - - "Example: 2759794 (Amsterdam), 5206379 (Pittsburgh), 3451190 (Rio de Janeiro)" +- Used by Settlement, AuxiliaryPlace, and GeoSpatialPlace classes +- 'Lookup URL: https://www.geonames.org/{geonames_id}/' +- 'Example: 2759794 (Amsterdam), 5206379 (Pittsburgh), 3451190 (Rio de Janeiro)' diff --git a/schemas/20251121/linkml/modules/slots/given_name.yaml b/schemas/20251121/linkml/modules/slots/given_name.yaml index aeaf0ea375..181d6f0c1f 100644 --- a/schemas/20251121/linkml/modules/slots/given_name.yaml +++ b/schemas/20251121/linkml/modules/slots/given_name.yaml @@ -1,46 +1,62 @@ id: https://nde.nl/ontology/hc/slot/given_name name: given_name title: Given Name - prefixes: pnv: https://w3id.org/pnv# sdo: https://schema.org/ - imports: - - linkml:types - +- linkml:types slots: given_name: slot_uri: pnv:givenName - description: | - The name(s) given to someone at birth or any other name-giving event. - + description: 'The name(s) given to someone at birth or any other name-giving event. + + In the Person Name Vocabulary (PNV), this represents the given name + component of a structured person name. It may include: - + + - Single given name: "Pieter" + - Multiple given names: "Jan Willem" + - Nicknames/call names: "Hans" (from "H.A.F.M.O. (Hans)") + - Diminutives: "Pietje" - + + For historical Dutch records, this typically corresponds to the + "voornaam" (first name) or "roepnaam" (call name). - + + If only initials are known, either: + - Use the initials slot (preferred): "P.R." + - Or put initials here as fallback: "P.R." - + + Examples: + - "Maria" (simple given name) + - "Johannes Wilhelmus" (multiple given names) + - "Hans" (extracted from "H.A.F.M.O. (Hans) van Mierlo") + - "Geertje" (diminutive of Geertruid) - + + ' range: string exact_mappings: - - pnv:givenName + - pnv:givenName + - schema:givenName close_mappings: - - sdo:givenName - - foaf:firstName + - sdo:givenName + - foaf:firstName related_mappings: - - foaf:givenName + - foaf:givenName + broad_mappings: + - rdfs:label diff --git a/schemas/20251121/linkml/modules/slots/has_collection.yaml b/schemas/20251121/linkml/modules/slots/has_collection.yaml index 694657618f..ed75281e69 100644 --- a/schemas/20251121/linkml/modules/slots/has_collection.yaml +++ b/schemas/20251121/linkml/modules/slots/has_collection.yaml @@ -1,54 +1,32 @@ -# Custodian Slot: has_collection -# Links Custodian hub to CustodianCollection aspect -# Inverse of collection_of (crm:P46i_forms_part_of) - id: https://nde.nl/ontology/hc/slot/has_collection name: has_collection_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ crm: http://www.cidoc-crm.org/cidoc-crm/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: has_collection: slot_uri: crm:P46_is_composed_of - description: | - Heritage collection(s) associated with this custodian. - - **CIDOC-CRM Alignment**: - - Property: `crm:P46_is_composed_of` - - Domain: E18_Physical_Thing (Custodian conceptually) - - Range: E18_Physical_Thing (CustodianCollection) - - Definition: "This property associates an instance of E18 Physical Thing - with another instance of E18 Physical Thing that forms a component of it." - - **INVERSE PROPERTY**: - - **Inverse**: `collection_of` (crm:P46i_forms_part_of) - - Pattern: If Custodian hasCollection Collection, then Collection collectionOf Custodian - - This property enables metonymic references: when people refer to a custodian, - they often mean its collection. CustodianCollection makes this explicit. - - **Examples**: - - "The Rijksmuseum has a Rembrandt" = Collection aspect contains artwork - - "The Archives holds parish records" = Collection aspect includes documents + description: "Heritage collection(s) associated with this custodian.\n\n**CIDOC-CRM Alignment**:\n\nProperty: `crm:P46_is_composed_of`\n\ + - Domain: E18_Physical_Thing (Custodian conceptually)\n- Range: E18_Physical_Thing (CustodianCollection)\n- Definition:\ + \ \"This property associates an instance of E18 Physical Thing \n with another instance of E18 Physical Thing that\ + \ forms a component of it.\"\n\n**INVERSE PROPERTY**:\n- **Inverse**: `collection_of` (crm:P46i_forms_part_of)\n- Pattern:\ + \ If Custodian hasCollection Collection, then Collection collectionOf Custodian\n\nThis property enables metonymic references:\ + \ when people refer to a custodian,\nthey often mean its collection. CustodianCollection makes this explicit.\n\n**Examples**:\n\ + - \"The Rijksmuseum has a Rembrandt\" = Collection aspect contains artwork\n- \"The Archives holds parish records\"\ + \ = Collection aspect includes documents\n" range: CustodianCollection multivalued: true inlined_as_list: true - exact_mappings: - - crm:P46_is_composed_of - + - crm:P46_is_composed_of related_mappings: - - rico:includesOrIncluded - - schema:hasPart - + - rico:includesOrIncluded + - schema:hasPart + - rdf:type comments: - - "Inverse of collection_of (crm:P46i_forms_part_of)" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of collection_of (crm:P46i_forms_part_of) + - Creates owl:inverseOf axiom in RDF output diff --git a/schemas/20251121/linkml/modules/slots/has_derived_observation.yaml b/schemas/20251121/linkml/modules/slots/has_derived_observation.yaml index b188dee558..924355820b 100644 --- a/schemas/20251121/linkml/modules/slots/has_derived_observation.yaml +++ b/schemas/20251121/linkml/modules/slots/has_derived_observation.yaml @@ -1,54 +1,33 @@ -# Slot: has_derived_observation -# Inverse of derived_from_entity -# Links CustodianLegalStatus to CustodianObservations that reference it - id: https://nde.nl/ontology/hc/slot/has_derived_observation name: has_derived_observation title: Has Derived Observation - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: has_derived_observation: slot_uri: prov:hadDerivation - description: | - Observations that were derived from (reference) this legal status entity. - - **INVERSE PROPERTY**: - - **Inverse**: `derived_from_entity` - - Pattern: If Observation derived_from_entity LegalStatus, then LegalStatus has_derived_observation Observation - - **Provenance semantics** (PROV-O): - - `prov:wasDerivedFrom` (derived_from_entity): Observation → LegalStatus - - `prov:hadDerivation` (this slot): LegalStatus → Observation - - **Example**: - ```yaml - CustodianLegalStatus: - legal_name: "Stichting Rijksmuseum" - has_derived_observation: - - "https://nde.nl/ontology/hc/observation/rm-obs-2024-001" - - "https://nde.nl/ontology/hc/observation/rm-obs-2024-002" - ``` - - **Navigation**: - - From legal status: Find all observations that reference it (has_derived_observation) - - From observation: Find formal entity it references (derived_from_entity) - - **Use case**: Track which source observations led to a legal status entity being - identified or updated. Enables provenance chain traversal in both directions. + description: "Observations that were derived from (reference) this legal status entity.\n\n**INVERSE PROPERTY**:\n- **Inverse**:\ + \ `derived_from_entity`\n- Pattern: If Observation derived_from_entity LegalStatus, then LegalStatus has_derived_observation\ + \ Observation\n\n**Provenance semantics** (PROV-O):\n- `prov:wasDerivedFrom` (derived_from_entity): Observation → LegalStatus\n\ + - `prov:hadDerivation` (this slot): LegalStatus → Observation\n\n**Example**:\n```yaml\nCustodianLegalStatus:\n legal_name:\ + \ \"Stichting Rijksmuseum\"\n has_derived_observation:\n - \"https://nde.nl/ontology/hc/observation/rm-obs-2024-001\"\ + \n - \"https://nde.nl/ontology/hc/observation/rm-obs-2024-002\"\n```\n\n**Navigation**:\n- From legal status: Find\ + \ all observations that reference it (has_derived_observation)\n- From observation: Find formal entity it references\ + \ (derived_from_entity)\n\n**Use case**: Track which source observations led to a legal status entity being\nidentified\ + \ or updated. Enables provenance chain traversal in both directions.\n" range: CustodianObservation multivalued: true - comments: - - "Inverse of derived_from_entity" - - "Links legal status back to observations that reference it" - - "Creates owl:inverseOf axiom in RDF output" - - "PROV-O pattern: prov:hadDerivation is inverse of prov:wasDerivedFrom" + - Inverse of derived_from_entity + - Links legal status back to observations that reference it + - Creates owl:inverseOf axiom in RDF output + - 'PROV-O pattern: prov:hadDerivation is inverse of prov:wasDerivedFrom' + related_mappings: + - rdf:type + broad_mappings: + - prov:Entity diff --git a/schemas/20251121/linkml/modules/slots/has_feature_type.yaml b/schemas/20251121/linkml/modules/slots/has_feature_type.yaml index 8af6aeb2aa..15d87ea8be 100644 --- a/schemas/20251121/linkml/modules/slots/has_feature_type.yaml +++ b/schemas/20251121/linkml/modules/slots/has_feature_type.yaml @@ -1,41 +1,46 @@ -# has_feature_type slot - Physical feature type classification -# Used by: CustodianPlace, AuxiliaryPlace - id: https://nde.nl/ontology/hc/slot/has_feature_type name: has_feature_type_slot title: Has Feature Type Slot +description: 'Physical feature type classification for a place. + -description: | - Physical feature type classification for a place. - Links to FeaturePlace which classifies WHAT TYPE of physical feature the place is. - + + Dublin Core: type for classification relationship. - + + Examples: + - "Rijksmuseum" (place name) → MUSEUM (feature type) + - "het herenhuis" → MANSION (feature type) + - "de kerk op het Damrak" → PARISH_CHURCH (feature type) + - "Depot Amersfoort" → STORAGE_FACILITY (feature type) + ' prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - slots: has_feature_type: slot_uri: dcterms:type range: FeaturePlace required: false multivalued: false - description: | - Physical feature type classification for a place. - Links to FeaturePlace which classifies WHAT TYPE of physical feature the place is. - exact_mappings: - - dcterms:type + description: 'Physical feature type classification for a place. + Links to FeaturePlace which classifies WHAT TYPE of physical feature the place is. + + ' + exact_mappings: + - dcterms:type + related_mappings: + - rdf:type comments: - - "Used by CustodianPlace (main places) and AuxiliaryPlace (subordinate sites)" - - "Links to FeaturePlace class which provides enumeration of physical feature types" - - "Optional - not all place references require explicit feature typing" +- Used by CustodianPlace (main places) and AuxiliaryPlace (subordinate sites) +- Links to FeaturePlace class which provides enumeration of physical feature types +- Optional - not all place references require explicit feature typing diff --git a/schemas/20251121/linkml/modules/slots/has_geospatial_location.yaml b/schemas/20251121/linkml/modules/slots/has_geospatial_location.yaml index dddd96366e..d34a4ffac5 100644 --- a/schemas/20251121/linkml/modules/slots/has_geospatial_location.yaml +++ b/schemas/20251121/linkml/modules/slots/has_geospatial_location.yaml @@ -1,36 +1,44 @@ -# has_geospatial_location slot - Links to geospatial coordinates -# Used by: CustodianPlace, AuxiliaryPlace - id: https://nde.nl/ontology/hc/slot/has_geospatial_location name: has_geospatial_location_slot title: Has Geospatial Location Slot +description: 'Links a nominal place reference to its precise geospatial coordinates. + -description: | - Links a nominal place reference to its precise geospatial coordinates. - **CRITICAL DISTINCTION**: - + + | Nominal Place | GeoSpatialPlace | + |---------------|-----------------| + | Name-based reference | Geospatial data | + | "het herenhuis in de Schilderswijk" | lat: 52.0705, lon: 4.2894 | + | Identifies place by name | Locates place precisely | + | May be vague ("the mansion") | Precise, measurable | + | Source: archival documents | Source: GPS, cadastral surveys | - + + **TOOI Ontology Pattern**: - + + Following TOOI BestuurlijkeRuimte pattern: + - TOOI: tooi:BestuurlijkeRuimte → tooi:hasGeometry → geosparql:Geometry + - Here: Place → has_geospatial_location → GeoSpatialPlace - + + GeoSPARQL: hasGeometry links Feature to Geometry representation. + ' prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ geosparql: http://www.opengis.net/ont/geosparql# - slots: has_geospatial_location: slot_uri: geosparql:hasGeometry @@ -38,14 +46,19 @@ slots: required: false multivalued: true inlined_as_list: true - description: | - Links a nominal place reference to its precise geospatial coordinates. - GeoSPARQL: hasGeometry links Feature to Geometry representation. - exact_mappings: - - geosparql:hasGeometry + description: 'Links a nominal place reference to its precise geospatial coordinates. + GeoSPARQL: hasGeometry links Feature to Geometry representation. + + ' + exact_mappings: + - geosparql:hasGeometry + related_mappings: + - rdf:type + broad_mappings: + - schema:location comments: - - "Used by CustodianPlace (main places) and AuxiliaryPlace (subordinate sites)" - - "Links to GeoSpatialPlace class with coordinates, WKT geometry, GeoNames IDs" - - "Multivalued - a place can have multiple geospatial locations (e.g., historical boundaries)" - - "Optional - not all place references have known coordinates" +- Used by CustodianPlace (main places) and AuxiliaryPlace (subordinate sites) +- Links to GeoSpatialPlace class with coordinates, WKT geometry, GeoNames IDs +- Multivalued - a place can have multiple geospatial locations (e.g., historical boundaries) +- Optional - not all place references have known coordinates diff --git a/schemas/20251121/linkml/modules/slots/has_member.yaml b/schemas/20251121/linkml/modules/slots/has_member.yaml index 484a455692..115874c7c1 100644 --- a/schemas/20251121/linkml/modules/slots/has_member.yaml +++ b/schemas/20251121/linkml/modules/slots/has_member.yaml @@ -1,75 +1,38 @@ -# Slot: has_member -# Inverse of is_member_of (org:memberOf) -# W3C ORG pattern: org:hasMember ↔ org:memberOf - id: https://nde.nl/ontology/hc/slot/has_member name: has_member title: Has Member - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# foaf: http://xmlns.com/foaf/0.1/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: has_member: slot_uri: org:hasMember - description: | - Custodians that are members of this encompassing body (network, consortium, - umbrella organization). - - **W3C ORG Alignment**: - - Property: `org:hasMember` - - Domain: org:Organization (EncompassingBody) - - Range: foaf:Agent (Custodian) - - Definition: "Indicates an Agent who is a member of the Organization - with no indication of the nature of that membership." - - Equivalent to: foaf:member - - **INVERSE PROPERTY**: - - **Inverse**: `is_member_of` (org:memberOf) - - Pattern: If Network hasMember Custodian, then Custodian memberOf Network - - **Example**: - ```yaml - EncompassingBody: - organization_name: "Netwerk Digitaal Erfgoed" - organization_type: "NETWORK" - has_member: - - "https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804" # Rijksmuseum - - "https://nde.nl/ontology/hc/nl-na" # National Archives - - "https://nde.nl/ontology/hc/nl-kb" # Royal Library - ``` - - **Navigation**: - - From network: Find all member custodians (has_member) - - From custodian: Find network memberships (is_member_of) - - **Membership Types**: - - Members can have different participation levels: - - Full members: Voting rights, full service access - - Associate members: Limited participation - - Observer status: Information sharing only - - For detailed membership modeling, use Membership class (future extension). + description: "Custodians that are members of this encompassing body (network, consortium,\numbrella organization).\n\n\ + **W3C ORG Alignment**:\n\nProperty: `org:hasMember`\n- Domain: org:Organization (EncompassingBody)\n- Range: foaf:Agent\ + \ (Custodian)\n- Definition: \"Indicates an Agent who is a member of the Organization \n with no indication of the\ + \ nature of that membership.\"\n- Equivalent to: foaf:member\n\n**INVERSE PROPERTY**:\n- **Inverse**: `is_member_of`\ + \ (org:memberOf)\n- Pattern: If Network hasMember Custodian, then Custodian memberOf Network\n\n**Example**:\n```yaml\n\ + EncompassingBody:\n organization_name: \"Netwerk Digitaal Erfgoed\"\n organization_type: \"NETWORK\"\n has_member:\n\ + \ - \"https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804\" # Rijksmuseum\n - \"https://nde.nl/ontology/hc/nl-na\"\ + \ # National Archives\n - \"https://nde.nl/ontology/hc/nl-kb\" # Royal Library\n```\n\n**Navigation**:\n- From\ + \ network: Find all member custodians (has_member)\n- From custodian: Find network memberships (is_member_of)\n\n**Membership\ + \ Types**:\n\nMembers can have different participation levels:\n- Full members: Voting rights, full service access\n\ + - Associate members: Limited participation\n- Observer status: Information sharing only\n\nFor detailed membership modeling,\ + \ use Membership class (future extension).\n" range: Custodian multivalued: true - exact_mappings: - - org:hasMember - - foaf:member - + - org:hasMember + - foaf:member related_mappings: - - schema:member - + - schema:member + - rdf:type comments: - - "Inverse of is_member_of (org:memberOf)" - - "Equivalent to foaf:member" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of is_member_of (org:memberOf) + - Equivalent to foaf:member + - Creates owl:inverseOf axiom in RDF output diff --git a/schemas/20251121/linkml/modules/slots/has_observation.yaml b/schemas/20251121/linkml/modules/slots/has_observation.yaml index f0c0bd6dcb..b1ac28701a 100644 --- a/schemas/20251121/linkml/modules/slots/has_observation.yaml +++ b/schemas/20251121/linkml/modules/slots/has_observation.yaml @@ -1,56 +1,33 @@ -# Slot: has_observation -# Inverse of refers_to_custodian -# Links Custodian hub to its observations - id: https://nde.nl/ontology/hc/slot/has_observation name: has_observation title: Has Observation - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: has_observation: slot_uri: dcterms:isReferencedBy - description: | - Observations that refer to this Custodian hub. - - **Hub Architecture Pattern**: - - The Custodian is a minimal hub entity. Multiple observations from - different sources can be linked to it, each capturing evidence from - a particular context. - - **INVERSE PROPERTY**: - - **Inverse**: `refers_to_custodian` (dcterms:references) - - Pattern: If Observation refers_to_custodian Custodian, then Custodian has_observation Observation - - **Example**: - ```yaml - Custodian: - hc_id: "https://nde.nl/ontology/hc/nl-nh-ams-m-rm" - has_observation: - - "https://nde.nl/ontology/hc/observation/isil-registry-2024" - - "https://nde.nl/ontology/hc/observation/wikidata-q190804" - - "https://nde.nl/ontology/hc/observation/website-scrape-2025" - ``` - - **Navigation**: - - From custodian: Find all observations (has_observation) - - From observation: Find custodian hub (refers_to_custodian) + description: "Observations that refer to this Custodian hub.\n\n**Hub Architecture Pattern**:\n\nThe Custodian is a minimal\ + \ hub entity. Multiple observations from\ndifferent sources can be linked to it, each capturing evidence from\na particular\ + \ context.\n\n**INVERSE PROPERTY**:\n- **Inverse**: `refers_to_custodian` (dcterms:references)\n- Pattern: If Observation\ + \ refers_to_custodian Custodian, then Custodian has_observation Observation\n\n**Example**:\n```yaml\nCustodian:\n \ + \ hc_id: \"https://nde.nl/ontology/hc/nl-nh-ams-m-rm\"\n has_observation:\n - \"https://nde.nl/ontology/hc/observation/isil-registry-2024\"\ + \n - \"https://nde.nl/ontology/hc/observation/wikidata-q190804\"\n - \"https://nde.nl/ontology/hc/observation/website-scrape-2025\"\ + \n```\n\n**Navigation**:\n- From custodian: Find all observations (has_observation)\n- From observation: Find custodian\ + \ hub (refers_to_custodian)\n" range: CustodianObservation multivalued: true - exact_mappings: - - dcterms:isReferencedBy - + - dcterms:isReferencedBy comments: - - "Inverse of refers_to_custodian (dcterms:references)" - - "Links custodian hub to all its evidence/observations" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of refers_to_custodian (dcterms:references) + - Links custodian hub to all its evidence/observations + - Creates owl:inverseOf axiom in RDF output + related_mappings: + - rdf:type + broad_mappings: + - prov:Entity diff --git a/schemas/20251121/linkml/modules/slots/has_person_name.yaml b/schemas/20251121/linkml/modules/slots/has_person_name.yaml index d9542815a3..5ae95c6d36 100644 --- a/schemas/20251121/linkml/modules/slots/has_person_name.yaml +++ b/schemas/20251121/linkml/modules/slots/has_person_name.yaml @@ -1,131 +1,72 @@ -# has_person_name slot -# Links a PersonObservation to a structured PersonName (PNV-aligned) -# -# This slot enables linking the simple person_name string to a fully -# structured PersonName class with PNV components (given_name, patronym, -# surname_prefix, base_surname, initials, etc.) - id: https://nde.nl/ontology/hc/slot/has_person_name name: has_person_name_slot title: Has Person Name (Structured PNV) - prefixes: pnv: https://w3id.org/pnv# pico: https://personsincontext.org/model# sdo: https://schema.org/ foaf: http://xmlns.com/foaf/0.1/ - imports: - - linkml:types - +- linkml:types slots: has_person_name: slot_uri: pnv:hasName - description: | - Structured name of the person following Person Name Vocabulary (PNV). - - =========================================================================== - RELATIONSHIP TO person_name SLOT - =========================================================================== - - PersonObservation has TWO name-related slots: - - 1. **person_name** (string): Simple full name as recorded in source - - Example: "Dr. Jane Smith" - - Always present for human-readable display - - Quick access without parsing structured components - - 2. **has_person_name** (PersonName): Structured name with PNV components - - Optional but recommended for Dutch/historical names - - Enables sorting by base_surname (Dutch convention) - - Supports patronymics, tussenvoegsels, initials - - Links to PersonName class with full PNV structure - - =========================================================================== - USE CASES FOR STRUCTURED NAMES - =========================================================================== - - 1. **Dutch Name Sorting**: - - "Maria de Vries" sorts under V (base_surname: "Vries") - - "Jan van den Berg" sorts under B (base_surname: "Berg") - - 2. **Historical Records with Patronymics**: - - "Jan Pieterszoon van der Waals" - - given_name: "Jan" - - patronym: "Pieterszoon" - - surname_prefix: "van der" - - base_surname: "Waals" - - 3. **Initial-Based Names (Common in NL)**: - - "H.A.F.M.O. (Hans) van Mierlo" - - initials: "H.A.F.M.O." - - given_name: "Hans" - - surname_prefix: "van" - - base_surname: "Mierlo" - - 4. **Unknown/Unnamed Persons** (historical records): - - name_specification: "unknown" or "unnamed" - - Prevents ambiguity between missing data and genuinely unnamed persons - - =========================================================================== - WHEN TO USE has_person_name - =========================================================================== - - ALWAYS use has_person_name when: - - Name has Dutch surname prefix (tussenvoegsel) - - Name has patronymic component - - Name contains initials alongside given name - - Historical name with uncertain/variable spelling - - Need to sort by base_surname (Dutch alphabetization) - - OPTIONAL (person_name string sufficient) when: - - Simple Western name: "John Smith" - - No special components to parse - - Quick data entry without structured analysis - - =========================================================================== - ONTOLOGY ALIGNMENT - =========================================================================== - - - PNV: `pnv:hasName` (primary - links person to PersonName) - - Schema.org: `sdo:name` (fallback for simple string via person_name slot) - - FOAF: `foaf:name` (fallback for simple string) - - CIDOC-CRM: `crm:P1_is_identified_by` (general identification relationship) - + description: "Structured name of the person following Person Name Vocabulary (PNV).\n\n===========================================================================\n\ + RELATIONSHIP TO person_name SLOT\n===========================================================================\n\nPersonObservation\ + \ has TWO name-related slots:\n\n1. **person_name** (string): Simple full name as recorded in source\n - Example:\ + \ \"Dr. Jane Smith\"\n - Always present for human-readable display\n - Quick access without parsing structured components\n\ + \n2. **has_person_name** (PersonName): Structured name with PNV components\n - Optional but recommended for Dutch/historical\ + \ names\n - Enables sorting by base_surname (Dutch convention)\n - Supports patronymics, tussenvoegsels, initials\n\ + \ - Links to PersonName class with full PNV structure\n\n===========================================================================\n\ + USE CASES FOR STRUCTURED NAMES\n===========================================================================\n\n1. **Dutch\ + \ Name Sorting**: \n - \"Maria de Vries\" sorts under V (base_surname: \"Vries\")\n - \"Jan van den Berg\" sorts\ + \ under B (base_surname: \"Berg\")\n\n2. **Historical Records with Patronymics**:\n - \"Jan Pieterszoon van der Waals\"\ + \n - given_name: \"Jan\"\n - patronym: \"Pieterszoon\"\n - surname_prefix: \"van der\"\n - base_surname: \"\ + Waals\"\n\n3. **Initial-Based Names (Common in NL)**:\n - \"H.A.F.M.O. (Hans) van Mierlo\"\n - initials: \"H.A.F.M.O.\"\ + \n - given_name: \"Hans\"\n - surname_prefix: \"van\"\n - base_surname: \"Mierlo\"\n\n4. **Unknown/Unnamed Persons**\ + \ (historical records):\n - name_specification: \"unknown\" or \"unnamed\"\n - Prevents ambiguity between missing\ + \ data and genuinely unnamed persons\n\n===========================================================================\n\ + WHEN TO USE has_person_name\n===========================================================================\n\nALWAYS use\ + \ has_person_name when:\n- Name has Dutch surname prefix (tussenvoegsel)\n- Name has patronymic component\n- Name contains\ + \ initials alongside given name\n- Historical name with uncertain/variable spelling\n- Need to sort by base_surname\ + \ (Dutch alphabetization)\n\nOPTIONAL (person_name string sufficient) when:\n- Simple Western name: \"John Smith\"\n\ + - No special components to parse\n- Quick data entry without structured analysis\n\n===========================================================================\n\ + ONTOLOGY ALIGNMENT\n===========================================================================\n\n- PNV: `pnv:hasName`\ + \ (primary - links person to PersonName)\n- Schema.org: `sdo:name` (fallback for simple string via person_name slot)\n\ + - FOAF: `foaf:name` (fallback for simple string)\n- CIDOC-CRM: `crm:P1_is_identified_by` (general identification relationship)\n" range: PersonName required: false inlined: true - comments: - - "PNV standard: https://w3id.org/pnv" - - "Use alongside person_name (string) for both quick access and structured parsing" - - "Essential for Dutch names with tussenvoegsels (van, de, van der, etc.)" - - "Enables proper alphabetical sorting by base_surname" - + - 'PNV standard: https://w3id.org/pnv' + - Use alongside person_name (string) for both quick access and structured parsing + - Essential for Dutch names with tussenvoegsels (van, de, van der, etc.) + - Enables proper alphabetical sorting by base_surname examples: - - value: - literal_name: "Prof. dr. Willem van der Berg" - given_name: "Willem" - surname_prefix: "van der" - base_surname: "Berg" - description: "Dutch name with title and tussenvoegsel, sorts under B" - - - value: - literal_name: "Jan Pieterszoon Sweelinck" - given_name: "Jan" - patronym: "Pieterszoon" - base_surname: "Sweelinck" - description: "Historical Dutch name with patronymic" - - - value: - literal_name: "H.A.F.M.O. (Hans) van Mierlo" - initials: "H.A.F.M.O." - given_name: "Hans" - surname_prefix: "van" - base_surname: "Mierlo" - description: "Dutch name with initials and call name" - - - value: - literal_name: null - name_specification: "unknown" - description: "Unknown person from historical record" + - value: + literal_name: Prof. dr. Willem van der Berg + given_name: Willem + surname_prefix: van der + base_surname: Berg + description: Dutch name with title and tussenvoegsel, sorts under B + - value: + literal_name: Jan Pieterszoon Sweelinck + given_name: Jan + patronym: Pieterszoon + base_surname: Sweelinck + description: Historical Dutch name with patronymic + - value: + literal_name: H.A.F.M.O. (Hans) van Mierlo + initials: H.A.F.M.O. + given_name: Hans + surname_prefix: van + base_surname: Mierlo + description: Dutch name with initials and call name + - value: + literal_name: null + name_specification: unknown + description: Unknown person from historical record + related_mappings: + - rdf:type + broad_mappings: + - rdfs:label diff --git a/schemas/20251121/linkml/modules/slots/has_person_observation.yaml b/schemas/20251121/linkml/modules/slots/has_person_observation.yaml index 71e538a0b4..84c6c01fe4 100644 --- a/schemas/20251121/linkml/modules/slots/has_person_observation.yaml +++ b/schemas/20251121/linkml/modules/slots/has_person_observation.yaml @@ -1,92 +1,43 @@ -# Slot: has_person_observation -# Inverse of refers_to_person -# Links Person hub to its observations -# ============================================================================= -# Following the pattern established by has_observation (for Custodian), this slot -# connects the Person hub to all PersonObservation entities that refer to it. -# -# DESIGN RATIONALE: -# - Enables bidirectional navigation: Person ↔ PersonObservation -# - Person hub contains minimal data; observations contain evidence -# - Multiple observations from different sources can be aggregated -# -# PICO ALIGNMENT: -# - Person → PersonObservation via pico:hasObservation -# - Inverse of pico:observationOf (refers_to_person) -# ============================================================================= - id: https://nde.nl/ontology/hc/slot/has_person_observation name: has_person_observation-slot title: Has Person Observation - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ pico: https://personsincontext.org/model# owl: http://www.w3.org/2002/07/owl# - default_prefix: hc - imports: - - linkml:types - - ../metadata - - ../classes/PersonObservation - +- linkml:types +- ../metadata +- ../classes/PersonObservation slots: has_person_observation: slot_uri: pico:hasObservation - description: | - PersonObservations that refer to this Person hub. - - **Hub Architecture Pattern**: - - The Person is a minimal hub entity containing just: - - person_id: Persistent identifier - - preferred_name: Canonical display name - - Multiple observations from different sources attach to this hub, - each capturing evidence from a particular context (LinkedIn, annual report, - staff directory, etc.). - - **INVERSE PROPERTY**: - - **Inverse**: `refers_to_person` (pico:observationOf) - - Pattern: If PersonObservation refers_to_person Person, then Person has_person_observation PersonObservation - - **Example**: - ```yaml - Person: - person_id: "https://nde.nl/ontology/hc/person/taco-dibbits" - preferred_name: "Taco Dibbits" - has_person_observation: - - "https://nde.nl/ontology/hc/observation/linkedin-taco-dibbits-2025" - - "https://nde.nl/ontology/hc/observation/annual-report-2023-td" - - "https://nde.nl/ontology/hc/observation/staff-directory-2024-td" - ``` - - **Navigation**: - - From person: Find all observations (has_person_observation) - - From observation: Find person hub (refers_to_person) - - **RELATIONSHIP TO has_observation (for Custodian)**: - - | Slot | On Class | Range | Purpose | - |------|----------|-------|---------| - | has_observation | Custodian | CustodianObservation | Link org hub to org observations | - | has_person_observation | Person | PersonObservation | Link person hub to person observations | + description: "PersonObservations that refer to this Person hub.\n\n**Hub Architecture Pattern**:\n\nThe Person is a minimal\ + \ hub entity containing just:\n- person_id: Persistent identifier\n- preferred_name: Canonical display name\n\nMultiple\ + \ observations from different sources attach to this hub,\neach capturing evidence from a particular context (LinkedIn,\ + \ annual report,\nstaff directory, etc.).\n\n**INVERSE PROPERTY**:\n- **Inverse**: `refers_to_person` (pico:observationOf)\n\ + - Pattern: If PersonObservation refers_to_person Person, then Person has_person_observation PersonObservation\n\n**Example**:\n\ + ```yaml\nPerson:\n person_id: \"https://nde.nl/ontology/hc/person/taco-dibbits\"\n preferred_name: \"Taco Dibbits\"\ + \n has_person_observation:\n - \"https://nde.nl/ontology/hc/observation/linkedin-taco-dibbits-2025\"\n - \"https://nde.nl/ontology/hc/observation/annual-report-2023-td\"\ + \n - \"https://nde.nl/ontology/hc/observation/staff-directory-2024-td\"\n```\n\n**Navigation**:\n- From person: Find\ + \ all observations (has_person_observation)\n- From observation: Find person hub (refers_to_person)\n\n**RELATIONSHIP\ + \ TO has_observation (for Custodian)**:\n\n| Slot | On Class | Range | Purpose |\n|------|----------|-------|---------|\n\ + | has_observation | Custodian | CustodianObservation | Link org hub to org observations |\n| has_person_observation\ + \ | Person | PersonObservation | Link person hub to person observations |\n" range: PersonObservation multivalued: true - exact_mappings: - - pico:hasObservation + - pico:hasObservation close_mappings: - - dcterms:isReferencedBy - - # NOTE: inverse annotation removed to fix LinkML validation warning. - # The inverse relationship is conceptual (with refers_to_person) but cannot be - # enforced in LinkML without explicit domain declarations on both slots. - # The bidirectional relationship is documented in description and comments. + - dcterms:isReferencedBy comments: - - "Conceptual inverse of refers_to_person (pico:observationOf)" - - "Links person hub to all its evidence/observations" - - "Parallel to has_observation slot on Custodian" + - Conceptual inverse of refers_to_person (pico:observationOf) + - Links person hub to all its evidence/observations + - Parallel to has_observation slot on Custodian + related_mappings: + - rdf:type + broad_mappings: + - prov:Entity diff --git a/schemas/20251121/linkml/modules/slots/has_suborganization.yaml b/schemas/20251121/linkml/modules/slots/has_suborganization.yaml index 955ddc7699..58b4944a55 100644 --- a/schemas/20251121/linkml/modules/slots/has_suborganization.yaml +++ b/schemas/20251121/linkml/modules/slots/has_suborganization.yaml @@ -1,62 +1,33 @@ -# Slot: has_suborganization -# Inverse of parent_custodian (org:subOrganizationOf) -# W3C ORG pattern: org:hasSubOrganization ↔ org:subOrganizationOf - id: https://nde.nl/ontology/hc/slot/has_suborganization name: has_suborganization title: Has Sub-Organization - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: has_suborganization: slot_uri: org:hasSubOrganization - description: | - Child organizations contained within this custodian's organizational hierarchy. - - **W3C ORG Alignment**: - - Property: `org:hasSubOrganization` - - Domain: org:Organization - - Range: org:Organization - - Definition: "Represents hierarchical containment of Organizations or - Organizational Units; indicates an Organization which is a sub-part - or child of this Organization." - - **INVERSE PROPERTY**: - - **Inverse**: `parent_custodian` (org:subOrganizationOf) - - Pattern: If A hasSubOrganization B, then B subOrganizationOf A - - **Example**: - ```yaml - CustodianLegalStatus: - legal_name: "Ministry of Education, Culture and Science" - has_suborganization: - - "https://nde.nl/ontology/hc/nl-na" # National Archives - - "https://nde.nl/ontology/hc/nl-kb" # Royal Library - ``` - - **Navigation**: - - From parent: Find all subordinate organizations - - From child: Use parent_custodian to find parent organization + description: "Child organizations contained within this custodian's organizational hierarchy.\n\n**W3C ORG Alignment**:\n\ + \nProperty: `org:hasSubOrganization`\n- Domain: org:Organization\n- Range: org:Organization\n- Definition: \"Represents\ + \ hierarchical containment of Organizations or \n Organizational Units; indicates an Organization which is a sub-part\ + \ \n or child of this Organization.\"\n\n**INVERSE PROPERTY**:\n- **Inverse**: `parent_custodian` (org:subOrganizationOf)\n\ + - Pattern: If A hasSubOrganization B, then B subOrganizationOf A\n\n**Example**:\n```yaml\nCustodianLegalStatus:\n \ + \ legal_name: \"Ministry of Education, Culture and Science\"\n has_suborganization:\n - \"https://nde.nl/ontology/hc/nl-na\"\ + \ # National Archives\n - \"https://nde.nl/ontology/hc/nl-kb\" # Royal Library\n```\n\n**Navigation**:\n- From\ + \ parent: Find all subordinate organizations\n- From child: Use parent_custodian to find parent organization\n" range: CustodianLegalStatus multivalued: true - exact_mappings: - - org:hasSubOrganization - + - org:hasSubOrganization related_mappings: - - crm:P148_has_component - - rico:includesOrIncluded - + - crm:P148_has_component + - rico:includesOrIncluded + - rdf:type comments: - - "Inverse of parent_custodian (org:subOrganizationOf)" - - "Both directions should be maintained for query efficiency" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of parent_custodian (org:subOrganizationOf) + - Both directions should be maintained for query efficiency + - Creates owl:inverseOf axiom in RDF output diff --git a/schemas/20251121/linkml/modules/slots/has_unit.yaml b/schemas/20251121/linkml/modules/slots/has_unit.yaml index 3006b8aac7..44545311e7 100644 --- a/schemas/20251121/linkml/modules/slots/has_unit.yaml +++ b/schemas/20251121/linkml/modules/slots/has_unit.yaml @@ -1,67 +1,34 @@ -# Slot: has_unit -# Inverse of parent_unit (org:unitOf) -# W3C ORG pattern: org:hasUnit ↔ org:unitOf - id: https://nde.nl/ontology/hc/slot/has_unit name: has_unit title: Has Organizational Unit - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: has_unit: slot_uri: org:hasUnit - description: | - Organizational units (departments, divisions, teams) that are part of - this organizational structure. - - **W3C ORG Alignment**: - - Property: `org:hasUnit` - - Domain: org:FormalOrganization - - Range: org:OrganizationalUnit - - Definition: "Indicates a unit which is part of this Organization, - e.g. a Department within a larger FormalOrganization." - - **INVERSE PROPERTY**: - - **Inverse**: `parent_unit` (org:unitOf) - - Pattern: If A hasUnit B, then B unitOf A - - **Example**: - ```yaml - OrganizationalStructure: - unit_name: "Collections Division" - has_unit: - - unit_name: "Paintings Department" - - unit_name: "Prints and Drawings Department" - - unit_name: "Applied Arts Department" - ``` - - **Hierarchical Navigation**: - - Down: has_unit → child units - - Up: parent_unit → parent unit - - **Relationship to managed_collections**: - - `has_unit`: Structural containment (departments within divisions) - - `managed_collections`: Functional responsibility (which collections a unit manages) + description: "Organizational units (departments, divisions, teams) that are part of \nthis organizational structure.\n\ + \n**W3C ORG Alignment**:\n\nProperty: `org:hasUnit`\n- Domain: org:FormalOrganization\n- Range: org:OrganizationalUnit\n\ + - Definition: \"Indicates a unit which is part of this Organization, \n e.g. a Department within a larger FormalOrganization.\"\ + \n\n**INVERSE PROPERTY**:\n- **Inverse**: `parent_unit` (org:unitOf)\n- Pattern: If A hasUnit B, then B unitOf A\n\n\ + **Example**:\n```yaml\nOrganizationalStructure:\n unit_name: \"Collections Division\"\n has_unit:\n - unit_name:\ + \ \"Paintings Department\"\n - unit_name: \"Prints and Drawings Department\"\n - unit_name: \"Applied Arts Department\"\ + \n```\n\n**Hierarchical Navigation**:\n- Down: has_unit → child units\n- Up: parent_unit → parent unit\n\n**Relationship\ + \ to managed_collections**:\n- `has_unit`: Structural containment (departments within divisions)\n- `managed_collections`:\ + \ Functional responsibility (which collections a unit manages)\n" range: OrganizationalStructure multivalued: true - exact_mappings: - - org:hasUnit - + - org:hasUnit related_mappings: - - crm:P148_has_component - - rico:includesOrIncluded - + - crm:P148_has_component + - rico:includesOrIncluded + - rdf:type comments: - - "Inverse of parent_unit (org:unitOf)" - - "Enables top-down navigation of organizational hierarchy" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of parent_unit (org:unitOf) + - Enables top-down navigation of organizational hierarchy + - Creates owl:inverseOf axiom in RDF output diff --git a/schemas/20251121/linkml/modules/slots/hc_id.yaml b/schemas/20251121/linkml/modules/slots/hc_id.yaml index b1500ef52e..e114c67d01 100644 --- a/schemas/20251121/linkml/modules/slots/hc_id.yaml +++ b/schemas/20251121/linkml/modules/slots/hc_id.yaml @@ -1,33 +1,22 @@ -# Slot: hc_id -# The persistent identifier for heritage custodian hubs - id: https://nde.nl/ontology/hc/slot/hc_id name: hc_id-slot - slots: hc_id: - description: | - The persistent identifier for a heritage custodian entity in the NDE Heritage - Custodian ontology. This is the core identifier that serves as the hub connecting - all observations, reconstructions, and names related to this custodian. - - Format: https://nde.nl/ontology/hc/{abstracted-ghcid} - Example: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804 - - The ID is derived from the GHCID pattern but abstracted/normalized for use - as a persistent URI in the ontology namespace. + description: "The persistent identifier for a heritage custodian entity in the NDE Heritage \nCustodian ontology. This\ + \ is the core identifier that serves as the hub connecting\nall observations, reconstructions, and names related to\ + \ this custodian.\n\nFormat: https://nde.nl/ontology/hc/{abstracted-ghcid}\nExample: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804\n\ + \nThe ID is derived from the GHCID pattern but abstracted/normalized for use\nas a persistent URI in the ontology namespace.\n" slot_uri: dcterms:identifier range: uriorcurie required: true identifier: true - pattern: "^https://nde\\.nl/ontology/hc/[a-z0-9-]+$" + pattern: ^https://nde\.nl/ontology/hc/[a-z0-9-]+$ comments: - - >- - This is THE identifying property for custodian entities. All other properties - and relationships connect through this hub identifier. - - >- - The path component after /hc/ is an abstracted, lowercased, hyphenated version - of the GHCID pattern (country-region-city-type-abbrev-qnumber). + - This is THE identifying property for custodian entities. All other properties and relationships connect through this + hub identifier. + - The path component after /hc/ is an abstracted, lowercased, hyphenated version of the GHCID pattern (country-region-city-type-abbrev-qnumber). see_also: - - https://nde.nl/ontology/hc/ - - https://www.dublincore.org/specifications/dublin-core/dcmi-terms/#identifier + - https://nde.nl/ontology/hc/ + - https://www.dublincore.org/specifications/dublin-core/dcmi-terms/#identifier + broad_mappings: + - dcterms:identifier diff --git a/schemas/20251121/linkml/modules/slots/holds_record_set_types.yaml b/schemas/20251121/linkml/modules/slots/holds_record_set_types.yaml index f21752d670..25d07953d3 100644 --- a/schemas/20251121/linkml/modules/slots/holds_record_set_types.yaml +++ b/schemas/20251121/linkml/modules/slots/holds_record_set_types.yaml @@ -1,97 +1,56 @@ -# Custodian Slot: holds_record_set_types -# Links heritage custodians to the types of record sets they hold -# -# This slot provides a formal way to document what types of record sets -# are within the scope of a particular heritage custodian, replacing -# free-text scope descriptions with structured semantic relationships. -# -# RiC-O Alignment: rico:isOrWasHolderOf (Agent → RecordResource) -# The inverse relationship from the perspective of the custodian type class. -# -# Generation date: 2026-01-05 - id: https://nde.nl/ontology/hc/slot/holds_record_set_types name: holds_record_set_types_slot title: Holds Record Set Types Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ rico: https://www.ica.org/standards/RiC/ontology# schema: http://schema.org/ skos: http://www.w3.org/2004/02/skos/core# - default_prefix: hc - imports: - - linkml:types - +- linkml:types slots: holds_record_set_types: slot_uri: rico:isOrWasHolderOf range: uriorcurie multivalued: true - description: | - Links a heritage custodian type to the record set types it typically holds. - - **RiC-O Alignment**: - This slot maps to `rico:isOrWasHolderOf` which "Connects an Agent to a - Record Resource or Instantiation that the Agent holds or held." - - - Domain: Agent (including CorporateBody, which heritage custodians are) - - Range: RecordResource or Instantiation (including RecordSet types) - - Inverse: `rico:hasOrHadHolder` - - **Purpose**: - Replaces free-text "Scope" descriptions in custodian type classes with - structured semantic links to defined RecordSetType classes. - - **Example** (AcademicArchive): - ```yaml - holds_record_set_types: - - hc:UniversityAdministrativeFonds - - hc:StudentRecordSeries - - hc:FacultyPaperCollection - - hc:CampusDocumentationCollection - ``` - - This formally documents that academic archives typically hold: - - Administrative records from university governance (fonds) - - Student records series (enrollment, transcripts, graduation) - - Personal papers of faculty members (collection) - - Campus documentation (photos, publications, ephemera) - - **Dual-Class Pattern Integration**: - This slot bridges the custodian type (ArchiveOrganizationType subclass) - with its corresponding RecordSetType subclasses, completing the dual-class - pattern for heritage institutions. - - **Ontological Semantics**: - - The custodian is the Agent (rico:CorporateBody) - - The record set types are the RecordResource classifications - - The relationship expresses custodial responsibility for these record types + description: "Links a heritage custodian type to the record set types it typically holds.\n\n**RiC-O Alignment**:\nThis\ + \ slot maps to `rico:isOrWasHolderOf` which \"Connects an Agent to a \nRecord Resource or Instantiation that the Agent\ + \ holds or held.\"\n\n- Domain: Agent (including CorporateBody, which heritage custodians are)\n- Range: RecordResource\ + \ or Instantiation (including RecordSet types)\n- Inverse: `rico:hasOrHadHolder`\n\n**Purpose**:\nReplaces free-text\ + \ \"Scope\" descriptions in custodian type classes with \nstructured semantic links to defined RecordSetType classes.\n\ + \n**Example** (AcademicArchive):\n```yaml\nholds_record_set_types:\n - hc:UniversityAdministrativeFonds\n - hc:StudentRecordSeries\n\ + \ - hc:FacultyPaperCollection\n - hc:CampusDocumentationCollection\n```\n\nThis formally documents that academic archives\ + \ typically hold:\n- Administrative records from university governance (fonds)\n- Student records series (enrollment,\ + \ transcripts, graduation)\n- Personal papers of faculty members (collection)\n- Campus documentation (photos, publications,\ + \ ephemera)\n\n**Dual-Class Pattern Integration**:\nThis slot bridges the custodian type (ArchiveOrganizationType subclass)\ + \ \nwith its corresponding RecordSetType subclasses, completing the dual-class \npattern for heritage institutions.\n\ + \n**Ontological Semantics**:\n- The custodian is the Agent (rico:CorporateBody)\n- The record set types are the RecordResource\ + \ classifications\n- The relationship expresses custodial responsibility for these record types\n" annotations: custodian_types: '["*"]' - custodian_types_rationale: >- - holds_record_set_types applies to all custodian types - used for linking - any heritage institution type to the record/collection types it holds. + custodian_types_rationale: holds_record_set_types applies to all custodian types - used for linking any heritage institution + type to the record/collection types it holds. rico_property: rico:isOrWasHolderOf rico_property_uri: https://www.ica.org/standards/RiC/ontology#isOrWasHolderOf rico_inverse: rico:hasOrHadHolder rico_domain: rico:Agent - rico_range: "rico:RecordResource | rico:Instantiation" - rico_cm_correspondence: "RiC-R039 ('is or was holder of' relation)" + rico_range: rico:RecordResource | rico:Instantiation + rico_cm_correspondence: RiC-R039 ('is or was holder of' relation) examples: - - value: - - hc:UniversityAdministrativeFonds - - hc:StudentRecordSeries - - hc:FacultyPaperCollection - - hc:CampusDocumentationCollection - description: "Academic archive holds these record set types" - - value: - - hc:CouncilGovernanceFonds - - hc:CivilRegistrySeries - - hc:MunicipalAdministrationFonds - - hc:UrbanPlanningCollection - - hc:LocalHistoryCollection - description: "Municipal archive holds these record set types" + - value: + - hc:UniversityAdministrativeFonds + - hc:StudentRecordSeries + - hc:FacultyPaperCollection + - hc:CampusDocumentationCollection + description: Academic archive holds these record set types + - value: + - hc:CouncilGovernanceFonds + - hc:CivilRegistrySeries + - hc:MunicipalAdministrationFonds + - hc:UrbanPlanningCollection + - hc:LocalHistoryCollection + description: Municipal archive holds these record set types + close_mappings: + - rico:hasRecordSetType diff --git a/schemas/20251121/linkml/modules/slots/html_file.yaml b/schemas/20251121/linkml/modules/slots/html_file.yaml index 481ee274c7..1193475d4f 100644 --- a/schemas/20251121/linkml/modules/slots/html_file.yaml +++ b/schemas/20251121/linkml/modules/slots/html_file.yaml @@ -1,25 +1,19 @@ -# Slot: html_file -# Path to archived HTML file for provenance tracking - id: https://nde.nl/ontology/hc/slot/html_file name: html_file_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# - imports: - - linkml:types - +- linkml:types default_range: string - slots: html_file: slot_uri: prov:used - description: >- - Relative path to the archived HTML file containing the source content. - Path is relative to the custodian data file. - Archive format: Playwright-rendered HTML (fully rendered DOM). - Example: web/NL-ZH-ZUI-M-LMT/landbouwmuseumtiengemeten.nl/rendered.html + description: 'Relative path to the archived HTML file containing the source content. Path is relative to the custodian + data file. Archive format: Playwright-rendered HTML (fully rendered DOM). Example: web/NL-ZH-ZUI-M-LMT/landbouwmuseumtiengemeten.nl/rendered.html' range: string + related_mappings: + - dcterms:source + broad_mappings: + - dcterms:source diff --git a/schemas/20251121/linkml/modules/slots/humidity_tolerance.yaml b/schemas/20251121/linkml/modules/slots/humidity_tolerance.yaml index 80aed0938c..cef77b2490 100644 --- a/schemas/20251121/linkml/modules/slots/humidity_tolerance.yaml +++ b/schemas/20251121/linkml/modules/slots/humidity_tolerance.yaml @@ -1,21 +1,15 @@ -# Slot: humidity_tolerance -# Acceptable humidity deviation from target - id: https://nde.nl/ontology/hc/slot/humidity_tolerance name: humidity_tolerance_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: humidity_tolerance: slot_uri: hc:humidityTolerance range: float - description: >- - Acceptable relative humidity deviation (±) from target value as percentage. + description: Acceptable relative humidity deviation (±) from target value as percentage. + related_mappings: + - schema:additionalProperty diff --git a/schemas/20251121/linkml/modules/slots/id.yaml b/schemas/20251121/linkml/modules/slots/id.yaml index 6c0e88c9c8..e5d43d0f8f 100644 --- a/schemas/20251121/linkml/modules/slots/id.yaml +++ b/schemas/20251121/linkml/modules/slots/id.yaml @@ -1,12 +1,12 @@ -# Base Slot: id -# Unique identifier for resources - id: https://nde.nl/ontology/hc/slot/id name: id_slot - slots: id: identifier: true slot_uri: dcterms:identifier range: uriorcurie - description: "Unique identifier for this resource" + description: Unique identifier for this resource + exact_mappings: + - dcterms:identifier + close_mappings: + - schema:identifier diff --git a/schemas/20251121/linkml/modules/slots/identified_by.yaml b/schemas/20251121/linkml/modules/slots/identified_by.yaml index ed326d1f62..36f0ea4524 100644 --- a/schemas/20251121/linkml/modules/slots/identified_by.yaml +++ b/schemas/20251121/linkml/modules/slots/identified_by.yaml @@ -1,63 +1,34 @@ -# Slot: identified_by -# Inverse of identifies_custodian -# Links Custodian hub to its identifiers - id: https://nde.nl/ontology/hc/slot/identified_by name: identified_by title: Identified By - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ crm: http://www.cidoc-crm.org/cidoc-crm/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: identified_by: slot_uri: crm:P1_is_identified_by - description: | - Identifiers and appellations that identify this Custodian hub. - - **CIDOC-CRM Alignment**: - - Property: `crm:P1_is_identified_by` - - Domain: E1_CRM_Entity (Custodian) - - Range: E41_Appellation (CustodianIdentifier, CustodianAppellation) - - Definition: "This property describes the naming or identification of - any real-world item by a name or any other identifier." - - **INVERSE PROPERTY**: - - **Inverse**: `identifies_custodian` (crm:P1i_identifies) - - Pattern: If Identifier identifies_custodian Custodian, then Custodian identified_by Identifier - - **Example**: - ```yaml - Custodian: - hc_id: "https://nde.nl/ontology/hc/nl-nh-ams-m-rm" - identified_by: - - identifier_scheme: ISIL - identifier_value: "NL-AmRM" - - identifier_scheme: Wikidata - identifier_value: "Q190804" - ``` - - **Navigation**: - - From custodian: Find all identifiers (identified_by) - - From identifier: Find custodian (identifies_custodian) + description: "Identifiers and appellations that identify this Custodian hub.\n\n**CIDOC-CRM Alignment**:\n\nProperty:\ + \ `crm:P1_is_identified_by`\n- Domain: E1_CRM_Entity (Custodian)\n- Range: E41_Appellation (CustodianIdentifier, CustodianAppellation)\n\ + - Definition: \"This property describes the naming or identification of \n any real-world item by a name or any other\ + \ identifier.\"\n\n**INVERSE PROPERTY**:\n- **Inverse**: `identifies_custodian` (crm:P1i_identifies)\n- Pattern: If\ + \ Identifier identifies_custodian Custodian, then Custodian identified_by Identifier\n\n**Example**:\n```yaml\nCustodian:\n\ + \ hc_id: \"https://nde.nl/ontology/hc/nl-nh-ams-m-rm\"\n identified_by:\n - identifier_scheme: ISIL\n identifier_value:\ + \ \"NL-AmRM\"\n - identifier_scheme: Wikidata\n identifier_value: \"Q190804\"\n```\n\n**Navigation**:\n- From\ + \ custodian: Find all identifiers (identified_by)\n- From identifier: Find custodian (identifies_custodian)\n" range: CustodianIdentifier multivalued: true - exact_mappings: - - crm:P1_is_identified_by - + - crm:P1_is_identified_by related_mappings: - - schema:identifier - - dcterms:identifier - + - schema:identifier + - dcterms:identifier comments: - - "Inverse of identifies_custodian (crm:P1i_identifies)" - - "Links custodian to all its identifying codes and names" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of identifies_custodian (crm:P1i_identifies) + - Links custodian to all its identifying codes and names + - Creates owl:inverseOf axiom in RDF output + broad_mappings: + - prov:wasAttributedTo diff --git a/schemas/20251121/linkml/modules/slots/identifier_format_used.yaml b/schemas/20251121/linkml/modules/slots/identifier_format_used.yaml index 24cb2dde54..10cd943c01 100644 --- a/schemas/20251121/linkml/modules/slots/identifier_format_used.yaml +++ b/schemas/20251121/linkml/modules/slots/identifier_format_used.yaml @@ -1,49 +1,23 @@ -# Slot: identifier_format_used -# Links an identifier value to the specific format variant used - id: https://nde.nl/ontology/hc/slot/identifier_format_used name: identifier_format_used_slot title: Identifier Format Used Slot - prefixes: linkml: https://w3id.org/linkml/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types slots: identifier_format_used: slot_uri: schema:encodingFormat - description: | - The specific format variant used for this identifier value. - - Many identifier standards support multiple display formats: - - ISNI: "0000 0000 0000 0000" vs "0000000000000000" - - Wikidata: "Q12345" vs "http://www.wikidata.org/entity/Q12345" - - This slot records which format was used in the identifier_value. - - **Usage:** - - When storing an identifier, record both: - - identifier_value: The actual string value - - identifier_format_used: Which format variant it uses - - This enables: - - Validation against the correct pattern - - Transformation to other formats as needed - - Understanding if value is URI or compact form - - **Example:** - - ```yaml - identifier_value: "0000 0001 2146 5765" - identifier_format_used: - id: isni-display-format - format_name: "Display format with spaces" - is_canonical: false - ``` + description: "The specific format variant used for this identifier value.\n\nMany identifier standards support multiple\ + \ display formats:\n- ISNI: \"0000 0000 0000 0000\" vs \"0000000000000000\"\n- Wikidata: \"Q12345\" vs \"http://www.wikidata.org/entity/Q12345\"\ + \n\nThis slot records which format was used in the identifier_value.\n\n**Usage:**\n\nWhen storing an identifier, record\ + \ both:\n- identifier_value: The actual string value\n- identifier_format_used: Which format variant it uses\n\nThis\ + \ enables:\n- Validation against the correct pattern\n- Transformation to other formats as needed\n- Understanding if\ + \ value is URI or compact form\n\n**Example:**\n\n```yaml\nidentifier_value: \"0000 0001 2146 5765\"\nidentifier_format_used:\n\ + \ id: isni-display-format\n format_name: \"Display format with spaces\"\n is_canonical: false\n```\n" range: IdentifierFormat required: false inlined: false + close_mappings: + - dcterms:conformsTo diff --git a/schemas/20251121/linkml/modules/slots/identifier_scheme.yaml b/schemas/20251121/linkml/modules/slots/identifier_scheme.yaml index 75e9ede220..fe9178ae3b 100644 --- a/schemas/20251121/linkml/modules/slots/identifier_scheme.yaml +++ b/schemas/20251121/linkml/modules/slots/identifier_scheme.yaml @@ -1,11 +1,9 @@ -# Identifier Slot: identifier_scheme -# Identifier scheme name - id: https://nde.nl/ontology/hc/slot/identifier_scheme name: identifier_scheme_slot - slots: identifier_scheme: slot_uri: skos:inScheme range: string - description: "Identifier scheme (ISIL, Wikidata, VIAF, etc.)" + description: Identifier scheme (ISIL, Wikidata, VIAF, etc.) + related_mappings: + - dcterms:type diff --git a/schemas/20251121/linkml/modules/slots/identifier_value.yaml b/schemas/20251121/linkml/modules/slots/identifier_value.yaml index fe34987c83..c7e848982d 100644 --- a/schemas/20251121/linkml/modules/slots/identifier_value.yaml +++ b/schemas/20251121/linkml/modules/slots/identifier_value.yaml @@ -1,11 +1,11 @@ -# Identifier Slot: identifier_value -# Identifier value - id: https://nde.nl/ontology/hc/slot/identifier_value name: identifier_value_slot - slots: identifier_value: slot_uri: skos:notation range: string - description: "Identifier value" + description: Identifier value + exact_mappings: + - rdf:value + broad_mappings: + - rdf:value diff --git a/schemas/20251121/linkml/modules/slots/identifiers.yaml b/schemas/20251121/linkml/modules/slots/identifiers.yaml index c0b27a0aae..fcde4cf633 100644 --- a/schemas/20251121/linkml/modules/slots/identifiers.yaml +++ b/schemas/20251121/linkml/modules/slots/identifiers.yaml @@ -1,19 +1,19 @@ -# Custodian Slot: identifiers -# External identifiers assigned by authorities - id: https://nde.nl/ontology/hc/slot/identifiers name: identifiers_slot - imports: - - ../classes/Identifier - +- ../classes/Identifier slots: identifiers: slot_uri: crm:P48_has_preferred_identifier range: CustodianIdentifier multivalued: true inlined_as_list: true - description: | - External identifiers assigned to this custodian by authorities. + description: 'External identifiers assigned to this custodian by authorities. + CIDOC-CRM: P48_has_preferred_identifier links E1_CRM_Entity (Custodian) to E42_Identifier. + Examples: ISIL codes, Wikidata IDs, VIAF IDs, KvK numbers, ROR IDs. + + ' + close_mappings: + - dcterms:identifier diff --git a/schemas/20251121/linkml/modules/slots/identifies.yaml b/schemas/20251121/linkml/modules/slots/identifies.yaml index 5e720f035a..dfe49db740 100644 --- a/schemas/20251121/linkml/modules/slots/identifies.yaml +++ b/schemas/20251121/linkml/modules/slots/identifies.yaml @@ -1,55 +1,29 @@ -# Slot: identifies -# Inverse of identifiers -# Links CustodianIdentifier to the custodian it identifies - id: https://nde.nl/ontology/hc/slot/identifies name: identifies title: Identifies - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ crm: http://www.cidoc-crm.org/cidoc-crm/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: identifies: slot_uri: crm:P48i_is_preferred_identifier_of - description: | - The custodian that this identifier identifies. - - **CIDOC-CRM Alignment**: - - Property: `crm:P48i_is_preferred_identifier_of` - - Domain: E42_Identifier (CustodianIdentifier) - - Range: E1_CRM_Entity (Custodian) - - Definition: "This property identifies an instance of E1 CRM Entity - using a particular instance of E42 Identifier." - - **INVERSE PROPERTY**: - - **Inverse**: `identifiers` (crm:P48_has_preferred_identifier) - - Pattern: If Custodian identifiers Identifier, then Identifier identifies Custodian - - **Example**: - ```yaml - CustodianIdentifier: - identifier_scheme: ISIL - identifier_value: "NL-AmRM" - identifies: "https://nde.nl/ontology/hc/nl-nh-ams-m-rm" - ``` - - **Navigation**: - - From identifier: Find identified custodian (identifies) - - From custodian: Find all identifiers (identifiers) + description: "The custodian that this identifier identifies.\n\n**CIDOC-CRM Alignment**:\n\nProperty: `crm:P48i_is_preferred_identifier_of`\n\ + - Domain: E42_Identifier (CustodianIdentifier)\n- Range: E1_CRM_Entity (Custodian)\n- Definition: \"This property identifies\ + \ an instance of E1 CRM Entity \n using a particular instance of E42 Identifier.\"\n\n**INVERSE PROPERTY**:\n- **Inverse**:\ + \ `identifiers` (crm:P48_has_preferred_identifier)\n- Pattern: If Custodian identifiers Identifier, then Identifier\ + \ identifies Custodian\n\n**Example**:\n```yaml\nCustodianIdentifier:\n identifier_scheme: ISIL\n identifier_value:\ + \ \"NL-AmRM\"\n identifies: \"https://nde.nl/ontology/hc/nl-nh-ams-m-rm\"\n```\n\n**Navigation**:\n- From identifier:\ + \ Find identified custodian (identifies)\n- From custodian: Find all identifiers (identifiers)\n" range: Custodian - exact_mappings: - - crm:P48i_is_preferred_identifier_of - + - crm:P48i_is_preferred_identifier_of comments: - - "Inverse of identifiers (crm:P48_has_preferred_identifier)" - - "Links identifier back to the entity it identifies" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of identifiers (crm:P48_has_preferred_identifier) + - Links identifier back to the entity it identifies + - Creates owl:inverseOf axiom in RDF output + close_mappings: + - dcterms:identifier diff --git a/schemas/20251121/linkml/modules/slots/identifies_custodian.yaml b/schemas/20251121/linkml/modules/slots/identifies_custodian.yaml index ad4a1ff123..9de319ec5d 100644 --- a/schemas/20251121/linkml/modules/slots/identifies_custodian.yaml +++ b/schemas/20251121/linkml/modules/slots/identifies_custodian.yaml @@ -1,18 +1,16 @@ -# Inverse Slot: identifies_custodian -# Links appellation/identifier back to the Custodian hub - id: https://nde.nl/ontology/hc/slot/identifies_custodian name: identifies_custodian_slot - imports: - - ../classes/Custodian - +- ../classes/Custodian slots: identifies_custodian: slot_uri: crm:P1i_identifies - # For CustodianIdentifier: crm:P48i_is_preferred_identifier_of (inverse of P48_has_preferred_identifier) range: Custodian required: false - description: | - Inverse property linking this identifier back to the Custodian hub. + description: 'Inverse property linking this identifier back to the Custodian hub. + CIDOC-CRM: P48i_is_preferred_identifier_of (inverse of P48_has_preferred_identifier). + + ' + broad_mappings: + - schema:organization diff --git a/schemas/20251121/linkml/modules/slots/initials.yaml b/schemas/20251121/linkml/modules/slots/initials.yaml index c2ed24edab..c50bc1fec6 100644 --- a/schemas/20251121/linkml/modules/slots/initials.yaml +++ b/schemas/20251121/linkml/modules/slots/initials.yaml @@ -1,52 +1,76 @@ id: https://nde.nl/ontology/hc/slot/initials name: initials title: Initials - prefixes: pnv: https://w3id.org/pnv# - imports: - - linkml:types - +- linkml:types slots: initials: slot_uri: pnv:initials - description: | - Initial letter(s) of given name(s), each followed by a period. - - An initial is the first letter of a person's given name, or sometimes + description: 'Initial letter(s) of given name(s), each followed by a period. + + + An initial is the first letter of a person''s given name, or sometimes + a combination of letters. Use this property to record initials + separately from (or in addition to) the full given name. - + + Format: Each initial should be followed by a period (dot). - + + Use cases: + 1. Record initials alongside known given name + 2. Record initials when full given name is unknown + 3. Capture unusual abbreviation patterns from historical sources - + + Examples from PNV specification: - + + Example 1: "Peter R. de Vries" + - initials: "P.R." + - given_name: "Peter R." - + + Example 2: "C.Joh. Kieviet" + - initials: "C.Joh." (unusual abbreviation format) + - OR given_name: "C.Joh." (alternative approach) - + + Example 3: "H.A.F.M.O. (Hans) van Mierlo" + - initials: "H.A.F.M.O." + - given_name: "Hans" - + + If only initials are known (not the full given name), use this property. + The given_name property may also contain the initials as a fallback + when no other representation is available. - + + Note: Store initials exactly as they appear in the source, including + unusual formatting patterns like "C.Joh." for historical accuracy. - + + ' range: string - pattern: "^[A-Z][a-zA-Z]*\\.([A-Z][a-zA-Z]*\\.)*$" + pattern: ^[A-Z][a-zA-Z]*\.([A-Z][a-zA-Z]*\.)*$ exact_mappings: - - pnv:initials + - pnv:initials + close_mappings: + - foaf:name + related_mappings: + - skos:altLabel diff --git a/schemas/20251121/linkml/modules/slots/is_legal_status_of.yaml b/schemas/20251121/linkml/modules/slots/is_legal_status_of.yaml index 7c1e3e4864..d4f84a022a 100644 --- a/schemas/20251121/linkml/modules/slots/is_legal_status_of.yaml +++ b/schemas/20251121/linkml/modules/slots/is_legal_status_of.yaml @@ -1,42 +1,24 @@ -# Slot: is_legal_status_of -# Inverse of legal_status -# Links CustodianLegalStatus to the Custodian it represents - id: https://nde.nl/ontology/hc/slot/is_legal_status_of name: is_legal_status_of title: Is Legal Status Of - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: is_legal_status_of: slot_uri: hc:isLegalStatusOf - description: | - The custodian that this legal status represents. - - **INVERSE PROPERTY**: - - **Inverse**: `legal_status` - - Pattern: If Custodian legal_status LegalStatus, then LegalStatus is_legal_status_of Custodian - - **Example**: - ```yaml - CustodianLegalStatus: - legal_name: "Stichting Rijksmuseum" - is_legal_status_of: "https://nde.nl/ontology/hc/nl-nh-ams-m-rm" - ``` - - **Navigation**: - - From legal status: Find custodian it represents (is_legal_status_of) - - From custodian: Find formal legal entity (legal_status) + description: "The custodian that this legal status represents.\n\n**INVERSE PROPERTY**:\n- **Inverse**: `legal_status`\n\ + - Pattern: If Custodian legal_status LegalStatus, then LegalStatus is_legal_status_of Custodian\n\n**Example**:\n```yaml\n\ + CustodianLegalStatus:\n legal_name: \"Stichting Rijksmuseum\"\n is_legal_status_of: \"https://nde.nl/ontology/hc/nl-nh-ams-m-rm\"\ + \n```\n\n**Navigation**:\n- From legal status: Find custodian it represents (is_legal_status_of)\n- From custodian:\ + \ Find formal legal entity (legal_status)\n" range: Custodian - comments: - - "Inverse of legal_status" - - "Links legal entity back to custodian hub" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of legal_status + - Links legal entity back to custodian hub + - Creates owl:inverseOf axiom in RDF output + related_mappings: + - rdf:type diff --git a/schemas/20251121/linkml/modules/slots/is_member_of.yaml b/schemas/20251121/linkml/modules/slots/is_member_of.yaml index 34bb7349db..015e725f2b 100644 --- a/schemas/20251121/linkml/modules/slots/is_member_of.yaml +++ b/schemas/20251121/linkml/modules/slots/is_member_of.yaml @@ -1,79 +1,38 @@ -# Slot: is_member_of -# Inverse of has_member (org:hasMember) -# W3C ORG pattern: org:hasMember ↔ org:memberOf - id: https://nde.nl/ontology/hc/slot/is_member_of name: is_member_of title: Is Member Of - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# foaf: http://xmlns.com/foaf/0.1/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: is_member_of: slot_uri: org:memberOf - description: | - Encompassing bodies (networks, consortia, umbrella organizations) that - this custodian is a member of. - - **W3C ORG Alignment**: - - Property: `org:memberOf` - - Domain: foaf:Agent (Custodian) - - Range: org:Organization (EncompassingBody) - - Definition: "Indicates that a person or other Agent is a member of - the Organization with no indication of the nature of that membership - or the role played." - - **INVERSE PROPERTY**: - - **Inverse**: `has_member` (org:hasMember) - - Pattern: If Custodian memberOf Network, then Network hasMember Custodian - - **Distinction from encompassing_body**: - - - `is_member_of`: MEMBERSHIP relationship (voluntary, network participation) - - `encompassing_body`: GOVERNANCE relationship (hierarchical, umbrella oversight) - - Both may apply: A custodian can be: - 1. Under governance of Ministry (encompassing_body) - 2. Member of NDE network (is_member_of) - - **Example**: - ```yaml - Custodian: - hc_id: "https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804" - preferred_label: "Rijksmuseum" - - # Governance hierarchy - encompassing_body: - - organization_name: "Ministry of OCW" - organization_type: "UMBRELLA" - - # Network memberships - is_member_of: - - organization_name: "NDE" - organization_type: "NETWORK" - - organization_name: "IIIF Consortium" - organization_type: "CONSORTIUM" - ``` + description: "Encompassing bodies (networks, consortia, umbrella organizations) that \nthis custodian is a member of.\n\ + \n**W3C ORG Alignment**:\n\nProperty: `org:memberOf`\n- Domain: foaf:Agent (Custodian)\n- Range: org:Organization (EncompassingBody)\n\ + - Definition: \"Indicates that a person or other Agent is a member of \n the Organization with no indication of the\ + \ nature of that membership \n or the role played.\"\n\n**INVERSE PROPERTY**:\n- **Inverse**: `has_member` (org:hasMember)\n\ + - Pattern: If Custodian memberOf Network, then Network hasMember Custodian\n\n**Distinction from encompassing_body**:\n\ + \n- `is_member_of`: MEMBERSHIP relationship (voluntary, network participation)\n- `encompassing_body`: GOVERNANCE relationship\ + \ (hierarchical, umbrella oversight)\n\nBoth may apply: A custodian can be:\n1. Under governance of Ministry (encompassing_body)\n\ + 2. Member of NDE network (is_member_of)\n\n**Example**:\n```yaml\nCustodian:\n hc_id: \"https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804\"\ + \n preferred_label: \"Rijksmuseum\"\n \n # Governance hierarchy\n encompassing_body:\n - organization_name: \"\ + Ministry of OCW\"\n organization_type: \"UMBRELLA\"\n \n # Network memberships\n is_member_of:\n - organization_name:\ + \ \"NDE\"\n organization_type: \"NETWORK\"\n - organization_name: \"IIIF Consortium\"\n organization_type:\ + \ \"CONSORTIUM\"\n```\n" range: EncompassingBody multivalued: true - exact_mappings: - - org:memberOf - + - org:memberOf related_mappings: - - foaf:member - - schema:memberOf - + - foaf:member + - schema:memberOf + - rdf:type comments: - - "Inverse of has_member (org:hasMember)" - - "Complements encompassing_body (governance) with membership (voluntary)" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of has_member (org:hasMember) + - Complements encompassing_body (governance) with membership (voluntary) + - Creates owl:inverseOf axiom in RDF output diff --git a/schemas/20251121/linkml/modules/slots/isbn.yaml b/schemas/20251121/linkml/modules/slots/isbn.yaml index 56749deee6..bdb149cb9d 100644 --- a/schemas/20251121/linkml/modules/slots/isbn.yaml +++ b/schemas/20251121/linkml/modules/slots/isbn.yaml @@ -1,24 +1,21 @@ -# Slot: isbn -# International Standard Book Number for publications - id: https://nde.nl/ontology/hc/slot/isbn name: isbn_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: isbn: - description: | - International Standard Book Number (ISBN) for publications. + description: 'International Standard Book Number (ISBN) for publications. + Accepts both ISBN-10 and ISBN-13 formats. + + ' slot_uri: schema:isbn range: string - pattern: "^(97[89])?[0-9]{9}[0-9X]$" + pattern: ^(97[89])?[0-9]{9}[0-9X]$ + exact_mappings: + - schema:isbn diff --git a/schemas/20251121/linkml/modules/slots/items.yaml b/schemas/20251121/linkml/modules/slots/items.yaml new file mode 100644 index 0000000000..640edfc4b4 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/items.yaml @@ -0,0 +1,26 @@ +id: https://nde.nl/ontology/hc/slot/items +name: items +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + items: + slot_uri: rico:hasOrHadConstituent + description: 'Individual ExhibitedObject items within this collection. + + + RiC-O: hasOrHadConstituent for collection-item relationships. + + + Links collection to individual objects, documents, or artifacts. + + ' + range: ExhibitedObject + multivalued: true + required: false + examples: + - value: https://nde.nl/ontology/hc/object/voc-charter-1602 + description: VOC founding charter + close_mappings: + - schema:itemListElement diff --git a/schemas/20251121/linkml/modules/slots/jurisdiction.yaml b/schemas/20251121/linkml/modules/slots/jurisdiction.yaml index c18f6698ed..78f0c25405 100644 --- a/schemas/20251121/linkml/modules/slots/jurisdiction.yaml +++ b/schemas/20251121/linkml/modules/slots/jurisdiction.yaml @@ -1,27 +1,31 @@ -# jurisdiction slot - Legal jurisdiction reference - id: https://nde.nl/ontology/hc/slot/jurisdiction name: jurisdiction title: Jurisdiction Slot - prefixes: gleif_base: https://www.gleif.org/ontology/Base/ lcc_cr: https://www.omg.org/spec/LCC/Countries/CountryRepresentation/ schema: http://schema.org/ +description: 'Legal/administrative jurisdiction where an entity operates or is registered. + -description: | - Legal/administrative jurisdiction where an entity operates or is registered. - Links to Jurisdiction class which captures: + - National jurisdictions (e.g., Netherlands, Japan) + - Subnational jurisdictions (e.g., Bavaria, Delaware) + - Municipal jurisdictions (e.g., Hong Kong, City of London) + - Supranational jurisdictions (e.g., European Union, OHADA) - + + GLEIF alignment: + - gleif_base:hasLegalJurisdiction - jurisdiction of legal formation + - gleif_base:hasCoverageArea - geographic scope of authority/register + ' slots: jurisdiction: slot_uri: gleif_base:hasCoverageArea @@ -29,19 +33,16 @@ slots: required: false multivalued: false inlined: true - description: | - Legal/administrative jurisdiction where entity operates or is registered. - - gleif_base:hasCoverageArea - "Indicates a geographic region in which - some service is provided, or to which some policy applies" - - Examples: - - Netherlands (national): KvK jurisdiction - - Bavaria (subnational): Amtsgericht München jurisdiction - - European Union (supranational): SE registration jurisdiction - + description: "Legal/administrative jurisdiction where entity operates or is registered.\n\ngleif_base:hasCoverageArea\ + \ - \"Indicates a geographic region in which \nsome service is provided, or to which some policy applies\"\n\nExamples:\n\ + - Netherlands (national): KvK jurisdiction\n- Bavaria (subnational): Amtsgericht München jurisdiction\n- European Union\ + \ (supranational): SE registration jurisdiction\n" + exact_mappings: + - schema:areaServed + close_mappings: + - dcterms:spatial comments: - - "Maps to gleif_base:hasCoverageArea" - - "Jurisdictions are LEGAL boundaries, not just geographic" - - "Used for registration authorities, trade registers, and legal forms" - - "inlined: true allows jurisdiction to be specified as nested object" +- Maps to gleif_base:hasCoverageArea +- Jurisdictions are LEGAL boundaries, not just geographic +- Used for registration authorities, trade registers, and legal forms +- 'inlined: true allows jurisdiction to be specified as nested object' diff --git a/schemas/20251121/linkml/modules/slots/justification.yaml b/schemas/20251121/linkml/modules/slots/justification.yaml index 677b1df749..440c088661 100644 --- a/schemas/20251121/linkml/modules/slots/justification.yaml +++ b/schemas/20251121/linkml/modules/slots/justification.yaml @@ -1,11 +1,11 @@ -# ReconstructionActivity Slot: justification -# Justification for entity resolution decisions - id: https://nde.nl/ontology/hc/slot/justification name: justification_slot - slots: justification: slot_uri: prov:qualifiedAttribution range: string - description: "Justification for entity resolution decisions" + description: Justification for entity resolution decisions + close_mappings: + - prov:hadReason + related_mappings: + - skos:note diff --git a/schemas/20251121/linkml/modules/slots/keywords.yaml b/schemas/20251121/linkml/modules/slots/keywords.yaml index 6495682e29..0dda0813a2 100644 --- a/schemas/20251121/linkml/modules/slots/keywords.yaml +++ b/schemas/20251121/linkml/modules/slots/keywords.yaml @@ -1,20 +1,19 @@ -# Global Slot: keywords -# Keywords for discovery and classification - id: https://nde.nl/ontology/hc/slot/keywords name: keywords_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - slots: keywords: slot_uri: schema:keywords - description: | - Keywords for discovery and classification. + description: 'Keywords for discovery and classification. + + ' range: string multivalued: true + exact_mappings: + - schema:keywords + close_mappings: + - dcterms:subject diff --git a/schemas/20251121/linkml/modules/slots/language.yaml b/schemas/20251121/linkml/modules/slots/language.yaml index e8d3de19fd..341454c41b 100644 --- a/schemas/20251121/linkml/modules/slots/language.yaml +++ b/schemas/20251121/linkml/modules/slots/language.yaml @@ -1,12 +1,11 @@ -# CustodianObservation Slot: language -# Language of observed name - id: https://nde.nl/ontology/hc/slot/language name: language_slot - slots: language: slot_uri: schema:inLanguage range: string - description: "Language of the observed name (ISO 639-1 code)" - pattern: "^[a-z]{2}$" + description: Language of the observed name (ISO 639-1 code) + pattern: ^[a-z]{2}$ + exact_mappings: + - dcterms:language + - schema:inLanguage diff --git a/schemas/20251121/linkml/modules/slots/language_code.yaml b/schemas/20251121/linkml/modules/slots/language_code.yaml index 14a8660442..b529fe3457 100644 --- a/schemas/20251121/linkml/modules/slots/language_code.yaml +++ b/schemas/20251121/linkml/modules/slots/language_code.yaml @@ -1,12 +1,10 @@ -# LanguageCode Slot: language_code -# ISO 639-1 two-letter code - id: https://nde.nl/ontology/hc/slot/language_code name: language_code_slot - slots: language_code: slot_uri: rdf:value range: string - pattern: "^[a-z]{2}$" - description: "ISO 639-1 two-letter code" + pattern: ^[a-z]{2}$ + description: ISO 639-1 two-letter code + broad_mappings: + - dcterms:identifier diff --git a/schemas/20251121/linkml/modules/slots/legal_entity_type.yaml b/schemas/20251121/linkml/modules/slots/legal_entity_type.yaml index 4f9774d934..3d1dd3f4fa 100644 --- a/schemas/20251121/linkml/modules/slots/legal_entity_type.yaml +++ b/schemas/20251121/linkml/modules/slots/legal_entity_type.yaml @@ -1,31 +1,36 @@ -# Slot: legal_entity_type -# High-level legal entity classification - id: https://nde.nl/ontology/hc/slot/legal_entity_type name: legal_entity_type-slot - slots: legal_entity_type: - description: | - High-level legal entity classification distinguishing between natural persons + description: 'High-level legal entity classification distinguishing between natural persons + and legal persons (organizations). - + + Links to LegalEntityType class which provides two top-level categories: + - PERSON: Natural person (individual with legal rights) + - ORGANIZATION: Legal person (all organizational forms including corporations, governments) - + + This replaces the deprecated entity_type enum which incorrectly mixed + informal groups with formal legal entities. + + ' slot_uri: org:classification range: LegalEntityType required: true comments: - - "Natural persons cannot have legal forms (individuals are not 'incorporated')" - - "Legal persons (organizations) must have legal forms (ISO 20275 codes)" - - "Informal groups without legal status are NOT CustodianLegalStatuss" - - "This is the fundamental legal distinction in most jurisdictions" + - Natural persons cannot have legal forms (individuals are not 'incorporated') + - Legal persons (organizations) must have legal forms (ISO 20275 codes) + - Informal groups without legal status are NOT CustodianLegalStatuss + - This is the fundamental legal distinction in most jurisdictions exact_mappings: - - org:classification + - org:classification close_mappings: - - schema:additionalType - - tooi:organisatievorm + - schema:additionalType + - tooi:organisatievorm + broad_mappings: + - dcterms:type diff --git a/schemas/20251121/linkml/modules/slots/legal_form.yaml b/schemas/20251121/linkml/modules/slots/legal_form.yaml index 554e8ed1c8..ac983996de 100644 --- a/schemas/20251121/linkml/modules/slots/legal_form.yaml +++ b/schemas/20251121/linkml/modules/slots/legal_form.yaml @@ -1,34 +1,29 @@ -# CustodianLegalStatus Slot: legal_form -# ISO 20275 Entity Legal Forms Code - id: https://nde.nl/ontology/hc/slot/legal_form name: legal_form_slot - slots: legal_form: slot_uri: rov:orgType range: LegalForm - description: | - Specific legal form based on ISO 20275 Entity Legal Forms (ELF) codes. - Links to LegalForm class with jurisdiction-specific legal form details. - This is NOT the legal name - it's a classification code specifying the - legal structure (e.g., foundation, corporation, government agency). - Required for ORGANIZATION entities, not applicable for PERSON. + description: "Specific legal form based on ISO 20275 Entity Legal Forms (ELF) codes.\nLinks to LegalForm class with jurisdiction-specific\ + \ legal form details.\nThis is NOT the legal name - it's a classification code specifying the \nlegal structure (e.g.,\ + \ foundation, corporation, government agency).\nRequired for ORGANIZATION entities, not applicable for PERSON.\n" exact_mappings: - - rov:orgType - - gleif:hasLegalForm + - rov:orgType + - gleif:hasLegalForm close_mappings: - - org:classification - - tooi:rechtsvorm + - org:classification + - tooi:rechtsvorm comments: - - "Source standard: ISO 20275 Entity Legal Forms" - - "1,600+ legal forms across 150+ jurisdictions" - - "Dutch example: ELF code '8888' = Stichting (foundation)" - - "Now uses structured LegalForm class instead of simple string pattern" + - 'Source standard: ISO 20275 Entity Legal Forms' + - 1,600+ legal forms across 150+ jurisdictions + - 'Dutch example: ELF code ''8888'' = Stichting (foundation)' + - Now uses structured LegalForm class instead of simple string pattern examples: - - value: - elf_code: "8888" - country_code: "NL" - local_name: "Stichting" - abbreviation: "St." - description: "Dutch foundation (Rijksmuseum)" + - value: + elf_code: '8888' + country_code: NL + local_name: Stichting + abbreviation: St. + description: Dutch foundation (Rijksmuseum) + related_mappings: + - schema:legalForm diff --git a/schemas/20251121/linkml/modules/slots/legal_jurisdiction.yaml b/schemas/20251121/linkml/modules/slots/legal_jurisdiction.yaml index 60090c4ba8..fd1e877ea6 100644 --- a/schemas/20251121/linkml/modules/slots/legal_jurisdiction.yaml +++ b/schemas/20251121/linkml/modules/slots/legal_jurisdiction.yaml @@ -1,42 +1,24 @@ -# legal_jurisdiction slot - Legal jurisdiction of formation/registration - id: https://nde.nl/ontology/hc/slot/legal_jurisdiction name: legal_jurisdiction title: Legal Jurisdiction Slot - prefixes: gleif_base: https://www.gleif.org/ontology/Base/ schema: http://schema.org/ - -description: | - Jurisdiction of legal formation and registration. - - Links to Jurisdiction class. - - gleif_base:hasLegalJurisdiction - "The jurisdiction of legal formation - and registration of the entity" - - For most entities, this is the country. For federal systems (USA, Germany), - this may be a state/region. - +description: "Jurisdiction of legal formation and registration.\n\nLinks to Jurisdiction class.\n\ngleif_base:hasLegalJurisdiction\ + \ - \"The jurisdiction of legal formation \nand registration of the entity\"\n\nFor most entities, this is the country.\ + \ For federal systems (USA, Germany),\nthis may be a state/region.\n" slots: legal_jurisdiction: slot_uri: gleif_base:hasLegalJurisdiction range: Jurisdiction required: false multivalued: false - description: | - Jurisdiction of legal formation and registration. - - gleif_base:hasLegalJurisdiction - "The jurisdiction of legal formation - and registration of the entity" - - Examples: - - NL (Netherlands national) - - DE-BY (Bavaria subnational for German entities) - - US-DE (Delaware for US corporations) - + description: "Jurisdiction of legal formation and registration.\n\ngleif_base:hasLegalJurisdiction - \"The jurisdiction\ + \ of legal formation \nand registration of the entity\"\n\nExamples:\n- NL (Netherlands national)\n- DE-BY (Bavaria\ + \ subnational for German entities)\n- US-DE (Delaware for US corporations)\n" + exact_mappings: + - schema:areaServed comments: - - "Maps to gleif_base:hasLegalJurisdiction" - - "Jurisdictions are LEGAL boundaries, not just geographic" - - "For federal systems, may be state/region level" +- Maps to gleif_base:hasLegalJurisdiction +- Jurisdictions are LEGAL boundaries, not just geographic +- For federal systems, may be state/region level diff --git a/schemas/20251121/linkml/modules/slots/legal_name.yaml b/schemas/20251121/linkml/modules/slots/legal_name.yaml index b98d380cb3..16a86a175a 100644 --- a/schemas/20251121/linkml/modules/slots/legal_name.yaml +++ b/schemas/20251121/linkml/modules/slots/legal_name.yaml @@ -1,22 +1,20 @@ -# CustodianLegalStatus Slot: legal_name -# Official legal name as registered - id: https://nde.nl/ontology/hc/slot/legal_name name: legal_name_slot - slots: legal_name: slot_uri: rov:legalName range: LegalName - description: | - Official legal name as registered in legal documents (KvK, company registry, etc.). - Links to LegalName class with structured name variants (TOOI pattern). - This is DISTINCT from hc:CustodianName (emic operational name). - Example: LegalName{full_name: "Stichting Rijksmuseum", name_without_type: "Rijksmuseum"} (legal) - vs CustodianName{emic_name: "Rijksmuseum"} (emic operational). + description: "Official legal name as registered in legal documents (KvK, company registry, etc.).\nLinks to LegalName\ + \ class with structured name variants (TOOI pattern).\nThis is DISTINCT from hc:CustodianName (emic operational name).\n\ + Example: LegalName{full_name: \"Stichting Rijksmuseum\", name_without_type: \"Rijksmuseum\"} (legal) \nvs CustodianName{emic_name:\ + \ \"Rijksmuseum\"} (emic operational).\n" required: true notes: - - "Legal name appears in: statutes, KvK registry, tax documents, legal contracts" - - "Emic operational name appears in: website, signage, marketing, public communications" - - "These may differ significantly!" - - "Now uses structured LegalName class instead of simple string" + - 'Legal name appears in: statutes, KvK registry, tax documents, legal contracts' + - 'Emic operational name appears in: website, signage, marketing, public communications' + - These may differ significantly! + - Now uses structured LegalName class instead of simple string + exact_mappings: + - schema:legalName + broad_mappings: + - rdfs:label diff --git a/schemas/20251121/linkml/modules/slots/legal_responsibility_basis.yaml b/schemas/20251121/linkml/modules/slots/legal_responsibility_basis.yaml index 7c714b0c12..084a6bc390 100644 --- a/schemas/20251121/linkml/modules/slots/legal_responsibility_basis.yaml +++ b/schemas/20251121/linkml/modules/slots/legal_responsibility_basis.yaml @@ -1,35 +1,35 @@ -# Legal Responsibility Basis Slot -# Documents statutory/regulatory/contractual foundation for legal accountability - id: https://nde.nl/ontology/hc/slot/legal_responsibility_basis name: legal_responsibility_basis_slot title: legal_responsibility_basis Slot - prefixes: linkml: https://w3id.org/linkml/ dcterms: http://purl.org/dc/terms/ hc: https://nde.nl/ontology/hc/ - default_prefix: hc - imports: - - linkml:types - - ../metadata - +- linkml:types +- ../metadata slots: legal_responsibility_basis: slot_uri: dcterms:conformsTo range: string required: true - description: | - Legal basis establishing the organization's responsibility for this collection. + description: 'Legal basis establishing the organization''s responsibility for this collection. + Documents the statutory, regulatory, or contractual foundation for legal accountability. - + + Examples: + - "Archiefwet 1995 (Dutch Archives Act)" + - "Erfgoedwet (Heritage Act) + Foundation statute" + - "Municipal charter Article 5.2: Archive custody responsibilities" - + + ' examples: - - value: "Archiefwet 1995, Article 41: Provincial archives shall preserve government records" - description: "Statutory basis for provincial archive responsibility" + - value: 'Archiefwet 1995, Article 41: Provincial archives shall preserve government records' + description: Statutory basis for provincial archive responsibility + close_mappings: + - dcterms:rights diff --git a/schemas/20251121/linkml/modules/slots/legal_responsibility_end_date.yaml b/schemas/20251121/linkml/modules/slots/legal_responsibility_end_date.yaml index 7b7ed2047d..b52d45498c 100644 --- a/schemas/20251121/linkml/modules/slots/legal_responsibility_end_date.yaml +++ b/schemas/20251121/linkml/modules/slots/legal_responsibility_end_date.yaml @@ -1,35 +1,35 @@ -# Legal Responsibility End Date Slot -# Date when legal responsibility for collection ended - id: https://nde.nl/ontology/hc/slot/legal_responsibility_end_date name: legal_responsibility_end_date_slot title: legal_responsibility_end_date Slot - prefixes: linkml: https://w3id.org/linkml/ prov: http://www.w3.org/ns/prov# hc: https://nde.nl/ontology/hc/ - default_prefix: hc - imports: - - linkml:types - - ../metadata - +- linkml:types +- ../metadata slots: legal_responsibility_end_date: slot_uri: prov:invalidatedAtTime range: date required: false - description: | - Date when legal responsibility for this collection ended (if applicable). - + description: 'Date when legal responsibility for this collection ended (if applicable). + + Scenarios: + - Custody Transfer: Responsibility transferred to another legal entity + - Collection Deaccessioned: Collection sold, destroyed, or dispersed + - Entity Dissolution: Responsible entity dissolved (responsibility must transfer) + - Statutory Change: Law changed, responsibility removed or transferred - + + ' examples: - - value: "2001-01-01" - description: "Legal responsibility ended when collection transferred to NHA" + - value: '2001-01-01' + description: Legal responsibility ended when collection transferred to NHA + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/legal_responsibility_start_date.yaml b/schemas/20251121/linkml/modules/slots/legal_responsibility_start_date.yaml index 553fae8a6c..b9b51b12ec 100644 --- a/schemas/20251121/linkml/modules/slots/legal_responsibility_start_date.yaml +++ b/schemas/20251121/linkml/modules/slots/legal_responsibility_start_date.yaml @@ -1,35 +1,35 @@ -# Legal Responsibility Start Date Slot -# Date when legal responsibility for collection began - id: https://nde.nl/ontology/hc/slot/legal_responsibility_start_date name: legal_responsibility_start_date_slot title: legal_responsibility_start_date Slot - prefixes: linkml: https://w3id.org/linkml/ prov: http://www.w3.org/ns/prov# hc: https://nde.nl/ontology/hc/ - default_prefix: hc - imports: - - linkml:types - - ../metadata - +- linkml:types +- ../metadata slots: legal_responsibility_start_date: slot_uri: prov:generatedAtTime range: date required: false - description: | - Date when legal responsibility for this collection began. + description: 'Date when legal responsibility for this collection began. + May differ from collection.valid_from (when collection itself was created). - + + Scenarios: + - Founding Collection: Start date = collection creation date + - Custody Transfer: Start date = transfer date (≠ collection creation) + - Statutory Change: Start date = law effective date - + + ' examples: - - value: "2001-01-01" - description: "Legal responsibility transferred when NHA formed from merger" + - value: '2001-01-01' + description: Legal responsibility transferred when NHA formed from merger + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/legal_status.yaml b/schemas/20251121/linkml/modules/slots/legal_status.yaml index 01645d46b5..2f0966bb90 100644 --- a/schemas/20251121/linkml/modules/slots/legal_status.yaml +++ b/schemas/20251121/linkml/modules/slots/legal_status.yaml @@ -1,25 +1,24 @@ -# Legal Status Slot id: https://nde.nl/ontology/hc/slot/legal_status name: legal_status_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ gleif: https://www.gleif.org/ontology/Base/ schema: http://schema.org/ - default_prefix: hc - imports: - - linkml:types - - ../metadata - - ../classes/CustodianLegalStatus - +- linkml:types +- ../metadata +- ../classes/CustodianLegalStatus slots: legal_status: slot_uri: gleif:hasLegalForm - description: "The formal legal entity representing this custodian" + description: The formal legal entity representing this custodian range: CustodianLegalStatus required: false exact_mappings: - - schema:legalName + - schema:legalName + close_mappings: + - org:classification + broad_mappings: + - adms:status diff --git a/schemas/20251121/linkml/modules/slots/linkedin_profile_path.yaml b/schemas/20251121/linkml/modules/slots/linkedin_profile_path.yaml index d19e1fa726..d6b5425699 100644 --- a/schemas/20251121/linkml/modules/slots/linkedin_profile_path.yaml +++ b/schemas/20251121/linkml/modules/slots/linkedin_profile_path.yaml @@ -1,44 +1,24 @@ -# LinkedIn Profile Path Slot -# Slot for referencing LinkedIn profile data files (Rule 12, Rule 20) - id: https://nde.nl/ontology/hc/slot/linkedin_profile_path name: linkedin_profile_path_slot title: LinkedIn Profile Path Slot version: 1.0.0 - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# - imports: - - linkml:types - +- linkml:types slots: linkedin_profile_path: slot_uri: prov:hadPrimarySource - description: | - File path to LinkedIn profile data (per Rule 12, Rule 20). - - **Pattern**: LinkedIn profiles are stored as individual JSON files - rather than inline data to avoid duplication and enable updates. - - **File Location**: data/custodian/person/entity/{linkedin-slug}_{timestamp}.json - - **Example**: "data/custodian/person/entity/jane-smith_20250115T103000Z.json" - - **PROV-O Alignment**: - - This slot represents prov:hadPrimarySource relationship - - Links to the JSON file that serves as the authoritative profile source - - **Rationale**: - - Same person may work at multiple custodians - - Profile data can be updated independently - - Reduces duplication (50+ lines -> 1 path reference) - - **See Also**: - - Rule 12 (Person Data Reference Pattern) - - Rule 20 (Person Entity Profiles) - - Rule 27 (Person-Custodian Data Architecture) + description: "File path to LinkedIn profile data (per Rule 12, Rule 20).\n\n**Pattern**: LinkedIn profiles are stored\ + \ as individual JSON files\nrather than inline data to avoid duplication and enable updates.\n\n**File Location**: data/custodian/person/entity/{linkedin-slug}_{timestamp}.json\n\ + \n**Example**: \"data/custodian/person/entity/jane-smith_20250115T103000Z.json\"\n\n**PROV-O Alignment**:\n- This slot\ + \ represents prov:hadPrimarySource relationship\n- Links to the JSON file that serves as the authoritative profile source\n\ + \n**Rationale**:\n- Same person may work at multiple custodians\n- Profile data can be updated independently\n- Reduces\ + \ duplication (50+ lines -> 1 path reference)\n\n**See Also**: \n- Rule 12 (Person Data Reference Pattern)\n- Rule 20\ + \ (Person Entity Profiles)\n- Rule 27 (Person-Custodian Data Architecture)\n" range: string required: false + close_mappings: + - schema:sameAs diff --git a/schemas/20251121/linkml/modules/slots/linkedin_profile_url.yaml b/schemas/20251121/linkml/modules/slots/linkedin_profile_url.yaml index 1aa13dec52..0bb07db400 100644 --- a/schemas/20251121/linkml/modules/slots/linkedin_profile_url.yaml +++ b/schemas/20251121/linkml/modules/slots/linkedin_profile_url.yaml @@ -1,43 +1,53 @@ -# LinkedIn Profile URL Slot -# Slot for LinkedIn profile URLs with sameAs semantics - id: https://nde.nl/ontology/hc/slot/linkedin_profile_url name: linkedin_profile_url_slot title: LinkedIn Profile URL Slot version: 1.0.0 - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types slots: linkedin_profile_url: slot_uri: schema:sameAs - description: | - LinkedIn profile URL for this person. - + description: 'LinkedIn profile URL for this person. + + **Schema.org**: `schema:sameAs` for linking to same entity on other platforms - + + **Format**: Full URL (https://www.linkedin.com/in/username) - + + **Privacy**: Only include if LinkedIn profile is publicly accessible. - + + **Photo URLs**: For profile photos, use CDN URL (media.licdn.com), + NOT the overlay page URL (per Rule 16). - + + **Example**: "https://www.linkedin.com/in/jane-smith-curator" - + + **Semantics**: + - This URL represents the same person on the LinkedIn platform + - Use for identity linking and deduplication + - NOT for data retrieval (use linkedin_profile_path instead) - + + **See Also**: + - Rule 16 (LinkedIn Photo CDN URLs) + - linkedin_profile_path slot for profile data file reference + + ' range: uri required: false + broad_mappings: + - schema:url diff --git a/schemas/20251121/linkml/modules/slots/located_at.yaml b/schemas/20251121/linkml/modules/slots/located_at.yaml index 6e2556f54a..e51e31d1f0 100644 --- a/schemas/20251121/linkml/modules/slots/located_at.yaml +++ b/schemas/20251121/linkml/modules/slots/located_at.yaml @@ -1,82 +1,37 @@ -# Located At Slot -# Links OrganizationalStructure to a physical location (AuxiliaryPlace) -# W3C Org: org:basedAt pattern for organization locations - id: https://nde.nl/ontology/hc/slot/located_at name: located_at_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types slots: located_at: slot_uri: org:basedAt range: AuxiliaryPlace multivalued: true inlined_as_list: true - description: | - Physical location (AuxiliaryPlace) where this organizational unit operates. - - **W3C ORG Alignment**: - - `org:basedAt` - "Indicates the site at which the Organization has its main - administrative/operational presence." - - Alternative: `org:hasSite` - "Indicates a site at which the Organization - has some presence even if only indirect." - - **Use Cases**: - - 1. **Departments at Branch Locations**: - - Conservation Team → located at Amersfoort Depot - - Digitization Team → located at off-site facility - - 2. **Teams Spanning Multiple Locations**: - - IT Department → located at main building AND data center - - Public Services → located at main reading room AND annex - - 3. **Temporary Location Assignments**: - - Exhibition Team → temporarily at partner venue - - Collections → temporarily at storage during renovation - - **Relationship Pattern**: - - Two-way linking between locations and organizational units: - - ``` - AuxiliaryPlace - └── hosts_branch → OrganizationBranch - └── has_operational_unit → OrganizationalStructure - - OrganizationalStructure - └── located_at → AuxiliaryPlace (optional) - ``` - - **Optional Slot**: - - Many organizational units don't have fixed locations: - - Strategic Planning Committee (meets virtually) - - Research Fellowship Program (no physical space) - - Only use when organizational unit has identifiable physical location. - - **Example - Conservation Division**: - ```yaml - OrganizationalStructure: - unit_name: "Conservation Division" - unit_type: DIVISION - located_at: - - place_name: "Conservation Lab - Main Building" - - place_name: "Climate-Controlled Storage - Depot Amersfoort" - ``` + description: "Physical location (AuxiliaryPlace) where this organizational unit operates.\n\n**W3C ORG Alignment**:\n\n\ + `org:basedAt` - \"Indicates the site at which the Organization has its main \nadministrative/operational presence.\"\ + \n\nAlternative: `org:hasSite` - \"Indicates a site at which the Organization \nhas some presence even if only indirect.\"\ + \n\n**Use Cases**:\n\n1. **Departments at Branch Locations**:\n - Conservation Team → located at Amersfoort Depot\n\ + \ - Digitization Team → located at off-site facility\n\n2. **Teams Spanning Multiple Locations**:\n - IT Department\ + \ → located at main building AND data center\n - Public Services → located at main reading room AND annex\n\n3. **Temporary\ + \ Location Assignments**:\n - Exhibition Team → temporarily at partner venue\n - Collections → temporarily at storage\ + \ during renovation\n\n**Relationship Pattern**:\n\nTwo-way linking between locations and organizational units:\n\n\ + ```\nAuxiliaryPlace\n └── hosts_branch → OrganizationBranch\n └── has_operational_unit → OrganizationalStructure\n\ + \nOrganizationalStructure\n └── located_at → AuxiliaryPlace (optional)\n```\n\n**Optional Slot**:\n\nMany organizational\ + \ units don't have fixed locations:\n- Strategic Planning Committee (meets virtually)\n- Research Fellowship Program\ + \ (no physical space)\n\nOnly use when organizational unit has identifiable physical location.\n\n**Example - Conservation\ + \ Division**:\n```yaml\nOrganizationalStructure:\n unit_name: \"Conservation Division\"\n unit_type: DIVISION\n located_at:\n\ + \ - place_name: \"Conservation Lab - Main Building\"\n - place_name: \"Climate-Controlled Storage - Depot Amersfoort\"\ + \n```\n" examples: - - value: - - place_name: "Depot Amersfoort" - auxiliary_place_type: STORAGE_FACILITY - description: "Organizational unit located at off-site storage" + - value: + - place_name: Depot Amersfoort + auxiliary_place_type: STORAGE_FACILITY + description: Organizational unit located at off-site storage + broad_mappings: + - prov:atTime diff --git a/schemas/20251121/linkml/modules/slots/managed_by.yaml b/schemas/20251121/linkml/modules/slots/managed_by.yaml index 34fa658f8b..556c12feab 100644 --- a/schemas/20251121/linkml/modules/slots/managed_by.yaml +++ b/schemas/20251121/linkml/modules/slots/managed_by.yaml @@ -1,22 +1,20 @@ -# Global Slot: managed_by -# Identifies the entity or organizational unit managing something - id: https://nde.nl/ontology/hc/slot/managed_by name: managed_by_slot title: Managed By Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# - imports: - - linkml:types - +- linkml:types slots: managed_by: slot_uri: org:linkedTo description: Entity or organizational unit managing this resource range: string exact_mappings: - - org:linkedTo + - org:linkedTo + close_mappings: + - prov:wasAttributedTo + broad_mappings: + - prov:wasAttributedTo diff --git a/schemas/20251121/linkml/modules/slots/metadata_standards.yaml b/schemas/20251121/linkml/modules/slots/metadata_standards.yaml index aa6531b20d..4ceefb0f9f 100644 --- a/schemas/20251121/linkml/modules/slots/metadata_standards.yaml +++ b/schemas/20251121/linkml/modules/slots/metadata_standards.yaml @@ -1,21 +1,21 @@ -# Global Slot: metadata_standards -# Lists metadata standards implemented/used by a platform or portal - id: https://nde.nl/ontology/hc/slot/metadata_standards name: metadata_standards_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - default_prefix: hc - slots: metadata_standards: slot_uri: dcterms:conformsTo range: string multivalued: true - description: | - Metadata standards implemented or used by this platform/portal. + description: 'Metadata standards implemented or used by this platform/portal. + Examples: Dublin Core, MARC21, EAD, LIDO, CIDOC-CRM, Schema.org, etc. + + ' + close_mappings: + - dcterms:conformsTo + broad_mappings: + - dcterms:conformsTo diff --git a/schemas/20251121/linkml/modules/slots/method.yaml b/schemas/20251121/linkml/modules/slots/method.yaml index 6891921140..6443f10677 100644 --- a/schemas/20251121/linkml/modules/slots/method.yaml +++ b/schemas/20251121/linkml/modules/slots/method.yaml @@ -1,11 +1,9 @@ -# ReconstructionActivity Slot: method -# Method used for entity resolution - id: https://nde.nl/ontology/hc/slot/method name: method_slot - slots: method: slot_uri: dcterms:description range: string - description: "Method used for entity resolution (manual curation, algorithmic matching, etc.)" + description: Method used for entity resolution (manual curation, algorithmic matching, etc.) + exact_mappings: + - prov:wasGeneratedBy diff --git a/schemas/20251121/linkml/modules/slots/mission_statement.yaml b/schemas/20251121/linkml/modules/slots/mission_statement.yaml index 48d1338adf..9b2ba76a19 100644 --- a/schemas/20251121/linkml/modules/slots/mission_statement.yaml +++ b/schemas/20251121/linkml/modules/slots/mission_statement.yaml @@ -1,41 +1,48 @@ -# mission_statement slot - Links Custodian to MissionStatement records -# -# Created December 2025 to capture organizational purpose statements with provenance. -# -# W3C Org Ontology alignment: -# org:purpose - "Indicates the purpose of this Organization" - id: https://nde.nl/ontology/hc/slot/mission_statement name: mission_statement title: Mission Statement Slot - prefixes: org: http://www.w3.org/ns/org# hc: https://nde.nl/ontology/hc/ +description: 'Links a Custodian to its documented mission, vision, goal, and value statements. + -description: | - Links a Custodian to its documented mission, vision, goal, and value statements. - Heritage custodians publish purpose statements on their websites that articulate: + - **Mission**: Why the organization exists (core purpose) + - **Vision**: What future state they aspire to (aspirational) + - **Goals**: Specific measurable objectives + - **Values**: Guiding principles + - **Motto**: Memorable phrases/slogans - + + This slot enables capturing these statements with full provenance, including: + - Source URL and retrieval timestamp + - XPath/CSS selector for verification + - Content hash for integrity + - Archive links for long-term access - + + **W3C Org Ontology**: + Uses `org:purpose` property which "indicates the purpose of this Organization." - + + **Multiple Statements**: + A custodian may have multiple purpose statements (mission + vision + goals). + Each statement is captured as a separate MissionStatement instance. + ' slots: mission_statement: slot_uri: org:purpose @@ -43,55 +50,25 @@ slots: multivalued: true inlined_as_list: true required: false - description: | - Mission, vision, goal, value, and motto statements documented for this custodian. - - Links to MissionStatement instances that capture organizational purpose - with full provenance (source URL, XPath, content hash, archive link). - - **Typical Usage**: - A Dutch museum might have: - - 1 mission statement ("Onze Missie") - - 1 vision statement ("Onze Visie") - - Multiple goal statements ("Doelstellingen") - - Each is captured as a separate MissionStatement with: - - statement_type: mission | vision | goal | value | motto - - statement_text: The actual text in original language - - source_url: URL where statement was found - - retrieved_on: When the page was archived - - **Why on Custodian (not CustodianLegalStatus)?**: - - Mission statements express OPERATIONAL purpose, not legal obligations. - They may change without legal reorganization, and often reflect - public-facing identity rather than formal statutes. - - **Example - Dutch Museum**: - ```yaml - Custodian: - hc_id: "https://nde.nl/ontology/hc/nl-zh-zui-m-lmt" - preferred_label: "Landbouwmuseum Tiengemeten" - - mission_statement: - - statement_type: mission - statement_text: "Waar komt ons voedsel écht vandaan." - statement_language: nl - source_url: "https://www.landbouwmuseumtiengemeten.nl/het-museum/missie-en-visie" - retrieved_on: "2025-12-29T10:00:00Z" - - - statement_type: vision - statement_text: | - Het Landbouwmuseum Tiengemeten voelt zich onderdeel van een - belangrijke agrarische ontwikkeling, de mechanisatie tussen - 1920 en 1955. - statement_language: nl - source_url: "https://www.landbouwmuseumtiengemeten.nl/het-museum/missie-en-visie" - retrieved_on: "2025-12-29T10:00:00Z" - ``` - + description: "Mission, vision, goal, value, and motto statements documented for this custodian.\n\nLinks to MissionStatement\ + \ instances that capture organizational purpose\nwith full provenance (source URL, XPath, content hash, archive link).\n\ + \n**Typical Usage**:\nA Dutch museum might have:\n- 1 mission statement (\"Onze Missie\")\n- 1 vision statement (\"\ + Onze Visie\") \n- Multiple goal statements (\"Doelstellingen\")\n\nEach is captured as a separate MissionStatement\ + \ with:\n- statement_type: mission | vision | goal | value | motto\n- statement_text: The actual text in original language\n\ + - source_url: URL where statement was found\n- retrieved_on: When the page was archived\n\n**Why on Custodian (not CustodianLegalStatus)?**:\n\ + \nMission statements express OPERATIONAL purpose, not legal obligations.\nThey may change without legal reorganization,\ + \ and often reflect\npublic-facing identity rather than formal statutes.\n\n**Example - Dutch Museum**:\n```yaml\nCustodian:\n\ + \ hc_id: \"https://nde.nl/ontology/hc/nl-zh-zui-m-lmt\"\n preferred_label: \"Landbouwmuseum Tiengemeten\"\n \n mission_statement:\n\ + \ - statement_type: mission\n statement_text: \"Waar komt ons voedsel écht vandaan.\"\n statement_language:\ + \ nl\n source_url: \"https://www.landbouwmuseumtiengemeten.nl/het-museum/missie-en-visie\"\n retrieved_on:\ + \ \"2025-12-29T10:00:00Z\"\n \n - statement_type: vision\n statement_text: |\n Het Landbouwmuseum\ + \ Tiengemeten voelt zich onderdeel van een\n belangrijke agrarische ontwikkeling, de mechanisatie tussen\n \ + \ 1920 en 1955.\n statement_language: nl\n source_url: \"https://www.landbouwmuseumtiengemeten.nl/het-museum/missie-en-visie\"\ + \n retrieved_on: \"2025-12-29T10:00:00Z\"\n```\n" + close_mappings: + - org:purpose comments: - - "Maps to org:purpose from W3C Organization Ontology" - - "Multivalued to support mission + vision + goals + values" - - "Each MissionStatement has full provenance (source_url, xpath, content_hash)" - - "Statement text preserved in original language (statement_language field)" +- Maps to org:purpose from W3C Organization Ontology +- Multivalued to support mission + vision + goals + values +- Each MissionStatement has full provenance (source_url, xpath, content_hash) +- Statement text preserved in original language (statement_language field) diff --git a/schemas/20251121/linkml/modules/slots/modified.yaml b/schemas/20251121/linkml/modules/slots/modified.yaml index dbf89ead00..27aa52d5b8 100644 --- a/schemas/20251121/linkml/modules/slots/modified.yaml +++ b/schemas/20251121/linkml/modules/slots/modified.yaml @@ -1,14 +1,16 @@ -# Base Slot: modified -# Database record modification timestamp - id: https://nde.nl/ontology/hc/slot/modified name: modified_slot - slots: modified: slot_uri: schema:dateModified range: datetime - description: | - Timestamp when this database record was last modified. - IMPORTANT: This is NOT the custodian's dissolution date - it's metadata about the digital record. + description: 'Timestamp when this database record was last modified. + + IMPORTANT: This is NOT the custodian''s dissolution date - it''s metadata about the digital record. + Use CustodianLegalStatus.dissolution_date or temporal_extent for entity lifecycle. + + ' + exact_mappings: + - dcterms:modified + - schema:dateModified diff --git a/schemas/20251121/linkml/modules/slots/name_authority.yaml b/schemas/20251121/linkml/modules/slots/name_authority.yaml index 89c68febb4..b848c79c9a 100644 --- a/schemas/20251121/linkml/modules/slots/name_authority.yaml +++ b/schemas/20251121/linkml/modules/slots/name_authority.yaml @@ -1,11 +1,9 @@ -# CustodianName Slot: name_authority -# Authority that authorized the name - id: https://nde.nl/ontology/hc/slot/name_authority name: name_authority_slot - slots: name_authority: slot_uri: prov:wasAttributedTo range: string - description: "Authority that authorized this name (board resolution, statute, tradition)" + description: Authority that authorized this name (board resolution, statute, tradition) + close_mappings: + - dcterms:source diff --git a/schemas/20251121/linkml/modules/slots/name_language.yaml b/schemas/20251121/linkml/modules/slots/name_language.yaml index 19355ba317..805405c6d6 100644 --- a/schemas/20251121/linkml/modules/slots/name_language.yaml +++ b/schemas/20251121/linkml/modules/slots/name_language.yaml @@ -1,14 +1,14 @@ -# Slot: name_language -# Language code for observed name - id: https://nde.nl/ontology/hc/slot/name_language name: name_language-slot - slots: name_language: - description: | - The language or locale code (ISO 639-1 or BCP 47) of the emic name. - Examples: 'nl' for Dutch, 'en' for English, 'pt-BR' for Brazilian Portuguese. + description: 'The language or locale code (ISO 639-1 or BCP 47) of the emic name. + + Examples: ''nl'' for Dutch, ''en'' for English, ''pt-BR'' for Brazilian Portuguese. + + ' slot_uri: dcterms:language range: string - pattern: "^[a-z]{2}(-[A-Z]{2})?$" + pattern: ^[a-z]{2}(-[A-Z]{2})?$ + broad_mappings: + - dcterms:language diff --git a/schemas/20251121/linkml/modules/slots/name_validity_period.yaml b/schemas/20251121/linkml/modules/slots/name_validity_period.yaml index 67d6ec9db2..ac26bc0aba 100644 --- a/schemas/20251121/linkml/modules/slots/name_validity_period.yaml +++ b/schemas/20251121/linkml/modules/slots/name_validity_period.yaml @@ -1,17 +1,17 @@ -# CustodianName Slot: name_validity_period -# Temporal period during which name was valid (with uncertainty) - id: https://nde.nl/ontology/hc/slot/name_validity_period name: name_validity_period_slot - imports: - - ../classes/TimeSpan - +- ../classes/TimeSpan slots: name_validity_period: slot_uri: crm:P4_has_time-span range: TimeSpan - description: | - Temporal period during which this name was valid (with fuzzy boundaries). + description: 'Temporal period during which this name was valid (with fuzzy boundaries). + Use when name validity dates are uncertain or approximate. + For precise dates, use valid_from/valid_to instead. + + ' + close_mappings: + - dcterms:temporal diff --git a/schemas/20251121/linkml/modules/slots/notes.yaml b/schemas/20251121/linkml/modules/slots/notes.yaml index ad2ab3b698..9059f9320f 100644 --- a/schemas/20251121/linkml/modules/slots/notes.yaml +++ b/schemas/20251121/linkml/modules/slots/notes.yaml @@ -1,23 +1,18 @@ -# Slot: notes -# Additional notes or comments about a resource - id: https://nde.nl/ontology/hc/slot/notes name: notes_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ skos: http://www.w3.org/2004/02/skos/core# - imports: - - linkml:types - +- linkml:types default_range: string - slots: notes: slot_uri: skos:note range: string - description: >- - Additional notes or comments about the resource. - Free-text field for supplementary information. + description: Additional notes or comments about the resource. Free-text field for supplementary information. + exact_mappings: + - skos:note + close_mappings: + - rdfs:comment diff --git a/schemas/20251121/linkml/modules/slots/oai_pmh_endpoint.yaml b/schemas/20251121/linkml/modules/slots/oai_pmh_endpoint.yaml index e1c027d34c..9a77d62dda 100644 --- a/schemas/20251121/linkml/modules/slots/oai_pmh_endpoint.yaml +++ b/schemas/20251121/linkml/modules/slots/oai_pmh_endpoint.yaml @@ -1,20 +1,18 @@ -# Global Slot: oai_pmh_endpoint -# OAI-PMH harvesting endpoint URL - id: https://nde.nl/ontology/hc/slot/oai_pmh_endpoint name: oai_pmh_endpoint_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcat: http://www.w3.org/ns/dcat# - default_prefix: hc - slots: oai_pmh_endpoint: slot_uri: dcat:endpointURL range: uri - description: | - OAI-PMH (Open Archives Initiative Protocol for Metadata Harvesting) + description: 'OAI-PMH (Open Archives Initiative Protocol for Metadata Harvesting) + endpoint URL for metadata harvesting. + + ' + broad_mappings: + - dcat:endpointURL diff --git a/schemas/20251121/linkml/modules/slots/object_ref.yaml b/schemas/20251121/linkml/modules/slots/object_ref.yaml index 15effd0c47..f4cde49a81 100644 --- a/schemas/20251121/linkml/modules/slots/object_ref.yaml +++ b/schemas/20251121/linkml/modules/slots/object_ref.yaml @@ -2,21 +2,19 @@ id: https://nde.nl/ontology/hc/slot/object_ref name: object_ref_slot title: Object Reference Slot description: Shared slot for object references across heritage custodian entities - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ crm: http://www.cidoc-crm.org/cidoc-crm/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: object_ref: description: Reference to the heritage object this record/event concerns range: uriorcurie slot_uri: crm:P140_assigned_attribute_to comments: - - "Classes may override slot_uri in slot_usage for specific CRM property semantics" + - Classes may override slot_uri in slot_usage for specific CRM property semantics + broad_mappings: + - dcterms:references diff --git a/schemas/20251121/linkml/modules/slots/observation_context.yaml b/schemas/20251121/linkml/modules/slots/observation_context.yaml index 58f51ff4e2..c52a2cd284 100644 --- a/schemas/20251121/linkml/modules/slots/observation_context.yaml +++ b/schemas/20251121/linkml/modules/slots/observation_context.yaml @@ -1,11 +1,9 @@ -# CustodianObservation Slot: observation_context -# Context of the observation - id: https://nde.nl/ontology/hc/slot/observation_context name: observation_context_slot - slots: observation_context: slot_uri: dcterms:description range: string - description: "Context of the observation (e.g., letterhead, website, signage, archival record)" + description: Context of the observation (e.g., letterhead, website, signage, archival record) + close_mappings: + - prov:atLocation diff --git a/schemas/20251121/linkml/modules/slots/observation_date.yaml b/schemas/20251121/linkml/modules/slots/observation_date.yaml index a9bdaf08c4..bbe050d805 100644 --- a/schemas/20251121/linkml/modules/slots/observation_date.yaml +++ b/schemas/20251121/linkml/modules/slots/observation_date.yaml @@ -1,11 +1,11 @@ -# CustodianObservation Slot: observation_date -# Date when source was created - id: https://nde.nl/ontology/hc/slot/observation_date name: observation_date_slot - slots: observation_date: slot_uri: prov:generatedAtTime range: date - description: "Date when the source was created" + description: Date when the source was created + close_mappings: + - prov:generatedAtTime + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/observation_source.yaml b/schemas/20251121/linkml/modules/slots/observation_source.yaml index 7eaadfbc27..4d96d4395d 100644 --- a/schemas/20251121/linkml/modules/slots/observation_source.yaml +++ b/schemas/20251121/linkml/modules/slots/observation_source.yaml @@ -1,13 +1,15 @@ -# Slot: observation_source -# Direct reference to source of observation - id: https://nde.nl/ontology/hc/slot/observation_source name: observation_source-slot - slots: observation_source: - description: | - The source document, dataset, or system from which this observation + description: 'The source document, dataset, or system from which this observation + was extracted or recorded. + + ' slot_uri: dcterms:source range: string + close_mappings: + - dcterms:source + broad_mappings: + - dcterms:source diff --git a/schemas/20251121/linkml/modules/slots/observed_name.yaml b/schemas/20251121/linkml/modules/slots/observed_name.yaml index 7b8c731de9..c78bb36f61 100644 --- a/schemas/20251121/linkml/modules/slots/observed_name.yaml +++ b/schemas/20251121/linkml/modules/slots/observed_name.yaml @@ -1,12 +1,10 @@ -# CustodianObservation Slot: observed_name -# Name as recorded in source (emic perspective) - id: https://nde.nl/ontology/hc/slot/observed_name name: observed_name_slot - slots: observed_name: slot_uri: skos:prefLabel range: string - description: "Name as recorded in the source (emic perspective)" + description: Name as recorded in the source (emic perspective) required: true + broad_mappings: + - rdfs:label diff --git a/schemas/20251121/linkml/modules/slots/offers_donation_schemes.yaml b/schemas/20251121/linkml/modules/slots/offers_donation_schemes.yaml index 521c26585f..49dc842b78 100644 --- a/schemas/20251121/linkml/modules/slots/offers_donation_schemes.yaml +++ b/schemas/20251121/linkml/modules/slots/offers_donation_schemes.yaml @@ -1,62 +1,38 @@ -# offers_donation_schemes slot -# Links a Custodian to the donation schemes it offers -# -# Created January 2026 for DonationScheme integration -# -# Relationship: Custodian --offers_donation_schemes--> DonationScheme[] -# Inverse: DonationScheme --offered_by--> Custodian - id: https://nde.nl/ontology/hc/slot/offers_donation_schemes name: offers_donation_schemes title: Offers Donation Schemes - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_prefix: hc - slots: offers_donation_schemes: slot_uri: schema:makesOffer range: uriorcurie multivalued: true inlined_as_list: false - description: | - Donation and giving schemes offered by this heritage custodian. - - Links to DonationScheme instances representing the various ways - individuals and organizations can financially support the institution. - - Examples: - - Friends/membership schemes (Museumvriend, Förderverein) - - Patron circles and benefactor programs - - Object adoption (Adopt-a-Book, sponsor an artifact) - - Legacy giving (bequests, endowments) - - Corporate sponsorship - - Crowdfunding campaigns - - Inverse property: DonationScheme.offered_by → Custodian - - Note: Bidirectional relationship implemented via separate slots. - Navigation: Custodian.offers_donation_schemes → DonationScheme - DonationScheme.offered_by → Custodian - # inverse: offered_by # Commented out - implemented via slot_usage in both classes + description: "Donation and giving schemes offered by this heritage custodian.\n\nLinks to DonationScheme instances representing\ + \ the various ways\nindividuals and organizations can financially support the institution.\n\nExamples:\n- Friends/membership\ + \ schemes (Museumvriend, Förderverein)\n- Patron circles and benefactor programs\n- Object adoption (Adopt-a-Book, sponsor\ + \ an artifact)\n- Legacy giving (bequests, endowments)\n- Corporate sponsorship\n- Crowdfunding campaigns\n\nInverse\ + \ property: DonationScheme.offered_by → Custodian\n\nNote: Bidirectional relationship implemented via separate slots.\n\ + Navigation: Custodian.offers_donation_schemes → DonationScheme\n DonationScheme.offered_by → Custodian\n" annotations: - owl.inverseOf: "hc:offered_by" - custodian_types: "*" - custodian_types_rationale: "All heritage custodians can offer donation schemes" + owl.inverseOf: hc:offered_by + custodian_types: '*' + custodian_types_rationale: All heritage custodians can offer donation schemes examples: - - value: "https://nde.nl/ontology/hc/donation-scheme/rijksmuseum/vrienden" - description: "Rijksmuseum Friends membership scheme" - - value: "https://nde.nl/ontology/hc/donation-scheme/british-library/adopt-a-book" - description: "British Library Adopt-a-Book program" + - value: https://nde.nl/ontology/hc/donation-scheme/rijksmuseum/vrienden + description: Rijksmuseum Friends membership scheme + - value: https://nde.nl/ontology/hc/donation-scheme/british-library/adopt-a-book + description: British Library Adopt-a-Book program comments: - - "Bidirectional with DonationScheme.offered_by" - - "Multiple schemes per custodian supported" - - "Use DonationSchemeTypeEnum to categorize schemes" + - Bidirectional with DonationScheme.offered_by + - Multiple schemes per custodian supported + - Use DonationSchemeTypeEnum to categorize schemes + related_mappings: + - schema:availableService diff --git a/schemas/20251121/linkml/modules/slots/operated_by.yaml b/schemas/20251121/linkml/modules/slots/operated_by.yaml index a9332c20f2..224ff78338 100644 --- a/schemas/20251121/linkml/modules/slots/operated_by.yaml +++ b/schemas/20251121/linkml/modules/slots/operated_by.yaml @@ -1,10 +1,5 @@ -# operated_by slot -# Links WebPortal to EncompassingBody (operator organization) -# Inverse of operates (schema:owns) - id: https://nde.nl/ontology/hc/slot/operated_by name: operated_by - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ @@ -12,50 +7,66 @@ prefixes: org: http://www.w3.org/ns/org# edm: http://www.europeana.eu/schemas/edm/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: operated_by: slot_uri: schema:maintainer - description: | - The EncompassingBody that operates/maintains this web portal. - + description: 'The EncompassingBody that operates/maintains this web portal. + + **INVERSE PROPERTY**: + - **Inverse**: `operates` (on EncompassingBody) + - Pattern: If Portal operatedBy Body, then Body operates Portal - + + **RELATIONSHIP**: WebPortal → EncompassingBody - + + Web portals are typically operated by: + - NetworkOrganisation: NDE operates Dataset Register, Archieven.nl + - Consortium: ICARUS operates Monasterium.net + - Cooperative: OCLC operates WorldCat + - UmbrellaOrganisation: National library operates national union catalog - + + **Examples**: + - NDE Dataset Register → operated_by → NDE (NetworkOrganisation) + - Archieven.nl → operated_by → KVAN/Erfgoed Leiden (NetworkOrganisation) + - Deutsche Digitale Bibliothek → operated_by → DDB (NetworkOrganisation) + - Europeana → operated_by → Europeana Foundation (NetworkOrganisation) - + + **Ontology Alignment**: + - Schema.org: `schema:maintainer` - organization maintaining the portal + - W3C ORG: Related to `org:memberOf` (portal belongs to network) + + ' range: EncompassingBody - exact_mappings: - - schema:maintainer - + - schema:maintainer related_mappings: - - dcterms:publisher - - org:memberOf - + - dcterms:publisher + - org:memberOf comments: - - "Inverse of operates (on EncompassingBody)" - - "Creates owl:inverseOf axiom in RDF output" - + - Inverse of operates (on EncompassingBody) + - Creates owl:inverseOf axiom in RDF output examples: - - value: "https://nde.nl/ontology/hc/encompassing-body/network/nde" - description: "Portal operated by NDE network" + - value: https://nde.nl/ontology/hc/encompassing-body/network/nde + description: Portal operated by NDE network + close_mappings: + - schema:provider + broad_mappings: + - prov:wasAttributedTo diff --git a/schemas/20251121/linkml/modules/slots/organizational_change_events.yaml b/schemas/20251121/linkml/modules/slots/organizational_change_events.yaml index dea8904210..31d1878c78 100644 --- a/schemas/20251121/linkml/modules/slots/organizational_change_events.yaml +++ b/schemas/20251121/linkml/modules/slots/organizational_change_events.yaml @@ -1,25 +1,19 @@ -# organizational_change_events slot -# Links Custodian to OrganizationalChangeEvent entities - id: https://nde.nl/ontology/hc/slot/organizational_change_events name: organizational_change_events - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# - default_prefix: hc - imports: - - linkml:types - - ../metadata - # Class imports for range - - ../classes/OrganizationalChangeEvent - +- linkml:types +- ../metadata +- ../classes/OrganizationalChangeEvent slots: organizational_change_events: - description: "History of organizational change events for this custodian" + description: History of organizational change events for this custodian range: OrganizationalChangeEvent multivalued: true slot_uri: prov:wasInfluencedBy + close_mappings: + - prov:Activity diff --git a/schemas/20251121/linkml/modules/slots/organizational_structure.yaml b/schemas/20251121/linkml/modules/slots/organizational_structure.yaml index 8b964f55ee..5230338653 100644 --- a/schemas/20251121/linkml/modules/slots/organizational_structure.yaml +++ b/schemas/20251121/linkml/modules/slots/organizational_structure.yaml @@ -1,61 +1,41 @@ -# Custodian Slot: organizational_structure -# Links Custodian to informal organizational units - id: https://nde.nl/ontology/hc/slot/organizational_structure name: organizational_structure_slot - slots: organizational_structure: slot_uri: org:hasUnit range: OrganizationalStructure multivalued: true - description: | - Informal organizational structure - operational departments, teams, - divisions, and groups that are NOT formally registered legal entities. - - **Key Distinction**: - - **GovernanceStructure** (on CustodianLegalStatus): FORMAL structure - from legal registration (e.g., "agency under Ministry OCW") - - **OrganizationalStructure** (on Custodian): INFORMAL operational units - (e.g., "Digital Preservation Team", "Collections Department") - - **W3C ORG Property**: `org:hasUnit` - - Domain: org:FormalOrganization (the CustodianLegalStatus) - - Range: org:OrganizationalUnit (the operational units) - - Definition: "Indicates a unit which is part of this Organization" - - **Why on Custodian, not CustodianLegalStatus?**: - - Organizational units are operational/functional, not legal - - Units can change frequently without legal reorganization - - Multiple legal entities (branches) may share organizational structure - - Separates formal (legal) from informal (operational) structure - - **Examples**: - - National Archives: "Digital Preservation Department", "Reading Room Service" - - Rijksmuseum: "Conservation Lab", "Education Division", "Asian Art Department" - - University Library: "Special Collections", "Digital Services Team" - + description: "Informal organizational structure - operational departments, teams,\ndivisions, and groups that are NOT\ + \ formally registered legal entities.\n\n**Key Distinction**:\n- **GovernanceStructure** (on CustodianLegalStatus):\ + \ FORMAL structure\n from legal registration (e.g., \"agency under Ministry OCW\")\n- **OrganizationalStructure** (on\ + \ Custodian): INFORMAL operational units\n (e.g., \"Digital Preservation Team\", \"Collections Department\")\n\n**W3C\ + \ ORG Property**: `org:hasUnit`\n- Domain: org:FormalOrganization (the CustodianLegalStatus)\n- Range: org:OrganizationalUnit\ + \ (the operational units)\n- Definition: \"Indicates a unit which is part of this Organization\"\n\n**Why on Custodian,\ + \ not CustodianLegalStatus?**:\n- Organizational units are operational/functional, not legal\n- Units can change frequently\ + \ without legal reorganization\n- Multiple legal entities (branches) may share organizational structure\n- Separates\ + \ formal (legal) from informal (operational) structure\n\n**Examples**:\n- National Archives: \"Digital Preservation\ + \ Department\", \"Reading Room Service\"\n- Rijksmuseum: \"Conservation Lab\", \"Education Division\", \"Asian Art Department\"\ + \n- University Library: \"Special Collections\", \"Digital Services Team\"\n" comments: - - "Links to OrganizationalStructure class (org:OrganizationalUnit)" - - "Multivalued - custodians have multiple units" - - "Units can nest via parent_unit property" - - "Temporal validity tracked per unit (valid_from/valid_to)" - - "NOT for legal sub-organizations (use CustodianLegalStatus hierarchy)" - + - Links to OrganizationalStructure class (org:OrganizationalUnit) + - Multivalued - custodians have multiple units + - Units can nest via parent_unit property + - Temporal validity tracked per unit (valid_from/valid_to) + - NOT for legal sub-organizations (use CustodianLegalStatus hierarchy) exact_mappings: - - org:hasUnit - + - org:hasUnit related_mappings: - - org:OrganizationalUnit # The class of units - - org:unitOf # Inverse property - + - org:OrganizationalUnit + - org:unitOf examples: - - value: - - unit_name: "Digital Preservation Department" - unit_type: "DEPARTMENT" - staff_count: 15 - - unit_name: "Public Services Team" - unit_type: "TEAM" - parent_unit: - unit_name: "User Services Division" - description: "Custodian with multiple organizational units" + - value: + - unit_name: Digital Preservation Department + unit_type: DEPARTMENT + staff_count: 15 + - unit_name: Public Services Team + unit_type: TEAM + parent_unit: + unit_name: User Services Division + description: Custodian with multiple organizational units + close_mappings: + - org:organization diff --git a/schemas/20251121/linkml/modules/slots/parent_collection.yaml b/schemas/20251121/linkml/modules/slots/parent_collection.yaml new file mode 100644 index 0000000000..39afc0f278 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/parent_collection.yaml @@ -0,0 +1,25 @@ +id: https://nde.nl/ontology/hc/slot/parent_collection +name: parent_collection +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + parent_collection: + slot_uri: rico:isOrWasPartOf + description: 'Parent collection in hierarchical arrangement. + + + RiC-O: isOrWasPartOf for part-whole relationships. + + + Links a sub-collection or series to its containing collection. + + ' + range: Collection + required: false + examples: + - value: https://nde.nl/ontology/hc/collection/nationaal-archief-voc + description: Parent VOC collection + exact_mappings: + - dcterms:isPartOf diff --git a/schemas/20251121/linkml/modules/slots/parent_corporation.yaml b/schemas/20251121/linkml/modules/slots/parent_corporation.yaml new file mode 100644 index 0000000000..6290ca9250 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/parent_corporation.yaml @@ -0,0 +1,33 @@ +# Slot: parent_corporation +# Corporate parent organization + +id: https://nde.nl/ontology/hc/slot/parent_corporation +name: parent_corporation_slot + +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + org: http://www.w3.org/ns/org# + schema: http://schema.org/ + +imports: + - linkml:types + +default_range: string + +slots: + parent_corporation: + slot_uri: schema:parentOrganization + description: | + The corporate parent organization that owns or controls this entity. + + Schema.org: parentOrganization - "The larger organization that this organization + is a subOrganization of, if any." + + Used for corporate archives, company museums, or heritage institutions + owned by larger corporate entities. + range: string + exact_mappings: + - schema:parentOrganization + close_mappings: + - org:subOrganizationOf diff --git a/schemas/20251121/linkml/modules/slots/parent_custodian.yaml b/schemas/20251121/linkml/modules/slots/parent_custodian.yaml index 48597a1abe..1fd268d689 100644 --- a/schemas/20251121/linkml/modules/slots/parent_custodian.yaml +++ b/schemas/20251121/linkml/modules/slots/parent_custodian.yaml @@ -1,52 +1,29 @@ -# CustodianLegalStatus Slot: parent_custodian -# Parent entity in organizational hierarchy -# Inverse of has_suborganization (org:hasSubOrganization) - id: https://nde.nl/ontology/hc/slot/parent_custodian name: parent_custodian_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ org: http://www.w3.org/ns/org# owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - - ../metadata - - ../classes/CustodianLegalStatus - +- linkml:types +- ../metadata +- ../classes/CustodianLegalStatus slots: parent_custodian: slot_uri: org:subOrganizationOf - description: | - Parent entity in organizational hierarchy. - - **W3C ORG Alignment**: - - Property: `org:subOrganizationOf` - - Domain: org:Organization - - Range: org:Organization - - Definition: "Represents hierarchical containment of Organizations or - Organizational Units; indicates an organization which contains this - Organization." - - **INVERSE PROPERTY**: - - **Inverse**: `has_suborganization` (org:hasSubOrganization) - - Pattern: If A subOrganizationOf B, then B hasSubOrganization A - - **Example**: - ```yaml - CustodianLegalStatus: - legal_name: "Nationaal Archief" - parent_custodian: "https://nde.nl/ontology/hc/nl-ministry-ocw" - ``` - + description: "Parent entity in organizational hierarchy.\n\n**W3C ORG Alignment**:\n\nProperty: `org:subOrganizationOf`\n\ + - Domain: org:Organization\n- Range: org:Organization\n- Definition: \"Represents hierarchical containment of Organizations\ + \ or \n Organizational Units; indicates an organization which contains this \n Organization.\"\n\n**INVERSE PROPERTY**:\n\ + - **Inverse**: `has_suborganization` (org:hasSubOrganization)\n- Pattern: If A subOrganizationOf B, then B hasSubOrganization\ + \ A\n\n**Example**:\n```yaml\nCustodianLegalStatus:\n legal_name: \"Nationaal Archief\"\n parent_custodian: \"https://nde.nl/ontology/hc/nl-ministry-ocw\"\ + \n```\n" range: CustodianLegalStatus - exact_mappings: - - org:subOrganizationOf - + - org:subOrganizationOf + - schema:parentOrganization comments: - - "Inverse of has_suborganization (org:hasSubOrganization)" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of has_suborganization (org:hasSubOrganization) + - Creates owl:inverseOf axiom in RDF output + broad_mappings: + - schema:organization diff --git a/schemas/20251121/linkml/modules/slots/part_of_custodian_collection.yaml b/schemas/20251121/linkml/modules/slots/part_of_custodian_collection.yaml new file mode 100644 index 0000000000..899bf9301b --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/part_of_custodian_collection.yaml @@ -0,0 +1,24 @@ +id: https://nde.nl/ontology/hc/slot/part_of_custodian_collection +name: part_of_custodian_collection +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + part_of_custodian_collection: + slot_uri: rico:isOrWasHeldBy + description: 'Link to abstract CustodianCollection held by an institution. + + + Connects a specific Collection instance to the broader + + CustodianCollection that represents all holdings of a custodian. + + ' + range: CustodianCollection + required: false + examples: + - value: https://nde.nl/ontology/hc/custodian-collection/nationaal-archief + description: Nationaal Archief holdings + broad_mappings: + - dcterms:relation diff --git a/schemas/20251121/linkml/modules/slots/person_name.yaml b/schemas/20251121/linkml/modules/slots/person_name.yaml index fb9883247d..3f43b7aa4f 100644 --- a/schemas/20251121/linkml/modules/slots/person_name.yaml +++ b/schemas/20251121/linkml/modules/slots/person_name.yaml @@ -1,12 +1,12 @@ id: https://nde.nl/ontology/hc/slot/person_name name: person_name title: Person Name - imports: - - linkml:types - +- linkml:types slots: person_name: slot_uri: schema:name description: Full name of person as recorded in institutional sources range: string + broad_mappings: + - rdfs:label diff --git a/schemas/20251121/linkml/modules/slots/place_language.yaml b/schemas/20251121/linkml/modules/slots/place_language.yaml index 4dd090d8af..67afb4eb32 100644 --- a/schemas/20251121/linkml/modules/slots/place_language.yaml +++ b/schemas/20251121/linkml/modules/slots/place_language.yaml @@ -1,12 +1,12 @@ -# Place Language Slot id: https://nde.nl/ontology/hc/slot/place_language name: place_language_slot - slots: place_language: slot_uri: dct:language - description: "Language of place name" + description: Language of place name range: string required: false exact_mappings: - - schema:inLanguage + - schema:inLanguage + broad_mappings: + - dcterms:language diff --git a/schemas/20251121/linkml/modules/slots/place_note.yaml b/schemas/20251121/linkml/modules/slots/place_note.yaml index b111a268c6..d57d8c0edb 100644 --- a/schemas/20251121/linkml/modules/slots/place_note.yaml +++ b/schemas/20251121/linkml/modules/slots/place_note.yaml @@ -1,12 +1,12 @@ -# Place Note Slot id: https://nde.nl/ontology/hc/slot/place_note name: place_note_slot - slots: place_note: slot_uri: skos:note - description: "Contextual notes about place reference" + description: Contextual notes about place reference range: string required: false exact_mappings: - - rdfs:comment + - rdfs:comment + broad_mappings: + - skos:note diff --git a/schemas/20251121/linkml/modules/slots/platform_name.yaml b/schemas/20251121/linkml/modules/slots/platform_name.yaml index c98acdbdda..505386d587 100644 --- a/schemas/20251121/linkml/modules/slots/platform_name.yaml +++ b/schemas/20251121/linkml/modules/slots/platform_name.yaml @@ -1,20 +1,20 @@ -# Global Slot: platform_name -# Human-readable name for a digital platform - id: https://nde.nl/ontology/hc/slot/platform_name name: platform_name_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - slots: platform_name: slot_uri: schema:name range: string - description: | - Human-readable name of the digital platform. + description: 'Human-readable name of the digital platform. + Examples: "Rijksmuseum Website", "Instagram", "Facebook Page" + + ' + exact_mappings: + - schema:name + broad_mappings: + - rdfs:label diff --git a/schemas/20251121/linkml/modules/slots/platform_of.yaml b/schemas/20251121/linkml/modules/slots/platform_of.yaml index 7ddc70f36f..fdf6148f4e 100644 --- a/schemas/20251121/linkml/modules/slots/platform_of.yaml +++ b/schemas/20251121/linkml/modules/slots/platform_of.yaml @@ -1,44 +1,25 @@ -# Slot: platform_of -# Inverse of digital_platform -# Links DigitalPlatform to custodian it belongs to - id: https://nde.nl/ontology/hc/slot/platform_of name: platform_of title: Platform Of - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ foaf: http://xmlns.com/foaf/0.1/ owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: platform_of: slot_uri: hc:platformOf - description: | - The custodian that operates or owns this digital platform. - - **INVERSE PROPERTY**: - - **Inverse**: `digital_platform` (foaf:homepage) - - Pattern: If Custodian digital_platform Platform, then Platform platform_of Custodian - - **Example**: - ```yaml - DigitalPlatform: - platform_name: "Rijksstudio" - platform_url: "https://www.rijksmuseum.nl/rijksstudio" - platform_of: "https://nde.nl/ontology/hc/nl-nh-ams-m-rm" - ``` - - **Navigation**: - - From platform: Find owning custodian (platform_of) - - From custodian: Find digital platforms (digital_platform) + description: "The custodian that operates or owns this digital platform.\n\n**INVERSE PROPERTY**:\n- **Inverse**: `digital_platform`\ + \ (foaf:homepage)\n- Pattern: If Custodian digital_platform Platform, then Platform platform_of Custodian\n\n**Example**:\n\ + ```yaml\nDigitalPlatform:\n platform_name: \"Rijksstudio\"\n platform_url: \"https://www.rijksmuseum.nl/rijksstudio\"\ + \n platform_of: \"https://nde.nl/ontology/hc/nl-nh-ams-m-rm\"\n```\n\n**Navigation**:\n- From platform: Find owning\ + \ custodian (platform_of)\n- From custodian: Find digital platforms (digital_platform)\n" range: Custodian - comments: - - "Inverse of digital_platform (foaf:homepage)" - - "Links platform back to its operating custodian" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of digital_platform (foaf:homepage) + - Links platform back to its operating custodian + - Creates owl:inverseOf axiom in RDF output + close_mappings: + - dcterms:isPartOf diff --git a/schemas/20251121/linkml/modules/slots/platform_type.yaml b/schemas/20251121/linkml/modules/slots/platform_type.yaml index 076f7469f5..01e7403d05 100644 --- a/schemas/20251121/linkml/modules/slots/platform_type.yaml +++ b/schemas/20251121/linkml/modules/slots/platform_type.yaml @@ -1,43 +1,53 @@ -# Global Slot: platform_type -# Type classification for digital platforms -# Generic slot - range should be overridden in slot_usage for specific platform classes -# -# NOTE: As of 2025-01, using class-based type hierarchy (DigitalPlatformType) -# instead of enum-based approach. The old enums are deprecated. - id: https://nde.nl/ontology/hc/slot/platform_type name: platform_type_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - default_prefix: hc - slots: platform_type: slot_uri: dcterms:type range: string - description: | - Type classification for a digital platform. - + description: 'Type classification for a digital platform. + + **Class-Based Type System** (preferred): - + + Use DigitalPlatformType as the range in slot_usage for polymorphic + support of all 69 concrete platform type subclasses organized into + 8 categories (REPOSITORY, AGGREGATOR, DISCOVERY, VIRTUAL_HERITAGE, + RESEARCH, INTERACTIVE, COMMERCE, AUXILIARY). - + + See: + - DigitalPlatformType.yaml - Abstract base class + - DigitalPlatformTypes.yaml - 69 concrete subclasses - + + **Slot Usage Examples**: + - DigitalPlatform: range → DigitalPlatformType + - AuxiliaryDigitalPlatform: range → DigitalPlatformType + - SocialMediaProfile: range → SocialMediaPlatformTypeEnum (unchanged) - + + **DEPRECATED**: + - DigitalPlatformTypeEnum - use class hierarchy instead + - AuxiliaryDigitalPlatformTypeEnum - use class hierarchy instead + + ' + close_mappings: + - dcterms:type + broad_mappings: + - dcterms:type diff --git a/schemas/20251121/linkml/modules/slots/policy_id.yaml b/schemas/20251121/linkml/modules/slots/policy_id.yaml index 6c8273d4a1..01f1a5fb55 100644 --- a/schemas/20251121/linkml/modules/slots/policy_id.yaml +++ b/schemas/20251121/linkml/modules/slots/policy_id.yaml @@ -1,21 +1,23 @@ -# Custodian Slot: policy_id -# Unique identifier for policy entities - id: https://nde.nl/ontology/hc/slot/policy_id name: policy_id_slot - prefixes: dcterms: http://purl.org/dc/terms/ - slots: policy_id: slot_uri: dcterms:identifier range: uriorcurie identifier: true - description: | - Unique identifier for a policy entity. - + description: 'Unique identifier for a policy entity. + + Used by: + - AccessPolicy: access restrictions and permissions + - StorageConditionPolicy: environmental conditions for storage + - Other policy-related classes + + ' + broad_mappings: + - dcterms:identifier diff --git a/schemas/20251121/linkml/modules/slots/policy_name.yaml b/schemas/20251121/linkml/modules/slots/policy_name.yaml index 9ae013a50e..09715c0de3 100644 --- a/schemas/20251121/linkml/modules/slots/policy_name.yaml +++ b/schemas/20251121/linkml/modules/slots/policy_name.yaml @@ -1,20 +1,22 @@ -# Custodian Slot: policy_name -# Human-readable name for policy entities - id: https://nde.nl/ontology/hc/slot/policy_name name: policy_name_slot - prefixes: dcterms: http://purl.org/dc/terms/ - slots: policy_name: slot_uri: dcterms:title range: string - description: | - Human-readable name for a policy entity. - + description: 'Human-readable name for a policy entity. + + Examples: + - "Restricted Access Policy" + - "Climate-Controlled Storage Requirements" + - "Public Domain Access" + + ' + broad_mappings: + - rdfs:label diff --git a/schemas/20251121/linkml/modules/slots/portal_data_sources.yaml b/schemas/20251121/linkml/modules/slots/portal_data_sources.yaml index 27e854b9cb..96041dbfb4 100644 --- a/schemas/20251121/linkml/modules/slots/portal_data_sources.yaml +++ b/schemas/20251121/linkml/modules/slots/portal_data_sources.yaml @@ -1,44 +1,53 @@ -# portal_data_sources slot -# Links CollectionManagementSystem to WebPortal for data aggregation - id: https://nde.nl/ontology/hc/slot/portal_data_sources name: portal_data_sources - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ dcterms: http://purl.org/dc/terms/ edm: http://www.europeana.eu/schemas/edm/ - imports: - - linkml:types - +- linkml:types slots: portal_data_sources: slot_uri: edm:dataProvider - description: | - Collection management systems that feed data into this web portal. - + description: 'Collection management systems that feed data into this web portal. + + **RELATIONSHIP**: CMS → WebPortal (aggregation) - + + A portal aggregates metadata from multiple CMS deployments. This slot + captures which CMS systems provide data to the portal. - + + **Direction**: Listed on WebPortal, pointing to CMS instances. + **Inverse**: CMS.feeds_portal (to be added to CollectionManagementSystem) - + + **Examples**: + - Archieven.nl ← MAIS-Flexis deployments from regional archives + - Europeana ← Various museum CMS exports via aggregators + - OpenArchieven.nl ← De Ree hosted archive CMS instances - + + **Ontology Alignment**: + - EDM: `edm:dataProvider` - institution providing data to aggregator - - Note: We use CMS as proxy for institution's data flow + + - Note: We use CMS as proxy for institution''s data flow + + ' range: CollectionManagementSystem multivalued: true inlined_as_list: true examples: - - value: "https://nde.nl/ontology/hc/cms/gelders-archief-mais" - description: "MAIS deployment at Gelders Archief feeding Archieven.nl" + - value: https://nde.nl/ontology/hc/cms/gelders-archief-mais + description: MAIS deployment at Gelders Archief feeding Archieven.nl + close_mappings: + - dcterms:source diff --git a/schemas/20251121/linkml/modules/slots/postal_code.yaml b/schemas/20251121/linkml/modules/slots/postal_code.yaml index 0b12643a57..7c2a789b5e 100644 --- a/schemas/20251121/linkml/modules/slots/postal_code.yaml +++ b/schemas/20251121/linkml/modules/slots/postal_code.yaml @@ -1,35 +1,37 @@ -# postal_code slot - Postal/ZIP code -# Used by: AuxiliaryPlace, other location-related classes - id: https://nde.nl/ontology/hc/slot/postal_code name: postal_code_slot title: Postal Code Slot +description: 'Postal code or ZIP code for a location. + -description: | - Postal code or ZIP code for a location. - Format varies by country: + - Netherlands: "1071 XX" (4 digits + 2 letters) + - USA: "20500" or "20500-0001" (5 or 9 digits) + - UK: "SW1A 1AA" (outward + inward codes) + ' prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ locn: http://www.w3.org/ns/locn# - slots: postal_code: slot_uri: schema:postalCode range: string required: false - description: | - Postal code or ZIP code for the location. - exact_mappings: - - locn:postCode - - vcard:postal-code + description: 'Postal code or ZIP code for the location. + ' + exact_mappings: + - locn:postCode + - vcard:postal-code + - schema:postalCode + broad_mappings: + - dcterms:identifier comments: - - "Format varies by country" - - "Store as string to preserve leading zeros and special characters" +- Format varies by country +- Store as string to preserve leading zeros and special characters diff --git a/schemas/20251121/linkml/modules/slots/powered_by_cms.yaml b/schemas/20251121/linkml/modules/slots/powered_by_cms.yaml index b0deeef38c..5f2c2bdc07 100644 --- a/schemas/20251121/linkml/modules/slots/powered_by_cms.yaml +++ b/schemas/20251121/linkml/modules/slots/powered_by_cms.yaml @@ -1,22 +1,17 @@ -# Global Slot: powered_by_cms -# Links digital platforms to the Collection Management System(s) that power them - id: https://nde.nl/ontology/hc/slot/powered_by_cms name: powered_by_cms_slot - imports: - - ../classes/CollectionManagementSystem - +- ../classes/CollectionManagementSystem prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ crm: http://www.cidoc-crm.org/cidoc-crm/ - default_prefix: hc - slots: powered_by_cms: slot_uri: crm:P33i_was_used_by description: Collection Management System(s) powering this digital platform range: CollectionManagementSystem multivalued: true + related_mappings: + - schema:softwareVersion diff --git a/schemas/20251121/linkml/modules/slots/preferred_label.yaml b/schemas/20251121/linkml/modules/slots/preferred_label.yaml index fd5ca4e072..f600719c1e 100644 --- a/schemas/20251121/linkml/modules/slots/preferred_label.yaml +++ b/schemas/20251121/linkml/modules/slots/preferred_label.yaml @@ -1,23 +1,23 @@ -# Custodian Slot: preferred_label -# The primary display name for a custodian entity - id: https://nde.nl/ontology/hc/slot/preferred_label name: preferred_label_slot - +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/ + rdfs: http://www.w3.org/2000/01/rdf-schema# imports: - - linkml:types - +- linkml:types slots: preferred_label: + slot_uri: skos:prefLabel range: string required: false - description: | - The primary display name for this custodian. - - This is the CANONICAL name - the standardized label accepted by the - custodian itself for public representation. - - For structured name data, use the 'custodian_name' relationship to - a CustodianName entity. - - Example: "Rijksmuseum", "Palestinian Museum" + exact_mappings: + - schema:name + - rdfs:label + - skos:prefLabel + description: "The primary display name for this custodian.\n\nThis is the CANONICAL name - the standardized label accepted\ + \ by the \ncustodian itself for public representation.\n\nSKOS: prefLabel - \"The preferred lexical label for a resource,\ + \ in a given language.\"\n\nFor structured name data, use the 'custodian_name' relationship to\na CustodianName entity.\n\ + \nExample: \"Rijksmuseum\", \"Palestinian Museum\"\n" diff --git a/schemas/20251121/linkml/modules/slots/preservation_level.yaml b/schemas/20251121/linkml/modules/slots/preservation_level.yaml index c8a296dc87..f7cf974c01 100644 --- a/schemas/20251121/linkml/modules/slots/preservation_level.yaml +++ b/schemas/20251121/linkml/modules/slots/preservation_level.yaml @@ -1,24 +1,26 @@ -# Global Slot: preservation_level -# Digital preservation commitment level - id: https://nde.nl/ontology/hc/slot/preservation_level name: preservation_level_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ premis: http://www.loc.gov/premis/rdf/v3/ - default_prefix: hc - slots: preservation_level: slot_uri: premis:policy - description: | - Digital preservation commitment level for this resource. + description: 'Digital preservation commitment level for this resource. + Values indicate the level of digital preservation applied: + - "full_preservation": Complete digital preservation with format migration + - "bit_preservation": Bit-level integrity preservation only + - "access_only": No formal preservation commitment + - "dark_archive": Preserved but not publicly accessible + + ' range: string + related_mappings: + - dcterms:type diff --git a/schemas/20251121/linkml/modules/slots/price.yaml b/schemas/20251121/linkml/modules/slots/price.yaml index e6a371e24b..575d7c7c57 100644 --- a/schemas/20251121/linkml/modules/slots/price.yaml +++ b/schemas/20251121/linkml/modules/slots/price.yaml @@ -2,21 +2,19 @@ id: https://nde.nl/ontology/hc/slot/price name: price_slot title: Price Slot description: Shared slot for price information across heritage custodian entities - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: price: description: Price value (numeric or formatted string with currency) range: string slot_uri: schema:price comments: - - "Classes may override range in slot_usage (e.g., decimal for ProvenanceEvent)" + - Classes may override range in slot_usage (e.g., decimal for ProvenanceEvent) + exact_mappings: + - schema:price diff --git a/schemas/20251121/linkml/modules/slots/price_currency.yaml b/schemas/20251121/linkml/modules/slots/price_currency.yaml index bfc67e0143..1c2ad0ba28 100644 --- a/schemas/20251121/linkml/modules/slots/price_currency.yaml +++ b/schemas/20251121/linkml/modules/slots/price_currency.yaml @@ -2,19 +2,17 @@ id: https://nde.nl/ontology/hc/slot/price_currency name: price_currency_slot title: Price Currency Slot description: Shared slot for price currency information across heritage custodian entities - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: price_currency: description: Currency code for price (ISO 4217 format, e.g., EUR, USD, GBP) range: string slot_uri: schema:priceCurrency + exact_mappings: + - schema:priceCurrency diff --git a/schemas/20251121/linkml/modules/slots/primary_register.yaml b/schemas/20251121/linkml/modules/slots/primary_register.yaml index bd7969cca3..ca5a685522 100644 --- a/schemas/20251121/linkml/modules/slots/primary_register.yaml +++ b/schemas/20251121/linkml/modules/slots/primary_register.yaml @@ -1,44 +1,38 @@ -# primary_register slot - Primary trade register reference - id: https://nde.nl/ontology/hc/slot/primary_register name: primary_register title: Primary Register Slot - prefixes: gleif_base: https://www.gleif.org/ontology/Base/ gleif_ra: https://www.gleif.org/ontology/RegistrationAuthority/ schema: http://schema.org/ - -description: | - Primary trade register where an entity is registered. - - Links to TradeRegister class. - - gleif_base:isRegisteredIn - "indicates the registry that something is registered in" - gleif_ra:BusinessRegistry - "a registry for registering and maintaining - information about business entities" - - Used for: - - CustodianLegalStatus: Primary register where entity is registered - - RegistrationNumber: Register that issued the number - +description: "Primary trade register where an entity is registered.\n\nLinks to TradeRegister class.\n\ngleif_base:isRegisteredIn\ + \ - \"indicates the registry that something is registered in\"\ngleif_ra:BusinessRegistry - \"a registry for registering\ + \ and maintaining \ninformation about business entities\"\n\nUsed for:\n- CustodianLegalStatus: Primary register where entity\ + \ is registered\n- RegistrationNumber: Register that issued the number\n" slots: primary_register: slot_uri: gleif_base:isRegisteredIn range: TradeRegister required: false multivalued: false - description: | - Primary trade register where entity is registered. - + description: 'Primary trade register where entity is registered. + + gleif_base:isRegisteredIn - "indicates the registry that something is registered in" - + + Examples: + - Netherlands Handelsregister (HR) + - UK Companies Register + - German Handelsregister (HRB/HRA) + ' + close_mappings: + - dcterms:source comments: - - "Maps to gleif_base:isRegisteredIn" - - "Links to TradeRegister class (the register/database)" - - "Distinct from RegistrationAuthority (the organization maintaining the register)" +- Maps to gleif_base:isRegisteredIn +- Links to TradeRegister class (the register/database) +- Distinct from RegistrationAuthority (the organization maintaining the register) diff --git a/schemas/20251121/linkml/modules/slots/pronouns.yaml b/schemas/20251121/linkml/modules/slots/pronouns.yaml index 04cb3e2f96..d03e3be6a0 100644 --- a/schemas/20251121/linkml/modules/slots/pronouns.yaml +++ b/schemas/20251121/linkml/modules/slots/pronouns.yaml @@ -1,129 +1,69 @@ -# Pronouns Slot -# -# DESIGN PRINCIPLE: Self-determination of pronouns -# -# Schema.org explicitly supports this with schema:pronouns, noting: -# "Typically the person concerned is the best authority as pronouns are a -# critical part of personal identity and expression." -# -# This is a free-text field to support all pronoun configurations including -# neopronouns and culturally-specific forms. -# -# LINGUISTIC DIVERSITY NOTE: -# Pronouns are LANGUAGE-SPECIFIC. Many languages have gender-neutral pronouns -# by default and do not encode gender in third-person pronouns at all: -# - Malay/Indonesian: "dia" (singular), "mereka" (plural) - no gender distinction -# - Finnish: "hän" - gender-neutral third-person singular -# - Turkish: "o" - gender-neutral third-person singular -# - Hungarian: "ő" - gender-neutral third-person singular -# - Persian/Farsi: "او" (u) - gender-neutral third-person singular -# - Estonian: "tema/ta" - gender-neutral third-person singular -# - Swahili: "yeye" - gender-neutral third-person singular -# - Bengali: "সে" (se/she) - gender-neutral colloquially -# - Armenian: "նա" (na) - gender-neutral third-person singular -# - Georgian: "ის" (is) - gender-neutral third-person singular -# - Yoruba: "ó/o" - gender-neutral third-person singular -# - Chinese: "他/她/它" (tā) - same pronunciation, different characters (modern written distinction) -# - Japanese: Context-based, pronouns often omitted entirely -# -# In these languages, pronouns do NOT indicate gender identity. The concept of -# "preferred pronouns" as a gender expression is primarily relevant in languages -# with gendered third-person pronouns (English, Romance, Slavic, Germanic, etc.). - id: https://nde.nl/ontology/hc/slot/pronouns name: pronouns_slot title: Pronouns Slot - prefixes: schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types slots: pronouns: slot_uri: schema:pronouns - description: >- - The person's preferred pronouns as they specify them. This is a free-text - field that respects self-determination. + description: The person's preferred pronouns as they specify them. This is a free-text field that respects self-determination. comments: - - >- - **Self-Authority**: As Schema.org notes, "the person concerned is the - best authority as pronouns are a critical part of personal identity - and expression." - - >- - **Format**: May be formatted as the person prefers, e.g., "she/her", - "they/them", "he/him", "ze/zir", "any pronouns", etc. - - >- - **Multiple Sets**: Some people use multiple pronoun sets (e.g., - "she/they" or "he/they"). Record as specified. - - >- - **Neopronouns**: Fully supported - use as specified by the person - (e.g., "xe/xem", "fae/faer", "ey/em"). - - >- - **Linguistic Diversity**: Many languages use gender-neutral pronouns - by default (e.g., Malay/Indonesian "dia", Finnish "hän", Turkish "o", - Hungarian "ő", Persian "او", Estonian "tema", Swahili "yeye"). In these - languages, pronouns do NOT indicate gender identity. A value of "dia" - (Malay/Indonesian) is gender-neutral by nature, not a gender statement. - - >- - **Multilingual Context**: This field should be interpreted within the - person's linguistic/cultural context. Consider adding the language - (e.g., "dia [Malay]" or "hän [Finnish]") for clarity when relevant. - - >- - **Historical/Cultural Records**: Historical and non-Western sources may - not have "pronoun preferences" as a concept. Leave empty rather than - assuming. For historical persons, pronouns were typically assigned by - observers based on perceived gender, not self-determined. - - >- - **Privacy**: This field may be left empty by choice. + - '**Self-Authority**: As Schema.org notes, "the person concerned is the best authority as pronouns are a critical part + of personal identity and expression."' + - '**Format**: May be formatted as the person prefers, e.g., "she/her", "they/them", "he/him", "ze/zir", "any pronouns", + etc.' + - '**Multiple Sets**: Some people use multiple pronoun sets (e.g., "she/they" or "he/they"). Record as specified.' + - '**Neopronouns**: Fully supported - use as specified by the person (e.g., "xe/xem", "fae/faer", "ey/em").' + - '**Linguistic Diversity**: Many languages use gender-neutral pronouns by default (e.g., Malay/Indonesian "dia", Finnish + "hän", Turkish "o", Hungarian "ő", Persian "او", Estonian "tema", Swahili "yeye"). In these languages, pronouns do + NOT indicate gender identity. A value of "dia" (Malay/Indonesian) is gender-neutral by nature, not a gender statement.' + - '**Multilingual Context**: This field should be interpreted within the person''s linguistic/cultural context. Consider + adding the language (e.g., "dia [Malay]" or "hän [Finnish]") for clarity when relevant.' + - '**Historical/Cultural Records**: Historical and non-Western sources may not have "pronoun preferences" as a concept. + Leave empty rather than assuming. For historical persons, pronouns were typically assigned by observers based on perceived + gender, not self-determined.' + - '**Privacy**: This field may be left empty by choice.' range: string examples: - - value: "she/her" - description: "Feminine pronouns (English)" - - value: "he/him" - description: "Masculine pronouns (English)" - - value: "they/them" - description: "Gender-neutral singular they (English)" - - value: "she/they" - description: "Person uses both she/her and they/them (English)" - - value: "ze/zir" - description: "Neopronoun set (English)" - - value: "any pronouns" - description: "Person is comfortable with any pronouns" - - value: "avoid pronouns, use name" - description: "Person prefers name instead of pronouns" - - value: "dia" - description: "Gender-neutral by default (Malay/Indonesian) - NOT a gender identity statement" - - value: "hän" - description: "Gender-neutral by default (Finnish) - standard third-person singular" - - value: "o" - description: "Gender-neutral by default (Turkish) - standard third-person singular" - - value: "ő" - description: "Gender-neutral by default (Hungarian) - standard third-person singular" - - value: "او" - description: "Gender-neutral by default (Persian/Farsi) - standard third-person singular" - - value: "elle/elles" - description: "Gender-neutral Spanish neologism (alternative to él/ella)" - - value: "iel" - description: "Gender-neutral French neologism (alternative to il/elle)" + - value: she/her + description: Feminine pronouns (English) + - value: he/him + description: Masculine pronouns (English) + - value: they/them + description: Gender-neutral singular they (English) + - value: she/they + description: Person uses both she/her and they/them (English) + - value: ze/zir + description: Neopronoun set (English) + - value: any pronouns + description: Person is comfortable with any pronouns + - value: avoid pronouns, use name + description: Person prefers name instead of pronouns + - value: dia + description: Gender-neutral by default (Malay/Indonesian) - NOT a gender identity statement + - value: hän + description: Gender-neutral by default (Finnish) - standard third-person singular + - value: o + description: Gender-neutral by default (Turkish) - standard third-person singular + - value: ő + description: Gender-neutral by default (Hungarian) - standard third-person singular + - value: او + description: Gender-neutral by default (Persian/Farsi) - standard third-person singular + - value: elle/elles + description: Gender-neutral Spanish neologism (alternative to él/ella) + - value: iel + description: Gender-neutral French neologism (alternative to il/elle) notes: - - >- - Schema.org (schema:pronouns): "A short string listing or describing - pronouns for a person... Publishers and consumers of this information - are reminded to treat this data responsibly." - - >- - This slot supports professional contexts where correct pronoun usage - is important for respectful communication. - - >- - **IMPORTANT: Pronouns ≠ Gender Identity in many languages**. In languages - with gender-neutral default pronouns (Malay, Finnish, Turkish, Hungarian, - Persian, Estonian, Swahili, etc.), recording pronouns is NOT equivalent - to recording gender identity. The concept of "pronoun preference" as - gender expression is primarily relevant in gendered-pronoun languages - (English, Spanish, French, German, Russian, Arabic, Hindi, etc.). - - >- - For global heritage data, consider that many historical and contemporary - cultures do not have the same pronoun/gender relationship as Western - gendered languages. Interpret this field accordingly. - # NOTE: Applicable to all custodian types that track person data + - 'Schema.org (schema:pronouns): "A short string listing or describing pronouns for a person... Publishers and consumers + of this information are reminded to treat this data responsibly."' + - This slot supports professional contexts where correct pronoun usage is important for respectful communication. + - '**IMPORTANT: Pronouns ≠ Gender Identity in many languages**. In languages with gender-neutral default pronouns (Malay, + Finnish, Turkish, Hungarian, Persian, Estonian, Swahili, etc.), recording pronouns is NOT equivalent to recording gender + identity. The concept of "pronoun preference" as gender expression is primarily relevant in gendered-pronoun languages + (English, Spanish, French, German, Russian, Arabic, Hindi, etc.).' + - For global heritage data, consider that many historical and contemporary cultures do not have the same pronoun/gender + relationship as Western gendered languages. Interpret this field accordingly. + related_mappings: + - foaf:name diff --git a/schemas/20251121/linkml/modules/slots/protocol.yaml b/schemas/20251121/linkml/modules/slots/protocol.yaml index ff781fed3b..5762409962 100644 --- a/schemas/20251121/linkml/modules/slots/protocol.yaml +++ b/schemas/20251121/linkml/modules/slots/protocol.yaml @@ -1,34 +1,42 @@ -# Protocol Slot - Shared slot for API protocol specification -# Used by DataServiceEndpoint and its subclasses - id: https://nde.nl/ontology/hc/slot/protocol name: protocol_slot title: Protocol Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types slots: protocol: slot_uri: dcterms:conformsTo - description: | - Protocol or standard the endpoint implements. - + description: 'Protocol or standard the endpoint implements. + + Values from DataServiceProtocolEnum: + - OAI_PMH: Open Archives Initiative Protocol for Metadata Harvesting + - REST: RESTful HTTP API + - SOAP: SOAP web services + - GRAPHQL: GraphQL API + - SPARQL: SPARQL endpoint + - IIIF_IMAGE: IIIF Image API + - IIIF_PRESENTATION: IIIF Presentation API + - IIP: Internet Imaging Protocol + - ZOOMIFY: Zoomify tile protocol + - SRU: Search/Retrieve via URL + + ' range: string required: true + close_mappings: + - dcterms:conformsTo diff --git a/schemas/20251121/linkml/modules/slots/provenance_note.yaml b/schemas/20251121/linkml/modules/slots/provenance_note.yaml index 441cad3364..0d2247bbd6 100644 --- a/schemas/20251121/linkml/modules/slots/provenance_note.yaml +++ b/schemas/20251121/linkml/modules/slots/provenance_note.yaml @@ -1,13 +1,13 @@ -# Custodian Slot: provenance_note -# Notes on collection provenance - id: https://nde.nl/ontology/hc/slot/provenance_note name: provenance_note_slot - slots: provenance_note: slot_uri: crm:P24_transferred_title_of range: string - description: | - Notes on collection provenance, acquisition history, custody transfers. + description: 'Notes on collection provenance, acquisition history, custody transfers. + Documents metonymic relationship: how collection identifies custodian. + + ' + broad_mappings: + - skos:note diff --git a/schemas/20251121/linkml/modules/slots/provenance_statement.yaml b/schemas/20251121/linkml/modules/slots/provenance_statement.yaml new file mode 100644 index 0000000000..a64164e693 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/provenance_statement.yaml @@ -0,0 +1,25 @@ +id: https://nde.nl/ontology/hc/slot/provenance_statement +name: provenance_statement +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + provenance_statement: + slot_uri: rico:history + description: 'Narrative description of collection provenance. + + + RiC-O: history for provenance narrative. + + + Describes origin, creation context, and accumulation history. + + ' + range: string + required: false + examples: + - value: Records created by the VOC administration from 1602-1799 + description: Provenance statement for archival collection + exact_mappings: + - dcterms:provenance diff --git a/schemas/20251121/linkml/modules/slots/provenance_text.yaml b/schemas/20251121/linkml/modules/slots/provenance_text.yaml index 42865ce6a5..fa1a4ea397 100644 --- a/schemas/20251121/linkml/modules/slots/provenance_text.yaml +++ b/schemas/20251121/linkml/modules/slots/provenance_text.yaml @@ -1,24 +1,20 @@ -# Shared slot: provenance_text -# Used by: ProvenanceEvent, ExhibitedObject -# Created to resolve slot conflict during validation - id: https://nde.nl/ontology/hc/slot/provenance_text name: provenance_text_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: provenance_text: - description: | - Full provenance entry text in standard notation. + description: 'Full provenance entry text in standard notation. + Follow Getty Provenance Index format for ownership history. + + ' range: string slot_uri: dcterms:provenance + exact_mappings: + - dcterms:provenance diff --git a/schemas/20251121/linkml/modules/slots/publication_date.yaml b/schemas/20251121/linkml/modules/slots/publication_date.yaml index 68a342454b..56242ea8f0 100644 --- a/schemas/20251121/linkml/modules/slots/publication_date.yaml +++ b/schemas/20251121/linkml/modules/slots/publication_date.yaml @@ -1,22 +1,19 @@ -# Slot: publication_date -# Date when a resource was published - id: https://nde.nl/ontology/hc/slot/publication_date name: publication_date_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: publication_date: slot_uri: dcterms:issued range: date - description: >- - Date when the resource was published or made available. + description: Date when the resource was published or made available. + exact_mappings: + - schema:datePublished + - dcterms:issued + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/publisher.yaml b/schemas/20251121/linkml/modules/slots/publisher.yaml index 6ea36df1a3..16de99bd9e 100644 --- a/schemas/20251121/linkml/modules/slots/publisher.yaml +++ b/schemas/20251121/linkml/modules/slots/publisher.yaml @@ -1,22 +1,17 @@ -# Slot: publisher -# Publisher of a resource - id: https://nde.nl/ontology/hc/slot/publisher name: publisher_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: publisher: slot_uri: dcterms:publisher range: string - description: >- - Publisher of the resource (finding aid, catalog, etc.). + description: Publisher of the resource (finding aid, catalog, etc.). + exact_mappings: + - dcterms:publisher + - schema:publisher diff --git a/schemas/20251121/linkml/modules/slots/reconstruction_method.yaml b/schemas/20251121/linkml/modules/slots/reconstruction_method.yaml index 068ac22f37..d119012d5b 100644 --- a/schemas/20251121/linkml/modules/slots/reconstruction_method.yaml +++ b/schemas/20251121/linkml/modules/slots/reconstruction_method.yaml @@ -1,14 +1,15 @@ -# Slot: reconstruction_method -# Documents synthesis methodology - id: https://nde.nl/ontology/hc/slot/reconstruction_method name: reconstruction_method-slot - slots: reconstruction_method: - description: | - Documents the methodology used to create this reconstruction from + description: 'Documents the methodology used to create this reconstruction from + available observations. May include data sources, algorithms, + editorial decisions, and confidence levels. + + ' slot_uri: prov:hadPlan range: string + broad_mappings: + - prov:wasGeneratedBy diff --git a/schemas/20251121/linkml/modules/slots/record_type.yaml b/schemas/20251121/linkml/modules/slots/record_type.yaml index e89ea24735..1b79c22fd1 100644 --- a/schemas/20251121/linkml/modules/slots/record_type.yaml +++ b/schemas/20251121/linkml/modules/slots/record_type.yaml @@ -2,19 +2,19 @@ id: https://nde.nl/ontology/hc/slot/record_type name: record_type_slot title: Record Type Slot description: Shared slot for record type classification across heritage custodian entities - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: record_type: description: Type classification of a record (e.g., conservation record type, administrative record type) range: string slot_uri: dcterms:type + close_mappings: + - rico:hasRecordSetType + broad_mappings: + - dcterms:type diff --git a/schemas/20251121/linkml/modules/slots/refers_to_custodian.yaml b/schemas/20251121/linkml/modules/slots/refers_to_custodian.yaml index b8639473ff..277b0653af 100644 --- a/schemas/20251121/linkml/modules/slots/refers_to_custodian.yaml +++ b/schemas/20251121/linkml/modules/slots/refers_to_custodian.yaml @@ -1,35 +1,29 @@ -# Slot: refers_to_custodian -# Links observations/reconstructions to custodian hub - id: https://nde.nl/ontology/hc/slot/refers_to_custodian name: refers_to_custodian-slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - default_prefix: hc - imports: - - linkml:types - - ../metadata - - ../classes/Custodian - +- linkml:types +- ../metadata +- ../classes/Custodian slots: refers_to_custodian: - description: | - Links an observation or reconstruction to the central Custodian hub it + description: 'Links an observation or reconstruction to the central Custodian hub it + describes. This is how multiple pieces of evidence connect to form a + complete picture of a custodian entity. + + ' slot_uri: dcterms:references range: Custodian required: true comments: - - >- - This property connects observations and reconstructions back to the - abstract Custodian hub, allowing multiple views of the same entity - to be linked together. - - >- - Range is Custodian (not uriorcurie) to create explicit relationship - in UML diagrams and enable schema validation. + - This property connects observations and reconstructions back to the abstract Custodian hub, allowing multiple views + of the same entity to be linked together. + - Range is Custodian (not uriorcurie) to create explicit relationship in UML diagrams and enable schema validation. + broad_mappings: + - schema:organization diff --git a/schemas/20251121/linkml/modules/slots/refers_to_person.yaml b/schemas/20251121/linkml/modules/slots/refers_to_person.yaml index 81bd5386b9..af7c1b30cb 100644 --- a/schemas/20251121/linkml/modules/slots/refers_to_person.yaml +++ b/schemas/20251121/linkml/modules/slots/refers_to_person.yaml @@ -1,22 +1,5 @@ -# Slot: refers_to_person -# Links PersonObservation to the central Person hub -# ============================================================================= -# Following the pattern established by refers_to_custodian, this slot connects -# PersonObservation (evidence-based data) to the Person hub (abstract identity). -# -# DESIGN RATIONALE: -# - Multiple observations from different sources can refer to the same Person -# - Enables tracking same person across multiple custodians/roles -# - Separates evidence (observation) from identity (hub) -# -# PICO ALIGNMENT: -# - PersonObservation → Person via pico:observationOf (inverse: pico:hasObservation) -# - This is the core PICO relationship linking evidence to identity -# ============================================================================= - id: https://nde.nl/ontology/hc/slot/refers_to_person name: refers_to_person-slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ @@ -24,96 +7,44 @@ prefixes: pico: https://personsincontext.org/model# crm: http://www.cidoc-crm.org/cidoc-crm/ prov: http://www.w3.org/ns/prov# - default_prefix: hc - imports: - - linkml:types - - ../metadata - - ../classes/Person - +- linkml:types +- ../metadata +- ../classes/Person slots: refers_to_person: slot_uri: pico:observationOf - description: | - Links a PersonObservation to the central Person hub it describes. - - This is how multiple pieces of evidence (observations from different sources) - connect to form a complete picture of a person's identity and career. - - **HUB-OBSERVATION RELATIONSHIP**: - - ``` - PersonObservation ───refers_to_person───> Person - (evidence from source) (abstract identity hub) - ``` - - **USAGE CONTEXT**: - - A PersonObservation captures a person's role/affiliation as documented - in a specific source at a specific point in time: - - Staff directory entry (2024) - - Annual report mention (2023) - - LinkedIn profile (current) - - Historical org chart (1995) - - All these observations can refer to the same Person hub, building up - a complete picture of the person's career across time and sources. - - **EXAMPLES**: - - ```yaml - # Observation from LinkedIn - PersonObservation: - observation_source: "LinkedIn profile scraped 2025-01-15" - person_name: "Taco Dibbits" - role_title: "General Director" - unit_affiliation: "Executive Board" - refers_to_person: "https://nde.nl/ontology/hc/person/taco-dibbits" - - # Earlier observation from annual report - PersonObservation: - observation_source: "Rijksmuseum Annual Report 2020" - person_name: "Taco Dibbits" - role_title: "Director" - unit_affiliation: "Management" - refers_to_person: "https://nde.nl/ontology/hc/person/taco-dibbits" - ``` - - **PICO ALIGNMENT**: - - Maps to pico:observationOf - - Inverse relationship: pico:hasObservation (on Person hub) - - This is the core PICO pattern for linking evidence to identity - - **CIDOC-CRM ALIGNMENT**: - - E21_Person (Person) is documented by observations - - E31_Document (source) → P70_documents → E21_Person - - **RELATIONSHIP TO refers_to_custodian**: - - | Slot | From Class | To Class | Purpose | - |------|------------|----------|---------| - | refers_to_custodian | CustodianObservation | Custodian | Link org observation to org hub | - | refers_to_person | PersonObservation | Person | Link person observation to person hub | + description: "Links a PersonObservation to the central Person hub it describes.\n\nThis is how multiple pieces of evidence\ + \ (observations from different sources)\nconnect to form a complete picture of a person's identity and career.\n\n**HUB-OBSERVATION\ + \ RELATIONSHIP**:\n\n```\nPersonObservation ───refers_to_person───> Person\n(evidence from source) \ + \ (abstract identity hub)\n```\n\n**USAGE CONTEXT**:\n\nA PersonObservation captures a person's role/affiliation as\ + \ documented\nin a specific source at a specific point in time:\n- Staff directory entry (2024)\n- Annual report mention\ + \ (2023)\n- LinkedIn profile (current)\n- Historical org chart (1995)\n\nAll these observations can refer to the same\ + \ Person hub, building up\na complete picture of the person's career across time and sources.\n\n**EXAMPLES**:\n\n```yaml\n\ + # Observation from LinkedIn\nPersonObservation:\n observation_source: \"LinkedIn profile scraped 2025-01-15\"\n person_name:\ + \ \"Taco Dibbits\"\n role_title: \"General Director\"\n unit_affiliation: \"Executive Board\"\n refers_to_person:\ + \ \"https://nde.nl/ontology/hc/person/taco-dibbits\"\n\n# Earlier observation from annual report\nPersonObservation:\n\ + \ observation_source: \"Rijksmuseum Annual Report 2020\"\n person_name: \"Taco Dibbits\"\n role_title: \"Director\"\ + \n unit_affiliation: \"Management\"\n refers_to_person: \"https://nde.nl/ontology/hc/person/taco-dibbits\"\n```\n\n\ + **PICO ALIGNMENT**:\n- Maps to pico:observationOf\n- Inverse relationship: pico:hasObservation (on Person hub)\n- This\ + \ is the core PICO pattern for linking evidence to identity\n\n**CIDOC-CRM ALIGNMENT**:\n- E21_Person (Person) is documented\ + \ by observations\n- E31_Document (source) → P70_documents → E21_Person\n\n**RELATIONSHIP TO refers_to_custodian**:\n\ + \n| Slot | From Class | To Class | Purpose |\n|------|------------|----------|---------|\n| refers_to_custodian | CustodianObservation\ + \ | Custodian | Link org observation to org hub |\n| refers_to_person | PersonObservation | Person | Link person observation\ + \ to person hub |\n" range: Person required: false comments: - - >- - This property connects PersonObservation to the abstract Person hub, - allowing multiple views of the same person (from different sources, - time periods, or institutions) to be linked together. - - >- - Range is Person (not uriorcurie) to create explicit relationship - in UML diagrams and enable schema validation. - - >- - Required is false initially to allow PersonObservation without - hub linkage, but production data should always have this link. + - This property connects PersonObservation to the abstract Person hub, allowing multiple views of the same person (from + different sources, time periods, or institutions) to be linked together. + - Range is Person (not uriorcurie) to create explicit relationship in UML diagrams and enable schema validation. + - Required is false initially to allow PersonObservation without hub linkage, but production data should always have this + link. exact_mappings: - - pico:observationOf + - pico:observationOf close_mappings: - - dcterms:references - - prov:specializationOf - # NOTE: inverse: has_person_observation removed to fix LinkML validation warning. - # The inverse relationship is conceptual but cannot be enforced in LinkML - # without explicit domain declarations on both slots. - # The bidirectional relationship is documented in description. + - dcterms:references + - prov:specializationOf + broad_mappings: + - schema:person diff --git a/schemas/20251121/linkml/modules/slots/registration_date.yaml b/schemas/20251121/linkml/modules/slots/registration_date.yaml index fcb3c549c7..1095a723e7 100644 --- a/schemas/20251121/linkml/modules/slots/registration_date.yaml +++ b/schemas/20251121/linkml/modules/slots/registration_date.yaml @@ -1,11 +1,9 @@ -# CustodianLegalStatus Slot: registration_date -# Date of legal registration - id: https://nde.nl/ontology/hc/slot/registration_date name: registration_date_slot - slots: registration_date: slot_uri: schema:foundingDate range: date - description: "Date of legal registration" + description: Date of legal registration + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/response_formats.yaml b/schemas/20251121/linkml/modules/slots/response_formats.yaml index 893ba81aba..78130813c9 100644 --- a/schemas/20251121/linkml/modules/slots/response_formats.yaml +++ b/schemas/20251121/linkml/modules/slots/response_formats.yaml @@ -1,28 +1,30 @@ -# Response Formats Slot - Shared slot for API response formats -# Used by DataServiceEndpoint and its subclasses - id: https://nde.nl/ontology/hc/slot/response_formats name: response_formats_slot title: Response Formats Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types slots: response_formats: slot_uri: dcterms:format - description: | - MIME types of response formats supported by this endpoint. - + description: 'MIME types of response formats supported by this endpoint. + + Examples: + - ["application/json"] + - ["application/xml", "text/xml"] + - ["image/jpeg", "image/png", "image/tiff"] + - ["application/ld+json", "text/turtle"] + + ' range: string multivalued: true + close_mappings: + - dcterms:format diff --git a/schemas/20251121/linkml/modules/slots/responsible_agent.yaml b/schemas/20251121/linkml/modules/slots/responsible_agent.yaml index d20cecc168..2cf1b1268b 100644 --- a/schemas/20251121/linkml/modules/slots/responsible_agent.yaml +++ b/schemas/20251121/linkml/modules/slots/responsible_agent.yaml @@ -1,14 +1,11 @@ -# ReconstructionActivity Slot: responsible_agent -# ReconstructionAgent responsible for reconstruction - id: https://nde.nl/ontology/hc/slot/responsible_agent name: responsible_agent_slot - imports: - - ../classes/ReconstructionAgent - +- ../classes/ReconstructionAgent slots: responsible_agent: slot_uri: prov:wasAssociatedWith range: ReconstructionAgent - description: "ReconstructionAgent responsible for reconstruction" + description: ReconstructionAgent responsible for reconstruction + broad_mappings: + - prov:wasAttributedTo diff --git a/schemas/20251121/linkml/modules/slots/responsible_legal_entity.yaml b/schemas/20251121/linkml/modules/slots/responsible_legal_entity.yaml index d4c5ca4a71..dd54662469 100644 --- a/schemas/20251121/linkml/modules/slots/responsible_legal_entity.yaml +++ b/schemas/20251121/linkml/modules/slots/responsible_legal_entity.yaml @@ -1,37 +1,27 @@ -# Responsible Legal Entity Slot -# Links LegalResponsibilityCollection to CustodianLegalStatus - id: https://nde.nl/ontology/hc/slot/responsible_legal_entity name: responsible_legal_entity_slot title: responsible_legal_entity Slot - prefixes: linkml: https://w3id.org/linkml/ tooi: https://identifier.overheid.nl/tooi/def/ont/ hc: https://nde.nl/ontology/hc/ - default_prefix: hc - imports: - - linkml:types - - ../metadata - - ../classes/CustodianLegalStatus - +- linkml:types +- ../metadata +- ../classes/CustodianLegalStatus slots: responsible_legal_entity: slot_uri: tooi:verantwoordelijke range: CustodianLegalStatus required: true - description: | - Custodian legal entity that bears LEGAL RESPONSIBILITY for this collection. - - **TOOI Definition**: "Overheidsorganisatie die de wettelijke verantwoordelijkheid - draagt voor de inhoud (strekking) van het informatieobject" (Organization with - legal responsibility for the content/purport of the information object) - - Maps information objects (collections) to the legal entity (organization or person) - that has formal legal accountability for their custody, preservation, and management. - + description: "Custodian legal entity that bears LEGAL RESPONSIBILITY for this collection.\n\n**TOOI Definition**: \"Overheidsorganisatie\ + \ die de wettelijke verantwoordelijkheid \ndraagt voor de inhoud (strekking) van het informatieobject\" (Organization\ + \ with \nlegal responsibility for the content/purport of the information object)\n\nMaps information objects (collections)\ + \ to the legal entity (organization or person)\nthat has formal legal accountability for their custody, preservation,\ + \ and management.\n" examples: - - value: "https://nde.nl/ontology/hc/legal/nha-organization" - description: "Noord-Hollands Archief foundation as responsible legal entity" + - value: https://nde.nl/ontology/hc/legal/nha-organization + description: Noord-Hollands Archief foundation as responsible legal entity + broad_mappings: + - prov:Entity diff --git a/schemas/20251121/linkml/modules/slots/resulting_units.yaml b/schemas/20251121/linkml/modules/slots/resulting_units.yaml index 0c83462b4a..87df2767bd 100644 --- a/schemas/20251121/linkml/modules/slots/resulting_units.yaml +++ b/schemas/20251121/linkml/modules/slots/resulting_units.yaml @@ -1,11 +1,10 @@ -# resulting_units slot for OrganizationalChangeEvent - id: https://nde.nl/ontology/hc/slot/resulting_units name: resulting_units - slots: resulting_units: - description: "New or successor organizational units created by this change" + description: New or successor organizational units created by this change range: OrganizationalStructure multivalued: true slot_uri: prov:generated + close_mappings: + - prov:generated diff --git a/schemas/20251121/linkml/modules/slots/retrieval_agent.yaml b/schemas/20251121/linkml/modules/slots/retrieval_agent.yaml index ab8e0685c5..5e8d04f0d9 100644 --- a/schemas/20251121/linkml/modules/slots/retrieval_agent.yaml +++ b/schemas/20251121/linkml/modules/slots/retrieval_agent.yaml @@ -1,23 +1,20 @@ -# Slot: retrieval_agent -# Agent/tool that retrieved or extracted data - id: https://nde.nl/ontology/hc/slot/retrieval_agent name: retrieval_agent_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# - imports: - - linkml:types - +- linkml:types default_range: string - slots: retrieval_agent: description: Agent or tool that retrieved/extracted this data slot_uri: prov:wasAssociatedWith range: string comments: - - "PersonWebClaim overrides range to RetrievalAgentEnum" + - PersonWebClaim overrides range to RetrievalAgentEnum + close_mappings: + - prov:wasAttributedTo + broad_mappings: + - prov:wasAttributedTo diff --git a/schemas/20251121/linkml/modules/slots/retrieved_on.yaml b/schemas/20251121/linkml/modules/slots/retrieved_on.yaml index 0059706073..f70f149994 100644 --- a/schemas/20251121/linkml/modules/slots/retrieved_on.yaml +++ b/schemas/20251121/linkml/modules/slots/retrieved_on.yaml @@ -1,39 +1,45 @@ -# retrieved_on slot - Timestamp when web page was retrieved/archived - id: https://nde.nl/ontology/hc/slot/retrieved_on name: retrieved_on title: Retrieved On Slot - prefixes: pav: http://purl.org/pav/ prov: http://www.w3.org/ns/prov# xsd: http://www.w3.org/2001/XMLSchema# +description: 'Timestamp when a web page was retrieved or archived. + -description: | - Timestamp when a web page was retrieved or archived. - Used for provenance tracking in: + - WebClaim: When the source page was archived for claim extraction + - WebObservation: When the web page was observed/retrieved + ' slots: retrieved_on: slot_uri: pav:retrievedOn range: datetime required: false multivalued: false - description: | - Timestamp when the web page was retrieved/archived. - + description: 'Timestamp when the web page was retrieved/archived. + + pav:retrievedOn - "The date this resource was retrieved from the source" - + + ISO 8601 format with timezone (UTC preferred). - + + Examples: + - "2025-11-29T12:28:00Z" (UTC) + - "2025-11-29T10:30:00+01:00" (with timezone offset) + ' + exact_mappings: + - prov:generatedAtTime comments: - - "Maps to pav:retrievedOn for provenance tracking" - - "Use ISO 8601 format with timezone" - - "UTC (Z suffix) is preferred for consistency" +- Maps to pav:retrievedOn for provenance tracking +- Use ISO 8601 format with timezone +- UTC (Z suffix) is preferred for consistency diff --git a/schemas/20251121/linkml/modules/slots/revision_date.yaml b/schemas/20251121/linkml/modules/slots/revision_date.yaml index 1edf64c53f..51209de23b 100644 --- a/schemas/20251121/linkml/modules/slots/revision_date.yaml +++ b/schemas/20251121/linkml/modules/slots/revision_date.yaml @@ -1,21 +1,16 @@ -# Slot: revision_date -# Date of most recent revision/update - id: https://nde.nl/ontology/hc/slot/revision_date name: revision_date_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: revision_date: description: Date of most recent revision or update slot_uri: dcterms:modified range: date + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/rico_equivalent.yaml b/schemas/20251121/linkml/modules/slots/rico_equivalent.yaml index 5b72344e84..28ffc10373 100644 --- a/schemas/20251121/linkml/modules/slots/rico_equivalent.yaml +++ b/schemas/20251121/linkml/modules/slots/rico_equivalent.yaml @@ -1,37 +1,30 @@ -# Global Slot: rico_equivalent -# Link to equivalent RiC-O (Records in Contexts) ontology term -# -# This slot enables interoperability with the ICA's Records in Contexts -# ontology standard for archival description. -# -# Generation date: 2025-12-09 - id: https://nde.nl/ontology/hc/slot/rico_equivalent name: rico_equivalent_slot title: RiC-O Equivalent Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ skos: http://www.w3.org/2004/02/skos/core# rico: https://www.ica.org/standards/RiC/ontology# - default_prefix: hc - imports: - - linkml:types - +- linkml:types slots: rico_equivalent: - description: | - Equivalent term in RiC-O (Records in Contexts Ontology). - + description: 'Equivalent term in RiC-O (Records in Contexts Ontology). + + Links this class to the corresponding RiC-O class or property, + enabling interoperability with archival description standards. + + ' range: uriorcurie slot_uri: skos:closeMatch examples: - - value: "rico:RecordSet" - description: "RiC-O RecordSet class" - - value: "rico:FindingAid" - description: "RiC-O FindingAid class" + - value: rico:RecordSet + description: RiC-O RecordSet class + - value: rico:FindingAid + description: RiC-O FindingAid class + exact_mappings: + - skos:exactMatch diff --git a/schemas/20251121/linkml/modules/slots/rico_record_set_type.yaml b/schemas/20251121/linkml/modules/slots/rico_record_set_type.yaml new file mode 100644 index 0000000000..005c1a8d1d --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/rico_record_set_type.yaml @@ -0,0 +1,35 @@ +id: https://nde.nl/ontology/hc/slot/rico_record_set_type +name: rico_record_set_type +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + rico_record_set_type: + slot_uri: rico:hasRecordSetType + description: 'Direct mapping to RiC-O RecordSetType vocabulary. + + + Standard RiC-O record set types: + + - rico:Fonds - Archival fonds (provenance-based) + + - rico:Series - Archival series + + - rico:File - Archival file + + - rico:Collection - Assembled collection (not provenance-based) + + + Use for RDF interoperability with archival systems. + + ' + range: string + required: false + examples: + - value: rico:Fonds + description: Archival fonds + - value: rico:Series + description: Archival series + broad_mappings: + - dcterms:type diff --git a/schemas/20251121/linkml/modules/slots/role_end_date.yaml b/schemas/20251121/linkml/modules/slots/role_end_date.yaml index a23ef0b194..39aca515b2 100644 --- a/schemas/20251121/linkml/modules/slots/role_end_date.yaml +++ b/schemas/20251121/linkml/modules/slots/role_end_date.yaml @@ -1,12 +1,12 @@ id: https://nde.nl/ontology/hc/slot/role_end_date name: role_end_date title: Role End Date - imports: - - linkml:types - +- linkml:types slots: role_end_date: slot_uri: schema:endDate description: Date when person ended service in this role (or null if still employed) range: date + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/role_start_date.yaml b/schemas/20251121/linkml/modules/slots/role_start_date.yaml index 440dd37a2c..3662b9f781 100644 --- a/schemas/20251121/linkml/modules/slots/role_start_date.yaml +++ b/schemas/20251121/linkml/modules/slots/role_start_date.yaml @@ -1,12 +1,12 @@ id: https://nde.nl/ontology/hc/slot/role_start_date name: role_start_date title: Role Start Date - imports: - - linkml:types - +- linkml:types slots: role_start_date: slot_uri: schema:startDate description: Date when person began serving in this role range: date + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/role_title.yaml b/schemas/20251121/linkml/modules/slots/role_title.yaml index e662b437fa..66d6f328e4 100644 --- a/schemas/20251121/linkml/modules/slots/role_title.yaml +++ b/schemas/20251121/linkml/modules/slots/role_title.yaml @@ -1,12 +1,14 @@ id: https://nde.nl/ontology/hc/slot/role_title name: role_title title: Role Title - imports: - - linkml:types - +- linkml:types slots: role_title: slot_uri: schema:jobTitle description: Official job title as used by the institution range: string + exact_mappings: + - schema:roleName + close_mappings: + - org:role diff --git a/schemas/20251121/linkml/modules/slots/safeguarded_by.yaml b/schemas/20251121/linkml/modules/slots/safeguarded_by.yaml index 0b0aee63d5..e9d743ef36 100644 --- a/schemas/20251121/linkml/modules/slots/safeguarded_by.yaml +++ b/schemas/20251121/linkml/modules/slots/safeguarded_by.yaml @@ -1,58 +1,66 @@ -# IntangibleHeritageForm Slot: safeguarded_by -# Links IntangibleHeritageForm to Custodian (heritage keeper) -# Inverse of safeguards (crm:P109_has_current_or_former_curator) - id: https://nde.nl/ontology/hc/slot/safeguarded_by name: safeguarded_by_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ crm: http://www.cidoc-crm.org/cidoc-crm/ owl: http://www.w3.org/2002/07/owl# ich: https://ich.unesco.org/ - imports: - - linkml:types - +- linkml:types slots: safeguarded_by: slot_uri: crm:P109i_is_current_or_former_curator_of - description: | - Heritage custodian organizations that safeguard this intangible heritage form. - + description: 'Heritage custodian organizations that safeguard this intangible heritage form. + + **CIDOC-CRM Alignment**: - + + Property: `crm:P109i_is_current_or_former_curator_of` + - Domain: E39_Actor (Custodian) + - Range: E78_Curated_Holding (conceptually: heritage being safeguarded) + - Definition: Inverse of P109_has_current_or_former_curator - + + We use this to link IntangibleHeritageForm → Custodian - + + **INVERSE PROPERTY**: + - **Inverse**: `safeguards` (crm:P109_has_current_or_former_curator) + - Pattern: If HeritageForm safeguarded_by Custodian, then Custodian safeguards HeritageForm - + + **Usage**: - + + - Links IntangibleHeritageForm to the Custodian entities that preserve it + - Custodians with `institution_type = I` (Intangible Heritage Group) are typical safeguarders - + + **Examples**: + - Pride Amsterdam is safeguarded_by Stichting Amsterdam Gay Pride + - Traditional Dutch baking is safeguarded_by Bakkerij van Maanen + + ' range: Custodian multivalued: true inlined: false - exact_mappings: - - crm:P109i_is_current_or_former_curator_of - + - crm:P109i_is_current_or_former_curator_of related_mappings: - - schema:maintainer - + - schema:maintainer comments: - - "Inverse of safeguards (crm:P109_has_current_or_former_curator)" - - "Creates owl:inverseOf axiom in RDF output" - - "Enables navigation from IntangibleHeritageForm to preserving custodians" + - Inverse of safeguards (crm:P109_has_current_or_former_curator) + - Creates owl:inverseOf axiom in RDF output + - Enables navigation from IntangibleHeritageForm to preserving custodians + broad_mappings: + - prov:wasAttributedTo diff --git a/schemas/20251121/linkml/modules/slots/security_level.yaml b/schemas/20251121/linkml/modules/slots/security_level.yaml index 5559254f43..03371b9f17 100644 --- a/schemas/20251121/linkml/modules/slots/security_level.yaml +++ b/schemas/20251121/linkml/modules/slots/security_level.yaml @@ -1,36 +1,33 @@ -# Global Slot: security_level -# Security classification for storage and access control -# -# Used across storage-related classes to indicate security requirements. -# -# Generation date: 2025-12-09 - id: https://nde.nl/ontology/hc/slot/security_level name: security_level_slot title: Security Level Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - imports: - - linkml:types - +- linkml:types slots: security_level: - description: | - Security level classification for storage facilities. - + description: 'Security level classification for storage facilities. + + Common values: + - STANDARD - Basic security measures + - ENHANCED - Additional access controls + - HIGH - Restricted access, specialized security + - MAXIMUM - Highest security, vault-level protection + + ' range: string slot_uri: schema:securityClearance examples: - - value: "HIGH" - description: "High-security storage for valuable items" + - value: HIGH + description: High-security storage for valuable items + related_mappings: + - dcterms:accessRights diff --git a/schemas/20251121/linkml/modules/slots/served_by.yaml b/schemas/20251121/linkml/modules/slots/served_by.yaml index ea60264c64..093927e742 100644 --- a/schemas/20251121/linkml/modules/slots/served_by.yaml +++ b/schemas/20251121/linkml/modules/slots/served_by.yaml @@ -1,21 +1,16 @@ -# Slot: served_by -# Provider/server of a resource or service - id: https://nde.nl/ontology/hc/slot/served_by name: served_by_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: served_by: description: Provider entity that serves or hosts this resource slot_uri: schema:provider range: uriorcurie + broad_mappings: + - prov:wasAttributedTo diff --git a/schemas/20251121/linkml/modules/slots/serves_finding_aids.yaml b/schemas/20251121/linkml/modules/slots/serves_finding_aids.yaml index ad38eb62e2..532986753f 100644 --- a/schemas/20251121/linkml/modules/slots/serves_finding_aids.yaml +++ b/schemas/20251121/linkml/modules/slots/serves_finding_aids.yaml @@ -1,49 +1,31 @@ -# Global Slot: serves_finding_aids -# Inverse of FindingAid.served_by - platforms that host/serve finding aids -# Created: 2025-12-09 - id: https://nde.nl/ontology/hc/slot/serves_finding_aids name: serves_finding_aids_slot - imports: - - linkml:types - +- linkml:types prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ rico: https://www.ica.org/standards/RiC/ontology# schema: http://schema.org/ - slots: serves_finding_aids: slot_uri: rico:isOrWasProviderOf range: uriorcurie multivalued: true inlined_as_list: true - description: | - Finding aids hosted/served by this digital platform. - - **INVERSE RELATIONSHIP**: - - Forward: FindingAid.served_by → DigitalPlatform/WebPortal (finding aid is served by platform) - - Inverse: DigitalPlatform.serves_finding_aids → FindingAid[] (platform serves finding aids) - - **RiC-O ALIGNMENT**: - `rico:isOrWasProviderOf` - The agent (platform) provides the finding aid. - - **USE CASES**: - 1. "What finding aids are available on this platform?" → Follow serves_finding_aids - 2. "Which platforms host EAD finding aids?" → Query platforms with EAD-format finding aids - 3. Platform inventory: Map all finding aids served by each digital infrastructure - - **EXAMPLES**: - - Archieven.nl serves 1000+ EAD finding aids - - Archives Portal Europe serves finding aids from 30+ European countries - - National Archives website serves collection guides and inventories - - **NOTE**: References FindingAid instances by URI. For full objects, - dereference or query the FindingAid directly. + description: "Finding aids hosted/served by this digital platform.\n\n**INVERSE RELATIONSHIP**:\n- Forward: FindingAid.served_by\ + \ → DigitalPlatform/WebPortal (finding aid is served by platform)\n- Inverse: DigitalPlatform.serves_finding_aids →\ + \ FindingAid[] (platform serves finding aids)\n\n**RiC-O ALIGNMENT**:\n`rico:isOrWasProviderOf` - The agent (platform)\ + \ provides the finding aid.\n\n**USE CASES**:\n1. \"What finding aids are available on this platform?\" → Follow serves_finding_aids\n\ + 2. \"Which platforms host EAD finding aids?\" → Query platforms with EAD-format finding aids\n3. Platform inventory:\ + \ Map all finding aids served by each digital infrastructure\n\n**EXAMPLES**:\n- Archieven.nl serves 1000+ EAD finding\ + \ aids\n- Archives Portal Europe serves finding aids from 30+ European countries\n- National Archives website serves\ + \ collection guides and inventories\n\n**NOTE**: References FindingAid instances by URI. For full objects, \ndereference\ + \ or query the FindingAid directly.\n" examples: - - value: "https://nde.nl/ontology/hc/finding-aid/na/voc-inventory" - description: "VOC Archives inventory finding aid" - - value: "https://nde.nl/ontology/hc/finding-aid/gelders-archief/ead-001" - description: "Gelders Archief EAD finding aid" + - value: https://nde.nl/ontology/hc/finding-aid/na/voc-inventory + description: VOC Archives inventory finding aid + - value: https://nde.nl/ontology/hc/finding-aid/gelders-archief/ead-001 + description: Gelders Archief EAD finding aid + close_mappings: + - schema:availableService diff --git a/schemas/20251121/linkml/modules/slots/service_area.yaml b/schemas/20251121/linkml/modules/slots/service_area.yaml index d1219afdef..35a3c868f2 100644 --- a/schemas/20251121/linkml/modules/slots/service_area.yaml +++ b/schemas/20251121/linkml/modules/slots/service_area.yaml @@ -1,69 +1,34 @@ -# Service Area slot - Links a heritage custodian to its geographic service area -# Based on Schema.org areaServed property - id: https://nde.nl/ontology/hc/slot/service_area name: service_area_slot title: Service Area Slot - prefixes: schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types slots: service_area: slot_uri: schema:areaServed - description: | - Geographic area(s) served by this heritage custodian. - - **Schema.org Alignment**: - `schema:areaServed` - "The geographic area where a service or offered item is provided" - - **Dutch Term**: "Werkgebied" - the operational territory where the custodian - provides services, collects materials, or has jurisdiction. - - **Use Cases**: - - 1. **Archives (Werkgebied)**: - - Provincial archive: Covers entire province - - Regional archive: Covers specific municipalities - - Municipal archive: Covers single city - - 2. **Libraries (Service District)**: - - Public library: Defined lending district - - Academic library: May have national scope - - 3. **Museums (Collection Scope)**: - - Regional museum: Collects from specific area - - National museum: Country-wide collection mandate - - **Multiple Service Areas**: - - A custodian may have multiple service areas: - - Current service area (is_historical_boundary = false) - - Historical service areas (is_historical_boundary = true) - - Different service areas for different functions - - **Example - Noord-Hollands Archief**: - - ```yaml - service_area: - - service_area_name: "NHA Provincial Coverage" - service_area_type: PROVINCIAL - covers_subregions: - - iso_3166_2_code: "NL-NH" - - service_area_name: "NHA Municipal Records (Haarlem)" - service_area_type: MUNICIPAL - covers_settlements: - - geonames_id: 2755003 - ``` + description: "Geographic area(s) served by this heritage custodian.\n\n**Schema.org Alignment**:\n`schema:areaServed`\ + \ - \"The geographic area where a service or offered item is provided\"\n\n**Dutch Term**: \"Werkgebied\" - the operational\ + \ territory where the custodian\nprovides services, collects materials, or has jurisdiction.\n\n**Use Cases**:\n\n1.\ + \ **Archives (Werkgebied)**:\n - Provincial archive: Covers entire province\n - Regional archive: Covers specific\ + \ municipalities\n - Municipal archive: Covers single city\n\n2. **Libraries (Service District)**:\n - Public library:\ + \ Defined lending district\n - Academic library: May have national scope\n\n3. **Museums (Collection Scope)**:\n \ + \ - Regional museum: Collects from specific area\n - National museum: Country-wide collection mandate\n\n**Multiple\ + \ Service Areas**:\n\nA custodian may have multiple service areas:\n- Current service area (is_historical_boundary =\ + \ false)\n- Historical service areas (is_historical_boundary = true)\n- Different service areas for different functions\n\ + \n**Example - Noord-Hollands Archief**:\n\n```yaml\nservice_area:\n - service_area_name: \"NHA Provincial Coverage\"\ + \n service_area_type: PROVINCIAL\n covers_subregions:\n - iso_3166_2_code: \"NL-NH\"\n - service_area_name:\ + \ \"NHA Municipal Records (Haarlem)\"\n service_area_type: MUNICIPAL\n covers_settlements:\n - geonames_id:\ + \ 2755003\n```\n" range: ServiceArea multivalued: true inlined_as_list: true examples: - - value: - service_area_id: "https://nde.nl/ontology/hc/servicearea/nha-werkgebied" - service_area_name: "Noord-Hollands Archief Werkgebied" - service_area_type: "REGIONAL" - description: "Archive service area covering multiple municipalities" + - value: + service_area_id: https://nde.nl/ontology/hc/servicearea/nha-werkgebied + service_area_name: Noord-Hollands Archief Werkgebied + service_area_type: REGIONAL + description: Archive service area covering multiple municipalities + broad_mappings: + - dcterms:subject diff --git a/schemas/20251121/linkml/modules/slots/settlement.yaml b/schemas/20251121/linkml/modules/slots/settlement.yaml index dfc0a7f3ff..2b21ed3937 100644 --- a/schemas/20251121/linkml/modules/slots/settlement.yaml +++ b/schemas/20251121/linkml/modules/slots/settlement.yaml @@ -1,43 +1,57 @@ -# settlement slot - GeoNames-based city/town reference - id: https://nde.nl/ontology/hc/slot/settlement name: settlement title: Settlement Slot +description: 'City, town, or municipality where place is located. + -description: | - City, town, or municipality where place is located. - Links to Settlement class with GeoNames numeric identifiers. - + + GeoNames ID format: Numeric (e.g., 5206379 for Pittsburgh, 2759794 for Amsterdam) - + + Use when: + - Place is in a specific city (e.g., "Amsterdam museum" → settlement.geonames_id = 2759794) + - Feature types are city-specific (e.g., "City of Pittsburgh historic designation") + - Precision beyond country/subregion is needed - + + Examples: + - "Amsterdam museum" → settlement.geonames_id = 2759794, settlement_name = "Amsterdam" + - "Pittsburgh designation" → settlement.geonames_id = 5206379, settlement_name = "Pittsburgh" + - "Rio museum" → settlement.geonames_id = 3451190, settlement_name = "Rio de Janeiro" - + + Benefits of GeoNames IDs: + - Resolves ambiguity (41 "Springfield"s in USA have different GeoNames IDs) + - Stable identifier (persists even if city name or boundaries change) + - Links to coordinates, population, timezone via GeoNames API + ' slots: settlement: slot_uri: schema:location range: Settlement required: false multivalued: false - description: | - City, town, or municipality where place is located. + description: 'City, town, or municipality where place is located. + Links to Settlement class with GeoNames numeric identifiers. + ' + close_mappings: + - schema:addressLocality comments: - - "Optional - only use when specific city/town is known" - - "Must be consistent with country and subregion (settlement must be within both)" - - "Prefer GeoNames ID over settlement name for disambiguation" - - "GeoNames lookup: https://www.geonames.org/{geonames_id}/" +- Optional - only use when specific city/town is known +- Must be consistent with country and subregion (settlement must be within both) +- Prefer GeoNames ID over settlement name for disambiguation +- 'GeoNames lookup: https://www.geonames.org/{geonames_id}/' diff --git a/schemas/20251121/linkml/modules/slots/source.yaml b/schemas/20251121/linkml/modules/slots/source.yaml index aac08bba5d..9d19a6c3af 100644 --- a/schemas/20251121/linkml/modules/slots/source.yaml +++ b/schemas/20251121/linkml/modules/slots/source.yaml @@ -1,12 +1,11 @@ -# CustodianObservation Slot: source -# Source document where observation was recorded - id: https://nde.nl/ontology/hc/slot/source name: source_slot - slots: source: slot_uri: prov:hadPrimarySource range: uriorcurie - description: "Source document where this observation was recorded" + description: Source document where this observation was recorded required: true + exact_mappings: + - dcterms:source + - prov:wasDerivedFrom diff --git a/schemas/20251121/linkml/modules/slots/source_creator.yaml b/schemas/20251121/linkml/modules/slots/source_creator.yaml index 222f7c5f84..33ee1496be 100644 --- a/schemas/20251121/linkml/modules/slots/source_creator.yaml +++ b/schemas/20251121/linkml/modules/slots/source_creator.yaml @@ -1,11 +1,9 @@ -# SourceDocument Slot: source_creator -# Creator/publisher of source document - id: https://nde.nl/ontology/hc/slot/source_creator name: source_creator_slot - slots: source_creator: slot_uri: dcterms:creator range: string - description: "Creator/publisher of source document" + description: Creator/publisher of source document + exact_mappings: + - dcterms:creator diff --git a/schemas/20251121/linkml/modules/slots/source_date.yaml b/schemas/20251121/linkml/modules/slots/source_date.yaml index 515effaedf..9e3bf40841 100644 --- a/schemas/20251121/linkml/modules/slots/source_date.yaml +++ b/schemas/20251121/linkml/modules/slots/source_date.yaml @@ -1,11 +1,9 @@ -# SourceDocument Slot: source_date -# Date source document was created - id: https://nde.nl/ontology/hc/slot/source_date name: source_date_slot - slots: source_date: slot_uri: dcterms:created range: date - description: "Date source document was created" + description: Date source document was created + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/source_type.yaml b/schemas/20251121/linkml/modules/slots/source_type.yaml index d674aae7c5..a627a21675 100644 --- a/schemas/20251121/linkml/modules/slots/source_type.yaml +++ b/schemas/20251121/linkml/modules/slots/source_type.yaml @@ -1,14 +1,13 @@ -# SourceDocument Slot: source_type -# Type of source document - id: https://nde.nl/ontology/hc/slot/source_type name: source_type_slot - imports: - - ../enums/SourceDocumentTypeEnum - +- ../enums/SourceDocumentTypeEnum slots: source_type: slot_uri: crm:P2_has_type range: SourceDocumentTypeEnum - description: "Type of source document" + description: Type of source document + related_mappings: + - dcterms:type + broad_mappings: + - dcterms:type diff --git a/schemas/20251121/linkml/modules/slots/source_uri.yaml b/schemas/20251121/linkml/modules/slots/source_uri.yaml index f2d6ec856a..da59c252ca 100644 --- a/schemas/20251121/linkml/modules/slots/source_uri.yaml +++ b/schemas/20251121/linkml/modules/slots/source_uri.yaml @@ -1,11 +1,9 @@ -# SourceDocument Slot: source_uri -# URI or URL of source document - id: https://nde.nl/ontology/hc/slot/source_uri name: source_uri_slot - slots: source_uri: slot_uri: dcterms:identifier range: uriorcurie - description: "URI or URL of source document" + description: URI or URL of source document + exact_mappings: + - dcterms:source diff --git a/schemas/20251121/linkml/modules/slots/source_url.yaml b/schemas/20251121/linkml/modules/slots/source_url.yaml index 72e4ec5372..3410f85238 100644 --- a/schemas/20251121/linkml/modules/slots/source_url.yaml +++ b/schemas/20251121/linkml/modules/slots/source_url.yaml @@ -1,42 +1,54 @@ -# source_url slot - URL of source web page for provenance tracking - id: https://nde.nl/ontology/hc/slot/source_url name: source_url title: Source URL Slot - prefixes: pav: http://purl.org/pav/ schema: http://schema.org/ prov: http://www.w3.org/ns/prov# +description: 'URL of the web page from which data was retrieved or extracted. + -description: | - URL of the web page from which data was retrieved or extracted. - Used for provenance tracking in: + - WebClaim: Source page for extracted claims + - WebObservation: Source page for web observations + - FundingOpportunity: Source page for funding information + ' slots: source_url: slot_uri: pav:retrievedFrom range: uri required: false multivalued: false - description: | - URL of the web page this data was retrieved from. - + description: 'URL of the web page this data was retrieved from. + + pav:retrievedFrom - "The URI from which the resource was retrieved." - + + This is a key provenance field that enables verification of extracted data + by linking back to the original source web page. - + + Examples: + - https://historischeverenigingnijeveen.nl/ (institution homepage) + - https://ec.europa.eu/info/funding-tenders/... (EU funding portal) + - https://www.heritagefund.org.uk/funding/... (UK heritage fund) + ' + exact_mappings: + - schema:url + - dcterms:source + broad_mappings: + - schema:url comments: - - "Maps to pav:retrievedFrom for provenance tracking" - - "Essential for web claim verification workflows" - - "Should be the exact URL that was accessed, not normalized" +- Maps to pav:retrievedFrom for provenance tracking +- Essential for web claim verification workflows +- Should be the exact URL that was accessed, not normalized diff --git a/schemas/20251121/linkml/modules/slots/sparql_endpoint.yaml b/schemas/20251121/linkml/modules/slots/sparql_endpoint.yaml index 7087b50aa9..696feac0b4 100644 --- a/schemas/20251121/linkml/modules/slots/sparql_endpoint.yaml +++ b/schemas/20251121/linkml/modules/slots/sparql_endpoint.yaml @@ -1,20 +1,18 @@ -# Global Slot: sparql_endpoint -# SPARQL endpoint URL for linked data queries - id: https://nde.nl/ontology/hc/slot/sparql_endpoint name: sparql_endpoint_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ void: http://rdfs.org/ns/void# - default_prefix: hc - slots: sparql_endpoint: slot_uri: void:sparqlEndpoint range: uri - description: | - SPARQL endpoint URL for querying linked data. + description: 'SPARQL endpoint URL for querying linked data. + Uses VOID vocabulary for dataset endpoints. + + ' + broad_mappings: + - dcat:endpointURL diff --git a/schemas/20251121/linkml/modules/slots/staff_count.yaml b/schemas/20251121/linkml/modules/slots/staff_count.yaml index 96ea265b6d..75ca47eedc 100644 --- a/schemas/20251121/linkml/modules/slots/staff_count.yaml +++ b/schemas/20251121/linkml/modules/slots/staff_count.yaml @@ -1,11 +1,13 @@ -# OrganizationalStructure Slot: staff_count id: https://nde.nl/ontology/hc/slot/staff_count name: staff_count_slot - slots: staff_count: slot_uri: schema:numberOfEmployees range: integer description: Number of staff (FTE) in this unit (approximate) exact_mappings: - - org:numberOfEmployees + - org:numberOfEmployees + close_mappings: + - schema:numberOfEmployees + broad_mappings: + - schema:numberOfItems diff --git a/schemas/20251121/linkml/modules/slots/staff_members.yaml b/schemas/20251121/linkml/modules/slots/staff_members.yaml index 671fe7afdb..5683de653e 100644 --- a/schemas/20251121/linkml/modules/slots/staff_members.yaml +++ b/schemas/20251121/linkml/modules/slots/staff_members.yaml @@ -1,13 +1,15 @@ id: https://nde.nl/ontology/hc/slot/staff_members name: staff_members title: Staff Members - imports: - - linkml:types - +- linkml:types slots: staff_members: slot_uri: org:hasMember description: Staff members (PersonObservation instances) affiliated with this organizational unit range: PersonObservation multivalued: true + close_mappings: + - schema:employee + related_mappings: + - org:hasMember diff --git a/schemas/20251121/linkml/modules/slots/staff_role.yaml b/schemas/20251121/linkml/modules/slots/staff_role.yaml index 32685d2038..c4069a67de 100644 --- a/schemas/20251121/linkml/modules/slots/staff_role.yaml +++ b/schemas/20251121/linkml/modules/slots/staff_role.yaml @@ -1,30 +1,42 @@ id: https://nde.nl/ontology/hc/slot/staff_role name: staff_role title: Staff Role - imports: - - linkml:types - - ../classes/StaffRole - +- linkml:types +- ../classes/StaffRole slots: staff_role: slot_uri: schema:roleName - description: | - Primary staff role from controlled class hierarchy. - + description: 'Primary staff role from controlled class hierarchy. + + **Schema.org**: `schema:roleName` for organizational role - + + **Range**: StaffRole class hierarchy (51 specialized subclasses) - + + **Purpose**: Enable role-based queries ("Find all conservators") - + + **IMPORTANT - FORMAL TITLE vs DE FACTO WORK**: + This slot captures the OFFICIAL job appellation/title assigned by the institution. + Actual de facto work may differ from or stretch beyond this formal classification. - + + **Classes replace enum**: Per Single Source of Truth principle, the StaffRoleTypeEnum + was converted to a class hierarchy (StaffRole.yaml, StaffRoles.yaml) to enable + richer modeling with properties like role_category, common_variants, typical_domains. - + + See: modules/classes/StaffRole.yaml, modules/classes/StaffRoles.yaml + + ' range: StaffRole + exact_mappings: + - org:role + - schema:roleName diff --git a/schemas/20251121/linkml/modules/slots/standardized_name.yaml b/schemas/20251121/linkml/modules/slots/standardized_name.yaml index 63040f83e7..6875c3a8c7 100644 --- a/schemas/20251121/linkml/modules/slots/standardized_name.yaml +++ b/schemas/20251121/linkml/modules/slots/standardized_name.yaml @@ -1,12 +1,10 @@ -# CustodianName Slot: standardized_name -# Canonical emic name accepted by custodian - id: https://nde.nl/ontology/hc/slot/standardized_name name: standardized_name_slot - slots: standardized_name: slot_uri: skos:prefLabel range: string - description: "The canonical emic name accepted by the custodian itself" + description: The canonical emic name accepted by the custodian itself required: true + broad_mappings: + - rdfs:label diff --git a/schemas/20251121/linkml/modules/slots/start_date.yaml b/schemas/20251121/linkml/modules/slots/start_date.yaml index dcc3e90221..e137512efa 100644 --- a/schemas/20251121/linkml/modules/slots/start_date.yaml +++ b/schemas/20251121/linkml/modules/slots/start_date.yaml @@ -1,26 +1,32 @@ -# Slot: start_date -# Start date for time-bounded entities (exhibitions, projects, events) - id: https://nde.nl/ontology/hc/slot/start_date name: start_date_slot title: Start Date Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - slots: start_date: slot_uri: schema:startDate range: date - description: | - Start date of a time-bounded entity. + description: 'Start date of a time-bounded entity. + Used for exhibitions, projects, events, and other temporal entities. - + + Examples: + - Exhibition opening date + - Project start date + - Event beginning + + ' + exact_mappings: + - schema:startDate + close_mappings: + - prov:startedAtTime + broad_mappings: + - dcterms:date diff --git a/schemas/20251121/linkml/modules/slots/started_at_time.yaml b/schemas/20251121/linkml/modules/slots/started_at_time.yaml index efc39d6859..d5870e59a1 100644 --- a/schemas/20251121/linkml/modules/slots/started_at_time.yaml +++ b/schemas/20251121/linkml/modules/slots/started_at_time.yaml @@ -1,11 +1,9 @@ -# ReconstructionActivity Slot: started_at_time -# Start time of activity - id: https://nde.nl/ontology/hc/slot/started_at_time name: started_at_time_slot - slots: started_at_time: slot_uri: prov:startedAtTime range: datetime - description: "Start time of reconstruction activity" + description: Start time of reconstruction activity + broad_mappings: + - prov:atTime diff --git a/schemas/20251121/linkml/modules/slots/status.yaml b/schemas/20251121/linkml/modules/slots/status.yaml index 308204b574..038746a021 100644 --- a/schemas/20251121/linkml/modules/slots/status.yaml +++ b/schemas/20251121/linkml/modules/slots/status.yaml @@ -1,22 +1,20 @@ -# Slot: status -# Current status of an entity or activity - id: https://nde.nl/ontology/hc/slot/status name: status_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: status: - description: | - Current status of an entity, activity, or process. + description: 'Current status of an entity, activity, or process. + + ' slot_uri: schema:status range: string + exact_mappings: + - schema:status + close_mappings: + - adms:status diff --git a/schemas/20251121/linkml/modules/slots/storage_location.yaml b/schemas/20251121/linkml/modules/slots/storage_location.yaml index d22e89ed52..54b08d3c20 100644 --- a/schemas/20251121/linkml/modules/slots/storage_location.yaml +++ b/schemas/20251121/linkml/modules/slots/storage_location.yaml @@ -1,24 +1,22 @@ -# Global Slot: storage_location -# Physical or logical location where materials are stored - id: https://nde.nl/ontology/hc/slot/storage_location name: storage_location_slot title: Storage Location Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ premis: http://www.loc.gov/premis/rdf/v3/ - imports: - - linkml:types - +- linkml:types slots: storage_location: slot_uri: premis:storedAt - description: | - Physical or logical location where materials are stored. + description: 'Physical or logical location where materials are stored. + Range varies by context - can be AuxiliaryPlace, Storage, or string. + + ' range: uriorcurie exact_mappings: - - premis:storedAt + - premis:storedAt + broad_mappings: + - schema:location diff --git a/schemas/20251121/linkml/modules/slots/street_address.yaml b/schemas/20251121/linkml/modules/slots/street_address.yaml index c2826a5257..5b98ffeb5e 100644 --- a/schemas/20251121/linkml/modules/slots/street_address.yaml +++ b/schemas/20251121/linkml/modules/slots/street_address.yaml @@ -1,37 +1,40 @@ -# street_address slot - Physical street address -# Used by: AuxiliaryPlace, other location-related classes - id: https://nde.nl/ontology/hc/slot/street_address name: street_address_slot title: Street Address Slot +description: 'Physical street address for a location. + -description: | - Physical street address for a location. - Format: Street name and number as used locally. - + + Examples: + - "Museumstraat 1" (Amsterdam) + - "1600 Pennsylvania Avenue NW" (Washington DC) + - "221B Baker Street" (London) + ' prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ locn: http://www.w3.org/ns/locn# - slots: street_address: slot_uri: schema:streetAddress range: string required: false - description: | - Physical street address including street name and number. - exact_mappings: - - locn:thoroughfare - - vcard:street-address + description: 'Physical street address including street name and number. + ' + exact_mappings: + - locn:thoroughfare + - vcard:street-address + - schema:streetAddress + broad_mappings: + - schema:address comments: - - "Use local address format conventions" - - "Include building/unit numbers if relevant" +- Use local address format conventions +- Include building/unit numbers if relevant diff --git a/schemas/20251121/linkml/modules/slots/sub_collections.yaml b/schemas/20251121/linkml/modules/slots/sub_collections.yaml new file mode 100644 index 0000000000..0d3dab79f5 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/sub_collections.yaml @@ -0,0 +1,26 @@ +id: https://nde.nl/ontology/hc/slot/sub_collections +name: sub_collections +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + rico: https://www.ica.org/standards/RiC/ontology# +slots: + sub_collections: + slot_uri: rico:hasOrHadPart + description: 'Child collections in hierarchical arrangement. + + + RiC-O: hasOrHadPart for part-whole relationships. + + + Links a collection to its constituent sub-collections or series. + + ' + range: Collection + multivalued: true + required: false + examples: + - value: https://nde.nl/ontology/hc/collection/voc-batavia-series + description: VOC Batavia correspondence series + exact_mappings: + - dcterms:hasPart diff --git a/schemas/20251121/linkml/modules/slots/subject_areas.yaml b/schemas/20251121/linkml/modules/slots/subject_areas.yaml new file mode 100644 index 0000000000..e459d59ac1 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/subject_areas.yaml @@ -0,0 +1,25 @@ +id: https://nde.nl/ontology/hc/slot/subject_areas +name: subject_areas +prefixes: + linkml: https://w3id.org/linkml/ + hc: https://nde.nl/ontology/hc/ + dcterms: http://purl.org/dc/terms/ +slots: + subject_areas: + slot_uri: dcterms:subject + description: 'Thematic subjects covered by the collection. + + + Use controlled vocabularies where available (e.g., AAT, LCSH). + + ' + range: string + multivalued: true + required: false + examples: + - value: Maritime trade + description: Trade-related subject + - value: Colonial administration + description: Administrative subject + broad_mappings: + - dcterms:subject diff --git a/schemas/20251121/linkml/modules/slots/subregion.yaml b/schemas/20251121/linkml/modules/slots/subregion.yaml index d8c7145e28..e07f7ffd2f 100644 --- a/schemas/20251121/linkml/modules/slots/subregion.yaml +++ b/schemas/20251121/linkml/modules/slots/subregion.yaml @@ -1,37 +1,47 @@ -# subregion slot - ISO 3166-2 subdivision reference - id: https://nde.nl/ontology/hc/slot/subregion name: subregion title: Subregion Slot +description: 'Geographic subdivision within a country (state, province, region, etc.). + -description: | - Geographic subdivision within a country (state, province, region, etc.). - Links to Subregion class with ISO 3166-2 subdivision codes. - + + Format: {country_alpha2}-{subdivision_code} (e.g., "US-PA", "ID-BA", "DE-BY") - + + Use when: + - Place is located in a specific subdivision (e.g., "Pittsburgh museum" → US-PA) + - Feature types are region-specific (e.g., "sacred shrine (Bali)" → ID-BA) + - Generating subdivision-conditional enums - + + Examples: + - "Pittsburgh museum" → subregion.iso_3166_2_code = "US-PA" (Pennsylvania) + - "Bali sacred shrine" → subregion.iso_3166_2_code = "ID-BA" (Bali) + - "Bavaria natural monument" → subregion.iso_3166_2_code = "DE-BY" (Bayern) + ' slots: subregion: slot_uri: schema:addressRegion range: Subregion required: false multivalued: false - description: | - Geographic subdivision within a country (state, province, region, etc.). + description: 'Geographic subdivision within a country (state, province, region, etc.). + Links to Subregion class with ISO 3166-2 subdivision codes. + ' + close_mappings: + - schema:addressRegion comments: - - "Optional - only use when subdivision is known" - - "Must be consistent with country slot (subregion must be within country)" - - "ISO 3166-2 code format ensures unambiguous subdivision identification" +- Optional - only use when subdivision is known +- Must be consistent with country slot (subregion must be within country) +- ISO 3166-2 code format ensures unambiguous subdivision identification diff --git a/schemas/20251121/linkml/modules/slots/superseded_by.yaml b/schemas/20251121/linkml/modules/slots/superseded_by.yaml index 62553b7184..45ca8998d0 100644 --- a/schemas/20251121/linkml/modules/slots/superseded_by.yaml +++ b/schemas/20251121/linkml/modules/slots/superseded_by.yaml @@ -1,18 +1,14 @@ -# Global Slot: superseded_by -# Links to subsequent version that replaced this entity - id: https://nde.nl/ontology/hc/slot/superseded_by name: superseded_by_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - default_prefix: hc - slots: superseded_by: slot_uri: dcterms:isReplacedBy range: uriorcurie - description: "Subsequent entity that replaced this one (version/change history)" + description: Subsequent entity that replaced this one (version/change history) + broad_mappings: + - prov:wasAttributedTo diff --git a/schemas/20251121/linkml/modules/slots/supersedes.yaml b/schemas/20251121/linkml/modules/slots/supersedes.yaml index 28f9b3c021..e09dc1ca4c 100644 --- a/schemas/20251121/linkml/modules/slots/supersedes.yaml +++ b/schemas/20251121/linkml/modules/slots/supersedes.yaml @@ -1,18 +1,14 @@ -# Global Slot: supersedes -# Links to previous version that this entity replaces - id: https://nde.nl/ontology/hc/slot/supersedes name: supersedes_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - default_prefix: hc - slots: supersedes: slot_uri: dcterms:replaces range: uriorcurie - description: "Previous entity that this one replaces (version/change history)" + description: Previous entity that this one replaces (version/change history) + exact_mappings: + - dcterms:replaces diff --git a/schemas/20251121/linkml/modules/slots/temperature_tolerance.yaml b/schemas/20251121/linkml/modules/slots/temperature_tolerance.yaml index 3b395947c5..6b3abafab5 100644 --- a/schemas/20251121/linkml/modules/slots/temperature_tolerance.yaml +++ b/schemas/20251121/linkml/modules/slots/temperature_tolerance.yaml @@ -1,21 +1,15 @@ -# Slot: temperature_tolerance -# Acceptable temperature deviation from target - id: https://nde.nl/ontology/hc/slot/temperature_tolerance name: temperature_tolerance_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: temperature_tolerance: slot_uri: hc:temperatureTolerance range: float - description: >- - Acceptable temperature deviation (±) from target value in degrees Celsius. + description: Acceptable temperature deviation (±) from target value in degrees Celsius. + related_mappings: + - schema:additionalProperty diff --git a/schemas/20251121/linkml/modules/slots/temporal_coverage.yaml b/schemas/20251121/linkml/modules/slots/temporal_coverage.yaml index 32823fa084..3a52985b90 100644 --- a/schemas/20251121/linkml/modules/slots/temporal_coverage.yaml +++ b/schemas/20251121/linkml/modules/slots/temporal_coverage.yaml @@ -1,18 +1,22 @@ -# Custodian Slot: temporal_coverage -# Time period covered by collection materials - id: https://nde.nl/ontology/hc/slot/temporal_coverage name: temporal_coverage_slot - imports: - - ../classes/TimeSpan - +- ../classes/TimeSpan slots: temporal_coverage: slot_uri: dcterms:temporal range: TimeSpan - description: | - Time period covered by collection materials (NOT when collected). + description: 'Time period covered by collection materials (NOT when collected). + Examples: + - Collection of 18th-century documents: temporal_coverage = 1700-1799 + - Medieval manuscript collection: temporal_coverage = 800-1500 + + ' + exact_mappings: + - dcterms:temporal + - schema:temporalCoverage + broad_mappings: + - dcterms:coverage diff --git a/schemas/20251121/linkml/modules/slots/temporal_extent.yaml b/schemas/20251121/linkml/modules/slots/temporal_extent.yaml index 89e5e835a8..e01dfc492c 100644 --- a/schemas/20251121/linkml/modules/slots/temporal_extent.yaml +++ b/schemas/20251121/linkml/modules/slots/temporal_extent.yaml @@ -1,17 +1,17 @@ -# Custodian Slot: temporal_extent -# Temporal extent of custodian's existence - id: https://nde.nl/ontology/hc/slot/temporal_extent name: temporal_extent_slot - imports: - - ../classes/TimeSpan - +- ../classes/TimeSpan slots: temporal_extent: slot_uri: crm:P4_has_time-span range: TimeSpan - description: | - Temporal extent of custodian's existence (founding → dissolution). + description: 'Temporal extent of custodian''s existence (founding → dissolution). + CIDOC-CRM: P4_has_time-span links E39_Actor to E52_Time-Span. + Use this for entity lifespan, NOT database record timestamps. + + ' + broad_mappings: + - dcterms:extent diff --git a/schemas/20251121/linkml/modules/slots/time_of_destruction.yaml b/schemas/20251121/linkml/modules/slots/time_of_destruction.yaml index b8f0062115..afdadcf108 100644 --- a/schemas/20251121/linkml/modules/slots/time_of_destruction.yaml +++ b/schemas/20251121/linkml/modules/slots/time_of_destruction.yaml @@ -1,119 +1,51 @@ -# Custodian Slot: time_of_destruction -# Temporal extent of custodian's destruction (for heritage institutions destroyed in conflicts) - id: https://nde.nl/ontology/hc/slot/time_of_destruction name: time_of_destruction_slot - prefixes: linkml: https://w3id.org/linkml/ crm: http://www.cidoc-crm.org/cidoc-crm/ schema: http://schema.org/ wd: http://www.wikidata.org/entity/ - imports: - - linkml:types - - ../classes/TimeSpan - +- linkml:types +- ../classes/TimeSpan slots: time_of_destruction: slot_uri: crm:P4_has_time-span range: TimeSpan - description: | - Temporal extent of custodian's destruction or significant damage. - - **PURPOSE**: - Documents when a heritage custodian institution was destroyed, damaged, - or rendered non-operational due to: - - Armed conflict (bombing, shelling, military operations) - - Natural disasters (earthquakes, floods, fires) - - Deliberate destruction (heritage crimes, vandalism, arson) - - State actions (demolition, forced closure) - - **CRITICAL DISTINCTION from temporal_extent**: - - `temporal_extent`: Lifespan of entity (founding → dissolution) - - Represents normal organizational lifecycle - - Dissolution may be planned (merger, closure) - - `time_of_destruction`: Involuntary destruction event - - Represents traumatic end due to external forces - - Often sudden, unplanned, violent - - **USE CASES**: - - 1. **Gaza 2023-2024 Conflict**: - - Libraries, museums, archives destroyed by Israeli military - - Example: Great Omari Mosque Library (destroyed December 2023) - - 2. **Syria 2011-present**: - - Museums and archaeological sites damaged/looted - - Example: Aleppo Museum damage - - 3. **Iraq 2003-present**: - - National Museum of Iraq looting - - Mosul Museum destruction by ISIS - - 4. **Ukraine 2022-present**: - - Museums and archives damaged by Russian forces - - Example: Ivankiv Historical Museum fire - - **TimeSpan USAGE**: - - Uses CIDOC-CRM E52_Time-Span with fuzzy bounds: - - `begin_of_the_begin`: Earliest possible destruction start - - `end_of_the_begin`: Latest possible destruction start - - `begin_of_the_end`: Earliest possible destruction completion - - `end_of_the_end`: Latest possible destruction completion - - For sudden destruction events (single bombing), all four bounds - may be the same date. - - For gradual destruction (prolonged siege), use ranges. - - **EXAMPLE - Sudden Destruction**: - ```yaml - time_of_destruction: - begin_of_the_begin: "2023-12-08" - end_of_the_begin: "2023-12-08" - begin_of_the_end: "2023-12-08" - end_of_the_end: "2023-12-08" - description: "Great Omari Mosque Library destroyed by Israeli airstrike" - ``` - - **EXAMPLE - Prolonged Destruction**: - ```yaml - time_of_destruction: - begin_of_the_begin: "2023-10-07" - end_of_the_begin: "2023-10-15" - begin_of_the_end: "2024-01-01" - end_of_the_end: "2024-03-15" - description: "Gradual destruction during siege, culminating in building collapse" - ``` - - **RELATIONSHIP TO conflict_status**: - - The `conflict_status` field (in enriched data) provides summary status: - - "DESTROYED", "DAMAGED", "THREATENED", "UNKNOWN" - - `time_of_destruction` provides detailed temporal evidence for when - destruction occurred, supporting conflict status claims. - - **ONTOLOGY ALIGNMENT**: - - crm:P4_has_time-span (CIDOC-CRM): Links entity to time span - - crm:E6_Destruction (CIDOC-CRM): Destruction event type - - Wikidata P576: dissolved, abolished or demolished date - - **WHY ON CUSTODIAN (not just OrganizationalChangeEvent)?**: - - Destruction is a specific, critical event that warrants direct access - from the Custodian hub. While it could be modeled as an - OrganizationalChangeEvent (type: DISSOLUTION), having a direct slot: - - Enables efficient querying for destroyed institutions - - Parallels temporal_extent (lifespan) with time_of_destruction (death) - - Avoids navigating through change event lists for common query pattern - - OrganizationalChangeEvent can still document the destruction with - additional context (perpetrator, damage assessment, documentation sources). + description: "Temporal extent of custodian's destruction or significant damage.\n\n**PURPOSE**:\nDocuments when a heritage\ + \ custodian institution was destroyed, damaged,\nor rendered non-operational due to:\n- Armed conflict (bombing, shelling,\ + \ military operations)\n- Natural disasters (earthquakes, floods, fires)\n- Deliberate destruction (heritage crimes,\ + \ vandalism, arson)\n- State actions (demolition, forced closure)\n\n**CRITICAL DISTINCTION from temporal_extent**:\n\ + - `temporal_extent`: Lifespan of entity (founding → dissolution)\n - Represents normal organizational lifecycle\n \ + \ - Dissolution may be planned (merger, closure)\n- `time_of_destruction`: Involuntary destruction event\n - Represents\ + \ traumatic end due to external forces\n - Often sudden, unplanned, violent\n\n**USE CASES**:\n\n1. **Gaza 2023-2024\ + \ Conflict**:\n - Libraries, museums, archives destroyed by Israeli military\n - Example: Great Omari Mosque Library\ + \ (destroyed December 2023)\n\n2. **Syria 2011-present**:\n - Museums and archaeological sites damaged/looted\n \ + \ - Example: Aleppo Museum damage\n\n3. **Iraq 2003-present**:\n - National Museum of Iraq looting\n - Mosul Museum\ + \ destruction by ISIS\n\n4. **Ukraine 2022-present**:\n - Museums and archives damaged by Russian forces\n - Example:\ + \ Ivankiv Historical Museum fire\n\n**TimeSpan USAGE**:\n\nUses CIDOC-CRM E52_Time-Span with fuzzy bounds:\n- `begin_of_the_begin`:\ + \ Earliest possible destruction start\n- `end_of_the_begin`: Latest possible destruction start\n- `begin_of_the_end`:\ + \ Earliest possible destruction completion\n- `end_of_the_end`: Latest possible destruction completion\n\nFor sudden\ + \ destruction events (single bombing), all four bounds\nmay be the same date.\n\nFor gradual destruction (prolonged\ + \ siege), use ranges.\n\n**EXAMPLE - Sudden Destruction**:\n```yaml\ntime_of_destruction:\n begin_of_the_begin: \"\ + 2023-12-08\"\n end_of_the_begin: \"2023-12-08\"\n begin_of_the_end: \"2023-12-08\"\n end_of_the_end: \"2023-12-08\"\ + \n description: \"Great Omari Mosque Library destroyed by Israeli airstrike\"\n```\n\n**EXAMPLE - Prolonged Destruction**:\n\ + ```yaml\ntime_of_destruction:\n begin_of_the_begin: \"2023-10-07\"\n end_of_the_begin: \"2023-10-15\"\n begin_of_the_end:\ + \ \"2024-01-01\"\n end_of_the_end: \"2024-03-15\"\n description: \"Gradual destruction during siege, culminating in\ + \ building collapse\"\n```\n\n**RELATIONSHIP TO conflict_status**:\n\nThe `conflict_status` field (in enriched data)\ + \ provides summary status:\n- \"DESTROYED\", \"DAMAGED\", \"THREATENED\", \"UNKNOWN\"\n\n`time_of_destruction` provides\ + \ detailed temporal evidence for when\ndestruction occurred, supporting conflict status claims.\n\n**ONTOLOGY ALIGNMENT**:\n\ + - crm:P4_has_time-span (CIDOC-CRM): Links entity to time span\n- crm:E6_Destruction (CIDOC-CRM): Destruction event type\n\ + - Wikidata P576: dissolved, abolished or demolished date\n\n**WHY ON CUSTODIAN (not just OrganizationalChangeEvent)?**:\n\ + \nDestruction is a specific, critical event that warrants direct access\nfrom the Custodian hub. While it could be modeled\ + \ as an\nOrganizationalChangeEvent (type: DISSOLUTION), having a direct slot:\n- Enables efficient querying for destroyed\ + \ institutions\n- Parallels temporal_extent (lifespan) with time_of_destruction (death)\n- Avoids navigating through\ + \ change event lists for common query pattern\n\nOrganizationalChangeEvent can still document the destruction with\n\ + additional context (perpetrator, damage assessment, documentation sources).\n" exact_mappings: - - crm:P4_has_time-span + - crm:P4_has_time-span related_mappings: - - crm:E6_Destruction - - wikidata:P576 + - crm:E6_Destruction + - wikidata:P576 + broad_mappings: + - dcterms:relation diff --git a/schemas/20251121/linkml/modules/slots/title.yaml b/schemas/20251121/linkml/modules/slots/title.yaml index c9b7fd7b45..f6f6a677a6 100644 --- a/schemas/20251121/linkml/modules/slots/title.yaml +++ b/schemas/20251121/linkml/modules/slots/title.yaml @@ -1,23 +1,17 @@ -# Slot: title -# Title or headline for a resource - id: https://nde.nl/ontology/hc/slot/title name: title_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: title: slot_uri: dcterms:title range: string - description: >- - Title or headline of the resource. - For multilingual titles, classes may override range to MultilingualText. + description: Title or headline of the resource. For multilingual titles, classes may override range to MultilingualText. + exact_mappings: + - dcterms:title + - schema:title diff --git a/schemas/20251121/linkml/modules/slots/type_scope.yaml b/schemas/20251121/linkml/modules/slots/type_scope.yaml index 09138c72d0..053a3f8dbe 100644 --- a/schemas/20251121/linkml/modules/slots/type_scope.yaml +++ b/schemas/20251121/linkml/modules/slots/type_scope.yaml @@ -1,58 +1,56 @@ -# Custodian Slot: type_scope -# Structured scope definition for CustodianType and CollectionType classes -# -# This slot provides a formal way to document what types of materials -# or records are within the scope of a particular custodian or collection type. -# -# Generation date: 2026-01-05 - id: https://nde.nl/ontology/hc/slot/type_scope name: type_scope_slot title: Type Scope Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ rico: https://www.ica.org/standards/RiC/ontology# dcterms: http://purl.org/dc/terms/ skos: http://www.w3.org/2004/02/skos/core# - default_prefix: hc - imports: - - linkml:types - +- linkml:types classes: TypeScopeEntry: class_uri: hc:TypeScopeEntry - description: | - A structured entry describing materials or records within scope of a CustodianType + description: 'A structured entry describing materials or records within scope of a CustodianType + or rico:RecordSetType. Used to formally document what types of holdings are + expected for a given heritage custodian or collection classification. + **Use Cases**: + - `AcademicArchive` → scope includes student records, faculty papers + - `MunicipalArchive` → scope includes council minutes, building permits + - `UniversityLibrary` → scope includes dissertations, institutional publications + **Ontological Alignment**: + - Extends `rico:hasOrHadRecordResourceHoldingRelation` concept + - Aligns with `rico:hasRecordResourceExtent` for quantifiable scope + - Uses `skos:scopeNote` pattern for textual description + + ' annotations: custodian_types: '["*"]' - custodian_types_rationale: >- - TypeScopeEntry applies to all custodian types - used for defining - what materials are within scope of any CustodianType or CollectionType. + custodian_types_rationale: TypeScopeEntry applies to all custodian types - used for defining what materials are within + scope of any CustodianType or CollectionType. specificity_score: 0.6 - specificity_rationale: "Used for type classification scope definitions" + specificity_rationale: Used for type classification scope definitions specificity_annotation_timestamp: '2026-01-05T12:00:00Z' specificity_annotation_agent: opencode-claude-sonnet-4 slots: - - scope_category - - scope_includes - - scope_excludes - - scope_note + - scope_category + - scope_includes + - scope_excludes + - scope_note slot_usage: scope_category: required: true @@ -60,123 +58,122 @@ classes: multivalued: true scope_excludes: multivalued: true - slots: type_scope: slot_uri: skos:scopeNote range: TypeScopeEntry multivalued: true inlined_as_list: true - description: | - Structured scope definitions for a CustodianType or rico:RecordSetType class. - - Documents what types of materials, records, or collections are within the scope - of institutions of this type. Used for: - - 1. **Classification guidance** - Helps determine if an institution belongs to this type - 2. **Collection discovery** - Indicates what materials users might find - 3. **Interoperability** - Maps to rico:hasOrHadRecordResourceHoldingRelation - - **Example** (AcademicArchiveRecordSetType): - ```yaml - type_scope: - - scope_category: "University administrative fonds" - scope_includes: - - "Governance records" - - "Policy documentation" - - "Committee minutes" - - scope_category: "Student record series" - scope_includes: - - "Enrollment records" - - "Academic transcripts" - - "Graduation records" - - scope_category: "Faculty paper collections" - scope_includes: - - "Research documentation" - - "Correspondence" - - "Lecture notes" - - scope_category: "Campus documentation collections" - scope_includes: - - "Photographs" - - "Audiovisual materials" - - "University publications" - ``` - - **Ontological Alignment**: - - Maps to `skos:scopeNote` for SKOS concept schemes - - Extends `rico:hasOrHadRecordResourceHoldingRelation` for archival contexts - - Complements `rico:RecordSetType` classification + description: "Structured scope definitions for a CustodianType or rico:RecordSetType class.\n\nDocuments what types of\ + \ materials, records, or collections are within the scope\nof institutions of this type. Used for:\n\n1. **Classification\ + \ guidance** - Helps determine if an institution belongs to this type\n2. **Collection discovery** - Indicates what\ + \ materials users might find\n3. **Interoperability** - Maps to rico:hasOrHadRecordResourceHoldingRelation\n\n**Example**\ + \ (AcademicArchiveRecordSetType):\n```yaml\ntype_scope:\n - scope_category: \"University administrative fonds\"\n \ + \ scope_includes:\n - \"Governance records\"\n - \"Policy documentation\"\n - \"Committee minutes\"\ + \n - scope_category: \"Student record series\"\n scope_includes:\n - \"Enrollment records\"\n - \"Academic\ + \ transcripts\"\n - \"Graduation records\"\n - scope_category: \"Faculty paper collections\"\n scope_includes:\n\ + \ - \"Research documentation\"\n - \"Correspondence\"\n - \"Lecture notes\"\n - scope_category: \"Campus\ + \ documentation collections\"\n scope_includes:\n - \"Photographs\"\n - \"Audiovisual materials\"\n \ + \ - \"University publications\"\n```\n\n**Ontological Alignment**:\n- Maps to `skos:scopeNote` for SKOS concept schemes\n\ + - Extends `rico:hasOrHadRecordResourceHoldingRelation` for archival contexts\n- Complements `rico:RecordSetType` classification\n" annotations: custodian_types: '["*"]' - custodian_types_rationale: "type_scope applies to all CustodianType and CollectionType classes" + custodian_types_rationale: type_scope applies to all CustodianType and CollectionType classes examples: - - value: - - scope_category: "University administrative fonds" - scope_includes: - - "Governance records" - - "Policy documentation" - description: "Academic archive administrative records scope" - + - value: + - scope_category: University administrative fonds + scope_includes: + - Governance records + - Policy documentation + description: Academic archive administrative records scope + broad_mappings: + - dcterms:coverage scope_category: slot_uri: dcterms:subject range: string - description: | - Category name for this scope entry. Typically describes a class of materials - or a major collection area. - - Examples: - - "University administrative fonds" - - "Student record series" - - "Faculty paper collections" - - "Municipal council records" - - "Building permit archives" - examples: - - value: "University administrative fonds" - description: "Administrative records category" - - value: "Student record series" - description: "Student records category" + description: 'Category name for this scope entry. Typically describes a class of materials + or a major collection area. + + + Examples: + + - "University administrative fonds" + + - "Student record series" + + - "Faculty paper collections" + + - "Municipal council records" + + - "Building permit archives" + + ' + examples: + - value: University administrative fonds + description: Administrative records category + - value: Student record series + description: Student records category scope_includes: slot_uri: skos:example range: string multivalued: true - description: | - Specific types of materials or records included in this scope category. - - Examples for "Student record series": - - "Enrollment records" - - "Academic transcripts" - - "Graduation records" - - "Disciplinary files" - examples: - - value: ["Enrollment records", "Academic transcripts", "Graduation records"] - description: "Student records inclusions" + description: 'Specific types of materials or records included in this scope category. + + Examples for "Student record series": + + - "Enrollment records" + + - "Academic transcripts" + + - "Graduation records" + + - "Disciplinary files" + + ' + examples: + - value: + - Enrollment records + - Academic transcripts + - Graduation records + description: Student records inclusions scope_excludes: slot_uri: skos:historyNote range: string multivalued: true - description: | - Materials explicitly excluded from this scope category, for disambiguation. - Helps clarify boundaries between related custodian types. - - Examples for "University administrative fonds": - - "Research data (see Research Archive)" - - "Medical records (see Hospital Archive)" - - "Athletic records (see Sports Archive)" - examples: - - value: ["Research data - see Research Archive", "Medical records - see Hospital Archive"] - description: "Scope exclusions for clarity" + description: 'Materials explicitly excluded from this scope category, for disambiguation. + Helps clarify boundaries between related custodian types. + + + Examples for "University administrative fonds": + + - "Research data (see Research Archive)" + + - "Medical records (see Hospital Archive)" + + - "Athletic records (see Sports Archive)" + + ' + examples: + - value: + - Research data - see Research Archive + - Medical records - see Hospital Archive + description: Scope exclusions for clarity scope_note: slot_uri: skos:note range: string - description: | - Free-text note providing additional context about this scope category. + description: 'Free-text note providing additional context about this scope category. + May include historical context, acquisition policies, or access restrictions. - + + Example: + "Student records from before 1970 may be fragmentary due to a fire in 1969." + + ' examples: - - value: "Records from 1970-present are comprehensive; earlier records are fragmentary" - description: "Historical context note" + - value: Records from 1970-present are comprehensive; earlier records are fragmentary + description: Historical context note diff --git a/schemas/20251121/linkml/modules/slots/typical_domains.yaml b/schemas/20251121/linkml/modules/slots/typical_domains.yaml index d1536cedd3..2eb37808e2 100644 --- a/schemas/20251121/linkml/modules/slots/typical_domains.yaml +++ b/schemas/20251121/linkml/modules/slots/typical_domains.yaml @@ -1,45 +1,43 @@ -# Global Slot: typical_domains -# Heritage domains where this classification type is typically used -# -# This slot enables documentation of which heritage sectors (archives, libraries, museums) -# typically use a particular classification scheme, role, or type. -# -# Generation date: 2025-12-09 - id: https://nde.nl/ontology/hc/slot/typical_domains name: typical_domains_slot title: Typical Domains Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - default_prefix: hc - imports: - - linkml:types - +- linkml:types slots: typical_domains: - description: | - Heritage domains where this type/role/classification is typically used. - + description: 'Heritage domains where this type/role/classification is typically used. + + Common values include: + - ARCHIVE - Archival institutions + - LIBRARY - Libraries and bibliographic contexts + - MUSEUM - Museums and cultural heritage institutions + - CROSS_DOMAIN - Used across multiple heritage sectors - + + This slot helps users understand the contextual applicability + of different classification types. + + ' range: string multivalued: true slot_uri: schema:category examples: - - value: "ARCHIVE" - description: "Primarily used in archival contexts" - - value: "LIBRARY" - description: "Primarily used in library contexts" - - value: "CROSS_DOMAIN" - description: "Used across multiple heritage sectors" + - value: ARCHIVE + description: Primarily used in archival contexts + - value: LIBRARY + description: Primarily used in library contexts + - value: CROSS_DOMAIN + description: Used across multiple heritage sectors + close_mappings: + - dcterms:subject diff --git a/schemas/20251121/linkml/modules/slots/typical_metadata_standards.yaml b/schemas/20251121/linkml/modules/slots/typical_metadata_standards.yaml index a8941ab20f..d91ae32f77 100644 --- a/schemas/20251121/linkml/modules/slots/typical_metadata_standards.yaml +++ b/schemas/20251121/linkml/modules/slots/typical_metadata_standards.yaml @@ -1,24 +1,18 @@ -# Slot: typical_metadata_standards -# Metadata standards commonly used by a platform or portal type - id: https://nde.nl/ontology/hc/slot/typical_metadata_standards name: typical_metadata_standards_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ dcterms: http://purl.org/dc/terms/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: typical_metadata_standards: slot_uri: dcterms:conformsTo range: string multivalued: true - description: >- - Metadata standards commonly used by this platform or portal type. - Examples: Dublin Core, MARC21, EAD, LIDO, DCAT, EDM. + description: 'Metadata standards commonly used by this platform or portal type. Examples: Dublin Core, MARC21, EAD, LIDO, + DCAT, EDM.' + broad_mappings: + - dcterms:conformsTo diff --git a/schemas/20251121/linkml/modules/slots/typical_technical_features.yaml b/schemas/20251121/linkml/modules/slots/typical_technical_features.yaml index 8b88fe7d3f..f533d7dc03 100644 --- a/schemas/20251121/linkml/modules/slots/typical_technical_features.yaml +++ b/schemas/20251121/linkml/modules/slots/typical_technical_features.yaml @@ -1,24 +1,18 @@ -# Slot: typical_technical_features -# Technical features commonly provided by a platform or portal type - id: https://nde.nl/ontology/hc/slot/typical_technical_features name: typical_technical_features_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ schema: http://schema.org/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: typical_technical_features: slot_uri: schema:featureList range: string multivalued: true - description: >- - Technical features commonly provided by this platform or portal type. - Examples: SPARQL, OAI-PMH, IIIF, REST API, full-text search. + description: 'Technical features commonly provided by this platform or portal type. Examples: SPARQL, OAI-PMH, IIIF, REST + API, full-text search.' + close_mappings: + - schema:featureList diff --git a/schemas/20251121/linkml/modules/slots/unit_affiliation.yaml b/schemas/20251121/linkml/modules/slots/unit_affiliation.yaml index 5585dcf183..02cdd3909e 100644 --- a/schemas/20251121/linkml/modules/slots/unit_affiliation.yaml +++ b/schemas/20251121/linkml/modules/slots/unit_affiliation.yaml @@ -1,13 +1,13 @@ id: https://nde.nl/ontology/hc/slot/unit_affiliation name: unit_affiliation title: Unit Affiliation - imports: - - linkml:types - - ../classes/OrganizationalStructure - +- linkml:types +- ../classes/OrganizationalStructure slots: unit_affiliation: slot_uri: schema:affiliation description: Organizational unit (department/team) where person serves range: OrganizationalStructure + close_mappings: + - org:memberOf diff --git a/schemas/20251121/linkml/modules/slots/unit_type.yaml b/schemas/20251121/linkml/modules/slots/unit_type.yaml index f92e53bc7e..c61db29819 100644 --- a/schemas/20251121/linkml/modules/slots/unit_type.yaml +++ b/schemas/20251121/linkml/modules/slots/unit_type.yaml @@ -1,11 +1,11 @@ -# OrganizationalStructure Slot: unit_type id: https://nde.nl/ontology/hc/slot/unit_type name: unit_type_slot - slots: unit_type: slot_uri: dct:type range: OrganizationalUnitTypeEnum description: Type of organizational unit (DEPARTMENT, TEAM, DIVISION, etc.) exact_mappings: - - rdf:type + - rdf:type + broad_mappings: + - dcterms:type diff --git a/schemas/20251121/linkml/modules/slots/used.yaml b/schemas/20251121/linkml/modules/slots/used.yaml index 302fe89100..365fd97e2f 100644 --- a/schemas/20251121/linkml/modules/slots/used.yaml +++ b/schemas/20251121/linkml/modules/slots/used.yaml @@ -1,27 +1,33 @@ -# ReconstructionActivity Slot: used -# Links Activity to input CustodianObservation(s) - id: https://nde.nl/ontology/hc/slot/used name: used_slot - imports: - - ../classes/CustodianObservation - +- ../classes/CustodianObservation slots: used: slot_uri: prov:used range: CustodianObservation multivalued: true required: true - description: | - CustodianObservation(s) used as input for reconstruction activity. - + description: 'CustodianObservation(s) used as input for reconstruction activity. + + PROV-O Pattern: Activity prov:used Entity + - Activity consumes Entities (observations) as input + - Multiple observations can feed into one activity + - This is the PRIMARY input link in observation→reconstruction flow - + + Examples: + - Entity resolution uses multiple conflicting observations + - Name standardization uses observations from different sources + - Reconstruction synthesizes observations into formal entity + + ' + close_mappings: + - prov:used diff --git a/schemas/20251121/linkml/modules/slots/used_by.yaml b/schemas/20251121/linkml/modules/slots/used_by.yaml index 624656e831..e08c73fe11 100644 --- a/schemas/20251121/linkml/modules/slots/used_by.yaml +++ b/schemas/20251121/linkml/modules/slots/used_by.yaml @@ -1,61 +1,32 @@ -# Slot: used_by -# Inverse of used -# Links CustodianObservation to activities that use it - id: https://nde.nl/ontology/hc/slot/used_by name: used_by title: Used By - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# owl: http://www.w3.org/2002/07/owl# - imports: - - linkml:types - +- linkml:types slots: used_by: slot_uri: prov:wasUsedBy - description: | - Reconstruction activities that used this observation as input. - - **PROV-O Alignment**: - - Property: `prov:wasUsedBy` - - Domain: prov:Entity (CustodianObservation) - - Range: prov:Activity (ReconstructionActivity) - - Definition: "An entity that was used by this activity." - - **INVERSE PROPERTY**: - - **Inverse**: `used` (prov:used) - - Pattern: If Activity used Observation, then Observation used_by Activity - - **Provenance Chain**: - Observations flow into reconstruction activities: - - Web scrape observation → used_by → Name reconstruction - - ISIL registry observation → used_by → Legal status reconstruction - - **Example**: - ```yaml - CustodianObservation: - observation_source: "https://www.rijksmuseum.nl/about" - observed_name: "Rijksmuseum" - used_by: - - "https://nde.nl/ontology/hc/activity/rm-2024-reconstruction" - ``` - - **Navigation**: - - From observation: Find activities that used it (used_by) - - From activity: Find observations used (used) + description: "Reconstruction activities that used this observation as input.\n\n**PROV-O Alignment**:\n\nProperty: `prov:wasUsedBy`\n\ + - Domain: prov:Entity (CustodianObservation)\n- Range: prov:Activity (ReconstructionActivity)\n- Definition: \"An entity\ + \ that was used by this activity.\"\n\n**INVERSE PROPERTY**:\n- **Inverse**: `used` (prov:used)\n- Pattern: If Activity\ + \ used Observation, then Observation used_by Activity\n\n**Provenance Chain**:\nObservations flow into reconstruction\ + \ activities:\n- Web scrape observation → used_by → Name reconstruction\n- ISIL registry observation → used_by → Legal\ + \ status reconstruction\n\n**Example**:\n```yaml\nCustodianObservation:\n observation_source: \"https://www.rijksmuseum.nl/about\"\ + \n observed_name: \"Rijksmuseum\"\n used_by:\n - \"https://nde.nl/ontology/hc/activity/rm-2024-reconstruction\"\ + \n```\n\n**Navigation**:\n- From observation: Find activities that used it (used_by)\n- From activity: Find observations\ + \ used (used)\n" range: ReconstructionActivity multivalued: true - exact_mappings: - - prov:wasUsedBy - + - prov:wasUsedBy comments: - - "Inverse of used (prov:used)" - - "Links observation to activities that consumed it" - - "Creates owl:inverseOf axiom in RDF output" + - Inverse of used (prov:used) + - Links observation to activities that consumed it + - Creates owl:inverseOf axiom in RDF output + broad_mappings: + - prov:wasAttributedTo diff --git a/schemas/20251121/linkml/modules/slots/used_sources.yaml b/schemas/20251121/linkml/modules/slots/used_sources.yaml index 0724b9127b..2decc62edb 100644 --- a/schemas/20251121/linkml/modules/slots/used_sources.yaml +++ b/schemas/20251121/linkml/modules/slots/used_sources.yaml @@ -1,12 +1,10 @@ -# ReconstructionActivity Slot: used_sources -# Sources consulted during reconstruction - id: https://nde.nl/ontology/hc/slot/used_sources name: used_sources_slot - slots: used_sources: slot_uri: prov:used range: uriorcurie multivalued: true - description: "Sources consulted during reconstruction" + description: Sources consulted during reconstruction + exact_mappings: + - dcterms:source diff --git a/schemas/20251121/linkml/modules/slots/valid_from.yaml b/schemas/20251121/linkml/modules/slots/valid_from.yaml index 4b28d1e8b3..8c9c8ccf30 100644 --- a/schemas/20251121/linkml/modules/slots/valid_from.yaml +++ b/schemas/20251121/linkml/modules/slots/valid_from.yaml @@ -1,30 +1,21 @@ -# CustodianName Slot: valid_from -# Date from which name is valid -# Phase 8: Added validation constraints - id: https://nde.nl/ontology/hc/slot/valid_from name: valid_from_slot - slots: valid_from: slot_uri: schema:validFrom range: date - description: "Date from which this name is/was valid" - - # Validation Constraints (Phase 8) - pattern: "^\\d{4}-\\d{2}-\\d{2}$" # ISO 8601 date format (YYYY-MM-DD) - - # Temporal constraint: Cannot be in the future - # Note: LinkML doesn't support dynamic date comparisons natively - # This requires custom validation in Python or SHACL - + description: Date from which this name is/was valid + pattern: ^\d{4}-\d{2}-\d{2}$ comments: - - "Must be in ISO 8601 format (YYYY-MM-DD)" - - "Should not be in the future (validated via custom rules)" - - "For temporal consistency with organizational units, see CustodianCollection.slot_usage" - + - Must be in ISO 8601 format (YYYY-MM-DD) + - Should not be in the future (validated via custom rules) + - For temporal consistency with organizational units, see CustodianCollection.slot_usage examples: - - value: "1985-01-01" - description: "Valid: ISO 8601 format" - - value: "2023-12-31" - description: "Valid: Recent date" + - value: '1985-01-01' + description: 'Valid: ISO 8601 format' + - value: '2023-12-31' + description: 'Valid: Recent date' + exact_mappings: + - schema:validFrom + close_mappings: + - dcterms:valid diff --git a/schemas/20251121/linkml/modules/slots/valid_to.yaml b/schemas/20251121/linkml/modules/slots/valid_to.yaml index 584d8c2aa7..ffff8c76d7 100644 --- a/schemas/20251121/linkml/modules/slots/valid_to.yaml +++ b/schemas/20251121/linkml/modules/slots/valid_to.yaml @@ -1,11 +1,11 @@ -# CustodianName Slot: valid_to -# Date until which name was valid - id: https://nde.nl/ontology/hc/slot/valid_to name: valid_to_slot - slots: valid_to: slot_uri: schema:validUntil range: date - description: "Date until which this name was valid (null if still current)" + description: Date until which this name was valid (null if still current) + exact_mappings: + - schema:validThrough + close_mappings: + - dcterms:valid diff --git a/schemas/20251121/linkml/modules/slots/variant_of_name.yaml b/schemas/20251121/linkml/modules/slots/variant_of_name.yaml index d98227c941..d3d860522b 100644 --- a/schemas/20251121/linkml/modules/slots/variant_of_name.yaml +++ b/schemas/20251121/linkml/modules/slots/variant_of_name.yaml @@ -1,25 +1,30 @@ -# CustodianAppellation Slot: variant_of_name -# Links appellation variant back to its canonical CustodianName - id: https://nde.nl/ontology/hc/slot/variant_of_name name: variant_of_name_slot - imports: - - ../classes/CustodianName - +- ../classes/CustodianName slots: variant_of_name: slot_uri: skos:broader range: CustodianName required: false - description: | - Link back to the CustodianName that this appellation is a variant of. - + description: 'Link back to the CustodianName that this appellation is a variant of. + + SKOS: broader links alternative label back to its preferred concept. + This is the inverse of the skos:altLabel relationship. - + + Relationship pattern: + - CustodianName → skos:altLabel → CustodianAppellation (forward) + - CustodianAppellation → skos:broader → CustodianName (inverse) - + + Domain: E41_Appellation → Range: CustodianName (SKOS Concept). + + ' + broad_mappings: + - rdfs:label + - dcterms:relation diff --git a/schemas/20251121/linkml/modules/slots/was_derived_from.yaml b/schemas/20251121/linkml/modules/slots/was_derived_from.yaml index 769d959c1b..2d8e7b1cab 100644 --- a/schemas/20251121/linkml/modules/slots/was_derived_from.yaml +++ b/schemas/20251121/linkml/modules/slots/was_derived_from.yaml @@ -1,21 +1,22 @@ -# CustodianLegalStatus Slot: was_derived_from -# CustodianObservation(s) this entity derives from - id: https://nde.nl/ontology/hc/slot/was_derived_from name: was_derived_from_slot - imports: - - ../classes/CustodianObservation - +- ../classes/CustodianObservation slots: was_derived_from: slot_uri: prov:wasDerivedFrom range: uriorcurie multivalued: true - description: | - CustodianObservation(s) this entity is derived from. - + description: 'CustodianObservation(s) this entity is derived from. + + Uses uriorcurie range to allow referencing observations by URI string + without requiring full inline objects. Classes that need required + provenance can override in slot_usage. + + ' required: false + exact_mappings: + - prov:wasDerivedFrom diff --git a/schemas/20251121/linkml/modules/slots/was_generated_by.yaml b/schemas/20251121/linkml/modules/slots/was_generated_by.yaml index 2222183b23..64681ecb7a 100644 --- a/schemas/20251121/linkml/modules/slots/was_generated_by.yaml +++ b/schemas/20251121/linkml/modules/slots/was_generated_by.yaml @@ -1,28 +1,34 @@ -# ReconstructedEntity Slot: was_generated_by -# Activity that created this reconstruction -# RDFS: domain=ReconstructedEntity, range=ReconstructionActivity - id: https://nde.nl/ontology/hc/slot/was_generated_by name: was_generated_by_slot - imports: - - ../classes/ReconstructionActivity - +- ../classes/ReconstructionActivity slots: was_generated_by: slot_uri: prov:wasGeneratedBy range: ReconstructionActivity - description: | - The ReconstructionActivity that generated this entity. - + description: 'The ReconstructionActivity that generated this entity. + + **PROV-O Alignment**: + Property: prov:wasGeneratedBy + - Domain: prov:Entity (ReconstructedEntity) + - Range: prov:Activity (ReconstructionActivity) + - Definition: "Generation is the completion of production of a new entity by an activity." - + + **RDFS Compliance**: + - Domain: ReconstructedEntity (abstract base class) + - Range: ReconstructionActivity + - Inverse: generates + + ' required: false + broad_mappings: + - prov:wasAttributedTo diff --git a/schemas/20251121/linkml/modules/slots/was_revision_of.yaml b/schemas/20251121/linkml/modules/slots/was_revision_of.yaml index 8440881c71..577ab1b9bc 100644 --- a/schemas/20251121/linkml/modules/slots/was_revision_of.yaml +++ b/schemas/20251121/linkml/modules/slots/was_revision_of.yaml @@ -1,14 +1,11 @@ -# CustodianLegalStatus Slot: was_revision_of -# Previous version of reconstruction - id: https://nde.nl/ontology/hc/slot/was_revision_of name: was_revision_of_slot - imports: - - ../classes/CustodianLegalStatus - +- ../classes/CustodianLegalStatus slots: was_revision_of: slot_uri: prov:wasRevisionOf range: CustodianLegalStatus - description: "Previous version of this reconstruction (if updated)" + description: Previous version of this reconstruction (if updated) + exact_mappings: + - prov:wasRevisionOf diff --git a/schemas/20251121/linkml/modules/slots/web_claims.yaml b/schemas/20251121/linkml/modules/slots/web_claims.yaml index 9922eae714..e9e5ab7d17 100644 --- a/schemas/20251121/linkml/modules/slots/web_claims.yaml +++ b/schemas/20251121/linkml/modules/slots/web_claims.yaml @@ -1,63 +1,34 @@ -# Web Claims Slot -# Reusable slot for linking to PersonWebClaim provenance records - id: https://nde.nl/ontology/hc/slot/web_claims name: web_claims_slot title: Web Claims Slot version: 1.0.0 - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ prov: http://www.w3.org/ns/prov# - imports: - - linkml:types - - ../classes/PersonWebClaim - +- linkml:types +- ../classes/PersonWebClaim slots: web_claims: slot_uri: prov:wasDerivedFrom - description: | - Verifiable claims about a person extracted from web pages. - - **RULE 26 COMPLIANCE**: All person/staff data SHOULD have web claim provenance. - - **Pattern**: Each PersonWebClaim provides: - - claim_type: full_name, role_title, department, email, etc. - - claim_value: The extracted value - - source_url: URL where claim was found - - xpath: XPath to element (for HTML sources) - - retrieved_on: Timestamp of extraction - - retrieval_agent: Tool used (firecrawl, playwright, exa, manual) - - **PROV-O Alignment**: - - This slot represents prov:wasDerivedFrom relationship - - Links the person observation to its web source evidence - - **Use Cases**: - - Track provenance of person data - - Enable verification of extracted information - - Document multiple sources for same fact - - Resolve conflicts between sources - - **Example**: - ```yaml - web_claims: - - person_claim_type: full_name - person_claim_value: "Dr. Jane Smith" - source_url: https://museum.org/team - person_xpath: /html/body/main/div[2]/h3 - retrieved_on: "2025-01-15T10:30:00Z" - retrieval_agent: firecrawl - person_xpath_match_score: 1.0 - ``` - - **See Also**: - - PersonWebClaim class for full field definitions - - AGENTS.md Rule 26 for person data provenance requirements + description: "Verifiable claims about a person extracted from web pages.\n\n**RULE 26 COMPLIANCE**: All person/staff data\ + \ SHOULD have web claim provenance.\n\n**Pattern**: Each PersonWebClaim provides:\n- claim_type: full_name, role_title,\ + \ department, email, etc.\n- claim_value: The extracted value\n- source_url: URL where claim was found\n- xpath: XPath\ + \ to element (for HTML sources)\n- retrieved_on: Timestamp of extraction\n- retrieval_agent: Tool used (firecrawl, playwright,\ + \ exa, manual)\n\n**PROV-O Alignment**:\n- This slot represents prov:wasDerivedFrom relationship\n- Links the person\ + \ observation to its web source evidence\n\n**Use Cases**:\n- Track provenance of person data\n- Enable verification\ + \ of extracted information\n- Document multiple sources for same fact\n- Resolve conflicts between sources\n\n**Example**:\n\ + ```yaml\nweb_claims:\n - person_claim_type: full_name\n person_claim_value: \"Dr. Jane Smith\"\n source_url:\ + \ https://museum.org/team\n person_xpath: /html/body/main/div[2]/h3\n retrieved_on: \"2025-01-15T10:30:00Z\"\n\ + \ retrieval_agent: firecrawl\n person_xpath_match_score: 1.0\n```\n\n**See Also**: \n- PersonWebClaim class for\ + \ full field definitions\n- AGENTS.md Rule 26 for person data provenance requirements\n" range: PersonWebClaim multivalued: true inlined: true inlined_as_list: true required: false + related_mappings: + - prov:Entity + broad_mappings: + - prov:Entity diff --git a/schemas/20251121/linkml/modules/slots/website.yaml b/schemas/20251121/linkml/modules/slots/website.yaml index ff3bf7d850..58d0eb7ec8 100644 --- a/schemas/20251121/linkml/modules/slots/website.yaml +++ b/schemas/20251121/linkml/modules/slots/website.yaml @@ -1,38 +1,46 @@ -# website slot - Official website URL - id: https://nde.nl/ontology/hc/slot/website name: website title: Website Slot - prefixes: gleif_base: https://www.gleif.org/ontology/Base/ schema: http://schema.org/ +description: 'Official website URL of an organization or entity. + -description: | - Official website URL of an organization or entity. - Used for: + - Trade registers (e.g., https://www.kvk.nl/) + - Registration authorities (e.g., https://www.companieshouse.gov.uk/) + - Heritage institutions + ' slots: website: slot_uri: gleif_base:hasWebsite range: uri required: false multivalued: false - description: | - Official website URL of the organization or entity. - + description: 'Official website URL of the organization or entity. + + gleif_base:hasWebsite - "A website associated with something" - + + Examples: + - https://www.kvk.nl/ (Dutch KvK) + - https://www.companieshouse.gov.uk/ (UK Companies House) + - https://www.rijksmuseum.nl/ (Rijksmuseum) + ' + exact_mappings: + - schema:url + - foaf:homepage comments: - - "Maps to gleif_base:hasWebsite and schema:url" - - "Should be the official/canonical website URL" - - "Use https:// when available" +- Maps to gleif_base:hasWebsite and schema:url +- Should be the official/canonical website URL +- Use https:// when available diff --git a/schemas/20251121/linkml/modules/slots/wikidata_entity.yaml b/schemas/20251121/linkml/modules/slots/wikidata_entity.yaml new file mode 100644 index 0000000000..630dd2cbf3 --- /dev/null +++ b/schemas/20251121/linkml/modules/slots/wikidata_entity.yaml @@ -0,0 +1,25 @@ +id: https://nde.nl/ontology/hc/slot/wikidata_entity +name: wikidata_entity_slot +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# + wd: http://www.wikidata.org/entity/ +imports: +- linkml:types +default_range: string +slots: + wikidata_entity: + slot_uri: schema:sameAs + description: "Reference to the corresponding Wikidata entity (Q-number).\n\nSchema.org: sameAs - \"URL of a reference\ + \ Web page that unambiguously \nindicates the item's identity.\"\n\nFormat: Wikidata Q-number (e.g., Q190804 for Rijksmuseum)\n\ + \nUsed to link heritage custodians to their Wikidata entries for\nenrichment, verification, and linked data integration.\n" + range: string + pattern: ^Q[0-9]+$ + exact_mappings: + - schema:sameAs + close_mappings: + - skos:exactMatch + broad_mappings: + - prov:Entity diff --git a/schemas/20251121/linkml/modules/slots/wikidata_id.yaml b/schemas/20251121/linkml/modules/slots/wikidata_id.yaml index 65128c4a23..f07deff942 100644 --- a/schemas/20251121/linkml/modules/slots/wikidata_id.yaml +++ b/schemas/20251121/linkml/modules/slots/wikidata_id.yaml @@ -1,46 +1,44 @@ -# Global Slot: wikidata_id -# Wikidata entity ID (Q-number) for semantic linking -# -# This slot provides a standard way to link any heritage ontology class -# to its corresponding Wikidata entity. -# -# Uses skos:exactMatch as the slot_uri since Wikidata entities represent -# the same concept (exact match), not just similar (closeMatch). -# -# Generation date: 2025-12-09 - id: https://nde.nl/ontology/hc/slot/wikidata_id name: wikidata_id_slot title: Wikidata ID Slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ skos: http://www.w3.org/2004/02/skos/core# wd: http://www.wikidata.org/entity/ - default_prefix: hc - imports: - - linkml:types - +- linkml:types slots: wikidata_id: - description: | - Wikidata entity ID (Q-number) for semantic linking. - + description: 'Wikidata entity ID (Q-number) for semantic linking. + + Links this class/instance to the corresponding Wikidata entity, + enabling integration with the broader knowledge graph. - + + Examples: + - Q856638 (finding aid) + - Q178706 (institution) + - Q7397 (software) + + ' range: string - pattern: "^Q[0-9]+$" + pattern: ^Q[0-9]+$ slot_uri: skos:exactMatch examples: - - value: "Q856638" - description: "Finding aid (Q856638)" - - value: "Q178706" - description: "Institution (Q178706)" + - value: Q856638 + description: Finding aid (Q856638) + - value: Q178706 + description: Institution (Q178706) + related_mappings: + - schema:sameAs + narrow_mappings: + - dcterms:identifier + broad_mappings: + - dcterms:identifier diff --git a/schemas/20251121/linkml/modules/slots/xpath.yaml b/schemas/20251121/linkml/modules/slots/xpath.yaml index 84097dc482..74928253bd 100644 --- a/schemas/20251121/linkml/modules/slots/xpath.yaml +++ b/schemas/20251121/linkml/modules/slots/xpath.yaml @@ -1,22 +1,16 @@ -# Slot: xpath -# XPath expression pointing to element in archived HTML - id: https://nde.nl/ontology/hc/slot/xpath name: xpath_slot - prefixes: linkml: https://w3id.org/linkml/ hc: https://nde.nl/ontology/hc/ - imports: - - linkml:types - +- linkml:types default_range: string - slots: xpath: - description: >- - XPath expression pointing to the element in archived HTML. - Used for provenance verification of extracted data. + description: XPath expression pointing to the element in archived HTML. Used for provenance verification of extracted + data. slot_uri: hc:xpath range: string + related_mappings: + - prov:atLocation diff --git a/schemas/20251121/rdf/01_custodian_name_modular_20260107_120151.nt b/schemas/20251121/rdf/01_custodian_name_modular_20260107_120151.nt new file mode 100644 index 0000000000..aa5fc8dd2c --- /dev/null +++ b/schemas/20251121/rdf/01_custodian_name_modular_20260107_120151.nt @@ -0,0 +1 @@ +ValueError: Conflicting URIs (https://nde.nl/ontology/hc/class/ChurchArchiveRecordSetTypes, https://nde.nl/ontology/hc/class/ChurchArchive) for item: ChurchArchiveRecordSetType diff --git a/schemas/20251121/rdf/01_custodian_name_modular_20260107_120422.nt b/schemas/20251121/rdf/01_custodian_name_modular_20260107_120422.nt new file mode 100644 index 0000000000..3e2eabc1cc --- /dev/null +++ b/schemas/20251121/rdf/01_custodian_name_modular_20260107_120422.nt @@ -0,0 +1 @@ +ValueError: Conflicting URIs (https://nde.nl/ontology/hc/class/ChurchArchiveSwedenRecordSetTypes, https://nde.nl/ontology/hc/class/ChurchArchiveRecordSetTypes) for item: ChurchPropertyFonds diff --git a/schemas/20251121/rdf/01_custodian_name_modular_20260107_121806.nt b/schemas/20251121/rdf/01_custodian_name_modular_20260107_121806.nt new file mode 100644 index 0000000000..10658af4f9 --- /dev/null +++ b/schemas/20251121/rdf/01_custodian_name_modular_20260107_121806.nt @@ -0,0 +1,63 @@ +Traceback (most recent call last): + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/plugins/parsers/notation3.py", line 1232, in uri_ref2 + ns = self._bindings[pfx] + ~~~~~~~~~~~~~~^^^^^ +KeyError: 'WARNING' + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "/Users/kempersc/miniconda3/bin/rdfpipe", line 8, in + sys.exit(main()) + ^^^^^^ + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/tools/rdfpipe.py", line 199, in main + parse_and_serialize( + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/tools/rdfpipe.py", line 53, in parse_and_serialize + graph.parse(fpath, format=use_format, **kws) + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/graph.py", line 2338, in parse + context.parse(source, publicID=publicID, format=format, **args) + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/graph.py", line 1562, in parse + raise se + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/graph.py", line 1553, in parse + parser.parse(source, self, **args) + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/plugins/parsers/notation3.py", line 2020, in parse + p.loadStream(stream) + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/plugins/parsers/notation3.py", line 479, in loadStream + return self.loadBuf(stream.read()) # Not ideal + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/plugins/parsers/notation3.py", line 485, in loadBuf + self.feed(buf) + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/plugins/parsers/notation3.py", line 511, in feed + i = self.directiveOrStatement(s, j) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/plugins/parsers/notation3.py", line 530, in directiveOrStatement + j = self.statement(argstr, i) + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/plugins/parsers/notation3.py", line 774, in statement + i = self.object(argstr, i, r) # Allow literal for subject - extends RDF + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/plugins/parsers/notation3.py", line 1487, in object + j = self.subject(argstr, i, res) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/plugins/parsers/notation3.py", line 785, in subject + return self.item(argstr, i, res) + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/plugins/parsers/notation3.py", line 877, in item + return self.path(argstr, i, res) + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/plugins/parsers/notation3.py", line 884, in path + j = self.nodeOrLiteral(argstr, i, res) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/plugins/parsers/notation3.py", line 1515, in nodeOrLiteral + j = self.node(argstr, i, res) + ^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/plugins/parsers/notation3.py", line 1102, in node + j = self.uri_ref2(argstr, i, res) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/plugins/parsers/notation3.py", line 1240, in uri_ref2 + self.BadSyntax(argstr, i, 'Prefix "%s:" not bound' % (pfx)) + File "/Users/kempersc/miniconda3/lib/python3.12/site-packages/rdflib/plugins/parsers/notation3.py", line 1730, in BadSyntax + raise BadSyntax(self._thisDoc, self.lines, argstr, i, msg) +rdflib.plugins.parsers.notation3.BadSyntax: at line 1 of <>: +Bad syntax (Prefix "WARNING:" not bound) at ^ in: +"b''^b'WARNING:linkml.generators.owlgen:Multiple owl types {rdflib.'..." diff --git a/schemas/20251121/rdf/01_custodian_name_modular_20260107_121900.context.jsonld b/schemas/20251121/rdf/01_custodian_name_modular_20260107_121900.context.jsonld new file mode 100644 index 0000000000..895d1896d7 --- /dev/null +++ b/schemas/20251121/rdf/01_custodian_name_modular_20260107_121900.context.jsonld @@ -0,0 +1,9873 @@ +{ + "comments": { + "description": "Auto generated by LinkML jsonld context generator", + "generation_date": "2026-01-07T12:27:54", + "source": "01_custodian_name_modular.yaml" + }, + "@context": { + "xsd": "http://www.w3.org/2001/XMLSchema#", + "aat": "http://vocab.getty.edu/aat/", + "adms": "http://www.w3.org/ns/adms#", + "aiiso": "http://purl.org/vocab/aiiso/schema#", + "as": "https://www.w3.org/ns/activitystreams#", + "bf": "http://id.loc.gov/ontologies/bibframe/", + "bibframe": "http://id.loc.gov/ontologies/bibframe/", + "bibo": "http://purl.org/ontology/bibo/", + "cc": "http://creativecommons.org/ns#", + "cpov": "http://data.europa.eu/m8g/", + "crm": "http://www.cidoc-crm.org/cidoc-crm/", + "dbo": "http://dbpedia.org/ontology/", + "dcat": "http://www.w3.org/ns/dcat#", + "dcmitype": "http://purl.org/dc/dcmitype/", + "dct": "http://purl.org/dc/terms/", + "dcterms": "http://purl.org/dc/terms/", + "doap": "http://usefulinc.com/ns/doap#", + "dwc": "http://rs.tdwg.org/dwc/terms/", + "edm": "http://www.europeana.eu/schemas/edm/", + "foaf": "http://xmlns.com/foaf/0.1/", + "frapo": "http://purl.org/cerif/frapo/", + "geo": "http://www.w3.org/2003/01/geo/wgs84_pos#", + "geonames": "http://sws.geonames.org/", + "geosparql": "http://www.opengis.net/ont/geosparql#", + "gleif": "https://www.gleif.org/ontology/Base/", + "gleif_base": "https://www.gleif.org/ontology/Base/", + "gleif_ra": "https://www.gleif.org/ontology/RegistrationAuthority/", + "gn": "http://www.geonames.org/ontology#", + "gr": "http://purl.org/goodrelations/v1#", + "hc": "https://nde.nl/ontology/hc/", + "heritage_custodian_ontology": "https://nde.nl/ontology/hc/custodian/", + "hydra": "http://www.w3.org/ns/hydra/core#", + "ich": "https://ich.unesco.org/", + "iiif": "http://iiif.io/api/image/3#", + "lcc_cr": "https://www.omg.org/spec/LCC/Countries/CountryRepresentation/", + "lido": "http://www.lido-schema.org/", + "linkml": "https://w3id.org/linkml/", + "lkif-legal": "http://www.estrellaproject.org/lkif-core/legal-action.owl#", + "locn": "http://www.w3.org/ns/locn#", + "ma": "http://www.w3.org/ns/ma-ont#", + "nif": "http://persistence.uni-leipzig.org/nlp2rdf/ontologies/nif-core#", + "oa": "http://www.w3.org/ns/oa#", + "odrl": "http://www.w3.org/ns/odrl/2/", + "ore": "http://www.openarchives.org/ore/terms/", + "org": "http://www.w3.org/ns/org#", + "owl": "http://www.w3.org/2002/07/owl#", + "pav": "http://purl.org/pav/", + "pico": "https://personsincontext.org/model#", + "pnv": "https://w3id.org/pnv#", + "premis": "http://www.loc.gov/premis/rdf/v3/", + "prov": "http://www.w3.org/ns/prov#", + "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "rico": "https://www.ica.org/standards/RiC/ontology#", + "rico-rst": "https://www.ica.org/standards/RiC/vocabularies/recordSetTypes#", + "rov": "http://www.w3.org/ns/regorg#", + "schema": "http://schema.org/", + "sdo": "https://schema.org/", + "sf": "http://www.opengis.net/ont/sf#", + "skos": "http://www.w3.org/2004/02/skos/core#", + "sosa": "http://www.w3.org/ns/sosa/", + "spdx": "http://spdx.org/rdf/terms#", + "ssn": "http://www.w3.org/ns/ssn/", + "time": "http://www.w3.org/2006/time#", + "tooi": "https://identifier.overheid.nl/tooi/def/ont/", + "vcard": "http://www.w3.org/2006/vcard/ns#", + "vivo": "http://vivoweb.org/ontology/core#", + "void": "http://rdfs.org/ns/void#", + "wd": "http://www.wikidata.org/entity/", + "wdt": "http://www.wikidata.org/prop/direct/", + "wgs84": "http://www.w3.org/2003/01/geo/wgs84_pos#", + "wikidata": { + "@id": "skos:exactMatch" + }, + "@vocab": "https://nde.nl/ontology/hc/custodian/", + "_nif_namespace_force": { + "@id": "nif:String" + }, + "_sf_namespace_force": { + "@id": "sf:Point" + }, + "_wd_namespace_force": { + "@id": "wd:Q35120" + }, + "about_digital_presence": { + "@type": "xsd:anyURI", + "@id": "hc:about_digital_presence" + }, + "academic_affiliation": { + "@type": "xsd:anyURI", + "@id": "org:memberOf" + }, + "academic_programs": { + "@id": "aiiso:programme" + }, + "type_scope": { + "@type": "@id", + "@id": "skos:scopeNote" + }, + "accepts_external_work": { + "@type": "xsd:boolean", + "@id": "hc:class/conservation-lab/accepts_external_work" + }, + "accepts_payment_methods": { + "@id": "hc:class/gift-shop/accepts_payment_methods" + }, + "accepts_visiting_scholars": { + "@type": "xsd:boolean", + "@id": "hc:class/research-center/accepts_visiting_scholars" + }, + "access": { + "@id": "dcterms:accessRights" + }, + "access_application_url": { + "@type": "xsd:anyURI", + "@id": "hc:access_application_url" + }, + "access_control": { + "@id": "hc:class/CustodianAdministration/access_control" + }, + "access_description": { + "@id": "hc:access_description" + }, + "access_frequency": { + "@id": "hc:access_frequency" + }, + "access_interface_url": { + "@type": "xsd:anyURI", + "@id": "hc:access_interface_url" + }, + "access_level": { + "@id": "hc:access_level" + }, + "access_management": { + "@id": "schema:isAccessibleForFree" + }, + "access_policy": { + "@id": "dcterms:accessRights" + }, + "access_policy_ref": { + "@type": "@id", + "@id": "dcterms:accessRights" + }, + "access_restricted": { + "@type": "xsd:boolean", + "@id": "dcterms:accessRights" + }, + "access_restriction": { + "@id": "schema:conditionsOfAccess" + }, + "access_restrictions": { + "@id": "hc:class/WebArchive/access_restrictions" + }, + "access_rights": { + "@id": "hc:class/CustodianCollection/access_rights" + }, + "access_trigger_events": { + "@id": "hc:access_trigger_events" + }, + "accessibility_features": { + "@id": "hc:class/reading-room/accessibility_features" + }, + "accession_date": { + "@type": "xsd:date", + "@id": "hc:class/CustodianArchive/accession_date" + }, + "accession_number": { + "@id": "dcterms:identifier" + }, + "policy_id": "@id", + "account_id": { + "@id": "hc:account_id" + }, + "account_name": { + "@id": "hc:account_name" + }, + "account_status": { + "@id": "hc:account_status" + }, + "accreditation": { + "@id": "schema:accreditation" + }, + "accreditation_body": { + "@id": "hc:class/conservation-lab/accreditation_body" + }, + "accumulation_date_end": { + "@type": "xsd:date", + "@id": "hc:class/CustodianArchive/accumulation_date_end" + }, + "accumulation_date_start": { + "@type": "xsd:date", + "@id": "hc:class/CustodianArchive/accumulation_date_start" + }, + "accuracy_meters": { + "@type": "xsd:float", + "@id": "hc:class/GeoSpatialPlace/accuracy_meters" + }, + "acquisition_budget": { + "@type": "xsd:decimal", + "@id": "hc:class/Budget/acquisition_budget" + }, + "acquisition_date": { + "@type": "xsd:date", + "@id": "schema:dateAcquired" + }, + "acquisition_history": { + "@id": "crm:P24_transferred_title_of" + }, + "acquisition_method": { + "@id": "crm:P24i_changed_ownership_through" + }, + "acquisition_source": { + "@id": "rico:hasProvenance" + }, + "active_since": { + "@type": "xsd:date", + "@id": "hc:class/CustodianAdministration/active_since" + }, + "activity_description": { + "@id": "hc:activity_description" + }, + "activity_id": "@id", + "activity_name": { + "@id": "hc:activity_name" + }, + "activity_timespan": { + "@type": "@id", + "@id": "crm:P4_has_time-span" + }, + "activity_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "prov:type" + }, + "actual_end": { + "@type": "xsd:date", + "@id": "hc:class/temporary-location/actual_end" + }, + "actual_return_date": { + "@type": "xsd:date", + "@id": "hc:actual_return_date" + }, + "actual_start": { + "@type": "xsd:date", + "@id": "hc:class/temporary-location/actual_start" + }, + "admin_office_description": { + "@id": "dcterms:description" + }, + "admin_office_id": "@id", + "admin_office_name": { + "@id": "skos:prefLabel" + }, + "admin_staff_count": { + "@type": "xsd:integer", + "@id": "schema:numberOfEmployees" + }, + "administration_description": { + "@id": "hc:class/CustodianAdministration/administration_description" + }, + "administration_name": { + "@id": "hc:class/CustodianAdministration/administration_name" + }, + "administrative_functions": { + "@id": "schema:serviceType" + }, + "administrative_level": { + "@id": "cpov:jurisdiction" + }, + "admission_fee": { + "@id": "hc:class/exhibition-space/admission_fee" + }, + "adoption_context": { + "@id": "hc:adoption_context" + }, + "affected_by_event": { + "@type": "@id", + "@id": "prov:wasInfluencedBy" + }, + "affected_territory": { + "@type": "@id", + "@id": "hc:affected_territory" + }, + "affected_units": { + "@type": "@id", + "@id": "crm:P11_had_participant" + }, + "affects_organization": { + "@type": "@id", + "@id": "prov:influenced" + }, + "affiliated_universities": { + "@id": "hc:class/research-center/affiliated_universities" + }, + "affiliation": { + "@id": "schema:affiliation" + }, + "age": { + "@id": "pico:hasAge" + }, + "agenda_description": { + "@id": "dcterms:description" + }, + "agenda_document_url": { + "@type": "xsd:anyURI", + "@id": "foaf:page" + }, + "agenda_id": "@id", + "agenda_short_name": { + "@id": "skos:altLabel" + }, + "agenda_title": { + "@id": "skos:prefLabel" + }, + "agenda_url": { + "@type": "xsd:anyURI", + "@id": "foaf:homepage" + }, + "agent_name": { + "@id": "foaf:name" + }, + "agent_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "prov:type" + }, + "aggregated_by": { + "@type": "xsd:anyURI", + "@id": "hc:aggregated_by" + }, + "aggregates_from": { + "@type": "xsd:anyURI", + "@id": "hc:aggregates_from" + }, + "agreement_signed_date": { + "@type": "xsd:date", + "@id": "schema:datePublished" + }, + "air_changes_per_hour": { + "@type": "xsd:float", + "@id": "hc:air_changes_per_hour" + }, + "all_links": { + "@type": "@id", + "@id": "schema:relatedLink" + }, + "allocated_by": { + "@type": "@id", + "@id": "prov:wasAttributedTo" + }, + "allocates": { + "@type": "@id", + "@id": "prov:contributed" + }, + "allocation_date": { + "@type": "xsd:dateTime", + "@id": "prov:generatedAtTime" + }, + "abbreviation": { + "@id": "schema:alternateName" + }, + "allocates_for": { + "@type": "@id", + "@id": "schema:serviceOutput" + }, + "allocation_domain": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:audienceType" + }, + "allocation_end_date": { + "@type": "xsd:date", + "@id": "schema:endDate" + }, + "allocation_policy_url": { + "@type": "xsd:anyURI", + "@id": "schema:usageInfo" + }, + "allocation_prefix": { + "@id": "schema:identifier" + }, + "allocation_start_date": { + "@type": "xsd:date", + "@id": "schema:startDate" + }, + "contact_email": { + "@id": "schema:email" + }, + "country_scope": { + "@type": "@id", + "@id": "schema:areaServed" + }, + "description": { + "@id": "schema:description" + }, + "id": "@id", + "is_active": { + "@type": "xsd:boolean", + "@id": "hc:class/temporary-location/is_active" + }, + "name": { + "@id": "schema:name" + }, + "name_local": { + "@id": "schema:alternateName" + }, + "parent_registration_authority": { + "@type": "@id", + "@id": "schema:parentOrganization" + }, + "subregion_scope": { + "@type": "@id", + "@id": "schema:areaServed" + }, + "website": { + "@type": "xsd:anyURI", + "@id": "gleif_base:hasWebsite" + }, + "allows_laptops": { + "@type": "xsd:boolean", + "@id": "hc:class/reading-room/allows_laptops" + }, + "allows_photography": { + "@type": "xsd:boolean", + "@id": "hc:class/reading-room/allows_photography" + }, + "alpha_2": { + "@id": "schema:addressCountry" + }, + "alpha_3": { + "@id": "hc:class/country/alpha_3" + }, + "also_identifies_name": { + "@type": "@id", + "@id": "crm:P1_is_identified_by" + }, + "alternative_names": { + "@type": "@id", + "@id": "skos:altLabel" + }, + "alternative_observed_names": { + "@id": "skos:altLabel" + }, + "altitude": { + "@type": "xsd:float", + "@id": "wgs84:alt" + }, + "amendment_history": { + "@id": "hc:class/ArticlesOfAssociation/amendment_history" + }, + "animal_species_count": { + "@type": "xsd:integer", + "@id": "hc:class/outdoor-site/animal_species_count" + }, + "annex_description": { + "@id": "hc:class/reading-room-annex/annex_description" + }, + "annex_id": "@id", + "annex_name": { + "@id": "hc:class/reading-room-annex/annex_name" + }, + "annex_reason": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/reading-room-annex/annex_reason" + }, + "annotation_motivation": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:annotation_motivation" + }, + "annotation_segments": { + "@type": "@id", + "@id": "hc:annotation_segments" + }, + "annotation_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:annotation_type" + }, + "annual_participants": { + "@type": "xsd:integer", + "@id": "hc:class/education-center/annual_participants" + }, + "annual_revenue": { + "@id": "hc:class/gift-shop/annual_revenue" + }, + "api_available": { + "@type": "xsd:boolean", + "@id": "hc:class/CollectionManagementSystem/api_available" + }, + "api_documentation": { + "@type": "xsd:anyURI", + "@id": "hc:class/auxiliary-digital-platform/api_documentation" + }, + "api_endpoint": { + "@type": "xsd:anyURI", + "@id": "dcat:endpointURL" + }, + "api_version": { + "@id": "hc:api_version" + }, + "appellation_language": { + "@id": "dcterms:language" + }, + "appellation_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "crm:P2_has_type" + }, + "appellation_value": { + "@id": "rdf:value" + }, + "applicable_countries": { + "@id": "hc:class/CustodianType/applicable_countries" + }, + "application_deadline": { + "@type": "xsd:date", + "@id": "hc:application_deadline" + }, + "application_opening_date": { + "@type": "xsd:date", + "@id": "hc:application_opening_date" + }, + "applies_to_call": { + "@type": "xsd:anyURI", + "@id": "hc:applies_to_call" + }, + "appointment_required": { + "@type": "xsd:boolean", + "@id": "hc:appointment_required" + }, + "appraisal_notes": { + "@id": "hc:class/CustodianArchive/appraisal_notes" + }, + "appraisal_policy": { + "@type": "xsd:anyURI", + "@id": "schema:url" + }, + "approval_date": { + "@type": "xsd:date", + "@id": "schema:dateModified" + }, + "approved_by": { + "@id": "hc:class/Budget/approved_by" + }, + "archdiocese_name": { + "@id": "hc:archdiocese_name" + }, + "architect": { + "@id": "hc:class/historic-building/architect" + }, + "architectural_style": { + "@id": "hc:class/historic-building/architectural_style" + }, + "archival_status": { + "@id": "hc:class/auxiliary-digital-platform/archival_status" + }, + "archive_branches": { + "@id": "org:hasSubOrganization" + }, + "archive_department_of": { + "@id": "org:subOrganizationOf" + }, + "archive_description": { + "@id": "hc:class/CustodianArchive/archive_description" + }, + "archive_memento_uri": { + "@type": "xsd:anyURI", + "@id": "hc:archive_memento_uri" + }, + "archive_name": { + "@id": "hc:class/CustodianArchive/archive_name" + }, + "archive_scope": { + "@id": "dcterms:coverage" + }, + "archive_search_score": { + "@type": "xsd:float", + "@id": "hc:archiveSearchScore" + }, + "archive_series": { + "@id": "hc:archive_series" + }, + "archive_subtype": { + "@type": "@id", + "@id": "skos:narrower" + }, + "archived_at": { + "@type": "xsd:anyURI", + "@id": "schema:archivedAt" + }, + "archived_in": { + "@type": "@id", + "@id": "hc:class/ArticlesOfAssociation/archived_in" + }, + "area_hectares": { + "@type": "xsd:float", + "@id": "hc:class/outdoor-site/area_hectares" + }, + "area_served": { + "@id": "schema:areaServed" + }, + "arrangement": { + "@id": "rico:hasOrHadAllMembersWithRecordState" + }, + "arrangement_notes": { + "@id": "hc:class/CustodianArchive/arrangement_notes" + }, + "arrangement_system": { + "@id": "rico:hasRecordSetType" + }, + "articles_archival_stage": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/ArticlesOfAssociation/articles_archival_stage" + }, + "articles_document_format": { + "@id": "hc:class/ArticlesOfAssociation/articles_document_format" + }, + "articles_document_url": { + "@type": "xsd:anyURI", + "@id": "hc:class/ArticlesOfAssociation/articles_document_url" + }, + "artist_representation": { + "@id": "schema:employee" + }, + "artwork_count": { + "@type": "xsd:integer", + "@id": "hc:class/outdoor-site/artwork_count" + }, + "aspect_ratio": { + "@id": "hc:aspect_ratio" + }, + "asserted_by": { + "@id": "hc:asserted_by" + }, + "assertion_date": { + "@type": "xsd:dateTime", + "@id": "hc:assertion_date" + }, + "assertion_id": "@id", + "assertion_rationale": { + "@id": "hc:assertion_rationale" + }, + "assertion_value": { + "@type": "xsd:boolean", + "@id": "hc:assertion_value" + }, + "assessment_category": { + "@id": "hc:assessment_category" + }, + "assigned_processor": { + "@id": "hc:class/CustodianArchive/assigned_processor" + }, + "associated_auxiliary_platform": { + "@type": "@id", + "@id": "hc:associated_auxiliary_platform" + }, + "associated_digital_platform": { + "@type": "@id", + "@id": "hc:associated_digital_platform" + }, + "associated_encompassing_bodies": { + "@type": "xsd:anyURI", + "@id": "hc:associated_encompassing_bodies" + }, + "auction_house": { + "@id": "schema:seller" + }, + "auction_sale_name": { + "@id": "hc:auction_sale_name" + }, + "authentication_required": { + "@type": "xsd:boolean", + "@id": "schema:authenticationType" + }, + "authors": { + "@id": "schema:author" + }, + "auxiliary_place_id": "@id", + "auxiliary_place_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/auxiliary-place/auxiliary_place_type" + }, + "auxiliary_places": { + "@type": "@id", + "@id": "org:hasSite" + }, + "auxiliary_platform_id": "@id", + "auxiliary_platform_type": { + "@type": "@id", + "@id": "hc:class/auxiliary-digital-platform/auxiliary_platform_type" + }, + "auxiliary_platforms": { + "@type": "@id", + "@id": "dcterms:hasPart" + }, + "availability_timespan": { + "@type": "@id", + "@id": "hc:class/WebPortalTypes/availability_timespan" + }, + "available_caption_languages": { + "@id": "hc:available_caption_languages" + }, + "average_entry_duration_seconds": { + "@type": "xsd:float", + "@id": "hc:average_entry_duration_seconds" + }, + "average_scene_duration_seconds": { + "@type": "xsd:float", + "@id": "hc:average_scene_duration_seconds" + }, + "backup_status": { + "@id": "hc:class/CustodianAdministration/backup_status" + }, + "base_surname": { + "@id": "pnv:baseSurname" + }, + "based_on_observations": { + "@type": "@id", + "@id": "hc:based_on_observations" + }, + "bay_number": { + "@id": "hc:bay_number" + }, + "begin_of_the_begin": { + "@type": "xsd:dateTime", + "@id": "crm:P82a_begin_of_the_begin" + }, + "begin_of_the_end": { + "@type": "xsd:dateTime", + "@id": "crm:P81b_begin_of_the_end" + }, + "beneficiary_groups": { + "@id": "schema:audience" + }, + "benefits": { + "@id": "hc:benefits" + }, + "bf_equivalent": { + "@type": "xsd:anyURI", + "@id": "hc:bf_equivalent" + }, + "binding": { + "@id": "bf:binding" + }, + "bio_custodian_subtype": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "skos:narrower" + }, + "bio_type_classification": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/outdoor-site/bio_type_classification" + }, + "birth_date": { + "@id": "sdo:birthDate" + }, + "birth_place": { + "@id": "sdo:birthPlace" + }, + "booking_required": { + "@type": "xsd:boolean", + "@id": "hc:class/education-center/booking_required" + }, + "borrower": { + "@type": "xsd:anyURI", + "@id": "crm:P29_custody_received_by" + }, + "borrower_contact": { + "@id": "schema:contactPoint" + }, + "bounding_box": { + "@id": "geosparql:hasBoundingBox" + }, + "box_number": { + "@type": "xsd:integer", + "@id": "hc:box_number" + }, + "branch_description": { + "@id": "hc:class/organization-branch/branch_description" + }, + "branch_head": { + "@id": "hc:class/organization-branch/branch_head" + }, + "branch_id": "@id", + "branch_name": { + "@id": "hc:class/organization-branch/branch_name" + }, + "branch_office_description": { + "@id": "hc:class/branch-office/branch_office_description" + }, + "branch_office_id": "@id", + "branch_office_name": { + "@id": "hc:class/branch-office/branch_office_name" + }, + "branch_service_area": { + "@id": "hc:class/branch-office/branch_service_area" + }, + "branch_staff_count": { + "@type": "xsd:integer", + "@id": "hc:class/branch-office/branch_staff_count" + }, + "branch_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/organization-branch/branch_type" + }, + "broader_type": { + "@type": "@id", + "@id": "skos:broader" + }, + "budget": { + "@id": "hc:budget" + }, + "budget_currency": { + "@id": "hc:class/Budget/budget_currency" + }, + "budget_description": { + "@id": "hc:class/Budget/budget_description" + }, + "budget_name": { + "@id": "hc:class/Budget/budget_name" + }, + "budget_status": { + "@id": "hc:class/Budget/budget_status" + }, + "budget_type": { + "@id": "hc:class/Budget/budget_type" + }, + "building_floor_area_sqm": { + "@type": "xsd:float", + "@id": "hc:class/historic-building/building_floor_area_sqm" + }, + "business_criticality": { + "@id": "hc:class/CustodianAdministration/business_criticality" + }, + "business_model": { + "@id": "schema:businessFunction" + }, + "cached_tokens": { + "@type": "xsd:integer", + "@id": "hc:class/LLMResponse/cached_tokens" + }, + "cadastral_id": { + "@id": "hc:class/GeoSpatialPlace/cadastral_id" + }, + "call_description": { + "@id": "hc:call_description" + }, + "call_id": "@id", + "call_identifiers": { + "@type": "xsd:anyURI", + "@id": "hc:call_identifiers" + }, + "call_short_name": { + "@id": "hc:call_short_name" + }, + "call_status": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:call_status" + }, + "call_title": { + "@id": "hc:call_title" + }, + "call_url": { + "@type": "xsd:anyURI", + "@id": "hc:call_url" + }, + "canonical_access_rules": { + "@type": "xsd:boolean", + "@id": "hc:canonical_access_rules" + }, + "canonical_value": { + "@id": "skos:notation" + }, + "capacity_cubic_meters": { + "@type": "xsd:float", + "@id": "hc:capacity_cubic_meters" + }, + "capacity_description": { + "@id": "hc:capacity_description" + }, + "capacity_items": { + "@type": "xsd:integer", + "@id": "hc:capacityItems" + }, + "capacity_linear_meters": { + "@type": "xsd:float", + "@id": "hc:capacity_linear_meters" + }, + "capital_budget": { + "@type": "xsd:decimal", + "@id": "hc:class/Budget/capital_budget" + }, + "caption_available": { + "@type": "xsd:boolean", + "@id": "hc:caption_available" + }, + "card_description": { + "@id": "dcterms:description" + }, + "card_description_en": { + "@id": "dcterms:description" + }, + "card_image_url": { + "@type": "xsd:anyURI", + "@id": "schema:image" + }, + "card_title": { + "@id": "dcterms:title" + }, + "card_title_en": { + "@id": "dcterms:title" + }, + "card_url": { + "@type": "xsd:anyURI", + "@id": "schema:url" + }, + "catalog_description": { + "@id": "schema:description" + }, + "catalog_entries_count": { + "@type": "xsd:integer", + "@id": "schema:numberOfItems" + }, + "catalog_for": { + "@type": "xsd:anyURI", + "@id": "schema:about" + }, + "catalog_id": "@id", + "catalog_raisonne_number": { + "@id": "dcterms:identifier" + }, + "catalog_subtitle": { + "@id": "schema:alternativeHeadline" + }, + "catalog_system": { + "@id": "schema:softwareApplication" + }, + "catalog_title": { + "@id": "schema:name" + }, + "catalog_type": { + "@id": "dcterms:type" + }, + "catalog_url": { + "@type": "xsd:anyURI", + "@id": "schema:url" + }, + "cataloging_standard": { + "@id": "dcterms:conformsTo" + }, + "category_assessments": { + "@type": "@id", + "@id": "hc:category_assessments" + }, + "category_measurement": { + "@id": "hc:category_measurement" + }, + "category_notes": { + "@id": "hc:category_notes" + }, + "category_status": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:category_status" + }, + "catering_place_description": { + "@id": "hc:class/catering-place/catering_place_description" + }, + "catering_place_id": "@id", + "catering_place_name": { + "@id": "hc:class/catering-place/catering_place_name" + }, + "catering_price_range": { + "@id": "hc:class/catering-place/catering_price_range" + }, + "catering_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/catering-place/catering_type" + }, + "certainty_level": { + "@id": "crm:P141_assigned" + }, + "certainty_notes": { + "@id": "hc:certainty_notes" + }, + "cessation_observed_in": { + "@type": "@id", + "@id": "hc:class/WebPortalTypes/cessation_observed_in" + }, + "change_rationale": { + "@id": "prov:hadReason" + }, + "character_count": { + "@type": "xsd:integer", + "@id": "hc:character_count" + }, + "circumstances_of_death": { + "@id": "wikidata:P1196" + }, + "city": { + "@id": "schema:addressLocality" + }, + "claim_extraction_method": { + "@id": "hc:claim_extraction_method" + }, + "claim_id": "@id", + "claim_notes": { + "@id": "hc:claim_notes" + }, + "claim_source_url": { + "@type": "xsd:anyURI", + "@id": "prov:used" + }, + "claim_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "dcterms:type" + }, + "claim_value": { + "@id": "rdf:value" + }, + "claims": { + "@type": "@id", + "@id": "hc:claims" + }, + "claims_count": { + "@type": "xsd:integer", + "@id": "schema:numberOfItems" + }, + "classification_status": { + "@id": "prov:wasInvalidatedBy" + }, + "classifies_place": { + "@type": "xsd:anyURI", + "@id": "hc:class/feature-place/classifies_place" + }, + "classroom_count": { + "@type": "xsd:integer", + "@id": "hc:class/education-center/classroom_count" + }, + "clear_thinking": { + "@type": "xsd:boolean", + "@id": "hc:class/LLMResponse/clear_thinking" + }, + "climate_control_type": { + "@id": "hc:class/warehouse/climate_control_type" + }, + "cms_category": { + "@id": "hc:class/CollectionManagementSystem/cms_category" + }, + "cms_detected": { + "@type": "xsd:boolean", + "@id": "schema:softwareApplication" + }, + "cms_id": "@id", + "cms_product_name": { + "@id": "hc:class/CollectionManagementSystem/cms_product_name" + }, + "cms_product_version": { + "@id": "hc:class/CollectionManagementSystem/cms_product_version" + }, + "co_funding_required": { + "@type": "xsd:boolean", + "@id": "hc:co_funding_required" + }, + "co_organized_by": { + "@type": "xsd:anyURI", + "@id": "schema:contributor" + }, + "collected_in": { + "@type": "@id", + "@id": "hc:class/ArticlesOfAssociation/collected_in" + }, + "collecting_scope": { + "@id": "schema:additionalProperty" + }, + "collection_access": { + "@id": "schema:publicAccess" + }, + "collection_broader_type": { + "@type": "@id", + "@id": "hc:collection_broader_type" + }, + "collection_id": "@id", + "collection_description": { + "@id": "dcterms:description" + }, + "collection_discovery_score": { + "@type": "xsd:float", + "@id": "hc:collectionDiscoveryScore" + }, + "collection_focus": { + "@id": "hc:class/WomensArchives/collection_focus" + }, + "collection_name": { + "@id": "dcterms:title" + }, + "collection_narrower_types": { + "@type": "@id", + "@id": "hc:collection_narrower_types" + }, + "collection_of": { + "@type": "@id", + "@id": "crm:P46i_forms_part_of" + }, + "collection_purpose": { + "@id": "dcterms:description" + }, + "collection_scope": { + "@id": "hc:class/WebArchive/collection_scope" + }, + "collection_size": { + "@id": "schema:numberOfItems" + }, + "collection_type": { + "@id": "dcterms:type" + }, + "collection_type_description": { + "@id": "hc:collection_type_description" + }, + "collection_type_id": "@id", + "collection_type_name": { + "@id": "hc:collection_type_name" + }, + "collection_type_ref": { + "@type": "@id", + "@id": "rico:hasRecordSetType" + }, + "collection_types": { + "@id": "dcterms:type" + }, + "collection_web_addresses": { + "@type": "xsd:anyURI", + "@id": "hc:class/digital-platform/collection_web_addresses" + }, + "collections_under_responsibility": { + "@type": "@id", + "@id": "tooi:heeft_informatieobject" + }, + "colonial": { + "@id": "dcterms:spatial" + }, + "comment_author": { + "@id": "hc:comment_author" + }, + "comment_author_channel_id": { + "@id": "hc:comment_author_channel_id" + }, + "comment_count": { + "@type": "xsd:integer", + "@id": "hc:comment_count" + }, + "comment_id": { + "@id": "hc:comment_id" + }, + "comment_like_count": { + "@type": "xsd:integer", + "@id": "hc:comment_like_count" + }, + "comment_published_at": { + "@type": "xsd:dateTime", + "@id": "hc:comment_published_at" + }, + "comment_replies": { + "@type": "@id", + "@id": "hc:comment_replies" + }, + "comment_reply_count": { + "@type": "xsd:integer", + "@id": "hc:comment_reply_count" + }, + "comment_text": { + "@id": "hc:comment_text" + }, + "comment_updated_at": { + "@type": "xsd:dateTime", + "@id": "hc:comment_updated_at" + }, + "comments_fetched": { + "@type": "xsd:integer", + "@id": "hc:comments_fetched" + }, + "commercial_activities": { + "@id": "schema:makesOffer" + }, + "commercial_custodian_subtype": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "skos:narrower" + }, + "commercial_operation": { + "@type": "xsd:boolean", + "@id": "schema:businessFunction" + }, + "commission_rate": { + "@id": "schema:price" + }, + "common_variants": { + "@id": "schema:alternateName" + }, + "community_engagement": { + "@id": "schema:event" + }, + "community_significance": { + "@id": "dcterms:description" + }, + "completion_tokens": { + "@type": "xsd:integer", + "@id": "hc:class/LLMResponse/completion_tokens" + }, + "complex_name": { + "@id": "hc:class/historic-building/complex_name" + }, + "compliance_status": { + "@id": "hc:compliance_status" + }, + "condition_after": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "crm:P44_has_condition" + }, + "condition_before": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "crm:P44_has_condition" + }, + "condition_description": { + "@id": "crm:P3_has_note" + }, + "condition_id": "@id", + "condition_notes": { + "@id": "crm:P44_has_condition" + }, + "condition_on_return": { + "@id": "hc:condition_on_return" + }, + "condition_policy": { + "@type": "@id", + "@id": "hc:condition_policy" + }, + "condition_status": { + "@id": "hc:class/historic-building/condition_status" + }, + "conditions": { + "@id": "hc:conditions" + }, + "confidence": { + "@type": "xsd:float", + "@id": "hc:confidence" + }, + "confidence_method": { + "@id": "prov:hadPlan" + }, + "confidence_score": { + "@type": "xsd:float", + "@id": "prov:confidence" + }, + "confidence_value": { + "@type": "xsd:float", + "@id": "rdf:value" + }, + "conflict_status": { + "@type": "@id", + "@id": "hc:hasConflictStatus" + }, + "destruction_date": { + "@type": "xsd:date", + "@id": "crm:P4_has_time-span" + }, + "is_rebuilding": { + "@type": "xsd:boolean", + "@id": "hc:class/ConflictStatus/is_rebuilding" + }, + "reported_date": { + "@type": "xsd:date", + "@id": "hc:class/ConflictStatus/reported_date" + }, + "sources": { + "@id": "prov:hadPrimarySource" + }, + "status": { + "@id": "schema:status" + }, + "connectivity_type": { + "@id": "hc:connectivity_type" + }, + "conservation_activities": { + "@id": "crm:P16_used_specific_object" + }, + "conservation_breeding": { + "@id": "hc:class/BioCustodianType/conservation_breeding" + }, + "conservation_history": { + "@id": "crm:P31i_was_modified_by" + }, + "conservation_lab": { + "@id": "schema:location" + }, + "conservation_notes": { + "@id": "skos:note" + }, + "conservation_records": { + "@type": "@id", + "@id": "crm:P44_has_condition" + }, + "conservation_specializations": { + "@id": "hc:class/conservation-lab/conservation_specializations" + }, + "conservation_status": { + "@id": "hc:class/outdoor-site/conservation_status" + }, + "lab_id": { + "@type": "xsd:anyURI", + "@id": "hc:class/conservation-lab/lab_id" + }, + "record_id": { + "@type": "xsd:anyURI", + "@id": "dcterms:identifier" + }, + "conservator": { + "@id": "crm:P14_carried_out_by" + }, + "conservator_affiliation": { + "@id": "schema:affiliation" + }, + "constituent_types": { + "@id": "dcterms:type" + }, + "construction_date": { + "@id": "hc:class/historic-building/construction_date" + }, + "construction_date_precision": { + "@id": "hc:class/historic-building/construction_date_precision" + }, + "contact": { + "@id": "foaf:mbox" + }, + "contact_point": { + "@id": "schema:contactPoint" + }, + "allocation_agencies": { + "@type": "@id", + "@id": "schema:hasOfferCatalog" + }, + "collections": { + "@type": "@id", + "@id": "hc:class/Container/collections" + }, + "countries": { + "@type": "@id", + "@id": "hc:class/Container/countries" + }, + "custodian_collections": { + "@type": "@id", + "@id": "hc:class/Container/custodian_collections" + }, + "custodian_identifiers": { + "@type": "@id", + "@id": "hc:class/Container/custodian_identifiers" + }, + "custodian_legal_statuses": { + "@type": "@id", + "@id": "hc:class/Container/custodian_legal_statuses" + }, + "custodian_names": { + "@type": "@id", + "@id": "hc:class/Container/custodian_names" + }, + "custodian_observations": { + "@type": "@id", + "@id": "hc:class/Container/custodian_observations" + }, + "custodian_places": { + "@type": "@id", + "@id": "hc:class/Container/custodian_places" + }, + "custodians": { + "@type": "@id", + "@id": "hc:class/Container/custodians" + }, + "digital_platforms": { + "@type": "@id", + "@id": "hc:class/Container/digital_platforms" + }, + "finding_aids": { + "@type": "@id", + "@id": "rico:isDescribedBy" + }, + "identifier_formats": { + "@type": "@id", + "@id": "hc:class/Container/identifier_formats" + }, + "iot_devices": { + "@type": "@id", + "@id": "sosa:hosts" + }, + "jurisdictions": { + "@type": "@id", + "@id": "hc:class/Container/jurisdictions" + }, + "organizational_structures": { + "@type": "@id", + "@id": "hc:class/Container/organizational_structures" + }, + "reconstruction_activities": { + "@type": "@id", + "@id": "hc:class/Container/reconstruction_activities" + }, + "registration_authorities": { + "@type": "@id", + "@id": "hc:class/Container/registration_authorities" + }, + "registration_numbers": { + "@type": "@id", + "@id": "rov:registration" + }, + "social_media_profiles": { + "@type": "@id", + "@id": "foaf:account" + }, + "standards": { + "@type": "@id", + "@id": "hc:class/Container/standards" + }, + "standards_organizations": { + "@type": "@id", + "@id": "hc:class/Container/standards_organizations" + }, + "subregions": { + "@type": "@id", + "@id": "hc:class/Container/subregions" + }, + "trade_registers": { + "@type": "@id", + "@id": "hc:class/Container/trade_registers" + }, + "contains_units": { + "@type": "@id", + "@id": "hc:contains_units" + }, + "content": { + "@id": "hc:class/LLMResponse/content" + }, + "content_blocks": { + "@id": "schema:text" + }, + "content_category": { + "@id": "hc:content_category" + }, + "content_changed": { + "@type": "xsd:boolean", + "@id": "hc:content_changed" + }, + "content_hash": { + "@id": "spdx:checksumValue" + }, + "content_language": { + "@id": "hc:content_language" + }, + "content_origin": { + "@id": "hc:content_origin" + }, + "content_title": { + "@id": "hc:content_title" + }, + "content_type": { + "@id": "hc:content_type" + }, + "contents_description": { + "@id": "hc:class/warehouse/contents_description" + }, + "also_allocation_agency": { + "@type": "@id", + "@id": "schema:sameAs" + }, + "authority_file_abbreviation": { + "@id": "schema:alternateName" + }, + "authority_file_name": { + "@id": "schema:name" + }, + "authority_file_url": { + "@type": "xsd:anyURI", + "@id": "schema:url" + }, + "contributes_to": { + "@type": "@id", + "@id": "schema:memberOf" + }, + "contribution_start_date": { + "@type": "xsd:date", + "@id": "schema:startDate" + }, + "contributor_code": { + "@id": "schema:identifier" + }, + "country": { + "@id": "schema:location" + }, + "entity_types_covered": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:about" + }, + "governance_representative": { + "@type": "xsd:boolean", + "@id": "schema:employee" + }, + "governance_role": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "org:role" + }, + "member_of": { + "@type": "@id", + "@id": "org:memberOf" + }, + "record_format": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "dcat:mediaType" + }, + "contributors": { + "@id": "schema:contributor" + }, + "coordinate_reference_system": { + "@id": "hc:class/GeoSpatialPlace/coordinate_reference_system" + }, + "corporate_integration": { + "@id": "schema:parentOrganization" + }, + "cost": { + "@type": "xsd:decimal", + "@id": "schema:price" + }, + "cost_currency": { + "@id": "schema:priceCurrency" + }, + "cost_usd": { + "@type": "xsd:float", + "@id": "schema:price" + }, + "courier_details": { + "@id": "hc:courier_details" + }, + "courier_required": { + "@type": "xsd:boolean", + "@id": "hc:courier_required" + }, + "cover_image_url": { + "@type": "xsd:anyURI", + "@id": "hc:cover_image_url" + }, + "coverage_area": { + "@id": "hc:coverage_area" + }, + "covers_country": { + "@type": "@id", + "@id": "schema:addressCountry" + }, + "covers_settlements": { + "@type": "@id", + "@id": "schema:containsPlace" + }, + "covers_subregions": { + "@type": "@id", + "@id": "schema:addressRegion" + }, + "crawler_version": { + "@id": "prov:wasAssociatedWith" + }, + "created": { + "@type": "xsd:dateTime", + "@id": "schema:dateCreated" + }, + "created_by_project": { + "@type": "@id", + "@id": "hc:created_by_project" + }, + "created_date": { + "@type": "xsd:date", + "@id": "hc:created_date" + }, + "creating_agency": { + "@id": "hc:class/CustodianArchive/creating_agency" + }, + "creating_function": { + "@id": "hc:class/CustodianAdministration/creating_function" + }, + "creating_organization": { + "@id": "hc:creating_organization" + }, + "creation_place": { + "@type": "@id", + "@id": "schema:locationCreated" + }, + "creation_timespan": { + "@type": "@id", + "@id": "crm:P4_has_time-span" + }, + "creator": { + "@id": "dcterms:creator" + }, + "creator_role": { + "@id": "crm:P14.1_in_the_role_of" + }, + "credentials_required": { + "@id": "hc:credentials_required" + }, + "css_selector": { + "@id": "hc:cssSelector" + }, + "cuisine_type": { + "@id": "hc:class/catering-place/cuisine_type" + }, + "cultural_context": { + "@id": "dcterms:coverage" + }, + "cultural_protocol_url": { + "@type": "xsd:anyURI", + "@id": "hc:cultural_protocol_url" + }, + "curated_by": { + "@id": "schema:director" + }, + "curated_holding": { + "@type": "@id", + "@id": "crm:P147_curated" + }, + "curation_activities": { + "@type": "@id", + "@id": "crm:P147i_was_curated_by" + }, + "currency": { + "@id": "hc:currency" + }, + "current_exhibition": { + "@id": "hc:class/exhibition-space/current_exhibition" + }, + "current_item_count": { + "@type": "xsd:integer", + "@id": "hc:current_item_count" + }, + "current_keeper": { + "@type": "xsd:anyURI", + "@id": "crm:P50_has_current_keeper" + }, + "current_location": { + "@type": "@id", + "@id": "schema:location" + }, + "current_use": { + "@id": "hc:class/historic-building/current_use" + }, + "current_utilization_percent": { + "@type": "xsd:float", + "@id": "hc:current_utilization_percent" + }, + "custodial_history": { + "@id": "rico:history" + }, + "custodian": { + "@type": "@id", + "@id": "rico:hasOrHadHolder" + }, + "hc_id": "@id", + "custodian_only": { + "@type": "xsd:boolean", + "@id": "hc:custodianOnly" + }, + "custodian_type": { + "@type": "@id", + "@id": "org:classification" + }, + "custodian_type_broader": { + "@type": "@id", + "@id": "hc:class/CustodianType/custodian_type_broader" + }, + "custodian_type_narrower": { + "@type": "@id", + "@id": "hc:class/CustodianType/custodian_type_narrower" + }, + "custodian_type_related": { + "@type": "@id", + "@id": "hc:class/CustodianType/custodian_type_related" + }, + "custodian_types": { + "@type": "xsd:anyURI", + "@id": "hc:custodianTypes" + }, + "custodian_types_primary": { + "@type": "xsd:anyURI", + "@id": "hc:custodianTypesPrimary" + }, + "custodian_types_rationale": { + "@id": "hc:custodianTypesRationale" + }, + "type_id": { + "@type": "xsd:anyURI", + "@id": "hc:class/CustodianType/type_id" + }, + "custody_history": { + "@id": "hc:class/CustodianCollection/custody_history" + }, + "cut_count": { + "@type": "xsd:integer", + "@id": "hc:cut_count" + }, + "data_format": { + "@id": "hc:data_format" + }, + "data_license_policy": { + "@type": "@id", + "@id": "odrl:hasPolicy" + }, + "data_quality_flags": { + "@id": "prov:qualifiedAttribution" + }, + "data_repository": { + "@type": "xsd:anyURI", + "@id": "schema:DataCatalog" + }, + "data_sensitivity": { + "@id": "hc:class/CustodianAdministration/data_sensitivity" + }, + "data_service_endpoints": { + "@type": "@id", + "@id": "dcat:servesDataset" + }, + "allows_commercial_use": { + "@type": "xsd:boolean", + "@id": "cc:commercialUse" + }, + "allows_derivatives": { + "@type": "xsd:boolean", + "@id": "cc:DerivativeWorks" + }, + "deed_url": { + "@type": "xsd:anyURI", + "@id": "schema:url" + }, + "jurisdiction": { + "@type": "@id", + "@id": "gleif_base:hasLegalJurisdiction" + }, + "license_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:additionalType" + }, + "license_url": { + "@type": "xsd:anyURI", + "@id": "cc:legalcode" + }, + "openness_level": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:accessMode" + }, + "requires_attribution": { + "@type": "xsd:boolean", + "@id": "cc:attributionRequired" + }, + "requires_sharealike": { + "@type": "xsd:boolean", + "@id": "cc:shareAlike" + }, + "spdx_identifier": { + "@id": "dcterms:identifier" + }, + "steward_organization": { + "@id": "schema:maintainer" + }, + "version": { + "@id": "schema:version" + }, + "advocacy_activities": { + "@id": "schema:potentialAction" + }, + "default_license": { + "@type": "@id", + "@id": "schema:license" + }, + "open_data_principles": { + "@id": "schema:valueReference" + }, + "openness_stance": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:position" + }, + "policy_effective_date": { + "@type": "xsd:date", + "@id": "schema:datePublished" + }, + "policy_name": { + "@id": "dcterms:title" + }, + "policy_url": { + "@type": "xsd:anyURI", + "@id": "schema:url" + }, + "service_specific_licenses": { + "@type": "@id", + "@id": "schema:hasPart" + }, + "authentication_method": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:potentialAction" + }, + "cors_enabled": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "discovery_provenance": { + "@id": "dcterms:provenance" + }, + "documentation_url": { + "@type": "xsd:anyURI", + "@id": "schema:documentation" + }, + "endpoint_description_url": { + "@type": "xsd:anyURI", + "@id": "dcat:endpointDescription" + }, + "endpoint_id": "@id", + "endpoint_name": { + "@id": "schema:name" + }, + "endpoint_type": { + "@type": "@id", + "@id": "dcterms:type" + }, + "endpoint_url": { + "@type": "xsd:anyURI", + "@id": "dcat:endpointURL" + }, + "last_verified": { + "@type": "xsd:date", + "@id": "schema:dateModified" + }, + "rate_limit": { + "@id": "schema:rateValue" + }, + "serves_dataset": { + "@type": "xsd:anyURI", + "@id": "dcat:servesDataset" + }, + "heritage_sector_usage": { + "@id": "skos:scopeNote" + }, + "narrower_types": { + "@type": "@id", + "@id": "skos:narrower" + }, + "protocol_name": { + "@id": "dcterms:conformsTo" + }, + "protocol_version": { + "@id": "schema:version" + }, + "related_types": { + "@type": "@id", + "@id": "skos:related" + }, + "specification_url": { + "@type": "xsd:anyURI", + "@id": "schema:documentation" + }, + "type_description": { + "@id": "hc:class/CustodianType/type_description" + }, + "type_name": { + "@id": "skos:prefLabel" + }, + "typical_http_methods": { + "@id": "schema:httpMethod" + }, + "typical_response_formats": { + "@id": "dcterms:format" + }, + "dataset_description": { + "@id": "dcterms:description" + }, + "dataset_identifier": { + "@id": "dcterms:identifier" + }, + "dataset_title": { + "@id": "dcterms:title" + }, + "date_created": { + "@id": "schema:dateCreated" + }, + "date_of_death": { + "@type": "@id", + "@id": "schema:deathDate" + }, + "date_retrieved": { + "@type": "xsd:date", + "@id": "prov:endedAtTime" + }, + "date_value": { + "@id": "hc:date_value" + }, + "de": { + "@id": "hc:de" + }, + "dealer_name": { + "@id": "hc:dealer_name" + }, + "death_place": { + "@id": "sdo:deathPlace" + }, + "deceased": { + "@type": "xsd:boolean", + "@id": "schema:deathDate" + }, + "decommission_date": { + "@type": "xsd:date", + "@id": "hc:decommission_date" + }, + "default_access_policy": { + "@type": "@id", + "@id": "hc:default_access_policy" + }, + "default_audio_language": { + "@id": "hc:default_audio_language" + }, + "default_language": { + "@id": "schema:inLanguage" + }, + "default_position": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:default_position" + }, + "defined_by_standard": { + "@type": "@id", + "@id": "skos:inScheme" + }, + "definition": { + "@id": "schema:description" + }, + "deliverables": { + "@id": "schema:result" + }, + "departement_code": { + "@id": "hc:departement_code" + }, + "departement_name": { + "@id": "hc:departement_name" + }, + "department_code": { + "@id": "hc:department_code" + }, + "department_id": { + "@type": "xsd:anyURI", + "@id": "hc:department_id" + }, + "department_description": { + "@id": "hc:department_description" + }, + "department_head": { + "@type": "@id", + "@id": "hc:department_head" + }, + "department_name": { + "@id": "hc:department_name" + }, + "deployment_date": { + "@type": "xsd:date", + "@id": "hc:class/CollectionManagementSystem/deployment_date" + }, + "depositing_organizations": { + "@id": "hc:depositing_organizations" + }, + "derived_from_entity": { + "@type": "@id", + "@id": "prov:wasDerivedFrom" + }, + "detected_faces": { + "@type": "@id", + "@id": "hc:detected_faces" + }, + "detected_landmarks": { + "@type": "@id", + "@id": "hc:detected_landmarks" + }, + "detected_logos": { + "@type": "@id", + "@id": "hc:detected_logos" + }, + "detected_objects": { + "@type": "@id", + "@id": "hc:detected_objects" + }, + "person_id": "@id", + "detection_count": { + "@type": "xsd:integer", + "@id": "hc:detection_count" + }, + "detection_level": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:detection_level" + }, + "detection_threshold": { + "@type": "xsd:float", + "@id": "hc:detection_threshold" + }, + "device_count": { + "@type": "xsd:integer", + "@id": "hc:device_count" + }, + "device_id": "@id", + "device_manufacturer": { + "@id": "hc:device_manufacturer" + }, + "device_model": { + "@id": "hc:device_model" + }, + "device_name": { + "@id": "hc:device_name" + }, + "device_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:device_type" + }, + "digital_platform": { + "@type": "@id", + "@id": "foaf:homepage" + }, + "digital_platform_score": { + "@type": "xsd:float", + "@id": "hc:digitalPlatformScore" + }, + "digital_presence_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:digital_presence_type" + }, + "digital_surrogate_url": { + "@type": "xsd:anyURI", + "@id": "schema:url" + }, + "digital_surrogates": { + "@id": "premis:hasRepresentation" + }, + "platform_id": { + "@type": "xsd:anyURI", + "@id": "hc:class/digital-platform/platform_id" + }, + "platform_type_id": { + "@type": "xsd:anyURI", + "@id": "dcterms:identifier" + }, + "digitization_budget": { + "@type": "xsd:decimal", + "@id": "hc:class/Budget/digitization_budget" + }, + "digitization_status": { + "@id": "premis:hasRelatedStatementInformation" + }, + "dimensions": { + "@id": "schema:size" + }, + "diocese_name": { + "@id": "hc:diocese_name" + }, + "dislike_count": { + "@type": "xsd:integer", + "@id": "hc:dislike_count" + }, + "display_location": { + "@id": "hc:display_location" + }, + "disposition_services": { + "@id": "hc:disposition_services" + }, + "dissolution_date": { + "@type": "xsd:date", + "@id": "schema:dissolutionDate" + }, + "dissolve_count": { + "@type": "xsd:integer", + "@id": "hc:dissolve_count" + }, + "dissolved_date": { + "@type": "xsd:date", + "@id": "hc:dissolved_date" + }, + "document_description": { + "@id": "hc:class/ArticlesOfAssociation/document_description" + }, + "document_title": { + "@id": "hc:class/ArticlesOfAssociation/document_title" + }, + "document_type": { + "@id": "hc:class/ArticlesOfAssociation/document_type" + }, + "documentation": { + "@id": "dcterms:bibliographicCitation" + }, + "documentation_produced": { + "@id": "prov:generated" + }, + "documentation_source": { + "@type": "xsd:anyURI", + "@id": "dcterms:source" + }, + "documentation_sources": { + "@type": "xsd:anyURI", + "@id": "dcterms:source" + }, + "documentation_urls": { + "@type": "xsd:anyURI", + "@id": "schema:url" + }, + "documented_by": { + "@type": "xsd:anyURI", + "@id": "hc:class/Budget/documented_by" + }, + "doi": { + "@id": "bibo:doi" + }, + "domain_context": { + "@id": "hc:domain_context" + }, + "scheme_id": "@id", + "download_endpoint": { + "@type": "@id", + "@id": "hc:class/WebPortalTypes/download_endpoint" + }, + "drawer_number": { + "@type": "xsd:integer", + "@id": "hc:drawer_number" + }, + "dual_class_link": { + "@type": "@id", + "@id": "hc:dualClassLink" + }, + "dual_class_role": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:dualClassRole" + }, + "duration": { + "@id": "hc:duration" + }, + "ead_id": { + "@id": "rico:identifier" + }, + "archive_code_examples": { + "@id": "schema:workExample" + }, + "archive_code_format": { + "@id": "dcterms:identifier" + }, + "base_url": { + "@type": "xsd:anyURI", + "@id": "dcat:endpointURL" + }, + "batch_download_available": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "compression": { + "@id": "schema:encodingFormat" + }, + "default_namespace": { + "@type": "xsd:anyURI", + "@id": "schema:additionalProperty" + }, + "ead_schema_url": { + "@type": "xsd:anyURI", + "@id": "schema:schemaVersion" + }, + "ead_version": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "dcterms:conformsTo" + }, + "encoding": { + "@id": "schema:encodingType" + }, + "example_url": { + "@type": "xsd:anyURI", + "@id": "schema:workExample" + }, + "includes_controlaccess": { + "@type": "xsd:boolean", + "@id": "schema:hasPart" + }, + "includes_dao_links": { + "@type": "xsd:boolean", + "@id": "schema:associatedMedia" + }, + "includes_dtd_declaration": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "includes_index": { + "@type": "xsd:boolean", + "@id": "schema:hasPart" + }, + "isad_g_compliant": { + "@type": "xsd:boolean", + "@id": "dcterms:conformsTo" + }, + "language_of_description": { + "@id": "dcterms:language" + }, + "max_hierarchy_depth": { + "@type": "xsd:integer", + "@id": "schema:maxValue" + }, + "multilevel_description": { + "@type": "xsd:boolean", + "@id": "schema:hasPart" + }, + "namespace_aware": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "supports_partial_download": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "transform_options": { + "@id": "schema:additionalProperty" + }, + "url_pattern": { + "@id": "hydra:template" + }, + "ebook_url": { + "@type": "xsd:anyURI", + "@id": "schema:contentUrl" + }, + "ecclesiastical_province": { + "@id": "hc:ecclesiastical_province" + }, + "editors": { + "@id": "schema:editor" + }, + "education_center_description": { + "@id": "hc:class/education-center/education_center_description" + }, + "education_center_id": "@id", + "education_center_name": { + "@id": "hc:class/education-center/education_center_name" + }, + "education_contact_email": { + "@id": "hc:class/education-center/education_contact_email" + }, + "education_level": { + "@id": "schema:educationalLevel" + }, + "education_provider_subtype": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "skos:narrower" + }, + "education_type_classification": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/education-center/education_type_classification" + }, + "student_services": { + "@id": "schema:serviceType" + }, + "teaching_collections": { + "@id": "schema:educationalUse" + }, + "effective_date": { + "@type": "xsd:date", + "@id": "schema:datePublished" + }, + "eligible_applicants": { + "@id": "hc:eligible_applicants" + }, + "eligible_countries": { + "@id": "hc:eligible_countries" + }, + "embargo_end_date": { + "@type": "xsd:date", + "@id": "schema:expires" + }, + "embargo_reason": { + "@id": "hc:embargo_reason" + }, + "emic_name": { + "@id": "skos:prefLabel" + }, + "en": { + "@id": "hc:en" + }, + "encompasses": { + "@type": "@id", + "@id": "org:hasSubOrganization" + }, + "encompassing_body": { + "@type": "@id", + "@id": "org:subOrganizationOf" + }, + "end": { + "@id": "schema:endDate" + }, + "end_date": { + "@type": "xsd:date", + "@id": "schema:endDate" + }, + "end_of_the_begin": { + "@type": "xsd:dateTime", + "@id": "crm:P81a_end_of_the_begin" + }, + "end_of_the_end": { + "@type": "xsd:dateTime", + "@id": "crm:P82b_end_of_the_end" + }, + "end_seconds": { + "@type": "xsd:float", + "@id": "hc:end_seconds" + }, + "end_time": { + "@id": "hc:end_time" + }, + "ended_at_time": { + "@type": "xsd:dateTime", + "@id": "prov:endedAtTime" + }, + "endorsement_source": { + "@type": "xsd:anyURI", + "@id": "prov:hadPrimarySource" + }, + "endowment_draw": { + "@type": "xsd:decimal", + "@id": "hc:class/Budget/endowment_draw" + }, + "engagement_rate": { + "@type": "xsd:float", + "@id": "hc:engagement_rate" + }, + "entry_count": { + "@type": "xsd:integer", + "@id": "hc:entry_count" + }, + "environmental_conditions": { + "@id": "crm:P3_has_note" + }, + "environmental_requirement": { + "@type": "@id", + "@id": "hc:environmental_requirement" + }, + "environmental_zones": { + "@type": "@id", + "@id": "hc:environmental_zones" + }, + "zone_id": { + "@type": "xsd:anyURI", + "@id": "hc:zone_id" + }, + "equipment_types": { + "@id": "hc:class/conservation-lab/equipment_types" + }, + "essays": { + "@id": "schema:hasPart" + }, + "established_date": { + "@type": "xsd:date", + "@id": "hc:established_date" + }, + "estimated_extent": { + "@id": "hc:class/CustodianArchive/estimated_extent" + }, + "estimated_volume": { + "@id": "hc:class/CustodianAdministration/estimated_volume" + }, + "etag": { + "@id": "hc:etag" + }, + "event": { + "@id": "hc:event" + }, + "event_date": { + "@type": "xsd:date", + "@id": "crm:P4_has_time-span" + }, + "event_date_text": { + "@id": "dcterms:date" + }, + "event_description": { + "@id": "dcterms:description" + }, + "event_en": { + "@id": "hc:event_en" + }, + "event_id": "@id", + "event_label": { + "@id": "skos:prefLabel" + }, + "event_location": { + "@type": "@id", + "@id": "hc:event_location" + }, + "event_notes": { + "@id": "skos:note" + }, + "event_timespan": { + "@type": "@id", + "@id": "crm:P4_has_time-span" + }, + "event_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "dct:type" + }, + "evidence_documentation": { + "@type": "xsd:anyURI", + "@id": "hc:evidence_documentation" + }, + "evidence_gaps": { + "@id": "dcterms:requires" + }, + "examination_methods": { + "@id": "crm:P16_used_specific_object" + }, + "example_instances": { + "@id": "skos:example" + }, + "example_platforms": { + "@id": "skos:example" + }, + "example_portals": { + "@id": "skos:example" + }, + "execution_date": { + "@type": "xsd:date", + "@id": "hc:class/ArticlesOfAssociation/execution_date" + }, + "exhibited_in": { + "@type": "xsd:anyURI", + "@id": "crm:P12i_was_present_at" + }, + "object_id": { + "@type": "xsd:anyURI", + "@id": "dcterms:identifier" + }, + "exhibition_capacity": { + "@type": "xsd:integer", + "@id": "hc:class/exhibition-space/exhibition_capacity" + }, + "exhibition_catalog_url": { + "@type": "xsd:anyURI", + "@id": "rdfs:seeAlso" + }, + "exhibition_catalogs": { + "@type": "@id", + "@id": "schema:workExample" + }, + "exhibition_description": { + "@id": "schema:description" + }, + "exhibition_documentation": { + "@type": "xsd:anyURI", + "@id": "rdfs:seeAlso" + }, + "exhibition_id": { + "@type": "xsd:anyURI", + "@id": "dcterms:identifier" + }, + "exhibition_floor_area_sqm": { + "@type": "xsd:float", + "@id": "hc:class/exhibition-space/exhibition_floor_area_sqm" + }, + "exhibition_focus": { + "@id": "dcterms:subject" + }, + "exhibition_location": { + "@type": "@id", + "@id": "schema:location" + }, + "exhibition_model": { + "@id": "schema:description" + }, + "exhibition_name": { + "@id": "schema:name" + }, + "exhibition_program": { + "@id": "schema:description" + }, + "exhibition_ref": { + "@type": "xsd:anyURI", + "@id": "crm:P12i_was_present_at" + }, + "exhibition_schedule": { + "@id": "hc:class/exhibition-space/exhibition_schedule" + }, + "exhibition_space_description": { + "@id": "hc:class/exhibition-space/exhibition_space_description" + }, + "exhibition_space_id": "@id", + "exhibition_space_name": { + "@id": "hc:class/exhibition-space/exhibition_space_name" + }, + "exhibition_status": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:eventStatus" + }, + "exhibition_subtitle": { + "@id": "schema:alternativeHeadline" + }, + "exhibition_timespan": { + "@type": "@id", + "@id": "crm:P4_has_time-span" + }, + "exhibition_type": { + "@id": "dcterms:type" + }, + "exhibition_url": { + "@type": "xsd:anyURI", + "@id": "schema:url" + }, + "exhibition_venue": { + "@id": "schema:locationCreated" + }, + "exhibitions": { + "@type": "@id", + "@id": "schema:event" + }, + "expected_transfer_date": { + "@type": "xsd:date", + "@id": "hc:class/CustodianAdministration/expected_transfer_date" + }, + "expertise_areas": { + "@id": "schema:knowsAbout" + }, + "exposed_via_portal": { + "@type": "@id", + "@id": "schema:isPartOf" + }, + "exposes_collections": { + "@type": "@id", + "@id": "schema:hasPart" + }, + "extension_count": { + "@type": "xsd:integer", + "@id": "hc:extension_count" + }, + "extent": { + "@id": "dcterms:extent" + }, + "extent_items": { + "@type": "xsd:integer", + "@id": "schema:numberOfItems" + }, + "external_funding": { + "@type": "xsd:decimal", + "@id": "hc:class/Budget/external_funding" + }, + "external_identifiers": { + "@type": "xsd:anyURI", + "@id": "dcterms:identifier" + }, + "external_links": { + "@type": "xsd:anyURI", + "@id": "rdfs:seeAlso" + }, + "external_resources": { + "@type": "@id", + "@id": "dcterms:references" + }, + "extraction_agent": { + "@id": "pav:createdBy" + }, + "extraction_confidence": { + "@type": "xsd:float", + "@id": "prov:value" + }, + "extraction_date": { + "@type": "xsd:dateTime", + "@id": "hc:class/ExtractionMetadata/extraction_date" + }, + "extraction_metadata": { + "@type": "@id", + "@id": "prov:wasGeneratedBy" + }, + "extraction_method": { + "@id": "prov:wasGeneratedBy" + }, + "extraction_notes": { + "@id": "dcterms:description" + }, + "extraction_timestamp": { + "@type": "xsd:dateTime", + "@id": "hc:extractionTimestamp" + }, + "face_bbox": { + "@type": "xsd:float", + "@id": "hc:face_bbox" + }, + "face_confidence": { + "@type": "xsd:float", + "@id": "hc:face_confidence" + }, + "face_segment": { + "@type": "@id", + "@id": "hc:face_segment" + }, + "facility_design": { + "@id": "schema:amenityFeature" + }, + "fade_count": { + "@type": "xsd:integer", + "@id": "hc:fade_count" + }, + "favorite_count": { + "@type": "xsd:integer", + "@id": "hc:favorite_count" + }, + "feature_class": { + "@id": "geonames:featureClass" + }, + "feature_code": { + "@id": "geonames:featureCode" + }, + "feature_description": { + "@id": "hc:class/feature-place/feature_description" + }, + "feature_language": { + "@id": "hc:class/feature-place/feature_language" + }, + "feature_name": { + "@id": "hc:class/feature-place/feature_name" + }, + "feature_note": { + "@id": "hc:class/feature-place/feature_note" + }, + "feature_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/feature-place/feature_type" + }, + "feature_type_classification": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/historic-building/feature_type_classification" + }, + "feature_types": { + "@id": "dcterms:type" + }, + "featured_items": { + "@type": "@id", + "@id": "schema:hasPart" + }, + "featured_objects": { + "@type": "@id", + "@id": "crm:P16_used_specific_object" + }, + "featured_works": { + "@id": "schema:workFeatured" + }, + "fee_amount": { + "@id": "hc:fee_amount" + }, + "fee_required": { + "@type": "xsd:boolean", + "@id": "hc:fee_required" + }, + "feeds_portal": { + "@type": "@id", + "@id": "hc:feeds_portal" + }, + "fellows_count": { + "@type": "xsd:integer", + "@id": "hc:class/research-center/fellows_count" + }, + "batch_download_format": { + "@id": "dcterms:format" + }, + "content_disposition": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:additionalProperty" + }, + "filename_in_url": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "identifier_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "dcterms:identifier" + }, + "max_file_size_mb": { + "@type": "xsd:integer", + "@id": "schema:contentSize" + }, + "supported_formats": { + "@id": "hc:supported_formats" + }, + "supported_levels": { + "@id": "schema:encodingFormat" + }, + "supports_batch_download": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "supports_range_requests": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "supports_streaming": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "thumbnail_dimensions": { + "@id": "schema:width" + }, + "typical_file_size_mb": { + "@type": "xsd:integer", + "@id": "schema:contentSize" + }, + "watermark_applied": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "finding_aid_notes": { + "@id": "skos:note" + }, + "finding_aid_scope_note": { + "@id": "skos:scopeNote" + }, + "finding_aid_type": { + "@id": "rico:hasRecordSetType" + }, + "finding_aid_type_definition": { + "@id": "skos:definition" + }, + "finding_aid_type_id": "@id", + "finding_aid_type_name": { + "@id": "skos:prefLabel" + }, + "finding_aids_format": { + "@id": "dcterms:format" + }, + "finish_reason": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/LLMResponse/finish_reason" + }, + "fire_suppression_type": { + "@id": "hc:fire_suppression_type" + }, + "fiscal_year_end": { + "@type": "xsd:date", + "@id": "hc:class/Budget/fiscal_year_end" + }, + "fiscal_year_start": { + "@type": "xsd:date", + "@id": "hc:class/Budget/fiscal_year_start" + }, + "fixity_check_date": { + "@type": "xsd:date", + "@id": "premis:fixity" + }, + "fixity_info": { + "@id": "hc:class/auxiliary-digital-platform/fixity_info" + }, + "flood_protection_required": { + "@type": "xsd:boolean", + "@id": "hc:flood_protection_required" + }, + "follow_up_date": { + "@type": "xsd:date", + "@id": "schema:scheduledTime" + }, + "follower_count": { + "@type": "xsd:integer", + "@id": "hc:follower_count" + }, + "following_activity": { + "@type": "@id", + "@id": "prov:informed" + }, + "following_count": { + "@type": "xsd:integer", + "@id": "hc:following_count" + }, + "footnotes": { + "@id": "skos:note" + }, + "format": { + "@id": "dcterms:format" + }, + "founded_year": { + "@type": "xsd:integer", + "@id": "schema:foundingDate" + }, + "founding_date": { + "@type": "xsd:date", + "@id": "hc:class/UniversityArchive/founding_date" + }, + "founding_date_diocese": { + "@type": "xsd:date", + "@id": "hc:founding_date_diocese" + }, + "fr": { + "@id": "hc:fr" + }, + "frame_rate": { + "@type": "xsd:float", + "@id": "hc:frame_rate" + }, + "frame_sample_rate": { + "@type": "xsd:float", + "@id": "hc:frame_sample_rate" + }, + "from_location": { + "@type": "@id", + "@id": "hc:from_location" + }, + "from_owner": { + "@type": "xsd:anyURI", + "@id": "crm:P23_transferred_title_from" + }, + "from_owner_text": { + "@id": "crm:P23_transferred_title_from" + }, + "full_extracted_text": { + "@id": "hc:full_extracted_text" + }, + "full_name": { + "@id": "rov:legalName" + }, + "full_text": { + "@id": "hc:full_text" + }, + "functional_integration": { + "@id": "schema:organizer" + }, + "funded_projects": { + "@type": "xsd:anyURI", + "@id": "hc:funded_projects" + }, + "funding_amount": { + "@id": "hc:funding_amount" + }, + "funding_call": { + "@type": "xsd:anyURI", + "@id": "hc:funding_call" + }, + "funding_focus": { + "@id": "hc:funding_focus" + }, + "funding_programs": { + "@id": "schema:knowsAbout" + }, + "funding_rate": { + "@id": "hc:funding_rate" + }, + "funding_schemes": { + "@id": "schema:hasFundingProgram" + }, + "funding_source": { + "@id": "schema:funder" + }, + "requirement_id": "@id", + "gallery_subtype": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "skos:narrower" + }, + "gallery_type_classification": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/exhibition-space/gallery_type_classification" + }, + "gdpr_relevant": { + "@type": "xsd:boolean", + "@id": "hc:class/CustodianAdministration/gdpr_relevant" + }, + "gender_identity": { + "@id": "schema:gender" + }, + "general_heritage_score": { + "@type": "xsd:float", + "@id": "hc:generalHeritageScore" + }, + "generated_by": { + "@id": "hc:generated_by" + }, + "generates": { + "@type": "@id", + "@id": "prov:generated" + }, + "generation_method": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:generation_method" + }, + "generation_timestamp": { + "@type": "xsd:dateTime", + "@id": "hc:generation_timestamp" + }, + "geographic_coverage": { + "@type": "@id", + "@id": "dcterms:spatial" + }, + "geographic_restriction": { + "@id": "hc:geographicRestriction" + }, + "geographic_scope": { + "@id": "schema:areaServed" + }, + "geometry_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/GeoSpatialPlace/geometry_type" + }, + "geometry_wkt": { + "@id": "geosparql:asWKT" + }, + "geonames_id": { + "@type": "xsd:integer", + "@id": "gn:geonamesID" + }, + "geospatial_id": "@id", + "geospatial_source": { + "@id": "dcterms:source" + }, + "ghcid": { + "@id": "hc:ghcid" + }, + "gift_shop": { + "@type": "@id", + "@id": "hc:gift_shop" + }, + "giftshop_price_range": { + "@id": "hc:class/gift-shop/giftshop_price_range" + }, + "shop_id": { + "@type": "xsd:anyURI", + "@id": "hc:class/gift-shop/shop_id" + }, + "given_name": { + "@id": "pnv:givenName" + }, + "glamorcubesfixphdnt_code": { + "@id": "hc:class/CustodianType/glamorcubesfixphdnt_code" + }, + "gleif_jurisdiction_code": { + "@id": "gleif_base:hasCoverageArea" + }, + "gleif_ra_code": { + "@id": "hc:class/trade-register/gleif_ra_code" + }, + "governance_authority": { + "@id": "hc:governance_authority" + }, + "governance_clauses": { + "@id": "hc:class/ArticlesOfAssociation/governance_clauses" + }, + "governance_structure": { + "@type": "@id", + "@id": "org:hasUnit" + }, + "governance_body": { + "@id": "org:reportsTo" + }, + "organizational_units": { + "@id": "org:hasUnit" + }, + "structure_type": { + "@id": "schema:additionalType" + }, + "governing_body": { + "@type": "xsd:anyURI", + "@id": "org:linkedTo" + }, + "growth_rate": { + "@id": "hc:class/CustodianAdministration/growth_rate" + }, + "halc_adm1_code": { + "@id": "hc:class/ServiceArea/halc_adm1_code" + }, + "halc_adm2_name": { + "@id": "hc:class/ServiceArea/halc_adm2_name" + }, + "handwriting_confidence": { + "@type": "xsd:float", + "@id": "hc:handwriting_confidence" + }, + "has_administration": { + "@type": "@id", + "@id": "rico:hasOrHadPart" + }, + "has_articles_of_association": { + "@type": "@id", + "@id": "hc:class/CustodianLegalStatus/has_articles_of_association" + }, + "has_av_equipment": { + "@type": "xsd:boolean", + "@id": "hc:class/education-center/has_av_equipment" + }, + "has_boundary": { + "@type": "@id", + "@id": "geosparql:hasGeometry" + }, + "has_budget": { + "@type": "@id", + "@id": "frapo:hasFunding" + }, + "has_climate_control": { + "@type": "xsd:boolean", + "@id": "hc:class/conservation-lab/has_climate_control" + }, + "has_collection": { + "@type": "@id", + "@id": "crm:P46_is_composed_of" + }, + "has_computer_terminals": { + "@type": "xsd:boolean", + "@id": "hc:class/reading-room/has_computer_terminals" + }, + "has_deacidification_facility": { + "@type": "xsd:boolean", + "@id": "hc:class/conservation-lab/has_deacidification_facility" + }, + "has_derived_observation": { + "@type": "@id", + "@id": "prov:hadDerivation" + }, + "has_feature_type": { + "@type": "@id", + "@id": "dcterms:type" + }, + "has_fellows_program": { + "@type": "xsd:boolean", + "@id": "hc:class/research-center/has_fellows_program" + }, + "has_forklift_access": { + "@type": "xsd:boolean", + "@id": "hc:class/warehouse/has_forklift_access" + }, + "has_fume_hoods": { + "@type": "xsd:boolean", + "@id": "hc:class/conservation-lab/has_fume_hoods" + }, + "has_geospatial_location": { + "@type": "@id", + "@id": "geosparql:hasGeometry" + }, + "has_hands_on_facilities": { + "@type": "xsd:boolean", + "@id": "hc:class/education-center/has_hands_on_facilities" + }, + "has_imaging_equipment": { + "@type": "xsd:boolean", + "@id": "hc:class/conservation-lab/has_imaging_equipment" + }, + "has_loading_dock": { + "@type": "xsd:boolean", + "@id": "hc:class/warehouse/has_loading_dock" + }, + "has_local_collection": { + "@type": "xsd:boolean", + "@id": "hc:class/branch-office/has_local_collection" + }, + "has_lockers": { + "@type": "xsd:boolean", + "@id": "hc:class/reading-room/has_lockers" + }, + "has_member": { + "@type": "@id", + "@id": "org:hasMember" + }, + "has_michelin_star": { + "@type": "xsd:boolean", + "@id": "hc:class/catering-place/has_michelin_star" + }, + "has_microfilm_readers": { + "@type": "xsd:boolean", + "@id": "hc:class/reading-room/has_microfilm_readers" + }, + "has_narrower_instance": { + "@type": "@id", + "@id": "skos:narrowerTransitive" + }, + "has_observation": { + "@type": "@id", + "@id": "dcterms:isReferencedBy" + }, + "has_operational_archive": { + "@type": "@id", + "@id": "rico:hasOrHadPart" + }, + "has_operational_unit": { + "@type": "@id", + "@id": "hc:class/organization-branch/has_operational_unit" + }, + "has_outdoor_seating": { + "@type": "xsd:boolean", + "@id": "hc:class/catering-place/has_outdoor_seating" + }, + "has_person_name": { + "@type": "@id", + "@id": "pnv:hasName" + }, + "has_person_observation": { + "@type": "@id", + "@id": "pico:hasObservation" + }, + "has_publication_series": { + "@type": "xsd:boolean", + "@id": "hc:class/research-center/has_publication_series" + }, + "has_research_library": { + "@type": "xsd:boolean", + "@id": "hc:class/research-center/has_research_library" + }, + "has_security_system": { + "@type": "xsd:boolean", + "@id": "hc:class/exhibition-space/has_security_system" + }, + "has_sub_branch": { + "@type": "@id", + "@id": "hc:class/organization-branch/has_sub_branch" + }, + "has_suborganization": { + "@type": "@id", + "@id": "org:hasSubOrganization" + }, + "has_supervised_handling": { + "@type": "xsd:boolean", + "@id": "hc:class/reading-room/has_supervised_handling" + }, + "has_timespan": { + "@type": "@id", + "@id": "crm:P4_has_time-span" + }, + "has_unit": { + "@type": "@id", + "@id": "org:hasUnit" + }, + "has_wifi": { + "@type": "xsd:boolean", + "@id": "hc:class/reading-room/has_wifi" + }, + "heading_level": { + "@type": "xsd:integer", + "@id": "hc:headingLevel" + }, + "heading_text": { + "@id": "dcterms:title" + }, + "heading_text_en": { + "@id": "dcterms:title" + }, + "heritage_designation_date": { + "@type": "xsd:date", + "@id": "hc:class/historic-building/heritage_designation_date" + }, + "heritage_form_description": { + "@id": "dcterms:description" + }, + "heritage_form_id": "@id", + "heritage_form_name": { + "@id": "skos:prefLabel" + }, + "heritage_holdings": { + "@id": "schema:owns" + }, + "heritage_mandate": { + "@id": "cpov:purpose" + }, + "heritage_practice": { + "@id": "schema:knowsAbout" + }, + "heritage_relevance": { + "@id": "schema:about" + }, + "heritage_society_subtype": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "skos:narrower" + }, + "heritage_status": { + "@id": "hc:class/historic-building/heritage_status" + }, + "heritage_type_classification": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/catering-place/heritage_type_classification" + }, + "heritage_types": { + "@id": "hc:heritage_types" + }, + "membership_size": { + "@id": "schema:numberOfEmployees" + }, + "publication_activities": { + "@id": "schema:publishingPrinciples" + }, + "society_focus": { + "@id": "schema:knowsAbout" + }, + "volunteer_programs": { + "@id": "schema:volunteer" + }, + "historic_building_description": { + "@id": "hc:class/historic-building/historic_building_description" + }, + "historic_building_id": "@id", + "historic_building_name": { + "@id": "hc:class/historic-building/historic_building_name" + }, + "historic_garden_designation": { + "@type": "xsd:boolean", + "@id": "hc:class/outdoor-site/historic_garden_designation" + }, + "historical_regions": { + "@id": "dcterms:spatial" + }, + "holds_record_set_types": { + "@type": "xsd:anyURI", + "@id": "rico:isOrWasHolderOf" + }, + "holy_site_subtype": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "skos:narrower" + }, + "homepage_web_address": { + "@type": "xsd:anyURI", + "@id": "hc:class/digital-platform/homepage_web_address" + }, + "hosts_branch": { + "@type": "@id", + "@id": "hc:class/auxiliary-place/hosts_branch" + }, + "html_file": { + "@id": "prov:used" + }, + "html_snapshot_path": { + "@id": "prov:used" + }, + "http_status_code": { + "@type": "xsd:integer", + "@id": "hc:http_status_code" + }, + "humidity_max": { + "@type": "xsd:float", + "@id": "hc:humidity_max" + }, + "humidity_min": { + "@type": "xsd:float", + "@id": "hc:humidity_min" + }, + "humidity_target": { + "@type": "xsd:float", + "@id": "hc:humidity_target" + }, + "humidity_tolerance": { + "@type": "xsd:float", + "@id": "hc:humidityTolerance" + }, + "hypernym_event_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "crm:P2_has_type" + }, + "ich_domain": { + "@id": "dcterms:subject" + }, + "ich_safeguarding_measures": { + "@id": "crm:P33_used_specific_technique" + }, + "ich_transmission_methods": { + "@id": "schema:teaches" + }, + "iconography": { + "@id": "crm:P62_depicts" + }, + "identified_by": { + "@type": "@id", + "@id": "crm:P1_is_identified_by" + }, + "identifier_format": { + "@id": "schema:valuePattern" + }, + "identifier_format_used": { + "@type": "@id", + "@id": "schema:encodingFormat" + }, + "identifier_lookup_score": { + "@type": "xsd:float", + "@id": "hc:identifierLookupScore" + }, + "identifier_scheme": { + "@id": "skos:inScheme" + }, + "identifier_value": { + "@id": "skos:notation" + }, + "example": { + "@id": "schema:exampleOfWork" + }, + "format_name": { + "@id": "schema:name" + }, + "is_canonical": { + "@type": "xsd:boolean", + "@id": "schema:isBasedOn" + }, + "is_uri_format": { + "@type": "xsd:boolean", + "@id": "schema:url" + }, + "pattern": { + "@id": "schema:pattern" + }, + "transformation_to_canonical": { + "@id": "schema:algorithm" + }, + "identifiers": { + "@type": "@id", + "@id": "crm:P48_has_preferred_identifier" + }, + "identifies": { + "@type": "@id", + "@id": "crm:P48i_is_preferred_identifier_of" + }, + "identifies_custodian": { + "@type": "@id", + "@id": "crm:P1i_identifies" + }, + "iiif_compatible": { + "@type": "xsd:boolean", + "@id": "hc:class/CollectionManagementSystem/iiif_compatible" + }, + "iiif_support": { + "@type": "xsd:boolean", + "@id": "hc:class/digital-platform/iiif_support" + }, + "example_iiif_url": { + "@type": "xsd:anyURI", + "@id": "schema:workExample" + }, + "example_iip_url": { + "@type": "xsd:anyURI", + "@id": "schema:workExample" + }, + "fcgi_path": { + "@id": "schema:additionalProperty" + }, + "iiif_compliance_level": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "dcterms:conformsTo" + }, + "iiif_context_url": { + "@type": "xsd:anyURI", + "@id": "schema:additionalType" + }, + "iiif_image_api_version": { + "@id": "iiif:apiVersion" + }, + "image_identifier_pattern": { + "@id": "hydra:template" + }, + "info_json_url_pattern": { + "@id": "hydra:template" + }, + "max_area": { + "@type": "xsd:integer", + "@id": "schema:maxValue" + }, + "max_image_dimension": { + "@type": "xsd:integer", + "@id": "schema:maxValue" + }, + "server_software": { + "@id": "schema:softwareVersion" + }, + "server_version": { + "@id": "schema:version" + }, + "supported_input_formats": { + "@id": "dcterms:format" + }, + "supported_output_formats": { + "@id": "dcterms:format" + }, + "supported_protocols": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "dcterms:conformsTo" + }, + "supported_qualities": { + "@id": "iiif:quality" + }, + "supports_info_json": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "supports_mirroring": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "supports_quality_selection": { + "@type": "xsd:boolean", + "@id": "iiif:quality" + }, + "supports_region_extraction": { + "@type": "xsd:boolean", + "@id": "iiif:regionByPx" + }, + "supports_rotation": { + "@type": "xsd:boolean", + "@id": "iiif:rotation" + }, + "tile_size": { + "@type": "xsd:integer", + "@id": "schema:size" + }, + "illustrations": { + "@id": "bf:illustrationNote" + }, + "image_url": { + "@type": "xsd:anyURI", + "@id": "schema:image" + }, + "impact_measurement": { + "@id": "schema:result" + }, + "implementing_organisations": { + "@type": "xsd:anyURI", + "@id": "prov:wasAttributedTo" + }, + "implements_agenda": { + "@type": "xsd:anyURI", + "@id": "org:linkedTo" + }, + "implements_auxiliary_platform": { + "@type": "@id", + "@id": "hc:implements_auxiliary_platform" + }, + "implements_digital_platform": { + "@type": "@id", + "@id": "hc:implements_digital_platform" + }, + "inbound_from": { + "@id": "dcterms:spatial" + }, + "includes_bounding_boxes": { + "@type": "xsd:boolean", + "@id": "hc:includes_bounding_boxes" + }, + "includes_handwriting": { + "@type": "xsd:boolean", + "@id": "hc:includes_handwriting" + }, + "includes_music_descriptions": { + "@type": "xsd:boolean", + "@id": "hc:includes_music_descriptions" + }, + "includes_object_tracking": { + "@type": "xsd:boolean", + "@id": "hc:includes_object_tracking" + }, + "includes_segmentation_masks": { + "@type": "xsd:boolean", + "@id": "hc:includes_segmentation_masks" + }, + "includes_sound_descriptions": { + "@type": "xsd:boolean", + "@id": "hc:includes_sound_descriptions" + }, + "includes_speaker_identification": { + "@type": "xsd:boolean", + "@id": "hc:includes_speaker_identification" + }, + "includes_speakers": { + "@type": "xsd:boolean", + "@id": "hc:includes_speakers" + }, + "includes_timestamps": { + "@type": "xsd:boolean", + "@id": "hc:includes_timestamps" + }, + "info_session_dates": { + "@id": "hc:info_session_dates" + }, + "initials": { + "@id": "pnv:initials" + }, + "innovation_budget": { + "@type": "xsd:decimal", + "@id": "hc:class/Budget/innovation_budget" + }, + "inscription": { + "@id": "crm:P128_carries" + }, + "installation_date": { + "@type": "xsd:date", + "@id": "hc:installation_date" + }, + "installed_at_place": { + "@type": "@id", + "@id": "hc:installed_at_place" + }, + "insurance_currency": { + "@id": "schema:priceCurrency" + }, + "insurance_provider": { + "@id": "hc:insurance_provider" + }, + "insurance_value": { + "@type": "xsd:decimal", + "@id": "schema:price" + }, + "intangible_heritage_subtype": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "skos:narrower" + }, + "interlibrary_loan": { + "@type": "xsd:boolean", + "@id": "schema:serviceType" + }, + "internal_funding": { + "@type": "xsd:decimal", + "@id": "hc:class/Budget/internal_funding" + }, + "international": { + "@id": "dcterms:spatial" + }, + "inventory_number": { + "@id": "dcterms:identifier" + }, + "inventory_web_addresses": { + "@type": "xsd:anyURI", + "@id": "hc:class/digital-platform/inventory_web_addresses" + }, + "involved_actors": { + "@type": "xsd:anyURI", + "@id": "crm:P11_had_participant" + }, + "is_accessible": { + "@type": "xsd:boolean", + "@id": "hc:class/exhibition-space/is_accessible" + }, + "is_accredited": { + "@type": "xsd:boolean", + "@id": "hc:class/conservation-lab/is_accredited" + }, + "is_annex_of_reading_room": { + "@type": "@id", + "@id": "hc:class/reading-room-annex/is_annex_of_reading_room" + }, + "is_auto_generated": { + "@type": "xsd:boolean", + "@id": "hc:is_auto_generated" + }, + "is_auxiliary_of_place": { + "@type": "@id", + "@id": "hc:class/auxiliary-place/is_auxiliary_of_place" + }, + "is_auxiliary_of_platform": { + "@type": "@id", + "@id": "hc:class/auxiliary-digital-platform/is_auxiliary_of_platform" + }, + "is_branch_of": { + "@type": "xsd:anyURI", + "@id": "hc:class/organization-branch/is_branch_of" + }, + "is_closed_caption": { + "@type": "xsd:boolean", + "@id": "hc:is_closed_caption" + }, + "is_current_version": { + "@type": "xsd:boolean", + "@id": "hc:class/ArticlesOfAssociation/is_current_version" + }, + "is_embeddable": { + "@type": "xsd:boolean", + "@id": "hc:is_embeddable" + }, + "is_historical_boundary": { + "@type": "xsd:boolean", + "@id": "hc:class/ServiceArea/is_historical_boundary" + }, + "is_leased": { + "@type": "xsd:boolean", + "@id": "hc:isLeased" + }, + "is_legal_status_of": { + "@type": "@id", + "@id": "hc:isLegalStatusOf" + }, + "is_licensed_content": { + "@type": "xsd:boolean", + "@id": "hc:is_licensed_content" + }, + "is_made_for_kids": { + "@type": "xsd:boolean", + "@id": "hc:is_made_for_kids" + }, + "is_mandatory": { + "@type": "xsd:boolean", + "@id": "hc:is_mandatory" + }, + "is_member_of": { + "@type": "@id", + "@id": "org:memberOf" + }, + "is_official_assessment": { + "@type": "xsd:boolean", + "@id": "hc:is_official_assessment" + }, + "is_official_content": { + "@type": "xsd:boolean", + "@id": "hc:is_official_content" + }, + "is_open_to_public": { + "@type": "xsd:boolean", + "@id": "hc:class/historic-building/is_open_to_public" + }, + "is_part_of_complex": { + "@type": "xsd:boolean", + "@id": "hc:class/historic-building/is_part_of_complex" + }, + "is_permanent": { + "@type": "xsd:boolean", + "@id": "hc:class/exhibition-space/is_permanent" + }, + "is_primary_digital_presence": { + "@type": "xsd:boolean", + "@id": "hc:is_primary_digital_presence" + }, + "is_public_facing": { + "@type": "xsd:boolean", + "@id": "hc:class/branch-office/is_public_facing" + }, + "is_recognized": { + "@type": "xsd:boolean", + "@id": "hc:is_recognized" + }, + "is_recurring": { + "@type": "xsd:boolean", + "@id": "hc:is_recurring" + }, + "is_sdh": { + "@type": "xsd:boolean", + "@id": "hc:is_sdh" + }, + "is_sub_guide": { + "@type": "xsd:boolean", + "@id": "hc:isSubGuide" + }, + "is_temporary": { + "@type": "xsd:boolean", + "@id": "hc:class/reading-room-annex/is_temporary" + }, + "is_verified": { + "@type": "xsd:boolean", + "@id": "hc:is_verified" + }, + "isbn": { + "@id": "schema:isbn" + }, + "isbn_13": { + "@id": "bibo:isbn13" + }, + "isil": { + "@id": "dcterms:identifier" + }, + "iso_3166_2_code": "@id", + "issn": { + "@id": "bibo:issn" + }, + "issued_calls": { + "@type": "xsd:anyURI", + "@id": "schema:makesOffer" + }, + "issuing_organisation": { + "@type": "xsd:anyURI", + "@id": "hc:issuing_organisation" + }, + "items": { + "@type": "@id", + "@id": "rico:hasOrHadConstituent" + }, + "jurisdiction_id": "@id", + "jurisdiction_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:additionalType" + }, + "justification": { + "@id": "prov:qualifiedAttribution" + }, + "key_archives": { + "@type": "@id", + "@id": "rico:hasOrHadConstituent" + }, + "key_dates": { + "@type": "@id", + "@id": "dcterms:date" + }, + "key_periods": { + "@type": "@id", + "@id": "dcterms:temporal" + }, + "keyframe_extraction": { + "@type": "xsd:boolean", + "@id": "hc:keyframe_extraction" + }, + "keywords": { + "@id": "schema:keywords" + }, + "kien_registration_date": { + "@type": "xsd:date", + "@id": "dcterms:created" + }, + "kien_url": { + "@type": "xsd:anyURI", + "@id": "schema:url" + }, + "knowledge_transmission": { + "@id": "schema:educationalUse" + }, + "lab_description": { + "@id": "hc:class/conservation-lab/lab_description" + }, + "lab_name": { + "@id": "hc:class/conservation-lab/lab_name" + }, + "label_de": { + "@id": "skos:prefLabel" + }, + "label_es": { + "@id": "skos:prefLabel" + }, + "label_fr": { + "@id": "skos:prefLabel" + }, + "label_it": { + "@id": "skos:prefLabel" + }, + "label_nl": { + "@id": "skos:prefLabel" + }, + "label_pt": { + "@id": "skos:prefLabel" + }, + "landmark_confidence": { + "@type": "xsd:float", + "@id": "hc:landmark_confidence" + }, + "landmark_geonames_id": { + "@id": "hc:landmark_geonames_id" + }, + "landmark_label": { + "@id": "hc:landmark_label" + }, + "landmark_segment": { + "@type": "@id", + "@id": "hc:landmark_segment" + }, + "landmark_wikidata_id": { + "@id": "hc:landmark_wikidata_id" + }, + "language": { + "@id": "schema:inLanguage" + }, + "language_code": { + "@id": "rdf:value" + }, + "last_modified": { + "@type": "xsd:dateTime", + "@id": "hc:last_modified" + }, + "latency_ms": { + "@type": "xsd:integer", + "@id": "hc:class/LLMResponse/latency_ms" + }, + "latitude": { + "@type": "xsd:float", + "@id": "geo:lat" + }, + "launch_date": { + "@type": "xsd:date", + "@id": "hc:launch_date" + }, + "lease_expiry": { + "@type": "xsd:date", + "@id": "schema:validThrough" + }, + "legacy_planning": { + "@id": "crm:P70_documents" + }, + "legal_basis": { + "@id": "hc:legal_basis" + }, + "legal_entity_type": { + "@type": "@id", + "@id": "org:classification" + }, + "legal_form": { + "@type": "@id", + "@id": "rov:orgType" + }, + "legal_jurisdiction": { + "@type": "@id", + "@id": "gleif_base:hasLegalJurisdiction" + }, + "legal_name": { + "@type": "@id", + "@id": "rov:legalName" + }, + "legal_note": { + "@id": "skos:note" + }, + "legal_responsibility_basis": { + "@id": "dcterms:conformsTo" + }, + "legal_responsibility_end_date": { + "@type": "xsd:date", + "@id": "prov:invalidatedAtTime" + }, + "legal_responsibility_start_date": { + "@type": "xsd:date", + "@id": "prov:generatedAtTime" + }, + "legal_status": { + "@type": "@id", + "@id": "gleif:hasLegalForm" + }, + "legal_system_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:category" + }, + "code": { + "@id": "schema:codeValue" + }, + "label": { + "@id": "schema:name" + }, + "ontology_mapping": { + "@type": "xsd:anyURI", + "@id": "owl:equivalentClass" + }, + "country_code": { + "@type": "@id", + "@id": "schema:addressCountry" + }, + "elf_code": { + "@id": "gleif:hasEntityLegalFormCode" + }, + "local_name": { + "@id": "schema:name" + }, + "parent_form": { + "@type": "@id", + "@id": "org:hasSubOrganization" + }, + "transliterated_name": { + "@id": "schema:alternateName" + }, + "valid_from": { + "@type": "xsd:date", + "@id": "schema:validFrom" + }, + "valid_to": { + "@type": "xsd:date", + "@id": "schema:validUntil" + }, + "alphabetical_name": { + "@id": "tooi:alfabetischeVolgorde" + }, + "display_name": { + "@id": "schema:name" + }, + "name_without_type": { + "@id": "tooi:officieleNaamExclSoort" + }, + "script": { + "@id": "schema:characterEncoding" + }, + "temporal_validity": { + "@type": "@id", + "@id": "schema:temporalCoverage" + }, + "status_code": { + "@id": "gleif_base:hasTag" + }, + "status_name": { + "@id": "schema:name" + }, + "lender": { + "@type": "xsd:anyURI", + "@id": "crm:P28_custody_surrendered_by" + }, + "lender_contact": { + "@id": "schema:contactPoint" + }, + "lending_policy": { + "@id": "dcterms:accessRights" + }, + "library_catalog_url": { + "@type": "xsd:anyURI", + "@id": "rdfs:seeAlso" + }, + "library_search_score": { + "@type": "xsd:float", + "@id": "hc:librarySearchScore" + }, + "library_subtype": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "skos:narrower" + }, + "license": { + "@type": "@id", + "@id": "schema:license" + }, + "lifecycle_phase_type": { + "@type": "xsd:anyURI", + "@id": "skos:broaderTransitive" + }, + "light_max_lux": { + "@type": "xsd:float", + "@id": "hc:light_max_lux" + }, + "like_count": { + "@type": "xsd:integer", + "@id": "hc:like_count" + }, + "link_context": { + "@id": "hc:context" + }, + "link_rationale": { + "@id": "skos:editorialNote" + }, + "link_text": { + "@id": "schema:name" + }, + "link_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "dcterms:type" + }, + "link_url": { + "@type": "xsd:anyURI", + "@id": "schema:url" + }, + "linked_class_name": { + "@id": "rdfs:seeAlso" + }, + "linked_data": { + "@type": "xsd:boolean", + "@id": "hc:class/digital-platform/linked_data" + }, + "linked_data_access": { + "@type": "@id", + "@id": "void:sparqlEndpoint" + }, + "linked_data_endpoints": { + "@type": "@id", + "@id": "hc:class/WebPortalTypes/linked_data_endpoints" + }, + "linked_data_export": { + "@type": "xsd:boolean", + "@id": "hc:class/CollectionManagementSystem/linked_data_export" + }, + "linked_to_collection": { + "@type": "xsd:boolean", + "@id": "hc:linked_to_collection" + }, + "linkedin_profile_path": { + "@id": "prov:hadPrimarySource" + }, + "linkedin_profile_url": { + "@type": "xsd:anyURI", + "@id": "schema:sameAs" + }, + "linkedin_url": { + "@type": "xsd:anyURI", + "@id": "hc:class/ExtractionMetadata/linkedin_url" + }, + "list_items": { + "@id": "schema:itemListElement" + }, + "literal_name": { + "@id": "pnv:literalName" + }, + "live_broadcast_content": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:live_broadcast_content" + }, + "living_collections": { + "@type": "xsd:boolean", + "@id": "hc:class/BioCustodianType/living_collections" + }, + "llm_response": { + "@type": "@id", + "@id": "hc:class/ExtractionMetadata/llm_response" + }, + "loan_agreement_url": { + "@type": "xsd:anyURI", + "@id": "schema:url" + }, + "loan_end_date": { + "@type": "xsd:date", + "@id": "schema:endDate" + }, + "loan_history": { + "@type": "@id", + "@id": "crm:P30i_custody_transferred_through" + }, + "loan_id": "@id", + "loan_notes": { + "@id": "skos:note" + }, + "loan_number": { + "@id": "dcterms:identifier" + }, + "loan_purpose": { + "@id": "schema:description" + }, + "loan_start_date": { + "@type": "xsd:date", + "@id": "schema:startDate" + }, + "loan_status": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:status" + }, + "loan_timespan": { + "@type": "@id", + "@id": "crm:P4_has_time-span" + }, + "loan_type": { + "@id": "dcterms:type" + }, + "loaned_objects": { + "@type": "xsd:anyURI", + "@id": "crm:P30_transferred_custody_of" + }, + "located_at": { + "@type": "@id", + "@id": "org:basedAt" + }, + "location": { + "@id": "schema:location" + }, + "location_browse_score": { + "@type": "xsd:float", + "@id": "hc:locationBrowseScore" + }, + "logo_bbox": { + "@type": "xsd:float", + "@id": "hc:logo_bbox" + }, + "logo_confidence": { + "@type": "xsd:float", + "@id": "hc:logo_confidence" + }, + "logo_label": { + "@id": "hc:logo_label" + }, + "logo_organization": { + "@id": "hc:logo_organization" + }, + "logo_segment": { + "@type": "@id", + "@id": "hc:logo_segment" + }, + "longitude": { + "@type": "xsd:float", + "@id": "geo:long" + }, + "lot_number": { + "@id": "dcterms:identifier" + }, + "maintained_by": { + "@type": "@id", + "@id": "gleif_base:isManagedBy" + }, + "maintenance_schedule": { + "@id": "hc:maintenance_schedule" + }, + "major_cities": { + "@id": "dcterms:spatial" + }, + "major_research_projects": { + "@id": "hc:class/research-center/major_research_projects" + }, + "managed_by": { + "@id": "org:linkedTo" + }, + "managed_by_cms": { + "@type": "@id", + "@id": "crm:P70i_is_documented_in" + }, + "managed_collections": { + "@type": "@id", + "@id": "org:hasUnit" + }, + "manages_collection": { + "@type": "@id", + "@id": "hc:class/CollectionManagementSystem/manages_collection" + }, + "manages_collections": { + "@type": "@id", + "@id": "rico:isManagerOf" + }, + "managing_unit": { + "@type": "@id", + "@id": "org:unitOf" + }, + "mandate": { + "@id": "hc:mandate" + }, + "martyred": { + "@type": "xsd:boolean", + "@id": "wikidata:P1196" + }, + "material_specialization": { + "@id": "hc:class/reading-room-annex/material_specialization" + }, + "materials_used": { + "@id": "crm:P126_employed" + }, + "max_annual_light_exposure": { + "@type": "xsd:float", + "@id": "hc:max_annual_light_exposure" + }, + "max_group_size": { + "@type": "xsd:integer", + "@id": "hc:class/education-center/max_group_size" + }, + "max_light_lux": { + "@type": "xsd:float", + "@id": "hc:max_light_lux" + }, + "maximum_amount": { + "@type": "xsd:decimal", + "@id": "hc:maximum_amount" + }, + "measurement_data": { + "@id": "hc:measurement_data" + }, + "medium": { + "@id": "schema:artMedium" + }, + "member_custodians": { + "@type": "xsd:anyURI", + "@id": "hc:member_custodians" + }, + "membership_criteria": { + "@id": "hc:membership_criteria" + }, + "membership_required": { + "@type": "xsd:boolean", + "@id": "schema:eligibilityToWorkRequirement" + }, + "metadata_standards": { + "@id": "dcterms:conformsTo" + }, + "method": { + "@id": "dcterms:description" + }, + "metrics_observed_at": { + "@type": "xsd:dateTime", + "@id": "hc:metrics_observed_at" + }, + "metrics_observed_date": { + "@type": "xsd:dateTime", + "@id": "hc:metrics_observed_date" + }, + "administrative_metadata_sections": { + "@id": "schema:additionalProperty" + }, + "checksum_algorithms": { + "@id": "schema:algorithm" + }, + "descriptive_metadata_schemas": { + "@id": "dcterms:format" + }, + "file_inventory_included": { + "@type": "xsd:boolean", + "@id": "dcat:distribution" + }, + "file_location_resolvable": { + "@type": "xsd:boolean", + "@id": "schema:contentUrl" + }, + "mets_profile": { + "@id": "dcterms:conformsTo" + }, + "mets_schema_version": { + "@id": "schema:schemaVersion" + }, + "rights_metadata_available": { + "@type": "xsd:boolean", + "@id": "dcterms:rights" + }, + "structural_metadata_available": { + "@type": "xsd:boolean", + "@id": "schema:hasPart" + }, + "structure_map_types": { + "@id": "schema:additionalProperty" + }, + "supports_validation": { + "@type": "xsd:boolean", + "@id": "schema:validIn" + }, + "technical_metadata_standard": { + "@id": "premis:hasObjectCharacteristics" + }, + "michelin_stars": { + "@type": "xsd:integer", + "@id": "hc:class/catering-place/michelin_stars" + }, + "minimum_amount": { + "@type": "xsd:decimal", + "@id": "hc:minimum_amount" + }, + "minimum_partners": { + "@type": "xsd:integer", + "@id": "hc:minimum_partners" + }, + "mission_statement": { + "@type": "@id", + "@id": "org:purpose" + }, + "mixed_governance_structure": { + "@id": "schema:organizationRole" + }, + "model": { + "@id": "hc:class/LLMResponse/model" + }, + "model_architecture": { + "@id": "hc:model_architecture" + }, + "model_provider": { + "@id": "hc:model_provider" + }, + "model_task": { + "@id": "hc:model_task" + }, + "model_version": { + "@id": "hc:model_version" + }, + "modified": { + "@type": "xsd:dateTime", + "@id": "schema:dateModified" + }, + "monitoring_platform": { + "@id": "hc:monitoring_platform" + }, + "monitoring_platform_url": { + "@type": "xsd:anyURI", + "@id": "hc:monitoring_platform_url" + }, + "monument_number": { + "@id": "hc:class/historic-building/monument_number" + }, + "multilingual_labels": { + "@id": "skos:altLabel" + }, + "museum_search_score": { + "@type": "xsd:float", + "@id": "hc:museumSearchScore" + }, + "museum_subtype": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "skos:narrower" + }, + "museum_type_classification": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/exhibition-space/museum_type_classification" + }, + "name_authority": { + "@id": "prov:wasAttributedTo" + }, + "name_language": { + "@id": "dcterms:language" + }, + "name_specification": { + "@id": "pnv:nameSpecification" + }, + "name_validity_period": { + "@type": "@id", + "@id": "crm:P4_has_time-span" + }, + "nazi_era_flag": { + "@type": "xsd:boolean", + "@id": "hc:nazi_era_flag" + }, + "nl": { + "@id": "hc:nl" + }, + "nonprofit_subtype": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "skos:narrower" + }, + "notarial_deed_number": { + "@id": "hc:class/ArticlesOfAssociation/notarial_deed_number" + }, + "notary_name": { + "@id": "hc:class/ArticlesOfAssociation/notary_name" + }, + "notary_office": { + "@id": "hc:class/ArticlesOfAssociation/notary_office" + }, + "notes": { + "@id": "skos:note" + }, + "oai_pmh_endpoint": { + "@type": "xsd:anyURI", + "@id": "dcat:endpointURL" + }, + "admin_email": { + "@id": "schema:email" + }, + "batch_size": { + "@type": "xsd:integer", + "@id": "schema:maxValue" + }, + "deleted_record_policy": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:additionalProperty" + }, + "earliest_datestamp": { + "@id": "dcterms:temporal" + }, + "granularity": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "dcterms:accrualPeriodicity" + }, + "last_harvested": { + "@type": "xsd:dateTime", + "@id": "schema:dateModified" + }, + "metadata_prefixes": { + "@id": "dcterms:format" + }, + "repository_name": { + "@id": "schema:name" + }, + "sample_identifier": { + "@id": "dcterms:identifier" + }, + "sets": { + "@type": "@id", + "@id": "dcat:theme" + }, + "supports_resumption_token": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "total_records": { + "@type": "xsd:integer", + "@id": "schema:numberOfItems" + }, + "parent_spec": { + "@id": "schema:isPartOf" + }, + "record_count": { + "@type": "xsd:integer", + "@id": "hc:record_count" + }, + "spec": { + "@id": "dcterms:identifier" + }, + "object_alternate_names": { + "@id": "schema:alternateName" + }, + "object_bbox": { + "@type": "xsd:float", + "@id": "hc:object_bbox" + }, + "object_classes_detected": { + "@id": "hc:object_classes_detected" + }, + "object_collection_id": { + "@id": "hc:object_collection_id" + }, + "object_confidence": { + "@type": "xsd:float", + "@id": "hc:object_confidence" + }, + "object_description": { + "@id": "schema:description" + }, + "object_label": { + "@id": "hc:object_label" + }, + "object_name": { + "@id": "schema:name" + }, + "object_ref": { + "@type": "xsd:anyURI", + "@id": "crm:P140_assigned_attribute_to" + }, + "object_segment": { + "@type": "@id", + "@id": "hc:object_segment" + }, + "object_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "dcterms:type" + }, + "object_wikidata_id": { + "@id": "hc:object_wikidata_id" + }, + "objectives": { + "@id": "hc:objectives" + }, + "objects_added": { + "@type": "@id", + "@id": "hc:objects_added" + }, + "objects_affected": { + "@type": "@id", + "@id": "prov:used" + }, + "objects_count": { + "@type": "xsd:integer", + "@id": "hc:objects_count" + }, + "objects_removed": { + "@type": "@id", + "@id": "hc:objects_removed" + }, + "observation_context": { + "@id": "dcterms:description" + }, + "observation_date": { + "@type": "xsd:date", + "@id": "prov:generatedAtTime" + }, + "observation_id": "@id", + "observation_notes": { + "@id": "hc:observation_notes" + }, + "observation_period": { + "@type": "@id", + "@id": "hc:observation_period" + }, + "observation_source": { + "@id": "dcterms:source" + }, + "observations": { + "@type": "@id", + "@id": "hc:observations" + }, + "observed_entities": { + "@type": "xsd:anyURI", + "@id": "hc:observed_entities" + }, + "observed_in": { + "@type": "xsd:anyURI", + "@id": "prov:wasDerivedFrom" + }, + "observed_name": { + "@id": "skos:prefLabel" + }, + "observer_affiliation": { + "@id": "hc:observer_affiliation" + }, + "observer_name": { + "@id": "hc:observer_name" + }, + "observer_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:observer_type" + }, + "occupation": { + "@id": "sdo:hasOccupation" + }, + "offered_by": { + "@type": "xsd:anyURI", + "@id": "hc:offered_by" + }, + "offers_donation_schemes": { + "@type": "xsd:anyURI", + "@id": "schema:makesOffer" + }, + "official_institution_subtype": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "skos:narrower" + }, + "online_shop": { + "@type": "@id", + "@id": "hc:class/gift-shop/online_shop" + }, + "open_access_endpoints": { + "@type": "@id", + "@id": "hc:class/WebPortalTypes/open_access_endpoints" + }, + "open_source": { + "@type": "xsd:boolean", + "@id": "hc:class/CollectionManagementSystem/open_source" + }, + "opening_hours": { + "@id": "hc:class/gift-shop/opening_hours" + }, + "operated_by": { + "@type": "@id", + "@id": "schema:maintainer" + }, + "operates": { + "@type": "@id", + "@id": "schema:owns" + }, + "operates_platform_types": { + "@type": "@id", + "@id": "hc:operates_platform_types" + }, + "operates_storage_types": { + "@type": "@id", + "@id": "hc:operates_storage_types" + }, + "operating_budget": { + "@type": "xsd:decimal", + "@id": "hc:class/Budget/operating_budget" + }, + "operating_hours": { + "@id": "hc:class/branch-office/operating_hours" + }, + "operational_status": { + "@id": "hc:operational_status" + }, + "operator": { + "@id": "hc:class/catering-place/operator" + }, + "organization_legal_form": { + "@id": "hc:organization_legal_form" + }, + "organization_name": { + "@id": "hc:organization_name" + }, + "organization_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:additionalType" + }, + "organizational_change_events": { + "@type": "@id", + "@id": "prov:wasInfluencedBy" + }, + "organizational_change_score": { + "@type": "xsd:float", + "@id": "hc:organizationalChangeScore" + }, + "organizational_level": { + "@id": "hc:organizationalLevel" + }, + "organizational_mission": { + "@id": "schema:mission" + }, + "organizational_structure": { + "@type": "@id", + "@id": "org:hasUnit" + }, + "organized_by": { + "@type": "xsd:anyURI", + "@id": "schema:organizer" + }, + "organizing_body": { + "@type": "xsd:anyURI", + "@id": "hc:organizing_body" + }, + "origin_location": { + "@id": "hc:class/IntangibleHeritageForm/origin_location" + }, + "origin_period": { + "@type": "@id", + "@id": "hc:class/IntangibleHeritageForm/origin_period" + }, + "original_end_date": { + "@type": "xsd:date", + "@id": "hc:original_end_date" + }, + "osm_id": { + "@id": "hc:class/GeoSpatialPlace/osm_id" + }, + "outbound_condition_report_url": { + "@type": "xsd:anyURI", + "@id": "hc:outbound_condition_report_url" + }, + "outbound_to": { + "@id": "dcterms:spatial" + }, + "outdoor_seating_capacity": { + "@type": "xsd:integer", + "@id": "hc:class/catering-place/outdoor_seating_capacity" + }, + "outdoor_site_description": { + "@id": "hc:class/outdoor-site/outdoor_site_description" + }, + "outdoor_site_id": "@id", + "outdoor_site_name": { + "@id": "hc:class/outdoor-site/outdoor_site_name" + }, + "outdoor_site_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/outdoor-site/outdoor_site_type" + }, + "overall_confidence": { + "@type": "xsd:float", + "@id": "hc:overall_confidence" + }, + "overall_status": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:overall_status" + }, + "oversight_jurisdiction": { + "@id": "cpov:spatialCoverage" + }, + "page_section": { + "@id": "hc:page_section" + }, + "page_sections": { + "@type": "@id", + "@id": "schema:hasPart" + }, + "page_title": { + "@id": "hc:page_title" + }, + "pages": { + "@type": "xsd:integer", + "@id": "schema:numberOfPages" + }, + "paragraph_count": { + "@type": "xsd:integer", + "@id": "hc:paragraph_count" + }, + "parent_collection": { + "@type": "@id", + "@id": "rico:isOrWasPartOf" + }, + "parent_corporation": { + "@id": "schema:parentOrganization" + }, + "parent_custodian": { + "@type": "@id", + "@id": "org:subOrganizationOf" + }, + "parent_department": { + "@type": "@id", + "@id": "hc:parent_department" + }, + "parent_programme": { + "@id": "hc:parent_programme" + }, + "parent_society": { + "@type": "@id", + "@id": "rico:hasProvenance" + }, + "parent_unit": { + "@type": "@id", + "@id": "org:unitOf" + }, + "part_of_collection": { + "@type": "xsd:anyURI", + "@id": "crm:P46i_forms_part_of" + }, + "part_of_custodian_collection": { + "@type": "@id", + "@id": "rico:isOrWasHeldBy" + }, + "part_of_facility": { + "@type": "@id", + "@id": "hc:part_of_facility" + }, + "part_of_storage": { + "@type": "@id", + "@id": "hc:part_of_storage" + }, + "part_of_zone": { + "@type": "@id", + "@id": "hc:part_of_zone" + }, + "participated_in_events": { + "@type": "@id", + "@id": "crm:P11i_participated_in" + }, + "participated_in_projects": { + "@type": "@id", + "@id": "org:memberOf" + }, + "participating_custodians": { + "@type": "xsd:anyURI", + "@id": "hc:participating_custodians" + }, + "participating_institutions": { + "@type": "xsd:integer", + "@id": "hc:participating_institutions" + }, + "particulate_max": { + "@type": "xsd:float", + "@id": "hc:particulate_max" + }, + "partner_institution": { + "@id": "hc:class/exhibition-space/partner_institution" + }, + "partnership_model": { + "@id": "schema:partner" + }, + "partnership_required": { + "@type": "xsd:boolean", + "@id": "hc:partnership_required" + }, + "patronym": { + "@id": "pnv:patronym" + }, + "payment_frequency": { + "@id": "hc:payment_frequency" + }, + "pdf_url": { + "@type": "xsd:anyURI", + "@id": "schema:contentUrl" + }, + "performance_repertoire": { + "@id": "schema:workPerformed" + }, + "period": { + "@id": "dcterms:temporal" + }, + "period_covered": { + "@id": "hc:class/outdoor-site/period_covered" + }, + "period_description": { + "@id": "dcterms:description" + }, + "period_end": { + "@id": "schema:endDate" + }, + "period_name": { + "@id": "skos:prefLabel" + }, + "period_start": { + "@id": "schema:startDate" + }, + "periods": { + "@type": "@id", + "@id": "dcterms:temporal" + }, + "permanent_location": { + "@id": "crm:P54_has_current_permanent_location" + }, + "permission_required": { + "@type": "xsd:boolean", + "@id": "dcterms:accessRights" + }, + "person_claim_id": "@id", + "person_claim_notes": { + "@id": "hc:person_claim_notes" + }, + "person_claim_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:person_claim_type" + }, + "person_claim_value": { + "@id": "hc:person_claim_value" + }, + "person_html_file": { + "@id": "hc:person_html_file" + }, + "person_name": { + "@id": "schema:name" + }, + "person_research_score": { + "@type": "xsd:float", + "@id": "hc:personResearchScore" + }, + "person_xpath": { + "@id": "hc:person_xpath" + }, + "person_xpath_match_score": { + "@type": "xsd:float", + "@id": "hc:person_xpath_match_score" + }, + "personal_collection_subtype": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "skos:narrower" + }, + "personnel_budget": { + "@type": "xsd:decimal", + "@id": "hc:class/Budget/personnel_budget" + }, + "pest_management_required": { + "@type": "xsd:boolean", + "@id": "hc:pest_management_required" + }, + "photographs": { + "@type": "xsd:anyURI", + "@id": "schema:image" + }, + "physical_location": { + "@type": "@id", + "@id": "hc:class/gift-shop/physical_location" + }, + "pipeline_stage": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:pipeline_stage" + }, + "place_description": { + "@id": "hc:class/auxiliary-place/place_description" + }, + "place_designation": { + "@type": "@id", + "@id": "schema:location" + }, + "place_language": { + "@id": "dct:language" + }, + "place_name": { + "@id": "schema:name" + }, + "place_note": { + "@id": "skos:note" + }, + "place_specificity": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "dct:type" + }, + "planned_closure_date": { + "@type": "xsd:date", + "@id": "hc:class/reading-room-annex/planned_closure_date" + }, + "planned_end": { + "@type": "xsd:date", + "@id": "hc:class/temporary-location/planned_end" + }, + "planned_start": { + "@type": "xsd:date", + "@id": "hc:class/temporary-location/planned_start" + }, + "plant_species_count": { + "@type": "xsd:integer", + "@id": "hc:class/outdoor-site/plant_species_count" + }, + "platform_description": { + "@id": "hc:class/auxiliary-digital-platform/platform_description" + }, + "platform_name": { + "@id": "schema:name" + }, + "platform_of": { + "@type": "@id", + "@id": "hc:platformOf" + }, + "platform_purpose": { + "@id": "hc:class/auxiliary-digital-platform/platform_purpose" + }, + "platform_type": { + "@id": "dcterms:type" + }, + "platform_type_category": { + "@id": "skos:broader" + }, + "platform_type_description": { + "@id": "skos:definition" + }, + "platform_type_name": { + "@id": "skos:prefLabel" + }, + "platform_url": { + "@type": "xsd:anyURI", + "@id": "hc:class/auxiliary-digital-platform/platform_url" + }, + "policy_approved_by": { + "@id": "hc:policy_approved_by" + }, + "policy_authority": { + "@id": "hc:class/OfficialInstitutionType/policy_authority" + }, + "policy_description": { + "@id": "hc:policy_description" + }, + "policy_effective_from": { + "@type": "xsd:date", + "@id": "hc:policy_effective_from" + }, + "policy_effective_to": { + "@type": "xsd:date", + "@id": "hc:policy_effective_to" + }, + "policy_review_date": { + "@type": "xsd:date", + "@id": "hc:policy_review_date" + }, + "portal_data_sources": { + "@type": "@id", + "@id": "edm:dataProvider" + }, + "portal_description": { + "@id": "hc:portal_description" + }, + "portal_id": "@id", + "portal_language": { + "@id": "hc:portal_language" + }, + "portal_name": { + "@id": "hc:portal_name" + }, + "portal_status": { + "@id": "hc:portal_status" + }, + "portal_type": { + "@type": "@id", + "@id": "hc:portal_type" + }, + "portal_type_category": { + "@id": "skos:broader" + }, + "portal_type_description": { + "@id": "skos:definition" + }, + "portal_type_id": "@id", + "portal_type_name": { + "@id": "skos:prefLabel" + }, + "portal_typical_domains": { + "@id": "dcterms:subject" + }, + "portal_url": { + "@type": "xsd:anyURI", + "@id": "hc:portal_url" + }, + "post_count": { + "@type": "xsd:integer", + "@id": "hc:post_count" + }, + "post_id": "@id", + "post_type_activity_streams_type": { + "@id": "skos:exactMatch" + }, + "post_type_category": { + "@id": "skos:broader" + }, + "post_type_description": { + "@id": "skos:definition" + }, + "post_type_ephemeral": { + "@type": "xsd:boolean", + "@id": "hc:ephemeral" + }, + "post_type_heritage_use_cases": { + "@id": "schema:description" + }, + "post_type_id": "@id", + "post_type_max_duration": { + "@id": "schema:duration" + }, + "post_type_media_formats": { + "@id": "schema:encodingFormat" + }, + "post_type_name": { + "@id": "skos:prefLabel" + }, + "post_type_schema_org_type": { + "@id": "skos:closeMatch" + }, + "post_type_supported_platforms": { + "@id": "schema:availableOnDevice" + }, + "post_types": { + "@type": "@id", + "@id": "hc:post_types" + }, + "post_url": { + "@type": "xsd:anyURI", + "@id": "hc:post_url" + }, + "postal_code": { + "@id": "schema:postalCode" + }, + "posted_by_profile": { + "@type": "@id", + "@id": "hc:posted_by_profile" + }, + "power_source": { + "@id": "hc:power_source" + }, + "powered_by_cms": { + "@type": "@id", + "@id": "crm:P33i_was_used_by" + }, + "powers_platform": { + "@type": "@id", + "@id": "hc:class/CollectionManagementSystem/powers_platform" + }, + "practitioner_community": { + "@id": "foaf:Group" + }, + "preceding_activity": { + "@type": "@id", + "@id": "prov:wasInformedBy" + }, + "preferred_label": { + "@id": "skos:prefLabel" + }, + "preferred_name": { + "@id": "skos:prefLabel" + }, + "preservation_approach": { + "@id": "crm:P3_has_note" + }, + "preservation_budget": { + "@type": "xsd:decimal", + "@id": "hc:class/Budget/preservation_budget" + }, + "preservation_event_type": { + "@id": "hc:class/auxiliary-digital-platform/preservation_event_type" + }, + "preservation_level": { + "@id": "premis:policy" + }, + "preservation_methods": { + "@id": "schema:maintainer" + }, + "preservation_note": { + "@id": "skos:note" + }, + "preservation_purpose": { + "@id": "hc:preservation_purpose" + }, + "preservation_requirements": { + "@id": "hc:preservation_requirements" + }, + "preservation_standards": { + "@id": "dcterms:conformsTo" + }, + "previous_observation": { + "@type": "xsd:anyURI", + "@id": "hc:previous_observation" + }, + "previous_owners": { + "@id": "crm:P51_has_former_or_current_owner" + }, + "price": { + "@id": "schema:price" + }, + "price_currency": { + "@id": "schema:priceCurrency" + }, + "price_text": { + "@id": "schema:price" + }, + "primary": { + "@id": "dcterms:spatial" + }, + "primary_presence_assertions": { + "@type": "@id", + "@id": "hc:primary_presence_assertions" + }, + "primary_register": { + "@type": "@id", + "@id": "gleif_base:isRegisteredIn" + }, + "primary_speaker": { + "@id": "hc:primary_speaker" + }, + "primary_system": { + "@type": "@id", + "@id": "hc:class/CustodianAdministration/primary_system" + }, + "priority": { + "@id": "hc:priority" + }, + "privacy_note": { + "@id": "skos:note" + }, + "processing_completed_date": { + "@type": "xsd:date", + "@id": "hc:class/CustodianArchive/processing_completed_date" + }, + "processing_duration_seconds": { + "@type": "xsd:float", + "@id": "hc:processing_duration_seconds" + }, + "processing_priority": { + "@id": "hc:class/CustodianArchive/processing_priority" + }, + "processing_started_date": { + "@type": "xsd:date", + "@id": "hc:class/CustodianArchive/processing_started_date" + }, + "processing_status": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/CustodianArchive/processing_status" + }, + "product_categories": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/gift-shop/product_categories" + }, + "profile_description": { + "@id": "hc:profile_description" + }, + "profile_image_url": { + "@type": "xsd:anyURI", + "@id": "hc:profile_image_url" + }, + "profile_url": { + "@type": "xsd:anyURI", + "@id": "hc:profile_url" + }, + "program_activities": { + "@id": "schema:knows" + }, + "programme_period": { + "@type": "@id", + "@id": "schema:temporalCoverage" + }, + "programme_year": { + "@type": "xsd:integer", + "@id": "hc:programme_year" + }, + "programming_languages": { + "@id": "hc:class/digital-platform/programming_languages" + }, + "programs_offered": { + "@id": "hc:class/education-center/programs_offered" + }, + "project_description": { + "@id": "hc:project_description" + }, + "project_id": "@id", + "project_identifiers": { + "@type": "xsd:anyURI", + "@id": "hc:project_identifiers" + }, + "project_name": { + "@id": "hc:project_name" + }, + "project_short_name": { + "@id": "hc:project_short_name" + }, + "project_status": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:project_status" + }, + "project_url": { + "@type": "xsd:anyURI", + "@id": "hc:project_url" + }, + "projects": { + "@type": "@id", + "@id": "org:hasSubOrganization" + }, + "prompt_tokens": { + "@type": "xsd:integer", + "@id": "hc:class/LLMResponse/prompt_tokens" + }, + "pronouns": { + "@id": "schema:pronouns" + }, + "protocol": { + "@id": "dcterms:conformsTo" + }, + "provenance": { + "@type": "@id", + "@id": "prov:wasGeneratedBy" + }, + "provenance_events": { + "@type": "@id", + "@id": "crm:P24i_changed_ownership_through" + }, + "provenance_note": { + "@id": "crm:P24_transferred_title_of" + }, + "provenance_statement": { + "@id": "rico:history" + }, + "provenance_text": { + "@id": "dcterms:provenance" + }, + "provider": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/LLMResponse/provider" + }, + "provides_access_to": { + "@type": "xsd:anyURI", + "@id": "hc:class/auxiliary-digital-platform/provides_access_to" + }, + "public_access": { + "@id": "schema:publicAccess" + }, + "public_education": { + "@id": "schema:EducationalEvent" + }, + "publication_date": { + "@type": "xsd:date", + "@id": "dcterms:issued" + }, + "publication_output": { + "@type": "xsd:boolean", + "@id": "schema:publishingPrinciples" + }, + "publication_place": { + "@id": "schema:locationCreated" + }, + "publication_series_name": { + "@id": "hc:class/research-center/publication_series_name" + }, + "published_at": { + "@type": "xsd:dateTime", + "@id": "dcterms:created" + }, + "published_by": { + "@type": "@id", + "@id": "dcterms:publisher" + }, + "publisher": { + "@id": "dcterms:publisher" + }, + "publishes_to": { + "@type": "xsd:anyURI", + "@id": "hc:publishes_to" + }, + "purpose": { + "@id": "hc:purpose" + }, + "purpose_clause": { + "@id": "hc:class/ArticlesOfAssociation/purpose_clause" + }, + "raw_subtitle_content": { + "@id": "hc:raw_subtitle_content" + }, + "reading_room_description": { + "@id": "hc:class/reading-room/reading_room_description" + }, + "reading_room_id": "@id", + "reading_room_name": { + "@id": "hc:class/reading-room/reading_room_name" + }, + "reading_room_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/reading-room/reading_room_type" + }, + "reason_description": { + "@id": "hc:class/temporary-location/reason_description" + }, + "reasoning_content": { + "@id": "hc:class/LLMResponse/reasoning_content" + }, + "recognized_person_name": { + "@id": "hc:recognized_person_name" + }, + "recommendations": { + "@id": "skos:note" + }, + "reconstruction_method": { + "@id": "prov:hadPlan" + }, + "record_date": { + "@type": "xsd:date", + "@id": "schema:dateCreated" + }, + "record_timespan": { + "@type": "@id", + "@id": "crm:P4_has_time-span" + }, + "record_type": { + "@id": "dcterms:type" + }, + "record_types": { + "@id": "dcterms:type" + }, + "recurrence_pattern": { + "@id": "hc:recurrence_pattern" + }, + "refers_to_access_policy": { + "@type": "@id", + "@id": "hc:refers_to_access_policy" + }, + "refers_to_custodian": { + "@type": "@id", + "@id": "dcterms:references" + }, + "refers_to_legal_status": { + "@type": "@id", + "@id": "hc:class/ArticlesOfAssociation/refers_to_legal_status" + }, + "refers_to_person": { + "@type": "@id", + "@id": "pico:observationOf" + }, + "refers_to_storage": { + "@type": "@id", + "@id": "hc:refers_to_storage" + }, + "region_bbox": { + "@type": "xsd:float", + "@id": "hc:region_bbox" + }, + "region_confidence": { + "@type": "xsd:float", + "@id": "hc:region_confidence" + }, + "region_language": { + "@id": "hc:region_language" + }, + "region_text": { + "@id": "hc:region_text" + }, + "region_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:region_type" + }, + "register_abbreviation": { + "@id": "gleif_base:hasAbbreviationLocal" + }, + "register_id": "@id", + "register_name": { + "@id": "gleif_base:hasNameTranslatedEnglish" + }, + "register_name_local": { + "@id": "gleif_base:hasNameLegalLocal" + }, + "register_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:category" + }, + "registered_datasets": { + "@type": "@id", + "@id": "hc:class/WebPortalTypes/registered_datasets" + }, + "registered_office_clause": { + "@id": "hc:class/ArticlesOfAssociation/registered_office_clause" + }, + "registration_authority": { + "@type": "@id", + "@id": "schema:maintainer" + }, + "registration_date": { + "@type": "xsd:date", + "@id": "hc:class/CustodianLegalStatus/registration_date" + }, + "registration_required": { + "@type": "xsd:boolean", + "@id": "hc:registration_required" + }, + "api_url": { + "@type": "xsd:anyURI", + "@id": "schema:url" + }, + "data_license": { + "@type": "xsd:anyURI", + "@id": "schema:license" + }, + "established_year": { + "@type": "xsd:integer", + "@id": "schema:foundingDate" + }, + "governance_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:additionalType" + }, + "predecessor": { + "@type": "@id", + "@id": "schema:predecessorOrganization" + }, + "registry_url": { + "@type": "xsd:anyURI", + "@id": "schema:url" + }, + "sparql_endpoint": { + "@type": "xsd:anyURI", + "@id": "void:sparqlEndpoint" + }, + "standards_maintained": { + "@type": "@id", + "@id": "schema:hasPart" + }, + "wikidata_id": { + "@id": "skos:exactMatch" + }, + "number": { + "@id": "gleif_base:hasTag" + }, + "trade_register": { + "@type": "@id", + "@id": "gleif_base:isRegisteredIn" + }, + "type": { + "@id": "dcterms:type" + }, + "regulatory_authority": { + "@type": "xsd:boolean", + "@id": "hc:class/OfficialInstitutionType/regulatory_authority" + }, + "related": { + "@id": "dcterms:spatial" + }, + "related_activities": { + "@type": "@id", + "@id": "hc:related_activities" + }, + "related_agendas": { + "@type": "xsd:anyURI", + "@id": "hc:related_agendas" + }, + "related_archives": { + "@type": "@id", + "@id": "rico:isRelatedTo" + }, + "related_calls": { + "@type": "xsd:anyURI", + "@id": "hc:related_calls" + }, + "related_exhibitions": { + "@type": "@id", + "@id": "hc:related_exhibitions" + }, + "related_guides": { + "@type": "@id", + "@id": "rico:isRelatedTo" + }, + "related_heritage_forms": { + "@type": "@id", + "@id": "skos:related" + }, + "related_loan": { + "@type": "xsd:anyURI", + "@id": "hc:related_loan" + }, + "related_project": { + "@id": "hc:class/auxiliary-digital-platform/related_project" + }, + "related_projects": { + "@type": "xsd:anyURI", + "@id": "hc:related_projects" + }, + "relationship": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "dcterms:relation" + }, + "religion": { + "@id": "pico:hasReligion" + }, + "religious_function": { + "@id": "schema:mission" + }, + "religious_tradition": { + "@id": "schema:religion" + }, + "remediation_notes": { + "@id": "hc:remediation_notes" + }, + "remediation_required": { + "@type": "xsd:boolean", + "@id": "hc:remediation_required" + }, + "replaces_primary_location": { + "@type": "xsd:boolean", + "@id": "hc:class/temporary-location/replaces_primary_location" + }, + "report_document": { + "@id": "dcterms:bibliographicCitation" + }, + "report_url": { + "@type": "xsd:anyURI", + "@id": "schema:url" + }, + "repository_software": { + "@id": "hc:class/digital-platform/repository_software" + }, + "repository_url": { + "@type": "xsd:anyURI", + "@id": "hc:class/CollectionManagementSystem/repository_url" + }, + "request_date": { + "@type": "xsd:date", + "@id": "schema:dateCreated" + }, + "request_id": { + "@id": "hc:class/ExtractionMetadata/request_id" + }, + "requirement_text": { + "@id": "hc:requirement_text" + }, + "requirement_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:requirement_type" + }, + "requirement_unit": { + "@id": "hc:requirement_unit" + }, + "requirement_value": { + "@id": "hc:requirement_value" + }, + "requirements": { + "@type": "@id", + "@id": "hc:requirements" + }, + "requires_appointment": { + "@type": "xsd:boolean", + "@id": "hc:class/reading-room/requires_appointment" + }, + "requires_articles_at_registration": { + "@type": "xsd:boolean", + "@id": "hc:class/ArticlesOfAssociation/requires_articles_at_registration" + }, + "requires_qualification": { + "@id": "schema:qualifications" + }, + "requires_registration": { + "@type": "xsd:boolean", + "@id": "hc:class/reading-room/requires_registration" + }, + "requires_research": { + "@type": "xsd:boolean", + "@id": "hc:requires_research" + }, + "requires_separate_registration": { + "@type": "xsd:boolean", + "@id": "hc:class/reading-room-annex/requires_separate_registration" + }, + "research_attempts": { + "@id": "prov:wasGeneratedBy" + }, + "research_center_description": { + "@id": "hc:class/research-center/research_center_description" + }, + "research_center_id": "@id", + "research_center_name": { + "@id": "hc:class/research-center/research_center_name" + }, + "research_center_subtype": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "skos:narrower" + }, + "research_center_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/research-center/research_center_type" + }, + "research_department": { + "@type": "xsd:boolean", + "@id": "schema:hasOfferCatalog" + }, + "research_focus": { + "@id": "dcterms:subject" + }, + "research_focus_areas": { + "@id": "hc:class/research-center/research_focus_areas" + }, + "research_infrastructure": { + "@id": "schema:hasOfferCatalog" + }, + "research_programs": { + "@id": "schema:ResearchProject" + }, + "research_projects": { + "@id": "schema:project" + }, + "reservation_required": { + "@type": "xsd:boolean", + "@id": "hc:class/catering-place/reservation_required" + }, + "resource_description": { + "@id": "dcterms:description" + }, + "response_formats": { + "@id": "dcterms:format" + }, + "responsible_actor": { + "@type": "@id", + "@id": "prov:wasAssociatedWith" + }, + "responsible_agent": { + "@type": "@id", + "@id": "prov:wasAssociatedWith" + }, + "responsible_department": { + "@id": "hc:responsible_department" + }, + "responsible_legal_entity": { + "@type": "@id", + "@id": "tooi:verantwoordelijke" + }, + "restriction_categories": { + "@id": "hc:restriction_categories" + }, + "restriction_description": { + "@id": "dcterms:description" + }, + "restriction_type": { + "@id": "dcterms:type" + }, + "resulting_units": { + "@type": "@id", + "@id": "prov:generated" + }, + "results_expected_date": { + "@type": "xsd:date", + "@id": "hc:results_expected_date" + }, + "retention_period_years": { + "@type": "xsd:integer", + "@id": "hc:class/CustodianAdministration/retention_period_years" + }, + "retention_schedule": { + "@id": "hc:class/CustodianAdministration/retention_schedule" + }, + "retention_tracking": { + "@type": "xsd:boolean", + "@id": "hc:retention_tracking" + }, + "retrieval_agent": { + "@id": "prov:wasAssociatedWith" + }, + "retrieval_method": { + "@id": "hc:retrieval_method" + }, + "retrieval_timestamp": { + "@type": "xsd:dateTime", + "@id": "hc:retrieval_timestamp" + }, + "retrieved_by": { + "@id": "hc:retrieved_by" + }, + "retrieved_on": { + "@type": "xsd:dateTime", + "@id": "pav:retrievedOn" + }, + "return_condition_report_url": { + "@type": "xsd:anyURI", + "@id": "hc:return_condition_report_url" + }, + "review_date": { + "@type": "xsd:date", + "@id": "hc:review_date" + }, + "review_status": { + "@id": "prov:qualifiedRevision" + }, + "revision_date": { + "@type": "xsd:date", + "@id": "dcterms:modified" + }, + "revision_number": { + "@type": "xsd:integer", + "@id": "hc:class/Budget/revision_number" + }, + "rico_equivalent": { + "@type": "xsd:anyURI", + "@id": "skos:closeMatch" + }, + "rico_has_or_had_holder": { + "@id": "rico:hasOrHadHolder" + }, + "rico_has_or_had_holder_note": { + "@id": "rico:scopeAndContent" + }, + "rico_note": { + "@id": "rico:scopeAndContent" + }, + "rico_organizational_principle": { + "@id": "rico:hasOrHadAllMembersWithOrganizationalPrinciple" + }, + "rico_organizational_principle_uri": { + "@id": "rico:hasOrHadAllMembersWithOrganizationalPrinciple" + }, + "rico_record_set_type": { + "@id": "rico:hasRecordSetType" + }, + "rights_statement": { + "@id": "hc:rights_statement" + }, + "rights_statement_url": { + "@type": "xsd:anyURI", + "@id": "hc:rights_statement_url" + }, + "role_category": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:category" + }, + "role_end_date": { + "@type": "xsd:date", + "@id": "schema:endDate" + }, + "role_id": "@id", + "role_name": { + "@id": "schema:roleName" + }, + "role_name_local": { + "@id": "schema:alternateName" + }, + "role_start_date": { + "@type": "xsd:date", + "@id": "schema:startDate" + }, + "role_title": { + "@id": "schema:jobTitle" + }, + "route_description": { + "@id": "skos:definition" + }, + "route_id": "@id", + "route_keywords": { + "@id": "dcterms:subject" + }, + "route_relevance_to_heritage": { + "@id": "schema:about" + }, + "route_title": { + "@id": "skos:prefLabel" + }, + "row_number": { + "@id": "hc:row_number" + }, + "safeguarded_by": { + "@type": "@id", + "@id": "crm:P109i_is_current_or_former_curator_of" + }, + "safeguarding_measures": { + "@id": "hc:class/IntangibleHeritageForm/safeguarding_measures" + }, + "safeguards": { + "@type": "@id", + "@id": "crm:P109_has_current_or_former_curator" + }, + "safety_certifications": { + "@id": "hc:class/conservation-lab/safety_certifications" + }, + "sales_activity": { + "@type": "xsd:boolean", + "@id": "schema:offers" + }, + "scene_count": { + "@type": "xsd:integer", + "@id": "hc:scene_count" + }, + "scene_segments": { + "@type": "@id", + "@id": "hc:scene_segments" + }, + "scene_types_detected": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:scene_types_detected" + }, + "scheme_description": { + "@id": "hc:scheme_description" + }, + "scheme_name": { + "@id": "hc:scheme_name" + }, + "scheme_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:scheme_type" + }, + "scheme_url": { + "@type": "xsd:anyURI", + "@id": "hc:scheme_url" + }, + "scope": { + "@id": "dcterms:description" + }, + "scope_category": { + "@id": "dcterms:subject" + }, + "scope_excludes": { + "@id": "skos:historyNote" + }, + "scope_includes": { + "@id": "skos:example" + }, + "scope_note": { + "@id": "skos:note" + }, + "date_filter_format": { + "@id": "dcterms:temporal" + }, + "default_results_per_page": { + "@type": "xsd:integer", + "@id": "schema:defaultValue" + }, + "example_query": { + "@id": "schema:workExample" + }, + "facet_fields": { + "@id": "hydra:variable" + }, + "http_method": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hydra:method" + }, + "max_results_per_page": { + "@type": "xsd:integer", + "@id": "schema:maxValue" + }, + "opensearch_description_url": { + "@type": "xsd:anyURI", + "@id": "schema:potentialAction" + }, + "pagination_method": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hydra:pageIndex" + }, + "query_parameters": { + "@type": "@id", + "@id": "hydra:mapping" + }, + "response_format": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "dcterms:format" + }, + "result_schema_url": { + "@type": "xsd:anyURI", + "@id": "schema:encodingFormat" + }, + "search_url": { + "@type": "xsd:anyURI", + "@id": "dcat:endpointURL" + }, + "sort_fields": { + "@id": "hydra:variable" + }, + "supports_boolean_operators": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "supports_facets": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "supports_field_search": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "supports_phrase_search": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "supports_sorting": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "supports_wildcards": { + "@type": "xsd:boolean", + "@id": "schema:additionalProperty" + }, + "allowed_values": { + "@id": "schema:valueReference" + }, + "default_value": { + "@id": "schema:defaultValue" + }, + "example_value": { + "@id": "schema:workExample" + }, + "required": { + "@type": "xsd:boolean", + "@id": "hydra:required" + }, + "seasonal_hours": { + "@id": "hc:class/outdoor-site/seasonal_hours" + }, + "seating_capacity": { + "@type": "xsd:integer", + "@id": "hc:class/reading-room/seating_capacity" + }, + "secondary": { + "@id": "dcterms:spatial" + }, + "secondary_systems": { + "@type": "@id", + "@id": "hc:class/CustodianAdministration/secondary_systems" + }, + "section_id": { + "@id": "dcterms:identifier" + }, + "section_links": { + "@type": "@id", + "@id": "schema:relatedLink" + }, + "secularization_status": { + "@id": "schema:operatingStatus" + }, + "security_level": { + "@id": "schema:securityClearance" + }, + "segment_index": { + "@type": "xsd:integer", + "@id": "hc:segment_index" + }, + "segment_text": { + "@id": "hc:segment_text" + }, + "segments": { + "@type": "@id", + "@id": "hc:segments" + }, + "sensory_heritage_domain": { + "@id": "crm:P2_has_type" + }, + "sentence_count": { + "@type": "xsd:integer", + "@id": "hc:sentence_count" + }, + "served_by": { + "@type": "xsd:anyURI", + "@id": "schema:provider" + }, + "serves_finding_aids": { + "@type": "xsd:anyURI", + "@id": "rico:isOrWasProviderOf" + }, + "serves_function_of": { + "@id": "hc:class/temporary-location/serves_function_of" + }, + "serves_staff": { + "@type": "xsd:boolean", + "@id": "hc:class/catering-place/serves_staff" + }, + "serves_visitors_only": { + "@type": "xsd:boolean", + "@id": "hc:class/catering-place/serves_visitors_only" + }, + "service_area": { + "@type": "@id", + "@id": "schema:areaServed" + }, + "service_area_description": { + "@id": "dcterms:description" + }, + "service_area_id": "@id", + "service_area_name": { + "@id": "schema:name" + }, + "service_area_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "dcterms:type" + }, + "service_offerings": { + "@id": "hc:service_offerings" + }, + "service_portfolio": { + "@id": "schema:serviceType" + }, + "license_notes": { + "@id": "schema:description" + }, + "service_name": { + "@id": "schema:name" + }, + "service_url": { + "@type": "xsd:anyURI", + "@id": "schema:url" + }, + "services_offered": { + "@id": "hc:class/branch-office/services_offered" + }, + "settlement": { + "@type": "@id", + "@id": "schema:location" + }, + "settlement_id": "@id", + "settlement_name": { + "@id": "schema:name" + }, + "shares_catalog_with_main": { + "@type": "xsd:boolean", + "@id": "hc:class/reading-room-annex/shares_catalog_with_main" + }, + "shelf_number": { + "@type": "xsd:integer", + "@id": "hc:shelf_number" + }, + "shipping_method": { + "@id": "hc:shipping_method" + }, + "shop_description": { + "@id": "hc:class/gift-shop/shop_description" + }, + "shop_name": { + "@id": "hc:class/gift-shop/shop_name" + }, + "shop_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/gift-shop/shop_type" + }, + "site_portfolio": { + "@id": "schema:owns" + }, + "skos_broader": { + "@type": "xsd:anyURI", + "@id": "skos:broader" + }, + "skos_broader_label": { + "@id": "rdfs:label" + }, + "skos_narrower": { + "@type": "xsd:anyURI", + "@id": "skos:narrower" + }, + "skos_related": { + "@type": "xsd:anyURI", + "@id": "skos:related" + }, + "slug": { + "@id": "schema:identifier" + }, + "social_media_example_profiles": { + "@id": "skos:example" + }, + "social_media_features": { + "@id": "schema:featureList" + }, + "social_media_heritage_use_cases": { + "@id": "schema:description" + }, + "social_media_platform_category": { + "@id": "skos:broader" + }, + "social_media_platform_description": { + "@id": "skos:definition" + }, + "social_media_platform_name": { + "@id": "skos:prefLabel" + }, + "social_media_platform_type_id": "@id", + "social_media_profile_id": "@id", + "social_media_url_patterns": { + "@id": "schema:url" + }, + "social_media_wikidata_id": { + "@id": "skos:exactMatch" + }, + "audio_format_types": { + "@id": "hc:class/SoundArchive/audio_format_types" + }, + "subject_focus": { + "@id": "hc:class/SoundArchive/subject_focus" + }, + "source": { + "@type": "xsd:anyURI", + "@id": "prov:hadPrimarySource" + }, + "source_creator": { + "@id": "dcterms:creator" + }, + "source_dataset": { + "@id": "dcterms:source" + }, + "source_date": { + "@type": "xsd:date", + "@id": "dcterms:created" + }, + "source_file": { + "@id": "hc:class/ExtractionMetadata/source_file" + }, + "source_language_auto_detected": { + "@type": "xsd:boolean", + "@id": "hc:source_language_auto_detected" + }, + "source_section": { + "@id": "hc:source_section" + }, + "source_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "crm:P2_has_type" + }, + "source_uri": { + "@type": "xsd:anyURI", + "@id": "dcterms:identifier" + }, + "source_url": { + "@type": "xsd:anyURI", + "@id": "pav:retrievedFrom" + }, + "source_video": { + "@id": "hc:source_video" + }, + "source_video_url": { + "@type": "xsd:anyURI", + "@id": "hc:source_video_url" + }, + "spatial_resolution": { + "@id": "hc:class/GeoSpatialPlace/spatial_resolution" + }, + "speaker_count": { + "@type": "xsd:integer", + "@id": "hc:speaker_count" + }, + "speaker_id": { + "@id": "hc:speaker_id" + }, + "speaker_label": { + "@id": "hc:speaker_label" + }, + "special_collections": { + "@id": "dcterms:hasPart" + }, + "special_requirements": { + "@id": "hc:special_requirements" + }, + "specialized_place": { + "@type": "@id", + "@id": "hc:class/auxiliary-place/specialized_place" + }, + "format_specialization": { + "@id": "hc:class/SpecializedArchive/format_specialization" + }, + "specialization_field": { + "@id": "hc:class/SpecializedArchive/specialization_field" + }, + "czech_archive_category": { + "@id": "hc:class/SpecializedArchivesCzechia/czech_archive_category" + }, + "specificity_agent": { + "@id": "prov:wasAttributedTo" + }, + "specificity_annotation": { + "@type": "@id", + "@id": "hc:specificityAnnotation" + }, + "specificity_rationale": { + "@id": "skos:note" + }, + "specificity_score": { + "@type": "xsd:float", + "@id": "hc:specificityScore" + }, + "specificity_timestamp": { + "@type": "xsd:dateTime", + "@id": "prov:generatedAtTime" + }, + "specimen_types": { + "@id": "dwc:taxonRank" + }, + "spectrum_procedure": { + "@id": "dcterms:conformsTo" + }, + "square_meters": { + "@type": "xsd:float", + "@id": "hc:class/gift-shop/square_meters" + }, + "staff_count": { + "@type": "xsd:integer", + "@id": "schema:numberOfEmployees" + }, + "staff_id": { + "@id": "hc:class/ExtractionMetadata/staff_id" + }, + "staff_impact": { + "@id": "skos:note" + }, + "staff_members": { + "@type": "@id", + "@id": "org:hasMember" + }, + "staff_role": { + "@type": "@id", + "@id": "schema:roleName" + }, + "applicable_schema_types": { + "@type": "xsd:anyURI", + "@id": "schema:about" + }, + "canonical_format": { + "@type": "@id", + "@id": "schema:encodingFormat" + }, + "category": { + "@id": "schema:category" + }, + "contributing_agencies": { + "@type": "@id", + "@id": "schema:contributor" + }, + "current_version": { + "@id": "schema:version" + }, + "defined_by": { + "@type": "@id", + "@id": "dcterms:creator" + }, + "first_published_year": { + "@type": "xsd:integer", + "@id": "schema:datePublished" + }, + "formats": { + "@type": "@id", + "@id": "schema:hasPart" + }, + "glamorcubesfixphdnt_types": { + "@id": "schema:applicableCategory" + }, + "governance_council": { + "@type": "@id", + "@id": "schema:organizer" + }, + "governance_model": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:governmentType" + }, + "identifier_domain": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:about" + }, + "iso_standard_number": { + "@id": "dcterms:identifier" + }, + "lookup_url_template": { + "@id": "schema:urlTemplate" + }, + "scope_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:additionalType" + }, + "standard_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "schema:additionalType" + }, + "standardized_name": { + "@id": "skos:prefLabel" + }, + "standards_applied": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:standards_applied" + }, + "standards_compliance": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:standards_compliance" + }, + "headquarters_country": { + "@id": "schema:location" + }, + "member_countries": { + "@id": "schema:member" + }, + "start": { + "@id": "schema:startDate" + }, + "start_date": { + "@type": "xsd:date", + "@id": "schema:startDate" + }, + "start_seconds": { + "@type": "xsd:float", + "@id": "hc:start_seconds" + }, + "start_time": { + "@id": "hc:start_time" + }, + "started_at_time": { + "@type": "xsd:dateTime", + "@id": "prov:startedAtTime" + }, + "government_branch_coverage": { + "@id": "hc:class/StateArchives/government_branch_coverage" + }, + "state_jurisdiction": { + "@id": "hc:class/StateArchives/state_jurisdiction" + }, + "parent_state_archive": { + "@id": "hc:class/StateArchivesSection/parent_state_archive" + }, + "provincial_coverage": { + "@id": "hc:class/StateArchivesSection/provincial_coverage" + }, + "district_name": { + "@id": "hc:class/StateDistrictArchive/district_name" + }, + "regional_archive_parent": { + "@id": "hc:class/StateDistrictArchive/regional_archive_parent" + }, + "statement_id": "@id", + "statement_language": { + "@id": "hc:statement_language" + }, + "statement_summary": { + "@id": "hc:statement_summary" + }, + "statement_text": { + "@id": "hc:statement_text" + }, + "statement_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:statement_type" + }, + "region_name": { + "@id": "hc:class/StateRegionalArchiveCzechia/region_name" + }, + "supervised_district_archives": { + "@id": "hc:class/StateRegionalArchiveCzechia/supervised_district_archives" + }, + "stewardship_model": { + "@id": "schema:ownershipFundingInfo" + }, + "stewardship_responsibility": { + "@id": "schema:maintainer" + }, + "storage_conditions": { + "@type": "@id", + "@id": "hc:storage_conditions" + }, + "storage_description": { + "@id": "hc:storage_description" + }, + "storage_facilities": { + "@type": "@id", + "@id": "premis:storedAt" + }, + "storage_id": "@id", + "storage_location": { + "@type": "xsd:anyURI", + "@id": "premis:storedAt" + }, + "storage_name": { + "@id": "hc:storage_name" + }, + "storage_security_level": { + "@id": "hc:storage_security_level" + }, + "storage_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:storage_type" + }, + "storage_type_broader": { + "@type": "@id", + "@id": "hc:storage_type_broader" + }, + "storage_type_code": { + "@id": "hc:storage_type_code" + }, + "storage_type_description": { + "@id": "hc:storage_type_description" + }, + "storage_type_id": "@id", + "storage_type_label": { + "@id": "hc:storage_type_label" + }, + "storage_type_narrower": { + "@type": "@id", + "@id": "hc:storage_type_narrower" + }, + "storage_type_related": { + "@type": "@id", + "@id": "hc:storage_type_related" + }, + "storage_units": { + "@type": "@id", + "@id": "hc:storage_units" + }, + "unit_id": { + "@type": "xsd:anyURI", + "@id": "hc:unit_id" + }, + "stores_collections": { + "@type": "@id", + "@id": "hc:stores_collections" + }, + "stores_objects": { + "@id": "hc:stores_objects" + }, + "strategic_objectives": { + "@id": "org:purpose" + }, + "street_address": { + "@id": "schema:streetAddress" + }, + "sub_collections": { + "@type": "@id", + "@id": "rico:hasOrHadPart" + }, + "sub_departments": { + "@type": "@id", + "@id": "hc:sub_departments" + }, + "sub_guide_description": { + "@id": "dcterms:description" + }, + "sub_guide_temporal_coverage": { + "@id": "dcterms:temporal" + }, + "sub_guide_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "dcterms:type" + }, + "sub_guides": { + "@type": "@id", + "@id": "rico:includes" + }, + "sub_sections": { + "@type": "@id", + "@id": "schema:hasPart" + }, + "subdivision_name": { + "@id": "hc:class/subregion/subdivision_name" + }, + "subject_areas": { + "@id": "dcterms:subject" + }, + "subject_depicted": { + "@id": "schema:about" + }, + "subregion": { + "@type": "@id", + "@id": "schema:addressRegion" + }, + "subtitle_format": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:subtitle_format" + }, + "succeeded_by": { + "@type": "@id", + "@id": "hc:class/WebPortalTypes/succeeded_by" + }, + "successor_collection": { + "@type": "xsd:anyURI", + "@id": "hc:class/CustodianArchive/successor_collection" + }, + "successor_portal": { + "@type": "xsd:anyURI", + "@id": "hc:successor_portal" + }, + "superseded_by": { + "@type": "xsd:anyURI", + "@id": "dcterms:isReplacedBy" + }, + "supersedes": { + "@type": "xsd:anyURI", + "@id": "dcterms:replaces" + }, + "supplier_relationships": { + "@id": "hc:class/gift-shop/supplier_relationships" + }, + "supported_metadata_standards": { + "@id": "hc:class/CollectionManagementSystem/supported_metadata_standards" + }, + "supranational_code": { + "@id": "schema:identifier" + }, + "surname_prefix": { + "@id": "pnv:surnamePrefix" + }, + "table_of_contents": { + "@id": "schema:tableOfContents" + }, + "tags": { + "@id": "hc:tags" + }, + "target_audiences": { + "@id": "hc:class/education-center/target_audiences" + }, + "target_materials": { + "@id": "hc:target_materials" + }, + "target_relative_humidity": { + "@type": "xsd:float", + "@id": "hc:target_relative_humidity" + }, + "target_temperature_celsius": { + "@type": "xsd:float", + "@id": "hc:target_temperature_celsius" + }, + "taste_scent_subtype": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "skos:narrower" + }, + "tax_deductible": { + "@type": "xsd:boolean", + "@id": "hc:tax_deductible" + }, + "tax_scheme": { + "@id": "hc:tax_scheme" + }, + "technical_specifications": { + "@id": "hc:technical_specifications" + }, + "techniques_used": { + "@id": "crm:P32_used_general_technique" + }, + "technology_stack": { + "@id": "schema:softwareVersion" + }, + "broadcast_era_coverage": { + "@id": "hc:class/TelevisionArchive/broadcast_era_coverage" + }, + "broadcast_network": { + "@id": "hc:class/TelevisionArchive/broadcast_network" + }, + "program_types": { + "@id": "hc:class/TelevisionArchive/program_types" + }, + "temp_location_description": { + "@id": "hc:class/temporary-location/temp_location_description" + }, + "temp_location_id": "@id", + "temp_location_name": { + "@id": "hc:class/temporary-location/temp_location_name" + }, + "temp_location_reason": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/temporary-location/temp_location_reason" + }, + "temperature_max": { + "@type": "xsd:float", + "@id": "hc:temperature_max" + }, + "temperature_min": { + "@type": "xsd:float", + "@id": "hc:temperature_min" + }, + "temperature_target": { + "@type": "xsd:float", + "@id": "hc:temperature_target" + }, + "temperature_tolerance": { + "@type": "xsd:float", + "@id": "hc:temperatureTolerance" + }, + "template_specificity": { + "@type": "@id", + "@id": "hc:templateSpecificity" + }, + "temporal_coverage": { + "@id": "hc:class/WomensArchives/temporal_coverage" + }, + "temporal_extent": { + "@type": "@id", + "@id": "crm:P4_has_time-span" + }, + "terminal_count": { + "@type": "xsd:integer", + "@id": "hc:class/reading-room/terminal_count" + }, + "text_fragment": { + "@type": "xsd:anyURI", + "@id": "hc:text_fragment" + }, + "text_languages_detected": { + "@id": "hc:text_languages_detected" + }, + "text_region_count": { + "@type": "xsd:integer", + "@id": "hc:text_region_count" + }, + "text_regions": { + "@type": "@id", + "@id": "hc:text_regions" + }, + "text_segments": { + "@type": "@id", + "@id": "hc:text_segments" + }, + "text_types_detected": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:text_types_detected" + }, + "thematic_areas": { + "@id": "hc:thematic_areas" + }, + "thematic_routes": { + "@type": "@id", + "@id": "schema:hasPart" + }, + "thematic_scope": { + "@id": "hc:thematic_scope" + }, + "thinking_mode": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/LLMResponse/thinking_mode" + }, + "threats": { + "@id": "hc:class/IntangibleHeritageForm/threats" + }, + "thumbnail_url": { + "@type": "xsd:anyURI", + "@id": "hc:thumbnail_url" + }, + "time_of_destruction": { + "@type": "@id", + "@id": "crm:P4_has_time-span" + }, + "title": { + "@id": "dcterms:title" + }, + "title_en": { + "@id": "dcterms:title" + }, + "title_nl": { + "@id": "dcterms:title" + }, + "to_location": { + "@type": "@id", + "@id": "hc:to_location" + }, + "to_owner": { + "@type": "xsd:anyURI", + "@id": "crm:P22_transferred_title_to" + }, + "to_owner_text": { + "@id": "crm:P22_transferred_title_to" + }, + "took_place_at": { + "@type": "xsd:anyURI", + "@id": "crm:P7_took_place_at" + }, + "topics": { + "@id": "dcterms:subject" + }, + "total_annual_budget": { + "@id": "hc:total_annual_budget" + }, + "total_budget": { + "@id": "hc:total_budget" + }, + "total_budget_amount": { + "@type": "xsd:decimal", + "@id": "hc:class/Budget/total_budget_amount" + }, + "total_characters_extracted": { + "@type": "xsd:integer", + "@id": "hc:total_characters_extracted" + }, + "total_frames_analyzed": { + "@type": "xsd:integer", + "@id": "hc:total_frames_analyzed" + }, + "total_investment": { + "@id": "schema:amount" + }, + "total_tokens": { + "@type": "xsd:integer", + "@id": "hc:class/LLMResponse/total_tokens" + }, + "track_id": { + "@id": "hc:track_id" + }, + "track_name": { + "@id": "hc:track_name" + }, + "tracked_in_cms": { + "@type": "@id", + "@id": "hc:class/CustodianArchive/tracked_in_cms" + }, + "tracking_ids_assigned": { + "@type": "xsd:integer", + "@id": "hc:tracking_ids_assigned" + }, + "industry_sectors": { + "@id": "hc:class/TradeUnionArchive/industry_sectors" + }, + "labor_movement_coverage": { + "@id": "hc:class/TradeUnionArchive/labor_movement_coverage" + }, + "union_affiliation": { + "@id": "hc:class/TradeUnionArchive/union_affiliation" + }, + "traditional_products": { + "@id": "schema:makesOffer" + }, + "transcript_format": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:transcript_format" + }, + "transfer_location": { + "@type": "@id", + "@id": "crm:P7_took_place_at" + }, + "transfer_location_text": { + "@id": "crm:P7_took_place_at" + }, + "transfer_policy": { + "@id": "hc:transfer_policy" + }, + "transfer_to_collection_date": { + "@type": "xsd:date", + "@id": "hc:class/CustodianArchive/transfer_to_collection_date" + }, + "transition_types_detected": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:transition_types_detected" + }, + "transmission_methods": { + "@id": "crm:P16_used_specific_technique" + }, + "traveling_venues": { + "@id": "hc:traveling_venues" + }, + "treatment_description": { + "@id": "schema:description" + }, + "treatment_type": { + "@id": "aat:300404522" + }, + "type_hypotheses": { + "@id": "skos:note" + }, + "type_label": { + "@id": "hc:class/CustodianType/type_label" + }, + "typical_approval_time": { + "@id": "hc:typical_approval_time" + }, + "typical_conditions": { + "@id": "hc:typical_conditions" + }, + "typical_domains": { + "@id": "schema:category" + }, + "typical_grant_range": { + "@id": "hc:typical_grant_range" + }, + "typical_metadata_standards": { + "@id": "dcterms:conformsTo" + }, + "typical_responsibilities": { + "@id": "schema:responsibilities" + }, + "typical_scope": { + "@id": "schema:areaServed" + }, + "typical_technical_features": { + "@id": "schema:featureList" + }, + "unesco_domain": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "dcterms:subject" + }, + "unesco_inscription_year": { + "@type": "xsd:integer", + "@id": "hc:class/IntangibleHeritageForm/unesco_inscription_year" + }, + "unesco_list_status": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/IntangibleHeritageForm/unesco_list_status" + }, + "unique_face_count": { + "@type": "xsd:integer", + "@id": "hc:unique_face_count" + }, + "unique_object_count": { + "@type": "xsd:integer", + "@id": "hc:unique_object_count" + }, + "unit_affiliation": { + "@type": "@id", + "@id": "schema:affiliation" + }, + "unit_description": { + "@id": "hc:unit_description" + }, + "unit_identifier": { + "@id": "hc:unit_identifier" + }, + "unit_name": { + "@id": "skos:prefLabel" + }, + "unit_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "dct:type" + }, + "parent_university": { + "@id": "hc:class/UniversityArchive/parent_university" + }, + "records_scope": { + "@id": "hc:class/UniversityArchive/records_scope" + }, + "update_frequency": { + "@id": "hc:update_frequency" + }, + "updated_at": { + "@type": "xsd:dateTime", + "@id": "dcterms:modified" + }, + "url": { + "@type": "xsd:anyURI", + "@id": "schema:url" + }, + "used": { + "@type": "@id", + "@id": "prov:used" + }, + "used_by": { + "@type": "@id", + "@id": "prov:wasUsedBy" + }, + "used_by_custodian": { + "@type": "@id", + "@id": "hc:class/CollectionManagementSystem/used_by_custodian" + }, + "user_communities": { + "@id": "schema:audience" + }, + "uv_filtered_required": { + "@type": "xsd:boolean", + "@id": "hc:uv_filtered_required" + }, + "valid_from_geo": { + "@type": "xsd:date", + "@id": "schema:validFrom" + }, + "valid_to_geo": { + "@type": "xsd:date", + "@id": "schema:validThrough" + }, + "validation_status": { + "@id": "schema:status" + }, + "validity_period": { + "@type": "@id", + "@id": "schema:temporalCoverage" + }, + "variant_of_name": { + "@type": "@id", + "@id": "skos:broader" + }, + "vendor_name": { + "@id": "hc:class/CollectionManagementSystem/vendor_name" + }, + "vendor_url": { + "@type": "xsd:anyURI", + "@id": "hc:class/CollectionManagementSystem/vendor_url" + }, + "verification_date": { + "@type": "xsd:dateTime", + "@id": "hc:verification_date" + }, + "verified": { + "@type": "xsd:boolean", + "@id": "hc:verified" + }, + "verified_by": { + "@id": "hc:verified_by" + }, + "version_number": { + "@type": "xsd:integer", + "@id": "hc:class/ArticlesOfAssociation/version_number" + }, + "viability_status": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/IntangibleHeritageForm/viability_status" + }, + "video_category_id": { + "@id": "hc:video_category_id" + }, + "video_comments": { + "@type": "@id", + "@id": "hc:video_comments" + }, + "view_count": { + "@type": "xsd:integer", + "@id": "hc:view_count" + }, + "visiting_hours": { + "@id": "hc:class/historic-building/visiting_hours" + }, + "visitor_conversion_rate": { + "@type": "xsd:float", + "@id": "hc:class/gift-shop/visitor_conversion_rate" + }, + "visitor_count": { + "@type": "xsd:integer", + "@id": "schema:attendeeCount" + }, + "visitor_facilities": { + "@id": "schema:amenityFeature" + }, + "visitor_services": { + "@id": "schema:amenityFeature" + }, + "warehouse_description": { + "@id": "hc:class/warehouse/warehouse_description" + }, + "warehouse_floor_area_sqm": { + "@type": "xsd:float", + "@id": "hc:class/warehouse/warehouse_floor_area_sqm" + }, + "warehouse_id": "@id", + "warehouse_managed_by": { + "@id": "hc:class/warehouse/warehouse_managed_by" + }, + "warehouse_name": { + "@id": "hc:class/warehouse/warehouse_name" + }, + "warehouse_security_level": { + "@id": "hc:class/warehouse/warehouse_security_level" + }, + "warehouse_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:class/warehouse/warehouse_type" + }, + "was_derived_from": { + "@type": "xsd:anyURI", + "@id": "prov:wasDerivedFrom" + }, + "was_generated_by": { + "@type": "@id", + "@id": "prov:wasGeneratedBy" + }, + "was_revision_of": { + "@type": "@id", + "@id": "prov:wasRevisionOf" + }, + "web_claims": { + "@type": "@id", + "@id": "prov:wasDerivedFrom" + }, + "web_observations": { + "@type": "xsd:anyURI", + "@id": "hc:web_observations" + }, + "crawl_frequency": { + "@id": "hc:class/WebArchive/crawl_frequency" + }, + "warc_format": { + "@type": "xsd:boolean", + "@id": "hc:class/WebArchive/warc_format" + }, + "wikidata_alignment": { + "@type": "@id", + "@id": "hc:wikidataAlignment" + }, + "wikidata_class": { + "@id": "skos:exactMatch" + }, + "wikidata_entity": { + "@id": "schema:sameAs" + }, + "wikidata_entity_id": { + "@id": "wdt:P31" + }, + "wikidata_entity_label": { + "@id": "rdfs:label" + }, + "wikidata_equivalent": { + "@id": "hc:wikidata_equivalent" + }, + "wikidata_mapping": { + "@id": "skos:exactMatch" + }, + "wikidata_mapping_rationale": { + "@id": "skos:note" + }, + "wikidata_mapping_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "skos:mappingRelation" + }, + "geographic_focus": { + "@id": "hc:class/WomensArchives/geographic_focus" + }, + "word_count": { + "@type": "xsd:integer", + "@id": "hc:word_count" + }, + "workshop_spaces": { + "@type": "xsd:integer", + "@id": "hc:class/education-center/workshop_spaces" + }, + "worldcat_id": { + "@id": "schema:identifier" + }, + "xpath": { + "@id": "hc:xpath" + }, + "xpath_match_score": { + "@type": "xsd:float", + "@id": "hc:xpath_match_score" + }, + "xpath_matched_text": { + "@id": "hc:xpath_matched_text" + }, + "years_restricted": { + "@type": "xsd:integer", + "@id": "schema:duration" + }, + "zone_description": { + "@id": "hc:zone_description" + }, + "zone_name": { + "@id": "hc:zone_name" + }, + "zone_type": { + "@context": { + "text": "skos:notation", + "description": "skos:prefLabel", + "meaning": "@id" + }, + "@id": "hc:zone_type" + }, + "AcademicArchive": { + "@id": "schema:ArchiveOrganization" + }, + "AcademicArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "AcademicStudentRecordSeries": { + "@id": "rico:RecordSetType" + }, + "AccessPolicy": { + "@id": "premis:RightsDeclaration" + }, + "AccessRestriction": { + "@id": "dcterms:RightsStatement" + }, + "ActiveRecordsFonds": { + "@id": "rico:RecordSetType" + }, + "ActivistPapersCollection": { + "@id": "rico:RecordSetType" + }, + "AdministrativeCorrespondenceSeries": { + "@id": "rico:RecordSetType" + }, + "AdministrativeOffice": { + "@id": "org:Site" + }, + "AdvertisingRadioArchive": { + "@id": "skos:Concept" + }, + "AdvertisingRadioArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "AgencyAdministrativeFonds": { + "@id": "rico:RecordSetType" + }, + "AggregatedOnlineDatabase": { + "@id": "wikidata:Q110272188" + }, + "Aggregator": { + "@id": "wikidata:Q393351" + }, + "AllocationAgency": { + "@id": "org:FormalOrganization" + }, + "AnalyticalInventory": { + "@id": "wd:Q116872592" + }, + "AnimalSoundArchive": { + "@id": "skos:Concept" + }, + "AnimalSoundArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "APIEndpoint": { + "@id": "dcat:DataService" + }, + "ArchaeologicalPortal": { + "@id": "schema:Dataset" + }, + "ArchitectPapersCollection": { + "@id": "rico:RecordSetType" + }, + "ArchitecturalArchive": { + "@id": "skos:Concept" + }, + "ArchitecturalArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "ArchitecturalDrawingCollection": { + "@id": "rico:RecordSetType" + }, + "ArchivalInventory": { + "@id": "wd:Q108809848" + }, + "ArchivalPortal": { + "@id": "schema:ArchiveOrganization" + }, + "ArchivalRepository": { + "@id": "wikidata:Q66656823" + }, + "ArchiveAssociation": { + "@id": "skos:Concept" + }, + "ArchiveNetwork": { + "@id": "schema:ArchiveOrganization" + }, + "ArchiveOfInternationalOrganization": { + "@id": "skos:Concept" + }, + "ArchiveOfInternationalOrganizationRecordSetType": { + "@id": "rico:RecordSetType" + }, + "ArchiveOrganizationType": { + "@id": "skos:Concept" + }, + "ArchiveReference": { + "@id": "rico:RecordSet" + }, + "ArchivesForBuildingRecords": { + "@id": "skos:Concept" + }, + "ArchivesForBuildingRecordsRecordSetType": { + "@id": "rico:RecordSetType" + }, + "ArchivesPortal": { + "@id": "wikidata:Q635985" + }, + "ArchivesRegionales": { + "@id": "skos:Concept" + }, + "ArchivesRegionalesRecordSetType": { + "@id": "rico:RecordSetType" + }, + "Archivist": { + "@id": "hc:class/StaffRoles/Archivist" + }, + "ArtArchive": { + "@id": "skos:Concept" + }, + "ArtArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "ArticlePostType": { + "@id": "as:Article" + }, + "ArticlesOfAssociation": { + "@id": "rico:Record" + }, + "ArtistInResidence": { + "@id": "hc:class/StaffRoles/ArtistInResidence" + }, + "ArtistPapersCollection": { + "@id": "rico:RecordSetType" + }, + "AssociationArchive": { + "@id": "skos:Concept" + }, + "AudioPostType": { + "@id": "as:Audio" + }, + "AudioRecordingCollection": { + "@id": "rico:RecordSetType" + }, + "AudiovisualArchive": { + "@id": "skos:Concept" + }, + "AudiovisualArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "AudiovisualProductionFonds": { + "@id": "rico:RecordSetType" + }, + "AudiovisualRecordingCollection": { + "@id": "rico:RecordSetType" + }, + "AuthorPapersCollection": { + "@id": "rico:RecordSetType" + }, + "AuxiliaryDigitalPlatform": { + "@id": "dcat:Catalog" + }, + "AuxiliaryPlace": { + "@id": "org:Site" + }, + "BackendDeveloper": { + "@id": "hc:class/StaffRoles/BackendDeveloper" + }, + "BankArchive": { + "@id": "skos:Concept" + }, + "BankArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "BankingRecordsFonds": { + "@id": "rico:RecordSetType" + }, + "BibliographicDatabase": { + "@id": "wd:Q1789476" + }, + "BibliographicDatabasePlatform": { + "@id": "wikidata:Q1789476" + }, + "BibliographicIndex": { + "@id": "wd:Q2033233" + }, + "BibliographicReview": { + "@id": "wd:Q59156132" + }, + "Bibliography": { + "@id": "wd:Q1631107" + }, + "BioacousticRecordingCollection": { + "@id": "rico:RecordSetType" + }, + "BioCustodianType": { + "@id": "skos:Concept" + }, + "BlogNews": { + "@id": "schema:Blog" + }, + "Bluesky": { + "@id": "wikidata:Q110992441" + }, + "BoardMember": { + "@id": "hc:class/StaffRoles/BoardMember" + }, + "BookingSystem": { + "@id": "schema:ReservationPackage" + }, + "BranchOffice": { + "@id": "org:Site" + }, + "BroadcastCollection": { + "@id": "rico:RecordSetType" + }, + "BroadcastRecordingFonds": { + "@id": "rico:RecordSetType" + }, + "Budget": { + "@id": "frapo:FundingProgramme" + }, + "BuildingPermitSeries": { + "@id": "rico:RecordSetType" + }, + "BuildingProjectFonds": { + "@id": "rico:RecordSetType" + }, + "BusinessRecordsFonds": { + "@id": "rico:RecordSetType" + }, + "CadastralAndLandRecordsFonds": { + "@id": "rico:RecordSetType" + }, + "Calendar": { + "@id": "wd:Q25221891" + }, + "CallCenterWorker": { + "@id": "hc:class/StaffRoles/CallCenterWorker" + }, + "CallForApplication": { + "@id": "schema:Offer" + }, + "CampaignDocumentationSeries": { + "@id": "rico:RecordSetType" + }, + "CampaignRecordCollection": { + "@id": "rico:RecordSetType" + }, + "CampusDocumentationCollection": { + "@id": "rico:RecordSetType" + }, + "CantonalArchive": { + "@id": "skos:Concept" + }, + "CantonalArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "CantonalGovernmentFonds": { + "@id": "rico:RecordSetType" + }, + "CantonalLegislationCollection": { + "@id": "rico:RecordSetType" + }, + "CarouselPostType": { + "@id": "hc:Carousel" + }, + "Catalogue": { + "@id": "wd:Q2352616" + }, + "Caterer": { + "@id": "hc:class/StaffRoles/Caterer" + }, + "CateringPlace": { + "@id": "schema:FoodEstablishment" + }, + "CathedralArchive": { + "@id": "skos:Concept" + }, + "CathedralArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "Chairperson": { + "@id": "hc:class/StaffRoles/Chairperson" + }, + "ChapterRecordsFonds": { + "@id": "rico:RecordSetType" + }, + "ChurchArchive": { + "@id": "skos:Concept" + }, + "ChurchArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "ChurchArchiveSweden": { + "@id": "skos:Concept" + }, + "ChurchArchiveSwedenRecordSetType": { + "@id": "rico:RecordSetType" + }, + "ChurchGovernanceFonds": { + "@id": "rico:RecordSetType" + }, + "ChurchPropertyFonds": { + "@id": "rico:RecordSetType" + }, + "CivicDocumentationCollection": { + "@id": "rico:RecordSetType" + }, + "CivilRegistrySeries": { + "@id": "rico:RecordSetType" + }, + "Cleaner": { + "@id": "hc:class/StaffRoles/Cleaner" + }, + "ClimateArchive": { + "@id": "skos:Concept" + }, + "ClimateArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "ClimateDataCollection": { + "@id": "rico:RecordSetType" + }, + "ClippingsCollection": { + "@id": "rico:RecordSetType" + }, + "ClosedSpace": { + "@id": "wikidata:Q78642244" + }, + "CollectedMaterialsFonds": { + "@id": "rico:RecordSetType" + }, + "CollectingArchives": { + "@id": "skos:Concept" + }, + "CollectingArchivesRecordSetType": { + "@id": "rico:RecordSetType" + }, + "Collection": { + "@id": "rico:RecordSet" + }, + "CollectionBrowser": { + "@id": "dcat:Catalog" + }, + "CollectionDocumentationSeries": { + "@id": "rico:RecordSetType" + }, + "CollectionManagementSystem": { + "@id": "schema:SoftwareApplication" + }, + "CollectionsManager": { + "@id": "hc:class/StaffRoles/CollectionsManager" + }, + "CollectionType": { + "@id": "rico:RecordSetType" + }, + "CollectiveBargainingSeries": { + "@id": "rico:RecordSetType" + }, + "ColonialHeritagePortal": { + "@id": "hc:class/WebPortalTypes/ColonialHeritagePortal" + }, + "ComarcalAdministrationFonds": { + "@id": "rico:RecordSetType" + }, + "ComarcalArchive": { + "@id": "skos:Concept" + }, + "ComarcalArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "ComarcalHistoryCollection": { + "@id": "rico:RecordSetType" + }, + "CommercialOrganizationType": { + "@id": "skos:Concept" + }, + "CommitteeRecordSeries": { + "@id": "rico:RecordSetType" + }, + "CommonsGallery": { + "@id": "wikidata:Q21167233" + }, + "CommunityArchive": { + "@id": "skos:Concept" + }, + "CommunityArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "CommunityOrganizationFonds": { + "@id": "rico:RecordSetType" + }, + "CommunityPhotographCollection": { + "@id": "rico:RecordSetType" + }, + "CompanyArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "CompanyArchives": { + "@id": "skos:Concept" + }, + "CompanyArchivesRecordSetType": { + "@id": "rico:RecordSetType" + }, + "ComposerPapersCollection": { + "@id": "rico:RecordSetType" + }, + "ConferenceRecordSeries": { + "@id": "rico:RecordSetType" + }, + "ConfidenceMeasure": { + "@id": "prov:Confidence" + }, + "ConflictStatus": { + "@id": "hc:ConflictStatus" + }, + "CongregationalLifeCollection": { + "@id": "rico:RecordSetType" + }, + "CongregationalRecordsSeries": { + "@id": "rico:RecordSetType" + }, + "ConservationLab": { + "@id": "org:Site" + }, + "ConservationRecord": { + "@id": "crm:E14_Condition_Assessment" + }, + "Conservator": { + "@id": "hc:class/StaffRoles/Conservator" + }, + "Consortium": { + "@id": "schema:Consortium" + }, + "ConstructionDocumentCollection": { + "@id": "rico:RecordSetType" + }, + "Consultant": { + "@id": "hc:class/StaffRoles/Consultant" + }, + "Container": { + "@id": "hc:class/Container/Container" + }, + "ContributingAgency": { + "@id": "org:FormalOrganization" + }, + "Cooperative": { + "@id": "org:FormalOrganization" + }, + "CooperativeManager": { + "@id": "hc:class/StaffRoles/CooperativeManager" + }, + "CorporateGovernanceFonds": { + "@id": "rico:RecordSetType" + }, + "CorporatePublicationsSeries": { + "@id": "rico:RecordSetType" + }, + "CouncilGovernanceFonds": { + "@id": "rico:RecordSetType" + }, + "Country": { + "@id": "schema:Country" + }, + "CrossDomainAggregator": { + "@id": "edm:Aggregation" + }, + "CrowdsourcingPlatform": { + "@id": "dcat:Catalog" + }, + "CurationActivity": { + "@id": "crm:E87_Curation_Activity" + }, + "Curator": { + "@id": "schema:curator" + }, + "CurrentArchive": { + "@id": "schema:ArchiveOrganization" + }, + "CurrentArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "CurriculumDocumentCollection": { + "@id": "rico:RecordSetType" + }, + "CustodialRecordsFonds": { + "@id": "rico:RecordSetType" + }, + "Custodian": { + "@id": "crm:E39_Actor" + }, + "CustodianAdministration": { + "@id": "rico:RecordResource" + }, + "CustodianAppellation": { + "@id": "crm:E41_Appellation" + }, + "CustodianArchive": { + "@id": "rico:RecordSet" + }, + "CustodianArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "CustodianCollection": { + "@id": "crm:E78_Curated_Holding" + }, + "CustodianIdentifier": { + "@id": "crm:E42_Identifier" + }, + "CustodianLegalStatus": { + "@id": "org:FormalOrganization" + }, + "CustodianName": { + "@id": "skos:Concept" + }, + "CustodianObservation": { + "@id": "hc:CustodianObservation" + }, + "CustodianPlace": { + "@id": "crm:E53_Place" + }, + "CustodianReference": { + "@id": "rico:Agent" + }, + "CustodianType": { + "@id": "skos:Concept" + }, + "CustomerAccountSeries": { + "@id": "rico:RecordSetType" + }, + "CzechiaRegionalStateFonds": { + "@id": "rico:RecordSetType" + }, + "CzechSpecializedFonds": { + "@id": "rico:RecordSetType" + }, + "DarkArchive": { + "@id": "schema:ArchiveOrganization" + }, + "DarkArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "DataAnalyst": { + "@id": "hc:class/StaffRoles/DataAnalyst" + }, + "Database": { + "@id": "hc:Database" + }, + "DatabasePlatform": { + "@id": "wikidata:Q8513" + }, + "DataEngineer": { + "@id": "hc:class/StaffRoles/DataEngineer" + }, + "DataLicense": { + "@id": "cc:License" + }, + "DataLicensePolicy": { + "@id": "odrl:Policy" + }, + "DataManager": { + "@id": "hc:class/StaffRoles/DataManager" + }, + "DataPlatform": { + "@id": "wikidata:Q113470369" + }, + "DataPortalAuxiliary": { + "@id": "dcat:Catalog" + }, + "DataScientist": { + "@id": "hc:class/StaffRoles/DataScientist" + }, + "DataServiceEndpoint": { + "@id": "dcat:DataService" + }, + "DataServiceEndpointType": { + "@id": "skos:Concept" + }, + "DatasetRegister": { + "@id": "dcat:Catalog" + }, + "Department": { + "@id": "org:OrganizationalUnit" + }, + "DepartmentAdministrationFonds": { + "@id": "rico:RecordSetType" + }, + "DepartmentalArchives": { + "@id": "schema:ArchiveOrganization" + }, + "DepartmentalArchivesRecordSetType": { + "@id": "rico:RecordSetType" + }, + "DepartmentHead": { + "@id": "hc:class/StaffRoles/DepartmentHead" + }, + "DepositArchive": { + "@id": "schema:ArchiveOrganization" + }, + "DepositArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "DepositedRecordsFonds": { + "@id": "rico:RecordSetType" + }, + "DepotWorker": { + "@id": "hc:class/StaffRoles/DepotWorker" + }, + "DeputyDirector": { + "@id": "hc:class/StaffRoles/DeputyDirector" + }, + "DetectedFace": { + "@id": "hc:DetectedFace" + }, + "DetectedLandmark": { + "@id": "hc:DetectedLandmark" + }, + "DetectedLogo": { + "@id": "hc:DetectedLogo" + }, + "DetectedObject": { + "@id": "hc:DetectedObject" + }, + "DevOpsEngineer": { + "@id": "hc:class/StaffRoles/DevOpsEngineer" + }, + "DigitalArchive": { + "@id": "skos:Concept" + }, + "DigitalArchivePlatform": { + "@id": "wikidata:Q1224984" + }, + "DigitalArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "DigitalImageCollection": { + "@id": "rico:RecordSetType" + }, + "DigitalLibrary": { + "@id": "wikidata:Q212805" + }, + "DigitalLibraryPortal": { + "@id": "schema:DigitalDocument" + }, + "DigitallyInaccessibleCollection": { + "@id": "rico:RecordSetType" + }, + "DigitalNewsCollection": { + "@id": "rico:RecordSetType" + }, + "DigitalObjectCollection": { + "@id": "rico:RecordSetType" + }, + "DigitalPlatform": { + "@id": "schema:WebSite" + }, + "DigitalPlatformType": { + "@id": "skos:Concept" + }, + "DigitalPreservationFonds": { + "@id": "rico:RecordSetType" + }, + "DigitalPreservationSpecialist": { + "@id": "hc:class/StaffRoles/DigitalPreservationSpecialist" + }, + "DigitizationSpecialist": { + "@id": "hc:class/StaffRoles/DigitizationSpecialist" + }, + "DigitizedCollection": { + "@id": "rico:RecordSetType" + }, + "DimArchives": { + "@id": "schema:ArchiveOrganization" + }, + "DimArchivesRecordSetType": { + "@id": "rico:RecordSetType" + }, + "DiocesanAdministrationFonds": { + "@id": "rico:RecordSetType" + }, + "DiocesanArchive": { + "@id": "schema:ArchiveOrganization" + }, + "DiocesanArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "DiplomaticCorrespondenceCollection": { + "@id": "rico:RecordSetType" + }, + "Director": { + "@id": "hc:class/StaffRoles/Director" + }, + "DisciplinaryRepository": { + "@id": "wikidata:Q5281480" + }, + "DiscussionForumFonds": { + "@id": "rico:RecordSetType" + }, + "DistributedRecordsCollection": { + "@id": "rico:RecordSetType" + }, + "DistrictArchiveGermany": { + "@id": "schema:ArchiveOrganization" + }, + "DistrictArchiveGermanyRecordSetType": { + "@id": "rico:RecordSetType" + }, + "DistritalArchive": { + "@id": "schema:ArchiveOrganization" + }, + "DistritalArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "DistritoAdministrationFonds": { + "@id": "rico:RecordSetType" + }, + "DocumentaryFilmCollection": { + "@id": "rico:RecordSetType" + }, + "DocumentRepository": { + "@id": "wikidata:Q1235234" + }, + "DonatedPapersCollection": { + "@id": "rico:RecordSetType" + }, + "DonationScheme": { + "@id": "schema:DonateAction" + }, + "DualClassLink": { + "@id": "hc:DualClassLink" + }, + "EADDownload": { + "@id": "hc:EADDownload" + }, + "EArkiv": { + "@id": "wikidata:Q114351452" + }, + "EconomicArchive": { + "@id": "schema:ArchiveOrganization" + }, + "EconomicArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "EditorialRecordSeries": { + "@id": "rico:RecordSetType" + }, + "EducationalPortal": { + "@id": "schema:LearningResource" + }, + "EducationCenter": { + "@id": "schema:EducationalOrganization" + }, + "EducationProviderType": { + "@id": "skos:Concept" + }, + "Educator": { + "@id": "hc:class/StaffRoles/Educator" + }, + "EmailArchiveCollection": { + "@id": "rico:RecordSetType" + }, + "EncompassingBody": { + "@id": "org:Organization" + }, + "EnterpriseArchitect": { + "@id": "hc:class/StaffRoles/EnterpriseArchitect" + }, + "EnvironmentalZone": { + "@id": "hc:EnvironmentalZone" + }, + "EpiscopalCorrespondenceCollection": { + "@id": "rico:RecordSetType" + }, + "EService": { + "@id": "wikidata:Q1273271" + }, + "EstateDocumentSeries": { + "@id": "rico:RecordSetType" + }, + "EstateRecordsSeries": { + "@id": "rico:RecordSetType" + }, + "Event": { + "@id": "crm:E5_Event" + }, + "EventCoordinator": { + "@id": "hc:class/StaffRoles/EventCoordinator" + }, + "ExhibitedObject": { + "@id": "crm:E22_Human-Made_Object" + }, + "Exhibition": { + "@id": "schema:ExhibitionEvent" + }, + "ExhibitionCatalog": { + "@id": "schema:Book" + }, + "ExhibitionDocumentationCollection": { + "@id": "rico:RecordSetType" + }, + "ExhibitionMicrosite": { + "@id": "dcat:Catalog" + }, + "ExhibitionRecordCollection": { + "@id": "rico:RecordSetType" + }, + "ExhibitionSpace": { + "@id": "aat:300005768" + }, + "ExternalResource": { + "@id": "foaf:Document" + }, + "ExtractionMetadata": { + "@id": "prov:Activity" + }, + "FabricRecordsSeries": { + "@id": "rico:RecordSetType" + }, + "Facebook": { + "@id": "wikidata:Q355" + }, + "FacilitiesManager": { + "@id": "hc:class/StaffRoles/FacilitiesManager" + }, + "FacultyPaperCollection": { + "@id": "rico:RecordSetType" + }, + "FacultyPapersCollection": { + "@id": "rico:RecordSetType" + }, + "FamilyPapersCollection": { + "@id": "rico:RecordSetType" + }, + "FeatureCustodianType": { + "@id": "skos:Concept" + }, + "FeaturedCard": { + "@id": "schema:CreativeWork" + }, + "FeatureFilmCollection": { + "@id": "rico:RecordSetType" + }, + "FeaturePlace": { + "@id": "crm:E27_Site" + }, + "FeministPapersCollection": { + "@id": "rico:RecordSetType" + }, + "FieldRecordingSeries": { + "@id": "rico:RecordSetType" + }, + "FileAPI": { + "@id": "hc:FileAPI" + }, + "FilmArchive": { + "@id": "schema:ArchiveOrganization" + }, + "FilmArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "FilmPromoCollection": { + "@id": "rico:RecordSetType" + }, + "FinancialTransactionSeries": { + "@id": "rico:RecordSetType" + }, + "FindingAid": { + "@id": "rico:FindingAid" + }, + "FindingAidProvenance": { + "@id": "prov:Activity" + }, + "FindingAidType": { + "@id": "rico:FindingAidType" + }, + "Flickr": { + "@id": "wikidata:Q103204" + }, + "FoundationAdministrationFonds": { + "@id": "rico:RecordSetType" + }, + "FoundationArchive": { + "@id": "schema:ArchiveOrganization" + }, + "FoundationArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "FreeArchive": { + "@id": "schema:ArchiveOrganization" + }, + "FreeArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "FrenchPrivateArchives": { + "@id": "schema:ArchiveOrganization" + }, + "FrenchPrivateArchivesRecordSetType": { + "@id": "rico:RecordSetType" + }, + "FrenchPrivateFonds": { + "@id": "rico:RecordSetType" + }, + "FrenchPublicFonds": { + "@id": "rico:RecordSetType" + }, + "FrontendDeveloper": { + "@id": "hc:class/StaffRoles/FrontendDeveloper" + }, + "FundingAgenda": { + "@id": "schema:FundingScheme" + }, + "FundingOrganisation": { + "@id": "schema:FundingAgency" + }, + "FundingRequirement": { + "@id": "dcterms:Standard" + }, + "GalleryRecordsFonds": { + "@id": "rico:RecordSetType" + }, + "GalleryType": { + "@id": "skos:Concept" + }, + "Gardener": { + "@id": "hc:class/StaffRoles/Gardener" + }, + "GenealogicalPortal": { + "@id": "hc:class/WebPortalTypes/GenealogicalPortal" + }, + "Genealogist": { + "@id": "hc:class/StaffRoles/Genealogist" + }, + "GenealogyCollection": { + "@id": "rico:RecordSetType" + }, + "GenealogyDatabase": { + "@id": "wikidata:Q33270056" + }, + "GeographicCoverage": { + "@id": "dcterms:Location" + }, + "GeospatialDataCollection": { + "@id": "wikidata:Q124418301" + }, + "GeospatialDataRepository": { + "@id": "wikidata:Q124368518" + }, + "GeospatialInformationRepository": { + "@id": "wikidata:Q124368239" + }, + "GeoSpatialPlace": { + "@id": "geosparql:Feature" + }, + "GeospatialRepository": { + "@id": "wikidata:Q124368261" + }, + "GiftShop": { + "@id": "schema:Store" + }, + "GovernanceStructure": { + "@id": "org:hasUnit" + }, + "GovernmentAdministrativeFonds": { + "@id": "rico:RecordSetType" + }, + "GovernmentArchive": { + "@id": "schema:ArchiveOrganization" + }, + "GovernmentArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "GrantRecordSeries": { + "@id": "rico:RecordSetType" + }, + "Guide": { + "@id": "wd:Q116767694" + }, + "HeritageSocietyType": { + "@id": "skos:Concept" + }, + "Historian": { + "@id": "hc:class/StaffRoles/Historian" + }, + "HistoricalArchive": { + "@id": "schema:ArchiveOrganization" + }, + "HistoricalArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "HistoricalDocumentFonds": { + "@id": "rico:RecordSetType" + }, + "HistoricalManuscriptCollection": { + "@id": "rico:RecordSetType" + }, + "HistoricBuilding": { + "@id": "aat:300005425" + }, + "HolySacredSiteType": { + "@id": "skos:Concept" + }, + "HospitalAdministrationFonds": { + "@id": "rico:RecordSetType" + }, + "HospitalArchive": { + "@id": "schema:ArchiveOrganization" + }, + "HospitalArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "Host": { + "@id": "hc:class/StaffRoles/Host" + }, + "HouseArchive": { + "@id": "schema:ArchiveOrganization" + }, + "HouseArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "HouseRecordsFonds": { + "@id": "rico:RecordSetType" + }, + "HumanResourcesWorker": { + "@id": "hc:class/StaffRoles/HumanResourcesWorker" + }, + "IcelandicRegionalFonds": { + "@id": "rico:RecordSetType" + }, + "IconographicArchives": { + "@id": "schema:ArchiveOrganization" + }, + "IconographicArchivesRecordSetType": { + "@id": "rico:RecordSetType" + }, + "IdentifierFormat": { + "@id": "schema:PropertyValue" + }, + "IIIFAggregator": { + "@id": "hc:class/WebPortalTypes/IIIFAggregator" + }, + "IIPImageServer": { + "@id": "hc:IIPImageServer" + }, + "ImagePostType": { + "@id": "as:Image" + }, + "Index": { + "@id": "wd:Q873506" + }, + "Instagram": { + "@id": "wikidata:Q209330" + }, + "InstitutionAdministrationFonds": { + "@id": "rico:RecordSetType" + }, + "InstitutionalArchive": { + "@id": "schema:ArchiveOrganization" + }, + "InstitutionalArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "InstitutionalWebsite": { + "@id": "wikidata:Q35127" + }, + "InstructionalMaterials": { + "@id": "wd:Q1348645" + }, + "IntangibleHeritageForm": { + "@id": "crm:E28_Conceptual_Object" + }, + "IntangibleHeritageGroupType": { + "@id": "skos:Concept" + }, + "IntegratingResource": { + "@id": "wikidata:Q108637623" + }, + "InternationalDelegate": { + "@id": "hc:class/StaffRoles/InternationalDelegate" + }, + "InternationalOrgFonds": { + "@id": "rico:RecordSetType" + }, + "InternetOfThings": { + "@id": "sosa:Platform" + }, + "Inventory": { + "@id": "wd:Q65769447" + }, + "ITSpecialist": { + "@id": "hc:class/StaffRoles/ITSpecialist" + }, + "Janitor": { + "@id": "hc:class/StaffRoles/Janitor" + }, + "JointArchives": { + "@id": "schema:ArchiveOrganization" + }, + "JointArchivesRecordSetType": { + "@id": "rico:RecordSetType" + }, + "JournalistPapersCollection": { + "@id": "rico:RecordSetType" + }, + "JudicialRecordSeries": { + "@id": "rico:RecordSetType" + }, + "Jurisdiction": { + "@id": "lcc_cr:GeographicRegion" + }, + "KeyDate": { + "@id": "schema:Event" + }, + "KreisAdministrationFonds": { + "@id": "rico:RecordSetType" + }, + "LaboratoryRecordSeries": { + "@id": "rico:RecordSetType" + }, + "LaborPublicationsCollection": { + "@id": "rico:RecordSetType" + }, + "LandRecordsSeries": { + "@id": "rico:RecordSetType" + }, + "LanguageCode": { + "@id": "dcterms:LinguisticSystem" + }, + "Lawyer": { + "@id": "hc:class/StaffRoles/Lawyer" + }, + "LegacyPlatform": { + "@id": "dcat:Catalog" + }, + "LegacyPortal": { + "@id": "hc:class/WebPortalTypes/LegacyPortal" + }, + "LegalConsultant": { + "@id": "hc:class/StaffRoles/LegalConsultant" + }, + "LegalEntityType": { + "@id": "org:classification" + }, + "LegalForm": { + "@id": "rov:orgType" + }, + "LegalName": { + "@id": "rov:legalName" + }, + "LegalResponsibilityCollection": { + "@id": "tooi:Informatieobject" + }, + "LegalStatus": { + "@id": "gleif_base:RegistrationStatus" + }, + "LegislativeDraftCollection": { + "@id": "rico:RecordSetType" + }, + "LegislativeRecordSeries": { + "@id": "rico:RecordSetType" + }, + "LGBTArchive": { + "@id": "schema:ArchiveOrganization" + }, + "LGBTArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "LGBTOrganizationFonds": { + "@id": "rico:RecordSetType" + }, + "Librarian": { + "@id": "hc:class/StaffRoles/Librarian" + }, + "LibraryCatalog": { + "@id": "wd:Q856638" + }, + "LibraryType": { + "@id": "skos:Concept" + }, + "LibraryUnionCatalog": { + "@id": "schema:Library" + }, + "LightArchives": { + "@id": "schema:ArchiveOrganization" + }, + "LightArchivesRecordSetType": { + "@id": "rico:RecordSetType" + }, + "LINE": { + "@id": "wikidata:Q1371631" + }, + "LinkedDataHub": { + "@id": "hc:class/WebPortalTypes/LinkedDataHub" + }, + "LinkedDataSpecialist": { + "@id": "hc:class/StaffRoles/LinkedDataSpecialist" + }, + "LinkedIn": { + "@id": "wikidata:Q347" + }, + "List": { + "@id": "wd:Q12139612" + }, + "LiteraryArchive": { + "@id": "schema:ArchiveOrganization" + }, + "LiteraryArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "LiteraryManuscriptCollection": { + "@id": "rico:RecordSetType" + }, + "LiteratureDatabase": { + "@id": "wd:Q1865123" + }, + "LiteratureReview": { + "@id": "wd:Q2412849" + }, + "LiturgicalDocumentCollection": { + "@id": "rico:RecordSetType" + }, + "LiveStreamPostType": { + "@id": "hc:LiveStream" + }, + "LLMResponse": { + "@id": "prov:Activity" + }, + "Loan": { + "@id": "crm:E10_Transfer_of_Custody" + }, + "LocalAdministrationFonds": { + "@id": "rico:RecordSetType" + }, + "LocalEventDocumentation": { + "@id": "rico:RecordSetType" + }, + "LocalGovernanceSeries": { + "@id": "rico:RecordSetType" + }, + "LocalGovernmentArchive": { + "@id": "schema:ArchiveOrganization" + }, + "LocalGovernmentArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "LocalHeritageInstitutionInSweden": { + "@id": "wikidata:Q10520688" + }, + "LocalHistoryArchive": { + "@id": "schema:ArchiveOrganization" + }, + "LocalHistoryArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "LocalHistoryCollection": { + "@id": "rico:RecordSetType" + }, + "LocalHistoryFonds": { + "@id": "rico:RecordSetType" + }, + "LocalNewspaperCollection": { + "@id": "rico:RecordSetType" + }, + "LocalTaxRecordsSeries": { + "@id": "rico:RecordSetType" + }, + "LocationCatalog": { + "@id": "wd:Q19309479" + }, + "LocationIndex": { + "@id": "wd:Q117311578" + }, + "LogisticsInventory": { + "@id": "wd:Q815410" + }, + "MailingListArchive": { + "@id": "schema:ArchiveOrganization" + }, + "MailingListArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "MapSpecialist": { + "@id": "hc:class/StaffRoles/MapSpecialist" + }, + "MarketingArchiveCollection": { + "@id": "rico:RecordSetType" + }, + "Mastodon": { + "@id": "wikidata:Q27986619" + }, + "MediaArchive": { + "@id": "schema:ArchiveOrganization" + }, + "MediaArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "MediaProductionFonds": { + "@id": "rico:RecordSetType" + }, + "MedicalPhotographyCollection": { + "@id": "rico:RecordSetType" + }, + "MedicalResearchCollection": { + "@id": "rico:RecordSetType" + }, + "Medium": { + "@id": "wikidata:Q19868888" + }, + "MembershipCoordinator": { + "@id": "hc:class/StaffRoles/MembershipCoordinator" + }, + "MembershipRecordSeries": { + "@id": "rico:RecordSetType" + }, + "MemoryInstitution": { + "@id": "wikidata:Q1497649" + }, + "MeteorologicalObservationSeries": { + "@id": "rico:RecordSetType" + }, + "METSAPI": { + "@id": "hc:METSAPI" + }, + "MilitaryArchive": { + "@id": "schema:ArchiveOrganization" + }, + "MilitaryArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "MilitaryMapsCollection": { + "@id": "rico:RecordSetType" + }, + "MilitaryOperationsFonds": { + "@id": "rico:RecordSetType" + }, + "MilitaryPersonnelSeries": { + "@id": "rico:RecordSetType" + }, + "MinimalProcessingCollection": { + "@id": "rico:RecordSetType" + }, + "MissionStatement": { + "@id": "org:purpose" + }, + "MixedCustodianType": { + "@id": "skos:Concept" + }, + "MLEngineer": { + "@id": "hc:class/StaffRoles/MLEngineer" + }, + "MLOpsEngineer": { + "@id": "hc:class/StaffRoles/MLOpsEngineer" + }, + "MobileApp": { + "@id": "schema:MobileApplication" + }, + "MonasteryArchive": { + "@id": "schema:ArchiveOrganization" + }, + "MonasteryArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "MonasticHeritagePortal": { + "@id": "hc:class/WebPortalTypes/MonasticHeritagePortal" + }, + "MonasticManuscriptCollection": { + "@id": "rico:RecordSetType" + }, + "MonasticRecordsFonds": { + "@id": "rico:RecordSetType" + }, + "MultilingualText": { + "@id": "skos:Concept" + }, + "MunicipalAdministrationFonds": { + "@id": "rico:RecordSetType" + }, + "MunicipalArchive": { + "@id": "schema:ArchiveOrganization" + }, + "MunicipalArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "MuseumAdministrationFonds": { + "@id": "rico:RecordSetType" + }, + "MuseumArchive": { + "@id": "schema:ArchiveOrganization" + }, + "MuseumArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "MuseumCollectionPortal": { + "@id": "schema:Museum" + }, + "MuseumInventory": { + "@id": "wd:Q6059909" + }, + "MuseumType": { + "@id": "skos:Concept" + }, + "MusicArchive": { + "@id": "schema:ArchiveOrganization" + }, + "MusicArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "MusicManuscriptCollection": { + "@id": "rico:RecordSetType" + }, + "MusicRecordingCollection": { + "@id": "rico:RecordSetType" + }, + "NationalAggregator": { + "@id": "edm:DataProvider" + }, + "NationalArchives": { + "@id": "schema:ArchiveOrganization" + }, + "NationalArchivesRecordSetType": { + "@id": "rico:RecordSetType" + }, + "NationalStatisticsSeries": { + "@id": "rico:RecordSetType" + }, + "NetworkOrganisation": { + "@id": "schema:Organization" + }, + "NewsFootageCollection": { + "@id": "rico:RecordSetType" + }, + "Newsletter": { + "@id": "schema:NewsArticle" + }, + "NewsletterEditor": { + "@id": "hc:class/StaffRoles/NewsletterEditor" + }, + "NewspaperClippingsArchive": { + "@id": "schema:ArchiveOrganization" + }, + "NewspaperClippingsArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "NewspaperDigitizationPortal": { + "@id": "hc:class/WebPortalTypes/NewspaperDigitizationPortal" + }, + "NewspaperPublicationFonds": { + "@id": "rico:RecordSetType" + }, + "NewsreelSeries": { + "@id": "rico:RecordSetType" + }, + "NobilityArchive": { + "@id": "schema:ArchiveOrganization" + }, + "NobilityArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "NobleFamilyPapersFonds": { + "@id": "rico:RecordSetType" + }, + "NonProfitType": { + "@id": "skos:Concept" + }, + "NotarialActsSeries": { + "@id": "rico:RecordSetType" + }, + "NotarialArchive": { + "@id": "schema:ArchiveOrganization" + }, + "NotarialArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "NotarialProtocolSeries": { + "@id": "rico:RecordSetType" + }, + "NursingRecordsCollection": { + "@id": "rico:RecordSetType" + }, + "OAIPMHEndpoint": { + "@id": "hc:OAIPMHEndpoint" + }, + "OAIPMHHarvester": { + "@id": "hc:class/WebPortalTypes/OAIPMHHarvester" + }, + "OAIPMHSet": { + "@id": "hc:OAIPMHSet" + }, + "OfficialInstitutionType": { + "@id": "skos:Concept" + }, + "OnlineAcademicLibrary": { + "@id": "wikidata:Q56316865" + }, + "OnlineArtGallery": { + "@id": "wikidata:Q7094057" + }, + "OnlineDatabase": { + "@id": "wikidata:Q7094076" + }, + "OnlineDigitalMusicalDocumentLibrary": { + "@id": "wikidata:Q59826893" + }, + "OnlineLibrary": { + "@id": "wikidata:Q12328550" + }, + "OnlineNewsArchive": { + "@id": "schema:ArchiveOrganization" + }, + "OnlineNewsArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "OpenAccessCollection": { + "@id": "rico:RecordSetType" + }, + "OpenAccessPortal": { + "@id": "hc:class/WebPortalTypes/OpenAccessPortal" + }, + "OpenAccessRepository": { + "@id": "wikidata:Q7096323" + }, + "OpenDataPortal": { + "@id": "wikidata:Q27031827" + }, + "OpenGeodataPortal": { + "@id": "wikidata:Q124515090" + }, + "OperationalRecordSeries": { + "@id": "rico:RecordSetType" + }, + "OralHistorian": { + "@id": "hc:class/StaffRoles/OralHistorian" + }, + "OralHistoryCollection": { + "@id": "rico:RecordSetType" + }, + "OralHistorySeries": { + "@id": "rico:RecordSetType" + }, + "OrganizationalChangeEvent": { + "@id": "crm:E5_Event" + }, + "OrganizationalStructure": { + "@id": "org:OrganizationalUnit" + }, + "OrganizationBranch": { + "@id": "org:OrganizationalUnit" + }, + "OtherPlatform": { + "@id": "foaf:OnlineAccount" + }, + "OtherPostType": { + "@id": "as:Object" + }, + "OutdoorSite": { + "@id": "schema:Park" + }, + "PageLink": { + "@id": "schema:WebPage" + }, + "PageSection": { + "@id": "schema:WebPageElement" + }, + "ParishAdministrationFonds": { + "@id": "rico:RecordSetType" + }, + "ParishArchive": { + "@id": "schema:ArchiveOrganization" + }, + "ParishArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "ParishRecordSeries": { + "@id": "rico:RecordSetType" + }, + "ParishRegisterSeries": { + "@id": "rico:RecordSetType" + }, + "ParishSpecificRegisterSeries": { + "@id": "rico:RecordSetType" + }, + "ParliamentaryArchives": { + "@id": "schema:ArchiveOrganization" + }, + "ParliamentaryArchivesRecordSetType": { + "@id": "rico:RecordSetType" + }, + "ParliamentaryProceedingsFonds": { + "@id": "rico:RecordSetType" + }, + "PartyAdministrationFonds": { + "@id": "rico:RecordSetType" + }, + "PartyArchive": { + "@id": "schema:ArchiveOrganization" + }, + "PartyArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "PastoralCorrespondenceCollection": { + "@id": "rico:RecordSetType" + }, + "PatientRecordsSeries": { + "@id": "rico:RecordSetType" + }, + "Patreon": { + "@id": "wikidata:Q20641943" + }, + "PerformanceDocumentationCollection": { + "@id": "rico:RecordSetType" + }, + "PerformanceRecordingSeries": { + "@id": "rico:RecordSetType" + }, + "PerformingArtsArchive": { + "@id": "schema:ArchiveOrganization" + }, + "PerformingArtsArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "PerformingArtsProductionRecordSeries": { + "@id": "rico:RecordSetType" + }, + "PeriodicInventory": { + "@id": "wd:Q7168640" + }, + "PerpetualInventory": { + "@id": "wd:Q7169552" + }, + "Person": { + "@id": "crm:E21_Person" + }, + "PersonalCollectionType": { + "@id": "skos:Concept" + }, + "PersonName": { + "@id": "pnv:PersonName" + }, + "PersonnelRecordsSeries": { + "@id": "rico:RecordSetType" + }, + "PersonObservation": { + "@id": "pico:PersonObservation" + }, + "PersonWebClaim": { + "@id": "prov:Entity" + }, + "PhantomInventory": { + "@id": "wd:Q7180610" + }, + "PhotoArchive": { + "@id": "schema:ArchiveOrganization" + }, + "PhotoArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "PhotographCollection": { + "@id": "wikidata:Q130486108" + }, + "PhotographerPapersCollection": { + "@id": "rico:RecordSetType" + }, + "PhotographicPrintSeries": { + "@id": "rico:RecordSetType" + }, + "PhysicalInventory": { + "@id": "wd:Q475356" + }, + "Pinterest": { + "@id": "wikidata:Q255296" + }, + "PodcastChannel": { + "@id": "schema:PodcastSeries" + }, + "PolicyDocumentCollection": { + "@id": "rico:RecordSetType" + }, + "PoliticalArchive": { + "@id": "schema:ArchiveOrganization" + }, + "PoliticalArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "PoliticalPartyFonds": { + "@id": "rico:RecordSetType" + }, + "PoliticianPapersCollection": { + "@id": "rico:RecordSetType" + }, + "PostcustodialArchive": { + "@id": "schema:ArchiveOrganization" + }, + "PostcustodialArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "PrefectureSeries": { + "@id": "rico:RecordSetType" + }, + "PrePrintServer": { + "@id": "wikidata:Q45787211" + }, + "PreservationCopyCollection": { + "@id": "rico:RecordSetType" + }, + "PreservationRepository": { + "@id": "wikidata:Q117816878" + }, + "PressArchive": { + "@id": "schema:ArchiveOrganization" + }, + "PressArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "PrideEventCollection": { + "@id": "rico:RecordSetType" + }, + "PrimaryDigitalPresenceAssertion": { + "@id": "crm:E13_Attribute_Assignment" + }, + "PrintCollection": { + "@id": "rico:RecordSetType" + }, + "ProductDevelopmentCollection": { + "@id": "rico:RecordSetType" + }, + "ProductionRecordSeries": { + "@id": "rico:RecordSetType" + }, + "ProductionRecordsFonds": { + "@id": "rico:RecordSetType" + }, + "ProductOwner": { + "@id": "hc:class/StaffRoles/ProductOwner" + }, + "Project": { + "@id": "org:OrganizationalCollaboration" + }, + "ProjectDocumentationCollection": { + "@id": "rico:RecordSetType" + }, + "ProjectPlatform": { + "@id": "wikidata:Q170584" + }, + "ProjectWebsite": { + "@id": "dcat:Catalog" + }, + "PropertyRecordsSeries": { + "@id": "rico:RecordSetType" + }, + "ProtocolSeries": { + "@id": "rico:RecordSetType" + }, + "ProvenanceEvent": { + "@id": "crm:E8_Acquisition" + }, + "ProvincialAdministrationFonds": { + "@id": "rico:RecordSetType" + }, + "ProvincialArchive": { + "@id": "schema:ArchiveOrganization" + }, + "ProvincialArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "ProvincialCourtSeries": { + "@id": "rico:RecordSetType" + }, + "ProvincialHistoricalArchive": { + "@id": "schema:ArchiveOrganization" + }, + "ProvincialHistoricalArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "ProvincialHistoricalFonds": { + "@id": "rico:RecordSetType" + }, + "PublicArchive": { + "@id": "schema:ArchiveOrganization" + }, + "PublicArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "PublicArchivesInFrance": { + "@id": "schema:ArchiveOrganization" + }, + "PublicArchivesInFranceRecordSetType": { + "@id": "rico:RecordSetType" + }, + "PublicEngagementSpecialist": { + "@id": "hc:class/StaffRoles/PublicEngagementSpecialist" + }, + "PublicRecordsFonds": { + "@id": "rico:RecordSetType" + }, + "PublicServiceRecordSeries": { + "@id": "rico:RecordSetType" + }, + "PublicSpace": { + "@id": "wikidata:Q294440" + }, + "PublicWorksSeries": { + "@id": "rico:RecordSetType" + }, + "PublisherRecordsSeries": { + "@id": "rico:RecordSetType" + }, + "RadioAdvertisementCollection": { + "@id": "rico:RecordSetType" + }, + "RadioArchive": { + "@id": "schema:ArchiveOrganization" + }, + "RadioArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "RadioScriptCollection": { + "@id": "rico:RecordSetType" + }, + "ReadingRoom": { + "@id": "aat:300004051" + }, + "ReadingRoomAnnex": { + "@id": "aat:300004051" + }, + "Receptionist": { + "@id": "hc:class/StaffRoles/Receptionist" + }, + "ReconstructedEntity": { + "@id": "prov:Entity" + }, + "ReconstructionActivity": { + "@id": "prov:Activity" + }, + "ReconstructionAgent": { + "@id": "prov:Agent" + }, + "RecordsManager": { + "@id": "hc:class/StaffRoles/RecordsManager" + }, + "ReferenceWork": { + "@id": "wd:Q13136" + }, + "RegionalAdministrationFonds": { + "@id": "rico:RecordSetType" + }, + "RegionalAggregator": { + "@id": "edm:DataProvider" + }, + "RegionalArchive": { + "@id": "schema:ArchiveOrganization" + }, + "RegionalArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "RegionalArchivesInIceland": { + "@id": "schema:ArchiveOrganization" + }, + "RegionalArchivesInIcelandRecordSetType": { + "@id": "rico:RecordSetType" + }, + "RegionalBusinessFonds": { + "@id": "rico:RecordSetType" + }, + "RegionalEconomicArchive": { + "@id": "schema:ArchiveOrganization" + }, + "RegionalEconomicArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "RegionalGovernanceFonds": { + "@id": "rico:RecordSetType" + }, + "RegionalHistoryCollection": { + "@id": "rico:RecordSetType" + }, + "RegionalPlanningCollection": { + "@id": "rico:RecordSetType" + }, + "RegionalPortal": { + "@id": "wikidata:Q110279335" + }, + "RegionalStateArchives": { + "@id": "schema:ArchiveOrganization" + }, + "RegionalStateArchivesRecordSetType": { + "@id": "rico:RecordSetType" + }, + "RegionalStateFonds": { + "@id": "rico:RecordSetType" + }, + "RegisteredDataset": { + "@id": "dcat:Dataset" + }, + "RegistrationAuthority": { + "@id": "gleif_base:RegistrationAuthority" + }, + "RegistrationNumber": { + "@id": "gleif_base:RegistryIdentifier" + }, + "RelatedGuideReference": { + "@id": "rico:FindingAid" + }, + "ReligiousArchive": { + "@id": "schema:ArchiveOrganization" + }, + "ReligiousArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "ReligiousInstitutionFonds": { + "@id": "rico:RecordSetType" + }, + "RepositoryGuide": { + "@id": "wd:Q117649202" + }, + "ResearchCenter": { + "@id": "schema:ResearchOrganization" + }, + "ResearchDataPortal": { + "@id": "hc:class/WebPortalTypes/ResearchDataPortal" + }, + "Researcher": { + "@id": "hc:class/StaffRoles/Researcher" + }, + "ResearcherInResidence": { + "@id": "hc:class/StaffRoles/ResearcherInResidence" + }, + "ResearchInfrastructurePortal": { + "@id": "hc:class/WebPortalTypes/ResearchInfrastructurePortal" + }, + "ResearchOrganizationType": { + "@id": "skos:Concept" + }, + "ResearchProjectFonds": { + "@id": "rico:RecordSetType" + }, + "Review": { + "@id": "hc:Review" + }, + "SacramentalRecordCollection": { + "@id": "rico:RecordSetType" + }, + "SchoolAdministrationFonds": { + "@id": "rico:RecordSetType" + }, + "SchoolArchive": { + "@id": "schema:ArchiveOrganization" + }, + "SchoolArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "SchoolStudentRecordSeries": { + "@id": "rico:RecordSetType" + }, + "ScientificArchive": { + "@id": "schema:ArchiveOrganization" + }, + "ScientificArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "ScientificTechnicAndIndustrialCultureCenter": { + "@id": "wikidata:Q2945276" + }, + "ScientistPapersCollection": { + "@id": "rico:RecordSetType" + }, + "ScrumMaster": { + "@id": "hc:class/StaffRoles/ScrumMaster" + }, + "SearchAPI": { + "@id": "hc:SearchAPI" + }, + "SearchQueryParameter": { + "@id": "hydra:IriTemplateMapping" + }, + "Secretary": { + "@id": "hc:class/StaffRoles/Secretary" + }, + "SectorOfArchivesInSweden": { + "@id": "schema:ArchiveOrganization" + }, + "SectorOfArchivesInSwedenRecordSetType": { + "@id": "rico:RecordSetType" + }, + "SecurityArchives": { + "@id": "schema:ArchiveOrganization" + }, + "SecurityArchivesRecordSetType": { + "@id": "rico:RecordSetType" + }, + "SecurityGuard": { + "@id": "hc:class/StaffRoles/SecurityGuard" + }, + "SecurityServiceFonds": { + "@id": "rico:RecordSetType" + }, + "ServiceArea": { + "@id": "schema:AdministrativeArea" + }, + "ServiceLicense": { + "@id": "odrl:Agreement" + }, + "ServiceOnInternet": { + "@id": "wikidata:Q1668024" + }, + "Settlement": { + "@id": "gn:Feature" + }, + "ShadowLibrary": { + "@id": "wikidata:Q21040941" + }, + "SharedRecordsFonds": { + "@id": "rico:RecordSetType" + }, + "ShortVideoPostType": { + "@id": "hc:ShortVideo" + }, + "SocialMedia": { + "@id": "schema:SocialMediaPosting" + }, + "SocialMediaCollection": { + "@id": "rico:RecordSetType" + }, + "SocialMediaPlatformType": { + "@id": "skos:Concept" + }, + "SocialMediaPost": { + "@id": "as:Object" + }, + "SocialMediaPostType": { + "@id": "skos:Concept" + }, + "SocialMediaProfile": { + "@id": "foaf:OnlineAccount" + }, + "SocialMovement": { + "@id": "schema:Organization" + }, + "SocialSpace": { + "@id": "wikidata:Q4430275" + }, + "SoundArchive": { + "@id": "schema:ArchiveOrganization" + }, + "SoundArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "SoundCloud": { + "@id": "wikidata:Q568769" + }, + "SourceDocument": { + "@id": "crm:E73_Information_Object" + }, + "SpecializedArchive": { + "@id": "schema:ArchiveOrganization" + }, + "SpecializedArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "SpecializedArchivesCzechia": { + "@id": "schema:ArchiveOrganization" + }, + "SpecializedArchivesCzechiaRecordSetType": { + "@id": "rico:RecordSetType" + }, + "SpecializedCollectionFonds": { + "@id": "rico:RecordSetType" + }, + "SpecializedDatabase": { + "@id": "wikidata:Q1391125" + }, + "SpecialList": { + "@id": "wd:Q116972118" + }, + "SpecificityAnnotation": { + "@id": "hc:SpecificityAnnotation" + }, + "Spokesperson": { + "@id": "hc:class/StaffRoles/Spokesperson" + }, + "Spotify": { + "@id": "wikidata:Q689141" + }, + "StaffRole": { + "@id": "org:Role" + }, + "Standard": { + "@id": "skos:ConceptScheme" + }, + "StandardsOrganization": { + "@id": "org:FormalOrganization" + }, + "StateArchives": { + "@id": "schema:ArchiveOrganization" + }, + "StateArchivesRecordSetType": { + "@id": "rico:RecordSetType" + }, + "StateArchivesSection": { + "@id": "schema:ArchiveOrganization" + }, + "StateArchivesSectionRecordSetType": { + "@id": "rico:RecordSetType" + }, + "StateDistrictArchive": { + "@id": "schema:ArchiveOrganization" + }, + "StateDistrictArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "StateDistrictFonds": { + "@id": "rico:RecordSetType" + }, + "StateGovernmentFonds": { + "@id": "rico:RecordSetType" + }, + "StateRegionalArchiveCzechia": { + "@id": "schema:ArchiveOrganization" + }, + "StateRegionalArchiveCzechiaRecordSetType": { + "@id": "rico:RecordSetType" + }, + "StateSectionFonds": { + "@id": "rico:RecordSetType" + }, + "StationAdministrationSeries": { + "@id": "rico:RecordSetType" + }, + "Storage": { + "@id": "hc:StorageFacility" + }, + "StorageCondition": { + "@id": "hc:StorageConditionAssessment" + }, + "StorageConditionCategoryAssessment": { + "@id": "hc:StorageConditionCategoryAssessment" + }, + "StorageConditionPolicy": { + "@id": "odrl:Policy" + }, + "StorageType": { + "@id": "skos:Concept" + }, + "StorageUnit": { + "@id": "hc:StorageUnit" + }, + "StoryPostType": { + "@id": "hc:Story" + }, + "StrikeDocumentationCollection": { + "@id": "rico:RecordSetType" + }, + "StudentRecordSeries": { + "@id": "rico:RecordSetType" + }, + "SubGuideReference": { + "@id": "rico:FindingAid" + }, + "SubjectFileCollection": { + "@id": "rico:RecordSetType" + }, + "Subregion": { + "@id": "lcc_cr:GeographicRegion" + }, + "Substack": { + "@id": "wikidata:Q65976188" + }, + "SummaryGuide": { + "@id": "wd:Q117833265" + }, + "SurveillanceRecordSeries": { + "@id": "rico:RecordSetType" + }, + "SwedishChurchPropertyFonds": { + "@id": "rico:RecordSetType" + }, + "SwedishParishRecordSeries": { + "@id": "rico:RecordSetType" + }, + "SwedishSectorFonds": { + "@id": "rico:RecordSetType" + }, + "TasteScentHeritageType": { + "@id": "skos:Concept" + }, + "TaxRecordsSeries": { + "@id": "rico:RecordSetType" + }, + "Telegram": { + "@id": "wikidata:Q32936" + }, + "TelevisionArchive": { + "@id": "schema:ArchiveOrganization" + }, + "TelevisionArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "TelevisionBroadcastFonds": { + "@id": "rico:RecordSetType" + }, + "TemplateSpecificityScores": { + "@id": "hc:TemplateSpecificityScores" + }, + "TemporalCoverage": { + "@id": "dcterms:PeriodOfTime" + }, + "TemporalPeriod": { + "@id": "dcterms:PeriodOfTime" + }, + "TemporaryLocation": { + "@id": "org:Site" + }, + "TextPostType": { + "@id": "as:Note" + }, + "TextRegion": { + "@id": "hc:TextRegion" + }, + "TheatreRecordsFonds": { + "@id": "rico:RecordSetType" + }, + "ThematicRoute": { + "@id": "skos:Concept" + }, + "ThreadPostType": { + "@id": "hc:Thread" + }, + "Threads": { + "@id": "wikidata:Q118901705" + }, + "TikTok": { + "@id": "wikidata:Q48938886" + }, + "TimeSpan": { + "@id": "crm:E52_Time-Span" + }, + "TorahDatabase": { + "@id": "wikidata:Q2910253" + }, + "TourGuide": { + "@id": "hc:class/StaffRoles/TourGuide" + }, + "TradeDocumentationCollection": { + "@id": "rico:RecordSetType" + }, + "TradeRegister": { + "@id": "gleif_ra:BusinessRegistry" + }, + "TradeUnionArchive": { + "@id": "schema:ArchiveOrganization" + }, + "TradeUnionArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "Translator": { + "@id": "hc:class/StaffRoles/Translator" + }, + "Treasurer": { + "@id": "hc:class/StaffRoles/Treasurer" + }, + "TreatyCollection": { + "@id": "rico:RecordSetType" + }, + "TrustedDigitalRepository": { + "@id": "wikidata:Q112795563" + }, + "Twitch": { + "@id": "wikidata:Q20003920" + }, + "TypeScopeEntry": { + "@id": "hc:TypeScopeEntry" + }, + "UmbrellaOrganisation": { + "@id": "org:FormalOrganization" + }, + "UnionAdministrationFonds": { + "@id": "rico:RecordSetType" + }, + "UnitHistoryCollection": { + "@id": "rico:RecordSetType" + }, + "UniversityAdministrationFonds": { + "@id": "rico:RecordSetType" + }, + "UniversityAdministrativeFonds": { + "@id": "rico:RecordSetType" + }, + "UniversityArchive": { + "@id": "schema:ArchiveOrganization" + }, + "UniversityArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "UnspecifiedType": { + "@id": "skos:Concept" + }, + "UrbanPlanningCollection": { + "@id": "rico:RecordSetType" + }, + "UXDesigner": { + "@id": "hc:class/StaffRoles/UXDesigner" + }, + "VendorManagedInventory": { + "@id": "wd:Q609498" + }, + "VeteransDocumentationCollection": { + "@id": "rico:RecordSetType" + }, + "ViceChairperson": { + "@id": "hc:class/StaffRoles/ViceChairperson" + }, + "VideoAnnotation": { + "@id": "oa:Annotation" + }, + "VideoComment": { + "@id": "schema:Comment" + }, + "VideoObjectAnnotation": { + "@id": "hc:VideoObjectAnnotation" + }, + "VideoOCRAnnotation": { + "@id": "hc:VideoOCRAnnotation" + }, + "VideoPost": { + "@id": "as:Video" + }, + "VideoPostType": { + "@id": "as:Video" + }, + "VideoSceneAnnotation": { + "@id": "hc:VideoSceneAnnotation" + }, + "VideoSubtitle": { + "@id": "hc:VideoSubtitle" + }, + "VideoTextContent": { + "@id": "crm:E73_Information_Object" + }, + "VideoTimeSegment": { + "@id": "crm:E52_Time-Span" + }, + "VideoTranscript": { + "@id": "crm:E33_Linguistic_Object" + }, + "Vimeo": { + "@id": "wikidata:Q156376" + }, + "VirtualHerbarium": { + "@id": "wikidata:Q1449266" + }, + "VirtualLibrary": { + "@id": "wikidata:Q1224870" + }, + "VirtualMapLibrary": { + "@id": "wikidata:Q5995078" + }, + "VirtualMuseum": { + "@id": "wikidata:Q1225034" + }, + "VirtualSpecialistLibrary": { + "@id": "wikidata:Q2527949" + }, + "VirtualTour": { + "@id": "schema:VirtualLocation" + }, + "VisualImageCollection": { + "@id": "rico:RecordSetType" + }, + "VKontakte": { + "@id": "wikidata:Q10290" + }, + "Volunteer": { + "@id": "hc:class/StaffRoles/Volunteer" + }, + "Waiter": { + "@id": "hc:class/StaffRoles/Waiter" + }, + "Warehouse": { + "@id": "aat:300007775" + }, + "WaterManagementFonds": { + "@id": "rico:RecordSetType" + }, + "WebArchive": { + "@id": "schema:ArchiveOrganization" + }, + "WebArchiveCollection": { + "@id": "rico:RecordSetType" + }, + "WebArchiveRecordSetType": { + "@id": "rico:RecordSetType" + }, + "WebCaptureCollection": { + "@id": "rico:RecordSetType" + }, + "WebClaim": { + "@id": "prov:Entity" + }, + "WebObservation": { + "@id": "prov:Activity" + }, + "WebPortal": { + "@id": "edm:Aggregation" + }, + "WebPortalPlatform": { + "@id": "wikidata:Q186165" + }, + "WebPortalType": { + "@id": "skos:Concept" + }, + "WebPublicationFonds": { + "@id": "rico:RecordSetType" + }, + "Webshop": { + "@id": "schema:OnlineStore" + }, + "Website": { + "@id": "wikidata:Q35127" + }, + "WeChat": { + "@id": "wikidata:Q283233" + }, + "Weibo": { + "@id": "wikidata:Q20237" + }, + "WhatsApp": { + "@id": "wikidata:Q10287072" + }, + "WikidataAlignment": { + "@id": "hc:WikidataAlignment" + }, + "WomensArchives": { + "@id": "schema:ArchiveOrganization" + }, + "WomensArchivesRecordSetType": { + "@id": "rico:RecordSetType" + }, + "WomensHistoryCollection": { + "@id": "rico:RecordSetType" + }, + "WomensOrganizationFonds": { + "@id": "rico:RecordSetType" + }, + "WorkersPhotographyCollection": { + "@id": "rico:RecordSetType" + }, + "XTwitter": { + "@id": "wikidata:Q918" + }, + "YouTube": { + "@id": "wikidata:Q866" + } + } +} + diff --git a/scripts/add_slot_mappings.py b/scripts/add_slot_mappings.py new file mode 100644 index 0000000000..d280497709 --- /dev/null +++ b/scripts/add_slot_mappings.py @@ -0,0 +1,2420 @@ +#!/usr/bin/env python3 +""" +Add semantic mappings to LinkML slot files based on base ontologies. + +This script maps slot names to predicates from: +- Schema.org (schema:) +- Dublin Core Terms (dcterms:) +- FOAF (foaf:) +- PROV-O (prov:) +- ORG Ontology (org:) +- SKOS (skos:) +- RiC-O (rico:) +- CIDOC-CRM (crm:) +- BIBFRAME (bf:) +- DCAT (dcat:) +- vCard (vcard:) + +Mapping types (per SKOS): +- exact_mappings: Identical meaning (skos:exactMatch) +- close_mappings: Very similar meaning (skos:closeMatch) +- related_mappings: Semantically related (skos:relatedMatch) +- narrow_mappings: More specific (skos:narrowMatch) +- broad_mappings: More general (skos:broadMatch) +""" + +import os +import re +import yaml +from pathlib import Path +from typing import Dict, List, Optional, Tuple + +# Comprehensive predicate mapping table +# Format: slot_name_pattern -> [(mapping_type, predicate), ...] +SLOT_MAPPINGS: Dict[str, List[Tuple[str, str]]] = { + # === NAMES AND LABELS === + "name": [ + ("exact_mappings", "schema:name"), + ("exact_mappings", "foaf:name"), + ("exact_mappings", "rdfs:label"), + ], + "preferred_label": [ + ("exact_mappings", "skos:prefLabel"), + ("exact_mappings", "schema:name"), + ], + "alternative_names": [ + ("exact_mappings", "schema:alternateName"), + ("exact_mappings", "skos:altLabel"), + ], + "display_name": [ + ("exact_mappings", "rdfs:label"), + ("close_mappings", "schema:name"), + ], + "full_name": [ + ("exact_mappings", "foaf:name"), + ("close_mappings", "schema:name"), + ], + "given_name": [ + ("exact_mappings", "foaf:givenName"), + ("exact_mappings", "schema:givenName"), + ], + "family_name": [ + ("exact_mappings", "foaf:familyName"), + ("exact_mappings", "schema:familyName"), + ], + "first_name": [ + ("exact_mappings", "foaf:firstName"), + ("close_mappings", "schema:givenName"), + ], + "last_name": [ + ("exact_mappings", "foaf:lastName"), + ("close_mappings", "schema:familyName"), + ], + "surname": [ + ("exact_mappings", "foaf:surname"), + ("exact_mappings", "schema:familyName"), + ], + "base_surname": [ + ("close_mappings", "foaf:surname"), + ("related_mappings", "schema:familyName"), + ], + "nickname": [ + ("exact_mappings", "foaf:nick"), + ("close_mappings", "schema:alternateName"), + ], + "title": [ + ("exact_mappings", "dcterms:title"), + ("exact_mappings", "schema:title"), + ], + "agent_name": [ + ("exact_mappings", "foaf:name"), + ("close_mappings", "prov:label"), + ], + + # === DESCRIPTIONS === + "description": [ + ("exact_mappings", "dcterms:description"), + ("exact_mappings", "schema:description"), + ("exact_mappings", "rdfs:comment"), + ], + "summary": [ + ("close_mappings", "schema:abstract"), + ("close_mappings", "dcterms:abstract"), + ], + "abstract": [ + ("exact_mappings", "dcterms:abstract"), + ("exact_mappings", "schema:abstract"), + ], + "notes": [ + ("exact_mappings", "skos:note"), + ("close_mappings", "rdfs:comment"), + ], + "comment": [ + ("exact_mappings", "rdfs:comment"), + ("exact_mappings", "schema:comment"), + ], + "remarks": [ + ("close_mappings", "skos:note"), + ("related_mappings", "rdfs:comment"), + ], + + # === IDENTIFIERS === + "identifier": [ + ("exact_mappings", "dcterms:identifier"), + ("exact_mappings", "schema:identifier"), + ], + "id": [ + ("exact_mappings", "dcterms:identifier"), + ("close_mappings", "schema:identifier"), + ], + "external_id": [ + ("close_mappings", "dcterms:identifier"), + ("close_mappings", "schema:identifier"), + ], + "code": [ + ("close_mappings", "schema:codeValue"), + ("related_mappings", "dcterms:identifier"), + ], + "accession_number": [ + ("close_mappings", "schema:identifier"), + ("related_mappings", "dcterms:identifier"), + ], + "isil_code": [ + ("narrow_mappings", "dcterms:identifier"), + ], + "wikidata_id": [ + ("narrow_mappings", "dcterms:identifier"), + ("related_mappings", "schema:sameAs"), + ], + "viaf_id": [ + ("narrow_mappings", "dcterms:identifier"), + ], + + # === DATES AND TIMES === + "date": [ + ("exact_mappings", "dcterms:date"), + ("exact_mappings", "schema:date"), + ], + "created_at": [ + ("exact_mappings", "dcterms:created"), + ("exact_mappings", "schema:dateCreated"), + ("exact_mappings", "prov:generatedAtTime"), + ], + "created": [ + ("exact_mappings", "dcterms:created"), + ("exact_mappings", "schema:dateCreated"), + ], + "modified_at": [ + ("exact_mappings", "dcterms:modified"), + ("exact_mappings", "schema:dateModified"), + ], + "modified": [ + ("exact_mappings", "dcterms:modified"), + ("exact_mappings", "schema:dateModified"), + ], + "updated_at": [ + ("close_mappings", "dcterms:modified"), + ("close_mappings", "schema:dateModified"), + ], + "start_date": [ + ("exact_mappings", "schema:startDate"), + ("close_mappings", "prov:startedAtTime"), + ], + "end_date": [ + ("exact_mappings", "schema:endDate"), + ("close_mappings", "prov:endedAtTime"), + ], + "valid_from": [ + ("exact_mappings", "schema:validFrom"), + ("close_mappings", "dcterms:valid"), + ], + "valid_to": [ + ("exact_mappings", "schema:validThrough"), + ("close_mappings", "dcterms:valid"), + ], + "birth_date": [ + ("exact_mappings", "schema:birthDate"), + ("exact_mappings", "foaf:birthday"), + ], + "death_date": [ + ("exact_mappings", "schema:deathDate"), + ], + "founding_date": [ + ("exact_mappings", "schema:foundingDate"), + ], + "dissolution_date": [ + ("exact_mappings", "schema:dissolutionDate"), + ], + "acquisition_date": [ + ("close_mappings", "schema:dateCreated"), + ("related_mappings", "dcterms:date"), + ], + "publication_date": [ + ("exact_mappings", "schema:datePublished"), + ("exact_mappings", "dcterms:issued"), + ], + "issued": [ + ("exact_mappings", "dcterms:issued"), + ("exact_mappings", "schema:datePublished"), + ], + "event_date": [ + ("close_mappings", "schema:startDate"), + ("related_mappings", "dcterms:date"), + ], + "timestamp": [ + ("close_mappings", "prov:atTime"), + ("related_mappings", "dcterms:date"), + ], + "follow_up_date": [ + ("close_mappings", "schema:scheduledTime"), + ], + "approval_date": [ + ("close_mappings", "dcterms:dateAccepted"), + ], + "allocation_date": [ + ("close_mappings", "dcterms:date"), + ], + + # === TEMPORAL EXPRESSIONS === + "begin_of_the_begin": [ + ("related_mappings", "prov:startedAtTime"), + ("narrow_mappings", "schema:startDate"), + ], + "begin_of_the_end": [ + ("related_mappings", "prov:endedAtTime"), + ], + "end_of_the_begin": [ + ("related_mappings", "prov:startedAtTime"), + ], + "end_of_the_end": [ + ("related_mappings", "prov:endedAtTime"), + ("narrow_mappings", "schema:endDate"), + ], + "temporal_coverage": [ + ("exact_mappings", "dcterms:temporal"), + ("exact_mappings", "schema:temporalCoverage"), + ], + + # === LOCATIONS === + "location": [ + ("exact_mappings", "schema:location"), + ("exact_mappings", "dcterms:spatial"), + ], + "address": [ + ("exact_mappings", "schema:address"), + ("exact_mappings", "vcard:hasAddress"), + ], + "city": [ + ("exact_mappings", "schema:addressLocality"), + ("exact_mappings", "vcard:locality"), + ], + "country": [ + ("exact_mappings", "schema:addressCountry"), + ("exact_mappings", "vcard:country-name"), + ], + "region": [ + ("exact_mappings", "schema:addressRegion"), + ("exact_mappings", "vcard:region"), + ], + "postal_code": [ + ("exact_mappings", "schema:postalCode"), + ("exact_mappings", "vcard:postal-code"), + ], + "street_address": [ + ("exact_mappings", "schema:streetAddress"), + ("exact_mappings", "vcard:street-address"), + ], + "latitude": [ + ("exact_mappings", "schema:latitude"), + ("exact_mappings", "geo:lat"), + ], + "longitude": [ + ("exact_mappings", "schema:longitude"), + ("exact_mappings", "geo:long"), + ], + "coordinates": [ + ("close_mappings", "schema:geo"), + ("related_mappings", "geo:geometry"), + ], + "birth_place": [ + ("exact_mappings", "schema:birthPlace"), + ], + "death_place": [ + ("exact_mappings", "schema:deathPlace"), + ], + "place_of_origin": [ + ("close_mappings", "schema:birthPlace"), + ("related_mappings", "prov:atLocation"), + ], + "altitude": [ + ("exact_mappings", "schema:elevation"), + ], + + # === ORGANIZATIONS === + "organization": [ + ("exact_mappings", "schema:organization"), + ("exact_mappings", "org:organization"), + ], + "affiliation": [ + ("exact_mappings", "schema:affiliation"), + ("exact_mappings", "org:memberOf"), + ], + "member_of": [ + ("exact_mappings", "org:memberOf"), + ("exact_mappings", "schema:memberOf"), + ], + "parent_organization": [ + ("exact_mappings", "schema:parentOrganization"), + ("exact_mappings", "org:subOrganizationOf"), + ], + "sub_organization": [ + ("exact_mappings", "schema:subOrganization"), + ("exact_mappings", "org:hasSubOrganization"), + ], + "department": [ + ("exact_mappings", "schema:department"), + ("close_mappings", "org:hasUnit"), + ], + "role": [ + ("exact_mappings", "org:role"), + ("exact_mappings", "schema:roleName"), + ], + "job_title": [ + ("exact_mappings", "schema:jobTitle"), + ("close_mappings", "org:role"), + ], + "employer": [ + ("exact_mappings", "schema:worksFor"), + ("close_mappings", "org:organization"), + ], + "founding_location": [ + ("exact_mappings", "schema:foundingLocation"), + ], + "headquarters": [ + ("close_mappings", "org:hasRegisteredSite"), + ("related_mappings", "schema:location"), + ], + + # === PEOPLE === + "person": [ + ("exact_mappings", "schema:person"), + ("exact_mappings", "foaf:Person"), + ], + "author": [ + ("exact_mappings", "schema:author"), + ("exact_mappings", "dcterms:creator"), + ], + "creator": [ + ("exact_mappings", "dcterms:creator"), + ("exact_mappings", "schema:creator"), + ], + "contributor": [ + ("exact_mappings", "dcterms:contributor"), + ("exact_mappings", "schema:contributor"), + ], + "publisher": [ + ("exact_mappings", "dcterms:publisher"), + ("exact_mappings", "schema:publisher"), + ], + "editor": [ + ("exact_mappings", "schema:editor"), + ("close_mappings", "dcterms:contributor"), + ], + "curator": [ + ("close_mappings", "schema:contributor"), + ("related_mappings", "dcterms:contributor"), + ], + "gender": [ + ("exact_mappings", "schema:gender"), + ("exact_mappings", "foaf:gender"), + ], + "age": [ + ("exact_mappings", "foaf:age"), + ("close_mappings", "schema:age"), + ], + "nationality": [ + ("exact_mappings", "schema:nationality"), + ], + "knows": [ + ("exact_mappings", "foaf:knows"), + ("exact_mappings", "schema:knows"), + ], + + # === CONTACT INFO === + "email": [ + ("exact_mappings", "schema:email"), + ("exact_mappings", "foaf:mbox"), + ], + "telephone": [ + ("exact_mappings", "schema:telephone"), + ("exact_mappings", "foaf:phone"), + ], + "phone": [ + ("exact_mappings", "schema:telephone"), + ("exact_mappings", "foaf:phone"), + ], + "fax": [ + ("exact_mappings", "schema:faxNumber"), + ], + "homepage": [ + ("exact_mappings", "foaf:homepage"), + ("exact_mappings", "schema:url"), + ], + "website": [ + ("exact_mappings", "schema:url"), + ("exact_mappings", "foaf:homepage"), + ], + "url": [ + ("exact_mappings", "schema:url"), + ("exact_mappings", "rdfs:seeAlso"), + ], + + # === COLLECTIONS AND RECORDS === + "collection": [ + ("exact_mappings", "schema:collection"), + ("close_mappings", "dcterms:isPartOf"), + ], + "collection_name": [ + ("close_mappings", "schema:name"), + ("related_mappings", "dcterms:title"), + ], + "collection_description": [ + ("close_mappings", "schema:description"), + ("related_mappings", "dcterms:description"), + ], + "part_of": [ + ("exact_mappings", "dcterms:isPartOf"), + ("exact_mappings", "schema:isPartOf"), + ], + "has_part": [ + ("exact_mappings", "dcterms:hasPart"), + ("exact_mappings", "schema:hasPart"), + ], + "extent": [ + ("exact_mappings", "dcterms:extent"), + ("close_mappings", "schema:size"), + ], + "format": [ + ("exact_mappings", "dcterms:format"), + ("exact_mappings", "schema:encodingFormat"), + ], + "medium": [ + ("exact_mappings", "dcterms:medium"), + ("close_mappings", "schema:material"), + ], + "language": [ + ("exact_mappings", "dcterms:language"), + ("exact_mappings", "schema:inLanguage"), + ], + "subject": [ + ("exact_mappings", "dcterms:subject"), + ("exact_mappings", "schema:about"), + ], + "topic": [ + ("exact_mappings", "foaf:topic"), + ("exact_mappings", "schema:about"), + ], + "keywords": [ + ("exact_mappings", "schema:keywords"), + ("close_mappings", "dcterms:subject"), + ], + "arrangement": [ + ("related_mappings", "rico:hasOrganicProvenance"), + ], + "arrangement_system": [ + ("related_mappings", "rico:hasRecordSetType"), + ], + "cataloging_standard": [ + ("related_mappings", "dcterms:conformsTo"), + ], + + # === RIGHTS AND ACCESS === + "rights": [ + ("exact_mappings", "dcterms:rights"), + ("exact_mappings", "schema:license"), + ], + "license": [ + ("exact_mappings", "dcterms:license"), + ("exact_mappings", "schema:license"), + ], + "access_rights": [ + ("exact_mappings", "dcterms:accessRights"), + ], + "access_policy": [ + ("close_mappings", "dcterms:accessRights"), + ], + "access_restrictions": [ + ("close_mappings", "dcterms:accessRights"), + ], + "copyright": [ + ("exact_mappings", "schema:copyrightHolder"), + ("related_mappings", "dcterms:rights"), + ], + + # === PROVENANCE === + "source": [ + ("exact_mappings", "dcterms:source"), + ("exact_mappings", "prov:wasDerivedFrom"), + ], + "derived_from": [ + ("exact_mappings", "prov:wasDerivedFrom"), + ("exact_mappings", "dcterms:source"), + ], + "generated_by": [ + ("exact_mappings", "prov:wasGeneratedBy"), + ], + "attributed_to": [ + ("exact_mappings", "prov:wasAttributedTo"), + ], + "provenance": [ + ("exact_mappings", "dcterms:provenance"), + ("exact_mappings", "prov:wasGeneratedBy"), + ], + "extraction_agent": [ + ("close_mappings", "prov:wasAttributedTo"), + ], + "extraction_method": [ + ("close_mappings", "prov:wasGeneratedBy"), + ], + "retrieval_agent": [ + ("close_mappings", "prov:wasAttributedTo"), + ], + + # === RELATIONS === + "related_to": [ + ("exact_mappings", "dcterms:relation"), + ("exact_mappings", "schema:relatedTo"), + ], + "references": [ + ("exact_mappings", "dcterms:references"), + ("exact_mappings", "schema:citation"), + ], + "replaces": [ + ("exact_mappings", "dcterms:replaces"), + ], + "replaced_by": [ + ("exact_mappings", "dcterms:isReplacedBy"), + ], + "version": [ + ("exact_mappings", "dcterms:hasVersion"), + ("exact_mappings", "schema:version"), + ], + "same_as": [ + ("exact_mappings", "schema:sameAs"), + ("exact_mappings", "owl:sameAs"), + ], + "see_also": [ + ("exact_mappings", "rdfs:seeAlso"), + ("close_mappings", "dcterms:relation"), + ], + + # === TYPES AND CATEGORIES === + "type": [ + ("exact_mappings", "dcterms:type"), + ("exact_mappings", "rdf:type"), + ], + "category": [ + ("exact_mappings", "schema:category"), + ("close_mappings", "dcterms:type"), + ], + "classification": [ + ("exact_mappings", "org:classification"), + ("close_mappings", "dcterms:type"), + ], + "genre": [ + ("exact_mappings", "schema:genre"), + ("close_mappings", "dcterms:type"), + ], + + # === STATUS === + "status": [ + ("exact_mappings", "schema:status"), + ("close_mappings", "adms:status"), + ], + "active": [ + ("close_mappings", "schema:status"), + ], + "verified": [ + ("related_mappings", "prov:wasAttributedTo"), + ], + + # === DIGITAL/TECHNICAL === + "api_endpoint": [ + ("close_mappings", "schema:url"), + ("related_mappings", "dcat:endpointURL"), + ], + "download_url": [ + ("exact_mappings", "dcat:downloadURL"), + ("close_mappings", "schema:url"), + ], + "access_url": [ + ("exact_mappings", "dcat:accessURL"), + ], + "media_type": [ + ("exact_mappings", "dcat:mediaType"), + ("exact_mappings", "dcterms:format"), + ], + "file_format": [ + ("exact_mappings", "dcterms:format"), + ("exact_mappings", "schema:fileFormat"), + ], + "byte_size": [ + ("exact_mappings", "dcat:byteSize"), + ("exact_mappings", "schema:contentSize"), + ], + "checksum": [ + ("exact_mappings", "dcat:checksum"), + ], + + # === EVENTS === + "event": [ + ("exact_mappings", "schema:event"), + ], + "event_type": [ + ("close_mappings", "schema:eventType"), + ("related_mappings", "dcterms:type"), + ], + "activity": [ + ("exact_mappings", "prov:Activity"), + ], + "activity_type": [ + ("close_mappings", "dcterms:type"), + ], + "change_type": [ + ("close_mappings", "dcterms:type"), + ], + "affected_by_event": [ + ("close_mappings", "prov:wasInfluencedBy"), + ], + "affects_organization": [ + ("close_mappings", "prov:influenced"), + ], + + # === IMAGES AND MEDIA === + "image": [ + ("exact_mappings", "schema:image"), + ("exact_mappings", "foaf:depiction"), + ], + "thumbnail": [ + ("exact_mappings", "schema:thumbnail"), + ("exact_mappings", "foaf:thumbnail"), + ], + "logo": [ + ("exact_mappings", "schema:logo"), + ("exact_mappings", "foaf:logo"), + ], + "photo": [ + ("exact_mappings", "schema:photo"), + ("close_mappings", "foaf:depiction"), + ], + + # === QUANTITIES === + "count": [ + ("close_mappings", "schema:itemCount"), + ], + "quantity": [ + ("exact_mappings", "schema:quantity"), + ], + "value": [ + ("exact_mappings", "rdf:value"), + ("exact_mappings", "schema:value"), + ], + "unit": [ + ("exact_mappings", "schema:unitCode"), + ], + "price": [ + ("exact_mappings", "schema:price"), + ], + "currency": [ + ("exact_mappings", "schema:priceCurrency"), + ], + + # === HERITAGE-SPECIFIC === + "custodian": [ + ("close_mappings", "rico:hasOrIsHeldBy"), + ], + "custody": [ + ("close_mappings", "rico:hasOrIsHeldBy"), + ], + "provenance_text": [ + ("exact_mappings", "dcterms:provenance"), + ], + "finding_aid": [ + ("related_mappings", "rico:hasInstantiation"), + ], + "material": [ + ("exact_mappings", "schema:material"), + ("exact_mappings", "dcterms:medium"), + ], + "technique": [ + ("close_mappings", "schema:artMedium"), + ], + "dimensions": [ + ("close_mappings", "schema:size"), + ], + "condition": [ + ("related_mappings", "schema:itemCondition"), + ], + + # === CANONICAL VALUES === + "canonical_value": [ + ("close_mappings", "skos:prefLabel"), + ], + "normalized_value": [ + ("close_mappings", "skos:prefLabel"), + ], + + # === WEB/CLAIMS === + "source_url": [ + ("exact_mappings", "schema:url"), + ("exact_mappings", "dcterms:source"), + ], + "claim_type": [ + ("close_mappings", "dcterms:type"), + ], + "claim_value": [ + ("close_mappings", "rdf:value"), + ], + "xpath": [ + ("related_mappings", "prov:atLocation"), + ], + "confidence_score": [ + ("related_mappings", "prov:value"), + ], + + # === MISCELLANEOUS === + "deliverables": [ + ("close_mappings", "schema:result"), + ("related_mappings", "prov:generated"), + ], + "capacity_items": [ + ("broad_mappings", "schema:maximumAttendeeCapacity"), + ], + + # === ADDITIONAL HERITAGE-SPECIFIC === + "access_policy_ref": [ + ("close_mappings", "dcterms:accessRights"), + ], + "acquisition_method": [ + ("close_mappings", "prov:wasGeneratedBy"), + ("related_mappings", "schema:acquiredFrom"), + ], + "acquisition_source": [ + ("exact_mappings", "schema:acquiredFrom"), + ("close_mappings", "prov:wasAttributedTo"), + ], + "affected_units": [ + ("close_mappings", "prov:influenced"), + ], + "allocates": [ + ("close_mappings", "prov:generated"), + ], + "allocated_by": [ + ("close_mappings", "prov:wasAttributedTo"), + ], + "alternative_observed_names": [ + ("exact_mappings", "skos:altLabel"), + ("close_mappings", "schema:alternateName"), + ], + "appellation_language": [ + ("exact_mappings", "dcterms:language"), + ], + "appellation_value": [ + ("exact_mappings", "rdf:value"), + ("close_mappings", "skos:prefLabel"), + ], + "appellation_type": [ + ("close_mappings", "dcterms:type"), + ], + "appellations": [ + ("close_mappings", "skos:altLabel"), + ], + "authentication_required": [ + ("related_mappings", "schema:authenticationType"), + ], + "auxiliary_places": [ + ("close_mappings", "org:hasSite"), + ("related_mappings", "schema:location"), + ], + "auxiliary_platforms": [ + ("close_mappings", "dcterms:hasPart"), + ], + "change_rationale": [ + ("close_mappings", "prov:hadReason"), + ("related_mappings", "dcterms:description"), + ], + "circumstances_of_death": [ + ("related_mappings", "schema:description"), + ], + "collection_focus": [ + ("exact_mappings", "dcterms:subject"), + ("close_mappings", "schema:about"), + ], + "collection_of": [ + ("close_mappings", "dcterms:isPartOf"), + ], + "collection_scope": [ + ("exact_mappings", "dcterms:coverage"), + ("close_mappings", "schema:about"), + ], + "collection_size": [ + ("exact_mappings", "schema:numberOfItems"), + ("close_mappings", "dcterms:extent"), + ], + "collection_type": [ + ("close_mappings", "dcterms:type"), + ], + "collection_type_ref": [ + ("close_mappings", "dcterms:type"), + ], + + # === CONTACT AND SOCIAL === + "contact_email": [ + ("exact_mappings", "schema:email"), + ("exact_mappings", "vcard:hasEmail"), + ], + "contact_info": [ + ("close_mappings", "schema:contactPoint"), + ("close_mappings", "vcard:hasAddress"), + ], + "contact_name": [ + ("close_mappings", "schema:name"), + ], + "contact_person": [ + ("exact_mappings", "schema:contactPoint"), + ], + "contact_phone": [ + ("exact_mappings", "schema:telephone"), + ("exact_mappings", "vcard:hasTelephone"), + ], + "social_media_links": [ + ("close_mappings", "schema:sameAs"), + ], + "social_media_platform": [ + ("related_mappings", "dcterms:type"), + ], + + # === DIGITAL PRESENCE === + "digital_presence": [ + ("close_mappings", "schema:url"), + ], + "digital_platforms": [ + ("close_mappings", "dcterms:hasPart"), + ], + "platform_name": [ + ("exact_mappings", "schema:name"), + ], + "platform_type": [ + ("close_mappings", "dcterms:type"), + ], + "platform_url": [ + ("exact_mappings", "schema:url"), + ], + + # === STAFF AND PERSONNEL === + "staff_count": [ + ("close_mappings", "schema:numberOfEmployees"), + ], + "staff_members": [ + ("close_mappings", "schema:employee"), + ("related_mappings", "org:hasMember"), + ], + "staff_role": [ + ("exact_mappings", "org:role"), + ("exact_mappings", "schema:roleName"), + ], + "position": [ + ("exact_mappings", "schema:jobTitle"), + ("close_mappings", "org:role"), + ], + "position_title": [ + ("exact_mappings", "schema:jobTitle"), + ], + "employment_type": [ + ("exact_mappings", "schema:employmentType"), + ], + + # === ENRICHMENT AND PROVENANCE === + "enrichment_status": [ + ("related_mappings", "adms:status"), + ], + "enrichment_source": [ + ("close_mappings", "dcterms:source"), + ], + "data_source": [ + ("exact_mappings", "dcterms:source"), + ("close_mappings", "prov:wasDerivedFrom"), + ], + "data_tier": [ + ("related_mappings", "dcterms:type"), + ], + "extraction_date": [ + ("exact_mappings", "prov:generatedAtTime"), + ("close_mappings", "dcterms:created"), + ], + "extraction_notes": [ + ("close_mappings", "skos:note"), + ], + "last_verified": [ + ("close_mappings", "dcterms:dateAccepted"), + ], + "verified_by": [ + ("close_mappings", "prov:wasAttributedTo"), + ], + "retrieved_on": [ + ("exact_mappings", "prov:generatedAtTime"), + ], + "statement_created_at": [ + ("exact_mappings", "prov:generatedAtTime"), + ("close_mappings", "dcterms:created"), + ], + "source_archived_at": [ + ("close_mappings", "prov:generatedAtTime"), + ], + + # === GEOGRAPHIC === + "geonames_id": [ + ("narrow_mappings", "dcterms:identifier"), + ], + "wgs84_coordinates": [ + ("close_mappings", "geo:geometry"), + ], + "geo_feature": [ + ("close_mappings", "geo:Feature"), + ], + "admin_level": [ + ("related_mappings", "schema:addressRegion"), + ], + "municipality": [ + ("close_mappings", "schema:addressLocality"), + ], + "province": [ + ("close_mappings", "schema:addressRegion"), + ], + "country_code": [ + ("close_mappings", "schema:addressCountry"), + ], + + # === OPENING HOURS AND SCHEDULES === + "opening_hours": [ + ("exact_mappings", "schema:openingHours"), + ], + "opening_hours_specification": [ + ("exact_mappings", "schema:openingHoursSpecification"), + ], + "temporarily_closed": [ + ("related_mappings", "schema:publicAccess"), + ], + + # === ORGANIZATIONAL STRUCTURE === + "legal_name": [ + ("exact_mappings", "schema:legalName"), + ], + "legal_form": [ + ("close_mappings", "org:classification"), + ("related_mappings", "schema:legalForm"), + ], + "legal_status": [ + ("close_mappings", "org:classification"), + ], + "registration_number": [ + ("close_mappings", "schema:identifier"), + ("close_mappings", "org:identifier"), + ], + "kvk_number": [ + ("narrow_mappings", "org:identifier"), + ], + "organizational_unit": [ + ("exact_mappings", "org:hasUnit"), + ], + "organizational_structure": [ + ("close_mappings", "org:organization"), + ], + "parent_custodian": [ + ("exact_mappings", "org:subOrganizationOf"), + ("exact_mappings", "schema:parentOrganization"), + ], + "sub_custodians": [ + ("exact_mappings", "org:hasSubOrganization"), + ("exact_mappings", "schema:subOrganization"), + ], + + # === FUNDING AND FINANCIAL === + "funding_source": [ + ("close_mappings", "schema:funder"), + ], + "funder": [ + ("exact_mappings", "schema:funder"), + ], + "funding_amount": [ + ("close_mappings", "schema:amount"), + ], + "budget": [ + ("related_mappings", "schema:price"), + ], + "annual_budget": [ + ("related_mappings", "schema:price"), + ], + + # === SERVICES AND FACILITIES === + "services": [ + ("exact_mappings", "schema:availableService"), + ], + "facilities": [ + ("close_mappings", "schema:amenityFeature"), + ], + "accessibility": [ + ("exact_mappings", "schema:accessibilityFeature"), + ], + "accessibility_info": [ + ("close_mappings", "schema:accessibilitySummary"), + ], + "public_access": [ + ("exact_mappings", "schema:publicAccess"), + ], + + # === PROJECTS AND ACTIVITIES === + "project_name": [ + ("exact_mappings", "schema:name"), + ], + "project_description": [ + ("exact_mappings", "schema:description"), + ], + "project_status": [ + ("close_mappings", "schema:status"), + ], + "project_start": [ + ("exact_mappings", "schema:startDate"), + ], + "project_end": [ + ("exact_mappings", "schema:endDate"), + ], + "project_url": [ + ("exact_mappings", "schema:url"), + ], + + # === EVENTS AND CHANGES === + "event_description": [ + ("exact_mappings", "schema:description"), + ], + "event_location": [ + ("exact_mappings", "schema:location"), + ], + "predecessor": [ + ("exact_mappings", "dcterms:replaces"), + ("close_mappings", "prov:wasDerivedFrom"), + ], + "successor": [ + ("exact_mappings", "dcterms:isReplacedBy"), + ], + "merged_into": [ + ("close_mappings", "dcterms:isReplacedBy"), + ], + "merged_from": [ + ("close_mappings", "dcterms:replaces"), + ], + "split_from": [ + ("close_mappings", "prov:wasDerivedFrom"), + ], + "split_into": [ + ("close_mappings", "prov:generated"), + ], + + # === RATINGS AND REVIEWS === + "rating": [ + ("exact_mappings", "schema:aggregateRating"), + ], + "review_count": [ + ("close_mappings", "schema:reviewCount"), + ], + "reviews": [ + ("exact_mappings", "schema:review"), + ], + + # === STANDARDS AND COMPLIANCE === + "conforms_to": [ + ("exact_mappings", "dcterms:conformsTo"), + ], + "standard_name": [ + ("close_mappings", "schema:name"), + ], + "standard_version": [ + ("close_mappings", "schema:version"), + ], + "certification": [ + ("close_mappings", "schema:hasCertification"), + ], + + # === ARCHIVAL-SPECIFIC === + "fonds": [ + ("related_mappings", "rico:hasRecordSetType"), + ], + "series": [ + ("related_mappings", "rico:hasRecordSetType"), + ], + "finding_aid_url": [ + ("exact_mappings", "schema:url"), + ], + "record_type": [ + ("close_mappings", "rico:hasRecordSetType"), + ], + "record_count": [ + ("close_mappings", "schema:numberOfItems"), + ], + "linear_meters": [ + ("close_mappings", "dcterms:extent"), + ], + + # === MUSEUM-SPECIFIC === + "visitor_count": [ + ("close_mappings", "schema:attendeeCount"), + ], + "exhibition": [ + ("close_mappings", "schema:event"), + ], + "exhibitions": [ + ("close_mappings", "schema:event"), + ], + "current_exhibitions": [ + ("close_mappings", "schema:event"), + ], + "permanent_collection": [ + ("close_mappings", "schema:collection"), + ], + + # === LIBRARY-SPECIFIC === + "catalog_url": [ + ("exact_mappings", "schema:url"), + ], + "holdings": [ + ("close_mappings", "schema:collection"), + ], + "circulation": [ + ("related_mappings", "schema:availableService"), + ], + + # === IDENTIFIERS (ADDITIONAL) === + "orcid": [ + ("narrow_mappings", "dcterms:identifier"), + ], + "ror_id": [ + ("narrow_mappings", "dcterms:identifier"), + ], + "grid_id": [ + ("narrow_mappings", "dcterms:identifier"), + ], + "doi": [ + ("narrow_mappings", "dcterms:identifier"), + ], + "isbn": [ + ("exact_mappings", "schema:isbn"), + ], + "issn": [ + ("exact_mappings", "schema:issn"), + ], + + # === WEB CLAIMS (ADDITIONAL) === + "html_file": [ + ("related_mappings", "dcterms:source"), + ], + "xpath_match_score": [ + ("related_mappings", "prov:value"), + ], + "retrieval_timestamp": [ + ("exact_mappings", "prov:generatedAtTime"), + ], + + # === GHCID-SPECIFIC === + "ghcid_current": [ + ("narrow_mappings", "dcterms:identifier"), + ], + "ghcid_history": [ + ("related_mappings", "prov:wasRevisionOf"), + ], + "ghcid_uuid": [ + ("narrow_mappings", "dcterms:identifier"), + ], + "ghcid_numeric": [ + ("narrow_mappings", "dcterms:identifier"), + ], + + # === LINKEDIN-SPECIFIC === + "linkedin_url": [ + ("exact_mappings", "schema:sameAs"), + ("close_mappings", "foaf:page"), + ], + "linkedin_slug": [ + ("related_mappings", "dcterms:identifier"), + ], + "profile_headline": [ + ("close_mappings", "schema:description"), + ], + "profile_summary": [ + ("close_mappings", "schema:description"), + ], + "connections_count": [ + ("related_mappings", "schema:interactionCount"), + ], + + # === WIKIDATA-SPECIFIC === + "wikidata_label": [ + ("exact_mappings", "skos:prefLabel"), + ], + "wikidata_description": [ + ("exact_mappings", "schema:description"), + ], + "wikidata_aliases": [ + ("exact_mappings", "skos:altLabel"), + ], + "sitelinks": [ + ("close_mappings", "schema:sameAs"), + ], + + # === GOOGLE MAPS-SPECIFIC === + "place_id": [ + ("narrow_mappings", "dcterms:identifier"), + ], + "google_maps_url": [ + ("close_mappings", "schema:sameAs"), + ], + "popular_times": [ + ("related_mappings", "schema:openingHours"), + ], + "photo_count": [ + ("close_mappings", "schema:numberOfItems"), + ], + "business_status": [ + ("close_mappings", "schema:status"), + ], + + # === ADDITIONAL UNMAPPED SLOTS === + "confidence": [ + ("close_mappings", "prov:value"), + ("related_mappings", "schema:ratingValue"), + ], + "confidence_method": [ + ("close_mappings", "prov:wasGeneratedBy"), + ], + "confidence_value": [ + ("close_mappings", "prov:value"), + ], + "conflict_status": [ + ("related_mappings", "schema:status"), + ], + "conservation_lab": [ + ("related_mappings", "schema:location"), + ], + "contact": [ + ("exact_mappings", "schema:contactPoint"), + ], + "contact_point": [ + ("exact_mappings", "schema:contactPoint"), + ], + "content_hash": [ + ("exact_mappings", "dcat:checksum"), + ], + "cost_usd": [ + ("close_mappings", "schema:price"), + ], + "css_selector": [ + ("related_mappings", "prov:atLocation"), + ], + "curation_activities": [ + ("close_mappings", "prov:Activity"), + ], + "custodial_history": [ + ("exact_mappings", "dcterms:provenance"), + ], + "custodian_names": [ + ("close_mappings", "skos:prefLabel"), + ], + "custodian_observations": [ + ("related_mappings", "prov:Entity"), + ], + "custodians": [ + ("close_mappings", "schema:organization"), + ], + "data_license_policy": [ + ("close_mappings", "dcterms:license"), + ], + "data_service_endpoints": [ + ("close_mappings", "dcat:endpointURL"), + ], + "date_of_incorporation": [ + ("exact_mappings", "schema:foundingDate"), + ], + "definition": [ + ("exact_mappings", "skos:definition"), + ("close_mappings", "rdfs:comment"), + ], + "delegation": [ + ("related_mappings", "prov:actedOnBehalfOf"), + ], + "emic_name": [ + ("close_mappings", "skos:prefLabel"), + ("related_mappings", "schema:name"), + ], + "endorsed_standards": [ + ("close_mappings", "dcterms:conformsTo"), + ], + "entity_observations": [ + ("related_mappings", "prov:Entity"), + ], + "evidence_strength": [ + ("close_mappings", "prov:value"), + ], + "exclusion_criteria": [ + ("related_mappings", "schema:description"), + ], + "first_observation": [ + ("close_mappings", "prov:generatedAtTime"), + ], + "format_types": [ + ("close_mappings", "dcterms:format"), + ], + "formatted_address": [ + ("exact_mappings", "schema:address"), + ("exact_mappings", "vcard:hasAddress"), + ], + + # === MORE UNMAPPED SLOTS === + "geographic_scope": [ + ("exact_mappings", "dcterms:spatial"), + ], + "government_level": [ + ("related_mappings", "org:classification"), + ], + "has_digital_catalog": [ + ("related_mappings", "schema:url"), + ], + "has_finding_aid": [ + ("related_mappings", "schema:url"), + ], + "has_member": [ + ("exact_mappings", "org:hasMember"), + ], + "has_opening_hours": [ + ("close_mappings", "schema:openingHours"), + ], + "heritage_significance": [ + ("related_mappings", "dcterms:description"), + ], + "heritage_type": [ + ("close_mappings", "dcterms:type"), + ], + "heritage_types": [ + ("close_mappings", "dcterms:type"), + ], + "historical_significance": [ + ("related_mappings", "dcterms:description"), + ], + "hours_of_operation": [ + ("exact_mappings", "schema:openingHours"), + ], + "html_content": [ + ("related_mappings", "schema:text"), + ], + "identifier_scheme": [ + ("related_mappings", "dcterms:type"), + ], + "identifier_type": [ + ("related_mappings", "dcterms:type"), + ], + "identifier_value": [ + ("exact_mappings", "rdf:value"), + ], + "identifiers": [ + ("close_mappings", "dcterms:identifier"), + ], + "inclusion_criteria": [ + ("related_mappings", "schema:description"), + ], + "industry": [ + ("exact_mappings", "schema:industry"), + ], + "is_active": [ + ("close_mappings", "schema:status"), + ], + "is_defunct": [ + ("close_mappings", "schema:status"), + ], + "is_part_of": [ + ("exact_mappings", "dcterms:isPartOf"), + ("exact_mappings", "schema:isPartOf"), + ], + "is_primary": [ + ("related_mappings", "rdf:type"), + ], + "issue_date": [ + ("exact_mappings", "dcterms:issued"), + ], + "items": [ + ("close_mappings", "schema:itemListElement"), + ], + "known_for": [ + ("close_mappings", "schema:knowsAbout"), + ], + "label": [ + ("exact_mappings", "rdfs:label"), + ("exact_mappings", "skos:prefLabel"), + ], + "labels": [ + ("close_mappings", "skos:altLabel"), + ], + "last_modified": [ + ("exact_mappings", "dcterms:modified"), + ], + "last_observation": [ + ("close_mappings", "prov:generatedAtTime"), + ], + "last_updated": [ + ("exact_mappings", "dcterms:modified"), + ], + "latitude_dd": [ + ("exact_mappings", "schema:latitude"), + ], + "legal_entity": [ + ("close_mappings", "org:FormalOrganization"), + ], + "level": [ + ("related_mappings", "schema:position"), + ], + "locations": [ + ("exact_mappings", "schema:location"), + ], + "longitude_dd": [ + ("exact_mappings", "schema:longitude"), + ], + "main_language": [ + ("exact_mappings", "dcterms:language"), + ], + "maintained_by": [ + ("close_mappings", "schema:maintainer"), + ], + "managed_by": [ + ("close_mappings", "prov:wasAttributedTo"), + ], + "mandate": [ + ("related_mappings", "org:purpose"), + ], + "membership_type": [ + ("close_mappings", "org:role"), + ], + "metadata_standard": [ + ("close_mappings", "dcterms:conformsTo"), + ], + "metadata_standards": [ + ("close_mappings", "dcterms:conformsTo"), + ], + "mission": [ + ("close_mappings", "org:purpose"), + ], + "mission_statement": [ + ("close_mappings", "org:purpose"), + ], + "name_type": [ + ("related_mappings", "dcterms:type"), + ], + "name_variant": [ + ("exact_mappings", "skos:altLabel"), + ], + "name_variants": [ + ("exact_mappings", "skos:altLabel"), + ], + "namespace": [ + ("related_mappings", "schema:url"), + ], + "network_affiliations": [ + ("close_mappings", "org:memberOf"), + ], + "note": [ + ("exact_mappings", "skos:note"), + ], + "number_of_employees": [ + ("exact_mappings", "schema:numberOfEmployees"), + ], + "observation_date": [ + ("close_mappings", "prov:generatedAtTime"), + ], + "observation_notes": [ + ("close_mappings", "skos:note"), + ], + "observation_source": [ + ("close_mappings", "dcterms:source"), + ], + "observation_type": [ + ("related_mappings", "dcterms:type"), + ], + "observations": [ + ("related_mappings", "prov:Entity"), + ], + "official_name": [ + ("exact_mappings", "schema:legalName"), + ], + "official_website": [ + ("exact_mappings", "schema:url"), + ("exact_mappings", "foaf:homepage"), + ], + "online_catalog": [ + ("close_mappings", "schema:url"), + ], + "operated_by": [ + ("close_mappings", "schema:provider"), + ], + "operating_status": [ + ("close_mappings", "schema:status"), + ], + "operational_since": [ + ("close_mappings", "schema:foundingDate"), + ], + "operators": [ + ("close_mappings", "schema:provider"), + ], + "org_type": [ + ("close_mappings", "org:classification"), + ], + "organization_type": [ + ("close_mappings", "org:classification"), + ], + "original_language": [ + ("exact_mappings", "dcterms:language"), + ], + "other_identifiers": [ + ("close_mappings", "dcterms:identifier"), + ], + "other_names": [ + ("exact_mappings", "skos:altLabel"), + ], + "owned_by": [ + ("close_mappings", "schema:ownedBy"), + ], + "owner": [ + ("exact_mappings", "schema:ownedBy"), + ], + "ownership": [ + ("close_mappings", "schema:ownedBy"), + ], + "page_url": [ + ("exact_mappings", "schema:url"), + ], + "parent": [ + ("exact_mappings", "schema:parentOrganization"), + ], + "parent_id": [ + ("close_mappings", "dcterms:isPartOf"), + ], + "participants": [ + ("exact_mappings", "schema:participant"), + ], + "period": [ + ("close_mappings", "dcterms:temporal"), + ], + "period_covered": [ + ("exact_mappings", "dcterms:temporal"), + ], + "phone_number": [ + ("exact_mappings", "schema:telephone"), + ], + "physical_address": [ + ("exact_mappings", "schema:address"), + ], + "postal_address": [ + ("exact_mappings", "schema:postalAddress"), + ], + "prefix": [ + ("related_mappings", "schema:honorificPrefix"), + ], + "previous_name": [ + ("close_mappings", "skos:altLabel"), + ], + "previous_names": [ + ("close_mappings", "skos:altLabel"), + ], + "primary_type": [ + ("close_mappings", "dcterms:type"), + ], + "priority": [ + ("related_mappings", "schema:position"), + ], + "processing_status": [ + ("close_mappings", "adms:status"), + ], + "profile_url": [ + ("exact_mappings", "schema:url"), + ("exact_mappings", "foaf:page"), + ], + "project_id": [ + ("close_mappings", "dcterms:identifier"), + ], + "properties": [ + ("related_mappings", "schema:additionalProperty"), + ], + "provider": [ + ("exact_mappings", "schema:provider"), + ], + "purpose": [ + ("exact_mappings", "org:purpose"), + ], + "qualifier": [ + ("related_mappings", "skos:note"), + ], + "quality_score": [ + ("close_mappings", "prov:value"), + ], + "raw_value": [ + ("close_mappings", "rdf:value"), + ], + "reason": [ + ("close_mappings", "prov:hadReason"), + ], + "record_id": [ + ("close_mappings", "dcterms:identifier"), + ], + "reference_url": [ + ("exact_mappings", "schema:url"), + ], + "registration_country": [ + ("close_mappings", "schema:addressCountry"), + ], + "related": [ + ("exact_mappings", "dcterms:relation"), + ], + "related_entities": [ + ("close_mappings", "dcterms:relation"), + ], + "related_institutions": [ + ("close_mappings", "dcterms:relation"), + ], + "related_organizations": [ + ("close_mappings", "dcterms:relation"), + ], + "relationship_type": [ + ("related_mappings", "dcterms:type"), + ], + "relevance_score": [ + ("close_mappings", "prov:value"), + ], + "request_url": [ + ("close_mappings", "schema:url"), + ], + "resource_type": [ + ("close_mappings", "dcterms:type"), + ], + "response_format": [ + ("close_mappings", "dcterms:format"), + ], + "result": [ + ("exact_mappings", "schema:result"), + ], + "resulting_organization": [ + ("close_mappings", "prov:generated"), + ], + "scope": [ + ("close_mappings", "dcterms:coverage"), + ], + "scope_note": [ + ("exact_mappings", "skos:scopeNote"), + ], + "search_url": [ + ("close_mappings", "schema:url"), + ], + "secondary_type": [ + ("close_mappings", "dcterms:type"), + ], + "section": [ + ("related_mappings", "dcterms:isPartOf"), + ], + "service_type": [ + ("close_mappings", "dcterms:type"), + ], + "short_name": [ + ("close_mappings", "skos:altLabel"), + ], + "skills": [ + ("close_mappings", "schema:knowsAbout"), + ], + "slug": [ + ("related_mappings", "dcterms:identifier"), + ], + "snapshot_date": [ + ("close_mappings", "prov:generatedAtTime"), + ], + "source_file": [ + ("close_mappings", "dcterms:source"), + ], + "source_id": [ + ("close_mappings", "dcterms:source"), + ], + "source_language": [ + ("close_mappings", "dcterms:language"), + ], + "source_name": [ + ("close_mappings", "dcterms:source"), + ], + "source_type": [ + ("related_mappings", "dcterms:type"), + ], + "sources": [ + ("exact_mappings", "dcterms:source"), + ], + "spatial_coverage": [ + ("exact_mappings", "dcterms:spatial"), + ], + "specialization": [ + ("close_mappings", "schema:knowsAbout"), + ], + "species_count": [ + ("close_mappings", "schema:numberOfItems"), + ], + "start_year": [ + ("close_mappings", "schema:startDate"), + ], + "state": [ + ("close_mappings", "schema:addressRegion"), + ], + "storage_type": [ + ("related_mappings", "dcterms:type"), + ], + "street": [ + ("exact_mappings", "schema:streetAddress"), + ], + "subtype": [ + ("close_mappings", "dcterms:type"), + ], + "suffix": [ + ("related_mappings", "schema:honorificSuffix"), + ], + "supported_formats": [ + ("close_mappings", "dcterms:format"), + ], + "synonyms": [ + ("exact_mappings", "skos:altLabel"), + ], + "system_name": [ + ("close_mappings", "schema:name"), + ], + "tags": [ + ("close_mappings", "schema:keywords"), + ], + "target_audience": [ + ("close_mappings", "schema:audience"), + ], + "temporal": [ + ("exact_mappings", "dcterms:temporal"), + ], + "temporal_scope": [ + ("exact_mappings", "dcterms:temporal"), + ], + "text": [ + ("exact_mappings", "schema:text"), + ], + "text_content": [ + ("exact_mappings", "schema:text"), + ], + "time_zone": [ + ("close_mappings", "schema:timeZone"), + ], + "total_count": [ + ("close_mappings", "schema:numberOfItems"), + ], + "type_label": [ + ("close_mappings", "rdfs:label"), + ], + "uri": [ + ("exact_mappings", "schema:url"), + ], + "usage_notes": [ + ("close_mappings", "skos:note"), + ], + "valid_until": [ + ("exact_mappings", "schema:validThrough"), + ], + "validation_status": [ + ("related_mappings", "adms:status"), + ], + "verification_date": [ + ("close_mappings", "prov:generatedAtTime"), + ], + "verification_method": [ + ("close_mappings", "prov:wasGeneratedBy"), + ], + "verification_status": [ + ("close_mappings", "adms:status"), + ], + "vision": [ + ("close_mappings", "org:purpose"), + ], + "web_archive_url": [ + ("close_mappings", "schema:url"), + ], + "web_claims": [ + ("related_mappings", "prov:Entity"), + ], + "web_presence": [ + ("close_mappings", "schema:url"), + ], + "website_url": [ + ("exact_mappings", "schema:url"), + ], + "year_established": [ + ("close_mappings", "schema:foundingDate"), + ], + "year_founded": [ + ("exact_mappings", "schema:foundingDate"), + ], + + # === REMAINING 50 UNMAPPED SLOTS === + "class_metadata_slots": [ + ("related_mappings", "rdfs:Resource"), + ], + "collections_under_responsibility": [ + ("close_mappings", "rico:hasOrIsHeldBy"), + ("related_mappings", "schema:collection"), + ], + "deceased": [ + ("close_mappings", "schema:deathDate"), + ], + "encompasses": [ + ("close_mappings", "dcterms:hasPart"), + ("related_mappings", "schema:containsPlace"), + ], + "exposes_collections": [ + ("close_mappings", "schema:collection"), + ], + "external_identifiers": [ + ("exact_mappings", "dcterms:identifier"), + ("close_mappings", "schema:identifier"), + ], + "extraction_metadata": [ + ("close_mappings", "prov:Entity"), + ], + "finding_aids": [ + ("close_mappings", "rico:hasInstantiation"), + ("related_mappings", "schema:url"), + ], + "gender_identity": [ + ("exact_mappings", "schema:gender"), + ], + "generates": [ + ("exact_mappings", "prov:generated"), + ], + "governance_structure": [ + ("close_mappings", "org:organization"), + ], + "holds_record_set_types": [ + ("close_mappings", "rico:hasRecordSetType"), + ], + "humidity_tolerance": [ + ("related_mappings", "schema:additionalProperty"), + ], + "identifier_format_used": [ + ("close_mappings", "dcterms:conformsTo"), + ], + "identifies": [ + ("close_mappings", "dcterms:identifier"), + ], + "initials": [ + ("close_mappings", "foaf:name"), + ("related_mappings", "skos:altLabel"), + ], + "jurisdiction": [ + ("exact_mappings", "schema:areaServed"), + ("close_mappings", "dcterms:spatial"), + ], + "justification": [ + ("close_mappings", "prov:hadReason"), + ("related_mappings", "skos:note"), + ], + "legal_jurisdiction": [ + ("exact_mappings", "schema:areaServed"), + ], + "legal_responsibility_basis": [ + ("close_mappings", "dcterms:rights"), + ], + "linkedin_profile_path": [ + ("close_mappings", "schema:sameAs"), + ], + "method": [ + ("exact_mappings", "prov:wasGeneratedBy"), + ], + "name_authority": [ + ("close_mappings", "dcterms:source"), + ], + "name_validity_period": [ + ("close_mappings", "dcterms:temporal"), + ], + "observation_context": [ + ("close_mappings", "prov:atLocation"), + ], + "offers_donation_schemes": [ + ("related_mappings", "schema:availableService"), + ], + "organizational_change_events": [ + ("close_mappings", "prov:Activity"), + ], + "parent_collection": [ + ("exact_mappings", "dcterms:isPartOf"), + ], + "platform_of": [ + ("close_mappings", "dcterms:isPartOf"), + ], + "portal_data_sources": [ + ("close_mappings", "dcterms:source"), + ], + "powered_by_cms": [ + ("related_mappings", "schema:softwareVersion"), + ], + "preservation_level": [ + ("related_mappings", "dcterms:type"), + ], + "price_currency": [ + ("exact_mappings", "schema:priceCurrency"), + ], + "primary_register": [ + ("close_mappings", "dcterms:source"), + ], + "pronouns": [ + ("related_mappings", "foaf:name"), + ], + "protocol": [ + ("close_mappings", "dcterms:conformsTo"), + ], + "provenance_statement": [ + ("exact_mappings", "dcterms:provenance"), + ], + "response_formats": [ + ("close_mappings", "dcterms:format"), + ], + "resulting_units": [ + ("close_mappings", "prov:generated"), + ], + "rico_equivalent": [ + ("exact_mappings", "skos:exactMatch"), + ], + "role_title": [ + ("exact_mappings", "schema:roleName"), + ("close_mappings", "org:role"), + ], + "security_level": [ + ("related_mappings", "dcterms:accessRights"), + ], + "serves_finding_aids": [ + ("close_mappings", "schema:availableService"), + ], + "settlement": [ + ("close_mappings", "schema:addressLocality"), + ], + "source_creator": [ + ("exact_mappings", "dcterms:creator"), + ], + "source_uri": [ + ("exact_mappings", "dcterms:source"), + ], + "sub_collections": [ + ("exact_mappings", "dcterms:hasPart"), + ], + "subregion": [ + ("close_mappings", "schema:addressRegion"), + ], + "supersedes": [ + ("exact_mappings", "dcterms:replaces"), + ], + "temperature_tolerance": [ + ("related_mappings", "schema:additionalProperty"), + ], + "typical_domains": [ + ("close_mappings", "dcterms:subject"), + ], + "typical_technical_features": [ + ("close_mappings", "schema:featureList"), + ], + "unit_affiliation": [ + ("close_mappings", "org:memberOf"), + ], + "used_sources": [ + ("exact_mappings", "dcterms:source"), + ], + "used": [ + ("close_mappings", "prov:used"), + ], + "was_derived_from": [ + ("exact_mappings", "prov:wasDerivedFrom"), + ], + "was_revision_of": [ + ("exact_mappings", "prov:wasRevisionOf"), + ], + + # === 4 MISSING CENTRALIZED SLOTS === + "archive_branches": [ + ("close_mappings", "org:hasSubOrganization"), + ("related_mappings", "schema:subOrganization"), + ], + "archive_department_of": [ + ("close_mappings", "org:subOrganizationOf"), + ("related_mappings", "schema:parentOrganization"), + ], + "parent_corporation": [ + ("exact_mappings", "schema:parentOrganization"), + ("close_mappings", "org:subOrganizationOf"), + ], + "wikidata_entity": [ + ("exact_mappings", "schema:sameAs"), + ("close_mappings", "skos:exactMatch"), + ], +} + +# Pattern-based mappings for slots that match certain patterns +PATTERN_MAPPINGS = [ + # Slots ending with _date + (r".*_date$", [ + ("broad_mappings", "dcterms:date"), + ]), + # Slots ending with _url + (r".*_url$", [ + ("broad_mappings", "schema:url"), + ]), + # Slots ending with _id + (r".*_id$", [ + ("broad_mappings", "dcterms:identifier"), + ]), + # Slots ending with _name + (r".*_name$", [ + ("broad_mappings", "rdfs:label"), + ]), + # Slots ending with _description + (r".*_description$", [ + ("broad_mappings", "dcterms:description"), + ]), + # Slots ending with _type + (r".*_type$", [ + ("broad_mappings", "dcterms:type"), + ]), + # Slots ending with _code + (r".*_code$", [ + ("broad_mappings", "dcterms:identifier"), + ]), + # Slots starting with is_ or has_ + (r"^(is|has)_.*$", [ + ("related_mappings", "rdf:type"), + ]), + # Slots ending with _at (timestamps) + (r".*_at$", [ + ("broad_mappings", "prov:atTime"), + ]), + # Slots ending with _by (agents) + (r".*_by$", [ + ("broad_mappings", "prov:wasAttributedTo"), + ]), + # Slots ending with _count + (r".*_count$", [ + ("broad_mappings", "schema:numberOfItems"), + ]), + # Slots ending with _status + (r".*_status$", [ + ("broad_mappings", "adms:status"), + ]), + # Slots ending with _source + (r".*_source$", [ + ("broad_mappings", "dcterms:source"), + ]), + # Slots ending with _ref or _reference + (r".*_(ref|reference)$", [ + ("broad_mappings", "dcterms:references"), + ]), + # Slots ending with _time + (r".*_time$", [ + ("broad_mappings", "prov:atTime"), + ]), + # Slots ending with _timestamp + (r".*_timestamp$", [ + ("broad_mappings", "prov:generatedAtTime"), + ]), + # Slots ending with _address + (r".*_address$", [ + ("broad_mappings", "schema:address"), + ]), + # Slots ending with _email + (r".*_email$", [ + ("broad_mappings", "schema:email"), + ]), + # Slots ending with _phone + (r".*_phone$", [ + ("broad_mappings", "schema:telephone"), + ]), + # Slots ending with _notes or _note + (r".*_notes?$", [ + ("broad_mappings", "skos:note"), + ]), + # Slots ending with _label + (r".*_label$", [ + ("broad_mappings", "rdfs:label"), + ]), + # Slots ending with _value + (r".*_value$", [ + ("broad_mappings", "rdf:value"), + ]), + # Slots ending with _language + (r".*_language$", [ + ("broad_mappings", "dcterms:language"), + ]), + # Slots ending with _format + (r".*_format$", [ + ("broad_mappings", "dcterms:format"), + ]), + # Slots ending with _version + (r".*_version$", [ + ("broad_mappings", "schema:version"), + ]), + # Slots ending with _scope + (r".*_scope$", [ + ("broad_mappings", "dcterms:coverage"), + ]), + # Slots ending with _coverage + (r".*_coverage$", [ + ("broad_mappings", "dcterms:coverage"), + ]), + # Slots ending with _extent + (r".*_extent$", [ + ("broad_mappings", "dcterms:extent"), + ]), + # Slots ending with _size + (r".*_size$", [ + ("broad_mappings", "dcterms:extent"), + ]), + # Slots ending with _entity or _entities + (r".*_entit(y|ies)$", [ + ("broad_mappings", "prov:Entity"), + ]), + # Slots ending with _observation or _observations + (r".*_observations?$", [ + ("broad_mappings", "prov:Entity"), + ]), + # Slots ending with _claim or _claims + (r".*_claims?$", [ + ("broad_mappings", "prov:Entity"), + ]), + # Slots ending with _confidence + (r".*_confidence$", [ + ("broad_mappings", "prov:value"), + ]), + # Slots ending with _score + (r".*_score$", [ + ("broad_mappings", "prov:value"), + ]), + # Slots ending with _platform or _platforms + (r".*_platforms?$", [ + ("broad_mappings", "dcterms:hasPart"), + ]), + # Slots ending with _standard or _standards + (r".*_standards?$", [ + ("broad_mappings", "dcterms:conformsTo"), + ]), + # Slots ending with _policy or _policies + (r".*_polic(y|ies)$", [ + ("broad_mappings", "dcterms:rights"), + ]), + # Slots ending with _method + (r".*_method$", [ + ("broad_mappings", "prov:wasGeneratedBy"), + ]), + # Slots ending with _agent + (r".*_agent$", [ + ("broad_mappings", "prov:wasAttributedTo"), + ]), + # Slots starting with date_ or dates_ + (r"^dates?_.*$", [ + ("broad_mappings", "dcterms:date"), + ]), + # Slots containing _of_ (relationships) + (r".*_of_.*$", [ + ("broad_mappings", "dcterms:relation"), + ]), + # Slots ending with _location + (r".*_location$", [ + ("broad_mappings", "schema:location"), + ]), + # Slots ending with _organization or _organisations + (r".*_organi[sz]ations?$", [ + ("broad_mappings", "schema:organization"), + ]), + # Slots ending with _person or _persons + (r".*_persons?$", [ + ("broad_mappings", "schema:person"), + ]), + # Slots ending with _institution or _institutions + (r".*_institutions?$", [ + ("broad_mappings", "schema:organization"), + ]), + # Slots ending with _custodian or _custodians + (r".*_custodians?$", [ + ("broad_mappings", "schema:organization"), + ]), + # Slots ending with _area or _areas + (r".*_areas?$", [ + ("broad_mappings", "dcterms:subject"), + ]), + # Slots ending with _items + (r".*_items$", [ + ("broad_mappings", "schema:itemListElement"), + ]), + # Slots ending with _list + (r".*_list$", [ + ("broad_mappings", "schema:ItemList"), + ]), + # Slots ending with _endpoint or _endpoints + (r".*_endpoints?$", [ + ("broad_mappings", "dcat:endpointURL"), + ]), + # Slots ending with _file or _files + (r".*_files?$", [ + ("broad_mappings", "dcterms:source"), + ]), + # Slots ending with _body or _bodies + (r".*_bod(y|ies)$", [ + ("broad_mappings", "org:Organization"), + ]), + # Slots ending with _link or _links + (r".*_links?$", [ + ("broad_mappings", "schema:url"), + ]), + # Slots ending with _portal or _portals + (r".*_portals?$", [ + ("broad_mappings", "schema:url"), + ]), +] + + +def load_yaml(filepath: Path) -> dict: + """Load a YAML file.""" + with open(filepath, 'r', encoding='utf-8') as f: + return yaml.safe_load(f) + + +def save_yaml(filepath: Path, data: dict) -> None: + """Save data to a YAML file with proper formatting.""" + with open(filepath, 'w', encoding='utf-8') as f: + yaml.dump(data, f, + default_flow_style=False, + allow_unicode=True, + sort_keys=False, + width=120) + + +def get_slot_name_from_file(filepath: Path) -> Optional[str]: + """Extract the main slot name from a slot file.""" + data = load_yaml(filepath) + if 'slots' in data: + slots = data['slots'] + if slots: + return list(slots.keys())[0] + return None + + +def get_mappings_for_slot(slot_name: str) -> Dict[str, List[str]]: + """Get appropriate mappings for a slot based on its name.""" + mappings = { + "exact_mappings": [], + "close_mappings": [], + "related_mappings": [], + "narrow_mappings": [], + "broad_mappings": [], + } + + # Check direct match first + if slot_name in SLOT_MAPPINGS: + for mapping_type, predicate in SLOT_MAPPINGS[slot_name]: + if predicate not in mappings[mapping_type]: + mappings[mapping_type].append(predicate) + + # Check pattern matches + for pattern, pattern_mappings in PATTERN_MAPPINGS: + if re.match(pattern, slot_name): + for mapping_type, predicate in pattern_mappings: + if predicate not in mappings[mapping_type]: + mappings[mapping_type].append(predicate) + + # Remove empty mapping types + return {k: v for k, v in mappings.items() if v} + + +def add_mappings_to_slot_file(filepath: Path, dry_run: bool = False) -> Tuple[bool, str]: + """Add mappings to a slot file if needed.""" + try: + data = load_yaml(filepath) + + if 'slots' not in data or not data['slots']: + return False, "No slots defined" + + slot_name = list(data['slots'].keys())[0] + slot_def = data['slots'][slot_name] + + # Get existing mappings + existing_mappings = set() + for mapping_type in ["exact_mappings", "close_mappings", "related_mappings", + "narrow_mappings", "broad_mappings"]: + if mapping_type in slot_def: + existing_mappings.update(slot_def[mapping_type]) + + # Get new mappings + new_mappings = get_mappings_for_slot(slot_name) + + if not new_mappings: + return False, "No mappings found for slot" + + # Filter out already existing mappings + added_any = False + for mapping_type, predicates in new_mappings.items(): + new_predicates = [p for p in predicates if p not in existing_mappings] + if new_predicates: + if mapping_type not in slot_def: + slot_def[mapping_type] = [] + for pred in new_predicates: + if pred not in slot_def[mapping_type]: + slot_def[mapping_type].append(pred) + added_any = True + + if added_any and not dry_run: + save_yaml(filepath, data) + + return added_any, f"Added mappings: {new_mappings}" + + except Exception as e: + return False, f"Error: {str(e)}" + + +def process_all_slots(slots_dir: Path, dry_run: bool = False) -> dict: + """Process all slot files in the directory.""" + results = { + "updated": [], + "skipped": [], + "errors": [], + "no_mappings": [], + } + + for yaml_file in sorted(slots_dir.glob("*.yaml")): + success, message = add_mappings_to_slot_file(yaml_file, dry_run) + + if success: + results["updated"].append((yaml_file.name, message)) + elif "Error" in message: + results["errors"].append((yaml_file.name, message)) + elif "No mappings found" in message: + results["no_mappings"].append(yaml_file.name) + else: + results["skipped"].append((yaml_file.name, message)) + + return results + + +def main(): + """Main entry point.""" + import argparse + + parser = argparse.ArgumentParser(description="Add semantic mappings to LinkML slot files") + parser.add_argument("--dry-run", action="store_true", help="Don't modify files, just show what would be done") + parser.add_argument("--slots-dir", type=Path, + default=Path("/Users/kempersc/apps/glam/schemas/20251121/linkml/modules/slots"), + help="Directory containing slot YAML files") + parser.add_argument("--slot", type=str, help="Process only this specific slot file") + + args = parser.parse_args() + + if args.slot: + filepath = args.slots_dir / f"{args.slot}.yaml" + if not filepath.exists(): + print(f"Error: Slot file not found: {filepath}") + return + success, message = add_mappings_to_slot_file(filepath, args.dry_run) + print(f"{filepath.name}: {'Updated' if success else 'Skipped'} - {message}") + else: + results = process_all_slots(args.slots_dir, args.dry_run) + + print(f"\n{'DRY RUN - ' if args.dry_run else ''}Slot Mapping Results:") + print(f"=" * 60) + print(f"Updated: {len(results['updated'])}") + print(f"Skipped (already has mappings): {len(results['skipped'])}") + print(f"No mappings found: {len(results['no_mappings'])}") + print(f"Errors: {len(results['errors'])}") + + if results['updated'] and not args.dry_run: + print(f"\nUpdated slots:") + for name, msg in results['updated'][:20]: + print(f" - {name}") + if len(results['updated']) > 20: + print(f" ... and {len(results['updated']) - 20} more") + + if results['no_mappings']: + print(f"\nSlots without mapping definitions:") + for name in results['no_mappings'][:20]: + print(f" - {name}") + if len(results['no_mappings']) > 20: + print(f" ... and {len(results['no_mappings']) - 20} more") + + if results['errors']: + print(f"\nErrors:") + for name, msg in results['errors']: + print(f" - {name}: {msg}") + + +if __name__ == "__main__": + main() diff --git a/scripts/cleanup_redundant_descriptions.py b/scripts/cleanup_redundant_descriptions.py new file mode 100644 index 0000000000..945849eff8 --- /dev/null +++ b/scripts/cleanup_redundant_descriptions.py @@ -0,0 +1,226 @@ +#!/usr/bin/env python3 +""" +Cleanup Redundant Description Text from LinkML Class Files + +This script removes description sections that are NOW represented as structured +slots/classes in the LinkML schema. It follows the principle: +"Only remove text that is already represented as structured KG classes and predicates" + +SECTIONS REMOVED (fully structured): +- **Dual-Class Pattern**: → dual_class_link slot (DualClassLink class) +- **Ontological Alignment**: → class_uri, *_mappings LinkML elements +- **Multilingual Labels**: → structured_aliases LinkML element + +SECTIONS KEPT (not yet fully structured): +- **Scope**: - Domain-specific content descriptions +- **Notable Examples**: - Real-world institution examples +- **Historical Significance**: - Contextual importance +- **Privacy Considerations**: - Only partially structured (privacy_note slot) +- **Preservation Challenges**: - Only partially structured (preservation_note slot) +- **Related Types**: - Partially in see_also, but descriptions not structured +- **Wikidata**: Q##### - Keep as human-readable reference + +Usage: + python scripts/cleanup_redundant_descriptions.py --dry-run # Preview changes + python scripts/cleanup_redundant_descriptions.py # Apply changes +""" + +import argparse +import re +from pathlib import Path +from typing import Tuple, List + + +# Sections that ARE fully structured and can be removed +STRUCTURED_SECTIONS = [ + 'Dual-Class Pattern', + 'Ontological Alignment', + 'Multilingual Labels', +] + + +def remove_section(text: str, section_header: str) -> Tuple[str, bool]: + """ + Remove a markdown section from description text. + + A section starts with **Header**: and ends at the next **Header**: or end of text. + + Returns: + Tuple of (modified_text, was_modified) + """ + # Pattern matches **Section Header**: followed by content until next **Header**: or end + # Using re.DOTALL to match across newlines + pattern = rf'\*\*{re.escape(section_header)}\*\*:.*?(?=\n[ ]*\*\*[A-Z]|\Z)' + + new_text, count = re.subn(pattern, '', text, flags=re.DOTALL) + + return new_text, count > 0 + + +def cleanup_description(description: str) -> Tuple[str, List[str]]: + """ + Remove structured sections from a description. + + Returns: + Tuple of (cleaned_description, list_of_removed_sections) + """ + removed = [] + + for section in STRUCTURED_SECTIONS: + description, was_removed = remove_section(description, section) + if was_removed: + removed.append(section) + + # Clean up extra newlines + description = re.sub(r'\n{3,}', '\n\n', description) + description = description.rstrip() + + return description, removed + + +def process_yaml_file(filepath: Path, dry_run: bool = True) -> dict: + """ + Process a single YAML file to clean up class-level descriptions. + + We only target class-level descriptions (4 spaces indent), NOT slot_usage descriptions. + + Returns dict with statistics about changes made. + """ + content = filepath.read_text(encoding='utf-8') + + stats = { + 'file': filepath.name, + 'classes_modified': 0, + 'sections_removed': [], + 'modified': False + } + + lines = content.split('\n') + new_lines = [] + i = 0 + + while i < len(lines): + line = lines[i] + + # Look for class-level description (exactly 4 spaces indent) + # This avoids matching slot_usage descriptions which have deeper indentation + if re.match(r'^ description: \|', line): + # Found a class-level description block + desc_lines = [line] + i += 1 + + # Collect all indented lines that are part of this description + # Description content is indented with 6+ spaces + while i < len(lines): + next_line = lines[i] + # Check if line is part of description (6+ spaces) or empty + if next_line == '' or re.match(r'^ ', next_line): + desc_lines.append(next_line) + i += 1 + else: + break + + # Join and process the description + desc_block = '\n'.join(desc_lines) + + # Check if this description has any structured sections to remove + has_sections = any(f'**{s}**:' in desc_block for s in STRUCTURED_SECTIONS) + + if has_sections: + # Extract the description content (after "description: |") + desc_content = '\n'.join(desc_lines[1:]) # Skip the "description: |" line + + # Clean it up + cleaned_content, removed = cleanup_description(desc_content) + + if removed: + stats['classes_modified'] += 1 + stats['sections_removed'].extend(removed) + stats['modified'] = True + + # Rebuild the description block + new_lines.append(' description: |') + for cleaned_line in cleaned_content.split('\n'): + new_lines.append(cleaned_line) + else: + # No changes, keep original + new_lines.extend(desc_lines) + else: + # No structured sections, keep original + new_lines.extend(desc_lines) + else: + new_lines.append(line) + i += 1 + + if stats['modified']: + new_content = '\n'.join(new_lines) + + # Ensure file ends with newline + if not new_content.endswith('\n'): + new_content += '\n' + + if not dry_run: + filepath.write_text(new_content, encoding='utf-8') + + return stats + + +def main(): + parser = argparse.ArgumentParser( + description='Clean up redundant description text from LinkML class files' + ) + parser.add_argument( + '--dry-run', + action='store_true', + help='Preview changes without modifying files' + ) + parser.add_argument( + '--verbose', '-v', + action='store_true', + help='Show detailed output for each file' + ) + parser.add_argument( + '--file', + type=str, + help='Process a single file instead of all files' + ) + + args = parser.parse_args() + + # Find all class YAML files + classes_dir = Path('schemas/20251121/linkml/modules/classes') + + if args.file: + yaml_files = [Path(args.file)] + else: + yaml_files = sorted(classes_dir.glob('*.yaml')) + + total_modified = 0 + total_sections = 0 + + print(f"{'[DRY RUN] ' if args.dry_run else ''}Processing {len(yaml_files)} files...\n") + + for filepath in yaml_files: + stats = process_yaml_file(filepath, dry_run=args.dry_run) + + if stats['modified']: + total_modified += 1 + total_sections += len(stats['sections_removed']) + + if args.verbose or args.dry_run: + print(f"{'Would modify' if args.dry_run else 'Modified'}: {stats['file']}") + print(f" Classes: {stats['classes_modified']}") + print(f" Sections removed: {', '.join(sorted(set(stats['sections_removed'])))}") + print() + + print(f"\n{'=' * 60}") + print(f"Summary:") + print(f" Files {'that would be' if args.dry_run else ''} modified: {total_modified}") + print(f" Total sections removed: {total_sections}") + + if args.dry_run: + print(f"\nRun without --dry-run to apply changes.") + + +if __name__ == '__main__': + main() diff --git a/scripts/fix_archive_class_files.py b/scripts/fix_archive_class_files.py new file mode 100644 index 0000000000..a8c3fce8fc --- /dev/null +++ b/scripts/fix_archive_class_files.py @@ -0,0 +1,192 @@ +#!/usr/bin/env python3 +""" +Fix archive class files to properly integrate with RecordSetTypes. + +This script: +1. Removes duplicate 'slots:' sections +2. Adds the RecordSetType base class if missing +3. Fixes imports +""" + +import os +import re +from pathlib import Path +from datetime import datetime + +SCHEMA_BASE = Path("/Users/kempersc/apps/glam/schemas/20251121/linkml") +CLASSES_DIR = SCHEMA_BASE / "modules" / "classes" + +# Archive classes that already have proper RecordSetType base class +ALREADY_PROPER = {"AcademicArchive"} + +# Skip these - not custodian classes +SKIP_PATTERNS = ["RecordSetTypes", "Association", "Network", "OrganizationType"] + + +def get_archive_classes() -> list: + """Get list of archive custodian class files.""" + archives = [] + for f in CLASSES_DIR.glob("*Archive*.yaml"): + name = f.stem + if any(p in name for p in SKIP_PATTERNS): + continue + archives.append(name) + return sorted(archives) + + +def fix_archive_file(archive_name: str): + """Fix an archive class file.""" + file_path = CLASSES_DIR / f"{archive_name}.yaml" + rst_file = CLASSES_DIR / f"{archive_name}RecordSetTypes.yaml" + + if not file_path.exists(): + print(f" Skipping {archive_name} - file not found") + return + + if not rst_file.exists(): + print(f" Skipping {archive_name} - no RecordSetTypes file") + return + + with open(file_path, 'r') as f: + content = f.read() + + original_content = content + modified = False + + # Check if already has RecordSetType base class + rst_type_name = f"{archive_name}RecordSetType" + has_rst_type = rst_type_name + ":" in content + + # 1. Fix imports - add missing imports + imports_needed = [] + if f"./{archive_name}RecordSetTypes" not in content: + imports_needed.append(f" - ./{archive_name}RecordSetTypes # Imports concrete subclasses") + if "../slots/holds_record_set_types" not in content: + imports_needed.append(" - ../slots/holds_record_set_types # Links custodian to record set types") + if not has_rst_type and "./CollectionType" not in content: + imports_needed.append(" - ./CollectionType") + if not has_rst_type and "../slots/type_scope" not in content: + imports_needed.append(" - ../slots/type_scope") + + if imports_needed: + # Find the imports section and add to it + import_match = re.search(r'(imports:\n(?: - [^\n]+\n)+)', content) + if import_match: + old_imports = import_match.group(1) + new_imports = old_imports.rstrip('\n') + '\n' + '\n'.join(imports_needed) + '\n' + content = content.replace(old_imports, new_imports) + modified = True + + # 2. Fix duplicate slots sections + # Count slots sections + slots_matches = list(re.finditer(r'^ slots:\n((?: - [^\n]+\n)+)', content, re.MULTILINE)) + if len(slots_matches) > 1: + # Collect all slot items + all_slots = set() + for match in slots_matches: + slot_items = re.findall(r' - ([^\n]+)', match.group(0)) + all_slots.update(slot_items) + + # Add holds_record_set_types if not present + all_slots.add('holds_record_set_types') + + # Remove all slots sections + for match in reversed(slots_matches): + content = content[:match.start()] + content[match.end():] + + # Add consolidated slots section after class_uri + class_uri_match = re.search(rf'( {archive_name}:.*?class_uri: [^\n]+\n)', content, re.DOTALL) + if class_uri_match: + insert_point = class_uri_match.end() + slots_text = "\n # Slots linking custodian to record set types\n slots:\n" + for slot in sorted(all_slots): + slots_text += f" - {slot}\n" + content = content[:insert_point] + slots_text + content[insert_point:] + modified = True + elif len(slots_matches) == 1: + # Check if holds_record_set_types is in slots + if "holds_record_set_types" not in slots_matches[0].group(0): + # Add it + old_slots = slots_matches[0].group(0) + new_slots = old_slots.rstrip('\n') + '\n - holds_record_set_types\n' + content = content.replace(old_slots, new_slots) + modified = True + else: + # No slots section - need to add one + class_uri_match = re.search(rf'( {archive_name}:.*?class_uri: [^\n]+\n)', content, re.DOTALL) + if class_uri_match: + insert_point = class_uri_match.end() + slots_text = "\n # Slots linking custodian to record set types\n slots:\n - holds_record_set_types\n" + content = content[:insert_point] + slots_text + content[insert_point:] + modified = True + + # 3. Add RecordSetType base class if not present + if not has_rst_type: + # Add the RecordSetType class at the end + rst_type_class = f''' + # rico:RecordSetType base class for collection classification + {rst_type_name}: + description: | + A rico:RecordSetType for classifying collections held by {archive_name} custodians. + + **Dual-Class Pattern**: + This class represents the COLLECTION type (rico:RecordSetType). + For the custodian organization type, see `{archive_name}`. + is_a: CollectionType + class_uri: rico:RecordSetType + slots: + - type_scope + see_also: + - {archive_name} + - rico:RecordSetType + annotations: + custodian_types: '["A"]' + custodian_types_rationale: "{rst_type_name} classifies collections held by ARCHIVE (A) type custodians" + linked_custodian_type: {archive_name} + dual_class_pattern: collection_type + specificity_score: 0.7 + specificity_rationale: Type taxonomy class. + specificity_annotation_timestamp: '{datetime.now().isoformat()}Z' + specificity_annotation_agent: opencode-claude-sonnet-4 + template_specificity: + archive_search: 0.2 + museum_search: 0.75 + library_search: 0.75 + collection_discovery: 0.75 + person_research: 0.75 + location_browse: 0.75 + identifier_lookup: 0.75 + organizational_change: 0.75 + digital_platform: 0.75 + general_heritage: 0.75 +''' + content = content.rstrip() + '\n' + rst_type_class + modified = True + + if modified: + with open(file_path, 'w') as f: + f.write(content) + print(f" Fixed {archive_name}.yaml") + else: + print(f" {archive_name}.yaml - no changes needed") + + +def main(): + print("=" * 70) + print("Archive Class File Fixer") + print("=" * 70) + + archives = get_archive_classes() + print(f"\nProcessing {len(archives)} archive class files\n") + + for archive in archives: + if archive in ALREADY_PROPER: + print(f" Skipping {archive} - already properly configured") + continue + fix_archive_file(archive) + + print("\nDone!") + + +if __name__ == "__main__": + main() diff --git a/scripts/generate_archive_record_set_types.py b/scripts/generate_archive_record_set_types.py new file mode 100644 index 0000000000..0a5bec04f6 --- /dev/null +++ b/scripts/generate_archive_record_set_types.py @@ -0,0 +1,758 @@ +#!/usr/bin/env python3 +""" +Generate RecordSetTypes files for archive classes and update archive classes +to use holds_record_set_types slot. + +This script: +1. Identifies archive classes that need RecordSetTypes files +2. Generates appropriate RecordSetTypes files based on archive type +3. Updates archive class files to import and use holds_record_set_types slot + +Usage: + python scripts/generate_archive_record_set_types.py +""" + +import os +import re +import yaml +from pathlib import Path +from datetime import datetime +from typing import Dict, List, Optional, Tuple + +# Base paths +SCHEMA_BASE = Path("/Users/kempersc/apps/glam/schemas/20251121/linkml") +CLASSES_DIR = SCHEMA_BASE / "modules" / "classes" + +# Archive types that already have RecordSetTypes +EXISTING_RST = { + "AcademicArchive", + "ChurchArchive", + "CompanyArchives", + "FilmArchive", + "HospitalArchive", + "MilitaryArchive", + "MunicipalArchive", + "RegionalArchive", + "TradeUnionArchive", +} + +# Skip these - not custodian classes +SKIP_PATTERNS = [ + "RecordSetTypes", + "Association", + "Network", + "OrganizationType", +] + +# Record set type definitions by archive category +# Maps archive class name to typical record set types it would hold +ARCHIVE_RECORD_SETS = { + # Administrative/Government Archives + "NationalArchives": [ + ("GovernmentAdministrativeFonds", "fonds", "Government ministry and agency administrative records"), + ("LegislativeRecordSeries", "series", "Parliamentary and legislative documentation"), + ("DiplomaticCorrespondenceCollection", "collection", "International relations and diplomatic records"), + ("NationalStatisticsSeries", "series", "Census and national statistical records"), + ], + "StateArchives": [ + ("StateGovernmentFonds", "fonds", "State/provincial government administrative records"), + ("JudicialRecordSeries", "series", "Court records and legal documentation"), + ("LandRecordsSeries", "series", "Property and land registry records"), + ("TaxRecordsSeries", "series", "Taxation and fiscal documentation"), + ], + "GovernmentArchive": [ + ("AgencyAdministrativeFonds", "fonds", "Government agency operational records"), + ("PolicyDocumentCollection", "collection", "Government policy documentation"), + ("PublicServiceRecordSeries", "series", "Public service delivery records"), + ], + "PublicArchive": [ + ("PublicRecordsFonds", "fonds", "Records created by public bodies"), + ("CivicDocumentationCollection", "collection", "Civic and community documentation"), + ("AdministrativeCorrespondenceSeries", "series", "Official correspondence"), + ], + "ParliamentaryArchives": [ + ("ParliamentaryProceedingsFonds", "fonds", "Parliamentary debates and proceedings"), + ("CommitteeRecordSeries", "series", "Parliamentary committee documentation"), + ("LegislativeDraftCollection", "collection", "Bill drafts and legislative history"), + ], + + # Regional/Local Archives + "ProvincialArchive": [ + ("ProvincialAdministrationFonds", "fonds", "Provincial government records"), + ("RegionalPlanningCollection", "collection", "Regional development documentation"), + ("ProvincialCourtSeries", "series", "Provincial judicial records"), + ], + "LocalGovernmentArchive": [ + ("LocalAdministrationFonds", "fonds", "Local authority administrative records"), + ("PublicWorksSeries", "series", "Infrastructure and public works documentation"), + ("LocalTaxRecordsSeries", "series", "Local taxation records"), + ], + "CantonalArchive": [ + ("CantonalGovernmentFonds", "fonds", "Cantonal administrative records (Switzerland)"), + ("CantonalLegislationCollection", "collection", "Cantonal laws and regulations"), + ], + "ComarcalArchive": [ + ("ComarcalAdministrationFonds", "fonds", "Comarca (county) administrative records (Spain)"), + ("LocalHistoryCollection", "collection", "Regional historical documentation"), + ], + "DistrictArchiveGermany": [ + ("KreisAdministrationFonds", "fonds", "District (Kreis) administrative records"), + ("LocalGovernanceSeries", "series", "District governance documentation"), + ], + "DistritalArchive": [ + ("DistritoAdministrationFonds", "fonds", "District administrative records (Portugal/Spain)"), + ], + "DepartmentalArchives": [ + ("DepartmentAdministrationFonds", "fonds", "Departmental government records (France)"), + ("PrefectureSeries", "series", "Prefecture administrative records"), + ], + "ArchivesRegionales": [ + ("RegionalAdministrationFonds", "fonds", "Regional government records (France)"), + ], + "StateDistrictArchive": [ + ("StateDistrictFonds", "fonds", "State district administrative records"), + ], + "StateRegionalArchiveCzechia": [ + ("RegionalStateFonds", "fonds", "Czech regional state records"), + ], + "RegionalStateArchives": [ + ("RegionalStateFonds", "fonds", "Regional state government records"), + ], + "RegionalArchivesInIceland": [ + ("IcelandicRegionalFonds", "fonds", "Icelandic regional administrative records"), + ], + "PublicArchivesInFrance": [ + ("FrenchPublicFonds", "fonds", "French public sector records"), + ], + "FrenchPrivateArchives": [ + ("FrenchPrivateFonds", "fonds", "French private archives"), + ], + "ProvincialHistoricalArchive": [ + ("ProvincialHistoricalFonds", "fonds", "Historical provincial records"), + ], + + # Religious Archives + "DiocesanArchive": [ + ("DiocesanAdministrationFonds", "fonds", "Diocesan administrative records"), + ("ParishRecordSeries", "series", "Parish records (multiple parishes)"), + ("EpiscopalCorrespondenceCollection", "collection", "Bishop's correspondence"), + ], + "ParishArchive": [ + ("ParishRegisterSeries", "series", "Baptismal, marriage, burial registers"), + ("ParishAdministrationFonds", "fonds", "Parish administrative records"), + ("SacramentalRecordCollection", "collection", "Sacramental documentation"), + ], + "MonasteryArchive": [ + ("MonasticRecordsFonds", "fonds", "Monastery administrative records"), + ("ManuscriptCollection", "collection", "Medieval manuscripts and codices"), + ("PropertyRecordsSeries", "series", "Monastic property and land records"), + ], + "CathedralArchive": [ + ("ChapterRecordsFonds", "fonds", "Cathedral chapter administrative records"), + ("LiturgicalDocumentCollection", "collection", "Liturgical and ceremonial records"), + ("FabricRecordsSeries", "series", "Building and fabric maintenance records"), + ], + "ReligiousArchive": [ + ("ReligiousInstitutionFonds", "fonds", "Religious organization records"), + ("CongregationalRecordsSeries", "series", "Congregation documentation"), + ], + "ChurchArchiveSweden": [ + ("SwedishParishRecordSeries", "series", "Swedish parish records (kyrkoarkiv)"), + ("ChurchPropertyFonds", "fonds", "Church property records"), + ], + + # Media/Audiovisual Archives + "PhotoArchive": [ + ("PhotographerPapersCollection", "collection", "Personal papers of photographers"), + ("PhotographicPrintSeries", "series", "Photographic prints and negatives"), + ("DigitalImageCollection", "collection", "Born-digital photography"), + ], + "SoundArchive": [ + ("AudioRecordingCollection", "collection", "Sound recordings"), + ("OralHistorySeries", "series", "Oral history interviews"), + ("MusicRecordingCollection", "collection", "Music recordings"), + ], + "RadioArchive": [ + ("BroadcastRecordingFonds", "fonds", "Radio broadcast recordings"), + ("RadioScriptCollection", "collection", "Radio scripts and programming"), + ("StationAdministrationSeries", "series", "Radio station records"), + ], + "TelevisionArchive": [ + ("TelevisionBroadcastFonds", "fonds", "Television program recordings"), + ("ProductionRecordSeries", "series", "TV production documentation"), + ("NewsFootageCollection", "collection", "News broadcast archives"), + ], + "AudiovisualArchive": [ + ("AudiovisualRecordingCollection", "collection", "AV recordings"), + ("MediaProductionFonds", "fonds", "Media production records"), + ], + "MediaArchive": [ + ("MediaProductionFonds", "fonds", "Media company records"), + ("BroadcastCollection", "collection", "Broadcast recordings"), + ], + "AdvertisingRadioArchive": [ + ("RadioAdvertisementCollection", "collection", "Radio commercial recordings"), + ("CampaignDocumentationSeries", "series", "Advertising campaign records"), + ], + "MusicArchive": [ + ("MusicManuscriptCollection", "collection", "Musical scores and manuscripts"), + ("PerformanceRecordingSeries", "series", "Concert and performance recordings"), + ("ComposerPapersCollection", "collection", "Composer personal papers"), + ], + "AnimalSoundArchive": [ + ("BioacousticRecordingCollection", "collection", "Animal and nature sound recordings"), + ("FieldRecordingSeries", "series", "Field research audio"), + ], + "IconographicArchives": [ + ("VisualImageCollection", "collection", "Iconographic materials"), + ("PrintCollection", "collection", "Prints and engravings"), + ], + + # Specialized Subject Archives + "ArchitecturalArchive": [ + ("ArchitecturalDrawingCollection", "collection", "Architectural plans and drawings"), + ("ArchitectPapersCollection", "collection", "Architect personal papers"), + ("BuildingProjectFonds", "fonds", "Building project documentation"), + ], + "ArchivesForBuildingRecords": [ + ("BuildingPermitSeries", "series", "Building permit records"), + ("ConstructionDocumentCollection", "collection", "Construction documentation"), + ], + "LiteraryArchive": [ + ("AuthorPapersCollection", "collection", "Author and writer personal papers"), + ("ManuscriptCollection", "collection", "Literary manuscripts"), + ("PublisherRecordsSeries", "series", "Publishing house records"), + ], + "ArtArchive": [ + ("ArtistPapersCollection", "collection", "Artist personal papers and sketches"), + ("GalleryRecordsFonds", "fonds", "Art gallery records"), + ("ExhibitionDocumentationCollection", "collection", "Exhibition records"), + ], + "PerformingArtsArchive": [ + ("TheatreRecordsFonds", "fonds", "Theatre company records"), + ("PerformanceDocumentationCollection", "collection", "Performance documentation"), + ("ProductionRecordSeries", "series", "Production records"), + ], + "PoliticalArchive": [ + ("PoliticalPartyFonds", "fonds", "Political party records"), + ("CampaignRecordCollection", "collection", "Election campaign materials"), + ("PoliticianPapersCollection", "collection", "Politician personal papers"), + ], + "PartyArchive": [ + ("PartyAdministrationFonds", "fonds", "Political party administrative records"), + ("MembershipRecordSeries", "series", "Party membership records"), + ], + "EconomicArchive": [ + ("BusinessRecordsFonds", "fonds", "Business and commercial records"), + ("TradeDocumentationCollection", "collection", "Trade and commerce documentation"), + ], + "BankArchive": [ + ("BankingRecordsFonds", "fonds", "Banking institution records"), + ("FinancialTransactionSeries", "series", "Financial records"), + ("CustomerAccountSeries", "series", "Account records (historical)"), + ], + "RegionalEconomicArchive": [ + ("RegionalBusinessFonds", "fonds", "Regional business records"), + ], + "ScientificArchive": [ + ("ResearchProjectFonds", "fonds", "Scientific research project records"), + ("ScientistPapersCollection", "collection", "Scientist personal papers"), + ("LaboratoryRecordSeries", "series", "Laboratory notebooks and data"), + ], + "ClimateArchive": [ + ("ClimateDataCollection", "collection", "Historical climate records"), + ("MeteorologicalObservationSeries", "series", "Weather observation records"), + ], + "NotarialArchive": [ + ("NotarialActsSeries", "series", "Notarial deeds and contracts"), + ("ProtocolSeries", "series", "Notarial protocols"), + ], + "NobilityArchive": [ + ("NobleFamily papersFonds", "fonds", "Noble family papers"), + ("EstateRecordsSeries", "series", "Estate management records"), + ("GenealogyCollection", "collection", "Genealogical documentation"), + ], + "SecurityArchives": [ + ("SecurityServiceFonds", "fonds", "Security/intelligence service records"), + ("SurveillanceRecordSeries", "series", "Surveillance documentation"), + ], + + # Community/Special Interest Archives + "CommunityArchive": [ + ("CommunityOrganizationFonds", "fonds", "Community organization records"), + ("OralHistoryCollection", "collection", "Community oral histories"), + ("LocalEventDocumentation", "collection", "Local event documentation"), + ], + "LGBTArchive": [ + ("LGBTOrganizationFonds", "fonds", "LGBT organization records"), + ("ActivistPapersCollection", "collection", "Activist personal papers"), + ("PrideEventCollection", "collection", "Pride and event documentation"), + ], + "WomensArchives": [ + ("WomensOrganizationFonds", "fonds", "Women's organization records"), + ("FeministPapersCollection", "collection", "Feminist movement papers"), + ("WomensHistoryCollection", "collection", "Women's history documentation"), + ], + "LocalHistoryArchive": [ + ("LocalHistoryFonds", "fonds", "Local history materials"), + ("CommunityPhotographCollection", "collection", "Local photographs"), + ("LocalNewspaperCollection", "collection", "Local newspaper archives"), + ], + "HistoricalArchive": [ + ("HistoricalDocumentFonds", "fonds", "Historical documents"), + ("ManuscriptCollection", "collection", "Historical manuscripts"), + ], + + # Institutional Archives + "UniversityArchive": [ + ("UniversityAdministrationFonds", "fonds", "University administrative records"), + ("StudentRecordSeries", "series", "Student records"), + ("FacultyPapersCollection", "collection", "Faculty personal papers"), + ], + "SchoolArchive": [ + ("SchoolAdministrationFonds", "fonds", "School administrative records"), + ("StudentRecordSeries", "series", "Pupil records"), + ("CurriculumDocumentCollection", "collection", "Educational materials"), + ], + "FoundationArchive": [ + ("FoundationAdministrationFonds", "fonds", "Foundation administrative records"), + ("GrantRecordSeries", "series", "Grant and funding records"), + ("ProjectDocumentationCollection", "collection", "Project documentation"), + ], + "InstitutionalArchive": [ + ("InstitutionAdministrationFonds", "fonds", "Institutional administrative records"), + ("OperationalRecordSeries", "series", "Operational documentation"), + ], + "ArchiveOfInternationalOrganization": [ + ("InternationalOrgFonds", "fonds", "International organization records"), + ("TreatyCollection", "collection", "International agreements"), + ("ConferenceRecordSeries", "series", "Conference proceedings"), + ], + "AssociationArchive": [ + ("AssociationAdministrationFonds", "fonds", "Association administrative records"), + ("MembershipRecordSeries", "series", "Membership documentation"), + ], + "MuseumArchive": [ + ("MuseumAdministrationFonds", "fonds", "Museum administrative records"), + ("CollectionDocumentationSeries", "series", "Collection documentation"), + ("ExhibitionRecordCollection", "collection", "Exhibition records"), + ], + "HouseArchive": [ + ("HouseRecordsFonds", "fonds", "Historic house records"), + ("FamilyPapersCollection", "collection", "Family papers"), + ("EstateDocumentSeries", "series", "Estate management records"), + ], + + # Press/News Archives + "PressArchive": [ + ("NewspaperPublicationFonds", "fonds", "Newspaper publisher records"), + ("JournalistPapersCollection", "collection", "Journalist papers"), + ("EditorialRecordSeries", "series", "Editorial records"), + ], + "NewspaperClippingsArchive": [ + ("ClippingsCollection", "collection", "Newspaper clippings"), + ("SubjectFileCollection", "collection", "Subject-based clipping files"), + ], + "OnlineNewsArchive": [ + ("DigitalNewsCollection", "collection", "Digital news content"), + ("WebPublicationFonds", "fonds", "Online publication records"), + ], + "MailingListArchive": [ + ("EmailArchiveCollection", "collection", "Email list archives"), + ("DiscussionForumFonds", "fonds", "Discussion forum records"), + ], + + # Digital/Technical Archives + "DigitalArchive": [ + ("DigitalObjectCollection", "collection", "Born-digital materials"), + ("DigitizedCollection", "collection", "Digitized materials"), + ("WebArchiveCollection", "collection", "Web archive captures"), + ], + "WebArchive": [ + ("WebCaptureCollection", "collection", "Website captures"), + ("SocialMediaCollection", "collection", "Social media archives"), + ], + "DarkArchive": [ + ("PreservationCopyCollection", "collection", "Preservation copies"), + ("DigitalPreservationFonds", "fonds", "Digital preservation records"), + ], + + # Specialized/Other + "CollectingArchives": [ + ("CollectedMaterialsFonds", "fonds", "Collected/acquired materials"), + ("DonatedPapersCollection", "collection", "Donated papers"), + ], + "DepositArchive": [ + ("DepositedRecordsFonds", "fonds", "Records deposited by external bodies"), + ], + "CurrentArchive": [ + ("ActiveRecordsFonds", "fonds", "Current/active records"), + ], + "CustodianArchive": [ + ("CustodialRecordsFonds", "fonds", "Records held in custody"), + ], + "PostcustodialArchive": [ + ("DistributedRecordsCollection", "collection", "Distributed custody records"), + ], + "FreeArchive": [ + ("OpenAccessCollection", "collection", "Open access materials"), + ], + "JointArchives": [ + ("SharedRecordsFonds", "fonds", "Joint/shared records"), + ], + "LightArchives": [ + ("MinimalProcessingCollection", "collection", "Minimally processed materials"), + ], + "DimArchives": [ + ("DigitallyInaccessibleCollection", "collection", "Materials with access challenges"), + ], + "SpecializedArchive": [ + ("SpecializedCollectionFonds", "fonds", "Subject-specialized materials"), + ], + "SpecializedArchivesCzechia": [ + ("CzechSpecializedFonds", "fonds", "Czech specialized archives"), + ], + "SectorOfArchivesInSweden": [ + ("SwedishSectorFonds", "fonds", "Swedish sector archives"), + ], + "StateArchivesSection": [ + ("StateSectionFonds", "fonds", "State archives section records"), + ], +} + + +def get_archive_classes_needing_rst() -> List[str]: + """Get list of archive classes that need RecordSetTypes files.""" + archive_classes = [] + + for f in CLASSES_DIR.glob("*Archive*.yaml"): + class_name = f.stem + + # Skip non-custodian classes + if any(pattern in class_name for pattern in SKIP_PATTERNS): + continue + + # Skip if already has RecordSetTypes + if class_name in EXISTING_RST: + continue + + # Check if RecordSetTypes file exists + rst_file = CLASSES_DIR / f"{class_name}RecordSetTypes.yaml" + if rst_file.exists(): + continue + + archive_classes.append(class_name) + + return sorted(archive_classes) + + +def get_record_sets_for_archive(archive_name: str) -> List[Tuple[str, str, str]]: + """Get record set types for an archive class.""" + if archive_name in ARCHIVE_RECORD_SETS: + return ARCHIVE_RECORD_SETS[archive_name] + + # Generate generic record sets based on archive name + base_name = archive_name.replace("Archive", "").replace("Archives", "") + return [ + (f"{base_name}AdministrationFonds", "fonds", f"{base_name} administrative records"), + (f"{base_name}DocumentCollection", "collection", f"{base_name} documentation"), + (f"{base_name}RecordSeries", "series", f"{base_name} record series"), + ] + + +def generate_record_set_types_file(archive_name: str, record_sets: List[Tuple[str, str, str]]) -> str: + """Generate content for a RecordSetTypes file.""" + timestamp = datetime.now().strftime("%Y-%m-%d") + rst_type_name = f"{archive_name}RecordSetType" + + # Build the classes section + classes_content = [] + for rst_name, org_principle, description in record_sets: + rico_rst_uri = { + "fonds": "https://www.ica.org/standards/RiC/vocabularies/recordSetTypes#Fonds", + "series": "https://www.ica.org/standards/RiC/vocabularies/recordSetTypes#Series", + "collection": "https://www.ica.org/standards/RiC/vocabularies/recordSetTypes#Collection", + }.get(org_principle, "") + + class_def = f""" # ============================================================================= + # {rst_name} + # ============================================================================= + {rst_name}: + is_a: {rst_type_name} + class_uri: rico:RecordSetType + description: | + A rico:RecordSetType for {description}. + + **RiC-O Alignment**: + This class is a specialized rico:RecordSetType following the {org_principle} + organizational principle as defined by rico-rst:{org_principle.capitalize()}. + + exact_mappings: + - rico:RecordSetType + + related_mappings: + - rico-rst:{org_principle.capitalize()} + + close_mappings: + - skos:Concept + + see_also: + - {rst_type_name} + - rico:RecordSetType + + annotations: + custodian_types: '["A"]' + custodian_types_rationale: "{rst_name} records are held by ARCHIVE (A) type custodians" + + rico_record_set_type: {rst_name} + rico_organizational_principle: {org_principle} + rico_organizational_principle_uri: {rico_rst_uri} + + # Inverse relationship - links back to custodian + rico_has_or_had_holder: {archive_name} + rico_has_or_had_holder_note: >- + This RecordSetType is typically held by {archive_name} custodians. + Inverse of rico:isOrWasHolderOf. + + specificity_score: 0.75 + specificity_rationale: Specific record set type within {archive_name.lower()} domain. + specificity_annotation_timestamp: '{datetime.now().isoformat()}Z' + specificity_annotation_agent: opencode-claude-sonnet-4 + template_specificity: + archive_search: 0.15 + museum_search: 0.85 + library_search: 0.85 + collection_discovery: 0.65 + person_research: 0.75 + location_browse: 0.85 + identifier_lookup: 0.85 + organizational_change: 0.45 + digital_platform: 0.85 + general_heritage: 0.75 +""" + classes_content.append(class_def) + + # Build full file content + record_set_names = [rst[0] for rst in record_sets] + + content = f"""# {archive_name}RecordSetTypes - Subclasses of {rst_type_name} +# +# This file contains concrete rico:RecordSetType subclasses for {archive_name.lower()} collections. +# These are the specific record set types that fall under {rst_type_name}. +# +# Naming convention: Type/Types (per AGENTS.md Rule 0b) +# - {rst_type_name} (singular) = abstract base class (defined in {archive_name}.yaml) +# - {archive_name}RecordSetTypes (plural) = this file with all concrete subclasses +# +# Generation date: {timestamp} + +id: https://nde.nl/ontology/hc/class/{archive_name}RecordSetTypes +name: {archive_name}RecordSetTypes +title: {archive_name} Record Set Type Subclasses + +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# + rico: https://www.ica.org/standards/RiC/ontology# + rico-rst: https://www.ica.org/standards/RiC/vocabularies/recordSetTypes# + wd: http://www.wikidata.org/entity/ + +default_prefix: hc + +imports: + - linkml:types + - ./{archive_name} + +classes: +{chr(10).join(classes_content)} +""" + return content + + +def update_archive_class_file(archive_name: str, record_sets: List[Tuple[str, str, str]]) -> Optional[str]: + """Update archive class file to add holds_record_set_types slot and imports.""" + file_path = CLASSES_DIR / f"{archive_name}.yaml" + + if not file_path.exists(): + print(f" Warning: {file_path} does not exist") + return None + + with open(file_path, 'r') as f: + content = f.read() + + # Check if already updated + if "holds_record_set_types" in content: + print(f" {archive_name} already has holds_record_set_types") + return None + + # Parse YAML to find the right places to insert + lines = content.split('\n') + new_lines = [] + + imports_section_found = False + imports_added = False + slots_section_found = False + slots_added = False + in_main_class = False + class_pattern = re.compile(rf'^ {archive_name}:') + + i = 0 + while i < len(lines): + line = lines[i] + + # Track if we're in the imports section + if line.startswith('imports:'): + imports_section_found = True + new_lines.append(line) + i += 1 + + # Add all existing imports + while i < len(lines) and (lines[i].startswith(' -') or lines[i].strip() == ''): + if lines[i].strip() == '': + break + new_lines.append(lines[i]) + i += 1 + + # Add our new imports if not already present + rst_import = f" - ./{archive_name}RecordSetTypes # Imports concrete subclasses" + slot_import = " - ../slots/holds_record_set_types # Links custodian to record set types" + + if rst_import.split('#')[0].strip() not in content: + new_lines.append(rst_import) + if "../slots/holds_record_set_types" not in content: + new_lines.append(slot_import) + + imports_added = True + continue + + # Find the main class definition + if class_pattern.match(line): + in_main_class = True + new_lines.append(line) + i += 1 + continue + + # If in main class and find 'slots:' section or need to add it + if in_main_class and not slots_added: + if line.strip().startswith('slots:'): + # slots section exists - add our slot + new_lines.append(line) + i += 1 + # Add existing slots + while i < len(lines) and lines[i].strip().startswith('- '): + new_lines.append(lines[i]) + i += 1 + # Add our slot if not present + if "holds_record_set_types" not in content: + new_lines.append(" - holds_record_set_types") + slots_added = True + continue + + # Check if we're at a point where we should add slots section + # (after class_uri or is_a, before other content) + if (line.strip().startswith('class_uri:') or + line.strip().startswith('description:') or + line.strip().startswith('exact_mappings:')): + # If we haven't seen a slots section and we're past is_a/class_uri + if line.strip().startswith('description:') or line.strip().startswith('exact_mappings:'): + # Add slots section before description/mappings + new_lines.append('') + new_lines.append(' # Slots linking custodian to record set types') + new_lines.append(' slots:') + new_lines.append(' - holds_record_set_types') + new_lines.append('') + slots_added = True + + new_lines.append(line) + i += 1 + + # If we didn't add slots section, try a different approach + if not slots_added: + # Find class definition and add slots after class_uri + new_content = content + + # Pattern to find the class and add slots after class_uri + class_match = re.search( + rf'( {archive_name}:.*?class_uri:[^\n]+)', + new_content, + re.DOTALL + ) + if class_match: + insert_point = class_match.end() + slots_text = "\n\n # Slots linking custodian to record set types\n slots:\n - holds_record_set_types" + new_content = new_content[:insert_point] + slots_text + new_content[insert_point:] + new_lines = new_content.split('\n') + + return '\n'.join(new_lines) + + +def main(): + """Main function to generate all RecordSetTypes files and update archive classes.""" + print("=" * 70) + print("Archive RecordSetTypes Generator") + print("=" * 70) + + # Get list of archives needing RecordSetTypes + archives = get_archive_classes_needing_rst() + print(f"\nFound {len(archives)} archive classes needing RecordSetTypes files\n") + + created_files = [] + updated_files = [] + errors = [] + + for archive_name in archives: + print(f"Processing {archive_name}...") + + # Get record sets for this archive type + record_sets = get_record_sets_for_archive(archive_name) + + # Generate RecordSetTypes file + rst_content = generate_record_set_types_file(archive_name, record_sets) + rst_path = CLASSES_DIR / f"{archive_name}RecordSetTypes.yaml" + + try: + with open(rst_path, 'w') as f: + f.write(rst_content) + created_files.append(rst_path.name) + print(f" Created {rst_path.name}") + except Exception as e: + errors.append(f"Error creating {rst_path.name}: {e}") + print(f" Error creating {rst_path.name}: {e}") + continue + + # Update archive class file + updated_content = update_archive_class_file(archive_name, record_sets) + if updated_content: + archive_path = CLASSES_DIR / f"{archive_name}.yaml" + try: + with open(archive_path, 'w') as f: + f.write(updated_content) + updated_files.append(archive_name) + print(f" Updated {archive_name}.yaml") + except Exception as e: + errors.append(f"Error updating {archive_name}.yaml: {e}") + print(f" Error updating {archive_name}.yaml: {e}") + + print("\n" + "=" * 70) + print("Summary") + print("=" * 70) + print(f"Created {len(created_files)} RecordSetTypes files") + print(f"Updated {len(updated_files)} archive class files") + if errors: + print(f"\nErrors ({len(errors)}):") + for error in errors: + print(f" - {error}") + + # Print files for main schema import + print("\n" + "=" * 70) + print("Add these imports to 01_custodian_name_modular.yaml:") + print("=" * 70) + for f in sorted(created_files): + name = f.replace('.yaml', '') + print(f" - modules/classes/{name}") + + +if __name__ == "__main__": + main() diff --git a/scripts/migrate_custodian_types_to_uri.py b/scripts/migrate_custodian_types_to_uri.py new file mode 100644 index 0000000000..e9afe6ac41 --- /dev/null +++ b/scripts/migrate_custodian_types_to_uri.py @@ -0,0 +1,216 @@ +#!/usr/bin/env python3 +""" +Migrate legacy GLAMORCUBESFIXPHDNT single-letter codes to proper Type class URIs. + +This script migrates references like '["A"]' to '["hc:ArchiveOrganizationType"]' +in all LinkML schema files. + +Usage: + python scripts/migrate_custodian_types_to_uri.py [--dry-run] +""" + +import os +import re +import sys +from pathlib import Path + +# Mapping from GLAMORCUBESFIXPHDNT letters to Type class URIs +LETTER_TO_TYPE_URI = { + "A": "hc:ArchiveOrganizationType", + "B": "hc:BioCustodianType", + "C": "hc:CommercialOrganizationType", + "D": "hc:DigitalPlatformType", + "E": "hc:EducationProviderType", + "F": "hc:FeatureCustodianType", + "G": "hc:GalleryType", + "H": "hc:HolySacredSiteType", + "I": "hc:IntangibleHeritageGroupType", + "L": "hc:LibraryType", + "M": "hc:MuseumType", + "N": "hc:NonProfitType", + "O": "hc:OfficialInstitutionType", + "P": "hc:PersonalCollectionType", + "R": "hc:ResearchOrganizationType", + "S": "hc:HeritageSocietyType", + "T": "hc:TasteScentHeritageType", + "U": "hc:UnspecifiedType", + "X": "hc:MixedCustodianType", +} + +# Mapping from letter codes to human-readable names (for rationale updates) +LETTER_TO_NAME = { + "A": "ARCHIVE", + "B": "BOTANICAL_ZOO", + "C": "CORPORATION", + "D": "DIGITAL_PLATFORM", + "E": "EDUCATION_PROVIDER", + "F": "FEATURES", + "G": "GALLERY", + "H": "HOLY_SITES", + "I": "INTANGIBLE_HERITAGE_GROUP", + "L": "LIBRARY", + "M": "MUSEUM", + "N": "NGO", + "O": "OFFICIAL_INSTITUTION", + "P": "PERSONAL_COLLECTION", + "R": "RESEARCH_CENTER", + "S": "COLLECTING_SOCIETY", + "T": "TASTE_SMELL", + "U": "UNKNOWN", + "X": "MIXED", +} + +# Type class short names for rationale updates +TYPE_CLASS_SHORT_NAMES = { + "A": "ArchiveOrganizationType", + "B": "BioCustodianType", + "C": "CommercialOrganizationType", + "D": "DigitalPlatformType", + "E": "EducationProviderType", + "F": "FeatureCustodianType", + "G": "GalleryType", + "H": "HolySacredSiteType", + "I": "IntangibleHeritageGroupType", + "L": "LibraryType", + "M": "MuseumType", + "N": "NonProfitType", + "O": "OfficialInstitutionType", + "P": "PersonalCollectionType", + "R": "ResearchOrganizationType", + "S": "HeritageSocietyType", + "T": "TasteScentHeritageType", + "U": "UnspecifiedType", + "X": "MixedCustodianType", +} + + +def migrate_file(filepath: Path, dry_run: bool = False) -> dict: + """ + Migrate a single YAML file from legacy letter codes to Type URIs. + + Returns dict with migration statistics. + """ + stats = { + "filepath": str(filepath), + "equals_expression_changes": 0, + "rationale_changes": 0, + "errors": [], + } + + try: + content = filepath.read_text(encoding="utf-8") + original_content = content + + # Pattern 1: Migrate equals_expression: '["X"]' to '["hc:XxxType"]' + # Handles single letter codes + for letter, uri in LETTER_TO_TYPE_URI.items(): + # Pattern for single letter: '["A"]' + pattern = rf"equals_expression:\s*'\[\"{letter}\"\]'" + replacement = f"equals_expression: '[\"{uri}\"]'" + + matches = re.findall(pattern, content) + if matches: + stats["equals_expression_changes"] += len(matches) + content = re.sub(pattern, replacement, content) + + # Pattern 2: Migrate multi-letter arrays like '["A", "M"]' + # Find all equals_expression with arrays + multi_pattern = r"equals_expression:\s*'\[([^\]]+)\]'" + + def replace_multi(match): + inner = match.group(1) + # Check if it contains any single letter codes + parts = [p.strip().strip('"').strip("'") for p in inner.split(",")] + new_parts = [] + changed = False + for part in parts: + part = part.strip() + if part in LETTER_TO_TYPE_URI: + new_parts.append(f'"{LETTER_TO_TYPE_URI[part]}"') + changed = True + elif part.startswith("hc:"): + # Already migrated + new_parts.append(f'"{part}"') + else: + new_parts.append(f'"{part}"') + + if changed: + return f"equals_expression: '[{', '.join(new_parts)}]'" + return match.group(0) + + content = re.sub(multi_pattern, replace_multi, content) + + # Pattern 3: Update rationale strings + # "maps to ARCHIVE" -> "maps to ArchiveOrganizationType" + for letter, old_name in LETTER_TO_NAME.items(): + type_name = TYPE_CLASS_SHORT_NAMES[letter] + # Pattern: maps to ARCHIVE (or similar) + rationale_pattern = rf"maps to {old_name}(?!\w)" + if re.search(rationale_pattern, content): + stats["rationale_changes"] += len(re.findall(rationale_pattern, content)) + content = re.sub(rationale_pattern, f"maps to {type_name}", content) + + # Write if changed and not dry run + if content != original_content: + if not dry_run: + filepath.write_text(content, encoding="utf-8") + return stats + else: + # No changes needed + stats["equals_expression_changes"] = 0 + stats["rationale_changes"] = 0 + return stats + + except Exception as e: + stats["errors"].append(str(e)) + return stats + + +def main(): + dry_run = "--dry-run" in sys.argv + + if dry_run: + print("=== DRY RUN MODE - No files will be modified ===\n") + + # Find all YAML files in the LinkML schema directory + schema_dir = Path("schemas/20251121/linkml") + yaml_files = list(schema_dir.rglob("*.yaml")) + + print(f"Found {len(yaml_files)} YAML files to process\n") + + total_expression_changes = 0 + total_rationale_changes = 0 + files_modified = 0 + errors = [] + + for filepath in sorted(yaml_files): + stats = migrate_file(filepath, dry_run=dry_run) + + if stats["equals_expression_changes"] > 0 or stats["rationale_changes"] > 0: + files_modified += 1 + total_expression_changes += stats["equals_expression_changes"] + total_rationale_changes += stats["rationale_changes"] + print(f" {filepath.name}: {stats['equals_expression_changes']} expr, {stats['rationale_changes']} rationale") + + if stats["errors"]: + errors.extend([(filepath, e) for e in stats["errors"]]) + + print(f"\n=== Migration Summary ===") + print(f"Files processed: {len(yaml_files)}") + print(f"Files modified: {files_modified}") + print(f"equals_expression changes: {total_expression_changes}") + print(f"Rationale string changes: {total_rationale_changes}") + + if errors: + print(f"\nErrors ({len(errors)}):") + for filepath, error in errors: + print(f" {filepath}: {error}") + + if dry_run: + print("\n=== DRY RUN COMPLETE - Run without --dry-run to apply changes ===") + else: + print("\n=== Migration complete ===") + + +if __name__ == "__main__": + main() diff --git a/scripts/regenerate_manifest.py b/scripts/regenerate_manifest.py new file mode 100644 index 0000000000..79a5a4f431 --- /dev/null +++ b/scripts/regenerate_manifest.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +""" +Regenerate manifest.json for LinkML schema frontend. + +This script scans the LinkML schema directory and generates a complete manifest +of all class and enum files for the frontend to load. +""" + +import json +import os +from datetime import datetime, timezone +from pathlib import Path + +# Schema paths +SCHEMA_DIR = Path(__file__).parent.parent / "schemas" / "20251121" / "linkml" +CLASSES_DIR = SCHEMA_DIR / "modules" / "classes" +ENUMS_DIR = SCHEMA_DIR / "modules" / "enums" +MANIFEST_PATH = SCHEMA_DIR / "manifest.json" + + +def get_yaml_files(directory: Path) -> list[str]: + """Get all .yaml files in a directory, sorted alphabetically.""" + if not directory.exists(): + return [] + return sorted([f.stem for f in directory.glob("*.yaml")]) + + +def main(): + # Get all class files + class_files = get_yaml_files(CLASSES_DIR) + print(f"Found {len(class_files)} class files") + + # Get all enum files + enum_files = get_yaml_files(ENUMS_DIR) + print(f"Found {len(enum_files)} enum files") + + # Build manifest structure + manifest = { + "generated": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.000Z"), + "version": "1.0.0", + "categories": [ + { + "name": "main", + "displayName": "Main Schema", + "files": [ + { + "name": "Heritage Custodian Ontology", + "path": "01_custodian_name_modular.yaml", + "category": "main" + } + ] + }, + { + "name": "class", + "displayName": "Classes", + "files": [ + { + "name": name, + "path": f"modules/classes/{name}.yaml", + "category": "classes" + } + for name in class_files + ] + }, + { + "name": "enum", + "displayName": "Enumerations", + "files": [ + { + "name": name, + "path": f"modules/enums/{name}.yaml", + "category": "enums" + } + for name in enum_files + ] + } + ] + } + + # Write manifest + with open(MANIFEST_PATH, 'w', encoding='utf-8') as f: + json.dump(manifest, f, indent=2) + + print(f"\n✅ Manifest written to {MANIFEST_PATH}") + print(f" - Main schema: 1 file") + print(f" - Classes: {len(class_files)} files") + print(f" - Enums: {len(enum_files)} files") + print(f" - Total: {1 + len(class_files) + len(enum_files)} files") + + +if __name__ == "__main__": + main()