Skip to main content

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 a skos:ConceptScheme, and related to one another with skos:broader, skos:narrower, and skos: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 with crm:P2_has_type, and hierarchy is mirrored with crm:P127_has_broader_term and crm: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 partDefinition
Concept SchemeA 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.
PublisherThe group or person publishing the vocabulary, recorded as part of the vocabulary metadata. LINCS-created vocabularies use http://id.lincsproject.ca/rtvXeZk0E3M.
DatasetA 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 ConceptThe 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.
ConceptsA 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 conceptsskos: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.
ComponentRequiredOptional
Concept SchemeConcept 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:hasTopConceptrdfs:comment; dcterms:contributor; skos:scopeNote; dcterms:description; dcterms:license; dcterms:modified; dcterms:subject; dcterms:title
Top ConceptNamespace (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:topConceptOfrdfs:seeAlso; skos:altLabel; skos:definition; skos:note; skos:related; dcterms:modified. Note that dcterms:created is not used on Top Concepts.
Class-based conceptsNamespace (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:inSchemedcterms:references; skos:altLabel; skos:closeMatch; skos:exactMatch; skos:related; skos:definition; skos:note; rdfs:comment; rdfs:seeAlso; dcterms:modified; dcterms:created
Instance-based conceptsNamespace; declaration as skos:Concept and crm:E55_Type; rdfs:label; skos:prefLabel; skos:broader; crm:P127_has_broader_term; skos:inSchemecrm: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:prefLabel values are unique to a vocabulary and are based on the value of rdfs: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:

Invalid
<A> skos:related <B> ;
skos:broader <B> .
Invalid
<A> skos:narrower <B> ;
skos:related <C> .
<B> skos:narrower <C> .

skos:related is disjoint with skos:broaderTransitive:

Invalid
<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:

Invalid
<A> skos:relatedMatch <B> ;
skos:closeMatch <B> .
Invalid
<A> skos:broadMatch <B> ;
skos:relatedMatch <B> .
Invalid
<A> skos:exactMatch <B> ;
skos:broadMatch <B> .
Invalid
<A> skos:exactMatch <B> ;
skos:relatedMatch <B> .
Invalid
<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:

Invalid
<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:

Invalid
<Love> skos:prefLabel "love"@en ;
skos:altLabel "love"@en .

Concept Schemes and Collections

skos:ConceptScheme is disjoint with skos:Concept and skos:Collection:

Invalid
<A> a skos:ConceptScheme ;
a skos:Concept .

Semantic relations apply only to skos:Concept. They cannot be applied to skos:Collection or skos:ConceptScheme:

Invalid
<A> skos:narrower <B> .
<B> rdf:type skos:Collection .

Validating Your SKOS Vocabulary

Check your syntax and structure with:

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

Document Details

Version: 0.1 (draft)

Authors: [To be named]

Contributors: the LINCS Project team

Last Updated: 2026-08-15

Released: [Unreleased]