Fork me on GitHub
SKOS Play : introduction

What is "SKOS Play" ?

SKOS Play is an application to render and visualise thesaurus, taxonomies or controlled vocabularies expressed in SKOS.

With SKOS Play you can print Knowledge Organization Systems that use the SKOS data model in HTML or PDF documents, and visualize them in graphical representations. SKOS Play is intended to demonstrate some of the possibilities of enterprise vocabularies usage and web of data technologies.

With SKOS Play you can also generate SKOS files from Excel spreadsheets.

What is it for ?

Is it free ?


Is is open-source ?

Yes, the code is published on Github. SKOS Play has for the time being a CC-BY-SA licence :

Anyway, contact me if in doubt.
These licensing terms may evolve in the future.

Does SKOS Play keep a copy of the submitted data ?


Who build it ?

Thomas Francart for Sparna.

What are the licences of included examples ?

Suggest more.

I have a question, I need feature XYZ, I would like to contribute.

Nice !


What is SKOS ?

SKOS is a data model to share and link knowledge organisation systems on the Web. This model is defined by the W3C here.

Where can I find SKOS data ?


How can I write or generate a SKOS file ?

Use the SKOS generator included in SKOS Play.

Try Tematres (open-source), Ginco (open-source). There are also commercial solutions of course.

You can also simply write or generate a file with this structure, save it with *.ttl extension, and make sure it is encoded in UTF-8 :
# declare this header in the top of the file
@prefix rdf: <> .
@prefix skos: <> .
# modify this prefix to suit your namespace
@prefix me: <> .

# declare a concept scheme that represents the thesaurus, one time at the top of the file
me:MyThesaurus a skos:ConceptScheme .
me:MyThesaurus skos:prefLabel "Name of the thesaurus here"@en .

# then declare concepts. Here is one
me:Vehicle a skos:Concept .
# for each concept you need to say it is part of the thesaurus
me:Vehicle skos:inScheme me:MyThesaurus .
# and then declare its preferred label (the one that will appear on-screen)
me:Vehicle skos:prefLabel "Vehicle"@en .

# here is a second concept
me:Car a skos:Concept .
me:Car skos:inScheme me:MyThesaurus .
me:Car skos:prefLabel "Car"@en .
# this is an alternate label, you can put multiple ones by repeating the line
me:Car skos:altLabel "Automobile"@en .
# and then say that me:Car is a more specific concept than me:Vehicle
me:Car skos:broader me:Vehicle .

# and here is a third concept
me:123456 a skos:Concept .
me:123456 skos:inScheme me:MyThesaurus .
me:123456 skos:prefLabel "Bicycle"@en .
me:123456 skos:altLabel "Bike"@en .
me:123456 skos:altLabel "Two-wheeler"@en .
me:123456 skos:broader me:Vehicle .

SKOS Play : how does it work ?

How does it look like under the hood ?

SKOS Play is based on Eclipse RDF4J, the only sensible choice for enterprise semantic technologies applications. Data visualisation are created with d3js, PDF with Apache FOP. All of that uses SPARQL to query the data
Schematically, there are 4 layers in the application :

  1. Loading/processing RDF with RDF4J;
  2. SKOS-specific queries to navigate the data (see algorithm below);
  3. Transformation of SKOS data into "printable" structure using JAXB, then from this structure to HTML or PDF using XSLT;
  4. The screens of the application itself, using servlets, JSP & JSPL, Jquery, Bootstrap.

How is the tree data structure generated from SKOS ?

Good question. SKOS data model is flexible and SKOS data can come in multiple variations, choices has to be made.

Part of the algorithm followed by SKOS Play relies on the interpretation of Collections as ThesaurusArray. A ThesaurusArray is a Collection that is explicitely typed as such, or for which we find that it contains only Concepts that have the same parent, or Concepts that have no parent.

Here is the algorithm that SKOS Play follows to try to accomodate diverse situations :

What are the language supported ?

It depends on the data : the list of languages is dynamically fetched from the data.

What are the supported RDF syntaxes ?

All of the syntaxes supported by RDF4J : RDF/XML, Turtle, N3, N-triples, TriG, TriX...

How many concepts can SKOS Play handle ?

For the time being, SKOS Play is limited to 5000 concepts, to avoid overloading the server.
Theoretically, there is no limit, but in practice, for alphabetical or hierarchical rendering, I would avoid more than 5000 concepts to limit the output file size. For dataviz, I would say that above 2000 concepts you can't see anything and you have big latencies when zooming.

Is SKOS-XL supported ?

Yes ! there is a dedicated option to read SKOS-XL labels. You can uncheck it to save some time.

Is there a web service, an API ? is feature foo-bar supported ?

There is no API. But ask a question on the forum and express your interest, and this may be added one day in the future.