Publishing 5-star Open Data

Table of Contents

A tutorial with practical examples of how to create and publish 5-star open data on the Web; originally written for the 2014 Web Intelligence Summer School “Web of Data” supported by

Université franco-allemande / Deutsch-Französische Hochschule

and updated for the 2015 Web Intelligence Summer School “Answering Questions with the Web”

Published online at http://clange.github.io/5stardata-tutorial/

1 Use case: event schedule and presenters of a summer school

Original data (HTML): schedule, presenters

2 ★ PDF

Cost and benefits of ★ Web data

schedule.pdf

To be honest, this PDF was exported from Excel, which is more than one star. But organisations really often “publish” data in PDF.

3 ★★ Excel (*.xls)

Cost and benefits of ★★ Web data

schedule.xls

Even though the old binary *.xls format is proprietary, it is not impossible to read this file outside of Excel:

perl -MSpreadsheet::ParseExcel -le '
  print Spreadsheet::ParseExcel->new()
    ->parse("2star_Excel/schedule.xls")
    ->worksheet("Schedule")
    ->get_cell(1,0)
    ->value();'

Output:

25 Aug 2014 09:00

It is harder, but still possible, to have questions answered such as “when is the first coffee break”.

Think of an algorithm that does the following:

  1. In the column titled “Event”, identify all cells whose value is “Coffee break”.
  2. On each row of such a cell, get the entry of the cell in the “Time” column.
  3. Sort these cells and return the smallest value.

However, free software libraries do not support all features of this file format. Here is what happens when we ask a popular free tool to determine the type of this file:

file 2star_Excel/schedule.xls

Output:

2star_Excel/schedule.xls: Composite Document File V2 Document, corrupt: Can't read SSAT

4 ★★★ OpenDocument (*.ods)

Cost and benefits of ★★★ Web data

schedule.ods

We can process this file with standard tools:

unzip -l 3star_OpenDocument/schedule.ods
Archive:  3star_OpenDocument/schedule.ods
  Length      Date    Time    Name
---------  ---------- -----   ----
       46  08-21-2014 08:13   mimetype
    52832  08-21-2014 08:13   Thumbnails/thumbnail.png
    27279  08-21-2014 08:13   styles.xml
    15227  08-21-2014 08:13   content.xml
      852  08-21-2014 08:13   meta.xml
     8774  08-21-2014 08:13   settings.xml
      899  08-21-2014 08:13   manifest.rdf
        0  08-21-2014 08:13   Configurations2/accelerator/current.xml
        0  08-21-2014 08:13   Configurations2/progressbar/
        0  08-21-2014 08:13   Configurations2/statusbar/
        0  08-21-2014 08:13   Configurations2/images/Bitmaps/
        0  08-21-2014 08:13   Configurations2/floater/
        0  08-21-2014 08:13   Configurations2/toolbar/
        0  08-21-2014 08:13   Configurations2/popupmenu/
        0  08-21-2014 08:13   Configurations2/toolpanel/
        0  08-21-2014 08:13   Configurations2/menubar/
     1093  08-21-2014 08:13   META-INF/manifest.xml
---------                     -------
   107002                     17 files

content.xml contains the actual tabular data, so we can process it using XPath/XQuery/XSLT tools such as Zorba:

zorba --serialize-text -q '
  declare namespace office="urn:oasis:names:tc:opendocument:xmlns:office:1.0";
  declare namespace table="urn:oasis:names:tc:opendocument:xmlns:table:1.0";
  doc("3star_OpenDocument/content.xml")//office:spreadsheet
    /table:table[@table:name="Schedule"]
    /table:table-row[2]/table:table-cell[1]'
25 Aug 2014 09:00

LibreOffice even stored this timestamp in a machine-friendly way. We'll realise the advantages of this later.

zorba --serialize-text -q '
  declare namespace office="urn:oasis:names:tc:opendocument:xmlns:office:1.0";
  declare namespace table="urn:oasis:names:tc:opendocument:xmlns:table:1.0";
  string(doc("3star_OpenDocument/content.xml")//office:spreadsheet
    /table:table[@table:name="Schedule"]
    /table:table-row[2]/table:table-cell[1]/@office:date-value)'
2014-08-25T09:00:00

5 ★★★☆ CSV

We need one CSV file per sheet:

6 ★★★★ CSV for the Web

Cost and benefits of ★★★★ Web data

From here onwards, the original 5-star open data examples use RDF. We will continue with CSV for a while, taking it to its limits, to point out that open data on the Web is not only RDF. We will introduce RDF in a later section.

The following examples roughly conform to Linked CSV, which was one of the original proposals for an RDF-conforming specification of CSV. The CSV on the Web Working Group is now taking a different approach. Their Working Draft on Generating RDF from Tabular Data on the Web suggests leaving the CSV untouched but providing complementary, external metadata annotations, e.g., in the form of JSON. This tutorial sticks with the simpler Linked CSV approach, which is self-contained in CSV.

6.1 Links using Web-scale identifiers

An example from the 3.5-star CSV:

Time,Event,Type,Presenter,Location
...
27 Aug 2014 09:00,Wikidata,Keynote,Markus Krötzsch,
27 Aug 2014 10:15,Working with Wikidata: A Hands-on Guide for Researchers and Developers,Tutorial,Markus Krötzsch,

Name,Affiliation,Town,Country
...
Markus Krötzsch,TU Dresden,Dresden,Germany

Give the presenter a unique identifier! On the Web, this means using a URI (Uniform Resource Identifier).

Time,Event,Type,Presenter,Location
...
2014-08-27T09:00:00+02:00,Wikidata,Keynote,http://purl.org/net/wiss2014/presenters/#markus,
2014-08-27T10:15:00+02:00,Working with Wikidata: A Hands-on Guide for Researchers and Developers,Tutorial,http://purl.org/net/wiss2014/presenters/#markus,

$id,Name,Affiliation,Town,Country
...
http://purl.org/net/wiss2014/presenters/#markus,Markus Krötzsch,TU Dresden,Dresden,Germany

(The timestamp format has also changed; we'll discuss this next.)

It is good practice to …

  • use HTTP URLs for such URIs,
  • choose them from a namespace that you own,
  • publish a machine-comprehensible, self-describing representation of the things identified by these URIs at that same URL,
  • so that any client who wants to know something about these things can easily look it up by downloading.

This approach is called linked data.

Linked data is essential for the Semantic Web – “a framework that allows data to be shared and reused across application, enterprise, and community boundaries”.

6.1.1 Dereferencing Linked Data Identifiers

The presenters in the summer school are now identified by URIs such as http://purl.org/net/wiss2014/presenters/#markus. As these are HTTP URLs, they can be dereferenced in order to download a description of a person. This is easiest to do by entering the URL into the address bar of a web browser, but a command-line HTTP client such as wget or cURL gives you more control.

wget -O - --header 'Accept: text/csv' 'http://purl.org/net/wiss2014/presenters/#markus'
--2015-09-02 11:21:11--  http://purl.org/net/wiss2014/presenters/
Resolving purl.org (purl.org)... 132.174.1.35
Connecting to purl.org (purl.org)|132.174.1.35|:80... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: http://www.iai.uni-bonn.de/~langec/wiss2014/presenters/ [following]
--2015-09-02 11:21:11--  http://www.iai.uni-bonn.de/~langec/wiss2014/presenters/
Resolving www.iai.uni-bonn.de (www.iai.uni-bonn.de)... 131.220.8.244
Connecting to www.iai.uni-bonn.de (www.iai.uni-bonn.de)|131.220.8.244|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://www.iai.uni-bonn.de/~langec/wiss2014/presenters/index.csv [following]
--2015-09-02 11:21:11--  http://www.iai.uni-bonn.de/~langec/wiss2014/presenters/index.csv
Reusing existing connection to www.iai.uni-bonn.de:80.
HTTP request sent, awaiting response... 200 OK
Length: 1499 (1.5K) [text/csv]
Saving to: 'STDOUT'
#,$id,Name,Affiliation,Town,Country
type,url,foaf:name,schema:affiliation,http://purl.org/net/wiss2014/vocab/#town,http://purl.org/net/wiss2014/vocab/#country
,http://purl.org/net/wiss2014/presenters/#soeren,Sören Auer,Universität Bonn;Fraunhofer IAIS,Bonn,Germany
,http://purl.org/net/wiss2014/presenters/#mathieu,Mathieu d'Aquin,,Milton Keynes,UK
,http://purl.org/net/wiss2014/presenters/#aba-sah,Aba-Sah Dadzie,University of Birmingham,Birmingham,UK
,http://purl.org/net/wiss2014/presenters/#jerome,Jérôme David,Université Pierre-Mendès-France;INRIA-LIG,Grenoble,France
,http://purl.org/net/wiss2014/presenters/#stefan,Stefan Decker,INSIGHT;National University of Ireland,Galway,Ireland
,http://purl.org/net/wiss2014/presenters/#paul,Paul Groth,VU Amsterdam,Amsterdam,Netherlands
,http://purl.org/net/wiss2014/presenters/#markus,Markus Krötzsch,TU Dresden,Dresden,Germany
,http://purl.org/net/wiss2014/presenters/#christoph,Christoph Lange,Universität Bonn;Fraunhofer IAIS,Bonn,Germany
,http://purl.org/net/wiss2014/presenters/#axel,Axel Polleres,WU Wien,Vienna,Austria
,http://purl.org/net/wiss2014/presenters/#eric,Eric Prud'hommeaux,W3C,,
,http://purl.org/net/wiss2014/presenters/#harald,Harald Sack,"HPI, Universität Potsdam",Potsdam,Germany
,http://purl.org/net/wiss2014/presenters/#thomas,Thomas Steiner,Université Lyon;Google,Lyon,France
,http://purl.org/net/wiss2014/presenters/#antoine,Antoine Zimmermann,École des mines de Saint-Étienne,Saint-Étienne,France

     0K .                                                     100% 17.7M=0s

2015-09-02 11:21:11 (17.7 MB/s) - written to stdout [1499/1499]

I will not go into full detail, but here are some observations, in the order of appearance:

  • I actually published the data in a place easily accessible for me: my personal webspace at the University of Bonn.
  • To publish the data in a sustainable way, independent from me leaving the University of Bonn, or the University of Bonn reorganising their IT infrastructure, I used the PURL (Persistent URL) redirection service.
  • The first redirect is due to the use of PURL.
  • The second redirect happens because we are using content negotiation to give data consumers a choice from multiple data formats. We will see another format, RDF/XML, below.
  • Instead of just the description of Markus Krötzsch, we get the descriptions of all presenters. This is because we lazily published all descriptions in the same file on the server and used hash (#) URIs for them. This approach is OK for small amounts of data. The part after the hash has to be interpreted by the client. Here, the client actually downloads http://purl.org/net/wiss2014/presenters/ from the server and then has to locate, inside the downloaded document, the fragment #markus by its own means.

Further background on publishing data on the Web can be found in the following specifications:

6.1.1.1 Dereferencing Example with cURL

Here is the same example as above, redone using cURL:

curl -i -H 'Accept: text/csv' -L 'http://purl.org/net/wiss2014/presenters/#markus'
HTTP/1.1 302 Moved Temporarily
Date: Wed, 02 Sep 2015 09:24:08 GMT
Server: 1060 NetKernel v3.3 - Powered by Jetty
Location: http://www.iai.uni-bonn.de/~langec/wiss2014/presenters/
Content-Type: text/html; charset=iso-8859-1
X-Purl: 2.0; http://localhost:8080
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Content-Length: 288

HTTP/1.1 302 Found
Date: Wed, 02 Sep 2015 09:24:08 GMT
Server: Apache
Location: http://www.iai.uni-bonn.de/~langec/wiss2014/presenters/index.csv
Content-Length: 248
Content-Type: text/html; charset=iso-8859-1

HTTP/1.1 200 OK
Date: Wed, 02 Sep 2015 09:24:08 GMT
Server: Apache
Last-Modified: Tue, 26 Aug 2014 04:44:11 GMT
ETag: "5db-50180f4611cc0"
Accept-Ranges: bytes
Content-Length: 1499
Content-Type: text/csv

#,$id,Name,Affiliation,Town,Country
type,url,foaf:name,schema:affiliation,http://purl.org/net/wiss2014/vocab/#town,http://purl.org/net/wiss2014/vocab/#country
,http://purl.org/net/wiss2014/presenters/#soeren,Sören Auer,Universität Bonn;Fraunhofer IAIS,Bonn,Germany
,http://purl.org/net/wiss2014/presenters/#mathieu,Mathieu d'Aquin,,Milton Keynes,UK
,http://purl.org/net/wiss2014/presenters/#aba-sah,Aba-Sah Dadzie,University of Birmingham,Birmingham,UK
,http://purl.org/net/wiss2014/presenters/#jerome,Jérôme David,Université Pierre-Mendès-France;INRIA-LIG,Grenoble,France
,http://purl.org/net/wiss2014/presenters/#stefan,Stefan Decker,INSIGHT;National University of Ireland,Galway,Ireland
,http://purl.org/net/wiss2014/presenters/#paul,Paul Groth,VU Amsterdam,Amsterdam,Netherlands
,http://purl.org/net/wiss2014/presenters/#markus,Markus Krötzsch,TU Dresden,Dresden,Germany
,http://purl.org/net/wiss2014/presenters/#christoph,Christoph Lange,Universität Bonn;Fraunhofer IAIS,Bonn,Germany
,http://purl.org/net/wiss2014/presenters/#axel,Axel Polleres,WU Wien,Vienna,Austria
,http://purl.org/net/wiss2014/presenters/#eric,Eric Prud'hommeaux,W3C,,
,http://purl.org/net/wiss2014/presenters/#harald,Harald Sack,"HPI, Universität Potsdam",Potsdam,Germany
,http://purl.org/net/wiss2014/presenters/#thomas,Thomas Steiner,Université Lyon;Google,Lyon,France
,http://purl.org/net/wiss2014/presenters/#antoine,Antoine Zimmermann,École des mines de Saint-Étienne,Saint-Étienne,France

6.2 Datatypes

With an alternative export configuration, the 3.5-star CSV may have ended up like this:

Time,Event,Type,Presenter,Location
08/25/2014 09:00:00,Introduction,,,
08/25/2014 09:15:00,Keynote,Keynote,Stefan Decker,

08/25/2014 is sufficiently unambiguous, but what does 01/02/03 mean?

  • 1 February 2003?
  • 2 January 2003?
  • 3 February 2001?
  • …?

If we don't know how to interpret date entries, we can't answer queries such as “when is the first coffee break”.

Also, if your family from a different timezone wanted to phone you in the lunch break, how do we know that 09:00:00 is in CEST?

So let's use an ISO 8601 conforming date and time format, with time zone information:

Time,Event,Type,Presenter,Location
2014-08-25T09:00:00+02:00,Introduction,,,
2014-08-25T09:15:00+02:00,Keynote,Keynote,http://purl.org/net/wiss2014/presenters/#stefan,

7 ★★★★☆ CSV with a schema

Let's continue to make our CSV even more self-describing, by introducing a schema (also called vocabulary on the Web of Data, or ontology, especially when it involves more complex formal logic).

7.1 A vocabulary of domain-specific concepts

We introduced linked data style URIs for the presenters (so that they describe themselves); let's also do it for other concepts, e.g. the types of presentations.

Let's introduce a domain-specific vocabulary.

Instead of a string "Keynote" let's use a self-describing URI:

,2014-08-25T09:15:00+02:00,Keynote,http://purl.org/net/wiss2014/vocab/#Keynote,http://purl.org/net/wiss2014/presenters/#stefan,

And let's create another CSV file for the vocabulary, where we define our terms:

$id,label,description,see also
#Keynote,keynote,a talk that establishes a theme,http://en.wikipedia.org/wiki/Keynote

The relative URI #Keynote works out if this file is published at http://purl.org/net/wiss2014/vocab/.

7.2 An explicit description of types

We introduced ISO 8601 timestamps, but how does a client know, without having to resort to heuristics, that the first column of schedule.csv is intended to be an ISO 8601 timestamp?

Time,Event,Type,Presenter,Location
2014-08-25T09:00:00+02:00,Introduction,,,

We also introduced a vocabulary, but how do we make explicit what we mean by “label”, “description” and “see also”?

Let's explicitly indicate the types!

For the timestamps and other entries in the schedule:

#,Time,Event,Type,Presenter,Location
type,time,string,url,url,string
,2014-08-25T09:00:00+02:00,Introduction,,,

(We'll get to the structure of the new, first column later.)

For the properties of vocabulary terms:

$id,label,description,see also
url,rdfs:label,rdfs:comment,rdfs:seeAlso
#Keynote,keynote,a talk that establishes a theme,http://en.wikipedia.org/wiki/Keynote

rdfs: is a well-known prefix that abbreviates a URI. rdfs:label (actually: http://www.w3.org/2000/01/rdf-schema#label) once more is a vocabulary term, in the widely used standard vocabulary RDF Schema. Its rdfs:comment is “A human-readable name for the subject.”. So, RDF Schema is a vocabulary for describing vocabularies. Such vocabularies are also known as ontology languages.

7.3 Distinguishing data and metadata

When a CSV has a type declaration row such as url,rdfs:label,rdfs:comment,rdfs:seeAlso, how do we know that this is metadata rather than data?

Let's make it explicit!

#,Time,Event,Type,Presenter,Location
type,time,string,url,url,string
,2014-08-25T09:00:00+02:00,Introduction,,,
  • When the first column has a type entry, we are in the type declaration row.
  • An empty first column means “data”.

7.4 More precise types for data columns

  • Is the title of an event really just a string?
  • Is the presenter really just a URI (that happens to point to a presenter)?

No! – Let's also reuse some standard vocabularies here!

Schedule:

#,Time,Event,Type,Presenter,Location
type,dct:date,dct:title,rdf:type,http://id.loc.gov/vocabulary/relators/pre,http://linkedevents.org/ontology/atPlace
,2014-08-25T09:15:00+02:00,Keynote,http://purl.org/net/wiss2014/vocab/#Keynote,http://purl.org/net/wiss2014/presenters/#stefan,

Presenters:

#,$id,Name,Affiliation,Town,Country
type,url,foaf:name,schema:affiliation,http://purl.org/net/wiss2014/vocab/#town,http://purl.org/net/wiss2014/vocab/#country
,http://purl.org/net/wiss2014/presenters/#soeren,Sören Auer,Universität Bonn;Fraunhofer IAIS,Bonn,Germany
  • We found a lot of reusable terms in standard vocabularies.
  • Linked Open Vocabularies (LOV) is a search engine that helps with this task.
  • Where didn't find perfectly reusable terms, we defined our own, in our vocabulary.

8 ★★★★★ RDF (and a comparison to CSV)

Cost and benefits of ★★★★★ Web data

More widely than CSV, the RDF data model is used for linked data.

Whenever a URI conforms to linked data, you can expect RDF there (usually in the ugly but widely supported RDF/XML encoding).

Let's therefore redo our example in RDF, and discuss some differences from CSV.

(For purely pragmatic reasons, the Turtle, which is what I edit, is all-in-one, whereas the RDF/XML is in split files for easier deployment.)

<#day1intro>
        dct:date "2014-08-25T09:00:00+02:00"^^xsd:date ;
        dct:title "Introduction" .

CSV is based on records (one per row, with a fixed number of columns).

RDF is based on triples (subject–predicate–object statements).

Usually more than one triple belongs to a subject (resource), which is why it's convenient to group them.

Usually every resource has an identifier. (In the CSV, our events didn't have any.)

You can precisely indicate the datatype of an object, but you also have to do it always, except when the datatype is string.

<#day1keynote>
        a wv:Keynote ;
        dct:date "2014-08-25T09:15:00+02:00"^^xsd:date ;
        dct:title "Keynote" ;
        marcrel:pre <http://purl.org/net/wiss2014/presenters/#stefan> .

It's no problem for different resources to have different numbers of properties.

Compare sparsely populated CSV:

#,Time,Event,Type,Presenter,Location
type,dct:date,dct:title,rdf:type,http://id.loc.gov/vocabulary/relators/pre,schema:location
,2014-08-25T09:00:00+02:00,Introduction,,,

On the other hand, the CSV data model has a built-in order, which RDF does not have. Order can be expressed in RDF, but doing so leads to a high complexity. In the specification on Generating RDF from Tabular Data on the Web, compare the “minimal” RDF representation of a CSV table to the “standard” representation that preserves information about the tabular structure.

For one subject and predicate, there can be multiple objects. In the CSV we had to cheat:

,2014-08-26T18:00:00+02:00,Hackathon dinner,http://purl.org/net/wiss2014/vocab/#Dinner;http://purl.org/net/wiss2014/vocab/#Hackathon,,Maison des Élèves
,http://purl.org/net/wiss2014/presenters/#stefan,Stefan Decker,INSIGHT;National University of Ireland,Galway,Ireland

In RDF, that's no problem:

<#day2hackathondinner>
        rdf:type wv:Dinner, wv:Hackathon ;
        dct:date "2014-08-26T18:00:00+02:00"^^xsd:date ;
        dct:title "Hackathon dinner" ;
        schema:location "Maison des Élèves" .

<http://purl.org/net/wiss2014/presenters/#stefan>
        foaf:name "Stefan Decker" ;
        schema:affiliation "INSIGHT", "National University of Ireland" ;
        wv:town "Galway" ;
        wv:country "Ireland" .

Vocabulary definitions are no problem in RDF either, as RDF Schema itself has an RDF-based syntax:

wv:Hackathon
        rdfs:label "hackathon" ;
        rdfs:comment "an event of intensive collaboration on a software project" ;
        rdfs:seeAlso <http://dbpedia.org/resource/Hackathon> .

Here, we introduced a custom prefix to abbreviate the URI of our vocabulary. Here's how prefixes are declared:

@prefix dct: <http://purl.org/dc/terms/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix marcrel: <http://id.loc.gov/vocabulary/relators/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix schema: <http://schema.org/> .
@prefix wv: <http://purl.org/net/wiss2014/vocab/#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

This is just syntactic sugar, not part of the RDF data model.

Note that the rdfs:seeAlso link points to DBpedia. DBpedia is a linked dataset extracted from Wikipedia.

8.1 Publishing RDF

Linked data clients usually expect data to be published as RDF, and RDF/XML is the most widely supported serialization of RDF. Therefore, we have also published our data as RDF/XML:

wget --quiet -O - --header 'Accept: text/rdf+xml' 'http://purl.org/net/wiss2014/presenters/#markus'
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <rdf:Description rdf:about="http://purl.org/net/wiss2014/presenters/#stefan">
    <ns1:country xmlns:ns1="http://purl.org/net/wiss2014/vocab/#">Ireland</ns1:country>
    <ns2:town xmlns:ns2="http://purl.org/net/wiss2014/vocab/#">Galway</ns2:town>
    <ns3:affiliation xmlns:ns3="http://schema.org/">INSIGHT</ns3:affiliation>
    <ns4:affiliation xmlns:ns4="http://schema.org/">National University of Ireland</ns4:affiliation>
    <ns5:name xmlns:ns5="http://xmlns.com/foaf/0.1/">Stefan Decker</ns5:name>
  </rdf:Description>
</rdf:RDF>

A few notes:

  • This RDF/XML was auto-generated from the Turtle source and therefore looks a bit unfriendly.
  • Additionally, it is good practice to also publish a human-comprehensible version of your data in HTML. Here, we did not do this.
  • We configured RDF/XML to be the content served by default. Therefore, it is also served when no specific content type is requested via the Accept HTTP request header.

This is the .htaccess configuration file that implements this behaviour in the Apache web server:

AddType application/rdf+xml .rdf
AddType text/csv .csv

RewriteEngine On
RewriteBase /~langec/wiss2014/
RewriteCond %{HTTP_ACCEPT} !application/rdf\+xml.*(text/csv)
RewriteCond %{HTTP_ACCEPT} text/csv
RewriteRule ^(presenters|schedule|vocab)/$ $1/index.csv [R=302]

RewriteRule ^(presenters|schedule|vocab)/$ $1/index.rdf [R=302]

9 ★★★★★☆ Further possible improvements

Additional stars have been suggested for publishing data …

Also recall that our original use case started from an HTML homepage. With the following standards it's possible to embed linked data into HTML:

10 Credits

The idea for this tutorial was inspired by Antoine Zimmermann. The motivation was to prepare something for the 2014 Web Intelligence Summer School “Web of Data” that's not too heavily biased towards RDF.

This summer school was funded by

Université franco-allemande / Deutsch-Französische Hochschule

This document was created with Emacs Org mode.

The icon for highlighting external links is reused from MediaWiki, developed by the Wikimedia Foundation. Its source code is licensed under GPL version 2 and whose homepage content is licensed under the Creative Commons Attribute-ShareAlike 3.0 Unported License.

11 License and Citation

88x31.png
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Here is how you can cite this using BibTeX (BibLaTeX recommended):

@misc{Lange:5StarData2015,
  title = {Publishing 5-star Open Data},
  author = {Christoph Lange},
  note = {Tutorial at the Web Intelligence Summer School ``Answering Questions with the Web''},
  year = {2015},
  date = {2015-09-01},
  venue = {Saint-{\'E}tienne, France},
  url = {http://clange.github.io/5stardata-tutorial/},
}

Date: <2015-09-01 Tue>

Author: Christoph Lange

Created: 2015-09-03 Thu 09:17

Validate