N.B. This document series is now deprecated. Please see http://www.w3.org/2004/02/skos/core/guide/ for the latest version of the SKOS Core Guide.
This document describes modular extensible RDF vocabularies for monolingual thesauri, supporting the ISO 2788 standard.
This section describes the status of this document at the time of its publication. This is a draft document and may be updated, replaced, or obsoleted by other documents at any time. The latest status of this document series is maintained at the W3C.
This document is a public DRAFT for discussion. This document is an output of the research work of the Semantic Web Advanced Development for Europe Project, which is associated with the W3C Semantic Web Activity. This document is made available by W3C for discussion only. Publication of this document by W3C does not imply endorsement by W3C, including the Team and Membership.
Comments on this document are welcome and should be sent to the authors or to the public-esw-thes@w3.org list. An archive of this list is available at http://lists.w3.org/Archives/Public/public-esw-thes/.
This document describes RDF vocabularies for encoding data from monolingual thesauri and similar knowledge organisation systems (KOS).
Extensibility, re-usability and interoperability are design features demanded by the nature and environment of the intended use of these schema. Therefore, rather than designing a single, specialised vocabulary which can be used to encode most monolingual thesauri as is, we designed this system for maximum extensibility and re-usability, so different flavours of thesauri can be encoded ithout ocmpleteyl redesigning the whole thing. Interoperability in mind, thesauri will be used alongside OWL and other kinds of KOS.
So we present here three vocabulary modules. The first module, which we will call kos-core, is designed to allow the fundamental features of all thesauri and similar KOS to be captured. This vocabulary uses the base namespace
http://www.w3c.rl.ac.uk/2003/10/31-kos-core#
The second module, which we will call kos-thes, is designed to allow the representation of features that are common to thesauri as a distinct type of KOS. This vocabulary uses the base namespace
http://www.w3c.rl.ac.uk/2003/10/31-kos-thes#
This module, kos-iso2788, contains components specific to thesauri, defined in relation to the thesaurus standard ISO 2788:1986. The reason for defining components in relation to a standard is explained in full in section [???]. As new standards for thesauri emerge, this module would be replaced by new modules defined in relation to the new standards. These components are defined in relation to the base namespace
http://www.w3c.rl.ac.uk/2003/10/31-kos-iso2788#
In all the code and examples that follow in this document, you may assume that they have all been defined using the document type declaration given by the following
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE rdfs [ <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#"> <!ENTITY xsd "http://www.w3.org/2000/10/XMLSchema#"> <!ENTITY dc "http://purl.org/dc/elements/1.1/"> <!ENTITY dct "http://purl.org/dc/terms/"> <!ENTITY kos "http://www.w3c.rl.ac.uk/2003/10/31-kos-core#"> <!ENTITY thes "http://www.w3c.rl.ac.uk/2003/10/31-kos-thes#"> <!ENTITY iso2788 "http://www.w3c.rl.ac.uk/2003/10/31-kos-iso2788#"> ]>
This section described the classes and properties of this schema module, and provides a description and examples of their intended usage. All snippets of rdf/xml in this section may be assumed to fall within the rdf root element as follows
<rdf:RDF xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;" xmlns="http://www.w3c.rl.ac.uk/2003/10/31-kos-core#" xml:base="http://www.w3c.rl.ac.uk/2003/10/31-kos-core"> </rdf:RDF>
<rdfs:Class rdf:ID="Concept"> <rdfs:label>Concept</rdfs:label> </rdfs:Class>
<rdf:Property rdf:ID="prefLabel"> <rdfs:label>preferred-label</rdfs:label> <rdfs:subPropertyOf rdf:resource="&rdfs;label"/> </rdf:Property>
<rdf:Property rdf:ID="altLabel"> <rdfs:label>alternative-label</rdfs:label> <rdfs:subPropertyOf rdf:resource="&rdfs;label"/> </rdf:Property>
<rdf:Property rdf:ID="descriptor"> <rdfs:label>descriptor</rdfs:label> <rdfs:subPropertyOf rdf:resource="&rdf;value"/> <rdfs:subPropertyOf rdf:resource="#prefLabel"/> <rdfs:domain rdf:resource="#Concept"/> </rdf:Property>
<rdf:Property rdf:ID="externalID"> <rdfs:label>external-ID</rdfs:label> <rdfs:subPropertyOf rdf:resource="&rdf;value"/> <rdfs:domain rdf:resource="#Concept"/> </rdf:Property>
<rdf:Property rdf:ID="semanticRelation"> <rdfs:label>semantic-relation</rdfs:label> <rdfs:domain rdf:resource="#Concept"/> <rdfs:range rdf:resource="#Concept"/> </rdf:Property>
This section gives examples of how to define concepts using kos-core alone. There are two ways that this can be done.
Every concept is assigned a globally unique URI. A concept definition might then look something like
<rdf:RDF xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;" xmlns:kos="&kos;"> <kos:Concept rdf:about="http://www.w3c.rl.ac.uk/examples/thesaurus#001"> <kos:prefLabel>Sausages<kos:descriptor> <kos:altLabel>Bangers</kos:altLabel> </kos:Concept> </rdf:RDF>
Concepts are defined by their properties. They are not assigned unique URIs. A concept declaration might then look like
<rdf:RDF xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;" xmlns:kos="&kos;"> <kos:Concept> <kos:descriptor>Java programming language</kos:descriptor> <kos:altLabel>Java</kos:altLabel> <rdfs:isDefinedBy rdf:resource="http://www.w3c.rl.ac.uk/examples/thesaurus"/> </kos:Concept> </rdf:RDF>
Because the kos:descriptor property uniquely identifies a concept within a KOS scheme, and the scheme itself has the unique gloablly identifying URI, the combination of these two properties constitutes a globally unique identifier for the concept.
Another example is
<rdf:RDF xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;" xmlns:kos="&kos;"> <kos:Concept> <kos:prefLabel>Sausages<kos:descriptor> <kos:altLabel>Bangers</kos:altLabel> <kos:externalID>001</kos:externalID> <rdfs:isDefinedBy rdf:resource="http://www.w3c.rl.ac.uk/examples/thesaurus"/> </kos:Concept> </rdf:RDF>
The kos:externalID property also uniqeuly identifies a concept within a scheme, so the property pair (kos:externalID rdfs:isDefinedBy) also globally uniquely identifies a concept.
Therefore, in order that reference by description may be used, a concept must be defined with a kos:descriptor and/or a kos:externalID.
The following code snippets have been defined in relation to the root element as follows
<rdf:RDF xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;" xmlns:kos="&kos;" xmlns="http://www.w3c.rl.ac.uk/2003/10/31-kos-thes#" xml:base="http://www.w3c.rl.ac.uk/2003/10/31-kos-thes"> </rdf:RDF>
<rdfs:Class rdf:ID="Facet"> <rdfs:label>Facet</rdfs:label> <rdfs:subClassOf rdf:resource="&kos;Concept"/> </rdfs:Class>
<rdf:Property rdf:ID="inFacet"> <rdfs:label>in-facet</rdfs:label> <rdfs:subPropertyOf rdf:resource="&kos;semanticRelation"/> <rdfs:range rdf:resource="#Facet"/> </rdf:Property>
<rdf:Property rdf:ID="scopeNote"> <rdfs:label>scope-note</rdfs:label> <rdfs:subPropertyOf rdf:resource="&rdfs;comment"/> <rdfs:domain rdf:resource="&kos;Concept"/> </rdf:Property>
<rdf:Property rdf:ID="generalNote"> <rdfs:label>general-note</rdfs:label> <rdfs:subPropertyOf rdf:resource="#scopeNote"/> </rdf:Property>
<rdf:Property rdf:ID="hierarchyNote"> <rdfs:label>hierarchy-note</rdfs:label> <rdfs:subPropertyOf rdf:resource="#scopeNote"/> </rdf:Property>
<rdf:Property rdf:ID="editorNote"> <rdfs:label>editor-note</rdfs:label> <rdfs:subPropertyOf rdf:resource="#scopeNote"/> </rdf:Property>
<rdf:Property rdf:ID="historyNote"> <rdfs:label>history-note</rdfs:label> <rdfs:subPropertyOf rdf:resource="#scopeNote"/> </rdf:Property>
Again there is the option to define concepts using uris or reference by description. Most of the concept definition reuses kos-core. Extension allows concepts to be places into facets, and scope notes to be defined. e.g.
If all the concepts have been defined with explicit URIs, then some example data is
<rdf:RDF xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;" xmlns:kos="&kos;" xmlns:thes="&thes;"> <kos:Concept rdf:about="http://www.w3c.rl.ac.uk/examples/thesaurus#002"> <kos:prefLabel>Mushy peas<kos:descriptor> <kos:altLabel>Mashed peas</kos:altLabel> <thes:inFacet rdf:resource="http://www.w3c.rl.ac.uk/examples/thesaurus#F01"/> <thes:scopeNote>An English speciality, commonly served in fish & chip shops.</thes:scopeNote> </kos:Concept> </rdf:RDF>
In this example, the subject of the thes:inFacet is the Facet [???].
Another example employing reference by description...
<rdf:RDF xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;" xmlns:kos="&kos;" xmlns:thes="&thes;"> <kos:Concept> <kos:descriptor>Python programming language<kos:descriptor> <kos:altLabel>Python</kos:altLabel> <thes:inFacet> <thes:Facet> <kos:descriptor>Languages</kos:descriptor> <rdfs:isDefinedBy rdf:resource="http://www.w3c.rl.ac.uk/examples/thesaurus"/> </thes:Facet> </thes:inFacet> <thes:scopeNote>Refers to all forms and versions of the Python programming language</thes:scopeNote> <rdfs:isDefinedBy rdf:resource="http://www.w3c.rl.ac.uk/examples/thesaurus"/> </kos:Concept> </rdf:RDF>
The kos-iso2788 module allows the definition of semantic relations between concepts in a thesaurus. We have defined these properties in realtion to standards. This is because the exact meaning of 'broader' etc. does vary between thesauri. Therefore we strongly encourage the precise definition of the exact meaning of a semanticRelation. The best place for this should be in the standards. Although iso2788 has been criticised, we use it here to demonstrate the prinicpal of defining semnatic relations in relation to the current standards. These properties may be replaced when new standards emerge.
The snippets in this section may be assumed to reside within the root element defined as follows
<rdf:RDF xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;" xmlns:kos="&kos;" xmlns="http://www.w3c.rl.ac.uk/2003/10/31-kos-iso2788#" xml:base="http://www.w3c.rl.ac.uk/2003/10/31-kos-iso2788"> </rdf:RDF>
<rdf:Property rdf:ID="broader"> <rdfs:label>has-broader-concept</rdfs:label> <rdfs:subPropertyOf rdf:resource="&kos;semanticRelation"/> </rdf:Property>
<rdf:Property rdf:ID="narrower"> <rdfs:label>has-narrower-concept</rdfs:label> <rdfs:subPropertyOf rdf:resource="&kos;semanticRelation"/> </rdf:Property>
<rdf:Property rdf:ID="related"> <rdfs:label>has-related-concept</rdfs:label> <rdfs:subPropertyOf rdf:resource="&kos;semanticRelation"/> </rdf:Property>
We may now employ these vocabs for the full definiion of thesaurus concepts
<rdf:RDF xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;" xmlns:kos="&kos;" xmlns:thes="&thes;" xmlns:iso2788="&iso2788;"> <kos:Concept> <kos:descriptor>Cod (fish)<kos:descriptor> <kos:altLabel>Cod</kos:altLabel> <thes:scopeNote>The variety of fish</thes:scopeNote> <rdfs:isDefinedBy rdf:resource="http://www.w3c.rl.ac.uk/examples/thesaurus"/> <iso2788:broader> <kos:Concept> <kos:descriptor>Salt-water fish</kos:descriptor> <rdfs:isDefinedBy rdf:resource="http://www.w3c.rl.ac.uk/examples/thesaurus"/> </kos:Concept> </iso2788:broader> <iso2788:related> <kos:Concept> <kos:descriptor>Fish and chips (cuisine)</kos:descriptor> <rdfs:isDefinedBy rdf:resource="http://www.w3c.rl.ac.uk/examples/thesaurus"/> </kos:Concept> </iso2788:related> <iso2788:narrower> <kos:Concept> <kos:descriptor>North atlantic cod</kos:descriptor> <rdfs:isDefinedBy rdf:resource="http://www.w3c.rl.ac.uk/examples/thesaurus"/> </kos:Concept> </iso2788:narrower> <thes:inFacet> <thes:Facet> <kos:descriptor>Animals</kos:descriptor> <rdfs:isDefinedBy rdf:resource="http://www.w3c.rl.ac.uk/examples/thesaurus"/> </thes:Facet> </thes:inFacet> </kos:Concept> </rdf:RDF>
Or where concepts have been given explicit URIs
<rdf:RDF xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;" xmlns:kos="&kos;" xmlns:thes="&thes;" xmlns:iso2788="&iso2788;"> <kos:Concept rdf:about="http://www.w3c.rl.ac.uk/examples/thesaurus#002"> <kos:descriptor>Java programming language<kos:descriptor> <kos:altLabel>Java</kos:altLabel> <thes:scopeNote>Refers to all forms and versions of the Java programming language</thes:scopeNote> <iso2788:broader rdf:resource="http://www.w3c.rl.ac.uk/examples/thesaurus#007"/> <iso2788:narrower rdf:resource="http://www.w3c.rl.ac.uk/examples/thesaurus#011"/> <iso2788:related rdf:resource="http://www.w3c.rl.ac.uk/examples/thesaurus#008"/> <thes:inFacet rdf:resource="http://www.w3c.rl.ac.uk/examples/thesaurus#F01"/> </kos:Concept> </rdf:RDF>
We recommend the use of qualified dublin core. If the Concepts of the thesaurus have been defined with explicit URIs, then a subject declaration would lok like
<rdf:RDF xmlns:rdf="&rdf;" xmlns:dc="&dc;"> <rdf:Description rdf:about="http://www.w3c.rl.ac.uk/examples/web/page_java.html"> <dc:subject rdf:resource="http://www.w3c.rl.ac.uk/examples/thesaurus#002"/> </rdf:Description> </rdf:RDF>
If the concepts have been defined by their properties, we use reference by description as follows
<rdf:RDF xmlns:rdf="&rdf;" xmlns:dc="&dc;" xmlns:rdfs="&rdfs;" xmlns:kos="&kos;"> <rdf:Description rdf:about="http://www.w3c.rl.ac.uk/examples/web/page_cod.html"> <dc:subject> <kos:Concept> <kos:descriptor>Cod (fish)</kos:descriptor> <rdfs:isDefinedBy rdf:resource"http://www.w3c.rl.ac.uk/examples/thesaurus"/> </kos:Concept> </dc:subject> </rdf:Description> </rdf:RDF>
Because the domain of the kos:descriptor and kos:externalID properties is restricted to Concepts, it is also perfectly acceptable to use the shortened syntax:
<rdf:RDF xmlns:rdf="&rdf;" xmlns:dc="&dc;" xmlns:rdfs="&rdfs;" xmlns:kos="&kos;"> <rdf:Description rdf:about="http://www.w3c.rl.ac.uk/examples/web/page_cod.html"> <dc:subject rdf:parseType="resource"> <kos:descriptor>Cod (fish)</kos:descriptor> <rdfs:isDefinedBy rdf:resource"http://www.w3c.rl.ac.uk/examples/thesaurus"/> </dc:subject> </rdf:Description> </rdf:RDF>
Because the properties are subproperties of rdf:value, this is entirely consistent with dc standard usage for subject declarations, for example
<rdf:RDF xmlns:rdf="&rdf;" xmlns:dc="&dc;" xmlns:rdfs="&rdfs;"> <!-- Example taken from dc in rdf spec --> <rdf:Description rdf:about="http://www.w3c.rl.ac.uk/examples/web/page_cod.html"> <dc:subject> <rdf:Description> <rdf:value>???</rdf:value> <rdfs:isDefinedBy rdf:resource"???"/> </rdf:Description> </dc:subject> </rdf:Description> </rdf:RDF>
There are also other acceptable alternative usages. The first is that you may define a subclass of the kos:Concept class, to indicate the set of all concepts that are within a particular kos scheme. So in the examples above I could have defined the class swad:ExampleThesaurusConcept as a subclass of the kos:Concept class and typed all the concepts i defined using this. Then, because the rdf:type of the concept indicates the kos scheme from which the concept is defined, i can use this instead of the rdfs:isDefinedBy property. This allows subject declarations such as
<rdf:RDF xmlns:rdf="&rdf;" xmlns:dc="&dc;" xmlns:rdfs="&rdfs;" xmlns:kos="&kos;" xmlns:swad="http://www.w3c.rl.ac.uk/examples/thesaurus#"> <rdf:Description rdf:about="http://www.w3c.rl.ac.uk/examples/web/page_cod.html"> <dc:subject> <swad:ExampleThesaurusConcept> <kos:descriptor>Cod (fish)</kos:descriptor> </swad:ExampleThesaurusConcept> </dc:subject> </rdf:Description> </rdf:RDF>
This kind of subject declaration is equivalent to the dublin core usage such as
<rdf:RDF xmlns:rdf="&rdf;" xmlns:dc="&dc;" xmlns:rdfs="&rdfs;"> <!-- Example taken from dc in rdf spec --> <rdf:Description rdf:about="http://www.w3c.rl.ac.uk/examples/web/page_cod.html"> <dc:subject> <dct:MeSH> <rdf:value>???</rdf:value> <rdfs:label>???</rdfs:label> </dct:MeSH> </dc:subject> </rdf:Description> </rdf:RDF>
In the above example, schematically, the MeSH class, and also ??? other classes from dct, are equivalent to subclasses of the kos:Concept class.
Thesauri come in many flavours. Modules have bene designed for extensibility and adaptibility. If your thesaurus contains non-standard relations, you may define your own relations, extending the kos:semanticrelation property. However we strongly recommend that you provide a precise and complete description of the intended meaning of wuch a property.
Please also refer to subsequent deliverables referring to relation between OWL and thes vocabs. How to deal with more precise smeantic relations such as instantiation, class subsumption and part-of relations.
ISO 2788
ISO 5964
Deliverable 8.2
ILRT schema
Limber schema