8 KiB
Auxiliary Classes Implementation Complete
Date: 2025-11-26
Status: ✅ COMPLETE
Schema Version: 20251121 (modular)
Summary
Successfully implemented three new auxiliary classes to model secondary physical locations and digital platforms for heritage custodians with complex organizational structures.
New Classes Created
1. AuxiliaryPlace (W3C Org org:Site alignment)
File: /schemas/20251121/linkml/modules/classes/AuxiliaryPlace.yaml
Lines: ~575
Secondary physical locations for heritage custodians:
- Storage depots
- Branch offices
- Research centers
- Partner locations
- Public access points
Key Features:
- Links back to main place via
is_auxiliary_of - Can host formal branches via
hosts_branch - Tracks operational status (ACTIVE, HISTORICAL, PLANNED, etc.)
- Includes temporal extent for historical places
2. OrganizationBranch (W3C Org org:OrganizationalUnit alignment)
File: /schemas/20251121/linkml/modules/classes/OrganizationBranch.yaml
Lines: ~501
Formal organizational sub-units at physical locations:
- Branch libraries
- Conservation labs
- Research units
- Regional offices
- Special collections units
Key Features:
- Located at AuxiliaryPlace via
hosts_branchrelationship - Reports to parent custodian via
reports_to - Distinct from OrganizationalStructure (formal units vs administrative departments)
- Tracks branch status (ACTIVE, CLOSED, MERGED, etc.)
3. AuxiliaryDigitalPlatform (DCAT dcat:Catalog alignment)
File: /schemas/20251121/linkml/modules/classes/AuxiliaryDigitalPlatform.yaml
Lines: ~615
Secondary digital platforms and project-specific websites:
- Exhibition microsites
- Mobile apps
- API endpoints
- Legacy systems
- Project websites
Key Features:
- Links to main platform via
is_auxiliary_of - Tracks platform lifecycle (ACTIVE, DEPRECATED, ARCHIVED)
- Records archival status for deprecated platforms
- Supports multiple URL types (homepage, API, IIIF endpoints)
New Enumerations
| Enum File | Values | Purpose |
|---|---|---|
AuxiliaryPlaceTypeEnum.yaml |
BRANCH_OFFICE, STORAGE_FACILITY, RESEARCH_CENTER, PARTNER_LOCATION, PUBLIC_ACCESS_POINT, EXHIBITION_VENUE, EDUCATION_CENTER, ADMINISTRATIVE_OFFICE | Types of secondary physical locations |
OrganizationBranchTypeEnum.yaml |
REGIONAL_OFFICE, BRANCH_LIBRARY, SATELLITE_GALLERY, CONSERVATION_LAB, RESEARCH_UNIT, PUBLIC_ACCESS_POINT, SPECIAL_COLLECTIONS_UNIT | Types of formal organizational units |
AuxiliaryDigitalPlatformTypeEnum.yaml |
PROJECT_WEBSITE, EXHIBITION_MICROSITE, API_ENDPOINT, MOBILE_APP, DATA_REPOSITORY, SPECIALIZED_COLLECTION_PORTAL, IIIF_SERVICE, SOCIAL_MEDIA_PRESENCE, DIGITAL_ASSET_MANAGEMENT, LEGACY_SYSTEM | Types of secondary digital platforms |
New Slot Modules
| Slot File | Slot Name | Domain → Range | Purpose |
|---|---|---|---|
auxiliary_places.yaml |
auxiliary_places | CustodianPlace → AuxiliaryPlace[] | Link main place to secondary locations |
auxiliary_platforms.yaml |
auxiliary_platforms | DigitalPlatform → AuxiliaryDigitalPlatform[] | Link main platform to secondary platforms |
located_at.yaml |
located_at | OrganizationalStructure → AuxiliaryPlace[] | Optional physical location for departments |
Updated Existing Classes
| Class | Changes |
|---|---|
CustodianPlace.yaml |
Added auxiliary_places slot with full slot_usage |
DigitalPlatform.yaml |
Added auxiliary_platforms slot with full slot_usage |
OrganizationalStructure.yaml |
Added located_at slot with full slot_usage |
Architecture Pattern
Custodian (hub)
├── preferred_label → CustodianName
│ └── alternative_names → CustodianAppellation[]
│
├── place_designation → CustodianPlace (main place)
│ └── auxiliary_places → AuxiliaryPlace[] ← NEW
│ └── hosts_branch → OrganizationBranch ← NEW
│
├── digital_platform → DigitalPlatform (main platform)
│ └── auxiliary_platforms → AuxiliaryDigitalPlatform[] ← NEW
│
└── organizational_structure → OrganizationalStructure
└── located_at → AuxiliaryPlace (optional) ← NEW
Validation Results
Schema Validation: ✅ PASSED
gen-json-schema schemas/20251121/linkml/01_custodian_name_modular.yaml
# Output: 6,005 lines JSON schema
RDF Generation: ✅ PASSED
TIMESTAMP=20251126_101032
gen-owl -f ttl → custodian_with_auxiliary_classes_${TIMESTAMP}.owl.ttl (15,399 lines)
rdfpipe → .nt (14,986 lines)
rdfpipe → .jsonld (68,822 lines)
Example Instances
File: /schemas/20251121/linkml/examples/auxiliary_classes_examples.yaml
Four comprehensive use cases:
-
Rijksmuseum - Large museum with storage depot, research library, and multiple digital platforms (Rijksstudio, mobile app, API, exhibition microsites)
-
OBA Amsterdam - Multi-branch public library system with branch locations (some active, some historical/closed) and auxiliary digital platforms (e-books, youth portal)
-
Noord-Hollands Archief - Regional archive with study center, off-site depot, partner reading rooms, and multiple digital services (OAI-PMH, image viewer, legacy system)
-
UvA Library - University library with special collections, science park branch, and research infrastructure (digital collections, institutional repository, IIIF service)
Key Design Decisions
1. Auxiliary vs. Main Distinction
- Main classes (CustodianPlace, DigitalPlatform) represent primary operational entry points
- Auxiliary classes represent secondary, supporting, or project-specific entities
- Clear parent-child relationships via
is_auxiliary_ofback-references
2. OrganizationBranch vs. OrganizationalStructure
- OrganizationBranch: Formal organizational units at specific physical locations (branch libraries, regional offices)
- OrganizationalStructure: Administrative departments/divisions that may span multiple locations or be purely administrative
3. Lifecycle Tracking
- All auxiliary classes include
temporal_extentfor historical tracking - Status enums track operational state (ACTIVE, CLOSED, DEPRECATED, ARCHIVED)
- AuxiliaryDigitalPlatform includes
archival_statusfor web archiving metadata
4. Ontology Alignment
- AuxiliaryPlace →
org:Site(W3C Org) - OrganizationBranch →
org:OrganizationalUnit(W3C Org) - AuxiliaryDigitalPlatform →
dcat:Catalog(DCAT)
Files Modified/Created
New Files
schemas/20251121/linkml/modules/classes/
├── AuxiliaryPlace.yaml
├── OrganizationBranch.yaml
└── AuxiliaryDigitalPlatform.yaml
schemas/20251121/linkml/modules/enums/
├── AuxiliaryPlaceTypeEnum.yaml
├── OrganizationBranchTypeEnum.yaml
└── AuxiliaryDigitalPlatformTypeEnum.yaml
schemas/20251121/linkml/modules/slots/
├── auxiliary_places.yaml
├── auxiliary_platforms.yaml
└── located_at.yaml
schemas/20251121/linkml/examples/
└── auxiliary_classes_examples.yaml
schemas/20251121/rdf/
├── custodian_with_auxiliary_classes_20251126_101032.owl.ttl
├── custodian_with_auxiliary_classes_20251126_101032.nt
└── custodian_with_auxiliary_classes_20251126_101032.jsonld
Modified Files
schemas/20251121/linkml/modules/classes/
├── CustodianPlace.yaml (added auxiliary_places slot)
├── DigitalPlatform.yaml (added auxiliary_platforms slot)
└── OrganizationalStructure.yaml (added located_at slot)
schemas/20251121/linkml/
└── 01_custodian_name_modular.yaml (added imports)
Next Steps (Potential Future Work)
- Validate example instances against schema using
linkml-validate - Generate Python dataclasses from updated schema
- Create SHACL shapes for data validation
- Update UML/Mermaid diagrams to show new relationships
- Document migration path for existing data to use new classes
References
- W3C Organization Ontology: https://www.w3.org/TR/vocab-org/
- DCAT Vocabulary: https://www.w3.org/TR/vocab-dcat-3/
- LinkML Documentation: https://linkml.io/