SKOS Vocabulary Guidelines
Introduction
This page is for people writing a vocabulary file. It lists the guidelines and best practices for creating SKOS vocabularies within LINCS, and expands on the Implementation Requirements in the policy.
For examples of SKOS vocabularies created and hosted by LINCS, see the Vocabulary Browser.
SKOS and CIDOC CRM
LINCS models vocabularies using both SKOS (Simple Knowledge Organization System) and the CIDOC CRM reference ontology:
- SKOS structures the vocabulary itself. Terms are declared as
skos:Concept, grouped into askos:ConceptScheme, and related to one another withskos:broader,skos:narrower, andskos:related. - CIDOC CRM connects the vocabulary to the data. The same terms are also declared as
crm:E55_Type, so that entities in LINCS datasets can point at them withcrm:P2_has_type, and hierarchy is mirrored withcrm:P127_has_broader_termandcrm:P127i_has_narrower_term.
Most terms in LINCS-hosted vocabularies therefore carry both declarations, and both sets of hierarchy properties. The Vocabulary Browser reads only the SKOS layer; ResearchSpace and the dataset graphs use the CIDOC CRM layer.
Anatomy of a LINCS SKOS Vocabulary
The SKOS data model consists of concepts that make up a concept scheme. Concepts can be assigned labels, notations, and documentation; linked to other concepts through semantic relationship properties; and mapped to concepts in other vocabularies with mapping properties.
| Vocabulary part | Definition |
|---|---|
| Concept Scheme | A collection of one or more SKOS concepts, and the broadest organizing unit used within LINCS-hosted vocabularies. All concepts in a vocabulary link back to its Concept Scheme with skos:inScheme. The majority of a vocabulary’s metadata is declared here. See the SKOS Primer. |
| Publisher | The group or person publishing the vocabulary, recorded as part of the vocabulary metadata. LINCS-created vocabularies use http://id.lincsproject.ca/rtvXeZk0E3M. |
| Dataset | A VoID Dataset represents a collection of RDF triples about a certain topic, allowing statements to be made about an entire dataset and all its triples. A concept scheme is located within a dataset. |
| Top Concept | The broadest categories within a collection. They often, but do not always, contain narrower concepts. Top Concepts are declared with skos:Concept and use skos:topConceptOf to relate to the Concept Scheme. |
| Concepts | A single idea or unit of thought, declared with skos:Concept. Every concept except a Top Concept must link to a broader concept. SKOS does not distinguish classes from instances the way ontologies do, but similar naming conventions apply: URIs for broader concepts use camel case, narrower concepts are lowercase. |
| Broader / narrower concepts | skos:broader and skos:narrower express direct hierarchical links between concepts. A narrower concept with no direct link to its Top Concept must use crm:P2_has_type to relate to that Top Concept. |
Required and Recommended Properties
| Component | Required | Optional |
|---|---|---|
| Concept Scheme | Concept Scheme URI (e.g. http://id.lincsproject.ca/ii); rdf:type, declared as skos:ConceptScheme, crm:E28_Conceptual_Object, and http://purl.org/vocommons/voaf#Vocabulary; void:inDataset; dcterms:created; rdfs:label; skos:prefLabel; dcterms:publisher; dcterms:creator; skos:hasTopConcept | rdfs:comment; dcterms:contributor; skos:scopeNote; dcterms:description; dcterms:license; dcterms:modified; dcterms:subject; dcterms:title |
| Top Concept | Namespace (e.g. ii:IllnessInjury); declaration as skos:Concept and crm:E55_Type; rdfs:isDefinedBy; skos:narrower; crm:P127i_has_narrower_term; rdfs:label; skos:prefLabel; skos:inScheme; skos:topConceptOf | rdfs:seeAlso; skos:altLabel; skos:definition; skos:note; skos:related; dcterms:modified. Note that dcterms:created is not used on Top Concepts. |
| Class-based concepts | Namespace (e.g. cwrc:feminism); declaration as skos:Concept and crm:E55_Type; rdfs:label; skos:prefLabel; skos:broader; crm:P127_has_broader_term; skos:narrower; crm:P127i_has_narrower_term; skos:inScheme | dcterms:references; skos:altLabel; skos:closeMatch; skos:exactMatch; skos:related; skos:definition; skos:note; rdfs:comment; rdfs:seeAlso; dcterms:modified; dcterms:created |
| Instance-based concepts | Namespace; declaration as skos:Concept and crm:E55_Type; rdfs:label; skos:prefLabel; skos:broader; crm:P127_has_broader_term; skos:inScheme | crm:E89_Propositional_Object as an additional type; dcterms:subject; dcterms:references; rdfs:comment; rdfs:seeAlso; skos:altLabel; skos:closeMatch; skos:exactMatch; skos:related; skos:narrower; crm:P127i_has_narrower_term; skos:definition; skos:note; dcterms:modified; dcterms:created |
Writing Definitions
- Avoid absolutes. Use hedging language so that a definition is not too rigid and can accommodate edge cases. The policy gives a worked example under Implementation Requirements.
- Provide labels in English and French wherever possible, and definitions in both languages where you can. LINCS strives to ensure hosted vocabularies are bilingual.
skos:prefLabelvalues are unique to a vocabulary and are based on the value ofrdfs:label.- Escape nested quotation marks with backslashes. A definition reading
Each commonplace book is unique to its creator's particular interests. "Commonplace" is a translation of the Latin term locus communis.is written in the vocabulary file as"Each commonplace book is unique to its creator's particular interests. \"Commonplace\" is a translation of the Latin term locus communis."
SKOS Integrity Conditions
Integrity conditions are statements used to establish whether given data are consistent with the SKOS data model. They promote interoperability and should be followed to prevent inconsistencies. For the full set, see the SKOS Reference; the conditions most relevant to LINCS-hosted vocabularies concern semantic relation properties, mapping properties, and label properties.
Disjoint below means concepts with no members in common.
Semantic Relations
If two concepts are related, one cannot have the other as a broader or narrower term:
<A> skos:related <B> ;
skos:broader <B> .
<A> skos:narrower <B> ;
skos:related <C> .
<B> skos:narrower <C> .
skos:related is disjoint with skos:broaderTransitive:
<A> skos:broaderTransitive <C> ;
skos:related <C> .
When declaring a semantic relationship between two concepts, assert the corresponding property on both. If <A> skos:broader <B>, then also assert <B> skos:narrower <A>.
Mapping Properties
A concept can only have one mapping link for any one concept. Clashes between associative (skos:relatedMatch), equivalence (skos:closeMatch, skos:exactMatch), and hierarchical (skos:broadMatch, skos:narrowMatch) mapping links are not allowed:
<A> skos:relatedMatch <B> ;
skos:closeMatch <B> .
<A> skos:broadMatch <B> ;
skos:relatedMatch <B> .
<A> skos:exactMatch <B> ;
skos:broadMatch <B> .
<A> skos:exactMatch <B> ;
skos:relatedMatch <B> .
<A> skos:broadMatch <B> .
<B> skos:broadMatch <C> .
<A> skos:relatedMatch <C> .
Labels
A concept can have no more than one skos:prefLabel per language tag:
<Love> skos:prefLabel "love"@en ;
skos:prefLabel "adoration"@en .
skos:prefLabel, skos:altLabel, and skos:hiddenLabel cannot have the same value for a given language tag:
<Love> skos:prefLabel "love"@en ;
skos:altLabel "love"@en .
Concept Schemes and Collections
skos:ConceptScheme is disjoint with skos:Concept and skos:Collection:
<A> a skos:ConceptScheme ;
a skos:Concept .
Semantic relations apply only to skos:Concept. They cannot be applied to skos:Collection or skos:ConceptScheme:
<A> skos:narrower <B> .
<B> rdf:type skos:Collection .
Validating Your SKOS Vocabulary
Check your syntax and structure with:
- ttl.summerofcode.be for Turtle syntax validation
- ShExValidata for shape validation
- SKOS Testing Tool for SKOS-specific quality checks
Example
A concept from the Occupation vocabulary, as it is declared in the published vocabulary:
occupation:stationer
a skos:Concept, crm:E55_Type ;
dcterms:created "2023-08-25"^^xsd:date ;
rdfs:label "stationer"@en ;
skos:prefLabel "stationer"@en ;
skos:definition "A person who sells books; a bookseller; (in the Middle Ages) esp. one licensed by a university. Occasionally also: a printer, a bookbinder. (OED 1a)"@en ;
skos:inScheme <http://id.lincsproject.ca/occupation> .
References and Resources
- W3C, “SKOS Simple Knowledge Organization System Reference.” https://www.w3.org/TR/skos-reference/
- W3C, “SKOS Simple Knowledge Organization System Primer.” https://www.w3.org/TR/skos-primer/
- W3C, “Describing Linked Datasets with the VoID Vocabulary.” https://www.w3.org/TR/void/
- W3C, “RDF 1.1 Turtle: Terse RDF Triple Language.” https://www.w3.org/TR/turtle/
- CIDOC CRM Special Interest Group, “CIDOC Conceptual Reference Model.” https://www.cidoc-crm.org/
- SKOS Testing Tool, for validating a SKOS vocabulary. https://skos-play.sparna.fr/skos-testing-tool/
Document Details
Version: 0.1 (draft)
Authors: [To be named]
Contributors: the LINCS Project team
Last Updated: 2026-08-15
Released: [Unreleased]