- Created PlantUML diagrams for custodian types, full schema, legal status, and organizational structure. - Implemented a script to generate GraphViz DOT diagrams from OWL/RDF ontology files. - Developed a script to generate UML diagrams from modular LinkML schema, supporting both Mermaid and PlantUML formats. - Enhanced class definitions and relationships in UML diagrams to reflect the latest schema updates.
16 KiB
UML Diagrams Generated from LinkML Schema
Date: 2025-11-23
Timestamp: 20251123_174151
Schema Version: 0.7.1
Generator: Custom Python script (scripts/generate_uml_diagrams.py)
Summary
Successfully generated 10 UML diagrams (5 Mermaid + 5 PlantUML) from the modular LinkML schema, including the newly implemented CustodianType classification system.
Generated Diagrams
1. Full Schema Diagram
Purpose: Complete visualization of all 29 classes in the Heritage Custodian schema
Files:
- Mermaid:
schemas/20251121/uml/mermaid/full_schema_20251123_174151.mmd(12 KB) - PlantUML:
schemas/20251121/uml/plantuml/full_schema_20251123_174151.puml
Includes:
- All 29 classes: Custodian, CustodianObservation, CustodianName, CustodianType, CustodianLegalStatus, CustodianPlace, CustodianCollection, ReconstructionActivity, OrganizationalStructure, OrganizationalChangeEvent, PersonObservation, and 18 supporting classes
- All inheritance relationships (is_a)
- All composition relationships (class-to-class slots)
- 127 total slots visualized
Use Cases:
- System architecture overview
- Schema documentation
- Onboarding new developers
2. Core Classes Diagram
Purpose: Focus on the 8 main entities in the hub architecture
Files:
- Mermaid:
schemas/20251121/uml/mermaid/core_classes_20251123_174151.mmd(5.6 KB) - PlantUML:
schemas/20251121/uml/plantuml/core_classes_20251123_174151.puml
Classes Included:
- Custodian (Hub) - Abstract entity with persistent identifier
- CustodianObservation - Evidence of custodians in sources
- CustodianName - Standardized emic name aspect
- CustodianType - NEW: GLAMORCUBESFIXPHDNT classification (19 types)
- CustodianLegalStatus - Formal legal entity aspect
- CustodianPlace - Nominal place designation aspect
- CustodianCollection - Heritage collection aspect
- ReconstructionActivity - Process generating aspects from observations
Relationships Visualized:
- Hub pattern: All aspects link to Custodian via
refers_to_custodian - Observation → Reconstruction: CustodianObservation feeds ReconstructionActivity
- Custodian → Type: NEW custodian_type slot (org:classification)
Use Cases:
- Understanding the hub architecture
- Multi-aspect modeling explanation
- PiCo-inspired observation/reconstruction pattern
3. CustodianType Diagram (NEW)
Purpose: Visualize the newly implemented type classification system
Files:
- Mermaid:
schemas/20251121/uml/mermaid/custodian_type_20251123_174151.mmd(1.1 KB) - PlantUML:
schemas/20251121/uml/plantuml/custodian_type_20251123_174151.puml
Classes Included:
- Custodian (Hub)
- CustodianType (Base class - abstract)
Slots Visualized:
Custodian:
hc_id(required) - Persistent identifierpreferred_label(optional) - Link to CustodianNamecustodian_type(optional) - NEW: Link to CustodianTypelegal_status(optional) - Link to CustodianLegalStatusplace_designation(optional) - Link to CustodianPlacehas_collection(multivalued) - Links to CustodianCollectionorganizational_structure(multivalued) - Operational unitsorganizational_change_events(multivalued) - Historyidentifiers(multivalued) - External IDscreated,modified- Timestamps
CustodianType:
type_id- Persistent identifier (e.g.,https://nde.nl/ontology/hc/type/museum/Q207694)primary_type- One of 19 GLAMORCUBESFIXPHDNT categorieswikidata_entity- Wikidata Q-number (e.g.,Q207694)type_label- Multilingual labelstype_description- SKOS definitionbroader_type- Hierarchical parentnarrower_types- Hierarchical childrenrelated_types- Associative relationshipsapplicable_countries- Geographic restrictions (ISO 3166-1 alpha-2)created,modified- Timestamps
Relationship:
Custodian --> "0..1" CustodianType : custodian_type
Cardinality: 0..1 (optional, single-valued)
Ontology Alignment (documented in schema, not visible in UML):
org:classification(W3C Organization Ontology) - PRIMARYcrm:P2_has_type(CIDOC-CRM) - SECONDARYschema:additionalType(Schema.org) - TERTIARY (Wikidata linking)
Use Cases:
- Understanding GLAMORCUBESFIXPHDNT taxonomy integration
- Explaining type classification vs. legal form distinction
- Demonstrating SKOS-based concept scheme
4. Legal Status Diagram
Purpose: Visualize the formal legal entity reconstruction
Files:
- Mermaid:
schemas/20251121/uml/mermaid/legal_status_20251123_174151.mmd(1.8 KB) - PlantUML:
schemas/20251121/uml/plantuml/legal_status_20251123_174151.puml
Classes Included:
- Custodian (Hub)
- CustodianLegalStatus - Formal legal entity aspect
- LegalEntityType - Type of legal entity (individual, group, organization, government, corporation)
- LegalForm - ISO 20275 legal form codes (foundation, association, etc.)
- LegalName - Full legal name as registered
- RegistrationInfo - Registration details (KvK, company number, etc.)
Relationships:
Custodian --> "0..1" CustodianLegalStatus : legal_status
CustodianLegalStatus --> "1..1" LegalEntityType : legal_entity_type
CustodianLegalStatus --> "1..1" LegalName : legal_name
CustodianLegalStatus --> "0..1" LegalForm : legal_form
CustodianLegalStatus --> "0..*" RegistrationInfo : registration_numbers
Key Distinction:
- CustodianType (operational classification) - "How does it function?" (museum, library, archive)
- LegalForm (legal registration) - "What is its legal structure?" (foundation, association, corporation)
Example:
- Rijksmuseum:
custodian_type: Art Museum (Q207694) - MUSEUMlegal_form: Stichting (ISO 20275 code 8102) - Foundation
Use Cases:
- Understanding legal entity reconstruction
- Explaining ISO 20275 legal form codes
- Distinguishing operational type from legal form
5. Organizational Structure Diagram
Purpose: Visualize operational units, staff roles, and organizational history
Files:
- Mermaid:
schemas/20251121/uml/mermaid/organizational_structure_20251123_174151.mmd(3.0 KB) - PlantUML:
schemas/20251121/uml/plantuml/organizational_structure_20251123_174151.puml
Classes Included:
- Custodian (Hub)
- OrganizationalStructure - Operational units (departments, teams, divisions)
- OrganizationalChangeEvent - Historical restructuring events (mergers, splits, dissolutions)
- PersonObservation - Staff roles and affiliations (PiCo pattern)
Relationships:
Custodian --> "0..*" OrganizationalStructure : organizational_structure
Custodian --> "0..*" OrganizationalChangeEvent : organizational_change_events
OrganizationalStructure --> "0..*" PersonObservation : staff_members
OrganizationalChangeEvent --> "0..*" OrganizationalStructure : affected_units
OrganizationalChangeEvent --> "0..*" OrganizationalStructure : resulting_units
Key Concepts:
OrganizationalStructure (on Custodian):
- INFORMAL operational units (not legally registered)
- Examples: "Digital Preservation Department", "Public Services Team"
- Can change frequently without legal reorganization
- Temporal validity:
valid_from,valid_to
OrganizationalChangeEvent:
- Documents organizational history (mergers, splits, dissolutions, reorganizations)
- Links to affected units (dissolved) and resulting units (created)
- Temporal alignment:
event_datemarks when structures become valid/cease - 9 event types: MERGER, SPLIT, DISSOLUTION, REORGANIZATION, RENAMING, TRANSFER, FOUNDING, EXPANSION, REDUCTION
PersonObservation:
- PiCo-inspired pattern for staff roles
- Links person to organizational unit via
unit_affiliation - Temporal role:
role_start_date,role_end_date - Role types: CURATOR, ARCHIVIST, DIRECTOR, CONSERVATOR, etc.
Distinction from CustodianLegalStatus:
- GovernanceStructure (on CustodianLegalStatus): FORMAL structure from legal registration
- OrganizationalStructure (on Custodian): INFORMAL operational structure
Use Cases:
- Understanding organizational hierarchy
- Tracking organizational change history
- Staff role management through restructuring
- Temporal consistency validation
Diagram Formats
Mermaid Class Diagrams (.mmd)
Advantages:
- ✅ Text-based, version control friendly
- ✅ Can be embedded in Markdown (GitHub, GitLab, VS Code)
- ✅ Live preview in many editors
- ✅ Lightweight syntax
Viewing:
# In VS Code with Mermaid extension
code schemas/20251121/uml/mermaid/core_classes_20251123_174151.mmd
# In browser with Mermaid Live Editor
open https://mermaid.live/
# Paste contents of .mmd file
Example Syntax:
classDiagram
class Custodian
<<abstract>> Custodian
Custodian : *hc_id uriorcurie
Custodian : +custodian_type CustodianType
Custodian --> "0..1" CustodianType : custodian_type
PlantUML Diagrams (.puml)
Advantages:
- ✅ More mature tooling ecosystem
- ✅ Rich styling options
- ✅ Better for complex diagrams
- ✅ Can generate PNG/SVG/PDF
Viewing:
# Generate PNG from PlantUML
plantuml schemas/20251121/uml/plantuml/core_classes_20251123_174151.puml
# Or use online server
open http://www.plantuml.com/plantuml/uml/
# Paste contents of .puml file
Example Syntax:
@startuml
abstract class Custodian {
+ hc_id: uriorcurie
- custodian_type: CustodianType
}
Custodian --> "0..1" CustodianType : custodian_type
@enduml
Generation Process
Custom Script Required
Reason: The standard LinkML generators (gen-yuml, gen-mermaid-class-diagram, gen-plantuml) encountered compatibility issues with the modular schema structure.
Problem:
TypeError: SchemaDefinition.__init__() got an unexpected keyword argument 'slot_uri'
Solution: Created custom script scripts/generate_uml_diagrams.py that:
- Loads and merges all modular schema components
- Manually constructs Mermaid and PlantUML syntax
- Generates focused diagrams (core classes, type hierarchy, legal status, etc.)
- Handles abstract classes, inheritance, and composition relationships
Script Features
Input: Main schema file (01_custodian_name_modular.yaml)
Process:
- Parse main schema and recursively load all imported modules
- Merge classes, slots, enums, types into single schema object
- Generate 5 specialized diagrams per format (10 total)
- Apply consistent timestamp to all outputs
Output: 10 UML diagram files with timestamp 20251123_174151
Statistics:
- Classes loaded: 29
- Slots loaded: 127
- Enums loaded: 11
- Diagrams generated: 10 (5 Mermaid + 5 PlantUML)
File Locations
Mermaid Diagrams
schemas/20251121/uml/mermaid/
├── full_schema_20251123_174151.mmd (12 KB - all 29 classes)
├── core_classes_20251123_174151.mmd (5.6 KB - 8 main entities)
├── custodian_type_20251123_174151.mmd (1.1 KB - NEW type classification)
├── legal_status_20251123_174151.mmd (1.8 KB - legal entity)
└── organizational_structure_20251123_174151.mmd (3.0 KB - operational units)
PlantUML Diagrams
schemas/20251121/uml/plantuml/
├── full_schema_20251123_174151.puml
├── core_classes_20251123_174151.puml
├── custodian_type_20251123_174151.puml
├── legal_status_20251123_174151.puml
└── organizational_structure_20251123_174151.puml
Diagram Interpretation Guide
Notation
Mermaid:
<<abstract>>- Abstract class (cannot be instantiated)*field- Required field+field- Optional fieldfield[]- Multivalued field (array)-->- Association/composition relationship<|--- Inheritance relationship
PlantUML:
abstract class- Abstract class+prefix - Required field-prefix - Optional field[]suffix - Multivalued field-->- Association/composition relationship<|--- Inheritance relationship
Cardinality
"0..1"- Optional, single-valued"1..1"- Required, single-valued"0..*"- Optional, multivalued"1..*"- Required, multivalued
Use Cases
Documentation
Embed in Markdown:
## Custodian Hub Architecture
\`\`\`mermaid
classDiagram
class Custodian
<<abstract>> Custodian
Custodian : *hc_id uriorcurie
Custodian : +custodian_type CustodianType
\`\`\`
Schema Validation
Use diagrams to:
- ✅ Verify all classes are present
- ✅ Check inheritance hierarchies
- ✅ Validate composition relationships
- ✅ Ensure required fields are marked
Ontology Mapping
Compare UML diagrams with ontology documentation:
- W3C Organization Ontology (
org:classification) - CIDOC-CRM (
crm:E55_Type,crm:P2_has_type) - Schema.org (
schema:additionalType)
Communication
Share diagrams with:
- Stakeholders (explain data model)
- Developers (implementation guide)
- Data curators (understand structure)
- Ontology engineers (alignment verification)
Next Steps
Phase 2: Specialized Type Diagrams
When specialized type classes are created (e.g., ArchiveOrganizationType, MuseumType), generate additional diagrams:
New Diagrams to Generate:
- Archive Type Hierarchy - ArchiveOrganizationType + 50+ archive subtypes
- Museum Type Hierarchy - MuseumType + 40+ museum subtypes
- Library Type Hierarchy - LibraryType + 30+ library subtypes
- Full Type Taxonomy - All 19 GLAMORCUBESFIXPHDNT categories with hierarchies
Command:
python scripts/generate_uml_diagrams.py
The script will automatically detect new classes and generate updated diagrams.
SVG/PNG Generation (Optional)
Convert PlantUML diagrams to images for presentations:
# Install PlantUML
brew install plantuml # macOS
# or download from https://plantuml.com/
# Generate PNG
plantuml schemas/20251121/uml/plantuml/core_classes_20251123_174151.puml
# Generate SVG (vector, scalable)
plantuml -tsvg schemas/20251121/uml/plantuml/core_classes_20251123_174151.puml
# Generate PDF
plantuml -tpdf schemas/20251121/uml/plantuml/core_classes_20251123_174151.puml
Output: Images in same directory as .puml files
Mermaid Live Preview
For interactive editing:
- VS Code Extension: Install "Markdown Preview Mermaid Support"
- GitHub: Native Mermaid rendering in
.mdfiles - Mermaid Live: https://mermaid.live/ (online editor)
Regeneration Instructions
When to Regenerate:
- After adding new classes to schema
- After modifying class slots or relationships
- After schema version updates
Command:
cd /Users/kempersc/apps/glam
python scripts/generate_uml_diagrams.py
Output: New diagrams with updated timestamp
Quality Assurance
Diagram Validation Checklist
✅ CustodianType Diagram:
- CustodianType class is abstract
- custodian_type slot present on Custodian
- Cardinality is "0..1" (optional, single-valued)
- 11 slots visible on CustodianType
- wikidata_entity field present
- primary_type field present
✅ Core Classes Diagram:
- All 8 main entities present
- Hub pattern visible (Custodian → aspects)
- CustodianType included (NEW)
- Inheritance relationships shown
- Composition relationships shown
✅ Full Schema Diagram:
- 29 classes visualized
- 127 slots represented
- No duplicate classes
- All relationships valid
References
Schema Files
- Main schema:
schemas/20251121/linkml/01_custodian_name_modular.yaml - CustodianType class:
schemas/20251121/linkml/modules/classes/CustodianType.yaml - Custodian class:
schemas/20251121/linkml/modules/classes/Custodian.yaml
Generation Script
- Script:
scripts/generate_uml_diagrams.py - Language: Python 3.12
- Dependencies: PyYAML, pathlib, datetime
Documentation
- Implementation summary:
CUSTODIAN_TYPE_ONTOLOGY_ALIGNMENT_COMPLETE.md - Quick status:
QUICK_STATUS_CUSTODIAN_TYPE_20251123.md - Ontology consultation:
ONTOLOGY_CONSULTATION_REPORT_CUSTODIAN_TYPE.md
External Tools
- LinkML: https://linkml.io/
- Mermaid: https://mermaid.js.org/
- PlantUML: https://plantuml.com/
Document Version: 1.0
Created: 2025-11-23
Timestamp: 20251123_174151
Diagrams Generated: 10 (5 Mermaid + 5 PlantUML)
Schema Version: 0.7.1