June 22, 2005
SKOS (Simple Knowledge Organization System), recently introduced by the W3C, is a model for expressing knowledge organization systems in a machine-understandable way, within the framework of the Semantic Web. The SKOS Core Vocabulary is an RDF (Resource Description Framework) application. Using RDF allows data to be linked and merged with other RDF data by Semantic Web applications. SKOS Core provides a model for expressing the basic structure and content of concept schemes, including thesauri, classification schemes, subject heading lists, taxonomies, terminologies, glossaries, and other types of controlled vocabulary. This article will provide some examples for using SKOS and discuss the general principles of building such knowledge bases.
The Semantic Web is a vision for the future of the Web in which information is given explicit meaning, making it easier for machines to process and integrate information available on the Web. The Semantic Web relies on XML's ability to define schemes and RDF's flexible approach to representing data. The next element required for the Semantic Web is OWL, the Web Ontology Language, which can formally describe—using, most commonly, a logical formalism known as Description Logic—the semantics of classes and properties used in Web documents.
OWL adds a layer of expressive power to RDF and provides powerful tools for defining complex conceptual structures, which can be used to generate, among other things, rich metadata. However, the class-oriented, logically precise modeling required to construct useful web ontologies is demanding in terms of expertise, effort, and therefore cost. In many cases this type of modeling may be unnecessary or unsuited to requirements. So there is a need for a language to express vocabularies of concepts for use in semantically rich metadata, which is powerful enough to support semantically enhanced search, but simple enough to be undemanding in terms of the cost and expertise required to use it.
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.
As an example of the kind of structure SKOS was designed to represent, let's look at the example definition of the word "canals" from Alexandria Digital Library Thesaurus:
canals » A feature type category for
places such as the Erie Canal.
Used for: » The category canals is used instead of any of the following.
- canal bends
- canalized streams
- ditch mouths
- drainage canals
- drainage ditches
- … more …
Broader Terms: hydrographic structures » Canals is a sub-type of "hydrographic structures."
Related Terms: » The following is a list of other categories related to canals (non-hierarchical relationships)
- transportation features
Scope Note: Manmade waterway used by watercraft or for drainage, irrigation, mining, or water power.
Now let's represent this complex structure using the SKOS Core Vocabulary:
The corresponding machine-readable representation in RDF-XML (source code):
<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.my.com/#canals"> <skos:definition>A feature type category for places such as the Erie Canal</skos:definition> <skos:prefLabel>canals</skos:prefLabel> <skos:altLabel>canal bends</skos:altLabel> <skos:altLabel>canalized streams</skos:altLabel> <skos:altLabel>ditch mouths</skos:altLabel> <skos:altLabel>ditches</skos:altLabel> <skos:altLabel>drainage canals</skos:altLabel> <skos:altLabel>drainage ditches</skos:altLabel> <skos:broader rdf:resource="http://www.my.com/#hydrographic%20structures"/> <skos:related rdf:resource="http://www.my.com/#channels"/> <skos:related rdf:resource="http://www.my.com/#locks"/> <skos:related rdf:resource="http://www.my.com/#transportation%20features"/> <skos:related rdf:resource="http://www.my.com/#tunnels"/> <skos:scopeNote>Manmade waterway used by watercraft or for drainage, irrigation, mining, or water power</skos:scopeNote> </skos:Concept> </rdf:RDF>
SKOS Concept Modeling and Labeling
The current edition of SKOS Vocabulary replaces the earlier SKOS Core 1.0 Guide published by the SWAD-Europe Thesaurus Activity. The origins and background of technologies preceding SKOS are well defined in a XTech 2005 Proceedings SKOS report, so let's skip history description and go directly to language definition.
Let's look at the RDF-XML more closely. The
skos:Concept class says that a
resource is a conceptual resource. This sounds vague, but according to the RDF Semantics
standard: assertion is any expression which is claimed to be true; class is a
general concept, category or classification; resource is an entity or anything in the
skos:Concept is used to define an atomic conceptual
resource. In the example above, the SKOS document defines a thesaurus entry for the
skos:Concept is not the only class available in SKOS. There are also other
skos:Collectionis a meaningful collection of concepts. Labelled collections can be used with collectable semantic relation properties (
skos:narrower), where you would like a set of concepts to be displayed under a node label in the hierarchy;
skos:CollectablePropertyis a property which can be used with a
skos:ConceptSchemeis a set of concepts, optionally including statements about semantic relationships between those concepts. Thesauri, classification schemes, subject-heading lists, taxonomies, terminologies, glossaries and other types of controlled vocabulary are all examples of concept schemes;
skos:OrderedCollectionis an ordered collection of concepts, where both the grouping and the ordering are meaningful.
SKOS Core uses labeling properties to assign tokens to a resource, where the token
intended to denote the resource in natural language or other representations intended
human consumption. The
allow you to assign preferred and alternative lexical labels to a resource. Under
altLabel values can be considered
synonyms. However, when labeling resources of type
skos:Concept, it is not
necessary to restrict preferred and alternative lexical labels to precise synonyms.
example, the following is valid:
<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.my.com/#good"> <skos:prefLabel>good</skos:prefLabel> <skos:altLabel>bad</skos:altLabel> </skos:Concept> </rdf:RDF>
Abbreviations and acronyms may also be used to label concepts, and the choice of
to use them as preferred or alternative terms is unconstrained. However, misspelled
are normally included among the hidden labels. A hidden lexical label is a lexical
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
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
misspelled variants of other lexical labels. The value of the properties
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.
values permissible as language tags are given by RFC3066. Here's an 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.my.com/#good"> <skos:prefLabel xml:lang="en">good</skos:prefLabel> <skos:altLabel xml:lang="en">bad</skos:altLabel> <skos:prefLabel xml:lang="fr">bon</skos:prefLabel> <skos:altLabel xml:lang="fr">mauvais</skos:altLabel> </skos:Concept> </rdf:RDF>
Symbolic labeling means labeling a concept with an image. To assign preferred and
alternative symbolic labels to a concept, use the
Adding Description of a Concept
There are eight properties you can use to add human-readable documentation to the
description of a concept. The properties are
skos:changeNote. Descriptive notes for a concept can be public or private
skos:changeNote are private notes, others
are public. Thus a
skos:definition is also a
skos:editorialNote is also a
skos:privateNote and so on. To
clarify the difference between
a definition should be an attempt to completely explain the meaning of a concept,
scope note may consist of partial information about what is or is not included within
meaning (or scope) of a concept. To clarify the difference between a
skos:historyNote and a
skos:changeNote, a history note is a
piece of information intended for users of the scheme, documenting significant changes
the meaning, form, or state of a concept, whereas a change note is intended for documenting
fine-grained changes to a concept for the purposes of administration and management.
There are three recommended usage patterns for the SKOS Core documentation properties:
- Documentation as an RDF Literal
- Documentation as a Related Resource Description
- Documentation as a Document Reference
An RDF Literal 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. This is the way we used it in our example SKOS document:
<skos:scopeNote>Manmade waterway used by watercraft or for drainage, irrigation, mining, or water power</skos:scopeNote>
Actually this is a simplified example; presented in core RDF it will look a bit more
rdf:value tags). Related Resource Description allows you to
structure documentation as a related resource description. Document Reference is a
that allows you to refer to documentation that is itself a document, via the URI of
document. For example,
The SKOS Core Vocabulary includes the following properties for asserting semantic
relationships between concepts:
skos:related. In a
semanticRelation is the top semantic relationship and others
are children relationships. To assert that one concept is broader in meaning (i.e.
general) than another, where the scope (meaning) of one falls completely within the
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. This is how we used it in our example document:
<skos:Concept rdf:about="http://www.my.com/#canals"> <skos:broader rdf:resource="http://www.my.com/#hydrographic%20structures"/> </skos:Concept>
skos:narrower are each other's
inverse. Both the properties
transitive properties. To assert an associative relationship between two concepts,
<skos:Concept rdf:about="http://www.my.com/#canals"> <skos:related rdf:resource="http://www.my.com/#channels"/> <skos:related rdf:resource="http://www.my.com/#locks"/> </skos:Concept>
Collecting Concepts Together
You can create and define a meaningful group of concepts. However, meaningful collections
of concepts are still unstable and can be changed in the future. SKOS Core has special
vocabulary to handle collections. However, RDF has some generic vocabulary
rdf:Seq) to handle ordered and unordered groups of
resources; while preparing a W3C Working Draft, there has been extended discussion
mailing lists as to whether these should be used. The choice has been made provisionally
rdf:Seq for this purpose. (See the explanation if
To define a meaningful collection of concepts, use the
skos:member property. To assign a lexical label to a collection, use
rdfs:label property. The most common use of a labelled collection is to
enhance a hierarchical display. You can describe narrower and broader relationships
a concept and a collection. The class
skos:CollectableProperty supports a
generic mechanism by which collections can be involved in semantic relationships (and
sorts of statements). To define an ordered collection of concepts, use the
skos:OrderedCollection class with the
An ordered collection may also have a label (use
collections can be used with semantic relation properties in the same way as unordered
skos:OrderedCollection is a subclass of
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
as a set of concepts, optionally including statements about semantic relationships
those concepts. The
skos:ConceptScheme class allows you to assert that a
resource is a concept scheme.
Some Open Issues
There are still some open issues, where no firm consensus has been reached and where readers can potentially help to improve future SKOS W3C Recommendations.
- Relationship to RDFS and OWL ontologies. There is a subtle difference between SKOS Core and other RDF applications like FOAF. SKOS Core allows you to model a set of concepts as an RDF graph. Other RDF applications, such as FOAF, allow you to model things like people, organizations, places etc. as an RDF graph. Technically, SKOS Core introduces a layer of indirection into the modeling.
- Mapping Concept. You can assert a mapping relationship between any two conceptual resources. The property owl:sameAs implies that two resources are identical in every way, and should not be used to express the fact that two conceptual resources share the same meaning.
- Concept Scheme versioning. You can use different URIs for different namespaces handling different vocabularies. However, while using Dublin Core specification, there can be special tags and attributes used for versioning.