feat: Add platform_description slot for detailed auxiliary platform information

This commit is contained in:
kempersc 2025-11-26 10:18:16 +01:00
parent e2eb7aa5cf
commit e99b1e644e
6 changed files with 16347 additions and 123 deletions

View file

@ -0,0 +1,211 @@
# 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_branch` relationship
- 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
```bash
gen-json-schema schemas/20251121/linkml/01_custodian_name_modular.yaml
# Output: 6,005 lines JSON schema
```
**RDF Generation**: ✅ PASSED
```bash
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:
1. **Rijksmuseum** - Large museum with storage depot, research library, and multiple digital platforms (Rijksstudio, mobile app, API, exhibition microsites)
2. **OBA Amsterdam** - Multi-branch public library system with branch locations (some active, some historical/closed) and auxiliary digital platforms (e-books, youth portal)
3. **Noord-Hollands Archief** - Regional archive with study center, off-site depot, partner reading rooms, and multiple digital services (OAI-PMH, image viewer, legacy system)
4. **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_of` back-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_extent` for historical tracking
- Status enums track operational state (ACTIVE, CLOSED, DEPRECATED, ARCHIVED)
- AuxiliaryDigitalPlatform includes `archival_status` for 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)
1. **Validate example instances** against schema using `linkml-validate`
2. **Generate Python dataclasses** from updated schema
3. **Create SHACL shapes** for data validation
4. **Update UML/Mermaid diagrams** to show new relationships
5. **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/

View file

@ -403,7 +403,130 @@ export const UMLVisualization: React.FC<UMLVisualizationProps> = ({
link.isReversed = link.isReversed || false;
});
// Draw links
// Draw nodes FIRST (so they appear behind links/arrows in SVG z-order)
// In SVG, elements drawn later appear on top - we want arrows visible above node boxes
const nodes = g.append('g')
.attr('class', 'nodes')
.selectAll('g')
.data(diagram.nodes)
.join('g')
.attr('class', (d) => `node node-${d.type}`)
.call(d3.drag<any, any>()
.on('start', dragstarted)
.on('drag', dragged)
.on('end', dragended) as any);
// Node background
nodes.append('rect')
.attr('class', 'node-rect')
.attr('width', (d) => d.width || nodeWidth)
.attr('height', (d) => d.height || nodeHeaderHeight)
.attr('rx', 8)
.attr('fill', 'white')
.attr('stroke', (d) => d.type === 'enum' ? '#ffc107' : '#0a3dfa')
.attr('stroke-width', 2)
.on('click', (event, d) => {
event.stopPropagation();
setSelectedNode(d);
});
// Node header background
nodes.append('rect')
.attr('class', 'node-header')
.attr('width', (d) => d.width || nodeWidth)
.attr('height', nodeHeaderHeight)
.attr('rx', 8)
.attr('fill', (d) => d.type === 'enum' ? '#ffc107' : '#0a3dfa')
.attr('opacity', 0.1);
// Node name
nodes.append('text')
.attr('class', 'node-name')
.attr('x', (d) => (d.width || nodeWidth) / 2)
.attr('y', nodeHeaderHeight / 2)
.attr('text-anchor', 'middle')
.attr('dominant-baseline', 'middle')
.attr('fill', '#172a59')
.attr('font-weight', 'bold')
.attr('font-size', '14px')
.text((d) => d.name);
// Node type badge
nodes.append('text')
.attr('class', 'node-type')
.attr('x', 8)
.attr('y', 12)
.attr('fill', '#666')
.attr('font-size', '10px')
.attr('font-style', 'italic')
.text((d) => `«${d.type}»`);
// Draw attributes section
nodes.each(function(d) {
if (!d.attributes || d.attributes.length === 0) return;
const nodeGroup = d3.select(this);
let yOffset = nodeHeaderHeight + nodePadding;
// Attributes divider
nodeGroup.append('line')
.attr('x1', 0)
.attr('y1', nodeHeaderHeight)
.attr('x2', d.width || nodeWidth)
.attr('y2', nodeHeaderHeight)
.attr('stroke', '#0a3dfa')
.attr('stroke-width', 1);
// Attribute entries
d.attributes.forEach((attr, i) => {
nodeGroup.append('text')
.attr('class', 'node-attribute')
.attr('x', 10)
.attr('y', yOffset + i * attributeHeight)
.attr('fill', '#172a59')
.attr('font-size', '12px')
.text(`${attr.name}: ${attr.type}`);
});
yOffset += d.attributes.length * attributeHeight;
});
// Draw methods section
nodes.each(function(d) {
if (!d.methods || d.methods.length === 0) return;
const nodeGroup = d3.select(this);
const attributeCount = d.attributes?.length || 0;
let yOffset = nodeHeaderHeight + nodePadding +
(attributeCount > 0 ? attributeCount * attributeHeight + nodePadding : 0);
// Methods divider
nodeGroup.append('line')
.attr('x1', 0)
.attr('y1', yOffset - nodePadding)
.attr('x2', d.width || nodeWidth)
.attr('y2', yOffset - nodePadding)
.attr('stroke', '#0a3dfa')
.attr('stroke-width', 1);
// Method entries
d.methods.forEach((method, i) => {
const methodText = method.returnType
? `${method.name}(): ${method.returnType}`
: `${method.name}()`;
nodeGroup.append('text')
.attr('class', 'node-method')
.attr('x', 10)
.attr('y', yOffset + i * methodHeight)
.attr('fill', '#172a59')
.attr('font-size', '12px')
.text(methodText);
});
});
// Draw links AFTER nodes (so they appear on top in SVG z-order)
// This ensures arrows are visible above node boxes
const links = g.append('g')
.attr('class', 'links')
.selectAll('g')
@ -411,7 +534,7 @@ export const UMLVisualization: React.FC<UMLVisualizationProps> = ({
.join('g')
.attr('class', 'link-group');
links.append('line') // Remove unused variable, use links.select('line') later
links.append('line')
.attr('class', (d) => `link link-${d.type}`)
.attr('stroke', '#0a3dfa')
.attr('stroke-width', 2)
@ -542,127 +665,6 @@ export const UMLVisualization: React.FC<UMLVisualizationProps> = ({
return label;
});
// Draw nodes
const nodes = g.append('g')
.attr('class', 'nodes')
.selectAll('g')
.data(diagram.nodes)
.join('g')
.attr('class', (d) => `node node-${d.type}`)
.call(d3.drag<any, any>()
.on('start', dragstarted)
.on('drag', dragged)
.on('end', dragended) as any);
// Node background
nodes.append('rect')
.attr('class', 'node-rect')
.attr('width', (d) => d.width || nodeWidth)
.attr('height', (d) => d.height || nodeHeaderHeight)
.attr('rx', 8)
.attr('fill', 'white')
.attr('stroke', (d) => d.type === 'enum' ? '#ffc107' : '#0a3dfa')
.attr('stroke-width', 2)
.on('click', (event, d) => {
event.stopPropagation();
setSelectedNode(d);
});
// Node header background
nodes.append('rect')
.attr('class', 'node-header')
.attr('width', (d) => d.width || nodeWidth)
.attr('height', nodeHeaderHeight)
.attr('rx', 8)
.attr('fill', (d) => d.type === 'enum' ? '#ffc107' : '#0a3dfa')
.attr('opacity', 0.1);
// Node name
nodes.append('text')
.attr('class', 'node-name')
.attr('x', (d) => (d.width || nodeWidth) / 2)
.attr('y', nodeHeaderHeight / 2)
.attr('text-anchor', 'middle')
.attr('dominant-baseline', 'middle')
.attr('fill', '#172a59')
.attr('font-weight', 'bold')
.attr('font-size', '14px')
.text((d) => d.name);
// Node type badge
nodes.append('text')
.attr('class', 'node-type')
.attr('x', 8)
.attr('y', 12)
.attr('fill', '#666')
.attr('font-size', '10px')
.attr('font-style', 'italic')
.text((d) => `«${d.type}»`);
// Draw attributes section
nodes.each(function(d) {
if (!d.attributes || d.attributes.length === 0) return;
const nodeGroup = d3.select(this);
let yOffset = nodeHeaderHeight + nodePadding;
// Attributes divider
nodeGroup.append('line')
.attr('x1', 0)
.attr('y1', nodeHeaderHeight)
.attr('x2', d.width || nodeWidth)
.attr('y2', nodeHeaderHeight)
.attr('stroke', '#0a3dfa')
.attr('stroke-width', 1);
// Attribute entries
d.attributes.forEach((attr, i) => {
nodeGroup.append('text')
.attr('class', 'node-attribute')
.attr('x', 10)
.attr('y', yOffset + i * attributeHeight)
.attr('fill', '#172a59')
.attr('font-size', '12px')
.text(`${attr.name}: ${attr.type}`);
});
yOffset += d.attributes.length * attributeHeight;
});
// Draw methods section
nodes.each(function(d) {
if (!d.methods || d.methods.length === 0) return;
const nodeGroup = d3.select(this);
const attributeCount = d.attributes?.length || 0;
let yOffset = nodeHeaderHeight + nodePadding +
(attributeCount > 0 ? attributeCount * attributeHeight + nodePadding : 0);
// Methods divider
nodeGroup.append('line')
.attr('x1', 0)
.attr('y1', yOffset - nodePadding)
.attr('x2', d.width || nodeWidth)
.attr('y2', yOffset - nodePadding)
.attr('stroke', '#0a3dfa')
.attr('stroke-width', 1);
// Method entries
d.methods.forEach((method, i) => {
const methodText = method.returnType
? `${method.name}(): ${method.returnType}`
: `${method.name}()`;
nodeGroup.append('text')
.attr('class', 'node-method')
.attr('x', 10)
.attr('y', yOffset + i * methodHeight)
.attr('fill', '#172a59')
.attr('font-size', '12px')
.text(methodText);
});
});
// Update positions on tick (force simulation) or immediately (dagre)
if (simulation) {
simulation.on('tick', () => {

View file

@ -0,0 +1,596 @@
# Example Instances: Auxiliary Classes Integration
# Demonstrates AuxiliaryPlace, OrganizationBranch, and AuxiliaryDigitalPlatform patterns
# Version: 2025-11-26
#
# These examples show how heritage custodians with complex organizational structures
# can be modeled using auxiliary classes for secondary locations and digital platforms.
---
# USE CASE 1: Large Museum with Branch Locations and Multiple Digital Platforms
# Rijksmuseum with storage depot, research center, and project-specific platforms
- hc_id: https://nde.nl/ontology/hc/rijksmuseum-amsterdam
preferred_label:
- appellation_value: Rijksmuseum
appellation_language: nl
appellation_type: PREFERRED_NAME
- appellation_value: National Museum of the Netherlands
appellation_language: en
appellation_type: TRANSLATED_NAME
custodian_type: MUSEUM
# Main physical place
place_designation:
- place_id: https://nde.nl/ontology/place/rijksmuseum-main
settlement: Amsterdam
street_address: Museumstraat 1
postal_code: "1071 XX"
country_code: NL
place_specificity: PRECISE
latitude: 52.3600
longitude: 4.8852
# AUXILIARY PLACES - secondary physical locations
auxiliary_places:
# Storage facility
- auxiliary_place_id: https://nde.nl/ontology/place/rijksmuseum-depot-amstelveen
auxiliary_place_type: STORAGE_FACILITY
auxiliary_place_name: Rijksmuseum Collection Depot
settlement: Amstelveen
street_address: Burgemeester Rijnderslaan 60
postal_code: "1185 MC"
country_code: NL
latitude: 52.3064
longitude: 4.8522
is_auxiliary_of: https://nde.nl/ontology/place/rijksmuseum-main
auxiliary_place_status: ACTIVE
auxiliary_place_description: >
Climate-controlled storage facility housing approximately 1 million
objects not currently on display at the main museum building.
temporal_extent:
begin_of_the_begin: "1999-01-01"
end_of_the_end: null
# Branch organization at this location
hosts_branch:
branch_id: https://nde.nl/ontology/branch/rijksmuseum-conservation-dept
branch_type: CONSERVATION_LAB
branch_name: Rijksmuseum Conservation and Restoration Department
branch_description: >
Department responsible for conservation, restoration, and
scientific analysis of museum objects. Located at the Amstelveen depot.
reports_to: https://nde.nl/ontology/hc/rijksmuseum-amsterdam
branch_status: ACTIVE
temporal_extent:
begin_of_the_begin: "1999-01-01"
end_of_the_end: null
# Research center
- auxiliary_place_id: https://nde.nl/ontology/place/rijksmuseum-research-library
auxiliary_place_type: RESEARCH_CENTER
auxiliary_place_name: Rijksmuseum Research Library
settlement: Amsterdam
street_address: Museumstraat 1
postal_code: "1071 XX"
country_code: NL
is_auxiliary_of: https://nde.nl/ontology/place/rijksmuseum-main
auxiliary_place_status: ACTIVE
auxiliary_place_description: >
Art history research library with over 450,000 volumes, located
within the main Rijksmuseum building but operating as distinct unit.
temporal_extent:
begin_of_the_begin: "1885-01-01"
end_of_the_end: null
hosts_branch:
branch_id: https://nde.nl/ontology/branch/rijksmuseum-library
branch_type: RESEARCH_UNIT
branch_name: Rijksmuseum Research Library
branch_description: >
Specialized art history library supporting museum research
and external scholars.
reports_to: https://nde.nl/ontology/hc/rijksmuseum-amsterdam
branch_status: ACTIVE
# Main digital platform
digital_platform:
- platform_id: https://nde.nl/ontology/platform/rijksstudio
platform_name: Rijksstudio
homepage_web_address: https://www.rijksmuseum.nl
collection_web_addresses:
- https://www.rijksmuseum.nl/nl/rijksstudio
api_endpoint: https://www.rijksmuseum.nl/api
iiif_support: true
linked_data: true
metadata_standards:
- Dublin Core
- EDM
- IIIF
refers_to_custodian: https://nde.nl/ontology/hc/rijksmuseum-amsterdam
temporal_extent:
begin_of_the_begin: "2012-01-01"
end_of_the_end: null
# AUXILIARY DIGITAL PLATFORMS - project-specific and secondary platforms
auxiliary_platforms:
# Exhibition microsite
- auxiliary_platform_id: https://nde.nl/ontology/platform/rijksmuseum-vermeer-2023
auxiliary_platform_type: EXHIBITION_MICROSITE
auxiliary_platform_name: Vermeer 2023 Exhibition Website
platform_description: >
Dedicated microsite for the landmark 2023 Vermeer exhibition,
featuring virtual tours, scholarly essays, and high-resolution images.
homepage_url: https://www.rijksmuseum.nl/vermeer
is_auxiliary_of: https://nde.nl/ontology/platform/rijksstudio
auxiliary_platform_status: ARCHIVED
archival_status: PRESERVED
archived_at: https://web.archive.org/web/2023/https://www.rijksmuseum.nl/vermeer
temporal_extent:
begin_of_the_begin: "2023-02-10"
end_of_the_end: "2023-07-01"
# Mobile app
- auxiliary_platform_id: https://nde.nl/ontology/platform/rijksmuseum-app
auxiliary_platform_type: MOBILE_APP
auxiliary_platform_name: Rijksmuseum App
platform_description: >
Official mobile application providing audio tours, collection
exploration, and visitor information. Available for iOS and Android.
is_auxiliary_of: https://nde.nl/ontology/platform/rijksstudio
auxiliary_platform_status: ACTIVE
temporal_extent:
begin_of_the_begin: "2018-01-01"
end_of_the_end: null
# API endpoint as separate auxiliary platform
- auxiliary_platform_id: https://nde.nl/ontology/platform/rijksmuseum-api
auxiliary_platform_type: API_ENDPOINT
auxiliary_platform_name: Rijksmuseum Data API
platform_description: >
RESTful API providing programmatic access to collection metadata,
images, and research data. Requires API key registration.
api_url: https://data.rijksmuseum.nl/object-metadata/api/
is_auxiliary_of: https://nde.nl/ontology/platform/rijksstudio
auxiliary_platform_status: ACTIVE
temporal_extent:
begin_of_the_begin: "2012-01-01"
end_of_the_end: null
---
# USE CASE 2: Multi-Branch Public Library System
# Openbare Bibliotheek Amsterdam (OBA) with multiple branch locations
- hc_id: https://nde.nl/ontology/hc/oba-amsterdam
preferred_label:
- appellation_value: Openbare Bibliotheek Amsterdam
appellation_language: nl
appellation_type: PREFERRED_NAME
- appellation_value: OBA
appellation_language: nl
appellation_type: ABBREVIATION
- appellation_value: Amsterdam Public Library
appellation_language: en
appellation_type: TRANSLATED_NAME
custodian_type: LIBRARY
# Main library (Centrale OBA)
place_designation:
- place_id: https://nde.nl/ontology/place/oba-central
settlement: Amsterdam
street_address: Oosterdokskade 143
postal_code: "1011 DL"
country_code: NL
place_specificity: PRECISE
latitude: 52.3763
longitude: 4.9068
# Branch libraries as auxiliary places
auxiliary_places:
# Branch: OBA Javaplein
- auxiliary_place_id: https://nde.nl/ontology/place/oba-javaplein
auxiliary_place_type: BRANCH_OFFICE
auxiliary_place_name: OBA Javaplein
settlement: Amsterdam
street_address: Javaplein 2
postal_code: "1095 CJ"
country_code: NL
latitude: 52.3615
longitude: 4.9420
is_auxiliary_of: https://nde.nl/ontology/place/oba-central
auxiliary_place_status: ACTIVE
auxiliary_place_description: >
Neighborhood branch library in Amsterdam-Oost serving the
Indische Buurt community.
temporal_extent:
begin_of_the_begin: "2005-01-01"
end_of_the_end: null
hosts_branch:
branch_id: https://nde.nl/ontology/branch/oba-javaplein-branch
branch_type: BRANCH_LIBRARY
branch_name: OBA Javaplein Branch Library
reports_to: https://nde.nl/ontology/hc/oba-amsterdam
branch_status: ACTIVE
# Branch: OBA Banne
- auxiliary_place_id: https://nde.nl/ontology/place/oba-banne
auxiliary_place_type: BRANCH_OFFICE
auxiliary_place_name: OBA Banne
settlement: Amsterdam
street_address: Banne Centrum 50
postal_code: "1034 KH"
country_code: NL
is_auxiliary_of: https://nde.nl/ontology/place/oba-central
auxiliary_place_status: ACTIVE
auxiliary_place_description: >
Branch library in Amsterdam-Noord integrated with community center.
temporal_extent:
begin_of_the_begin: "1998-01-01"
end_of_the_end: null
hosts_branch:
branch_id: https://nde.nl/ontology/branch/oba-banne-branch
branch_type: BRANCH_LIBRARY
branch_name: OBA Banne Branch Library
reports_to: https://nde.nl/ontology/hc/oba-amsterdam
branch_status: ACTIVE
# Closed branch (historical)
- auxiliary_place_id: https://nde.nl/ontology/place/oba-linnaeus
auxiliary_place_type: BRANCH_OFFICE
auxiliary_place_name: OBA Linnaeusstraat (Closed)
settlement: Amsterdam
street_address: Linnaeusstraat 89
postal_code: "1093 EK"
country_code: NL
is_auxiliary_of: https://nde.nl/ontology/place/oba-central
auxiliary_place_status: HISTORICAL
auxiliary_place_description: >
Former branch library closed in 2015 due to budget cuts.
Services transferred to OBA Javaplein.
temporal_extent:
begin_of_the_begin: "1978-01-01"
end_of_the_end: "2015-06-30"
hosts_branch:
branch_id: https://nde.nl/ontology/branch/oba-linnaeus-branch
branch_type: BRANCH_LIBRARY
branch_name: OBA Linnaeusstraat Branch Library
reports_to: https://nde.nl/ontology/hc/oba-amsterdam
branch_status: CLOSED
temporal_extent:
begin_of_the_begin: "1978-01-01"
end_of_the_end: "2015-06-30"
# Main digital platform
digital_platform:
- platform_id: https://nde.nl/ontology/platform/oba-online
platform_name: OBA Online Catalog
homepage_web_address: https://www.oba.nl
collection_web_addresses:
- https://www.oba.nl/catalogus.html
refers_to_custodian: https://nde.nl/ontology/hc/oba-amsterdam
temporal_extent:
begin_of_the_begin: "2000-01-01"
end_of_the_end: null
auxiliary_platforms:
# E-book platform
- auxiliary_platform_id: https://nde.nl/ontology/platform/oba-ebooks
auxiliary_platform_type: SPECIALIZED_COLLECTION_PORTAL
auxiliary_platform_name: OBA E-books & E-audiobooks
platform_description: >
Digital lending platform for e-books and e-audiobooks available
to OBA members via the Online Bibliotheek service.
homepage_url: https://www.onlinebibliotheek.nl
is_auxiliary_of: https://nde.nl/ontology/platform/oba-online
auxiliary_platform_status: ACTIVE
temporal_extent:
begin_of_the_begin: "2014-01-01"
end_of_the_end: null
# Youth portal
- auxiliary_platform_id: https://nde.nl/ontology/platform/oba-youth
auxiliary_platform_type: SPECIALIZED_COLLECTION_PORTAL
auxiliary_platform_name: OBA Jeugd (Youth Portal)
platform_description: >
Dedicated portal for children and young adults with age-appropriate
content, reading lists, and educational resources.
homepage_url: https://www.oba.nl/jeugd
is_auxiliary_of: https://nde.nl/ontology/platform/oba-online
auxiliary_platform_status: ACTIVE
temporal_extent:
begin_of_the_begin: "2010-01-01"
end_of_the_end: null
---
# USE CASE 3: Regional Archive with Reading Rooms and Digitization Partnerships
# Noord-Hollands Archief with study center and partner reading rooms
- hc_id: https://nde.nl/ontology/hc/noord-hollands-archief
preferred_label:
- appellation_value: Noord-Hollands Archief
appellation_language: nl
appellation_type: PREFERRED_NAME
- appellation_value: NHA
appellation_language: nl
appellation_type: ABBREVIATION
- appellation_value: North Holland Archives
appellation_language: en
appellation_type: TRANSLATED_NAME
custodian_type: ARCHIVE
# Main archive building
place_designation:
- place_id: https://nde.nl/ontology/place/nha-haarlem
settlement: Haarlem
street_address: Jansstraat 40
postal_code: "2011 RX"
country_code: NL
place_specificity: PRECISE
latitude: 52.3827
longitude: 4.6332
auxiliary_places:
# Study center
- auxiliary_place_id: https://nde.nl/ontology/place/nha-study-center
auxiliary_place_type: RESEARCH_CENTER
auxiliary_place_name: NHA Studiezaal
settlement: Haarlem
street_address: Jansstraat 40
postal_code: "2011 RX"
country_code: NL
is_auxiliary_of: https://nde.nl/ontology/place/nha-haarlem
auxiliary_place_status: ACTIVE
auxiliary_place_description: >
Public reading room for researchers accessing archival materials.
Separate entrance and registration required.
temporal_extent:
begin_of_the_begin: "2001-01-01"
end_of_the_end: null
hosts_branch:
branch_id: https://nde.nl/ontology/branch/nha-public-services
branch_type: PUBLIC_ACCESS_POINT
branch_name: NHA Public Services Unit
branch_description: >
Department handling public access, reproductions, and
reference services for archive users.
reports_to: https://nde.nl/ontology/hc/noord-hollands-archief
branch_status: ACTIVE
# Off-site storage
- auxiliary_place_id: https://nde.nl/ontology/place/nha-depot
auxiliary_place_type: STORAGE_FACILITY
auxiliary_place_name: NHA Depot Santpoort
settlement: Santpoort-Noord
country_code: NL
is_auxiliary_of: https://nde.nl/ontology/place/nha-haarlem
auxiliary_place_status: ACTIVE
auxiliary_place_description: >
Climate-controlled depot for archival materials not frequently accessed.
Materials can be requested for delivery to main reading room.
temporal_extent:
begin_of_the_begin: "2010-01-01"
end_of_the_end: null
# Partner reading room (at another institution)
- auxiliary_place_id: https://nde.nl/ontology/place/nha-alkmaar-partner
auxiliary_place_type: PARTNER_LOCATION
auxiliary_place_name: NHA Partner Reading Room Alkmaar
settlement: Alkmaar
street_address: Regionaal Archief Alkmaar, Bergerweg 1
postal_code: "1815 AC"
country_code: NL
is_auxiliary_of: https://nde.nl/ontology/place/nha-haarlem
auxiliary_place_status: ACTIVE
auxiliary_place_description: >
Shared reading room at Regionaal Archief Alkmaar where NHA
digitized materials can be accessed. Part of provincial
archive collaboration agreement.
temporal_extent:
begin_of_the_begin: "2015-01-01"
end_of_the_end: null
# Main digital platform
digital_platform:
- platform_id: https://nde.nl/ontology/platform/nha-website
platform_name: Noord-Hollands Archief Website
homepage_web_address: https://www.noord-hollandsarchief.nl
inventory_web_addresses:
- https://www.noord-hollandsarchief.nl/onderzoek
metadata_standards:
- EAD
- Dublin Core
refers_to_custodian: https://nde.nl/ontology/hc/noord-hollands-archief
temporal_extent:
begin_of_the_begin: "2001-01-01"
end_of_the_end: null
auxiliary_platforms:
# OAI-PMH service
- auxiliary_platform_id: https://nde.nl/ontology/platform/nha-oai
auxiliary_platform_type: API_ENDPOINT
auxiliary_platform_name: NHA OAI-PMH Harvest Service
platform_description: >
OAI-PMH endpoint for metadata harvesting by aggregators
like Archieven.nl and the Dutch Digital Heritage Network.
api_url: https://www.noord-hollandsarchief.nl/oai
is_auxiliary_of: https://nde.nl/ontology/platform/nha-website
auxiliary_platform_status: ACTIVE
temporal_extent:
begin_of_the_begin: "2010-01-01"
end_of_the_end: null
# Image viewer for digitized materials
- auxiliary_platform_id: https://nde.nl/ontology/platform/nha-viewer
auxiliary_platform_type: DIGITAL_ASSET_MANAGEMENT
auxiliary_platform_name: NHA Digital Image Viewer
platform_description: >
High-resolution image viewer for digitized archival documents,
photographs, and maps. Supports zoom, rotation, and download.
is_auxiliary_of: https://nde.nl/ontology/platform/nha-website
auxiliary_platform_status: ACTIVE
temporal_extent:
begin_of_the_begin: "2012-01-01"
end_of_the_end: null
# Legacy system (deprecated)
- auxiliary_platform_id: https://nde.nl/ontology/platform/nha-legacy-catalog
auxiliary_platform_type: LEGACY_SYSTEM
auxiliary_platform_name: NHA Legacy Catalog System
platform_description: >
Former inventory system based on DOS application.
Data migrated to current web system in 2010.
Archived for historical reference.
is_auxiliary_of: https://nde.nl/ontology/platform/nha-website
auxiliary_platform_status: DEPRECATED
archival_status: MIGRATED
temporal_extent:
begin_of_the_begin: "1995-01-01"
end_of_the_end: "2010-12-31"
---
# USE CASE 4: University with Embedded Special Collections
# University of Amsterdam with separate library and special collections units
- hc_id: https://nde.nl/ontology/hc/uva-library
preferred_label:
- appellation_value: Universiteitsbibliotheek Amsterdam
appellation_language: nl
appellation_type: PREFERRED_NAME
- appellation_value: UBA
appellation_language: nl
appellation_type: ABBREVIATION
- appellation_value: University of Amsterdam Library
appellation_language: en
appellation_type: TRANSLATED_NAME
custodian_type: LIBRARY
# Main library (University Library)
place_designation:
- place_id: https://nde.nl/ontology/place/uba-singel
settlement: Amsterdam
street_address: Singel 425
postal_code: "1012 WP"
country_code: NL
place_specificity: PRECISE
latitude: 52.3682
longitude: 4.8892
auxiliary_places:
# Special Collections reading room
- auxiliary_place_id: https://nde.nl/ontology/place/uba-special-collections
auxiliary_place_type: RESEARCH_CENTER
auxiliary_place_name: Bijzondere Collecties (Special Collections)
settlement: Amsterdam
street_address: Oude Turfmarkt 129
postal_code: "1012 GC"
country_code: NL
latitude: 52.3685
longitude: 4.8930
is_auxiliary_of: https://nde.nl/ontology/place/uba-singel
auxiliary_place_status: ACTIVE
auxiliary_place_description: >
Special Collections department housing rare books, manuscripts,
maps, and prints. Separate reading room with supervised access.
temporal_extent:
begin_of_the_begin: "1999-01-01"
end_of_the_end: null
hosts_branch:
branch_id: https://nde.nl/ontology/branch/uba-special-collections
branch_type: SPECIAL_COLLECTIONS_UNIT
branch_name: UBA Special Collections Department
branch_description: >
Curates and provides access to rare and unique materials including
the Rosenthaliana (Jewish studies), Artis Library (natural history),
and map collections.
reports_to: https://nde.nl/ontology/hc/uva-library
branch_status: ACTIVE
# Science Park library
- auxiliary_place_id: https://nde.nl/ontology/place/uba-science-park
auxiliary_place_type: BRANCH_OFFICE
auxiliary_place_name: UBA Science Park
settlement: Amsterdam
street_address: Science Park 904
postal_code: "1098 XH"
country_code: NL
is_auxiliary_of: https://nde.nl/ontology/place/uba-singel
auxiliary_place_status: ACTIVE
auxiliary_place_description: >
Branch library serving the Faculty of Science at Science Park campus.
temporal_extent:
begin_of_the_begin: "2010-01-01"
end_of_the_end: null
hosts_branch:
branch_id: https://nde.nl/ontology/branch/uba-science-park
branch_type: BRANCH_LIBRARY
branch_name: UBA Science Park Branch
reports_to: https://nde.nl/ontology/hc/uva-library
branch_status: ACTIVE
# Main digital platform
digital_platform:
- platform_id: https://nde.nl/ontology/platform/uba-catalog
platform_name: UBA Library Catalog
homepage_web_address: https://lib.uva.nl
collection_web_addresses:
- https://lib.uva.nl/primo-explore/search
metadata_standards:
- MARC21
- Dublin Core
repository_software: Alma/Primo
refers_to_custodian: https://nde.nl/ontology/hc/uva-library
temporal_extent:
begin_of_the_begin: "2000-01-01"
end_of_the_end: null
auxiliary_platforms:
# Digital Special Collections
- auxiliary_platform_id: https://nde.nl/ontology/platform/uba-digital-collections
auxiliary_platform_type: SPECIALIZED_COLLECTION_PORTAL
auxiliary_platform_name: UBA Digital Special Collections
platform_description: >
Online access to digitized rare books, manuscripts, maps,
and photographs from the Special Collections department.
homepage_url: https://bc.uva.nl
is_auxiliary_of: https://nde.nl/ontology/platform/uba-catalog
auxiliary_platform_status: ACTIVE
temporal_extent:
begin_of_the_begin: "2008-01-01"
end_of_the_end: null
# Research data repository
- auxiliary_platform_id: https://nde.nl/ontology/platform/uva-dare
auxiliary_platform_type: DATA_REPOSITORY
auxiliary_platform_name: UvA-DARE (Digital Academic Repository)
platform_description: >
Institutional repository for academic publications, theses,
and research data from the University of Amsterdam.
homepage_url: https://dare.uva.nl
is_auxiliary_of: https://nde.nl/ontology/platform/uba-catalog
auxiliary_platform_status: ACTIVE
temporal_extent:
begin_of_the_begin: "2003-01-01"
end_of_the_end: null
# IIIF image service
- auxiliary_platform_id: https://nde.nl/ontology/platform/uba-iiif
auxiliary_platform_type: IIIF_SERVICE
auxiliary_platform_name: UBA IIIF Image Service
platform_description: >
IIIF-compliant image server providing interoperable access
to high-resolution digitized materials from Special Collections.
api_url: https://iiif.uva.nl
is_auxiliary_of: https://nde.nl/ontology/platform/uba-catalog
auxiliary_platform_status: ACTIVE
temporal_extent:
begin_of_the_begin: "2018-01-01"
end_of_the_end: null

View file

@ -577,6 +577,10 @@ slots:
description: Brief purpose statement
range: string
platform_description:
description: Detailed description of auxiliary platform
range: string
api_documentation:
description: URL to API documentation
range: uri

View file

@ -537,10 +537,22 @@ slots:
description: Description of auxiliary place
range: string
street_address:
description: Street address
range: string
postal_code:
description: Postal/ZIP code
range: string
city:
description: City name
range: string
has_feature_type:
description: Physical feature type classification
range: FeaturePlace
latitude:
description: Geographic latitude
range: float

File diff suppressed because one or more lines are too long