Refactor schema slots and classes for improved organization and clarity

- Removed deprecated slots: appraisal_notes, branch_id, is_or_was_real.
- Introduced new slots: has_or_had_notes, has_or_had_provenance.
- Created Notes class to encapsulate note-related metadata.
- Archived removed slots and classes in accordance with the new archive folder convention.
- Updated slot_fixes.yaml to reflect migration status and details.
- Enhanced documentation for new slots and classes, ensuring compliance with ontology alignment.
- Added new slots for note content, date, and type to support the Notes class.
This commit is contained in:
kempersc 2026-01-14 12:14:07 +01:00
parent b8914761b8
commit b13674400f
112 changed files with 3043228 additions and 6716 deletions

View file

@ -0,0 +1,98 @@
# Rule: Archive Folder Convention
**Rule ID**: archive-folder-convention
**Created**: 2026-01-14
**Status**: Active
## Summary
All archived files MUST be placed in an `/archive/` subfolder within their parent directory, NOT at the same level as active files.
## Rationale
1. **Clean separation**: Active files are clearly distinguished from deprecated/archived files
2. **Discoverability**: Developers can easily find current files without wading through archived versions
3. **Git history**: Archive folder can be `.gitignore`d for lightweight clones if needed
4. **Consistent pattern**: Same structure across all schema module types (slots, classes, enums)
## Directory Structure
```
modules/
├── slots/
│ ├── archive/ # Archived slot files go HERE
│ │ ├── branch_id_archived_20260114.yaml
│ │ ├── all_data_real_archived_20260114.yaml
│ │ └── ...
│ ├── has_or_had_identifier.yaml # Active slots at this level
│ └── ...
├── classes/
│ ├── archive/ # Archived class files go HERE
│ │ └── ...
│ └── ...
└── enums/
├── archive/ # Archived enum files go HERE
│ └── ...
└── ...
```
## Naming Convention for Archived Files
```
{original_filename}_archived_{YYYYMMDD}.yaml
```
**Examples**:
- `branch_id.yaml``archive/branch_id_archived_20260114.yaml`
- `RealnessStatus.yaml``archive/RealnessStatus_archived_20260114.yaml`
## Migration Workflow
When archiving a file during slot migration:
```bash
# 1. Copy to archive folder with timestamp suffix
cp modules/slots/branch_id.yaml modules/slots/archive/branch_id_archived_20260114.yaml
# 2. Remove from active location
rm modules/slots/branch_id.yaml
# 3. Update manifest counts
# (Decrement slot count in manifest.json)
# 4. Update slot_fixes.yaml
# (Mark migration as processed: true)
```
## Anti-Patterns
**WRONG** - Archived files at same level as active:
```
modules/slots/
├── branch_id_archived_20260114.yaml # NO - clutters active directory
├── has_or_had_identifier.yaml
└── ...
```
**CORRECT** - Archived files in subdirectory:
```
modules/slots/
├── archive/
│ └── branch_id_archived_20260114.yaml # YES - clean separation
├── has_or_had_identifier.yaml
└── ...
```
## Validation
Before committing migrations, verify:
- [ ] No `*_archived_*.yaml` files at module root level
- [ ] All archived files are in `archive/` subdirectory
- [ ] Archive folder exists for each module type with archived files
- [ ] Manifest counts updated to exclude archived files
## See Also
- Rule 53: Full Slot Migration (`full-slot-migration-rule.md`)
- Rule 9: Enum-to-Class Promotion (`ENUM_TO_CLASS_PRINCIPLE.md`)
- slot_fixes.yaml for migration tracking

View file

@ -0,0 +1,292 @@
# Rule 54: RAG API Podman Containerization
🚨 **CRITICAL**: The GLAM RAG API MUST be deployed via Podman container, NOT via venv/rsync. This solves Python import consistency issues between local development and production.
---
## Why Podman (Not venv)
### The Problem
Python import behavior differs between local development and gunicorn:
| Context | Import Style | Works? |
|---------|--------------|--------|
| Local development (`uvicorn main:app`) | `from .provenance import` | ✅ |
| Production (`gunicorn main:app`) | `from .provenance import` | ❌ |
| Production (`gunicorn main:app`) | `from provenance import` | ✅ |
When syncing code via rsync to a server venv, the import style that works locally may fail in production with gunicorn.
### The Solution
Containerization with Podman ensures:
1. **Consistent import resolution** - Same Python environment locally and in production
2. **Isolation** - RAG API dependencies don't conflict with other services
3. **Reproducibility** - Dockerfile defines exact environment
4. **Rootless security** - Podman runs as non-root user inside container
---
## Deployment Architecture
```
┌─────────────────────────────────────────────────────────────┐
│ Server: 91.98.224.44 (bronhouder.nl) │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Podman Container: glam-rag-api │ │
│ │ │ │
│ │ - python:3.11-slim base │ │
│ │ - gunicorn + uvicorn workers │ │
│ │ - Port 8010 (host network mode) │ │
│ │ - Non-root user (glam:1000) │ │
│ │ │ │
│ │ Connects to (all on localhost): │ │
│ │ - Qdrant :6333 │ │
│ │ - Oxigraph SPARQL :7878 │ │
│ │ - TypeDB :1729 │ │
│ │ - PostGIS :5432 │ │
│ │ - Valkey :8090 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Caddy Reverse Proxy │ │
│ │ https://bronhouder.nl/api/rag/* → :8010 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
```
---
## Key Files
| File | Purpose |
|------|---------|
| `backend/rag/Dockerfile` | Container image definition |
| `backend/rag/requirements.txt` | Python dependencies (includes gunicorn) |
| `backend/rag/main.py` | FastAPI application |
| `infrastructure/deploy.sh` | Deployment script (`--rag` flag) |
---
## Deployment Commands
### Deploy RAG API
```bash
# From project root - deploys via Podman
./infrastructure/deploy.sh --rag
```
This will:
1. Sync `backend/rag/` to `/opt/glam-backend/rag/` on server
2. Build Podman image `glam-rag-api:latest`
3. Create/update systemd service `glam-rag-api.service`
4. Start the container
### Manual Operations (on server)
```bash
# Check service status
systemctl status glam-rag-api
# View container logs
podman logs glam-rag-api
# Restart service
systemctl restart glam-rag-api
# Rebuild image manually
cd /opt/glam-backend/rag
podman build -t glam-rag-api:latest .
# Clean up old images
podman image prune -f
```
---
## Systemd Service Configuration
The service file is created by `deploy.sh` at `/etc/systemd/system/glam-rag-api.service`:
```ini
[Unit]
Description=GLAM Heritage RAG API (Podman)
After=network.target qdrant.service
Wants=qdrant.service
[Service]
Type=simple
Restart=always
RestartSec=10
EnvironmentFile=/var/lib/glam/.env
ExecStart=/usr/bin/podman run --rm --name glam-rag-api \
--network host \
-e OPENAI_API_KEY \
-e ZAI_API_TOKEN \
-e QDRANT_HOST=localhost \
-e QDRANT_PORT=6333 \
-e QDRANT_COLLECTION=heritage_custodians_minilm \
-e EMBEDDING_MODEL=all-MiniLM-L6-v2 \
-e EMBEDDING_DIM=384 \
-e TYPEDB_HOST=localhost \
-e TYPEDB_PORT=1729 \
-e TYPEDB_DATABASE=glam \
-e SPARQL_ENDPOINT=http://localhost:7878/query \
-e VALKEY_CACHE_URL=http://localhost:8090 \
-e POSTGIS_HOST=localhost \
-e POSTGIS_PORT=5432 \
-e POSTGIS_DATABASE=glam \
-e LLM_PROVIDER=openai \
-e LLM_MODEL=gpt-4.1-mini \
-v glam-rag-optimized-models:/app/optimized_models:z \
glam-rag-api:latest
ExecStop=/usr/bin/podman stop glam-rag-api
[Install]
WantedBy=multi-user.target
```
**Key Configuration**:
- `--network host`: Container uses host networking (accesses localhost services directly)
- `EnvironmentFile`: Loads API keys from `/var/lib/glam/.env`
- `-v ...:/app/optimized_models:z`: Persistent volume for DSPy optimized models
- `Restart=always`: Auto-restart on failure
---
## Dockerfile Structure
The Dockerfile at `backend/rag/Dockerfile`:
```dockerfile
FROM python:3.11-slim
# Non-root user for security
RUN useradd -m -u 1000 -s /bin/bash glam
# Install dependencies first (layer caching)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy application code
COPY --chown=glam:glam . .
USER glam
# Gunicorn with uvicorn workers for async
CMD ["gunicorn", "main:app", \
"--bind", "0.0.0.0:8010", \
"--workers", "2", \
"--worker-class", "uvicorn.workers.UvicornWorker", \
"--timeout", "120"]
```
---
## Import Style for Container Deployment
**CRITICAL**: Use absolute imports in RAG API Python files:
```python
# CORRECT - Works in container with gunicorn
from provenance import ProvenanceTracker, format_provenance_chain
# WRONG - Fails with gunicorn
from .provenance import ProvenanceTracker, format_provenance_chain
```
This is because gunicorn doesn't recognize the directory as a package, so relative imports fail.
---
## Health Check Verification
```bash
# Local test (from server)
curl http://localhost:8010/health
# External test
curl https://bronhouder.nl/api/rag/health
```
Expected response:
```json
{
"status": "healthy",
"backends": {
"qdrant": {"status": "connected", "collections": {...}},
"sparql": {"status": "connected", "triples": 30421},
"typedb": {"status": "connected", "observations": 27741}
}
}
```
---
## Troubleshooting
### Container Won't Start
```bash
# Check systemd logs
journalctl -u glam-rag-api -n 50
# Check container logs directly
podman logs glam-rag-api
```
### Import Errors
If you see `ModuleNotFoundError` or `ImportError`:
1. Check imports use absolute style (not relative)
2. Verify all dependencies in `requirements.txt`
3. Rebuild image: `podman build -t glam-rag-api:latest .`
### Backend Connection Issues
Container uses `--network host`, so backends must be on localhost:
- Qdrant: `localhost:6333`
- TypeDB: `localhost:1729`
- Oxigraph: `localhost:7878`
Check backend services:
```bash
systemctl status qdrant typedb oxigraph
```
---
## Migration from venv (Historical)
The old venv-based deployment has been deprecated:
| Old (Deprecated) | New (Current) |
|------------------|---------------|
| `/var/lib/glam/api/backend/rag/` | `/opt/glam-backend/rag/` |
| `glam-rag-api.service` (venv) | `glam-rag-api.service` (Podman) |
| Manual pip install | Dockerfile-based |
| rsync + systemd restart | rsync + podman build + restart |
The old service and venv can be removed:
```bash
# Already done - for reference only
systemctl stop glam-rag-api-venv # if exists
systemctl disable glam-rag-api-venv
rm /etc/systemd/system/glam-rag-api-venv.service
rm -rf /var/lib/glam/api/backend/rag/venv
```
---
## See Also
- Rule 7: Deployment is LOCAL via SSH/rsync (NO CI/CD)
- `backend/rag/README.md` - RAG API documentation
- `infrastructure/deploy.sh` - Full deployment script

View file

@ -47,7 +47,7 @@ This is NOT a simple data extraction project. This is an **ontology engineering
---
This section summarizes 53 critical rules. Each rule has complete documentation in `.opencode/` files.
This section summarizes 54 critical rules. Each rule has complete documentation in `.opencode/` files.
### Rule 0: LinkML Schemas Are the Single Source of Truth
@ -1656,6 +1656,48 @@ classes:
---
### Rule 54: RAG API Podman Containerization
🚨 **CRITICAL**: The GLAM RAG API MUST be deployed via Podman container, NOT via venv/rsync. This solves Python import consistency issues between local development and production gunicorn.
**Why Podman**:
- **Import consistency**: gunicorn requires absolute imports (`from provenance import`) not relative (`from .provenance import`)
- **Isolation**: RAG API dependencies don't conflict with other server services
- **Reproducibility**: Dockerfile defines exact Python environment
- **Security**: Container runs as non-root user
**Deployment**:
```bash
# Deploy RAG API via Podman
./infrastructure/deploy.sh --rag
```
**Key Files**:
| File | Purpose |
|------|---------|
| `backend/rag/Dockerfile` | Container image definition |
| `backend/rag/requirements.txt` | Python dependencies (includes gunicorn) |
| `infrastructure/deploy.sh` | Deployment script (`--rag` flag) |
**Server Configuration**:
- Container image: `glam-rag-api:latest`
- Systemd service: `glam-rag-api.service`
- Network: Host mode (accesses localhost backends)
- Health endpoint: `https://bronhouder.nl/api/rag/health`
**Import Style** (for container deployment):
```python
# CORRECT - Works in container with gunicorn
from provenance import ProvenanceTracker
# WRONG - Fails with gunicorn
from .provenance import ProvenanceTracker
```
**See**: `.opencode/rules/podman-containerization-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:

File diff suppressed because it is too large Load diff

View file

@ -1,12 +1,12 @@
{
"generated": "2026-01-14T08:50:13.029Z",
"generated": "2026-01-14T10:31:53.486Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 2913,
"totalFiles": 2896,
"categoryCounts": {
"main": 4,
"class": 671,
"enum": 147,
"slot": 2087,
"slot": 2070,
"module": 4
},
"categories": [
@ -1945,6 +1945,11 @@
"path": "modules/classes/NotarialArchiveRecordSetTypes.yaml",
"category": "class"
},
{
"name": "Notes",
"path": "modules/classes/Notes.yaml",
"category": "class"
},
{
"name": "OAIPMHEndpoint",
"path": "modules/classes/OAIPMHEndpoint.yaml",
@ -2405,11 +2410,6 @@
"path": "modules/classes/ReadingRoomAnnex.yaml",
"category": "class"
},
{
"name": "RealnessStatus",
"path": "modules/classes/RealnessStatus.yaml",
"category": "class"
},
{
"name": "ReconstructedEntity",
"path": "modules/classes/ReconstructedEntity.yaml",
@ -4157,51 +4157,11 @@
"path": "modules/slots/accepts_or_accepted_visiting_scholar.yaml",
"category": "slot"
},
{
"name": "activities_societies",
"path": "modules/slots/activities_societies.yaml",
"category": "slot"
},
{
"name": "actual_end",
"path": "modules/slots/actual_end.yaml",
"category": "slot"
},
{
"name": "actual_start",
"path": "modules/slots/actual_start.yaml",
"category": "slot"
},
{
"name": "address_formatted",
"path": "modules/slots/address_formatted.yaml",
"category": "slot"
},
{
"name": "address_type",
"path": "modules/slots/address_type.yaml",
"category": "slot"
},
{
"name": "admin_office_id",
"path": "modules/slots/admin_office_id.yaml",
"category": "slot"
},
{
"name": "administrative_functions",
"path": "modules/slots/administrative_functions.yaml",
"category": "slot"
},
{
"name": "affects_or_affected",
"path": "modules/slots/affects_or_affected.yaml",
"category": "slot"
},
{
"name": "aggregates_from",
"path": "modules/slots/aggregates_from.yaml",
"category": "slot"
},
{
"name": "aggregates_or_aggregated_from",
"path": "modules/slots/aggregates_or_aggregated_from.yaml",
@ -4247,11 +4207,6 @@
"path": "modules/slots/appointment_required.yaml",
"category": "slot"
},
{
"name": "appraisal_notes",
"path": "modules/slots/appraisal_notes.yaml",
"category": "slot"
},
{
"name": "approved_by",
"path": "modules/slots/approved_by.yaml",
@ -4377,16 +4332,6 @@
"path": "modules/slots/binding_description.yaml",
"category": "slot"
},
{
"name": "binding_provenance",
"path": "modules/slots/binding_provenance.yaml",
"category": "slot"
},
{
"name": "binding_type",
"path": "modules/slots/binding_type.yaml",
"category": "slot"
},
{
"name": "bio_custodian_subtype",
"path": "modules/slots/bio_custodian_subtype.yaml",
@ -4452,31 +4397,6 @@
"path": "modules/slots/branch_head.yaml",
"category": "slot"
},
{
"name": "branch_id",
"path": "modules/slots/branch_id.yaml",
"category": "slot"
},
{
"name": "branch_name",
"path": "modules/slots/branch_name.yaml",
"category": "slot"
},
{
"name": "branch_office_description",
"path": "modules/slots/branch_office_description.yaml",
"category": "slot"
},
{
"name": "branch_office_id",
"path": "modules/slots/branch_office_id.yaml",
"category": "slot"
},
{
"name": "branch_office_name",
"path": "modules/slots/branch_office_name.yaml",
"category": "slot"
},
{
"name": "branch_service_area",
"path": "modules/slots/branch_service_area.yaml",
@ -4487,11 +4407,6 @@
"path": "modules/slots/branch_staff_count.yaml",
"category": "slot"
},
{
"name": "branch_type",
"path": "modules/slots/branch_type.yaml",
"category": "slot"
},
{
"name": "broader_concept",
"path": "modules/slots/broader_concept.yaml",
@ -4532,11 +4447,6 @@
"path": "modules/slots/budget_status.yaml",
"category": "slot"
},
{
"name": "budget_type",
"path": "modules/slots/budget_type.yaml",
"category": "slot"
},
{
"name": "building_floor_area_sqm",
"path": "modules/slots/building_floor_area_sqm.yaml",
@ -4557,11 +4467,6 @@
"path": "modules/slots/cached_token.yaml",
"category": "slot"
},
{
"name": "cadastral_id",
"path": "modules/slots/cadastral_id.yaml",
"category": "slot"
},
{
"name": "call_description",
"path": "modules/slots/call_description.yaml",
@ -7482,21 +7387,11 @@
"path": "modules/slots/has_activity_name.yaml",
"category": "slot"
},
{
"name": "has_actual_end_date",
"path": "modules/slots/has_actual_end_date.yaml",
"category": "slot"
},
{
"name": "has_actual_return_date",
"path": "modules/slots/has_actual_return_date.yaml",
"category": "slot"
},
{
"name": "has_actual_start_date",
"path": "modules/slots/has_actual_start_date.yaml",
"category": "slot"
},
{
"name": "has_address",
"path": "modules/slots/has_address.yaml",
@ -8682,6 +8577,11 @@
"path": "modules/slots/has_or_had_note.yaml",
"category": "slot"
},
{
"name": "has_or_had_notes",
"path": "modules/slots/has_or_had_notes.yaml",
"category": "slot"
},
{
"name": "has_or_had_open_access_endpoint",
"path": "modules/slots/has_or_had_open_access_endpoint.yaml",
@ -8767,6 +8667,11 @@
"path": "modules/slots/has_or_had_project.yaml",
"category": "slot"
},
{
"name": "has_or_had_provenance",
"path": "modules/slots/has_or_had_provenance.yaml",
"category": "slot"
},
{
"name": "has_or_had_provenance_event",
"path": "modules/slots/has_or_had_provenance_event.yaml",
@ -9712,11 +9617,6 @@
"path": "modules/slots/is_or_was_platform_of.yaml",
"category": "slot"
},
{
"name": "is_or_was_real",
"path": "modules/slots/is_or_was_real.yaml",
"category": "slot"
},
{
"name": "is_or_was_related_to",
"path": "modules/slots/is_or_was_related_to.yaml",
@ -10777,6 +10677,21 @@
"path": "modules/slots/note.yaml",
"category": "slot"
},
{
"name": "note_content",
"path": "modules/slots/note_content.yaml",
"category": "slot"
},
{
"name": "note_date",
"path": "modules/slots/note_date.yaml",
"category": "slot"
},
{
"name": "note_type",
"path": "modules/slots/note_type.yaml",
"category": "slot"
},
{
"name": "oai_pmh_endpoint",
"path": "modules/slots/oai_pmh_endpoint.yaml",

View file

@ -101,7 +101,7 @@ classes:
\n preferred_label: \"Rijksmuseum\"\n place_designation:\n place_name: \"Rijksmuseum\" # Main building on Museumplein\n\
\ auxiliary_places:\n - place_name: \"Depot Amersfoort\"\n auxiliary_place_type: STORAGE_FACILITY\n \
\ street_address: \"Euterpelaan 25, Amersfoort\"\n - place_name: \"Rijksmuseum Schiphol\"\n auxiliary_place_type:\
\ BRANCH_OFFICE\n street_address: \"Schiphol Airport, Lounge 2\"\n hosts_branch:\n branch_name:\
\ BRANCH_OFFICE\n street_address: \"Schiphol Airport, Lounge 2\"\n hosts_branch:\n has_or_had_label:\
\ \"Schiphol Exhibition Space\"\n```\n\n**TEMPORAL VALIDITY**:\n\nAuxiliary places can open/close independently:\n-\
\ Storage facility opened 1995, closed 2010 (moved to new location)\n- Branch office valid_from 2000, valid_to null\
\ (still active)\n\nTrack with valid_from/valid_to or temporal_extent (for fuzzy dates).\n"
@ -279,7 +279,7 @@ classes:
inlined_as_list: true
examples:
- value:
branch_name: Conservation Division - Amersfoort
has_or_had_label: Conservation Division - Amersfoort
branch_type: CONSERVATION_LAB
description: Conservation branch at depot site
is_auxiliary_of_place:
@ -358,7 +358,7 @@ classes:
country: https://nde.nl/ontology/hc/country/NL
valid_from: '2002-10-01'
hosts_branch:
- branch_name: Schiphol Exhibition Team
- has_or_had_label: Schiphol Exhibition Team
branch_type: EXHIBITION_SPACE
is_auxiliary_of_place: https://nde.nl/ontology/hc/place/rijksmuseum-main
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804

View file

@ -6,9 +6,9 @@ imports:
- ./ReconstructedEntity
- ./CustodianObservation
- ./ReconstructionActivity
- ../slots/branch_office_description
- ../slots/branch_office_id
- ../slots/branch_office_name
- ../slots/has_or_had_description
- ../slots/has_or_had_identifier
- ../slots/has_or_had_label
- ../slots/branch_service_area
- ../slots/branch_staff_count
- ../slots/has_local_collection
@ -50,8 +50,8 @@ classes:
\ Zaanstreek-Waterland branch\n - Serves researchers in Zaandam area\n - Holds local municipal records\n\n2. **Library\
\ Satellite Locations**:\n - University library branch at satellite campus\n - Public library neighborhood branches\n\
\n3. **Museum Study Centers**:\n - Off-site study/research center for scholars\n - Rijksmuseum Schiphol (airport\
\ exhibition space)\n\n**Example - Regional Archive Branch**:\n```yaml\nBranchOffice:\n branch_office_id: \"https://nde.nl/ontology/hc/aux/nha-zaanstreek-branch\"\
\n branch_office_name: \"Noord-Hollands Archief - Zaanstreek-Waterland\"\n branch_office_description: |\n Regional\
\ exhibition space)\n\n**Example - Regional Archive Branch**:\n```yaml\nBranchOffice:\n has_or_had_identifier: \"https://nde.nl/ontology/hc/aux/nha-zaanstreek-branch\"\
\n has_or_had_label: \"Noord-Hollands Archief - Zaanstreek-Waterland\"\n has_or_had_description: |\n Regional\
\ branch serving Zaanstreek-Waterland area.\n Holds municipal records from Zaandam, Wormerland, Purmerend.\n Open\
\ to researchers Tuesday-Thursday.\n branch_service_area: \"Zaanstreek-Waterland region\"\n is_public_facing: true\n\
\ services_offered:\n - \"Archival research access\"\n - \"Genealogical consultations\"\n - \"Local history\
@ -66,9 +66,9 @@ classes:
- org:OrganizationalUnit
- schema:branch
slots:
- branch_office_description
- branch_office_id
- branch_office_name
- has_or_had_description
- has_or_had_identifier
- has_or_had_label
- branch_service_area
- branch_staff_count
- has_local_collection
@ -80,16 +80,24 @@ classes:
- was_derived_from
- was_generated_by
slot_usage:
branch_office_id:
has_or_had_identifier:
range: uriorcurie
required: true
identifier: true
description: >-
Unique identifier for this branch office.
MIGRATED from branch_office_id (2026-01-14) per Rule 53.
examples:
- value: https://nde.nl/ontology/hc/aux/nha-zaanstreek-branch
description: Noord-Hollands Archief regional branch
branch_office_name:
has_or_had_label:
range: string
required: true
multivalued: false
description: >-
Name of this branch office.
MIGRATED from branch_office_name (2026-01-14) per Rule 53.
Typically includes parent organization name + branch location/function.
examples:
- value: Noord-Hollands Archief - Zaanstreek-Waterland
description: Regional archive branch
@ -97,8 +105,12 @@ classes:
description: Airport exhibition branch
- value: Universiteitsbibliotheek Science Park
description: University library satellite
branch_office_description:
has_or_had_description:
range: string
description: >-
Description of this branch office, including services offered,
target audience, and distinguishing features.
MIGRATED from branch_office_description (2026-01-15) per Rule 53.
examples:
- value: Regional branch serving Zaanstreek-Waterland area. Holds municipal records from Zaandam, Wormerland, Purmerend.
Open to researchers Tuesday-Thursday.
@ -161,9 +173,9 @@ classes:
- https://schema.org/branch
examples:
- value:
branch_office_id: https://nde.nl/ontology/hc/aux/nha-zaanstreek-branch
branch_office_name: Noord-Hollands Archief - Zaanstreek-Waterland
branch_office_description: Regional branch serving Zaanstreek-Waterland area. Holds municipal records from Zaandam,
has_or_had_identifier: https://nde.nl/ontology/hc/aux/nha-zaanstreek-branch
has_or_had_label: Noord-Hollands Archief - Zaanstreek-Waterland
has_or_had_description: Regional branch serving Zaanstreek-Waterland area. Holds municipal records from Zaandam,
Wormerland, Purmerend.
branch_service_area: Zaanstreek-Waterland region
is_public_facing: true
@ -176,9 +188,9 @@ classes:
has_local_collection: true
description: Regional archive branch
- value:
branch_office_id: https://nde.nl/ontology/hc/aux/rijksmuseum-schiphol
branch_office_name: Rijksmuseum Schiphol
branch_office_description: Exhibition space at Schiphol Airport featuring rotating highlights from the Rijksmuseum
has_or_had_identifier: https://nde.nl/ontology/hc/aux/rijksmuseum-schiphol
has_or_had_label: Rijksmuseum Schiphol
has_or_had_description: Exhibition space at Schiphol Airport featuring rotating highlights from the Rijksmuseum
collection. Free admission.
branch_service_area: Amsterdam Schiphol Airport travelers
is_public_facing: true

View file

@ -23,7 +23,8 @@ imports:
- ../slots/has_accession_date
- ../slots/has_accumulation_end_date
- ../slots/has_accumulation_start_date
- ../slots/appraisal_notes
- ../slots/has_or_had_notes
- ./Notes
- ../slots/has_archive_description
- ../slots/has_archive_name
- ../slots/arrangement_notes
@ -75,7 +76,7 @@ classes:
- has_accession_number
- has_accumulation_end_date
- has_accumulation_start_date
- appraisal_notes
- has_or_had_notes
- has_archive_description
- has_archive_name
- arrangement_notes
@ -258,12 +259,17 @@ classes:
examples:
- value: Closed - Contains personnel files with personal data
description: Privacy restriction
has_appraisal_note:
range: string
has_or_had_notes:
range: Notes
multivalued: true
inlined: true
required: false
examples:
- value: Retained all policy files; destroyed duplicate copies and routine correspondence per retention schedule RS-2020-05
description: Appraisal decisions documented
- value: |
- note_type: appraisal
note_content: "Retained all policy files; destroyed duplicate copies and routine correspondence per retention schedule RS-2020-05"
note_date: "2024-03-15"
description: Appraisal decisions documented as typed note
has_arrangement_note:
range: string
required: false
@ -344,6 +350,9 @@ classes:
estimated_extent: 85 linear meters
assigned_processor: Dr. Jan de Vries
processing_started_date: '2024-01-10'
appraisal_notes: Retained all policy files; weeded duplicate copies per retention schedule.
has_or_had_notes:
- note_type: appraisal
note_content: "Retained all policy files; weeded duplicate copies per retention schedule."
note_date: "2024-01-10"
refers_to_custodian: https://nde.nl/ontology/hc/nl-na
description: Government records in active processing (9 years after accession)

View file

@ -17,7 +17,7 @@ imports:
- ../slots/has_altitude
- ../slots/has_accuracy_in_meters
- ../slots/bounding_box
- ../slots/cadastral_id
- ../slots/has_or_had_identifier
- ../slots/coordinate_reference_system
- ../slots/feature_class
- ../slots/feature_code
@ -159,7 +159,7 @@ classes:
- has_accuracy_in_meters
- has_altitude
- bounding_box
- cadastral_id
- has_or_had_identifier
- coordinate_reference_system
- feature_class
- feature_code
@ -203,6 +203,17 @@ classes:
examples:
- value: 6930126
description: Rijksmuseum GeoNames ID
has_or_had_identifier:
description: >-
Cadastral identifiers for this geospatial place.
MIGRATION NOTE (2026-01-14): Replaces cadastral_id per slot_fixes.yaml.
Use Identifier with identifier_scheme='cadastral' for parcel IDs.
Netherlands: Kadaster perceelnummer format {gemeente}-{sectie}-{perceelnummer}
examples:
- value:
identifier_scheme: cadastral
identifier_value: ASD04-H-4567
description: Amsterdam cadastral parcel identifier
comments:
- Follows TOOI BestuurlijkeRuimte pattern using GeoSPARQL
- 'CRITICAL: NOT a nominal reference - this is measured/surveyed location data'

View file

@ -24,7 +24,7 @@ imports:
- ../slots/has_archival_reference
- ../slots/has_arrangement_level
- ../slots/binding_description
- ../slots/binding_provenance
- ../slots/has_or_had_provenance
- ../slots/has_or_had_type
- ../slots/bookplate
- ./BindingType
@ -110,7 +110,7 @@ classes:
- archival_reference
- arrangement_level
- binding_description
- binding_provenance
- has_or_had_provenance
- has_or_had_type
- bookplate
- call_number
@ -338,11 +338,18 @@ classes:
multivalued: true
examples:
- value: British Museum stamp on verso of title page
binding_provenance:
has_or_had_provenance:
required: false
range: string
description: >-
Provenance information related to the physical binding of this information carrier.
MIGRATED from binding_provenance (2026-01-15) per Rule 53.
Describes the historical ownership or commissioning context of the binding,
such as royal presentation bindings or notable previous owners' bindings.
examples:
- value: Bound for presentation to Elizabeth I, royal arms in gold
description: Royal presentation binding provenance
isbn:
required: false
range: string

View file

@ -18,8 +18,8 @@ imports:
- ./HeritageRelevance
- ./LanguageProficiency
- ../slots/has_or_had_about_text
- ../slots/is_or_was_real
- ./RealnessStatus
- ../slots/has_or_had_provenance
- ./ProvenanceBlock
- ../slots/has_assessment_date
- ../slots/connections_text
- ../slots/data_source_whatsapp
@ -332,7 +332,7 @@ classes:
'
slots:
- is_or_was_real
- has_or_had_provenance
- data_source_whatsapp
- enriched_date
- enrichment_method_whatsapp
@ -352,14 +352,16 @@ classes:
- value: public_linkedin_profile
no_fabrication:
range: boolean
is_or_was_real:
range: RealnessStatus
has_or_had_provenance:
range: ProvenanceBlock
inlined: true
description: >-
Realness status of the enrichment data.
Indicates whether the enrichment data is real production data or test/synthetic.
Provenance information for the enrichment data.
Contains data source, extraction method, confidence score, and verification status.
examples:
- value:
status: REAL
description: "Verified production data from LinkedIn profile"
description: Real production enrichment data
data_source: "public_linkedin_profile"
extraction_date: "2025-01-14T12:00:00Z"
confidence_score: 0.95
note: "Verified production data from LinkedIn profile"
description: Real production enrichment data with provenance

View file

@ -0,0 +1,122 @@
# Notes class
# Generic class for typed notes with provenance
#
# Generation date: 2026-01-14
# Rule compliance: 0 (LinkML single source of truth), 38 (slot centralization)
# Migration: Supports has_or_had_notes slot (replaces appraisal_notes)
id: https://nde.nl/ontology/hc/class/Notes
name: notes_class
title: Notes Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/note_type
- ../slots/note_content
- ../slots/note_date
- ../slots/language
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
classes:
Notes:
class_uri: skos:note
description: |
A typed note with optional provenance metadata.
**Purpose**:
Notes provides a reusable class for representing documentation notes
across the heritage custodian schema. Supports typed notes (appraisal,
arrangement, conservation, etc.) with language tagging and dates.
**Ontological Alignment**:
- **Primary**: `skos:note` - general note
- **Close**: `rdfs:comment` - comment on resource
**Use Cases**:
- Appraisal notes documenting retention decisions
- Arrangement notes documenting physical organization
- Conservation notes documenting treatments
- Processing notes documenting archival workflow
- General documentation notes
**Replaces**:
- `appraisal_notes` (string) - now typed with note_type
exact_mappings:
- skos:note
close_mappings:
- rdfs:comment
- dcterms:description
slots:
- note_type
- note_content
- note_date
- language
- specificity_annotation
- template_specificity
slot_usage:
note_type:
description: |
The type of note (appraisal, arrangement, conservation, processing, general).
range: string
required: false
examples:
- value: appraisal
description: Appraisal decision documentation
- value: arrangement
description: Physical organization notes
- value: conservation
description: Treatment documentation
note_content:
description: The textual content of the note.
range: string
required: true
note_date:
description: Date the note was created or last updated.
range: date
required: false
language:
description: |
ISO 639-1 two-letter language code for this note.
Examples: "en", "nl", "de", "fr"
range: string
required: false
pattern: "^[a-z]{2}$"
annotations:
custodian_types: '["*"]'
custodian_types_rationale: Generic notes class applicable to all types.
custodian_types_primary: null
specificity_score: 0.3
specificity_rationale: Broadly applicable generic class for documentation notes.
examples:
- value: |
note_type: appraisal
note_content: "Retained all policy files; destroyed duplicate copies and routine correspondence per retention schedule RS-2020-05"
note_date: "2024-03-15"
language: en
description: "Appraisal note documenting retention decisions"
- value: |
note_type: arrangement
note_content: "Maintained original order by correspondent. Created 5 series by function. Rehoused into acid-free folders and boxes."
note_date: "2024-06-01"
language: en
description: "Arrangement note documenting physical organization"

View file

@ -14,8 +14,8 @@ imports:
- ../slots/located_at
- ../slots/branch_description
- ../slots/branch_head
- ../slots/branch_id
- ../slots/branch_name
- ../slots/has_or_had_identifier
- ../slots/has_or_had_label
- ../slots/has_or_had_type
- ../slots/contact_point
- ../slots/has_operational_unit
@ -68,8 +68,8 @@ classes:
\ Satellite Galleries**:\n - Main museum → Contemporary Art Wing (off-site)\n - Separate building, curated exhibitions\n\
\ \n4. **Conservation/Research Centers**:\n - Main institution → Conservation Lab (different building)\n - Specialized\
\ facility with own staff\n\n**Example - National Archives Branch**:\n```yaml\nAuxiliaryPlace:\n place_name: \"Regionaal\
\ Historisch Centrum Noord-Holland\"\n auxiliary_place_type: BRANCH_OFFICE\n hosts_branch:\n - branch_id: \"https://nde.nl/ontology/hc/branch/na-rhc-noord-holland\"\
\n branch_name: \"RHC Noord-Holland\"\n branch_type: REGIONAL_OFFICE\n has_operational_unit:\n \
\ Historisch Centrum Noord-Holland\"\n auxiliary_place_type: BRANCH_OFFICE\n hosts_branch:\n - has_or_had_identifier: \"https://nde.nl/ontology/hc/branch/na-rhc-noord-holland\"\
\n has_or_had_label: \"RHC Noord-Holland\"\n branch_type: REGIONAL_OFFICE\n has_operational_unit:\n \
\ - unit_name: \"Reading Room Services\"\n - unit_name: \"Digitization Team\"\n is_branch_of: \"https://nde.nl/ontology/hc/nl-na\"\
\n```\n\n**DISTINCTION FROM schema:branchOf**:\n\nSchema.org `branchOf` links commercial branches (e.g., bank branches).\n\
`org:unitOf` is more appropriate for heritage institutions as it:\n- Models public sector organizational hierarchies\n\
@ -86,8 +86,8 @@ classes:
slots:
- branch_description
- branch_head
- branch_id
- branch_name
- has_or_had_identifier
- has_or_had_label
- has_or_had_type
- contact_point
- has_operational_unit
@ -104,16 +104,24 @@ classes:
- was_derived_from
- was_generated_by
slot_usage:
branch_id:
has_or_had_identifier:
range: uriorcurie
required: true
identifier: true
description: >-
Unique identifier for this organizational branch.
MIGRATED from branch_id (2026-01-14) per Rule 53.
examples:
- value: https://nde.nl/ontology/hc/branch/rm-schiphol-exhibition
description: Rijksmuseum Schiphol exhibition branch
branch_name:
has_or_had_label:
range: string
required: true
multivalued: false
description: >-
Official name of this organizational branch.
MIGRATED from branch_name (2026-01-15) per Rule 53.
This is the formal name of the branch as used in official documents.
examples:
- value: Rijksmuseum Schiphol
description: Airport branch name
@ -179,7 +187,7 @@ classes:
inlined_as_list: true
examples:
- value:
branch_name: Schiphol Terminal 2 Kiosk
has_or_had_label: Schiphol Terminal 2 Kiosk
description: Sub-branch of Schiphol exhibition
branch_head:
range: string
@ -241,8 +249,8 @@ classes:
- https://www.w3.org/TR/vcard-rdf/
examples:
- value:
branch_id: https://nde.nl/ontology/hc/branch/rm-schiphol
branch_name: Rijksmuseum Schiphol
has_or_had_identifier: https://nde.nl/ontology/hc/branch/rm-schiphol
has_or_had_label: Rijksmuseum Schiphol
branch_type: EXHIBITION_SPACE
branch_description: Small exhibition space at Schiphol Airport featuring rotating highlights from the collection.
located_at:
@ -258,8 +266,8 @@ classes:
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804
description: Rijksmuseum Schiphol exhibition branch
- value:
branch_id: https://nde.nl/ontology/hc/branch/rm-depot-operations
branch_name: Collection Storage Operations - Amersfoort
has_or_had_identifier: https://nde.nl/ontology/hc/branch/rm-depot-operations
has_or_had_label: Collection Storage Operations - Amersfoort
branch_type: STORAGE_MANAGEMENT
branch_description: Off-site collection storage facility managing overflow objects and art storage.
located_at:
@ -275,8 +283,8 @@ classes:
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804
description: Rijksmuseum off-site storage operations branch
- value:
branch_id: https://nde.nl/ontology/hc/branch/na-rhc-nh
branch_name: Regionaal Historisch Centrum Noord-Holland
has_or_had_identifier: https://nde.nl/ontology/hc/branch/na-rhc-nh
has_or_had_label: Regionaal Historisch Centrum Noord-Holland
branch_type: REGIONAL_OFFICE
branch_description: Regional archives center serving Noord-Holland province, providing reading room services and archival
research support.

View file

@ -0,0 +1,70 @@
# has_or_had_notes - Generic temporal notes slot
#
# Following RiC-O style naming convention (Rule 39):
# - has_or_had_* indicates temporal relationship
#
# Generation date: 2026-01-14
# Rule compliance: 38 (slot centralization), 39 (RiC-O naming), 43 (singular nouns - but spec requires plural)
# Migration: Replaces appraisal_notes (per slot_fixes.yaml)
#
# NOTE: This slot uses plural "notes" as specified in slot_fixes.yaml,
# though Rule 43 typically requires singular nouns. The spec is authoritative.
id: https://nde.nl/ontology/hc/slot/has_or_had_notes
name: has_or_had_notes_slot
title: Has Or Had Notes Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
imports:
- linkml:types
- ../classes/Notes
default_prefix: hc
slots:
has_or_had_notes:
slot_uri: skos:note
range: Notes
multivalued: true
inlined: true
inlined_as_list: true
description: |
Typed notes associated with an entity.
**Replaces**: `appraisal_notes` (string-valued)
**Purpose**:
Generic slot for attaching typed notes (appraisal, arrangement,
conservation, processing) with optional language and date metadata.
**ONTOLOGY ALIGNMENT**:
| Ontology | Property | Notes |
|----------|----------|-------|
| **SKOS** | `skos:note` | Primary - general note |
| **RDFS** | `rdfs:comment` | Related - comment |
**RiC-O Context**:
Archival notes follow RiC-O patterns for documenting processing
activities and decisions (appraisal, arrangement, description).
exact_mappings:
- skos:note
close_mappings:
- rdfs:comment
examples:
- value: |
- note_type: appraisal
note_content: "Retained all policy files; destroyed duplicate copies per retention schedule RS-2020-05"
note_date: "2024-03-15"
description: Appraisal note documenting retention decisions
- value: |
- note_type: arrangement
note_content: "Maintained original order by correspondent. Created 5 series by function."
note_date: "2024-06-01"
description: Arrangement note documenting physical organization

View file

@ -0,0 +1,86 @@
id: https://nde.nl/ontology/hc/slot/has_or_had_provenance
name: has_or_had_provenance_slot
title: Has Or Had Provenance Slot
description: >-
Generic slot for attaching provenance information to any data element.
**MIGRATION NOTE** (2026-01-14):
Created as replacement for `all_data_real`, `is_or_was_real`, and `has_all_data_real_flag` slots.
Uses `ProvenanceBlock` class for comprehensive provenance tracking including data realness,
extraction metadata, confidence scores, and verification status.
See slot_fixes.yaml for migration specification.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
prov: http://www.w3.org/ns/prov#
dct: http://purl.org/dc/terms/
imports:
- linkml:types
default_prefix: hc
slots:
has_or_had_provenance:
description: >-
Provenance information for this data element.
Links to a ProvenanceBlock that contains comprehensive provenance tracking
including data sources, extraction methods, confidence scores, timestamps,
and verification status.
**TEMPORAL SEMANTICS** (RiC-O style):
The "has_or_had" naming follows RiC-O convention indicating that provenance
associations can change over time:
- Additional provenance may be added as data is enriched
- Provenance may be updated when verification occurs
- Historical provenance preserved through versioning
**REPLACES**:
- `all_data_real` (auto-generated stub, string range)
- `is_or_was_real` (RealnessStatus typed class)
- `has_all_data_real_flag` (boolean flag, no provenance)
**EXAMPLE**:
```yaml
has_or_had_provenance:
data_source: "public_linkedin_profile"
extraction_date: "2025-01-14T12:00:00Z"
confidence_score: 0.95
note: "Verified production data"
```
range: ProvenanceBlock
slot_uri: prov:wasGeneratedBy
inlined: true
exact_mappings:
- prov:wasGeneratedBy
close_mappings:
- dct:provenance
- prov:hadPrimarySource
annotations:
custodian_types: '["*"]'
custodian_types_rationale: >-
Provenance metadata applicable to all custodian types.
custodian_types_primary: "*"
specificity_score: 0.2
specificity_rationale: >-
Very low specificity - universal metadata applicable everywhere.
template_specificity:
general_heritage: 0.2
archive_search: 0.2
museum_search: 0.2
library_search: 0.2
comments:
- Created from slot_fixes.yaml migration (2026-01-14)
- Replaces all_data_real, is_or_was_real, and has_all_data_real_flag slots
- Uses ProvenanceBlock class for comprehensive provenance tracking
see_also:
- http://www.w3.org/ns/prov#wasGeneratedBy
- https://nde.nl/ontology/hc/class/ProvenanceBlock

View file

@ -3,16 +3,9 @@
"accepts_or_accepted_external_work.yaml",
"accepts_or_accepted_payment_method.yaml",
"accepts_or_accepted_visiting_scholar.yaml",
"activities_societies.yaml",
"activity_id.yaml",
"actual_end.yaml",
"actual_start.yaml",
"address_formatted.yaml",
"address_type.yaml",
"admin_office_id.yaml",
"administrative_functions.yaml",
"affects_or_affected.yaml",
"aggregates_from.yaml",
"aggregates_or_aggregated_from.yaml",
"is_or_was_real.yaml",
"allocates_or_allocated.yaml",
@ -23,7 +16,6 @@
"applicable_countries.yaml",
"applies_to_call.yaml",
"appointment_required.yaml",
"appraisal_notes.yaml",
"approved_by.yaml",
"approximate.yaml",
"archive_branches.yaml",
@ -53,7 +45,6 @@
"binding.yaml",
"binding_description.yaml",
"binding_provenance.yaml",
"binding_type.yaml",
"bio_custodian_subtype.yaml",
"bio_type_classification.yaml",
"birth_date.yaml",
@ -74,7 +65,6 @@
"branch_office_name.yaml",
"branch_service_area.yaml",
"branch_staff_count.yaml",
"branch_type.yaml",
"broader_concept.yaml",
"broader_concept_label.yaml",
"broader_type.yaml",
@ -83,7 +73,6 @@
"budget_description.yaml",
"budget_name.yaml",
"budget_status.yaml",
"budget_type.yaml",
"building_floor_area_sqm.yaml",
"business_criticality.yaml",
"business_model.yaml",
@ -677,9 +666,7 @@
"has_activity_name.yaml",
"has_activity_timespan.yaml",
"has_activity_type.yaml",
"has_actual_end_date.yaml",
"has_actual_return_date.yaml",
"has_actual_start_date.yaml",
"has_address.yaml",
"has_admin_office_description.yaml",
"has_admin_office_identifier.yaml",
@ -911,6 +898,7 @@
"has_or_had_member.yaml",
"has_or_had_member_custodian.yaml",
"has_or_had_music_segment.yaml",
"has_or_had_notes.yaml",
"has_or_had_open_access_endpoint.yaml",
"has_or_had_operate.yaml",
"has_or_had_operates_platform_type.yaml",
@ -1324,6 +1312,9 @@
"notary_name.yaml",
"notary_office.yaml",
"note.yaml",
"note_content.yaml",
"note_date.yaml",
"note_type.yaml",
"oai_pmh_endpoint.yaml",
"object_alternate_name.yaml",
"object_bbox.yaml",

View file

@ -0,0 +1,44 @@
# note_content - Textual content of a note
#
# Generation date: 2026-01-14
# Rule compliance: 38 (slot centralization)
# Migration: Supports Notes class (replaces appraisal_notes)
id: https://nde.nl/ontology/hc/slot/note_content
name: note_content_slot
title: Note Content Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
imports:
- linkml:types
default_prefix: hc
slots:
note_content:
slot_uri: rdf:value
range: string
description: |
The textual content of a note.
**ONTOLOGY ALIGNMENT**:
| Ontology | Property | Notes |
|----------|----------|-------|
| **RDF** | `rdf:value` | Primary - literal value |
| **SKOS** | `skos:note` | Related - note text |
exact_mappings:
- rdf:value
close_mappings:
- skos:note
examples:
- value: "Retained all policy files; destroyed duplicate copies per retention schedule."
description: Appraisal note content
- value: "Maintained original order by correspondent. Created 5 series by function."
description: Arrangement note content

View file

@ -0,0 +1,44 @@
# note_date - Date a note was created or updated
#
# Generation date: 2026-01-14
# Rule compliance: 38 (slot centralization)
# Migration: Supports Notes class (replaces appraisal_notes)
id: https://nde.nl/ontology/hc/slot/note_date
name: note_date_slot
title: Note Date Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
dcterms: http://purl.org/dc/terms/
schema: http://schema.org/
imports:
- linkml:types
default_prefix: hc
slots:
note_date:
slot_uri: dcterms:date
range: date
description: |
The date when the note was created or last updated.
**ONTOLOGY ALIGNMENT**:
| Ontology | Property | Notes |
|----------|----------|-------|
| **DCTerms** | `dcterms:date` | Primary - date |
| **Schema.org** | `schema:dateCreated` | Related - creation date |
exact_mappings:
- dcterms:date
close_mappings:
- schema:dateCreated
examples:
- value: "2024-03-15"
description: Note created March 15, 2024
- value: "2024-06-01"
description: Note updated June 1, 2024

View file

@ -0,0 +1,51 @@
# note_type - Type classification for notes
#
# Generation date: 2026-01-14
# Rule compliance: 38 (slot centralization)
# Migration: Supports Notes class (replaces appraisal_notes)
id: https://nde.nl/ontology/hc/slot/note_type
name: note_type_slot
title: Note Type Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
dcterms: http://purl.org/dc/terms/
imports:
- linkml:types
default_prefix: hc
slots:
note_type:
slot_uri: dcterms:type
range: string
description: |
The type or category of the note.
**Common Types**:
- appraisal: Retention/destruction decisions
- arrangement: Physical organization notes
- conservation: Treatment documentation
- processing: Archival workflow notes
- general: General documentation
**ONTOLOGY ALIGNMENT**:
| Ontology | Property | Notes |
|----------|----------|-------|
| **DCTerms** | `dcterms:type` | Primary - nature/genre |
| **SKOS** | `skos:inScheme` | Related - controlled vocab |
exact_mappings:
- dcterms:type
examples:
- value: "appraisal"
description: Appraisal decision documentation
- value: "arrangement"
description: Physical organization notes
- value: "conservation"
description: Treatment documentation

View file

@ -30,24 +30,34 @@ fixes:
status: true
timestamp: '2026-01-14T16:00:00Z'
session: "session-2026-01-14-type-migration"
notes: "FULLY MIGRATED: TemporaryLocation - actual_end REMOVED, using temporal_extent with TimeSpan.end_of_the_end (Rule 53)"
notes: "FULLY MIGRATED: TemporaryLocation - actual_end REMOVED. Use temporal_extent (range: TimeSpan) which contains end_of_the_end. CIDOC-CRM pattern: P4_has_time-span → E52_Time-Span → P82b_end_of_the_end"
revision:
- label: end_of_the_end
- label: temporal_extent
type: slot
description: "Slot with range TimeSpan (crm:P4_has_time-span)"
- label: TimeSpan
type: class
description: "Class containing begin_of_the_begin, end_of_the_begin, begin_of_the_end, end_of_the_end slots"
- label: end_of_the_end
type: slot
description: "Nested within TimeSpan - latest possible end time (crm:P82b_end_of_the_end)"
- original_slot_id: https://nde.nl/ontology/hc/slot/actual_start
processed:
status: true
timestamp: '2026-01-14T16:00:00Z'
session: "session-2026-01-14-type-migration"
notes: "FULLY MIGRATED: TemporaryLocation - actual_start REMOVED, using temporal_extent with TimeSpan.begin_of_the_begin (Rule 53)"
notes: "FULLY MIGRATED: TemporaryLocation - actual_start REMOVED. Use temporal_extent (range: TimeSpan) which contains begin_of_the_begin. CIDOC-CRM pattern: P4_has_time-span → E52_Time-Span → P82a_begin_of_the_begin"
revision:
- label: begin_of_the_begin
- label: temporal_extent
type: slot
description: "Slot with range TimeSpan (crm:P4_has_time-span)"
- label: TimeSpan
type: class
description: "Class containing begin_of_the_begin, end_of_the_begin, begin_of_the_end, end_of_the_end slots"
- label: begin_of_the_begin
type: slot
description: "Nested within TimeSpan - earliest possible start time (crm:P82a_begin_of_the_begin)"
- original_slot_id: https://nde.nl/ontology/hc/slot/address_formatted
processed:
@ -171,16 +181,17 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/all_data_real
processed:
status: true
timestamp: '2026-01-14T22:30:00Z'
session: "session-2026-01-14-realness-migration"
timestamp: '2026-01-14T23:30:00Z'
session: "session-2026-01-14-provenance-migration"
notes: >-
FULLY MIGRATED: all_data_real and has_all_data_real_flag REMOVED and archived.
Created is_or_was_real slot and RealnessStatus class per slot_fixes.yaml revision.
LinkedInProfile.yaml updated - WhatsAppEnrichmentMetadata now uses is_or_was_real.
FULLY MIGRATED: all_data_real, is_or_was_real, and has_all_data_real_flag REMOVED and archived.
Created has_or_had_provenance slot pointing to existing ProvenanceBlock class.
LinkedInProfile.yaml updated - WhatsAppEnrichmentMetadata now uses has_or_had_provenance.
Archived: is_or_was_real.yaml (slot), RealnessStatus.yaml (class) to archive/ folders.
revision:
- label: is_or_was_real
- label: has_or_had_provenance
type: slot
- label: RealnessStatus
- label: ProvenanceBlock
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/all_links
@ -408,10 +419,10 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/appraisal_notes
processed:
status: false
timestamp: null
session: null
notes: "Maps to Notes class"
status: true
timestamp: "2026-01-14T10:30:00Z"
session: "claude-opus-4-20250514"
notes: "Migrated to has_or_had_notes slot with Notes class. Created Notes.yaml, has_or_had_notes.yaml, note_type.yaml, note_content.yaml, note_date.yaml. Updated CustodianArchive.yaml."
revision:
- label: has_or_had_notes
type: slot
@ -608,10 +619,10 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/auxiliary_platform_id
processed:
status: false
timestamp: null
session: null
notes: "Maps to existing Identifier class"
status: true
timestamp: "2026-01-14T12:15:00Z"
session: "session-2026-01-14-identifier-migrations"
notes: "Migrated to has_or_had_identifier. Updated AuxiliaryDigitalPlatform.yaml class. Archived auxiliary_platform_id.yaml and has_auxiliary_platform_identifier.yaml"
revision:
- label: has_or_had_identifier
type: slot
@ -757,10 +768,16 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/binding_provenance
processed:
status: false
timestamp: null
session: null
notes: "Maps to existing Provenance class"
status: true
timestamp: '2026-01-15T00:20:00Z'
session: "session-2026-01-14-identifier-migrations"
notes: >-
FULLY MIGRATED: binding_provenance REMOVED and archived.
InformationCarrier.yaml updated to use has_or_had_provenance slot.
Updated imports, slots list, and slot_usage with migration note.
Note: This slot described physical binding provenance (e.g., royal presentation bindings),
which is semantically different from data extraction provenance.
Archived: binding_provenance.yaml to archive/ folder per Rule 53.
revision:
- label: has_or_had_provenance
type: slot
@ -957,10 +974,13 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/branch_id
processed:
status: false
timestamp: null
session: null
notes: "Maps to existing Identifier class"
status: true
timestamp: '2026-01-14T23:45:00Z'
session: "session-2026-01-14-identifier-migrations"
notes: >-
FULLY MIGRATED: branch_id REMOVED and archived.
OrganizationBranch.yaml updated to use has_or_had_identifier slot.
Archived: branch_id.yaml to archive/ folder per Rule 53.
revision:
- label: has_or_had_identifier
type: slot
@ -969,10 +989,14 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/branch_name
processed:
status: false
timestamp: null
session: null
notes: "Maps to existing Label class"
status: true
timestamp: '2026-01-15T00:10:00Z'
session: "session-2026-01-14-identifier-migrations"
notes: >-
FULLY MIGRATED: branch_name REMOVED and archived.
OrganizationBranch.yaml updated to use has_or_had_label slot.
AuxiliaryPlace.yaml examples updated (hosts_branch references).
Archived: branch_name.yaml to archive/ folder per Rule 53.
revision:
- label: has_or_had_label
type: slot
@ -981,10 +1005,14 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/branch_office_description
processed:
status: false
timestamp: null
session: null
notes: "Maps to existing Description class"
status: true
timestamp: '2026-01-15T00:15:00Z'
session: "session-2026-01-14-identifier-migrations"
notes: >-
FULLY MIGRATED: branch_office_description REMOVED and archived.
BranchOffice.yaml updated to use has_or_had_description slot.
Updated imports, slots list, slot_usage, class description example, and 2 class examples.
Archived: branch_office_description.yaml to archive/ folder per Rule 53.
revision:
- label: has_or_had_description
type: slot
@ -993,10 +1021,13 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/branch_office_id
processed:
status: false
timestamp: null
session: null
notes: "Maps to existing Identifier class"
status: true
timestamp: '2026-01-14T23:50:00Z'
session: "session-2026-01-14-identifier-migrations"
notes: >-
FULLY MIGRATED: branch_office_id REMOVED and archived.
BranchOffice.yaml updated to use has_or_had_identifier slot.
Archived: branch_office_id.yaml to archive/ folder per Rule 53.
revision:
- label: has_or_had_identifier
type: slot
@ -1005,10 +1036,14 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/branch_office_name
processed:
status: false
timestamp: null
session: null
notes: "Maps to existing Label class"
status: true
timestamp: '2026-01-15T00:00:00Z'
session: "session-2026-01-14-identifier-migrations"
notes: >-
FULLY MIGRATED: branch_office_name REMOVED and archived.
BranchOffice.yaml updated to use has_or_had_label slot.
Updated imports, slots list, slot_usage, class description example, and 2 class examples.
Archived: branch_office_name.yaml to archive/ folder per Rule 53.
revision:
- label: has_or_had_label
type: slot
@ -1237,12 +1272,17 @@ fixes:
- original_slot_id: https://nde.nl/ontology/hc/slot/cadastral_id
processed:
status: false
timestamp: null
session: null
notes: "Maps to existing Identifier class"
status: true
timestamp: '2026-01-14T23:55:00Z'
session: "session-2026-01-14-identifier-migrations"
notes: >-
FULLY MIGRATED: cadastral_id REMOVED and archived.
GeoSpatialPlace.yaml updated to use has_or_had_identifier slot.
Use Identifier with identifier_scheme='cadastral' for parcel IDs.
Archived: cadastral_id.yaml to archive/ folder per Rule 53.
revision:
- label: has_or_had_identifier
type: slot
- label: Identifier
type: class

View file

@ -402,10 +402,11 @@ export default function EntityReviewPage() {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
wcms_ppid: selectedProfile.ppid,
name: selectedProfile.name,
email: selectedProfile.email || undefined,
email_domain: selectedProfile.email_domain || undefined,
institution_name: selectedProfile.wcms_identifiers?.institution_name || undefined,
institution: selectedProfile.wcms_identifiers?.institution_name || undefined,
}),
});

View file

@ -16,6 +16,7 @@
# --all Deploy everything
# --status Check server status only
# --clear Clear Oxigraph store before loading (use with --data)
# --sync-reviews Sync entity resolution review data FROM server to local
set -e
@ -69,9 +70,10 @@ DEPLOY_VALKEY=false
DEPLOY_RAG=false
CLEAR_OXIGRAPH=false
STATUS_ONLY=false
SYNC_REVIEWS=false
if [ $# -eq 0 ]; then
echo "Usage: $0 [--infra] [--data] [--frontend] [--archief] [--api] [--ducklake] [--qdrant] [--valkey] [--rag] [--all] [--status] [--clear]"
echo "Usage: $0 [--infra] [--data] [--frontend] [--archief] [--api] [--ducklake] [--qdrant] [--valkey] [--rag] [--all] [--status] [--clear] [--sync-reviews]"
exit 1
fi
@ -121,6 +123,9 @@ for arg in "$@"; do
--status)
STATUS_ONLY=true
;;
--sync-reviews)
SYNC_REVIEWS=true
;;
*)
echo "Unknown option: $arg"
exit 1
@ -585,6 +590,11 @@ if [ "$DEPLOY_API" = true ]; then
echo -e "${BLUE} Deploying FastAPI Backend (DSPy SPARQL Generation)${NC}"
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
# CRITICAL: Backup review data before deployment to prevent data loss
echo -e "${YELLOW}Creating backup of review data before deployment...${NC}"
ssh -o StrictHostKeyChecking=no "$SERVER_USER@$SERVER_IP" \
"/var/lib/glam/api/backup-reviews.sh 2>/dev/null || echo 'No backup script yet - will be created'"
# Ensure remote directories exist with proper Python package structure
echo -e "${YELLOW}Setting up API directory on server...${NC}"
ssh -o StrictHostKeyChecking=no "$SERVER_USER@$SERVER_IP" \
@ -1088,6 +1098,70 @@ ENDSSH
echo -e " External: https://bronhouder.nl/api/rag/"
fi
# Sync review data from server
if [ "$SYNC_REVIEWS" = true ]; then
echo ""
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${BLUE} Syncing Entity Resolution Review Data FROM Server${NC}"
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
LOCAL_ER_DIR="$PROJECT_ROOT/data/entity_resolution"
SERVER_ER_DIR="/var/lib/glam/api/data/entity_resolution"
BACKUP_DIR="$LOCAL_ER_DIR/backups"
# Create backup directory if needed
mkdir -p "$BACKUP_DIR"
# Check if server file exists
echo -e "${YELLOW}Checking server data...${NC}"
SERVER_FILE_EXISTS=$(ssh -o StrictHostKeyChecking=no "$SERVER_USER@$SERVER_IP" \
"test -f $SERVER_ER_DIR/entity_resolution_candidates.json && echo 'yes' || echo 'no'")
if [ "$SERVER_FILE_EXISTS" = "yes" ]; then
# Get stats from server
echo -e "${YELLOW}Server review stats:${NC}"
ssh -o StrictHostKeyChecking=no "$SERVER_USER@$SERVER_IP" \
"cat $SERVER_ER_DIR/entity_resolution_candidates.json | python3 -c '
import json,sys
d=json.load(sys.stdin)
reviewed=[c for c in d.get(\"candidates\",[]) if c.get(\"reviewed\")]
matches=[c for c in reviewed if c.get(\"review_decision\")==\"match\"]
print(f\" Total candidates: {len(d.get(\"candidates\",[]))}\" )
print(f\" Reviewed: {len(reviewed)} ({len(matches)} matches)\")
print(f\" Last review: {d.get(\"metadata\",{}).get(\"last_review_at\",\"N/A\")}\")
'"
# Backup local file
if [ -f "$LOCAL_ER_DIR/entity_resolution_candidates.json" ]; then
BACKUP_FILE="$BACKUP_DIR/entity_resolution_candidates_local_$(date +%Y%m%d_%H%M%S).json"
echo -e "${YELLOW}Backing up local file to: $BACKUP_FILE${NC}"
cp "$LOCAL_ER_DIR/entity_resolution_candidates.json" "$BACKUP_FILE"
fi
# Download server file
echo -e "${YELLOW}Downloading server data...${NC}"
rsync -avz --progress \
-e "ssh -o StrictHostKeyChecking=no" \
"$SERVER_USER@$SERVER_IP:$SERVER_ER_DIR/entity_resolution_candidates.json" \
"$LOCAL_ER_DIR/entity_resolution_candidates.json"
echo -e "${GREEN}Review data synced successfully${NC}"
# Show local stats
echo -e "${YELLOW}Local file now contains:${NC}"
cat "$LOCAL_ER_DIR/entity_resolution_candidates.json" | python3 -c '
import json,sys
d=json.load(sys.stdin)
reviewed=[c for c in d.get("candidates",[]) if c.get("reviewed")]
matches=[c for c in reviewed if c.get("review_decision")=="match"]
print(f" Reviewed: {len(reviewed)} ({len(matches)} matches)")
'
else
echo -e "${RED}No entity resolution data found on server${NC}"
echo "Server path: $SERVER_ER_DIR/entity_resolution_candidates.json"
fi
fi
# Final status
echo ""
echo -e "${BLUE}════════════════════════════════════════════════════════════════${NC}"

View file

@ -1,12 +1,12 @@
{
"generated": "2026-01-14T08:51:14.564Z",
"generated": "2026-01-14T11:14:08.309Z",
"schemaRoot": "/schemas/20251121/linkml",
"totalFiles": 2913,
"totalFiles": 2896,
"categoryCounts": {
"main": 4,
"class": 671,
"enum": 147,
"slot": 2087,
"slot": 2070,
"module": 4
},
"categories": [
@ -1945,6 +1945,11 @@
"path": "modules/classes/NotarialArchiveRecordSetTypes.yaml",
"category": "class"
},
{
"name": "Notes",
"path": "modules/classes/Notes.yaml",
"category": "class"
},
{
"name": "OAIPMHEndpoint",
"path": "modules/classes/OAIPMHEndpoint.yaml",
@ -2405,11 +2410,6 @@
"path": "modules/classes/ReadingRoomAnnex.yaml",
"category": "class"
},
{
"name": "RealnessStatus",
"path": "modules/classes/RealnessStatus.yaml",
"category": "class"
},
{
"name": "ReconstructedEntity",
"path": "modules/classes/ReconstructedEntity.yaml",
@ -4157,51 +4157,11 @@
"path": "modules/slots/accepts_or_accepted_visiting_scholar.yaml",
"category": "slot"
},
{
"name": "activities_societies",
"path": "modules/slots/activities_societies.yaml",
"category": "slot"
},
{
"name": "actual_end",
"path": "modules/slots/actual_end.yaml",
"category": "slot"
},
{
"name": "actual_start",
"path": "modules/slots/actual_start.yaml",
"category": "slot"
},
{
"name": "address_formatted",
"path": "modules/slots/address_formatted.yaml",
"category": "slot"
},
{
"name": "address_type",
"path": "modules/slots/address_type.yaml",
"category": "slot"
},
{
"name": "admin_office_id",
"path": "modules/slots/admin_office_id.yaml",
"category": "slot"
},
{
"name": "administrative_functions",
"path": "modules/slots/administrative_functions.yaml",
"category": "slot"
},
{
"name": "affects_or_affected",
"path": "modules/slots/affects_or_affected.yaml",
"category": "slot"
},
{
"name": "aggregates_from",
"path": "modules/slots/aggregates_from.yaml",
"category": "slot"
},
{
"name": "aggregates_or_aggregated_from",
"path": "modules/slots/aggregates_or_aggregated_from.yaml",
@ -4247,11 +4207,6 @@
"path": "modules/slots/appointment_required.yaml",
"category": "slot"
},
{
"name": "appraisal_notes",
"path": "modules/slots/appraisal_notes.yaml",
"category": "slot"
},
{
"name": "approved_by",
"path": "modules/slots/approved_by.yaml",
@ -4377,16 +4332,6 @@
"path": "modules/slots/binding_description.yaml",
"category": "slot"
},
{
"name": "binding_provenance",
"path": "modules/slots/binding_provenance.yaml",
"category": "slot"
},
{
"name": "binding_type",
"path": "modules/slots/binding_type.yaml",
"category": "slot"
},
{
"name": "bio_custodian_subtype",
"path": "modules/slots/bio_custodian_subtype.yaml",
@ -4452,31 +4397,6 @@
"path": "modules/slots/branch_head.yaml",
"category": "slot"
},
{
"name": "branch_id",
"path": "modules/slots/branch_id.yaml",
"category": "slot"
},
{
"name": "branch_name",
"path": "modules/slots/branch_name.yaml",
"category": "slot"
},
{
"name": "branch_office_description",
"path": "modules/slots/branch_office_description.yaml",
"category": "slot"
},
{
"name": "branch_office_id",
"path": "modules/slots/branch_office_id.yaml",
"category": "slot"
},
{
"name": "branch_office_name",
"path": "modules/slots/branch_office_name.yaml",
"category": "slot"
},
{
"name": "branch_service_area",
"path": "modules/slots/branch_service_area.yaml",
@ -4487,11 +4407,6 @@
"path": "modules/slots/branch_staff_count.yaml",
"category": "slot"
},
{
"name": "branch_type",
"path": "modules/slots/branch_type.yaml",
"category": "slot"
},
{
"name": "broader_concept",
"path": "modules/slots/broader_concept.yaml",
@ -4532,11 +4447,6 @@
"path": "modules/slots/budget_status.yaml",
"category": "slot"
},
{
"name": "budget_type",
"path": "modules/slots/budget_type.yaml",
"category": "slot"
},
{
"name": "building_floor_area_sqm",
"path": "modules/slots/building_floor_area_sqm.yaml",
@ -4557,11 +4467,6 @@
"path": "modules/slots/cached_token.yaml",
"category": "slot"
},
{
"name": "cadastral_id",
"path": "modules/slots/cadastral_id.yaml",
"category": "slot"
},
{
"name": "call_description",
"path": "modules/slots/call_description.yaml",
@ -7482,21 +7387,11 @@
"path": "modules/slots/has_activity_name.yaml",
"category": "slot"
},
{
"name": "has_actual_end_date",
"path": "modules/slots/has_actual_end_date.yaml",
"category": "slot"
},
{
"name": "has_actual_return_date",
"path": "modules/slots/has_actual_return_date.yaml",
"category": "slot"
},
{
"name": "has_actual_start_date",
"path": "modules/slots/has_actual_start_date.yaml",
"category": "slot"
},
{
"name": "has_address",
"path": "modules/slots/has_address.yaml",
@ -8682,6 +8577,11 @@
"path": "modules/slots/has_or_had_note.yaml",
"category": "slot"
},
{
"name": "has_or_had_notes",
"path": "modules/slots/has_or_had_notes.yaml",
"category": "slot"
},
{
"name": "has_or_had_open_access_endpoint",
"path": "modules/slots/has_or_had_open_access_endpoint.yaml",
@ -8767,6 +8667,11 @@
"path": "modules/slots/has_or_had_project.yaml",
"category": "slot"
},
{
"name": "has_or_had_provenance",
"path": "modules/slots/has_or_had_provenance.yaml",
"category": "slot"
},
{
"name": "has_or_had_provenance_event",
"path": "modules/slots/has_or_had_provenance_event.yaml",
@ -9712,11 +9617,6 @@
"path": "modules/slots/is_or_was_platform_of.yaml",
"category": "slot"
},
{
"name": "is_or_was_real",
"path": "modules/slots/is_or_was_real.yaml",
"category": "slot"
},
{
"name": "is_or_was_related_to",
"path": "modules/slots/is_or_was_related_to.yaml",
@ -10777,6 +10677,21 @@
"path": "modules/slots/note.yaml",
"category": "slot"
},
{
"name": "note_content",
"path": "modules/slots/note_content.yaml",
"category": "slot"
},
{
"name": "note_date",
"path": "modules/slots/note_date.yaml",
"category": "slot"
},
{
"name": "note_type",
"path": "modules/slots/note_type.yaml",
"category": "slot"
},
{
"name": "oai_pmh_endpoint",
"path": "modules/slots/oai_pmh_endpoint.yaml",

View file

@ -17,7 +17,7 @@ imports:
- ../slots/has_or_had_custodian_type
- ../slots/dual_class_link
- ../slots/broader_concept
- ../slots/broader_concept_label
- ../slots/has_or_had_label
- ../slots/specificity_annotation
- ../slots/template_specificity
- ../slots/wikidata_alignment
@ -36,7 +36,7 @@ classes:
- dual_class_link
- has_or_had_holds_record_set_type
- broader_concept
- broader_concept_label
- has_or_had_label
- specificity_annotation
- template_specificity
- wikidata_alignment
@ -84,7 +84,11 @@ classes:
inlined: true
broader_concept:
equals_expression: '["wd:Q166118"]'
broader_concept_label:
has_or_had_label:
description: >-
Human-readable label for the broader concept.
Stored for display to avoid repeated lookups.
MIGRATED from broader_concept_label (2026-01-15) per Rule 53.
equals_string: archive
dual_class_link:
range: DualClassLink

View file

@ -21,7 +21,9 @@ imports:
- ../slots/policy_name
- ../slots/has_or_had_access_description
- ../slots/has_or_had_access_level
- ../slots/appointment_required
# REMOVED 2026-01-15: ../slots/appointment_required - migrated to is_or_was_required
# REMOVED 2026-01-15: ../slots/has_appointment_required_flag - consolidated to is_or_was_required
- ../slots/is_or_was_required
- ../slots/condition
- ../slots/credentials_required
- ../slots/cultural_protocol_url
@ -37,7 +39,6 @@ imports:
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
- ../slots/has_appointment_required_flag
classes:
AccessPolicy:
class_uri: premis:RightsStatus
@ -64,7 +65,7 @@ classes:
Valid ID required for registration\"\n ```\n\n2. **Restricted Research Materials**:\n ```yaml\n AccessPolicy:\n\
\ policy_id: \"hc:access-policy/university-special-collections\"\n access_level: \"RESEARCHERS_ONLY\"\n \
\ access_description: \"Academic researchers with institutional affiliation\"\n conditions: \"Letter of introduction\
\ required from supervising institution\"\n appointment_required: true\n ```\n\n3. **Embargoed Collection**:\n\
\ required from supervising institution\"\n is_or_was_required: true\n ```\n\n3. **Embargoed Collection**:\n\
\ ```yaml\n AccessPolicy:\n policy_id: \"hc:access-policy/donor-embargo-2050\"\n access_level: \"EMBARGOED\"\
\n access_description: \"Closed until 2050 per donor agreement\"\n embargo_end_date: \"2050-01-01\"\n embargo_reason:\
\ \"Donor privacy restrictions\"\n ```\n\n4. **Culturally Sensitive**:\n ```yaml\n AccessPolicy:\n policy_id:\
@ -85,7 +86,8 @@ classes:
slots:
- has_or_had_access_description
- has_or_had_access_level
- appointment_required
# REMOVED 2026-01-15: appointment_required - migrated to is_or_was_required
- is_or_was_required
- condition
- contact_email
- credentials_required
@ -160,8 +162,12 @@ classes:
description: In Copyright
- value: http://rightsstatements.org/vocab/NoC-US/1.0/
description: No Copyright - United States
has_appointment_required_flag:
is_or_was_required:
range: boolean
description: |
Whether an appointment is required for access.
MIGRATED 2026-01-15: Replaces appointment_required and has_appointment_required_flag per Rule 53.
Consolidated to generic is_or_was_required slot.
examples:
- value: true
description: Appointment required
@ -251,7 +257,7 @@ classes:
- Registration form must be completed
- Original materials handled with gloves
registration_required: true
appointment_required: false
is_or_was_required: false # MIGRATED 2026-01-15: was appointment_required
fee_required: false
contact_email: studiezaal@nationaalarchief.nl
description: Standard archive public access policy
@ -273,7 +279,7 @@ classes:
condition:
- Awaiting processing and cataloging
- Access may be arranged for urgent research needs
appointment_required: true
is_or_was_required: true # MIGRATED 2026-01-15: was appointment_required
credentials_required: PROFESSIONAL
contact_email: preservation@archive.org
description: Dark archive / DIM access policy

View file

@ -101,7 +101,7 @@ classes:
\n preferred_label: \"Rijksmuseum\"\n place_designation:\n place_name: \"Rijksmuseum\" # Main building on Museumplein\n\
\ auxiliary_places:\n - place_name: \"Depot Amersfoort\"\n auxiliary_place_type: STORAGE_FACILITY\n \
\ street_address: \"Euterpelaan 25, Amersfoort\"\n - place_name: \"Rijksmuseum Schiphol\"\n auxiliary_place_type:\
\ BRANCH_OFFICE\n street_address: \"Schiphol Airport, Lounge 2\"\n hosts_branch:\n branch_name:\
\ BRANCH_OFFICE\n street_address: \"Schiphol Airport, Lounge 2\"\n hosts_branch:\n has_or_had_label:\
\ \"Schiphol Exhibition Space\"\n```\n\n**TEMPORAL VALIDITY**:\n\nAuxiliary places can open/close independently:\n-\
\ Storage facility opened 1995, closed 2010 (moved to new location)\n- Branch office valid_from 2000, valid_to null\
\ (still active)\n\nTrack with valid_from/valid_to or temporal_extent (for fuzzy dates).\n"
@ -279,7 +279,7 @@ classes:
inlined_as_list: true
examples:
- value:
branch_name: Conservation Division - Amersfoort
has_or_had_label: Conservation Division - Amersfoort
branch_type: CONSERVATION_LAB
description: Conservation branch at depot site
is_auxiliary_of_place:
@ -358,7 +358,7 @@ classes:
country: https://nde.nl/ontology/hc/country/NL
valid_from: '2002-10-01'
hosts_branch:
- branch_name: Schiphol Exhibition Team
- has_or_had_label: Schiphol Exhibition Team
branch_type: EXHIBITION_SPACE
is_auxiliary_of_place: https://nde.nl/ontology/hc/place/rijksmuseum-main
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804

View file

@ -6,9 +6,9 @@ imports:
- ./ReconstructedEntity
- ./CustodianObservation
- ./ReconstructionActivity
- ../slots/branch_office_description
- ../slots/branch_office_id
- ../slots/branch_office_name
- ../slots/has_or_had_description
- ../slots/has_or_had_identifier
- ../slots/has_or_had_label
- ../slots/branch_service_area
- ../slots/branch_staff_count
- ../slots/has_local_collection
@ -50,8 +50,8 @@ classes:
\ Zaanstreek-Waterland branch\n - Serves researchers in Zaandam area\n - Holds local municipal records\n\n2. **Library\
\ Satellite Locations**:\n - University library branch at satellite campus\n - Public library neighborhood branches\n\
\n3. **Museum Study Centers**:\n - Off-site study/research center for scholars\n - Rijksmuseum Schiphol (airport\
\ exhibition space)\n\n**Example - Regional Archive Branch**:\n```yaml\nBranchOffice:\n branch_office_id: \"https://nde.nl/ontology/hc/aux/nha-zaanstreek-branch\"\
\n branch_office_name: \"Noord-Hollands Archief - Zaanstreek-Waterland\"\n branch_office_description: |\n Regional\
\ exhibition space)\n\n**Example - Regional Archive Branch**:\n```yaml\nBranchOffice:\n has_or_had_identifier: \"https://nde.nl/ontology/hc/aux/nha-zaanstreek-branch\"\
\n has_or_had_label: \"Noord-Hollands Archief - Zaanstreek-Waterland\"\n has_or_had_description: |\n Regional\
\ branch serving Zaanstreek-Waterland area.\n Holds municipal records from Zaandam, Wormerland, Purmerend.\n Open\
\ to researchers Tuesday-Thursday.\n branch_service_area: \"Zaanstreek-Waterland region\"\n is_public_facing: true\n\
\ services_offered:\n - \"Archival research access\"\n - \"Genealogical consultations\"\n - \"Local history\
@ -66,9 +66,9 @@ classes:
- org:OrganizationalUnit
- schema:branch
slots:
- branch_office_description
- branch_office_id
- branch_office_name
- has_or_had_description
- has_or_had_identifier
- has_or_had_label
- branch_service_area
- branch_staff_count
- has_local_collection
@ -80,16 +80,24 @@ classes:
- was_derived_from
- was_generated_by
slot_usage:
branch_office_id:
has_or_had_identifier:
range: uriorcurie
required: true
identifier: true
description: >-
Unique identifier for this branch office.
MIGRATED from branch_office_id (2026-01-14) per Rule 53.
examples:
- value: https://nde.nl/ontology/hc/aux/nha-zaanstreek-branch
description: Noord-Hollands Archief regional branch
branch_office_name:
has_or_had_label:
range: string
required: true
multivalued: false
description: >-
Name of this branch office.
MIGRATED from branch_office_name (2026-01-14) per Rule 53.
Typically includes parent organization name + branch location/function.
examples:
- value: Noord-Hollands Archief - Zaanstreek-Waterland
description: Regional archive branch
@ -97,8 +105,12 @@ classes:
description: Airport exhibition branch
- value: Universiteitsbibliotheek Science Park
description: University library satellite
branch_office_description:
has_or_had_description:
range: string
description: >-
Description of this branch office, including services offered,
target audience, and distinguishing features.
MIGRATED from branch_office_description (2026-01-15) per Rule 53.
examples:
- value: Regional branch serving Zaanstreek-Waterland area. Holds municipal records from Zaandam, Wormerland, Purmerend.
Open to researchers Tuesday-Thursday.
@ -161,9 +173,9 @@ classes:
- https://schema.org/branch
examples:
- value:
branch_office_id: https://nde.nl/ontology/hc/aux/nha-zaanstreek-branch
branch_office_name: Noord-Hollands Archief - Zaanstreek-Waterland
branch_office_description: Regional branch serving Zaanstreek-Waterland area. Holds municipal records from Zaandam,
has_or_had_identifier: https://nde.nl/ontology/hc/aux/nha-zaanstreek-branch
has_or_had_label: Noord-Hollands Archief - Zaanstreek-Waterland
has_or_had_description: Regional branch serving Zaanstreek-Waterland area. Holds municipal records from Zaandam,
Wormerland, Purmerend.
branch_service_area: Zaanstreek-Waterland region
is_public_facing: true
@ -176,9 +188,9 @@ classes:
has_local_collection: true
description: Regional archive branch
- value:
branch_office_id: https://nde.nl/ontology/hc/aux/rijksmuseum-schiphol
branch_office_name: Rijksmuseum Schiphol
branch_office_description: Exhibition space at Schiphol Airport featuring rotating highlights from the Rijksmuseum
has_or_had_identifier: https://nde.nl/ontology/hc/aux/rijksmuseum-schiphol
has_or_had_label: Rijksmuseum Schiphol
has_or_had_description: Exhibition space at Schiphol Airport featuring rotating highlights from the Rijksmuseum
collection. Free admission.
branch_service_area: Amsterdam Schiphol Airport travelers
is_public_facing: true

View file

@ -14,8 +14,8 @@ imports:
- ../slots/has_or_had_acquisition_budget
- ../slots/approved_by
- ../slots/budget_currency
- ../slots/budget_description
- ../slots/budget_name
- ../slots/has_or_had_description
- ../slots/has_or_had_label
- ../slots/budget_status
- ../slots/has_or_had_type
- ../slots/capital_budget
@ -94,8 +94,8 @@ classes:
- has_approval_date
- approved_by
- budget_currency
- budget_description
- budget_name
- has_or_had_description
- has_or_had_label
- budget_status
- has_or_had_type
- capital_budget
@ -129,9 +129,39 @@ classes:
budget_name:
range: string
required: true
description: >-
DEPRECATED: Use has_or_had_label instead.
MIGRATION: 2026-01-15 - Replaced by has_or_had_label slot per Rule 53.
deprecated: "Use has_or_had_label instead"
has_or_had_label:
range: string
required: true
description: >-
Name/title for this budget document.
MIGRATED from budget_name (2026-01-15) per Rule 53.
Maps to dcterms:title as a formal title for a financial planning resource.
examples:
- value: Rijksmuseum Operating Budget FY2024
description: Major museum annual budget
- value: Noord-Hollands Archief Annual Budget 2024-2025
description: Provincial archive budget
budget_description:
range: string
required: false
description: >-
DEPRECATED: Use has_or_had_description instead.
MIGRATION: 2026-01-15 - Replaced by has_or_had_description slot per Rule 53.
deprecated: "Use has_or_had_description instead"
has_or_had_description:
range: string
required: false
description: >-
Narrative description of this budget document's scope and purpose.
MIGRATED from budget_description (2026-01-15) per Rule 53.
Maps to dcterms:description for financial planning documentation.
examples:
- value: Annual operating budget for fiscal year 2024, including major exhibition initiatives and digitization expansion.
description: Comprehensive budget description
budget_type:
range: string
multivalued: true
@ -265,8 +295,8 @@ classes:
examples:
- value:
id: https://nde.nl/ontology/hc/budget/rm/fy2024
budget_name: Rijksmuseum Operating Budget FY2024
budget_description: Annual operating budget for fiscal year 2024, including major exhibition initiatives and digitization
has_or_had_label: Rijksmuseum Operating Budget FY2024
has_or_had_description: Annual operating budget for fiscal year 2024, including major exhibition initiatives and digitization
expansion.
budget_type:
- OPERATING
@ -292,8 +322,8 @@ classes:
description: Major museum annual operating budget
- value:
id: https://nde.nl/ontology/hc/budget/nha/fy2024-2025
budget_name: Noord-Hollands Archief Annual Budget 2024-2025
budget_description: Provincial archive annual budget aligned with government fiscal year.
has_or_had_label: Noord-Hollands Archief Annual Budget 2024-2025
has_or_had_description: Provincial archive annual budget aligned with government fiscal year.
budget_type:
- OPERATING
- CONSOLIDATED

View file

@ -13,7 +13,7 @@ default_prefix: hc
imports:
- linkml:types
- ../slots/record_equivalent
- ../slots/bibframe_equivalent
# REMOVED: ../slots/bibframe_equivalent - Use LinkML close_mappings instead (2026-01-15)
- ../slots/collection_broader_type
- ../slots/has_or_had_collection_narrower_type
- ../slots/collection_type_description
@ -49,10 +49,10 @@ classes:
\ | rico:Fonds | Provenance-based archival unit |\n| SERIES | rico:Series | Subdivision of fonds |\n| FILE | rico:File\
\ | Individual file/dossier |\n| ITEM | rico:Item | Single record |\n| ARTIFICIAL_COLLECTION | rico:Collection | Non-provenance\
\ assemblage |\n\n**USE CASES**:\n\n1. **Archival Classification**:\n ```yaml\n CollectionType:\n type_id: \"\
hc:collection-type/fonds\"\n type_name: \"Fonds\"\n record_equivalent: \"rico:Fonds\"\n description: \"\
hc:collection-type/fonds\"\n type_name: \"Fonds\"\n record_equivalent: \"rico:Fonds\"\n description: \"\
Provenance-based archival unit\"\n ```\n\n2. **Library Special Collection**:\n ```yaml\n CollectionType:\n \
\ type_id: \"hc:collection-type/special-collection\"\n type_name: \"Special Collection\"\n bibframe_equivalent:\
\ \"bf:Collection\"\n description: \"Named library special collection\"\n ```\n\n3. **Museum Named Collection**:\n\
\ type_id: \"hc:collection-type/special-collection\"\n type_name: \"Special Collection\"\n # BIBFRAME mapping at class level via close_mappings: [bf:CollectionType]\n description:\
\ \"Named library special collection\"\n ```\n\n3. **Museum Named Collection**:\n\
\ ```yaml\n CollectionType:\n type_id: \"hc:collection-type/named-collection\"\n type_name: \"Named Collection\"\
\n description: \"Collection named for donor or subject\"\n ```\n"
exact_mappings:
@ -62,7 +62,7 @@ classes:
- bf:CollectionType
- dcterms:DCMIType
slots:
- bibframe_equivalent
# REMOVED: bibframe_equivalent - Use LinkML close_mappings instead (2026-01-15)
- collection_broader_type
- has_or_had_collection_narrower_type
- collection_type_description
@ -107,13 +107,8 @@ classes:
description: RiC-O Series
- value: rico:Collection
description: RiC-O Collection (assembled)
bibframe_equivalent:
range: uriorcurie
examples:
- value: bf:Collection
description: BIBFRAME Collection
- value: bf:Archival
description: BIBFRAME Archival
# REMOVED: bibframe_equivalent slot_usage - Use LinkML close_mappings instead (2026-01-15)
# BIBFRAME mappings are now at class level: close_mappings: [bf:CollectionType]
wikidata_equivalent:
range: string
pattern: ^Q[0-9]+$
@ -173,6 +168,6 @@ classes:
collection_type_name: Special Collection
collection_type_description: A named special collection within a library, often focusing on a particular subject,
format, or provenance.
bibframe_equivalent: bf:Collection
# BIBFRAME mapping at class level via close_mappings: [bf:CollectionType]
domain_context: LIBRARY
description: Library special collection type

View file

@ -9,7 +9,7 @@
# Keeps curation-specific slots:
# - curated_holding, objects_affected, objects_added, objects_removed
# - responsible_actor, responsible_department, spectrum_procedure
# - budget, funding_source, deliverable, documentation_produced
# - is_or_was_allocated_budget (MIGRATED 2026-01-15: was budget), funding_source, deliverable, documentation_produced
#
# Rule compliance: 38, 39, 42, 43, 48
@ -38,7 +38,8 @@ imports:
- ./ExhibitedObject
- ./PersonObservation
- ../enums/CurationActivityTypeEnum
- ../slots/budget
# REMOVED 2026-01-15: ../slots/budget - migrated to is_or_was_allocated_budget
- ../slots/is_or_was_allocated_budget
- ../slots/curated_holding
- ../slots/deliverable
- ../slots/documentation_produced
@ -168,7 +169,8 @@ classes:
# Curation-specific slots (in addition to inherited Activity slots)
slots:
- budget
# REMOVED 2026-01-15: budget - migrated to is_or_was_allocated_budget
- is_or_was_allocated_budget
- curated_holding
- has_or_had_custodian_type
- deliverable
@ -323,9 +325,12 @@ classes:
- value: Friends of the Museum donation
description: Donor-funded
budget:
is_or_was_allocated_budget:
range: string
description: Budget allocated for this activity.
description: |
Budget allocated for this activity.
MIGRATED 2026-01-15: Replaces budget slot per Rule 53.
For structured budget information, override range to Budget class.
examples:
- value: EUR 125,000
description: Digitization project budget
@ -439,7 +444,7 @@ classes:
deliverable:
- https://www.nationaalarchief.nl/onderzoeken/archief/1.04.02/digital
funding_source: Metamorfoze National Digitization Programme
budget: EUR 850,000
is_or_was_allocated_budget: EUR 850,000 # MIGRATED 2026-01-15: was budget
status: IN_PROGRESS
priority: HIGH
spectrum_procedure: documentation
@ -466,7 +471,7 @@ classes:
- Before/after condition photographs
- Updated location records in CMS
funding_source: Andrew W. Mellon Foundation Grant
budget: EUR 95,000
is_or_was_allocated_budget: EUR 95,000 # MIGRATED 2026-01-15: was budget
status: PLANNED
priority: HIGH
spectrum_procedure: object-storage

View file

@ -14,7 +14,7 @@ imports:
- ../slots/has_or_had_access_control
- ../slots/has_administration_description
- ../slots/has_administration_name
- ../slots/backup_status
# REMOVED 2026-01-15: ../slots/backup_status - migrated to has_or_had_status with BackupStatus
- ../slots/has_or_had_status
- ./BackupStatus
- ../slots/business_criticality
@ -107,7 +107,7 @@ classes:
- is_or_was_active_since
- has_administration_description
- has_administration_name
- backup_status
# REMOVED 2026-01-15: backup_status - migrated to has_or_had_status with BackupStatus
- has_or_had_status
- business_criticality
- creating_function
@ -303,7 +303,11 @@ classes:
data_sensitivity: CONFIDENTIAL
gdpr_relevant: true
business_criticality: HIGH
backup_status: Daily backup to Azure, replicated to secondary site
has_or_had_status:
has_or_had_type:
- has_or_had_short_code: DAILY_AUTOMATED
- has_or_had_short_code: CLOUD_AZURE
has_or_had_description: Daily backup to Azure, replicated to secondary site
access_control: 'AD Group: RM-Directors-Staff'
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804
description: Active director's correspondence system
@ -327,7 +331,11 @@ classes:
data_sensitivity: SPECIAL_CATEGORY - Personnel data
gdpr_relevant: true
business_criticality: CRITICAL
backup_status: Real-time replication, encrypted at rest
has_or_had_status:
has_or_had_type:
- has_or_had_short_code: REALTIME_REPLICATION
- has_or_had_short_code: ENCRYPTED_AT_REST
has_or_had_description: Real-time replication, encrypted at rest
access_control: HR Department only, individual file permissions
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804
description: Active HR personnel records system
@ -353,6 +361,10 @@ classes:
data_sensitivity: INTERNAL
gdpr_relevant: false
business_criticality: HIGH
backup_status: Daily backup, 10-year retention, linked to object records
has_or_had_status:
has_or_had_type:
- has_or_had_short_code: DAILY_AUTOMATED
- has_or_had_short_code: LONG_RETENTION
has_or_had_description: Daily backup, 10-year retention, linked to object records
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804
description: Active conservation treatment documentation

View file

@ -23,7 +23,8 @@ imports:
- ../slots/has_accession_date
- ../slots/has_accumulation_end_date
- ../slots/has_accumulation_start_date
- ../slots/appraisal_notes
- ../slots/has_or_had_notes
- ./Notes
- ../slots/has_archive_description
- ../slots/has_archive_name
- ../slots/arrangement_notes
@ -75,7 +76,7 @@ classes:
- has_accession_number
- has_accumulation_end_date
- has_accumulation_start_date
- appraisal_notes
- has_or_had_notes
- has_archive_description
- has_archive_name
- arrangement_notes
@ -258,12 +259,17 @@ classes:
examples:
- value: Closed - Contains personnel files with personal data
description: Privacy restriction
has_appraisal_note:
range: string
has_or_had_notes:
range: Notes
multivalued: true
inlined: true
required: false
examples:
- value: Retained all policy files; destroyed duplicate copies and routine correspondence per retention schedule RS-2020-05
description: Appraisal decisions documented
- value: |
- note_type: appraisal
note_content: "Retained all policy files; destroyed duplicate copies and routine correspondence per retention schedule RS-2020-05"
note_date: "2024-03-15"
description: Appraisal decisions documented as typed note
has_arrangement_note:
range: string
required: false
@ -344,6 +350,9 @@ classes:
estimated_extent: 85 linear meters
assigned_processor: Dr. Jan de Vries
processing_started_date: '2024-01-10'
appraisal_notes: Retained all policy files; weeded duplicate copies per retention schedule.
has_or_had_notes:
- note_type: appraisal
note_content: "Retained all policy files; weeded duplicate copies per retention schedule."
note_date: "2024-01-10"
refers_to_custodian: https://nde.nl/ontology/hc/nl-na
description: Government records in active processing (9 years after accession)

View file

@ -8,7 +8,7 @@ imports:
- ../slots/created
- ../slots/modified
- ../slots/wikidata_entity
- ../slots/applicable_countries
# - ../slots/applicable_countries # MIGRATED 2026-01-15: replaced by has_applicable_country
- ../slots/glamorcubesfixphdnt_code
- ../slots/specificity_annotation
- ../slots/template_specificity
@ -66,7 +66,8 @@ classes:
- org:classification
- schema:additionalType
slots:
- applicable_countries
# - applicable_countries # MIGRATED 2026-01-15: replaced by has_applicable_country
- has_applicable_country
- created
- custodian_type_broader
- custodian_type_narrower
@ -112,6 +113,7 @@ classes:
multivalued: true
required: false
has_applicable_country:
description: "ISO 3166-1 alpha-2 country codes where this type applies. Empty = worldwide. (MIGRATED 2026-01-15: was applicable_countries)"
range: string
multivalued: true
required: false

View file

@ -15,7 +15,8 @@ imports:
- ./DataServiceEndpointType
- ../slots/protocol
- ../slots/response_format
- ../slots/authentication_required
# REMOVED 2026-01-15: ../slots/authentication_required - migrated to is_or_was_required
- ../slots/is_or_was_required
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
@ -28,7 +29,8 @@ classes:
abstract: true
class_uri: dcat:DataService
slots:
- authentication_required
# REMOVED 2026-01-15: authentication_required - migrated to is_or_was_required
- is_or_was_required
- protocol
- response_format
- specificity_annotation
@ -136,7 +138,7 @@ classes:
range: uri
authentication_method:
slot_uri: schema:potentialAction
description: 'Authentication method required (if authentication_required is true).
description: 'Authentication method required (if is_or_was_required is true).
Values from AuthenticationMethodEnum:
@ -289,7 +291,7 @@ classes:
\nThis slot links an INSTANCE (DataServiceEndpoint) to its TYPE classification\n(DataServiceEndpointType), following\
\ the same architectural pattern as\nCustodian/CustodianType.\n\n```\nDataServiceEndpoint (INSTANCE) DataServiceEndpointType\
\ (TYPE)\n├── endpoint_url ├── protocol_name\n├── status ├── protocol_version\n\
├── authentication_required ├── specification_url\n└── endpoint_type ────────────────►└── typical_response_formats\n\
├── is_or_was_required ├── specification_url\n└── endpoint_type ────────────────►└── typical_response_formats\n\
```\n\n**Why Both `protocol` and `endpoint_type`?**\n\n- `protocol` (enum): Simple string classification for quick\
\ filtering\n- `endpoint_type` (class reference): Rich type metadata with SKOS hierarchy,\n specification URLs,\
\ and semantic relationships\n\n**Example:**\n\n```yaml\ndata_service_endpoint:\n endpoint_id: \"https://nde.nl/hc/endpoint/na-oai-pmh\"\

View file

@ -9,7 +9,8 @@ imports:
- ../enums/EducationProviderTypeEnum
- ../slots/has_or_had_accessibility_feature
- ../slots/annual_participants
- ../slots/booking_required
# REMOVED 2026-01-15: ../slots/booking_required - migrated to is_or_was_required
- ../slots/is_or_was_required
- ../slots/classroom_count
- ../slots/has_or_had_custodian_type
- ../slots/education_center_description
@ -79,7 +80,8 @@ classes:
slots:
- has_or_had_accessibility_feature
- annual_participants
- booking_required
# REMOVED 2026-01-15: booking_required - migrated to is_or_was_required
- is_or_was_required
- classroom_count
- has_or_had_custodian_type
- education_center_description
@ -197,11 +199,14 @@ classes:
examples:
- value: 8
description: Education team size
booking_required:
is_or_was_required:
range: boolean
description: |
Whether advance booking is required for education programs.
MIGRATED 2026-01-15: Replaces booking_required slot.
examples:
- value: true
description: Booking required
description: Booking required for programs
education_contact_email:
range: string
examples:
@ -252,7 +257,7 @@ classes:
- Hearing loop
annual_participants: 75000
staff_count: 12
booking_required: true
is_or_was_required: true
education_contact_email: educatie@rijksmuseum.nl
description: Major museum education center
- value:
@ -272,5 +277,5 @@ classes:
classroom_count: 2
max_group_size: 20
has_av_equipment: true
booking_required: true
is_or_was_required: true
description: Archive learning center

View file

@ -21,7 +21,9 @@ imports:
- ../slots/language
- ../slots/price
- ../slots/authors
- ../slots/binding
# REMOVED: ../slots/binding - Use has_or_had_type with BindingType instead (2026-01-15)
- ../slots/has_or_had_type
- ./BindingType
- ../slots/catalog_description
- ../slots/catalog_entries_count
- ../slots/catalog_for
@ -79,7 +81,8 @@ classes:
- bibo:Book
slots:
- authors
- binding
# REMOVED: binding - Use has_or_had_type with BindingType instead (2026-01-15)
- has_or_had_type
- catalog_description
- catalog_entries_count
- catalog_for
@ -217,12 +220,24 @@ classes:
examples:
- value: 280 color illustrations
- value: 150 color plates, 50 b/w figures
binding:
# DEPRECATED: binding slot - Use has_or_had_type with BindingType instead (2026-01-15)
# binding:
# required: false
# range: string
# deprecated: "Use has_or_had_type with BindingType instead"
has_or_had_type:
required: false
range: string
range: BindingType
description: >-
The binding type of the catalog (hardcover, paperback, etc.).
MIGRATED from binding slot (2026-01-15) per Rule 53.
Uses BindingType class hierarchy for structured binding classification.
examples:
- value: hardcover
- value: paperback
- value: hc:HardcoverBinding
description: Hardcover binding type
- value: hc:PaperbackBinding
description: Paperback binding type
language:
required: false
range: string
@ -336,7 +351,7 @@ classes:
isbn_13: '9789491714962'
pages: 320
illustrations: 280 color illustrations
binding: hardcover
has_or_had_type: hc:HardcoverBinding # Migrated from binding: hardcover
language:
- en
catalog_url: https://www.rijksmuseum.nl/nl/webshop/catalogus-vermeer
@ -365,7 +380,7 @@ classes:
isbn_13: '9780870709159'
pages: 298
illustrations: 230 illustrations
binding: hardcover
has_or_had_type: hc:HardcoverBinding # Migrated from binding: hardcover
language:
- en
price: $60.00

View file

@ -17,7 +17,7 @@ imports:
- ../slots/has_altitude
- ../slots/has_accuracy_in_meters
- ../slots/bounding_box
- ../slots/cadastral_id
- ../slots/has_or_had_identifier
- ../slots/coordinate_reference_system
- ../slots/feature_class
- ../slots/feature_code
@ -159,7 +159,7 @@ classes:
- has_accuracy_in_meters
- has_altitude
- bounding_box
- cadastral_id
- has_or_had_identifier
- coordinate_reference_system
- feature_class
- feature_code
@ -203,6 +203,17 @@ classes:
examples:
- value: 6930126
description: Rijksmuseum GeoNames ID
has_or_had_identifier:
description: >-
Cadastral identifiers for this geospatial place.
MIGRATION NOTE (2026-01-14): Replaces cadastral_id per slot_fixes.yaml.
Use Identifier with identifier_scheme='cadastral' for parcel IDs.
Netherlands: Kadaster perceelnummer format {gemeente}-{sectie}-{perceelnummer}
examples:
- value:
identifier_scheme: cadastral
identifier_value: ASD04-H-4567
description: Amsterdam cadastral parcel identifier
comments:
- Follows TOOI BestuurlijkeRuimte pattern using GeoSPARQL
- 'CRITICAL: NOT a nominal reference - this is measured/surveyed location data'

View file

@ -23,8 +23,8 @@ imports:
- ../slots/has_annotation_by
- ../slots/has_archival_reference
- ../slots/has_arrangement_level
- ../slots/binding_description
- ../slots/binding_provenance
- ../slots/has_or_had_description
- ../slots/has_or_had_provenance
- ../slots/has_or_had_type
- ../slots/bookplate
- ./BindingType
@ -109,8 +109,8 @@ classes:
- has_annotation_by
- archival_reference
- arrangement_level
- binding_description
- binding_provenance
- has_or_had_description
- has_or_had_provenance
- has_or_had_type
- bookplate
- call_number
@ -220,9 +220,27 @@ classes:
binding_description:
required: false
range: string
description: >-
DEPRECATED: Use has_or_had_description instead for binding descriptions.
MIGRATION: 2026-01-15 - Replaced by has_or_had_description slot per Rule 53.
deprecated: "Use has_or_had_description instead"
examples:
- value: "Contemporary blind-stamped pigskin over wooden boards, \nwith brass clasps and corner pieces. Spine with\
\ five raised bands.\n"
has_or_had_description:
required: false
range: string
description: >-
Detailed description of the physical binding of this information carrier.
MIGRATED from binding_description (2026-01-15) per Rule 53.
Describes binding style, materials, decorative elements, and condition.
For carriers like codices, bound manuscripts, and books.
examples:
- value: "Contemporary blind-stamped pigskin over wooden boards, with brass clasps and corner pieces. Spine with five raised bands."
description: Medieval manuscript binding
- value: "Rebound in the 18th century in red morocco with gold tooling."
description: Later rebinding of early printed book
cover_material:
required: false
range: string
@ -338,11 +356,18 @@ classes:
multivalued: true
examples:
- value: British Museum stamp on verso of title page
binding_provenance:
has_or_had_provenance:
required: false
range: string
description: >-
Provenance information related to the physical binding of this information carrier.
MIGRATED from binding_provenance (2026-01-15) per Rule 53.
Describes the historical ownership or commissioning context of the binding,
such as royal presentation bindings or notable previous owners' bindings.
examples:
- value: Bound for presentation to Elizabeth I, royal arms in gold
description: Royal presentation binding provenance
isbn:
required: false
range: string
@ -463,7 +488,7 @@ classes:
- Paper (handmade, watermarked)
folio_count: 641
binding_type: 18th-century full leather
binding_description: 'Rebound in the 18th century in red morocco with gold tooling.
has_or_had_description: 'Rebound in the 18th century in red morocco with gold tooling.
Five raised bands on spine with gilt lettering.

View file

@ -18,8 +18,8 @@ imports:
- ./HeritageRelevance
- ./LanguageProficiency
- ../slots/has_or_had_about_text
- ../slots/is_or_was_real
- ./RealnessStatus
- ../slots/has_or_had_provenance
- ./ProvenanceBlock
- ../slots/has_assessment_date
- ../slots/connections_text
- ../slots/data_source_whatsapp
@ -332,7 +332,7 @@ classes:
'
slots:
- is_or_was_real
- has_or_had_provenance
- data_source_whatsapp
- enriched_date
- enrichment_method_whatsapp
@ -352,14 +352,16 @@ classes:
- value: public_linkedin_profile
no_fabrication:
range: boolean
is_or_was_real:
range: RealnessStatus
has_or_had_provenance:
range: ProvenanceBlock
inlined: true
description: >-
Realness status of the enrichment data.
Indicates whether the enrichment data is real production data or test/synthetic.
Provenance information for the enrichment data.
Contains data source, extraction method, confidence score, and verification status.
examples:
- value:
status: REAL
description: "Verified production data from LinkedIn profile"
description: Real production enrichment data
data_source: "public_linkedin_profile"
extraction_date: "2025-01-14T12:00:00Z"
confidence_score: 0.95
note: "Verified production data from LinkedIn profile"
description: Real production enrichment data with provenance

View file

@ -0,0 +1,122 @@
# Notes class
# Generic class for typed notes with provenance
#
# Generation date: 2026-01-14
# Rule compliance: 0 (LinkML single source of truth), 38 (slot centralization)
# Migration: Supports has_or_had_notes slot (replaces appraisal_notes)
id: https://nde.nl/ontology/hc/class/Notes
name: notes_class
title: Notes Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ../slots/note_type
- ../slots/note_content
- ../slots/note_date
- ../slots/language
- ../slots/specificity_annotation
- ../slots/template_specificity
- ./SpecificityAnnotation
- ./TemplateSpecificityScores
classes:
Notes:
class_uri: skos:note
description: |
A typed note with optional provenance metadata.
**Purpose**:
Notes provides a reusable class for representing documentation notes
across the heritage custodian schema. Supports typed notes (appraisal,
arrangement, conservation, etc.) with language tagging and dates.
**Ontological Alignment**:
- **Primary**: `skos:note` - general note
- **Close**: `rdfs:comment` - comment on resource
**Use Cases**:
- Appraisal notes documenting retention decisions
- Arrangement notes documenting physical organization
- Conservation notes documenting treatments
- Processing notes documenting archival workflow
- General documentation notes
**Replaces**:
- `appraisal_notes` (string) - now typed with note_type
exact_mappings:
- skos:note
close_mappings:
- rdfs:comment
- dcterms:description
slots:
- note_type
- note_content
- note_date
- language
- specificity_annotation
- template_specificity
slot_usage:
note_type:
description: |
The type of note (appraisal, arrangement, conservation, processing, general).
range: string
required: false
examples:
- value: appraisal
description: Appraisal decision documentation
- value: arrangement
description: Physical organization notes
- value: conservation
description: Treatment documentation
note_content:
description: The textual content of the note.
range: string
required: true
note_date:
description: Date the note was created or last updated.
range: date
required: false
language:
description: |
ISO 639-1 two-letter language code for this note.
Examples: "en", "nl", "de", "fr"
range: string
required: false
pattern: "^[a-z]{2}$"
annotations:
custodian_types: '["*"]'
custodian_types_rationale: Generic notes class applicable to all types.
custodian_types_primary: null
specificity_score: 0.3
specificity_rationale: Broadly applicable generic class for documentation notes.
examples:
- value: |
note_type: appraisal
note_content: "Retained all policy files; destroyed duplicate copies and routine correspondence per retention schedule RS-2020-05"
note_date: "2024-03-15"
language: en
description: "Appraisal note documenting retention decisions"
- value: |
note_type: arrangement
note_content: "Maintained original order by correspondent. Created 5 series by function. Rehoused into acid-free folders and boxes."
note_date: "2024-06-01"
language: en
description: "Arrangement note documenting physical organization"

View file

@ -12,10 +12,10 @@ imports:
- ./ReconstructedEntity
- ./BranchType
- ../slots/located_at
- ../slots/branch_description
- ../slots/has_or_had_description
- ../slots/branch_head
- ../slots/branch_id
- ../slots/branch_name
- ../slots/has_or_had_identifier
- ../slots/has_or_had_label
- ../slots/has_or_had_type
- ../slots/contact_point
- ../slots/has_operational_unit
@ -68,8 +68,8 @@ classes:
\ Satellite Galleries**:\n - Main museum → Contemporary Art Wing (off-site)\n - Separate building, curated exhibitions\n\
\ \n4. **Conservation/Research Centers**:\n - Main institution → Conservation Lab (different building)\n - Specialized\
\ facility with own staff\n\n**Example - National Archives Branch**:\n```yaml\nAuxiliaryPlace:\n place_name: \"Regionaal\
\ Historisch Centrum Noord-Holland\"\n auxiliary_place_type: BRANCH_OFFICE\n hosts_branch:\n - branch_id: \"https://nde.nl/ontology/hc/branch/na-rhc-noord-holland\"\
\n branch_name: \"RHC Noord-Holland\"\n branch_type: REGIONAL_OFFICE\n has_operational_unit:\n \
\ Historisch Centrum Noord-Holland\"\n auxiliary_place_type: BRANCH_OFFICE\n hosts_branch:\n - has_or_had_identifier: \"https://nde.nl/ontology/hc/branch/na-rhc-noord-holland\"\
\n has_or_had_label: \"RHC Noord-Holland\"\n branch_type: REGIONAL_OFFICE\n has_operational_unit:\n \
\ - unit_name: \"Reading Room Services\"\n - unit_name: \"Digitization Team\"\n is_branch_of: \"https://nde.nl/ontology/hc/nl-na\"\
\n```\n\n**DISTINCTION FROM schema:branchOf**:\n\nSchema.org `branchOf` links commercial branches (e.g., bank branches).\n\
`org:unitOf` is more appropriate for heritage institutions as it:\n- Models public sector organizational hierarchies\n\
@ -84,10 +84,10 @@ classes:
- schema:branchOf
- schema:department
slots:
- branch_description
- has_or_had_description
- branch_head
- branch_id
- branch_name
- has_or_had_identifier
- has_or_had_label
- has_or_had_type
- contact_point
- has_operational_unit
@ -104,16 +104,24 @@ classes:
- was_derived_from
- was_generated_by
slot_usage:
branch_id:
has_or_had_identifier:
range: uriorcurie
required: true
identifier: true
description: >-
Unique identifier for this organizational branch.
MIGRATED from branch_id (2026-01-14) per Rule 53.
examples:
- value: https://nde.nl/ontology/hc/branch/rm-schiphol-exhibition
description: Rijksmuseum Schiphol exhibition branch
branch_name:
has_or_had_label:
range: string
required: true
multivalued: false
description: >-
Official name of this organizational branch.
MIGRATED from branch_name (2026-01-15) per Rule 53.
This is the formal name of the branch as used in official documents.
examples:
- value: Rijksmuseum Schiphol
description: Airport branch name
@ -148,9 +156,26 @@ classes:
description: Conservation facility type
branch_description:
range: string
description: >-
DEPRECATED: Use has_or_had_description instead.
MIGRATION: 2026-01-15 - Replaced by has_or_had_description slot per Rule 53.
deprecated: "Use has_or_had_description instead"
examples:
- value: Small exhibition space at Schiphol Airport featuring rotating highlights from the Rijksmuseum collection.
description: Branch purpose description
has_or_had_description:
range: string
description: >-
Narrative description of the branch's purpose, role, and activities.
MIGRATED from branch_description (2026-01-15) per Rule 53.
Describes what this branch does, its scope of operations,
and its relationship to the parent organization.
examples:
- value: Small exhibition space at Schiphol Airport featuring rotating highlights from the Rijksmuseum collection.
description: Exhibition branch description
- value: Off-site collection storage facility managing overflow objects and art storage.
description: Storage operations branch
located_at:
range: AuxiliaryPlace
multivalued: true
@ -179,7 +204,7 @@ classes:
inlined_as_list: true
examples:
- value:
branch_name: Schiphol Terminal 2 Kiosk
has_or_had_label: Schiphol Terminal 2 Kiosk
description: Sub-branch of Schiphol exhibition
branch_head:
range: string
@ -241,10 +266,10 @@ classes:
- https://www.w3.org/TR/vcard-rdf/
examples:
- value:
branch_id: https://nde.nl/ontology/hc/branch/rm-schiphol
branch_name: Rijksmuseum Schiphol
has_or_had_identifier: https://nde.nl/ontology/hc/branch/rm-schiphol
has_or_had_label: Rijksmuseum Schiphol
branch_type: EXHIBITION_SPACE
branch_description: Small exhibition space at Schiphol Airport featuring rotating highlights from the collection.
has_or_had_description: Small exhibition space at Schiphol Airport featuring rotating highlights from the collection.
located_at:
- https://nde.nl/ontology/hc/aux-place/rijksmuseum-schiphol
has_operational_unit:
@ -258,10 +283,10 @@ classes:
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804
description: Rijksmuseum Schiphol exhibition branch
- value:
branch_id: https://nde.nl/ontology/hc/branch/rm-depot-operations
branch_name: Collection Storage Operations - Amersfoort
has_or_had_identifier: https://nde.nl/ontology/hc/branch/rm-depot-operations
has_or_had_label: Collection Storage Operations - Amersfoort
branch_type: STORAGE_MANAGEMENT
branch_description: Off-site collection storage facility managing overflow objects and art storage.
has_or_had_description: Off-site collection storage facility managing overflow objects and art storage.
located_at:
- https://nde.nl/ontology/hc/aux-place/rijksmuseum-depot-amersfoort
has_operational_unit:
@ -275,10 +300,10 @@ classes:
refers_to_custodian: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804
description: Rijksmuseum off-site storage operations branch
- value:
branch_id: https://nde.nl/ontology/hc/branch/na-rhc-nh
branch_name: Regionaal Historisch Centrum Noord-Holland
has_or_had_identifier: https://nde.nl/ontology/hc/branch/na-rhc-nh
has_or_had_label: Regionaal Historisch Centrum Noord-Holland
branch_type: REGIONAL_OFFICE
branch_description: Regional archives center serving Noord-Holland province, providing reading room services and archival
has_or_had_description: Regional archives center serving Noord-Holland province, providing reading room services and archival
research support.
is_branch_of: https://nde.nl/ontology/hc/nl-na
staff_count: 25

View file

@ -0,0 +1,207 @@
# RequirementStatus - Status class for structured requirement information
#
# Following the BackupStatus pattern:
# This is a STATUS class that represents the current state of a requirement,
# with structured type classification via RequirementType.
#
# Generation date: 2026-01-15 (created for booking_required migration)
# Rule compliance: 37 (specificity scores), 38 (slot centralization), 39 (RiC-O naming)
#
# ONTOLOGY ALIGNMENT: PROV-O prov:Entity for status with provenance
id: https://nde.nl/ontology/hc/class/RequirementStatus
name: requirement_status_class
title: Requirement Status Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
prov: http://www.w3.org/ns/prov#
skos: http://www.w3.org/2004/02/skos/core#
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
# Shared slots (centralized)
- ../slots/has_or_had_identifier
- ../slots/has_or_had_type
- ../slots/has_or_had_label
- ../slots/has_or_had_description
- ../slots/has_or_had_note
- ../slots/is_or_was_required
- ../slots/begin_of_the_begin
- ../slots/end_of_the_end
# Import the RequirementType for type references
- ./RequirementType
classes:
RequirementStatus:
class_uri: prov:Entity
description: |
Represents the status of a requirement (e.g., booking, registration, appointment).
**DEFINITION**:
RequirementStatus captures structured requirement information including:
- Whether the requirement is active (is_or_was_required boolean)
- The type(s) of requirement (via has_or_had_type → RequirementType)
- Status description (free text details)
- Temporal validity (when this requirement was in effect)
**ONTOLOGY ALIGNMENT**:
| Ontology | Class/Property | Notes |
|----------|----------------|-------|
| **PROV-O** | `prov:Entity` | Primary - entity with provenance |
| **Schema.org** | `schema:isRequired` | Boolean requirement |
| **SKOS** | `skos:Concept` | For type classification |
**RELATIONSHIP TO OTHER CLASSES**:
```
EducationCenter / ReadingRoom / etc.
└── has_or_had_status → RequirementStatus (THIS CLASS)
├── is_or_was_required (boolean - is booking required?)
├── has_or_had_type → RequirementType (what kind of requirement)
├── has_or_had_description (free text details)
└── begin_of_the_begin / end_of_the_end (validity period)
```
**SLOT MIGRATION** (2026-01-15):
This class replaces domain-specific boolean slots:
- booking_required (boolean) → has_or_had_status: RequirementStatus
- appointment_required (boolean) → has_or_had_status: RequirementStatus
- registration_required (boolean) → has_or_had_status: RequirementStatus
**SIMPLE VS STRUCTURED USAGE**:
For simple boolean requirement (just true/false):
```yaml
is_or_was_required: true
```
For structured requirement with details:
```yaml
has_or_had_status:
is_or_was_required: true
has_or_had_type:
- has_or_had_short_code: ADVANCE_BOOKING
has_or_had_description: "Advance booking required for groups of 10+"
```
exact_mappings:
- prov:Entity
close_mappings:
- schema:Action
slots:
- has_or_had_identifier
- is_or_was_required
- has_or_had_type
- has_or_had_label
- has_or_had_description
- has_or_had_note
- begin_of_the_begin
- end_of_the_end
slot_usage:
has_or_had_identifier:
range: uriorcurie
identifier: true
pattern: "^https://nde\\.nl/ontology/hc/requirement-status/[a-z0-9-]+$"
is_or_was_required:
range: boolean
required: true
description: "Whether this requirement is active/mandatory."
examples:
- value: true
description: Booking is required
- value: false
description: Booking is optional (walk-ins welcome)
has_or_had_type:
range: RequirementType
multivalued: true
inlined_as_list: true
description: "The type(s) of requirement (advance booking, group booking, etc.)."
examples:
- value:
- has_or_had_short_code: ADVANCE_BOOKING
description: Advance booking required
has_or_had_description:
range: string
description: "Free text description of the requirement details."
examples:
- value: "Advance booking required for groups of 10 or more. Individual visitors welcome without booking."
has_or_had_note:
range: string
multivalued: true
description: "Additional notes about the requirement."
examples:
- value: "Online booking available at www.museum.nl/book"
- value: "Phone bookings: +31 20 123 4567"
begin_of_the_begin:
range: datetime
description: "When this requirement came into effect."
end_of_the_end:
range: datetime
description: "When this requirement ended (if no longer in effect)."
annotations:
specificity_score: "0.55"
specificity_rationale: "Requirement status applicable to many heritage contexts (education, reading rooms, visits)."
template_specificity: '{"collection_discovery": 0.60, "location_browse": 0.75, "general_heritage": 0.50}'
slot_migration: |
2026-01-15: Created to replace domain-specific requirement boolean slots
- booking_required (boolean) → has_or_had_status (RequirementStatus)
- appointment_required (boolean) → has_or_had_status (RequirementStatus)
comments:
- "RequirementStatus represents structured requirement information"
- "Linked to RequirementType for type classification"
- "Supports temporal validity tracking"
- "CREATED 2026-01-15: Enables migration from domain-specific boolean slots"
examples:
- value:
has_or_had_identifier: https://nde.nl/ontology/hc/requirement-status/rijksmuseum-edu-booking
is_or_was_required: true
has_or_had_type:
- has_or_had_short_code: ADVANCE_BOOKING
has_or_had_label:
- Booking required for education programs@en
- Reservering verplicht voor educatieprogramma's@nl
has_or_had_description: |
Advance booking required for all school groups and educational programs.
Minimum 2 weeks advance booking for groups of 20+.
has_or_had_note:
- "Online booking: educatie@rijksmuseum.nl"
begin_of_the_begin: "2020-01-01T00:00:00Z"
description: Example booking requirement for museum education center
- value:
has_or_had_identifier: https://nde.nl/ontology/hc/requirement-status/archive-reading-room
is_or_was_required: true
has_or_had_type:
- has_or_had_short_code: APPOINTMENT_REQUIRED
has_or_had_description: |
Appointment required for reading room access.
Walk-in visits not possible due to limited seating.
description: Appointment requirement for archive reading room
- value:
has_or_had_identifier: https://nde.nl/ontology/hc/requirement-status/library-open-access
is_or_was_required: false
has_or_had_description: "No booking required. Open access during public hours."
description: No requirement (open access)

Some files were not shown because too many files have changed in this diff Show more