Compare commits

..

No commits in common. "fcb704c97ea3c3db569442d428183e1a4e50822c" and "b68d580c822b055cf22c027269d4066cd5e1d70d" have entirely different histories.

7354 changed files with 168107 additions and 394727 deletions

View file

@ -1,46 +0,0 @@
# Rule: Do Not Delete From slot_fixes.yaml
**Identifier**: `no-deletion-from-slot-fixes`
**Severity**: **CRITICAL**
## Core Directive
**NEVER delete entries from `slot_fixes.yaml`.**
The `slot_fixes.yaml` file serves as the historical record and audit trail for all schema migrations. Removing entries destroys this history and violates the project's data integrity principles.
## Workflow
When processing a migration:
1. **Do NOT Remove**: Never delete the entry for the slot you are working on.
2. **Update `processed`**: Instead, update the `processed` block:
* Set `status: true`.
* Set `date` to the current date (YYYY-MM-DD).
* Add a detailed `notes` string explaining what was done (e.g., "Fully migrated to [new_slot] + [Class] (Rule 53). [File].yaml updated. Slot archived.").
3. **Preserve History**: The entry must remain in the file permanently as a record of the migration.
## Rationale
* **Audit Trail**: We need to know what was migrated, when, and how.
* **Reversibility**: If a migration introduces a bug, the record helps us understand the original state.
* **Completeness**: The file tracks the total progress of the schema refactoring project.
## Example
**WRONG (Deletion)**:
```yaml
# DELETED from file
# - original_slot_id: ...
```
**CORRECT (Update)**:
```yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/has_some_slot
processed:
status: true
date: '2026-01-27'
notes: Fully migrated to has_or_had_new_slot + NewClass (Rule 53).
revision:
...
```

View file

@ -1,32 +0,0 @@
# Rule: Preserve Bespoke Slots Until Refactoring
**Identifier**: `preserve-bespoke-slots-until-refactoring`
**Severity**: **CRITICAL**
## Core Directive
**DO NOT remove or migrate "additional" bespoke slots during generic migration passes unless they are the specific target of the current task.**
## Context
When migrating a specific slot (e.g., `has_approval_date`), you may encounter other bespoke or legacy slots in the same class file (e.g., `innovation_budget`, `operating_budget`).
**YOU MUST**:
* ✅ Migrate ONLY the specific slot you were instructed to work on.
* ✅ Leave other bespoke slots exactly as they are.
* ✅ Focus strictly on the current migration target.
**YOU MUST NOT**:
* ❌ Proactively migrate "nearby" slots just because they look like they need refactoring.
* ❌ Remove slots that seem unused or redundant without specific instruction.
* ❌ "Clean up" the class file by removing legacy attributes.
## Rationale
Refactoring is a separate, planned phase. Mixing opportunistic refactoring with systematic slot migration increases the risk of regression and makes changes harder to review. "We will refactor those later."
## Workflow
1. **Identify Target**: Identify the specific slot(s) assigned for migration (from `slot_fixes.yaml` or user prompt).
2. **Execute Migration**: Apply changes ONLY for those slots.
3. **Ignore Others**: Do not touch other slots in the file, even if they violate other rules (like Rule 39 or Rule 53). Those will be handled in their own dedicated tasks.

View file

@ -1,29 +0,0 @@
# Rule: Slot Fixes File is Authoritative
**Scope:** Schema Migration / Slot Fixes
**Description:**
The file `/Users/kempersc/apps/glam/data/fixes/slot_fixes.yaml` is the **single authoritative source** for tracking slot migrations and fixes.
**Directives:**
1. **Authoritative Source:** Always read and update `/Users/kempersc/apps/glam/data/fixes/slot_fixes.yaml`. Do NOT use `schemas/.../slot_fixes.yaml` as the master list (though you may need to sync them if they diverge, the `data/fixes` version takes precedence).
2. **Processed Status:** When a slot migration is completed (schema updated, data migrated), you MUST update the entry in `slot_fixes.yaml` with a `processed` block containing:
* `status: true`
* `date: 'YYYY-MM-DD'`
* `notes`: Brief description of what was done.
3. **NEVER DELETE:** You MUST NOT delete entries from `slot_fixes.yaml`. Even if a slot is removed from the schema, the record of its fix MUST remain in this file with `status: true`.
4. **Format Compliance:** New slots added during migration must follow proper LinkML format conventions and use `slot_uri` and mappings (`exact_mappings`, `close_mappings`) that reference **legitimate predicates and classes found in `/Users/kempersc/apps/glam/data/ontology/`**.
**Example of Processed Entry:**
```yaml
- original_slot_id: https://nde.nl/ontology/hc/slot/has_old_slot
revision:
- label: has_new_slot
type: slot
- label: NewClass
type: class
processed:
status: true
date: '2026-01-27'
notes: Migrated to has_new_slot + NewClass. Old slot archived.
```

View file

@ -1,68 +0,0 @@
# Rule 62: Verified Ontology Terms Reference
🚨 **CRITICAL**: All `class_uri`, `slot_uri`, and mapping properties (`exact_mappings`, `close_mappings`, etc.) MUST use verified classes and predicates that exist in the local ontology files at `data/ontology/`.
## 1. Verified Ontology Files
The following ontologies are locally available in `data/ontology/`. Always verify terms against these specific files. **NO HALLUCINATIONS ALLOWED.**
**Mandatory Verification Step**: Before using any `class_uri`, `slot_uri`, or mapping URI, you MUST `grep` the term in the local ontology file to confirm it exists.
| Prefix | Namespace | Local File | Key Classes/Predicates (Verified) |
|--------|-----------|------------|-----------------------------------|
| `cpov:` | `http://data.europa.eu/m8g/` | `core-public-organisation-ap.ttl` | `PublicOrganisation`, `contactPage`, `email` |
| `crm:` | `http://www.cidoc-crm.org/cidoc-crm/` | `CIDOC_CRM_v7.1.3.rdf` | `E1_CRM_Entity`, `E5_Event`, `P2_has_type` |
| `rico:` | `https://www.ica.org/standards/RiC/ontology#` | `RiC-O_1-1.rdf` | `Record`, `Agent`, `hasOrHadHolder` (Note: Use v1.1 file) |
| `pico:` | `https://personsincontext.org/model#` | `pico.ttl` | `PersonObservation`, `role` |
| `prov:` | `http://www.w3.org/ns/prov#` | `prov.ttl` | `Activity`, `Agent`, `wasGeneratedBy` |
| `skos:` | `http://www.w3.org/2004/02/skos/core#` | `skos.rdf` | `Concept`, `prefLabel`, `broader` |
| `schema:` | `https://schema.org/` | `frontend/public/ontology/schemaorg.owl` | `Organization`, `Place`, `name`, `url` |
| `dcterms:` | `http://purl.org/dc/terms/` | `dublin_core_elements.rdf` | `identifier`, `title`, `description` |
| `org:` | `http://www.w3.org/ns/org#` | `org.rdf` | `Organization`, `hasMember` |
| `tooi:` | `https://identifier.overheid.nl/tooi/def/ont/` | `tooiont.ttl` | `Overheidsorganisatie` |
| `dcat:` | `http://www.w3.org/ns/dcat#` | `dcat3.ttl` | `Dataset`, `Catalog`, `dataset` |
| `gn:` | `https://www.geonames.org/ontology#` | `geonames_ontology.rdf` | `Feature` |
| `dqv:` | `http://www.w3.org/ns/dqv#` | `dqv.ttl` | `QualityMeasurement`, `hasQualityAnnotation` |
| `premis:` | `http://www.loc.gov/premis/rdf/v3/` | `premis3.owl` | `fixity`, `storedAt`, `Event` |
## 2. Verification Procedure (MANDATORY)
**You MUST verify every term.** Do not assume a term exists just because it sounds standard.
```bash
# 1. Identify the source ontology file
ls data/ontology/
# 2. Grep for the specific term (e.g., 'hasFixity')
grep "hasFixity" data/ontology/premis3.owl
# Result: EMPTY -> Term does not exist! DO NOT USE.
# 3. Grep for the correct term (e.g., 'fixity')
grep "fixity" data/ontology/premis3.owl
# Result: <owl:ObjectProperty rdf:about=".../fixity"> -> Term exists. USE THIS.
```
## 3. LinkML Mapping Requirements
Mappings must be precise and verified.
* `exact_mappings` = `skos:exactMatch` (Semantic equivalence)
* `close_mappings` = `skos:closeMatch` (Near equivalence)
* `related_mappings` = `skos:relatedMatch` (Association)
* `broad_mappings` = `skos:broadMatch` (Broader concept)
* `narrow_mappings` = `skos:narrowMatch` (Narrower concept)
## 4. Prohibited/Invalid Terms (Hallucinations)
Do NOT use these commonly hallucinated or incorrect terms. They have been verified as **non-existent** in our local ontologies:
* ❌ `dqv:ConfidenceScore` (Use `dqv:QualityMeasurement`)
* ❌ `premis:hasFixity` (Use `premis:fixity`)
* ❌ `premis:hasFrameRate` (Verify specific PREMIS properties first)
* ❌ `schema:HeritageBuilding` (Use `schema:LandmarksOrHistoricalBuildings`)
* ❌ `rico:has_provenance` (Use `rico:history`)
* ❌ `rico:hasProvenance` (Use `rico:history`)
* ❌ `schema:archive` (Use `schema:archiveHeld` or `schema:archivedAt`)
**Always verify against the local file content.**

View file

@ -4806,16 +4806,3 @@ def test_historical_addition():
**Schema Version**: v0.2.1 (modular)
**Last Updated**: 2025-12-08
**Maintained By**: GLAM Data Extraction Project
### Rule 61: Slot Fixes Authoritative File
🚨 **CRITICAL**: The file `/Users/kempersc/apps/glam/data/fixes/slot_fixes.yaml` is the AUTHORITATIVE source for slot migrations. NEVER delete entries from this file. Always mark completed migrations with `processed: {status: true}`.
**See**: `.opencode/rules/slot-fixes-authoritative-rule.md` for complete documentation
### Rule 62: Verified Ontology Terms Reference
🚨 **CRITICAL**: All `class_uri`, `slot_uri`, and mappings MUST use verified classes and predicates from local ontology files in `data/ontology/`.
**See**: `.opencode/rules/verified-ontology-terms.md` for the list of verified ontologies and verification procedures.

View file

@ -1,5 +0,0 @@
DualClassLink_archived_20260126.yaml
EducationCredential_archived_20260125.yaml
EducationEntry_archived_20260125.yaml
RealnessStatus_archived_20260114.yaml
TemplateSpecificityScores_archived_20260117.yaml

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -42,8 +42,6 @@ RUN useradd -m -u 1000 -s /bin/bash glam
# Install Python dependencies first (better layer caching)
COPY requirements.txt .
# Install CPU-only PyTorch first to avoid massive CUDA download and runtime issues
RUN pip install --no-cache-dir torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
RUN pip install --no-cache-dir -r requirements.txt
# Copy application code

File diff suppressed because it is too large Load diff

View file

@ -407,7 +407,7 @@ class Settings:
# RAG uses only Qdrant (vectors) and Oxigraph (SPARQL) for retrieval
# LLM Configuration
anthropic_api_key: str = os.getenv("ANTHROPIC_API_KEY", "") or os.getenv("CLAUDE_API_KEY", "")
anthropic_api_key: str = os.getenv("ANTHROPIC_API_KEY", "")
openai_api_key: str = os.getenv("OPENAI_API_KEY", "")
huggingface_api_key: str = os.getenv("HUGGINGFACE_API_KEY", "")
groq_api_key: str = os.getenv("GROQ_API_KEY", "")
@ -1660,7 +1660,6 @@ class MultiSourceRetriever:
only_heritage_relevant: bool = False,
only_wcms: bool = False,
using: str | None = None,
extra_filters: dict[str, Any] | None = None,
) -> list[Any]:
"""Search for persons/staff in the heritage_persons collection.
@ -1673,29 +1672,20 @@ class MultiSourceRetriever:
only_heritage_relevant: Only return heritage-relevant staff
only_wcms: Only return WCMS-registered profiles
using: Optional embedding model to use (e.g., 'minilm_384', 'openai_1536')
extra_filters: Optional extra filters for Qdrant
Returns:
List of RetrievedPerson objects
"""
if self.qdrant:
try:
# Dynamically check if qdrant.search_persons supports extra_filters
# This handles case where HybridRetriever signature varies
import inspect
sig = inspect.signature(self.qdrant.search_persons)
kwargs = {
"query": query,
"k": k,
"filter_custodian": filter_custodian,
"only_heritage_relevant": only_heritage_relevant,
"only_wcms": only_wcms,
"using": using,
}
if "extra_filters" in sig.parameters:
kwargs["extra_filters"] = extra_filters
return self.qdrant.search_persons(**kwargs) # type: ignore[no-any-return]
return self.qdrant.search_persons( # type: ignore[no-any-return]
query=query,
k=k,
filter_custodian=filter_custodian,
only_heritage_relevant=only_heritage_relevant,
only_wcms=only_wcms,
using=using,
)
except Exception as e:
logger.error(f"Person search failed: {e}")
return []
@ -2762,68 +2752,16 @@ async def person_search(request: PersonSearchRequest) -> PersonSearchResponse:
)
try:
# Augment query for better recall on domain names if it looks like a domain search
# "nos" -> "nos email domain nos" to guide vector search towards email addresses
search_query = request.query
extra_filters = None
# 1. Email/Domain Detection Logic
is_email_like = "@" in search_query
# Check for common TLDs at the end of the query or at the end of words
common_tlds = ['.nl', '.com', '.org', '.net', '.eu', '.be', '.de', '.edu', '.gov', '.uk', '.fr', '.it', '.es']
is_domain_like = any(tld in search_query.lower() for tld in common_tlds)
# 2. Construct Filters
if is_email_like or is_domain_like:
logger.info(f"[PersonSearch] Email/Domain pattern detected: '{search_query}'")
# If explicit @ is present, we might want to strip leading @ for better matching
# e.g. "@nos.nl" -> "nos.nl"
clean_term = search_query.strip()
if clean_term.startswith("@"):
clean_term = clean_term[1:]
# Apply MatchText filter on email field
# This prioritizes email matches by strictly filtering for them first
extra_filters = {"email": {"match": {"text": clean_term}}}
elif len(search_query.split()) == 1 and len(search_query) > 2:
# Heuristic: single word queries might be domain searches (e.g. "nos", "leiden")
# We use MatchText filtering on email field to find substring matches
# Qdrant "match": {"text": "nos"} performs token-based matching
extra_filters = {"email": {"match": {"text": search_query}}}
logger.info(f"[PersonSearch] Potential domain search detected for '{search_query}'. Applying strict email filter: {extra_filters}")
logger.info(f"[PersonSearch] Executing search for '{search_query}' (extra_filters={extra_filters})")
# Use the hybrid retriever's person search
results = retriever.search_persons(
query=search_query,
query=request.query,
k=request.k,
filter_custodian=request.filter_custodian,
only_heritage_relevant=request.only_heritage_relevant,
only_wcms=request.only_wcms,
using=request.embedding_model, # Pass embedding model
extra_filters=extra_filters,
)
# FALLBACK: If strict domain filter yielded no results, try standard vector search
# This fixes the issue where searching for names like "willem" (which look like domains)
# would fail because they don't appear in emails.
if extra_filters and not results:
logger.info(f"[PersonSearch] No results with email filter for '{search_query}'. Falling back to standard vector search.")
results = retriever.search_persons(
query=search_query,
k=request.k,
filter_custodian=request.filter_custodian,
only_heritage_relevant=request.only_heritage_relevant,
only_wcms=request.only_wcms,
using=request.embedding_model,
extra_filters=None, # Disable filter for fallback
)
logger.info(f"[PersonSearch] Fallback search returned {len(results)} results")
logger.info(f"[PersonSearch] Final result count: {len(results)}")
# Determine which embedding model was actually used
embedding_model_used = None
qdrant = retriever.qdrant
@ -3563,21 +3501,6 @@ async def dspy_query(request: DSPyQueryRequest) -> DSPyQueryResponse:
logger.info(f"LLM provider requested: {requested_provider} (request.llm_provider={request.llm_provider}, server default={settings.llm_provider})")
# Check if requested provider has API key configured - fail early if not
provider_api_keys = {
"zai": settings.zai_api_token,
"groq": settings.groq_api_key,
"anthropic": settings.anthropic_api_key,
"openai": settings.openai_api_key,
"huggingface": settings.huggingface_api_key,
}
if requested_provider in provider_api_keys and not provider_api_keys[requested_provider]:
raise ValueError(
f"LLM provider '{requested_provider}' was requested but its API key is not configured. "
f"Please set the appropriate environment variable (e.g., ANTHROPIC_API_KEY or CLAUDE_API_KEY for anthropic)."
)
# Provider configuration priority: requested provider first, then fallback chain
providers_to_try = [requested_provider]
# Add fallback chain (but not duplicates)
@ -4278,22 +4201,6 @@ async def stream_dspy_query_response(
llm_model_used: str | None = None
lm = None
# Check if requested provider has API key configured - fail early if not
provider_api_keys = {
"zai": settings.zai_api_token,
"groq": settings.groq_api_key,
"anthropic": settings.anthropic_api_key,
"openai": settings.openai_api_key,
"huggingface": settings.huggingface_api_key,
}
if requested_provider in provider_api_keys and not provider_api_keys[requested_provider]:
yield emit_error(
f"LLM provider '{requested_provider}' was requested but its API key is not configured. "
f"Please set the appropriate environment variable (e.g., ANTHROPIC_API_KEY or CLAUDE_API_KEY for anthropic)."
)
return
providers_to_try = [requested_provider]
for fallback in ["zai", "groq", "anthropic", "openai"]:
if fallback not in providers_to_try:

View file

@ -1,846 +0,0 @@
"""
Multi-Embedding Retriever for Heritage Data
Supports multiple embedding models using Qdrant's named vectors feature.
This enables:
- A/B testing different embedding models
- Cost optimization (cheap local embeddings vs paid API embeddings)
- Gradual migration between embedding models
- Fallback when one model is unavailable
Supported Embedding Models:
- openai_1536: text-embedding-3-small (1536-dim, $0.02/1M tokens)
- minilm_384: all-MiniLM-L6-v2 (384-dim, free/local)
- bge_768: bge-base-en-v1.5 (768-dim, free/local, high quality)
Collection Architecture:
Each collection has named vectors for each embedding model:
heritage_custodians:
vectors:
"openai_1536": VectorParams(size=1536)
"minilm_384": VectorParams(size=384)
payload: {name, ghcid, institution_type, ...}
heritage_persons:
vectors:
"openai_1536": VectorParams(size=1536)
"minilm_384": VectorParams(size=384)
payload: {name, headline, custodian_name, ...}
Usage:
retriever = MultiEmbeddingRetriever()
# Search with default model (auto-select based on availability)
results = retriever.search("museums in Amsterdam")
# Search with specific model
results = retriever.search("museums in Amsterdam", using="minilm_384")
# A/B test comparison
comparison = retriever.compare_models("museums in Amsterdam")
"""
import hashlib
import logging
import os
from dataclasses import dataclass, field
from enum import Enum
from typing import Any, Literal
logger = logging.getLogger(__name__)
class EmbeddingModel(str, Enum):
"""Supported embedding models with their configurations."""
OPENAI_1536 = "openai_1536"
MINILM_384 = "minilm_384"
BGE_768 = "bge_768"
@property
def dimension(self) -> int:
"""Get the vector dimension for this model."""
dims = {
"openai_1536": 1536,
"minilm_384": 384,
"bge_768": 768,
}
return dims[self.value]
@property
def model_name(self) -> str:
"""Get the actual model name for loading."""
names = {
"openai_1536": "text-embedding-3-small",
"minilm_384": "all-MiniLM-L6-v2",
"bge_768": "BAAI/bge-base-en-v1.5",
}
return names[self.value]
@property
def is_local(self) -> bool:
"""Check if this model runs locally (no API calls)."""
return self.value in ("minilm_384", "bge_768")
@property
def cost_per_1m_tokens(self) -> float:
"""Approximate cost per 1M tokens (0 for local models)."""
costs = {
"openai_1536": 0.02,
"minilm_384": 0.0,
"bge_768": 0.0,
}
return costs[self.value]
@dataclass
class MultiEmbeddingConfig:
"""Configuration for multi-embedding retriever."""
# Qdrant connection
qdrant_host: str = "localhost"
qdrant_port: int = 6333
qdrant_https: bool = False
qdrant_prefix: str | None = None
# API keys
openai_api_key: str | None = None
# Default embedding model preference order
# First available model is used if no explicit model is specified
model_preference: list[EmbeddingModel] = field(default_factory=lambda: [
EmbeddingModel.MINILM_384, # Free, fast, good quality
EmbeddingModel.OPENAI_1536, # Higher quality, paid
EmbeddingModel.BGE_768, # Free, high quality, slower
])
# Collection names
institutions_collection: str = "heritage_custodians"
persons_collection: str = "heritage_persons"
# Search defaults
default_k: int = 10
class MultiEmbeddingRetriever:
"""Retriever supporting multiple embedding models via Qdrant named vectors.
This class manages multiple embedding models and allows searching with
any available model. It handles:
- Model lazy-loading
- Automatic model selection based on availability
- Named vector creation and search
- A/B testing between models
"""
def __init__(self, config: MultiEmbeddingConfig | None = None):
"""Initialize multi-embedding retriever.
Args:
config: Configuration options. If None, uses environment variables.
"""
self.config = config or self._config_from_env()
# Lazy-loaded clients
self._qdrant_client = None
self._openai_client = None
self._st_models: dict[str, Any] = {} # Sentence transformer models
# Track available models per collection
self._available_models: dict[str, set[EmbeddingModel]] = {}
# Track whether each collection uses named vectors (vs single unnamed vector)
self._uses_named_vectors: dict[str, bool] = {}
logger.info(f"MultiEmbeddingRetriever initialized with preference: {[m.value for m in self.config.model_preference]}")
@staticmethod
def _config_from_env() -> MultiEmbeddingConfig:
"""Create configuration from environment variables."""
use_production = os.getenv("QDRANT_USE_PRODUCTION", "false").lower() == "true"
if use_production:
return MultiEmbeddingConfig(
qdrant_host=os.getenv("QDRANT_PROD_HOST", "bronhouder.nl"),
qdrant_port=443,
qdrant_https=True,
qdrant_prefix=os.getenv("QDRANT_PROD_PREFIX", "qdrant"),
openai_api_key=os.getenv("OPENAI_API_KEY"),
)
else:
return MultiEmbeddingConfig(
qdrant_host=os.getenv("QDRANT_HOST", "localhost"),
qdrant_port=int(os.getenv("QDRANT_PORT", "6333")),
openai_api_key=os.getenv("OPENAI_API_KEY"),
)
@property
def qdrant_client(self):
"""Lazy-load Qdrant client."""
if self._qdrant_client is None:
from qdrant_client import QdrantClient
if self.config.qdrant_https:
self._qdrant_client = QdrantClient(
host=self.config.qdrant_host,
port=self.config.qdrant_port,
https=True,
prefix=self.config.qdrant_prefix,
prefer_grpc=False,
timeout=30,
)
logger.info(f"Connected to Qdrant: https://{self.config.qdrant_host}/{self.config.qdrant_prefix or ''}")
else:
self._qdrant_client = QdrantClient(
host=self.config.qdrant_host,
port=self.config.qdrant_port,
)
logger.info(f"Connected to Qdrant: {self.config.qdrant_host}:{self.config.qdrant_port}")
return self._qdrant_client
@property
def openai_client(self):
"""Lazy-load OpenAI client."""
if self._openai_client is None:
if not self.config.openai_api_key:
raise RuntimeError("OpenAI API key not configured")
import openai
self._openai_client = openai.OpenAI(api_key=self.config.openai_api_key)
return self._openai_client
def _load_sentence_transformer(self, model: EmbeddingModel) -> Any:
"""Lazy-load a sentence-transformers model.
Args:
model: The embedding model to load
Returns:
Loaded SentenceTransformer model
"""
if model.value not in self._st_models:
try:
from sentence_transformers import SentenceTransformer
self._st_models[model.value] = SentenceTransformer(model.model_name)
logger.info(f"Loaded sentence-transformers model: {model.model_name}")
except ImportError:
raise RuntimeError(
"sentence-transformers not installed. Run: pip install sentence-transformers"
)
return self._st_models[model.value]
def get_embedding(self, text: str, model: EmbeddingModel) -> list[float]:
"""Get embedding vector for text using specified model.
Args:
text: Text to embed
model: Embedding model to use
Returns:
Embedding vector as list of floats
"""
if model == EmbeddingModel.OPENAI_1536:
response = self.openai_client.embeddings.create(
input=text,
model=model.model_name,
)
return response.data[0].embedding
elif model in (EmbeddingModel.MINILM_384, EmbeddingModel.BGE_768):
st_model = self._load_sentence_transformer(model)
embedding = st_model.encode(text)
return embedding.tolist()
else:
raise ValueError(f"Unknown embedding model: {model}")
def get_embeddings_batch(
self,
texts: list[str],
model: EmbeddingModel,
batch_size: int = 32,
) -> list[list[float]]:
"""Get embedding vectors for multiple texts.
Args:
texts: List of texts to embed
model: Embedding model to use
batch_size: Batch size for processing
Returns:
List of embedding vectors
"""
if not texts:
return []
if model == EmbeddingModel.OPENAI_1536:
# OpenAI batch API (max 2048 per request)
all_embeddings = []
for i in range(0, len(texts), 2048):
batch = texts[i:i + 2048]
response = self.openai_client.embeddings.create(
input=batch,
model=model.model_name,
)
batch_embeddings = [item.embedding for item in sorted(response.data, key=lambda x: x.index)]
all_embeddings.extend(batch_embeddings)
return all_embeddings
elif model in (EmbeddingModel.MINILM_384, EmbeddingModel.BGE_768):
st_model = self._load_sentence_transformer(model)
embeddings = st_model.encode(texts, batch_size=batch_size, show_progress_bar=len(texts) > 100)
return embeddings.tolist()
else:
raise ValueError(f"Unknown embedding model: {model}")
def get_available_models(self, collection_name: str) -> set[EmbeddingModel]:
"""Get the embedding models available for a collection.
Checks which named vectors exist in the collection.
For single-vector collections, returns models matching the dimension.
Args:
collection_name: Name of the Qdrant collection
Returns:
Set of available EmbeddingModel values
"""
if collection_name in self._available_models:
return self._available_models[collection_name]
try:
info = self.qdrant_client.get_collection(collection_name)
vectors_config = info.config.params.vectors
available = set()
uses_named_vectors = False
# Check for named vectors (dict of vector configs)
if isinstance(vectors_config, dict):
# Named vectors - each key is a vector name
uses_named_vectors = True
for vector_name in vectors_config.keys():
try:
model = EmbeddingModel(vector_name)
available.add(model)
except ValueError:
logger.warning(f"Unknown vector name in collection: {vector_name}")
else:
# Single unnamed vector - check dimension to find compatible model
# Note: This doesn't mean we can use `using=model.value` in queries
uses_named_vectors = False
if hasattr(vectors_config, 'size'):
dim = vectors_config.size
for model in EmbeddingModel:
if model.dimension == dim:
available.add(model)
# Store both available models and whether named vectors are used
self._available_models[collection_name] = available
self._uses_named_vectors[collection_name] = uses_named_vectors
if uses_named_vectors:
logger.info(f"Collection '{collection_name}' uses named vectors: {[m.value for m in available]}")
else:
logger.info(f"Collection '{collection_name}' uses single vector (compatible with: {[m.value for m in available]})")
return available
except Exception as e:
logger.warning(f"Could not get available models for {collection_name}: {e}")
return set()
def uses_named_vectors(self, collection_name: str) -> bool:
"""Check if a collection uses named vectors (vs single unnamed vector).
Args:
collection_name: Name of the Qdrant collection
Returns:
True if collection has named vectors, False for single-vector collections
"""
# Ensure models are loaded (populates _uses_named_vectors)
self.get_available_models(collection_name)
return self._uses_named_vectors.get(collection_name, False)
def select_model(
self,
collection_name: str,
preferred: EmbeddingModel | None = None,
) -> EmbeddingModel | None:
"""Select the best available embedding model for a collection.
Args:
collection_name: Name of the collection
preferred: Preferred model (used if available)
Returns:
Selected EmbeddingModel or None if none available
"""
available = self.get_available_models(collection_name)
if not available:
# No named vectors - check if we can use any model
# This happens for legacy single-vector collections
try:
info = self.qdrant_client.get_collection(collection_name)
vectors_config = info.config.params.vectors
# Get vector dimension
dim = None
if hasattr(vectors_config, 'size'):
dim = vectors_config.size
elif isinstance(vectors_config, dict):
# Get first vector config
first_config = next(iter(vectors_config.values()), None)
if first_config and hasattr(first_config, 'size'):
dim = first_config.size
if dim:
for model in self.config.model_preference:
if model.dimension == dim:
return model
except Exception:
pass
return None
# If preferred model is available, use it
if preferred and preferred in available:
return preferred
# Otherwise, follow preference order
for model in self.config.model_preference:
if model in available:
# Check if model is usable (has API key if needed)
if model == EmbeddingModel.OPENAI_1536 and not self.config.openai_api_key:
continue
return model
return None
def search(
self,
query: str,
collection_name: str | None = None,
k: int | None = None,
using: EmbeddingModel | str | None = None,
filter_conditions: dict[str, Any] | None = None,
) -> list[dict[str, Any]]:
"""Search for similar documents using specified or auto-selected model.
Args:
query: Search query text
collection_name: Collection to search (default: institutions)
k: Number of results
using: Embedding model to use (auto-selected if None)
filter_conditions: Optional Qdrant filter conditions
Returns:
List of results with scores and payloads
"""
collection_name = collection_name or self.config.institutions_collection
k = k or self.config.default_k
# Resolve model
if using is not None:
if isinstance(using, str):
model = EmbeddingModel(using)
else:
model = using
else:
model = self.select_model(collection_name)
if model is None:
raise RuntimeError(f"No compatible embedding model for collection '{collection_name}'")
logger.info(f"Searching '{collection_name}' with {model.value}: {query[:50]}...")
# Get query embedding
query_vector = self.get_embedding(query, model)
# Build filter
from qdrant_client.http import models
query_filter = None
if filter_conditions:
query_filter = models.Filter(
must=[
models.FieldCondition(
key=key,
match=models.MatchValue(value=value),
)
for key, value in filter_conditions.items()
]
)
# Check if collection uses named vectors (not just single unnamed vector)
# Only pass `using=model.value` if collection has actual named vectors
use_named_vector = self.uses_named_vectors(collection_name)
# Search
if use_named_vector:
results = self.qdrant_client.query_points(
collection_name=collection_name,
query=query_vector,
using=model.value,
limit=k,
with_payload=True,
query_filter=query_filter,
)
else:
# Legacy single-vector search
results = self.qdrant_client.query_points(
collection_name=collection_name,
query=query_vector,
limit=k,
with_payload=True,
query_filter=query_filter,
)
return [
{
"id": str(point.id),
"score": point.score,
"model": model.value,
"payload": point.payload or {},
}
for point in results.points
]
def search_persons(
self,
query: str,
k: int | None = None,
using: EmbeddingModel | str | None = None,
filter_custodian: str | None = None,
only_heritage_relevant: bool = False,
only_wcms: bool = False,
) -> list[dict[str, Any]]:
"""Search for persons/staff in the heritage_persons collection.
Args:
query: Search query text
k: Number of results
using: Embedding model to use
filter_custodian: Optional custodian slug to filter by
only_heritage_relevant: Only return heritage-relevant staff
only_wcms: Only return WCMS-registered profiles (heritage sector users)
Returns:
List of person results with scores
"""
k = k or self.config.default_k
# Build filters
filters = {}
if filter_custodian:
filters["custodian_slug"] = filter_custodian
if only_wcms:
filters["has_wcms"] = True
# Search with over-fetch for post-filtering
results = self.search(
query=query,
collection_name=self.config.persons_collection,
k=k * 2,
using=using,
filter_conditions=filters if filters else None,
)
# Post-filter for heritage_relevant if needed
if only_heritage_relevant:
results = [r for r in results if r.get("payload", {}).get("heritage_relevant", False)]
# Format results
formatted = []
for r in results[:k]:
payload = r.get("payload", {})
formatted.append({
"person_id": payload.get("staff_id", "") or hashlib.md5(
f"{payload.get('custodian_slug', '')}:{payload.get('name', '')}".encode()
).hexdigest()[:16],
"name": payload.get("name", ""),
"headline": payload.get("headline"),
"custodian_name": payload.get("custodian_name"),
"custodian_slug": payload.get("custodian_slug"),
"location": payload.get("location"),
"heritage_relevant": payload.get("heritage_relevant", False),
"heritage_type": payload.get("heritage_type"),
"linkedin_url": payload.get("linkedin_url"),
"score": r["score"],
"model": r["model"],
})
return formatted
def compare_models(
self,
query: str,
collection_name: str | None = None,
k: int = 10,
models: list[EmbeddingModel] | None = None,
) -> dict[str, Any]:
"""A/B test comparison of multiple embedding models.
Args:
query: Search query
collection_name: Collection to search
k: Number of results per model
models: Models to compare (default: all available)
Returns:
Dict with results per model and overlap analysis
"""
collection_name = collection_name or self.config.institutions_collection
# Determine which models to compare
available = self.get_available_models(collection_name)
if models:
models_to_test = [m for m in models if m in available]
else:
models_to_test = list(available)
if not models_to_test:
return {"error": "No models available for comparison"}
results = {}
all_ids = {}
for model in models_to_test:
try:
model_results = self.search(
query=query,
collection_name=collection_name,
k=k,
using=model,
)
results[model.value] = model_results
all_ids[model.value] = {r["id"] for r in model_results}
except Exception as e:
results[model.value] = {"error": str(e)}
all_ids[model.value] = set()
# Calculate overlap between models
overlap = {}
model_values = list(all_ids.keys())
for i, m1 in enumerate(model_values):
for m2 in model_values[i + 1:]:
if all_ids[m1] and all_ids[m2]:
intersection = all_ids[m1] & all_ids[m2]
union = all_ids[m1] | all_ids[m2]
jaccard = len(intersection) / len(union) if union else 0
overlap[f"{m1}_vs_{m2}"] = {
"jaccard_similarity": round(jaccard, 3),
"common_results": len(intersection),
"total_unique": len(union),
}
return {
"query": query,
"collection": collection_name,
"k": k,
"results": results,
"overlap_analysis": overlap,
}
def create_multi_embedding_collection(
self,
collection_name: str,
models: list[EmbeddingModel] | None = None,
) -> bool:
"""Create a new collection with named vectors for multiple embedding models.
Args:
collection_name: Name for the new collection
models: Embedding models to support (default: all)
Returns:
True if created successfully
"""
from qdrant_client.http.models import Distance, VectorParams
models = models or list(EmbeddingModel)
vectors_config = {
model.value: VectorParams(
size=model.dimension,
distance=Distance.COSINE,
)
for model in models
}
try:
self.qdrant_client.create_collection(
collection_name=collection_name,
vectors_config=vectors_config,
)
logger.info(f"Created multi-embedding collection '{collection_name}' with {[m.value for m in models]}")
# Clear cache
self._available_models.pop(collection_name, None)
return True
except Exception as e:
logger.error(f"Failed to create collection: {e}")
return False
def add_documents_multi_embedding(
self,
documents: list[dict[str, Any]],
collection_name: str,
models: list[EmbeddingModel] | None = None,
batch_size: int = 100,
) -> int:
"""Add documents with embeddings from multiple models.
Args:
documents: List of documents with 'text' and optional 'metadata' fields
collection_name: Target collection
models: Models to generate embeddings for (default: all available)
batch_size: Batch size for processing
Returns:
Number of documents added
"""
from qdrant_client.http import models as qmodels
# Determine which models to use
available = self.get_available_models(collection_name)
if models:
models_to_use = [m for m in models if m in available]
else:
models_to_use = list(available)
if not models_to_use:
raise RuntimeError(f"No embedding models available for collection '{collection_name}'")
# Filter valid documents
valid_docs = [d for d in documents if d.get("text")]
total_indexed = 0
for i in range(0, len(valid_docs), batch_size):
batch = valid_docs[i:i + batch_size]
texts = [d["text"] for d in batch]
# Generate embeddings for each model
embeddings_by_model = {}
for model in models_to_use:
try:
embeddings_by_model[model] = self.get_embeddings_batch(texts, model)
except Exception as e:
logger.warning(f"Failed to get {model.value} embeddings: {e}")
if not embeddings_by_model:
continue
# Create points with named vectors
points = []
for j, doc in enumerate(batch):
text = doc["text"]
metadata = doc.get("metadata", {})
point_id = doc.get("id") or hashlib.md5(text.encode()).hexdigest()
# Build named vectors dict
vectors = {}
for model, model_embeddings in embeddings_by_model.items():
vectors[model.value] = model_embeddings[j]
points.append(qmodels.PointStruct(
id=point_id,
vector=vectors,
payload={
"text": text,
**metadata,
}
))
# Upsert batch
self.qdrant_client.upsert(
collection_name=collection_name,
points=points,
)
total_indexed += len(points)
logger.info(f"Indexed {total_indexed}/{len(valid_docs)} documents with {len(models_to_use)} models")
return total_indexed
def get_stats(self) -> dict[str, Any]:
"""Get statistics about collections and available models.
Returns:
Dict with collection stats and model availability
"""
stats = {
"config": {
"qdrant_host": self.config.qdrant_host,
"qdrant_port": self.config.qdrant_port,
"model_preference": [m.value for m in self.config.model_preference],
"openai_available": bool(self.config.openai_api_key),
},
"collections": {},
}
for collection_name in [self.config.institutions_collection, self.config.persons_collection]:
try:
info = self.qdrant_client.get_collection(collection_name)
available_models = self.get_available_models(collection_name)
selected_model = self.select_model(collection_name)
stats["collections"][collection_name] = {
"vectors_count": info.vectors_count,
"points_count": info.points_count,
"status": info.status.value if info.status else "unknown",
"available_models": [m.value for m in available_models],
"selected_model": selected_model.value if selected_model else None,
}
except Exception as e:
stats["collections"][collection_name] = {"error": str(e)}
return stats
def close(self):
"""Close all connections."""
if self._qdrant_client:
self._qdrant_client.close()
self._qdrant_client = None
self._st_models.clear()
self._available_models.clear()
self._uses_named_vectors.clear()
def create_multi_embedding_retriever(use_production: bool | None = None) -> MultiEmbeddingRetriever:
"""Factory function to create a MultiEmbeddingRetriever.
Args:
use_production: If True, connect to production Qdrant.
Defaults to QDRANT_USE_PRODUCTION env var.
Returns:
Configured MultiEmbeddingRetriever instance
"""
if use_production is None:
use_production = os.getenv("QDRANT_USE_PRODUCTION", "").lower() in ("true", "1", "yes")
if use_production:
config = MultiEmbeddingConfig(
qdrant_host=os.getenv("QDRANT_PROD_HOST", "bronhouder.nl"),
qdrant_port=443,
qdrant_https=True,
qdrant_prefix=os.getenv("QDRANT_PROD_PREFIX", "qdrant"),
openai_api_key=os.getenv("OPENAI_API_KEY"),
)
else:
config = MultiEmbeddingConfig(
qdrant_host=os.getenv("QDRANT_HOST", "localhost"),
qdrant_port=int(os.getenv("QDRANT_PORT", "6333")),
openai_api_key=os.getenv("OPENAI_API_KEY"),
)
return MultiEmbeddingRetriever(config)

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,44 +0,0 @@
fixes:
- orignal_slot_id: /Users/kempersc/apps/glam/schemas/20251121/linkml/modules/slots/archive_branches.yaml
revision:
- label: has_or_had_branch
type: slot
- label: Branch
type: class
- original_slot_id: /Users/kempersc/apps/glam/schemas/20251121/linkml/modules/slots/archive_path.yaml
revision:
- label: has_or_had_provenance_path
type: slot
- label: ProvenancePath
type: class
- original_slot_id: /Users/kempersc/apps/glam/schemas/20251121/linkml/modules/slots/archive_series.yaml
revision:
- label: is_or_was_part_of_series
type: slot
- label: Series
type: class
- orignal_slot_id: /Users/kempersc/apps/glam/schemas/20251121/linkml/modules/slots/condition_of_access.yaml
revision:
- label: has_or_had_condition_of_access
type: slot
- label: ConditionofAccess
type: class
- original_slot_id: /Users/kempersc/apps/glam/schemas/20251121/linkml/modules/slots/connection_heritage_relevant.yaml
revision:
- label: is_or_was_related_to
type: slot
- label: Entity
type: class
- original_slot_id: /Users/kempersc/apps/glam/schemas/20251121/linkml/modules/slots/connection_heritage_type.yaml
revision:
- label: has_or_had_heritage_type
type: slot
- label: HeritageType
type: class
- original_slot_id: https://nde.nl/ontology/hc/slot/was_retrieved_at
revision:
- label: is_or_was_retrieved_at
type: slot
- label: TimeSpan
type: class
-

View file

@ -73,9 +73,6 @@ This document catalogs all ontologies used in the GLAM Heritage Custodian projec
|------|----------|---------|--------|-----------|
| `skos.rdf` | SKOS (Simple Knowledge Org System) | 2009 | https://www.w3.org/TR/skos-reference/ | `skos:` |
| `dublin_core_elements.rdf` | Dublin Core Elements | 1.1 | https://www.dublincore.org/specifications/dublin-core/ | `dc:` |
| `dcterms.rdf` | DCMI Metadata Terms (RDF) | 2020 | https://www.dublincore.org/specifications/dublin-core/dcmi-terms/dublin_core_terms.rdf | `dcterms:` |
| `dctype.rdf` | DCMI Type Vocabulary | 2012 | https://www.dublincore.org/specifications/dublin-core/dcmi-type-vocabulary/ | `dcmitype:` |
| `oa.ttl` | Open Annotation Data Model | 2013 | https://www.w3.org/TR/annotation-vocab/ | `oa:` |
| `dcat3.ttl` | DCAT (Data Catalog Vocabulary) | 3.0 | https://www.w3.org/TR/vocab-dcat-3/ | `dcat:` |
| `schemaorg.owl` | Schema.org | 2024 | https://schema.org/ | `schema:` |
| `vcard.rdf` | vCard Ontology | 4.0 | https://www.w3.org/TR/vcard-rdf/ | `vcard:` |

View file

@ -1 +0,0 @@
404: Not Found

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,152 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rdf:RDF [
<!ENTITY rdfns 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
<!ENTITY rdfsns 'http://www.w3.org/2000/01/rdf-schema#'>
<!ENTITY dcns 'http://purl.org/dc/elements/1.1/'>
<!ENTITY dctermsns 'http://purl.org/dc/terms/'>
<!ENTITY dctypens 'http://purl.org/dc/dcmitype/'>
<!ENTITY dcamns 'http://purl.org/dc/dcam/'>
<!ENTITY skosns 'http://www.w3.org/2004/02/skos/core#'>
<!ENTITY owlns 'http://www.w3.org/2002/07/owl#'>
]>
<rdf:RDF xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:dcam="http://purl.org/dc/dcam/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<rdf:Description rdf:about="http://purl.org/dc/dcmitype/">
<dcterms:title xml:lang="en">DCMI Type Vocabulary</dcterms:title>
<dcterms:publisher rdf:resource="http://purl.org/dc/aboutdcmi#DCMI"/>
<dcterms:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2012-06-14</dcterms:modified>
</rdf:Description>
<rdf:Description rdf:about="http://purl.org/dc/dcmitype/Collection">
<rdfs:label xml:lang="en">Collection</rdfs:label>
<rdfs:comment xml:lang="en">An aggregation of resources.</rdfs:comment>
<dcterms:description xml:lang="en">A collection is described as a group; its parts may also be separately described.</dcterms:description>
<rdfs:isDefinedBy rdf:resource="http://purl.org/dc/dcmitype/"/>
<dcterms:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2000-07-11</dcterms:issued>
<dcterms:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2008-01-14</dcterms:modified>
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<dcterms:hasVersion rdf:resource="http://dublincore.org/usage/terms/history/#Collection-003"/>
<dcam:memberOf rdf:resource="http://purl.org/dc/terms/DCMIType"/>
</rdf:Description>
<rdf:Description rdf:about="http://purl.org/dc/dcmitype/Dataset">
<rdfs:label xml:lang="en">Dataset</rdfs:label>
<rdfs:comment xml:lang="en">Data encoded in a defined structure.</rdfs:comment>
<dcterms:description xml:lang="en">Examples include lists, tables, and databases. A dataset may be useful for direct machine processing.</dcterms:description>
<rdfs:isDefinedBy rdf:resource="http://purl.org/dc/dcmitype/"/>
<dcterms:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2000-07-11</dcterms:issued>
<dcterms:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2008-01-14</dcterms:modified>
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<dcterms:hasVersion rdf:resource="http://dublincore.org/usage/terms/history/#Dataset-003"/>
<dcam:memberOf rdf:resource="http://purl.org/dc/terms/DCMIType"/>
</rdf:Description>
<rdf:Description rdf:about="http://purl.org/dc/dcmitype/Event">
<rdfs:label xml:lang="en">Event</rdfs:label>
<rdfs:comment xml:lang="en">A non-persistent, time-based occurrence.</rdfs:comment>
<dcterms:description xml:lang="en">Metadata for an event provides descriptive information that is the basis for discovery of the purpose, location, duration, and responsible agents associated with an event. Examples include an exhibition, webcast, conference, workshop, open day, performance, battle, trial, wedding, tea party, conflagration.</dcterms:description>
<rdfs:isDefinedBy rdf:resource="http://purl.org/dc/dcmitype/"/>
<dcterms:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2000-07-11</dcterms:issued>
<dcterms:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2008-01-14</dcterms:modified>
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<dcterms:hasVersion rdf:resource="http://dublincore.org/usage/terms/history/#Event-003"/>
<dcam:memberOf rdf:resource="http://purl.org/dc/terms/DCMIType"/>
</rdf:Description>
<rdf:Description rdf:about="http://purl.org/dc/dcmitype/Image">
<rdfs:label xml:lang="en">Image</rdfs:label>
<rdfs:comment xml:lang="en">A visual representation other than text.</rdfs:comment>
<dcterms:description xml:lang="en">Examples include images and photographs of physical objects, paintings, prints, drawings, other images and graphics, animations and moving pictures, film, diagrams, maps, musical notation. Note that Image may include both electronic and physical representations.</dcterms:description>
<rdfs:isDefinedBy rdf:resource="http://purl.org/dc/dcmitype/"/>
<dcterms:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2000-07-11</dcterms:issued>
<dcterms:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2008-01-14</dcterms:modified>
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<dcterms:hasVersion rdf:resource="http://dublincore.org/usage/terms/history/#Image-004"/>
<dcam:memberOf rdf:resource="http://purl.org/dc/terms/DCMIType"/>
</rdf:Description>
<rdf:Description rdf:about="http://purl.org/dc/dcmitype/InteractiveResource">
<rdfs:label xml:lang="en">Interactive Resource</rdfs:label>
<rdfs:comment xml:lang="en">A resource requiring interaction from the user to be understood, executed, or experienced.</rdfs:comment>
<dcterms:description xml:lang="en">Examples include forms on Web pages, applets, multimedia learning objects, chat services, or virtual reality environments.</dcterms:description>
<rdfs:isDefinedBy rdf:resource="http://purl.org/dc/dcmitype/"/>
<dcterms:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2000-07-11</dcterms:issued>
<dcterms:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2008-01-14</dcterms:modified>
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<dcterms:hasVersion rdf:resource="http://dublincore.org/usage/terms/history/#InteractiveResource-003"/>
<dcam:memberOf rdf:resource="http://purl.org/dc/terms/DCMIType"/>
</rdf:Description>
<rdf:Description rdf:about="http://purl.org/dc/dcmitype/Service">
<rdfs:label xml:lang="en">Service</rdfs:label>
<rdfs:comment xml:lang="en">A system that provides one or more functions.</rdfs:comment>
<dcterms:description xml:lang="en">Examples include a photocopying service, a banking service, an authentication service, interlibrary loans, a Z39.50 or Web server.</dcterms:description>
<rdfs:isDefinedBy rdf:resource="http://purl.org/dc/dcmitype/"/>
<dcterms:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2000-07-11</dcterms:issued>
<dcterms:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2008-01-14</dcterms:modified>
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<dcterms:hasVersion rdf:resource="http://dublincore.org/usage/terms/history/#Service-003"/>
<dcam:memberOf rdf:resource="http://purl.org/dc/terms/DCMIType"/>
</rdf:Description>
<rdf:Description rdf:about="http://purl.org/dc/dcmitype/Software">
<rdfs:label xml:lang="en">Software</rdfs:label>
<rdfs:comment xml:lang="en">A computer program in source or compiled form.</rdfs:comment>
<dcterms:description xml:lang="en">Examples include a C source file, MS-Windows .exe executable, or Perl script.</dcterms:description>
<rdfs:isDefinedBy rdf:resource="http://purl.org/dc/dcmitype/"/>
<dcterms:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2000-07-11</dcterms:issued>
<dcterms:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2008-01-14</dcterms:modified>
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<dcterms:hasVersion rdf:resource="http://dublincore.org/usage/terms/history/#Software-003"/>
<dcam:memberOf rdf:resource="http://purl.org/dc/terms/DCMIType"/>
</rdf:Description>
<rdf:Description rdf:about="http://purl.org/dc/dcmitype/Sound">
<rdfs:label xml:lang="en">Sound</rdfs:label>
<rdfs:comment xml:lang="en">A resource primarily intended to be heard.</rdfs:comment>
<dcterms:description xml:lang="en">Examples include a music playback file format, an audio compact disc, and recorded speech or sounds.</dcterms:description>
<rdfs:isDefinedBy rdf:resource="http://purl.org/dc/dcmitype/"/>
<dcterms:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2000-07-11</dcterms:issued>
<dcterms:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2008-01-14</dcterms:modified>
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<dcterms:hasVersion rdf:resource="http://dublincore.org/usage/terms/history/#Sound-003"/>
<dcam:memberOf rdf:resource="http://purl.org/dc/terms/DCMIType"/>
</rdf:Description>
<rdf:Description rdf:about="http://purl.org/dc/dcmitype/Text">
<rdfs:label xml:lang="en">Text</rdfs:label>
<rdfs:comment xml:lang="en">A resource consisting primarily of words for reading.</rdfs:comment>
<dcterms:description xml:lang="en">Examples include books, letters, dissertations, poems, newspapers, articles, archives of mailing lists. Note that facsimiles or images of texts are still of the genre Text.</dcterms:description>
<rdfs:isDefinedBy rdf:resource="http://purl.org/dc/dcmitype/"/>
<dcterms:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2000-07-11</dcterms:issued>
<dcterms:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2008-01-14</dcterms:modified>
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<dcterms:hasVersion rdf:resource="http://dublincore.org/usage/terms/history/#Text-003"/>
<dcam:memberOf rdf:resource="http://purl.org/dc/terms/DCMIType"/>
</rdf:Description>
<rdf:Description rdf:about="http://purl.org/dc/dcmitype/PhysicalObject">
<rdfs:label xml:lang="en">Physical Object</rdfs:label>
<rdfs:comment xml:lang="en">An inanimate, three-dimensional object or substance.</rdfs:comment>
<dcterms:description xml:lang="en">Note that digital representations of, or surrogates for, these objects should use Image, Text or one of the other types.</dcterms:description>
<rdfs:isDefinedBy rdf:resource="http://purl.org/dc/dcmitype/"/>
<dcterms:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2002-07-13</dcterms:issued>
<dcterms:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2008-01-14</dcterms:modified>
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<dcterms:hasVersion rdf:resource="http://dublincore.org/usage/terms/history/#PhysicalObject-003"/>
<dcam:memberOf rdf:resource="http://purl.org/dc/terms/DCMIType"/>
</rdf:Description>
<rdf:Description rdf:about="http://purl.org/dc/dcmitype/StillImage">
<rdfs:label xml:lang="en">Still Image</rdfs:label>
<rdfs:comment xml:lang="en">A static visual representation.</rdfs:comment>
<dcterms:description xml:lang="en">Examples include paintings, drawings, graphic designs, plans and maps. Recommended best practice is to assign the type Text to images of textual materials. Instances of the type Still Image must also be describable as instances of the broader type Image.</dcterms:description>
<rdfs:isDefinedBy rdf:resource="http://purl.org/dc/dcmitype/"/>
<dcterms:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2003-11-18</dcterms:issued>
<dcterms:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2008-01-14</dcterms:modified>
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<dcterms:hasVersion rdf:resource="http://dublincore.org/usage/terms/history/#StillImage-003"/>
<dcam:memberOf rdf:resource="http://purl.org/dc/terms/DCMIType"/>
<rdfs:subClassOf rdf:resource="http://purl.org/dc/dcmitype/Image"/>
</rdf:Description>
<rdf:Description rdf:about="http://purl.org/dc/dcmitype/MovingImage">
<rdfs:label xml:lang="en">Moving Image</rdfs:label>
<rdfs:comment xml:lang="en">A series of visual representations imparting an impression of motion when shown in succession.</rdfs:comment>
<dcterms:description xml:lang="en">Examples include animations, movies, television programs, videos, zoetropes, or visual output from a simulation. Instances of the type Moving Image must also be describable as instances of the broader type Image.</dcterms:description>
<rdfs:isDefinedBy rdf:resource="http://purl.org/dc/dcmitype/"/>
<dcterms:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2003-11-18</dcterms:issued>
<dcterms:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2008-01-14</dcterms:modified>
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
<dcterms:hasVersion rdf:resource="http://dublincore.org/usage/terms/history/#MovingImage-003"/>
<dcam:memberOf rdf:resource="http://purl.org/dc/terms/DCMIType"/>
<rdfs:subClassOf rdf:resource="http://purl.org/dc/dcmitype/Image"/>
</rdf:Description>
</rdf:RDF>

View file

@ -1,429 +0,0 @@
@prefix acl: <http://www.w3.org/ns/auth/acl#> .
@prefix as: <http://www.w3.org/ns/activitystreams#> .
@prefix bibo: <http://purl.org/ontology/bibo/> .
@prefix cnt: <http://www.w3.org/2011/content#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix dctypes: <http://purl.org/dc/dcmitype/> .
@prefix exif: <http://www.w3.org/2003/12/exif/ns#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> .
@prefix gr: <http://purl.org/goodrelations/v1#> .
@prefix iana: <http://www.iana.org/assignments/relation/> .
@prefix iiif: <http://iiif.io/api/image/2#> .
@prefix ldp: <http://www.w3.org/ns/ldp#> .
@prefix oa: <http://www.w3.org/ns/oa#> .
@prefix ore: <http://www.openarchives.org/ore/terms/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix pcdm: <http://pcdm.org/models#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sc: <http://iiif.io/api/presentation/2#> .
@prefix sioc: <http://rdfs.org/sioc/ns#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix svcs: <http://rdfs.org/sioc/services#> .
@prefix time: <http://www.w3.org/2006/time#> .
@prefix trig: <http://www.w3.org/2004/03/trix/rdfg-1/> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
oa:Annotation a rdfs:Class ;
rdfs:label "Annotation" ;
rdfs:comment "The class for Web Annotations." ;
rdfs:isDefinedBy oa: .
oa:Choice a rdfs:Class ;
rdfs:label "Choice" ;
rdfs:comment "A subClass of as:OrderedCollection that conveys to a consuming application that it should select one of the resources in the as:items list to use, rather than all of them. This is typically used to provide a choice of resources to render to the user, based on further supplied properties. If the consuming application cannot determine the user's preference, then it should use the first in the list." ;
rdfs:isDefinedBy oa: ;
rdfs:subClassOf as:OrderedCollection .
oa:CssSelector a rdfs:Class ;
rdfs:label "CssSelector" ;
rdfs:comment "A CssSelector describes a Segment of interest in a representation that conforms to the Document Object Model through the use of the CSS selector specification." ;
rdfs:isDefinedBy oa: ;
rdfs:subClassOf oa:Selector .
oa:CssStyle a rdfs:Class ;
rdfs:label "CssStyle" ;
rdfs:comment "A resource which describes styles for resources participating in the Annotation using CSS." ;
rdfs:isDefinedBy oa: ;
rdfs:subClassOf oa:Style .
oa:DataPositionSelector a rdfs:Class ;
rdfs:label "DataPositionSelector" ;
rdfs:comment "DataPositionSelector describes a range of data by recording the start and end positions of the selection in the stream. Position 0 would be immediately before the first byte, position 1 would be immediately before the second byte, and so on. The start byte is thus included in the list, but the end byte is not." ;
rdfs:isDefinedBy oa: ;
rdfs:subClassOf oa:Selector .
oa:Direction a rdfs:Class ;
rdfs:label "Direction" ;
rdfs:comment "A class to encapsulate the different text directions that a textual resource might take. It is not used directly in the Annotation Model, only its three instances." ;
rdfs:isDefinedBy oa: .
oa:FragmentSelector a rdfs:Class ;
rdfs:label "FragmentSelector" ;
rdfs:comment "The FragmentSelector class is used to record the segment of a representation using the IRI fragment specification defined by the representation's media type." ;
rdfs:isDefinedBy oa: ;
rdfs:subClassOf oa:Selector .
oa:HttpRequestState a rdfs:Class ;
rdfs:label "HttpRequestState" ;
rdfs:comment "The HttpRequestState class is used to record the HTTP request headers that a client SHOULD use to request the correct representation from the resource. " ;
rdfs:isDefinedBy oa: ;
rdfs:subClassOf oa:State .
oa:Motivation a rdfs:Class ;
rdfs:label "Motivation" ;
rdfs:comment "The Motivation class is used to record the user's intent or motivation for the creation of the Annotation, or the inclusion of the body or target, that it is associated with." ;
rdfs:isDefinedBy oa: ;
rdfs:subClassOf skos:Concept .
oa:RangeSelector a rdfs:Class ;
rdfs:label "RangeSelector" ;
rdfs:comment "A Range Selector can be used to identify the beginning and the end of the selection by using other Selectors. The selection consists of everything from the beginning of the starting selector through to the beginning of the ending selector, but not including it." ;
rdfs:isDefinedBy oa: ;
rdfs:subClassOf oa:Selector .
oa:ResourceSelection a rdfs:Class ;
rdfs:label "ResourceSelection" ;
rdfs:comment "Instances of the ResourceSelection class identify part (described by an oa:Selector) of another resource (referenced with oa:hasSource), possibly from a particular representation of a resource (described by an oa:State). Please note that ResourceSelection is not used directly in the Web Annotation model, but is provided as a separate class for further application profiles to use, separate from oa:SpecificResource which has many Annotation specific features." ;
rdfs:isDefinedBy oa: .
oa:Selector a rdfs:Class ;
rdfs:label "Selector" ;
rdfs:comment "A resource which describes the segment of interest in a representation of a Source resource, indicated with oa:hasSelector from the Specific Resource. This class is not used directly in the Annotation model, only its subclasses." ;
rdfs:isDefinedBy oa: .
oa:SpecificResource a rdfs:Class ;
rdfs:label "SpecificResource" ;
rdfs:comment "Instances of the SpecificResource class identify part of another resource (referenced with oa:hasSource), a particular representation of a resource, a resource with styling hints for renders, or any combination of these, as used within an Annotation." ;
rdfs:isDefinedBy oa: ;
rdfs:subClassOf oa:ResourceSelection .
oa:State a rdfs:Class ;
rdfs:label "State" ;
rdfs:comment "A State describes the intended state of a resource as applied to the particular Annotation, and thus provides the information needed to retrieve the correct representation of that resource." ;
rdfs:isDefinedBy oa: .
oa:Style a rdfs:Class ;
rdfs:label "Style" ;
rdfs:comment "A Style describes the intended styling of a resource as applied to the particular Annotation, and thus provides the information to ensure that rendering is consistent across implementations." ;
rdfs:isDefinedBy oa: .
oa:SvgSelector a rdfs:Class ;
rdfs:label "SvgSelector" ;
rdfs:comment "An SvgSelector defines an area through the use of the Scalable Vector Graphics [SVG] standard. This allows the user to select a non-rectangular area of the content, such as a circle or polygon by describing the region using SVG. The SVG may be either embedded within the Annotation or referenced as an External Resource." ;
rdfs:isDefinedBy oa: ;
rdfs:subClassOf oa:Selector .
oa:TextPositionSelector a rdfs:Class ;
rdfs:label "TextPositionSelector" ;
rdfs:comment "The TextPositionSelector describes a range of text by recording the start and end positions of the selection in the stream. Position 0 would be immediately before the first character, position 1 would be immediately before the second character, and so on." ;
rdfs:isDefinedBy oa: ;
rdfs:subClassOf oa:Selector .
oa:TextQuoteSelector a rdfs:Class ;
rdfs:label "TextQuoteSelector" ;
rdfs:comment "The TextQuoteSelector describes a range of text by copying it, and including some of the text immediately before (a prefix) and after (a suffix) it to distinguish between multiple copies of the same sequence of characters." ;
rdfs:isDefinedBy oa: ;
rdfs:subClassOf oa:Selector .
oa:TextualBody a rdfs:Class ;
rdfs:label "TextualBody" ;
rdfs:comment "" ;
rdfs:isDefinedBy oa: .
oa:TimeState a rdfs:Class ;
rdfs:label "TimeState" ;
rdfs:comment "A TimeState records the time at which the resource's state is appropriate for the Annotation, typically the time that the Annotation was created and/or a link to a persistent copy of the current version." ;
rdfs:isDefinedBy oa: ;
rdfs:subClassOf oa:State .
oa:XPathSelector a rdfs:Class ;
rdfs:label "XPathSelector" ;
rdfs:comment " An XPathSelector is used to select elements and content within a resource that supports the Document Object Model via a specified XPath value." ;
rdfs:isDefinedBy oa: ;
rdfs:subClassOf oa:Selector .
oa:PreferContainedDescriptions a rdfs:Resource ;
rdfs:label "PreferContainedDescriptions" ;
rdfs:comment "An IRI to signal the client prefers to receive full descriptions of the Annotations from a container, not just their IRIs." ;
rdfs:isDefinedBy oa: .
oa:PreferContainedIRIs a rdfs:Resource ;
rdfs:label "PreferContainedIRIs" ;
rdfs:comment "An IRI to signal that the client prefers to receive only the IRIs of the Annotations from a container, not their full descriptions." ;
rdfs:isDefinedBy oa: .
oa:annotationService a rdf:Property ;
rdfs:label "annotationService" ;
rdfs:comment """The object of the relationship is the end point of a service that conforms to the annotation-protocol, and it may be associated with any resource. The expectation of asserting the relationship is that the object is the preferred service for maintaining annotations about the subject resource, according to the publisher of the relationship.
This relationship is intended to be used both within Linked Data descriptions and as the rel type of a Link, via HTTP Link Headers rfc5988 for binary resources and in HTML <link> elements. For more information about these, please see the Annotation Protocol specification annotation-protocol.
""" ;
rdfs:isDefinedBy oa: .
oa:assessing a oa:Motivation ;
rdfs:label "assessing" ;
rdfs:comment "The motivation for when the user intends to provide an assessment about the Target resource." ;
rdfs:isDefinedBy oa: .
oa:bodyValue a rdf:Property ;
rdfs:label "bodyValue" ;
rdfs:comment """The object of the predicate is a plain text string to be used as the content of the body of the Annotation. The value MUST be an xsd:string and that data type MUST NOT be expressed in the serialization. Note that language MUST NOT be associated with the value either as a language tag, as that is only available for rdf:langString .
""" ;
rdfs:domain oa:Annotation ;
rdfs:isDefinedBy oa: ;
rdfs:range xsd:string .
oa:bookmarking a oa:Motivation ;
rdfs:label "bookmarking" ;
rdfs:comment "The motivation for when the user intends to create a bookmark to the Target or part thereof." ;
rdfs:isDefinedBy oa: .
oa:cachedSource a rdf:Property ;
rdfs:label "cachedSource" ;
rdfs:comment "A object of the relationship is a copy of the Source resource's representation, appropriate for the Annotation." ;
rdfs:domain oa:TimeState ;
rdfs:isDefinedBy oa: .
oa:canonical a rdf:Property ;
rdfs:label "canonical" ;
rdfs:comment "A object of the relationship is the canonical IRI that can always be used to deduplicate the Annotation, regardless of the current IRI used to access the representation." ;
rdfs:isDefinedBy oa: .
oa:classifying a oa:Motivation ;
rdfs:label "classifying" ;
rdfs:comment "The motivation for when the user intends to that classify the Target as something." ;
rdfs:isDefinedBy oa: .
oa:commenting a oa:Motivation ;
rdfs:label "commenting" ;
rdfs:comment "The motivation for when the user intends to comment about the Target." ;
rdfs:isDefinedBy oa: .
oa:describing a oa:Motivation ;
rdfs:label "describing" ;
rdfs:comment "The motivation for when the user intends to describe the Target, as opposed to a comment about them." ;
rdfs:isDefinedBy oa: .
oa:editing a oa:Motivation ;
rdfs:label "editing" ;
rdfs:comment "The motivation for when the user intends to request a change or edit to the Target resource." ;
rdfs:isDefinedBy oa: .
oa:end a rdf:Property ;
rdfs:label "end" ;
rdfs:comment "The end property is used to convey the 0-based index of the end position of a range of content." ;
rdfs:isDefinedBy oa: ;
rdfs:range xsd:nonNegativeInteger .
oa:exact a rdf:Property ;
rdfs:label "exact" ;
rdfs:comment "The object of the predicate is a copy of the text which is being selected, after normalization." ;
rdfs:isDefinedBy oa: ;
rdfs:range xsd:string .
oa:hasBody a rdf:Property ;
rdfs:label "hasBody" ;
rdfs:comment "The object of the relationship is a resource that is a body of the Annotation." ;
rdfs:domain oa:Annotation ;
rdfs:isDefinedBy oa: .
oa:hasEndSelector a rdf:Property ;
rdfs:label "hasEndSelector" ;
rdfs:comment "The relationship between a RangeSelector and the Selector that describes the end position of the range. " ;
rdfs:domain oa:RangeSelector ;
rdfs:isDefinedBy oa: ;
rdfs:range oa:Selector .
oa:hasPurpose a rdf:Property ;
rdfs:label "hasPurpose" ;
rdfs:comment "The purpose served by the resource in the Annotation." ;
rdfs:isDefinedBy oa: ;
rdfs:range oa:Motivation .
oa:hasScope a rdf:Property ;
rdfs:label "hasScope" ;
rdfs:comment "The scope or context in which the resource is used within the Annotation." ;
rdfs:domain oa:SpecificResource ;
rdfs:isDefinedBy oa: .
oa:hasSelector a rdf:Property ;
rdfs:label "hasSelector" ;
rdfs:comment "The object of the relationship is a Selector that describes the segment or region of interest within the source resource. Please note that the domain ( oa:ResourceSelection ) is not used directly in the Web Annotation model." ;
rdfs:domain oa:ResourceSelection ;
rdfs:isDefinedBy oa: ;
rdfs:range oa:Selector .
oa:hasSource a rdf:Property ;
rdfs:label "hasSource" ;
rdfs:comment "The resource that the ResourceSelection, or its subclass SpecificResource, is refined from, or more specific than. Please note that the domain ( oa:ResourceSelection ) is not used directly in the Web Annotation model." ;
rdfs:domain oa:ResourceSelection ;
rdfs:isDefinedBy oa: .
oa:hasStartSelector a rdf:Property ;
rdfs:label "hasStartSelector" ;
rdfs:comment "The relationship between a RangeSelector and the Selector that describes the start position of the range. " ;
rdfs:domain oa:RangeSelector ;
rdfs:isDefinedBy oa: ;
rdfs:range oa:Selector .
oa:hasState a rdf:Property ;
rdfs:label "hasState" ;
rdfs:comment "The relationship between the ResourceSelection, or its subclass SpecificResource, and a State resource. Please note that the domain ( oa:ResourceSelection ) is not used directly in the Web Annotation model." ;
rdfs:domain oa:ResourceSelection ;
rdfs:isDefinedBy oa: ;
rdfs:range oa:State .
oa:hasTarget a rdf:Property ;
rdfs:label "hasTarget" ;
rdfs:comment "The relationship between an Annotation and its Target." ;
rdfs:domain oa:Annotation ;
rdfs:isDefinedBy oa: .
oa:highlighting a oa:Motivation ;
rdfs:label "highlighting" ;
rdfs:comment "The motivation for when the user intends to highlight the Target resource or segment of it." ;
rdfs:isDefinedBy oa: .
oa:identifying a oa:Motivation ;
rdfs:label "identifying" ;
rdfs:comment "The motivation for when the user intends to assign an identity to the Target or identify what is being depicted or described in the Target." ;
rdfs:isDefinedBy oa: .
oa:linking a oa:Motivation ;
rdfs:label "linking" ;
rdfs:comment "The motivation for when the user intends to link to a resource related to the Target." ;
rdfs:isDefinedBy oa: .
oa:ltrDirection a oa:Direction ;
rdfs:label "ltrDirection" ;
rdfs:comment "The direction of text that is read from left to right." ;
rdfs:isDefinedBy oa: .
oa:moderating a oa:Motivation ;
rdfs:label "moderating" ;
rdfs:comment "The motivation for when the user intends to assign some value or quality to the Target." ;
rdfs:isDefinedBy oa: .
oa:motivatedBy a rdf:Property ;
rdfs:label "motivatedBy" ;
rdfs:comment "The relationship between an Annotation and a Motivation that describes the reason for the Annotation's creation." ;
rdfs:domain oa:Annotation ;
rdfs:isDefinedBy oa: ;
rdfs:range oa:Motivation .
oa:prefix a rdf:Property ;
rdfs:label "prefix" ;
rdfs:comment "The object of the property is a snippet of content that occurs immediately before the content which is being selected by the Selector." ;
rdfs:isDefinedBy oa: ;
rdfs:range xsd:string .
oa:processingLanguage a rdf:Property ;
rdfs:label "processingLanguage" ;
rdfs:comment "The object of the property is the language that should be used for textual processing algorithms when dealing with the content of the resource, including hyphenation, line breaking, which font to use for rendering and so forth. The value must follow the recommendations of BCP47." ;
rdfs:isDefinedBy oa: ;
rdfs:range xsd:string .
oa:questioning a oa:Motivation ;
rdfs:label "questioning" ;
rdfs:comment "The motivation for when the user intends to ask a question about the Target." ;
rdfs:isDefinedBy oa: .
oa:refinedBy a rdf:Property ;
rdfs:label "refinedBy" ;
rdfs:comment "The relationship between a Selector and another Selector or a State and a Selector or State that should be applied to the results of the first to refine the processing of the source resource. " ;
rdfs:isDefinedBy oa: .
oa:renderedVia a rdf:Property ;
rdfs:label "renderedVia" ;
rdfs:comment "A system that was used by the application that created the Annotation to render the resource." ;
rdfs:domain oa:SpecificResource ;
rdfs:isDefinedBy oa: .
oa:replying a oa:Motivation ;
rdfs:label "replying" ;
rdfs:comment "The motivation for when the user intends to reply to a previous statement, either an Annotation or another resource." ;
rdfs:isDefinedBy oa: .
oa:rtlDirection a oa:Direction ;
rdfs:label "rtlDirection" ;
rdfs:comment "The direction of text that is read from right to left." ;
rdfs:isDefinedBy oa: .
oa:sourceDate a rdf:Property ;
rdfs:label "sourceDate" ;
rdfs:comment "The timestamp at which the Source resource should be interpreted as being applicable to the Annotation." ;
rdfs:domain oa:TimeState ;
rdfs:isDefinedBy oa: ;
rdfs:range xsd:dateTime .
oa:sourceDateEnd a rdf:Property ;
rdfs:label "sourceDateEnd" ;
rdfs:comment "The end timestamp of the interval over which the Source resource should be interpreted as being applicable to the Annotation." ;
rdfs:domain oa:TimeState ;
rdfs:isDefinedBy oa: ;
rdfs:range xsd:dateTime .
oa:sourceDateStart a rdf:Property ;
rdfs:label "sourceDateStart" ;
rdfs:comment "The start timestamp of the interval over which the Source resource should be interpreted as being applicable to the Annotation." ;
rdfs:domain oa:TimeState ;
rdfs:isDefinedBy oa: ;
rdfs:range xsd:dateTime .
oa:start a rdf:Property ;
rdfs:label "start" ;
rdfs:comment "The start position in a 0-based index at which a range of content is selected from the data in the source resource." ;
rdfs:isDefinedBy oa: ;
rdfs:range xsd:nonNegativeInteger .
oa:styleClass a rdf:Property ;
rdfs:label "styleClass" ;
rdfs:comment "The name of the class used in the CSS description referenced from the Annotation that should be applied to the Specific Resource." ;
rdfs:domain oa:SpecificResource ;
rdfs:isDefinedBy oa: ;
rdfs:range xsd:string .
oa:styledBy a rdf:Property ;
rdfs:label "styledBy" ;
rdfs:comment "A reference to a Stylesheet that should be used to apply styles to the Annotation rendering." ;
rdfs:domain oa:Annotation ;
rdfs:isDefinedBy oa: ;
rdfs:range oa:Style .
oa:suffix a rdf:Property ;
rdfs:label "suffix" ;
rdfs:comment "The snippet of text that occurs immediately after the text which is being selected." ;
rdfs:isDefinedBy oa: ;
rdfs:range xsd:string .
oa:tagging a oa:Motivation ;
rdfs:label "tagging" ;
rdfs:comment "The motivation for when the user intends to associate a tag with the Target." ;
rdfs:isDefinedBy oa: .
oa:textDirection a rdf:Property ;
rdfs:label "textDirection" ;
rdfs:comment "The direction of the text of the subject resource. There MUST only be one text direction associated with any given resource." ;
rdfs:isDefinedBy oa: ;
rdfs:range oa:Direction .
oa:via a rdf:Property ;
rdfs:label "via" ;
rdfs:comment "A object of the relationship is a resource from which the source resource was retrieved by the providing system." ;
rdfs:isDefinedBy oa: .
oa: a owl:Ontology ;
dc:title "Web Annotation Ontology" ;
dcterms:creator [a foaf:Person; foaf:name "Benjamin Young"],
[a foaf:Person; foaf:name "Paolo Ciccarese"],
[a foaf:Person; foaf:name "Robert Sanderson"] ;
dcterms:modified "2016-11-12T21:28:11Z" ;
rdfs:comment "The Web Annotation ontology defines the terms of the Web Annotation vocabulary. Any changes to this document MUST be from a Working Group in the W3C that has established expertise in the area." ;
rdfs:seeAlso <http://www.w3.org/TR/annotation-vocab/> ;
prov:wasRevisionOf <http://www.openannotation.org/spec/core/20130208/oa.owl> ;
owl:versionInfo "2016-11-12T21:28:11Z" .

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -4,7 +4,7 @@
"version": "0.0.0",
"type": "module",
"scripts": {
"sync-schemas": "rsync -av --delete --exclude=\"archive/\" ../schemas/20251121/linkml/ public/schemas/20251121/linkml/",
"sync-schemas": "rsync -av --delete ../schemas/20251121/linkml/ public/schemas/20251121/linkml/",
"generate-manifest": "node scripts/generate-schema-manifest.cjs",
"dev": "pnpm run sync-schemas && pnpm run generate-manifest && vite",
"build": "pnpm run sync-schemas && pnpm run generate-manifest && tsc -b && vite build",

View file

@ -43,15 +43,12 @@ imports:
- modules/slots/has_appellation_type
- modules/slots/has_appellation_value
- modules/slots/has_or_had_arrangement_system
- modules/slots/has_or_had_description
- modules/slots/has_or_had_label
# collection_description ARCHIVED (2026-01-18) - migrated to has_or_had_description (Rule 53)
# collection_name ARCHIVED (2026-01-18) - migrated to has_or_had_label (Rule 53)
- modules/slots/collection_description
- modules/slots/collection_name
# collection_scope ARCHIVED (2026-01-18) - migrated to has_or_had_scope + CollectionScope (Rule 53)
- modules/slots/has_or_had_scope
- modules/slots/collection_type
# collections_under_responsibility ARCHIVED (2026-01-19) - migrated to is_or_was_responsible_for (Rule 53)
- modules/slots/is_or_was_responsible_for
- modules/slots/collections_under_responsibility
- modules/slots/confidence_method
- modules/slots/confidence_score
- modules/slots/confidence_value
@ -602,7 +599,7 @@ imports:
- modules/slots/has_or_had_area_served
- modules/slots/has_or_had_member_custodian
- modules/slots/membership_criteria
# community_engagement ARCHIVED 2026-01-19 - migrated to has_or_had_activity (imported above)
- modules/slots/community_engagement
- modules/slots/service_offering
- modules/slots/record_type
- modules/slots/society_focus

View file

@ -1,37 +0,0 @@
id: https://nde.nl/ontology/hc/slot/has_or_had_admission_fee
name: has_or_had_admission_fee_slot
title: Has Or Had Admission Fee Slot
prefixes:
gr: http://purl.org/goodrelations/v1#
hc: https://nde.nl/ontology/hc/
linkml: https://w3id.org/linkml/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
default_prefix: hc
slots:
has_or_had_admission_fee:
description: "Admission fee charged by the institution. Temporal as fees change. A string describing the fee amount or structure (free, \u20AC10, \u20AC5-15, etc.)."
range: string
slot_uri: hc:hasOrHadAdmissionFee
close_mappings:
- schema:price
- schema:priceRange
related_mappings:
- schema:offers
- gr:hasPriceSpecification
comments:
- schema:offers links to Offer objects, not fee amounts directly. An admission fee is a specific price value, not an offer.
annotations:
custodian_types: '["*"]'
custodian_types_rationale: Applicable to all heritage custodian types.
custodian_types_primary: M
specificity_score: 0.5
specificity_rationale: Moderately specific slot.

View file

@ -1,33 +0,0 @@
id: https://nde.nl/ontology/hc/slot/has_or_had_classification
name: has_or_had_classification_slot
title: has_or_had_classification slot
description: "Generic temporal classification slot following RiC-O naming pattern. Used for various classification schemes (biological, organizational, etc.).\nReplaces bespoke classification slots per Rule 53/56: - bio_type_classification \u2192 has_or_had_classification (in OutdoorSite)"
version: 1.0.0
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
skos: http://www.w3.org/2004/02/skos/core#
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
default_prefix: hc
slots:
has_or_had_classification:
slot_uri: schema:additionalType
description: "Classification or categorization scheme value. Uses schema:additionalType for type classification compatibility.\nClasses narrow this slot's range via slot_usage to specific enum types: - OutdoorSite \u2192 BioCustodianTypeEnum (biological/botanical classification)"
range: uriorcurie
multivalued: true
exact_mappings:
- schema:additionalType
close_mappings:
- skos:Concept
annotations:
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept

View file

@ -1,45 +0,0 @@
id: https://nde.nl/ontology/hc/slot/has_or_had_comprehensive_overview
name: has_or_had_comprehensive_overview_slot
title: Has Or Had Comprehensive Overview Slot
description: 'Generic slot for linking to comprehensive overview collections.
Follows RiC-O temporal naming convention to indicate the relationship may be current or historical.'
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
dcterms: http://purl.org/dc/terms/
schema: http://schema.org/
rico: https://www.ica.org/standards/RiC/ontology#
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
- ../classes/Overview
default_prefix: hc
slots:
has_or_had_comprehensive_overview:
description: "Links an entity to a comprehensive overview collection of resources.\nFollows RiC-O temporal naming convention (`hasOrHad*`) to indicate the relationship may be current or historical.\n**USAGE**:\n```yaml finding_aid:\n has_or_had_comprehensive_overview:\n id: hc:overview/findingaid-links\n title: \"All Links\"\n includes_or_included:\n - url: https://example.org/link1\n link_text: \"Related Resource\"\n```\n**DESIGN RATIONALE**:\nThis is a GENERIC slot for linking to comprehensive collections of resources. Replaces domain-specific slots like `all_links` with a typed relationship to an `Overview` class.\n**MIGRATION NOTE** (2026-01-14):\nCreated as replacement for `all_links` slot. The new pattern: - Uses typed `Overview` class instead of untyped string list - Uses `includes_or_included` for WebLink composition - Enables richer metadata about link collections\n**ONTOLOGY ALIGNMENT**:\n- `dcterms:hasPart` - Dublin Core part-whole relationship - `schema:hasPart`\
\ - Schema.org containment - `rico:hasOrHadPart` - RiC-O temporal containment"
range: Overview
multivalued: false
inlined: true
slot_uri: dcterms:hasPart
exact_mappings:
- dcterms:hasPart
close_mappings:
- schema:hasPart
- rico:hasOrHadPart
annotations:
custodian_types: '["*"]'
custodian_types_rationale: Comprehensive overviews applicable to all heritage custodian types.
custodian_types_primary: A
specificity_score: 0.35
specificity_rationale: Low-moderate specificity - applicable across many contexts where comprehensive resource collections are needed.
comments:
- Replaces all_links slot
- Uses Overview class for typed collection
- Created from slot_fixes.yaml migration (2026-01-14)

View file

@ -1,115 +0,0 @@
id: https://nde.nl/ontology/hc/slot/has_or_had_custodian_type
name: has_or_had_custodian_type_slot
title: Has Or Had Custodian Type Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
org: http://www.w3.org/ns/org#
rov: http://www.w3.org/ns/regorg#
skos: http://www.w3.org/2004/02/skos/core#
crm: http://www.cidoc-crm.org/cidoc-crm/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
rdfs: http://www.w3.org/2000/01/rdf-schema#
xsd: http://www.w3.org/2001/XMLSchema#
default_prefix: hc
imports:
- linkml:types
- ../classes/CustodianType
slots:
has_or_had_custodian_type:
slot_uri: org:classification
description: "The organizational type classification(s) of a heritage custodian within\nthe GLAMORCUBESFIXPHDNT taxonomy.\n\n**Predicate Semantics**:\nThis slot uses org:classification as its primary predicate, which links\nan organization to its type classification(s) using SKOS concepts.\n\n**Temporal Semantics** (RiC-O Pattern):\nThe \"hasOrHad\" naming follows RiC-O convention indicating this relationship\nmay be historical - an institution may have changed type over time\n(e.g., a library becoming a museum, or a mixed institution).\n\n**Ontological Alignment**:\n- **Primary** (`slot_uri`): `org:classification` - W3C Organization Ontology\n predicate for organizational classification (range: skos:Concept)\n- **Close**: `rov:orgType` - Registered Organization Vocabulary predicate\n (subPropertyOf org:classification, for legal entity types like GmbH, Ltd)\n- **Related**: `crm:P2_has_type` - CIDOC-CRM predicate for typing entities\n (domain: E1_CRM_Entity, range: E55_Type)\n- **Related**:\
\ `schema:additionalType` - Schema.org predicate for additional\n type classification beyond the primary @type\n- **Broad**: `dcterms:type` - Dublin Core predicate for resource type\n\n**Range**:\nValues are instances of `CustodianType` or its 19 subclasses:\n\n| Code | Subclass | Wikidata | Description |\n|------|--------------------------------|-----------|--------------------------------|\n| A | ArchiveOrganizationType | Q166118 | Archives |\n| B | BioCustodianType | Q167346 | Botanical gardens, zoos |\n| C | CommercialOrganizationType | Q6881511 | Corporate archives |\n| D | DigitalPlatformType | Q3565794 | Digital platforms |\n| E | EducationProviderType | Q3152824 | Educational institutions |\n| F | FeatureCustodianType | Q4989906 | Monuments, memorials |\n| G | GalleryType \
\ | Q1007870 | Art galleries |\n| H | HolySacredSiteType | Q1370598 | Religious heritage sites |\n| I | IntangibleHeritageGroupType | Q59544 | Intangible heritage orgs |\n| L | LibraryType | Q7075 | Libraries |\n| M | MuseumType | Q33506 | Museums |\n| N | NonProfitType | Q163740 | NGOs, advocacy groups |\n| O | OfficialInstitutionType | Q2659904 | Government agencies |\n| P | PersonalCollectionType | Q2668072 | Private collections |\n| R | ResearchOrganizationType | Q31855 | Research institutes |\n| S | HeritageSocietyType | Q476068 | Historical societies |\n| T | TasteScentHeritageType | Q5765838 | Culinary/olfactory heritage |\n| U | UnspecifiedType | Q35120 | Unknown\
\ type |\n| X | MixedCustodianType | Q35120 | Multiple types combined |\n\nEach CustodianType subclass provides:\n- Wikidata Q-number alignment (via schema:additionalType)\n- Multilingual labels (skos:prefLabel, skos:altLabel)\n- Hierarchical relationships (skos:broader, skos:narrower)\n- GHCID single-letter code derivation\n\n**Cardinality**:\nMultivalued - institutions may have multiple types (e.g., museum + archive).\nUse MixedCustodianType (X) for institutions with complex multi-type identity.\n"
range: CustodianType
required: false
multivalued: true
inlined_as_list: true
exact_mappings:
- org:classification
close_mappings:
- rov:orgType
related_mappings:
- crm:P2_has_type
- schema:additionalType
broad_mappings:
- dcterms:type
annotations:
rico_naming_convention: 'Follows RiC-O "hasOrHad" pattern for temporal predicates.
See Rule 39: Slot Naming Convention (RiC-O Style)
'
replaces_slots: custodian_type, custodian_types
migration_date: '2026-01-09'
predicate_clarification: 'slot_uri and mappings reference PREDICATES (properties), not classes.
- org:classification is a PREDICATE (links Organization to Concept)
- CustodianType is a CLASS (the range of valid values)
'
range_note: 'Range is CustodianType (abstract class). Valid values are the 19
CustodianType subclasses defined in modules/classes/:
- ArchiveOrganizationType.yaml
- BioCustodianType.yaml
- CommercialOrganizationType.yaml
- DigitalPlatformType.yaml
- EducationProviderType.yaml
- FeatureCustodianType.yaml
- GalleryType.yaml
- HolySacredSiteType.yaml
- IntangibleHeritageGroupType.yaml
- LibraryType.yaml
- MuseumType.yaml
- NonProfitType.yaml (N)
- OfficialInstitutionType.yaml
- PersonalCollectionType.yaml
- ResearchOrganizationType.yaml
- HeritageSocietyType.yaml
- TasteScentHeritageType.yaml
- UnspecifiedType.yaml
- MixedCustodianType.yaml
'
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
comments:
- Unified slot replacing custodian_type (singular) and custodian_types (plural)
- slot_uri=org:classification is a PREDICATE, not a class
- range=CustodianType is an ABSTRACT CLASS - valid values are its 19 subclasses
- 'RiC-O naming: hasOrHad indicates potentially historical relationship'
- 'Multivalued: institutions may have multiple type classifications'
examples:
- value: hc:MuseumType
description: Art museum classification (M code)
- value: hc:ArchiveOrganizationType
description: Archive classification (A code)
- value: '[hc:MuseumType, hc:ArchiveOrganizationType]'
description: Mixed institution with both museum and archive functions
- value: hc:MixedCustodianType
description: Explicit mixed type when institution defies single categorization (X code)

View file

@ -1,39 +0,0 @@
# has_or_had_participant slot
# Generic slot for participants
#
# Generation date: 2026-01-27
# Rule compliance: 38, 39, 42
#
# Part of has_or_had_annual_participant_count migration (Rule 53)
id: https://nde.nl/ontology/hc/slot/has_or_had_participant
name: has_or_had_participant_slot
title: Has Or Had Participant Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
slots:
has_or_had_participant:
slot_uri: schema:participant
description: |
A participant in an activity or event.
**Temporal Semantics** (RiC-O Pattern):
"hasOrHad" indicates participation occurred in the past or present.
**Ontological Alignment**:
- `schema:participant`: A person or organization that supports (sponsors) something through some pledge, promise, or financial contribution.
**Range**:
- `Participant` class (or `Agent`, `Person`, `Organization`).
range: uriorcurie
multivalued: true
required: false

View file

@ -1,78 +0,0 @@
# has_or_had_policy slot
# Policy association following RiC-O naming pattern
#
# Generation date: 2026-01-15
# Updated: 2026-01-22 - Broadened range from TransferPolicy to Policy (Rule 53, 55)
# Rule compliance: 38 (slot centralization + semantic URI), 39 (RiC-O naming), 53 (slot_fixes.yaml), 55 (broaden generic ranges)
#
# Used by TransferEvent, Storage, and other classes for governing policies
id: https://nde.nl/ontology/hc/slot/has_or_had_policy
name: has_or_had_policy_slot
title: Has Or Had Policy Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
odrl: http://www.w3.org/ns/odrl/2/
dcterms: http://purl.org/dc/terms/
default_prefix: hc
imports:
- linkml:types
- ../classes/Policy # Base class for all policy types (changed from TransferPolicy 2026-01-22)
slots:
has_or_had_policy:
slot_uri: odrl:hasPolicy
description: |
Policy that governs or governed an activity or entity.
**Temporal Semantics** (RiC-O Pattern):
The "hasOrHad" naming follows RiC-O convention indicating
the policy association may be historical.
**Ontological Alignment**:
- **Primary** (`slot_uri`): `odrl:hasPolicy` - ODRL policy association
- **Related**: `dcterms:accessRights` - Dublin Core access rights
**Use Cases**:
- Transfer policies governing custody changes
- Access policies for collections
- Retention policies for archives
**Range**: Policy (base class - accepts TransferPolicy, ConditionPolicy, etc.)
**Cardinality**:
Multivalued - entities may be governed by multiple policies.
range: Policy # Broadened from TransferPolicy per Rule 55 (2026-01-22)
required: false
multivalued: true
inlined: true
inlined_as_list: true
related_mappings:
- dcterms:accessRights
annotations:
rico_naming_convention: |
Follows RiC-O "hasOrHad" pattern for temporal predicates.
See Rule 39: Slot Naming Convention (RiC-O Style)
replaces_slots: "transfer_policy"
migration_date: "2026-01-15"
custodian_types: '["*"]'
custodian_types_rationale: Policy associations apply to all heritage types.
specificity_score: 0.45
specificity_rationale: Specialized slot for policy governance.
comments:
- "Links entities to governing policies"
- "Maps to odrl:hasPolicy for rights/rules"
- "RiC-O naming: hasOrHad indicates potentially historical"
examples:
- value:
policy_name: "Donor Transfer Restriction"
policy_text: "Materials may not be transferred without donor consent."
description: "Transfer policy for collection"

View file

@ -1,55 +0,0 @@
id: https://nde.nl/ontology/hc/slot/has_or_had_registration_number
name: has_or_had_registration_number_slot
imports:
- linkml:types
slots:
has_or_had_registration_number:
slot_uri: rov:registration
range: RegistrationNumber
multivalued: true
description: 'Official registration numbers assigned by authorities (Chamber of Commerce,
charity registration, company registration, etc.).
Organizations can have multiple registrations in different systems.
Each registration has temporal validity to track changes over time.
Links to RegistrationNumber class which includes:
- number: The actual registration number
- type: Type of registration (KvK, EIN, charity number, etc.)
- temporal_validity: Time period when registration is/was valid
'
comments:
- Replaces deprecated registration_number (singular) and registration_date slots
- Temporal validity now captured in RegistrationNumber.temporal_validity
- Multiple registrations common for organizations operating in multiple jurisdictions
exact_mappings:
- rov:registration
close_mappings:
- schema:identifier
- tooi:organisatieIdentificatie
examples:
- value: "- number: \"41215422\"\n type: \"KvK\"\n temporal_validity:\n begin_of_the_begin: \"1885-07-01\"\n"
description: Dutch Chamber of Commerce registration for Rijksmuseum
annotations:
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#

View file

@ -1,41 +0,0 @@
id: https://nde.nl/ontology/hc/slot/has_or_had_safeguard
name: has_or_had_safeguard_slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
crm: http://www.cidoc-crm.org/cidoc-crm/
owl: http://www.w3.org/2002/07/owl#
ich: https://ich.unesco.org/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
- ../classes/IntangibleHeritageForm
slots:
has_or_had_safeguard:
slot_uri: crm:P109_has_current_or_former_curator
description: "Intangible heritage forms that this custodian safeguards/preserves.\n\nWe use the inverse direction: Custodian \u2192 IntangibleHeritageForm\n\n**UNESCO 2003 Convention Context**:\n\n\"Safeguarding\" in the intangible heritage context means measures aimed at ensuring\nthe viability of intangible cultural heritage, including:\n- Identification and documentation\n- Research and preservation\n- Protection and promotion\n- Enhancement and transmission (especially through formal and non-formal education)\n- Revitalization of various aspects of such heritage\n\n**Usage**:\n\n- Custodians with `institution_type = I` (Intangible Heritage Group) typically safeguard heritage forms\n- Custodians with `institution_type = T` (Taste/Smell) may also safeguard culinary traditions\n- Other custodian types may occasionally safeguard heritage forms as secondary activity\n\n**Examples**:\n- Stichting Amsterdam Gay Pride safeguards Pride Amsterdam\n- Gilde Sint Joris Heemkundige Kring safeguards\
\ local folklore traditions\n- Bakkerij van Maanen safeguards traditional Dutch baking methods"
range: IntangibleHeritageForm
multivalued: true
inlined: false
exact_mappings:
- crm:P109_has_current_or_former_curator
related_mappings:
- ich:safeguardedBy
- schema:maintainer
comments:
- Inverse of safeguarded_by (crm:P109i_is_current_or_former_curator_of)
- Creates owl:inverseOf axiom in RDF output
- Enables navigation from Custodian to heritage forms they preserve
- 'Inverse: `safeguarded_by` (crm:P109i_is_current_or_former_curator_of) | Pattern: If Custodian safeguards HeritageForm, then HeritageForm safeguarded_by Custodian'
annotations:
inverse_slot: safeguarded_by
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept

View file

@ -1,29 +0,0 @@
id: https://nde.nl/ontology/hc/slot/has_or_had_section_link
name: has_or_had_section_link_slot
title: Section Links Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
default_prefix: hc
slots:
has_or_had_section_link:
slot_uri: schema:relatedLink
description: Links within this section
range: PageLink
multivalued: true
annotations:
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
exact_mappings:
- schema:relatedLink

View file

@ -1,53 +0,0 @@
id: https://nde.nl/ontology/hc/slot/has_or_had_short_code
name: has_or_had_short_code_slot
title: Has Or Had Short Code 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/
schema: http://schema.org/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
default_prefix: hc
imports:
- linkml:types
slots:
has_or_had_short_code:
slot_uri: skos:notation
description: "Short code or notation for a type classification.\n\n**Temporal Semantics** (RiC-O Pattern):\nThe \"hasOrHad\" naming follows RiC-O convention indicating this relationship\nmay be historical - a type's code may change over time.\n\n**Ontological Alignment**:\n- **Primary** (`slot_uri`): `skos:notation` - SKOS notation for\n coding system identifiers\n- **Related**: `dcterms:identifier` - Dublin Core identifier\n\n**Format**:\nTypically uppercase with underscores (e.g., ARCHIVE_DEPOT, COLD_STORAGE).\nCodes align with enum values for backward compatibility.\n\n**Pattern**:\n^[A-Z][A-Z0-9_]*$ - Uppercase letters, digits, and underscores\n"
range: string
required: false
multivalued: false
pattern: ^[A-Z][A-Z0-9_]*$
exact_mappings:
- skos:notation
related_mappings:
- dcterms:identifier
annotations:
rico_naming_convention: 'Follows RiC-O "hasOrHad" pattern for temporal predicates.
See Rule 39: Slot Naming Convention (RiC-O Style)
'
replaces_slots: storage_type_code
migration_date: '2026-01-13'
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
comments:
- Generic short code slot for type classifications
- Maps to skos:notation for controlled vocabulary codes
- 'Pattern: uppercase with underscores (ARCHIVE_DEPOT)'
- Codes align with enum values for backward compatibility
- 'RiC-O naming: hasOrHad indicates potentially historical relationship'
examples:
- value: ARCHIVE_DEPOT
description: Archive depot storage type code
- value: COLD_STORAGE
description: Cold storage type code
- value: CLIMATE_CONTROLLED
description: Climate controlled zone type code

View file

@ -1,31 +0,0 @@
id: https://nde.nl/ontology/hc/slot/has_or_had_storage_facility
name: has_or_had_storage_facility_slot
title: Storage Facilities Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
- ../classes/Storage
default_prefix: hc
slots:
has_or_had_storage_facility:
slot_uri: premis:storedAt
range: Storage
multivalued: true
inlined_as_list: true
description: Storage facilities operated by this custodian for heritage collections.
annotations:
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
exact_mappings:
- premis:storedAt

View file

@ -1,33 +0,0 @@
id: https://nde.nl/ontology/hc/slot/has_or_had_sub_guide
name: has_or_had_sub_guide_slot
title: Sub Guides Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
rico: https://www.ica.org/standards/RiC/ontology#
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
default_prefix: hc
slots:
has_or_had_sub_guide:
slot_uri: rico:directlyIncludes
description: Sub-guides or related finding aids within this repository
range: SubGuideReference
multivalued: true
inlined_as_list: true
comments:
- rico:includes does not exist - use rico:directlyIncludes or rico:includesOrIncluded
annotations:
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
exact_mappings:
- rico:directlyIncludes

View file

@ -1,29 +0,0 @@
id: https://nde.nl/ontology/hc/slot/has_or_had_sub_section
name: has_or_had_sub_section_slot
title: Sub Sections Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
default_prefix: hc
slots:
has_or_had_sub_section:
slot_uri: schema:hasPart
description: Nested sub-sections
range: PageSection
multivalued: true
annotations:
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
exact_mappings:
- schema:hasPart

View file

@ -1,31 +0,0 @@
id: https://nde.nl/ontology/hc/slot/has_outdoor_seating
name: has_outdoor_seating_slot
title: has_outdoor_seating slot
version: 1.0.0
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
default_prefix: hc
slots:
has_outdoor_seating:
slot_uri: schema:amenityFeature
description: 'Whether facility has outdoor/terrace seating.
'
range: boolean
annotations:
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
exact_mappings:
- schema:amenityFeature

View file

@ -1,30 +0,0 @@
id: https://nde.nl/ontology/hc/slot/has_publication_series
name: has_publication_series_slot
title: Has Publication Series Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
default_prefix: hc
slots:
has_publication_series:
description: 'Whether this research center publishes a regular publication series.
'
range: boolean
slot_uri: hc:hasPublicationSeries
annotations:
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
exact_mappings:
- hc:hasPublicationSeries

View file

@ -1,30 +0,0 @@
id: https://nde.nl/ontology/hc/slot/has_research_library
name: has_research_library_slot
title: Has Research Library Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
default_prefix: hc
slots:
has_research_library:
description: 'Whether this research center maintains a specialized research library.
'
range: boolean
slot_uri: hc:hasResearchLibrary
annotations:
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
exact_mappings:
- hc:hasResearchLibrary

View file

@ -1,43 +0,0 @@
id: https://nde.nl/ontology/hc/slot/has_unit
name: has_unit
title: Has Organizational Unit
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
org: http://www.w3.org/ns/org#
owl: http://www.w3.org/2002/07/owl#
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
- ../classes/OrganizationalStructure
slots:
has_unit:
slot_uri: org:hasUnit
description: "Organizational units (departments, divisions, teams) that are part of \nthis organizational structure.\n\n**Hierarchical Navigation**:\n- Down: has_unit \u2192 child units\n- Up: parent_unit \u2192 parent unit"
range: OrganizationalStructure
multivalued: true
exact_mappings:
- org:hasUnit
related_mappings:
- crm:P148_has_component
- rico:includesOrIncluded
- rdf:type
comments:
- Inverse of parent_unit (org:unitOf)
- Enables top-down navigation of organizational hierarchy
- Creates owl:inverseOf axiom in RDF output
- 'Inverse: `parent_unit` (org:unitOf) | Pattern: If A hasUnit B, then B unitOf A'
annotations:
inverse_slot: parent_unit
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
examples:
- value: "OrganizationalStructure:\n unit_name: \"Collections Division\"\n has_unit:\n - unit_name: \"Paintings\\ \\ Department\"\n - unit_name: \"Prints and Drawings Department\"\n - unit_name: \"Applied Arts Depart...\n"
description: Usage example

View file

@ -1,33 +0,0 @@
id: https://nde.nl/ontology/hc/slot/hazard
name: hazard_slot
title: Hazards Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
default_prefix: hc
slots:
hazard:
description: 'Hazards or safety concerns in the space.
Aligned with schema:warning.
'
slot_uri: schema:warning
range: string
multivalued: true
annotations:
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
exact_mappings:
- schema:warning

View file

@ -1,37 +0,0 @@
id: https://nde.nl/ontology/hc/slot/hc_id
name: hc_id-slot
imports:
- linkml:types
slots:
hc_id:
description: "The persistent identifier for a heritage custodian entity in the NDE Heritage \nCustodian ontology. This is the core identifier that serves as the hub connecting\nall observations, reconstructions, and names related to this custodian.\n\nFormat: https://nde.nl/ontology/hc/{abstracted-ghcid}\nExample: https://nde.nl/ontology/hc/nl-nh-ams-m-rm-q190804\n\nThe ID is derived from the GHCID pattern but abstracted/normalized for use\nas a persistent URI in the ontology namespace.\n"
slot_uri: dcterms:identifier
range: uriorcurie
required: true
identifier: true
pattern: ^https://nde\.nl/ontology/hc/[a-z0-9-]+$
comments:
- This is THE identifying property for custodian entities. All other properties and relationships connect through this hub identifier.
- The path component after /hc/ is an abstracted, lowercased, hyphenated version of the GHCID pattern (country-region-city-type-abbrev-qnumber).
see_also:
- https://nde.nl/ontology/hc/
- https://www.dublincore.org/specifications/dublin-core/dcmi-terms/#identifier
broad_mappings:
- dcterms:identifier
annotations:
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
exact_mappings:
- dcterms:identifier
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#

View file

@ -1,43 +0,0 @@
id: https://nde.nl/ontology/hc/slot/hc_preset_uri
name: hc_preset_uri_slot
title: HC Ontology Preset URI Slot
description: 'Slot for referencing Heritage Custodian ontology environmental preset individuals.
These presets are defined in hc-storage.ttl and provide standard environmental
configurations for heritage preservation contexts.
'
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
default_prefix: hc
slots:
hc_preset_uri:
description: "URI of the corresponding HC ontology environmental preset individual.\n\nThese presets define standard environmental parameters for heritage storage.\n\nExample presets:\n- hc:StandardArchiveEnvironment (18\xB0C, 50% RH)\n- hc:ColdStorageEnvironment (-5\xB0C, 30% RH)\n- hc:PhotographicMaterialsEnvironment (15\xB0C, 35% RH)\n- hc:TextileStorageEnvironment (18\xB0C, 50% RH, 50 lux)\n"
range: string
slot_uri: skos:exactMatch
examples:
- value: hc:StandardArchiveEnvironment
description: "Standard archive storage preset (18\xB0C, 50% RH)"
- value: hc:ColdStorageEnvironment
description: "Cold storage preset (-5\xB0C, 30% RH)"
- value: hc:PhotographicMaterialsEnvironment
description: "Photographic materials storage preset (15\xB0C, 35% RH)"
annotations:
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
exact_mappings:
- skos:exactMatch

View file

@ -1,28 +0,0 @@
id: https://nde.nl/ontology/hc/slot/heading_level
name: heading_level_slot
title: Heading Level Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
default_prefix: hc
slots:
heading_level:
slot_uri: hc:headingLevel
description: Heading level (1-6 for h1-h6)
range: integer
annotations:
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
exact_mappings:
- hc:headingLevel

View file

@ -1,28 +0,0 @@
id: https://nde.nl/ontology/hc/slot/heading_text
name: heading_text_slot
title: Heading Text Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
dcterms: http://purl.org/dc/terms/
schema: http://schema.org/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
default_prefix: hc
slots:
heading_text:
slot_uri: dcterms:title
description: Text of the section heading (original language)
range: string
annotations:
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
exact_mappings:
- dcterms:title

View file

@ -1,28 +0,0 @@
id: https://nde.nl/ontology/hc/slot/heading_text_en
name: heading_text_en_slot
title: Heading Text En Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
dcterms: http://purl.org/dc/terms/
schema: http://schema.org/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
default_prefix: hc
slots:
heading_text_en:
slot_uri: dcterms:title
description: English translation of heading
range: string
annotations:
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
exact_mappings:
- dcterms:title

View file

@ -1,32 +0,0 @@
id: https://nde.nl/ontology/hc/slot/headline
name: headline_slot
title: Headline Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
default_prefix: hc
slots:
headline:
description: 'Professional headline/tagline from LinkedIn.
Typically includes current job title and/or professional identity.
'
range: string
slot_uri: hc:headline
annotations:
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
exact_mappings:
- hc:headline

View file

@ -1,30 +0,0 @@
id: https://nde.nl/ontology/hc/slot/heritage_designation_date
name: heritage_designation_date_slot
title: Heritage Designation Date Slot
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
default_prefix: hc
slots:
heritage_designation_date:
description: 'Date when heritage status was designated.
'
range: date
slot_uri: dcterms:date
annotations:
custodian_types:
- '*'
custodian_types_rationale: Universal utility concept
exact_mappings:
- dcterms:date

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,25 +0,0 @@
classes:
APIEndpoint:
class_uri: schema:EntryPoint
description: An API endpoint.
slots:
- has_or_had_url
- has_or_had_description
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types

View file

@ -1,13 +0,0 @@
classes:
APIRequest:
class_uri: prov:Activity
description: An API request event.
slots:
- has_or_had_provenance
- has_or_had_endpoint
- has_or_had_version
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -1,12 +0,0 @@
classes:
APIVersion:
class_uri: schema:SoftwareApplication
description: Version of an API.
slots:
- has_or_had_label
- has_or_had_identifier
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -1,32 +0,0 @@
id: https://nde.nl/ontology/hc/class/AVEquipment
name: AVEquipment
title: AVEquipment
description: Audiovisual equipment used in heritage contexts (e.g., for playback, digitization).
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_name
- ../slots/has_or_had_type
classes:
AVEquipment:
class_uri: schema:Product
description: AV Equipment.
slots:
- has_or_had_name
- has_or_had_type
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -8,54 +8,58 @@ prefixes:
rico: https://www.ica.org/standards/RiC/ontology#
wd: http://www.wikidata.org/entity/
imports:
- linkml:types
- ./ArchiveOrganizationType
- ./CollectionType
- ./AcademicArchiveRecordSetTypes
- ../slots/has_or_had_scope
- ./Scope
- ../slots/hold_or_held_record_set_type
- ../slots/has_or_had_type
- ../slots/dual_class_link
- ../slots/has_or_had_hypernym
- ../slots/has_or_had_label
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- ../slots/is_or_was_related_to
- ./DualClassLink
- ./SpecificityAnnotation
- ./TemplateSpecificityScore
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
- ./WikidataAlignment
- ./WikiDataEntry
- ./AcademicArchiveRecordSetType
- linkml:types
- ./ArchiveOrganizationType
- ./CollectionType
- ./AcademicArchiveRecordSetTypes
- ../slots/has_or_had_scope # was: type_scope - migrated per Rule 53 (2026-01-15)
- ./Scope # for has_or_had_scope range (2026-01-15)
- ../slots/hold_or_held_record_set_type
- ../slots/has_or_had_custodian_type
- ../slots/dual_class_link
# broader_concept REMOVED - migrated to has_or_had_hypernym (Rule 53)
- ../slots/has_or_had_hypernym
- ../slots/has_or_had_label
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ../slots/is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15)
- ./DualClassLink
- ./SpecificityAnnotation
- ./TemplateSpecificityScore # was: TemplateSpecificityScores - migrated per Rule 53 (2026-01-17)
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
- ./WikidataAlignment
- ./WikiDataEntry # for is_or_was_related_to range (2026-01-15)
- ./AcademicArchiveRecordSetType
classes:
AcademicArchive:
is_a: ArchiveOrganizationType
class_uri: schema:ArchiveOrganization
description: Archive of a higher education institution (university, college, polytechnic).
slots:
- has_or_had_type
- has_or_had_custodian_type
- dual_class_link
- hold_or_held_record_set_type
# broader_concept REMOVED - migrated to has_or_had_hypernym (Rule 53)
- has_or_had_hypernym
- has_or_had_label
- specificity_annotation
- has_or_had_score
- is_or_was_related_to
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15)
structured_aliases:
- literal_form: Hochschularchiv
in_language: de
- literal_form: "archivo acad\xE9mico"
- literal_form: archivo académico
in_language: es
- literal_form: "archives acad\xE9miques"
- literal_form: archives académiques
in_language: fr
- literal_form: archivio accademico
in_language: it
- literal_form: academisch archief
in_language: nl
- literal_form: "arquivo acad\xEAmico"
- literal_form: arquivo acadêmico
in_language: pt
keywords:
- administrative records
@ -78,19 +82,26 @@ classes:
equals_expression: '["hc:UniversityAdministrativeFonds", "hc:StudentRecordSeries", "hc:FacultyPaperCollection", "hc:CampusDocumentationCollection"]
'
has_or_had_identifier:
has_or_had_identifier: # was: wikidata_entity - migrated per Rule 53 (2026-01-16)
pattern: ^Q[0-9]+$
# equals_string removed 2026-01-17: incompatible with range uriorcurie; value Q27032435 in exact_mappings
description: Wikidata identifier for Academic Archive concept (Q27032435)
has_or_had_type:
has_or_had_custodian_type:
equals_expression: '["hc:ArchiveOrganizationType"]'
is_or_was_related_to:
is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15)
range: WikidataAlignment
inlined: true
has_or_had_hypernym:
description: MIGRATED from broader_concept (Rule 53). SKOS broader (parent) concept in the archive type hierarchy.
description: >-
MIGRATED from broader_concept (Rule 53).
SKOS broader (parent) concept in the archive type hierarchy.
equals_expression: '["wd:Q166118"]'
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.
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 removed 2026-01-17: incompatible with range uriorcurie
ifabsent: string(archive)
dual_class_link:
range: DualClassLink
@ -118,8 +129,3 @@ classes:
- wd:Q124762372
- wd:Q1065413
- AcademicArchiveRecordSetType
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -8,31 +8,31 @@ prefixes:
rico: https://www.ica.org/standards/RiC/ontology#
wd: http://www.wikidata.org/entity/
imports:
- linkml:types
- ./CollectionType
- ../slots/has_or_had_type
- ../slots/dual_class_link
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- ../slots/has_or_had_scope
- ./Scope
- ../slots/is_or_was_related_to
- ./DualClassLink
- ./WikidataAlignment
- linkml:types
- ./CollectionType
- ../slots/has_or_had_custodian_type
- ../slots/dual_class_link
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ../slots/has_or_had_scope # was: type_scope - migrated per Rule 53 (2026-01-15)
- ./Scope # for has_or_had_scope range (2026-01-15)
- ../slots/is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15)
- ./DualClassLink # for DualClassLink range
- ./WikidataAlignment # for WikidataAlignment range
classes:
AcademicArchiveRecordSetType:
description: A rico:RecordSetType for classifying collections of academic and higher education institutional records.
is_a: CollectionType
class_uri: rico:RecordSetType
slots:
- has_or_had_type
- has_or_had_custodian_type
- dual_class_link
- specificity_annotation
- has_or_had_score
- has_or_had_scope
- is_or_was_related_to
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- has_or_had_scope # was: type_scope - migrated per Rule 53 (2026-01-15)
- is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15)
attributes:
has_or_had_scope:
has_or_had_scope: # was: type_scope - migrated per Rule 53 (2026-01-15)
range: Scope
multivalued: true
inlined_as_list: true
@ -47,26 +47,26 @@ classes:
structured_aliases:
- literal_form: Hochschularchivbestand
in_language: de
- literal_form: "fondo de archivo acad\xE9mico"
- literal_form: fondo de archivo académico
in_language: es
- literal_form: "fonds d'archives acad\xE9miques"
- literal_form: fonds d'archives académiques
in_language: fr
- literal_form: academisch archiefbestand
in_language: nl
slot_usage:
has_or_had_type:
has_or_had_custodian_type:
equals_expression: '["hc:ArchiveOrganizationType"]'
is_or_was_related_to:
is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15)
range: WikidataAlignment
inlined: true
dual_class_link:
range: DualClassLink
inlined: true
exact_mappings:
- wd:Q27032435
- rico:RecordSetType
- wd:Q27032435 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17)
- rico:RecordSetType
broad_mappings:
- wd:Q27032435
- wd:Q27032435
close_mappings:
- skos:Concept
see_also:
@ -76,8 +76,3 @@ classes:
- StudentRecordSeries
- FacultyPaperCollection
- CampusDocumentationCollection
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -15,12 +15,14 @@ imports:
- linkml:types
- ./AcademicArchiveRecordSetType
- ./AcademicArchive
- ../slots/has_or_had_type
- ../slots/has_or_had_custodian_type
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ./SpecificityAnnotation
- ./TemplateSpecificityScore
- ./TemplateSpecificityScore # was: TemplateSpecificityScores - migrated per Rule 53 (2026-01-17)
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
- ../slots/organizational_principle
- ../slots/organizational_principle_uri
@ -29,7 +31,7 @@ imports:
- ../slots/record_set_type
- ../slots/scope_exclude
- ../slots/scope_include
- ../slots/has_or_had_type
- ../slots/has_or_had_custodian_type
- ../slots/organizational_principle
- ../slots/organizational_principle_uri
- ../slots/privacy_note
@ -38,8 +40,8 @@ imports:
- ../slots/scope_exclude
- ../slots/scope_include
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- ../slots/has_or_had_type
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ../slots/has_or_had_custodian_type
- ../slots/organizational_principle
- ../slots/organizational_principle_uri
- ../slots/privacy_note
@ -48,22 +50,29 @@ imports:
- ../slots/scope_exclude
- ../slots/scope_include
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
classes:
UniversityAdministrativeFonds:
is_a: AcademicArchiveRecordSetType
class_uri: rico:RecordSetType
description: "A rico:RecordSetType for university administrative records organized as a fonds.\n\n**Definition**:\nRecords created or accumulated by a university's central administration in the \nexercise of governance, policy-making, and operational functions. Organized \naccording to archival principles of provenance (respect des fonds).\n\n**Typical Contents**:\n- Governance records (board minutes, resolutions, bylaws)\n- Committee records (senate, faculty councils, standing committees)\n- Policy records (institutional policies, procedures, guidelines)\n- Strategic planning documents\n- Accreditation and institutional assessment records\n- Executive correspondence\n\n**RiC-O Alignment**:\nThis class is a specialized rico:RecordSetType. Records classified with this\ntype follow the fonds organizational principle as defined by rico-rst:Fonds\n(respect des fonds / provenance-based organization from university central administration).\n"
description: "A rico:RecordSetType for university administrative records organized as a fonds.\n\n**Definition**:\nRecords\
\ created or accumulated by a university's central administration in the \nexercise of governance, policy-making, and\
\ operational functions. Organized \naccording to archival principles of provenance (respect des fonds).\n\n**Typical\
\ Contents**:\n- Governance records (board minutes, resolutions, bylaws)\n- Committee records (senate, faculty councils,\
\ standing committees)\n- Policy records (institutional policies, procedures, guidelines)\n- Strategic planning documents\n\
- Accreditation and institutional assessment records\n- Executive correspondence\n\n**RiC-O Alignment**:\nThis class\
\ is a specialized rico:RecordSetType. Records classified with this\ntype follow the fonds organizational principle\
\ as defined by rico-rst:Fonds\n(respect des fonds / provenance-based organization from university central administration).\n"
structured_aliases:
- literal_form: Hochschulverwaltungsbestand
in_language: de
- literal_form: "fondo de administraci\xF3n universitaria"
- literal_form: fondo de administración universitaria
in_language: es
- literal_form: fonds d'administration universitaire
in_language: fr
- literal_form: universiteitsbestuursarchief
in_language: nl
- literal_form: "fundo de administra\xE7\xE3o universit\xE1ria"
- literal_form: fundo de administração universitária
in_language: pt
keywords:
- governance records
@ -89,9 +98,9 @@ classes:
- rico:RecordSetType
- rico-rst:Fonds
slots:
- has_or_had_type
- has_or_had_custodian_type
- specificity_annotation
- has_or_had_score
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- organizational_principle
- organizational_principle_uri
- record_note
@ -99,7 +108,7 @@ classes:
- scope_exclude
- scope_include
slot_usage:
has_or_had_type:
has_or_had_custodian_type:
equals_expression: '["hc:ArchiveOrganizationType"]'
record_set_type:
equals_string: UniversityAdministrativeFonds
@ -108,30 +117,35 @@ classes:
organizational_principle_uri:
equals_string: https://www.ica.org/standards/RiC/vocabularies/recordSetTypes#Fonds
record_note:
equals_string: This RecordSetType classifies record sets following the fonds principle. The fonds structure reflects provenance from university central administration.
equals_string: This RecordSetType classifies record sets following the fonds principle. The fonds structure reflects
provenance from university central administration.
scope_include:
equals_string: '["governance records", "committee records", "policy records", "strategic planning", "accreditation records"]'
equals_string: '["governance records", "committee records", "policy records", "strategic planning", "accreditation
records"]'
scope_exclude:
equals_string: '["student records", "faculty papers", "research data"]'
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept
AcademicStudentRecordSeries:
is_a: AcademicArchiveRecordSetType
class_uri: rico:RecordSetType
description: "A rico:RecordSetType for student records organized as archival series.\n\n**Definition**:\nRecords documenting the academic careers and activities of students, typically \norganized as series within a larger university fonds. Subject to retention \nschedules and privacy regulations (FERPA in US, GDPR in EU, AVG in NL).\n\n**Typical Contents**:\n- Enrollment and registration records\n- Academic transcripts and grade records\n- Graduation records and diploma registers\n- Disciplinary records\n- Financial aid records\n- Student organization records\n\n**Privacy Considerations**:\nAccess restrictions typically apply due to personally identifiable information.\nHistorical student records (typically 75+ years) may have fewer restrictions.\n\n**RiC-O Alignment**:\nThis class is a specialized rico:RecordSetType. Records classified with this\ntype follow the series organizational principle as defined by rico-rst:Series\n(organizational level within the university fonds).\n"
description: "A rico:RecordSetType for student records organized as archival series.\n\n**Definition**:\nRecords documenting\
\ the academic careers and activities of students, typically \norganized as series within a larger university fonds.\
\ Subject to retention \nschedules and privacy regulations (FERPA in US, GDPR in EU, AVG in NL).\n\n**Typical Contents**:\n\
- Enrollment and registration records\n- Academic transcripts and grade records\n- Graduation records and diploma registers\n\
- Disciplinary records\n- Financial aid records\n- Student organization records\n\n**Privacy Considerations**:\nAccess\
\ restrictions typically apply due to personally identifiable information.\nHistorical student records (typically 75+\
\ years) may have fewer restrictions.\n\n**RiC-O Alignment**:\nThis class is a specialized rico:RecordSetType. Records\
\ classified with this\ntype follow the series organizational principle as defined by rico-rst:Series\n(organizational\
\ level within the university fonds).\n"
structured_aliases:
- literal_form: Studentenaktenserie
in_language: de
- literal_form: serie de expedientes estudiantiles
in_language: es
- literal_form: "s\xE9rie de dossiers \xE9tudiants"
- literal_form: série de dossiers étudiants
in_language: fr
- literal_form: studentendossiers
in_language: nl
- literal_form: "s\xE9rie de registros de alunos"
- literal_form: série de registros de alunos
in_language: pt
keywords:
- enrollment records
@ -158,9 +172,9 @@ classes:
- rico-rst:Series
- UniversityAdministrativeFonds
slots:
- has_or_had_type
- has_or_had_custodian_type
- specificity_annotation
- has_or_had_score
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- organizational_principle
- organizational_principle_uri
- privacy_note
@ -169,7 +183,7 @@ classes:
- scope_exclude
- scope_include
slot_usage:
has_or_had_type:
has_or_had_custodian_type:
equals_expression: '["hc:ArchiveOrganizationType"]'
record_set_type:
equals_string: AcademicStudentRecordSeries
@ -178,18 +192,28 @@ classes:
organizational_principle_uri:
equals_string: https://www.ica.org/standards/RiC/vocabularies/recordSetTypes#Series
record_note:
equals_string: This RecordSetType classifies record sets following the series principle. Typically a series within the university administration fonds or registrar's office fonds.
equals_string: This RecordSetType classifies record sets following the series principle. Typically a series within
the university administration fonds or registrar's office fonds.
scope_include:
equals_string: '["enrollment records", "academic transcripts", "graduation records", "disciplinary records", "financial aid records"]'
equals_string: '["enrollment records", "academic transcripts", "graduation records", "disciplinary records", "financial
aid records"]'
scope_exclude:
equals_string: '["faculty records", "research records", "administrative policy"]'
privacy_note:
equals_string: Subject to educational records privacy laws (FERPA, GDPR, AVG). Access restrictions typically apply for records less than 75 years old.
equals_string: Subject to educational records privacy laws (FERPA, GDPR, AVG). Access restrictions typically apply
for records less than 75 years old.
FacultyPaperCollection:
is_a: AcademicArchiveRecordSetType
class_uri: rico:RecordSetType
description: "A rico:RecordSetType for faculty papers and personal archives.\n\n**Definition**:\nPersonal papers of faculty members documenting their academic careers, research \nactivities, teaching, and professional service. These are typically acquired as \ndonations or bequests, distinct from official university records.\n\n**Typical Contents**:\n- Research documentation and notes\n- Correspondence (professional and personal)\n- Lecture notes and course materials\n- Manuscripts and drafts\n- Conference papers and presentations\n- Professional organization records\n- Photographs and audiovisual materials\n\n**Provenance**:\nUnlike administrative fonds, faculty papers are personal archives with the \nindividual faculty member as creator/accumulator. The university acquires \ncustody but respects original order where it exists.\n\n**RiC-O Alignment**:\nThis class is a specialized rico:RecordSetType. Records classified with this\ntype follow the fonds organizational principle as defined\
\ by rico-rst:Fonds\n(personal papers fonds with the faculty member as creator/accumulator).\n"
description: "A rico:RecordSetType for faculty papers and personal archives.\n\n**Definition**:\nPersonal papers of faculty\
\ members documenting their academic careers, research \nactivities, teaching, and professional service. These are typically\
\ acquired as \ndonations or bequests, distinct from official university records.\n\n**Typical Contents**:\n- Research\
\ documentation and notes\n- Correspondence (professional and personal)\n- Lecture notes and course materials\n- Manuscripts\
\ and drafts\n- Conference papers and presentations\n- Professional organization records\n- Photographs and audiovisual\
\ materials\n\n**Provenance**:\nUnlike administrative fonds, faculty papers are personal archives with the \nindividual\
\ faculty member as creator/accumulator. The university acquires \ncustody but respects original order where it exists.\n\
\n**RiC-O Alignment**:\nThis class is a specialized rico:RecordSetType. Records classified with this\ntype follow the\
\ fonds organizational principle as defined by rico-rst:Fonds\n(personal papers fonds with the faculty member as creator/accumulator).\n"
structured_aliases:
- literal_form: Professorennachlass
in_language: de
@ -227,11 +251,12 @@ classes:
- rico:RecordSetType
- rico-rst:Fonds
annotations:
acquisition_note: Typically acquired through donation or bequest. May include restrictions on access or publication specified by donor agreement.
acquisition_note: Typically acquired through donation or bequest. May include restrictions on access or publication
specified by donor agreement.
slots:
- has_or_had_type
- has_or_had_custodian_type
- specificity_annotation
- has_or_had_score
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- organizational_principle
- organizational_principle_uri
- record_note
@ -239,7 +264,7 @@ classes:
- scope_exclude
- scope_include
slot_usage:
has_or_had_type:
has_or_had_custodian_type:
equals_expression: '["hc:ArchiveOrganizationType", "hc:LibraryType"]'
record_set_type:
equals_string: FacultyPaperCollection
@ -248,7 +273,8 @@ classes:
organizational_principle_uri:
equals_string: https://www.ica.org/standards/RiC/vocabularies/recordSetTypes#Fonds
record_note:
equals_string: This RecordSetType classifies record sets following the fonds principle. Personal archives with individual faculty member as creator/accumulator.
equals_string: This RecordSetType classifies record sets following the fonds principle. Personal archives with individual
faculty member as creator/accumulator.
scope_include:
equals_string: '["research documentation", "correspondence", "lecture notes", "manuscripts", "conference papers"]'
scope_exclude:
@ -256,18 +282,26 @@ classes:
CampusDocumentationCollection:
is_a: AcademicArchiveRecordSetType
class_uri: rico:RecordSetType
description: "A rico:RecordSetType for campus life and institutional documentation.\n\n**Definition**:\nMaterials documenting campus life, institutional identity, and university \nculture beyond formal administrative records. Often includes visual materials, \npublications, and ephemera that capture the lived experience of the institution.\n\n**Typical Contents**:\n- Campus photographs and audiovisual materials\n- University publications (yearbooks, newspapers, magazines)\n- Ephemera (programs, posters, invitations)\n- Memorabilia and artifacts\n- Oral histories\n- Event documentation\n- Building and facilities documentation\n\n**Collection Nature**:\nMay be assembled collections (artificial) rather than strictly provenance-based,\nespecially for ephemera and visual materials. Documentation value often takes\nprecedence over strict archival arrangement.\n\n**RiC-O Alignment**:\nThis class is a specialized rico:RecordSetType. Records classified with this\ntype follow the collection organizational\
\ principle as defined by rico-rst:Collection\n(assembled/artificial collection organized by subject or documentation purpose).\n"
description: "A rico:RecordSetType for campus life and institutional documentation.\n\n**Definition**:\nMaterials documenting\
\ campus life, institutional identity, and university \nculture beyond formal administrative records. Often includes\
\ visual materials, \npublications, and ephemera that capture the lived experience of the institution.\n\n**Typical\
\ Contents**:\n- Campus photographs and audiovisual materials\n- University publications (yearbooks, newspapers, magazines)\n\
- Ephemera (programs, posters, invitations)\n- Memorabilia and artifacts\n- Oral histories\n- Event documentation\n\
- Building and facilities documentation\n\n**Collection Nature**:\nMay be assembled collections (artificial) rather\
\ than strictly provenance-based,\nespecially for ephemera and visual materials. Documentation value often takes\nprecedence\
\ over strict archival arrangement.\n\n**RiC-O Alignment**:\nThis class is a specialized rico:RecordSetType. Records\
\ classified with this\ntype follow the collection organizational principle as defined by rico-rst:Collection\n(assembled/artificial\
\ collection organized by subject or documentation purpose).\n"
structured_aliases:
- literal_form: Campus-Dokumentationssammlung
in_language: de
- literal_form: "colecci\xF3n de documentaci\xF3n del campus"
- literal_form: colección de documentación del campus
in_language: es
- literal_form: collection de documentation du campus
in_language: fr
- literal_form: campusdocumentatiecollectie
in_language: nl
- literal_form: "cole\xE7\xE3o de documenta\xE7\xE3o do campus"
- literal_form: coleção de documentação do campus
in_language: pt
keywords:
- campus photographs
@ -295,11 +329,12 @@ classes:
- rico:RecordSetType
- rico-rst:Collection
annotations:
collection_nature_note: Often includes artificial/assembled collections organized by subject, format, or documentation purpose rather than strict provenance.
collection_nature_note: Often includes artificial/assembled collections organized by subject, format, or documentation
purpose rather than strict provenance.
slots:
- has_or_had_type
- has_or_had_custodian_type
- specificity_annotation
- has_or_had_score
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- organizational_principle
- organizational_principle_uri
- record_note
@ -307,7 +342,7 @@ classes:
- scope_exclude
- scope_include
slot_usage:
has_or_had_type:
has_or_had_custodian_type:
equals_expression: '["hc:ArchiveOrganizationType", "hc:LibraryType", "hc:MuseumType"]'
record_set_type:
equals_string: CampusDocumentationCollection
@ -316,7 +351,8 @@ classes:
organizational_principle_uri:
equals_string: https://www.ica.org/standards/RiC/vocabularies/recordSetTypes#Collection
record_note:
equals_string: This RecordSetType classifies record sets following the collection principle. May be assembled collection (artificial) organized by subject or documentation purpose.
equals_string: This RecordSetType classifies record sets following the collection principle. May be assembled collection
(artificial) organized by subject or documentation purpose.
scope_include:
equals_string: '["photographs", "audiovisual materials", "publications", "ephemera", "oral histories", "memorabilia"]'
scope_exclude:

View file

@ -1,23 +0,0 @@
id: https://nde.nl/ontology/hc/class/AcademicInstitution
name: AcademicInstitution
title: AcademicInstitution
description: An institution of higher education or research.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_name
classes:
AcademicInstitution:
class_uri: schema:EducationalOrganization
description: Academic institution.
slots:
- has_or_had_name
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -1,23 +0,0 @@
id: https://nde.nl/ontology/hc/class/AcademicProgram
name: AcademicProgram
title: AcademicProgram
description: An educational or research program offered by an academic institution.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_name
classes:
AcademicProgram:
class_uri: schema:EducationalOccupationalProgram
description: Academic program.
slots:
- has_or_had_name
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -1,173 +0,0 @@
# Access class
# Structured access information for heritage collections and services
#
# Created per slot_fixes.yaml revision for collection_access migration
# Generation date: 2026-01-19
# Rule compliance: 53 (slot_fixes.yaml), 39 (RiC-O naming)
id: https://nde.nl/ontology/hc/class/Access
name: Access
title: Access Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
crm: http://www.cidoc-crm.org/cidoc-crm/
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ./TimeSpan
- ../slots/has_or_had_frequency
- ./Frequency
- ../slots/condition_of_access
- ../slots/has_or_had_type
- ../slots/has_or_had_description
- ../slots/has_or_had_user_category
- ../enums/AccessTypeEnum
classes:
Access:
class_uri: dcterms:RightsStatement
description: |
Structured access information for heritage collections, services, or facilities.
**Purpose**:
Replaces simple string descriptions of access conditions with structured
data capturing access types, eligible users, conditions, and restrictions.
**Key Properties**:
- `has_or_had_type`: Type of access (PUBLIC, BY_APPOINTMENT, RESTRICTED, etc.)
- `has_or_had_user_category`: Who can access (public, students, faculty, researchers)
- `condition_of_access`: Conditions or requirements for access
- `has_or_had_description`: Free-text description
- `temporal_extent`: When this access policy applies
**Access Types**:
- PUBLIC: Open to general public
- BY_APPOINTMENT: Requires advance appointment
- ACADEMIC: Restricted to academic community
- RESEARCHER: Restricted to credentialed researchers
- MEMBER: Requires membership
- RESTRICTED: Limited access with specific conditions
- CLOSED: Not currently accessible
- DIGITAL_ONLY: Available only in digital form
**Ontological Alignment**:
- **Primary**: `dcterms:RightsStatement` - Dublin Core rights statement
- **Close**: `schema:publicAccess` - Schema.org access indicator
- **Related**: `crm:E30_Right` - CIDOC-CRM rights
exact_mappings:
- dcterms:RightsStatement
close_mappings:
- schema:publicAccess
related_mappings:
- crm:E30_Right
slots:
- has_or_had_type
- has_or_had_user_category
- condition_of_access
- has_or_had_description
- temporal_extent
- is_digital_access
- has_or_had_frequency
slot_usage:
has_or_had_type:
range: AccessTypeEnum
required: true
description: Type of access offered
has_or_had_user_category:
required: false
description: |
Categories of users eligible for this access.
Examples: "enrolled students", "faculty", "visiting scholars",
"credentialed researchers", "general public"
examples:
- value: "enrolled students"
- value: "faculty and staff"
- value: "visiting researchers with credentials"
temporal_extent:
required: false
range: TimeSpan
inlined: true
description: |
Time period during which this access policy applies.
Useful for temporary restrictions or seasonal access.
is_digital_access:
required: false
range: boolean
description: Whether this is digital access
has_or_had_frequency:
required: false
range: Frequency
description: Frequency of access (e.g., daily, weekly, by appointment)
inlined: true
examples:
- value:
has_or_had_label: "Daily"
description: Access available daily
annotations:
specificity_score: 0.50
specificity_rationale: "Moderately specific - applies to collection and service access contexts"
custodian_types: '["*"]'
custodian_types_rationale: "All institution types offer some form of access"
comments:
- "Created per slot_fixes.yaml revision for collection_access migration"
- "Replaces string-based collection_access with structured access data"
- "RULE 53: Part of collection_access → offers_or_offered_access + Access migration"
examples:
- value:
has_or_had_type: PUBLIC
has_or_had_description: "Open to general public during gallery hours"
has_or_had_user_category:
- "general public"
condition_of_access:
- "during posted gallery hours"
description: "Public access during gallery hours"
- value:
has_or_had_type: BY_APPOINTMENT
has_or_had_user_category:
- "credentialed researchers"
- "graduate students with faculty sponsor"
condition_of_access:
- "48-hour advance booking required"
- "handling training required for original materials"
- "fragile materials limited to supervised viewing only"
description: "Research access by appointment with conditions"
- value:
has_or_had_type: ACADEMIC
has_or_had_description: "Open to enrolled students and faculty; public by appointment"
has_or_had_user_category:
- "enrolled students"
- "faculty"
- "research staff"
condition_of_access:
- "valid university ID"
is_digital_access: false
description: "Academic community access with public by appointment"
- value:
has_or_had_type: DIGITAL_ONLY
has_or_had_description: "Collection accessible only through online database"
has_or_had_user_category:
- "anyone with internet access"
is_digital_access: true
description: "Digital-only access"

View file

@ -1,31 +0,0 @@
id: https://nde.nl/ontology/hc/class/AccessApplication
name: AccessApplication
title: Access Application
description: An application or process for requesting access to materials. MIGRATED from has_access_application_url slot per Rule 53. Follows schema:Action.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
imports:
- linkml:types
- ../slots/has_or_had_label
- ../slots/has_or_had_description
- ../slots/has_or_had_url
- ./URL
default_prefix: hc
classes:
AccessApplication:
class_uri: schema:Action
slots:
- has_or_had_label
- has_or_had_description
- has_or_had_url
slot_usage:
has_or_had_url:
range: URL
inlined: true
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -1,23 +0,0 @@
id: https://nde.nl/ontology/hc/class/AccessControl
name: AccessControl
title: AccessControl
description: Mechanisms or policies for controlling access to resources.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_description
classes:
AccessControl:
class_uri: schema:DigitalDocumentPermission
description: Access control policy.
slots:
- has_or_had_description
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -1,32 +0,0 @@
id: https://nde.nl/ontology/hc/class/AccessInterface
name: AccessInterface
title: Access Interface
description: An interface for accessing digital resources (e.g., API, portal). MIGRATED from has_access_interface_url slot per Rule 53. Follows dcat:DataService.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
dcat: http://www.w3.org/ns/dcat#
imports:
- linkml:types
- ../slots/has_or_had_url
- ./URL
- ../slots/has_or_had_label
- ../slots/has_or_had_description
default_prefix: hc
classes:
AccessInterface:
class_uri: dcat:DataService
slots:
- has_or_had_url
- has_or_had_label
- has_or_had_description
slot_usage:
has_or_had_url:
range: URL
inlined: true
required: true
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -1,23 +0,0 @@
id: https://nde.nl/ontology/hc/class/AccessLevel
name: AccessLevel
title: AccessLevel
description: A defined level of access permission (e.g., Public, Restricted, Confidential).
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_label
classes:
AccessLevel:
class_uri: skos:Concept
description: Access level concept.
slots:
- has_or_had_label
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -12,47 +12,81 @@ prefixes:
wd: http://www.wikidata.org/entity/
default_prefix: hc
imports:
- linkml:types
- ../slots/temporal_extent
- ./TimeSpan
- ../slots/embargo_end_date
- ../slots/policy_id
- ../slots/policy_name
- ../slots/has_or_had_description
- ./Description
- ../slots/has_or_had_level
- ./AccessLevel
- ../slots/requires_appointment
- ../slots/poses_or_posed_condition
- ./Condition
- ../slots/credentials_required
- ../slots/cultural_protocol_url
- ../slots/embargo_reason
- ../slots/imposes_or_imposed
- ./Fee
- ../slots/fee_required
- ../slots/legal_basis
- ../slots/registration_required
- ../slots/review_date
- ../slots/rights_statement
- ../slots/rights_statement_url
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- ./SpecificityAnnotation
- ./TemplateSpecificityScore
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
- ../slots/condition_of_access
- ../slots/requires_or_required
- ./Appointment
- linkml:types
# Migrated per slot_fixes.yaml (Rule 53) - 2026-01-14
# valid_from + valid_to → temporal_extent + TimeSpan (with begin_of_the_begin/end_of_the_end)
- ../slots/temporal_extent
- ./TimeSpan
- ../slots/embargo_end_date
- ../slots/contact_email
- ../slots/policy_id
- ../slots/policy_name
- ../slots/has_or_had_access_description
- ../slots/has_or_had_access_level
# RESTORED 2026-01-15: requires_appointment has correct semantics (schema:reservationRequired)
# The is_or_was_required slot was incorrectly using schema:isRequired which is for form field validation
# KEPT for backward compatibility - simple boolean for basic use cases
- ../slots/requires_appointment
- ../slots/condition
- ../slots/credentials_required
- ../slots/cultural_protocol_url
- ../slots/embargo_reason
- ../slots/fee_amount
- ../slots/fee_required
- ../slots/legal_basis
- ../slots/registration_required
- ../slots/review_date
- ../slots/rights_statement
- ../slots/rights_statement_url
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ./SpecificityAnnotation
- ./TemplateSpecificityScore # was: TemplateSpecificityScores - migrated per Rule 53 (2026-01-17)
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
# ADDED 2026-01-17: Rich appointment modeling per slot_fixes.yaml revision for appointment_required
# These enable structured access conditions with Appointment entities (vs. just boolean)
- ../slots/condition_of_access
- ../slots/requires_or_required
- ./Appointment
classes:
AccessPolicy:
class_uri: premis:RightsStatus
description: "Access policy defining conditions under which heritage collections can be accessed.\n\n**PURPOSE**:\n\nAccessPolicy captures the access conditions governing a Collection:\n- WHO can access (public, researchers, staff only)\n- HOW access is granted (open, by appointment, with credentials)\n- WHEN access is available (opening hours, embargo periods)\n- WHAT restrictions apply (fragile materials, privacy, cultural sensitivity)\n\n1. **PREMIS**:\n - `premis:RightsStatus` - \"Information about the rights status of an object.\"\n - Links to Collection via premis:rightsStatus\n\n2. **Dublin Core**:\n - `dcterms:accessRights` - \"Information about who may access the resource\n or an indication of its security status.\"\n\n3. **RiC-O**:\n - `rico:hasOrHadAllMembersWithAccessConditions` - Links RecordSet to access\n conditions applying to all members\n\n4. **RightsStatements.org**:\n - Standardized rights statements for cultural heritage\n - E.g., \"In Copyright\"\
, \"No Copyright\", \"Unknown Copyright\"\n\n**ACCESS LEVEL TAXONOMY**:\n\n```\nAccessPolicy (root)\n \u2502\n \u251C\u2500\u2500 OpenAccess\n \u2502 \u251C\u2500\u2500 PUBLIC_OPEN - No restrictions, walk-in access\n \u2502 \u251C\u2500\u2500 PUBLIC_REGISTRATION - Free registration required\n \u2502 \u2514\u2500\u2500 PUBLIC_ONLINE - Digital access freely available\n \u2502\n \u251C\u2500\u2500 RestrictedAccess\n \u2502 \u251C\u2500\u2500 RESEARCHERS_ONLY - Academic researchers with credentials\n \u2502 \u251C\u2500\u2500 BY_APPOINTMENT - Advance booking required\n \u2502 \u251C\u2500\u2500 STAFF_ONLY - Internal access only\n \u2502 \u2514\u2500\u2500 PERMISSION_REQUIRED - Written permission needed\n \u2502\n \u251C\u2500\u2500 ClosedAccess\n \u2502 \u251C\u2500\u2500 TEMPORARILY_CLOSED - Renovation, conservation\n \u2502 \u251C\u2500\u2500 EMBARGOED - Time-limited closure\n \u2502 \u251C\u2500\u2500 PERMANENTLY_CLOSED - Not accessible\n\
\ \u2502 \u2514\u2500\u2500 REPATRIATED - Returned to community of origin\n \u2502\n \u2514\u2500\u2500 ConditionalAccess\n \u251C\u2500\u2500 CULTURALLY_SENSITIVE - Indigenous/sacred materials\n \u251C\u2500\u2500 PRIVACY_RESTRICTED - Personal data protection\n \u251C\u2500\u2500 FRAGILE_HANDLING - Special handling required\n \u2514\u2500\u2500 LEGAL_RESTRICTION - Copyright, legal constraints\n```\n\n**USE CASES**:\n\n1. **Archive Open Access**:\n ```yaml\n AccessPolicy:\n policy_id: \"hc:access-policy/nationaal-archief-open\"\n access_level: \"PUBLIC_OPEN\"\n access_description: \"Open to all visitors during reading room hours\"\n conditions: \"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 requires_appointment: 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: \"hc:access-policy/indigenous-protocols\"\n access_level: \"CULTURALLY_SENSITIVE\"\n access_description: \"Access governed by Traditional Knowledge protocols\"\n conditions: \"Consultation with originating community required\"\n cultural_protocol_url: \"https://localcontexts.org/tk-labels/\"\n ```\n\n**RELATIONSHIP TO DIM ARCHIVE**:\n\nDimArchive (Dark archive / Preservation-only storage) uses AccessPolicy to express:\n- Materials stored\
\ for preservation, not current access\n- Access restricted until triggering conditions (time, event)\n- \"Gray literature\" or un-catalogued backlogs awaiting processing\n"
description: "Access policy defining conditions under which heritage collections can be accessed.\n\n**PURPOSE**:\n\n\
AccessPolicy captures the access conditions governing a Collection:\n- WHO can access (public, researchers, staff only)\n\
- HOW access is granted (open, by appointment, with credentials)\n- WHEN access is available (opening hours, embargo\
\ periods)\n- WHAT restrictions apply (fragile materials, privacy, cultural sensitivity)\n\n1. **PREMIS**:\n - `premis:RightsStatus`\
\ - \"Information about the rights status of an object.\"\n - Links\
\ to Collection via premis:rightsStatus\n\n2. **Dublin Core**:\n - `dcterms:accessRights` - \"Information\
\ about who may access the resource\n or an indication of its security status.\"\n\n3. **RiC-O**:\n - `rico:hasOrHadAllMembersWithAccessConditions`\
\ - Links RecordSet to access\n conditions applying to all members\n\n4. **RightsStatements.org**:\n - Standardized\
\ rights statements for cultural heritage\n - E.g., \"In Copyright\", \"No Copyright\", \"Unknown Copyright\"\n\n\
**ACCESS LEVEL TAXONOMY**:\n\n```\nAccessPolicy (root)\n │\n ├── OpenAccess\n │ ├── PUBLIC_OPEN - No restrictions,\
\ walk-in access\n │ ├── PUBLIC_REGISTRATION - Free registration required\n │ └── PUBLIC_ONLINE - Digital\
\ access freely available\n │\n ├── RestrictedAccess\n │ ├── RESEARCHERS_ONLY - Academic researchers with credentials\n\
\ │ ├── BY_APPOINTMENT - Advance booking required\n │ ├── STAFF_ONLY - Internal access only\n │ └── PERMISSION_REQUIRED\
\ - Written permission needed\n │\n ├── ClosedAccess\n │ ├── TEMPORARILY_CLOSED - Renovation, conservation\n\
\ │ ├── EMBARGOED - Time-limited closure\n │ ├── PERMANENTLY_CLOSED - Not accessible\n │ └── REPATRIATED\
\ - Returned to community of origin\n │\n └── ConditionalAccess\n ├── CULTURALLY_SENSITIVE - Indigenous/sacred\
\ materials\n ├── PRIVACY_RESTRICTED - Personal data protection\n ├── FRAGILE_HANDLING - Special handling\
\ required\n └── LEGAL_RESTRICTION - Copyright, legal constraints\n```\n\n**USE CASES**:\n\n1. **Archive Open\
\ Access**:\n ```yaml\n AccessPolicy:\n policy_id: \"hc:access-policy/nationaal-archief-open\"\n access_level:\
\ \"PUBLIC_OPEN\"\n access_description: \"Open to all visitors during reading room hours\"\n conditions: \"\
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 requires_appointment: 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:\
\ \"hc:access-policy/indigenous-protocols\"\n access_level: \"CULTURALLY_SENSITIVE\"\n access_description: \"\
Access governed by Traditional Knowledge protocols\"\n conditions: \"Consultation with originating community required\"\
\n cultural_protocol_url: \"https://localcontexts.org/tk-labels/\"\n ```\n\n**RELATIONSHIP TO DIM ARCHIVE**:\n\
\nDimArchive (Dark archive / Preservation-only storage) uses AccessPolicy to express:\n- Materials stored for preservation,\
\ not current access\n- Access restricted until triggering conditions (time, event)\n- \"Gray literature\" or un-catalogued\
\ backlogs awaiting processing\n"
exact_mappings:
- premis:RightsStatus
- dcterms:accessRights
@ -62,17 +96,21 @@ classes:
related_mappings:
- rico:hasOrHadAllMembersWithAccessConditions
slots:
- has_or_had_description
- has_or_had_level
- has_or_had_access_description
- has_or_had_access_level
# RESTORED 2026-01-15: requires_appointment - correct semantics (schema:reservationRequired)
# KEPT for backward compatibility as simple boolean flag
- requires_appointment
- poses_or_posed_condition
- condition
# ADDED 2026-01-17: Rich access condition modeling per slot_fixes.yaml revision
- condition_of_access
- requires_or_required
- contact_email
- credentials_required
- cultural_protocol_url
- embargo_end_date
- embargo_reason
- imposes_or_imposed
- fee_amount
- fee_required
- legal_basis
- policy_id
@ -82,8 +120,8 @@ classes:
- rights_statement
- rights_statement_url
- specificity_annotation
- has_or_had_score
- temporal_extent
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- temporal_extent # was: valid_from + valid_to - migrated per Rule 53
slot_usage:
policy_id:
range: uriorcurie
@ -102,60 +140,29 @@ classes:
description: Restricted to researchers
- value: Embargoed until 2050
description: Time-limited closure
has_or_had_level:
description: 'Access level of the policy.
MIGRATED from has_or_had_access_level per Rule 53.
Uses AccessLevel class.
'
range: AccessLevel
has_or_had_access_level:
range: string
required: true
inlined: true
examples:
- value:
has_or_had_label: PUBLIC_OPEN
- value:
has_or_had_label: RESEARCHERS_ONLY
- value:
has_or_had_label: EMBARGOED
has_or_had_description:
description: 'Description of the access policy.
MIGRATED from has_or_had_access_description per Rule 53.
Uses Description class.
'
range: Description
inlined: true
- value: PUBLIC_OPEN
- value: RESEARCHERS_ONLY
- value: EMBARGOED
has_or_had_access_description:
range: string
examples:
- value:
description_text: Open to all visitors during reading room hours (Mon-Fri 9-17)
- value: Open to all visitors during reading room hours (Mon-Fri 9-17)
description: Archive public access
- value:
description_text: Access restricted to academic researchers with institutional has_or_had_affiliation
- value: Access restricted to academic researchers with institutional has_or_had_affiliation
description: University special collections
poses_or_posed_condition:
range: Condition
condition:
range: string
multivalued: true
inlined: true
inlined_as_list: true
description: 'Access conditions or requirements using structured Condition class.
MIGRATED from condition string slot per slot_fixes.yaml (Rule 53, 2026-01-22).
'
examples:
- value:
- has_or_had_type: AccessCondition
has_or_had_description:
description_text: Valid government-issued ID required
- has_or_had_type: AccessCondition
has_or_had_description:
description_text: Registration form must be completed
description: Archive access conditions using Condition class
- Valid government-issued ID required
- Registration form must be completed
- Bags and coats must be stored in lockers
description: Archive access conditions
rights_statement:
range: string
examples:
@ -172,11 +179,9 @@ classes:
description: No Copyright - United States
requires_appointment:
range: boolean
description: 'Whether an appointment is required for access.
description: |
Whether an appointment is required for access.
Uses schema:reservationRequired which is semantically correct for access policies.
'
examples:
- value: true
description: Appointment required
@ -199,37 +204,13 @@ classes:
description: Free access
- value: true
description: Fee required
imposes_or_imposed:
description: 'Fees imposed by the access policy.
MIGRATED from fee_amount per Rule 53.
Uses Fee class with structured Quantity.
'
range: Fee
inlined: true
multivalued: true
fee_amount:
range: string
examples:
- value:
has_or_had_quantity:
quantity_value: 5.0
has_or_had_unit:
unit_value: EUR
has_or_had_description: Daily reading room fee
description: "\u20AC5.00 per day"
- value:
has_or_had_quantity:
quantity_value: 0
has_or_had_description: Free for researchers
description: Free for researchers
- value:
has_or_had_quantity:
quantity_value: 10.0
has_or_had_unit:
unit_value: EUR
has_or_had_description: General public fee
description: "\u20AC10 for general public"
- value: €5.00 per day
description: Daily reading room fee
- value: Free for researchers, €10 for general public
description: Tiered fee structure
embargo_end_date:
range: date
examples:
@ -259,14 +240,16 @@ classes:
examples:
- value: '2025-12-31'
description: Annual review date
temporal_extent:
description: 'Validity period for this access policy using CIDOC-CRM TimeSpan.
contact_email:
range: string
examples:
- value: access@nationaalarchief.nl
description: Access request contact
temporal_extent: # was: valid_from + valid_to - migrated per Rule 53
description: |
Validity period for this access policy using CIDOC-CRM TimeSpan.
MIGRATED from valid_from + valid_to per slot_fixes.yaml (Rule 53).
Uses begin_of_the_begin for policy start date and end_of_the_end for expiry.
'
range: TimeSpan
inlined: true
required: false
@ -275,46 +258,40 @@ classes:
begin_of_the_begin: '2024-01-01'
end_of_the_end: '2050-12-31'
description: Policy valid from 2024 until end of 2050
# ADDED 2026-01-17: Rich access condition modeling per slot_fixes.yaml revision
condition_of_access:
description: 'Textual conditions or requirements for access (RiC-O style).
description: |
Textual conditions or requirements for access (RiC-O style).
Use for human-readable access requirements. For structured appointment
data, use requires_or_required with Appointment instances.
'
range: string
multivalued: true
examples:
- value:
- Appointment required 48 hours in advance
- Valid researcher credentials required
- Materials must be handled with cotton gloves
- "Appointment required 48 hours in advance"
- "Valid researcher credentials required"
- "Materials must be handled with cotton gloves"
description: Multiple access conditions
requires_or_required:
description: 'Links to structured Appointment entities for rich appointment modeling.
description: |
Links to structured Appointment entities for rich appointment modeling.
ADDED 2026-01-17 per slot_fixes.yaml revision for appointment_required.
Use this for detailed appointment requirements (lead time, booking method,
contact info). For simple boolean, use requires_appointment instead.
'
range: Appointment
multivalued: true
inlined: true
examples:
- value:
- appointment_id: hc:appointment/special-collections-48h
has_or_had_label: Special Collections Appointment
has_or_had_description: Book at least 48 hours in advance for manuscript access
- appointment_id: "hc:appointment/special-collections-48h"
has_or_had_label: "Special Collections Appointment"
has_or_had_description: "Book at least 48 hours in advance for manuscript access"
lead_time_hours: 48
booking_method:
- email
- online_form
booking_contact: bijzondere.collecties@archive.nl
- email
- online_form
booking_contact: "bijzondere.collecties@archive.nl"
appointment_required: true
description: Structured appointment requirement with rich metadata
comments:
@ -332,33 +309,22 @@ classes:
- value:
policy_id: https://nde.nl/ontology/hc/access-policy/nationaal-archief-open
policy_name: Nationaal Archief Public Access
has_or_had_level:
has_or_had_label: PUBLIC_OPEN
has_or_had_description:
description_text: Open to all visitors during reading room hours
poses_or_posed_condition:
- has_or_had_type: AccessCondition
has_or_had_description:
description_text: Valid government-issued ID required
- has_or_had_type: AccessCondition
has_or_had_description:
description_text: Registration form must be completed
- has_or_had_type: HandlingCondition
has_or_had_description:
description_text: Original materials handled with gloves
access_level: PUBLIC_OPEN
access_description: Open to all visitors during reading room hours
condition:
- Valid government-issued ID required
- Registration form must be completed
- Original materials handled with gloves
registration_required: true
requires_appointment: false
requires_appointment: false # Walk-in access allowed
fee_required: false
has_or_had_contact_point:
email: studiezaal@nationaalarchief.nl
contact_email: studiezaal@nationaalarchief.nl
description: Standard archive public access policy
- value:
policy_id: https://nde.nl/ontology/hc/access-policy/donor-embargo-2050
policy_name: Embargoed until 2050
has_or_had_level:
has_or_had_label: EMBARGOED
has_or_had_description:
description_text: Collection closed until 2050 per donor agreement
access_level: EMBARGOED
access_description: Collection closed until 2050 per donor agreement
embargo_end_date: '2050-01-01'
embargo_reason: Donor privacy restrictions per deed of gift
legal_basis: Deed of Gift clause 4.2
@ -367,59 +333,42 @@ classes:
- value:
policy_id: https://nde.nl/ontology/hc/access-policy/dim-archive-preservation
policy_name: DIM Archive - Preservation Only
has_or_had_level:
has_or_had_label: TEMPORARILY_CLOSED
has_or_had_description:
description_text: Materials in preservation storage, not currently accessible
poses_or_posed_condition:
- has_or_had_type: ProcessingCondition
has_or_had_description:
description_text: Awaiting processing and cataloging
- has_or_had_type: AccessCondition
has_or_had_description:
description_text: Access may be arranged for urgent research needs
requires_appointment: true
access_level: TEMPORARILY_CLOSED
access_description: Materials in preservation storage, not currently accessible
condition:
- Awaiting processing and cataloging
- Access may be arranged for urgent research needs
requires_appointment: true # Appointment required for DIM archive access
credentials_required: PROFESSIONAL
has_or_had_contact_point:
email: preservation@archive.org
contact_email: preservation@archive.org
description: Dark archive / DIM access policy
# ADDED 2026-01-17: Example with rich appointment modeling
- value:
policy_id: https://nde.nl/ontology/hc/access-policy/special-collections-rich
policy_name: Special Collections - Rich Appointment Policy
has_or_had_level:
has_or_had_label: RESEARCHERS_ONLY
has_or_had_description:
description_text: Academic researchers with institutional affiliation
access_level: RESEARCHERS_ONLY
access_description: Academic researchers with institutional affiliation
condition_of_access:
- Valid institutional ID required
- Letter of introduction from supervisor
- Maximum 5 items per visit
- "Valid institutional ID required"
- "Letter of introduction from supervisor"
- "Maximum 5 items per visit"
requires_or_required:
- appointment_id: hc:appointment/special-collections-booking
has_or_had_label: Special Collections Appointment
has_or_had_description: 'Appointments for manuscript and rare book collections must be made
- appointment_id: "hc:appointment/special-collections-booking"
has_or_had_label: "Special Collections Appointment"
has_or_had_description: |
Appointments for manuscript and rare book collections must be made
at least 48 hours in advance. Please specify which materials you
wish to consult.
'
lead_time_hours: 48
booking_method:
- email
- online_form
booking_contact: bijzondere.collecties@archive.nl
- email
- online_form
booking_contact: "bijzondere.collecties@archive.nl"
confirmation_required: true
cancellation_notice_hours: 24
appointment_required: true
registration_required: true
credentials_required: INSTITUTIONAL
fee_required: false
has_or_had_contact_point:
email: special.collections@archive.nl
contact_email: special.collections@archive.nl
description: Rich appointment modeling with structured Appointment entity
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -1,26 +0,0 @@
id: https://nde.nl/ontology/hc/class/AccessTriggerEvent
name: AccessTriggerEvent
title: AccessTriggerEvent
description: An event that triggers a change in access status (e.g. embargo expiration).
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
prov: http://www.w3.org/ns/prov#
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_description
- ../slots/temporal_extent
classes:
AccessTriggerEvent:
class_uri: prov:Activity
description: Access trigger event.
slots:
- has_or_had_description
- temporal_extent
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -1,31 +0,0 @@
id: https://nde.nl/ontology/hc/class/AccessibilityFeature
name: AccessibilityFeature
title: AccessibilityFeature
description: >-
A feature providing accessibility.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_label
- ../slots/has_or_had_description
classes:
AccessibilityFeature:
class_uri: schema:LocationFeatureSpecification
description: Accessibility feature.
annotations:
specificity_score: 0.1
specificity_rationale: "Generic utility class created during migration"
custodian_types: ["*"]
custodian_types_rationale: "Universal utility concept"
slots:
- has_or_had_label
- has_or_had_description

View file

@ -1,34 +0,0 @@
id: https://nde.nl/ontology/hc/class/AccessionEvent
name: AccessionEvent
title: Accession Event
description: The act of accessioning a record or object into a collection. MIGRATED from has_accession_date slot context per Rule 53. Follows rico:Instantiation.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
rico: https://www.ica.org/standards/RiC/ontology#
skos: http://www.w3.org/2004/02/skos/core#
imports:
- linkml:types
- ../slots/temporal_extent
- ./TimeSpan
- ../slots/has_or_had_label
- ../slots/has_or_had_description
- ../slots/has_or_had_identifier
- ./Identifier
default_prefix: hc
classes:
AccessionEvent:
class_uri: rico:Instantiation
slots:
- temporal_extent
- has_or_had_label
- has_or_had_description
- has_or_had_identifier
slot_usage:
temporal_extent:
required: true
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -1,28 +0,0 @@
id: https://nde.nl/ontology/hc/class/AccessionNumber
name: AccessionNumber
title: Accession Number
description: A unique identifier assigned to an object or record upon accession. MIGRATED from has_accession_number slot per Rule 53. Follows rico:Identifier or crm:E42_Identifier.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
rico: https://www.ica.org/standards/RiC/ontology#
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
imports:
- linkml:types
- ./Identifier
default_prefix: hc
classes:
AccessionNumber:
is_a: Identifier
class_uri: rico:Identifier
slots:
- has_or_had_label
- has_or_had_description
exact_mappings:
- crm:E42_Identifier
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -1,29 +0,0 @@
id: https://nde.nl/ontology/hc/class/AccountIdentifier
name: AccountIdentifier
title: AccountIdentifier
description: >-
Identifier for an account.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_value
classes:
AccountIdentifier:
class_uri: schema:PropertyValue
description: Account identifier.
annotations:
specificity_score: 0.1
specificity_rationale: "Generic utility class created during migration"
custodian_types: ["*"]
custodian_types_rationale: "Universal utility concept"
slots:
- has_or_had_value

View file

@ -1,29 +0,0 @@
id: https://nde.nl/ontology/hc/class/AccountStatus
name: AccountStatus
title: AccountStatus
description: >-
Status of an account.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_label
classes:
AccountStatus:
class_uri: skos:Concept
description: Account status.
annotations:
specificity_score: 0.1
specificity_rationale: "Generic utility class created during migration"
custodian_types: ["*"]
custodian_types_rationale: "Universal utility concept"
slots:
- has_or_had_label

View file

@ -1,29 +0,0 @@
id: https://nde.nl/ontology/hc/class/Accreditation
name: Accreditation
title: Accreditation
description: >-
Accreditation status or certificate.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_label
classes:
Accreditation:
class_uri: schema:Permit
description: Accreditation.
annotations:
specificity_score: 0.1
specificity_rationale: "Generic utility class created during migration"
custodian_types: ["*"]
custodian_types_rationale: "Universal utility concept"
slots:
- has_or_had_label

View file

@ -1,29 +0,0 @@
id: https://nde.nl/ontology/hc/class/AccreditationBody
name: AccreditationBody
title: AccreditationBody
description: >-
Organization that grants accreditation.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_name
classes:
AccreditationBody:
class_uri: schema:Organization
description: Accreditation body.
annotations:
specificity_score: 0.1
specificity_rationale: "Generic utility class created during migration"
custodian_types: ["*"]
custodian_types_rationale: "Universal utility concept"
slots:
- has_or_had_name

View file

@ -1,29 +0,0 @@
id: https://nde.nl/ontology/hc/class/AccreditationEvent
name: AccreditationEvent
title: AccreditationEvent
description: >-
Event of granting accreditation.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
prov: http://www.w3.org/ns/prov#
default_prefix: hc
imports:
- linkml:types
- ../slots/temporal_extent
classes:
AccreditationEvent:
class_uri: prov:Activity
description: Accreditation event.
annotations:
specificity_score: 0.1
specificity_rationale: "Generic utility class created during migration"
custodian_types: ["*"]
custodian_types_rationale: "Universal utility concept"
slots:
- temporal_extent

View file

@ -1,12 +0,0 @@
classes:
Accumulation:
class_uri: rico:Accumulation
description: The period during which the records were accumulated.
slots:
- temporal_extent
- has_or_had_description
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -1,13 +0,0 @@
classes:
AccuracyLevel:
class_uri: skos:Concept
description: A qualitative or quantitative level of accuracy (e.g. for coordinates).
slots:
- has_or_had_label
- has_or_had_description
- has_or_had_value
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -1,118 +0,0 @@
id: https://nde.nl/ontology/hc/class/Acquisition
name: acquisition_class
title: Acquisition Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
crm: http://www.cidoc-crm.org/cidoc-crm/
prov: http://www.w3.org/ns/prov#
schema: http://schema.org/
dwc: http://rs.tdwg.org/dwc/terms/
rico: https://www.ica.org/standards/RiC/ontology#
dcterms: http://purl.org/dc/terms/
skos: http://www.w3.org/2004/02/skos/core#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
- ../slots/temporal_extent
- ./TimeSpan
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- ./SpecificityAnnotation
- ./TemplateSpecificityScore
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
default_range: string
enums:
AcquisitionMethodEnum:
description: Methods by which items are acquired for collections.
permissible_values:
FIELD_COLLECTION:
description: Collected in the field (biological, geological specimens)
meaning: dwc:Occurrence
PURCHASE:
description: Acquired through purchase
meaning: schema:BuyAction
DONATION:
description: Given as a gift or donation
meaning: schema:DonateAction
BEQUEST:
description: Received through will or estate
TRANSFER:
description: Transferred from another institution
meaning: crm:E10_Transfer_of_Custody
EXCHANGE:
description: Exchanged with another institution (specimen exchange)
EXCAVATION:
description: Recovered through archaeological excavation
LOAN:
description: On long-term loan (not owned)
CONFISCATION:
description: Seized or confiscated (legal action)
FOUND:
description: Found object (no prior owner)
COMMISSION:
description: Commissioned work (created for the collection)
UNKNOWN:
description: Acquisition method unknown
classes:
Acquisition:
class_uri: crm:E8_Acquisition
description: 'Represents an acquisition event - how and when an object or specimen was obtained for a collection.
CIDOC-CRM E8 Acquisition models the transfer of legal ownership rights.
**Key properties**: - `temporal_extent`: When the acquisition occurred (TimeSpan with fuzzy boundaries for historical items) - `acquisition_method`: How the item was acquired (field collection, purchase, donation, etc.) - `acquisition_source`: From whom/where acquired (collector, dealer, previous owner, field location) - `acquisition_agent`: Who performed the acquisition (collector, curator, institution)
**Darwin Core alignment**: For biological specimens: - `temporal_extent` replaces `dwc:eventDate` (collection date) - `acquisition_source` can capture `dwc:locality` and `dwc:recordedBy`
**Use cases**: - Museum object provenance (purchase from dealer, 1923) - Biological specimen collection (field collection, Amazon basin, 1750s) - Archival transfer (transferred from ministry archives, 2001) - Art donation (donated by artist''s estate, 2015)'
exact_mappings:
- crm:E8_Acquisition
close_mappings:
- prov:Activity
- schema:AcquireAction
related_mappings:
- rico:Event
- dwc:Event
slots:
- temporal_extent
- specificity_annotation
- has_or_had_score
attributes:
acquisition_method:
range: AcquisitionMethodEnum
description: Method by which the item was acquired (field collection, purchase, donation, etc.).
acquisition_source:
range: string
description: 'Source from which item was acquired. Can be: - Person name (collector, donor, seller) - Institution name (transferring institution) - Location (field collection locality) - Dealer or auction house'
acquisition_agent:
range: string
description: Agent who performed the acquisition (collector name, curator, institution). For biological specimens, maps to dwc:recordedBy.
acquisition_location:
range: string
description: Location where acquisition occurred (field collection site, auction house location). For biological specimens, can capture field locality.
acquisition_reference:
range: string
description: Reference number or identifier for the acquisition (accession number, lot number).
acquisition_notes:
range: string
description: Additional notes about the acquisition event.
acquisition_date_text:
range: string
description: Original date text as recorded (e.g., "1750s", "pre-1662", "circa 1900"). For backward compatibility with string-based collection_date. The structured date should be in temporal_extent.
comments:
- Created per slot_fixes.yaml revision for collection_date migration
- Replaces simple collection_date string with structured acquisition event
- "RULE 53: Part of collection_date \u2192 was_acquired_through + Acquisition migration"
annotations:
specificity_score: 0.7
specificity_rationale: Fairly specific - applies to items with acquisition provenance
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept
examples:
- value: "# Biological specimen collected in the field\nacquisition_method: FIELD_COLLECTION\ntemporal_extent:\n begin_of_the_begin: \"1750-01-01\"\n end_of_the_end: \"1759-12-31\"\n notes: \"Collected sometime in the 1750s\"\nacquisition_source: \"Amazon basin, Brazil\"\nacquisition_agent: \"Unknown Dutch collector\"\nacquisition_date_text: \"1750s\"\n"
- value: "# Museum object purchased from dealer\nacquisition_method: PURCHASE\ntemporal_extent:\n begin_of_the_begin: \"1923-03-15\"\n end_of_the_end: \"1923-03-15\"\nacquisition_source: \"Sotheby's London\"\nacquisition_reference: \"Lot 245, Sale of March 1923\"\n"
- value: "# Historical specimen with uncertain date\nacquisition_method: FIELD_COLLECTION\ntemporal_extent:\n begin_of_the_begin: \"1600-01-01\"\n end_of_the_end: \"1662-12-31\"\n notes: \"Pre-1662 (before Great Fire of London)\"\nacquisition_date_text: \"pre-1662\"\n"

View file

@ -1,29 +0,0 @@
id: https://nde.nl/ontology/hc/class/AcquisitionBudget
name: AcquisitionBudget
title: AcquisitionBudget
description: >-
Budget allocated for acquisitions.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_amount
classes:
AcquisitionBudget:
class_uri: schema:MonetaryAmount
description: Acquisition budget.
annotations:
specificity_score: 0.1
specificity_rationale: "Generic utility class created during migration"
custodian_types: ["*"]
custodian_types_rationale: "Universal utility concept"
slots:
- has_or_had_amount

View file

@ -1,37 +0,0 @@
id: https://nde.nl/ontology/hc/class/AcquisitionEvent
name: AcquisitionEvent
title: Acquisition Event
description: An event in which an entity is acquired. MIGRATED from has_acquisition_source per Rule 53. Follows rico:Instantiation.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
rico: https://www.ica.org/standards/RiC/ontology#
skos: http://www.w3.org/2004/02/skos/core#
imports:
- linkml:types
- ../slots/has_or_had_origin
- ../slots/temporal_extent
- ./TimeSpan
- ../slots/has_or_had_method
- ./AcquisitionMethod
- ../slots/has_or_had_provenance
- ./Provenance
- ./Entity
default_prefix: hc
classes:
AcquisitionEvent:
class_uri: rico:Instantiation
slots:
- has_or_had_origin
- temporal_extent
- has_or_had_method
- has_or_had_provenance
slot_usage:
has_or_had_origin:
range: Entity
required: true
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -1,31 +0,0 @@
id: https://nde.nl/ontology/hc/class/AcquisitionMethod
name: AcquisitionMethod
title: Acquisition Method
description: Method by which an object or collection was acquired. MIGRATED from has_acquisition_method slot context per Rule 53. Follows crm:E55_Type.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
crm: http://www.cidoc-crm.org/cidoc-crm/
skos: http://www.w3.org/2004/02/skos/core#
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
- ../slots/has_or_had_label
- ../slots/has_or_had_description
default_prefix: hc
classes:
AcquisitionMethod:
class_uri: crm:E55_Type
slots:
- has_or_had_label
- has_or_had_description
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -1,6 +1,20 @@
# Activity - Base class for all heritage domain activities
#
# This is the main Activity class that uses generic slots for:
# - Identifier (has_activity_identifier)
# - Type (has_or_had_activity_type → ActivityType)
# - Description (has_activity_description)
# - Label (has_activity_name)
# - Timespan (has_timespan → TimeSpan)
# - Succession (is_or_was_succeeded_by, preceding_activity)
#
# Generation date: 2026-01-13
# Rule compliance: 38, 39, 42, 43, 48
id: https://nde.nl/ontology/hc/class/Activity
name: Activity
title: Activity Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
@ -11,191 +25,266 @@ prefixes:
dcterms: http://purl.org/dc/terms/
aat: http://vocab.getty.edu/aat/
skos: http://www.w3.org/2004/02/skos/core#
default_prefix: hc
imports:
- linkml:types
- ../metadata
- ./TimeSpan
- ./ActivityType
- ./ActivityTypes
- ../slots/has_activity_identifier
- ../slots/has_or_had_identifier
- ./Identifier
- ../slots/has_or_had_label
- ./Label
- ../slots/has_or_had_description
- ./Description
- ../slots/has_activity_status
- ../slots/note
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- ./SpecificityAnnotation
- ./TemplateSpecificityScore
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
- linkml:types
- ../metadata
- ./TimeSpan
- ./ActivityType
- ./ActivityTypes
- ../slots/has_activity_identifier
- ../slots/has_activity_name
- ../slots/has_activity_description
- ../slots/has_or_had_activity_type
- ../slots/has_timespan
- ../slots/is_or_was_succeeded_by
- ../slots/preceding_activity
- ../slots/start_date
- ../slots/end_date
- ../slots/status
- ../slots/note
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ./SpecificityAnnotation
- ./TemplateSpecificityScore # was: TemplateSpecificityScores - migrated per Rule 53 (2026-01-17)
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
classes:
Activity:
class_uri: prov:Activity
description: "Base class for activities performed by heritage custodians.\n\n**DEFINITION**:\n\nAn Activity represents a discrete or ongoing action undertaken by a heritage\ncustodian. This is the base class for all activity instances in the ontology.\n\n**ONTOLOGICAL ALIGNMENT**:\n\n| Ontology | Class | Use Case |\n|----------|-------|----------|\n| PROV-O | prov:Activity | Primary - provenance tracking |\n| CIDOC-CRM | crm:E7_Activity | Cultural heritage domain |\n| RiC-O | rico:Activity | Archival activities |\n| Schema.org | schema:Action | Web semantics |\n\n**KEY RELATIONSHIPS**:\n\n```\nActivity\n \u2502\n \u251C\u2500\u2500 has_or_had_activity_type \u2192 ActivityType (classification)\n \u2502 \u2514\u2500\u2500 CurationActivityType, ConservationActivityType, etc.\n \u2502\n \u251C\u2500\u2500 has_timespan \u2192 TimeSpan (temporal extent)\n \u2502 \u2514\u2500\u2500 start_date, end_date, fuzzy bounds\n \u2502\n \u251C\u2500\u2500 is_or_was_succeeded_by\
\ \u2192 Activity (succession)\n \u2502\n \u2514\u2500\u2500 preceding_activity \u2192 Activity (inverse succession)\n```\n\n**SPECIALIZATION**:\n\nThis base class is extended by domain-specific activity classes:\n- CurationActivity - Collection management (existing, to be refactored)\n- ConservationActivity - Preservation work\n- ExhibitionActivity - Exhibition planning and execution\n- DigitizationActivity - Digital transformation projects\n\n**PROVENANCE (PROV-O)**:\n\nActivities generate provenance information:\n- `prov:Activity` - The activity itself\n- `prov:wasAssociatedWith` - Responsible agents\n- `prov:used` - Entities processed\n- `prov:generated` - Entities created\n- `prov:atTime` - Temporal extent\n"
description: |
Base class for activities performed by heritage custodians.
**DEFINITION**:
An Activity represents a discrete or ongoing action undertaken by a heritage
custodian. This is the base class for all activity instances in the ontology.
**ONTOLOGICAL ALIGNMENT**:
| Ontology | Class | Use Case |
|----------|-------|----------|
| PROV-O | prov:Activity | Primary - provenance tracking |
| CIDOC-CRM | crm:E7_Activity | Cultural heritage domain |
| RiC-O | rico:Activity | Archival activities |
| Schema.org | schema:Action | Web semantics |
**KEY RELATIONSHIPS**:
```
Activity
├── has_or_had_activity_type → ActivityType (classification)
│ └── CurationActivityType, ConservationActivityType, etc.
├── has_timespan → TimeSpan (temporal extent)
│ └── start_date, end_date, fuzzy bounds
├── is_or_was_succeeded_by → Activity (succession)
└── preceding_activity → Activity (inverse succession)
```
**SPECIALIZATION**:
This base class is extended by domain-specific activity classes:
- CurationActivity - Collection management (existing, to be refactored)
- ConservationActivity - Preservation work
- ExhibitionActivity - Exhibition planning and execution
- DigitizationActivity - Digital transformation projects
**PROVENANCE (PROV-O)**:
Activities generate provenance information:
- `prov:Activity` - The activity itself
- `prov:wasAssociatedWith` - Responsible agents
- `prov:used` - Entities processed
- `prov:generated` - Entities created
- `prov:atTime` - Temporal extent
exact_mappings:
- prov:Activity
- prov:Activity
close_mappings:
- crm:E7_Activity
- rico:Activity
- schema:Action
- crm:E7_Activity
- rico:Activity
- schema:Action
related_mappings:
- aat:300054277
- aat:300054277 # activities (functions)
slots:
- has_or_had_identifier
- has_or_had_label
- has_or_had_description
- has_or_had_activity_type
- temporal_extent
- is_or_was_succeeded_by
- preceding_activity
- has_or_had_status
- note
- specificity_annotation
- has_or_had_score
- has_activity_identifier
- has_activity_name
- has_activity_description
- has_or_had_activity_type
- has_timespan
- start_date
- end_date
- is_or_was_succeeded_by
- preceding_activity
- status
- note
- specificity_annotation
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
slot_usage:
has_or_had_identifier:
description: 'Unique identifier for this activity instance.
MIGRATED from has_activity_identifier per Rule 53.
Format: URI following NDE Heritage Custodian ontology conventions.
Pattern: `https://nde.nl/ontology/hc/activity/{custodian-slug}-{type}-{year}-{sequence}`
'
range: Identifier
has_activity_identifier:
range: uriorcurie
required: true
identifier: true
inlined: true
description: |
Unique identifier for this activity instance.
Format: URI following NDE Heritage Custodian ontology conventions.
Pattern: `https://nde.nl/ontology/hc/activity/{custodian-slug}-{type}-{year}-{sequence}`
examples:
- value:
identifier_value: https://nde.nl/ontology/hc/activity/rijksmuseum-inventory-2025-001
description: 2025 inventory at Rijksmuseum
- value:
identifier_value: https://nde.nl/ontology/hc/activity/nationaal-archief-digitization-voc-2024
description: VOC digitization project at Nationaal Archief
has_or_had_label:
- value: https://nde.nl/ontology/hc/activity/rijksmuseum-inventory-2025-001
description: "2025 inventory at Rijksmuseum"
- value: https://nde.nl/ontology/hc/activity/nationaal-archief-digitization-voc-2024
description: "VOC digitization project at Nationaal Archief"
has_activity_name:
range: string
required: true
description: Human-readable name for this activity.
examples:
- value: 2025 Annual Collection Inventory
description: Recurring annual inventory
- value: VOC Archives Digitization Project Phase 2
description: Multi-year digitization project
has_or_had_description:
- value: "2025 Annual Collection Inventory"
description: "Recurring annual inventory"
- value: "VOC Archives Digitization Project Phase 2"
description: "Multi-year digitization project"
has_activity_description:
range: string
required: false
description: Detailed description of the activity scope and objectives.
examples:
- value: "Annual physical inventory of the Dutch Masters collection, \ncovering approximately 450 paintings. Spot-check methodology \nwith 20% sample verified against catalog records.\n"
description: Inventory activity description
- value: |
Annual physical inventory of the Dutch Masters collection,
covering approximately 450 paintings. Spot-check methodology
with 20% sample verified against catalog records.
description: "Inventory activity description"
has_or_had_activity_type:
range: ActivityType
required: true
multivalued: true
description: 'The type classification(s) for this activity.
description: |
The type classification(s) for this activity.
Values are ActivityType subclasses from ActivityTypes.yaml.
'
examples:
- value: CurationActivityType
description: Curation activity
- value: '[DigitizationActivityType, ResearchActivityType]'
description: Combined digitization and research project
temporal_extent:
- value: CurationActivityType
description: "Curation activity"
- value: "[DigitizationActivityType, ResearchActivityType]"
description: "Combined digitization and research project"
has_timespan:
range: TimeSpan
required: false
inlined: true
description: 'Temporal extent of this activity.
Replaces has_timespan, start_date, end_date.
description: |
Temporal extent of this activity.
Uses CIDOC-CRM four-point temporal model for fuzzy bounds.
'
examples:
- value:
begin_of_the_begin: '2025-01-15'
end_of_the_end: '2025-03-31'
description: Q1 2025 activity period
- value:
start_date: "2025-01-15"
end_date: "2025-03-31"
description: "Q1 2025 activity period"
start_date:
range: date
required: false
description: Start date of the activity (convenience field).
end_date:
range: date
required: false
description: End date of the activity (convenience field).
is_or_was_succeeded_by:
range: Activity
multivalued: true
inlined: false
description: Activity/activities that follow this one.
examples:
- value: https://nde.nl/ontology/hc/activity/conservation-treatment-2025
description: Conservation follows condition survey
- value: https://nde.nl/ontology/hc/activity/conservation-treatment-2025
description: "Conservation follows condition survey"
preceding_activity:
range: Activity
inlined: false
description: Activity that preceded this one.
examples:
- value: https://nde.nl/ontology/hc/activity/condition-survey-2024
description: Condition survey informed this conservation treatment
has_or_had_status:
- value: https://nde.nl/ontology/hc/activity/condition-survey-2024
description: "Condition survey informed this conservation treatment"
status:
range: string
required: false
description: Current status of the activity.
examples:
- value: IN_PROGRESS
description: Activity currently underway
- value: COMPLETED
description: Activity finished
- value: PLANNED
description: Activity scheduled for future
- value: "IN_PROGRESS"
description: "Activity currently underway"
- value: "COMPLETED"
description: "Activity finished"
- value: "PLANNED"
description: "Activity scheduled for future"
note:
range: string
multivalued: true
description: Additional notes about the activity.
annotations:
specificity_score: '0.50'
specificity_rationale: Moderately specific - Activity is a core domain concept but broadly applicable across all heritage custodian types.
has_or_had_score: null
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept
specificity_score: "0.50"
specificity_rationale: "Moderately specific - Activity is a core domain concept but broadly applicable across all heritage custodian types."
has_or_had_score: # was: template_specificity - migrated per Rule 53 (2026-01-17)
# NOTE: slot_usage may need manual review for range/description updates '{"collection_discovery": 0.65, "organizational_change": 0.55, "general_heritage": 0.50}'
comments:
- Base class for all heritage domain activities
- Extended by CurationActivity, ConservationActivity, etc.
- 'Uses generic slots: has_activity_identifier, has_or_had_activity_type, has_timespan'
- PROV-O primary alignment for provenance tracking
- Supports activity chaining via is_or_was_succeeded_by/preceding_activity
- "Base class for all heritage domain activities"
- "Extended by CurationActivity, ConservationActivity, etc."
- "Uses generic slots: has_activity_identifier, has_or_had_activity_type, has_timespan"
- "PROV-O primary alignment for provenance tracking"
- "Supports activity chaining via is_or_was_succeeded_by/preceding_activity"
see_also:
- https://www.w3.org/TR/prov-o/
- http://www.cidoc-crm.org/html/cidoc_crm_v7.1.3.html#E7
- https://www.ica.org/standards/RiC/ontology
- https://www.w3.org/TR/prov-o/
- http://www.cidoc-crm.org/html/cidoc_crm_v7.1.3.html#E7
- https://www.ica.org/standards/RiC/ontology
examples:
- value:
has_or_had_identifier:
identifier_value: https://nde.nl/ontology/hc/activity/rijksmuseum-inventory-2025-001
has_or_had_label: 2025 Annual Collection Inventory - Dutch Masters
has_or_had_activity_type:
- CurationActivityType
has_or_had_description: "Annual physical inventory of the Dutch Masters collection \n(Gallery of Honour and adjacent galleries). Spot-check methodology \nwith 20% sample verification against CMS records.\n"
temporal_extent:
begin_of_the_begin: '2025-01-15'
end_of_the_end: '2025-03-31'
has_or_had_status: IN_PROGRESS
description: Inventory activity at Rijksmuseum
- value:
has_or_had_identifier:
identifier_value: https://nde.nl/ontology/hc/activity/kb-digitization-medieval-2024
has_or_had_label: Medieval Manuscripts Digitization Project
has_or_had_activity_type:
- DigitizationActivityType
- ResearchActivityType
has_or_had_description: "High-resolution digitization of 342 medieval manuscripts with \nHTR processing and metadata enhancement. IIIF-compliant output.\n"
temporal_extent:
begin_of_the_begin: '2024-03-01'
end_of_the_end: '2025-12-31'
has_or_had_status: IN_PROGRESS
preceding_activity: https://nde.nl/ontology/hc/activity/kb-condition-survey-2023
description: Digitization and research project at KB
- value:
has_activity_identifier: https://nde.nl/ontology/hc/activity/rijksmuseum-inventory-2025-001
has_activity_name: "2025 Annual Collection Inventory - Dutch Masters"
has_or_had_activity_type:
- CurationActivityType
has_activity_description: |
Annual physical inventory of the Dutch Masters collection
(Gallery of Honour and adjacent galleries). Spot-check methodology
with 20% sample verification against CMS records.
has_timespan:
start_date: "2025-01-15"
end_date: "2025-03-31"
status: "IN_PROGRESS"
description: "Inventory activity at Rijksmuseum"
- value:
has_activity_identifier: https://nde.nl/ontology/hc/activity/kb-digitization-medieval-2024
has_activity_name: "Medieval Manuscripts Digitization Project"
has_or_had_activity_type:
- DigitizationActivityType
- ResearchActivityType
has_activity_description: |
High-resolution digitization of 342 medieval manuscripts with
HTR processing and metadata enhancement. IIIF-compliant output.
start_date: "2024-03-01"
end_date: "2025-12-31"
status: "IN_PROGRESS"
preceding_activity: https://nde.nl/ontology/hc/activity/kb-condition-survey-2023
description: "Digitization and research project at KB"

View file

@ -1,6 +1,16 @@
# ActivityType - Abstract base class for activity type classifications
#
# Following the Type/Types naming convention (Rule 0b):
# - ActivityType.yaml: Abstract base class defining the type taxonomy
# - ActivityTypes.yaml: File containing all concrete subclasses
#
# Generation date: 2026-01-13
# Rule compliance: 0b (Type/Types naming), 37 (specificity scores), 50 (ontology mapping)
id: https://nde.nl/ontology/hc/class/ActivityType
name: ActivityType
title: Activity Type Classification
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
@ -10,111 +20,186 @@ prefixes:
schema: http://schema.org/
aat: http://vocab.getty.edu/aat/
wd: http://www.wikidata.org/entity/
default_prefix: hc
imports:
- linkml:types
- ../slots/created
- ../slots/modified
- ../slots/has_or_had_identifier
- ./WikiDataIdentifier
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- ../slots/has_or_had_description
- ../slots/has_or_had_label
- ./SpecificityAnnotation
- ./TemplateSpecificityScore
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
- linkml:types
- ../slots/created
- ../slots/modified
- ../slots/has_or_had_identifier # was: wikidata_entity - migrated per Rule 53 (2026-01-15)
- ./WikiDataIdentifier # for has_or_had_identifier range
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ../slots/has_or_had_description # was: type_description - migrated per Rule 53/56 (2026-01-16)
- ../slots/has_or_had_label # was: type_label - migrated per Rule 53
- ./SpecificityAnnotation
- ./TemplateSpecificityScore # was: TemplateSpecificityScores - migrated per Rule 53 (2026-01-17)
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
classes:
ActivityType:
class_uri: skos:Concept
description: "Abstract base class for activity type classifications in the heritage domain.\n\n**DEFINITION**:\n\nActivityType represents CATEGORIES of activities performed by heritage\ncustodians, not individual activity instances. Each subclass defines\ncharacteristics of an activity category (function, typical duration,\ndeliverables, etc.).\n\n**CRITICAL: TYPE vs INSTANCE**\n\n| Aspect | ActivityType (This Class) | Activity (Instance Class) |\n|--------|---------------------------|---------------------------|\n| **Nature** | Classification/category | Individual activity |\n| **Examples** | CURATION, CONSERVATION | \"2025 Inventory at Rijksmuseum\" |\n| **Properties** | Category metadata, typical standards | Dates, responsible actors |\n| **Cardinality** | ~20-30 types | Thousands of instances |\n\n**CATEGORY STRUCTURE**:\n\nActivity types are organized into high-level categories:\n\n1. **CURATION**: Collection management activities\n - Accessioning, Cataloging, Inventory, Deaccessioning\n\
\ - Rehousing, Relocation, Storage Reorganization\n \n2. **CONSERVATION**: Preservation activities\n - Preventive Conservation, Condition Assessment\n - Restoration, Stabilization, Environmental Monitoring\n \n3. **COMMERCIAL**: Business activities\n - Sales, Licensing, Merchandising\n - Venue Rental, Event Hosting\n \n4. **RESEARCH**: Scholarly activities\n - Provenance Research, Cataloging Research\n - Scientific Analysis, Documentation\n \n5. **EDUCATION**: Educational activities\n - Guided Tours, Workshops, Lectures\n - Online Courses, Educational Programs\n \n6. **EXHIBITION**: Display activities\n - Permanent Exhibition, Temporary Exhibition\n - Traveling Exhibition, Virtual Exhibition\n \n7. **DIGITIZATION**: Digital transformation activities\n - Scanning, Photography, 3D Modeling\n - OCR/HTR Processing, Metadata Enhancement\n \n8. **ADMINISTRATIVE**: Governance activities\n - Audit, Valuation, Insurance\n - Loan Management, Rights\
\ Management\n\n**ONTOLOGY ALIGNMENT**:\n\n- **SKOS Concept**: Activity types are concepts in a controlled vocabulary\n- **CIDOC-CRM E55_Type**: Cultural heritage domain type system\n- **AAT**: Getty Art & Architecture Thesaurus for activity terms\n- **SPECTRUM**: UK Collections Management Standard procedures\n\n**SUBCLASSES**:\n\nSee ActivityTypes.yaml for concrete activity type subclasses organized\nby category: CURATION, CONSERVATION, COMMERCIAL, RESEARCH, EDUCATION,\nEXHIBITION, DIGITIZATION, and ADMINISTRATIVE.\n"
description: |
Abstract base class for activity type classifications in the heritage domain.
**DEFINITION**:
ActivityType represents CATEGORIES of activities performed by heritage
custodians, not individual activity instances. Each subclass defines
characteristics of an activity category (function, typical duration,
deliverables, etc.).
**CRITICAL: TYPE vs INSTANCE**
| Aspect | ActivityType (This Class) | Activity (Instance Class) |
|--------|---------------------------|---------------------------|
| **Nature** | Classification/category | Individual activity |
| **Examples** | CURATION, CONSERVATION | "2025 Inventory at Rijksmuseum" |
| **Properties** | Category metadata, typical standards | Dates, responsible actors |
| **Cardinality** | ~20-30 types | Thousands of instances |
**CATEGORY STRUCTURE**:
Activity types are organized into high-level categories:
1. **CURATION**: Collection management activities
- Accessioning, Cataloging, Inventory, Deaccessioning
- Rehousing, Relocation, Storage Reorganization
2. **CONSERVATION**: Preservation activities
- Preventive Conservation, Condition Assessment
- Restoration, Stabilization, Environmental Monitoring
3. **COMMERCIAL**: Business activities
- Sales, Licensing, Merchandising
- Venue Rental, Event Hosting
4. **RESEARCH**: Scholarly activities
- Provenance Research, Cataloging Research
- Scientific Analysis, Documentation
5. **EDUCATION**: Educational activities
- Guided Tours, Workshops, Lectures
- Online Courses, Educational Programs
6. **EXHIBITION**: Display activities
- Permanent Exhibition, Temporary Exhibition
- Traveling Exhibition, Virtual Exhibition
7. **DIGITIZATION**: Digital transformation activities
- Scanning, Photography, 3D Modeling
- OCR/HTR Processing, Metadata Enhancement
8. **ADMINISTRATIVE**: Governance activities
- Audit, Valuation, Insurance
- Loan Management, Rights Management
**ONTOLOGY ALIGNMENT**:
- **SKOS Concept**: Activity types are concepts in a controlled vocabulary
- **CIDOC-CRM E55_Type**: Cultural heritage domain type system
- **AAT**: Getty Art & Architecture Thesaurus for activity terms
- **SPECTRUM**: UK Collections Management Standard procedures
**SUBCLASSES**:
See ActivityTypes.yaml for concrete activity type subclasses organized
by category: CURATION, CONSERVATION, COMMERCIAL, RESEARCH, EDUCATION,
EXHIBITION, DIGITIZATION, and ADMINISTRATIVE.
abstract: true
exact_mappings:
- skos:Concept
- skos:Concept
close_mappings:
- crm:E55_Type
- schema:DefinedTerm
- crm:E55_Type
- schema:DefinedTerm
related_mappings:
- prov:Activity
- aat:300054277
- prov:Activity
- aat:300054277 # activities (functions)
slots:
- created
- modified
- specificity_annotation
- has_or_had_score
- has_or_had_description
- has_or_had_identifier
- has_or_had_label
- created
- modified
- specificity_annotation
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- has_or_had_description # was: type_description - migrated per Rule 53/56 (2026-01-16)
- has_or_had_identifier # was: type_id, wikidata_entity - consolidated per Rule 56 (2026-01-16)
- has_or_had_label # was: type_label
slot_usage:
has_or_had_identifier:
has_or_had_identifier: # was: type_id - migrated per Rule 56 (2026-01-16)
range: uriorcurie
required: true
identifier: true
multivalued: true
description: 'Unique identifier(s) for this activity type.
description: |
Unique identifier(s) for this activity type.
MIGRATED from type_id per Rule 56 (2026-01-16).
Also includes Wikidata entity references (previously wikidata_entity).
'
examples:
- value: https://nde.nl/ontology/hc/activity-type/curation
description: Internal type identifier for curation
- value: wd:Q1348059
description: Wikidata entity for curation
has_or_had_label:
- value: https://nde.nl/ontology/hc/activity-type/curation
description: Internal type identifier for curation
- value: wd:Q1348059
description: Wikidata entity for curation
has_or_had_label: # was: type_label - migrated per Rule 53
range: string
required: true
multivalued: true
description: 'Human-readable label for this activity type.
description: |
Human-readable label for this activity type.
MIGRATED from type_label per slot_fixes.yaml (Rule 53).
'
examples:
- value:
- Curation@en
- curatie@nl
- Kuration@de
description: Multilingual labels for curation type
has_or_had_description:
- value: ["Curation@en", "curatie@nl", "Kuration@de"]
description: Multilingual labels for curation type
has_or_had_description: # was: type_description - migrated per Rule 53/56 (2026-01-16)
range: string
required: false
examples:
- value: Activities related to the ongoing management and care of collections
description: Description of curation activity type
- value: "Activities related to the ongoing management and care of collections"
description: Description of curation activity type
created:
range: datetime
modified:
range: datetime
annotations:
specificity_score: '0.40'
specificity_rationale: Moderately specific - activity types are domain-relevant but not specific to any single conversation template.
has_or_had_score: null
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept
specificity_score: "0.40"
specificity_rationale: "Moderately specific - activity types are domain-relevant but not specific to any single conversation template."
has_or_had_score: # was: template_specificity - migrated per Rule 53 (2026-01-17)
# NOTE: slot_usage may need manual review for range/description updates '{"collection_discovery": 0.60, "organizational_change": 0.50, "general_heritage": 0.40}'
comments:
- Abstract base class - use specific subclasses (CurationType, ConservationType, etc.)
- Represents ACTIVITY TYPES, not activity instances
- Activity.has_or_had_activity_type references these type classes
- Follows Type/Types naming convention (Rule 0b)
- Organized by function, domain, and typical characteristics
- "Abstract base class - use specific subclasses (CurationType, ConservationType, etc.)"
- "Represents ACTIVITY TYPES, not activity instances"
- "Activity.has_or_had_activity_type references these type classes"
- "Follows Type/Types naming convention (Rule 0b)"
- "Organized by function, domain, and typical characteristics"
see_also:
- https://www.wikidata.org/
- https://www.w3.org/2004/02/skos/
- http://vocab.getty.edu/aat/
- https://collectionstrust.org.uk/spectrum/
- https://www.wikidata.org/
- https://www.w3.org/2004/02/skos/
- http://vocab.getty.edu/aat/
- https://collectionstrust.org.uk/spectrum/
examples:
- value:
has_or_had_identifier:
- https://nde.nl/ontology/hc/activity-type/curation
- wd:Q1348059
has_or_had_label:
- Curation@en
- curatie@nl
has_or_had_description: Activities related to ongoing collection management
description: Curation activity type with multilingual labels and identifiers
- value:
has_or_had_identifier: # was: type_id, wikidata_entity
- https://nde.nl/ontology/hc/activity-type/curation
- wd:Q1348059
has_or_had_label:
- Curation@en
- curatie@nl
has_or_had_description: "Activities related to ongoing collection management" # was: type_description
description: "Curation activity type with multilingual labels and identifiers"

View file

@ -1,12 +1,26 @@
# ActivityTypes - Concrete activity type subclasses
#
# Following the Type/Types naming convention (Rule 0b):
# - ActivityType.yaml: Abstract base class defining the type taxonomy
# - ActivityTypes.yaml: File containing all concrete subclasses (THIS FILE)
#
# Generation date: 2026-01-13
# Rule compliance: 0b (Type/Types naming), 37 (specificity scores), 50 (ontology mapping)
# Migration: 2026-01-16 - wikidata_entity → wikidata_equivalent per Rule 53
id: https://nde.nl/ontology/hc/class/ActivityTypes
name: ActivityTypes
title: ActivityTypes
description: >-
Container for ActivityType instances.
title: Activity Type Subclasses
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
crm: http://www.cidoc-crm.org/cidoc-crm/
prov: http://www.w3.org/ns/prov#
schema: http://schema.org/
aat: http://vocab.getty.edu/aat/
wd: http://www.wikidata.org/entity/ # Added for Wikidata mappings (2026-01-17)
default_prefix: hc
@ -15,12 +29,347 @@ imports:
- ./ActivityType
classes:
ActivityTypes:
class_uri: hc:ActivityTypes
description: Activity types container.
# ===========================================================================
# CURATION ACTIVITY TYPES
# ===========================================================================
CurationActivityType:
is_a: ActivityType
class_uri: crm:E87_Curation_Activity
description: |
Activity type for ongoing collection management activities.
**CIDOC-CRM Definition**:
E87_Curation_Activity comprises "the activities that result in the continuity of
management and the preservation and evolution of instances of E78 Curated Holding."
**Subtypes**:
- Accessioning, Deaccessioning
- Cataloging, Inventory
- Rehousing, Relocation, Storage Reorganization
- Collection Development
**SPECTRUM Alignment**: Maps to SPECTRUM primary procedures
exact_mappings:
- crm:E87_Curation_Activity
- wd:Q1348059 # Wikidata: curation (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17)
close_mappings:
- aat:300054277 # activities (functions)
annotations:
specificity_score: 0.1
specificity_rationale: "Generic utility class created during migration"
custodian_types: ["*"]
custodian_types_rationale: "Universal utility concept"
tree_root: true
activity_category: CURATION
spectrum_procedures: "inventory, cataloguing, acquisition, deaccession-and-disposal"
# ===========================================================================
# CONSERVATION ACTIVITY TYPES
# ===========================================================================
ConservationActivityType:
is_a: ActivityType
class_uri: crm:E11_Modification
description: |
Activity type for preservation and conservation activities.
**CIDOC-CRM Definition**:
E11_Modification "comprises instances of E7 Activity that are undertaken to
create, alter or change E24 Physical Human-Made Thing."
**Subtypes**:
- Preventive Conservation
- Condition Assessment, Condition Survey
- Restoration, Stabilization
- Environmental Monitoring
- Disaster Planning and Response
**SPECTRUM Alignment**: Maps to SPECTRUM condition checking and collections care
exact_mappings:
- crm:E11_Modification
- wd:Q217102 # Wikidata: conservation (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17)
close_mappings:
- aat:300053803 # conservation (activity)
annotations:
activity_category: CONSERVATION
spectrum_procedures: "condition-checking, collections-care, conservation-assessment"
# ===========================================================================
# COMMERCIAL ACTIVITY TYPES
# ===========================================================================
CommercialActivityType:
is_a: ActivityType
class_uri: schema:TradeAction
description: |
Activity type for commercial and business operations.
**Definition**:
Commercial activities that generate revenue or involve commercial transactions
for heritage institutions.
**Subtypes**:
- Sales (museum shop, publications)
- Licensing (image rights, reproductions)
- Merchandising
- Venue Rental
- Event Hosting
- Ticket Sales
**Note**: Distinct from non-commercial educational or public service activities.
exact_mappings:
- schema:TradeAction
- wd:Q601401 # Wikidata: commerce (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17)
close_mappings:
- aat:300055704 # commerce
annotations:
activity_category: COMMERCIAL
# ===========================================================================
# RESEARCH ACTIVITY TYPES
# ===========================================================================
ResearchActivityType:
is_a: ActivityType
class_uri: crm:E7_Activity
description: |
Activity type for scholarly and research activities.
**Definition**:
Research activities undertaken by heritage custodians to increase knowledge
about collections, provenance, or heritage subjects.
**Subtypes**:
- Provenance Research
- Scientific Analysis (dating, material analysis)
- Historical Research
- Cataloging Research (attribution, identification)
- Documentation
- Publication
**CIDOC-CRM**: Maps to E13_Attribute_Assignment for research outcomes
exact_mappings:
- crm:E7_Activity
- wd:Q42240 # Wikidata: research (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17)
close_mappings:
- aat:300054608 # research (activity)
related_mappings:
- crm:E13_Attribute_Assignment
annotations:
activity_category: RESEARCH
# ===========================================================================
# EDUCATION ACTIVITY TYPES
# ===========================================================================
EducationActivityType:
is_a: ActivityType
class_uri: schema:EducationEvent
description: |
Activity type for educational and public programming activities.
**Definition**:
Educational activities designed to inform, educate, or engage the public
with heritage collections and subjects.
**Subtypes**:
- Guided Tours
- Workshops
- Lectures and Talks
- Educational Programs (school visits)
- Online Courses
- Public Events
- Outreach Programs
**Schema.org**: Maps to EducationEvent for structured data
exact_mappings:
- schema:EducationEvent
- wd:Q8434 # Wikidata: education (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17)
close_mappings:
- aat:300054552 # education (activity)
annotations:
activity_category: EDUCATION
# ===========================================================================
# EXHIBITION ACTIVITY TYPES
# ===========================================================================
ExhibitionActivityType:
is_a: ActivityType
class_uri: schema:ExhibitionEvent
description: |
Activity type for exhibition and display activities.
**Definition**:
Activities related to the public display of heritage collections.
**Subtypes**:
- Permanent Exhibition
- Temporary Exhibition
- Traveling Exhibition
- Virtual Exhibition
- Pop-up Exhibition
- Installation
**Schema.org**: Maps to ExhibitionEvent for structured data
exact_mappings:
- schema:ExhibitionEvent
- wd:Q464980 # Wikidata: exhibition (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17)
close_mappings:
- aat:300054766 # exhibitions (events)
related_mappings:
- crm:E7_Activity
annotations:
activity_category: EXHIBITION
# ===========================================================================
# DIGITIZATION ACTIVITY TYPES
# ===========================================================================
DigitizationActivityType:
is_a: ActivityType
class_uri: crm:E65_Creation
description: |
Activity type for digital transformation activities.
**Definition**:
Activities that create digital representations of physical heritage objects
or enhance digital access to collections.
**Subtypes**:
- Scanning (2D imaging)
- Photography (high-resolution capture)
- 3D Modeling (photogrammetry, laser scanning)
- OCR/HTR Processing (text recognition)
- Metadata Enhancement
- Digital Preservation
- IIIF Implementation
**CIDOC-CRM**: E65_Creation for creation of digital surrogates
exact_mappings:
- crm:E65_Creation
- wd:Q1116930 # Wikidata: digitization (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17)
close_mappings:
- aat:300266022 # digitization
annotations:
activity_category: DIGITIZATION
# ===========================================================================
# ADMINISTRATIVE ACTIVITY TYPES
# ===========================================================================
AdministrativeActivityType:
is_a: ActivityType
class_uri: prov:Activity
description: |
Activity type for governance and administrative activities.
**Definition**:
Administrative activities related to collection governance, compliance,
and institutional operations.
**Subtypes**:
- Audit
- Valuation
- Insurance Assessment
- Loan Management (incoming/outgoing)
- Rights Management
- Policy Development
- Strategic Planning
**SPECTRUM Alignment**: Maps to SPECTRUM audit, valuation, loans procedures
exact_mappings:
- prov:Activity
- wd:Q18643507 # Wikidata: administrative activity (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17)
close_mappings:
- aat:300055709 # administration
annotations:
activity_category: ADMINISTRATIVE
spectrum_procedures: "audit, valuation, loans-out, loans-in, rights-management"
# ===========================================================================
# ACQUISITION ACTIVITY TYPES
# ===========================================================================
AcquisitionActivityType:
is_a: ActivityType
class_uri: crm:E8_Acquisition
description: |
Activity type for acquisition and collection development activities.
**CIDOC-CRM Definition**:
E8_Acquisition "comprises the activities that result in the acquisition of a
E18 Physical Thing into the custody of an agent for a specific purpose."
**Subtypes**:
- Purchase
- Gift/Donation
- Bequest
- Transfer
- Excavation
- Field Collection
**SPECTRUM Alignment**: Maps to SPECTRUM acquisition procedure
exact_mappings:
- crm:E8_Acquisition
- wd:Q17157817 # Wikidata: acquisition (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17)
close_mappings:
- aat:300055711 # acquisition (activity)
annotations:
activity_category: ACQUISITION
spectrum_procedures: "acquisition"
# ===========================================================================
# MEMBERSHIP ACTIVITY TYPES
# ===========================================================================
MembershipActivityType:
is_a: ActivityType
class_uri: schema:JoinAction
description: |
Activity type for membership and affiliation activities.
**Definition**:
Activities related to institutional membership in professional organizations,
consortia, or networks.
**Subtypes**:
- Professional Membership (ICOM, ALA, SAA)
- Consortium Membership
- Network Participation
- Partnership Agreement
**Schema.org**: Maps to JoinAction for joining organizations
exact_mappings:
- schema:JoinAction
- wd:Q1141470 # Wikidata: membership (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17)
close_mappings:
- schema:OrganizationRole
annotations:
activity_category: MEMBERSHIP
# ===========================================================================
# LOAN ACTIVITY TYPES
# ===========================================================================
LoanActivityType:
is_a: ActivityType
class_uri: crm:E10_Transfer_of_Custody
description: |
Activity type for loan management activities.
**CIDOC-CRM Definition**:
E10_Transfer_of_Custody "comprises activities that result in a change of
custody of an E18 Physical Thing."
**Subtypes**:
- Outgoing Loan
- Incoming Loan
- Long-term Loan
- Exhibition Loan
**SPECTRUM Alignment**: Maps to SPECTRUM loans-out and loans-in procedures
exact_mappings:
- crm:E10_Transfer_of_Custody
- wd:Q1332755 # Wikidata: loan (was: annotation wikidata_equivalent - migrated per Rule 53, 2026-01-17)
close_mappings:
- aat:300312155 # loaning
annotations:
activity_category: LOAN
spectrum_procedures: "loans-out, loans-in"

View file

@ -1,25 +0,0 @@
id: https://nde.nl/ontology/hc/class/Actor
name: Actor
title: Actor
description: An actor involved in an event or activity.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
prov: http://www.w3.org/ns/prov#
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_name
- ../slots/has_or_had_role
classes:
Actor:
class_uri: prov:Agent
description: Involved actor.
slots:
- has_or_had_name
- has_or_had_role
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -20,18 +20,16 @@ prefixes:
imports:
- linkml:types
# REMOVED 2026-01-22: ../slots/address_formatted - migrated to has_or_had_label + Label (Rule 53, Feedback F1)
- ../slots/address_formatted
# REMOVED: ../slots/address_type - migrated to has_or_had_type (2026-01-17, Rule 53/56)
# Address component slots
- ../slots/has_or_had_section
- ../slots/house_number
# REMOVED: ../slots/street_name - migrated to has_or_had_label + Label (2026-01-17, Rule 53/56)
# REMOVED: ../slots/street_address - migrated to has_or_had_address + Address class (2026-01-17, Rule 53/56)
# street_address was a redundant string slot; full Address class captures street data via components
- ../slots/postal_code
- ../slots/locality
# REMOVED: ../slots/city - migrated to is_or_was_located_in + City (2026-01-18, Rule 53)
- ../slots/is_or_was_located_in
- ../slots/city
- ../slots/region
- ../slots/country_name
# Shared slots (replacing address_formatted, address_type)
@ -48,7 +46,6 @@ imports:
- ./Country
- ./Subregion
- ./Settlement
- ./City # Added for is_or_was_located_in range (2026-01-18, Rule 53)
- ./CustodianObservation
- ./ReconstructionActivity
- ./AddressType
@ -77,7 +74,7 @@ classes:
An address consists of hierarchical components:
```
Address
├── has_or_had_section (e.g., "1", "221B", "25-27")
├── house_number (e.g., "1", "221B", "25-27")
├── has_or_had_label (street name as Label, e.g., "Museumstraat")
├── postal_code (e.g., "1071 XX")
├── locality (e.g., "Amsterdam")
@ -113,8 +110,7 @@ classes:
- has_or_had_label:
- has_or_had_label: "Museumstraat"
language: "nl"
has_or_had_section:
- has_or_had_value: "1"
house_number: "1"
postal_code: "1071 XX"
locality: "Amsterdam"
region: "Noord-Holland"
@ -151,15 +147,14 @@ classes:
slots:
# Street-level components
- has_or_had_section
- house_number
# REMOVED: street_name - migrated to has_or_had_label + Label (2026-01-17, Rule 53/56)
# REMOVED: street_address - redundant string slot; use house_number + has_or_had_label (2026-01-17, Rule 53/56)
# Postal components
- postal_code
# Locality/geographic hierarchy
- locality
# REMOVED: city - migrated to is_or_was_located_in + City (2026-01-18, Rule 53)
- is_or_was_located_in
- city
- region
- country_name
# Formatted representation (MIGRATED: address_formatted → has_or_had_label)
@ -174,18 +169,15 @@ classes:
- is_or_was_derived_from # was: was_derived_from - migrated per Rule 53
- is_or_was_generated_by # was: was_generated_by - migrated per Rule 53
slot_usage:
has_or_had_section:
range: HouseNumber
house_number:
range: string
required: false
description: House/building number within street.
description: House/building number within street
examples:
- value:
has_or_had_value: "1"
description: Rijksmuseum
- value:
has_or_had_value: "221B"
description: Baker Street notation
- value: "1"
description: Rijksmuseum
- value: "221B"
description: Baker Street notation
# REMOVED: street_name slot_usage - migrated to has_or_had_label + Label (2026-01-17, Rule 53/56)
# Street names should now use Label class with language tagging via has_or_had_label
# REMOVED: street_address slot_usage - redundant string slot removed (2026-01-17, Rule 53/56)
@ -204,25 +196,10 @@ classes:
examples:
- value: "Amsterdam"
description: City name
# REMOVED: city slot_usage - migrated to is_or_was_located_in + City (2026-01-18, Rule 53)
# city:
# range: string
# required: false
# description: Alternative slot for locality (schema:addressLocality)
is_or_was_located_in:
range: City
city:
range: string
required: false
inlined: true
description: |
The city where this address is located, as a structured City entity.
MIGRATED from city (string) slot (2026-01-18, Rule 53).
Provides GeoNames ID, coordinates, and subregion linkage.
examples:
- value:
settlement_name: "Amsterdam"
geonames_id: 2759794
country: "NL"
description: Address located in Amsterdam
description: Alternative slot for locality (schema:addressLocality)
region:
range: string
required: false
@ -241,32 +218,29 @@ classes:
description: Full name
- value: "NL"
description: ISO 3166-1 alpha-2 code
# REMOVED 2026-01-22: address_formatted - migrated to has_or_had_label + Label (Rule 53, Feedback F1)
# Formatted address strings now use has_or_had_label slot_usage below
# REMOVED: address_type slot_usage - migrated to has_or_had_type (2026-01-17, Rule 53/56)
has_or_had_label: # was: address_formatted + street_name - migrated per Rule 53 (2026-01-17, 2026-01-22)
range: Label
multivalued: true
inlined: true
inlined_as_list: true
address_formatted:
range: string
required: false
description: |
Labels for this address, including:
1. **Street name** as Label with language tag
2. **Formatted address** as Label with language tag
MIGRATED from:
- address_formatted (2026-01-22, Feedback F1) - formatted address strings
- street_name (2026-01-17, Rule 53/56) - street name component
Use Label class with language_code for multilingual support.
Full formatted address string.
DEPRECATED: Use has_or_had_label instead.
MIGRATION: 2026-01-13 - Replaced by has_or_had_label slot.
deprecated: "Use has_or_had_label instead"
examples:
- value:
- has_or_had_label: "Museumstraat"
language: "nl"
- has_or_had_label: "Museumstraat 1, 1071 XX Amsterdam, Netherlands"
language: "nl"
description: Street name and formatted address as labels
- value: "Museumstraat 1, 1071 XX Amsterdam, Netherlands"
description: Complete formatted address
# REMOVED: address_type slot_usage - migrated to has_or_had_type (2026-01-17, Rule 53/56)
# address_type:
# range: string
# required: false
# description: |
# Classification of address purpose.
# DEPRECATED: Use has_or_had_type with AddressType class instead.
# MIGRATION: 2026-01-13 - Replaced by has_or_had_type slot.
# deprecated: "Use has_or_had_type with AddressType class instead"
# examples:
# - value: "HEADQUARTERS"
# description: Main organizational address
has_or_had_type: # was: address_type - migrated per Rule 53/56 (2026-01-17)
range: AddressType
required: false
@ -327,15 +301,13 @@ classes:
examples:
- value:
has_or_had_section:
- has_or_had_value: "1"
house_number: "1"
has_or_had_label:
- has_or_had_label: "Museumstraat"
language: "nl"
- has_or_had_label: "Museumstraat 1, 1071 XX Amsterdam, Netherlands"
language: "nl"
# REMOVED: street_address - migrated to house_number + has_or_had_label (2026-01-17, Rule 53/56)
postal_code: "1071 XX"
locality: "Amsterdam"
region: "Noord-Holland"
@ -347,10 +319,13 @@ classes:
description: Rijksmuseum headquarters - fully structured address (street_name and street_address migrated to has_or_had_label)
- value:
has_or_had_section:
- has_or_had_value: "40"
house_number: "40"
has_or_had_label:
- has_or_had_label: "Jansstraat"
language: "nl"
- has_or_had_label: "Jansstraat 40, 2011 RX Haarlem, Netherlands"
language: "nl"
# REMOVED: street_address - migrated to house_number + has_or_had_label (2026-01-17, Rule 53/56)
postal_code: "2011 RX"
locality: "Haarlem"
country_name: "NL"
@ -373,8 +348,7 @@ classes:
language: "nl"
- has_or_had_label: "Euterpelaan 25, 3824 BK Amersfoort, Netherlands"
language: "nl"
has_or_had_section:
- has_or_had_value: "25"
house_number: "25"
postal_code: "3824 BK"
locality: "Amersfoort"
region: "Utrecht"

View file

@ -19,10 +19,7 @@ imports:
# Centralized slots (Rule 38 compliant)
- ../slots/long_name
- ../slots/short_name
# REMOVED 2026-01-22: ../slots/component_type - migrated to has_or_had_type + ComponentType (Rule 53)
- ../slots/has_or_had_type
- ./ComponentType
- ./ComponentTypes
- ../slots/component_type
default_range: string
@ -45,7 +42,7 @@ classes:
Each AddressComponent has:
- `long_name`: Full form of the value (e.g., "Netherlands", "Noord-Holland")
- `short_name`: Abbreviated form (e.g., "NL", "NH") - may equal long_name
- `has_or_had_type`: Semantic type(s) via ComponentType (e.g., Country, Locality)
- `component_type`: Semantic type(s) of this component (e.g., "country", "locality")
**STANDARD COMPONENT TYPES**:
@ -82,20 +79,20 @@ classes:
**USAGE EXAMPLES**:
```yaml
# Street number component (MIGRATED 2026-01-22: Rule 53)
# Street number component
- long_name: "1"
short_name: "1"
has_or_had_type: [StreetNumber]
component_type: ["street_number"]
# Province with abbreviation
- long_name: "Noord-Holland"
short_name: "NH"
has_or_had_type: [Region]
component_type: ["region"]
# Country with ISO code
- long_name: "Netherlands"
short_name: "NL"
has_or_had_type: [Country]
component_type: ["country"]
```
**SOURCE-AGNOSTIC DESIGN**:
@ -118,8 +115,7 @@ classes:
slots:
- long_name
- short_name
# REMOVED 2026-01-22: component_type - migrated to has_or_had_type + ComponentType (Rule 53)
- has_or_had_type
- component_type
attributes:
types:
@ -151,25 +147,20 @@ classes:
description: Province abbreviation
- value: "Museumstraat"
description: Same as long_name when no abbreviation exists
# MIGRATED 2026-01-22: component_type → has_or_had_type + ComponentType (Rule 53)
has_or_had_type:
description: |
Semantic type(s) of this address component.
MIGRATED from component_type per slot_fixes.yaml (Rule 53, 2026-01-22).
Uses ComponentType class hierarchy for structured classification.
range: ComponentType
component_type:
range: string
multivalued: true
inlined_as_list: true
required: false
description: Semantic type(s) of this address component
examples:
- value: StreetNumber
- value: ["street_number"]
description: House/building number
- value: Locality
- value: ["locality"]
description: City or town
- value: Region
- value: ["region"]
description: State or province
- value: Country
- value: ["country"]
description: Country
comments:
@ -183,41 +174,40 @@ classes:
- https://www.w3.org/ns/locn#Address
examples:
# MIGRATED 2026-01-22: component_type → has_or_had_type + ComponentType (Rule 53)
- value:
long_name: "1"
short_name: "1"
has_or_had_type: [StreetNumber]
component_type: ["street_number"]
description: Street number component
- value:
long_name: "Museumstraat"
short_name: "Museumstraat"
has_or_had_type: [Route]
component_type: ["route"]
description: Street name component
- value:
long_name: "Amsterdam"
short_name: "Amsterdam"
has_or_had_type: [Locality]
component_type: ["locality"]
description: City component
- value:
long_name: "Noord-Holland"
short_name: "NH"
has_or_had_type: [Region]
component_type: ["region"]
description: Province component with abbreviation
- value:
long_name: "Netherlands"
short_name: "NL"
has_or_had_type: [Country]
component_type: ["country"]
description: Country component with ISO code
- value:
long_name: "1071 XX"
short_name: "1071 XX"
has_or_had_type: [PostalCode]
component_type: ["postal_code"]
description: Dutch postal code component
annotations:

View file

@ -1,6 +1,18 @@
# AddressType - Abstract base class for address type classifications
#
# Following the Type/Types naming convention (Rule 0b):
# - AddressType.yaml: Abstract base class defining the type taxonomy
# - AddressTypes.yaml: File containing all concrete subclasses
#
# Generation date: 2026-01-13 (migrated from address_type slot)
# Rule compliance: 0b (Type/Types naming), 37 (specificity scores), 38 (slot centralization)
#
# MIGRATION: This file replaces address_type slot with has_or_had_type + AddressType class
id: https://nde.nl/ontology/hc/class/AddressType
name: address_type_class
title: Address Type Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
@ -10,178 +22,235 @@ prefixes:
skos: http://www.w3.org/2004/02/skos/core#
dcterms: http://purl.org/dc/terms/
crm: http://www.cidoc-crm.org/cidoc-crm/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_identifier
- ../slots/has_or_had_code
- ../slots/has_or_had_label
- ../slots/has_or_had_description
- ../slots/has_or_had_hypernym
- ../slots/has_or_had_hyponym
- ../slots/is_or_was_related_to
- ../slots/is_or_was_equivalent_to
- ./WikiDataIdentifier
- linkml:types
# Shared slots (centralized)
- ../slots/has_or_had_identifier
- ../slots/has_or_had_short_code
- ../slots/has_or_had_label
- ../slots/has_or_had_description
- ../slots/has_or_had_hypernym
- ../slots/has_or_had_hyponym
- ../slots/is_or_was_related_to
# REMOVED 2026-01-15: wikidata_id - migrated to is_or_was_equivalent_to + WikiDataIdentifier (Rule 53)
- ../slots/is_or_was_equivalent_to
- ./WikiDataIdentifier
classes:
AddressType:
class_uri: skos:Concept
description: "Classification type for Address purposes in heritage custodian contexts.\n\n**DEFINITION**:\n\nAddressType provides a SKOS-based classification hierarchy for categorizing\ndifferent types of addresses based on their purpose or function. This enables:\n- Rich metadata (descriptions, use cases)\n- Hierarchical relationships (broader/narrower types)\n- Extensibility (new types without enum modification)\n- Semantic alignment with vCard, GLEIF, and Schema.org ontologies\n\n**ONTOLOGY ALIGNMENT**:\n\n| Ontology | Class/Property | Notes |\n|----------|----------------|-------|\n| **vCard** | `vcard:Type` | RFC6350 type codes (Home, Work) |\n| **GLEIF** | `gleif_base:hasAddressLegal`, `gleif_base:hasAddressHeadquarters` | Legal entity addresses |\n| **CIDOC-CRM** | `crm:E55_Type` | General type classification |\n| **SKOS** | `skos:Concept` | Controlled vocabulary concept |\n\n**ADDRESS TYPES FOR HERITAGE CUSTODIANS**:\n\n| Type | Use Case |\n|------|----------|\n| `HEADQUARTERS`\
\ | Main organizational address |\n| `LEGAL` | Registered legal/business address (KvK, Chamber of Commerce) |\n| `VISITING` | Public visitor entrance address |\n| `MAILING` | Correspondence/postal address |\n| `STORAGE` | Depot, warehouse, off-site storage facility |\n| `BRANCH` | Branch office location |\n| `READING_ROOM` | Public reading/research room entrance |\n\n**RELATIONSHIP TO OTHER CLASSES**:\n\n```\nAddress (physical address)\n \u2502\n \u2514\u2500\u2500 has_or_had_type \u2192 AddressType (THIS CLASS)\n \u251C\u2500\u2500 has_or_had_hypernym \u2192 AddressType (parent in hierarchy)\n \u251C\u2500\u2500 has_or_had_hyponym \u2192 AddressType[] (children)\n \u2514\u2500\u2500 has_or_had_description (text)\n```\n\n**SLOT MIGRATION** (2026-01-13):\n\nThis class replaces the address_type string slot with a proper class hierarchy.\nOld pattern: `address_type: HEADQUARTERS` (string)\nNew pattern: `has_or_had_type: AddressType` (object reference)\n"
description: |
Classification type for Address purposes in heritage custodian contexts.
**DEFINITION**:
AddressType provides a SKOS-based classification hierarchy for categorizing
different types of addresses based on their purpose or function. This enables:
- Rich metadata (descriptions, use cases)
- Hierarchical relationships (broader/narrower types)
- Extensibility (new types without enum modification)
- Semantic alignment with vCard, GLEIF, and Schema.org ontologies
**ONTOLOGY ALIGNMENT**:
| Ontology | Class/Property | Notes |
|----------|----------------|-------|
| **vCard** | `vcard:Type` | RFC6350 type codes (Home, Work) |
| **GLEIF** | `gleif_base:hasAddressLegal`, `gleif_base:hasAddressHeadquarters` | Legal entity addresses |
| **CIDOC-CRM** | `crm:E55_Type` | General type classification |
| **SKOS** | `skos:Concept` | Controlled vocabulary concept |
**ADDRESS TYPES FOR HERITAGE CUSTODIANS**:
| Type | Use Case |
|------|----------|
| `HEADQUARTERS` | Main organizational address |
| `LEGAL` | Registered legal/business address (KvK, Chamber of Commerce) |
| `VISITING` | Public visitor entrance address |
| `MAILING` | Correspondence/postal address |
| `STORAGE` | Depot, warehouse, off-site storage facility |
| `BRANCH` | Branch office location |
| `READING_ROOM` | Public reading/research room entrance |
**RELATIONSHIP TO OTHER CLASSES**:
```
Address (physical address)
└── has_or_had_type → AddressType (THIS CLASS)
├── has_or_had_hypernym → AddressType (parent in hierarchy)
├── has_or_had_hyponym → AddressType[] (children)
└── has_or_had_description (text)
```
**SLOT MIGRATION** (2026-01-13):
This class replaces the address_type string slot with a proper class hierarchy.
Old pattern: `address_type: HEADQUARTERS` (string)
New pattern: `has_or_had_type: AddressType` (object reference)
exact_mappings:
- skos:Concept
- skos:Concept
close_mappings:
- vcard:Type
- crm:E55_Type
- vcard:Type
- crm:E55_Type
related_mappings:
- gleif_base:hasAddressLegal
- gleif_base:hasAddressHeadquarters
- gleif_base:hasAddressLegal
- gleif_base:hasAddressHeadquarters
slots:
- has_or_had_identifier
- has_or_had_code
- has_or_had_label
- has_or_had_description
- has_or_had_hypernym
- has_or_had_hyponym
- is_or_was_related_to
- is_or_was_equivalent_to
# Shared slots (from centralized slot files)
- has_or_had_identifier
- has_or_had_short_code
- has_or_had_label
- has_or_had_description
- has_or_had_hypernym
- has_or_had_hyponym
- is_or_was_related_to
# REMOVED 2026-01-15: wikidata_id - migrated to is_or_was_equivalent_to (Rule 53)
- is_or_was_equivalent_to
slot_usage:
has_or_had_identifier:
range: uriorcurie
required: true
identifier: true
pattern: ^https://nde\.nl/ontology/hc/address-type/[a-z0-9-]+$
pattern: "^https://nde\\.nl/ontology/hc/address-type/[a-z0-9-]+$"
examples:
- value: https://nde.nl/ontology/hc/address-type/headquarters
description: Main organizational headquarters address type
- value: https://nde.nl/ontology/hc/address-type/legal
description: Registered legal address type
has_or_had_code:
- value: https://nde.nl/ontology/hc/address-type/headquarters
description: Main organizational headquarters address type
- value: https://nde.nl/ontology/hc/address-type/legal
description: Registered legal address type
has_or_had_short_code:
range: string
required: true
pattern: ^[A-Z][A-Z0-9_]*$
pattern: "^[A-Z][A-Z0-9_]*$"
examples:
- value: HEADQUARTERS
- value: LEGAL
- value: VISITING
- value: MAILING
- value: STORAGE
- value: BRANCH
- value: HEADQUARTERS
- value: LEGAL
- value: VISITING
- value: MAILING
- value: STORAGE
- value: BRANCH
has_or_had_label:
range: string
required: true
multivalued: true
examples:
- value:
- Headquarters@en
- Hoofdkantoor@nl
- value:
- Legal Address@en
- Juridisch adres@nl
- value:
- Visiting Address@en
- Bezoekadres@nl
- value: ["Headquarters@en", "Hoofdkantoor@nl"]
- value: ["Legal Address@en", "Juridisch adres@nl"]
- value: ["Visiting Address@en", "Bezoekadres@nl"]
has_or_had_description:
range: string
examples:
- value: Main organizational address where primary operations occur.
- value: "Main organizational address where primary operations occur."
has_or_had_hypernym:
range: AddressType
description: Parent address type in the classification hierarchy.
description: "Parent address type in the classification hierarchy."
has_or_had_hyponym:
range: AddressType
multivalued: true
inlined_as_list: true
description: Child address types in the classification hierarchy.
description: "Child address types in the classification hierarchy."
is_or_was_related_to:
range: AddressType
multivalued: true
inlined_as_list: true
description: Non-hierarchical associations with other address types.
description: "Non-hierarchical associations with other address types."
is_or_was_equivalent_to:
range: WikiDataIdentifier
multivalued: true
inlined: true
inlined_as_list: true
description: 'Wikidata equivalence for this address type concept.
description: |
Wikidata equivalence for this address type concept.
MIGRATED 2026-01-15: Replaces wikidata_id slot per Rule 53.
'
examples:
- value:
- qid: Q1234567
label: Headquarters address
description: Wikidata equivalence for headquarters address type
- value:
- qid: "Q1234567"
label: "Headquarters address"
description: Wikidata equivalence for headquarters address type
annotations:
specificity_score: '0.30'
specificity_rationale: Address types are broadly applicable - all heritage custodians have addresses.
has_or_had_score: null
slot_migration: "2026-01-13: Migrated from address_type string slot to AddressType class\n- address_type (string) \u2192 has_or_had_type (AddressType)\n"
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept
specificity_score: "0.30"
specificity_rationale: "Address types are broadly applicable - all heritage custodians have addresses."
has_or_had_score: # was: template_specificity - migrated per Rule 53 (2026-01-17)
# NOTE: slot_usage may need manual review for range/description updates '{"collection_discovery": 0.20, "organizational_change": 0.35, "general_heritage": 0.25}'
slot_migration: |
2026-01-13: Migrated from address_type string slot to AddressType class
- address_type (string) → has_or_had_type (AddressType)
comments:
- AddressType provides SKOS-based classification for Address instances
- Supports hierarchical type relationships (has_or_had_hypernym/hyponym)
- Richer semantics than flat address_type string slot
- Aligned with vCard Type, GLEIF address distinctions
- 'MIGRATED 2026-01-13: Now uses shared slots (Rule 38)'
- "AddressType provides SKOS-based classification for Address instances"
- "Supports hierarchical type relationships (has_or_had_hypernym/hyponym)"
- "Richer semantics than flat address_type string slot"
- "Aligned with vCard Type, GLEIF address distinctions"
- "MIGRATED 2026-01-13: Now uses shared slots (Rule 38)"
see_also:
- https://www.w3.org/TR/vcard-rdf/#d4e1769
- https://www.gleif.org/ontology/Base/
- https://www.w3.org/TR/vcard-rdf/#d4e1769
- https://www.gleif.org/ontology/Base/
examples:
- value:
has_or_had_identifier: https://nde.nl/ontology/hc/address-type/headquarters
has_or_had_code: HEADQUARTERS
has_or_had_label:
- Headquarters@en
- Hoofdkantoor@nl
has_or_had_description: 'Main organizational address where primary operations occur.
This is typically where leadership and central administration
are located.
'
description: Headquarters address type definition
- value:
has_or_had_identifier: https://nde.nl/ontology/hc/address-type/legal
has_or_had_code: LEGAL
has_or_had_label:
- Legal Address@en
- Juridisch adres@nl
- Statutaire zetel@nl
has_or_had_description: 'Registered legal address for official correspondence and legal
purposes. May differ from operational headquarters.
For Dutch organizations, this is the address registered with KvK.
'
description: Legal/statutory address type definition
- value:
has_or_had_identifier: https://nde.nl/ontology/hc/address-type/visiting
has_or_had_code: VISITING
has_or_had_label:
- Visiting Address@en
- Bezoekadres@nl
has_or_had_description: 'Public entrance for visitors. May include museums, archives,
or libraries with public reading rooms.
'
description: Public visiting address type definition
- value:
has_or_had_identifier: https://nde.nl/ontology/hc/address-type/storage
has_or_had_code: STORAGE
has_or_had_label:
- Storage Facility@en
- Opslaglocatie@nl
- Depot@nl
has_or_had_description: 'Off-site storage facility, depot, or warehouse for collections.
Not typically open to the public.
'
is_or_was_related_to:
- https://nde.nl/ontology/hc/address-type/branch
description: Storage/depot address type definition
- value:
has_or_had_identifier: https://nde.nl/ontology/hc/address-type/headquarters
has_or_had_short_code: HEADQUARTERS
has_or_had_label:
- Headquarters@en
- Hoofdkantoor@nl
has_or_had_description: |
Main organizational address where primary operations occur.
This is typically where leadership and central administration
are located.
description: Headquarters address type definition
- value:
has_or_had_identifier: https://nde.nl/ontology/hc/address-type/legal
has_or_had_short_code: LEGAL
has_or_had_label:
- Legal Address@en
- Juridisch adres@nl
- Statutaire zetel@nl
has_or_had_description: |
Registered legal address for official correspondence and legal
purposes. May differ from operational headquarters.
For Dutch organizations, this is the address registered with KvK.
description: Legal/statutory address type definition
- value:
has_or_had_identifier: https://nde.nl/ontology/hc/address-type/visiting
has_or_had_short_code: VISITING
has_or_had_label:
- Visiting Address@en
- Bezoekadres@nl
has_or_had_description: |
Public entrance for visitors. May include museums, archives,
or libraries with public reading rooms.
description: Public visiting address type definition
- value:
has_or_had_identifier: https://nde.nl/ontology/hc/address-type/storage
has_or_had_short_code: STORAGE
has_or_had_label:
- Storage Facility@en
- Opslaglocatie@nl
- Depot@nl
has_or_had_description: |
Off-site storage facility, depot, or warehouse for collections.
Not typically open to the public.
is_or_was_related_to:
- https://nde.nl/ontology/hc/address-type/branch
description: Storage/depot address type definition

View file

@ -1,236 +1,239 @@
# AddressTypes - Concrete subclasses for AddressType
#
# Following the Type/Types naming convention (Rule 0b):
# - AddressType.yaml: Abstract base class defining the type taxonomy
# - AddressTypes.yaml: This file contains all concrete subclasses
#
# Generation date: 2026-01-13 (migrated from address_type slot values)
# Rule compliance: 0b (Type/Types naming), 37 (specificity scores)
id: https://nde.nl/ontology/hc/class/AddressTypes
name: address_types_classes
title: Address Types Concrete Classes
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
vcard: http://www.w3.org/2006/vcard/ns#
gleif_base: https://www.gleif.org/ontology/Base/
skos: http://www.w3.org/2004/02/skos/core#
default_prefix: hc
imports:
- linkml:types
- ./AddressType
- linkml:types
- ./AddressType
classes:
HeadquartersAddress:
is_a: AddressType
class_uri: hc:HeadquartersAddress
description: 'Main organizational headquarters address where primary operations occur.
description: |
Main organizational headquarters address where primary operations occur.
This is typically where leadership and central administration are located.
**Ontology Alignment**:
- GLEIF: `gleif_base:hasAddressHeadquarters`
'
close_mappings:
- gleif_base:hasAddressHeadquarters
- gleif_base:hasAddressHeadquarters
annotations:
short_code: HEADQUARTERS
specificity_score: '0.25'
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept
specificity_score: "0.25"
examples:
- value:
has_or_had_code: HEADQUARTERS
has_or_had_label:
- Headquarters@en
- Hoofdkantoor@nl
description: Rijksmuseum main headquarters
- value:
has_or_had_short_code: HEADQUARTERS
has_or_had_label:
- Headquarters@en
- Hoofdkantoor@nl
description: Rijksmuseum main headquarters
LegalAddress:
is_a: AddressType
class_uri: hc:LegalAddress
description: 'Registered legal address for official correspondence and legal purposes.
description: |
Registered legal address for official correspondence and legal purposes.
May differ from operational headquarters.
For Dutch organizations, this is the address registered with the
Chamber of Commerce (Kamer van Koophandel - KvK).
**Ontology Alignment**:
- GLEIF: `gleif_base:hasAddressLegal`
'
close_mappings:
- gleif_base:hasAddressLegal
- gleif_base:hasAddressLegal
annotations:
short_code: LEGAL
specificity_score: '0.30'
specificity_score: "0.30"
examples:
- value:
has_or_had_code: LEGAL
has_or_had_label:
- Legal Address@en
- Juridisch adres@nl
- Statutaire zetel@nl
description: Registered legal address from KvK
- value:
has_or_had_short_code: LEGAL
has_or_had_label:
- Legal Address@en
- Juridisch adres@nl
- Statutaire zetel@nl
description: Registered legal address from KvK
VisitingAddress:
is_a: AddressType
class_uri: hc:VisitingAddress
description: 'Public entrance address for visitors.
description: |
Public entrance address for visitors.
For heritage custodians, this is typically where the public enters
to visit exhibitions, reading rooms, or public services.
May include accessible entrances for persons with disabilities.
'
annotations:
short_code: VISITING
specificity_score: '0.25'
specificity_score: "0.25"
examples:
- value:
has_or_had_code: VISITING
has_or_had_label:
- Visiting Address@en
- Bezoekadres@nl
description: Public visitor entrance
- value:
has_or_had_short_code: VISITING
has_or_had_label:
- Visiting Address@en
- Bezoekadres@nl
description: Public visitor entrance
MailingAddress:
is_a: AddressType
class_uri: hc:MailingAddress
description: 'Postal correspondence address.
description: |
Postal correspondence address.
Address for receiving mail and correspondence. May be a P.O. Box
or differ from physical location addresses.
'
annotations:
short_code: MAILING
specificity_score: '0.25'
specificity_score: "0.25"
examples:
- value:
has_or_had_code: MAILING
has_or_had_label:
- Mailing Address@en
- Postadres@nl
- Correspondentieadres@nl
description: Postal correspondence address
- value:
has_or_had_short_code: MAILING
has_or_had_label:
- Mailing Address@en
- Postadres@nl
- Correspondentieadres@nl
description: Postal correspondence address
StorageAddress:
is_a: AddressType
class_uri: hc:StorageAddress
description: 'Off-site storage facility, depot, or warehouse address.
description: |
Off-site storage facility, depot, or warehouse address.
Not typically open to the public. May house collection items
not currently on display, archival materials, or preservation
facilities.
Related to StorageType for describing the type of storage facility.
'
annotations:
short_code: STORAGE
specificity_score: '0.40'
specificity_score: "0.40"
examples:
- value:
has_or_had_code: STORAGE
has_or_had_label:
- Storage Facility@en
- Opslaglocatie@nl
- Depot@nl
description: Off-site collection depot
- value:
has_or_had_short_code: STORAGE
has_or_had_label:
- Storage Facility@en
- Opslaglocatie@nl
- Depot@nl
description: Off-site collection depot
BranchAddress:
is_a: AddressType
class_uri: hc:BranchAddress
description: 'Branch office or satellite location address.
description: |
Branch office or satellite location address.
For heritage custodians with multiple locations, this identifies
addresses of branch offices, satellite reading rooms, or regional
service points.
'
annotations:
short_code: BRANCH
specificity_score: '0.35'
specificity_score: "0.35"
examples:
- value:
has_or_had_code: BRANCH
has_or_had_label:
- Branch Office@en
- Vestiging@nl
- Filiaal@nl
description: Branch office location
- value:
has_or_had_short_code: BRANCH
has_or_had_label:
- Branch Office@en
- Vestiging@nl
- Filiaal@nl
description: Branch office location
ReadingRoomAddress:
is_a: AddressType
class_uri: hc:ReadingRoomAddress
description: 'Public reading room or research room entrance address.
description: |
Public reading room or research room entrance address.
Specific to archives and libraries, this identifies where
researchers access original materials for consultation.
May differ from the main visiting address.
'
annotations:
short_code: READING_ROOM
specificity_score: '0.50'
specificity_score: "0.50"
examples:
- value:
has_or_had_code: READING_ROOM
has_or_had_label:
- Reading Room@en
- Studiezaal@nl
- Leeszaal@nl
description: Archive/library reading room entrance
- value:
has_or_had_short_code: READING_ROOM
has_or_had_label:
- Reading Room@en
- Studiezaal@nl
- Leeszaal@nl
description: Archive/library reading room entrance
DeliveryAddress:
is_a: AddressType
class_uri: hc:DeliveryAddress
description: 'Goods delivery and receiving address.
description: |
Goods delivery and receiving address.
Address for receiving deliveries, including acquisitions,
loans, and supplies. May include loading dock facilities.
'
annotations:
short_code: DELIVERY
specificity_score: '0.40'
specificity_score: "0.40"
examples:
- value:
has_or_had_code: DELIVERY
has_or_had_label:
- Delivery Address@en
- Afleveradres@nl
- Goederenontvangst@nl
description: Delivery receiving dock
- value:
has_or_had_short_code: DELIVERY
has_or_had_label:
- Delivery Address@en
- Afleveradres@nl
- Goederenontvangst@nl
description: Delivery receiving dock
ConservationLabAddress:
is_a: AddressType
class_uri: hc:ConservationLabAddress
description: 'Conservation laboratory or restoration facility address.
description: |
Conservation laboratory or restoration facility address.
May be separate from main facilities, housing specialized
equipment for preservation and restoration work.
'
annotations:
short_code: CONSERVATION_LAB
specificity_score: '0.55'
specificity_score: "0.55"
examples:
- value:
has_or_had_code: CONSERVATION_LAB
has_or_had_label:
- Conservation Laboratory@en
- Restauratieatelier@nl
- Conserveringslab@nl
description: Restoration workshop facility
- value:
has_or_had_short_code: CONSERVATION_LAB
has_or_had_label:
- Conservation Laboratory@en
- Restauratieatelier@nl
- Conserveringslab@nl
description: Restoration workshop facility

View file

@ -1,13 +0,0 @@
classes:
Administration:
class_uri: org:OrganizationalUnit
description: An administrative unit or body.
slots:
- has_or_had_label
- has_or_had_description
- has_or_had_identifier
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -1,58 +0,0 @@
id: https://nde.nl/ontology/hc/class/AdministrativeLevel
name: AdministrativeLevel
title: Administrative Level Class
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
skos: http://www.w3.org/2004/02/skos/core#
schema: http://schema.org/
dcterms: http://purl.org/dc/terms/
prov: http://www.w3.org/ns/prov#
crm: http://www.cidoc-crm.org/cidoc-crm/
rdfs: http://www.w3.org/2000/01/rdf-schema#
org: http://www.w3.org/ns/org#
xsd: http://www.w3.org/2001/XMLSchema#
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_label
- ../slots/has_or_had_code
- ../slots/has_or_had_description
classes:
AdministrativeLevel:
class_uri: skos:Concept
description: 'A level or tier within an administrative or government hierarchy.
**Examples**:
- National/Federal
- State/Provincial
- Regional
- Municipal/Local
**Ontological Alignment**:
- `skos:Concept`: Concept in a hierarchy scheme.
'
slots:
- has_or_had_label
- has_or_had_code
- has_or_had_description
slot_usage:
has_or_had_label:
description: Name of the level (e.g., "National")
required: true
has_or_had_code:
description: Code for the level (e.g., "NAT", "ISO-3166-2")
required: false
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -2,32 +2,31 @@ id: https://nde.nl/ontology/hc/class/administrative-office
name: administrative_office_class
title: AdministrativeOffice Class
imports:
- linkml:types
- ./ReconstructedEntity
- ./CustodianObservation
- ./ReconstructionActivity
- ./FunctionType
- ../slots/is_or_was_derived_from
- ../slots/is_or_was_generated_by
- ../slots/has_or_had_access_restriction
- ../slots/has_or_had_description
- ../classes/Description
- ../slots/has_or_had_label
- ../classes/Label
# has_or_had_admin_staff_count REMOVED - migrated to has_or_had_staff + Staff (Rule 53)
- ../slots/has_or_had_staff
- ./Staff
- ../slots/has_or_had_function
- ../slots/is_leased
- ../slots/lease_expiry
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- ./SpecificityAnnotation
- ./TemplateSpecificityScore
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
- ../slots/has_or_had_identifier
- ../classes/Identifier
- linkml:types
- ./ReconstructedEntity
- ./CustodianObservation
- ./ReconstructionActivity
- ./FunctionType
- ../slots/is_or_was_derived_from # was: was_derived_from - migrated per Rule 53
- ../slots/is_or_was_generated_by # was: was_generated_by - migrated per Rule 53
- ../slots/has_or_had_access_restriction
- ../slots/has_admin_office_description
- ../slots/has_admin_office_name
- ../slots/has_or_had_admin_staff_count
# administrative_functions REMOVED - migrated to has_or_had_function (Rule 53)
# has_or_had_administrative_function REMOVED - bespoke slot replaced by generic has_or_had_function (Rule 53)
- ../slots/has_or_had_function
- ../slots/is_leased
- ../slots/lease_expiry
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ./SpecificityAnnotation
- ./TemplateSpecificityScore # was: TemplateSpecificityScores - migrated per Rule 53 (2026-01-17)
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
- ../slots/has_admin_office_identifier
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
@ -42,9 +41,75 @@ classes:
AdministrativeOffice:
is_a: ReconstructedEntity
class_uri: org:Site
description: "Non-public administrative building or office space of a heritage custodian.\n**DEFINITION**:\nAn AdministrativeOffice is a secondary physical location where a heritage custodian performs back-office, administrative, or support functions that do not directly serve the public. These locations typically house staff performing finance, HR, IT, management, or other operational activities.\n**W3C ORG ALIGNMENT**:\n`org:Site` - \"An office or other premise at which the organization is located.\"\nAdministrativeOffice specializes org:Site for non-public administrative spaces: - Financial/accounting departments - Human resources offices - IT infrastructure locations - Executive/management offices\n**DISTINCTION FROM OTHER AUXILIARY PLACE TYPES**:\n| Type | Public Access | Primary Function | |------|---------------|------------------| | BranchOffice | Yes | Public service delivery | | **AdministrativeOffice** | No | Back-office operations | | ResearchCenter | Limited | Research/conservation\
\ | | Storage | No | Collection storage |\n**TYPICAL CHARACTERISTICS**:\n- **Staff-only access**: No public visitors - **Administrative functions**: Finance, HR, IT, management - **Separate from collections**: No collection materials stored - **Cost center**: Often in lower-cost location than main building\n**USE CASES**:\n1. **Separate Administrative Building**:\n - Museum finance department in office park\n - Archive IT/digitization support center\n\n2. **Executive Offices**:\n - Foundation board meeting space\n - Director's office separate from main building\n\n3. **Support Services**:\n - Facilities management office\n - Marketing/communications department\n\n**Example - Administrative Annex**: ```yaml AdministrativeOffice:\n has_admin_office_identifier: \"https://nde.nl/ontology/hc/aux/rijksmuseum-admin-zuidas\"\n has_admin_office_name: \"Rijksmuseum Administrative Offices - Zuidas\"\n has_admin_office_description: |\n Administrative support offices housing finance,\
\ HR, and IT departments.\n Staff access only. Located in Zuidas business district for cost efficiency.\n has_or_had_function:\n - function_category: ADMINISTRATIVE\n function_name: \"Finance and accounting\"\n - function_category: ADMINISTRATIVE\n function_name: \"Human resources\"\n - function_category: SUPPORT\n function_name: \"Information technology\"\n - function_category: ADMINISTRATIVE\n function_name: \"Legal affairs\"\n has_or_had_access_restriction: \"Staff badge required\"\n```"
description: >-
Non-public administrative building or office space of a heritage custodian.
**DEFINITION**:
An AdministrativeOffice is a secondary physical location where a heritage
custodian performs back-office, administrative, or support functions that
do not directly serve the public. These locations typically house staff
performing finance, HR, IT, management, or other operational activities.
**W3C ORG ALIGNMENT**:
`org:Site` - "An office or other premise at which the organization is located."
AdministrativeOffice specializes org:Site for non-public administrative spaces:
- Financial/accounting departments
- Human resources offices
- IT infrastructure locations
- Executive/management offices
**DISTINCTION FROM OTHER AUXILIARY PLACE TYPES**:
| Type | Public Access | Primary Function |
|------|---------------|------------------|
| BranchOffice | Yes | Public service delivery |
| **AdministrativeOffice** | No | Back-office operations |
| ResearchCenter | Limited | Research/conservation |
| Storage | No | Collection storage |
**TYPICAL CHARACTERISTICS**:
- **Staff-only access**: No public visitors
- **Administrative functions**: Finance, HR, IT, management
- **Separate from collections**: No collection materials stored
- **Cost center**: Often in lower-cost location than main building
**USE CASES**:
1. **Separate Administrative Building**:
- Museum finance department in office park
- Archive IT/digitization support center
2. **Executive Offices**:
- Foundation board meeting space
- Director's office separate from main building
3. **Support Services**:
- Facilities management office
- Marketing/communications department
**Example - Administrative Annex**:
```yaml
AdministrativeOffice:
has_admin_office_identifier: "https://nde.nl/ontology/hc/aux/rijksmuseum-admin-zuidas"
has_admin_office_name: "Rijksmuseum Administrative Offices - Zuidas"
has_admin_office_description: |
Administrative support offices housing finance, HR, and IT departments.
Staff access only. Located in Zuidas business district for cost efficiency.
has_or_had_function:
- function_category: ADMINISTRATIVE
function_name: "Finance and accounting"
- function_category: ADMINISTRATIVE
function_name: "Human resources"
- function_category: SUPPORT
function_name: "Information technology"
- function_category: ADMINISTRATIVE
function_name: "Legal affairs"
has_or_had_access_restriction: "Staff badge required"
```
exact_mappings:
- org:Site
close_mappings:
@ -55,36 +120,48 @@ classes:
- org:OrganizationalUnit
slots:
- has_or_had_access_restriction
- has_or_had_description
- has_or_had_identifier
- has_or_had_label
# has_or_had_admin_staff_count REMOVED - migrated to has_or_had_staff (Rule 53)
- has_or_had_staff
- has_admin_office_description
- has_admin_office_identifier
- has_admin_office_name
- has_or_had_admin_staff_count
# administrative_functions REMOVED - use has_or_had_function (Rule 53)
# has_or_had_administrative_function REMOVED - bespoke, use has_or_had_function (Rule 53)
- has_or_had_function
- is_leased
- lease_expiry
- specificity_annotation
- has_or_had_score
- is_or_was_derived_from
- is_or_was_generated_by
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- is_or_was_derived_from # was: was_derived_from - migrated per Rule 53
- is_or_was_generated_by # was: was_generated_by - migrated per Rule 53
slot_usage:
has_or_had_identifier:
range: Identifier
has_admin_office_identifier:
range: uriorcurie
required: true
description: Identifier for the administrative office.
has_or_had_label:
range: Label
identifier: true
examples:
- value: https://nde.nl/ontology/hc/aux/rijksmuseum-admin-zuidas
description: Rijksmuseum administrative office
has_admin_office_name:
range: string
required: true
description: Name of the administrative office.
has_or_had_description:
range: Description
description: Description of the administrative office.
examples:
- value: Rijksmuseum Administrative Offices - Zuidas
description: Admin office with location
- value: Noord-Hollands Archief Finance Department
description: Admin office with function
has_admin_office_description:
range: string
examples:
- value: Administrative support offices housing finance, HR, and IT departments. Staff access only.
description: Admin office description
has_or_had_function:
range: FunctionType
multivalued: true
inlined: true
inlined_as_list: true
description: Organizational functions performed at this administrative office. Uses generic FunctionType class with function_category classification.
description: >-
Organizational functions performed at this administrative office.
Uses generic FunctionType class with function_category classification.
examples:
- value:
function_category: ADMINISTRATIVE
@ -107,22 +184,10 @@ classes:
description: Badge access
- value: Management access only
description: Restricted access
has_or_had_staff:
description: |
Staff associated with the administrative office.
MIGRATED from has_or_had_admin_staff_count per Rule 53.
Uses Staff class (with Quantity).
range: Staff
multivalued: true
inlined: true
has_or_had_admin_staff_count:
range: integer
examples:
- value:
has_or_had_quantity:
has_or_had_value: 25
has_or_had_unit:
has_or_had_label: "FTE"
has_or_had_type:
has_or_had_label: "Administrative Staff"
- value: 25
description: Medium admin office
is_leased:
range: boolean
@ -136,11 +201,11 @@ classes:
examples:
- value: '2028-12-31'
description: Lease expires end of 2028
is_or_was_derived_from:
is_or_was_derived_from: # was: was_derived_from - migrated per Rule 53
range: CustodianObservation
multivalued: true
required: false
is_or_was_generated_by:
is_or_was_generated_by: # was: was_generated_by - migrated per Rule 53
range: ReconstructionActivity
required: false
comments:
@ -149,21 +214,16 @@ classes:
- W3C ORG org:Site specialized for administrative functions
- Often in separate building from main heritage operations
- May be leased rather than owned for cost efficiency
- 'MIGRATION NOTE: has_or_had_administrative_function replaced by generic has_or_had_function (Rule 53)'
- "MIGRATION NOTE: has_or_had_administrative_function replaced by generic has_or_had_function (Rule 53)"
see_also:
- https://www.w3.org/TR/vocab-org/#org:Site
- https://schema.org/Corporation
examples:
- value:
has_or_had_identifier:
identifier_value: https://nde.nl/ontology/hc/aux/rijksmuseum-admin-zuidas
identifier_scheme: URI
has_or_had_label:
has_or_had_label: Rijksmuseum Administrative Offices - Zuidas
has_or_had_description:
has_or_had_content:
has_or_had_description: Administrative support offices housing finance, HR, and IT departments. Staff access only. Located in Zuidas business district.
description_type: admin_office
has_admin_office_identifier: https://nde.nl/ontology/hc/aux/rijksmuseum-admin-zuidas
has_admin_office_name: Rijksmuseum Administrative Offices - Zuidas
has_admin_office_description: Administrative support offices housing finance, HR, and IT departments. Staff access only.
Located in Zuidas business district.
has_or_had_function:
- function_category: ADMINISTRATIVE
function_name: Finance and accounting
@ -174,26 +234,15 @@ classes:
- function_category: ADMINISTRATIVE
function_name: Legal affairs
has_or_had_access_restriction: Staff badge required
has_or_had_staff:
- has_or_had_quantity:
has_or_had_value: 45
has_or_had_unit:
has_or_had_label: "FTE"
has_or_had_type:
has_or_had_label: "Administrative Staff"
has_or_had_admin_staff_count: 45
is_leased: true
lease_expiry: '2028-12-31'
description: Museum administrative office in business district
- value:
has_or_had_identifier:
identifier_value: https://nde.nl/ontology/hc/aux/kb-digitization-center
identifier_scheme: URI
has_or_had_label:
has_or_had_label: Koninklijke Bibliotheek Digitization Support Center
has_or_had_description:
has_or_had_content:
has_or_had_description: Technical support center for digitization operations. Houses scanning equipment coordination and quality control.
description_type: admin_office
has_admin_office_identifier: https://nde.nl/ontology/hc/aux/kb-digitization-center
has_admin_office_name: Koninklijke Bibliotheek Digitization Support Center
has_admin_office_description: Technical support center for digitization operations. Houses scanning equipment coordination
and quality control.
has_or_had_function:
- function_category: PROGRAM
function_name: Digitization project management
@ -202,18 +251,6 @@ classes:
- function_category: SUPPORT
function_name: Technical support
has_or_had_access_restriction: Project staff only
has_or_had_staff:
- has_or_had_quantity:
has_or_had_value: 12
has_or_had_unit:
has_or_had_label: "FTE"
has_or_had_type:
has_or_had_label: "Technical Staff"
has_or_had_admin_staff_count: 12
is_leased: false
lease_expiry: null
description: Library digitization support facility
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -1,29 +0,0 @@
id: https://nde.nl/ontology/hc/class/AdministrativeUnit
name: AdministrativeUnit
title: AdministrativeUnit
description: >-
An administrative division or unit.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
org: http://www.w3.org/ns/org#
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_name
classes:
AdministrativeUnit:
class_uri: org:OrganizationalUnit
description: Administrative unit.
annotations:
specificity_score: 0.1
specificity_rationale: "Generic utility class created during migration"
custodian_types: ["*"]
custodian_types_rationale: "Universal utility concept"
slots:
- has_or_had_name

View file

@ -1,29 +0,0 @@
id: https://nde.nl/ontology/hc/class/AdmissionFee
name: AdmissionFee
title: AdmissionFee
description: >-
Fee charged for admission.
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
default_prefix: hc
imports:
- linkml:types
- ../slots/has_or_had_amount
classes:
AdmissionFee:
class_uri: schema:PriceSpecification
description: Admission fee.
annotations:
specificity_score: 0.1
specificity_rationale: "Generic utility class created during migration"
custodian_types: ["*"]
custodian_types_rationale: "Universal utility concept"
slots:
- has_or_had_amount

View file

@ -1,32 +1,45 @@
# AdmissionInfo - Structured admission price information from Google Maps
# Extracted from custodian_source.yaml per Rule 38 (modular schema files)
# Extraction date: 2026-01-08
id: https://nde.nl/ontology/hc/classes/AdmissionInfo
name: AdmissionInfo
title: AdmissionInfo
prefixes:
linkml: https://w3id.org/linkml/
hc: https://nde.nl/ontology/hc/
schema: http://schema.org/
prov: http://www.w3.org/ns/prov#
xsd: http://www.w3.org/2001/XMLSchema#
imports:
- linkml:types
- linkml:types
default_range: string
classes:
AdmissionInfo:
description: "Structured admission price information from Google Maps including price value and notes about additional fees or conditions.\nOntology mapping rationale: - class_uri is schema:PriceSpecification because this represents\n structured price information for museum/institution admission\n- close_mappings includes schema:Offer for commercial offering context - related_mappings includes schema:MonetaryAmount for price values"
class_uri: schema:PriceSpecification
close_mappings:
- schema:Offer
related_mappings:
- schema:MonetaryAmount
attributes:
price:
range: string
description: "Admission price (e.g., \"\u20AC9.00\")"
note:
range: string
description: Additional notes about admission (e.g., "Additional fees might apply")
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept
description: >-
Structured admission price information from Google Maps including
price value and notes about additional fees or conditions.
Ontology mapping rationale:
- class_uri is schema:PriceSpecification because this represents
structured price information for museum/institution admission
- close_mappings includes schema:Offer for commercial offering context
- related_mappings includes schema:MonetaryAmount for price values
class_uri: schema:PriceSpecification
close_mappings:
- schema:Offer
related_mappings:
- schema:MonetaryAmount
attributes:
price:
range: string
description: Admission price (e.g., "€9.00")
note:
range: string
description: Additional notes about admission (e.g., "Additional fees might
apply")

View file

@ -4,22 +4,25 @@ title: Advertising Radio Archive Type
prefixes:
linkml: https://w3id.org/linkml/
imports:
- linkml:types
- ./ArchiveOrganizationType
- ./CollectionType
- ./AdvertisingRadioArchiveRecordSetTypes
- ../slots/hold_or_held_record_set_type
- ../slots/has_or_had_type
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- ../slots/is_or_was_related_to
- ./SpecificityAnnotation
- ./TemplateSpecificityScore
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
- ./WikidataAlignment
- ./WikiDataEntry
- ./AdvertisingRadioArchiveRecordSetType
- linkml:types
- ./ArchiveOrganizationType
- ./CollectionType
- ./AdvertisingRadioArchiveRecordSetTypes
- ../slots/hold_or_held_record_set_type
- ../slots/has_or_had_custodian_type
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ../slots/is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15)
- ./SpecificityAnnotation
- ./TemplateSpecificityScore # was: TemplateSpecificityScores - migrated per Rule 53 (2026-01-17)
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
- ./WikidataAlignment
- ./WikiDataEntry # for is_or_was_related_to range (2026-01-15)
- ./AdvertisingRadioArchiveRecordSetType
# wikidata_entity import REMOVED - inherits has_or_had_identifier from ArchiveOrganizationType (Rule 53, 2026-01-16)
classes:
AdvertisingRadioArchive:
is_a: ArchiveOrganizationType
@ -27,7 +30,7 @@ classes:
slots:
- hold_or_held_record_set_type
- specificity_annotation
- has_or_had_score
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
description: 'Sound archive specializing in advertising radio productions and commercials.
@ -57,8 +60,9 @@ classes:
'
slot_usage:
has_or_had_identifier:
has_or_had_identifier: # was: wikidata_entity - migrated per Rule 53 (2026-01-16)
pattern: ^Q[0-9]+$
# equals_string removed: Q60658673 (incompatible with uriorcurie range)
description: Wikidata identifier for Advertising Radio Archive concept
exact_mappings:
- skos:Concept
@ -73,8 +77,3 @@ classes:
- SoundArchive
- RadioArchive
- MediaArchive
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept

View file

@ -5,39 +5,35 @@ prefixes:
linkml: https://w3id.org/linkml/
wd: http://www.wikidata.org/entity/
imports:
- linkml:types
- ./CollectionType
- ../slots/has_or_had_type
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- ../slots/is_or_was_related_to
- ./WikidataAlignment
- ../slots/has_or_had_type
- ../slots/is_or_was_related_to
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- linkml:types
- ./CollectionType
- ../slots/has_or_had_custodian_type
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ../slots/is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15)
- ./WikidataAlignment # for WikidataAlignment range
- ../slots/has_or_had_custodian_type
- ../slots/is_or_was_related_to
- ../slots/specificity_annotation
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
classes:
AdvertisingRadioArchiveRecordSetType:
description: A rico:RecordSetType for classifying collections of advertising radio productions and commercials within heritage institutions.
description: A rico:RecordSetType for classifying collections of advertising radio productions and commercials within
heritage institutions.
is_a: CollectionType
class_uri: rico:RecordSetType
exact_mappings:
- wd:Q60658673
- wd:Q60658673 # Wikidata (was: slot_usage wikidata_equivalent - migrated per Rule 53, 2026-01-17)
slot_usage:
has_or_had_type:
has_or_had_custodian_type:
equals_expression: '["hc:ArchiveOrganizationType"]'
is_or_was_related_to:
is_or_was_related_to: # was: wikidata_alignment - migrated per Rule 53 (2026-01-15)
range: WikidataAlignment
inlined: true
see_also:
- AdvertisingRadioArchive
slots:
- has_or_had_type
- has_or_had_custodian_type
- specificity_annotation
- has_or_had_score
- is_or_was_related_to
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- is_or_was_related_to # was: wikidata_alignment - migrated per Rule 53 (2026-01-15)

View file

@ -14,39 +14,42 @@ imports:
- linkml:types
- ./AdvertisingRadioArchiveRecordSetType
- ./AdvertisingRadioArchive
- ../slots/has_or_had_type
- ../slots/has_or_had_custodian_type
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ./SpecificityAnnotation
- ./TemplateSpecificityScore
- ./TemplateSpecificityScore # was: TemplateSpecificityScores - migrated per Rule 53 (2026-01-17)
- ./TemplateSpecificityType
- ./TemplateSpecificityTypes
- ../slots/organizational_principle
- ../slots/organizational_principle_uri
- ../slots/record_holder
- ../slots/record_holder_note
- ../slots/record_set_type
- ../slots/has_or_had_type
- ../slots/has_or_had_custodian_type
- ../slots/organizational_principle
- ../slots/organizational_principle_uri
- ../slots/record_holder
- ../slots/record_holder_note
- ../slots/record_set_type
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- ../slots/has_or_had_type
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- ../slots/has_or_had_custodian_type
- ../slots/organizational_principle
- ../slots/organizational_principle_uri
- ../slots/record_holder
- ../slots/record_holder_note
- ../slots/record_set_type
- ../slots/specificity_annotation
- ../slots/has_or_had_score
- ../slots/has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
classes:
RadioAdvertisementCollection:
is_a: AdvertisingRadioArchiveRecordSetType
class_uri: rico:RecordSetType
description: "A rico:RecordSetType for Radio commercial recordings.\n\n**RiC-O Alignment**:\nThis class is a specialized rico:RecordSetType following the collection \norganizational principle as defined by rico-rst:Collection.\n"
description: "A rico:RecordSetType for Radio commercial recordings.\n\n**RiC-O Alignment**:\nThis class is a specialized\
\ rico:RecordSetType following the collection \norganizational principle as defined by rico-rst:Collection.\n"
exact_mappings:
- rico:RecordSetType
related_mappings:
@ -57,16 +60,16 @@ classes:
- AdvertisingRadioArchiveRecordSetType
- rico:RecordSetType
slots:
- has_or_had_type
- has_or_had_custodian_type
- specificity_annotation
- has_or_had_score
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- organizational_principle
- organizational_principle_uri
- record_holder
- record_holder_note
- record_set_type
slot_usage:
has_or_had_type:
has_or_had_custodian_type:
equals_expression: '["hc:ArchiveOrganizationType"]'
record_set_type:
equals_string: RadioAdvertisementCollection
@ -78,15 +81,11 @@ classes:
equals_string: AdvertisingRadioArchive
record_holder_note:
equals_string: This RecordSetType is typically held by AdvertisingRadioArchive custodians. Inverse of rico:isOrWasHolderOf.
annotations:
specificity_score: 0.1
specificity_rationale: Generic utility class/slot created during migration
custodian_types: "['*']"
custodian_types_rationale: Universal utility concept
CampaignDocumentationSeries:
is_a: AdvertisingRadioArchiveRecordSetType
class_uri: rico:RecordSetType
description: "A rico:RecordSetType for Advertising campaign records.\n\n**RiC-O Alignment**:\nThis class is a specialized rico:RecordSetType following the series \norganizational principle as defined by rico-rst:Series.\n"
description: "A rico:RecordSetType for Advertising campaign records.\n\n**RiC-O Alignment**:\nThis class is a specialized\
\ rico:RecordSetType following the series \norganizational principle as defined by rico-rst:Series.\n"
exact_mappings:
- rico:RecordSetType
related_mappings:
@ -97,16 +96,16 @@ classes:
- AdvertisingRadioArchiveRecordSetType
- rico:RecordSetType
slots:
- has_or_had_type
- has_or_had_custodian_type
- specificity_annotation
- has_or_had_score
- has_or_had_score # was: template_specificity - migrated per Rule 53 (2026-01-17)
- organizational_principle
- organizational_principle_uri
- record_holder
- record_holder_note
- record_set_type
slot_usage:
has_or_had_type:
has_or_had_custodian_type:
equals_expression: '["hc:ArchiveOrganizationType"]'
record_set_type:
equals_string: CampaignDocumentationSeries

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