Schemas¶
Technical specifications for configuration and xlsx template formats.
Configuration (idranges.toml)¶
The idranges.toml file is the central configuration for vocabulary projects.
It defines metadata, settings, and contributor ID ranges for one or more vocabluaries.
This general information is specified via a configuration file, because it should not be editable via xlsx.
Structure overview¶
config_version = "v1.0" # Required
single_vocab = true # Optional (default: true)
[vocabs.VOCAB_NAME]
id_length = 6 # Required
permanent_iri_part = "..." # Required
# ConceptScheme metadata
vocabulary_iri = "..." # Required
title = "..." # Required
description = "..." # Required
created_date = "YYYY-MM-DD" # Required
creator = "..." # Required
repository = "..." # Required
# Optional metadata
prefix = "..."
publisher = "..."
custodian = "..."
homepage = "..."
catalogue_pid = "..."
documentation = "..."
issue_tracker = "..."
helpdesk = "..."
conforms_to = "..."
[vocabs.VOCAB_NAME.checks] # Required section
allow_delete = false
[vocabs.VOCAB_NAME.prefix_map] # Required section
prefix = "namespace"
[[vocabs.VOCAB_NAME.id_range]]
first_id = 1
last_id = 1000
gh_name = "username"
orcid = "0000-0000-0000-0000" # Optional
name = "Name" # Optional
ror_id = "..." # Optional
General settings¶
Field |
Required |
Description |
|---|---|---|
|
Yes |
Must be |
|
No |
|
Vocabulary settings¶
Under [vocabs.VOCAB_NAME]:
Field |
Required |
Description |
|---|---|---|
|
Yes |
Number of digits in concept IDs (e.g., |
|
Yes |
Base IRI for concept identifiers |
ConceptScheme metadata¶
These fields define vocabulary metadata shown in the Concept Scheme sheet.
Required fields:
Field |
Description |
SKOS/RDF |
|---|---|---|
|
IRI identifying the vocabulary |
skos:ConceptScheme |
|
Human-readable name |
skos:prefLabel |
|
What the vocabulary covers |
skos:definition |
|
Creation date (YYYY-MM-DD) |
dct:created |
|
Creators: name(s) with identifier(s), newline-separated |
dct:creator |
|
Source repository URL |
- |
Optional fields:
Field |
Description |
SKOS/RDF |
|---|---|---|
|
Preferred prefix for CURIEs |
- |
|
Publishers: name(s) with identifier(s), newline-separated |
dct:publisher |
|
Custodians: name(s) with identifier(s), newline-separated |
- |
|
Public website URL |
foaf:homepage |
|
DOI or persistent identifier |
dct:identifier |
|
Documentation URL |
- |
|
Issue tracker URL |
- |
|
Helpdesk URL |
- |
|
SHACL profile URL |
dct:conformsTo |
|
Jinja template for provenance URLs |
- |
|
Auto-generated if empty from created_date and creator |
skos:historyNote |
|
Path to local SHACL profile file (relative to idranges.toml) |
- |
Creator and contributor format¶
For creator, publisher, and custodian fields, use multi-line format with name and identifier:
creator = """
Alice Smith https://orcid.org/0000-0001-2345-6789
Bob Jones https://orcid.org/0000-0002-3456-7890
"""
publisher = "NFDI4Cat Consortium https://w3id.org/nfdi4cat/"
custodian = """
Vocabulary Curator Group https://github.com/orgs/example/teams/curators
"""
Prefix map (required)¶
Define namespace prefixes for CURIE expansion:
[vocabs.myvocab.prefix_map]
myvoc = "https://example.org/myvocab_"
skos = "http://www.w3.org/2004/02/skos/core#"
Checks configuration (required)¶
Configure validation behavior:
[vocabs.myvocab.checks]
# Allow concept deletion (useful for CI pipelines)
allow_delete = false
ID ranges¶
ID ranges allocate concept ID blocks to contributors:
[[vocabs.myvocab.id_range]]
first_id = 1
last_id = 5000
gh_name = "contributor1"
name = "First Contributor" # optional
orcid = "0000-0001-2345-6789"
ror_id = "https://ror.org/012345678" # optional
[[vocabs.myvocab.id_range]]
first_id = 5001
last_id = 6000
gh_name = "contributor2"
orcid = "0000-0002-3456-7890"
ID range fields:
Field |
Required |
Description |
|---|---|---|
|
Yes |
First ID in range (inclusive) |
|
Yes |
Last ID in range (inclusive) |
|
Yes* |
GitHub username |
|
Yes* |
ORCID identifier (without URL prefix) |
|
No |
Human-readable name |
|
No |
ROR identifier for institution |
*At least one of gh_name or orcid is required.
Complete example¶
config_version = "v1.0"
single_vocab = true
[vocabs.voc4cat]
id_length = 7
permanent_iri_part = "https://w3id.org/nfdi4cat/voc4cat_"
# ConceptScheme metadata
vocabulary_iri = "https://w3id.org/nfdi4cat/voc4cat"
prefix = "voc4cat"
title = "Voc4Cat - A SKOS vocabulary for Catalysis."
description = """The Voc4Cat vocabulary is a collection of concepts from the field
of catalysis and related disciplines."""
created_date = "2023-06-29"
creator = """
David Linke https://orcid.org/0000-0002-5898-1820
Nikolaos Moustakas https://orcid.org/0000-0002-6242-2167
"""
publisher = "NFDI4Cat Consortium https://w3id.org/nfdi4cat/"
custodian = """
Voc4Cat curator group https://github.com/orgs/nfdi4cat/teams/voc4cat-curators
"""
repository = "https://github.com/nfdi4cat/voc4cat"
homepage = "https://nfdi4cat.github.io/voc4cat/"
catalogue_pid = "https://doi.org/10.5281/zenodo.8313340"
documentation = "https://nfdi4cat.github.io/voc4cat/"
issue_tracker = "https://github.com/nfdi4cat/voc4cat/issues"
conforms_to = "https://linked.data.gov.au/def/vocpub/validator/4.7"
[vocabs.voc4cat.checks]
allow_delete = false
[vocabs.voc4cat.prefix_map]
voc4cat = "https://w3id.org/nfdi4cat/voc4cat_"
[[vocabs.voc4cat.id_range]]
first_id = 1
last_id = 5000
gh_name = "nmoust"
name = "Nikolaos Moustakas"
orcid = "0000-0002-6242-2167"
ror_id = "https://ror.org/029hg0311"
[[vocabs.voc4cat.id_range]]
first_id = 5001
last_id = 6000
gh_name = "dalito"
name = "David Linke"
orcid = "0000-0002-5898-1820"
ror_id = "https://ror.org/029hg0311"
Tips¶
Match names: The vocabulary section name (e.g.,
vocabs.voc4cat) should match your xlsx/ttl filenamePlan ID ranges: Allocate generous ranges to avoid needing to add more later
Use ORCIDs: They provide persistent identification for contributors
Keep descriptions updated: The description appears in generated documentation
Excel/xlsx template (v1.0)¶
Template version: v1.0.rev-2025-12a
The voc4cat v1.0 xlsx vocabularies contain six sheets for entering and viewing vocabulary data.
Sheets overview¶
Sheet |
Purpose |
Editable |
|---|---|---|
Concept Scheme |
Vocabulary metadata |
Read-only |
Concepts |
Concept definitions |
Yes |
Collections |
Groupings of concepts |
Yes |
Mappings |
Links to external vocabularies |
Yes |
ID Ranges |
Contributor ID allocations |
Read-only |
Prefixes |
Namespace prefix definitions |
Read-only |
Any changes in read-only sheets will be ignored.
Concept Scheme sheet¶
This sheet displays vocabulary metadata from your idranges.toml configuration and dynamically generated data.
It is read-only in xlsx. Edit the configuration file to change these values.
Concepts sheet¶
The main sheet where you define vocabulary concepts. Each row represents one concept in one language.
Required columns (marked with *):
Column |
Description |
SKOS mapping |
Example |
|---|---|---|---|
Concept IRI* |
Unique identifier |
- |
|
Language Code* |
ISO language code |
- |
|
Preferred Label* |
Main name |
skos:prefLabel |
|
Definition* |
What the concept means |
skos:definition |
|
Optional columns:
Column |
Description |
SKOS mapping |
|---|---|---|
Alternate Labels |
Synonyms (comma-separated) |
skos:altLabel |
Parent IRIs |
Broader concepts (comma-separated) |
skos:broader |
Member of collection(s) |
Collection memberships (comma-separated) |
skos:member |
Member of ordered collection # position |
Position in ordered collection |
- |
Provenance |
Origin of concept (read-only) |
dct:provenance |
Change Note |
Documentation of changes |
skos:changeNote |
Editorial Note |
Internal notes |
skos:editorialNote |
Obsoletion reason |
Why deprecated |
owl:deprecated |
Influenced by IRIs |
Related external concepts (comma-separated) |
prov:wasInfluencedBy |
Source Vocab IRI or URL |
Original source |
prov:hadPrimarySource |
Source Vocab License |
License of source |
dct:license |
Source Vocab Rights Holder |
Rights holder of source |
dct:rightsHolder |
Multi-language support:
To define a concept in multiple languages, create one row per language with the same Concept IRI:
Concept IRI |
Language Code |
Preferred Label |
Definition |
|---|---|---|---|
voc4cat:0001001 |
en |
Catalyst |
A substance that increases… |
voc4cat:0001001 |
de |
Katalysator |
Ein Stoff, der die… |
Hierarchies:
Express parent-child relationships using the “Parent IRIs” column:
Concept IRI |
Preferred Label |
Parent IRIs |
|---|---|---|
voc4cat:0001001 |
Catalyst |
|
voc4cat:0001002 |
Heterogeneous catalyst |
voc4cat:0001001 |
voc4cat:0001003 |
Homogeneous catalyst |
voc4cat:0001001 |
Multiple parents are supported (comma-separated).
Deprecating concepts:
To mark a concept as obsolete, select a reason from the “Obsoletion reason” dropdown:
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.
Deprecated concept are marked in RDF with owl:deprecated.
Collections sheet¶
Collections group related concepts together without implying hierarchy. Members are assigned to collections in the Concepts sheet via the “Member of collection(s)” column.
Column |
Description |
SKOS mapping |
Default |
|---|---|---|---|
Collection IRI* |
Unique identifier for the collection |
- |
|
Language Code* |
ISO language code |
- |
|
Preferred Label* |
Name of the collection |
skos:prefLabel |
|
Definition* |
What the collection contains |
skos:definition |
|
Parent Collection IRIs |
Nest collections within other collections (comma-separated) |
skos:member |
|
Ordered? |
“Yes” for ordered collection, blank for unordered |
- |
No |
Change Note |
Documentation of changes |
skos:changeNote |
|
Editorial Note |
Internal notes |
skos:editorialNote |
|
Obsoletion reason |
Why deprecated |
owl:deprecated |
*Required columns are marked with *.
Mappings sheet¶
Link your concepts to terms in other vocabularies.
Column |
Description |
SKOS mapping |
|---|---|---|
Concept IRI* |
Your concept |
- |
Related Matches |
Loosely related external concepts (comma-separated) |
skos:relatedMatch |
Close Matches |
Similar but not identical (comma-separated) |
skos:closeMatch |
Exact Matches |
Semantically equivalent (comma-separated) |
skos:exactMatch |
Narrower Matches |
More specific external concepts (comma-separated) |
skos:narrowMatch |
Broader Matches |
More general external concepts (comma-separated) |
skos:broadMatch |
Editorial Note |
Internal notes (not exported to RDF) |
- |
ID Ranges sheet¶
Read-only sheet showing which concept ID ranges are allocated to each contributor.
This information comes mainly from the idranges.toml configuration but is updated with on the current usage of IDs.
Prefixes sheet¶
Read-only sheet showing namespace prefix mappings for CURIE expansion.
The prefixes come the idranges.toml configuration enriched with the default prefixes from rdflib.
Data formats¶
IRIs: Full IRI or CURIE (
prefix:id)Language codes: ISO 639-1 (
en,de)Dates: ISO 8601 (
YYYY-MM-DD)
Tips¶
Use CURIEs: Write
voc4cat:0001234instead of full IRIs for readabilitySave before converting: Make sure to save your xlsx file before running
voc4cat convert