What may be changed on an existing concept?¶
A concept in Voc4Cat can be improved after it has been accepted: definitions get sharper, wrong parents get corrected, mappings get added. What cannot change is the meaning its identifier carries. This page states which changes fall on which side, and from when on.
The rule¶
Important
Once a concept is in Voc4Cat, the meaning its IRI carries is fixed. Everything else stays improvable.
Voc4Cat is a terminology, not an ontology or a knowledge graph. What it offers is the concept with an identifier, a label, and an agreed definition. The hierarchy, the collections and the mappings organize those concepts so they can be found; they are curation rather than axioms that annotated data inherits.
This drives the rules for changing concept labels vs. relations:
Change what a concept denotes, and every dataset annotated with it silently becomes wrong. Nothing warns anyone, because the IRI did not change.
Move a concept to a better parent, and no dataset becomes wrong. Hierarchical queries return something different, which is the point of the correction.
To test your change request, you can ask:
Would data that someone has already annotated with this IRI still be about the same thing after my change?
If yes, it is an improvement and allowed. If no, you are giving an existing identifier a new meaning: deprecate the concept and add a new one instead.
What may be changed, and when¶
A concept is in Voc4Cat as soon as the pull request that introduced it has been merged. From that moment it is part of the development version and it may appear in any later release.
Change class |
Where you edit it |
New in your pull request |
Already in Voc4Cat |
|---|---|---|---|
Identity (what the IRI denotes) |
Concepts: Preferred Label, Definition |
free |
not allowed; deprecate it and add a new concept |
Wording (same meaning, better phrasing) |
Concepts: Preferred Label, Definition |
free |
allowed via PR |
Parent relations (placement in the hierarchy) |
Concepts: Parent IRIs |
free |
allowed via PR |
External mappings |
Mappings: Related, Close, Exact, Narrower, Broader Matches |
free |
allowed via PR |
Collection membership |
Concepts: Member of collection(s), Member of ordered collection # position |
free |
allowed via PR |
Collection nesting |
Collections: Parent Collection IRIs |
free |
allowed via PR |
Collection identity (what a collection IRI denotes) |
Collections: Preferred Label, Definition |
free |
not allowed; same rule as for concepts |
Additive (more labels, translations, notes) |
Concepts: Alternate Labels, Change Note, Editorial Note; one row per language |
free |
allowed via PR |
Deprecation |
Concepts: Obsoletion reason, dct:isReplacedBy |
not needed; correct it instead |
allowed via PR |
Deletion (removing the row) |
— |
free |
not allowed; rejected automatically |
What the three verdicts mean:
free: Change it in the pull request you are working on. The concept has not been published yet, so nobody can be relying on it.
allowed via PR: Submit the change like any other contribution, in its own pull request. A curator reviews it.
not allowed: The change will be rejected. The table names what to do instead.
Note
A release does not lock or unlock anything; the rules above apply from the merge onwards. With Voc4Cat consumers can pick their own trade-off between stability and being up to date: pin to a dated release, to the latest release or to the development version.
What counts as the same meaning¶
The Preferred Label is not frozen; the concept behind it is.
Change |
Allowed? |
Why |
|---|---|---|
Fixing a spelling, or promoting the more common term for the same thing to Preferred Label |
yes |
Same concept, better wording. |
Rewriting a vague definition so that it says the same thing more precisely |
yes |
The set of things covered does not move. |
Narrowing a definition so that cases it used to cover are now excluded |
no |
Data annotated under the wider reading becomes wrong unnoticed. |
Relabelling external standard concentration as internal standard concentration |
no |
A different substance, and therefore a different concept. |
The last row is a real request (issue #280): leave the existing concept alone and add a new one if the new meaning is needed.
Correcting a parent¶
Correcting a wrong parent is allowed at every stage, and it is expected.
Changing skos:broader does not change what the IRI denotes; it changes where the concept sits.
In Voc4Cat skos:broader expresses IS-A relations and nothing else.
A quick test whenever you set a parent: is my concept a kind of its parent, or a property of its parent?
If it is a property, the parent is wrong.
The full reasoning, including how to express HAS-A and PART-OF instead, is in Hierarchies, Relations, and Collections.
Deprecating a concept¶
Concepts are never deleted once they are in Voc4Cat, because the IRI has to keep resolving for everyone who has used it. A concept that should no longer be used is deprecated: it stays in the vocabulary, marked as obsolete, and points at a replacement where there is one.
On the concept’s row in the Concepts sheet, Obsoletion reason is a dropdown offering six choices:
The concept is not clearly defined and usage has been inconsistent.
This concept was added in error.
More specific concepts were created.
This concept was converted to a collection.
The meaning of the concept is ambiguous.
Lack of evidence that this function/process/component exists.
Example: deprecating a duplicate
voc4cat:0009001 turns out to duplicate the older voc4cat:0009002 (IRIs invented for the example). On its row:
Column |
Value |
|---|---|
Obsoletion reason |
This concept was added in error. |
dct:isReplacedBy |
|
The pipeline sets owl:deprecated to true and records the reason as a skos:historyNote.
The concept keeps its IRI and stays resolvable; consumers see that it is obsolete and where to go instead.
Caution
No concept in Voc4Cat carries owl:deprecated yet.
If you are the first to use it, check the resulting Turtle in the pull request artifacts and report anything unexpected as an issue.
Collections are deprecated in the same way, using the Obsoletion reason and dct:isReplacedBy columns of the Collections sheet.