Add parsimonious LinkML package and metadata
- Created manifest.json for the parsimonious LinkML package. - Added metadata.yaml with detailed information about the Heritage Custodian Parsimony Ontology. - Established directory structure for classes, enums, mappings, and slots with corresponding README files. - Each module directory includes a brief description of its purpose and planned scale.
This commit is contained in:
parent
b99eeb8e54
commit
ab5ad23699
108 changed files with 3176 additions and 41 deletions
|
|
@ -2,8 +2,16 @@
|
|||
|
||||
## Critical Convention
|
||||
|
||||
Our ontology follows an engineering-oriented approach: practical domain utility and
|
||||
stable interoperability take priority over minimal, tool-specific class catalogs.
|
||||
This project now has two legitimate ontology layers:
|
||||
|
||||
1. An **engineering ontology** in `schemas/20251121/linkml/modules/` optimized for
|
||||
operational richness, data pipelines, and implementation-ready distinctions.
|
||||
2. A **parsimonious ontology** in `schemas/20251121/linkml/parsimony/` optimized for
|
||||
conceptual clarity, semantic hypernyms, and dashboard-friendly overview.
|
||||
|
||||
The engineering layer remains the authoritative implementation layer, but the
|
||||
parsimonious layer is allowed to collapse multiple engineering classes into a
|
||||
smaller conceptual facade when the downward mapping is made explicit.
|
||||
|
||||
## Rule
|
||||
|
||||
|
|
@ -23,6 +31,22 @@ stable interoperability take priority over minimal, tool-specific class catalogs
|
|||
5. Avoid ontology growth driven by transient engineering stack choices.
|
||||
- New class proposals must be justified by cross-tool, domain-stable semantics.
|
||||
|
||||
6. Permit a parsimonious hypernym layer when it is explicitly bridged to the engineering layer.
|
||||
- A parsimonious class may stand above multiple engineering classes.
|
||||
- This semantic collapse is allowed only if the mapping to engineering classes,
|
||||
slots, and enums is documented.
|
||||
|
||||
7. Do not force engineering-level granularity into the parsimonious package.
|
||||
- If the engineering ontology distinguishes `Custodian`, `CustodianPlace`,
|
||||
`CustodianLegalStatus`, and many institutional subtypes, the parsimonious
|
||||
layer may use a smaller set such as `CustodialEntity`, `PlaceContext`, and
|
||||
`Reconstruction`.
|
||||
|
||||
8. Treat the parsimonious layer as a semantic facade, not a replacement.
|
||||
- The engineering ontology still carries implementation detail.
|
||||
- The parsimonious ontology must explain that detail through mappings rather
|
||||
than re-encoding the full engineering taxonomy.
|
||||
|
||||
## Rationale
|
||||
|
||||
- Tool names are volatile implementation details and age quickly.
|
||||
|
|
@ -30,6 +54,9 @@ stable interoperability take priority over minimal, tool-specific class catalogs
|
|||
- This aligns with an engineering ontology practice where strict theoretical
|
||||
parsimony in candidate theories is not the only optimization criterion; practical
|
||||
semantic interoperability and maintainability are primary.
|
||||
- A separate parsimonious layer improves conceptual navigation and UML readability
|
||||
without sacrificing engineering precision, provided that cross-layer mappings are
|
||||
explicit and verified.
|
||||
|
||||
## Examples
|
||||
|
||||
|
|
@ -53,6 +80,19 @@ classes:
|
|||
- has_agent
|
||||
```
|
||||
|
||||
### Also Correct in the Parsimonious Layer
|
||||
|
||||
```yaml
|
||||
classes:
|
||||
CustodialEntity:
|
||||
class_uri: schema:Organization
|
||||
narrow_mappings:
|
||||
- hc:Custodian
|
||||
```
|
||||
|
||||
This is acceptable because `CustodialEntity` is intentionally broader than the
|
||||
engineering `Custodian` class and serves as a semantic facade.
|
||||
|
||||
## References
|
||||
|
||||
1. Liefke, K. (2024). *Natural Language Ontology and Semantic Theory*.
|
||||
|
|
@ -62,4 +102,3 @@ classes:
|
|||
2. Liefke, K. (2025). *Reduction and Unification in Natural Language Ontology*.
|
||||
Cambridge Elements in Semantics. DOI: `10.1017/9781009559683`.
|
||||
URL: https://www.cambridge.org/core/elements/abs/reduction-and-unification-in-natural-language-ontology/40F58ABA0D9C08958B5926F0CBDAD3CA
|
||||
|
||||
|
|
|
|||
|
|
@ -271,6 +271,49 @@ Before committing ontology mappings:
|
|||
|
||||
---
|
||||
|
||||
## 6b. Parsimonious-to-Engineering Internal Mapping
|
||||
|
||||
When working in `schemas/20251121/linkml/parsimony/`, you MUST distinguish two
|
||||
different mapping tasks:
|
||||
|
||||
1. **External ontology mapping**
|
||||
- Use `class_uri`, `slot_uri`, and `*_mappings` against external ontologies.
|
||||
2. **Internal cross-layer mapping**
|
||||
- Document how the parsimonious hypernym is realized by engineering classes,
|
||||
slots, and enums in `schemas/20251121/linkml/modules/`.
|
||||
|
||||
### Rules for internal cross-layer mapping
|
||||
|
||||
- The parsimonious class may be broader than multiple engineering classes.
|
||||
- Do not pretend internal cross-layer mappings are exact if they are really
|
||||
hypernym-to-hyponym relations.
|
||||
- Use relative imports back to the engineering package so the bridge is visible
|
||||
in LinkML source form.
|
||||
- Treat the bridge as part of the ontology deliverable, not as separate prose.
|
||||
|
||||
### Example
|
||||
|
||||
```yaml
|
||||
imports:
|
||||
- ../classes/CustodialEntity
|
||||
- ../../../modules/classes/Custodian
|
||||
- ../../../modules/classes/CustodianObservation
|
||||
|
||||
comments:
|
||||
- >-
|
||||
CustodialEntity is broader than the engineering Custodian class and must be
|
||||
read together with narrower engineering reconstruction and observation classes.
|
||||
```
|
||||
|
||||
### Internal mapping checklist
|
||||
|
||||
- [ ] Did you state whether the parsimonious term is broader, narrower, close, or related to the engineering term?
|
||||
- [ ] Did you avoid treating engineering-specific data objects as exact matches for broader conceptual nodes?
|
||||
- [ ] Did you use relative imports from `schemas/20251121/linkml/parsimony/modules/` back to `schemas/20251121/linkml/modules/`?
|
||||
- [ ] Did you explain how the parsimonious node becomes classes, enums, or slots in the engineering model?
|
||||
|
||||
---
|
||||
|
||||
## 7. Common Ontology Prefixes for Mappings
|
||||
|
||||
| Prefix | Namespace | Ontology | Use For |
|
||||
|
|
|
|||
67
.opencode/rules/linkml/parsimony/class-naming-convention.md
Normal file
67
.opencode/rules/linkml/parsimony/class-naming-convention.md
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
# Rule: Parsimonious Class Naming Convention
|
||||
|
||||
## Critical Convention
|
||||
|
||||
Classes in `schemas/20251121/linkml/parsimony/` are conceptual by default.
|
||||
|
||||
Do not append `Concept` to every class name unless the suffix expresses a real
|
||||
semantic distinction that is necessary for understanding the model.
|
||||
|
||||
## Rule
|
||||
|
||||
1. Assume parsimonious classes are already hypernyms.
|
||||
- Their conceptual status is given by the layer, not by the suffix.
|
||||
|
||||
2. Prefer semantically informative names over meta-labels.
|
||||
- Good: `Classification`, `Designation`, `PlaceContext`, `SourceResource`
|
||||
- Weak: `TypeConcept`, `IdentifierConcept`, `PlaceConcept`, `SourceConcept`
|
||||
|
||||
3. Avoid unnecessary collisions with engineering class names.
|
||||
- If a broad parsimonious class would collide with an engineering class of a
|
||||
narrower meaning, choose a distinct but still natural hypernym label.
|
||||
- Example: prefer `CustodialEntity` over parsimonious `Custodian` when the
|
||||
engineering ontology already uses `Custodian` for a narrower hub class.
|
||||
|
||||
4. Keep names compact and readable in UML views.
|
||||
- Parsimonious class names should help the dashboard communicate the semantic
|
||||
backbone quickly.
|
||||
|
||||
## Rationale
|
||||
|
||||
- The parsimonious layer should look like a coherent conceptual ontology, not a
|
||||
catalog of meta-marked placeholders.
|
||||
- Removing repetitive `Concept` suffixes improves readability without losing
|
||||
semantic clarity.
|
||||
- Distinct natural labels reduce confusion when the parsimonious and engineering
|
||||
layers are read side by side.
|
||||
|
||||
## Examples
|
||||
|
||||
### Better
|
||||
|
||||
```yaml
|
||||
classes:
|
||||
Classification:
|
||||
class_uri: skos:Concept
|
||||
|
||||
Designation:
|
||||
class_uri: crm:E41_Appellation
|
||||
```
|
||||
|
||||
### Avoid
|
||||
|
||||
```yaml
|
||||
classes:
|
||||
TypeConcept:
|
||||
class_uri: skos:Concept
|
||||
|
||||
IdentifierConcept:
|
||||
class_uri: crm:E41_Appellation
|
||||
```
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] Does the class name avoid redundant `Concept` suffixing?
|
||||
- [ ] Is the class name semantically informative on its own?
|
||||
- [ ] If the name differs from the engineering class, does it do so for a clear semantic reason?
|
||||
- [ ] Will the name read well in UML and documentation?
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
# Rule: Semantic Entity Terminology
|
||||
|
||||
## Critical Convention
|
||||
|
||||
In `schemas/20251121/linkml/parsimony/`, the ontology is produced through a
|
||||
parsimony methodology, but the modeled entities are not themselves to be called
|
||||
"parsimonious entities".
|
||||
|
||||
Use `semantic entity`, `semantic relation`, `semantic class`, or other
|
||||
domain-appropriate wording when describing ontology elements.
|
||||
|
||||
## Rule
|
||||
|
||||
1. Reserve `parsimony` and `parsimonious` for the ontology layer, package, or
|
||||
modeling methodology.
|
||||
- Good: `parsimonious ontology`, `parsimony package`, `parsimony methodology`
|
||||
|
||||
2. Do not describe modeled entities as `parsimonious entities`.
|
||||
- Prefer `semantic entity`, `conceptual entity`, or a more specific term.
|
||||
|
||||
3. In slot and class descriptions, prefer domain meaning over methodology labels.
|
||||
- Good: `Connects a semantic entity to the source...`
|
||||
- Bad: `Connects a parsimonious entity to the source...`
|
||||
|
||||
## Rationale
|
||||
|
||||
- Parsimony describes how the ontology is designed, not what kind of things its
|
||||
entities are.
|
||||
- The modeled nodes remain semantic/conceptual entities even when the ontology is
|
||||
intentionally reduced.
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] Is `parsimonious` used only for the layer, package, or method?
|
||||
- [ ] Are modeled nodes described as semantic or conceptual entities instead?
|
||||
- [ ] Do descriptions avoid conflating methodology with ontology semantics?
|
||||
84
.opencode/rules/linkml/parsimony/slot-hypernym-convention.md
Normal file
84
.opencode/rules/linkml/parsimony/slot-hypernym-convention.md
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
# Rule: Parsimonious Slot Hypernym Convention
|
||||
|
||||
## Critical Convention
|
||||
|
||||
Slots in `schemas/20251121/linkml/parsimony/` MUST be modeled as conceptual
|
||||
hypernyms over engineering predicates in `schemas/20251121/linkml/modules/`.
|
||||
|
||||
Do not copy an engineering slot name into the parsimonious layer and merely add
|
||||
an implementation suffix such as `_literal`, `_concept`, or `_value` when the
|
||||
real intent is a broader semantic predicate.
|
||||
|
||||
## Rule
|
||||
|
||||
1. Start from the conceptual relation, not the engineering storage pattern.
|
||||
- Ask which broader relation unifies the narrower engineering slots.
|
||||
|
||||
2. Prefer parsimonious hypernyms over copied engineering names.
|
||||
- Good: `accessed_under`
|
||||
- Bad: `has_access_policy_literal`
|
||||
|
||||
3. Use engineering slots as `narrow_mappings` when they are implementation-ready
|
||||
refinements of the broader parsimonious predicate.
|
||||
- Example: `accessed_under` -> `hc:has_access_policy`
|
||||
|
||||
4. Avoid datatype-implementation suffixes in parsimonious slot names.
|
||||
- Avoid `_literal`, `_string`, `_value`, `_concept` unless the distinction is
|
||||
itself semantically necessary.
|
||||
|
||||
5. Keep slot names in current verb-first style where possible.
|
||||
- Examples: `designated_by`, `included_in`, `marked_as`, `situated_in_time`
|
||||
|
||||
6. Avoid over-binding a slot name to one evidential source or implementation mechanism
|
||||
when the parsimonious intent is broader.
|
||||
- Prefer `grounded_in` over `derived_from_observation`
|
||||
- Prefer `realized_through` over `generated_by_activity`
|
||||
- Prefer `attested_in` over `documented_in` when the source relation is evidential
|
||||
- Prefer `available_via` over `accessed_through` when the slot means channel of availability
|
||||
|
||||
## Rationale
|
||||
|
||||
- The parsimonious layer should expose semantic hubs, not mirror the engineering
|
||||
schema file structure.
|
||||
- Hypernym predicates make the bridge to multiple engineering hyponyms explicit.
|
||||
- This keeps the parsimonious ontology stable even when engineering slots split,
|
||||
merge, or change operational detail.
|
||||
|
||||
## Examples
|
||||
|
||||
### Wrong
|
||||
|
||||
```yaml
|
||||
slots:
|
||||
has_access_policy_literal:
|
||||
slot_uri: dcterms:accessRights
|
||||
close_mappings:
|
||||
- hc:has_access_policy
|
||||
```
|
||||
|
||||
### Correct
|
||||
|
||||
```yaml
|
||||
slots:
|
||||
accessed_under:
|
||||
slot_uri: dcterms:accessRights
|
||||
narrow_mappings:
|
||||
- hc:has_access_policy
|
||||
```
|
||||
|
||||
### Another Good Pattern
|
||||
|
||||
```yaml
|
||||
slots:
|
||||
designated_by:
|
||||
slot_uri: crm:P1_is_identified_by
|
||||
narrow_mappings:
|
||||
- hc:identified_by
|
||||
```
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] Is the parsimonious slot broader than the engineering slot(s) it bridges?
|
||||
- [ ] Does the name avoid implementation suffixes?
|
||||
- [ ] Are engineering refinements expressed as `narrow_mappings` where appropriate?
|
||||
- [ ] Does the slot name follow current verb-first naming style?
|
||||
|
|
@ -89,6 +89,21 @@ A `slot_usage` entry MUST be kept if it provides ANY of the following:
|
|||
| **Inlined change** | `inlined: true` when generic is `false` |
|
||||
| **Identifier designation** | `identifier: true` for primary key |
|
||||
|
||||
### Parsimonious Layer Clarification
|
||||
|
||||
In `schemas/20251121/linkml/parsimony/`, sparse `slot_usage` is allowed when it
|
||||
documents a genuine conceptual narrowing from a generic parsimonious predicate to
|
||||
one class-specific use.
|
||||
|
||||
Examples of acceptable parsimonious `slot_usage`:
|
||||
|
||||
- narrowing a generic `typed_as` predicate to a specific type concept
|
||||
- making a generic identifier slot required for one conceptual hub
|
||||
- clarifying that a broad conceptual slot is only used for evidential links in one class
|
||||
|
||||
This does NOT relax the core rule: if the `slot_usage` simply repeats the generic
|
||||
slot definition, it is still redundant and must be removed.
|
||||
|
||||
## Decision Matrix
|
||||
|
||||
| Scenario | Action |
|
||||
|
|
|
|||
60
docs/plan/semantic_ontology/00-master-checklist.md
Normal file
60
docs/plan/semantic_ontology/00-master-checklist.md
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
# Semantic Parsimony Ontology - Master Checklist
|
||||
|
||||
Status: planning
|
||||
|
||||
## Phase 0 - Research and framing
|
||||
|
||||
- [ ] Confirm the parsimonious ontology scope against PiCo, RiC-O, PROV-O, Schema.org, and selected ODP literature.
|
||||
- [ ] Inventory the most important engineering modules, classes, and slots in `schemas/20251121/linkml/modules/`.
|
||||
- [ ] Identify the 8-12 semantic hubs that cover most engineering concepts without collapsing important distinctions.
|
||||
- [ ] Define inclusion criteria for parsimonious classes and slots.
|
||||
- [ ] Define exclusion criteria for engineering-only details.
|
||||
|
||||
## Phase 1 - Parsimonious conceptual design
|
||||
|
||||
- [ ] Fix the class budget at roughly 10 classes.
|
||||
- [ ] Fix the datatype slot budget at roughly 30 slots.
|
||||
- [ ] Fix the object slot budget at roughly 50 slots.
|
||||
- [ ] Decide which PiCo-style distinctions become explicit classes: observation, reconstruction, source, activity, agent, type, relation, identifier, name, place, time.
|
||||
- [ ] Decide which distinctions remain engineering-only refinements.
|
||||
|
||||
## Phase 2 - LinkML package structure
|
||||
|
||||
- [x] Create `schemas/20251121/linkml/parsimony/` as a separate LinkML package.
|
||||
- [x] Create `modules/classes/`, `modules/slots/`, `modules/enums/`, and `modules/mappings/` under the parsimony package.
|
||||
- [x] Add a parsimonious root schema that imports the small module set.
|
||||
- [x] Keep slots centralized; do not define inline slots in class files.
|
||||
- [x] Keep imports relative to the engineering `modules/` directory where cross-package mappings are needed.
|
||||
|
||||
## Phase 3 - Mapping to the engineering ontology
|
||||
|
||||
- [x] Create dedicated mapping files under `schemas/20251121/linkml/parsimony/modules/mappings/`.
|
||||
- [ ] For each parsimonious class, identify the engineering classes, enums, and slots it subsumes.
|
||||
- [ ] For each mapping, document whether the engineering term is exact, broader, narrower, close, or related.
|
||||
- [ ] Use verified ontology references from `data/ontology/` where external mappings are asserted.
|
||||
- [ ] Document how hypernym concepts become database-like engineering structures.
|
||||
- [x] Use relative imports from parsimonious modules to engineering modules via `../../../modules/...`.
|
||||
|
||||
## Phase 4 - Rules and governance
|
||||
|
||||
- [ ] Review `.opencode/rules/linkml/` for assumptions that are engineering-only.
|
||||
- [ ] Propose amendments for parsimonious modeling where current rules are too narrow.
|
||||
- [ ] Preserve core rules: verified mappings, class/property distinction, centralized slots, no inline slots, generic slots over bespoke predicates.
|
||||
- [ ] Add or update rule text for cross-layer mapping between parsimonious hypernyms and engineering refinements.
|
||||
- [ ] Add governance notes for when semantic simplicity is preferred over engineering completeness.
|
||||
|
||||
## Phase 5 - Dashboard and UX
|
||||
|
||||
- [x] Add `bronhouder.nl/parsimony` route.
|
||||
- [x] Reuse the LinkML viewer page, layout, and UML viewer behavior.
|
||||
- [x] Point the route at `/schemas/20251121/linkml/parsimony`.
|
||||
- [x] Generate a separate manifest for the parsimonious schema package.
|
||||
- [ ] Verify that the dashboard behaves correctly even while the package is still sparsely populated.
|
||||
|
||||
## Phase 6 - Validation and delivery
|
||||
|
||||
- [ ] Validate parsimonious YAML structure.
|
||||
- [ ] Validate manifests and frontend loading.
|
||||
- [ ] Validate mapping paths and import paths.
|
||||
- [ ] Review the plan against the LinkML rules and document planned rule edits.
|
||||
- [ ] Convert the plan into implementation tickets.
|
||||
41
docs/plan/semantic_ontology/01-reference-model-review.md
Normal file
41
docs/plan/semantic_ontology/01-reference-model-review.md
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
# Reference Model Review
|
||||
|
||||
## What PiCo contributes
|
||||
|
||||
PiCo is the most relevant reference because it stays small while still handling provenance, source anchoring, and interpretation.
|
||||
|
||||
Useful PiCo lessons:
|
||||
|
||||
- Reuse external ontologies aggressively instead of inventing bespoke top-level classes.
|
||||
- Keep the conceptual centers explicit: `PersonObservation`, `PersonReconstruction`, and `Source`.
|
||||
- Treat provenance as structural, not optional decoration.
|
||||
- Allow the engineering/data layer to be richer than the conceptual layer.
|
||||
- Use documentation, diagrams, and examples as part of the ontology product.
|
||||
|
||||
## What to copy from PiCo
|
||||
|
||||
- A small number of stable conceptual hubs.
|
||||
- A strong observation/reconstruction pattern where evidence and interpretation are separated.
|
||||
- Use of existing vocabularies such as Schema.org, PROV-O, and domain-specific vocabularies.
|
||||
- Human-readable documentation that explains modeling intent rather than only listing terms.
|
||||
|
||||
## What not to copy blindly
|
||||
|
||||
- PiCo is person/history centered; the GLAM custodian domain is institution, holdings, access, provenance, and record-oriented.
|
||||
- PiCo's class list should inspire modeling discipline, not determine class names.
|
||||
- The parsimonious GLAM ontology must preserve room for archives, museums, libraries, and hybrid custodians.
|
||||
|
||||
## Additional parsimonious ontology principles
|
||||
|
||||
- Prefer semantic hubs over large taxonomies.
|
||||
- Push local specialization into mappings and engineering refinements.
|
||||
- Use object properties for real semantic relations; use datatype properties for compact descriptive facts.
|
||||
- Prefer a few reusable generic predicates over many narrow bespoke predicates.
|
||||
|
||||
## Consequence for this project
|
||||
|
||||
The parsimonious ontology should function like a conceptual facade over the engineering ontology:
|
||||
|
||||
- small enough for comprehension and UML browsing
|
||||
- rich enough to express custodians, collections/record sets, provenance, access, identifiers, place, time, and classification
|
||||
- explicit enough to explain how conceptual hypernyms are realized in the engineering model
|
||||
81
docs/plan/semantic_ontology/02-target-parsimonious-model.md
Normal file
81
docs/plan/semantic_ontology/02-target-parsimonious-model.md
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
# Target Parsimonious Model
|
||||
|
||||
## Modeling target
|
||||
|
||||
Target size:
|
||||
|
||||
- about 10 classes
|
||||
- about 30 datatype slots
|
||||
- about 50 object slots
|
||||
|
||||
This is a budget, not a hard law, but the plan should resist drift beyond it.
|
||||
|
||||
## Candidate class set
|
||||
|
||||
Proposed conceptual hubs:
|
||||
|
||||
1. `CustodialEntity`
|
||||
2. `Holding`
|
||||
3. `SourceResource`
|
||||
4. `Observation`
|
||||
5. `Reconstruction`
|
||||
6. `Agent`
|
||||
7. `Activity`
|
||||
8. `PlaceContext`
|
||||
9. `Designation`
|
||||
10. `Classification`
|
||||
|
||||
Possible merges to keep the budget tight:
|
||||
|
||||
- merge `Holding` with `RecordSetOrCollection` if holdings can be modeled relationally
|
||||
- merge `Name` and `Identifier` under one contextual class when needed
|
||||
- keep time as datatypes/structured slots instead of a standalone class unless evidence shows otherwise
|
||||
|
||||
Naming convention:
|
||||
|
||||
- avoid the suffix `Concept` unless needed to disambiguate a real modeling distinction
|
||||
- assume parsimonious classes are conceptual/hypernymic by default
|
||||
- prefer semantically informative names such as `Classification` or `Designation` over meta-labels such as `TypeConcept`
|
||||
|
||||
## Candidate datatype slot groups
|
||||
|
||||
- labels and literals
|
||||
- identifiers and codes
|
||||
- dates and temporal literals
|
||||
- URLs and references
|
||||
- free-text notes and scope notes
|
||||
- counts and scalar values
|
||||
- language/status/access literals
|
||||
|
||||
## Candidate object slot groups
|
||||
|
||||
- type/classification
|
||||
- part-whole
|
||||
- custody/holding
|
||||
- provenance and derivation
|
||||
- source/evidence links
|
||||
- access/publication links
|
||||
- location links
|
||||
- organizational relations
|
||||
- mapping to engineering classes and slots
|
||||
|
||||
Current scaffold now covers early examples of:
|
||||
|
||||
- part-whole
|
||||
- custody/holding
|
||||
- provenance and derivation
|
||||
- source/evidence links
|
||||
- access/publication links
|
||||
- location links
|
||||
- organizational relations
|
||||
|
||||
## Design rule for admission
|
||||
|
||||
A parsimonious class or slot should exist only if at least one of these is true:
|
||||
|
||||
- it is a recurring semantic hub across many engineering modules
|
||||
- it is required to explain provenance/evidence correctly
|
||||
- it substantially improves UML readability and conceptual documentation
|
||||
- it is needed as the source node for many engineering mappings
|
||||
|
||||
Otherwise, the concept remains engineering-only.
|
||||
45
docs/plan/semantic_ontology/03-linkml-module-layout.md
Normal file
45
docs/plan/semantic_ontology/03-linkml-module-layout.md
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
# LinkML Module Layout
|
||||
|
||||
## Package structure
|
||||
|
||||
Planned package:
|
||||
|
||||
```text
|
||||
schemas/20251121/linkml/parsimony/
|
||||
metadata.yaml
|
||||
modules/
|
||||
classes/
|
||||
slots/
|
||||
enums/
|
||||
mappings/
|
||||
```
|
||||
|
||||
## Layout principles
|
||||
|
||||
- Keep the parsimonious package separate from the engineering package.
|
||||
- Reuse the same LinkML authoring conventions as the engineering ontology.
|
||||
- Keep slot definitions centralized under `modules/slots/`.
|
||||
- Keep class files small and import the slots they use.
|
||||
- Use a minimal number of files; avoid unnecessary fragmentation.
|
||||
|
||||
## Cross-package references
|
||||
|
||||
When the parsimonious package references engineering files, the relative path should be computed from the parsimonious module location back to `schemas/20251121/linkml/modules/`.
|
||||
|
||||
Examples from `schemas/20251121/linkml/parsimony/modules/classes/`:
|
||||
|
||||
- engineering class import: `../../../modules/classes/Archive.yaml`
|
||||
- engineering slot import: `../../../modules/slots/hold.yaml`
|
||||
- engineering mapping support file: `../../../modules/mappings/...`
|
||||
|
||||
Examples from `schemas/20251121/linkml/parsimony/modules/mappings/`:
|
||||
|
||||
- engineering class import: `../../../modules/classes/...`
|
||||
- engineering slot import: `../../../modules/slots/...`
|
||||
|
||||
## File design guidance
|
||||
|
||||
- Use a root `metadata.yaml` for prefixes and package-level metadata.
|
||||
- Keep a small root schema once implementation starts.
|
||||
- Reserve `modules/mappings/` for explicit parsimonious-to-engineering alignment artifacts.
|
||||
- Treat mapping files as part of the ontology, not auxiliary notes.
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
# Engineering Mapping Strategy
|
||||
|
||||
## Core requirement
|
||||
|
||||
The mapping between the parsimonious ontology and the engineering ontology is a core deliverable because it explains how broad semantic concepts become concrete operational data structures.
|
||||
|
||||
## Mapping pattern
|
||||
|
||||
For every parsimonious concept, document:
|
||||
|
||||
- the semantic intent of the parsimonious class/slot
|
||||
- the engineering classes it covers
|
||||
- the engineering slots it covers
|
||||
- the engineering enums or type classes it depends on
|
||||
- whether each relation is exact, broad, narrow, close, or related
|
||||
|
||||
## Expected asymmetry
|
||||
|
||||
The mapping is intentionally asymmetric:
|
||||
|
||||
- parsimonious classes are often hypernyms
|
||||
- engineering classes are often narrower data-ready realizations
|
||||
- many engineering structures may map upward into one parsimonious node
|
||||
|
||||
Example pattern:
|
||||
|
||||
```text
|
||||
Parsimonious class: Custodian
|
||||
-> broad semantic parent of AcademicArchive, Museum, Library, PlatformCustodian, ParishArchive, etc.
|
||||
|
||||
Parsimonious slot: holds
|
||||
-> realized by engineering slots such as hold, hold_record_set, has_custodian, has_member, is_or_was_holder_of, depending on context
|
||||
```
|
||||
|
||||
## Mapping rules that must remain active
|
||||
|
||||
- exact vs broad vs narrow mappings must be explicit
|
||||
- class-to-class and slot-to-property distinctions must be preserved
|
||||
- external ontology mappings must be verified against `data/ontology/`
|
||||
- generic predicate discipline must be preserved even in the parsimonious layer
|
||||
|
||||
## New mapping deliverables
|
||||
|
||||
Planned outputs under `schemas/20251121/linkml/parsimony/modules/mappings/`:
|
||||
|
||||
- class alignment matrix
|
||||
- slot alignment matrix
|
||||
- type-system bridge across classes, enums, and typing predicates
|
||||
- hypernym-to-engineering realization notes
|
||||
- UML-friendly conceptual-to-engineering bridge views
|
||||
|
||||
Verified external ontology anchors should be added directly to parsimonious
|
||||
classes and slots using LinkML mapping fields such as `broad_mappings`,
|
||||
`narrow_mappings`, `close_mappings`, and `related_mappings`.
|
||||
|
||||
Current anchor examples include:
|
||||
|
||||
- `schema:Organization`, `schema:CreativeWork`, `schema:Place`, `schema:url`, `schema:startDate`
|
||||
- `dcterms:source`, `dcterms:accessRights`
|
||||
- `prov:Entity`, `prov:Activity`, `prov:Agent`, `prov:wasDerivedFrom`, `prov:wasGeneratedBy`, `prov:generated`, `prov:used`
|
||||
- `crm:E39_Actor`, `crm:E41_Appellation`, `crm:E53_Place`, `crm:E55_Type`, `crm:E78_Curated_Holding`, `crm:P1_is_identified_by`, `crm:P4_has_time-span`
|
||||
- `rico:Agent`, `rico:RecordSet`, `rico:Identifier`, `rico:isOrWasHolderOf`, `rico:hasOrHadIdentifier`
|
||||
- `skos:Concept`, `skos:prefLabel`, `skos:note`
|
||||
- `pico:PersonObservation`, `pico:PersonReconstruction`
|
||||
|
||||
## Why this matters
|
||||
|
||||
Without this bridge, the parsimonious layer risks becoming only a simplified diagram. With the bridge, it becomes an explanatory semantic interface for databases, extraction pipelines, and engineering-level knowledge graph modeling.
|
||||
65
docs/plan/semantic_ontology/05-rule-updates.md
Normal file
65
docs/plan/semantic_ontology/05-rule-updates.md
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
# Rule Updates for Parsimony
|
||||
|
||||
## Why rule work is required
|
||||
|
||||
The current `.opencode/rules/linkml/` set is optimized for the engineering ontology. Much of it remains correct for the parsimonious package, but several rules need extension so the parsimonious layer is not forced into engineering-scale detail.
|
||||
|
||||
## Rules to keep as-is
|
||||
|
||||
- verified ontology mappings
|
||||
- ontology detection from actual ontology files
|
||||
- mapping specificity: exact vs broad vs narrow
|
||||
- centralized slots
|
||||
- no inline class-file slots
|
||||
- generic slots over bespoke predicates
|
||||
- LinkML YAML hygiene and import discipline
|
||||
|
||||
## Rules that need extension or clarification
|
||||
|
||||
### 1. Engineering parsimony vs semantic parsimony
|
||||
|
||||
Current rule: `engineering-parsimony-and-domain-modeling-rule.md`
|
||||
|
||||
Needed extension:
|
||||
|
||||
- distinguish the engineering ontology from a semantic facade ontology
|
||||
- allow a parsimonious package to intentionally collapse multiple engineering classes into one conceptual hypernym
|
||||
- clarify that this is not a violation of semantic consistency when the downward mapping is explicit
|
||||
|
||||
### 2. Semantic consistency over simplicity
|
||||
|
||||
Current rule emphasis is strongly pro-structure for engineering migrations.
|
||||
|
||||
Needed extension:
|
||||
|
||||
- clarify that semantic consistency across layers can sometimes justify fewer classes in the parsimonious package
|
||||
- state that engineering richness is preserved in mappings rather than duplicated in the parsimonious layer
|
||||
|
||||
### 3. Slot usage minimization
|
||||
|
||||
Needed extension:
|
||||
|
||||
- permit sparse, meaningful `slot_usage` in the parsimonious layer when it serves conceptual narrowing or bridge documentation
|
||||
- keep redundant overrides prohibited
|
||||
|
||||
### 4. Ontology-to-LinkML mapping convention
|
||||
|
||||
Needed extension:
|
||||
|
||||
- add a dedicated section for parsimonious-to-engineering internal mappings
|
||||
- distinguish external ontology alignment from internal cross-layer alignment
|
||||
|
||||
## Proposed new rule themes
|
||||
|
||||
- parsimonious layer as hypernym layer
|
||||
- mandatory concept-to-engineering realization mapping
|
||||
- no silent semantic collapse: every collapsed concept must list covered engineering refinements
|
||||
- dashboard-first documentation for parsimonious schemas
|
||||
- parsimonious slots must prefer hypernym predicates over copied engineering slot names with implementation suffixes
|
||||
- parsimonious classes should avoid redundant `Concept` suffixes and use semantically informative names
|
||||
- parsimonious slot names should avoid over-binding to one source type or one implementation mechanism when a broader evidential or process relation is intended
|
||||
- every external class/property mapping in the parsimonious package must be verifiable in `data/ontology/` with zero tolerance for unverified references
|
||||
|
||||
## Delivery implication
|
||||
|
||||
Rule editing should be treated as part of ontology implementation, not post hoc cleanup.
|
||||
33
docs/plan/semantic_ontology/06-dashboard-and-uml-viewer.md
Normal file
33
docs/plan/semantic_ontology/06-dashboard-and-uml-viewer.md
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# Dashboard and UML Viewer
|
||||
|
||||
## Goal
|
||||
|
||||
Expose the parsimonious ontology at `bronhouder.nl/parsimony` using the same LinkML viewer page, layout, and UML interaction pattern as `bronhouder.nl/linkml`.
|
||||
|
||||
## UI approach
|
||||
|
||||
- reuse the existing `LinkMLViewerPage`
|
||||
- switch only the schema root and page labels
|
||||
- load schemas from `/schemas/20251121/linkml/parsimony`
|
||||
- generate a separate manifest for that schema root
|
||||
|
||||
## Requirements
|
||||
|
||||
- no new viewer implementation
|
||||
- same sidebar, schema detail rendering, mapping badges, and UML widgets
|
||||
- same public route behavior
|
||||
- graceful empty-state handling while the parsimonious package is still under construction
|
||||
|
||||
## Technical plan
|
||||
|
||||
- parameterize the viewer by schema base path
|
||||
- add `/parsimony` as a public route
|
||||
- add a navigation item under the ontology menu
|
||||
- generate `frontend/public/schemas/20251121/linkml/parsimony/manifest.json`
|
||||
|
||||
## Validation
|
||||
|
||||
- route opens without authentication issues
|
||||
- manifest loads from the parsimonious schema root
|
||||
- selected schema loads correctly from the parsimonious package
|
||||
- switching between `/linkml` and `/parsimony` does not leak cached schemas across roots
|
||||
37
docs/plan/semantic_ontology/07-implementation-phases.md
Normal file
37
docs/plan/semantic_ontology/07-implementation-phases.md
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
# Implementation Phases
|
||||
|
||||
## Phase 1 - Research and reduction
|
||||
|
||||
- study PiCo documentation and article material
|
||||
- identify the smallest reusable semantic hubs for GLAM custodians
|
||||
- decide what stays conceptual and what remains engineering-only
|
||||
|
||||
## Phase 2 - Parsimonious LinkML scaffolding
|
||||
|
||||
- create the package structure
|
||||
- create package metadata and root schema
|
||||
- define the first small set of classes and slots
|
||||
|
||||
## Phase 3 - Bridge to engineering ontology
|
||||
|
||||
- create explicit mapping modules
|
||||
- document downward realization from hypernyms to engineering classes/slots/enums
|
||||
- verify external ontology mappings against `data/ontology/`
|
||||
|
||||
## Phase 4 - Rule revisions
|
||||
|
||||
- edit or extend the relevant LinkML rules
|
||||
- document which rules are shared across both ontology layers
|
||||
- document which rules are engineering-only and which become dual-layer
|
||||
|
||||
## Phase 5 - Dashboard rollout
|
||||
|
||||
- enable `/parsimony`
|
||||
- verify manifests, routing, and UML rendering
|
||||
- surface the package even before full ontology completion
|
||||
|
||||
## Phase 6 - Iterative population
|
||||
|
||||
- add the final limited class set
|
||||
- add the slot budget in a controlled way
|
||||
- resist ontology growth unless justified in the mapping docs
|
||||
28
docs/plan/semantic_ontology/README.md
Normal file
28
docs/plan/semantic_ontology/README.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
# Semantic Parsimony Ontology Plan
|
||||
|
||||
This plan defines how to derive a parsimonious LinkML ontology from the engineering ontology in `schemas/20251121/linkml/modules/` while keeping the engineering model as the authoritative implementation layer.
|
||||
|
||||
Goals:
|
||||
|
||||
- Keep the parsimonious ontology deliberately small: about 10 classes, 30 datatype properties, and 50 object properties.
|
||||
- Reuse the PiCo pattern: small conceptual hub classes, explicit evidence/provenance, and strong reuse of external vocabularies.
|
||||
- Make the parsimonious-to-engineering mapping a first-class deliverable, not an afterthought.
|
||||
- Expose the parsimonious LinkML schema in the same dashboard/viewer pattern used for `bronhouder.nl/linkml`.
|
||||
- Document which existing LinkML rules stay valid, which need clarification, and which need extension for the parsimonious layer.
|
||||
|
||||
Document index:
|
||||
|
||||
- `00-master-checklist.md` - implementation tracker
|
||||
- `01-reference-model-review.md` - PiCo and related parsimonious ontology lessons
|
||||
- `02-target-parsimonious-model.md` - target class/property budget and conceptual shape
|
||||
- `03-linkml-module-layout.md` - file layout and schema packaging plan
|
||||
- `04-engineering-mapping-strategy.md` - core mapping strategy to the engineering ontology
|
||||
- `05-rule-updates.md` - required updates/extensions to `.opencode/rules/linkml/`
|
||||
- `06-dashboard-and-uml-viewer.md` - `bronhouder.nl/parsimony` rollout plan
|
||||
- `07-implementation-phases.md` - phased execution plan
|
||||
|
||||
Core stance:
|
||||
|
||||
- The parsimonious ontology is the semantic/conceptual layer.
|
||||
- The engineering ontology remains the data-rich operational layer.
|
||||
- Hypernym-style parsimonious concepts must map downward into concrete engineering classes, enums, and slots with verified LinkML mappings and explicit rationale.
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
```mermaid
|
||||
classDiagram
|
||||
%% Generated from LinkML manifest: /schemas/20251121/linkml/manifest.json
|
||||
%% Manifest generated: 2026-02-20T12:44:35.583Z
|
||||
%% Manifest generated: 2026-03-13T15:26:06.249Z
|
||||
direction LR
|
||||
class AbbreviatedTitle
|
||||
class AbbreviationVariant
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"generated": "2026-02-20T12:32:55.895Z",
|
||||
"generated": "2026-03-13T15:26:06.249Z",
|
||||
"schemaRoot": "/schemas/20251121/linkml",
|
||||
"totalFiles": 2187,
|
||||
"categoryCounts": {
|
||||
|
|
|
|||
Binary file not shown.
222
frontend/public/schemas/20251121/linkml/parsimony/manifest.json
Normal file
222
frontend/public/schemas/20251121/linkml/parsimony/manifest.json
Normal file
|
|
@ -0,0 +1,222 @@
|
|||
{
|
||||
"generated": "2026-03-13T15:26:06.258Z",
|
||||
"schemaRoot": "/schemas/20251121/linkml/parsimony",
|
||||
"totalFiles": 37,
|
||||
"categoryCounts": {
|
||||
"main": 2,
|
||||
"class": 10,
|
||||
"slot": 21,
|
||||
"module": 4
|
||||
},
|
||||
"categories": [
|
||||
{
|
||||
"name": "main",
|
||||
"displayName": "Main Schemas",
|
||||
"files": [
|
||||
{
|
||||
"name": "metadata",
|
||||
"path": "metadata.yaml",
|
||||
"category": "main"
|
||||
},
|
||||
{
|
||||
"name": "parsimony_core",
|
||||
"path": "parsimony_core.yaml",
|
||||
"category": "main"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "class",
|
||||
"displayName": "Classes",
|
||||
"files": [
|
||||
{
|
||||
"name": "Activity",
|
||||
"path": "modules/classes/Activity.yaml",
|
||||
"category": "class"
|
||||
},
|
||||
{
|
||||
"name": "Agent",
|
||||
"path": "modules/classes/Agent.yaml",
|
||||
"category": "class"
|
||||
},
|
||||
{
|
||||
"name": "Classification",
|
||||
"path": "modules/classes/Classification.yaml",
|
||||
"category": "class"
|
||||
},
|
||||
{
|
||||
"name": "CustodialEntity",
|
||||
"path": "modules/classes/CustodialEntity.yaml",
|
||||
"category": "class"
|
||||
},
|
||||
{
|
||||
"name": "Designation",
|
||||
"path": "modules/classes/Designation.yaml",
|
||||
"category": "class"
|
||||
},
|
||||
{
|
||||
"name": "Holding",
|
||||
"path": "modules/classes/Holding.yaml",
|
||||
"category": "class"
|
||||
},
|
||||
{
|
||||
"name": "Observation",
|
||||
"path": "modules/classes/Observation.yaml",
|
||||
"category": "class"
|
||||
},
|
||||
{
|
||||
"name": "PlaceContext",
|
||||
"path": "modules/classes/PlaceContext.yaml",
|
||||
"category": "class"
|
||||
},
|
||||
{
|
||||
"name": "Reconstruction",
|
||||
"path": "modules/classes/Reconstruction.yaml",
|
||||
"category": "class"
|
||||
},
|
||||
{
|
||||
"name": "SourceResource",
|
||||
"path": "modules/classes/SourceResource.yaml",
|
||||
"category": "class"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "slot",
|
||||
"displayName": "Slots",
|
||||
"files": [
|
||||
{
|
||||
"name": "accessed_under",
|
||||
"path": "modules/slots/accessed_under.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "attested_in",
|
||||
"path": "modules/slots/attested_in.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "available_via",
|
||||
"path": "modules/slots/available_via.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "carried_out_by",
|
||||
"path": "modules/slots/carried_out_by.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "derived_from_source",
|
||||
"path": "modules/slots/derived_from_source.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "designated_by",
|
||||
"path": "modules/slots/designated_by.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "grounded_in",
|
||||
"path": "modules/slots/grounded_in.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "has_label_literal",
|
||||
"path": "modules/slots/has_label_literal.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "has_note_literal",
|
||||
"path": "modules/slots/has_note_literal.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "has_provenance_note",
|
||||
"path": "modules/slots/has_provenance_note.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "has_uri_literal",
|
||||
"path": "modules/slots/has_uri_literal.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "holds",
|
||||
"path": "modules/slots/holds.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "included_in",
|
||||
"path": "modules/slots/included_in.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "located_in",
|
||||
"path": "modules/slots/located_in.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "marked_as",
|
||||
"path": "modules/slots/marked_as.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "occurred_on",
|
||||
"path": "modules/slots/occurred_on.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "organized_within",
|
||||
"path": "modules/slots/organized_within.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "realized_through",
|
||||
"path": "modules/slots/realized_through.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "reconstructs",
|
||||
"path": "modules/slots/reconstructs.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "situated_in_time",
|
||||
"path": "modules/slots/situated_in_time.yaml",
|
||||
"category": "slot"
|
||||
},
|
||||
{
|
||||
"name": "typed_as",
|
||||
"path": "modules/slots/typed_as.yaml",
|
||||
"category": "slot"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "module",
|
||||
"displayName": "Modules",
|
||||
"files": [
|
||||
{
|
||||
"name": "parsimony_engineering_bridge",
|
||||
"path": "modules/mappings/parsimony_engineering_bridge.yaml",
|
||||
"category": "module"
|
||||
},
|
||||
{
|
||||
"name": "parsimony_engineering_class_alignments",
|
||||
"path": "modules/mappings/parsimony_engineering_class_alignments.yaml",
|
||||
"category": "module"
|
||||
},
|
||||
{
|
||||
"name": "parsimony_engineering_slot_alignments",
|
||||
"path": "modules/mappings/parsimony_engineering_slot_alignments.yaml",
|
||||
"category": "module"
|
||||
},
|
||||
{
|
||||
"name": "parsimony_engineering_type_bridge",
|
||||
"path": "modules/mappings/parsimony_engineering_type_bridge.yaml",
|
||||
"category": "module"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/metadata
|
||||
name: heritage_custodian_parsimony_metadata
|
||||
title: Heritage Custodian Parsimony Ontology - Metadata
|
||||
description: >-
|
||||
Metadata root for the parsimonious LinkML package that will provide a
|
||||
conceptual facade over the engineering ontology in ../modules/.
|
||||
version: 0.1.0
|
||||
license: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
skos: http://www.w3.org/2004/02/skos/core#
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
pico: https://personsincontext.org/model#
|
||||
schema: http://schema.org/
|
||||
rico: https://www.ica.org/standards/RiC/ontology#
|
||||
dcterms: http://purl.org/dc/terms/
|
||||
rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
|
||||
rdfs: http://www.w3.org/2000/01/rdf-schema#
|
||||
owl: http://www.w3.org/2002/07/owl#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
ontology_layer:
|
||||
description: >-
|
||||
Annotation indicating whether a schema element belongs to the parsimonious
|
||||
conceptual layer or to a mapped engineering realization.
|
||||
range: string
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/Activity
|
||||
name: Activity
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/carried_out_by
|
||||
- ../slots/attested_in
|
||||
- ../slots/located_in
|
||||
- ../slots/occurred_on
|
||||
- ../slots/reconstructs
|
||||
- ../slots/situated_in_time
|
||||
- ../slots/marked_as
|
||||
classes:
|
||||
Activity:
|
||||
class_uri: prov:Activity
|
||||
description: Broad class for provenance-bearing actions, including retrieval, curation, and reconstruction.
|
||||
close_mappings:
|
||||
- crm:E7_Activity
|
||||
slots:
|
||||
- has_label_literal
|
||||
- carried_out_by
|
||||
- attested_in
|
||||
- located_in
|
||||
- occurred_on
|
||||
- reconstructs
|
||||
- situated_in_time
|
||||
- marked_as
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/Agent
|
||||
name: Agent
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
schema: http://schema.org/
|
||||
rico: https://www.ica.org/standards/RiC/ontology#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/designated_by
|
||||
- ../slots/typed_as
|
||||
classes:
|
||||
Agent:
|
||||
class_uri: prov:Agent
|
||||
description: Broad agent class used for people, organizations, or software agents active in provenance chains.
|
||||
close_mappings:
|
||||
- rico:Agent
|
||||
- schema:Person
|
||||
- schema:Organization
|
||||
narrow_mappings:
|
||||
- hc:Custodian
|
||||
slots:
|
||||
- has_label_literal
|
||||
- designated_by
|
||||
- typed_as
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/Classification
|
||||
name: Classification
|
||||
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/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/has_note_literal
|
||||
classes:
|
||||
Classification:
|
||||
class_uri: skos:Concept
|
||||
description: Broad conceptual type node used for classification, typology, and semantic narrowing.
|
||||
broad_mappings:
|
||||
- crm:E55_Type
|
||||
slots:
|
||||
- has_label_literal
|
||||
- has_note_literal
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/CustodialEntity
|
||||
name: CustodialEntity
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
schema: http://schema.org/
|
||||
rico: https://www.ica.org/standards/RiC/ontology#
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/has_note_literal
|
||||
- ../slots/has_uri_literal
|
||||
- ../slots/available_via
|
||||
- ../slots/accessed_under
|
||||
- ../slots/holds
|
||||
- ../slots/designated_by
|
||||
- ../slots/located_in
|
||||
- ../slots/organized_within
|
||||
- ../slots/has_provenance_note
|
||||
- ../slots/marked_as
|
||||
- ../slots/typed_as
|
||||
classes:
|
||||
CustodialEntity:
|
||||
class_uri: schema:Organization
|
||||
description: Broad conceptual class for a heritage custodian or custodial body.
|
||||
broad_mappings:
|
||||
- crm:E39_Actor
|
||||
- rico:Agent
|
||||
narrow_mappings:
|
||||
- hc:Custodian
|
||||
slots:
|
||||
- has_label_literal
|
||||
- has_note_literal
|
||||
- has_uri_literal
|
||||
- available_via
|
||||
- accessed_under
|
||||
- holds
|
||||
- designated_by
|
||||
- located_in
|
||||
- organized_within
|
||||
- has_provenance_note
|
||||
- marked_as
|
||||
- typed_as
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/Designation
|
||||
name: Designation
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
rico: https://www.ica.org/standards/RiC/ontology#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/has_uri_literal
|
||||
- ../slots/typed_as
|
||||
classes:
|
||||
Designation:
|
||||
class_uri: crm:E41_Appellation
|
||||
description: Broad concept for identifiers, names, codes, and appellations used to identify entities.
|
||||
narrow_mappings:
|
||||
- rico:Identifier
|
||||
slots:
|
||||
- has_label_literal
|
||||
- has_uri_literal
|
||||
- typed_as
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/Holding
|
||||
name: Holding
|
||||
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/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/has_note_literal
|
||||
- ../slots/available_via
|
||||
- ../slots/attested_in
|
||||
- ../slots/accessed_under
|
||||
- ../slots/included_in
|
||||
- ../slots/situated_in_time
|
||||
- ../slots/marked_as
|
||||
- ../slots/typed_as
|
||||
classes:
|
||||
Holding:
|
||||
class_uri: rico:RecordSet
|
||||
description: Broad conceptual class for a holding, record set, collection, or curated body of material.
|
||||
broad_mappings:
|
||||
- crm:E78_Curated_Holding
|
||||
narrow_mappings:
|
||||
- hc:CustodianCollection
|
||||
slots:
|
||||
- has_label_literal
|
||||
- has_note_literal
|
||||
- available_via
|
||||
- attested_in
|
||||
- accessed_under
|
||||
- included_in
|
||||
- situated_in_time
|
||||
- marked_as
|
||||
- typed_as
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/Observation
|
||||
name: Observation
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
pico: https://personsincontext.org/model#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/has_note_literal
|
||||
- ../slots/attested_in
|
||||
- ../slots/occurred_on
|
||||
- ../slots/has_provenance_note
|
||||
classes:
|
||||
Observation:
|
||||
class_uri: prov:Entity
|
||||
description: Evidence-bearing observation anchored in a source and usable for later reconstruction.
|
||||
narrow_mappings:
|
||||
- pico:PersonObservation
|
||||
- hc:CustodianObservation
|
||||
close_mappings:
|
||||
- crm:E73_Information_Object
|
||||
slots:
|
||||
- has_label_literal
|
||||
- has_note_literal
|
||||
- attested_in
|
||||
- has_provenance_note
|
||||
- occurred_on
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/PlaceContext
|
||||
name: PlaceContext
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
schema: http://schema.org/
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/has_uri_literal
|
||||
- ../slots/typed_as
|
||||
classes:
|
||||
PlaceContext:
|
||||
class_uri: schema:Place
|
||||
description: Broad place class for named locations used in custodial description and provenance.
|
||||
broad_mappings:
|
||||
- crm:E53_Place
|
||||
narrow_mappings:
|
||||
- hc:CustodianPlace
|
||||
slots:
|
||||
- has_label_literal
|
||||
- has_uri_literal
|
||||
- typed_as
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
# Parsimonious class modules
|
||||
|
||||
This directory will hold the small conceptual class set for the parsimonious ontology.
|
||||
|
||||
Planned scale: about 10 classes.
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/Reconstruction
|
||||
name: Reconstruction
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
pico: https://personsincontext.org/model#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/grounded_in
|
||||
- ../slots/derived_from_source
|
||||
- ../slots/realized_through
|
||||
- ../slots/situated_in_time
|
||||
- ../slots/typed_as
|
||||
classes:
|
||||
Reconstruction:
|
||||
class_uri: prov:Entity
|
||||
description: Conceptual entity reconstructed from one or more observations.
|
||||
narrow_mappings:
|
||||
- pico:PersonReconstruction
|
||||
related_mappings:
|
||||
- hc:CustodianNameConsensus
|
||||
- hc:CustodianLegalStatus
|
||||
- hc:CustodianPlace
|
||||
slots:
|
||||
- has_label_literal
|
||||
- grounded_in
|
||||
- derived_from_source
|
||||
- realized_through
|
||||
- situated_in_time
|
||||
- typed_as
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/SourceResource
|
||||
name: SourceResource
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
schema: http://schema.org/
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
dcterms: http://purl.org/dc/terms/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/has_uri_literal
|
||||
- ../slots/available_via
|
||||
- ../slots/typed_as
|
||||
classes:
|
||||
SourceResource:
|
||||
class_uri: schema:CreativeWork
|
||||
description: Broad conceptual class for a source, source file, archival object, or documentary carrier.
|
||||
broad_mappings:
|
||||
- crm:E73_Information_Object
|
||||
close_mappings:
|
||||
- dcterms:BibliographicResource
|
||||
narrow_mappings:
|
||||
- hc:CustodianSourceFile
|
||||
slots:
|
||||
- has_label_literal
|
||||
- has_uri_literal
|
||||
- available_via
|
||||
- typed_as
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# Parsimonious enum modules
|
||||
|
||||
This directory will hold only the enum files that remain necessary after semantic reduction.
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
# Parsimonious-engineering mapping modules
|
||||
|
||||
This directory will contain the explicit bridge between the parsimonious ontology and the engineering ontology in `../../../modules/`.
|
||||
|
||||
Use relative references from parsimonious modules back to the engineering package so the mapping remains self-documenting inside LinkML.
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/mappings/parsimony-engineering-bridge
|
||||
name: parsimony_engineering_bridge
|
||||
title: Parsimony to Engineering Bridge
|
||||
description: >-
|
||||
Mapping scaffold linking the parsimonious conceptual layer to the engineering
|
||||
ontology in ../../../modules/.
|
||||
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
|
||||
- ../classes/CustodialEntity
|
||||
- ../classes/Holding
|
||||
- ../classes/Observation
|
||||
- ../classes/Reconstruction
|
||||
- ../classes/PlaceContext
|
||||
- ../classes/SourceResource
|
||||
- ../classes/Designation
|
||||
- ../classes/Classification
|
||||
- ../../../modules/classes/Custodian
|
||||
- ../../../modules/classes/CustodianCollection
|
||||
- ../../../modules/classes/CustodianObservation
|
||||
- ../../../modules/classes/CustodianPlace
|
||||
- ../../../modules/slots/hold
|
||||
- ../../../modules/slots/identified_by
|
||||
comments:
|
||||
- >-
|
||||
CustodialEntity is a hypernym over engineering classes such as Custodian,
|
||||
CustodianArchive, MuseumArchive, MunicipalArchive, and related institutional
|
||||
specializations.
|
||||
- >-
|
||||
Holding is a hypernym over engineering classes such as
|
||||
CustodianCollection and multiple RecordSetType or archive holding classes.
|
||||
- >-
|
||||
Observation is a hypernym over engineering evidence classes such as
|
||||
CustodianObservation and similar source-attributed statements.
|
||||
- >-
|
||||
Reconstruction is a bridge concept for engineering reconstructed entities
|
||||
such as CustodianNameConsensus, CustodianLegalStatus, and CustodianPlace.
|
||||
- >-
|
||||
Parsimonious slots must be read together with engineering slots such as
|
||||
identified_by and hold, using broadMatch and narrowMatch semantics rather
|
||||
than assuming one-to-one equivalence.
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/mappings/parsimony-engineering-class-alignments
|
||||
name: parsimony_engineering_class_alignments
|
||||
title: Parsimonious to Engineering Class Alignments
|
||||
description: >-
|
||||
Detailed class-level bridge between parsimonious hypernyms and engineering
|
||||
realizations.
|
||||
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
|
||||
- ../classes/CustodialEntity
|
||||
- ../classes/Holding
|
||||
- ../classes/Observation
|
||||
- ../classes/Reconstruction
|
||||
- ../classes/SourceResource
|
||||
- ../classes/PlaceContext
|
||||
- ../classes/Designation
|
||||
- ../classes/Classification
|
||||
- ../../../modules/classes/Custodian
|
||||
- ../../../modules/classes/CustodianCollection
|
||||
- ../../../modules/classes/CustodianObservation
|
||||
- ../../../modules/classes/CustodianPlace
|
||||
- ../../../modules/classes/CustodianLegalStatus
|
||||
- ../../../modules/classes/CustodianNameConsensus
|
||||
- ../../../modules/classes/CustodianSourceFile
|
||||
comments:
|
||||
- >-
|
||||
CLASS ALIGNMENT: CustodialEntity -> Custodian is a narrow mapping. The
|
||||
parsimonious node stands above the engineering hub plus narrower institutional
|
||||
archive and custodian subtypes.
|
||||
- >-
|
||||
CLASS ALIGNMENT: Holding -> CustodianCollection is a narrow mapping.
|
||||
The parsimonious node should also absorb multiple archive-specific RecordSetType
|
||||
engineering classes as narrower realizations of one conceptual holding family.
|
||||
- >-
|
||||
CLASS ALIGNMENT: Observation -> CustodianObservation is a narrow mapping.
|
||||
Observation remains the evidence-level hypernym for source-attributed records.
|
||||
- >-
|
||||
CLASS ALIGNMENT: Reconstruction -> CustodianLegalStatus, CustodianNameConsensus,
|
||||
and CustodianPlace are narrow mappings. The parsimonious reconstruction node
|
||||
intentionally collapses multiple engineering reconstruction products.
|
||||
- >-
|
||||
CLASS ALIGNMENT: SourceResource -> CustodianSourceFile is a narrow mapping.
|
||||
The engineering class acts as a root source bundle, while the parsimonious class
|
||||
remains a broader documentary carrier concept.
|
||||
- >-
|
||||
CLASS ALIGNMENT: PlaceContext -> CustodianPlace is a narrow mapping. The
|
||||
engineering model adds reconstruction provenance and locality detail absent from
|
||||
the parsimonious layer.
|
||||
- >-
|
||||
CLASS ALIGNMENT: Designation bridges to engineering identifier-bearing
|
||||
structures through slots such as identified_by and has_name rather than a single
|
||||
exact engineering class.
|
||||
- >-
|
||||
CLASS ALIGNMENT: Classification bridges to engineering type classes and enums,
|
||||
including CustodianType and many domain-specific type collections.
|
||||
|
|
@ -0,0 +1,99 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/mappings/parsimony-engineering-slot-alignments
|
||||
name: parsimony_engineering_slot_alignments
|
||||
title: Parsimonious to Engineering Slot Alignments
|
||||
description: >-
|
||||
Detailed slot-level bridge showing how parsimonious predicates map to richer
|
||||
engineering slots.
|
||||
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/available_via
|
||||
- ../slots/accessed_under
|
||||
- ../slots/designated_by
|
||||
- ../slots/holds
|
||||
- ../slots/attested_in
|
||||
- ../slots/grounded_in
|
||||
- ../slots/derived_from_source
|
||||
- ../slots/realized_through
|
||||
- ../slots/included_in
|
||||
- ../slots/located_in
|
||||
- ../slots/marked_as
|
||||
- ../slots/organized_within
|
||||
- ../slots/reconstructs
|
||||
- ../slots/situated_in_time
|
||||
- ../slots/typed_as
|
||||
- ../slots/carried_out_by
|
||||
- ../../../modules/slots/derive_from
|
||||
- ../../../modules/slots/encompassed_by
|
||||
- ../../../modules/slots/generated_by
|
||||
- ../../../modules/slots/has_access_policy
|
||||
- ../../../modules/slots/has_status
|
||||
- ../../../modules/slots/hold
|
||||
- ../../../modules/slots/identified_by
|
||||
- ../../../modules/slots/has_source
|
||||
- ../../../modules/slots/observe
|
||||
- ../../../modules/slots/part_of
|
||||
- ../../../modules/slots/refer_to
|
||||
- ../../../modules/slots/temporal_extent
|
||||
comments:
|
||||
- >-
|
||||
SLOT ALIGNMENT: available_via is a broader parsimonious availability
|
||||
predicate
|
||||
that bridges to engineering URL, portal, and access-point slots without
|
||||
reproducing all delivery mechanics.
|
||||
- >-
|
||||
SLOT ALIGNMENT: holds is broader than engineering hold. The parsimonious slot
|
||||
should cover custody, stewardship, and holding relations that are split across
|
||||
multiple engineering slots and class contexts.
|
||||
- >-
|
||||
SLOT ALIGNMENT: designated_by is a broader parsimonious predicate covering
|
||||
names, identifiers, codes, and appellations. Engineering identified_by is a
|
||||
narrower hyponym used when the designation is expressed in operational form.
|
||||
- >-
|
||||
SLOT ALIGNMENT: attested_in is a parsimonious hypernym over engineering
|
||||
has_source and related provenance/documentation slots.
|
||||
- >-
|
||||
SLOT ALIGNMENT: grounded_in bridges to engineering derive_from,
|
||||
has_source, and observe patterns depending on whether the engineering model
|
||||
expresses derivation, observation target, or source bundle attachment.
|
||||
- >-
|
||||
SLOT ALIGNMENT: derived_from_source is the more general provenance bridge to
|
||||
engineering derive_from and has_source when the source is not modeled as a
|
||||
discrete observation.
|
||||
- >-
|
||||
SLOT ALIGNMENT: realized_through is the broader parsimonious predicate for
|
||||
process- or activity-based realization. Engineering generated_by is a
|
||||
narrower hyponym used in operational provenance chains.
|
||||
- >-
|
||||
SLOT ALIGNMENT: accessed_under is the parsimonious hypernym for access
|
||||
conditions, restrictions, rights, and policies. Engineering has_access_policy
|
||||
is a narrower hyponym within this broader conceptual predicate.
|
||||
- >-
|
||||
SLOT ALIGNMENT: marked_as is the broader parsimonious predicate for status or
|
||||
standing. Engineering has_status is a narrower hyponym carrying operational
|
||||
state values.
|
||||
- >-
|
||||
SLOT ALIGNMENT: located_in is broader than engineering place-related slots such
|
||||
as located_at, has_location, and locality-bearing reconstruction slots.
|
||||
- >-
|
||||
SLOT ALIGNMENT: organized_within and included_in bridge to engineering
|
||||
encompassed_by and part_of, depending on whether the containment is
|
||||
organizational, conceptual, or constituent.
|
||||
- >-
|
||||
SLOT ALIGNMENT: reconstructs is a parsimonious bridge between activities and
|
||||
reconstructed entities. In the engineering layer this semantics is often split
|
||||
across generated_by, generated, or refer_to patterns.
|
||||
- >-
|
||||
SLOT ALIGNMENT: situated_in_time is the broader parsimonious temporal
|
||||
placement predicate. Engineering temporal_extent is a narrower hyponym used
|
||||
for more explicit time-span modeling.
|
||||
- >-
|
||||
SLOT ALIGNMENT: typed_as is a hypernym over engineering has_type and many
|
||||
narrower enum-backed or type-class-backed patterns.
|
||||
- >-
|
||||
SLOT ALIGNMENT: carried_out_by is close to engineering conducted_by and related
|
||||
provenance slots, but remains intentionally generic in the parsimonious layer.
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/mappings/parsimony-engineering-type-bridge
|
||||
name: parsimony_engineering_type_bridge
|
||||
title: Parsimonious Type Bridge
|
||||
description: >-
|
||||
Bridge from the parsimonious Classification node to the main engineering type
|
||||
classes, enums, and typing predicates.
|
||||
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
|
||||
- ../classes/Classification
|
||||
- ../slots/typed_as
|
||||
- ../../../modules/classes/CustodianType
|
||||
- ../../../modules/classes/ArchiveOrganizationType
|
||||
- ../../../modules/enums/AgentTypeEnum
|
||||
- ../../../modules/slots/has_type
|
||||
comments:
|
||||
- >-
|
||||
TYPE BRIDGE: Classification is the parsimonious hypernym for engineering type
|
||||
assets modeled as SKOS-like classes, enums, and URI-valued typing slots.
|
||||
- >-
|
||||
Classification -> CustodianType is a narrow mapping: the engineering class
|
||||
carries the detailed custodian taxonomy and hierarchy management.
|
||||
- >-
|
||||
Classification -> ArchiveOrganizationType is a further narrow mapping for a
|
||||
domain-specific branch of the engineering type system.
|
||||
- >-
|
||||
Classification -> AgentTypeEnum is a related mapping rather than exact mapping,
|
||||
because the engineering enum is provenance-scoped and closed-world, while the
|
||||
parsimonious concept remains open and cross-domain.
|
||||
- >-
|
||||
typed_as -> has_type is a close mapping: both express classification, but the
|
||||
engineering slot supports many specialized aliases, enum-backed values, and
|
||||
CRM-oriented operational patterns.
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
# Parsimonious slot modules
|
||||
|
||||
This directory will hold the centralized slot definitions for the parsimonious ontology.
|
||||
|
||||
Planned scale: about 30 datatype slots and about 50 object slots.
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/accessed_under
|
||||
name: accessed_under
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
dcterms: http://purl.org/dc/terms/
|
||||
schema: http://schema.org/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
accessed_under:
|
||||
slot_uri: dcterms:accessRights
|
||||
description: States the conditions, rights, restrictions, or policy framework under which a resource may be accessed.
|
||||
range: string
|
||||
multivalued: true
|
||||
close_mappings:
|
||||
- schema:conditionsOfAccess
|
||||
narrow_mappings:
|
||||
- hc:has_access_policy
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/attested_in
|
||||
name: attested_in
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
dcterms: http://purl.org/dc/terms/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
attested_in:
|
||||
slot_uri: dcterms:source
|
||||
description: Links an entity, observation, or claim to a source in which it is attested or documented.
|
||||
range: SourceResource
|
||||
multivalued: true
|
||||
close_mappings:
|
||||
- prov:used
|
||||
narrow_mappings:
|
||||
- hc:has_source
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/available_via
|
||||
name: available_via
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
schema: http://schema.org/
|
||||
dcterms: http://purl.org/dc/terms/
|
||||
dcat: http://www.w3.org/ns/dcat#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
available_via:
|
||||
slot_uri: schema:url
|
||||
description: Indicates the page, service, portal, or endpoint through which a resource is made available.
|
||||
range: uri
|
||||
multivalued: true
|
||||
close_mappings:
|
||||
- dcat:accessURL
|
||||
related_mappings:
|
||||
- dcterms:identifier
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/carried_out_by
|
||||
name: carried_out_by
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
carried_out_by:
|
||||
slot_uri: prov:wasAssociatedWith
|
||||
description: Relates an activity or reconstruction to the responsible agent.
|
||||
range: Agent
|
||||
multivalued: true
|
||||
close_mappings:
|
||||
- crm:P14_carried_out_by
|
||||
narrow_mappings:
|
||||
- hc:conducted_by
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/derived_from_source
|
||||
name: derived_from_source
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
dcterms: http://purl.org/dc/terms/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
derived_from_source:
|
||||
slot_uri: prov:wasDerivedFrom
|
||||
description: Connects a semantic entity to the source or prior entity from which it is derived.
|
||||
range: uriorcurie
|
||||
multivalued: true
|
||||
broad_mappings:
|
||||
- prov:wasInfluencedBy
|
||||
related_mappings:
|
||||
- dcterms:source
|
||||
narrow_mappings:
|
||||
- hc:derive_from
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/designated_by
|
||||
name: designated_by
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
rico: https://www.ica.org/standards/RiC/ontology#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
designated_by:
|
||||
slot_uri: crm:P1_is_identified_by
|
||||
description: Connects an entity to a name, identifier, code, or appellation by which it is designated.
|
||||
range: Designation
|
||||
multivalued: true
|
||||
close_mappings:
|
||||
- rico:hasOrHadIdentifier
|
||||
narrow_mappings:
|
||||
- hc:identified_by
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/grounded_in
|
||||
name: grounded_in
|
||||
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:
|
||||
grounded_in:
|
||||
slot_uri: prov:wasDerivedFrom
|
||||
description: Connects a reconstruction, interpretation, or claim to the evidential basis on which it is grounded.
|
||||
range: Observation
|
||||
multivalued: true
|
||||
broad_mappings:
|
||||
- prov:wasInfluencedBy
|
||||
narrow_mappings:
|
||||
- prov:hadPrimarySource
|
||||
- hc:derive_from
|
||||
- hc:observe
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/has_label_literal
|
||||
name: has_label_literal
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
rdfs: http://www.w3.org/2000/01/rdf-schema#
|
||||
skos: http://www.w3.org/2004/02/skos/core#
|
||||
schema: http://schema.org/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
has_label_literal:
|
||||
slot_uri: rdfs:label
|
||||
description: Primary human-readable label literal for a semantic entity or classification.
|
||||
range: string
|
||||
multivalued: true
|
||||
exact_mappings:
|
||||
- skos:prefLabel
|
||||
- schema:name
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/has_note_literal
|
||||
name: has_note_literal
|
||||
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#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
has_note_literal:
|
||||
slot_uri: schema:description
|
||||
description: Free-text note used for concise conceptual documentation.
|
||||
range: string
|
||||
multivalued: true
|
||||
close_mappings:
|
||||
- skos:note
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/has_provenance_note
|
||||
name: has_provenance_note
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
dcterms: http://purl.org/dc/terms/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
has_provenance_note:
|
||||
slot_uri: dcterms:provenance
|
||||
description: Concise provenance note for the parsimonious layer when full provenance structures remain engineering-only.
|
||||
range: string
|
||||
multivalued: true
|
||||
related_mappings:
|
||||
- prov:wasDerivedFrom
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/has_uri_literal
|
||||
name: has_uri_literal
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
schema: http://schema.org/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
has_uri_literal:
|
||||
slot_uri: schema:url
|
||||
description: Canonical URI or web address used to identify or dereference a concept.
|
||||
range: uri
|
||||
multivalued: true
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/holds
|
||||
name: holds
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
rico: https://www.ica.org/standards/RiC/ontology#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
holds:
|
||||
slot_uri: rico:isOrWasHolderOf
|
||||
description: Relates a custodian or agent concept to a holding concept it holds or held.
|
||||
range: Holding
|
||||
multivalued: true
|
||||
narrow_mappings:
|
||||
- hc:hold
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/included_in
|
||||
name: included_in
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
dcterms: http://purl.org/dc/terms/
|
||||
schema: http://schema.org/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
included_in:
|
||||
slot_uri: dcterms:isPartOf
|
||||
description: Relates an entity to a larger whole, set, or framework within which it is included.
|
||||
range: uriorcurie
|
||||
multivalued: true
|
||||
close_mappings:
|
||||
- schema:isPartOf
|
||||
narrow_mappings:
|
||||
- hc:partOf
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/located_in
|
||||
name: located_in
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
schema: http://schema.org/
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
located_in:
|
||||
slot_uri: schema:location
|
||||
description: Places a concept or activity in a named place context.
|
||||
range: PlaceContext
|
||||
multivalued: true
|
||||
close_mappings:
|
||||
- crm:P53_has_former_or_current_location
|
||||
- prov:atLocation
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/marked_as
|
||||
name: marked_as
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
schema: http://schema.org/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
marked_as:
|
||||
slot_uri: hc:hasStatus
|
||||
description: Marks an entity with a current state, standing, or descriptive status relevant to interpretation or access.
|
||||
range: string
|
||||
multivalued: true
|
||||
related_mappings:
|
||||
- schema:status
|
||||
narrow_mappings:
|
||||
- hc:has_status
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/occurred_on
|
||||
name: occurred_on
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
schema: http://schema.org/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
occurred_on:
|
||||
slot_uri: schema:startDate
|
||||
description: Temporal literal used when the parsimonious layer does not yet model time as a separate class.
|
||||
range: string
|
||||
close_mappings:
|
||||
- prov:startedAtTime
|
||||
related_mappings:
|
||||
- prov:endedAtTime
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/organized_within
|
||||
name: organized_within
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
dcterms: http://purl.org/dc/terms/
|
||||
schema: http://schema.org/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
organized_within:
|
||||
slot_uri: dcterms:isPartOf
|
||||
description: Relates an organizational concept to the larger institutional structure that contains it.
|
||||
range: CustodialEntity
|
||||
multivalued: true
|
||||
close_mappings:
|
||||
- schema:isPartOf
|
||||
narrow_mappings:
|
||||
- hc:encompassedBy
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/realized_through
|
||||
name: realized_through
|
||||
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:
|
||||
realized_through:
|
||||
slot_uri: prov:wasGeneratedBy
|
||||
description: Relates an entity to the activity, process, or reconstruction workflow through which it becomes realized.
|
||||
range: Activity
|
||||
multivalued: true
|
||||
broad_mappings:
|
||||
- prov:wasInfluencedBy
|
||||
related_mappings:
|
||||
- prov:generated
|
||||
narrow_mappings:
|
||||
- hc:generated_by
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/reconstructs
|
||||
name: reconstructs
|
||||
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:
|
||||
reconstructs:
|
||||
slot_uri: prov:generated
|
||||
description: Relates a reconstruction activity to the reconstructed conceptual entity it yields.
|
||||
range: Reconstruction
|
||||
multivalued: true
|
||||
related_mappings:
|
||||
- prov:wasGeneratedBy
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/situated_in_time
|
||||
name: situated_in_time
|
||||
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#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
situated_in_time:
|
||||
slot_uri: crm:P4_has_time-span
|
||||
description: Places an entity, activity, or relation within a time span, period, or temporal frame.
|
||||
range: string
|
||||
multivalued: true
|
||||
related_mappings:
|
||||
- prov:startedAtTime
|
||||
- prov:endedAtTime
|
||||
narrow_mappings:
|
||||
- hc:temporal_extent
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/typed_as
|
||||
name: typed_as
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
|
||||
skos: http://www.w3.org/2004/02/skos/core#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
typed_as:
|
||||
slot_uri: rdf:type
|
||||
description: Relates a concept to a reusable classification or type node.
|
||||
range: Classification
|
||||
multivalued: true
|
||||
related_mappings:
|
||||
- skos:broader
|
||||
narrow_mappings:
|
||||
- hc:has_type
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/core
|
||||
name: heritage_custodian_parsimony
|
||||
title: Heritage Custodian Parsimony Ontology
|
||||
description: >-
|
||||
Parsimonious conceptual facade over the engineering ontology in ../modules/.
|
||||
This package keeps a deliberately small class and slot set and explains how
|
||||
broad conceptual nodes map to richer engineering classes, enums, and slots.
|
||||
version: 0.1.0
|
||||
license: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
pico: https://personsincontext.org/model#
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
schema: http://schema.org/
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
rico: https://www.ica.org/standards/RiC/ontology#
|
||||
skos: http://www.w3.org/2004/02/skos/core#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- metadata
|
||||
- modules/slots/designated_by
|
||||
- modules/slots/has_label_literal
|
||||
- modules/slots/has_note_literal
|
||||
- modules/slots/has_uri_literal
|
||||
- modules/slots/available_via
|
||||
- modules/slots/derived_from_source
|
||||
- modules/slots/realized_through
|
||||
- modules/slots/accessed_under
|
||||
- modules/slots/attested_in
|
||||
- modules/slots/has_provenance_note
|
||||
- modules/slots/included_in
|
||||
- modules/slots/marked_as
|
||||
- modules/slots/occurred_on
|
||||
- modules/slots/organized_within
|
||||
- modules/slots/situated_in_time
|
||||
- modules/slots/carried_out_by
|
||||
- modules/slots/grounded_in
|
||||
- modules/slots/holds
|
||||
- modules/slots/located_in
|
||||
- modules/slots/reconstructs
|
||||
- modules/slots/typed_as
|
||||
- modules/classes/Activity
|
||||
- modules/classes/Agent
|
||||
- modules/classes/CustodialEntity
|
||||
- modules/classes/Holding
|
||||
- modules/classes/Designation
|
||||
- modules/classes/Observation
|
||||
- modules/classes/PlaceContext
|
||||
- modules/classes/Reconstruction
|
||||
- modules/classes/SourceResource
|
||||
- modules/classes/Classification
|
||||
- modules/mappings/parsimony_engineering_bridge
|
||||
- modules/mappings/parsimony_engineering_class_alignments
|
||||
- modules/mappings/parsimony_engineering_slot_alignments
|
||||
- modules/mappings/parsimony_engineering_type_bridge
|
||||
comments:
|
||||
- >-
|
||||
This schema is intentionally small. Engineering detail remains in
|
||||
schemas/20251121/linkml/modules/ and must be connected through explicit
|
||||
mapping files.
|
||||
|
|
@ -15,8 +15,7 @@
|
|||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const SCHEMAS_DIR = path.join(__dirname, '../public/schemas/20251121/linkml');
|
||||
const OUTPUT_FILE = path.join(SCHEMAS_DIR, 'manifest.json');
|
||||
const ROOT_SCHEMAS_DIR = path.join(__dirname, '../public/schemas/20251121/linkml');
|
||||
|
||||
// Category configuration
|
||||
const CATEGORIES = [
|
||||
|
|
@ -102,15 +101,15 @@ function scanDirectory(dir, category, relativePath = '', excludeSubdirs = []) {
|
|||
/**
|
||||
* Scan root directory for main schema files
|
||||
*/
|
||||
function scanMainSchemas() {
|
||||
function scanMainSchemas(baseDir) {
|
||||
const files = [];
|
||||
|
||||
if (!fs.existsSync(SCHEMAS_DIR)) {
|
||||
console.warn(`Schema directory not found: ${SCHEMAS_DIR}`);
|
||||
if (!fs.existsSync(baseDir)) {
|
||||
console.warn(`Schema directory not found: ${baseDir}`);
|
||||
return files;
|
||||
}
|
||||
|
||||
const entries = fs.readdirSync(SCHEMAS_DIR, { withFileTypes: true });
|
||||
const entries = fs.readdirSync(baseDir, { withFileTypes: true });
|
||||
|
||||
for (const entry of entries) {
|
||||
if (entry.isFile() && entry.name.endsWith('.yaml') && !entry.name.includes('.bak')) {
|
||||
|
|
@ -129,8 +128,9 @@ function scanMainSchemas() {
|
|||
/**
|
||||
* Generate the manifest
|
||||
*/
|
||||
function generateManifest() {
|
||||
console.log(`Scanning LinkML schemas in: ${SCHEMAS_DIR}`);
|
||||
function generateManifest(baseDir, schemaRoot) {
|
||||
const outputFile = path.join(baseDir, 'manifest.json');
|
||||
console.log(`Scanning LinkML schemas in: ${baseDir}`);
|
||||
|
||||
const categories = [];
|
||||
let totalFiles = 0;
|
||||
|
|
@ -141,9 +141,9 @@ function generateManifest() {
|
|||
|
||||
if (catConfig.name === 'main') {
|
||||
// Special handling for main schemas at root level
|
||||
files = scanMainSchemas();
|
||||
files = scanMainSchemas(baseDir);
|
||||
} else if (catConfig.scan && catConfig.scanPath) {
|
||||
const scanDir = path.join(SCHEMAS_DIR, catConfig.scanPath);
|
||||
const scanDir = path.join(baseDir, catConfig.scanPath);
|
||||
files = scanDirectory(
|
||||
scanDir,
|
||||
catConfig.name,
|
||||
|
|
@ -167,27 +167,28 @@ function generateManifest() {
|
|||
|
||||
const manifest = {
|
||||
generated: new Date().toISOString(),
|
||||
schemaRoot: '/schemas/20251121/linkml',
|
||||
schemaRoot,
|
||||
totalFiles,
|
||||
categoryCounts,
|
||||
categories
|
||||
};
|
||||
|
||||
// Ensure output directory exists
|
||||
const outputDir = path.dirname(OUTPUT_FILE);
|
||||
const outputDir = path.dirname(outputFile);
|
||||
if (!fs.existsSync(outputDir)) {
|
||||
fs.mkdirSync(outputDir, { recursive: true });
|
||||
}
|
||||
|
||||
// Write manifest
|
||||
fs.writeFileSync(OUTPUT_FILE, JSON.stringify(manifest, null, 2));
|
||||
fs.writeFileSync(outputFile, JSON.stringify(manifest, null, 2));
|
||||
|
||||
// Print summary
|
||||
console.log(`Generated manifest with ${totalFiles} schema files`);
|
||||
for (const cat of categories) {
|
||||
console.log(` - ${cat.displayName}: ${cat.files.length}`);
|
||||
}
|
||||
console.log(`Output: ${OUTPUT_FILE}`);
|
||||
console.log(`Output: ${outputFile}`);
|
||||
}
|
||||
|
||||
generateManifest();
|
||||
generateManifest(ROOT_SCHEMAS_DIR, '/schemas/20251121/linkml');
|
||||
generateManifest(path.join(ROOT_SCHEMAS_DIR, 'parsimony'), '/schemas/20251121/linkml/parsimony');
|
||||
|
|
|
|||
|
|
@ -107,6 +107,17 @@ const router = createBrowserRouter([
|
|||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: '/parsimony',
|
||||
element: <Layout />,
|
||||
errorElement: <RouterErrorBoundary />,
|
||||
children: [
|
||||
{
|
||||
index: true,
|
||||
element: withSuspense(LinkMLViewerPage),
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: '/datamap',
|
||||
element: <Layout />,
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ export function Navigation() {
|
|||
|
||||
// Check if we're on a page where scroll-up should NOT auto-expand header
|
||||
// User must click the small logo to expand on these pages
|
||||
const isNoAutoExpandPage = location.pathname.startsWith('/conversation') || location.pathname.startsWith('/linkml');
|
||||
const isNoAutoExpandPage = location.pathname.startsWith('/conversation') || location.pathname.startsWith('/linkml') || location.pathname.startsWith('/parsimony');
|
||||
|
||||
// Detect scrolling from ANY scrollable element on the page
|
||||
// Also detect wheel events on non-scrollable areas
|
||||
|
|
@ -346,7 +346,7 @@ export function Navigation() {
|
|||
{/* Ontology Menu */}
|
||||
<div className="nav-dropdown">
|
||||
<button
|
||||
className={`nav-dropdown-trigger ${isSubmenuActive(['/linkml', '/datamap', '/ontology']) ? 'active' : ''}`}
|
||||
className={`nav-dropdown-trigger ${isSubmenuActive(['/linkml', '/parsimony', '/datamap', '/ontology']) ? 'active' : ''}`}
|
||||
onClick={() => toggleDropdown('ontology')}
|
||||
aria-expanded={openDropdown === 'ontology'}
|
||||
aria-haspopup="true"
|
||||
|
|
@ -359,6 +359,9 @@ export function Navigation() {
|
|||
<Link to="/linkml" className={`nav-dropdown-item ${isActive('/linkml') ? 'active' : ''}`}>
|
||||
{t('linkml')}
|
||||
</Link>
|
||||
<Link to="/parsimony" className={`nav-dropdown-item ${isActive('/parsimony') ? 'active' : ''}`}>
|
||||
{t('parsimony')}
|
||||
</Link>
|
||||
<Link to="/datamap" className={`nav-dropdown-item ${isActive('/datamap') ? 'active' : ''}`}>
|
||||
{t('datamap')}
|
||||
</Link>
|
||||
|
|
@ -530,6 +533,9 @@ export function Navigation() {
|
|||
<Link to="/linkml" className={`nav-mobile-link ${isActive('/linkml') ? 'active' : ''}`}>
|
||||
{t('linkml')}
|
||||
</Link>
|
||||
<Link to="/parsimony" className={`nav-mobile-link ${isActive('/parsimony') ? 'active' : ''}`}>
|
||||
{t('parsimony')}
|
||||
</Link>
|
||||
<Link to="/datamap" className={`nav-mobile-link ${isActive('/datamap') ? 'active' : ''}`}>
|
||||
{t('datamap')}
|
||||
</Link>
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@ export const translations = {
|
|||
stats: { nl: 'Statistieken', en: 'Stats' },
|
||||
// Ontology submenu
|
||||
linkml: { nl: 'LinkML', en: 'LinkML' },
|
||||
parsimony: { nl: 'Parsimonie', en: 'Parsimony' },
|
||||
datamap: { nl: 'Data Mappings', en: 'Data Mappings' },
|
||||
external: { nl: 'Extern', en: 'External' },
|
||||
// Query submenu
|
||||
|
|
|
|||
|
|
@ -579,7 +579,7 @@ class LinkMLSchemaService {
|
|||
total: 1,
|
||||
});
|
||||
|
||||
const metadataResponse = await fetch(`${SCHEMA_BASE_PATH}/modules/metadata.yaml`);
|
||||
const metadataResponse = await fetch(`${schemaBasePath}/modules/metadata.yaml`);
|
||||
if (metadataResponse.ok) {
|
||||
const metadataContent = await metadataResponse.text();
|
||||
const metadata = yaml.load(metadataContent) as SchemaDefinition;
|
||||
|
|
@ -608,7 +608,7 @@ class LinkMLSchemaService {
|
|||
total: 1,
|
||||
});
|
||||
|
||||
const mainResponse = await fetch(`${SCHEMA_BASE_PATH}/01_custodian_name_modular.yaml`);
|
||||
const mainResponse = await fetch(`${schemaBasePath}/01_custodian_name_modular.yaml`);
|
||||
if (mainResponse.ok) {
|
||||
const content = await mainResponse.text();
|
||||
this.mainSchema = yaml.load(content) as SchemaDefinition;
|
||||
|
|
@ -675,7 +675,7 @@ class LinkMLSchemaService {
|
|||
// This prevents all 2000+ requests from being fired at once
|
||||
const slotTasks = slotFileNames.map((fileName: string) => async () => {
|
||||
const yamlName = fileName.endsWith('.yaml') ? fileName : `${fileName}.yaml`;
|
||||
const url = `${SCHEMA_BASE_PATH}/modules/slots/${yamlName}`;
|
||||
const url = `${schemaBasePath}/modules/slots/${yamlName}`;
|
||||
try {
|
||||
const response = await fetch(url);
|
||||
if (response.ok) {
|
||||
|
|
@ -743,7 +743,7 @@ class LinkMLSchemaService {
|
|||
const failedFiles: string[] = [];
|
||||
|
||||
const classPromises = knownClassFiles.map(async (fileName) => {
|
||||
const url = `${SCHEMA_BASE_PATH}/modules/classes/${fileName}.yaml`;
|
||||
const url = `${schemaBasePath}/modules/classes/${fileName}.yaml`;
|
||||
try {
|
||||
const response = await fetch(url);
|
||||
if (response.ok) {
|
||||
|
|
@ -834,7 +834,7 @@ class LinkMLSchemaService {
|
|||
});
|
||||
|
||||
const enumPromises = knownEnumFiles.map(async (fileName) => {
|
||||
const url = `${SCHEMA_BASE_PATH}/modules/enums/${fileName}.yaml`;
|
||||
const url = `${schemaBasePath}/modules/enums/${fileName}.yaml`;
|
||||
try {
|
||||
const response = await fetch(url);
|
||||
if (response.ok) {
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
import React, { useState, useEffect, useRef, useCallback, useMemo } from 'react';
|
||||
import debounce from 'lodash/debounce';
|
||||
import { useSearchParams } from 'react-router-dom';
|
||||
import { useLocation, useSearchParams } from 'react-router-dom';
|
||||
import ReactMarkdown from 'react-markdown';
|
||||
import remarkGfm from 'remark-gfm';
|
||||
import rehypeRaw from 'rehype-raw';
|
||||
|
|
@ -26,6 +26,8 @@ import {
|
|||
extractClasses,
|
||||
extractSlots,
|
||||
extractEnums,
|
||||
getSchemaBasePath,
|
||||
setSchemaBasePath,
|
||||
} from '../lib/linkml/schema-loader';
|
||||
import { linkmlSchemaService, type ClassExportInfo, type ClassImportInfo, type ClassDependencyCounts, type SlotDefinition, type SlotExportInfo, type SlotImportInfo } from '../lib/linkml/linkml-schema-service';
|
||||
import { useLanguage } from '../contexts/LanguageContext';
|
||||
|
|
@ -1246,7 +1248,25 @@ interface SchemaCategory {
|
|||
|
||||
const LinkMLViewerPage: React.FC = () => {
|
||||
const { language } = useLanguage();
|
||||
const t = (key: keyof typeof TEXT) => TEXT[key][language];
|
||||
const location = useLocation();
|
||||
const isParsimonyMode = location.pathname.startsWith('/parsimony');
|
||||
const schemaBasePath = isParsimonyMode ? '/schemas/20251121/linkml/parsimony' : '/schemas/20251121/linkml';
|
||||
const pageText = {
|
||||
...TEXT,
|
||||
sidebarTitle: isParsimonyMode
|
||||
? { nl: 'Parsimonie-schema\'s', en: 'Parsimony Schemas' }
|
||||
: TEXT.sidebarTitle,
|
||||
pageTitle: isParsimonyMode
|
||||
? { nl: 'Parsimonie-schemaviewer', en: 'Parsimony Schema Viewer' }
|
||||
: TEXT.pageTitle,
|
||||
noSchemasFound: isParsimonyMode
|
||||
? {
|
||||
nl: 'Geen parsimonie-schema\'s gevonden. Genereer eerst het manifest en voeg LinkML-bestanden toe.',
|
||||
en: 'No parsimony schemas found. Generate the manifest and add LinkML files first.',
|
||||
}
|
||||
: TEXT.noSchemasFound,
|
||||
};
|
||||
const t = (key: keyof typeof pageText) => pageText[key][language];
|
||||
|
||||
const [searchParams, setSearchParams] = useSearchParams();
|
||||
const [categories, setCategories] = useState<SchemaCategory[]>([]);
|
||||
|
|
@ -2115,7 +2135,7 @@ const LinkMLViewerPage: React.FC = () => {
|
|||
}, [navigateToClass, navigateToEnum, navigateToSlot]);
|
||||
|
||||
// Track if initialization has already happened (prevents re-init on URL param changes)
|
||||
const isInitializedRef = useRef(false);
|
||||
const initializedSchemaBasePathRef = useRef<string | null>(null);
|
||||
|
||||
// Handle URL parameters for deep linking (only used on initial mount)
|
||||
const handleUrlParams = useCallback((cats: SchemaCategory[], currentSearchParams: URLSearchParams) => {
|
||||
|
|
@ -2165,15 +2185,20 @@ const LinkMLViewerPage: React.FC = () => {
|
|||
}
|
||||
}, []);
|
||||
|
||||
// Initialize schema file list from manifest - RUNS ONLY ONCE on mount
|
||||
// Note: Does NOT depend on searchParams to prevent re-initialization when
|
||||
// custodian filter changes the URL. Deep linking for ?class= is handled
|
||||
// by reading searchParams directly inside the effect on initial mount only.
|
||||
// Initialize schema file list from manifest for the active schema root.
|
||||
useEffect(() => {
|
||||
// Skip if already initialized (prevents re-init on searchParams changes from filter)
|
||||
if (isInitializedRef.current) {
|
||||
if (initializedSchemaBasePathRef.current === schemaBasePath) {
|
||||
return;
|
||||
}
|
||||
|
||||
setSchemaBasePath(schemaBasePath);
|
||||
linkmlSchemaService.setSchemaBasePath(schemaBasePath);
|
||||
initializedSchemaBasePathRef.current = null;
|
||||
setCategories([]);
|
||||
setSelectedSchema(null);
|
||||
setSchema(null);
|
||||
setRawYaml(null);
|
||||
setError(null);
|
||||
|
||||
const initializeSchemas = async () => {
|
||||
setIsLoading(true);
|
||||
|
|
@ -2199,8 +2224,7 @@ const LinkMLViewerPage: React.FC = () => {
|
|||
setSelectedSchema(cats[0].files[0]);
|
||||
}
|
||||
|
||||
// Mark as initialized to prevent re-running
|
||||
isInitializedRef.current = true;
|
||||
initializedSchemaBasePathRef.current = schemaBasePath;
|
||||
} catch (err) {
|
||||
setError(t('failedToInit'));
|
||||
console.error(err);
|
||||
|
|
@ -2211,7 +2235,7 @@ const LinkMLViewerPage: React.FC = () => {
|
|||
|
||||
initializeSchemas();
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, []); // Empty deps - run only on mount
|
||||
}, [schemaBasePath]);
|
||||
|
||||
// Scroll to highlighted class when it changes
|
||||
useEffect(() => {
|
||||
|
|
@ -2225,7 +2249,7 @@ const LinkMLViewerPage: React.FC = () => {
|
|||
// Fetch schema manifest from dynamically generated JSON file
|
||||
const fetchSchemaManifest = async (): Promise<SchemaCategory[]> => {
|
||||
try {
|
||||
const response = await fetch('/schemas/20251121/linkml/manifest.json');
|
||||
const response = await fetch(`${getSchemaBasePath()}/manifest.json`);
|
||||
if (!response.ok) {
|
||||
throw new Error(`Failed to fetch manifest: ${response.status}`);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"generated": "2026-02-20T12:32:55.895Z",
|
||||
"generated": "2026-03-13T15:48:32.973Z",
|
||||
"schemaRoot": "/schemas/20251121/linkml",
|
||||
"totalFiles": 2187,
|
||||
"categoryCounts": {
|
||||
|
|
|
|||
29
schemas/20251121/linkml/parsimony/metadata.yaml
Normal file
29
schemas/20251121/linkml/parsimony/metadata.yaml
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/metadata
|
||||
name: heritage_custodian_parsimony_metadata
|
||||
title: Heritage Custodian Parsimony Ontology - Metadata
|
||||
description: >-
|
||||
Metadata root for the parsimonious LinkML package that will provide a
|
||||
conceptual facade over the engineering ontology in ../modules/.
|
||||
version: 0.1.0
|
||||
license: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
skos: http://www.w3.org/2004/02/skos/core#
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
pico: https://personsincontext.org/model#
|
||||
schema: http://schema.org/
|
||||
rico: https://www.ica.org/standards/RiC/ontology#
|
||||
dcterms: http://purl.org/dc/terms/
|
||||
rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
|
||||
rdfs: http://www.w3.org/2000/01/rdf-schema#
|
||||
owl: http://www.w3.org/2002/07/owl#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
ontology_layer:
|
||||
description: >-
|
||||
Annotation indicating whether a schema element belongs to the parsimonious
|
||||
conceptual layer or to a mapped engineering realization.
|
||||
range: string
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/Activity
|
||||
name: Activity
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/carried_out_by
|
||||
- ../slots/attested_in
|
||||
- ../slots/located_in
|
||||
- ../slots/occurred_on
|
||||
- ../slots/reconstructs
|
||||
- ../slots/situated_in_time
|
||||
- ../slots/marked_as
|
||||
classes:
|
||||
Activity:
|
||||
class_uri: prov:Activity
|
||||
description: Broad class for provenance-bearing actions, including retrieval, curation, and reconstruction.
|
||||
close_mappings:
|
||||
- crm:E7_Activity
|
||||
slots:
|
||||
- has_label_literal
|
||||
- carried_out_by
|
||||
- attested_in
|
||||
- located_in
|
||||
- occurred_on
|
||||
- reconstructs
|
||||
- situated_in_time
|
||||
- marked_as
|
||||
28
schemas/20251121/linkml/parsimony/modules/classes/Agent.yaml
Normal file
28
schemas/20251121/linkml/parsimony/modules/classes/Agent.yaml
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/Agent
|
||||
name: Agent
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
schema: http://schema.org/
|
||||
rico: https://www.ica.org/standards/RiC/ontology#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/designated_by
|
||||
- ../slots/typed_as
|
||||
classes:
|
||||
Agent:
|
||||
class_uri: prov:Agent
|
||||
description: Broad agent class used for people, organizations, or software agents active in provenance chains.
|
||||
close_mappings:
|
||||
- rico:Agent
|
||||
- schema:Person
|
||||
- schema:Organization
|
||||
narrow_mappings:
|
||||
- hc:Custodian
|
||||
slots:
|
||||
- has_label_literal
|
||||
- designated_by
|
||||
- typed_as
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/Classification
|
||||
name: Classification
|
||||
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/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/has_note_literal
|
||||
classes:
|
||||
Classification:
|
||||
class_uri: skos:Concept
|
||||
description: Broad conceptual type node used for classification, typology, and semantic narrowing.
|
||||
broad_mappings:
|
||||
- crm:E55_Type
|
||||
slots:
|
||||
- has_label_literal
|
||||
- has_note_literal
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/CustodialEntity
|
||||
name: CustodialEntity
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
schema: http://schema.org/
|
||||
rico: https://www.ica.org/standards/RiC/ontology#
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/has_note_literal
|
||||
- ../slots/has_uri_literal
|
||||
- ../slots/available_via
|
||||
- ../slots/accessed_under
|
||||
- ../slots/holds
|
||||
- ../slots/designated_by
|
||||
- ../slots/located_in
|
||||
- ../slots/organized_within
|
||||
- ../slots/has_provenance_note
|
||||
- ../slots/marked_as
|
||||
- ../slots/typed_as
|
||||
classes:
|
||||
CustodialEntity:
|
||||
class_uri: schema:Organization
|
||||
description: Broad conceptual class for a heritage custodian or custodial body.
|
||||
broad_mappings:
|
||||
- crm:E39_Actor
|
||||
- rico:Agent
|
||||
narrow_mappings:
|
||||
- hc:Custodian
|
||||
slots:
|
||||
- has_label_literal
|
||||
- has_note_literal
|
||||
- has_uri_literal
|
||||
- available_via
|
||||
- accessed_under
|
||||
- holds
|
||||
- designated_by
|
||||
- located_in
|
||||
- organized_within
|
||||
- has_provenance_note
|
||||
- marked_as
|
||||
- typed_as
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/Designation
|
||||
name: Designation
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
rico: https://www.ica.org/standards/RiC/ontology#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/has_uri_literal
|
||||
- ../slots/typed_as
|
||||
classes:
|
||||
Designation:
|
||||
class_uri: crm:E41_Appellation
|
||||
description: Broad concept for identifiers, names, codes, and appellations used to identify entities.
|
||||
narrow_mappings:
|
||||
- rico:Identifier
|
||||
slots:
|
||||
- has_label_literal
|
||||
- has_uri_literal
|
||||
- typed_as
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/Holding
|
||||
name: Holding
|
||||
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/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/has_note_literal
|
||||
- ../slots/available_via
|
||||
- ../slots/attested_in
|
||||
- ../slots/accessed_under
|
||||
- ../slots/included_in
|
||||
- ../slots/situated_in_time
|
||||
- ../slots/marked_as
|
||||
- ../slots/typed_as
|
||||
classes:
|
||||
Holding:
|
||||
class_uri: rico:RecordSet
|
||||
description: Broad conceptual class for a holding, record set, collection, or curated body of material.
|
||||
broad_mappings:
|
||||
- crm:E78_Curated_Holding
|
||||
narrow_mappings:
|
||||
- hc:CustodianCollection
|
||||
slots:
|
||||
- has_label_literal
|
||||
- has_note_literal
|
||||
- available_via
|
||||
- attested_in
|
||||
- accessed_under
|
||||
- included_in
|
||||
- situated_in_time
|
||||
- marked_as
|
||||
- typed_as
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/Observation
|
||||
name: Observation
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
pico: https://personsincontext.org/model#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/has_note_literal
|
||||
- ../slots/attested_in
|
||||
- ../slots/occurred_on
|
||||
- ../slots/has_provenance_note
|
||||
classes:
|
||||
Observation:
|
||||
class_uri: prov:Entity
|
||||
description: Evidence-bearing observation anchored in a source and usable for later reconstruction.
|
||||
narrow_mappings:
|
||||
- pico:PersonObservation
|
||||
- hc:CustodianObservation
|
||||
close_mappings:
|
||||
- crm:E73_Information_Object
|
||||
slots:
|
||||
- has_label_literal
|
||||
- has_note_literal
|
||||
- attested_in
|
||||
- has_provenance_note
|
||||
- occurred_on
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/PlaceContext
|
||||
name: PlaceContext
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
schema: http://schema.org/
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/has_uri_literal
|
||||
- ../slots/typed_as
|
||||
classes:
|
||||
PlaceContext:
|
||||
class_uri: schema:Place
|
||||
description: Broad place class for named locations used in custodial description and provenance.
|
||||
broad_mappings:
|
||||
- crm:E53_Place
|
||||
narrow_mappings:
|
||||
- hc:CustodianPlace
|
||||
slots:
|
||||
- has_label_literal
|
||||
- has_uri_literal
|
||||
- typed_as
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
# Parsimonious class modules
|
||||
|
||||
This directory will hold the small conceptual class set for the parsimonious ontology.
|
||||
|
||||
Planned scale: about 10 classes.
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/Reconstruction
|
||||
name: Reconstruction
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
pico: https://personsincontext.org/model#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/grounded_in
|
||||
- ../slots/derived_from_source
|
||||
- ../slots/realized_through
|
||||
- ../slots/situated_in_time
|
||||
- ../slots/typed_as
|
||||
classes:
|
||||
Reconstruction:
|
||||
class_uri: prov:Entity
|
||||
description: Conceptual entity reconstructed from one or more observations.
|
||||
narrow_mappings:
|
||||
- pico:PersonReconstruction
|
||||
related_mappings:
|
||||
- hc:CustodianNameConsensus
|
||||
- hc:CustodianLegalStatus
|
||||
- hc:CustodianPlace
|
||||
slots:
|
||||
- has_label_literal
|
||||
- grounded_in
|
||||
- derived_from_source
|
||||
- realized_through
|
||||
- situated_in_time
|
||||
- typed_as
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/class/SourceResource
|
||||
name: SourceResource
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
schema: http://schema.org/
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
dcterms: http://purl.org/dc/terms/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
- ../slots/has_label_literal
|
||||
- ../slots/has_uri_literal
|
||||
- ../slots/available_via
|
||||
- ../slots/typed_as
|
||||
classes:
|
||||
SourceResource:
|
||||
class_uri: schema:CreativeWork
|
||||
description: Broad conceptual class for a source, source file, archival object, or documentary carrier.
|
||||
broad_mappings:
|
||||
- crm:E73_Information_Object
|
||||
close_mappings:
|
||||
- dcterms:BibliographicResource
|
||||
narrow_mappings:
|
||||
- hc:CustodianSourceFile
|
||||
slots:
|
||||
- has_label_literal
|
||||
- has_uri_literal
|
||||
- available_via
|
||||
- typed_as
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# Parsimonious enum modules
|
||||
|
||||
This directory will hold only the enum files that remain necessary after semantic reduction.
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
# Parsimonious-engineering mapping modules
|
||||
|
||||
This directory will contain the explicit bridge between the parsimonious ontology and the engineering ontology in `../../../modules/`.
|
||||
|
||||
Use relative references from parsimonious modules back to the engineering package so the mapping remains self-documenting inside LinkML.
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/mappings/parsimony-engineering-bridge
|
||||
name: parsimony_engineering_bridge
|
||||
title: Parsimony to Engineering Bridge
|
||||
description: >-
|
||||
Mapping scaffold linking the parsimonious conceptual layer to the engineering
|
||||
ontology in ../../../modules/.
|
||||
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
|
||||
- ../classes/CustodialEntity
|
||||
- ../classes/Holding
|
||||
- ../classes/Observation
|
||||
- ../classes/Reconstruction
|
||||
- ../classes/PlaceContext
|
||||
- ../classes/SourceResource
|
||||
- ../classes/Designation
|
||||
- ../classes/Classification
|
||||
- ../../../modules/classes/Custodian
|
||||
- ../../../modules/classes/CustodianCollection
|
||||
- ../../../modules/classes/CustodianObservation
|
||||
- ../../../modules/classes/CustodianPlace
|
||||
- ../../../modules/slots/hold
|
||||
- ../../../modules/slots/identified_by
|
||||
comments:
|
||||
- >-
|
||||
CustodialEntity is a hypernym over engineering classes such as Custodian,
|
||||
CustodianArchive, MuseumArchive, MunicipalArchive, and related institutional
|
||||
specializations.
|
||||
- >-
|
||||
Holding is a hypernym over engineering classes such as
|
||||
CustodianCollection and multiple RecordSetType or archive holding classes.
|
||||
- >-
|
||||
Observation is a hypernym over engineering evidence classes such as
|
||||
CustodianObservation and similar source-attributed statements.
|
||||
- >-
|
||||
Reconstruction is a bridge concept for engineering reconstructed entities
|
||||
such as CustodianNameConsensus, CustodianLegalStatus, and CustodianPlace.
|
||||
- >-
|
||||
Parsimonious slots must be read together with engineering slots such as
|
||||
identified_by and hold, using broadMatch and narrowMatch semantics rather
|
||||
than assuming one-to-one equivalence.
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/mappings/parsimony-engineering-class-alignments
|
||||
name: parsimony_engineering_class_alignments
|
||||
title: Parsimonious to Engineering Class Alignments
|
||||
description: >-
|
||||
Detailed class-level bridge between parsimonious hypernyms and engineering
|
||||
realizations.
|
||||
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
|
||||
- ../classes/CustodialEntity
|
||||
- ../classes/Holding
|
||||
- ../classes/Observation
|
||||
- ../classes/Reconstruction
|
||||
- ../classes/SourceResource
|
||||
- ../classes/PlaceContext
|
||||
- ../classes/Designation
|
||||
- ../classes/Classification
|
||||
- ../../../modules/classes/Custodian
|
||||
- ../../../modules/classes/CustodianCollection
|
||||
- ../../../modules/classes/CustodianObservation
|
||||
- ../../../modules/classes/CustodianPlace
|
||||
- ../../../modules/classes/CustodianLegalStatus
|
||||
- ../../../modules/classes/CustodianNameConsensus
|
||||
- ../../../modules/classes/CustodianSourceFile
|
||||
comments:
|
||||
- >-
|
||||
CLASS ALIGNMENT: CustodialEntity -> Custodian is a narrow mapping. The
|
||||
parsimonious node stands above the engineering hub plus narrower institutional
|
||||
archive and custodian subtypes.
|
||||
- >-
|
||||
CLASS ALIGNMENT: Holding -> CustodianCollection is a narrow mapping.
|
||||
The parsimonious node should also absorb multiple archive-specific RecordSetType
|
||||
engineering classes as narrower realizations of one conceptual holding family.
|
||||
- >-
|
||||
CLASS ALIGNMENT: Observation -> CustodianObservation is a narrow mapping.
|
||||
Observation remains the evidence-level hypernym for source-attributed records.
|
||||
- >-
|
||||
CLASS ALIGNMENT: Reconstruction -> CustodianLegalStatus, CustodianNameConsensus,
|
||||
and CustodianPlace are narrow mappings. The parsimonious reconstruction node
|
||||
intentionally collapses multiple engineering reconstruction products.
|
||||
- >-
|
||||
CLASS ALIGNMENT: SourceResource -> CustodianSourceFile is a narrow mapping.
|
||||
The engineering class acts as a root source bundle, while the parsimonious class
|
||||
remains a broader documentary carrier concept.
|
||||
- >-
|
||||
CLASS ALIGNMENT: PlaceContext -> CustodianPlace is a narrow mapping. The
|
||||
engineering model adds reconstruction provenance and locality detail absent from
|
||||
the parsimonious layer.
|
||||
- >-
|
||||
CLASS ALIGNMENT: Designation bridges to engineering identifier-bearing
|
||||
structures through slots such as identified_by and has_name rather than a single
|
||||
exact engineering class.
|
||||
- >-
|
||||
CLASS ALIGNMENT: Classification bridges to engineering type classes and enums,
|
||||
including CustodianType and many domain-specific type collections.
|
||||
|
|
@ -0,0 +1,99 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/mappings/parsimony-engineering-slot-alignments
|
||||
name: parsimony_engineering_slot_alignments
|
||||
title: Parsimonious to Engineering Slot Alignments
|
||||
description: >-
|
||||
Detailed slot-level bridge showing how parsimonious predicates map to richer
|
||||
engineering slots.
|
||||
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/available_via
|
||||
- ../slots/accessed_under
|
||||
- ../slots/designated_by
|
||||
- ../slots/holds
|
||||
- ../slots/attested_in
|
||||
- ../slots/grounded_in
|
||||
- ../slots/derived_from_source
|
||||
- ../slots/realized_through
|
||||
- ../slots/included_in
|
||||
- ../slots/located_in
|
||||
- ../slots/marked_as
|
||||
- ../slots/organized_within
|
||||
- ../slots/reconstructs
|
||||
- ../slots/situated_in_time
|
||||
- ../slots/typed_as
|
||||
- ../slots/carried_out_by
|
||||
- ../../../modules/slots/derive_from
|
||||
- ../../../modules/slots/encompassed_by
|
||||
- ../../../modules/slots/generated_by
|
||||
- ../../../modules/slots/has_access_policy
|
||||
- ../../../modules/slots/has_status
|
||||
- ../../../modules/slots/hold
|
||||
- ../../../modules/slots/identified_by
|
||||
- ../../../modules/slots/has_source
|
||||
- ../../../modules/slots/observe
|
||||
- ../../../modules/slots/part_of
|
||||
- ../../../modules/slots/refer_to
|
||||
- ../../../modules/slots/temporal_extent
|
||||
comments:
|
||||
- >-
|
||||
SLOT ALIGNMENT: available_via is a broader parsimonious availability
|
||||
predicate
|
||||
that bridges to engineering URL, portal, and access-point slots without
|
||||
reproducing all delivery mechanics.
|
||||
- >-
|
||||
SLOT ALIGNMENT: holds is broader than engineering hold. The parsimonious slot
|
||||
should cover custody, stewardship, and holding relations that are split across
|
||||
multiple engineering slots and class contexts.
|
||||
- >-
|
||||
SLOT ALIGNMENT: designated_by is a broader parsimonious predicate covering
|
||||
names, identifiers, codes, and appellations. Engineering identified_by is a
|
||||
narrower hyponym used when the designation is expressed in operational form.
|
||||
- >-
|
||||
SLOT ALIGNMENT: attested_in is a parsimonious hypernym over engineering
|
||||
has_source and related provenance/documentation slots.
|
||||
- >-
|
||||
SLOT ALIGNMENT: grounded_in bridges to engineering derive_from,
|
||||
has_source, and observe patterns depending on whether the engineering model
|
||||
expresses derivation, observation target, or source bundle attachment.
|
||||
- >-
|
||||
SLOT ALIGNMENT: derived_from_source is the more general provenance bridge to
|
||||
engineering derive_from and has_source when the source is not modeled as a
|
||||
discrete observation.
|
||||
- >-
|
||||
SLOT ALIGNMENT: realized_through is the broader parsimonious predicate for
|
||||
process- or activity-based realization. Engineering generated_by is a
|
||||
narrower hyponym used in operational provenance chains.
|
||||
- >-
|
||||
SLOT ALIGNMENT: accessed_under is the parsimonious hypernym for access
|
||||
conditions, restrictions, rights, and policies. Engineering has_access_policy
|
||||
is a narrower hyponym within this broader conceptual predicate.
|
||||
- >-
|
||||
SLOT ALIGNMENT: marked_as is the broader parsimonious predicate for status or
|
||||
standing. Engineering has_status is a narrower hyponym carrying operational
|
||||
state values.
|
||||
- >-
|
||||
SLOT ALIGNMENT: located_in is broader than engineering place-related slots such
|
||||
as located_at, has_location, and locality-bearing reconstruction slots.
|
||||
- >-
|
||||
SLOT ALIGNMENT: organized_within and included_in bridge to engineering
|
||||
encompassed_by and part_of, depending on whether the containment is
|
||||
organizational, conceptual, or constituent.
|
||||
- >-
|
||||
SLOT ALIGNMENT: reconstructs is a parsimonious bridge between activities and
|
||||
reconstructed entities. In the engineering layer this semantics is often split
|
||||
across generated_by, generated, or refer_to patterns.
|
||||
- >-
|
||||
SLOT ALIGNMENT: situated_in_time is the broader parsimonious temporal
|
||||
placement predicate. Engineering temporal_extent is a narrower hyponym used
|
||||
for more explicit time-span modeling.
|
||||
- >-
|
||||
SLOT ALIGNMENT: typed_as is a hypernym over engineering has_type and many
|
||||
narrower enum-backed or type-class-backed patterns.
|
||||
- >-
|
||||
SLOT ALIGNMENT: carried_out_by is close to engineering conducted_by and related
|
||||
provenance slots, but remains intentionally generic in the parsimonious layer.
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/mappings/parsimony-engineering-type-bridge
|
||||
name: parsimony_engineering_type_bridge
|
||||
title: Parsimonious Type Bridge
|
||||
description: >-
|
||||
Bridge from the parsimonious Classification node to the main engineering type
|
||||
classes, enums, and typing predicates.
|
||||
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
|
||||
- ../classes/Classification
|
||||
- ../slots/typed_as
|
||||
- ../../../modules/classes/CustodianType
|
||||
- ../../../modules/classes/ArchiveOrganizationType
|
||||
- ../../../modules/enums/AgentTypeEnum
|
||||
- ../../../modules/slots/has_type
|
||||
comments:
|
||||
- >-
|
||||
TYPE BRIDGE: Classification is the parsimonious hypernym for engineering type
|
||||
assets modeled as SKOS-like classes, enums, and URI-valued typing slots.
|
||||
- >-
|
||||
Classification -> CustodianType is a narrow mapping: the engineering class
|
||||
carries the detailed custodian taxonomy and hierarchy management.
|
||||
- >-
|
||||
Classification -> ArchiveOrganizationType is a further narrow mapping for a
|
||||
domain-specific branch of the engineering type system.
|
||||
- >-
|
||||
Classification -> AgentTypeEnum is a related mapping rather than exact mapping,
|
||||
because the engineering enum is provenance-scoped and closed-world, while the
|
||||
parsimonious concept remains open and cross-domain.
|
||||
- >-
|
||||
typed_as -> has_type is a close mapping: both express classification, but the
|
||||
engineering slot supports many specialized aliases, enum-backed values, and
|
||||
CRM-oriented operational patterns.
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
# Parsimonious slot modules
|
||||
|
||||
This directory will hold the centralized slot definitions for the parsimonious ontology.
|
||||
|
||||
Planned scale: about 30 datatype slots and about 50 object slots.
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/accessed_under
|
||||
name: accessed_under
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
dcterms: http://purl.org/dc/terms/
|
||||
schema: http://schema.org/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
accessed_under:
|
||||
slot_uri: dcterms:accessRights
|
||||
description: States the conditions, rights, restrictions, or policy framework under which a resource may be accessed.
|
||||
range: string
|
||||
multivalued: true
|
||||
close_mappings:
|
||||
- schema:conditionsOfAccess
|
||||
narrow_mappings:
|
||||
- hc:has_access_policy
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/attested_in
|
||||
name: attested_in
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
dcterms: http://purl.org/dc/terms/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
attested_in:
|
||||
slot_uri: dcterms:source
|
||||
description: Links an entity, observation, or claim to a source in which it is attested or documented.
|
||||
range: SourceResource
|
||||
multivalued: true
|
||||
close_mappings:
|
||||
- prov:used
|
||||
narrow_mappings:
|
||||
- hc:has_source
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/available_via
|
||||
name: available_via
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
schema: http://schema.org/
|
||||
dcterms: http://purl.org/dc/terms/
|
||||
dcat: http://www.w3.org/ns/dcat#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
available_via:
|
||||
slot_uri: schema:url
|
||||
description: Indicates the page, service, portal, or endpoint through which a resource is made available.
|
||||
range: uri
|
||||
multivalued: true
|
||||
close_mappings:
|
||||
- dcat:accessURL
|
||||
related_mappings:
|
||||
- dcterms:identifier
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/carried_out_by
|
||||
name: carried_out_by
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
carried_out_by:
|
||||
slot_uri: prov:wasAssociatedWith
|
||||
description: Relates an activity or reconstruction to the responsible agent.
|
||||
range: Agent
|
||||
multivalued: true
|
||||
close_mappings:
|
||||
- crm:P14_carried_out_by
|
||||
narrow_mappings:
|
||||
- hc:conducted_by
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/derived_from_source
|
||||
name: derived_from_source
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
dcterms: http://purl.org/dc/terms/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
derived_from_source:
|
||||
slot_uri: prov:wasDerivedFrom
|
||||
description: Connects a semantic entity to the source or prior entity from which it is derived.
|
||||
range: uriorcurie
|
||||
multivalued: true
|
||||
broad_mappings:
|
||||
- prov:wasInfluencedBy
|
||||
related_mappings:
|
||||
- dcterms:source
|
||||
narrow_mappings:
|
||||
- hc:derive_from
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/designated_by
|
||||
name: designated_by
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
rico: https://www.ica.org/standards/RiC/ontology#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
designated_by:
|
||||
slot_uri: crm:P1_is_identified_by
|
||||
description: Connects an entity to a name, identifier, code, or appellation by which it is designated.
|
||||
range: Designation
|
||||
multivalued: true
|
||||
close_mappings:
|
||||
- rico:hasOrHadIdentifier
|
||||
narrow_mappings:
|
||||
- hc:identified_by
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/grounded_in
|
||||
name: grounded_in
|
||||
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:
|
||||
grounded_in:
|
||||
slot_uri: prov:wasDerivedFrom
|
||||
description: Connects a reconstruction, interpretation, or claim to the evidential basis on which it is grounded.
|
||||
range: Observation
|
||||
multivalued: true
|
||||
broad_mappings:
|
||||
- prov:wasInfluencedBy
|
||||
narrow_mappings:
|
||||
- prov:hadPrimarySource
|
||||
- hc:derive_from
|
||||
- hc:observe
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/has_label_literal
|
||||
name: has_label_literal
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
rdfs: http://www.w3.org/2000/01/rdf-schema#
|
||||
skos: http://www.w3.org/2004/02/skos/core#
|
||||
schema: http://schema.org/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
has_label_literal:
|
||||
slot_uri: rdfs:label
|
||||
description: Primary human-readable label literal for a semantic entity or classification.
|
||||
range: string
|
||||
multivalued: true
|
||||
exact_mappings:
|
||||
- skos:prefLabel
|
||||
- schema:name
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/has_note_literal
|
||||
name: has_note_literal
|
||||
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#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
has_note_literal:
|
||||
slot_uri: schema:description
|
||||
description: Free-text note used for concise conceptual documentation.
|
||||
range: string
|
||||
multivalued: true
|
||||
close_mappings:
|
||||
- skos:note
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/has_provenance_note
|
||||
name: has_provenance_note
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
dcterms: http://purl.org/dc/terms/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
has_provenance_note:
|
||||
slot_uri: dcterms:provenance
|
||||
description: Concise provenance note for the parsimonious layer when full provenance structures remain engineering-only.
|
||||
range: string
|
||||
multivalued: true
|
||||
related_mappings:
|
||||
- prov:wasDerivedFrom
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/has_uri_literal
|
||||
name: has_uri_literal
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
schema: http://schema.org/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
has_uri_literal:
|
||||
slot_uri: schema:url
|
||||
description: Canonical URI or web address used to identify or dereference a concept.
|
||||
range: uri
|
||||
multivalued: true
|
||||
17
schemas/20251121/linkml/parsimony/modules/slots/holds.yaml
Normal file
17
schemas/20251121/linkml/parsimony/modules/slots/holds.yaml
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/holds
|
||||
name: holds
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
rico: https://www.ica.org/standards/RiC/ontology#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
holds:
|
||||
slot_uri: rico:isOrWasHolderOf
|
||||
description: Relates a custodian or agent concept to a holding concept it holds or held.
|
||||
range: Holding
|
||||
multivalued: true
|
||||
narrow_mappings:
|
||||
- hc:hold
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/included_in
|
||||
name: included_in
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
dcterms: http://purl.org/dc/terms/
|
||||
schema: http://schema.org/
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
included_in:
|
||||
slot_uri: dcterms:isPartOf
|
||||
description: Relates an entity to a larger whole, set, or framework within which it is included.
|
||||
range: uriorcurie
|
||||
multivalued: true
|
||||
close_mappings:
|
||||
- schema:isPartOf
|
||||
narrow_mappings:
|
||||
- hc:partOf
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
id: https://nde.nl/ontology/hc/parsimony/slot/located_in
|
||||
name: located_in
|
||||
prefixes:
|
||||
linkml: https://w3id.org/linkml/
|
||||
hc: https://nde.nl/ontology/hc/
|
||||
schema: http://schema.org/
|
||||
crm: http://www.cidoc-crm.org/cidoc-crm/
|
||||
prov: http://www.w3.org/ns/prov#
|
||||
default_prefix: hc
|
||||
imports:
|
||||
- linkml:types
|
||||
slots:
|
||||
located_in:
|
||||
slot_uri: schema:location
|
||||
description: Places a concept or activity in a named place context.
|
||||
range: PlaceContext
|
||||
multivalued: true
|
||||
close_mappings:
|
||||
- crm:P53_has_former_or_current_location
|
||||
- prov:atLocation
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue