ExtendingSkosCore
Extending SKOS Core
This is a wiki draft of a proposed note to describe how to 'extend' SKOS Core.
Abstract
@@TODO
RDF and RDFS in a Nutshell
In this document, the following prefixes are used to abbreviate URIs:
@prefix skos: <http://www.w3.org/2004/02/skos/core#>. @prefix rdf: <@@TODO> . @prefix rdfs: <@@TODO> . @prefix foaf: <@@TODO> . @prefix dc: <@@TODO> . @prefix dct: <@@TODO> .
@@TODO
How to Declare RDF Properties and RDFS Classes
The SKOS Core Vocabulary consists of some RDF properties and some RDFS classes. For example, skos:Concept
is an RDFS class, and skos:prefSymbol
is an RDF property. To extend SKOS Core in either of the two ways described below, you will need to know how to declare your own RDF Properties and RDFS Classes.
The procedure for declaring an RDF Property or an RDFS Class is exactly the same as the procedure for declaring a SKOS Concept:
- First you allocate a URI to the property/class you wish to declare.
- Second, you create some RDF statements that describe the property/class. This is also known as creating an RDF description of the property/class.
- Third, you serialise the RDF description of your property/class using one of the RDF syntaxes, either RDF/XML, Notation 3, N-Triples or RDF/A. You should make sure your serialisation is well-formed according to the rules of the syntax used.
- Finally, you publish the RDF description on the web.
Declaring an RDF Property
So, for example, let's look at the skos:prefSymbol
property.
The URI http://www.w3.org/2004/02/skos/core#prefSymbol
has been allocated by the W3C (as owners of the URI) as the identifier for this property. The notation skos:prefSymbol
is a shorthand for this URI, where the prefix skos:
stands for http://www.w3.org/2004/02/skos/core#
.
The skos:prefSymbol
property is described by the following RDF statements, presented below as a visualisation of the RDF graph:
[IMG]
Note the following statements:
skos:prefSymbol rdf:type rdf:Property .
- This statement must be made for anything you wish to be treated as an RDF property.
skos:prefSymbol rdfs:label 'preferred symbol'@en .
- This should be a human-readable label for the property.
skos:prefSymbol rdfs:domain rdf:Resource .
- The domain of a property is the class of things you want to infer as the subject of statements involving the property. I.e. it is the class of things you want to use the property to make statements about. In this case, the domain is the class
rdf:Resource
because we want to use the propertyskos:prefSymbol
with any type of resource.
skos:prefSymbol rdfs:range foaf:Image .
- The range of a property is the class of things you want to infer as the object of statements involving the property. I.e. it is the class of things to be used as the value of the property. In this case, the range of
skos:prefSymbol
is the classfoaf:Image
because we want images to be used as the value of the property.
skos:prefSymbol skos:definition 'The preferred symbolic label for a resource.'@en .
- A property ought to have some human-readable description of what it means. You can use
skos:definition
for this.
skos:prefSymbol rdfs:comment 'No two concepts in the same concept scheme may have the same value for skos:prefSymbol.'@en .
- Use
rdfs:comment
for any human-readable information about the property.
skos:prefSymbol skos:example <http://www.w3.org/2004/02/skos/core/examples/prefSymbol.rdf.xml> .
- An example is always handy :)
skos:prefSymbol rdfs:isDefinedBy <http://www.w3.org/2004/02/skos/core> .
http://www.w3.org/2004/02/skos/core
is the URI of the resource where the definitive RDF description ofskos:prefSymbol
is published.
skos:prefSymbol vs:term_status 'testing' .
- Indicates the stability of the property, i.e. the degree of confidence you may have in it remaining persistently in an unchanged form.
skos:prefSymbol dct:issued '2004-03-26' .
- Housekeeping.
skos:prefSymbol dct:modified '2004-10-20' .
- Housekeeping
The complete serialisation of these statements, using the RDF/XML syntax, is below:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE rdf:RDF [ <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#"> <!ENTITY dc "http://purl.org/dc/elements/1.1/"> <!ENTITY dct "http://purl.org/dc/terms/"> <!ENTITY foaf "http://xmlns.com/foaf/0.1/"> <!ENTITY vs "http://www.w3.org/2003/06/sw-vocab-status/ns#"> <!ENTITY skos "http://www.w3.org/2004/02/skos/core#"> ]> <rdf:RDF xml:base="http://www.w3.org/2004/02/skos/core" xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;" xmlns:skos="&skos;" xmlns:dc="&dc;" xmlns:dct="&dct;" xmlns:vs="&vs;" xmlns:foaf="&foaf;"> <rdf:Property rdf:ID="prefSymbol"> <rdfs:label xml:lang="en">preferred symbol</rdfs:label> <rdfs:domain rdf:resource="&rdf;Resource"/> <rdfs:range rdf:resource="&foaf;Image"/> <skos:definition xml:lang="en">The preferred symbolic label for a resource.</skos:definition> <rdfs:comment xml:lang="en">No two concepts in the same concept scheme may have the same value for skos:prefSymbol.</rdfs:comment> <skos:example rdf:resource="http://www.w3.org/2004/02/skos/core/examples/prefSymbol.rdf.xml"/> <rdfs:isDefinedBy rdf:resource="http://www.w3.org/2004/02/skos/core"/> <vs:term_status>testing</vs:term_status> <dct:issued>2004-03-26</dct:issued> <dct:modified>2004-10-20</dct:modified> </rdf:Property> </rdf:RDF>
This RDF description is published (along with descriptions of the other classes and properties of SKOS Core) at http://www.w3.org/2004/02/skos/core - note that your server should be configured to deliver any RDF/XML content as content-type=application/rdf+xml
.
Declaring an RDFS Class
Let's look at the skos:Concept
class.
The URI for this class is http://www.w3.org/2004/02/skos/core#Concept
as allocated by the W3C.
The RDF description of this class looks like:
[IMG]
Note the following statements:
skos:Concept rdf:type rdfs:Class .
- Must be included for any class.
skos:Concept rdfs:label 'Concept'@en .
- As for properties, it's a good idea for classes to have human readable labels.
skos:Concept skos:definition 'An abstract idea or notion; a unit of thought.'@en .
- As for properties, it's a good idea for classes to have a human-readable description of their meaning. You can use
skos:definition
for this.
skos:Concept skos:example <http://www.w3.org/2004/02/skos/core/examples/Concept.rdf.xml> .
- An example is always handy :)
skos:Concept rdfs:isDefinedBy <http://www.w3.org/2004/02/skos/core> .
http://www.w3.org/2004/02/skos/core
is the URI of the resource where the definitive RDF description ofskos:Concept
is published.
skos:Concept vs:term_status 'testing' .
- Indicates the stability of the class, i.e. the degree of confidence you may have in it remaining persistently in an unchanged form.
skos:Concept dct:issued '2004-03-26' .
- Housekeeping.
skos:Concept dct:modified '2004-12-17' .
The complete serialisation of these statements, using the RDF/XML syntax, is below:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE rdf:RDF [ <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#"> <!ENTITY dc "http://purl.org/dc/elements/1.1/"> <!ENTITY dct "http://purl.org/dc/terms/"> <!ENTITY foaf "http://xmlns.com/foaf/0.1/"> <!ENTITY vs "http://www.w3.org/2003/06/sw-vocab-status/ns#"> <!ENTITY skos "http://www.w3.org/2004/02/skos/core#"> ]> <rdf:RDF xml:base="http://www.w3.org/2004/02/skos/core" xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;" xmlns:skos="&skos;" xmlns:dc="&dc;" xmlns:dct="&dct;" xmlns:vs="&vs;" xmlns:foaf="&foaf;"> <rdfs:Class rdf:ID="Concept"> <rdfs:label xml:lang="en">Concept</rdfs:label> <skos:definition xml:lang="en">An abstract idea or notion; a unit of thought.</skos:definition> <skos:example rdf:resource="http://www.w3.org/2004/02/skos/core/examples/Concept.rdf.xml"/> <rdfs:isDefinedBy rdf:resource="http://www.w3.org/2004/02/skos/core"/> <vs:term_status>testing</vs:term_status> <dct:issued>2004-03-26</dct:issued> <dct:modified>2004-12-17</dct:modified> </rdfs:Class> </rdf:RDF>
This RDF description is published (along with descriptions of the other classes and properties of SKOS Core) at http://www.w3.org/2004/02/skos/core - note that your server should be configured to deliver any RDF/XML content as content-type=application/rdf+xml
.
Scenario 1: Extension by Combination (Pic'n'Mix)
Now that you know how to declare RDF properties and RDFS classes, lets look at the first extension scenario, which is 'extension by combination' or 'Pic'n'Mix'.
RDF has been designed to allow RDF vocabularies such as SKOS Core to be used in combination with other RDF vocabularies such as Dublin Core, OWL and FOAF. In the above examples, properties from the rdf, rdfs, dct, vs and skos namespaces were used in combination to build a description of a class or property. The same goes when creating RDF descriptions of concepts ... you can use as much or as little of SKOS Core as you like, and you're perfectly free to invent your own properties and/or classes to use in combination with SKOS Core.
For example, you might want to use SKOS to help you describe in RDF the topic of interest of an environmental organisation. Here the first step is declare the class of environmental organisations, e.g. ...
@@TODO
The next step is to declare a property to represent the topic of interest relationship, e.g. ...
@@TODO
Now these two properties can be used to describe some environmental organisations, e.g. ...
@@@TODO
Of course, the range of possibilities is endless, and you are free to use any part of SKOS Core in combination with your own classes and properties as you see fit.
N.B. when using pic'n'mix bear in mind that generic applications that understand SKOS Core will just ignore anything unknown. To capture as much as possible of common semantics, and to maximise interoperability, we recommend that wherever possible you use the second scenario, that is extension by refinement.
@@TODO
Scenario 2: Extension by Refinement
@@TODO