glam/schemas/20251121/linkml/modules/classes/OrganizationalStructure.yaml
kempersc eff2f47f6f Add auxiliary enums and slots for digital platforms and physical locations
- Created AuxiliaryDigitalPlatformTypeEnum.yaml to classify types of secondary digital platforms.
- Created AuxiliaryPlaceTypeEnum.yaml to classify types of secondary physical locations.
- Added OrganizationBranchTypeEnum.yaml for formal organizational branches at auxiliary locations.
- Introduced auxiliary_places.yaml slot to link CustodianPlace to subordinate physical locations.
- Introduced auxiliary_platforms.yaml slot to link DigitalPlatform to subordinate digital properties.
- Added located_at.yaml slot to connect OrganizationalStructure to physical locations.
2025-11-25 15:06:43 +01:00

517 lines
22 KiB
YAML

# OrganizationalStructure Class
# Informal organizational units (departments, teams, groups)
# NOT formally registered, but operational/functional structure
id: https://nde.nl/ontology/hc/class/OrganizationalStructure
name: OrganizationalStructure
imports:
- linkml:types
- ./AuxiliaryPlace
- ../slots/located_at
classes:
OrganizationalStructure:
class_uri: org:OrganizationalUnit
description: >-
Informal organizational structure of a heritage custodian, representing
operational departments, teams, divisions, or groups that are NOT formally
registered as separate legal entities.
**Distinction from GovernanceStructure**:
- **GovernanceStructure**: Formal structure from legal registration
(e.g., "National Archives is agency under Ministry OCW")
- **OrganizationalStructure**: Informal/operational units
(e.g., "Digital Preservation Team", "Public Services Department")
**W3C ORG Alignment**:
Maps to `org:OrganizationalUnit` - "An Organization such as a University
Support Unit which is part of some larger FormalOrganization and only has
full recognition within the context of that FormalOrganization, it is not
a Legal Entity in its own right."
**Scope**:
- Departments (Collections, Education, Research, IT)
- Teams (Digital Preservation, Conservation, Cataloging)
- Programs (Outreach programs, fellowship programs)
- Working groups (Metadata standards group, acquisitions committee)
- Service units (Reading room, reference desk, storage facilities)
**NOT in Scope** (use GovernanceStructure instead):
- Formal sub-organizations with legal registration
- Legally recognized branches or subsidiaries
- Governance bodies from articles of incorporation
**Temporal Dynamics**:
Organizational units can be created, renamed, merged, or dissolved
independently of the custodian's legal status. Track changes with
`valid_from`/`valid_to` dates.
**Example - National Archives**:
```yaml
CustodianLegalStatus:
governance_structure: # FORMAL (from legal registration)
structure_type: "Government agency"
governance_body: "Reports to Ministry of OCW"
Custodian:
organizational_structure: # INFORMAL (operational)
- unit_name: "Digital Preservation Department"
unit_type: "department"
description: "Manages born-digital archives"
- unit_name: "Public Services Team"
unit_type: "team"
description: "Reading room, reference services"
```
slots:
- id
- unit_name
- unit_type
- parent_unit
- staff_count
- staff_members
- managed_collections
- located_at
- contact_point
- valid_from
- valid_to
- refers_to_custodian
slot_usage:
id:
identifier: true
required: true
description: "Unique identifier for this organizational unit"
examples:
- value: "https://nde.nl/ontology/hc/org-unit/na-digital-preservation"
description: "URI for National Archives Digital Preservation Dept"
unit_name:
required: true
range: string
description: >-
Name of the organizational unit (department, team, division, group).
Examples:
- "Digital Preservation Department"
- "Collections Management Team"
- "Education and Outreach Division"
- "Conservation Lab"
examples:
- value: "Digital Preservation Department"
- value: "Public Services Team"
- value: "Research and Documentation Division"
unit_type:
range: OrganizationalUnitTypeEnum
description: >-
Type of organizational unit.
Types:
- DEPARTMENT: Major organizational division (Collections, Education)
- TEAM: Smaller functional group within department
- DIVISION: Large-scale organizational segment
- GROUP: Cross-functional working group or committee
- PROGRAM: Specific programmatic unit (fellowship program, digitization project)
- SERVICE: Service-oriented unit (reading room, reference desk)
- LAB: Technical/scientific unit (conservation lab, digitization lab)
examples:
- value: "DEPARTMENT"
- value: "TEAM"
parent_unit:
range: OrganizationalStructure
description: >-
Parent unit in organizational hierarchy.
Allows nested organizational structures.
Example:
- "Conservation Team" is parent_unit of "Paper Conservation Lab"
- "Collections Division" is parent_unit of "Acquisitions Department"
examples:
- value:
unit_name: "Collections Division"
description: "Parent of Acquisitions Dept"
staff_count:
range: integer
description: >-
Number of staff (FTE) in this unit (approximate).
examples:
- value: 12
description: "12 FTE in Digital Preservation Dept"
staff_members:
slot_uri: org:hasMember
range: PersonObservation
multivalued: true
inlined_as_list: true
description: >-
Staff members (PersonObservation instances) affiliated with this organizational unit.
**W3C ORG Property**: `org:hasMember` - "Indicates a person who is a member of the subject Organization."
- Domain: org:Organization (OrganizationalStructure)
- Range: foaf:Agent (PersonObservation)
- Inverse: `org:memberOf` (PersonObservation.unit_affiliation)
**Bidirectional Relationship**:
- **Forward**: OrganizationalStructure → PersonObservation (staff_members)
- **Reverse**: PersonObservation → OrganizationalStructure (unit_affiliation)
- Enables queries from both directions:
- "Who works in this department?" (org unit → staff)
- "Which department does this person work for?" (staff → org unit)
**Temporal Consistency**:
Person's employment dates should align with organizational unit validity:
- PersonObservation.role_start_date >= OrganizationalStructure.valid_from
- PersonObservation.role_end_date <= OrganizationalStructure.valid_to (if unit dissolved)
**Use Cases**:
1. **Department staffing analysis**: "How many conservators in Conservation Division?"
2. **Expertise location**: "Which unit has manuscript conservation expertise?"
3. **Reorganization impact**: "Track staff before/after merger event"
4. **Contact directory**: "Find department head for Digital Services"
**Data Quality**:
- Complete staff rosters (all positions documented) = high-quality data
- Partial rosters (only senior staff) = acceptable for historical analysis
- Empty staff_members (no data) = indicates missing personnel records
**Example - Conservation Division**:
```yaml
OrganizationalStructure:
id: ".../org-unit/rm-conservation-division"
unit_name: "Conservation Division"
staff_count: 28 # Total FTE
staff_members:
- id: ".../person-obs/.../jane-smith/conservator-2013"
person_name: "Dr. Jane Smith"
staff_role: CONSERVATOR
role_title: "Deputy Director, Conservation Division"
- id: ".../person-obs/.../john-doe/conservator-2015"
person_name: "John Doe"
staff_role: CONSERVATOR
role_title: "Senior Objects Conservator"
```
**Example - Staff Through Organizational Change**:
```yaml
# Before merger (2013-02-28)
OrganizationalStructure:
id: ".../org-unit/rm-paintings-conservation"
unit_name: "Paintings Conservation Department"
valid_to: "2013-02-28"
staff_members:
- person_name: "Dr. Jane Smith"
role_end_date: "2013-02-28" # Ends with unit dissolution
# After merger (2013-03-01)
OrganizationalStructure:
id: ".../org-unit/rm-conservation-division"
unit_name: "Conservation Division"
valid_from: "2013-03-01"
staff_members:
- person_name: "Dr. Jane Smith"
role_start_date: "2013-03-01" # Starts with new unit
affected_by_event: ".../event/rm-conservation-merger-2013"
```
**Query Pattern (SPARQL)**:
```sparql
# Find all conservators in an institution
SELECT ?unitName ?personName ?roleTitle WHERE {
?custodian hc:organizational_structure ?unit .
?unit hc:unit_name ?unitName ;
hc:staff_members ?person .
?person hc:person_name ?personName ;
hc:staff_role "CONSERVATOR" ;
hc:role_title ?roleTitle .
}
```
examples:
- value:
- id: "https://nde.nl/ontology/hc/person-obs/nl-na/john-doe/archivist-2015"
person_name: "John Doe"
staff_role: ARCHIVIST
role_title: "Digital Preservation Manager"
description: "Staff member in Digital Preservation Department"
managed_collections:
slot_uri: org:hasUnit
range: CustodianCollection
multivalued: true
inlined_as_list: true
description: >-
Heritage collections managed by this organizational unit.
**W3C ORG Pattern Extension**:
W3C ORG's `org:hasUnit` typically models organizational hierarchy (organization → sub-unit).
We extend this conceptually to organizational unit → managed collections.
Rationale: Collections are "units" in the sense of organizational responsibilities.
**Alternative Ontology Mappings**:
- `crm:P50i_is_current_keeper_of` (CIDOC-CRM - inverse of P50_has_current_keeper)
- `rico:isManagerOf` (RiC-O manages relationship)
- `schema:isRelatedTo` (Schema.org general relationship)
**Bidirectional Relationship**:
- **Forward**: OrganizationalStructure → CustodianCollection (managed_collections)
- **Reverse**: CustodianCollection → OrganizationalStructure (managing_unit)
- Enables queries from both directions:
- "What collections does this department manage?" (unit → collections)
- "Which department manages this collection?" (collection → unit)
**Temporal Consistency**:
Collection custody dates should align with organizational unit validity:
- CustodianCollection.valid_from >= OrganizationalStructure.valid_from
- CustodianCollection.valid_to <= OrganizationalStructure.valid_to (if unit dissolved)
**Use Cases**:
1. **Collection Management Analysis**: "What collections does Paintings Department manage?"
2. **Staffing + Collections Cross-Reference**: "Find curators AND collections in a department"
3. **Organizational Change Impact**: "Track which collections were affected by merger"
4. **Workload Analysis**: "How many collections per department?"
**Data Quality**:
- Complete collection inventory = high-quality data
- Major collections only = acceptable for institutional overview
- Empty managed_collections = unit has no collection management responsibilities
**Example - Paintings Department**:
```yaml
OrganizationalStructure:
id: ".../org-unit/rm-paintings-dept"
unit_name: "Paintings Department"
unit_type: DEPARTMENT
staff_count: 15
staff_members:
- ".../person-obs/.../curator-dutch-paintings"
- ".../person-obs/.../curator-flemish-paintings"
managed_collections:
- id: ".../collection/rm-dutch-paintings"
collection_name: "Dutch Golden Age Paintings"
extent: "1,200 objects"
- id: ".../collection/rm-flemish-paintings"
collection_name: "Flemish Baroque Paintings"
extent: "450 objects"
```
**Example - Organizational Change (Collection Custody Transfer)**:
```yaml
# Before merger (2013-02-28)
OrganizationalStructure:
id: ".../org-unit/rm-paintings-conservation"
unit_name: "Paintings Conservation Department"
valid_to: "2013-02-28"
managed_collections:
- id: ".../collection/rm-paintings-in-conservation"
collection_name: "Paintings Undergoing Conservation"
valid_to: "2013-02-28" # Custody period ends
# After merger (2013-03-01)
OrganizationalStructure:
id: ".../org-unit/rm-conservation-division"
unit_name: "Conservation Division"
valid_from: "2013-03-01"
managed_collections:
- id: ".../collection/rm-paintings-in-conservation"
collection_name: "Paintings Undergoing Conservation"
valid_from: "2013-03-01" # Custody transferred to new unit
- id: ".../collection/rm-objects-in-conservation"
collection_name: "Objects Undergoing Conservation"
valid_from: "2013-03-01"
# Collections consolidated under merged unit
```
**Query Pattern (SPARQL)**:
```sparql
# Find all collections + curators in a department
PREFIX org: <http://www.w3.org/ns/org#>
PREFIX hc: <https://nde.nl/ontology/hc/class/>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX schema: <http://schema.org/>
SELECT ?collection_name ?extent ?curator_name ?role_title
WHERE {
<.../org-unit/rm-paintings-dept>
org:hasUnit ?collection ;
org:hasMember ?curator .
?collection dcterms:title ?collection_name ;
dcterms:extent ?extent .
?curator hc:staff_role hc:CURATOR ;
schema:name ?curator_name ;
schema:jobTitle ?role_title .
FILTER NOT EXISTS { ?curator schema:endDate ?end } # Still employed
FILTER NOT EXISTS { ?collection time:hasEnd ?coll_end } # Active collection
}
```
**Integration with PersonObservation**:
Combining staff + collections enables queries like:
- "Which curator manages the Medieval Manuscripts collection?"
→ CustodianCollection.managing_unit → staff_members (role = CURATOR)
- "What collections does Dr. Smith's department manage?"
→ PersonObservation.unit_affiliation → managed_collections
**Notes**:
- Multivalued: Units typically manage multiple collections or sub-collections
- Collections may transfer between units during reorganizations
- Use temporal validity (valid_from/valid_to) to track custody history
- Collections can be hierarchical: sub-collections inherit managing_unit from parent
examples:
- value:
- id: "https://nde.nl/ontology/hc/collection/rm-dutch-paintings"
collection_name: "Dutch Golden Age Paintings"
extent: "1,200 objects"
description: "Collection managed by Paintings Department"
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."
**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.
**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
**Relationship to OrganizationBranch**:
OrganizationalStructure.located_at provides OPTIONAL location link.
OrganizationBranch.has_operational_unit provides hierarchical structure.
```
AuxiliaryPlace
└── hosts_branch → OrganizationBranch
└── has_operational_unit → OrganizationalStructure
OrganizationalStructure
└── located_at → AuxiliaryPlace (optional, direct link)
```
**Example**:
```yaml
OrganizationalStructure:
unit_name: "Conservation Division"
unit_type: DIVISION
located_at:
- place_name: "Conservation Lab - Main Building"
- place_name: "Climate-Controlled Storage - Depot"
```
examples:
- value:
- place_name: "Depot Amersfoort"
auxiliary_place_type: STORAGE_FACILITY
description: "Organizational unit located at off-site storage"
contact_point:
range: string
description: >-
Contact information for unit (email, phone, URL).
Can be structured as vCard in future versions.
examples:
- value: "digitization@nationalarchives.nl"
- value: "https://nationalarchives.nl/services/reading-room"
valid_from:
range: date
description: >-
Date this organizational unit was established.
Tracks organizational restructuring over time.
examples:
- value: "2015-01-01"
description: "Digital Preservation Dept founded 2015"
valid_to:
range: date
description: >-
Date this organizational unit was dissolved or merged.
NULL if still active.
examples:
- value: "2020-12-31"
description: "Unit dissolved in 2020 reorganization"
refers_to_custodian:
required: true
range: Custodian
slot_uri: prov:qualifiedAttribution
description: >-
Links this organizational unit back to the custodian hub entity.
Every organizational unit MUST refer to exactly one custodian.
examples:
- value:
hc_id: "https://nde.nl/ontology/hc/cust/national-archives"
description: "Unit belongs to National Archives"
comments:
- "OrganizationalStructure models INFORMAL operational units"
- "GovernanceStructure models FORMAL legal structure"
- "Both use org:OrganizationalUnit but at different levels"
- "Units can be nested via parent_unit (hierarchical structure)"
- "Temporal validity tracks organizational changes"
- "NOT for legally registered sub-organizations (use CustodianLegalStatus)"
- "NEW: located_at links organizational units to AuxiliaryPlace locations (optional)"
- "Enables tracking which departments/teams operate at which physical sites"
examples:
- value:
id: "https://nde.nl/ontology/hc/org-unit/na-digital-pres"
unit_name: "Digital Preservation Department"
unit_type: "DEPARTMENT"
staff_count: 15
contact_point: "digipres@nationalarchives.nl"
valid_from: "2010-01-01"
refers_to_custodian:
hc_id: "https://nde.nl/ontology/hc/cust/national-archives-nl"
description: "Digital preservation department example"
- value:
id: "https://nde.nl/ontology/hc/org-unit/rijks-conservation"
unit_name: "Conservation Lab"
unit_type: "LAB"
parent_unit:
unit_name: "Collections Care Division"
staff_count: 8
valid_from: "1885-07-13"
refers_to_custodian:
hc_id: "https://nde.nl/ontology/hc/cust/national-archives-nl"
description: "Digital preservation department example"
- value:
id: "https://nde.nl/ontology/hc/org-unit/rijks-conservation"
unit_name: "Conservation Lab"
unit_type: "LAB"
parent_unit:
unit_name: "Collections Care Division"
description: "Painting, paper, and textile conservation"
staff_count: 8
valid_from: "1885-07-13"
refers_to_custodian:
hc_id: "https://nde.nl/ontology/hc/cust/rijksmuseum"
description: "Museum conservation lab with parent division"