W3C

SKOS Core Guide

W3C Working Draft 2 November 2005

This version:
http://www.w3.org/TR/2005/WD-swbp-skos-core-guide-20051102
Latest version:
http://www.w3.org/TR/swbp-skos-core-guide
Previous version:
http://www.w3.org/TR/2005/WD-swbp-skos-core-guide-20050510
Editors:
Alistair Miles, CCLRC
Dan Brickley, W3C

Abstract

SKOS Core provides a model for expressing the basic structure and content of concept schemes such as thesauri, classification schemes, subject heading lists, taxonomies, 'folksonomies', other types of controlled vocabulary, and also concept schemes embedded in glossaries and terminologies.

The SKOS Core Vocabulary is an application of the Resource Description Framework (RDF), that can be used to express a concept scheme as an RDF graph. Using RDF allows data to be linked to and/or merged with other data, enabling data sources to be distributed across the web, but still be meaningfully composed and integrated.

This document is a guide using the SKOS Core Vocabulary, for readers who already have a basic understanding of RDF concepts.

This edition of the SKOS Core Guide [SKOS Core Guide] is a W3C Public Working Draft. It is the authoritative guide to recommended usage of the SKOS Core Vocabulary at the time of publication.

See also the SKOS Core Vocabulary Specification [SKOS Core Spec].


Status of this Document

This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.

This document is a Working Draft produced by the Semantic Web Best Practices and Deployment Working Group, part of the W3C Semantic Web Activity. The Working Group intends the SKOS Core Guide to become a W3C Working Group Note (see W3C document maturity levels). However, other outcomes are possible within the framework of the W3C process (see W3C Process) and will be considered in response to deployment experience and feedback from the W3C membership. The Working Group has discussed the potential for SKOS Core to evolve into possible future W3C Recommendation Track work items, and would value feedback on the level of formal standardization that is appropriate.

This Working Draft changes the definition of the Documentation Properties per an open issue noted in the previous version. Other changes have been made to the SKOS Core Vocabulary and to recommended usage since the previous (first) W3C Public Working Draft; see the section Release Notes in the SKOS Core Vocabulary Specification for details.

We encourage further public comments on this Working Draft. Please send comments to public-esw-thes@w3.org [archive] and start the subject line of the message with "comment:".

Publication as a Working Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.


Contents


Introduction

SKOS stands for Simple Knowledge Organisation System. The name SKOS was chosen to emphasise the goal of providing a simple yet powerful framework for expressing knowledge organisation systems in a machine-understandable way.

SKOS Core provides a model for expressing the basic structure and content of concept schemes.

A 'concept scheme' is defined here as: a set of concepts, optionally including statements about semantic relationships between those concepts. Thesauri, classification schemes, subject heading lists, taxonomies, 'folksonomies', and other types of controlled vocabulary are all examples of concept schemes. Concept schemes are also embedded in glossaries and terminologies.

The SKOS Core Vocabulary is a set of RDF properties and RDFS classes, that can be used to express the content and structure of a concept scheme as an RDF graph. For example, below is an extract from the UK Archival Thesaurus (UKAT) [UKAT]:

An extract from the UKAT

Term: Economic cooperation

Used For:
    Economic co-operation

Broader terms:
    Economic policy

Narrower terms:
    Economic integration
    European economic cooperation
    European industrial cooperation
    Industrial cooperation

Related terms:
    Interdependence

Scope Note:
Includes cooperative measures in banking, trade, industry etc., between and among countries.

This extract, expressed as an RDF graph using the SKOS Core Vocabulary, looks like:

UKAT extract as an RDF graph

Each of the circles represents a concept from the UKAT.

If your controlled vocabulary (concept scheme) has a similar structure, you will be interested in reading this guide, because it will tell you how to express your concept scheme as an RDF graph using the SKOS Core Vocabulary. Using RDF will allow your data to be linked to and/or merged with other RDF data by semantic web applications. In practice, this means that data sources can be distributed across the web in a decentralised way, but still be meaningfully composed and integrated by applications, possibly in novel and unanticipated ways.

SKOS Core is an application of the Resource Description Framework (RDF). RDF provides a simple data formalism for talking about things, their properties, inter-relationships, and categories (classes). See [RDF Concepts] for an overview of RDF, [RDF Semantics] for its formal mathematical basis, and [RDF Syntax] for details of the RDF/XML document format used to exchange RDF data. For more about the relationship between SKOS Core and other RDF applications, see the Relationship to RDFS/OWL Ontologies section below.

This document is a guide to using the SKOS Core Vocabulary, for readers who already have a basic understanding of RDF concepts.

A formal representation of the SKOS Core Vocabulary is maintained in RDF/OWL [latest: http://www.w3.org/2004/02/skos/core]. Historical snapshots of the RDF/OWL description of the SKOS Core Vocabulary can be obtained from [http://www.w3.org/2004/02/skos/core/history/].

See also the SKOS Core Vocabulary Specification [SKOS Core Spec].


About This Guide

Together, the latest versions of this document [SKOS Core Guide] and the SKOS Core Vocabulary Specification [SKOS Core Spec] replace the earlier SKOS Core 1.0 Guide [SKOS Core 1.0] published by the SWAD-Europe Thesaurus Activity. The SKOS Core 1.0 Guide is now deprecated. In a departure from the policy implied by the version number '1.0', the SKOS Core Vocabulary is no longer versioned as a whole. The current versioning policy is described in the SKOS Core Vocabulary Specification.

Examples

Most of the examples in this guide are given as a visualisation of the RDF graph, e.g.

example

Graph of an RDF triple

An RDF graph can be serialised (i.e. encoded as a series of characters) according to any of three currently defined RDF syntaxes: RDF/XML [RDF Syntax], N3/Turtle [Turtle][N3], N-Triple [N-Triple]. All examples in this guide use the RDF/XML syntax for consistency. Examples serialised as RDF/XML appear in boxes such as:

example

<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
  xmlns:ex="http://www.example.com/eg#">

  <rdf:Description rdf:about="http://www.example.com/eg#aResource">
    <ex:aProperty rdf:resource="http://www.example.com/eg#anotherResource"/>
    <ex:anotherProperty>An RDF Literal</ex:anotherProperty>
  </rdf:Description>
  
</rdf:RDF>

Inference Rules

Inference rules are part of SKOS Core. Inference rules are described in prose, and where appropriate are expressed using the Jena 2 rule syntax [Jena Inference], or as RDF statements using the OWL vocabulary [OWL]. Inference rules appear in boxes such as:

rule

An example rule.

(?x ex:p ?y) 
->
(?x ex:q ?y)

prefix ex: <http://www.example.com/eg#>

Terminology

This document uses the following terminology defined in [RDF Concepts]:

This document uses the following terminology defined in [Willpower Glossary]:

This document uses the following terminology defined in [WEBARCH]:

This document uses the following terminology defined in [DCMIMODEL]:

This document uses the following terminology defined in [OWL]:


The Concept Class

The skos:Concept class allows you to assert that a resource is a conceptual resource. That is, the resource is itself a concept. For example:

Example

Graph of conceptual resource example

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

  <rdf:Description rdf:about="http://www.example.com/concepts#love">
    <rdf:type rdf:resource="http://www.w3.org/2004/02/skos/core#Concept"/>
  </rdf:Description>
  
</rdf:RDF>

Note that, for triples involving the rdf:type property, the RDF/XML syntax allows a shortened form:

<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#">

  <skos:Concept rdf:about="http://www.example.com/concepts#love"/>
  
</rdf:RDF>

This shortened form is used throughout this guide, wherever possible.

See also the section HTTP URIs for Concepts.


Labelling Properties

This section describes the SKOS Core labelling properties: skos:prefLabel, skos:altLabel, skos:hiddenLabel, skos:prefSymbol and skos:altSymbol. Here labelling means assigning some sort of token to a resource, where the token is intended to be used to denote (label) the resource in natural language discourse and/or in representations intended for human consumption.

Preferred and Alternative Lexical Labels

The skos:prefLabel and skos:altLabel properties allow you to assign preferred and alternative lexical labels to a resource. For example:

Example

Graph of preferred and alternative lexical labelling example

<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#">

  <skos:Concept rdf:about="http://www.example.com/concepts#animals">
    <skos:prefLabel>animals</skos:prefLabel>
    <skos:altLabel>creatures</skos:altLabel>
    <skos:altLabel>fauna</skos:altLabel>
  </skos:Concept>
  
</rdf:RDF>

The labels in the above example, 'animals' 'creatures' and 'fauna', would under normal circumstances be considered synonyms of each other. However, when labelling resources of type skos:Concept, it is not necessary to restrict preferred and alternative lexical labels to precise synonyms. The following are all valid:

Example

<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#">

  <skos:Concept rdf:about="http://www.example.com/concepts#wetness">
    <skos:prefLabel>wetness</skos:prefLabel>
    <skos:altLabel>dryness</skos:altLabel>
  </skos:Concept>

  <skos:Concept rdf:about="http://www.example.com/concepts#shrubs">
    <skos:prefLabel>shrubs</skos:prefLabel>
    <skos:altLabel>bushes</skos:altLabel>
  </skos:Concept>

  <skos:Concept rdf:about="http://www.example.com/concepts#rocks">
    <skos:prefLabel>rocks</skos:prefLabel>
    <skos:altLabel>basalt</skos:altLabel>
    <skos:altLabel>granite</skos:altLabel>
    <skos:altLabel>slate</skos:altLabel>
  </skos:Concept>
  
</rdf:RDF>

Abbreviations and acronyms may also be used to label concepts, and the choice of whether to use them as preferred or alternative terms is unconstrained. However, misspelled words are normally included among the hidden labels (see see hidden labels below).

The properties skos:prefLabel and skos:altLabel are both sub-properties of rdfs:label.

Hidden Lexical Labels

A hidden lexical label is a lexical label for a resource, where you would like that character string to be accessible to applications performing text-based indexing and search operations, but you would not like that label to be visible otherwise. To assign a hidden lexical label to a resource, use the skos:hiddenLabel property.

The most common use of hidden labels is to include misspelt variants of other lexical labels. For example:

Example

<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#">

  <skos:Concept rdf:about="http://www.example.com/concepts#abattoirs">
    <skos:prefLabel>abattoirs</skos:prefLabel>
    <skos:hiddenLabel>abatoirs</skos:hiddenLabel>
    <skos:hiddenLabel>abbatoirs</skos:hiddenLabel>
    <skos:hiddenLabel>abbattoirs</skos:hiddenLabel>
  </skos:Concept>

</rdf:RDF>

The property skos:hiddenLabel is a sub-property of rdfs:label.

Multilingual Labelling

The value of the properties skos:prefLabel and skos:altLabel should be a plain literal. A plain literal is a character string with optional language tag, and the language tag may be used to restrict the scope of a lexical label to a particular language, for example:

Example

Graph of multilingual labelling example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#">

  <skos:Concept rdf:about="http://www.example.com/concepts#shrubs">
    <skos:prefLabel xml:lang="en">shrubs</skos:prefLabel>
    <skos:altLabel xml:lang="en">bushes</skos:altLabel>
    <skos:prefLabel xml:lang="fr">arbuste</skos:prefLabel>
    <skos:altLabel xml:lang="fr">buisson</skos:altLabel>
  </skos:Concept>

</rdf:RDF>

The values permissable as language tags are given by [XMLLANG].

When labelling a concept in more than one language, bear in mind that subtle differences in the common meaning of translated words or phrases between languages may result in differing interpretations of a concept by different language communities.

A concept should have no more than one preferred lexical label per language.

It is recommended that no two concepts in the same concept scheme be given the same preferred lexical label in any given language.

Symbolic Labelling

Symbolic labelling means labelling a concept with an image.

To assign preferred and alternative symbolic labels to a concept, use the skos:prefSymbol and skos:altSymbol properties. For example:

Example

Graph of symbolic labelling example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#">

  <skos:Concept rdf:about="http://www.example.com/concepts#love">
    <skos:prefSymbol rdf:resource="http://www.example.com/symbols/love1.jpg"/>
    <skos:altSymbol rdf:resource="http://www.example.com/symbols/love2.jpg"/>
  </skos:Concept>

</rdf:RDF>

It is recommended that no two concepts in the same concept scheme be given the same preferred symbolic label.

A Note About Depictions

The FOAF [FOAF] vocabulary includes the property foaf:depiction. This property may be used to assert a link between a concept, and an image depicting that concept, for example:

Example

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
         xmlns:skos="http://www.w3.org/2004/02/skos/core#"
         xmlns:foaf="http://xmlns.com/foaf/0.1/">

  <skos:Concept rdf:about="http://www.example.org/concepts#spottedbowerbird">
    <skos:prefLabel>spotted bowerbird</skos:prefLabel>
    <skos:altLabel>Chlamydera maculata</skos:altLabel>
    <foaf:depiction rdf:resource="http://www.mangoverde.com/birdsound/images/00000005589.jpg"/>
  </skos:Concept>
  
</rdf:RDF> 

The properties skos:prefSymbol and skos:altSymbol are not sub-properties of foaf:depiction. This is because a symbolic label for a concept is not necessarily a depiction of that concept. For example, the image ...

Bliss feeling symbol

... is the preferred symbolic label for the concept 'government' in the Blisssymbolics dictionary [BLISS]. However, the image looks like a (highly stylised) depiction of a flag.


Documentation Properties

N.B. This section has changed since the previous (first) Public Working Draft edition of the SKOS Core Guide, see section Release Notes in [SKOS Core Spec].

This section describes the SKOS Core documentation properties. These are 7 properties you can use to add human-readable documentation to the description of a concept. The properties are:

  skos:note
  |
  +-- skos:definition
  |
  +-- skos:scopeNote
  |
  +-- skos:example
  |
  +-- skos:historyNote
  |
  +-- skos:editorialNote
  |
  +-- skos:changeNote
			

The SKOS Core documentation properties are arranged as a property hierarchy as shown above. Thus a skos:definition is also a skos:note, a skos:editorialNote is also a skos:note and so on.

Use the skos:note to supply general documentation for any purpose.

Use the skos:definition property to supply a complete explanation of the intended meaning of a concept. For example:

Use the skos:scopeNote property to supply some, possibly partial, information about the intended meaning and/or use of a concept, which can be phrased as information about what is or isn't included within the meaning ('scope') of the concept. For example:

See also section 'Scope notes' in [BS8723].

Use the skos:example property to supply an example of the use of a concept.

Use the skos:historyNote property to give instructions or useful information for users of the scheme, specifically relating to significant changes to the meaning/form/state of a concept. For example:

See also section 'History notes' in [BS8723].

Use the skos:editorialNote property to supply information that is an aid to administrative housekeeping, such as reminders of editorial work still to be done, or warnings in the event that future editorial changes might be made. For example:

See also section 'Data management' in [BS8723].

Use the skos:changeNote property to document fine-grained changes to a concept, for the purposes of administration and maintenance. (This is a bit like a CVS commit comment.) For example:

There are three recommended usage patterns for the SKOS Core documentation properties:

The sub-sections below explain these patterns.

Documentation as an RDF Literal

This is the simplest pattern for using the SKOS Core documentation properties, where the property value (i.e. the object of the triple) is an RDF literal.

Graph of documentation as RDF literal pattern

An example of this pattern is below:

Example

Graph of example of documentation as RDF literal

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#">
  
  <skos:Concept rdf:about="http://www.example.org/concepts#bananarepublic">
    <skos:prefLabel>banana republic</skos:prefLabel>
    <skos:definition>A small country, especially in South and Central America, that is 
    poor and often badly and immorally ruled.</skos:definition>
  </skos:Concept>

</rdf:RDF>

Note that a plain literal may include a language tag. Where a concept is labelled in more than one language, documentation may also be provided in multiple languages, for example:

Example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#">

  <skos:Concept rdf:about="http://www.example.com/concepts#pineapples">
    <skos:prefLabel xml:lang="en">pineapples</skos:prefLabel>
    <skos:definition xml:lang="en">The fruit of plants of the family Bromeliaceae.</skos:definition>
    <skos:prefLabel xml:lang="fr">ananas</skos:prefLabel>
    <skos:definition xml:lang="fr">Le fruit de la plante herbacée de la famille des broméliacées.</skos:definition>
  </skos:Concept>

</rdf:RDF>

Documentation as a Related Resource Description

In this pattern the documentation is structured as a related resource description. This allows you to represent more complex documentation structures, including properties of the documentation itself, such as the creator(s) of the documentation, a date, or its intended audience.

Graph of documentation as related resource description pattern

An example of this pattern is below:

Example

Graph of example of documentation as related resource description

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:foaf="http://xmlns.com/foaf/0.1/">
  
  <skos:Concept rdf:about="http://www.example.org/concepts#laptops">
    <skos:prefLabel>notebook computers</skos:prefLabel>
    <skos:changeNote rdf:parseType="Resource">
      <rdf:value>The label 'laptop computers' moved from preferred to alternative, the label 'notebook computers'
      moved from alternative to preferred.</rdf:value>
      <dc:creator>
        <foaf:Person>
          <foaf:name>John Smith</foaf:name>
          <foaf:mbox rdf:resource="mailto:jsmith@example.org"/>
        </foaf:Person>
      </dc:creator>
      <dc:date>1999-01-23</dc:date>
    </skos:changeNote>
  </skos:Concept>

</rdf:RDF>

See FOAF [FOAF] and DC [DCMITERMS] specifications for more properties to use with related resource descriptions and usage guidelines.

In particular, the dc:audience property may be used to add information about the intended audience of the note, for example:

Example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:dc="http://purl.org/dc/elements/1.1/">
  
  <skos:Concept rdf:about="http://www.example.org/concepts#pineapples">
    <skos:prefLabel>pineapples</skos:prefLabel>
    <skos:definition rdf:parseType="Resource">
      <rdf:value>The fruit of plants of the family Bromeliaceae.</rdf:value>
      <dc:audience>general user</audience>
    </skos:definition>
    <skos:editorialNote rdf:parseType="Resource">
      <rdf:value>Consult Dr. Jones regarding the definition of this concept at 2005-09-29 
      editorial meeting.</rdf:value>
      <dc:audience>editor</audience>
    </skos:editorialNote>
  </skos:Concept>

</rdf:RDF>

It is preferable to use some sort of controlled list of values for the dc:audience property, such as e.g. 'general user', 'indexer' and 'editor'.

Where the documentation is structured as a related resource description, you may use the dc:language property to indicate the language of the documentation, e.g.:

Example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:dcterms="http://purl.org/dc/terms/">
  
  <skos:Concept rdf:about="http://www.example.com/concepts#botany">
    <skos:prefLabel>botany</skos:prefLabel>
    <skos:note rdf:parseType="Resource">
      <rdf:value>The study of plant life.</rdf:value>
      <dc:creator>
        <foaf:Person>
          <foaf:name>John Smith</foaf:name>
          <foaf:mbox rdf:resource="mailto:jsmith@example.org"/>
        </foaf:Person>
      </dc:creator>
      <dc:language>
        <dcterms:RFC1766>
          <rdf:value>EN</rdf:value>
          <rdfs:label>English</rdfs:label>
        </dcterms:RFC1766>
      </dc:language>
    </skos:note>
  </skos:Concept>

</rdf:RDF>

Documentation as a Document Reference

This pattern allows you to refer to documentation that is itself a document, via the URI of that document.

Graph of documentation as document reference pattern

A specific examples of this pattern is below:

Example

Graph of example of documentation as document reference

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#">
  
  <skos:Concept rdf:about="http://www.example.com/concepts#zoology">
    <skos:prefLabel>zoology</skos:prefLabel>
    <skos:scopeNote rdf:resource="http://www.example.com/notes/zoology.txt"/>
  </skos:Concept>

</rdf:RDF>

Note that it is possible to include metaproperties of this document within the same RDF graph, for example:

Example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:dcterms="http://purl.org/dc/terms/"
  xmlns:foaf="http://xmlns.com/foaf/0.1/">
  
  <skos:Concept rdf:about="http://www.example.com/concepts#botany">
    <skos:prefLabel>botany</skos:prefLabel>
    <skos:scopeNote>
      <foaf:Document rdf:about="http://www.example.com/notes/botany.txt">
        <dc:creator>
          <foaf:Person>
            <foaf:name>John Smith</foaf:name>
            <foaf:mbox rdf:resource="mailto:jsmith@example.org"/>
          </foaf:Person>
        </dc:creator>
        <dc:language>
          <dcterms:RFC1766>
            <rdf:value>EN</rdf:value>
            <rdfs:label>English</rdfs:label>
          </dcterms:RFC1766>
        </dc:language>
      </foaf:Document>
    </skos:scopeNote>
  </skos:Concept>

</rdf:RDF>

Semantic Relationships

The SKOS Core Vocabulary includes the following properties for asserting semantic (paradigmatic) relationships between concepts: skos:semanticRelation, skos:broader, skos:narrower and skos:related.

These properties are arranged in a property hierarchy, as follows:

skos:semanticRelation
  |
  +-- skos:broader
  |
  +-- skos:narrower
  |
  +-- skos:related

The domain and range of the property skos:semanticRelation is the class skos:Concept, therefore the use of any of the SKOS Core semantic relation properties implies that both the subject and the object of the triple is a resource of type skos:Concept.

Broader/Narrower Relationships

To assert that one concept is broader in meaning (i.e. more general) than another, where the scope (meaning) of one falls completely within the scope of the other, use the skos:broader property. To assert the inverse, that one concept is narrower in meaning (i.e. more specific) than another, use the skos:narrower property. For example:

Example

Graph of broader narrower example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#">
  
  <skos:Concept rdf:about="http://www.example.com/concepts#mammals">
    <skos:prefLabel>mammals</skos:prefLabel>
    <skos:broader rdf:resource="http://www.example.com/concepts#animals"/>
  </skos:Concept>

  <skos:Concept rdf:about="http://www.example.com/concepts#animals">
    <skos:prefLabel>animals</skos:prefLabel>
    <skos:narrower rdf:resource="http://www.example.com/concepts#mammals"/>
  </skos:Concept>

</rdf:RDF>

The properties skos:broader and skos:narrower are each other's inverse.

Both the properties skos:broader and skos:narrower are transitive properties.

See also section on hierarchies in [BS8723].

Associative Relationships

To assert an associative relationship between two concepts, use the skos:related property, for example:

Example

Graph of associative relationship example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#">
  
  <skos:Concept rdf:about="http://www.example.com/concepts#birds">
    <skos:prefLabel>birds</skos:prefLabel>
    <skos:related rdf:resource="http://www.example.com/concepts#ornithology"/>
  </skos:Concept>

  <skos:Concept rdf:about="http://www.example.com/concepts#ornithology">
    <skos:prefLabel>ornithology</skos:prefLabel>
    <skos:related rdf:resource="http://www.example.com/concepts#birds"/>
  </skos:Concept>

</rdf:RDF>

The property skos:related is a symmetric property.

See also the section on associative relationships in [BS8723].


Concept Schemes

Usually, concepts are defined in relation to other concepts, as part of an internally coherent concept scheme. As mentioned in the introduction, a 'concept scheme' is defined here as: a set of concepts, optionally including statements about semantic relationships between those concepts.

The skos:ConceptScheme class allows you to assert that a resource is a concept scheme. For example:

Example

Graph of concept scheme example

<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#">

  <skos:ConceptScheme rdf:about="http://www.example.com/conceptscheme"/>

</rdf:RDF>

Concepts do not have to be a part of a concept scheme, concepts may be defined and declared as stand-alone resources. However, where you would like to assert that a concept is a part of a particular concept scheme, use the skos:inScheme property, for example:

Example

Graph of in-scheme example

<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#">

  <skos:Concept rdf:about="http://www.example.com/concepts#love">
    <skos:inScheme rdf:resource="http://www.example.com/conceptscheme"/>
  </skos:Concept>

</rdf:RDF>

A concept may participate in any number of concept schemes.

For concept schemes where the concepts are arranged in a broader/narrower generalisation hierarchy, use the skos:hasTopConcept property to assert a link between the concept scheme and the concepts that are the top-level concepts in the generalisation hierarchy. For example:

Example

Graph of has-top-concept example

<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#">

  <skos:ConceptScheme rdf:about="http://www.example.com/conceptscheme">
    <skos:hasTopConcept rdf:resource="http://www.example.com/concepts#biology"/>
    <skos:hasTopConcept rdf:resource="http://www.example.com/concepts#geology"/>
    <skos:hasTopConcept rdf:resource="http://www.example.com/concepts#agriculture"/>
    <skos:hasTopConcept rdf:resource="http://www.example.com/concepts#culturalheritage"/>
  </skos:ConceptScheme>

</rdf:RDF>

It is recommended that you use the skos:hasTopConcept property, as this gives applications an efficient way of locating the top level concepts for a given scheme.

When declaring a concept scheme you can of course use properties from other RDF vocabularies such as DCMI Terms [DCMITERMS] to describe meta-properties of the scheme, for example:

Example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:dcterms="http://purl.org/dc/terms/"
  xmlns:foaf="http://xmlns.com/foaf/0.1/">
  
  <skos:ConceptScheme rdf:about="http://www.example.com/conceptscheme">
    <skos:hasTopConcept rdf:resource="http://www.example.com/concepts#biology"/>
    <skos:hasTopConcept rdf:resource="http://www.example.com/concepts#geology"/>
    <skos:hasTopConcept rdf:resource="http://www.example.com/concepts#agriculture"/>
    <skos:hasTopConcept rdf:resource="http://www.example.com/concepts#culturalheritage"/>
    <dc:title>The example.com concept scheme</dc:title>
    <dc:description>An concept scheme for the SKOS Core guide.</dc:description>
    <dc:creator>
      <foaf:Person>
        <foaf:name>Alistair Miles</foaf:name>
        <foaf:mbox rdf:resource="mailto:a.j.miles@rl.ac.uk"/>
      </foaf:Person>
    </dc:creator>
    <dc:rights>Free to all.</dc:rights>
    <dcterms:issued>2004-11-25</dcterms:issued>
    <dcterms:modified>2005-02-06</dcterms:modified>    
  </skos:ConceptScheme>

</rdf:RDF>

Consult the DCMI Terms [DCMITERMS] specification for other useful properties and usage guidelines.


Subject Indexing

This section introduces the properties skos:subject, skos:isSubjectOf, skos:primarySubject and skos:isPrimarySubjectOf. These properties can be used for subject indexing of information resources on the web. Here 'subject indexing' means the same as 'indexing' as defined by [Willpower Glossary].

To assert that a concept is a subject (i.e. topic) of an information resource, use the skos:subject property, for example:

Example

Graph of subject indexing example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:foaf="http://xmlns.com/foaf/0.1/">

  <foaf:Document rdf:about="http://www.publish.csiro.au/paper/MU00039.htm">
    <skos:subject rdf:resource="http://www.example.com/concepts#ornithology"/>
  </foaf:Document>
  
  <skos:Concept rdf:about="http://www.example.org/concepts#ornithology">
    <skos:prefLabel>ornithology</skos:prefLabel>
  </skos:Concept>

</rdf:RDF>

You can use the skos:isSubjectOf property to make the same assertion in the other direction, for example:

Example

Graph of subject indexing example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:foaf="http://xmlns.com/foaf/0.1/">

  <foaf:Document rdf:about="http://www.publish.csiro.au/paper/MU00039.htm"/>
  
  <skos:Concept rdf:about="http://www.example.org/concepts#ornithology">
    <skos:prefLabel>ornithology</skos:prefLabel>
    <skos:isSubjectOf rdf:resource="http://www.publish.csiro.au/paper/MU00039.htm"/>
  </skos:Concept>

</rdf:RDF>

The properties skos:subject and skos:isSubjectOf are each other's inverse.

The property skos:subject is a sub-property of dc:subject.

The following rule applies to the interaction of skos:subject and skos:broader :

Rule

Subject Generality Rule

(?i skos:subject ?x) (?x skos:broader ?y)
->
(?i skos:subject ?y)

Primary Subjects

An information resource may have any number of subjects. To state that one of these subjects is the primary subject of the document, use the skos:primarySubject property, for example:

Example

Graph of primary subject example

<rdf:RDF  
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:foaf="http://xmlns.com/foaf/0.1/">

  <foaf:Document rdf:about="http://www.publish.csiro.au/paper/MU00039.htm">
    <skos:primarySubject rdf:resource="http://www.example.com/concepts#spottedbowerbird"/>
  </foaf:Document>
  
  <skos:Concept rdf:about="http://www.example.org/concepts#spottedbowerbird">
    <skos:prefLabel>spotted bowerbird</skos:prefLabel>
  </skos:Concept>

</rdf:RDF>

The property skos:isPrimarySubjectOf is the inverse of skos:primarySubject.

The property skos:primarySubject is the sub-property of skos:subject. The property skos:isPrimarySubjectOf is the sub-propety of skos:isSubjectOf.

A resource should have no more than one primary subject from any one concept scheme.


Meaningful Collections of Concepts

This section describes the features of SKOS Core that allow you to define meaningful groupings ('collections') of concepts. Such groupings are normally rendered in thesauri as e.g.

<milk by source animal>
.buffalo milk
.cow milk
.goat milk
.sheep milk

In thesaurus terminology, these collections are known as 'arrays', and the term 'milk by source animal' is a 'node label' [Willpower Glossary]. There is consensus that a 'node label' does not represent a label for a concept in its own right, and therefore correctly modelling this kind of structure in RDF requires careful consideration.

SKOS Core has special vocabulary to handle collections, and this is described below. However, RDF has some generic vocabulary (rdf:Bag and rdf:Seq) to handle ordered/unordered groups of resources, and there has been extended discussion as to whether these should be used. The choice has been made provisionally not to use rdf:Bag and rdf:Seq for this purpose, for reasons outlined in [Collections and Arrays].

Labelled Collections

To define a meaningful collection of concepts, use the skos:Collection class and the skos:member property. To assign a lexical label to a collection, use the rdfs:label property. For example:

Example

Graph of labelled collection example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
  
  <skos:Collection>
    <rdfs:label>milk by source animal</rdfs:label>
    <skos:member rdf:resource="http://www.example.com/concepts#buffalomilk"/>
    <skos:member rdf:resource="http://www.example.com/concepts#cowmilk"/>
    <skos:member rdf:resource="http://www.example.com/concepts#goatmilk"/>
    <skos:member rdf:resource="http://www.example.com/concepts#sheepmilk"/>
  </skos:Collection>

  <skos:Concept rdf:about="http://www.example.com/concepts#buffalomilk">
    <skos:prefLabel>buffalo milk</skos:prefLabel>
  </skos:Concept>

  <skos:Concept rdf:about="http://www.example.com/concepts#cowmilk">
    <skos:prefLabel>cow milk</skos:prefLabel>
  </skos:Concept>

  <skos:Concept rdf:about="http://www.example.com/concepts#goatmilk">
    <skos:prefLabel>goat milk</skos:prefLabel>
  </skos:Concept>

  <skos:Concept rdf:about="http://www.example.com/concepts#sheepmilk">
    <skos:prefLabel>sheep milk</skos:prefLabel>
  </skos:Concept>

</rdf:RDF>

Note that in the example above the collection was defined as a blank node, i.e. no URI was allocated. URIs may be allocated to collections, but usually this is not necessary.

The most common use of a labelled collection such as the above is to enhance a hierarchical display. You can describe narrower and broader relationships between a concept and a collection, for example:

Example

Graph of collections in semantic relationships example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
  
  <skos:Concept rdf:about="http://www.example.com/concepts#milk">
    <skos:prefLabel>milk</skos:prefLabel>
    <skos:narrower>
      <skos:Collection>
        <rdfs:label>milk by source animal</rdfs:label>
        <skos:member rdf:resource="http://www.example.com/concepts#buffalomilk"/>
        <skos:member rdf:resource="http://www.example.com/concepts#cowmilk"/>
        <skos:member rdf:resource="http://www.example.com/concepts#goatmilk"/>
        <skos:member rdf:resource="http://www.example.com/concepts#sheepmilk"/>
      </skos:Collection>
    </skos:narrower>
  </skos:Concept>

</rdf:RDF>

The usual rendering of this structure in a thesaurus is:

milk
.<milk by source animal>
..buffalo milk
..cow milk
..goat milk
..sheep milk

Collectable Properties

The class skos:CollectableProperty supports a generic mechanism by which collections can be involved in semantic relationships (and other sorts of statement). For this class the following rule applies:

Rule

Collectable Property Rule

(?x ?p ?c) (?c skos:member ?m) (?p rdf:type skos:CollectableProperty)
->
(?x ?p ?m)

The properties skos:narrower, skos:broader and skos:related are all declared to be collectable properties.

This rule means that the example from the section above implies the following graph:

Graph inferred from collectable property

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#">
  
  <rdf:Description rdf:about="http://www.example.com/concepts#milk">
    <skos:narrower rdf:resource="http://www.example.com/concepts#buffalomilk"/>
    <skos:narrower rdf:resource="http://www.example.com/concepts#cowmilk"/>
    <skos:narrower rdf:resource="http://www.example.com/concepts#goatmilk"/>
    <skos:narrower rdf:resource="http://www.example.com/concepts#sheepmilk"/>
  </rdf:Description>

</rdf:RDF>

Ordered Collections

To define an ordered collection of concepts, use the skos:OrderedCollection class with the skos:memberList property. An ordered collection may also have a label (use rdfs:label). For example:

Example

Graph of ordered collection example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
  
  <skos:OrderedCollection>
    <rdfs:label>people by age</rdfs:label>
    <skos:memberList rdf:parseType="Collection">
      <skos:Concept rdf:about="http://www.example.com/concepts#infants"/>
      <skos:Concept rdf:about="http://www.example.com/concepts#children"/>
      <skos:Concept rdf:about="http://www.example.com/concepts#adults"/>
    </skos:memberList>
  </skos:OrderedCollection>
  
  <skos:Concept rdf:about="http://www.example.com/concepts#infants">
    <skos:prefLabel>infants</skos:prefLabel>
  </skos:Concept>

  <skos:Concept rdf:about="http://www.example.com/concepts#children">
    <skos:prefLabel>children</skos:prefLabel>
  </skos:Concept>

  <skos:Concept rdf:about="http://www.example.com/concepts#adults">
    <skos:prefLabel>adults</skos:prefLabel>
  </skos:Concept>

</rdf:RDF>

Ordered collections can be used with semantic relation properties in the same way as unordered collections (skos:OrderedCollection is a sub-class of skos:Collection) for example:

Example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
  
  <skos:Concept rdf:about="http://www.example.com/concepts#people">
    <skos:prefLabel>people</skos:prefLabel>
    <skos:narrower>
      <skos:OrderedCollection>
        <rdfs:label>people by age</rdfs:label>
        <skos:memberList rdf:parseType="Collection">
          <skos:Concept rdf:about="http://www.example.com/concepts#infants"/>
          <skos:Concept rdf:about="http://www.example.com/concepts#children"/>
          <skos:Concept rdf:about="http://www.example.com/concepts#adults"/>
        </skos:memberList>
      </skos:OrderedCollection>
    </skos:narrower>
  </skos:Concept>

</rdf:RDF>

This structure could be rendered for display as:

people
.<people by age>
..infants
..children
..adults

For ordered collections the following rule applies:

Rule

Ordered Collection Membership Rule

(?c skos:memberList ?l) elementOfList(?e,?l)
->
(?c skos:member ?e)

... where 'elementOfList' is a function that returns true if the first argument is an element of the RDF list for which the second argument is the head.

This rule, in combination with the collectable properties rule, means that the example above implies the following graph:

Graph of inferred statements from ordered collections example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#">

  <rdf:Description rdf:about="http://www.example.com/concepts#people">
    <skos:narrower rdf:resource="http://www.example.com/concepts#infants"/>
    <skos:narrower rdf:resource="http://www.example.com/concepts#children"/>
    <skos:narrower rdf:resource="http://www.example.com/concepts#adults"/>
  </rdf:Description>

</rdf:RDF>

Nested Collections

Collections may also be nested inside other collections, for example:

Example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">

  <skos:Concept rdf:about="http://www.example.com/concepts#chairs">
    <skos:prefLabel>chairs</skos:prefLabel>
    <skos:narrower>
      <skos:Collection>
        <rdfs:label>chairs by form</rdfs:label>
        <skos:member rdf:resource="http://www.example.com/concepts#armchairs"/>
        <skos:member rdf:resource="http://www.example.com/concepts#easychairs"/>
        <skos:member>
          <skos:Collection>
            <rdfs:label>chairs by form: back form</rdfs:label>
            <skos:member rdf:resource="http://www.example.com/concepts#heartbackchairs"/>
            <skos:member rdf:resource="http://www.example.com/concepts#ovalbackchairs"/>
          </skos:Collection>
        </skos:member>
      </skos:Collection>
    </skos:narrower>
  </skos:Concept>
  
  <skos:Concept rdf:about="http://www.example.com/concepts#armchairs">
    <skos:prefLabel>armchairs</skos:prefLabel>
  </skos:Concept>

  <skos:Concept rdf:about="http://www.example.com/concepts#easychairs">
    <skos:prefLabel>easy chairs</skos:prefLabel>
  </skos:Concept>

  <skos:Concept rdf:about="http://www.example.com/concepts#heartbackchairs">
    <skos:prefLabel>heart-back chairs</skos:prefLabel>
  </skos:Concept>

  <skos:Concept rdf:about="http://www.example.com/concepts#ovalbackchairs">
    <skos:prefLabel>oval-back chairs</skos:prefLabel>
  </skos:Concept>

</rdf:RDF>

This structure could be rendered for display as:

chairs
.<chairs by form>
..armchairs
..easy chairs
..<chairs by form: back form>
...heart-back chairs
...oval-back chairs

This example adapted from the AAT [AAT].

Ordered collections may also be nested, for example:

Example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">

  <skos:Concept rdf:about="http://www.example.com/concepts#people">
    <skos:prefLabel>people</skos:prefLabel>
    <skos:narrower>
      <skos:OrderedCollection>
        <rdfs:label>people by age</rdfs:label>
        <skos:memberList rdf:parseType="Collection">
          <skos:OrderedCollection>
            <rdfs:label>infants by age</rdfs:label>
            <skos:memberList rdf:parseType="Collection">
              <skos:Concept rdf:about="http://www.example.com/concepts#babies"/>
              <skos:Concept rdf:about="http://www.example.com/concepts#toddlers"/>
            </skos:memberList>
          </skos:OrderedCollection>
          <skos:Concept rdf:about="http://www.example.com/concepts#children"/>
          <skos:Concept rdf:about="http://www.example.com/concepts#adults"/>
        </skos:memberList>
      </skos:OrderedCollection>
    </skos:narrower>
  </skos:Concept>
  
  <skos:Concept rdf:about="http://www.example.com/concepts#babies">
    <skos:prefLabel>babies</skos:prefLabel>
  </skos:Concept>

  <skos:Concept rdf:about="http://www.example.com/concepts#toddlers">
    <skos:prefLabel>toddlers</skos:prefLabel>
  </skos:Concept>

</rdf:RDF>

This structure could be rendered for display as:

people
.<people by age>
..<infants by age>
...babies
...toddlers
..children
..adults

Also ordered collections may be nested inside unordered collections, and vice versa.


Published Subject Indicators

The property skos:subjectIndicator allows you to assert a link between a concept and a human-readable document that provides a complete, definitive description of that concept. For example:

Example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#">
  
  <skos:Concept>
    <skos:prefLabel>ornithology</skos:prefLabel>
    <skos:subjectIndicator rdf:resource="http://www.example.com/psi/ornithology.html"/>
  </skos:Concept>

</rdf:RDF>

The referenced document should conform to the requirements of a published subject indicator as defined by [PSI].

The skos:subjectIndicator property is an owl:InverseFunctionalProperty, which means that if any two nodes in an RDF graph have the same value for this property, then they are the same resource [OWL]. Therefore you can use the skos:subjectIndicator property to indirectly identify a concept by reference to the URI of the document that is the published subject indicator for that concept.

Below is an example of referring to a concept via the value of the skos:subjectIndicator property:

Example

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:foaf="http://xmlns.com/foaf/0.1/">
  
  <foaf:Document rdf:about="http://www.publish.csiro.au/paper/MU00039.htm">
    <skos:primarySubject rdf:parseType="Resource">
      <skos:subjectIndicator rdf:resource="http://www.example.com/psi/ornithology.html"/>
    </skos:primarySubject>
  </foaf:Document>
  
</rdf:RDF>

Open Issues

This section describes some open issues, where no firm consensus has been reached.

Relationship to RDFS/OWL Ontologies

This section attempts to describe the relationship between SKOS Core and other RDF applications such as FOAF.

Here, 'RDFS' refers to the RDF vocabulary description language [RDF Schema] and 'OWL' refers to the Web Ontology Language [OWL].

There is a subtle difference between SKOS Core and other RDF applications like FOAF [FOAF], in terms of what they allow you to model. SKOS Core allows you to model a set of concepts (essentially a set of meanings) as an RDF graph. Other RDF applications, such as FOAF, allow you to model things like people, organisations, places etc. as an RDF graph. Technically, SKOS Core introduces a layer of indirection into the modelling.

To understand this indirection better, consider the following two graphs, both involving the dc:creator property:

Graph of SKOS Core modelling example

The above graph describes a relationship between a concept, and the person who is the creator of that concept. This graph should be interpreted as saying, "the person named 'Alistair Miles' is the creator of the concept denoted by the URI http://www.example.com/concepts#henry8. This concept was modified on 2005-02-06." This graph should probably not be interpreted as saying, "the person named 'Alistair Miles' is the creator of King Henry VIII," or that, "King Henry VIII was modified on 2005-02-06".

Contrast this with the graph below:

Graph of FOAF modelling example

This second graph should probably be interpreted as saying, "the persons named 'King Henry VII' and 'Elizabeth of York' are the creators of the person named 'King Henry VIII'."

So, for a resource of type skos:Concept, any properties of that resource (such as creator, date of modification, source etc.) should be interpreted as properties of a concept, and not as properties of some 'real world thing' that that resource may be a conceptualisation of.

This layer of indirection allows thesaurus-like data to be expressed as an RDF graph. The conceptual content of any thesaurus can of course be remodelled as an RDFS/OWL ontology. However, this remodelling work can be a major undertaking, particularly for large and/or informal thesauri. A SKOS Core representation of a thesaurus maps fairly directly onto the original data structures, and can therefore be created without expensive remodelling and analysis.

SKOS Core is intended to provide both a stable encoding of thesaurus-like data within the RDF graph formalism, as well as a migration path for exploring the costs and benefits of moving from thesaurus-like to RDFS/OWL-like modelling formalisms.

Concept Identity and Mapping

The property owl:sameAs should not be used to express the fact that two conceptual resources (i.e. resources of type skos:Concept) share the same meaning. The property owl:sameAs implies that two resources are identical in every way (they are in fact the same resource). Although two conceptual resources may have the same meaning, they may have different owners, different labels, different documentation, different history, and of course a different future.

Any party may, however, assert a mapping relationship between any two conceptual resources. The SKOS Mapping vocabulary [SKOSMAP] contains a number of RDF properties for expressing mapping relationships between conceptual resources.

Concepts in Multiple Schemes

SKOS Core assumes that the meaning of a conceptual resource is not affected by any RDF or natural language statements made about it. The concept's owner determines the meaning of a concept, and statements about the concept serve only to explain the meaning of the concept to others. It is up to the concept's owner to provide an informative set of statements about the concept, to ensure that other people will correctly interpret the meaning, and so share the same understanding.

In practise, this means that a concept may be used in any context, and the meaning of the concept will remain unchanged. However, bear in mind that the set of semantic relationships that a concept is involved in are an important part of the explanation of the meaning of that concept, and will influence the interpretation made by other people. Where a concept has little documentation, people will rely heavily on the semantic context of the concept to form an idea of meaning. Therefore the extent to which the meaning a concept is effectively explained via labels and documentation will determine how usable that concept is outside of the originally anticipated context.

Concept Scheme Versioning

This section suggests how properties from the OWL [OWL] and DCMI Terms [DCMITERMS] vocabularies could be used to assert information about concept scheme versioning.

For example, if I allocated the URI http://www.example.com/conceptscheme to a concept scheme (in its current state), and then allocated the URIs http://www.example.com/conceptscheme/1 and http://www.example.com/conceptscheme/2 to specific versions of the scheme, I could declare that:

Example

<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:dcterms="http://purl.org/dc/terms/"
  xmlns:owl="http://www.w3.org/2002/07/owl#">

  <skos:ConceptScheme rdf:about="http://www.example.com/conceptscheme">
    <dcterms:hasVersion rdf:resource="http://www.example.com/conceptscheme/1"/>
    <dcterms:hasVersion rdf:resource="http://www.example.com/conceptscheme/2"/>
  </skos:ConceptScheme>
  
  <skos:ConceptScheme rdf:about="http://www.example.com/conceptscheme/1">
    <dcterms:isVersionOf rdf:resource="http://www.example.com/conceptscheme"/>
  </skos:ConceptScheme>

  <skos:ConceptScheme rdf:about="http://www.example.com/conceptscheme/2">
    <dcterms:isVersionOf rdf:resource="http://www.example.com/conceptscheme"/>
    <owl:priorVersion rdf:resource="http://www.example.com/conceptscheme/1"/>
  </skos:ConceptScheme>

</rdf:RDF>

I could then use the skos:inScheme property to declare which scheme versions a concept is included in, for example:

Example

<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xmlns:dcterms="http://purl.org/dc/terms/">
  
  <skos:Concept rdf:about="http://www.example.com/concepts#bananas">
    <skos:prefLabel>bananas</skos:prefLabel>
    <skos:altLabel>plantains</skos:altLabel>
    <skos:inScheme rdf:resource="http://www.example.com/conceptscheme"/>
    <skos:inScheme rdf:resource="http://www.example.com/conceptscheme/1"/>
    <skos:inScheme rdf:resource="http://www.example.com/conceptscheme/2"/>
    <dcterms:replaces rdf:resource="http://www.example.com/plantains#concept"/>
    <skos:changeNote rdf:parseType="Resource">
      <rdf:value>The scope of this concept modified to include plantains also after version 1; 'plantains' added as an altLabel.</rdf:value>
      <dc:date>2004-11-20</dc:date>
    </skos:changeNote>
  </skos:Concept>

  <skos:Concept rdf:about="http://www.example.com/concepts#plantains">
    <skos:prefLabel>plantains</skos:prefLabel>
    <skos:inScheme rdf:resource="http://www.example.com/conceptscheme"/>
    <skos:inScheme rdf:resource="http://www.example.com/conceptscheme/1"/>
    <dcterms:isReplacedBy rdf:resource="http://www.example.com/concepts#bananas"/>
  </skos:Concept>

</rdf:RDF>

Consult the OWL [OWL] and Dublin Core [DCMITERMS] specifications for full usage guidelines with respect to properties in those vocabularies.

HTTP URIs for Concepts

The W3C's Technical Architecture Group (TAG) has closed the issue known as httpRange-14 [HTTP Range 14]. This issue considered whether or not it is consistent with the Architecture of the Web (and therefore appropriate) to use HTTP URIs to identify anything other than 'information resources'. The resolution simply states that, if a resource denoted by an HTTP URI returns a 303 ('see other') response code in reply to an HTTP GET request, then the nature of that resource is unknown.

Therefore, the use of any form of HTTP URIs as identifiers for concepts (resources of type skos:Concept) is consistent with the Architecture of the Web, provided that any such resource returns a 303 response code in reply to all HTTP GET requests.

It is hoped that, in subsequent drafts of this document, we will be able to describe more detailed recommendations for setting up web servers to support the use of HTTP URIs as identifiers for concepts.


References

[AAT]
Art and Architecture Thesaurus. The J. Paul Getty Trust, 2004. (See http://www.getty.edu/research/conducting_research/vocabularies/aat/)
[BLISS]
C. K. Bliss. Semantography. Semantography Publications, Sidney, Australia, 1965. (See http://pages.istar.ca/~bci/)
[Collections and Arrays]
SkosDev/SkosCore/CollectionsAndArrays. ESW Wiki Topic. (See http://esw.w3.org/topic/SkosDev/SkosCore/CollectionsAndArrays)
[BS8723]
BS8723, Structured Vocabularies for Information Retrieval. British Standards Institution (BSI) Public Draft, 2004.
[CALD]
Cambridge Advanced Learner's Dictionary, Cambridge Dictionaries Online. (See http://dictionary.cambridge.org/)
[DCMIMODEL]
Andy Powell, Mikael Nilsson, Ambjorn Naeve, Pete Johnston. DCMI Abstract Model. Dublin Core Metadata Initiative, 2005. (See http://dublincore.org/documents/abstract-model/)
[DCMITERMS]
DCMI Metadata Terms. Dublin Core Metadata Initiative, 2004. (See http://dublincore.org/documents/dcmi-terms/)
[FOAF]
Dan Brickley, Libby Miller. FOAF Vocabulary Specification, 2004. (See http://xmlns.com/foaf/0.1/)
HTTP Range 14
httpRange-14: What is the range of the HTTP dereference function? W3C TAG Issues List. (See http://www.w3.org/2001/tag/issues.html#httpRange-14)
[Jena Inference]
Dave Reynolds. Jena 2 Inference Support. Sourceforge, 2004. (See http://jena.sourceforge.net/inference/)
[N3]
Tim Berners-Lee. Primer: Getting into RDF & Semantic Web using N3. World Wide Web Consortium, 2004. (See http://www.w3.org/2000/10/swap/Primer)
[N-Triple]
Jan Grant, Dave Beckett, editors. RDF Test Cases (Section 3. N-Triples). World Wide Web Consortium, 2004. (See http://www.w3.org/TR/rdf-testcases/#ntriples)
[OWL]
Deborah L. McGuinness, Frank van Harmelen, editors. OWL Web Ontology Language Overview. World Wide Web Consortium, 2004. (See http://www.w3.org/TR/owl-features/)
[PSI]
Steve Pepper, editor. Published Subjects: Introduction and Basic Requirements. OASIS Published Subjects Technical Committee Recommendation, 2003-06-24 (See http://www.oasis-open.org/committees/documents.php?wg_abbrev=tm-pubsubj)
[RDF Concepts]
Graham Klyne, Jeremy Carroll, editors.Resource Description Framework (RDF): Concepts and Abstract Syntax. World Wide Web Consortium, 2004. (See http://www.w3.org/TR/rdf-concepts/)
[RDF Schema]
Dan Brickley, R.V. Guha, editors. RDF Vocabulary Description Language 1.0: RDF Schema. World Wide Web Consortium, 2004. (See http://www.w3.org/TR/rdf-schema/)
[RDF Semantics]
Patrick Hayes, editor. RDF Semantics. World Wide Web Consortium, 2004. (See http://www.w3.org/TR/rdf-mt/)
[RDF Syntax]
Dave Beckett, editor. RDF/XML Syntax Specification (Revised). World Wide Web Consortium, 2004. (See http://www.w3.org/TR/rdf-syntax-grammar/)
[SKOS Core 1.0]
Alistair Miles, Nikki Rogers, Dave Beckett. SKOS Core 1.0 Guide. World Wide Web Consortium, 2004. (See http://www.w3.org/2001/sw/Europe/reports/thes/1.0/guide/)
[SKOS Core Guide]
Alistair Miles, Dan Brickley, editors. SKOS Core Guide, 2nd W3C Public Working Draft. World Wide Web Consortium, 2005. (See http://www.w3.org/TR/2005/WD-swbp-skos-core-guide-20051102)
[SKOS Core Spec]
Alistair Miles, Dan Brickley, editors. SKOS Core Vocabulary Specification, 2nd W3C Public Working Draft. World Wide Web Consortium, 2005. (See http://www.w3.org/TR/2005/WD-swbp-skos-core-spec-20051102)
[SKOSMAP]
Alistair Miles, editor. SKOS Mapping Vocabulary Specification. World Wide Web Consortium, 2004. (See http://www.w3.org/2004/02/skos/mapping/spec/)
[SWAD-E Thes]
SWAD-Europe Thesaurus Activity. (See http://www.w3.org/2001/sw/Europe/reports/thes/)
[Turtle]
Dave Beckett. Turtle - Terse RDF Triple Language. ILRT, University of Bristol, 2004. (See http://www.ilrt.bris.ac.uk/discovery/2004/01/turtle/)
[UKAT]
The UK Archival Thesaurus. See (http://www.ukat.org.uk/)
[VMTF Note]
Tom Baker, editor. Managing a Vocabulary for the Semantic Web -- Best Practice. Draft under development for W3C Semantic Web Best Practices and Deployment Working Group. (See http://esw.w3.org/topic/VocabManagementNote)
[WEBARCH]
Ian Jacobs, Norman Walsh, editors. Architecture of the World Wide Web, Volume One. World Wide Web Consortium, 2004. (See http://www.w3.org/TR/webarch/)
[Willpower Glossary]
Stella Dextre Clarke, Alan Gilchrist, Ron Davies and Leonard Will. Glossary of terms relating to thesauri and other forms of structured vocabulary for information retrieval. Willpower Information. (See http://www.willpowerinfo.co.uk/glossary.htm)
[XMLLANG]
IETF (Internet Engineering Task Force). RFC 3066: Tags for the Identification of Languages, ed. H. Alvestrand. 2001. (See http://www.ietf.org/rfc/rfc3066.txt)

$Id: Overview.html,v 1.8 2005/11/04 18:33:04 swick Exp $

Valid XHTML 1.0! Valid CSS!